{"_id":"@slopus/happy-providers","_rev":"41-4b721f5eb2b4b629eaf89f02bc5e6607","name":"@slopus/happy-providers","dist-tags":{"bootstrap":"0.0.0","canary":"0.0.12-canary.919.7adecc1","latest":"0.0.36"},"versions":{"0.0.0":{"name":"@slopus/happy-providers","version":"0.0.0","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.0","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"8a6cc894425cba01fa79f30dff5e8c1c0773c9dc","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.0.tgz","fileCount":1104,"integrity":"sha512-LJjLBfWYuK85CafhZFpa8FUTqnTLuYxQIE6PW6WX7DGUnlB+kDwnnjTossG8LGd/+mS7DiOL/oBUYzzv/ak+/A==","signatures":[{"sig":"MEQCIDjrVHsC5ZJ3EVtPDTBDMAX0gt2T7sNBLjfN0B3q19JKAiB/hEgVGSZYYF/XixlVMOZI8TsJE+gflz60ouZ+GBkBww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1843944},"type":"module","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"e4049613aec0df84e87dea5f734664529de6afc6","scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","prepack":"pnpm run build"},"_npmUser":{"name":"steve.kite","email":"steve@korshakov.com"},"repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.11.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.0_1786407567833_0.8953648186677166","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"@slopus/happy-providers","version":"0.0.1","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.1","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"c1baedd37a29b4aaf195a755ad583cf24004d0a2","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.1.tgz","fileCount":1104,"integrity":"sha512-BpRI3Iihcwk+70dYX+f9XR34/9JGUxJh263JAh4cwgU/tL2G06d0nMPObiZ425VcuekF7D7jlu5+VsGLIOa/2w==","signatures":[{"sig":"MEUCIQCKR/Db2dL3IdJleRsPxNTnWg2ua5UrzEG9wO9DyMskKAIgYQ+ePo6bRVolFVXO/6ZU7OgyumUgNAq1nNJeEw0ybS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1843656},"type":"module","_from":"file:slopus-happy-providers-0.0.1.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/d0dd2541ee6652a048b7825ec2277418/slopus-happy-providers-0.0.1.tgz","_integrity":"sha512-BpRI3Iihcwk+70dYX+f9XR34/9JGUxJh263JAh4cwgU/tL2G06d0nMPObiZ425VcuekF7D7jlu5+VsGLIOa/2w==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.1_1786408245733_0.059201101977174764","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@slopus/happy-providers","version":"0.0.4","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.4","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"53ccf562936fbfd41b650b1e9667a057218ae661","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.4.tgz","fileCount":1108,"integrity":"sha512-nz6k6YUFazUWtXkWpueZBQWMehcFfi0eMLlkTRiSh2EPFKLC3L0W/hhdxDS/ulQ/sbrxSdMAN98X2PxC+2AwwA==","signatures":[{"sig":"MEUCIEK3NjNEkBhv0kQuvOHFjNDM+NCr8kD/95ZeLGS9fP4AAiEAxI/vSfuQgqfgU0sadl37XtQWRqJ7XW4MZBZEIYz2yZg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1873662},"type":"module","_from":"file:slopus-happy-providers-0.0.4.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/8ece4ed86ab8cfdbe6bc113dc9b4a1a6/slopus-happy-providers-0.0.4.tgz","_integrity":"sha512-nz6k6YUFazUWtXkWpueZBQWMehcFfi0eMLlkTRiSh2EPFKLC3L0W/hhdxDS/ulQ/sbrxSdMAN98X2PxC+2AwwA==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.4_1786416281541_0.21238454845729393","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@slopus/happy-providers","version":"0.0.5","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.5","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"de6b3cf43fed795d1ca4a12846bf9590e05e3dbf","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.5.tgz","fileCount":1108,"integrity":"sha512-g0MdMcwXCAwcPe1VvGNGt6DqNyMMdaGopgiEwxKlZ/iRSzwEKOoKGueePV6os6z9F8ehk/WMKADXykJFJO0FHw==","signatures":[{"sig":"MEYCIQD6/3qgz93oyMHXs8Wfsl8rrsj3NIfvmWlW1frnBLIpggIhAKC4EnckI07GwmGWW0baKSATulO1C/apmygKWn9h6nDy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1875087},"type":"module","_from":"file:slopus-happy-providers-0.0.5.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/8508ed5f10a54d9bb735b8d04647f1cd/slopus-happy-providers-0.0.5.tgz","_integrity":"sha512-g0MdMcwXCAwcPe1VvGNGt6DqNyMMdaGopgiEwxKlZ/iRSzwEKOoKGueePV6os6z9F8ehk/WMKADXykJFJO0FHw==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.6","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.5_1786421855815_0.725088109396091","host":"s3://npm-registry-packages-npm-production"}},"0.0.6-canary.634.ccbcdca":{"name":"@slopus/happy-providers","version":"0.0.6-canary.634.ccbcdca","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.6-canary.634.ccbcdca","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"bcc65739ecf019c636f6d10d12987f0de0981233","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.6-canary.634.ccbcdca.tgz","fileCount":1108,"integrity":"sha512-zET1LLSlqOInGcBHlPmmIZmr+FFI06zrx/pRQlddq50y8SXwUJMVtSC1eK2gA0a7AnLtTipt5rMRM6jsJ05Z9A==","signatures":[{"sig":"MEYCIQDg0kLlDuklhP14dBeM/npxOtSAMT/7CO2YpWaJhPZHEQIhALS3/Kx2FT8NfctkwtkaUeXnVzIWa2wux7CBv+jBJqd9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.6-canary.634.ccbcdca","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1875106},"type":"module","_from":"file:slopus-happy-providers-0.0.6-canary.634.ccbcdca.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/61b77df9bb77d67c48be2dd40156da6a/slopus-happy-providers-0.0.6-canary.634.ccbcdca.tgz","_integrity":"sha512-zET1LLSlqOInGcBHlPmmIZmr+FFI06zrx/pRQlddq50y8SXwUJMVtSC1eK2gA0a7AnLtTipt5rMRM6jsJ05Z9A==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.6","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.6-canary.634.ccbcdca_1786422067946_0.6113184115626049","host":"s3://npm-registry-packages-npm-production"}},"0.0.6-canary.655.55f9a59":{"name":"@slopus/happy-providers","version":"0.0.6-canary.655.55f9a59","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.6-canary.655.55f9a59","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"609eabed8554be7b9b7177659c64fc1275f4722e","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.6-canary.655.55f9a59.tgz","fileCount":1108,"integrity":"sha512-UMwZ6kAuyy6fSOOwhZpCWL4nd6Dy54dBnQUsCGTbLKs8muj/0DiG/E360w9xEk3Rt7S+prdt2nHqom3F3oWqZw==","signatures":[{"sig":"MEUCIGgkrsjGp+AvQh+MtGiSrfEzTy9yXuAM3jjKb/IFPsYEAiEAu4lCvu2JvKnCfuDb055fDH8xVmp/gAqZnInU0umu0BQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.6-canary.655.55f9a59","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1875106},"type":"module","_from":"file:slopus-happy-providers-0.0.6-canary.655.55f9a59.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/38468ad2b8cdbabed19d6de1714146c9/slopus-happy-providers-0.0.6-canary.655.55f9a59.tgz","_integrity":"sha512-UMwZ6kAuyy6fSOOwhZpCWL4nd6Dy54dBnQUsCGTbLKs8muj/0DiG/E360w9xEk3Rt7S+prdt2nHqom3F3oWqZw==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.8","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.6-canary.655.55f9a59_1786432500130_0.8288677101322504","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@slopus/happy-providers","version":"0.0.6","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.6","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"251b46f82a337d087b73cee76c0fdda48610d7ca","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.6.tgz","fileCount":1108,"integrity":"sha512-AYw4+6llJVY1nRGHq6GKydi/dYb55CS1esZEJbgQdMoUMzIgdaBevAt3cJlgd8yqHgDA6T8JLXfORZks/XpdaQ==","signatures":[{"sig":"MEYCIQDEwsfQaW3KBkWJVB81aM9Ta0ycHRWefGWye1NgTUGWHQIhANlqay7h5pwv8uOTGmZnAbO4o1UHNMyFfF1GEnBw0+4Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1882381},"type":"module","_from":"file:slopus-happy-providers-0.0.6.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/bc37b0c8b9625ca6150c997ca35e2e58/slopus-happy-providers-0.0.6.tgz","_integrity":"sha512-AYw4+6llJVY1nRGHq6GKydi/dYb55CS1esZEJbgQdMoUMzIgdaBevAt3cJlgd8yqHgDA6T8JLXfORZks/XpdaQ==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.8","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.6_1786573551096_0.29071123334721305","host":"s3://npm-registry-packages-npm-production"}},"0.0.7-canary.673.83bdc7b":{"name":"@slopus/happy-providers","version":"0.0.7-canary.673.83bdc7b","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.7-canary.673.83bdc7b","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"ff4b5999f723853f8aec9d3488723067497717e3","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.7-canary.673.83bdc7b.tgz","fileCount":1108,"integrity":"sha512-ZBEaPvNXwl59HU6zpzVNfRM5FNpu/T1fR148xdjds+fMJWefsnWn6IvlajtqM/kUSqCMqfVgebg8KGt5G8TBvg==","signatures":[{"sig":"MEYCIQCvSo9VyzCEQ4yR8kXB68AwYgrgJfdGQI1ZNzpZxf+gKwIhAMSkUNpRL0NHpcHqkJJQajhI4CtYEBgotqGGMKVbcEP0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.7-canary.673.83bdc7b","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1882400},"type":"module","_from":"file:slopus-happy-providers-0.0.7-canary.673.83bdc7b.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/383eadf5e7687b27b07f57216417d922/slopus-happy-providers-0.0.7-canary.673.83bdc7b.tgz","_integrity":"sha512-ZBEaPvNXwl59HU6zpzVNfRM5FNpu/T1fR148xdjds+fMJWefsnWn6IvlajtqM/kUSqCMqfVgebg8KGt5G8TBvg==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.8","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.7-canary.673.83bdc7b_1786573952645_0.28662080534556766","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@slopus/happy-providers","version":"0.0.7","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.7","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"b59e7437f08cc265bb8f5b9bec1797e47970e79f","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.7.tgz","fileCount":1108,"integrity":"sha512-5IR/BM3IRoz91oEbJ9XMRauTvXQyqZ1hSKaPlpxHJbMGjDaYDrxkcsSLQySbRr2q2FsOWAZUPTjrmpl6b1b8EA==","signatures":[{"sig":"MEYCIQDShT6UJUqoKTV+v9DM/b2TI09EsRro85L7dqM4LScO+wIhAMxETHpWrrHmISXyuPqVUf1huytUkzKTwZUt6JFQVG9V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1890065},"type":"module","_from":"file:slopus-happy-providers-0.0.7.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/a4fdde9567b33e166128c63271fdf3fa/slopus-happy-providers-0.0.7.tgz","_integrity":"sha512-5IR/BM3IRoz91oEbJ9XMRauTvXQyqZ1hSKaPlpxHJbMGjDaYDrxkcsSLQySbRr2q2FsOWAZUPTjrmpl6b1b8EA==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.8","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.7_1786585118611_0.6857715253240162","host":"s3://npm-registry-packages-npm-production"}},"0.0.8-canary.682.8c034b2":{"name":"@slopus/happy-providers","version":"0.0.8-canary.682.8c034b2","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.8-canary.682.8c034b2","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"19cb5dd6113a2573b487d211d5431a7900c3ffdc","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.8-canary.682.8c034b2.tgz","fileCount":1108,"integrity":"sha512-OiU+J0Ag5H/1xyOOdf27mFqkZNYKCrVVMTFBmtgO9zOpezBDDX3vyWU2VB8Smz5hY5Y6cMaKFESt89+F6Azu5w==","signatures":[{"sig":"MEUCIQCWmSV9yhkNYx0YldNFKRQHD7p00JVgNwOBk3yGjUWfWQIgRZEY9kkhII18haZCEcRdJz/pJJbghWKAWff2hxRAO0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.8-canary.682.8c034b2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1890084},"type":"module","_from":"file:slopus-happy-providers-0.0.8-canary.682.8c034b2.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/89d33c9e04067857219cfa85d3369529/slopus-happy-providers-0.0.8-canary.682.8c034b2.tgz","_integrity":"sha512-OiU+J0Ag5H/1xyOOdf27mFqkZNYKCrVVMTFBmtgO9zOpezBDDX3vyWU2VB8Smz5hY5Y6cMaKFESt89+F6Azu5w==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.16.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.8","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.8-canary.682.8c034b2_1786585542239_0.842506350203186","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@slopus/happy-providers","version":"0.0.8","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.8","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"1d876edcbbed6ec6213f2fd48c1695e046660165","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.8.tgz","fileCount":1108,"integrity":"sha512-c8r41solmLODAku2HBOhdkihEKrbaoToDt7g1eqR6FesOccl9nQs8EXPSUX92XuNRM9bflsGE4BxwmJQFJ4ouw==","signatures":[{"sig":"MEYCIQD4UEU0u2D+C3MGdrI9xyD27LwDac0mbJwz+A4egKGubwIhAILqB+TgjDxqlFbQgrh4GCnxj6YfFE7nzqmWy6FSQ95P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1890066},"type":"module","_from":"file:slopus-happy-providers-0.0.8.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/5c0e0fa2c926407a30852f6eb5c0710a/slopus-happy-providers-0.0.8.tgz","_integrity":"sha512-c8r41solmLODAku2HBOhdkihEKrbaoToDt7g1eqR6FesOccl9nQs8EXPSUX92XuNRM9bflsGE4BxwmJQFJ4ouw==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.10","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.8_1786786409350_0.3197400701060873","host":"s3://npm-registry-packages-npm-production"}},"0.0.9-canary.737.9dd155e":{"name":"@slopus/happy-providers","version":"0.0.9-canary.737.9dd155e","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.9-canary.737.9dd155e","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"e2bc41b7539935bc6696df92ae4576983a69f1d0","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.9-canary.737.9dd155e.tgz","fileCount":1108,"integrity":"sha512-c0wBB8Q2MgK/Mn8VtiuadHSu980lQSlY9W3sxD4lnuCFcfwv4dEWrJN4aSRe76en4Znl8IKdVFj+c3FsZByV0w==","signatures":[{"sig":"MEYCIQDt9qiosZWypNRLIfsGxfEHToZPW1w/us6LaiKaRHKNPgIhAPqJ5rxlQbu/0GlpdsBZ553gijwE5ZA5P15/zJUyQWsw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.9-canary.737.9dd155e","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1890085},"type":"module","_from":"file:slopus-happy-providers-0.0.9-canary.737.9dd155e.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/25d1c9d3160898a3d75c68296b3a52da/slopus-happy-providers-0.0.9-canary.737.9dd155e.tgz","_integrity":"sha512-c0wBB8Q2MgK/Mn8VtiuadHSu980lQSlY9W3sxD4lnuCFcfwv4dEWrJN4aSRe76en4Znl8IKdVFj+c3FsZByV0w==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.10","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.9-canary.737.9dd155e_1786820401328_0.7269810752625896","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@slopus/happy-providers","version":"0.0.9","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.9","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"08885b32fdd4390075e6fe34b5a2fdb5e4dd39d1","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.9.tgz","fileCount":1112,"integrity":"sha512-mOjwB12N/4oevqAMKu350IOqvqdZqtb056CVs6NBGFlsyNHnoviNwvh8MMB7VjTZU1MkAw0+FJmWjkjTLAVcjg==","signatures":[{"sig":"MEYCIQCHffj8iPKj4z5GJ9bdLBVIMcndreSQeWW7ivlgm3xsSQIhAPaHAmw8QDMYwGMddLWl4Vu8nKqqT5GeSJj7EtG3Zoep","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1904123},"type":"module","_from":"file:slopus-happy-providers-0.0.9.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/d7eb9e03ad7c32cab7b5b1cc8d8d7986/slopus-happy-providers-0.0.9.tgz","_integrity":"sha512-mOjwB12N/4oevqAMKu350IOqvqdZqtb056CVs6NBGFlsyNHnoviNwvh8MMB7VjTZU1MkAw0+FJmWjkjTLAVcjg==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.12","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.9_1786940415645_0.5393682663273678","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@slopus/happy-providers","version":"0.0.10","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.10","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"615266badbf289661093bb8a52a42615bdfaf09c","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.10.tgz","fileCount":1116,"integrity":"sha512-C1pkzXIf99298E5OKmyLeYSbxpo2zVuIo2rsHcKEu/Sqy0mvyh+RhQxRAiQ27C8lT2rFGSYJQ/UbZmIWndxtSg==","signatures":[{"sig":"MEUCIQCkg3xi9FvddPyKTT7YF3cZh6gBRkhChm0gHtaxWtR37wIgaryl1Fh4WDODrsYuTyajnH/CFumLg0iJwEII1Fs7KOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1910182},"type":"module","_from":"file:slopus-happy-providers-0.0.10.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/c6e5a12eb2dbe6eb2aa9c145a932241b/slopus-happy-providers-0.0.10.tgz","_integrity":"sha512-C1pkzXIf99298E5OKmyLeYSbxpo2zVuIo2rsHcKEu/Sqy0mvyh+RhQxRAiQ27C8lT2rFGSYJQ/UbZmIWndxtSg==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@steve.kite/stdlib":"0.0.12","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.10_1786947190772_0.9052672459445701","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@slopus/happy-providers","version":"0.0.11","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.11","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"85e34c6cbed0ddae0206e454dfcbbc0587de2811","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.11.tgz","fileCount":1120,"integrity":"sha512-Zir1cUBbcFgIvtTDtdz/gZ0G6PBz2/x/49+rHIZ/318+n2VxBfw0ijkuo9RTYv/wEseJODBuaPl9Z7P6bbaezw==","signatures":[{"sig":"MEYCIQDpjyAdTJE/7yDqXTi71dlcmtZuqVmn94Ze8ewniuntawIhAKuvwH9PWCMYyZ+7ljLLXrENPDyfXi1tcf9/Cfk3NLbN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1927583},"type":"module","_from":"file:slopus-happy-providers-0.0.11.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/a8a7dae6dd1370a898bb78ce5f15e30d/slopus-happy-providers-0.0.11.tgz","_integrity":"sha512-Zir1cUBbcFgIvtTDtdz/gZ0G6PBz2/x/49+rHIZ/318+n2VxBfw0ijkuo9RTYv/wEseJODBuaPl9Z7P6bbaezw==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.11_1787164556372_0.34123126852706176","host":"s3://npm-registry-packages-npm-production"}},"0.0.12-canary.919.7adecc1":{"name":"@slopus/happy-providers","version":"0.0.12-canary.919.7adecc1","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.12-canary.919.7adecc1","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/rig#readme","bugs":{"url":"https://github.com/slopus/rig/issues"},"dist":{"shasum":"aa4b94d7e8aefca73318f06b25fca96635600652","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.12-canary.919.7adecc1.tgz","fileCount":1120,"integrity":"sha512-vX1mZyX17w0usOWmvM6YUDMk1YMYXQLw+OY+0DDPwiupaSqwuUZMbEusdaRwqL/h5acQU1aj4MhgZqK+x0KYGg==","signatures":[{"sig":"MEUCIQC5tzEL4aTS1CE5WneJiI17codiHOfTXxjJFz847FV+AQIgJLQG9v9OfGH95XkuCC7gN+UFC9vm16H9S67HnQHJbH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.12-canary.919.7adecc1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1927602},"type":"module","_from":"file:slopus-happy-providers-0.0.12-canary.919.7adecc1.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b29eee3b-07f2-45de-8ee6-0c4ec1944896"}},"_resolved":"/tmp/924f1b346c4f66c5a6ca1d2d0eea1963/slopus-happy-providers-0.0.12-canary.919.7adecc1.tgz","_integrity":"sha512-vX1mZyX17w0usOWmvM6YUDMk1YMYXQLw+OY+0DDPwiupaSqwuUZMbEusdaRwqL/h5acQU1aj4MhgZqK+x0KYGg==","repository":{"url":"git+https://github.com/slopus/rig.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.12-canary.919.7adecc1_1787195990042_0.34026154017971666","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@slopus/happy-providers","version":"0.0.12","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.12","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"78b8101ed8085c0075701359d74ad9b240265897","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.12.tgz","fileCount":1120,"integrity":"sha512-iacKDoJRff5++PWU0HVerjjKrTpY7glO52dbdyl7LsVIBk1C/Zj15MH88Clg/MlC5qxai9k1EI3BJvSfzAb27w==","signatures":[{"sig":"MEUCIQDnL79Wnwqm31ChIhOLv3Lgdgj/SP5rqhSSBeStUs6jQAIgJOnn9tr1UDsefxZpKUpyxaR+GqkC/4suXpOJMCI2B4o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1934253},"type":"module","_from":"file:slopus-happy-providers-0.0.12.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/ce118e5832cf69eebe2d8f46c0cb928b/slopus-happy-providers-0.0.12.tgz","_integrity":"sha512-iacKDoJRff5++PWU0HVerjjKrTpY7glO52dbdyl7LsVIBk1C/Zj15MH88Clg/MlC5qxai9k1EI3BJvSfzAb27w==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.12_1787368183946_0.15599872027405115","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@slopus/happy-providers","version":"0.0.13","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.13","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"943a747368977285b3c5ad4f50cbcf7978a2f3e1","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.13.tgz","fileCount":1124,"integrity":"sha512-iO8DCZWjsuGZZZX9bnaBwkV8KWdzRyfUshSLCdfldSdKTZPjfLHhADEwzyHacwe3ZPwTT4+3LsHXm5DVzLeWaA==","signatures":[{"sig":"MEQCICjmcGGr3MoxaOwdeq4spdvPYoBDljKlF9n5NReyLX7OAiA4AclmUKeZDIjqjUd3JU85AjWd9sobYfxz644tMyG0PQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1948719},"type":"module","_from":"file:slopus-happy-providers-0.0.13.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/55e58c65bec06dcd13ab4f8d995a7190/slopus-happy-providers-0.0.13.tgz","_integrity":"sha512-iO8DCZWjsuGZZZX9bnaBwkV8KWdzRyfUshSLCdfldSdKTZPjfLHhADEwzyHacwe3ZPwTT4+3LsHXm5DVzLeWaA==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.13_1787462131245_0.016336700215912048","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@slopus/happy-providers","version":"0.0.14","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.14","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"305d0c76947b09cf15bde99c91e75e8f1be8393e","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.14.tgz","fileCount":1120,"integrity":"sha512-9Nyt8cSelCoT8c/Zt6RiDFofTkKWndAs7vtT1cu78VJXMUd/9p58orIxuVGjhnufsV+qJpxJqqb6A8tIQ42b/Q==","signatures":[{"sig":"MEUCICg0c/EV8/XkWB1g3u0tSHLBxHO5Nxv5hq6u3Hngn/t6AiEApAY86OefzmJhF6Tx1gCAUNkcnfUEGhfa1LoZwZ2M2LE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1937830},"type":"module","_from":"file:slopus-happy-providers-0.0.14.tgz","browser":false,"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/a059310816d4d0a5c8ce6e44169d8dc7/slopus-happy-providers-0.0.14.tgz","_integrity":"sha512-9Nyt8cSelCoT8c/Zt6RiDFofTkKWndAs7vtT1cu78VJXMUd/9p58orIxuVGjhnufsV+qJpxJqqb6A8tIQ42b/Q==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.14_1787471468504_0.3977893890810671","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@slopus/happy-providers","version":"0.0.15","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.15","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"0f00709b06099d69d06eb7962a528b4ec4cf4779","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.15.tgz","fileCount":1120,"integrity":"sha512-PlK0EAkKjQa1dUAczQGRMzNH71juo6ZHOOYpbtDoupLcMm6bG33qiDoNF8PeOGkrk9oZCJVlnyo41SBpOHo1ZA==","signatures":[{"sig":"MEUCIQCKSZesHhrME2m0GAHPtp2lmVq20b2QFIEWaTRGmDrXcgIgePuWWx50pz5wSF8HGYz/Wmckkmj6pyk9xu/fHtkIaOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1939139},"type":"module","_from":"file:slopus-happy-providers-0.0.15.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/bb47e8620b7abdd6ea242cd633a05bac/slopus-happy-providers-0.0.15.tgz","_integrity":"sha512-PlK0EAkKjQa1dUAczQGRMzNH71juo6ZHOOYpbtDoupLcMm6bG33qiDoNF8PeOGkrk9oZCJVlnyo41SBpOHo1ZA==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.15_1787475009815_0.9191258008666445","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@slopus/happy-providers","version":"0.0.16","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.16","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"d397a74c7f8d55701f30573c2290d639ab15302e","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.16.tgz","fileCount":1120,"integrity":"sha512-2MUajHflWxVj0gh2KI+vIWHBs1qqIHLTJTmHfDf5Pue8gzRgaqI2Wrxz/NrsRGGmpdIu5MKwn/63G/dgEIglVQ==","signatures":[{"sig":"MEQCIE/au1i1fpLZJw5D0QkxNJsrxfQnmBh9q+NdfsuO6qBfAiA2RsRCTkfnNt9aFdFvUNUREIMg2MiMLjDmbJxGxiqpOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1939139},"type":"module","_from":"file:slopus-happy-providers-0.0.16.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/8c8b6c3ca8144926d153db4e710a6260/slopus-happy-providers-0.0.16.tgz","_integrity":"sha512-2MUajHflWxVj0gh2KI+vIWHBs1qqIHLTJTmHfDf5Pue8gzRgaqI2Wrxz/NrsRGGmpdIu5MKwn/63G/dgEIglVQ==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.16_1787475699166_0.6402772666052605","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@slopus/happy-providers","version":"0.0.17","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.17","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"d222b22a0afdb4888cd0cb5034b63dc861bc276d","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.17.tgz","fileCount":1120,"integrity":"sha512-NbEoYN1IVwoRz4MFKtBObpyZnlN1LCbiZr/PLn9UhIf64ltmBjew50SRntDMfwefxsX6nmzRlsVMkMN9LvRqmQ==","signatures":[{"sig":"MEQCICNaAaUcm2OXKazF+jQCnZN1Q4pm7wRt3FlEMUeaSHHqAiAp30C6CDsxXDYg7PRAXxoWgq55byjFQHB+Xe0SKSP/Kg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1985497},"type":"module","_from":"file:slopus-happy-providers-0.0.17.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/0d107aebfebd5bb2963ba87545c2317e/slopus-happy-providers-0.0.17.tgz","_integrity":"sha512-NbEoYN1IVwoRz4MFKtBObpyZnlN1LCbiZr/PLn9UhIf64ltmBjew50SRntDMfwefxsX6nmzRlsVMkMN9LvRqmQ==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.17_1787543763775_0.8259800478511783","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@slopus/happy-providers","version":"0.0.18","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.18","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"11c58c8dcf1ba3250e2c9d470ee15b37f664526e","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.18.tgz","fileCount":1120,"integrity":"sha512-0Mcgn5sleeoyusXpZSAzWBWHfV9yvjVfO0gFw0o47LlnhuuJrAjypeQPRN/fKpoQWyTjubeksED5ovaMiWqmsQ==","signatures":[{"sig":"MEUCIE+V0TO7OykvMQb+Xwx7mt5Y46Kb3pTxgHrhRZoiiYnbAiEA5EK5QOLCnGlhZJljg6Vt59DoH9HkPnQ3l9Vpy9f4IF8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1987763},"type":"module","_from":"file:slopus-happy-providers-0.0.18.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/44a34733c5a1bcf13d7ec07d1a408e15/slopus-happy-providers-0.0.18.tgz","_integrity":"sha512-0Mcgn5sleeoyusXpZSAzWBWHfV9yvjVfO0gFw0o47LlnhuuJrAjypeQPRN/fKpoQWyTjubeksED5ovaMiWqmsQ==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.18_1787577309520_0.9438772323897153","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"@slopus/happy-providers","version":"0.0.19","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.19","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"e41496ba3ba012a2979d29df99400f469ec3c9d0","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.19.tgz","fileCount":1120,"integrity":"sha512-spq7YNmkDot91yyomcrs1MrU1CS6huhH1ShiATcsDhIfeLy+UI+1KA7oAhN2OKYnvEiWNoYHUTrr1zdDXukHXg==","signatures":[{"sig":"MEQCIF233Hlc9WFMgHX+CNuy4PY5g6uRK60hrm768yB3DFHXAiBtqjCDU4Tg+PI35TSMUvZDvwatAr205acUViqcI6Q/Gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1987835},"type":"module","_from":"file:slopus-happy-providers-0.0.19.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/287f2174b937e90f6c164abb6f9266e6/slopus-happy-providers-0.0.19.tgz","_integrity":"sha512-spq7YNmkDot91yyomcrs1MrU1CS6huhH1ShiATcsDhIfeLy+UI+1KA7oAhN2OKYnvEiWNoYHUTrr1zdDXukHXg==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.19_1788299553830_0.5311252342225652","host":"s3://npm-registry-packages-npm-production"}},"0.0.20":{"name":"@slopus/happy-providers","version":"0.0.20","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.20","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"5f4b1f6203620a1ddc81ecdb9014805df7cd4f2a","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.20.tgz","fileCount":1124,"integrity":"sha512-4C8MKUWhcchD4KGNt1gnPZns5C5yUvp7N54BgvVVwHdMyOVgarhQQLF+WIEY4snjLGovRgfRUx7zAJw+kQNnUw==","signatures":[{"sig":"MEUCIQDv7KTcmKzvVZLvqO/oMVweVt0vxxiyW+OGRYcUjXgPkgIgIYbW6sXG8DQemMFoSfTay40InoAQw45sc05ztVAA9CE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1990710},"type":"module","_from":"file:slopus-happy-providers-0.0.20.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/12ac3fc0ac090c8ac264e2efb080fb85/slopus-happy-providers-0.0.20.tgz","_integrity":"sha512-4C8MKUWhcchD4KGNt1gnPZns5C5yUvp7N54BgvVVwHdMyOVgarhQQLF+WIEY4snjLGovRgfRUx7zAJw+kQNnUw==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.17.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"^0.3.226","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-x64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-win32-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-darwin-arm64":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"^0.3.226","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"^0.3.226"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.20_1788311594204_0.9535321196804007","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"@slopus/happy-providers","version":"0.0.21","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.21","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"a77c1460ce45dbe13fbce7d55a2e8f9ec3451e5f","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.21.tgz","fileCount":1124,"integrity":"sha512-E+QKCv7yApThUBMHPI5/Vet00hsnia0qWpaE52rmcRExg2w0KulAqbguY/UetqTGzxyDQ9kWCWcJ708kMa224Q==","signatures":[{"sig":"MEUCIQDByE9mXeUi79n5YFzE5dQJPFnSyoBbhshek8ljoss7wgIgO7sgOcwiIjE8/beCfB/XMaxL07psYCH1A4AgpzZVWNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1992400},"type":"module","_from":"file:slopus-happy-providers-0.0.21.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/3957c5786025a30150c5e0796ad2caab/slopus-happy-providers-0.0.21.tgz","_integrity":"sha512-E+QKCv7yApThUBMHPI5/Vet00hsnia0qWpaE52rmcRExg2w0KulAqbguY/UetqTGzxyDQ9kWCWcJ708kMa224Q==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.21_1788723456690_0.22481784153095363","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"@slopus/happy-providers","version":"0.0.22","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.22","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"545799f549878731fe88a584308a8f5eb998c83b","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.22.tgz","fileCount":1124,"integrity":"sha512-PfWA1WqAv062GxnA7nZ0Hi7fAP4YLPtyHPfNdJAH+U5FwqLhvSQRxyXtqJIVITEbgG2Gtp7A+srBMk13RkZZew==","signatures":[{"sig":"MEUCIQCRQMkVGsLRnxknFdSi5cPTUEd8c5wcFtWzoSNF4KVRRgIgHhKwv10N4RrSVscsBU5UF2xdVHmgfGst3aZhHTur7M0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1993022},"type":"module","_from":"file:slopus-happy-providers-0.0.22.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/24f123741287d31ecd2447ca0412c641/slopus-happy-providers-0.0.22.tgz","_integrity":"sha512-PfWA1WqAv062GxnA7nZ0Hi7fAP4YLPtyHPfNdJAH+U5FwqLhvSQRxyXtqJIVITEbgG2Gtp7A+srBMk13RkZZew==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.22_1788896486769_0.9936468336649202","host":"s3://npm-registry-packages-npm-production"}},"0.0.23":{"name":"@slopus/happy-providers","version":"0.0.23","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.23","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"3d1dc4f6d6e1bd39d3b5918fa5425795279d11a9","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.23.tgz","fileCount":1124,"integrity":"sha512-VF2SpaCed9lL6Kdq+mR6kceXrd3i/zYRStIG5Gerog+CixIFrLDuPfZ9UE4nG3wMBjS21MNqeq7Txqb+GdfOXg==","signatures":[{"sig":"MEUCIHCvJDEsExVnIdpmD0BG+mnaDTDncGH/VZ6NV2x192o7AiEA9f/7L8pFxuufdjFBJe+qlu0tGL2Ja2T2s5xT9htw1uU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1996686},"type":"module","_from":"file:slopus-happy-providers-0.0.23.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/a15b4c5e6926b5c6b9f1c3bf3368c2fe/slopus-happy-providers-0.0.23.tgz","_integrity":"sha512-VF2SpaCed9lL6Kdq+mR6kceXrd3i/zYRStIG5Gerog+CixIFrLDuPfZ9UE4nG3wMBjS21MNqeq7Txqb+GdfOXg==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.23_1788906562284_0.6306827637332268","host":"s3://npm-registry-packages-npm-production"}},"0.0.24":{"name":"@slopus/happy-providers","version":"0.0.24","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.24","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"6b07f3123d937665f707b1812b88f43043402b21","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.24.tgz","fileCount":1124,"integrity":"sha512-vHjL/qIVwYL6MYiB7hodLqqcr4kiOIZwJeUwX+Xn0JDZgsKZRigkuYHGlHlntHOudC3ExBWb7eJ8fuTHkGVrRQ==","signatures":[{"sig":"MEQCIAVPqmDmxaC1gf7mw6RTLyT5JhYKZEQzSIv9cverFSCQAiBa4ZRONFGMuiKh5mnjuRip/lVlKTnVwpaZIl7McAyQew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2006450},"type":"module","_from":"file:slopus-happy-providers-0.0.24.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/15f78251a933de7836c7528d0df5fb97/slopus-happy-providers-0.0.24.tgz","_integrity":"sha512-vHjL/qIVwYL6MYiB7hodLqqcr4kiOIZwJeUwX+Xn0JDZgsKZRigkuYHGlHlntHOudC3ExBWb7eJ8fuTHkGVrRQ==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.24_1788910343865_0.9184660907520235","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"@slopus/happy-providers","version":"0.0.25","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.25","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"bffe46b0b76f464ca17e5d46c44f6004bcff86b2","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.25.tgz","fileCount":1124,"integrity":"sha512-/HyEC4LWvSADmJQPqZq3/tJSYF0qoO4Ji52vO6lP5F3+CmKefC6c7zReUEp7B1bTzQ6bd3tQc3wiDIXKlGB4Rg==","signatures":[{"sig":"MEYCIQD1WzCbvPyI1Ffdoi+IuLhyA5W6Tc1+JWhnJuDzQZul+wIhAKH3H8rdMlnmy7RA1D5c8Y3y8GJD+fUsoKYifss2qXa0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2011582},"type":"module","_from":"file:slopus-happy-providers-0.0.25.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/e1c0c78c4559dc04107dbdc46fee62e3/slopus-happy-providers-0.0.25.tgz","_integrity":"sha512-/HyEC4LWvSADmJQPqZq3/tJSYF0qoO4Ji52vO6lP5F3+CmKefC6c7zReUEp7B1bTzQ6bd3tQc3wiDIXKlGB4Rg==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.25_1788918510938_0.07046118402878365","host":"s3://npm-registry-packages-npm-production"}},"0.0.26":{"name":"@slopus/happy-providers","version":"0.0.26","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.26","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"20a02797c2c5118597c47ffb17c16ff8378d2ade","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.26.tgz","fileCount":1124,"integrity":"sha512-bF7FELH290YnwQbwqI2HlSKdMnCxZMs9pqmaMQ0eN15Ue+mY4dJY5Y1XwNXmOWQkV6I7zEc6Hho9YNSCp7t7/Q==","signatures":[{"sig":"MEUCIE6RvB11r3V4EXh+++EWbGiK8qERw1eIelNEEqM9ENoIAiEAl1OtOdEoDr3QVFKqb7sUf5wZU4eSemb+msn8WYA6ZWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2013094},"type":"module","_from":"file:slopus-happy-providers-0.0.26.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/5fbc3c90648c95e4147379377fa9e4c8/slopus-happy-providers-0.0.26.tgz","_integrity":"sha512-bF7FELH290YnwQbwqI2HlSKdMnCxZMs9pqmaMQ0eN15Ue+mY4dJY5Y1XwNXmOWQkV6I7zEc6Hho9YNSCp7t7/Q==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.26_1788919958894_0.0767962721640012","host":"s3://npm-registry-packages-npm-production"}},"0.0.27":{"name":"@slopus/happy-providers","version":"0.0.27","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.27","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"a9766a4ce157a6a69a1a30cde3e0210c887cd35f","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.27.tgz","fileCount":1124,"integrity":"sha512-ZY4CnQJ+K7nje0lj5Pt0nPtA4kv7jrkLmB3kz8xmgOMTFUsYLZlFSOF2K9uTdtdLPhJnssDsdHbQvG6ngDaccw==","signatures":[{"sig":"MEUCIGOI93/0/G68X4Wv/Bu5Tr5uSI9BLCnAQncz8iHif0qGAiEAse9RG8srkXcZpGowavewJHPhA7+6y/MvCES6FArVsDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2015003},"type":"module","_from":"file:slopus-happy-providers-0.0.27.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/288ceb6e1426eee695f252fb0eaf3700/slopus-happy-providers-0.0.27.tgz","_integrity":"sha512-ZY4CnQJ+K7nje0lj5Pt0nPtA4kv7jrkLmB3kz8xmgOMTFUsYLZlFSOF2K9uTdtdLPhJnssDsdHbQvG6ngDaccw==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.27_1789007427882_0.8225216811580542","host":"s3://npm-registry-packages-npm-production"}},"0.0.28":{"name":"@slopus/happy-providers","version":"0.0.28","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.28","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"ffb354a17ce20354f3ba65e1a0d0c121b2f9a18a","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.28.tgz","fileCount":1124,"integrity":"sha512-Qf9X9CopVbF9TH1oq9KV6F98PaCtQ88YAMP64KHUzgllPI3lZ9MGuLg9CO990ln53H5q9Izm1LvIIBUSjxmRNw==","signatures":[{"sig":"MEUCIEvI35VfIZ5wOBiA0O+nmmCcRWxvlq76DkWcdkbeNnwjAiEAn7oavM99PQWJKZhGNqlKZMxzaSCqoALKUKDSLf25UQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIADP3cNZ+Alf6u/OlV6UKdNtAWPJft8iYBP1K3vhpEtWAiA138IJRmHupPFyLt0fU3Ngflw/SYczY3mHrSsp6wpwYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2017946},"type":"module","_from":"file:slopus-happy-providers-0.0.28.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/fd4cfdfc41576fe88875a0eb804dfd74/slopus-happy-providers-0.0.28.tgz","_integrity":"sha512-Qf9X9CopVbF9TH1oq9KV6F98PaCtQ88YAMP64KHUzgllPI3lZ9MGuLg9CO990ln53H5q9Izm1LvIIBUSjxmRNw==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.28_1789415707405_0.36813170478888346","host":"s3://npm-registry-packages-npm-production"}},"0.0.29":{"name":"@slopus/happy-providers","version":"0.0.29","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.29","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"e5cd1689732a96f056ddfb53d0b3d2c444b39eff","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.29.tgz","fileCount":1128,"integrity":"sha512-q81i8xnE+ToCnqBZeG4vwwmm/zhLpcOMDZQFjaNXAODMh6xR26FR5Ri6hizubwObcrfEmu2kQ/x8M2OA6Vf1wQ==","signatures":[{"sig":"MEUCIBJWQLLdmwoxYAAtauco5R8Ne5FnwIJ7IOBTsNrfUcgSAiEA+Eg8M99X4idI/WqKenMWeCVqL+WS3IdJfuGFuMTKjoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEQyB/TLuZJoBNzJpdxDxxemPlGOP8U5vNa/dkOEUA8TAiAtB57ILSkyC6Uz3GShUynEOLs5i3GsXWSPrxJ3MaBK9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2031831},"type":"module","_from":"file:slopus-happy-providers-0.0.29.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/2377c275d1e96722bd5aa421d05a05d0/slopus-happy-providers-0.0.29.tgz","_integrity":"sha512-q81i8xnE+ToCnqBZeG4vwwmm/zhLpcOMDZQFjaNXAODMh6xR26FR5Ri6hizubwObcrfEmu2kQ/x8M2OA6Vf1wQ==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.251","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.251","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.251"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.29_1790050001340_0.11045795158702854","host":"s3://npm-registry-packages-npm-production"}},"0.0.30":{"name":"@slopus/happy-providers","version":"0.0.30","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.30","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"fcf5ddd235c7c9c8c8099c1f5d114fa3f7b770b4","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.30.tgz","fileCount":1132,"integrity":"sha512-qTpP95JjP5L15jJBm3Ej2ezXQQsTTdAAB/RXWrfOt+6gdCryZ1TYxXeRZHEop/F2Bs5k+a47PaEbGLsSmSeABA==","signatures":[{"sig":"MEUCICSEAG8Wk38iXW5eXC3aiL+eHg/YumbC3v6Izxh446DcAiEA0pZLqomOdH1xFY+8IjUpQ50vGRCQWZASziilpx+0NFw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH6ut6kijaXmHj9qTYsXU0kEDk2zs1nnXzoOPxO0ZbT1AiEArbCqA28vuF7l8Mu8STt9niSgHexc2/7f9EE8otelEBI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2049773},"type":"module","_from":"file:slopus-happy-providers-0.0.30.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/0af2326fb2f78e364cda38c4ed5e258d/slopus-happy-providers-0.0.30.tgz","_integrity":"sha512-qTpP95JjP5L15jJBm3Ej2ezXQQsTTdAAB/RXWrfOt+6gdCryZ1TYxXeRZHEop/F2Bs5k+a47PaEbGLsSmSeABA==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.280","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.280"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.30_1790111390368_0.6593799432422083","host":"s3://npm-registry-packages-npm-production"}},"0.0.31":{"name":"@slopus/happy-providers","version":"0.0.31","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.31","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"cdbff2d8576bf30b239c9d85db9e6f8996d62211","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.31.tgz","fileCount":1136,"integrity":"sha512-/ypGIK50Y+s9MgyW+KB765Q1TufLFj3cOq306m8qF8iMo4c51i8zoO9J1GHxjTAiLjUKbdvbxNx2gz3IFqzbDw==","signatures":[{"sig":"MEQCIES3qWX8sxst9ovAWGxWtRVySE5tN/QJSYhqGG4p/KhAAiAOb3Tvuzl0Wve/ByokpjFUVFjr0mhvuPH4pVxQcQM44A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAagzsu3nP+G7j3FC7alKuQvcK7cUeKmrOiNY+9UV47kAiAD8GLXkPcWe60yW0SIxMBlHhvhGSeE4b+pEidPj1oOfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2065362},"type":"module","_from":"file:slopus-happy-providers-0.0.31.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/a632b79eb49038838847868ffc39f5ac/slopus-happy-providers-0.0.31.tgz","_integrity":"sha512-/ypGIK50Y+s9MgyW+KB765Q1TufLFj3cOq306m8qF8iMo4c51i8zoO9J1GHxjTAiLjUKbdvbxNx2gz3IFqzbDw==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.280","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.280"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.31_1790278978356_0.005178044387381453","host":"s3://npm-registry-packages-npm-production"}},"0.0.32":{"name":"@slopus/happy-providers","version":"0.0.32","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.32","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"a86213b71cafbd191f9437fde260025973462d39","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.32.tgz","fileCount":1136,"integrity":"sha512-Lns16XZAZRCA4OCcDYlOP3fNt3XPNrRWI9BssCtDMjhrGJftnvYIOEMGevCQ38tDn4/Dr3kDr7PeeDxFPjnujA==","signatures":[{"sig":"MEYCIQDuDnOSgJr/VAv6NT7KEDTm36mr8GLa6MJmgM4SRxcEnQIhAPSSOa8CgDQRKu0Zg5e8J3oumCgxZmLR+ZC/GG7DXrBS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzN2neGIKZYkm29Dx7PNYYyNED+p+bqNdV9fuPnP7FcAIgCeqR5lbulqogsBVHg51jtH3OJHCHSdqyfEhyRdM6gnY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2067323},"type":"module","_from":"file:slopus-happy-providers-0.0.32.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/c747832055a447f406c670344994632b/slopus-happy-providers-0.0.32.tgz","_integrity":"sha512-Lns16XZAZRCA4OCcDYlOP3fNt3XPNrRWI9BssCtDMjhrGJftnvYIOEMGevCQ38tDn4/Dr3kDr7PeeDxFPjnujA==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.284","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.284"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.32_1790709671417_0.28776475176353267","host":"s3://npm-registry-packages-npm-production"}},"0.0.33":{"name":"@slopus/happy-providers","version":"0.0.33","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.33","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"4105efb60cc49438c214b054a022c7b65fab101f","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.33.tgz","fileCount":1144,"integrity":"sha512-A6Mhp/l02jS+FkTptJuWmCsy64GQ9gaHQ4IUEmdxquBNMO5s3LO87fCAyJxGodKuYytDMGNsZwRelRCTcB3RyA==","signatures":[{"sig":"MEYCIQCT9Chm2SNMogZDyDXMjzjYCelXtpENIJ/QO5BjiLKSbQIhAJApVC5u517zFS5ACJWEaIO0K3NSXRUrbxZjf1SRFURy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCLIzsjJF75AaXSirUbINy+wQTtsbvW5AJ4+viwf2YaxgIgb06NHgWBGQmjWy4HEWG6lUedGtR+2e3Lz8UAEY8NxSs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2086958},"type":"module","_from":"file:slopus-happy-providers-0.0.33.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/c72d9c10bfeaae3e9c472aff547f4c43/slopus-happy-providers-0.0.33.tgz","_integrity":"sha512-A6Mhp/l02jS+FkTptJuWmCsy64GQ9gaHQ4IUEmdxquBNMO5s3LO87fCAyJxGodKuYytDMGNsZwRelRCTcB3RyA==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.284","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.284"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.33_1790760890136_0.07845317685835163","host":"s3://npm-registry-packages-npm-production"}},"0.0.34":{"name":"@slopus/happy-providers","version":"0.0.34","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.34","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"6d0b75333979d853a08f1ca675ab1ce528e2d14e","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.34.tgz","fileCount":1144,"integrity":"sha512-BikIQTii3fnrsRxUB95ejrsRHswL9y8nYGll6ASIuCVhb3Q+E+nGpNXP3hmeni/Z7gAl2U9GgAb5p7CijjoZEg==","signatures":[{"sig":"MEUCIQCUd1S5shQwmYC1Nv/A0wHfeY1gVa9D7PX4q9QedLeAGQIgP/ox0kwFE2lFLyNvY8S8wkW8t5dDESTDbp361ifIo6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCWy4zHMfc+6Wnjf+1yDuO2uSg1Qg0C113EMIdkqgIH7wIhAIDqOtK331WJOjGsAnqD8Y8K6L54+ZO26ci3P2cHmiiE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.34","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2087094},"type":"module","_from":"file:slopus-happy-providers-0.0.34.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/58172cd22a7f160ca988b99342e68807/slopus-happy-providers-0.0.34.tgz","_integrity":"sha512-BikIQTii3fnrsRxUB95ejrsRHswL9y8nYGll6ASIuCVhb3Q+E+nGpNXP3hmeni/Z7gAl2U9GgAb5p7CijjoZEg==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.284","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.284"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.34_1790803366480_0.6563074234520163","host":"s3://npm-registry-packages-npm-production"}},"0.0.35":{"name":"@slopus/happy-providers","version":"0.0.35","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"license":"MIT","_id":"@slopus/happy-providers@0.0.35","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"homepage":"https://github.com/slopus/happy-agent#readme","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"9d6906a539e247d3c520d0d52eb61fb62e680cfb","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.35.tgz","fileCount":1144,"integrity":"sha512-frde0fYqEmTzUVOLfjdzGmMxO4oQQFRnn7RuyqKNc65jQOFl8MYcuWPkARiqD6oXqaox2tAPviQPHov7epPKOA==","signatures":[{"sig":"MEYCIQDWUfzR2Rfv7aZ55y9GrfXgltDfmyQSw04tFqc8laO0PgIhAJue646mbgl++LiNf9DKZ8Eqiwztcn7uA4X/+R6uReMq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBIqcDzSGmsNYaimAuMlfOOC1YSRA30QiGWnZRU4JQA6AiBrRnHnWdNFflwuC8Lj/dliGCym7OCqpL7DF0JHahdeDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2087563},"type":"module","_from":"file:slopus-happy-providers-0.0.35.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"_resolved":"/tmp/eb0fef87d28f3acbd0e1223e04e6467f/slopus-happy-providers-0.0.35.tgz","_integrity":"sha512-frde0fYqEmTzUVOLfjdzGmMxO4oQQFRnn7RuyqKNc65jQOFl8MYcuWPkARiqD6oXqaox2tAPviQPHov7epPKOA==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.284","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.284"},"_npmOperationalInternal":{"tmp":"tmp/happy-providers_0.0.35_1790850657709_0.897160962748283","host":"s3://npm-registry-packages-npm-production"}},"0.0.36":{"_id":"@slopus/happy-providers@0.0.36","bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"dist":{"shasum":"058dac117cccc9c841a0d9c25fd7b5c6b8fc8db5","tarball":"https://registry.npmjs.org/@slopus/happy-providers/-/happy-providers-0.0.36.tgz","fileCount":1224,"integrity":"sha512-yuoZpf6GJ/Yd5gFrfWpC6G9FaRHyKSGVdC4/7aSJHD2P7eqRVNY7xmv9u5I2JRwFimTB9ddH1DrdD20WUPpduA==","signatures":[{"sig":"MEUCIGwYU8WAvsFMFdPTirRz5Sy26XXi3eIhdPaXxISruMwDAiEAlGFFszk1szbo3fQ55NTjjE1xPWkDCasOL4pl/V/XJ6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGj0+kOuvQ9THNR6xs4Av6NNi0YYeSw4cTcNwnk11kTUAiBSpnKtYHsA81lBWKIEWMow0VSjUig4U6TCs+KR+g2i4Q=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@slopus%2fhappy-providers@0.0.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2260945},"name":"@slopus/happy-providers","type":"module","_from":"file:slopus-happy-providers-0.0.36.tgz","browser":false,"engines":{"bun":">=1.4.0","node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"license":"MIT","scripts":{"test":"vitest run --passWithNoTests && pnpm run test:bun","build":"node --eval \"import('node:fs/promises').then(({ rm }) => rm('dist', { force: true, recursive: true }))\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","check":"tsc --noEmit","test:bun":"bun tests/bun/grokOpenAIClient.bun.mjs && bun tests/bun/grokXSearch.bun.mjs"},"version":"0.0.36","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"bbc54241-57ce-4afa-9f8b-652c0bcf3cbc"}},"homepage":"https://github.com/slopus/happy-agent#readme","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"_resolved":"/tmp/e2a688e6832a65cf12b11caaa045d212/slopus-happy-providers-0.0.36.tgz","_integrity":"sha512-yuoZpf6GJ/Yd5gFrfWpC6G9FaRHyKSGVdC4/7aSJHD2P7eqRVNY7xmv9u5I2JRwFimTB9ddH1DrdD20WUPpduA==","repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"_npmVersion":"11.19.0","description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","directories":{},"maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"_nodeVersion":"24.21.0","dependencies":{"openai":"6.46.0","undici":"^8.8.0","deunicode":"1.0.7","@anthropic-ai/sdk":"0.110.0","@sinclair/typebox":"^0.34.49","@smithy/hash-node":"^4.5.2","@steve.kite/stdlib":"0.0.12","@smithy/signature-v4":"5.6.9","wink-porter2-stemmer":"2.0.1","@anthropic-ai/bedrock-sdk":"0.32.0","@modelcontextprotocol/sdk":"^1.29.0","@anthropic-ai/claude-agent-sdk":"0.3.284","@aws-sdk/credential-provider-node":"3.972.71"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/ws":"8.18.1","tsc-alias":"^1.8.16","typescript":"^7.0.2","@types/node":"^24.0.10"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.284","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.284"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/happy-providers_0.0.36_1791318995716_0.7767550861280179"}}},"time":{"created":"2026-08-11T00:19:27.658Z","modified":"2026-10-06T20:36:36.334Z","0.0.0":"2026-08-11T00:19:28.140Z","0.0.1":"2026-08-11T00:30:46.058Z","0.0.4":"2026-08-11T02:44:41.695Z","0.0.5":"2026-08-11T04:17:35.964Z","0.0.6-canary.634.ccbcdca":"2026-08-11T04:21:08.101Z","0.0.6-canary.655.55f9a59":"2026-08-11T07:15:00.292Z","0.0.6":"2026-08-12T22:25:51.282Z","0.0.7-canary.673.83bdc7b":"2026-08-12T22:32:32.808Z","0.0.7":"2026-08-13T01:38:38.870Z","0.0.8-canary.682.8c034b2":"2026-08-13T01:45:42.426Z","0.0.8":"2026-08-15T09:33:29.518Z","0.0.9-canary.737.9dd155e":"2026-08-15T19:00:01.525Z","0.0.9":"2026-08-17T04:20:15.803Z","0.0.10":"2026-08-17T06:13:10.945Z","0.0.11":"2026-08-19T18:35:56.545Z","0.0.12-canary.919.7adecc1":"2026-08-20T03:19:50.297Z","0.0.12":"2026-08-22T03:09:44.100Z","0.0.13":"2026-08-23T05:15:31.393Z","0.0.14":"2026-08-23T07:51:08.657Z","0.0.15":"2026-08-23T08:50:09.997Z","0.0.16":"2026-08-23T09:01:39.316Z","0.0.17":"2026-08-24T03:56:03.950Z","0.0.18":"2026-08-24T13:15:09.721Z","0.0.19":"2026-09-01T21:52:34.003Z","0.0.20":"2026-09-02T01:13:14.379Z","0.0.21":"2026-09-06T19:37:36.900Z","0.0.22":"2026-09-08T19:41:27.000Z","0.0.23":"2026-09-08T22:29:22.440Z","0.0.24":"2026-09-08T23:32:24.010Z","0.0.25":"2026-09-09T01:48:31.091Z","0.0.26":"2026-09-09T02:12:39.068Z","0.0.27":"2026-09-10T02:30:28.100Z","0.0.28":"2026-09-14T19:55:07.559Z","0.0.29":"2026-09-22T04:06:41.507Z","0.0.30":"2026-09-22T21:09:50.553Z","0.0.31":"2026-09-24T19:42:58.483Z","0.0.32":"2026-09-29T19:21:11.581Z","0.0.33":"2026-09-30T09:34:50.247Z","0.0.34":"2026-09-30T21:22:46.614Z","0.0.35":"2026-10-01T10:30:57.895Z","0.0.36":"2026-10-06T20:36:35.870Z"},"bugs":{"url":"https://github.com/slopus/happy-agent/issues"},"license":"MIT","homepage":"https://github.com/slopus/happy-agent#readme","keywords":["ai","anthropic","codex","grok","openai","provider","session"],"repository":{"url":"git+https://github.com/slopus/happy-agent.git","type":"git","directory":"packages/happy-providers"},"description":"Stateful Node.js sessions for Codex, Claude, Grok, Bedrock, and Responses-compatible model providers.","maintainers":[{"name":"steve.kite","email":"steve@korshakov.com"}],"readme":"# @slopus/happy-providers\n\nOne small, stateful session interface for talking to coding-agent model backends. You work with a\nsession — create it, run turns, compact, destroy — while the library absorbs the low-level vendor\nmachinery underneath: wire protocols and transports, request framing, streaming, headers,\ncredentials, and each vendor's own quirks. Swap the provider and the session works the same.\n\nWhat you get:\n\n🔌 **Managed connections** — a session keeps its transport open and warm across turns, so you\nnever think about keep-alive, reconnects, or which wire protocol a vendor speaks this week.\n\n🚨 **Typed errors** — failures are parsed into meaningful, typed cases with human-readable\nmessages wherever we can classify them; only genuinely unknown failures fall back to an\nunclassified error, and even those arrive readable.\n\n🔑 **Coding-assistant credentials and tokens** — reuse the credentials your local Codex, Claude\nCode, or AWS installation already manages, pass an API key or bearer token directly, or discover\nevery account on the machine and let the user pick.\n\n🧪 **Tested against the real thing** — golden traces are captured from the actual Codex, Claude\nCode, and Grok clients talking to their real backends, and the test suite verifies our requests\nmatch what the native clients send.\n\n🔁 **Retries handled for you** — each provider retries its own failures the way its native client\ndoes, reporting every retry to you as it happens and rewinding any half-streamed output cleanly.\nIf an error ever reaches you, it's terminal.\n\n⚡ **Prompt-cache continuity** — cache prefixes stay byte-stable across turns, so continuing a\nconversation costs what a continuation should cost.\n\n🗜️ **Native compaction** — the vendor's own compaction protocol produces the replacement\ncontext. It is never automatic: you decide when to compact and when to adopt the result.\n\n🛠️ **Tools stay yours** — the library streams tool calls to you and carries your results back,\nbut it never executes anything. Permissions and policy live in your application, where they\nbelong.\n\nSupported providers:\n\n- **Anthropic** — one provider that selects the Claude Code SDK or Anthropic Messages on Bedrock\n  from the credential you give it\n- **OpenAI Codex** — Responses, Responses Lite, and OpenAI on Bedrock\n- **OpenAI API** — any generic Responses-compatible endpoint with your own key\n- **Grok Build** — xAI's Responses-compatible protocol\n- **Kimi K3 and GLM 5.3** — OpenAI-compatible Chat Completions on Bedrock Runtime\n\nIf you only remember one thing, make it the last section of this document:\n[a session is a stateful, managed endpoint](#the-most-important-part-sessions-are-stateful-and-managed).\nIt keeps connections and caches warm, it retries failures on its own, and it never executes tools\nfor you.\n\nThis package owns the provider boundary and nothing more. There is deliberately no agent loop, no\ntool executor, no permission system, and no conversation database — those belong to your\napplication.\n\n## Installing\n\nThis is an ESM-only server-side library for Node 22.19 and newer or Bun 1.4 and newer. It needs\nreal process, filesystem, and networking APIs, so it won't run in browsers, bundlers targeting the\nbrowser, edge runtimes, or React Native. The package manifest sets `browser` to `false` on purpose.\n\n```sh\npnpm add @slopus/happy-providers @steve.kite/stdlib\n```\n\nIf your application defines tools, add TypeBox as a direct dependency too — tool parameters are\nTypeBox schemas:\n\n```sh\npnpm add @sinclair/typebox\n```\n\n## Quick start\n\nHere's the whole flow in one small program. It signs in with the credentials your local Codex\ninstallation already manages, opens a session, and has a two-turn conversation. Notice that the\nmessage history lives in _your_ array — the session keeps the connection and continuation state\nwarm, but you own the transcript.\n\n```ts\nimport {\n    CodexProvider,\n    CodexSessionCredential,\n    SessionAssistantMessageAccumulator,\n    type SessionAssistantMessage,\n    type SessionMessage,\n} from \"@slopus/happy-providers\";\nimport { createRootContext, withLifetime } from \"@steve.kite/stdlib\";\n\nconst ctx = createRootContext().named(\"provider-session\");\nconst credential = await CodexSessionCredential.tryLoad();\nif (credential === null) {\n    throw new Error(\"Sign in with Codex before starting a session.\");\n}\n\nconst provider = new CodexProvider({\n    credential,\n    model: \"gpt-5.6-sol\",\n    transport: \"auto\",\n});\nconst instructions = \"You are a concise coding assistant.\";\nconst session = await provider.session(\"conversation-1\", {\n    instructions,\n    tools: [],\n});\n\nconst messages: SessionMessage[] = [];\n\nasync function ask(content: string): Promise<string> {\n    messages.push({ role: \"user\", content: [{ type: \"text\", text: content }] });\n\n    let response = \"\";\n    const assistant = new SessionAssistantMessageAccumulator();\n    for await (const event of session.run(ctx, { context: { instructions, messages } })) {\n        assistant.add(event);\n        if (event.type === \"text_delta\") response += event.delta;\n        if (event.type === \"done\" && event.state === \"error\") {\n            throw new Error(event.message);\n        }\n    }\n\n    const message = assistant.message();\n    if (message === undefined) throw new Error(\"The provider returned no assistant message.\");\n    messages.push(message);\n    return response;\n}\n\ntry {\n    console.log(await ask(\"What makes a provider session stateful?\"));\n    console.log(await ask(\"Summarize that in one sentence.\"));\n} finally {\n    await session.destroy();\n}\n```\n\nA production caller reconstructs and persists the assistant message from the ordered block events.\n`SessionAssistantMessageAccumulator` does that directly, including retry rewinds. Its result\ncontains the text, reasoning, tool calls, provider-owned tool results, and opaque replay metadata\nneeded for the next turn.\n[EXAMPLES.md](EXAMPLES.md) walks through a complete event collector and a tool-call continuation.\n\n## Providers and credentials\n\n| Provider            | Talks to                                               | Credential options                                                                |\n| ------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------------- |\n| `AnthropicProvider` | Claude Code SDK or Anthropic Messages on Bedrock       | Claude Code, OAuth, auth token, API key, Bedrock bearer token, or AWS credentials |\n| `CodexProvider`     | OpenAI Responses, Responses Lite, or OpenAI on Bedrock | Codex session, OpenAI API key, Bedrock bearer token, or AWS credentials           |\n| `GrokProvider`      | Grok Responses-compatible protocol                     | Grok session or xAI API key                                                       |\n| `ResponsesProvider` | Any generic Responses-compatible endpoint              | Explicit endpoint and API key                                                     |\n| `KimiProvider`      | Kimi K3 on Bedrock Runtime                             | Bedrock bearer token or AWS credentials                                           |\n| `GlmProvider`       | GLM 5.3 on Bedrock Runtime                             | Bedrock bearer token or AWS credentials                                           |\n\nYou always choose the credential; the library never picks an account for you. Each vendor\ncredential class has a `tryLoad()` that accepts explicit values or reads the native client's\non-disk credentials. When you want to offer the user a choice of accounts, `tryLoadCredentials()`\ndiscovers everything available on the machine.\n\nFor Anthropic there is deliberately no second provider choice. Construct `AnthropicProvider`\nwith whichever credential the user selected. `ClaudeCodeCredential`, `ClaudeOAuthCredential`,\n`ClaudeAuthTokenCredential`, and `ClaudeApiKeyCredential` select the persistent Claude Agent SDK\nimplementation. `BedrockBearerTokenCredential` and `BedrockAwsCredential` select Anthropic\nMessages on Bedrock. The AWS credential uses the standard Node credential chain, including shared\nprofiles with `credential_process`, and SigV4-signs requests. The provider's canonical `name`\nremains `\"claude\"` on either transport.\n\nCredentials are reusable: load one once and share it across every session you open — sessions\ndon't take ownership of it, and there is no need to reload it per conversation. Token refreshing\nis handled for you.\n\n`CodexSessionCredential.refreshForMaintenance({ signal? })` and\n`GrokSessionCredential.refreshForMaintenance({ signal? })` also renew stored logins without\ninference. The caller owns the schedule. They share pending refreshes with inference recovery\nacross credential instances using the same canonical file path in this process; separate native\nCLI processes are not locked. Codex returns the replacement credential (or `undefined`), while\nGrok updates its credential and returns a success boolean. Static API keys and Claude credentials\nare not part of this maintenance surface.\n\nRefresh HTTP work has a 30-second deadline and a 256 KiB response limit. Cancelling a maintenance\ncaller stops its wait, but an exchange already in progress completes within that deadline so a\nrotated refresh token can still be saved and another session is not cancelled. Changed or removed\nlogin files observed after the exchange are not overwritten. Failures do not replay inference.\n\nModel catalogs are curated in source. The library never fetches a model list during startup or\nsession creation.\n\nKimi and GLM currently support Bedrock Runtime only. Both accept `credential`, optional `region`,\n`endpoint`, `model`, `userAgent`, `fetch`, and the ordinary inference retry settings. Defaults are\n`us-east-1` and that region's `/openai/v1` Runtime endpoint. Canonical models are\n`moonshotai/kimi-k3` and `zai/glm-5.3`; the providers select US/global inference profiles and accept\nexplicit profile IDs. Both always reason, with `low`, `high`, and `max` effort (default `max`).\nKimi accepts text and images; GLM accepts text only. Compaction uses each documented harness's\nsummary prompt and continuation contract. AWS determines account and regional availability.\n\n## Configuring a session\n\n`provider.session(id, options)` takes the immutable, model-visible configuration — the things the\nmodel will actually see:\n\n```ts\nconst session = await provider.session(\"stable-application-id\", {\n    instructions: \"Your complete system instructions.\",\n    tools,\n    inferenceMaxRetries: 3,\n    modelConfigurations: {\n        // Optional complete instruction/tool overrides for models selected on later runs.\n    },\n});\n```\n\nYou supply the instructions and tools yourself. The vendor prompts and tool descriptors you'll\nfind reproduced in this source tree are reference data for protocol tests, and they are\nintentionally not exported.\n\nEach `run()` takes a stdlib context first, then the complete transcript plus anything you want to\nvary per turn: model, reasoning effort, service-tier intent, and structured output schema.\nCancellation travels through `ctx.lifetime`; use `withLifetime` to attach an operation signal:\n\n```ts\nconst stream = session.run(withLifetime(ctx, abortController.signal), {\n    context: { instructions, messages },\n    model: \"gpt-5.6-sol\",\n    effort: \"high\",\n});\n```\n\n### Session IDs\n\nSession IDs should be globally unique. The library treats the ID as an opaque string you own: it\ndoes not generate, validate, or persist one for you. Generate an ID when a logical conversation is\ncreated, store it with that conversation, and don't reuse it for anything else.\n\nCUID2 is a good default, though UUIDs or any other collision-resistant identifier work too:\n\n```sh\npnpm add @paralleldrive/cuid2\n```\n\n```ts\nimport { createId } from \"@paralleldrive/cuid2\";\n\nconst sessionId = createId();\nconst session = await provider.session(sessionId, {\n    instructions,\n    tools,\n});\n```\n\nWhy global uniqueness? It keeps independent conversations, processes, machines, logs, and\nprovider-side continuation state from accidentally sharing an identity. Keep the ID stable while\ncontinuing the same conversation; mint a new one for a new conversation or an independent branch.\n\n## Messages and events\n\n`SessionMessage` covers user, assistant, tool-result, system-notice, agent, and compaction\nmessages. User, system, assistant, and tool-result content is always an ordered block array.\n\nSome fields exist purely so the provider can continue a conversation faithfully, and their\ncontents are intentionally opaque. Whenever these appear, store them byte-for-byte and send them\nback unchanged:\n\n- reasoning block `reasoning` payloads;\n- tool-call and tool-result block `vendor` metadata;\n- compaction `encryptedContent` and `vendor` metadata.\n\n`SessionStream` is an `AsyncIterable<SessionEvent>`. You'll see text and reasoning deltas,\ntool-call boundaries, provider-owned tool results, token usage, retry notices, and block rollback\nboundaries. Content-block start order is the exact order of `SessionAssistantMessage.content`;\nindexes are neither exposed nor needed. Every started stream ends with exactly one `done` event.\nUse `SessionAssistantMessageAccumulator` to build the message while streaming, or\n`assistantMessageFromEvents()` after collecting a run. Both discard output invalidated by\n`block_reset` correctly.\n\n## Tools: you run them, not the library\n\nThe library serializes your tool definitions, sends them to the model, and streams tool calls back\nto you. Executing the call is entirely your application's job. That separation is deliberate: tool\nexecution is where permissions, sandboxing, and product policy live, and none of that belongs in a\nnetwork layer.\n\nTool parameters use TypeBox schemas:\n\n```ts\nimport { Type } from \"@sinclair/typebox\";\nimport type { SessionTool } from \"@slopus/happy-providers\";\n\nconst readFile = {\n    name: \"read_file\",\n    description: \"Read a UTF-8 text file.\",\n    parameters: Type.Object({ path: Type.String() }),\n} satisfies SessionTool;\n```\n\nThe one exception is provider-owned tools — \"server tools\" the vendor executes inside its own\nbackend, like web search. You define one on the same `SessionTool` shape by setting `server` to\nthe vendor's exact native descriptor:\n\n```ts\nconst webSearch = {\n    name: \"web_search\",\n    server: { type: \"web_search\" },\n} satisfies SessionTool;\n```\n\nThe presence of `server` is what marks ownership: the provider passes the descriptor through to\nthe wire verbatim instead of deriving a native tool type from the name, and the call settles\ninside the provider's own response. Never execute a server-tool call yourself or send a tool\nresult for it.\n\nDeferred loading follows the same ownership rule. Set `defer: true` on tools that may be\ndiscovered, and select the provider/model's native server tool-search descriptor alongside them.\nThat provider owns the complete search call and result. A provider/model tool array with no native\nsearch descriptor sends every deferred tool eagerly. `searchKeywords` adds caller-selected terms\nto provider-owned local search indexes, Claude's searchable MCP description, and Anthropic hosted\nsearch descriptions.\n\n## Compaction\n\nWhen a transcript gets long, `compact()` asks the provider to produce a shorter replacement\ncontext using its native compaction protocol. Compaction is explicit — the library never compacts\nbehind your back:\n\n```ts\nconst compacted = await session.compact(withLifetime(ctx, abortController.signal), {\n    context: { instructions, messages },\n    instructions: \"Preserve decisions, unfinished work, and exact identifiers.\",\n});\n\nif (compacted.status === \"completed\") {\n    messages.splice(0, messages.length, ...compacted.context.messages);\n}\n```\n\nOn success, adopt and persist the complete returned `context` as your new transcript. On\ncancellation or failure, keep the original — nothing was changed out from under you.\n\nThe `context` is the complete caller-selected input to compact: root instructions and messages\ntravel together exactly as they do for inference. The separate `instructions` field tells the\nprovider what the compacted replacement should retain. Compaction does not accept a caller token\ncount; providers report their own usage.\n\n## The most important part: sessions are stateful and managed\n\nEverything above is mechanics. This is the mental model.\n\nA session is not a thin request wrapper. It is a long-lived, **managed endpoint** for one\nconversation:\n\n```text\nprovider.session(id, options)\n            |\n            v\n      BaseSession\n       |  |  |\n       |  |  +-- destroy()          release session resources\n       |  +----- compact()          update provider-native compacted state\n       +-------- run()              stream one inference turn\n```\n\nCreate one session per conversation and keep using it across turns. Behind the scenes it holds the\nstate that makes continuations fast and correct: open connections, warm cache prefixes, turn\nidentifiers, active model state, and the context adopted by native compaction. Throwing a session\naway between turns throws that warmth away with it.\n\nThe division of labor is strict, and it's worth internalizing:\n\n- **The session keeps the connection.** Transport choice, keep-alive, reconnection, and\n  prompt-cache continuity are its problem, not yours.\n- **The session retries for itself.** You never replay a failed `run()`. Details below.\n- **The session never calls tools.** It streams tool calls out to you and carries your results\n  back. Execution — and everything execution implies, like permissions — stays in your\n  application.\n- **You keep the transcript.** Pass the complete message history to every `run()`, persist the\n  opaque provider fields unchanged, and adopt the replacement context a successful `compact()`\n  returns. Because history is yours, you can restore a conversation in a brand-new process without\n  the session ever becoming a hidden database.\n\nBecause history is yours, tracking it accurately is also on you. All the warmth above assumes\neach `run()` receives the previous turn's history plus the new messages — append-only, with the\nearlier messages byte-for-byte identical. Rewrite, reorder, or drop something earlier in the\ntranscript and some providers will nuke the prompt cache and continuation state on the spot. You\n_can_ replace the history wholesale, but the price is the session: its warm provider-side state\nno longer matches, so treat it as starting a conversation cold. The one sanctioned replacement is\nthe context a successful `compact()` returns — that's the provider itself handing you the new\nhistory its state expects.\n\n### One thing at a time\n\nA session accepts one active operation at a time. Don't overlap two `run()` calls, a `run()` and a\n`compact()`, or two `compact()` calls. Sessions do not queue or lock for you — you serialize.\n\nA `run()` counts as active until you have consumed its iterator all the way through the terminal\n`done` event. If you abort a run, keep draining the iterator until it finishes before starting the\nnext operation.\n\n```ts\n// Correct: turns on one session are sequential.\nfor await (const event of session.run(ctx, { context: { instructions, messages } })) {\n    // Consume every event.\n}\n\nconst compacted = await session.compact(ctx, { context: { instructions, messages } });\n```\n\nIndependent sessions run concurrently just fine — use one session per conversation or branch:\n\n```ts\nconst first = await provider.session(\"conversation-1\", firstOptions);\nconst second = await provider.session(\"conversation-2\", secondOptions);\n\nconst runFirst = async () => {\n    for await (const event of first.run(ctx, {\n        context: { instructions: firstInstructions, messages: firstMessages },\n    })) {\n        // Consume the first conversation's events.\n    }\n};\nconst runSecond = async () => {\n    for await (const event of second.run(ctx, {\n        context: { instructions: secondInstructions, messages: secondMessages },\n    })) {\n        // Consume the second conversation's events.\n    }\n};\n\nawait Promise.all([runFirst(), runSecond()]);\n```\n\nThe same rule covers switching models or reasoning effort: finish the current operation, then pick\nthe new `model` or `effort` on the next `run()`. You may execute client-owned tool calls in\nparallel once the provider stream finishes, but append every tool result to your transcript before\nthe next inference begins.\n\n### Branching\n\n`BaseSession` does not currently expose `fork()`. Don't branch by running the same session twice\nor by creating two session objects with the same ID.\n\nTo branch today, copy your transcript and open a new session with its own ID. Include all opaque\nreasoning, tool metadata, and compaction messages in the copy:\n\n```ts\nconst branchMessages = structuredClone(messages);\nconst branch = await provider.session(\"conversation-1-branch-1\", {\n    instructions,\n    tools,\n    modelConfigurations,\n});\n\nfor await (const event of branch.run(ctx, {\n    context: { instructions, messages: branchMessages },\n    model,\n    effort,\n})) {\n    // Consume the branch independently from the original session.\n}\n```\n\nThis preserves the logical conversation — the history was always yours — but it starts cold on the\nprovider side: no shared connection, warm cache, response chain, or other transport state. A true\nsession fork would need to clone that internal state safely; until the API provides one, separate\nsessions are the supported branching boundary.\n\n### Retries happen inside the session\n\nRetries belong to the provider. Each one knows which of its failures are safe to retry and how\nlong to wait, based on its native protocol. Retries are never silent, though: every attempt is\nreported to you as a `retrying` event with the attempt number and the reason, so your UI can show\nwhat's happening — the provider just performs the retry itself. **Never replay a failed `run()`\nyourself**: by the time a `done` event with `state: \"error\"` reaches you, the failure was either\nnot retryable or the provider already exhausted its retry budget. What surfaces to you is\nterminal — show it to the user, don't resubmit it.\n\nThere's a subtlety: a retry can happen _after_ the model has already streamed text, reasoning, or\na tool call. Model backends can't resume a generation mid-stream — Anthropic in particular has no\nway to pick up where a broken stream left off — so when a stream dies halfway through a message\nor a tool call, the retry has to regenerate that output from scratch, and the half-streamed part\nmust be thrown away. Session events use blocks so the provider can rewind that tentative output\nwithout duplicating it:\n\n```text\nblock_start -> text/tool deltas -> block_reset -> retrying\n                 discarded\n\nblock_start -> replacement deltas -> block_stop -> done\n                   committed\n```\n\n- `block_start` begins tentative output for an attempt.\n- `block_reset` retracts everything since the matching `block_start`.\n- `retrying` reports the next provider-owned retry and its reason.\n- `block_stop` commits the current block; its output is now safe to persist as the response.\n\n`block_reset` may also precede cancellation or a terminal error when no retry follows. It rewinds\nstream output only — it never asks you to delete durable conversation history, restore an older\nsession, or resubmit the request. Token-usage events from a failed attempt may stay committed for\naccounting even though the generated content was rewound.\n\nCollecting a stream after the fact? Capture everything, then let `committedSessionEvents()` strip\nout the rewound output:\n\n```ts\nimport { committedSessionEvents, type SessionEvent } from \"@slopus/happy-providers\";\n\nconst streamed: SessionEvent[] = [];\nfor await (const event of session.run(ctx, { context: { instructions, messages } })) {\n    streamed.push(event);\n}\n\nconst committed = committedSessionEvents(streamed);\n```\n\nRendering live? Keep events after `block_start` in a tentative buffer. Show them provisionally if\nyou like, clear that presentation on `block_reset`, and move them into durable history only on\n`block_stop`. Events outside a block — `retrying`, usage, the terminal `done` — are never part of\nthe rewound content.\n\nThe default budget is ten retries after the initial request, so at most eleven attempts. You can\nset a provider-wide budget or override it per session; zero disables provider-owned retries for\nthat session:\n\n```ts\nconst provider = new CodexProvider({\n    credential,\n    inferenceMaxRetries: 4,\n});\n\nconst oneShotSession = await provider.session(createId(), {\n    instructions,\n    tools,\n    inferenceMaxRetries: 0,\n});\n```\n\nRetry budgets are capped at 100. Retry classification, delay schedules, connection recovery, and\ncredential refresh all stay provider-owned. When something does fail terminally, the error event\ncarries a human-readable message and, when recognized, a typed `SessionProviderError` with bounded\ndiagnostics.\n\n## Package surface\n\nThe root export contains the stable shared types, provider classes, credential classes, usage and\nquota helpers, and provider-specific option types. Internal request builders, transports, native\nprompts, native tool catalogs, and trace fixtures are not exported.\n\nMore reference documentation:\n\n- [EXAMPLES.md](EXAMPLES.md) — multi-turn collection, tools, compaction, and provider setup\n- [VENDOR_CODEX.md](VENDOR_CODEX.md)\n- [VENDOR_CLAUDE.md](VENDOR_CLAUDE.md)\n- [VENDOR_GROK.md](VENDOR_GROK.md)\n- [VENDOR_ANTHROPIC_BEDROCK.md](VENDOR_ANTHROPIC_BEDROCK.md)\n\n## Provider settings\n\nEvery option each provider constructor accepts, and how the defaults are chosen.\n\n### Shared by every provider\n\n- `inferenceMaxRetries` — maximum provider-owned retries. Defaults to `10` (up to eleven total\n  attempts), capped at `100`. `0` disables provider-owned retries. A session can override this\n  with its own `inferenceMaxRetries` in `provider.session(id, options)`.\n- `resolveInferenceMaxRetries` — a callback that resolves the current retry limit on every run,\n  so long-lived sessions follow runtime configuration changes instead of the value captured at\n  construction.\n- `waitForInferenceRetry` — a test seam that replaces the provider's retry backoff wait. Leave it\n  unset in production.\n\n### `CodexProvider` (OpenAI Codex)\n\n- `credential` _(required)_ — a Codex session, an OpenAI API key, a Bedrock bearer token, or AWS\n  credentials. The credential also picks the default endpoint: a Codex session talks to\n  `https://chatgpt.com/backend-api`, an API key to `https://api.openai.com/v1`, and either Bedrock\n  credential to the Bedrock Mantle endpoint for the resolved region. AWS credentials use SigV4\n  and remain refreshable through the credential provider chain.\n- `endpoint` — overrides that default endpoint.\n- `model` — the session's default model, resolved against the curated catalog. On Bedrock the\n  catalog maps it to the corresponding Bedrock model ID.\n- `parallelToolCalls` — enables multi-call tool batches. Because batches are unavailable under\n  Responses Lite, setting this to `true` also forces standard Responses for v2 models (see below).\n- `region` — the Bedrock region. Resolution order: this option, then `AWS_REGION`, then\n  `AWS_DEFAULT_REGION`, then `us-east-1`.\n- `streamIdleTimeoutMs` — how long a connected stream may sit idle before it is treated as dead.\n  Defaults to `300000` (five minutes), matching upstream Codex.\n- `transport` — `\"websocket\"`, `\"sse\"`, or `\"auto\"` (the default). `auto` starts on WebSocket and,\n  if the WebSocket transport turns out to be unavailable or fails with a retryable stream error,\n  falls back to SSE for the rest of the session. Bedrock always uses SSE regardless of this\n  option.\n- `userAgent` — overrides the native Codex user agent. Meant only for replaying a captured native\n  request.\n\n**How the Codex API version is chosen.** There are two request shapes: standard Responses (\"v1\")\nand Responses Lite (\"v2\"). The choice is made per model from the curated catalog — each model\ncarries a flag saying whether it is a Responses Lite model. A v2 model gets a Responses Lite\nrequest (marked with the `x-openai-internal-codex-responses-lite: true` header), exactly as the\nnative Codex CLI sends it. There are two exceptions: setting `parallelToolCalls: true` forces\nstandard Responses even for a v2 model, since Lite cannot carry multi-call batches, and v1 models\nalways use standard Responses.\n\n### `AnthropicProvider`\n\n`credential` is required and selects the implementation. There is no transport flag and no\nseparate Bedrock provider class in the public API:\n\n- A `ClaudeCodeCredential`, `ClaudeOAuthCredential`, `ClaudeAuthTokenCredential`, or\n  `ClaudeApiKeyCredential` uses the Anthropic Agent SDK. This branch accepts `env`, `model`,\n  `onAccountUsage`, `pathToClaudeCodeExecutable`, `query`, and `userAgent`.\n- A `BedrockBearerTokenCredential` or `BedrockAwsCredential` uses Anthropic Messages on Amazon\n  Bedrock. This branch accepts `client`, `endpoint`, `model`, `region` (default `us-east-1`),\n  `transport` (`\"mantle\"` by default, or `\"runtime\"`), and `userAgent`.\n\nThe exported `AnthropicProviderOptions` union describes both credential-specific option shapes. A\ncredential selected dynamically may remain typed as the complete `AnthropicCredential` union;\nthe common `{ credential, model, userAgent }` constructor shape accepts it directly. `query` and\n`client` are advanced injection seams for tests; production callers normally leave them unset.\n\n`BedrockAwsCredential.tryLoad()` uses the standard AWS Node credential chain. Pass `profile` to\nselect a shared-config profile explicitly; otherwise `AWS_PROFILE`, environment credentials,\nshared files, web identity, and instance/container credentials follow normal AWS precedence. A\nprofile containing `credential_process` is executed by the AWS SDK, and expiring credentials are\nrefreshed by the same provider:\n\n```ini\n[profile work-bedrock]\ncredential_process = /usr/local/bin/aws-credential-helper work\n```\n\n```ts\nconst credential = await BedrockAwsCredential.tryLoad({ profile: \"work-bedrock\" });\n```\n\n### `GrokProvider` (Grok Build)\n\n- `credential` _(required)_ — a Grok session or an xAI API key.\n- `endpoint` — defaults to `https://cli-chat-proxy.grok.com/v1`, the endpoint grok-build uses.\n- `model` — the session's default model, resolved against the curated catalog.\n- `userAgent` — identifies your application upstream instead of reproducing the grok-build user\n  agent.\n\n### `ResponsesProvider` (OpenAI API)\n\n- `apiKey` _(required)_ — sent as a bearer token.\n- `endpoint` _(required)_ — the base URL of the Responses-compatible endpoint.\n- `model` — the session's default model, passed through as-is; there is no catalog for generic\n  endpoints.\n- `headers` — extra headers added to every request.\n- `fetch` — a custom `fetch` implementation, for proxying or tests.\n- `nativeCompaction` — whether the endpoint implements the native compaction protocol. Defaults\n  to `true`; set it to `false` for endpoints that don't, so `compact()` fails cleanly instead of\n  sending a request the endpoint cannot answer.\n- `capabilities` — which optional Responses features the endpoint supports: `encryptedReasoning`,\n  `parallelToolCalls`, `reasoning`, and `textVerbosity`. Defaults to the minimal set (all off), so\n  any Responses-compatible endpoint works out of the box; turn on what your endpoint actually\n  implements.\n\n## Session types in detail\n\nA complete tour of the objects you exchange with a session, shown as their real TypeScript\ndefinitions. Everything here is exported from the package root.\n\n### `BaseSession`\n\nWhat `provider.session(id, options)` returns:\n\n```ts\nabstract class BaseSession {\n    readonly id: string;\n\n    abstract run(ctx: Context, request: SessionRunRequest): SessionStream;\n    abstract compact(ctx: Context, options: SessionCompactionOptions): Promise<SessionCompaction>;\n    abstract destroy(): void | Promise<void>;\n}\n```\n\n`run()` streams one inference turn, `compact()` asks the provider for a shorter replacement\ncontext, and `destroy()` releases connections and other session resources — always call it when\nthe conversation is over.\n\n### `SessionOptions`\n\nThe immutable, model-visible configuration a session is created with:\n\n```ts\ninterface SessionOptions {\n    readonly instructions: string;\n    readonly tools?: readonly SessionTool[];\n    /** Retry budget for this session alone, overriding the provider's. Zero disables retries. */\n    readonly inferenceMaxRetries?: number;\n    /** Alternate model-visible configurations for sessions that switch models. */\n    readonly modelConfigurations?: Readonly<Record<string, SessionModelConfiguration>>;\n}\n\ninterface SessionModelConfiguration {\n    readonly instructions: string;\n    readonly tools?: readonly SessionTool[];\n}\n```\n\nThere are no initial messages here on purpose — history always arrives with each `run()`.\n\n### `SessionRunRequest`\n\nWhat one `run()` takes:\n\n```ts\ninterface SessionRunRequest {\n    /** Complete rebuilt conversation context for this inference turn. */\n    context: SessionContext;\n    model?: string;\n    effort?: SessionReasoningEffort;\n    serviceTier?: SessionServiceTier;\n    structuredOutput?: SessionStructuredOutput;\n}\n\ntype SessionReasoningEffort = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\ntype SessionServiceTier = string;\n\ninterface SessionStructuredOutput {\n    name: string;\n    schema: TSchema; // a TypeBox schema\n}\n```\n\nProviders map `effort` onto whatever their protocol supports. A service tier is an opaque\nprovider-owned identifier at the shared session boundary: the selected provider validates it\nagainst its own typed schema and maps it onto its own wire contract. Omitting `serviceTier` selects\nordinary provider behavior.\n\nCodex accepts `\"priority\"` (Fast) and `\"ultrafast\"` (Ultrafast); omit the tier for Regular.\nUltrafast requires a supported model such as GPT-6 Astra and an eligible account and region.\nIt is a distinct wire value, not an alias for priority. Bedrock does not support these tiers.\n`CodexProvider.modelServiceTiers(modelIds, { signal })` reads the signed-in account's advertised\nspeeds for caller-supplied model IDs; it does not discover models. Missing, invalid, oversized,\nor unavailable capability data returns an empty result. `serviceTierAccountKey()` returns an\nopaque fingerprint of the current stored login for short-lived account-scoped caches, or `null`\nwhen the login is absent, changed to another account, or not a native Codex session credential.\nCallers must expire capability caches and recheck this identity before using gated speeds.\n\n### `SessionMessage` — the transcript\n\nThe transcript you own is an array of six message shapes, discriminated by `role`:\n\n```ts\ntype SessionMessage =\n    | SessionSystemMessage\n    | SessionUserMessage\n    | SessionAgentMessage\n    | SessionAssistantMessage\n    | SessionToolResultMessage\n    | SessionCompactionMessage;\n```\n\nA user turn contains an ordered array of input blocks. A tool request is another input block, not\na separate kind of user message, and may appear anywhere in its content:\n\n```ts\ninterface SessionUserMessage {\n    readonly role: \"user\";\n    readonly content: readonly SessionInputBlock[];\n}\n\ninterface SessionInputTool {\n    readonly type: \"tool_call_request\";\n    readonly name: string;\n    readonly arguments?: Readonly<Record<string, JSONValue>>;\n}\n\ntype SessionInputBlock = SessionTextBlock | SessionImageBlock | SessionInputTool;\n\ninterface SessionTextBlock {\n    readonly type: \"text\";\n    readonly text: string;\n}\n\ninterface SessionImageBlock {\n    readonly type: \"image\";\n    readonly data: string;\n    readonly mimeType: string;\n}\n```\n\n`SessionInputTool` is a caller-side tool request, not a provider-native tool call. A user message\nmay contain at most one. The owning agent loop must consume this block before inference, record\nthe resulting assistant call and tool result through its normal lifecycle, and supply providers\nwith the remaining user content plus that completed lifecycle. Omitted arguments mean an empty\nobject. Providers never execute these requests themselves; input serializers reject an unconsumed\nrequest instead of sending it as text or an image.\n\nA model turn is one ordered block array. Do not flatten or reorder it: provider replay state lives\non the block it belongs to, so text, reasoning, client tool calls, and provider-owned tool results\nretain their original sequence:\n\n```ts\ninterface SessionAssistantMessage {\n    readonly role: \"assistant\";\n    readonly content: readonly SessionAssistantBlock[];\n}\n\ntype SessionAssistantBlock =\n    | SessionTextBlock\n    | SessionReasoningBlock\n    | SessionToolCallBlock\n    | SessionToolResultBlock;\n\ninterface SessionReasoningBlock {\n    readonly type: \"reasoning\";\n    /** Human-readable reasoning, when exposed. */\n    readonly text?: string;\n    /** Opaque signed or encrypted replay state, when required. */\n    readonly reasoning?: string;\n}\n\ninterface SessionToolCallBlock {\n    readonly type: \"tool_call\";\n    /** Stable correlation identity. Providers expose their native ID; callers may replace it. */\n    readonly callId: string;\n    readonly name: string;\n    readonly namespace?: string;\n    /** The raw argument JSON exactly as the model produced it. */\n    readonly arguments: string;\n    /** The provider stopped before this call became executable — do not run it. */\n    readonly incomplete?: boolean;\n    /** Optional opaque replay data unrelated to the call's correlation identity. */\n    readonly vendor?: unknown;\n}\n```\n\nProviders expose their native `callId` on stream events so starts, deltas, ends, and server-tool\nresults can be correlated. A caller may replace that ID before storing the context, provided it\nuses the replacement consistently on the tool-call block and its result. Providers replay the\ncontext's ID directly and do not retain a second identity in `vendor`.\n\nYour answer to a tool call is tied back by that same `callId`:\n\n```ts\ninterface SessionToolResultMessage {\n    readonly role: \"tool\";\n    readonly callId: string;\n    readonly content: readonly SessionOutputBlock[];\n    /** Whether the caller reported that the tool invocation failed. */\n    readonly isError?: boolean;\n    /** Optional opaque result metadata; never a duplicate provider call identity. */\n    readonly vendor?: any;\n}\n```\n\nThe remaining three shapes — a system notice, an opaque Codex agent-to-agent message, and the\ncheckpoint a native compaction produced (it sits where the compacted history used to be; never\nedit it):\n\n```ts\ninterface SessionSystemMessage {\n    readonly role: \"system\";\n    readonly content: readonly SessionTextBlock[];\n}\n\ninterface SessionAgentMessage {\n    readonly role: \"agent\";\n    readonly author: string;\n    readonly recipient: string;\n    readonly header: string;\n    readonly encryptedContent: string;\n    /** Whether this message establishes the boundary for a new inference turn. */\n    readonly agentMessageTriggerTurn?: boolean;\n}\n\ninterface SessionCompactionMessage {\n    readonly role: \"compaction\";\n    /** Provider-returned summary text, including null when the provider returned no text. */\n    readonly content: string | null;\n    /** Provider-returned encrypted compaction payload, including null when absent. */\n    readonly encryptedContent: string | null;\n    /** Additional opaque provider metadata required to replay the checkpoint natively. */\n    readonly vendor?: any;\n}\n```\n\n`SessionAgentMessage` is specifically Codex cross-agent replay state. It represents encrypted\nmessages exchanged by Codex collaborators and preserves their author, recipient, display header,\nand turn boundary. Persist and replay values emitted by Codex; do not construct it as a generic\napplication message. Non-Codex providers ignore it.\n\n### `SessionTool`\n\nA tool definition, as covered in the [Tools section](#tools-you-run-them-not-the-library):\n\n```ts\ninterface SessionTool {\n    readonly name: string;\n    readonly namespace?: string;\n    /** Description of the containing namespace, when this tool is namespaced. */\n    readonly namespaceDescription?: string;\n    /**\n     * Exact native descriptor for a call the provider owns and settles inside its response.\n     * Absence means the caller owns execution.\n     */\n    readonly server?: { readonly type: string; readonly [key: string]: unknown };\n    readonly description?: string;\n    readonly parameters?: TSchema; // a TypeBox schema\n    /** Provider-neutral request to expose this tool through native tool discovery. */\n    readonly defer?: boolean;\n    /** Extra terms for provider-owned local discovery indexes. */\n    readonly searchKeywords?: readonly string[];\n    /** OpenAI-style Lark grammar; ignored by providers that do not support grammar tools. */\n    readonly grammar?: SessionToolLarkGrammar;\n}\n\ninterface SessionToolLarkGrammar {\n    readonly type: \"lark\";\n    readonly grammar: string;\n}\n```\n\n### `SessionEvent` — the stream\n\n`run()` yields a `SessionStream = AsyncIterable<SessionEvent>`. The full union:\n\n```ts\ntype SessionEvent =\n    // Attempt blocks bracket tentative output so provider-owned retries can rewind it.\n    | { type: \"block_start\" }\n    | { type: \"block_stop\" }\n    | { type: \"block_reset\" }\n    // Text and reasoning blocks are sequential. Start order is message-content order.\n    | { type: \"text_start\" }\n    | { type: \"text_delta\"; delta: string }\n    | { type: \"text_end\" }\n    | { type: \"reasoning_start\" }\n    | { type: \"reasoning_delta\"; delta: string }\n    | { type: \"reasoning_end\"; reasoning?: string }\n    // Tool calls. `server: true` marks a provider-owned call the client never executes.\n    | {\n          type: \"toolcall_start\";\n          callId: string;\n          name: string;\n          namespace?: string;\n          server?: true;\n          vendor?: any;\n      }\n    | { type: \"toolcall_delta\"; callId: string; delta: string }\n    | { type: \"toolcall_end\"; callId: string; arguments: string; incomplete?: boolean }\n    // Server-tool results settle inside the same response, streamed beside the call.\n    | { type: \"toolcall_result_start\"; callId: string; vendor?: any }\n    | { type: \"toolcall_result_delta\"; callId: string; delta: string }\n    | {\n          type: \"toolcall_result_end\";\n          callId: string;\n          content: readonly SessionOutputBlock[];\n          isError?: boolean;\n          incomplete?: boolean;\n      }\n    // Progress.\n    | { type: \"retrying\"; attempt: number; reason: string }\n    | { type: \"token_usage\"; usage: SessionUsage }\n    // Exactly one done event ends every started stream.\n    | { type: \"done\"; state: \"cancelled\" }\n    | { type: \"done\"; state: \"normal\"; tokens: SessionTokens; endTurn?: boolean }\n    | { type: \"done\"; state: \"tool_call\"; tokens: SessionTokens }\n    | { type: \"done\"; state: \"length\"; tokens: SessionTokens }\n    | {\n          type: \"done\";\n          state: \"error\";\n          kind: SessionErrorKind;\n          message: string;\n          providerError?: SessionProviderError;\n      };\n\ntype SessionErrorKind = \"internal_error\" | \"context_overflow\" | \"billing_error\" | \"unknown\";\n\ninterface SessionTokens {\n    /** Full input context size, including cached input. */\n    readonly input: number;\n    readonly output: number;\n}\n\ntype SessionStream = AsyncIterable<SessionEvent>;\n```\n\nThe `done` states: `\"normal\"` means the model finished its answer (`endTurn` marks an explicit\nend of turn), `\"tool_call\"` means it stopped to wait for your tool results, `\"length\"` means the\nresponse hit a length limit, `\"cancelled\"` means the run was aborted, and `\"error\"` is terminal.\nOrdinary tools never emit `toolcall_result_*` events — you answer those with a `role: \"tool\"`\nmessage; only server tools stream their results here.\n\nNo content index is exposed. A `text_start`, `reasoning_start`, `toolcall_start`, or\n`toolcall_result_start` appends that block to the assistant message. Text and reasoning are\nsequential; parallel tool calls are updated by `callId`. The corresponding end event closes the\nblock and supplies final opaque state or normalized content when needed.\n\nThe exported accumulator implements those rules and the outer retry rollback boundaries:\n\n```ts\nconst assistant = new SessionAssistantMessageAccumulator();\n\nfor await (const event of session.run(ctx, { context: { instructions, messages } })) {\n    assistant.add(event);\n}\n\nconst message = assistant.message();\nif (message !== undefined) messages.push(message);\n```\n\nIf you already collected the complete run, `assistantMessageFromEvents(events)` returns the same\nresult. There is no terminal `assistant_message` event and no provider-specific `response_items`\nevent; the ordered lifecycle is the message.\n\nThe helpers `isSessionDoneEvent()` and `isSessionErrorDone()` narrow events, and\n`committedSessionEvents()` filters a collected stream down to what survived block rewinds.\n\n### `SessionUsage`\n\nToken accounting for one attempt:\n\n```ts\ninterface SessionUsage {\n    readonly input: number;\n    readonly output: number;\n    readonly cacheRead: number;\n    readonly cacheWrite: number;\n    readonly totalTokens: number;\n}\n```\n\nThe fields are normalized the same way for every provider: `input` is the complete input context,\nincluding cached tokens; `cacheRead` and `cacheWrite` describe subsets of that input; and\n`totalTokens` is `input + output`. Cache reads are the payoff of prompt-cache continuity — a\nhealthy continuation shows much of its input also reported as `cacheRead`.\n\n**Getting the last turn's context size.** The size of the context the model actually saw on a\nturn is `input`; cache columns are already included:\n\n```ts\nlet lastUsage: SessionUsage | undefined;\nfor await (const event of session.run(ctx, { context: { instructions, messages } })) {\n    if (event.type === \"token_usage\") lastUsage = event.usage;\n}\n\nconst contextSize = lastUsage?.input ?? 0;\n```\n\nKeep the _last_ `token_usage` event of the run — a retried run reports usage per attempt, and the\nfinal event describes the attempt that produced the committed response. This is the right value\nfor a context-window meter in your UI. Compaction itself does not accept a caller-supplied token\ncount; its returned usage comes from the provider.\n\n### `SessionCompaction`\n\nWhat `compact(ctx, options)` takes and resolves to:\n\n```ts\ninterface SessionCompactionOptions {\n    /** Model selected by the caller for this compaction. */\n    readonly model?: string;\n    /** Provider-native instructions describing what the compaction should retain. */\n    readonly instructions?: string;\n    /** Complete context to compact, including its root instructions and messages. */\n    readonly context: SessionContext;\n}\n\ntype SessionCompaction =\n    | CompletedSessionCompaction\n    | CancelledSessionCompaction\n    | FailedSessionCompaction;\n\ninterface CompletedSessionCompaction {\n    readonly status: \"completed\";\n    /** Plain-text summary produced by providers without native compaction. */\n    readonly summary?: string;\n    /** Opaque checkpoint produced by provider-native compaction. */\n    readonly compaction?: SessionCompactionMessage;\n    /** Opaque reasoning item emitted while producing the summary, when supported. */\n    readonly encryptedReasoning?: string;\n    /** Original messages intentionally retained alongside the summary. */\n    readonly preservedMessages: readonly SessionMessage[];\n    readonly usage: SessionUsage;\n    /** Complete replacement context — adopt this as your new transcript. */\n    readonly context: SessionContext;\n}\n\ninterface CancelledSessionCompaction {\n    readonly status: \"cancelled\";\n    /** Original context left active because compaction did not complete. */\n    readonly context: SessionContext;\n}\n\ninterface FailedSessionCompaction {\n    readonly status: \"failed\";\n    readonly kind: \"inference_error\" | \"invalid_summary\" | \"tool_call\";\n    readonly message: string;\n}\n\ninterface SessionContext {\n    readonly instructions: string;\n    readonly messages: readonly SessionMessage[];\n}\n```\n\nOn `\"cancelled\"` and `\"failed\"` nothing changed. Cancellation echoes the selected context;\nfailure only describes the error because the caller already owns the unchanged input context.\n\n### `SessionProviderError`\n\nThe typed classification attached to a terminal error `done` event when the failure was\nrecognized. It is defined as a TypeBox schema (exported as `sessionProviderErrorSchema` for\nruntime validation); the derived type:\n\n```ts\ntype SessionProviderError =\n    | { type: \"authentication\"; diagnostics?: SessionProviderErrorDiagnostics }\n    | { type: \"out_of_tokens\"; resetAt?: number; diagnostics?: SessionProviderErrorDiagnostics }\n    | { type: \"rate_limit\"; resetAt?: number; diagnostics?: SessionProviderErrorDiagnostics }\n    | { type: \"server_overloaded\"; diagnostics?: SessionProviderErrorDiagnostics }\n    | { type: \"internal_server_error\"; diagnostics?: SessionProviderErrorDiagnostics }\n    | { type: \"empty_response\"; diagnostics?: SessionProviderErrorDiagnostics }\n    | { type: \"unclassified\"; diagnostics?: SessionProviderErrorDiagnostics };\n\ninterface SessionProviderErrorDiagnostics {\n    attempts?: number;\n    code?: string;\n    errorType?: string;\n    requestId?: string;\n    responseId?: string;\n    retryDirective?: boolean;\n    status?: number; // HTTP status\n    upstreamMessage?: string; // truncated, bounded\n}\n```\n\nWhat each case means: `authentication` — the credential was rejected; `out_of_tokens` — the\naccount's quota is exhausted, with `resetAt` saying when it returns when known; `rate_limit` —\ntoo many requests, `resetAt` again when known; `server_overloaded` — the backend is shedding\nload; `internal_server_error` — the backend failed; `empty_response` — the provider returned\nnothing usable; `unclassified` — we don't know how to recover from this, and the human-readable\nmessage on the `done` event is the best available explanation.\n\nDiagnostics are bounded and sized for logs — never a raw upstream dump.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md"}