From 6ed13af6bd99d9d2b8070ea6a6e15fac5efa80aa Mon Sep 17 00:00:00 2001 From: Brent Date: Sat, 10 May 2025 12:44:48 -0500 Subject: [PATCH 1/4] Updated dependency. --- .changeset/plain-clouds-cheer.md | 5 + package.json | 2 +- pnpm-lock.yaml | 155 ++++++++++++++++--------------- 3 files changed, 84 insertions(+), 78 deletions(-) create mode 100644 .changeset/plain-clouds-cheer.md diff --git a/.changeset/plain-clouds-cheer.md b/.changeset/plain-clouds-cheer.md new file mode 100644 index 00000000..43ad5903 --- /dev/null +++ b/.changeset/plain-clouds-cheer.md @@ -0,0 +1,5 @@ +--- +'@smooai/utils': patch +--- + +Updated dependency. diff --git a/package.json b/package.json index 5b7ada74..4c27822a 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@oclif/core": "^2.0.0", "@oclif/plugin-help": "^6.2.26", "@oclif/plugin-plugins": "^5.4.34", - "@smooai/logger": "^1.0.24", + "@smooai/logger": "^1.2.0", "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "find-up": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0bf090bc..8e579d9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,8 +19,8 @@ importers: specifier: ^5.4.34 version: 5.4.34 '@smooai/logger': - specifier: ^1.0.24 - version: 1.0.24 + specifier: ^1.2.0 + version: 1.2.0 '@standard-schema/spec': specifier: ^1.0.0 version: 1.0.0 @@ -1024,16 +1024,16 @@ packages: resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.1.1': - resolution: {integrity: sha512-FZUtpiDnPZQmuIl4lfbdO+u3foNLmRCKct/2w2nRwgB99Yvaq4SHcfxyzMfxkyBrBmgnF1kdXzhHNXN7ycDvWg==} + '@smithy/config-resolver@4.1.2': + resolution: {integrity: sha512-7r6mZGwb5LmLJ+zPtkLoznf2EtwEuSWdtid10pjGl/7HefCE4mueOkrfki8JCUm99W6UfP47/r3tbxx9CfBN5A==} engines: {node: '>=18.0.0'} '@smithy/core@3.3.1': resolution: {integrity: sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.0.3': - resolution: {integrity: sha512-UdNvGjZnunS9+45gHYtVXDynoWH1X0tYY0pS368k1zUZum6Mm4ivU4Se0WhFJf8jNocD+p94khzTtrx4ha3OOQ==} + '@smithy/credential-provider-imds@4.0.4': + resolution: {integrity: sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA==} engines: {node: '>=18.0.0'} '@smithy/fetch-http-handler@5.0.2': @@ -1064,12 +1064,12 @@ packages: resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.1.3': - resolution: {integrity: sha512-w7fJjCSqdTVTs1o1O7SRZm+Umf6r/FzkdlO5OH6tboASeUeugnMgQAs7gnc2dXvJVJtEGrmrBgPZFPxq3wWyzw==} + '@smithy/middleware-endpoint@4.1.4': + resolution: {integrity: sha512-qWyYvszzvDjT2AxRvEpNhnMTo8QX9MCAtuSA//kYbXewb+2mEGQCk1UL4dNIrKLcF5KT11dOJtxFYT0kzajq5g==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.1.4': - resolution: {integrity: sha512-QtWuD7bd7AAEFKvBmLQdOax25bXv4BACLQNWi3ddvpWwUUSAkAku9mzI+28jbjg48qw28lbzJ+YoYbbaXhLUjw==} + '@smithy/middleware-retry@4.1.5': + resolution: {integrity: sha512-eQguCTA2TRGyg4P7gDuhRjL2HtN5OKJXysq3Ufj0EppZe4XBmSyKIvVX9ws9KkD3lkJskw1tfE96wMFsiUShaw==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.0.3': @@ -1080,8 +1080,8 @@ packages: resolution: {integrity: sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.1.0': - resolution: {integrity: sha512-gmPsv6L3ZRlBinv+vtSGUwfhTMh4+SgjbgGdX7bqYEs3Ys5RYVQtLuZ/WgZZdxn8QrDSUqLmTWunLM96WyM7UQ==} + '@smithy/node-config-provider@4.1.1': + resolution: {integrity: sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw==} engines: {node: '>=18.0.0'} '@smithy/node-http-handler@4.0.4': @@ -1116,8 +1116,8 @@ packages: resolution: {integrity: sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.2.3': - resolution: {integrity: sha512-j/RRx6N007rJQ3qyjN4yuX9B0bxTn9ynDVxYQ43mcs7fluVJXmQGquy0TrWJfOPZcIikpY377GunZ2UK90GHYQ==} + '@smithy/smithy-client@4.2.4': + resolution: {integrity: sha512-oolSEpr/ABUtVmFMdNgi6sSXsK4csV9n4XM9yXgvDJGRa32tQDUdv9s+ztFZKccay1AiTWLSGsyDj2xy1gsv7Q==} engines: {node: '>=18.0.0'} '@smithy/types@4.2.0': @@ -1152,16 +1152,16 @@ packages: resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.0.11': - resolution: {integrity: sha512-Z49QNUSKbEj7JVZqaSUZkTkexRciQBbmonJ8AMar4fA0S2kvVpgjeVyGXnZYWTFzkgEwStacjFq4cQKbaQ8AnQ==} + '@smithy/util-defaults-mode-browser@4.0.12': + resolution: {integrity: sha512-0vPKiC+rXWMq397tsa/RFcO/kJ1UsibgNCXScMsRwzm9WMT4QjGf43zVPWZ5hPLu3z/1XddiZFIlKcu2j/yUuQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.0.11': - resolution: {integrity: sha512-y9UYcXjz4ry5sDPX40Vy6224Cw2/dch+wET6giaRoeXpyh56DCUVxW+Mgc/gO2uczAKktWd4ZWs2LWcW+PHz3Q==} + '@smithy/util-defaults-mode-node@4.0.12': + resolution: {integrity: sha512-zCx9noceM3Pw2jvcJ3w3RbvKnPe3lCo6txH9ksZj6CeRZPkvRZPLXmKVSOvDr9QQP3VRq/WnBLd+LTZAL7+0IQ==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.0.3': - resolution: {integrity: sha512-284PZFhCMdudqq61/E67zJ3i10gCYrMBjXcMg3h048qI39gTXQCCeNZvtJhL4vrj9yMpJ/y9M+Ek7V0o5tak3w==} + '@smithy/util-endpoints@3.0.4': + resolution: {integrity: sha512-VfFATC1bmZLV2858B/O1NpMcL32wYo8DPPhHxYxDCodDl3f3mSZ5oJheW1IF91A0EeAADz2WsakM/hGGPGNKLg==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.0.0': @@ -1217,8 +1217,8 @@ packages: peerDependencies: typescript: ^5.8.2 - '@smooai/logger@1.0.24': - resolution: {integrity: sha512-KvCd+Kvq00Wx67+iXleOG/HpnAFvsdPZ3Mci/wWbqguDCygfgyHHYD4ZUlwSeqVyyfYGa2iv/MV+zlGAboPgyQ==} + '@smooai/logger@1.2.0': + resolution: {integrity: sha512-S0cS9P/P9wtPo9tLKd/ZF5iSMKIUu9iAcz9cLmMaoWxGjVFSEQXQRSsjXQQ0f6JbyhmfBeHJurtUWKArwKh5vw==} engines: {node: '>=20.0.0'} '@standard-schema/spec@1.0.0': @@ -4011,29 +4011,29 @@ snapshots: '@aws-sdk/util-endpoints': 3.806.0 '@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-node': 3.806.0 - '@smithy/config-resolver': 4.1.1 + '@smithy/config-resolver': 4.1.2 '@smithy/core': 3.3.1 '@smithy/fetch-http-handler': 5.0.2 '@smithy/hash-node': 4.0.2 '@smithy/invalid-dependency': 4.0.2 '@smithy/md5-js': 4.0.2 '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.3 - '@smithy/middleware-retry': 4.1.4 + '@smithy/middleware-endpoint': 4.1.4 + '@smithy/middleware-retry': 4.1.5 '@smithy/middleware-serde': 4.0.3 '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/node-http-handler': 4.0.4 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.11 - '@smithy/util-defaults-mode-node': 4.0.11 - '@smithy/util-endpoints': 3.0.3 + '@smithy/util-defaults-mode-browser': 4.0.12 + '@smithy/util-defaults-mode-node': 4.0.12 + '@smithy/util-endpoints': 3.0.4 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 '@smithy/util-utf8': 4.0.0 @@ -4055,28 +4055,28 @@ snapshots: '@aws-sdk/util-endpoints': 3.806.0 '@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-node': 3.806.0 - '@smithy/config-resolver': 4.1.1 + '@smithy/config-resolver': 4.1.2 '@smithy/core': 3.3.1 '@smithy/fetch-http-handler': 5.0.2 '@smithy/hash-node': 4.0.2 '@smithy/invalid-dependency': 4.0.2 '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.3 - '@smithy/middleware-retry': 4.1.4 + '@smithy/middleware-endpoint': 4.1.4 + '@smithy/middleware-retry': 4.1.5 '@smithy/middleware-serde': 4.0.3 '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/node-http-handler': 4.0.4 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.11 - '@smithy/util-defaults-mode-node': 4.0.11 - '@smithy/util-endpoints': 3.0.3 + '@smithy/util-defaults-mode-browser': 4.0.12 + '@smithy/util-defaults-mode-node': 4.0.12 + '@smithy/util-endpoints': 3.0.4 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 '@smithy/util-utf8': 4.0.0 @@ -4088,11 +4088,11 @@ snapshots: dependencies: '@aws-sdk/types': 3.804.0 '@smithy/core': 3.3.1 - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/property-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 '@smithy/signature-v4': 5.1.0 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 '@smithy/util-middleware': 4.0.2 fast-xml-parser: 4.4.1 @@ -4114,7 +4114,7 @@ snapshots: '@smithy/node-http-handler': 4.0.4 '@smithy/property-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 '@smithy/util-stream': 4.2.0 tslib: 2.8.1 @@ -4129,7 +4129,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity': 3.806.0 '@aws-sdk/nested-clients': 3.806.0 '@aws-sdk/types': 3.804.0 - '@smithy/credential-provider-imds': 4.0.3 + '@smithy/credential-provider-imds': 4.0.4 '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 '@smithy/types': 4.2.0 @@ -4146,7 +4146,7 @@ snapshots: '@aws-sdk/credential-provider-sso': 3.806.0 '@aws-sdk/credential-provider-web-identity': 3.806.0 '@aws-sdk/types': 3.804.0 - '@smithy/credential-provider-imds': 4.0.3 + '@smithy/credential-provider-imds': 4.0.4 '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 '@smithy/types': 4.2.0 @@ -4210,7 +4210,7 @@ snapshots: '@aws-sdk/middleware-sdk-sqs@3.806.0': dependencies: '@aws-sdk/types': 3.804.0 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 '@smithy/util-hex-encoding': 4.0.0 '@smithy/util-utf8': 4.0.0 @@ -4240,28 +4240,28 @@ snapshots: '@aws-sdk/util-endpoints': 3.806.0 '@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-node': 3.806.0 - '@smithy/config-resolver': 4.1.1 + '@smithy/config-resolver': 4.1.2 '@smithy/core': 3.3.1 '@smithy/fetch-http-handler': 5.0.2 '@smithy/hash-node': 4.0.2 '@smithy/invalid-dependency': 4.0.2 '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.3 - '@smithy/middleware-retry': 4.1.4 + '@smithy/middleware-endpoint': 4.1.4 + '@smithy/middleware-retry': 4.1.5 '@smithy/middleware-serde': 4.0.3 '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/node-http-handler': 4.0.4 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.11 - '@smithy/util-defaults-mode-node': 4.0.11 - '@smithy/util-endpoints': 3.0.3 + '@smithy/util-defaults-mode-browser': 4.0.12 + '@smithy/util-defaults-mode-node': 4.0.12 + '@smithy/util-endpoints': 3.0.4 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 '@smithy/util-utf8': 4.0.0 @@ -4272,7 +4272,7 @@ snapshots: '@aws-sdk/region-config-resolver@3.806.0': dependencies: '@aws-sdk/types': 3.804.0 - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/types': 4.2.0 '@smithy/util-config-provider': 4.0.0 '@smithy/util-middleware': 4.0.2 @@ -4298,7 +4298,7 @@ snapshots: dependencies: '@aws-sdk/types': 3.804.0 '@smithy/types': 4.2.0 - '@smithy/util-endpoints': 3.0.3 + '@smithy/util-endpoints': 3.0.4 tslib: 2.8.1 '@aws-sdk/util-locate-window@3.804.0': @@ -4316,7 +4316,7 @@ snapshots: dependencies: '@aws-sdk/middleware-user-agent': 3.806.0 '@aws-sdk/types': 3.804.0 - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/types': 4.2.0 tslib: 2.8.1 @@ -5101,9 +5101,9 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/config-resolver@4.1.1': + '@smithy/config-resolver@4.1.2': dependencies: - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/types': 4.2.0 '@smithy/util-config-provider': 4.0.0 '@smithy/util-middleware': 4.0.2 @@ -5120,9 +5120,9 @@ snapshots: '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.0.3': + '@smithy/credential-provider-imds@4.0.4': dependencies: - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/property-provider': 4.0.2 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 @@ -5168,23 +5168,23 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.1.3': + '@smithy/middleware-endpoint@4.1.4': dependencies: '@smithy/core': 3.3.1 '@smithy/middleware-serde': 4.0.3 - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/shared-ini-file-loader': 4.0.2 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-middleware': 4.0.2 tslib: 2.8.1 - '@smithy/middleware-retry@4.1.4': + '@smithy/middleware-retry@4.1.5': dependencies: - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/protocol-http': 5.1.0 '@smithy/service-error-classification': 4.0.3 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 @@ -5201,7 +5201,7 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.1.0': + '@smithy/node-config-provider@4.1.1': dependencies: '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 @@ -5257,10 +5257,10 @@ snapshots: '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/smithy-client@4.2.3': + '@smithy/smithy-client@4.2.4': dependencies: '@smithy/core': 3.3.1 - '@smithy/middleware-endpoint': 4.1.3 + '@smithy/middleware-endpoint': 4.1.4 '@smithy/middleware-stack': 4.0.2 '@smithy/protocol-http': 5.1.0 '@smithy/types': 4.2.0 @@ -5305,27 +5305,27 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.0.11': + '@smithy/util-defaults-mode-browser@4.0.12': dependencies: '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 bowser: 2.11.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.0.11': + '@smithy/util-defaults-mode-node@4.0.12': dependencies: - '@smithy/config-resolver': 4.1.1 - '@smithy/credential-provider-imds': 4.0.3 - '@smithy/node-config-provider': 4.1.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/credential-provider-imds': 4.0.4 + '@smithy/node-config-provider': 4.1.1 '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.3 + '@smithy/smithy-client': 4.2.4 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.0.3': + '@smithy/util-endpoints@3.0.4': dependencies: - '@smithy/node-config-provider': 4.1.0 + '@smithy/node-config-provider': 4.1.1 '@smithy/types': 4.2.0 tslib: 2.8.1 @@ -5390,7 +5390,7 @@ snapshots: dependencies: typescript: 5.8.2 - '@smooai/logger@1.0.24': + '@smooai/logger@1.2.0': dependencies: '@aws-sdk/client-sqs': 3.806.0 '@opentelemetry/api': 1.9.0 @@ -5399,6 +5399,7 @@ snapshots: esm-utils: 4.4.2 json-stable-stringify: 1.3.0 lodash.merge: 4.6.2 + picocolors: 1.1.1 serialize-error: 11.0.3 source-map-support: 0.5.21 uuid: 9.0.1 From 14bc0f945f01c69052c337791bceefb1e5b15cf8 Mon Sep 17 00:00:00 2001 From: Brent Date: Sat, 2 Aug 2025 12:43:39 -0400 Subject: [PATCH 2/4] Enhance Hono logger with additional context and fix to include request method and path for better traceability --- .changeset/breezy-candies-hear.md | 5 +++++ src/api/hono.ts | 13 +++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 .changeset/breezy-candies-hear.md diff --git a/.changeset/breezy-candies-hear.md b/.changeset/breezy-candies-hear.md new file mode 100644 index 00000000..1eed7b76 --- /dev/null +++ b/.changeset/breezy-candies-hear.md @@ -0,0 +1,5 @@ +--- +'@smooai/utils': patch +--- + +Fix hono logger to have more context. diff --git a/src/api/hono.ts b/src/api/hono.ts index 4e1e5e43..3a62e6b4 100644 --- a/src/api/hono.ts +++ b/src/api/hono.ts @@ -18,14 +18,15 @@ export function addHonoMiddleware(_app: Hono): Hono { const app = _app ?? new Hono(); app.use(requestId()); - app.use( + app.use(async (c, next) => { honoLogger((str, ...rest) => { + const namespace = `[${c.req.method}] ${c.req.path}`; + logger.addRequestContext(c.req); + logger.addContext({ + namespace, + honoRequestId: c.get('requestId'), + }); logger.info(str, ...rest); - }), - ); - app.use(async (c, next) => { - logger.addContext({ - honoRequestId: c.get('requestId'), }); await next(); }); From e63295e0a21d0a2c7e699d87d586bd77048df186 Mon Sep 17 00:00:00 2001 From: Brent Date: Fri, 22 Aug 2025 10:30:09 -0400 Subject: [PATCH 3/4] Add utility for generating git branch names using OpenAI; create branch, optionally pull latest main, and enhance logging and user prompts --- .gitignore | 4 +- package.json | 9 +- pnpm-lock.yaml | 32 ++++++ src/api/hono.ts | 27 +++-- src/utils/generate-git-branch.ts | 165 +++++++++++++++++++++++++++++++ src/utils/zx-factory.ts | 22 +++++ tsup.config.ts | 2 + 7 files changed, 251 insertions(+), 10 deletions(-) create mode 100644 src/utils/generate-git-branch.ts create mode 100644 src/utils/zx-factory.ts diff --git a/.gitignore b/.gitignore index 61bd6652..0deed53a 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,6 @@ yarn.lock # ignore package-lock.json package-lock.json -.vscode \ No newline at end of file +.vscode + +.envrc \ No newline at end of file diff --git a/package.json b/package.json index 9e30912a..fe61e95d 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ } }, "bin": { - "create-entry-points": "./dist/scripts/createEntryPoints.js" + "create-entry-points": "./dist/scripts/createEntryPoints.js", + "generate-git-branch": "./dist/scripts/generateGitBranch.js" }, "files": [ "dist/**" @@ -58,6 +59,7 @@ "ci:publish": "pnpm build && pnpm changeset publish", "createEntryPoints": "pnpm vite-node ./src/scripts/createEntryPoints.ts -i \"src/**/*.ts\"", "format": "prettier --write \"**/*.{ts,tsx,md,json,js,cjs,mjs}\"", + "generateGitBranch": "pnpm vite-node ./src/utils/generate-git-branch.ts", "preinstall": "npx only-allow pnpm", "lint": "eslint src/", "lint:fix": "eslint src/ --fix", @@ -77,8 +79,11 @@ "hono": "^4.7.2", "http-status-codes": "^2.3.0", "libphonenumber-js": "^1.12.4", + "openai": "^5.15.0", + "picocolors": "^1.1.1", "zod": "^3.24.2", - "zod-validation-error": "^3.4.0" + "zod-validation-error": "^3.4.0", + "zx": "^8.8.1" }, "devDependencies": { "@changesets/cli": "^2.28.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 682b916c..ce70ce30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,12 +39,21 @@ importers: libphonenumber-js: specifier: ^1.12.4 version: 1.12.5 + openai: + specifier: ^5.15.0 + version: 5.15.0(zod@3.24.2) + picocolors: + specifier: ^1.1.1 + version: 1.1.1 zod: specifier: ^3.24.2 version: 3.24.2 zod-validation-error: specifier: ^3.4.0 version: 3.4.0(zod@3.24.2) + zx: + specifier: ^8.8.1 + version: 8.8.1 devDependencies: '@changesets/cli': specifier: ^2.28.1 @@ -2982,6 +2991,18 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + openai@5.15.0: + resolution: {integrity: sha512-kcUdws8K/A8m02I+IqFBwO51gS+87GP89yWEufGbzEi8anBz4FB/bti2QxaJdGwwY4mwJGzx85XO7TuL/Tpu1w==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4008,6 +4029,11 @@ packages: zod@3.24.2: resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + zx@8.8.1: + resolution: {integrity: sha512-qvsKBnvWHstHKCluKPlEgI/D3+mdiQyMoSSeFR8IX/aXzWIas5A297KxKgPJhuPXdrR6ma0Jzx43+GQ/8sqbrw==} + engines: {node: '>= 12.17.0'} + hasBin: true + snapshots: '@ampproject/remapping@2.3.0': @@ -7372,6 +7398,10 @@ snapshots: dependencies: mimic-function: 5.0.1 + openai@5.15.0(zod@3.24.2): + optionalDependencies: + zod: 3.24.2 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -8400,3 +8430,5 @@ snapshots: zod: 3.24.2 zod@3.24.2: {} + + zx@8.8.1: {} diff --git a/src/api/hono.ts b/src/api/hono.ts index 3a62e6b4..b4140ce4 100644 --- a/src/api/hono.ts +++ b/src/api/hono.ts @@ -1,6 +1,6 @@ import { isRunningLocally } from '@/env'; import { HumanReadableSchemaError } from '@/validation/standardSchema'; -import AwsServerLogger from '@smooai/logger/AwsServerLogger'; +import AwsServerLogger, { HttpResponse } from '@smooai/logger/AwsServerLogger'; import { APIGatewayProxyEventV2, Context } from 'aws-lambda'; import { Hono } from 'hono'; import { handle, LambdaContext, LambdaEvent } from 'hono/aws-lambda'; @@ -18,14 +18,27 @@ export function addHonoMiddleware(_app: Hono): Hono { const app = _app ?? new Hono(); app.use(requestId()); + app.use(async (c, next) => { + const namespace = `[${c.req.method}] ${c.req.path}`; + logger.addRequestContext(c.req); + logger.addContext({ + namespace, + honoRequestId: c.get('requestId'), + }); + logger.info(`Request started`); + await next(); + }); + + app.use(async (c, next) => { + const start = Date.now(); + await next(); + const duration = Date.now() - start; + logger.addResponseContext(c.res as unknown as HttpResponse); + logger.info(`Request completed in ${duration}ms`); + }); + app.use(async (c, next) => { honoLogger((str, ...rest) => { - const namespace = `[${c.req.method}] ${c.req.path}`; - logger.addRequestContext(c.req); - logger.addContext({ - namespace, - honoRequestId: c.get('requestId'), - }); logger.info(str, ...rest); }); await next(); diff --git a/src/utils/generate-git-branch.ts b/src/utils/generate-git-branch.ts new file mode 100644 index 00000000..b767519d --- /dev/null +++ b/src/utils/generate-git-branch.ts @@ -0,0 +1,165 @@ +#!/usr/bin/env tsx +import { createInterface } from 'node:readline'; +import OpenAI from 'openai'; +import pc from 'picocolors'; +import { $$ } from './zx-factory'; + +interface BranchGenerationOptions { + pullFromMain?: boolean; +} + +async function requestUserInput(prompt: string): Promise { + const rl = createInterface({ + input: process.stdin, + output: process.stdout, + }); + + return new Promise((resolve) => { + rl.question(pc.cyan(prompt), (answer: string) => { + rl.close(); + const trimmedAnswer = answer.trim(); + if (trimmedAnswer) { + console.log(pc.green(`→ ${trimmedAnswer}`)); + } + resolve(trimmedAnswer); + }); + }); +} + +async function generateBranchName(workDescription: string): Promise { + const openaiApiKey = process.env.OPENAI_API_KEY; + + if (!openaiApiKey || typeof openaiApiKey !== 'string') { + throw new Error('OPENAI_API_KEY is not configured'); + } + + const openai = new OpenAI({ + apiKey: openaiApiKey, + }); + + const prompt = `Generate a git branch name for the following work description. +The branch name should be: +- Descriptive but concise (max 40 characters to leave room for date) +- Use kebab-case (lowercase with hyphens) +- Avoid special characters except hyphens +- Be meaningful and related to the work +- DO NOT include any dates, timestamps, or time-related information +- Focus on the feature/change being implemented + +Work description: ${workDescription} + +Return only the branch name, nothing else.`; + + try { + const completion = await openai.chat.completions.create({ + model: 'gpt-4o-mini', + messages: [ + { + role: 'user', + content: prompt, + }, + ], + max_tokens: 50, + temperature: 0.3, + }); + + const branchName = completion.choices[0]?.message?.content?.trim(); + + if (!branchName) { + throw new Error('Failed to generate branch name from OpenAI'); + } + + // Clean up the branch name to ensure it's valid + const cleanedBranchName = branchName + .replace(/[^a-zA-Z0-9\-_/]/g, '-') // Replace invalid characters with hyphens + .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen + .replace(/^-|-$/g, '') // Remove leading/trailing hyphens + .replace(/\d{4}-\d{2}-\d{2}/g, '') // Remove date patterns (YYYY-MM-DD) + .replace(/\d{2}-\d{2}-\d{4}/g, '') // Remove date patterns (MM-DD-YYYY) + .replace(/-+/g, '-') // Replace multiple hyphens again after date removal + .replace(/^-|-$/g, '') // Remove leading/trailing hyphens again + .toLowerCase(); + + // Add today's date in YYYY-MM-DD format + const today = new Date(); + const dateString = today.toISOString().split('T')[0]; // YYYY-MM-DD format + + return `${cleanedBranchName}-${dateString}`; + } catch (_error) { + console.error('Error generating branch name:', _error); + throw _error; + } +} + +async function createAndSwitchToBranch(branchName: string, options: BranchGenerationOptions = {}): Promise { + const { pullFromMain = true } = options; + + console.log(`\n${pc.blue('🔄')} Creating branch: ${pc.bold(branchName)}`); + + try { + // Create and switch to the new branch using proper zx syntax + await $$`git checkout -b ${branchName}`; + + if (pullFromMain) { + console.log(pc.yellow('📥 Pulling latest changes from main...')); + try { + // First, fetch the latest changes + await $$`git fetch origin`; + + // Then merge the latest main into the new branch + await $$`git merge origin/main`; + console.log(pc.green('✅ Successfully pulled and merged latest changes from main')); + } catch (_error) { + console.warn(pc.yellow('⚠️ Warning: Could not pull from main. You may need to resolve conflicts manually.')); + } + } + + console.log(`\n${pc.green('🎉')} Successfully created and switched to branch: ${pc.bold(pc.green(branchName))}`); + console.log(`${pc.cyan('📝')} Ready to start working on: ${pc.bold(branchName)}`); + } catch (_error) { + console.error(pc.red(`Git command failed`)); + process.exit(1); + } +} + +async function main(): Promise { + try { + console.log(pc.bold(pc.blue('🚀 Git Branch Generator'))); + console.log(pc.blue('======================\n')); + + // Request work description from user + const workDescription = await requestUserInput('Please describe the work you want to do: '); + + if (!workDescription) { + console.error(pc.red('❌ Work description cannot be empty')); + process.exit(1); + } + + // Ask about pulling from main + const pullFromMainInput = await requestUserInput('\nPull latest changes from main after creating branch? (y/n, default: y): '); + const pullFromMain = pullFromMainInput.toLowerCase() !== 'n' && pullFromMainInput.toLowerCase() !== 'no'; + + console.log(`\n${pc.magenta('🤖')} Generating branch name with AI...`); + + // Generate branch name using OpenAI + const branchName = await generateBranchName(workDescription); + + console.log(`${pc.green('✨')} Generated branch name: ${pc.bold(pc.green(branchName))}`); + + // Confirm with user + const confirm = await requestUserInput(`\nCreate branch "${pc.bold(branchName)}"? (y/n, default: y): `); + + if (confirm.toLowerCase() === 'n' || confirm.toLowerCase() === 'no') { + console.log(pc.red('❌ Branch creation cancelled')); + process.exit(0); + } + + // Create and switch to the branch + await createAndSwitchToBranch(branchName, { pullFromMain }); + } catch (error) { + console.error(pc.red('❌ Error:'), error); + process.exit(1); + } +} + +main(); diff --git a/src/utils/zx-factory.ts b/src/utils/zx-factory.ts new file mode 100644 index 00000000..81927102 --- /dev/null +++ b/src/utils/zx-factory.ts @@ -0,0 +1,22 @@ +import { $ } from 'zx'; + +// Base zx instance with configuration +export const $$ = $({ + verbose: false, +}); + +// Quiet zx instance for silent operations +export const $$quiet = $({ quiet: true }); + +// Factory function to create zx instances with custom options +export function createZxInstance(options: { cwd?: string; quiet?: boolean; verbose?: boolean } = {}) { + return $({ + verbose: options.verbose ?? false, + quiet: options.quiet ?? false, + ...options, + }); +} + +// Common patterns +export const $$cwd = (cwd: string) => createZxInstance({ cwd }); +export const $$quietCwd = (cwd: string) => createZxInstance({ cwd, quiet: true }); diff --git a/tsup.config.ts b/tsup.config.ts index f7ea91af..7ede8a9d 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -5,7 +5,9 @@ export default defineConfig((options: Options) => ({ 'src/index.ts', 'src/validation/standardSchema.ts', 'src/validation/phoneNumber.ts', + 'src/utils/zx-factory.ts', 'src/utils/sleep.ts', + 'src/utils/generate-git-branch.ts', 'src/scripts/createEntryPoints.ts', 'src/file/findFile.ts', 'src/error/errorHandler.ts', From bffc865e95c8d310f577ea6e87f7848e846af0ef Mon Sep 17 00:00:00 2001 From: Brent Date: Fri, 22 Aug 2025 10:44:03 -0400 Subject: [PATCH 4/4] Added changeset --- .changeset/plenty-donkeys-visit.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/plenty-donkeys-visit.md diff --git a/.changeset/plenty-donkeys-visit.md b/.changeset/plenty-donkeys-visit.md new file mode 100644 index 00000000..5770b2dd --- /dev/null +++ b/.changeset/plenty-donkeys-visit.md @@ -0,0 +1,5 @@ +--- +'@smooai/utils': patch +--- + +Add utility for using AI to generate branch name, and improve hono logging.