{"_id":"@apholdings/jensen-ai","_rev":"76-db4b2b5ac24c5d51dd9043bb5bae6804","name":"@apholdings/jensen-ai","dist-tags":{"fork":"3.0.0","latest":"3.0.0"},"versions":{"0.0.1":{"name":"@apholdings/jensen-ai","version":"0.0.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@apholdings/jensen-ai@0.0.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"9b23d197adfe6e8476755ecdf811bb96b298634f","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.0.1.tgz","fileCount":168,"integrity":"sha512-PiR6C6xE3YmmbAG3mVA1s0V/wiyA0v8pEx2U0VAwKcgJAB8wG6c3yQ0M2MDFzI+jRz2XmS67aus7qu1pGrJrgQ==","signatures":[{"sig":"MEQCIFKQ2VgK+xhs0RkqABZ4LTyHZGM/0721xryQSwIwV4NPAiB3aRRTL+7YJq2oEAlF7tsmIcrHxY5nDMR5aTdfHdpw5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3534764},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"8906f12cb9620f5252b47c875dfb35db6e439c90","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"10.9.4","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.0.1_1773414310297_0.5066715185838668","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@apholdings/jensen-ai","version":"0.0.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.0.2","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"e2867379756f412cf5b0d83d9e225beed5b92543","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.0.2.tgz","fileCount":168,"integrity":"sha512-aFjqTG7yP8F3PvV991tCqIFAvBSIo47LTgWPCZS7ReQ+zNl1LrfHA1xJuWNmlUtSXktyhrgldKpPyJlez+z5cQ==","signatures":[{"sig":"MEYCIQCC7yJpuHlvUuG1m2QJ/zHLPGmD44n8nJg61j7gdLIEoQIhAJlS/+6KS3FXjAXuJmRy/0c97Q0RqP9/BjlVcdQ5BYX8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3532556},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"f7df58455f48fbd6d6b753fe41d40ed912d2a5ce","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.11.1","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.0.2_1773581135020_0.933360582623618","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@apholdings/jensen-ai","version":"0.1.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.1.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"524e83c4b1db9f9b301bd02534cdc816729d3c83","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.1.0.tgz","fileCount":168,"integrity":"sha512-BDiEcdDo6LuN5rSBy7iQl7tnBbBLRUgtHC+JMy53p7Zw5DUSaSOoAn7c9jHOocq1st2zQPZPpX7C4r8qkFv+dg==","signatures":[{"sig":"MEUCIQCv5Uo6uF4RfOHu5XDddZoLGwPraiKczoQgFr1BHhWNHgIgRkcMhQRllvIkepnFLebsBqPbyeesDzEg4aXpoVpUsEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3537424},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"d6b21295ab200e955f033493ede808002017c907","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"10.9.4","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.1.0_1773599422425_0.1506938555457562","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@apholdings/jensen-ai","version":"0.1.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.1.2","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"ec103304989db34631bd44f3d0dac093363ddb07","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.1.2.tgz","fileCount":172,"integrity":"sha512-G+SnVeDKgseZ6xZI1PnPUTiod6qkf3HteZj31R4SV5U0xZFE+RqrWJo5c/Fy2GGTWN80ZOyY6yvUO7qP+4H++g==","signatures":[{"sig":"MEQCICtbFA6lNu3LJJEs+1dhgp+cBidbJoHLS37ZHAvHD0zwAiAzD4iueT/38YSeLNlpdMN7sHEkvT7K2+VlyUG1aI9FQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3687865},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"ce9c5b118e39dc4a31788ff0b7d475da541b2aca","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.11.1","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.1.2_1773859821313_0.8299110299901096","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@apholdings/jensen-ai","version":"0.1.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.1.3","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"8bd56bdc5dbbf9f0dba200033c58dbc05dd2fddf","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.1.3.tgz","fileCount":172,"integrity":"sha512-vSIX274TuaHLTqn/Q10PooWf9xIAWTTtRAlG4LL0vavyymlCB4+HSso2dXQ/ewLnSLlp/d+PGQOFM5GvP3Psgw==","signatures":[{"sig":"MEUCIQC2pqHEkdQBr0EHS5/7QNC2k8M+G1veLEP+XGh7yKye4AIgMPuPKaH5rhbXc+hnQalcecjOXzcQlxNIwZpQpqWjTkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3687855},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"9eaf1fca217822f7a7ea1cb3597537d675b837d0","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.1.3_1773945112070_0.5388135904353486","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@apholdings/jensen-ai","version":"0.1.4","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.1.4","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"ad7798872ee78249a912345d713d9cbc59bdb098","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.1.4.tgz","fileCount":172,"integrity":"sha512-VicMyqkpeTic6VWdqwih0fdr0NgvlMOfuZUVijkDmkPXWXA7DqhgA7vfO3oHCYDU4oYSSIsX9qBgVj9H9QpXxw==","signatures":[{"sig":"MEQCID3qM4ee3zDpe/GfVL+yMK1FQGXbYDPMi3D/xvRBL0NYAiB0ilYO4hOVXwuWlqqjdw6O3gitdrJqFV64irJqcIW+7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3687855},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"dadee676c51fdebd99ed594e6233e8d8042350f5","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.1.4_1773946635722_0.7632036229815855","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@apholdings/jensen-ai","version":"0.1.5","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.1.5","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"a7fb68a17d1b4c0fe555b4805a1c5262deb75d82","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.1.5.tgz","fileCount":172,"integrity":"sha512-PInQytBdMCm1mywRPoPSjCikqrKriGnbw1ftgX5BHoGYBVpR+JwF+gUufiKoFJ+tt551J7MDwCpm5Kuv91vt5A==","signatures":[{"sig":"MEYCIQC/mrWkksQOE3mkOT4p9+qAiLMEz2PAzZTz7LGOVhUC7QIhAKqGfEOaFKtryTcwi6eIv0KYgARNR/xzEGpCbylffeqP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3690314},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"b061bb6b6b0400ccd1d5252913efcb2abdaec27a","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.11.1","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.1.5_1774068557790_0.8189422572876428","host":"s3://npm-registry-packages-npm-production"}},"0.57.2":{"name":"@apholdings/jensen-ai","version":"0.57.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.57.2","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"1cc0b8533d32c99951fc6aa957aa22ec9708ef58","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.57.2.tgz","fileCount":172,"integrity":"sha512-An9cJ/Hk6AEsqwok67UFzjJ3nAQmrA+6DVM6VPjcd5YtHHHeB784jXfsuiPk1ma5qd/QWk0OsGBhvse2OHZJEA==","signatures":[{"sig":"MEUCIQDU3M4JmhvhDzit0SgNPHznVpr1ygEEZTDDxNBLUlyQhgIgN3VxJfsjvqfICSv94tJGIdH4brP0t2di7C9Xit6thpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3690334},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.11.1","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.57.2_1774099843634_0.656155900297617","host":"s3://npm-registry-packages-npm-production"}},"0.57.3":{"name":"@apholdings/jensen-ai","version":"0.57.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.57.3","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"f188ee3b6b07c7f6ae5203ab1d2d0ae1ba466fa8","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.57.3.tgz","fileCount":172,"integrity":"sha512-Po0sv9HyA6sfua4poX8kPEArOBcb2ax/usU9+LrjySvkJqqIhfchx6kXmFpBhl6O5O6E6HCG6zvBZog06p0FyQ==","signatures":[{"sig":"MEUCIEdmBmVML/6YCl88Z+rXHxbUHocduIPBJiEuRukSqwZ2AiEAoXHnTLZnS3vJq2ABOUgHUrEgi9o6lUcZK93suFatQfE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3690334},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"0b5023ec2ba9f7fc563a1a5f407a62e2a2c03e6b","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.11.1","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.57.3_1774109185730_0.001486528548930055","host":"s3://npm-registry-packages-npm-production"}},"0.57.4":{"name":"@apholdings/jensen-ai","version":"0.57.4","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.57.4","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"9da502f60ab238efb7dada9ba13acf6d92649a00","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.57.4.tgz","fileCount":172,"integrity":"sha512-Jd2VW/a6CL7KDW/mQwrj5bO5uzqpQw8EEbigs8pGaS+ORCJdKoJtahc0ZvLY1EswkOLtmGBEncR3QiQe52HgGA==","signatures":[{"sig":"MEYCIQD7xrdkLC7XYk119NHG2MnYo5gI+X1ONEns3FdF0NmTKQIhAP6kWCxnyppjGEyB8LuyIFSjs2qEXgeVf0rOCvjVaUk+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3690334},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"bd2eed8b0c3e4f4b83cbb9f0f393d86dbeebff2a","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.11.1","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.57.4_1774109543793_0.08037905042861038","host":"s3://npm-registry-packages-npm-production"}},"0.57.5":{"name":"@apholdings/jensen-ai","version":"0.57.5","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.57.5","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"318a78861f6b9444abd22a3eb2f9fbe0376624bc","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.57.5.tgz","fileCount":172,"integrity":"sha512-wvXVbaSXSbk1MTIrlRPr9GkRoIk7H8YkZvvck5f2w0AlseKUUDaYW2/Ndxjet5CnQtEYrG4pYuaOsM3p5qtk0A==","signatures":[{"sig":"MEUCIELlY+NBNo9tS3x5X58m3Nic7TI8P5yCt74/c+1wLT4KAiEA7Lo/FS+CxyQZ4VBXx3DhowtVNFT1yfgoQiMHr2k6weI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3702582},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"ffe87312dead9600ece83f16e7e14313bb747d00","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.57.5_1774361829902_0.46467919587854944","host":"s3://npm-registry-packages-npm-production"}},"0.57.6":{"name":"@apholdings/jensen-ai","version":"0.57.6","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.57.6","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"ac490e73dfa254f8e763d17e0b2fcdc5425be7ef","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.57.6.tgz","fileCount":172,"integrity":"sha512-K6MqKAVa4Fw/JHr2ZjrMzuZfE93FLCgkWBVAcqEt9vq/Unic4GFNt13xjmUUNS5DZiEdtaRbCeggusf0l93lQg==","signatures":[{"sig":"MEQCIHsAIRet0v67NX26PcayGuBgUObmPPxLdra9z2wvG4noAiBdUrhTa0hHCtbBMRAPmvJbnJ12cJuidrP7kQ+9eKE+WA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3707833},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"5f7898e9cfc6d9e031ede5b343244e64e1e67429","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.57.6_1774559844370_0.18649871240668925","host":"s3://npm-registry-packages-npm-production"}},"0.57.7":{"name":"@apholdings/jensen-ai","version":"0.57.7","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@0.57.7","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"ea63d315c8c24140f8bf7ebe1e0a4342d9014b29","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-0.57.7.tgz","fileCount":172,"integrity":"sha512-+0IgHpFK86r/D1jKPt3P+NF/lXdx7vQ5FuLXUaHesIFyd654JVhNemTbVfg+ocMVoMGrb5Sh7F53AevEqhx2mw==","signatures":[{"sig":"MEUCIQC/TGdLVJsm0Q7QGV8l8r2VG3oqsUdQ42OoX3eUQIZbKAIgFv/wYKay/uIWthgCVNtjzGmUnWh6P2cUGiILBvFG+V4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3707833},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"e7384d19bb1eb66545bd7706232b8594b8786f55","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.73.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.983.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_0.57.7_1774614628129_0.47407099348750137","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@apholdings/jensen-ai","version":"1.0.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"4c6843377a9fb41b7ce49c53da1989a25624d70e","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.0.tgz","fileCount":172,"integrity":"sha512-68a5xosUgGeVpcDvbVpXVnLvbKe+kDLVuRIAej6ua0lNydDYJBAiuIYtLHpjX3u2G86jEJCkLad8Y4FkDZOyOQ==","signatures":[{"sig":"MEUCIQDw9A5s8FjAlpSxc+oLPPvoq+KTGh56BD/o3Yby77bR9QIgGKefVmb5tep+mXTXFIDMZw4UBux8Ns5R0ifsByYcsuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3758088},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"e1d048089daf45512ef522c68ed2fcdfc7bbcfa1","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.0_1775310894814_0.5826106417449628","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@apholdings/jensen-ai","version":"1.0.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"e0599125cff50852fb1ba267cbee9b8a1ab0e47f","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.1.tgz","fileCount":172,"integrity":"sha512-SNY2TY4tjOxLsE9PBx6N9csm4jdr6EsAmVrswQUDoLh7k7YeNfGFmfZ090g7Yfie0hK4js0hjXNkdTl4vMvgxg==","signatures":[{"sig":"MEUCIQDBZnMpDIeTcH3Z1lNwB3Pw9BHVudBAGOg5ntLGna3JNAIgKIrhs0ei3IVnIkljp8aPArMiQ+MMpZVdspVaE3yGk5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3758088},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"c7cbfb9b8c17c0a72e75a40c063bd3cbdb6dc431","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.1_1775313689166_0.43189984529791725","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@apholdings/jensen-ai","version":"1.0.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.3","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"bd3c8f72abce4042c37282d1dd8f03d11bc0e380","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.3.tgz","fileCount":172,"integrity":"sha512-zRT+npgRUd976CnyLI81HW4DK+7LOunigxmWqmtM66BKDPgO5Dvli3M0tW/CtUdj5pi2yhSmsKVwOeP5Ya1/XQ==","signatures":[{"sig":"MEYCIQCjLixeKgu9vWFtJ1XTVB5Iojjrn9wWUH1y7X/SqjOS/wIhANakOsRGp3/UbOPSfFBbES8Ytj2gVeRIBtjMkhvsAl1a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3748245},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"0a7c1daf83d2b476871fb2ff069aee0eff5aa3de","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.3_1775421802612_0.28285032358909","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@apholdings/jensen-ai","version":"1.0.5","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.5","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"753245aa44da8d609fa0702c6381b0b36a1f5296","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.5.tgz","fileCount":172,"integrity":"sha512-M4OXue2XDATY/MKnjDLBRXGkaC6ap+Dx2oKeeoHPCi6LjHy1mOU21HhYZzy5w5c0sE++lwZ/aeJ8W5mIGVDl+A==","signatures":[{"sig":"MEYCIQC5JUkt/E+mOu2aKHYFTOp7nMQm/Ev8Q+tWUpu1XsMysgIhAOn5TnAv2Or9vuIrDbVQIkZdfYWR18C1wq0kfsVA8Vsm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3793724},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"aa03e5668bb079328ae1a6d1363696c56c4fbe14","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.5_1776725104588_0.20909363857423569","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@apholdings/jensen-ai","version":"1.0.6","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.6","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"a1c042e77c6b56b52b694dfeebfc55d4d43a0e65","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.6.tgz","fileCount":172,"integrity":"sha512-iYo/o6b1ZoGoujK2UMLzrJGh4ZexXoa4f0TC0SNVJxy4QUKyeV2I9ZTuToQ2WOy7fwonReIdxbk3YOZUdFIsXQ==","signatures":[{"sig":"MEUCIQDAaOMCKdX/sWI2tiAT+Drxcug/lNBHywMT+ykrcst9QwIga/wAuEsE3gDk7wg/2KeZhTdIwwc44pVoH4z0E1SdPHY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3864772},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"aa03e5668bb079328ae1a6d1363696c56c4fbe14","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.6_1778805651809_0.07854670739882152","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@apholdings/jensen-ai","version":"1.0.7","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.7","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"4c3bebdebc0296865d05d7e0c013d51f6b670e7b","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.7.tgz","fileCount":172,"integrity":"sha512-XHawL0Ug/A/zmfALWr7zC+/xHHinrlQRq+vg0AhoPTRQzLZ2D3LwKI7q2QumJlywXQfLZObfB/RR8nFiJkqZzA==","signatures":[{"sig":"MEUCIQCgvPggTrig3MDampE43BR4oY4HymROhfqKHBhO90UZ5wIgJbZS3FAFfWMv8Wxsa42Jq6mdbMCW+ACD998TxDZZhyU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3789328},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"5757adfb510854ac62e74e665efb13ef72b3c9d1","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.7_1780283414088_0.16326982371997678","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@apholdings/jensen-ai","version":"1.0.8","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.8","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"b5010e67128711fe0d3d3e3cd7042248268a288e","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.8.tgz","fileCount":172,"integrity":"sha512-SxLHwzH7D1J+hIPkMVu/wWLKKejwf9rSmIPHtbj+gF/qmF/nlCVkj+AV+Cr6PJxJXuKqQU6q/Uh4nFcvgp100A==","signatures":[{"sig":"MEQCIAJh+MQC0bL8qeDR0T+9Jvip2WxGC8WWbrrrfr3ZwyRMAiAf1Lsve+GYdwDEOzGhvgh+SfFI1ZOyXWG/gPpPDEaoxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3922678},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"32acab006e37aa1431cbcce7c0cc1a87cf281188","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.8_1782487486866_0.8987264391325474","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@apholdings/jensen-ai","version":"1.0.9","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.0.9","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"9fbff1b2051df5403f9d63d383d98aca3b743386","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.0.9.tgz","fileCount":172,"integrity":"sha512-qY0qBu/nCle1tZNPH2ewbZeNMCb48vjNfOty4i1XoZsCWhXNVRVgizNj6P1La29anQLoA3Ur9LnF3vD8TimFFQ==","signatures":[{"sig":"MEQCICVY6XV/5aGzVYKglvSmHYQWacmQ8VDJRVtEYIDs76BzAiBYucvXRCh2uBfd6L2T2vb+XB2kXw7Q7kv1PHUnP0wQew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3950021},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"8363ef64d485c5b1da92f2c30e5ccdb9d5edd216","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.0.9_1783266162993_0.12604249512250654","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@apholdings/jensen-ai","version":"1.1.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"b6c0fcdd367caea8c462c2614c91c6658c80b38b","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.0.tgz","fileCount":172,"integrity":"sha512-Hc0XpmXyN5yTQHWu8TWwBO2lV94XPUdAA11auNrBqASe0Wrvk4+ys2aKuwQaCTw52jZrruVmgA8LT4T1Iqax/w==","signatures":[{"sig":"MEQCIHFqnPdDBwWefmR8y1Kh8boeU5WBvuR9ZOVWrPbm5u8qAiA5s1Ya9/2YHzlWWxlPLSxBf6vcW0txFftNVq8dYivQcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3952686},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"63c687a17d6e001fccd0cbc717d66fd78a37185b","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.0_1783342866972_0.5635298159631106","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@apholdings/jensen-ai","version":"1.1.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"4fbd0599207267923d34e2c2fe110be877c7fffa","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.1.tgz","fileCount":172,"integrity":"sha512-PqaiFttscSjlVxRsqK19lQ5JqbbSvpNyNXOpnwNMsDrocwJeYKsmR6AflmXRzSjlC4RkAt15bQjGGYrBzuKGOA==","signatures":[{"sig":"MEUCIQDml51stGXK3lwzP1xHNv6GRPstU5/MYfYFI4c6CORW8AIgAL78Z1Fv+lMA4pe0byOs+jFwPuzzyZNmOZFjEPdeEaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3974531},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"b0346edda17bb5a1e54c4e9c7e8e35f0d019db7c","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.1_1783478568249_0.7931726879538925","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@apholdings/jensen-ai","version":"1.1.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.2","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"280f582e24adb43b0b700d7fddf0e772ba71540a","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.2.tgz","fileCount":172,"integrity":"sha512-eTuTqGELVh52Bbc+mvzcqL1pb1gQetyleOevF71kc9risFIkodEDBPtZQIHXnWRp5B2R7IS72tLiTmycPLLFMQ==","signatures":[{"sig":"MEUCIQC/1gfNJpZCmdWAIKw56wWy08QHGkSV25Cb0ZJtNTFrpQIgTR+0Fe3U1gFsls8tFlIKHsUULWZw7e9v9VUl9s8C8P0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3985815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"c8a46175497a52604669e7303fbecbc8b4730ba4","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.2_1783617163048_0.5568094905025704","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@apholdings/jensen-ai","version":"1.1.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.3","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"f1bee8f07c10ef16d13ed629ce8e25cc3bf40246","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.3.tgz","fileCount":172,"integrity":"sha512-ugycWhMo1d8074UZ8QUho1tP9sJzgualhBCLrhDyItflT2nYMqEM4kE05bdXFVYnloneHpTQ5zE3OnkpZtqP9g==","signatures":[{"sig":"MEUCIQC+rnxqATx8Mm6WJrEtSaCPq23kV4wIzlqp8opKXP5rnQIgDpwxGl/N1q8SH5DoyVo5BVHT2/896+VwTZKEbkO1Zr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3993009},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"b75082843853b50d265e7f10502f3f609343e996","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.3_1783617938695_0.4247900759334744","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@apholdings/jensen-ai","version":"1.1.4","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.4","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"4d9961a40dd861313a4d3f8f872daa095a732b7b","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.4.tgz","fileCount":172,"integrity":"sha512-yN3qTUT3HnGytVTx2EyWS81RlxBx8tg4bsJD5QEPUNlCE6IY39ePmtvbRwus0qlzS/4z1oq0zwgrbjHZ4hDXXw==","signatures":[{"sig":"MEUCIQDt0H1uelzkVwBZYWx1KPpa7G/s30ljKKaAW+fbBAjxPAIgEvf+Dvl2q21SzQl8k/mN4WxMFqkRT6sxJ8TMYIv1KZI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4033662},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"b8a3f0a314fa8df327377c716c92f0da1ca0b3c8","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.4_1784025519037_0.14639332889622336","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@apholdings/jensen-ai","version":"1.1.5","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.5","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"e8d4582ef436288a37aad19d88165da8f5a8b892","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.5.tgz","fileCount":172,"integrity":"sha512-aE+4wmul763vWu6NPibPAryvrBBT86zFpejvFzp4LyNEKi14ai00dIvPOsm8PAyYKu39tAlzaHr3P02o/MbeBg==","signatures":[{"sig":"MEUCIBvPjL1hCuylxppkNVq90m2MAbdQyhaAq8lp/ZzGlcRaAiEAt0holeZNsJxiN+KHacVJ7A5CNpY74yRAY/hOWXRv2Bw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4033662},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"c8ba7c666c88c2c84ec2d5fc3989b65e98c77316","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.5_1784026290195_0.8159518973870903","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@apholdings/jensen-ai","version":"1.1.6","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.6","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"3a45b2157aebc99023c6a2c357034cd0c8e1fb2c","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.6.tgz","fileCount":172,"integrity":"sha512-pN+bF7A/LmsSRE9opavxM8gjPg14/PTH/5hOBUB12v5H5aulHM8499xTKBvagWc3BcCMMcT4qLFihWqrcDitDg==","signatures":[{"sig":"MEQCIGIWN9ezLA1RDiH8MNVNpU2AEfdX57FmxjhiTIkvb8dyAiBZrSGllmTwHZ+3YTBBAmySTutuxYBHKz75FYNkiH+zgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4048358},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"8a3b244d53f5a5831db0586382502d663476476e","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.6_1784576842548_0.6962711887116411","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@apholdings/jensen-ai","version":"1.1.7","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.7","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"4abe526e9b96663083322b2a733a2b56d2a3e470","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.7.tgz","fileCount":172,"integrity":"sha512-5aJj3cNAP+9dAx826Ke4eAShAS36d1XZKWN82v6TX7Vsomjoji0KM/SOKKKyHCZrSBuLKYQw0MWLEqkD880f8g==","signatures":[{"sig":"MEYCIQD/10h4OAQZU1TGZ3SVtcW5qrIXsSvcaM22jqgtykqD0AIhAKrBKOw8GkdFMurOG6GaTVi46y+x/dHOOPAZK2u60i+I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@1.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4075676},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"808a773a328d4dbb2d2f6d63f94ec829118e4f86","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.18.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.7_1784657118360_0.4817954990162905","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@apholdings/jensen-ai","version":"1.1.8","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.8","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"c7e52862be9da5846ac90535a7285c0f0b9b7db7","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.8.tgz","fileCount":172,"integrity":"sha512-5pFNjArTGnok+79jP65JjzyWtqTWS6d3glsX8QiKIz27q4ng3JXpI51Co0QrDTtGZkQTXnrKS8l/QLjJEa21Bw==","signatures":[{"sig":"MEYCIQC/hYQvV3dYuXavVtmwVavjfKSdN0r3CwAivP9UE8W7OwIhAL/JmS4ZuI6JaQ5AS5HwZBIVQ3GRsfJw17xDaMNYwM2m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@1.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4089395},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"dda8d07c968bbe4fd5b3abdc97fe945bfc1da7fd","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.18.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.8_1784837533733_0.4178871116762721","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@apholdings/jensen-ai","version":"1.1.9","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.9","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"bc91e57bc8d8c39019eaec7f2320d9c5bfa3b88d","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.9.tgz","fileCount":172,"integrity":"sha512-PhzsI13Ir3UgZ4E4cbLfue/PSf0NkpRMzoFKTn5Deh3I2q35iwoI8x05NKvJQuSYBmmM+FgAGSfPbguIP8r4Ow==","signatures":[{"sig":"MEYCIQD+a1z5IrQSuDYdhHtZ/EDxu5IFr46o6fViYdRCwi7tjgIhALneLYNKH1HVQIIRsxmijLK50pmADJBFBKiwVwihupuR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@1.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4115471},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"4a28c6cf90b9ad3f606b49b3bef604f1f95b9f1e","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.18.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.9_1784922267319_0.6983849319794766","host":"s3://npm-registry-packages-npm-production"}},"1.1.10":{"name":"@apholdings/jensen-ai","version":"1.1.10","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.10","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"553f67220ed1ddca974e655009d5e7570bd62ba8","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.10.tgz","fileCount":176,"integrity":"sha512-AErm6xY/+KF2rA8hup2yEznfJGYXE2pJPxgX/TzQllkxurDeeQvWDolxX3qC4zJZgmAUMLzDYXO/O7HycvuAGQ==","signatures":[{"sig":"MEUCIQC0e0YYH17qQTswsYi7IksagqJX+wzdW2uHO15BvaGtdAIgBI0w4/nkz7euKRNUtT8bQo1Ohrw1anFSfBu4eyoBb7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@1.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4200769},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"5cd355efb13ff2562c42835ca91ef3cf6165f660","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.10_1785588163917_0.6411428209908081","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"@apholdings/jensen-ai","version":"1.1.11","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.11","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"616fefef49208f4b028189b5170d1a09241cf8bb","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.11.tgz","fileCount":176,"integrity":"sha512-u03Rd7gyNVGQaao1f+zmt/RqvJ/V8Hwmo3hoV15D9dytF+3iv4N5gLp+aMErkUzJ8UjCeHU8lAOlvIlsR7kogA==","signatures":[{"sig":"MEUCIQCzlnhgplAIZRJF6g35GqSJ1haj6+qsxDYA97Sg6+EX0QIgPyBfzHHeRlDUuiZnWOpgZcNpch+nLhosy2fkHPzx15o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apholdings%2fjensen-ai@1.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4203385},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"5130f21026571c524ec5de1fe83bd26f0edec62a","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.11_1785647332246_0.8041529015387561","host":"s3://npm-registry-packages-npm-production"}},"1.1.12":{"name":"@apholdings/jensen-ai","version":"1.1.12","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.1.12","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"28bb0f4966a13f8b8647a0b9224baa10f5f23712","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.1.12.tgz","fileCount":176,"integrity":"sha512-1QKLkVeYHv8av2Uvhjj+MN740s0TdSY7xUsNFjbX1vq32QPBmJR5vQEv1cb6opQ8xJE/vxjyUhMDEEU/50bslQ==","signatures":[{"sig":"MEUCIQCfJMYKd41jqtqBDgtIEGGr1+ZXk0jDk1RQRYSIyVjXowIgR02iNQCpzqIjuDFSbl9BTJoQbK9lckHet5i7Bs8mHsY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4218638},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"b98760e44923a0dca6b9525f80f960a6a0a452ef","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.1.12_1785684944696_0.14324120301079346","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@apholdings/jensen-ai","version":"1.2.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.2.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"d60ef5faf10e89d0f82d45cf7e7bf2553cede0b3","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.2.0.tgz","fileCount":176,"integrity":"sha512-lkLniSr+JRDnW+My4C3aN8lk61CwbPDAf7nIVr0LNQu+jyvmseVanEPqyINs4OCmvXzp5FTXwPc0jV83JsDwgQ==","signatures":[{"sig":"MEUCIQCImxyYx8qIj/235S8zNjhR+MwVj3V5cZgmcEFY0Wy5lwIgBC3aXSh91qjj9nSAxZYaBX56saQfK0oGjmeK81CooM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4223702},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"8300273bc6f5f601b49196be1cf8ea3a4d4b94ac","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.2.0_1785692744618_0.1940969875855516","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@apholdings/jensen-ai","version":"1.2.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.2.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"d24379b37ffb5290455862bd8116dfb458df77d1","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.2.1.tgz","fileCount":176,"integrity":"sha512-C9KL4IsqclDDklAYN/VS5OsSVaukWxP19fMbP8LnEEtP2wYtbtbQeMRxVoGQmW2y7/cNPmYfdAzi/z+JvbToAw==","signatures":[{"sig":"MEQCIGvP86zKxZDsRUH8U+OZnt7kTyMEAbRITpCDzQX4W/4SAiAQNHIaSZc7W/3n7EwFNcNVFM4qUtWABFiguKtS4KuHyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4223637},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"354f2a1d1c8e06a8af771c336dde9cfbf1721b63","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.2.1_1785716753214_0.23791062478131964","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@apholdings/jensen-ai","version":"1.3.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.3.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"5e143f5c41ac0f8a5d7e3fb006397ba8d5303433","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.3.0.tgz","fileCount":176,"integrity":"sha512-HiQicIKo+VuTsSo+AgByEItpbEl72WlxPVTSRscPpYSqLUhmNoFWK4OWHdyrVhvhSLNHGUZmVC7ZSK0ztmc+nw==","signatures":[{"sig":"MEUCIQCg5mtFSoRO8uvBKbjrcbc6VNabSe6vpWLLCT+/wh/2nAIgFg+b8VCtuXiZtbw7x4WIf+0/d/+aRAwHvgw+D2aeqjs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4226147},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"ec6dae6e200cd711abe01c34d4331e229ac167fa","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.3.0_1785724239453_0.975379383108355","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@apholdings/jensen-ai","version":"1.4.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.4.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"89c2ba06c3c299650396eb431cf28a73f2e88c68","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.4.0.tgz","fileCount":176,"integrity":"sha512-mVdyv/fRlYZSuHu+1uSomTqE4kl7EBdLW+G1NnaSKkY/8jq/aq95w+afazt7ozAGoA4gA6EihXVRIJMcV89INA==","signatures":[{"sig":"MEUCIQD1X/hXdn0nSiAtjjddf8FgAKNVQyUJfen30wC90yTtNgIgHLEKGEojgQmJQlRIFN1enZ1oCEUNDYepmyhYgH3y3PE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4228597},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"7f42c612074b1dfc023d4762a43129af97945f10","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.4.0_1785763961118_0.8660085538165563","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@apholdings/jensen-ai","version":"1.5.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.5.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"b247eb0e9dc925e9b338222fa48615ae2544806a","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.5.0.tgz","fileCount":176,"integrity":"sha512-P56FNi9ULcrJ2NZRBEjm8KzxjU8KwWTCte9mZH9ZSH5FSPmHCW6GHXxIcHjzwl4hcXaaG+BnU8idLhZpiRIPjA==","signatures":[{"sig":"MEQCIEfnpkDKWWmx2kHCjfD4QhEvDVvw6GuEjrkM3YY3SgrAAiBKyl6kqjc266rlpvvioi9FwNrRlw3OTrumZKZnK9+e4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233509},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"22e24a1166d2b81ae8c6ce4ebe994ceb877716ff","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.5.0_1785772848791_0.35854711707777653","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@apholdings/jensen-ai","version":"1.6.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.6.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"c7adbbefcfec16909ce1dc5e8df269feef350b83","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.6.0.tgz","fileCount":176,"integrity":"sha512-ow2PcuNdY1Ni+Swd4fTQjk+n+RYo3XQ2HVdl+fAsLnD7WImu0akEubPDb0qRRdAB9f+Fi9BLWbsWG9gEd4/uWg==","signatures":[{"sig":"MEUCIQCCMEaLgf+TZXysbrE2bQlRe0E7mWz8o1I+qs7tLOx9vgIgEdbUV15A2P7WFeLQJGa4tSL8+L9ij2HLu60QGf+ev68=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233489},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"666ddbf6aee1dc455b6703b344ccd06d6452e639","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.6.0_1785776856626_0.7475496498574661","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@apholdings/jensen-ai","version":"1.6.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.6.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"01aabeed9702f67ddc2d659f74cf1f13a7c9e190","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.6.1.tgz","fileCount":176,"integrity":"sha512-afca3Y+wHfGgZsN3zkkfRxAqtN0ZXtv6UHObcQQFH7aPC9G4uDKtdGJe8H9YNFXue3/wfXJsgAsZ4S2WI1i85Q==","signatures":[{"sig":"MEYCIQDWJ3RmnwVbIL0ed0DN0DykQrjJ0CkgNG74MWwW5LTjVAIhALdsgkHpOs0jP52bISWXOHC6PhADJj5G41kLSna+A+OE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233489},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"6a8c587edfcf4f3744dd836ef89581647306eca8","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.6.1_1785781630559_0.2898297647716379","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@apholdings/jensen-ai","version":"1.6.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.6.2","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"d1204a96330c46dbb1ee337ba272ac2ee3c9dbc1","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.6.2.tgz","fileCount":176,"integrity":"sha512-bAauxEmRvt8+xsSZc7keLtb/jfOWH8ttIZmFTajoy0Hq13eLs6A8MIqzVF49OV3noHvMUa4LABz3ulxs9etL3Q==","signatures":[{"sig":"MEUCIQD/E0EhaogNNBuJ1XCWmf4blurWK2Lc9H5NwNxIwqnb9QIgSLmmN417Ev3SnurKfuQwBcEzm8jnzJbePNKhdmTMCdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233501},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.6.2_1785795729570_0.157071549892299","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@apholdings/jensen-ai","version":"1.7.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.7.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"99b1c410070ffa209f0a6f89687ee2c72bd015ad","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.7.0.tgz","fileCount":176,"integrity":"sha512-nrPL2IqohrzwAKFwgzu7wiiv6YDysRktA/neT8yxPcI22Y8whj/D3gwDBbd0/5uPgJ9ibEO4gTz37Zf8Xx9Ssw==","signatures":[{"sig":"MEUCIQCIAc14XBP6GYrwTBC6rWyzKZlWOzP0lbIxP+/MLdLquwIgOjgUKsQ2h5Fi95X6A5fJunb0sbxpGgD5da5mFRXHbrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233435},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"cd164e1fac56ff3df41e2df187bc778bd8f96775","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.7.0_1785803628007_0.45268805611188934","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@apholdings/jensen-ai","version":"1.7.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.7.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"b4187fdb97d890abc8e3db7073e7732aa56cc1b8","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.7.1.tgz","fileCount":176,"integrity":"sha512-cqWD9UQ/qEtu8Q3HT0pzeUusiR7ga9I3+MoOflHxcp7FqHLNRJp4GmriUJFOUFdDhs3iucPxnnd1mU5tk/aQQg==","signatures":[{"sig":"MEYCIQDO6P9xjVRsoc1cyiB5ny6plRFbMr9W6gXKwRzM8yetlwIhAJMl8vE6APfozqrL7URyz0Zk4aqCQN2hlDZJSSQfTGuX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"3aa039cb328ac78044626284d45c83aa4e33a937","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.7.1_1785813026725_0.6746649208223252","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@apholdings/jensen-ai","version":"1.8.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.8.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"51d00b5b0af5e8105503c6556629edc850f75c30","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.8.0.tgz","fileCount":176,"integrity":"sha512-++8N7a+0bxib2COoKfXQkKhVCRLhOJAHIG9u9lqqlgAMVWgXmLxeCsiINP2uGGdYToEFw8e6gm1jWpnwFId4RA==","signatures":[{"sig":"MEUCIGW769rewqw5Ca/mgtUAiZpovgebB7s40FfN2vGF/BufAiEA8VDGx274By5WDZ0+Xarw4bDU6Gf+ZWq+/io7b5VVEgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"6560f9fd368d3b2ce69b348c60db0e6968ee261f","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.8.0_1785818687907_0.716971706189439","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@apholdings/jensen-ai","version":"1.8.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.8.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"531a24fcad1f0fc794118733933f358692dcefb5","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.8.1.tgz","fileCount":176,"integrity":"sha512-txelPBqfaGHYLrKrEpt7IlbXKbuVNpb0aboaCuD3OzfcwDIAYYC5QAp9FdYu298fDQe0rIiWa8y3xOd0Opc8+Q==","signatures":[{"sig":"MEYCIQDvTu4vXcOTy2Z6kdXMLxzj6qAWKy+q1v1YIr/FwmwkowIhAJyBCxZS9qPRJKUaUFq8qzlOu48d+RvQov888UQ0Zbra","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.8.1_1785844039682_0.1574746785312664","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"@apholdings/jensen-ai","version":"1.8.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.8.2","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"2246150462679e893108437713b57d6d728c2b59","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.8.2.tgz","fileCount":176,"integrity":"sha512-mxVGqvhL+4ZtWBAGY8wYjqCbBJl2xpOdfpM8BQtvg4bb5YmWN05VyvOu/6muj2wrpdbRxvUHNhNXYrwDWzzf6A==","signatures":[{"sig":"MEUCIQC5xa6yuzir/Wa6W5qRnmGjVcDqy6fO8aGi8Cw8yLPvxgIgaEm7Qnv0PtALLNIQCKy1wX3J+VlhTvYbiqQJTV8Yk6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"891ad8be44aa00a2f6fcaf196daf8ea3a9add6f0","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.8.2_1785851672920_0.4395884967560182","host":"s3://npm-registry-packages-npm-production"}},"1.8.3":{"name":"@apholdings/jensen-ai","version":"1.8.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.8.3","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"712b527486bed5b980dcd21870ea184fa510868f","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.8.3.tgz","fileCount":176,"integrity":"sha512-hx4vOdbh5zOjLjm0t0qpvf5dvDcf8E/Wcw1vrK5gJ3yw9xU3F7o4zdSYpMPzZXgcJC6o3HppciuS8SIYb2NpkA==","signatures":[{"sig":"MEYCIQDKrF/fTkiGUB7spG6geIuBu2uoMbsAEf9kaWrAalMdgQIhAPm/1Filoc5EBuylHG+eS0+3vACL9XOtntcs9vYYxnyu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233259},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"84469f7a13ac58e540d0467fb6161dd5dd571f51","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.8.3_1785863860849_0.630811213502166","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@apholdings/jensen-ai","version":"1.9.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@1.9.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"e0930a28388e10a332728138f002f31f90c406db","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-1.9.0.tgz","fileCount":176,"integrity":"sha512-y8+GYB5Z2tLAl0pSObwz8p78PahZWUjLqmARoH9zPdzt18Og8My7wbnisSNGtsrCR4fuUXvg3x+U/VCFe3eiFw==","signatures":[{"sig":"MEUCIEvytGORW+k/eIzoOznRzo8iPABocipss1D/UD7gcETKAiEAnbQxmT43rws/5lZtPbnWIxvht17nMm7/0zw13nIGA94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4230826},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"b905511c6f3a80b820c3ce9757bdf8eddc6ea854","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_1.9.0_1785873094943_0.45324011447510015","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@apholdings/jensen-ai","version":"2.0.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@2.0.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"ed9cc203db688a067c2cf210466323f579a0ae79","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-2.0.0.tgz","fileCount":176,"integrity":"sha512-fPUHgTGHulX9yih6cCEQghOwr5R/vYWLTG3G94dBHDvXf73ptajdsoC91kJy5omz9qNenBeGRbihouqy/q3CzA==","signatures":[{"sig":"MEYCIQD21wvVWXCZ+8bI+Yr7eqTurJz6y+Wuf6XTP4WipygU7AIhAKiU2YsAFoKJVyaYx8II+w2x7Gp58gCXn0Brv/o1jwDa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4230826},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"d9fb30fd0cc1946ad372e7edc8b63a181212ba3a","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_2.0.0_1785892190134_0.26621525069974106","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@apholdings/jensen-ai","version":"2.0.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@2.0.1","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"4aa4c7ccbbff6f54838b26acbb8557e0ead65aaf","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-2.0.1.tgz","fileCount":176,"integrity":"sha512-W8GYdTdkOiAcSDu/TTMZooNoIvCpqUyB0RKcZ01T9NLZWGYL1f97spuCV+0RAwxPvedZvhNFkkSDM9Dg1hG4Iw==","signatures":[{"sig":"MEUCIGeu6y6dunRPnY/4xDp9jt4VcmeX31LquGEnJvScJFPBAiEA4+bf5FLSdZKT8iGLxqQWOiHh5b3Eq9TVg6QmB6qFpRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4424933},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"2ec4e7323f04a168c99631e4b544b38051c3310c","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_2.0.1_1786573784102_0.6020952232582466","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@apholdings/jensen-ai","version":"2.0.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@2.0.2","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"5a6132bdd58e2a9f6aa0b513704ba20af1457b75","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-2.0.2.tgz","fileCount":176,"integrity":"sha512-snPap79euX3bc4XhRK2DwN+r7ZHsAykNFLkeJgyyadJZx5nGZhl9C2LcrMqZRBBqW2VzUBHdF2CywLCZSpYoTQ==","signatures":[{"sig":"MEUCIDtz1GyP3nu/HbH72JMR96850kebyHODIjJ5+HzlMd8OAiEA1NEtumgQvkriVDaS4Dk6iQ/y52pqGDv0sXOKU9voKsE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4424809},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"b2c7617b63242c99bccd405414f7ddbaf0b36870","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_2.0.2_1786579495877_0.6151156273977663","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@apholdings/jensen-ai","version":"2.1.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@2.1.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"0fe2518cf531c59cda102d0ec90483b41c82ac7d","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-2.1.0.tgz","fileCount":176,"integrity":"sha512-39JL5BCq7GSNyEmyzRqztgy5MHIF58roRtaPUujllDYYbDkvJdwhDrCQk2RKOvxHNVxhRmOu70A33XTAiJWVAw==","signatures":[{"sig":"MEUCIQCF3nO3EbTuZLH1t8zDLMEja9BUA/LVxuEQn/zRTyeHpAIgH32yV/UtlGSjsrR8rxvGVpeidWL7heF+qfX1AhHCmz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4427531},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"gitHead":"a335c3fba24008c5200e2782df34b531a873ae6e","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5f5ea7c-5d54-4920-a4c7-aaec35900e0e"}},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.19.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_2.1.0_1786585636994_0.4026486037692494","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@apholdings/jensen-ai","version":"3.0.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"AP Holdings"},"license":"MIT","_id":"@apholdings/jensen-ai@3.0.0","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"homepage":"https://github.com/apholdings/jensen-code#readme","bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"bin":{"jensen-ai":"dist/cli.js"},"dist":{"shasum":"5860fd90c547c55d1b1c4f0fae713e3009febe34","tarball":"https://registry.npmjs.org/@apholdings/jensen-ai/-/jensen-ai-3.0.0.tgz","fileCount":176,"integrity":"sha512-B6kV5L6bhl6kLgamL12F/94pgARZKmMgSrmtgaX74jx/ZzLgm821v6J1fkKRv92mjFqLrsab6DJJI4ia8XwVew==","signatures":[{"sig":"MEUCIAcIZim9DoQ+vutF1AW1g5HilXLsQB0zU/gbuYBWOO4kAiEA7NWArgFyL3uSsKGgD4j37pOP5ta3CJ3qavR85BYt0iI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4542510},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./bedrock-provider":{"types":"./bedrock-provider.d.ts","import":"./bedrock-provider.js"}},"scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run --passWithNoTests","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"boomslag","email":"boomslag@proton.me"},"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.12.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ajv":"^8.17.1","chalk":"^5.6.2","openai":"6.33.0","undici":"^7.19.1","ajv-formats":"^3.0.1","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.48.0","@anthropic-ai/sdk":"^0.82.0","@sinclair/typebox":"^0.34.41","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"1.14.1","@aws-sdk/client-bedrock-runtime":"^3.1023.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/jensen-ai_3.0.0_1787024508660_0.6599536471843577","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-03-13T15:05:10.190Z","modified":"2026-08-18T03:43:22.112Z","0.0.1":"2026-03-13T15:05:10.518Z","0.0.2":"2026-03-15T13:25:35.199Z","0.1.0":"2026-03-15T18:30:22.595Z","0.1.2":"2026-03-18T18:50:21.491Z","0.1.3":"2026-03-19T18:31:52.318Z","0.1.4":"2026-03-19T18:57:15.922Z","0.1.5":"2026-03-21T04:49:17.973Z","0.57.2":"2026-03-21T13:30:43.796Z","0.57.3":"2026-03-21T16:06:25.908Z","0.57.4":"2026-03-21T16:12:24.012Z","0.57.5":"2026-03-24T14:17:10.076Z","0.57.6":"2026-03-26T21:17:24.617Z","0.57.7":"2026-03-27T12:30:28.314Z","1.0.0":"2026-04-04T13:54:54.998Z","1.0.1":"2026-04-04T14:41:29.392Z","1.0.3":"2026-04-05T20:43:22.798Z","1.0.5":"2026-04-20T22:45:04.804Z","1.0.6":"2026-05-15T00:40:52.009Z","1.0.7":"2026-06-01T03:10:14.280Z","1.0.8":"2026-06-26T15:24:47.087Z","1.0.9":"2026-07-05T15:42:43.121Z","1.1.0":"2026-07-06T13:01:07.119Z","1.1.1":"2026-07-08T02:42:48.433Z","1.1.2":"2026-07-09T17:12:43.253Z","1.1.3":"2026-07-09T17:25:38.909Z","1.1.4":"2026-07-14T10:38:39.230Z","1.1.5":"2026-07-14T10:51:30.333Z","1.1.6":"2026-07-20T19:47:22.773Z","1.1.7":"2026-07-21T18:05:18.581Z","1.1.8":"2026-07-23T20:12:13.898Z","1.1.9":"2026-07-24T19:44:27.508Z","1.1.10":"2026-08-01T12:42:44.124Z","1.1.11":"2026-08-02T05:08:52.413Z","1.1.12":"2026-08-02T15:35:44.854Z","1.2.0":"2026-08-02T17:45:44.823Z","1.2.1":"2026-08-03T00:25:53.367Z","1.3.0":"2026-08-03T02:30:39.627Z","1.4.0":"2026-08-03T13:32:41.273Z","1.5.0":"2026-08-03T16:00:49.006Z","1.6.0":"2026-08-03T17:07:36.860Z","1.6.1":"2026-08-03T18:27:10.701Z","1.6.2":"2026-08-03T22:22:09.737Z","1.7.0":"2026-08-04T00:33:48.206Z","1.7.1":"2026-08-04T03:10:26.950Z","1.8.0":"2026-08-04T04:44:48.050Z","1.8.1":"2026-08-04T11:47:19.865Z","1.8.2":"2026-08-04T13:54:33.094Z","1.8.3":"2026-08-04T17:17:41.058Z","1.9.0":"2026-08-04T19:51:35.116Z","2.0.0":"2026-08-05T01:09:50.360Z","2.0.1":"2026-08-12T22:29:44.282Z","2.0.2":"2026-08-13T00:04:56.053Z","2.1.0":"2026-08-13T01:47:17.193Z","3.0.0":"2026-08-18T03:41:48.803Z"},"bugs":{"url":"https://github.com/apholdings/jensen-code/issues"},"author":{"name":"AP Holdings"},"license":"MIT","homepage":"https://github.com/apholdings/jensen-code#readme","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"repository":{"url":"git+https://github.com/apholdings/jensen-code.git","type":"git","directory":"packages/ai"},"description":"Unified LLM API with automatic model discovery and provider configuration","maintainers":[{"name":"boomslag","email":"boomslag@proton.me"}],"readme":"# @apholdings/jensen-ai\n\nUnified LLM API with automatic model discovery, provider configuration, token and cost tracking, and simple context persistence and hand-off to other models mid-session.\n\n**Note**: This library only includes models that support tool calling (function calling), as this is essential for agentic workflows.\n\n## Table of Contents\n\n- [Supported Providers](#supported-providers)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Cache Usage Telemetry](#cache-usage-telemetry)\n- [Tools](#tools)\n  - [Defining Tools](#defining-tools)\n  - [Handling Tool Calls](#handling-tool-calls)\n  - [Streaming Tool Calls with Partial JSON](#streaming-tool-calls-with-partial-json)\n  - [Validating Tool Arguments](#validating-tool-arguments)\n  - [Complete Event Reference](#complete-event-reference)\n- [Image Input](#image-input)\n- [Thinking/Reasoning](#thinkingreasoning)\n  - [Unified Interface](#unified-interface-streamsimplecompletesimple)\n  - [Provider-Specific Options](#provider-specific-options-streamcomplete)\n  - [Streaming Thinking Content](#streaming-thinking-content)\n- [Stop Reasons](#stop-reasons)\n- [Error Handling](#error-handling)\n  - [Aborting Requests](#aborting-requests)\n  - [Continuing After Abort](#continuing-after-abort)\n- [APIs, Models, and Providers](#apis-models-and-providers)\n  - [Providers and Models](#providers-and-models)\n  - [Querying Providers and Models](#querying-providers-and-models)\n  - [Custom Models](#custom-models)\n  - [OpenAI Compatibility Settings](#openai-compatibility-settings)\n  - [Type Safety](#type-safety)\n- [Cross-Provider Handoffs](#cross-provider-handoffs)\n- [Context Serialization](#context-serialization)\n- [Browser Usage](#browser-usage)\n  - [Browser Compatibility Notes](#browser-compatibility-notes)\n  - [Environment Variables](#environment-variables-nodejs-only)\n  - [Checking Environment Variables](#checking-environment-variables)\n- [OAuth Providers](#oauth-providers)\n  - [Vertex AI](#vertex-ai)\n  - [CLI Login](#cli-login)\n  - [Programmatic OAuth](#programmatic-oauth)\n  - [Login Flow Example](#login-flow-example)\n  - [Using OAuth Tokens](#using-oauth-tokens)\n  - [Provider Notes](#provider-notes)\n- [License](#license)\n\n## Supported Providers\n\n- **OpenAI**\n- **Azure OpenAI (Responses)**\n- **OpenAI Codex** (ChatGPT Plus/Pro subscription, requires OAuth, see below)\n- **Anthropic**\n- **Google**\n- **Vertex AI** (Gemini via Vertex AI)\n- **Mistral**\n- **Groq**\n- **Cerebras**\n- **xAI**\n- **OpenRouter**\n- **Vercel AI Gateway**\n- **MiniMax**\n- **GitHub Copilot** (requires OAuth, see below)\n- **Google Gemini CLI** (requires OAuth, see below)\n- **Antigravity** (requires OAuth, see below)\n- **Amazon Bedrock**\n- **OpenCode Zen**\n- **OpenCode Go**\n- **Kimi For Coding** (Moonshot AI, uses Anthropic-compatible API)\n- **Any OpenAI-compatible API**: Ollama, vLLM, LM Studio, etc.\n\n## Installation\n\n```bash\nnpm install @apholdings/jensen-ai\n```\n\nTypeBox exports are re-exported from `@apholdings/jensen-ai`: `Type`, `Static`, and `TSchema`.\n\n## Quick Start\n\n```typescript\nimport { Type, getModel, stream, complete, Context, Tool, StringEnum } from '@apholdings/jensen-ai';\n\n// Fully typed with auto-complete support for both providers and models\nconst model = getModel('openai', 'gpt-4o-mini');\n\n// Define tools with TypeBox schemas for type safety and validation\nconst tools: Tool[] = [{\n  name: 'get_time',\n  description: 'Get the current time',\n  parameters: Type.Object({\n    timezone: Type.Optional(Type.String({ description: 'Optional timezone (e.g., America/New_York)' }))\n  })\n}];\n\n// Build a conversation context (easily serializable and transferable between models)\nconst context: Context = {\n  systemPrompt: 'You are a helpful assistant.',\n  messages: [{ role: 'user', content: 'What time is it?' }],\n  tools\n};\n\n// Option 1: Streaming with all event types\nconst s = stream(model, context);\n\nfor await (const event of s) {\n  switch (event.type) {\n    case 'start':\n      console.log(`Starting with ${event.partial.model}`);\n      break;\n    case 'text_start':\n      console.log('\\n[Text started]');\n      break;\n    case 'text_delta':\n      process.stdout.write(event.delta);\n      break;\n    case 'text_end':\n      console.log('\\n[Text ended]');\n      break;\n    case 'thinking_start':\n      console.log('[Model is thinking...]');\n      break;\n    case 'thinking_delta':\n      process.stdout.write(event.delta);\n      break;\n    case 'thinking_end':\n      console.log('[Thinking complete]');\n      break;\n    case 'toolcall_start':\n      console.log(`\\n[Tool call started: index ${event.contentIndex}]`);\n      break;\n    case 'toolcall_delta':\n      // Partial tool arguments are being streamed\n      const partialCall = event.partial.content[event.contentIndex];\n      if (partialCall.type === 'toolCall') {\n        console.log(`[Streaming args for ${partialCall.name}]`);\n      }\n      break;\n    case 'toolcall_end':\n      console.log(`\\nTool called: ${event.toolCall.name}`);\n      console.log(`Arguments: ${JSON.stringify(event.toolCall.arguments)}`);\n      break;\n    case 'done':\n      console.log(`\\nFinished: ${event.reason}`);\n      break;\n    case 'error':\n      console.error(`Error: ${event.error}`);\n      break;\n  }\n}\n\n// Get the final message after streaming, add it to the context\nconst finalMessage = await s.result();\ncontext.messages.push(finalMessage);\n\n// Handle tool calls if any\nconst toolCalls = finalMessage.content.filter(b => b.type === 'toolCall');\nfor (const call of toolCalls) {\n  // Execute the tool\n  const result = call.name === 'get_time'\n    ? new Date().toLocaleString('en-US', {\n        timeZone: call.arguments.timezone || 'UTC',\n        dateStyle: 'full',\n        timeStyle: 'long'\n      })\n    : 'Unknown tool';\n\n  // Add tool result to context (supports text and images)\n  context.messages.push({\n    role: 'toolResult',\n    toolCallId: call.id,\n    toolName: call.name,\n    content: [{ type: 'text', text: result }],\n    isError: false,\n    timestamp: Date.now()\n  });\n}\n\n// Continue if there were tool calls\nif (toolCalls.length > 0) {\n  const continuation = await complete(model, context);\n  context.messages.push(continuation);\n  console.log('After tool execution:', continuation.content);\n}\n\nconsole.log(`Total tokens: ${finalMessage.usage.input} in, ${finalMessage.usage.output} out`);\nconsole.log(`Cost: $${finalMessage.usage.cost.total.toFixed(4)}`);\n\n// Option 2: Get complete response without streaming\nconst response = await complete(model, context);\n\nfor (const block of response.content) {\n  if (block.type === 'text') {\n    console.log(block.text);\n  } else if (block.type === 'toolCall') {\n    console.log(`Tool: ${block.name}(${JSON.stringify(block.arguments)})`);\n  }\n}\n```\n\n## Cache Usage Telemetry\n\n`AssistantMessage.usage.cache` contains optional normalized cache telemetry when the provider explicitly reports it:\n\n```typescript\ninterface CacheUsage {\n  readTokens?: number;\n  writeTokens?: number;\n  uncachedInputTokens?: number;\n}\n```\n\nAnthropic, OpenAI-compatible APIs including DeepSeek, OpenAI Responses, Google/Gemini CLI/Vertex, and Amazon Bedrock expose their supported fields through this shape. Provider omission remains `undefined`; it is not converted to zero. The legacy numeric `cacheRead` and `cacheWrite` fields remain for cost accounting and backward compatibility.\n\nCache telemetry reports provider behavior only. It does not guarantee a future cache hit, preserve conversation state, or authorize replay. Do not infer continuity across provider or model changes.\n\n## Tools\n\nTools enable LLMs to interact with external systems. This library uses TypeBox schemas for type-safe tool definitions with automatic validation using AJV. TypeBox schemas can be serialized and deserialized as plain JSON, making them ideal for distributed systems.\n\n### Defining Tools\n\n```typescript\nimport { Type, Tool, StringEnum } from '@apholdings/jensen-ai';\n\n// Define tool parameters with TypeBox\nconst weatherTool: Tool = {\n  name: 'get_weather',\n  description: 'Get current weather for a location',\n  parameters: Type.Object({\n    location: Type.String({ description: 'City name or coordinates' }),\n    units: StringEnum(['celsius', 'fahrenheit'], { default: 'celsius' })\n  })\n};\n\n// Note: For Google API compatibility, use StringEnum helper instead of Type.Enum\n// Type.Enum generates anyOf/const patterns that Google doesn't support\n\nconst bookMeetingTool: Tool = {\n  name: 'book_meeting',\n  description: 'Schedule a meeting',\n  parameters: Type.Object({\n    title: Type.String({ minLength: 1 }),\n    startTime: Type.String({ format: 'date-time' }),\n    endTime: Type.String({ format: 'date-time' }),\n    attendees: Type.Array(Type.String({ format: 'email' }), { minItems: 1 })\n  })\n};\n```\n\n### Handling Tool Calls\n\nTool results use content blocks and can include both text and images:\n\n```typescript\nimport { readFileSync } from 'fs';\n\nconst context: Context = {\n  messages: [{ role: 'user', content: 'What is the weather in London?' }],\n  tools: [weatherTool]\n};\n\nconst response = await complete(model, context);\n\n// Check for tool calls in the response\nfor (const block of response.content) {\n  if (block.type === 'toolCall') {\n    // Execute your tool with the arguments\n    // See \"Validating Tool Arguments\" section for validation\n    const result = await executeWeatherApi(block.arguments);\n\n    // Add tool result with text content\n    context.messages.push({\n      role: 'toolResult',\n      toolCallId: block.id,\n      toolName: block.name,\n      content: [{ type: 'text', text: JSON.stringify(result) }],\n      isError: false,\n      timestamp: Date.now()\n    });\n  }\n}\n\n// Tool results can also include images (for vision-capable models)\nconst imageBuffer = readFileSync('chart.png');\ncontext.messages.push({\n  role: 'toolResult',\n  toolCallId: 'tool_xyz',\n  toolName: 'generate_chart',\n  content: [\n    { type: 'text', text: 'Generated chart showing temperature trends' },\n    { type: 'image', data: imageBuffer.toString('base64'), mimeType: 'image/png' }\n  ],\n  isError: false,\n  timestamp: Date.now()\n});\n```\n\n### Streaming Tool Calls with Partial JSON\n\nDuring streaming, tool call arguments are progressively parsed as they arrive. This enables real-time UI updates before the complete arguments are available:\n\n```typescript\nconst s = stream(model, context);\n\nfor await (const event of s) {\n  if (event.type === 'toolcall_delta') {\n    const toolCall = event.partial.content[event.contentIndex];\n\n    // toolCall.arguments contains partially parsed JSON during streaming\n    // This allows for progressive UI updates\n    if (toolCall.type === 'toolCall' && toolCall.arguments) {\n      // BE DEFENSIVE: arguments may be incomplete\n      // Example: Show file path being written even before content is complete\n      if (toolCall.name === 'write_file' && toolCall.arguments.path) {\n        console.log(`Writing to: ${toolCall.arguments.path}`);\n\n        // Content might be partial or missing\n        if (toolCall.arguments.content) {\n          console.log(`Content preview: ${toolCall.arguments.content.substring(0, 100)}...`);\n        }\n      }\n    }\n  }\n\n  if (event.type === 'toolcall_end') {\n    // Here toolCall.arguments is complete (but not yet validated)\n    const toolCall = event.toolCall;\n    console.log(`Tool completed: ${toolCall.name}`, toolCall.arguments);\n  }\n}\n```\n\n**Important notes about partial tool arguments:**\n- During `toolcall_delta` events, `arguments` contains the best-effort parse of partial JSON\n- Fields may be missing or incomplete - always check for existence before use\n- String values may be truncated mid-word\n- Arrays may be incomplete\n- Nested objects may be partially populated\n- At minimum, `arguments` will be an empty object `{}`, never `undefined`\n- The Google provider does not support function call streaming. Instead, you will receive a single `toolcall_delta` event with the full arguments.\n\n### Validating Tool Arguments\n\nWhen using `agentLoop`, tool arguments are automatically validated against your TypeBox schemas before execution. If validation fails, the error is returned to the model as a tool result, allowing it to retry.\n\nWhen implementing your own tool execution loop with `stream()` or `complete()`, use `validateToolCall` to validate arguments before passing them to your tools:\n\n```typescript\nimport { stream, validateToolCall, Tool } from '@apholdings/jensen-ai';\n\nconst tools: Tool[] = [weatherTool, calculatorTool];\nconst s = stream(model, { messages, tools });\n\nfor await (const event of s) {\n  if (event.type === 'toolcall_end') {\n    const toolCall = event.toolCall;\n\n    try {\n      // Validate arguments against the tool's schema (throws on invalid args)\n      const validatedArgs = validateToolCall(tools, toolCall);\n      const result = await executeMyTool(toolCall.name, validatedArgs);\n      // ... add tool result to context\n    } catch (error) {\n      // Validation failed - return error as tool result so model can retry\n      context.messages.push({\n        role: 'toolResult',\n        toolCallId: toolCall.id,\n        toolName: toolCall.name,\n        content: [{ type: 'text', text: error.message }],\n        isError: true,\n        timestamp: Date.now()\n      });\n    }\n  }\n}\n```\n\n### Complete Event Reference\n\nAll streaming events emitted during assistant message generation:\n\n| Event Type | Description | Key Properties |\n|------------|-------------|----------------|\n| `start` | Stream begins | `partial`: Initial assistant message structure |\n| `text_start` | Text block starts | `contentIndex`: Position in content array |\n| `text_delta` | Text chunk received | `delta`: New text, `contentIndex`: Position |\n| `text_end` | Text block complete | `content`: Full text, `contentIndex`: Position |\n| `thinking_start` | Thinking block starts | `contentIndex`: Position in content array |\n| `thinking_delta` | Thinking chunk received | `delta`: New text, `contentIndex`: Position |\n| `thinking_end` | Thinking block complete | `content`: Full thinking, `contentIndex`: Position |\n| `toolcall_start` | Tool call begins | `contentIndex`: Position in content array |\n| `toolcall_delta` | Tool arguments streaming | `delta`: JSON chunk, `partial.content[contentIndex].arguments`: Partial parsed args |\n| `toolcall_end` | Tool call complete | `toolCall`: Complete validated tool call with `id`, `name`, `arguments` |\n| `done` | Stream complete | `reason`: Stop reason (\"stop\", \"length\", \"toolUse\"), `message`: Final assistant message |\n| `error` | Error occurred | `reason`: Error type (\"error\" or \"aborted\"), `error`: AssistantMessage with partial content |\n\n## Image Input\n\nModels with vision capabilities can process images. You can check if a model supports images via the `input` property. If you pass images to a non-vision model, they are silently ignored.\n\n```typescript\nimport { readFileSync } from 'fs';\nimport { getModel, complete } from '@apholdings/jensen-ai';\n\nconst model = getModel('openai', 'gpt-4o-mini');\n\n// Check if model supports images\nif (model.input.includes('image')) {\n  console.log('Model supports vision');\n}\n\nconst imageBuffer = readFileSync('image.png');\nconst base64Image = imageBuffer.toString('base64');\n\nconst response = await complete(model, {\n  messages: [{\n    role: 'user',\n    content: [\n      { type: 'text', text: 'What is in this image?' },\n      { type: 'image', data: base64Image, mimeType: 'image/png' }\n    ]\n  }]\n});\n\n// Access the response\nfor (const block of response.content) {\n  if (block.type === 'text') {\n    console.log(block.text);\n  }\n}\n```\n\n## Thinking/Reasoning\n\nMany models support thinking/reasoning capabilities where they can show their internal thought process. You can check if a model supports reasoning via the `reasoning` property. If you pass reasoning options to a non-reasoning model, they are silently ignored.\n\n### Unified Interface (streamSimple/completeSimple)\n\n```typescript\nimport { getModel, streamSimple, completeSimple } from '@apholdings/jensen-ai';\n\n// Many models across providers support thinking/reasoning\nconst model = getModel('anthropic', 'claude-sonnet-4-20250514');\n// or getModel('openai', 'gpt-5-mini');\n// or getModel('google', 'gemini-2.5-flash');\n// or getModel('xai', 'grok-code-fast-1');\n// or getModel('groq', 'openai/gpt-oss-20b');\n// or getModel('cerebras', 'gpt-oss-120b');\n// or getModel('openrouter', 'z-ai/glm-4.5v');\n\n// Check if model supports reasoning\nif (model.reasoning) {\n  console.log('Model supports reasoning/thinking');\n}\n\n// Use the simplified reasoning option\nconst response = await completeSimple(model, {\n  messages: [{ role: 'user', content: 'Solve: 2x + 5 = 13' }]\n}, {\n  reasoning: 'medium'  // 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' (xhigh maps to high on non-OpenAI providers)\n});\n\n// Access thinking and text blocks\nfor (const block of response.content) {\n  if (block.type === 'thinking') {\n    console.log('Thinking:', block.thinking);\n  } else if (block.type === 'text') {\n    console.log('Response:', block.text);\n  }\n}\n```\n\n### Provider-Specific Options (stream/complete)\n\nFor fine-grained control, use the provider-specific options:\n\n```typescript\nimport { getModel, complete } from '@apholdings/jensen-ai';\n\n// OpenAI Reasoning (o1, o3, gpt-5)\nconst openaiModel = getModel('openai', 'gpt-5-mini');\nawait complete(openaiModel, context, {\n  reasoningEffort: 'medium',\n  reasoningSummary: 'detailed'  // OpenAI Responses API only\n});\n\n// Anthropic Thinking (Claude Sonnet 4)\nconst anthropicModel = getModel('anthropic', 'claude-sonnet-4-20250514');\nawait complete(anthropicModel, context, {\n  thinkingEnabled: true,\n  thinkingBudgetTokens: 8192  // Optional token limit\n});\n\n// Google Gemini Thinking\nconst googleModel = getModel('google', 'gemini-2.5-flash');\nawait complete(googleModel, context, {\n  thinking: {\n    enabled: true,\n    budgetTokens: 8192  // -1 for dynamic, 0 to disable\n  }\n});\n```\n\n### Streaming Thinking Content\n\nWhen streaming, thinking content is delivered through specific events:\n\n```typescript\nconst s = streamSimple(model, context, { reasoning: 'high' });\n\nfor await (const event of s) {\n  switch (event.type) {\n    case 'thinking_start':\n      console.log('[Model started thinking]');\n      break;\n    case 'thinking_delta':\n      process.stdout.write(event.delta);  // Stream thinking content\n      break;\n    case 'thinking_end':\n      console.log('\\n[Thinking complete]');\n      break;\n  }\n}\n```\n\n## Stop Reasons\n\nEvery `AssistantMessage` includes a `stopReason` field that indicates how the generation ended:\n\n- `\"stop\"` - Normal completion, the model finished its response\n- `\"length\"` - Output hit the maximum token limit\n- `\"toolUse\"` - Model is calling tools and expects tool results\n- `\"error\"` - An error occurred during generation\n- `\"aborted\"` - Request was cancelled via abort signal\n\n## Error Handling\n\nWhen a request ends with an error (including aborts and tool call validation errors), the streaming API emits an error event:\n\n```typescript\n// In streaming\nfor await (const event of stream) {\n  if (event.type === 'error') {\n    // event.reason is either \"error\" or \"aborted\"\n    // event.error is the AssistantMessage with partial content\n    console.error(`Error (${event.reason}):`, event.error.errorMessage);\n    console.log('Partial content:', event.error.content);\n  }\n}\n\n// The final message will have the error details\nconst message = await stream.result();\nif (message.stopReason === 'error' || message.stopReason === 'aborted') {\n  console.error('Request failed:', message.errorMessage);\n  // message.content contains any partial content received before the error\n  // message.usage contains partial token counts and costs\n}\n```\n\n### Aborting Requests\n\nThe abort signal allows you to cancel in-progress requests. Aborted requests have `stopReason === 'aborted'`:\n\n```typescript\nimport { getModel, stream } from '@apholdings/jensen-ai';\n\nconst model = getModel('openai', 'gpt-4o-mini');\nconst controller = new AbortController();\n\n// Abort after 2 seconds\nsetTimeout(() => controller.abort(), 2000);\n\nconst s = stream(model, {\n  messages: [{ role: 'user', content: 'Write a long story' }]\n}, {\n  signal: controller.signal\n});\n\nfor await (const event of s) {\n  if (event.type === 'text_delta') {\n    process.stdout.write(event.delta);\n  } else if (event.type === 'error') {\n    // event.reason tells you if it was \"error\" or \"aborted\"\n    console.log(`${event.reason === 'aborted' ? 'Aborted' : 'Error'}:`, event.error.errorMessage);\n  }\n}\n\n// Get results (may be partial if aborted)\nconst response = await s.result();\nif (response.stopReason === 'aborted') {\n  console.log('Request was aborted:', response.errorMessage);\n  console.log('Partial content received:', response.content);\n  console.log('Tokens used:', response.usage);\n}\n```\n\n### Continuing After Abort\n\nAborted messages can be added to the conversation context and continued in subsequent requests:\n\n```typescript\nconst context = {\n  messages: [\n    { role: 'user', content: 'Explain quantum computing in detail' }\n  ]\n};\n\n// First request gets aborted after 2 seconds\nconst controller1 = new AbortController();\nsetTimeout(() => controller1.abort(), 2000);\n\nconst partial = await complete(model, context, { signal: controller1.signal });\n\n// Add the partial response to context\ncontext.messages.push(partial);\ncontext.messages.push({ role: 'user', content: 'Please continue' });\n\n// Continue the conversation\nconst continuation = await complete(model, context);\n```\n\n### Debugging Provider Payloads\n\nUse the `onPayload` callback to inspect the request payload sent to the provider. This is useful for debugging request formatting issues or provider validation errors.\n\n```typescript\nconst response = await complete(model, context, {\n  onPayload: (payload) => {\n    console.log('Provider payload:', JSON.stringify(payload, null, 2));\n  }\n});\n```\n\nThe callback is supported by `stream`, `complete`, `streamSimple`, and `completeSimple`.\n\n## APIs, Models, and Providers\n\nThe library uses a registry of API implementations. Built-in APIs include:\n\n- **`anthropic-messages`**: Anthropic Messages API (`streamAnthropic`, `AnthropicOptions`)\n- **`google-generative-ai`**: Google Generative AI API (`streamGoogle`, `GoogleOptions`)\n- **`google-gemini-cli`**: Google Cloud Code Assist API (`streamGoogleGeminiCli`, `GoogleGeminiCliOptions`)\n- **`google-vertex`**: Google Vertex AI API (`streamGoogleVertex`, `GoogleVertexOptions`)\n- **`mistral-conversations`**: Mistral Conversations API (`streamMistral`, `MistralOptions`)\n- **`openai-completions`**: OpenAI Chat Completions API (`streamOpenAICompletions`, `OpenAICompletionsOptions`)\n- **`openai-responses`**: OpenAI Responses API (`streamOpenAIResponses`, `OpenAIResponsesOptions`)\n- **`openai-codex-responses`**: OpenAI Codex Responses API (`streamOpenAICodexResponses`, `OpenAICodexResponsesOptions`)\n- **`azure-openai-responses`**: Azure OpenAI Responses API (`streamAzureOpenAIResponses`, `AzureOpenAIResponsesOptions`)\n- **`bedrock-converse-stream`**: Amazon Bedrock Converse API (`streamBedrock`, `BedrockOptions`)\n\n### Providers and Models\n\nA **provider** offers models through a specific API. For example:\n- **Anthropic** models use the `anthropic-messages` API\n- **Google** models use the `google-generative-ai` API\n- **OpenAI** models use the `openai-responses` API\n- **Mistral** models use the `mistral-conversations` API\n- **xAI, Cerebras, Groq, etc.** models use the `openai-completions` API (OpenAI-compatible)\n\n### Querying Providers and Models\n\n```typescript\nimport { getProviders, getModels, getModel } from '@apholdings/jensen-ai';\n\n// Get all available providers\nconst providers = getProviders();\nconsole.log(providers); // ['openai', 'anthropic', 'google', 'xai', 'groq', ...]\n\n// Get all models from a provider (fully typed)\nconst anthropicModels = getModels('anthropic');\nfor (const model of anthropicModels) {\n  console.log(`${model.id}: ${model.name}`);\n  console.log(`  API: ${model.api}`); // 'anthropic-messages'\n  console.log(`  Context: ${model.contextWindow} tokens`);\n  console.log(`  Vision: ${model.input.includes('image')}`);\n  console.log(`  Reasoning: ${model.reasoning}`);\n}\n\n// Get a specific model (both provider and model ID are auto-completed in IDEs)\nconst model = getModel('openai', 'gpt-4o-mini');\nconsole.log(`Using ${model.name} via ${model.api} API`);\n```\n\n### Custom Models\n\nYou can create custom models for local inference servers or custom endpoints:\n\n```typescript\nimport { Model, stream } from '@apholdings/jensen-ai';\n\n// Example: Ollama using OpenAI-compatible API\nconst ollamaModel: Model<'openai-completions'> = {\n  id: 'llama-3.1-8b',\n  name: 'Llama 3.1 8B (Ollama)',\n  api: 'openai-completions',\n  provider: 'ollama',\n  baseUrl: 'http://localhost:11434/v1',\n  reasoning: false,\n  input: ['text'],\n  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n  contextWindow: 128000,\n  maxTokens: 32000\n};\n\n// Example: LiteLLM proxy with explicit compat settings\nconst litellmModel: Model<'openai-completions'> = {\n  id: 'gpt-4o',\n  name: 'GPT-4o (via LiteLLM)',\n  api: 'openai-completions',\n  provider: 'litellm',\n  baseUrl: 'http://localhost:4000/v1',\n  reasoning: false,\n  input: ['text', 'image'],\n  cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 },\n  contextWindow: 128000,\n  maxTokens: 16384,\n  compat: {\n    supportsStore: false,  // LiteLLM doesn't support the store field\n  }\n};\n\n// Example: Custom endpoint with headers (bypassing Cloudflare bot detection)\nconst proxyModel: Model<'anthropic-messages'> = {\n  id: 'claude-sonnet-4',\n  name: 'Claude Sonnet 4 (Proxied)',\n  api: 'anthropic-messages',\n  provider: 'custom-proxy',\n  baseUrl: 'https://proxy.example.com/v1',\n  reasoning: true,\n  input: ['text', 'image'],\n  cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },\n  contextWindow: 200000,\n  maxTokens: 8192,\n  headers: {\n    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',\n    'X-Custom-Auth': 'bearer-token-here'\n  }\n};\n\n// Use the custom model\nconst response = await stream(ollamaModel, context, {\n  apiKey: 'dummy' // Ollama doesn't need a real key\n});\n```\n\n### OpenAI Compatibility Settings\n\nThe `openai-completions` API is implemented by many providers with minor differences. By default, the library auto-detects compatibility settings based on `baseUrl` for a small set of known OpenAI-compatible providers (Cerebras, xAI, Chutes, DeepSeek, zAi, OpenCode, etc.). For custom proxies or unknown endpoints, you can override these settings via the `compat` field. For `openai-responses` models, the compat field only supports Responses-specific flags.\n\n```typescript\ninterface OpenAICompletionsCompat {\n  supportsStore?: boolean;           // Whether provider supports the `store` field (default: true)\n  supportsDeveloperRole?: boolean;   // Whether provider supports `developer` role vs `system` (default: true)\n  supportsReasoningEffort?: boolean; // Whether provider supports `reasoning_effort` (default: true)\n  supportsUsageInStreaming?: boolean; // Whether provider supports `stream_options: { include_usage: true }` (default: true)\n  supportsStrictMode?: boolean;      // Whether provider supports `strict` in tool definitions (default: true)\n  maxTokensField?: 'max_completion_tokens' | 'max_tokens';  // Which field name to use (default: max_completion_tokens)\n  requiresToolResultName?: boolean;  // Whether tool results require the `name` field (default: false)\n  requiresAssistantAfterToolResult?: boolean; // Whether tool results must be followed by an assistant message (default: false)\n  requiresThinkingAsText?: boolean;  // Whether thinking blocks must be converted to text (default: false)\n  thinkingFormat?: 'openai' | 'zai' | 'qwen'; // Format for reasoning param: 'openai' uses reasoning_effort, 'zai' uses thinking: { type: \"enabled\" }, 'qwen' uses enable_thinking: boolean (default: openai)\n  openRouterRouting?: OpenRouterRouting; // OpenRouter routing preferences (default: {})\n  vercelGatewayRouting?: VercelGatewayRouting; // Vercel AI Gateway routing preferences (default: {})\n}\n\ninterface OpenAIResponsesCompat {\n  // Reserved for future use\n}\n```\n\nIf `compat` is not set, the library falls back to URL-based detection. If `compat` is partially set, unspecified fields use the detected defaults. This is useful for:\n\n- **LiteLLM proxies**: May not support `store` field\n- **Custom inference servers**: May use non-standard field names\n- **Self-hosted endpoints**: May have different feature support\n\n### Type Safety\n\nModels are typed by their API, which keeps the model metadata accurate. Provider-specific option types are enforced when you call the provider functions directly. The generic `stream` and `complete` functions accept `StreamOptions` with additional provider fields.\n\n```typescript\nimport { streamAnthropic, type AnthropicOptions } from '@apholdings/jensen-ai';\n\n// TypeScript knows this is an Anthropic model\nconst claude = getModel('anthropic', 'claude-sonnet-4-20250514');\n\nconst options: AnthropicOptions = {\n  thinkingEnabled: true,\n  thinkingBudgetTokens: 2048\n};\n\nawait streamAnthropic(claude, context, options);\n```\n\n## Cross-Provider Handoffs\n\nThe library supports seamless handoffs between different LLM providers within the same conversation. This allows you to switch models mid-conversation while preserving context, including thinking blocks, tool calls, and tool results.\n\n### How It Works\n\nWhen messages from one provider are sent to a different provider, the library automatically transforms them for compatibility:\n\n- **User and tool result messages** are passed through unchanged\n- **Assistant messages from the same provider/API** are preserved as-is\n- **Assistant messages from different providers** have their thinking blocks converted to text with `<thinking>` tags\n- **Tool calls and regular text** are preserved unchanged\n\n### Example: Multi-Provider Conversation\n\n```typescript\nimport { getModel, complete, Context } from '@apholdings/jensen-ai';\n\n// Start with Claude\nconst claude = getModel('anthropic', 'claude-sonnet-4-20250514');\nconst context: Context = {\n  messages: []\n};\n\ncontext.messages.push({ role: 'user', content: 'What is 25 * 18?' });\nconst claudeResponse = await complete(claude, context, {\n  thinkingEnabled: true\n});\ncontext.messages.push(claudeResponse);\n\n// Switch to GPT-5 - it will see Claude's thinking as <thinking> tagged text\nconst gpt5 = getModel('openai', 'gpt-5-mini');\ncontext.messages.push({ role: 'user', content: 'Is that calculation correct?' });\nconst gptResponse = await complete(gpt5, context);\ncontext.messages.push(gptResponse);\n\n// Switch to Gemini\nconst gemini = getModel('google', 'gemini-2.5-flash');\ncontext.messages.push({ role: 'user', content: 'What was the original question?' });\nconst geminiResponse = await complete(gemini, context);\n```\n\n### Provider Compatibility\n\nAll providers can handle messages from other providers, including:\n- Text content\n- Tool calls and tool results (including images in tool results)\n- Thinking/reasoning blocks (transformed to tagged text for cross-provider compatibility)\n- Aborted messages with partial content\n\nThis enables flexible workflows where you can:\n- Start with a fast model for initial responses\n- Switch to a more capable model for complex reasoning\n- Use specialized models for specific tasks\n- Maintain conversation continuity across provider outages\n\n## Context Serialization\n\nThe `Context` object can be easily serialized and deserialized using standard JSON methods, making it simple to persist conversations, implement chat history, or transfer contexts between services:\n\n```typescript\nimport { Context, getModel, complete } from '@apholdings/jensen-ai';\n\n// Create and use a context\nconst context: Context = {\n  systemPrompt: 'You are a helpful assistant.',\n  messages: [\n    { role: 'user', content: 'What is TypeScript?' }\n  ]\n};\n\nconst model = getModel('openai', 'gpt-4o-mini');\nconst response = await complete(model, context);\ncontext.messages.push(response);\n\n// Serialize the entire context\nconst serialized = JSON.stringify(context);\nconsole.log('Serialized context size:', serialized.length, 'bytes');\n\n// Save to database, localStorage, file, etc.\nlocalStorage.setItem('conversation', serialized);\n\n// Later: deserialize and continue the conversation\nconst restored: Context = JSON.parse(localStorage.getItem('conversation')!);\nrestored.messages.push({ role: 'user', content: 'Tell me more about its type system' });\n\n// Continue with any model\nconst newModel = getModel('anthropic', 'claude-3-5-haiku-20241022');\nconst continuation = await complete(newModel, restored);\n```\n\n> **Note**: If the context contains images (encoded as base64 as shown in the Image Input section), those will also be serialized.\n\n## Browser Usage\n\nThe library supports browser environments. You must pass the API key explicitly since environment variables are not available in browsers:\n\n```typescript\nimport { getModel, complete } from '@apholdings/jensen-ai';\n\n// API key must be passed explicitly in browser\nconst model = getModel('anthropic', 'claude-3-5-haiku-20241022');\n\nconst response = await complete(model, {\n  messages: [{ role: 'user', content: 'Hello!' }]\n}, {\n  apiKey: 'your-api-key'\n});\n```\n\n> **Security Warning**: Exposing API keys in frontend code is dangerous. Anyone can extract and abuse your keys. Only use this approach for internal tools or demos. For production applications, use a backend proxy that keeps your API keys secure.\n\n### Browser Compatibility Notes\n\n- Amazon Bedrock (`bedrock-converse-stream`) is not supported in browser environments.\n- OAuth login flows are not supported in browser environments. Use the `@apholdings/jensen-ai/oauth` entry point in Node.js.\n- In browser builds, Bedrock can still appear in model lists. Calls to Bedrock models fail at runtime.\n- Use a server-side proxy or backend service if you need Bedrock or OAuth-based auth from a web app.\n\n### Environment Variables (Node.js only)\n\nIn Node.js environments, you can set environment variables to avoid passing API keys:\n\n| Provider | Environment Variable(s) |\n|----------|------------------------|\n| OpenAI | `OPENAI_API_KEY` |\n| Azure OpenAI | `AZURE_OPENAI_API_KEY` + `AZURE_OPENAI_BASE_URL` or `AZURE_OPENAI_RESOURCE_NAME` (optional `AZURE_OPENAI_API_VERSION`, `AZURE_OPENAI_DEPLOYMENT_NAME_MAP` like `model=deployment,model2=deployment2`) |\n| Anthropic | `ANTHROPIC_API_KEY` or `ANTHROPIC_OAUTH_TOKEN` |\n| Google | `GEMINI_API_KEY` |\n| Vertex AI | `GOOGLE_CLOUD_API_KEY` or `GOOGLE_CLOUD_PROJECT` (or `GCLOUD_PROJECT`) + `GOOGLE_CLOUD_LOCATION` + ADC |\n| Mistral | `MISTRAL_API_KEY` |\n| Groq | `GROQ_API_KEY` |\n| Cerebras | `CEREBRAS_API_KEY` |\n| xAI | `XAI_API_KEY` |\n| OpenRouter | `OPENROUTER_API_KEY` |\n| Vercel AI Gateway | `AI_GATEWAY_API_KEY` |\n| zAI | `ZAI_API_KEY` |\n| MiniMax | `MINIMAX_API_KEY` |\n| OpenCode Zen / OpenCode Go | `OPENCODE_API_KEY` |\n| Kimi For Coding | `KIMI_API_KEY` |\n| GitHub Copilot | `COPILOT_GITHUB_TOKEN` or `GH_TOKEN` or `GITHUB_TOKEN` |\n\nWhen set, the library automatically uses these keys:\n\n```typescript\n// Uses OPENAI_API_KEY from environment\nconst model = getModel('openai', 'gpt-4o-mini');\nconst response = await complete(model, context);\n\n// Or override with explicit key\nconst response = await complete(model, context, {\n  apiKey: 'sk-different-key'\n});\n```\n\n#### Antigravity Version Override\n\nSet `JENSEN_AI_ANTIGRAVITY_VERSION` to override the Antigravity User-Agent version when Google updates their requirements:\n\n```bash\nexport JENSEN_AI_ANTIGRAVITY_VERSION=\"1.23.0\"\n```\n\n#### Cache Retention\n\nSet `PI_CACHE_RETENTION=long` to extend prompt cache retention:\n\n| Provider | Default | With `PI_CACHE_RETENTION=long` |\n|----------|---------|-------------------------------|\n| Anthropic | 5 minutes | 1 hour |\n| OpenAI | in-memory | 24 hours |\n\nThis only affects direct API calls to `api.anthropic.com` and `api.openai.com`. Proxies and other providers are unaffected.\n\n> **Note**: Extended cache retention may increase costs for Anthropic (cache writes are charged at a higher rate). OpenAI's 24h retention has no additional cost.\n\n### Checking Environment Variables\n\n```typescript\nimport { getEnvApiKey } from '@apholdings/jensen-ai';\n\n// Check if an API key is set in environment variables\nconst key = getEnvApiKey('openai');  // checks OPENAI_API_KEY\n```\n\n## OAuth Providers\n\nSeveral providers require OAuth authentication instead of static API keys:\n\n- **Anthropic** (Claude Pro/Max subscription)\n- **OpenAI Codex** (ChatGPT Plus/Pro subscription, access to GPT-5.x Codex models)\n- **GitHub Copilot** (Copilot subscription)\n- **Google Gemini CLI** (Gemini 2.0/2.5 via Google Cloud Code Assist; free tier or paid subscription)\n- **Antigravity** (Free Gemini 3, Claude, GPT-OSS via Google Cloud)\n\nFor paid Cloud Code Assist subscriptions, set `GOOGLE_CLOUD_PROJECT` or `GOOGLE_CLOUD_PROJECT_ID` to your project ID.\n\n### Vertex AI\n\nVertex AI models support either a Google Cloud API key or Application Default Credentials (ADC):\n\n- **API key**: Set `GOOGLE_CLOUD_API_KEY` or pass `apiKey` in the call options.\n- **Local development (ADC)**: Run `gcloud auth application-default login`\n- **CI/Production (ADC)**: Set `GOOGLE_APPLICATION_CREDENTIALS` to point to a service account JSON key file\n\nWhen using ADC, also set `GOOGLE_CLOUD_PROJECT` (or `GCLOUD_PROJECT`) and `GOOGLE_CLOUD_LOCATION`. You can also pass `project`/`location` in the call options. When using `GOOGLE_CLOUD_API_KEY`, `project` and `location` are not required.\n\nExample:\n\n```bash\n# Local (uses your user credentials)\ngcloud auth application-default login\nexport GOOGLE_CLOUD_PROJECT=\"my-project\"\nexport GOOGLE_CLOUD_LOCATION=\"us-central1\"\n\n# CI/Production (service account key file)\nexport GOOGLE_APPLICATION_CREDENTIALS=\"/path/to/service-account.json\"\n```\n\n```typescript\nimport { getModel, complete } from '@apholdings/jensen-ai';\n\n(async () => {\n  const model = getModel('google-vertex', 'gemini-2.5-flash');\n  const response = await complete(model, {\n    messages: [{ role: 'user', content: 'Hello from Vertex AI' }]\n  }, {\n    apiKey: process.env.GOOGLE_CLOUD_API_KEY,\n  });\n\n  for (const block of response.content) {\n    if (block.type === 'text') console.log(block.text);\n  }\n})().catch(console.error);\n```\n\nOfficial docs: [Application Default Credentials](https://cloud.google.com/docs/authentication/application-default-credentials)\n\n### CLI Login\n\nThe quickest way to authenticate:\n\n```bash\nnpx @apholdings/jensen-ai login              # interactive provider selection\nnpx @apholdings/jensen-ai login anthropic    # login to specific provider\nnpx @apholdings/jensen-ai list               # list available providers\n```\n\nCredentials are saved to `auth.json` in the current directory.\n\n### Programmatic OAuth\n\nThe library provides login and token refresh functions via the `@apholdings/jensen-ai/oauth` entry point. Credential storage is the caller's responsibility.\n\n```typescript\nimport {\n  // Login functions (return credentials, do not store)\n  loginAnthropic,\n  loginOpenAICodex,\n  loginGitHubCopilot,\n  loginGeminiCli,\n  loginAntigravity,\n\n  // Token management\n  refreshOAuthToken,   // (provider, credentials) => new credentials\n  getOAuthApiKey,      // (provider, credentialsMap) => { newCredentials, apiKey } | null\n\n  // Types\n  type OAuthProvider,  // 'anthropic' | 'openai-codex' | 'github-copilot' | 'google-gemini-cli' | 'google-antigravity'\n  type OAuthCredentials,\n} from '@apholdings/jensen-ai/oauth';\n```\n\n### Login Flow Example\n\n```typescript\nimport { loginGitHubCopilot } from '@apholdings/jensen-ai/oauth';\nimport { writeFileSync } from 'fs';\n\nconst credentials = await loginGitHubCopilot({\n  onAuth: (url, instructions) => {\n    console.log(`Open: ${url}`);\n    if (instructions) console.log(instructions);\n  },\n  onPrompt: async (prompt) => {\n    return await getUserInput(prompt.message);\n  },\n  onProgress: (message) => console.log(message)\n});\n\n// Store credentials yourself\nconst auth = { 'github-copilot': { type: 'oauth', ...credentials } };\nwriteFileSync('auth.json', JSON.stringify(auth, null, 2));\n```\n\n### Using OAuth Tokens\n\nUse `getOAuthApiKey()` to get an API key, automatically refreshing if expired:\n\n```typescript\nimport { getModel, complete } from '@apholdings/jensen-ai';\nimport { getOAuthApiKey } from '@apholdings/jensen-ai/oauth';\nimport { readFileSync, writeFileSync } from 'fs';\n\n// Load your stored credentials\nconst auth = JSON.parse(readFileSync('auth.json', 'utf-8'));\n\n// Get API key (refreshes if expired)\nconst result = await getOAuthApiKey('github-copilot', auth);\nif (!result) throw new Error('Not logged in');\n\n// Save refreshed credentials\nauth['github-copilot'] = { type: 'oauth', ...result.newCredentials };\nwriteFileSync('auth.json', JSON.stringify(auth, null, 2));\n\n// Use the API key\nconst model = getModel('github-copilot', 'gpt-4o');\nconst response = await complete(model, {\n  messages: [{ role: 'user', content: 'Hello!' }]\n}, { apiKey: result.apiKey });\n```\n\n### Provider Notes\n\n**OpenAI Codex**: Requires a ChatGPT Plus or Pro subscription. Provides access to GPT-5.x Codex models with extended context windows and reasoning capabilities. The library automatically handles session-based prompt caching when `sessionId` is provided in stream options. You can set `transport` in stream options to `\"sse\"`, `\"websocket\"`, or `\"auto\"` for Codex Responses transport selection. When using WebSocket with a `sessionId`, connections are reused per session and expire after 5 minutes of inactivity.\n\n**Azure OpenAI (Responses)**: Uses the Responses API only. Set `AZURE_OPENAI_API_KEY` and either `AZURE_OPENAI_BASE_URL` or `AZURE_OPENAI_RESOURCE_NAME`. Use `AZURE_OPENAI_API_VERSION` (defaults to `v1`) to override the API version if needed. Deployment names are treated as model IDs by default, override with `azureDeploymentName` or `AZURE_OPENAI_DEPLOYMENT_NAME_MAP` using comma-separated `model-id=deployment` pairs (for example `gpt-4o-mini=my-deployment,gpt-4o=prod`). Legacy deployment-based URLs are intentionally unsupported.\n\n**GitHub Copilot**: If you get \"The requested model is not supported\" error, enable the model manually in VS Code: open Copilot Chat, click the model selector, select the model (warning icon), and click \"Enable\".\n\n**Google Gemini CLI / Antigravity**: These use Google Cloud OAuth. The `apiKey` returned by `getOAuthApiKey()` is a JSON string containing both the token and project ID, which the library handles automatically.\n\n## Development\n\n### Adding a New Provider\n\nAdding a new LLM provider requires changes across multiple files. This checklist covers all necessary steps:\n\n#### 1. Core Types (`src/types.ts`)\n\n- Add the API identifier to `KnownApi` (for example `\"bedrock-converse-stream\"`)\n- Create an options interface extending `StreamOptions` (for example `BedrockOptions`)\n- Add the provider name to `KnownProvider` (for example `\"amazon-bedrock\"`)\n\n#### 2. Provider Implementation (`src/providers/`)\n\nCreate a new provider file (for example `amazon-bedrock.ts`) that exports:\n\n- `stream<Provider>()` function returning `AssistantMessageEventStream`\n- `streamSimple<Provider>()` for `SimpleStreamOptions` mapping\n- Provider-specific options interface\n- Message conversion functions to transform `Context` to provider format\n- Tool conversion if the provider supports tools\n- Response parsing to emit standardized events (`text`, `tool_call`, `thinking`, `usage`, `stop`)\n\n#### 3. API Registry Integration (`src/providers/register-builtins.ts`)\n\n- Register the API with `registerApiProvider()`\n- Add credential detection in `env-api-keys.ts` for the new provider\n- Ensure `streamSimple` handles auth lookup via `getEnvApiKey()` or provider-specific auth\n\n#### 4. Model Generation (`scripts/generate-models.ts`)\n\n- Add logic to fetch and parse models from the provider's source (e.g., models.dev API)\n- Map provider model data to the standardized `Model` interface\n- Handle provider-specific quirks (pricing format, capability flags, model ID transformations)\n\n#### 5. Tests (`test/`)\n\nCreate or update test files to cover the new provider:\n\n- `stream.test.ts` - Basic streaming and tool use\n- `tokens.test.ts` - Token usage reporting\n- `abort.test.ts` - Request cancellation\n- `empty.test.ts` - Empty message handling\n- `context-overflow.test.ts` - Context limit errors\n- `image-limits.test.ts` - Image support (if applicable)\n- `unicode-surrogate.test.ts` - Unicode handling\n- `tool-call-without-result.test.ts` - Orphaned tool calls\n- `image-tool-result.test.ts` - Images in tool results\n- `total-tokens.test.ts` - Token counting accuracy\n- `cross-provider-handoff.test.ts` - Cross-provider context replay\n\nFor `cross-provider-handoff.test.ts`, add at least one provider/model pair. If the provider exposes multiple model families (for example GPT and Claude), add at least one pair per family.\n\nFor providers with non-standard auth (AWS, Google Vertex), create a utility like `bedrock-utils.ts` with credential detection helpers.\n\n#### 6. Coding Agent Integration (`../coding-agent/`)\n\nUpdate `src/core/model-resolver.ts`:\n\n- Add a default model ID for the provider in `DEFAULT_MODELS`\n\nUpdate `src/cli/args.ts`:\n\n- Add environment variable documentation in the help text\n\nUpdate `README.md`:\n\n- Add the provider to the providers section with setup instructions\n\n#### 7. Documentation\n\nUpdate `packages/ai/README.md`:\n\n- Add to the Supported Providers table\n- Document any provider-specific options or authentication requirements\n- Add environment variable to the Environment Variables section\n\n#### 8. Changelog\n\nAdd an entry to `packages/ai/CHANGELOG.md` under `## [Unreleased]`:\n\n```markdown\n### Added\n- Added support for [Provider Name] provider ([#PR](link) by [@author](link))\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}