{"_id":"@cool-ai/beach-llm","_rev":"32-6e32170c9d02063fea3006a63bcb4785","name":"@cool-ai/beach-llm","dist-tags":{"latest":"0.8.1"},"versions":{"0.0.1":{"name":"@cool-ai/beach-llm","version":"0.0.1","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.0.1","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"77bee1a136f1789a9b3e92f90cedd06a1924f8e0","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.0.1.tgz","fileCount":71,"integrity":"sha512-T+JxY005S5LHeAibinDLXV4GBdgG3OYo0IPtofIBmL3hXaa2GNK0vLqaqxk+XWQGcxHU5lUvF4RyoqNf/B8oKg==","signatures":[{"sig":"MEUCIQDBdF3GIt/Gvfl7apyTqc/CXwAqMpdo8haopKh/YtGR2gIgK5RJmRwSVBPwCP7znUpN3W3jBB0BfxdL3QD9WulXI8Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101645},"type":"module","_from":"file:cool-ai-beach-llm-0.0.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/198798840f08d009154beafa88ba63db/cool-ai-beach-llm-0.0.1.tgz","_integrity":"sha512-T+JxY005S5LHeAibinDLXV4GBdgG3OYo0IPtofIBmL3hXaa2GNK0vLqaqxk+XWQGcxHU5lUvF4RyoqNf/B8oKg==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.0.1_1776724578264_0.3512159516229203","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@cool-ai/beach-llm","version":"0.0.2","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.0.2","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"29e171b0b0116d466ae3bfd3de181041b4eae71d","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.0.2.tgz","fileCount":71,"integrity":"sha512-D4l0i3nviNRD2YNpZLsrrrVzvDJLhijz11BIU2/sB9gU5aSU4iHHWUZxt5HuSxIZBq9LPOG3321SW49QODI+CQ==","signatures":[{"sig":"MEYCIQDBdC7ysG+9u4iTYGMkiZ8KQrtppfoB9mNab6FEbS+SUwIhAKA964aFmv0foR7iVf0MLmxe1wj9fJWlV1nc5eInPaW9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101694},"type":"module","_from":"file:cool-ai-beach-llm-0.0.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/070bea6871351929355aa2169daa1987/cool-ai-beach-llm-0.0.2.tgz","_integrity":"sha512-D4l0i3nviNRD2YNpZLsrrrVzvDJLhijz11BIU2/sB9gU5aSU4iHHWUZxt5HuSxIZBq9LPOG3321SW49QODI+CQ==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.0.2_1776729653840_0.9291641604265395","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@cool-ai/beach-llm","version":"0.1.0","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.1.0","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"e4e36b90f2c4e95aee85165cafed5289c1f4262a","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.1.0.tgz","fileCount":71,"integrity":"sha512-TYOycZicynwiQIJShrwcM06llj6ZEUEaJYB3FokQ4iyxV5p34GyvuubZfIDkqEL2bGDYd4i0x7Z8wnHAh4YnGQ==","signatures":[{"sig":"MEQCIHoTr+1Kb2gOUihrgi/fzvr1Cah7Rj9BFJrVhbolSrfOAiA3E7uQSPucOVd78Jwdd4vAadIs7n8giPWJe9778f7+ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110728},"type":"module","_from":"file:cool-ai-beach-llm-0.1.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/99e9c2372981d8e9281a37c73c4ac15f/cool-ai-beach-llm-0.1.0.tgz","_integrity":"sha512-TYOycZicynwiQIJShrwcM06llj6ZEUEaJYB3FokQ4iyxV5p34GyvuubZfIDkqEL2bGDYd4i0x7Z8wnHAh4YnGQ==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.1.0_1776779785480_0.44321766593314194","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cool-ai/beach-llm","version":"0.2.0","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.2.0","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"f77a389af7a8d4f67f90ffc45a34f21746f1ffc1","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.2.0.tgz","fileCount":71,"integrity":"sha512-dkyMqcLeHpADCIrh/SXCHrC4Lv5cayqtYAZV+xVKGbK8p0ZhTPBIxLtUbZJpJHPMptrc+JVGKG8dvcO08ydbXA==","signatures":[{"sig":"MEUCICQejPucyIv4PtIFwk6Ld7pfA1M0Wtt+aIJsisWjeaLQAiEA1Fk+cdbhAdDqBn/29TfXHhgrKLCFFRvZchnVMn3Ja5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110921},"type":"module","_from":"file:cool-ai-beach-llm-0.2.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/4ca1e6e300bf69d8c46865219c359b97/cool-ai-beach-llm-0.2.0.tgz","_integrity":"sha512-dkyMqcLeHpADCIrh/SXCHrC4Lv5cayqtYAZV+xVKGbK8p0ZhTPBIxLtUbZJpJHPMptrc+JVGKG8dvcO08ydbXA==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.2.0_1776781090198_0.7004905287031911","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cool-ai/beach-llm","version":"0.2.1","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.2.1","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"8092673731f839422c7c91fbf0d60ef474ed9be1","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.2.1.tgz","fileCount":71,"integrity":"sha512-2hZM/dSiLeTs/I80n8HNHEbdwjIg15ADHtJFunFVVSMmYYxtLkb/6HJXaP9TcrphGWCp9eczyV11nmY6XCRXlA==","signatures":[{"sig":"MEUCIQCZEhL3q92Br8amBQBJAI4EJjzCdZcmH5bNXbNtSZjIhAIgWZpZIxz2RBUXswXIN2TsE1+hinVhZkUCn6tL/ZGwpGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110925},"type":"module","_from":"file:cool-ai-beach-llm-0.2.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/af037e3b3046f7ca5955102b3e4192ca/cool-ai-beach-llm-0.2.1.tgz","_integrity":"sha512-2hZM/dSiLeTs/I80n8HNHEbdwjIg15ADHtJFunFVVSMmYYxtLkb/6HJXaP9TcrphGWCp9eczyV11nmY6XCRXlA==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.2.1_1776800804506_0.5969128006629085","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@cool-ai/beach-llm","version":"0.2.2","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.2.2","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"ae2b4fa6b02f909446b784b1775fe02b2aaa2b07","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.2.2.tgz","fileCount":71,"integrity":"sha512-odNxM/xoumxSJ8k0o6bSKG6Gjuy3xHHrQs7JlcKZdLn+2D5Kv/l2aXEqOVHztDCO4h+gHvpg94AmSMMzI1fQKg==","signatures":[{"sig":"MEUCIB84v+xZfpWSs9TcaobqFroRs0vYnlx0K21vwA8dVtmUAiEAt3YsChLD3goc7bmrj5iSr9xeX/1nPyo7WkuUKANlf+M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110925},"type":"module","_from":"file:cool-ai-beach-llm-0.2.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/f299b8dcaef98d89a4f4269fdb8cf451/cool-ai-beach-llm-0.2.2.tgz","_integrity":"sha512-odNxM/xoumxSJ8k0o6bSKG6Gjuy3xHHrQs7JlcKZdLn+2D5Kv/l2aXEqOVHztDCO4h+gHvpg94AmSMMzI1fQKg==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.2.2_1776845932406_0.147799823425532","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@cool-ai/beach-llm","version":"0.2.3","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.2.3","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"5c8cf96f71cae19e839d7c4df01558be0ebd1f32","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.2.3.tgz","fileCount":71,"integrity":"sha512-n6odAuE9pk4BBwSCLMbpo21cexLf8GYY1XCcBZbJtgRGsOzZLAIf1KJ80425CydjSRIzAI/zEp1pz/ClonyeoA==","signatures":[{"sig":"MEUCIEh4k01YHttO3jjR7V4ZnQwWfUihn8fTW3jdoIHZVMJPAiEAsPrqEizd7UrB6lKh5/mbpg8vxT51ojSOMiDPPb/3So4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106727},"type":"module","_from":"file:cool-ai-beach-llm-0.2.3.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/40c85d87f3dbcbf2c0b1d1d0d09e512d/cool-ai-beach-llm-0.2.3.tgz","_integrity":"sha512-n6odAuE9pk4BBwSCLMbpo21cexLf8GYY1XCcBZbJtgRGsOzZLAIf1KJ80425CydjSRIzAI/zEp1pz/ClonyeoA==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.2.3_1776861660134_0.4183949079757341","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cool-ai/beach-llm","version":"0.4.0","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.4.0","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"094b44f8436ce7ed7eaa95ec3392bdeec133fe45","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.4.0.tgz","fileCount":75,"integrity":"sha512-THG1tg6x9CKG7hN0X/n/Qj7RzH0bLt2G9lzoFCAHEQyqIbh1bJYXKb/7vSRB46GVXbZOL4zuN0ibuSx3UqWphw==","signatures":[{"sig":"MEYCIQCeSmjP4Xg1Kkw1Pp1vt/uU9WtlGezpxvWiXwali5swTgIhAJck3Hh2Xa1GUYFihjjpVO3fHQtgbuRfWDrOXvOfj91U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123524},"type":"module","_from":"file:cool-ai-beach-llm-0.4.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/6be9cb477a396859c7f0012d3190e0ea/cool-ai-beach-llm-0.4.0.tgz","_integrity":"sha512-THG1tg6x9CKG7hN0X/n/Qj7RzH0bLt2G9lzoFCAHEQyqIbh1bJYXKb/7vSRB46GVXbZOL4zuN0ibuSx3UqWphw==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.4.0_1776876571301_0.9821922479611993","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@cool-ai/beach-llm","version":"0.5.0","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.5.0","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"94ee6872b26dfaf7498d8f53924a7890516111d8","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.5.0.tgz","fileCount":75,"integrity":"sha512-m0EaRzxLsNLqsbM2NermAyv9+cTH2cNxA62jhO+Oy4WsrpSxlY55+PTjCuA4vnTZndyebgzoU8/phd8HqSoWvw==","signatures":[{"sig":"MEUCIFGaKz/vGQcjru1VjSQxdjdm3tyv0cF1bzaNLBxC0rC7AiEA5YS22WOuGYnvLFT0nF5L/2YL1xt9nyw+aEdYHdlEJAw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130211},"type":"module","_from":"file:cool-ai-beach-llm-0.5.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/6b678ac9f5269b1a57bb917ee2bfe4c6/cool-ai-beach-llm-0.5.0.tgz","_integrity":"sha512-m0EaRzxLsNLqsbM2NermAyv9+cTH2cNxA62jhO+Oy4WsrpSxlY55+PTjCuA4vnTZndyebgzoU8/phd8HqSoWvw==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.5.0_1776937824544_0.5285964814601012","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@cool-ai/beach-llm","version":"0.5.1","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.5.1","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"5145aff7998cadb67ce22d6086b4002509772b37","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.5.1.tgz","fileCount":75,"integrity":"sha512-Qx6eGTpnmyln7RJJOTAFpxjl6J5Pdimem3RKsVhqoJEZvWUamvIq9ufmvmcali70Ky7d/Cv8MpOHw+04v8cdfA==","signatures":[{"sig":"MEYCIQD54zZ6i1nDWBvSQ30jLkpK3ZVk7x4nvGftPQVImyJMPgIhAIWN/qAWArJUB/XK8+i2l7cAkEhTqdGlThkpn816vZCE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130211},"type":"module","_from":"file:cool-ai-beach-llm-0.5.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/804ae4395bc0a4db82a75bbd3a1bb211/cool-ai-beach-llm-0.5.1.tgz","_integrity":"sha512-Qx6eGTpnmyln7RJJOTAFpxjl6J5Pdimem3RKsVhqoJEZvWUamvIq9ufmvmcali70Ky7d/Cv8MpOHw+04v8cdfA==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.5.1_1776943009533_0.5195085327592674","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@cool-ai/beach-llm","version":"0.5.2","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.5.2","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"9d86bf451e04189e590d30b927332a8507b56f0b","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.5.2.tgz","fileCount":75,"integrity":"sha512-uNqgrWuTbqEuCMwluH5SzUYjGMsB7av7WIh5rlBVN7gGET1x6ZbPC9WJDllC0Nf8BEFj+sJZsWGi0dbeH/NXBQ==","signatures":[{"sig":"MEUCIDp820kPMQND25/abC3NP2q9CyJ1p4AyILnGSq/hgJsfAiEAy3DZ0njDFoTzCPNH6K18KwHi6eugAhYnoYbclFX0sCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134093},"type":"module","_from":"file:cool-ai-beach-llm-0.5.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/8a43208f1fc513b80659dbdcf4af45ae/cool-ai-beach-llm-0.5.2.tgz","_integrity":"sha512-uNqgrWuTbqEuCMwluH5SzUYjGMsB7av7WIh5rlBVN7gGET1x6ZbPC9WJDllC0Nf8BEFj+sJZsWGi0dbeH/NXBQ==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.5.2_1776956403654_0.3820897053103063","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@cool-ai/beach-llm","version":"0.5.3","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.5.3","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"dist":{"shasum":"40c92c24945afd5beb02b143e406b5acf6e7a824","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.5.3.tgz","fileCount":75,"integrity":"sha512-fJgPmTUz6Ki8g4mt8u5/a1RUgDumVZpUFKeRU2KNeFtTM1g361zqL/3+cSRT1w33+epFRKvyUWlo9l/FMnjj+w==","signatures":[{"sig":"MEUCIQDYNV+ZExD0hkfaMFE6OdBiHCNcXnkhCyt6v0ZRLnSGLQIgezsYa3H9GyWBCFCZ7b1jmi51AF9GYLwUgx4275S/2rQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136885},"type":"module","_from":"file:cool-ai-beach-llm-0.5.3.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/15f1fe9f514b02cb16fb343263e4939f/cool-ai-beach-llm-0.5.3.tgz","_integrity":"sha512-fJgPmTUz6Ki8g4mt8u5/a1RUgDumVZpUFKeRU2KNeFtTM1g361zqL/3+cSRT1w33+epFRKvyUWlo9l/FMnjj+w==","_npmVersion":"10.9.7","description":"Scoped LLM actor invocation. The layer between Beach and LLM providers.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.5.3_1776985212929_0.005082743784263766","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@cool-ai/beach-llm","version":"0.5.4","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.5.4","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://gitlab.com/johncandrew/beach/-/tree/main/packages/llm#readme","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"7a3d01d393be32508cdbc60a5851819089fc563e","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.5.4.tgz","fileCount":88,"integrity":"sha512-PnHImUsxvR3GNkRRcH/alDuknWrFw/tRFATsxtIwnN+J50k1K4/HT1KGFxfy5RIvsubIMzX75pML8xw9jaoVRQ==","signatures":[{"sig":"MEYCIQDS5DRaxyyNOmza1f3PhgHMZkSi6gBOOdpYBOTO0elV/QIhANilf4C3JyOSQlWb1buhRdytT/pFy0uep9DedKp7VJeo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390029},"type":"module","_from":"file:cool-ai-beach-llm-0.5.4.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/667fc9c6b898e892986d8c470551f377/cool-ai-beach-llm-0.5.4.tgz","_integrity":"sha512-PnHImUsxvR3GNkRRcH/alDuknWrFw/tRFATsxtIwnN+J50k1K4/HT1KGFxfy5RIvsubIMzX75pML8xw9jaoVRQ==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.5.4_1777054362637_0.6562011363960816","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@cool-ai/beach-llm","version":"0.5.5","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.5.5","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"7c27aeda6dde14ac462ec931dbf310f2444676cf","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.5.5.tgz","fileCount":92,"integrity":"sha512-7yh0ARuNhVQQS7ejM9JgHS3S1BpwHxuxkH8nBR+23Nsc0QDPwcWXGPAAEQOoj4nAC9BuJrPvQSBEzKZ8fzAdyw==","signatures":[{"sig":"MEQCICbQk2cxIN6CYWV7c1Hl/KLs9D/8CpKSozoRdHlmh9EbAiBFfxemfxdVFlG8H/a5SS3a04BFUL8KbYEM5J0OsBz5Yg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407616},"type":"module","_from":"file:cool-ai-beach-llm-0.5.5.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/40fcf0b7c658c6a4cc73163b87a1f973/cool-ai-beach-llm-0.5.5.tgz","_integrity":"sha512-7yh0ARuNhVQQS7ejM9JgHS3S1BpwHxuxkH8nBR+23Nsc0QDPwcWXGPAAEQOoj4nAC9BuJrPvQSBEzKZ8fzAdyw==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.5.5_1777132126880_0.1913201935777351","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@cool-ai/beach-llm","version":"0.5.6","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.5.6","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"d5f3b7c0c5f6039ab5cc134b3860930a068e13a3","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.5.6.tgz","fileCount":95,"integrity":"sha512-uWWPWnTiKsRR33/kBW+XEbnH3FZSqK853z3E2atx1okxv5so5OLs4E6R8S2Jo1dihkcJBJz45QWWj49wtOfNwA==","signatures":[{"sig":"MEUCIA5AqVGVkQBVWGtQuJn6IVD2gZSAChK/2N6uCZhvfVj5AiEArNxwAAX7gpLS3uN7iammJVIfyCInacc6tQNvRrXk7DU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":439652},"type":"module","_from":"file:cool-ai-beach-llm-0.5.6.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/fd12cc34dbf2412f78cd0dd5680b80d9/cool-ai-beach-llm-0.5.6.tgz","_integrity":"sha512-uWWPWnTiKsRR33/kBW+XEbnH3FZSqK853z3E2atx1okxv5so5OLs4E6R8S2Jo1dihkcJBJz45QWWj49wtOfNwA==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.5.6_1777324043160_0.9175898779183891","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@cool-ai/beach-llm","version":"0.6.0","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.0","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"21dfe44277bc408cf71adcd1938b4efad8eb7341","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.0.tgz","fileCount":103,"integrity":"sha512-E0en1YB/Fuk+BA+OZli6Qfrji1N5mu21yQgaGC8iIic/MDCrNG3/huvQH2+aUHshAbIknrGhImjc0il7g9YVgQ==","signatures":[{"sig":"MEYCIQDOPV3lQnQocPO3LynfxW8YBfwrIA3GQMC18GINTjw0CQIhAKWdvFTKESHpBaSRr1QkVsMnTsctW9PcIP1JYYxpCOyF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":486082},"type":"module","_from":"file:cool-ai-beach-llm-0.6.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/d13504d98b6f4624a32fef8f30002969/cool-ai-beach-llm-0.6.0.tgz","_integrity":"sha512-E0en1YB/Fuk+BA+OZli6Qfrji1N5mu21yQgaGC8iIic/MDCrNG3/huvQH2+aUHshAbIknrGhImjc0il7g9YVgQ==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.0_1777485178692_0.16720527601259438","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@cool-ai/beach-llm","version":"0.6.1","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.1","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"ceddd9f4276da134a7eb6203bafc8f39697846b5","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.1.tgz","fileCount":115,"integrity":"sha512-Zcl8wE6jwhmW96nXkFHDFrStLrcwVUdg2Lvl3Sss2QmVGHwqZX3lhRBSuu3QueH+nF9ugahebKZWoQrDGYedoA==","signatures":[{"sig":"MEUCIQCXkAhs5VjiXnCRDMau9I6vYvfXcpoUCenWs+Fm53zFkgIgMisGrAnR8ehyi9ExD1tiyhTlEiShtJwesqXOeDrGqco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":583415},"type":"module","_from":"file:cool-ai-beach-llm-0.6.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/12837f536d3564d7406ec1ef139850af/cool-ai-beach-llm-0.6.1.tgz","_integrity":"sha512-Zcl8wE6jwhmW96nXkFHDFrStLrcwVUdg2Lvl3Sss2QmVGHwqZX3lhRBSuu3QueH+nF9ugahebKZWoQrDGYedoA==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.1_1777575373276_0.29328829589212946","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@cool-ai/beach-llm","version":"0.6.2","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.2","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"869d642a99c4f835ab6d945be2c170a0fa8b432e","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.2.tgz","fileCount":115,"integrity":"sha512-evpipbycX4KJ5FHxGhd85wjokGwKQAmLOCcHRkfp/5YagZtamcmNsjVqWjyi07CgxhYiwJRis+/EM0IwnXwNvA==","signatures":[{"sig":"MEYCIQCuOMTzfjaxyLyiG6gqT5/V6SXkTAnx3pkl8SDNgqcF8gIhAJmWi5UkA+2U2vQi0UHbzOpOz81Ymo6YPj/Ian/bCeYi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":593913},"type":"module","_from":"file:cool-ai-beach-llm-0.6.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/d75cb961d1711ac27545f48f0ed26148/cool-ai-beach-llm-0.6.2.tgz","_integrity":"sha512-evpipbycX4KJ5FHxGhd85wjokGwKQAmLOCcHRkfp/5YagZtamcmNsjVqWjyi07CgxhYiwJRis+/EM0IwnXwNvA==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.2_1777662568290_0.6185809736098755","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@cool-ai/beach-llm","version":"0.6.3","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.3","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"546f59e88860b7d48eac694d54e2804215c7680d","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.3.tgz","fileCount":115,"integrity":"sha512-tqFocrcJtSNAtawF4jYPoaHp4aEmvgdiwJqEqAUkm/qh3L+YBu1IKnUEFXRcO/GOJij+kXWiCx47m5s/CuA+Dg==","signatures":[{"sig":"MEQCIFPrBZE6Dnfwss5LRFOFEdxiL35Yehwn5zFfVaHqVvrGAiAzdKRL1cvJeXWPXOSY7nerRCpBWwOvjJ2EkFYpH9H8LQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":593913},"type":"module","_from":"file:cool-ai-beach-llm-0.6.3.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/42b63959e434ced71d62704ba44c97a1/cool-ai-beach-llm-0.6.3.tgz","_integrity":"sha512-tqFocrcJtSNAtawF4jYPoaHp4aEmvgdiwJqEqAUkm/qh3L+YBu1IKnUEFXRcO/GOJij+kXWiCx47m5s/CuA+Dg==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.3_1777752273492_0.24601179862771927","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@cool-ai/beach-llm","version":"0.6.4","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.4","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"cff7909bc90d570c4a09209fa7c69326a5a83438","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.4.tgz","fileCount":115,"integrity":"sha512-tsV3l76zbOEdz6kU8HIxhK9lNjroy4LEJwKiMYzbioz+Btbz0XpKqzCwh8Y5EU8yDBUKFd35zRYmR9d4y4T8qQ==","signatures":[{"sig":"MEUCIGQaQAksvzx14mVfFSIx/PvkPMSTYNQPJ/8H5aKg0X9UAiEAumy5S3M5k6bBkotjOmvsZ5ayuU7021ziWjIW9JxL7kc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":593913},"type":"module","_from":"file:cool-ai-beach-llm-0.6.4.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/a99591e5da3f15373e101c3a7bcb823d/cool-ai-beach-llm-0.6.4.tgz","_integrity":"sha512-tsV3l76zbOEdz6kU8HIxhK9lNjroy4LEJwKiMYzbioz+Btbz0XpKqzCwh8Y5EU8yDBUKFd35zRYmR9d4y4T8qQ==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.4_1777923919522_0.6343157769822763","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@cool-ai/beach-llm","version":"0.6.5","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.5","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"bae768d70743d1304b9a654ba8a6132394d328b0","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.5.tgz","fileCount":115,"integrity":"sha512-tDMT82I4nkHzFHzx5RYbia15KQhimBQ5NMWEfC1qyf6CZw05a7rsh67+87R1ULF352Ila50Y12McNTNLFvhvaw==","signatures":[{"sig":"MEUCIBjslwU6xGT5v60eTGaOjCIGmAD2p5sYuqnjV+3hrzufAiEA1uzftLz8Wg+EF6k9tSz2j3Fhl3BqxRMCpAHL/1aQX5k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":603808},"type":"module","_from":"file:cool-ai-beach-llm-0.6.5.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/1edf3e34be482318532e6c405733e47f/cool-ai-beach-llm-0.6.5.tgz","_integrity":"sha512-tDMT82I4nkHzFHzx5RYbia15KQhimBQ5NMWEfC1qyf6CZw05a7rsh67+87R1ULF352Ila50Y12McNTNLFvhvaw==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.5_1778003253011_0.10064241600261847","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"@cool-ai/beach-llm","version":"0.6.6","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.6","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"3d6ce21ad3176158febe51248d89dc879e78515e","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.6.tgz","fileCount":83,"integrity":"sha512-re5l9rRKP3kDJhY4vCMWPqj3uvxxOaLQufKuCQzEiCS4fEjVszW8dDOsNbT92mdjIr1lqW5EO+FQSQlgr2mrCw==","signatures":[{"sig":"MEUCIQDRlwqdHsSk+3BkoHzObJMEhrbp/JUT/QbAw30r2qW5vAIgTL5+dYqAnBSe89OLj7lGcXVIzllz8YhD2QBVNhFuWHE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":457264},"type":"module","_from":"file:cool-ai-beach-llm-0.6.6.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/a59200637652f1199b4a05bd3ba99773/cool-ai-beach-llm-0.6.6.tgz","_integrity":"sha512-re5l9rRKP3kDJhY4vCMWPqj3uvxxOaLQufKuCQzEiCS4fEjVszW8dDOsNbT92mdjIr1lqW5EO+FQSQlgr2mrCw==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.6_1778191670282_0.84904857427787","host":"s3://npm-registry-packages-npm-production"}},"0.6.7":{"name":"@cool-ai/beach-llm","version":"0.6.7","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.7","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"fc91237bc9fd2ffbd48c970d5fa3fd63ffa43e03","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.7.tgz","fileCount":87,"integrity":"sha512-4cfuJDFrgdyNYeefyOEEqhcy2fyDVFuymiM3CpUDCut8XvPq0EwmtXPrv1+li5+F6ofLevFaL6KdnT8+gkMP+g==","signatures":[{"sig":"MEYCIQCxMAdY0KT/2NBtgiKPWC5F91QdiPrz5sqx+XTlA+mGIQIhAJ4WwHrxcPd9J/B9NOks2KDfGfZq65DbFzybIfyRB8NG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":459112},"type":"module","_from":"file:cool-ai-beach-llm-0.6.7.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/8d651183129db9b4d7e73e4a48d6f68b/cool-ai-beach-llm-0.6.7.tgz","_integrity":"sha512-4cfuJDFrgdyNYeefyOEEqhcy2fyDVFuymiM3CpUDCut8XvPq0EwmtXPrv1+li5+F6ofLevFaL6KdnT8+gkMP+g==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.7.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.7_1778436939574_0.31526549527808134","host":"s3://npm-registry-packages-npm-production"}},"0.6.8":{"name":"@cool-ai/beach-llm","version":"0.6.8","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.6.8","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"91144ad9eb674d6d83586529003226b3b6343701","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.6.8.tgz","fileCount":87,"integrity":"sha512-z5PI01jK/dKagcooDBJlLJWqXp92JnQXXTi+pRufMumrSLZ4cQEaMwsCll6UcmkVmwyBKc3FUATflW2mkZJkqA==","signatures":[{"sig":"MEQCHyhDlOrHoFF074ETlJss9t/lzqZttd28f1yX4wjHF0gCIQDdz7/aD3ADgSrizt3sLEutKBXN1L9tRVZLah/haE2Azw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":459112},"type":"module","_from":"file:cool-ai-beach-llm-0.6.8.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/c404d8addf05748bf10705c8af11f1ff/cool-ai-beach-llm-0.6.8.tgz","_integrity":"sha512-z5PI01jK/dKagcooDBJlLJWqXp92JnQXXTi+pRufMumrSLZ4cQEaMwsCll6UcmkVmwyBKc3FUATflW2mkZJkqA==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.6.8_1778440090858_0.8690239401338151","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@cool-ai/beach-llm","version":"0.7.0","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.7.0","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"1f6ae91bff87ec97e43775a7e55b6423401c6445","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.7.0.tgz","fileCount":87,"integrity":"sha512-EgxicuupDim2q/kyCYuk+I9mPp6CsUd+L51PGDcJgS8TXn9kedZnYo4C5zhs9EGZ+B8YidXkf0Ll7RmvpwAavg==","signatures":[{"sig":"MEUCIQCFEo7KVeUEaU4AdvLfA655eIHqhER9eigJwAY20PYOfQIgO5bKeQV4T8bGRJzaxiaC/Y15mZzVyT8KIkrPYZrqIl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":450375},"type":"module","_from":"file:cool-ai-beach-llm-0.7.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/d9c4599f2c0d649f2cc5d8d5094202f1/cool-ai-beach-llm-0.7.0.tgz","_integrity":"sha512-EgxicuupDim2q/kyCYuk+I9mPp6CsUd+L51PGDcJgS8TXn9kedZnYo4C5zhs9EGZ+B8YidXkf0Ll7RmvpwAavg==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.9.0","@cool-ai/beach-missives":"0.0.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.7.0_1778459520888_0.8112216805932122","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@cool-ai/beach-llm","version":"0.7.1","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.7.1","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"aaa0bc7d797ce063dd79261bce8dd96047e01d0a","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.7.1.tgz","fileCount":87,"integrity":"sha512-fC/uHaUvqPHxDqhtcPqAOc94hT3w1AjefCe/dC0xaNVEwIMiNb2C4ji2ocxjCtAMrhrGOk4Dazlb8equIPmRlQ==","signatures":[{"sig":"MEUCIF8LKRlvol9PiqLJ1idJku7xR5jTNySvIC12h1VYDpbYAiEAnE6yH5WoHDZhpxYCYRfPbC44ETm5Bnh5ytzCVKoj12U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453458},"type":"module","_from":"file:cool-ai-beach-llm-0.7.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/c287a3b2729fa447796f3547e41a4140/cool-ai-beach-llm-0.7.1.tgz","_integrity":"sha512-fC/uHaUvqPHxDqhtcPqAOc94hT3w1AjefCe/dC0xaNVEwIMiNb2C4ji2ocxjCtAMrhrGOk4Dazlb8equIPmRlQ==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"0.9.0","@cool-ai/beach-missives":"0.0.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.7.1_1778466314891_0.7080491575153942","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@cool-ai/beach-llm","version":"0.7.2","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.7.2","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"9d9292a8925adcbf3f1b1453ad64406e178723f1","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.7.2.tgz","fileCount":87,"integrity":"sha512-/FF524xpR3oFS+k4UBbao0N39IqtXps9+YAC46sAtenVuRtxz9rs9QDwKpHLZmRmsa3rF6gJQwjkAvy9YzGkEw==","signatures":[{"sig":"MEYCIQCG/W9+JGp5K7VtwquTK0s7FMc0PMT/TSISsYAPgmkNegIhANNFAEHSOk1Stl8lb/+vqMTLg4H1V9h34Ft5PsPyTuf4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453461},"type":"module","_from":"file:cool-ai-beach-llm-0.7.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/f1a3499a4279b000d266d6850489bdb3/cool-ai-beach-llm-0.7.2.tgz","_integrity":"sha512-/FF524xpR3oFS+k4UBbao0N39IqtXps9+YAC46sAtenVuRtxz9rs9QDwKpHLZmRmsa3rF6gJQwjkAvy9YzGkEw==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"^0.10.0","@cool-ai/beach-missives":"^0.0.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.7.2_1778500640475_0.21156789127939835","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@cool-ai/beach-llm","version":"0.7.3","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.7.3","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"72ce0a698c220de439b04a5c4ec7fc934c11cb9e","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.7.3.tgz","fileCount":87,"integrity":"sha512-wvQm9NO0vt4psilK+0XmvSijGQDzepEX5oYeYGGgRceHlt82J6f6+1oLUD5AcUzBDTLabhYr0/++rOWCzv+Smg==","signatures":[{"sig":"MEQCIBh+RLXURIHTdpv8uzKs3gf1fMy9O1Krk+gZJMOFBQSYAiB6rgSYMBAITKL2Y55zgMBCO9E1Jay5NyLKTZq/SkXJJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453461},"type":"module","_from":"file:cool-ai-beach-llm-0.7.3.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/728f9823d031ae2e459fead570dbe94a/cool-ai-beach-llm-0.7.3.tgz","_integrity":"sha512-wvQm9NO0vt4psilK+0XmvSijGQDzepEX5oYeYGGgRceHlt82J6f6+1oLUD5AcUzBDTLabhYr0/++rOWCzv+Smg==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"^0.11.0","@cool-ai/beach-missives":"^0.0.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.7.3_1778509727303_0.8006707107683413","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@cool-ai/beach-llm","version":"0.7.4","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.7.4","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"9c6823a7eb32bd9dd458c1f2c5de0ea54cd7c682","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.7.4.tgz","fileCount":87,"integrity":"sha512-bJIiU2M0RyoqK43sSrYmrsGV0bv2KrHYkJC692JsNOm4klsiwPieej3BDNgPfsICR0yyvOreMS4f50/lMT59MQ==","signatures":[{"sig":"MEUCIDDQs34QZKpck9ZIXj4A/5yrAPh4fsR52Nf4TVzmTU2UAiEAjRmSP2jXdqpuyhudlTrk/oUEYWdy1YEIuDzYX5ocI94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456914},"type":"module","_from":"file:cool-ai-beach-llm-0.7.4.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/e8aeaea106cf0d6a4b318afba38a762b/cool-ai-beach-llm-0.7.4.tgz","_integrity":"sha512-bJIiU2M0RyoqK43sSrYmrsGV0bv2KrHYkJC692JsNOm4klsiwPieej3BDNgPfsICR0yyvOreMS4f50/lMT59MQ==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.7","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@cool-ai/beach-core":"^0.11.4","@cool-ai/beach-missives":"^0.0.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.7.4_1778686665837_0.25977039488014064","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"@cool-ai/beach-llm","version":"0.7.5","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.7.5","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"60b084977a5f063608dde4580752ca16e5f5b40f","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.7.5.tgz","fileCount":91,"integrity":"sha512-aE5n4d5KNqQnIZIeKwqsMYTDO66nT89Scu49kcc2Bh0xURt+y7YaPqa1+Ar+nUUd76pSxfMSoMtwL7HmvNgksA==","signatures":[{"sig":"MEUCIQCY0aKHQi3CyTP6bHKiOVNXJVTkshkgq+R8Lp2KTKSlowIgEcU8v7PE/ATRTS0BbQFZbZMUhrzUTkb0jjkltm6CKnI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":470970},"type":"module","_from":"file:cool-ai-beach-llm-0.7.5.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/50e05730ad73d2c0f1ce3f6ff866f9a6/cool-ai-beach-llm-0.7.5.tgz","_integrity":"sha512-aE5n4d5KNqQnIZIeKwqsMYTDO66nT89Scu49kcc2Bh0xURt+y7YaPqa1+Ar+nUUd76pSxfMSoMtwL7HmvNgksA==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.8","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@cool-ai/beach-core":"^0.11.14","@cool-ai/beach-missives":"^0.0.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.7.5_1780328414398_0.2417079122158745","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@cool-ai/beach-llm","version":"0.8.0","license":"Apache-2.0","_id":"@cool-ai/beach-llm@0.8.0","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"dist":{"shasum":"16c8a1cb127b7e1268b03e0a8f6a3493e3f52ac5","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.8.0.tgz","fileCount":83,"integrity":"sha512-ADOKI+woiLgEdtyimfnD7s5yyWSF8dSd1sic++clV/JE7JlNMMUBYOCQpnQ/aluNG2Tc51lEKIxFAl2bjDVjBw==","signatures":[{"sig":"MEQCHyOgSTV6MNzZFTMbI+R91Fk0+o2umiCMwZTUNja97/UCIQCIZSp1hPwkj5mNLanT3HlXnykQqVjuymMhvrC0LM4Gxw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466145},"type":"module","_from":"file:cool-ai-beach-llm-0.8.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --project tsconfig.json --watch","test":"vitest run","build":"tsc --project tsconfig.json","coverage":"vitest run --coverage","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"_resolved":"/tmp/be6ca788121cb9b3d0a9b5d643aef206/cool-ai-beach-llm-0.8.0.tgz","_integrity":"sha512-ADOKI+woiLgEdtyimfnD7s5yyWSF8dSd1sic++clV/JE7JlNMMUBYOCQpnQ/aluNG2Tc51lEKIxFAl2bjDVjBw==","repository":{"url":"git+https://gitlab.com/johncandrew/beach.git","type":"git","directory":"packages/llm"},"_npmVersion":"10.9.8","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@cool-ai/beach-core":"^0.12.0","@cool-ai/beach-missives":"^0.0.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"peerDependencies":{"ai":"^4.0.0","@anthropic-ai/sdk":"^0.36.0"},"peerDependenciesMeta":{"ai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/beach-llm_0.8.0_1780572515920_0.08822452679370629","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@cool-ai/beach-llm","version":"0.8.1","description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","license":"Apache-2.0","repository":{"type":"git","url":"git+https://gitlab.com/johncandrew/beach.git","directory":"packages/llm"},"homepage":"https://cool-ai.org","bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"type":"module","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"publishConfig":{"access":"public"},"dependencies":{"@cool-ai/beach-core":"^0.13.0","@cool-ai/beach-missives":"^0.0.10"},"devDependencies":{"typescript":"^5.5.0","vitest":"^2.0.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.36.0","ai":"^4.0.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true},"ai":{"optional":true}},"scripts":{"build":"tsc --project tsconfig.json","dev":"tsc --project tsconfig.json --watch","test":"vitest run","coverage":"vitest run --coverage","test:watch":"vitest","typecheck":"tsc --noEmit"},"_id":"@cool-ai/beach-llm@0.8.1","_integrity":"sha512-mC4z5i30MZVudXVv1/oHMb9VIxYXYP4Pl3PLSJwMIM3fMlAhf0vSCrAMSM0dGAtm3Gj3pVoRDSxx4BGVq/BL3g==","_resolved":"/tmp/012d30f4ee235064835dec4bc790439d/cool-ai-beach-llm-0.8.1.tgz","_from":"file:cool-ai-beach-llm-0.8.1.tgz","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-mC4z5i30MZVudXVv1/oHMb9VIxYXYP4Pl3PLSJwMIM3fMlAhf0vSCrAMSM0dGAtm3Gj3pVoRDSxx4BGVq/BL3g==","shasum":"87fcf2cf12221ac55009ac639314ea2cc933a347","tarball":"https://registry.npmjs.org/@cool-ai/beach-llm/-/beach-llm-0.8.1.tgz","fileCount":83,"unpackedSize":463881,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAOLrAbNJtVfu1Oveo+TqyALjPzFxObBJJR3ihL2IkzUAiA4HNih2XRmzSUUMYv6vVlGFv4RO3+KQa2EVy3OlUS5qg=="}]},"_npmUser":{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"},"directories":{},"maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/beach-llm_0.8.1_1780677385667_0.9865691219218611"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T22:36:18.135Z","modified":"2026-06-05T16:36:25.933Z","0.0.1":"2026-04-20T22:36:18.409Z","0.0.2":"2026-04-21T00:00:53.970Z","0.1.0":"2026-04-21T13:56:25.632Z","0.2.0":"2026-04-21T14:18:10.340Z","0.2.1":"2026-04-21T19:46:44.651Z","0.2.2":"2026-04-22T08:18:52.534Z","0.2.3":"2026-04-22T12:41:00.294Z","0.4.0":"2026-04-22T16:49:31.462Z","0.5.0":"2026-04-23T09:50:24.687Z","0.5.1":"2026-04-23T11:16:49.679Z","0.5.2":"2026-04-23T15:00:03.839Z","0.5.3":"2026-04-23T23:00:13.067Z","0.5.4":"2026-04-24T18:12:42.829Z","0.5.5":"2026-04-25T15:48:47.028Z","0.5.6":"2026-04-27T21:07:23.320Z","0.6.0":"2026-04-29T17:52:58.833Z","0.6.1":"2026-04-30T18:56:13.430Z","0.6.2":"2026-05-01T19:09:28.519Z","0.6.3":"2026-05-02T20:04:33.693Z","0.6.4":"2026-05-04T19:45:19.737Z","0.6.5":"2026-05-05T17:47:33.184Z","0.6.6":"2026-05-07T22:07:50.438Z","0.6.7":"2026-05-10T18:15:39.732Z","0.6.8":"2026-05-10T19:08:11.005Z","0.7.0":"2026-05-11T00:32:01.072Z","0.7.1":"2026-05-11T02:25:15.030Z","0.7.2":"2026-05-11T11:57:20.645Z","0.7.3":"2026-05-11T14:28:47.495Z","0.7.4":"2026-05-13T15:37:45.997Z","0.7.5":"2026-06-01T15:40:14.559Z","0.8.0":"2026-06-04T11:28:36.159Z","0.8.1":"2026-06-05T16:36:25.813Z"},"bugs":{"url":"https://gitlab.com/johncandrew/beach/-/issues"},"license":"Apache-2.0","homepage":"https://cool-ai.org","repository":{"type":"git","url":"git+https://gitlab.com/johncandrew/beach.git","directory":"packages/llm"},"description":"LLM participant runtime for Beach: respond() discipline, scoped tools, approval interception.","maintainers":[{"name":"johncandrew","email":"johncandrew@yahoo.co.uk"}],"readme":"# @cool-ai/beach-llm\n\nOwns the LLM-shaped participant runtime — the `respond()` discipline, scoped tools, and approval interception. An LLM-backed handler is an `EventHandler` like any other; this package builds it. The rules here (structured `respond()` calls, no free text, tool-scoped capability) are what make LLMs composable with deterministic handlers and durable processes.\n\n> **Home:** [cool-ai.org](https://cool-ai.org) · **Documentation:** [cool-ai.org/docs](https://cool-ai.org/docs)\n\n## Install\n\n```sh\nnpm install @cool-ai/beach-llm @anthropic-ai/sdk\n```\n\n## What this package provides\n\n- **`createAnthropicProvider(opts?)`** — factory that creates an `AnthropicProvider` without exposing `@anthropic-ai/sdk` to consumer code. Preferred over constructing `AnthropicProvider` directly.\n- **`AnthropicProvider`** — `LLMProvider` wrapping `@anthropic-ai/sdk`. Full extended-thinking support.\n- **`VercelAIProvider`** — `LLMProvider` wrapping the Vercel AI SDK (`ai`). 100+ models across OpenAI, Google, Mistral, Meta, Cohere, and others. Does not support Anthropic extended thinking — use `AnthropicProvider` for that.\n- **`ToolRegistry`** — declares every tool available in the system. Handler configs select by name.\n- **`createLLMHandler(opts)`** — factory that returns an `EventHandler` whose body runs the respond() loop. Register it exactly like a deterministic handler: `router.register(id, handler)`.\n- **`runRespondLoop(options)`** — drives an LLM through its full tool-use loop until `respond()` is called. Used inside `createLLMHandler`; call directly only when you don't need the handler wrapper.\n- **`LLMHandlerConfig`** — the configuration shape for an LLM-backed handler.\n- **System-prompt snippets** — importable text that teaches the LLM the `respond()` tool and turn states.\n- **`LLMProvider` interface** — implement to add other model providers.\n\n## LLMHandlerConfig\n\n```typescript\nimport type { LLMHandlerConfig } from '@cool-ai/beach-llm';\nimport { respondToolSnippet, conversationStatesSnippet } from '@cool-ai/beach-llm';\n\nconst handlerConfig: LLMHandlerConfig = {\n  id: 'baxter',\n  model: 'claude-haiku-4-5',\n  systemPrompt: [\n    respondToolSnippet,         // required — teaches respond() shape\n    conversationStatesSnippet,  // required — teaches valid conversationState values\n    'You are Baxter, a personal productivity assistant.',\n  ].join('\\n\\n'),\n  tools: ['task_list', 'task_create'],  // names from ToolRegistry; respond() is injected automatically\n  maxTokens: 4096,      // optional; defaults apply per provider\n  temperature: 0,       // optional\n\n  // Domain-data enforcement:\n  domainDataSchema: {   // optional — embedded in respond() input_schema; LLM must produce conforming output\n    type: 'object',\n    properties: {\n      tasks: { type: 'array', items: { type: 'object' } },\n    },\n    required: ['tasks'],\n  },\n  domainDataMergeStrategy: 'replace',  // optional — 'replace' | 'append' | 'deep-merge'; default 'replace'\n};\n```\n\n`respond()` is injected automatically — do not list it in `tools`.\n\n### Typed state via `stateSchema`\n\n`LLMHandlerConfig` is generic over a `TState extends Record<string, string>` parameter, defaulting to `Record<string, string>`. Declare `stateSchema` to type the handler's `context.session.state` with typed coordinates:\n\n```typescript\nimport type { LLMHandlerConfig, StateSchema } from '@cool-ai/beach-llm';\n\ntype ConciergeState = {\n  mode: 'discover' | 'search' | 'build';\n  subMode: 'initial' | 'results_landed' | 'basket_added';\n};\n\nconst conciergeStateSchema: StateSchema<ConciergeState> = {\n  coordinates: {\n    mode:    { values: ['discover', 'search', 'build'], default: 'discover' },\n    subMode: { values: ['initial', 'results_landed', 'basket_added'], default: 'initial' },\n  },\n};\n\nconst concierge: LLMHandlerConfig<ConciergeState> = {\n  id: 'concierge',\n  model: 'anthropic/claude-opus-4-7',\n  systemPrompt: '...',\n  tools: ['search', 'package_results'],\n  stateSchema: conciergeStateSchema,\n};\n```\n\nThe handler reads `context.session.state` for the `concierge` coordinates — typed, no runtime undefined check.\n\nThe schema must match the same component's declaration in the router's `state-machine.json` (Beach does not cross-validate the two; the schema is the compile-time view of the same coordinates declared in the runtime config). See the [state machines guide](../../documentation/guides/state-machines.md) for the full picture.\n\n## ToolRegistry\n\n```typescript\nimport { ToolRegistry } from '@cool-ai/beach-llm';\n\nconst registry = new ToolRegistry();\n\nregistry.register({\n  name: 'task_list',\n  description: 'List open tasks for the current user.',\n  scope: 'generalist',\n  inputSchema: {\n    type: 'object',\n    properties: {\n      limit: { type: 'number', description: 'Maximum number of tasks to return.' },\n    },\n  },\n  handler: async (args, context) => {\n    // context.sessionId, context.eventId, context.slotKey, context.signal,\n    // context.routeEvent are available.\n    return { tasks: await db.tasks.list({ limit: (args as { limit: number }).limit }) };\n  },\n});\n```\n\nThe tool handler returns any JSON-serialisable value. The framework owns the dispatch through the event router (audit, gating, capability scoping); the tool owns the result computation. The result is passed back to the LLM as a tool result and the loop continues until `respond()` is called.\n\nRegistering a name that is already registered throws immediately. Unknown names in `LLMHandlerConfig.tools` throw at invocation time.\n\n```typescript\nregistry.unregister('task_list');  // remove a single tool\nregistry.clear();                  // remove all tools (useful in tests)\n```\n\n### Tool scope and routing — the two-axis design\n\n`scope` describes ownership; `routing` describes infrastructure. They are independent.\n\n| Scope | Default routing | Bypass allowed |\n|---|---|---|\n| `generalist` | `routed` | **No** — generalist is the trust-gate scope; bypass would defeat the invariant |\n| `specialist` | `routed` | **Yes**, with an articulated `bypassRouting.reason` |\n\nA specialist tool is one that operates on a private substrate the consumer team owns; the framework still wraps the call for audit and gating unless the tool elects bypass. A specialist tool that wants framework routing (the default) only needs `justification`. A specialist tool that elects bypass needs both `justification` (why specialist) and `bypassRouting.reason` (why bypass).\n\n```typescript\n// Generalist — the recommended default for any tool that touches shared data.\nregistry.register({\n  name: 'task_list',\n  scope: 'generalist',\n  description: 'List open tasks',\n  inputSchema: { /* ... */ },\n  handler: async (args) => db.tasks.list(args),\n});\n\n// Specialist with default routing — articulated justification required.\nregistry.register({\n  name: 'imap_fetch',\n  scope: 'specialist',\n  justification: 'Operates on the researcher\\'s private IMAP cache; not part of the user-visible capability surface',\n  description: 'Fetch raw IMAP message bytes',\n  inputSchema: { /* ... */ },\n  handler: async (args) => fetchImapBytes(args),\n});\n\n// Specialist electing bypass for inner-loop latency — both reasons required.\nregistry.register({\n  name: 'cache_lookup',\n  scope: 'specialist',\n  routing: 'bypass',\n  justification: 'Operates on a process-local cache substrate not part of the consumer\\'s public surface',\n  bypassRouting: {\n    reason: 'Sub-millisecond latency required for the researcher inner loop; routing overhead exceeds the per-call budget',\n  },\n  description: 'Look up a value in the in-process cache',\n  inputSchema: { /* ... */ },\n  handler: async (args) => cache.get((args as { key: string }).key),\n});\n```\n\nThe framework rejects ill-formed declarations at app startup, not at first invocation:\n\n- `scope: 'generalist'` with `routing: 'bypass'` → registration error.\n- Specialist without `justification`, or with a placeholder string (`'TODO'`, `'tbd'`, `'fix me'`, etc.) → registration error.\n- `routing: 'bypass'` without `bypassRouting.reason` → registration error.\n\nGeneralist tools may set `peerExposed: true` to publish on the consumer's Surface Card when that infrastructure ships. Specialist tools cannot set `peerExposed: true` — specialist scope means private substrate, which is by construction not federation-shaped.\n\n### Async tools — `ctx.routeEvent`\n\nA tool that needs to dispatch async work (research, multi-hop fetches, anything taking seconds-to-minutes) calls `ctx.routeEvent` and returns an ack. The handler's turn proceeds; the actual result lands later as a routed event triggering a new handler invocation.\n\n```typescript\nregistry.register({\n  name: 'email_research',\n  scope: 'generalist',\n  description: 'Search the user\\'s email accounts for a topic',\n  inputSchema: { /* ... */ },\n  handler: async (args, ctx) => {\n    const searchId = randomUUID();\n    await ctx.routeEvent!({\n      source: 'assistant',\n      eventType: 'email_research_started',\n      data: { ...(args as object), searchId },\n    });\n    return { searchId };\n  },\n});\n```\n\nThe framework does not auto-attach destinations to the eventual result event — that's the routing config's job. See `documentation/changePlans/cr-155-framework-enforced-routing.md` for the locked design and `documentation/migrations/cr-155-framework-enforced-routing.md` for the migration walkthrough.\n\n## AnthropicProvider\n\n```typescript\nimport { createAnthropicProvider } from '@cool-ai/beach-llm';\n\nconst provider = await createAnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY });\n```\n\n`createAnthropicProvider` wraps the SDK constructor so consumer code never imports `@anthropic-ai/sdk` directly. Options: `apiKey`, `baseURL`, `maxRetries`, `timeout`, `defaultHeaders`, `defaultQuery` — all optional (the SDK defaults `apiKey` to `process.env.ANTHROPIC_API_KEY`).\n\nUse `AnthropicProvider` (and therefore `createAnthropicProvider`) for all Anthropic models, including those with extended thinking enabled. It preserves thinking block signatures across multi-turn tool-use loops.\n\n## VercelAIProvider\n\n```typescript\nimport { generateText, jsonSchema } from 'ai';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { VercelAIProvider } from '@cool-ai/beach-llm';\n\nconst provider = new VercelAIProvider(\n  createOpenAI()('gpt-4o'),\n  { generateText, jsonSchema },\n);\n```\n\n```typescript\nimport { generateText, jsonSchema } from 'ai';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { VercelAIProvider } from '@cool-ai/beach-llm';\n\nconst provider = new VercelAIProvider(\n  createGoogleGenerativeAI()('gemini-2.0-flash'),\n  { generateText, jsonSchema },\n);\n```\n\n`VercelAIProvider` takes the model instance and the two Vercel AI SDK functions it needs (`generateText` and `jsonSchema`). Beach does not import `ai` directly — only the consumer does, meaning `ai` is not a required install for users of `AnthropicProvider`.\n\nInstall the Vercel AI SDK and the relevant provider package:\n\n```sh\nnpm install ai @ai-sdk/openai       # OpenAI / Azure\nnpm install ai @ai-sdk/google       # Gemini\nnpm install ai @ai-sdk/mistral      # Mistral\n# etc.\n```\n\n## LLMProvider interface\n\nTo add other model providers, implement:\n\n```typescript\ninterface LLMProvider {\n  complete(options: CompletionOptions): Promise<CompletionResult>;\n}\n```\n\n`CompletionOptions` carries the model, system prompt, messages, and tool schemas. `CompletionResult` carries stop reason, tool calls, text blocks, reasoning blocks, and token usage. Pass your implementation to `createLLMHandler()` or `runRespondLoop()`.\n\n## LLM round-trip observer (CAIB-280)\n\n`AnthropicProvider`, `VercelAIProvider`, and `@cool-ai/beach-llm-mastra`'s `MastraProvider` accept an optional `observer` at construction. The observer fires `onRequest` before the SDK call and `onResponse` after it settles, paired by a generated `requestId`. Provider errors propagate; `onResponse` does not fire for failed calls.\n\n```typescript\nimport { AnthropicProvider, type LLMObserver } from '@cool-ai/beach-llm';\n\nconst observer: LLMObserver = {\n  onRequest:  (e) => console.log(`→ ${e.providerName}/${e.model} (${e.requestSummary.messageCount} msgs)`),\n  onResponse: (e) => console.log(`← ${e.providerName} ${e.durationMs}ms · ${e.usage.outputTokens} tokens out`),\n};\n\nconst provider = new AnthropicProvider(sdk, { observer });\n```\n\n`@cool-ai/beach-inspect`'s `wireInspect(store)` exposes a ready-to-pass `llmObserver` that writes `inspect:llm-request` / `inspect:llm-response` missives — these land under the `externalApi` detail group in the side panel:\n\n```typescript\nimport { wireInspect } from '@cool-ai/beach-inspect';\nimport { AnthropicProvider } from '@cool-ai/beach-llm';\n\nconst { routerOptions, llmObserver } = wireInspect(missiveStore);\nconst provider = new AnthropicProvider(sdk, { observer: llmObserver! });\n```\n\n`requestId` correlation lets observers pair `onRequest` and `onResponse` for the same call when a single provider instance serves concurrent requests. The constructor-bound shape (rather than per-call observation) keeps the provider's call signature unchanged.\n\n## System-prompt snippets\n\n```typescript\nimport { respondToolSnippet, conversationStatesSnippet } from '@cool-ai/beach-llm';\n```\n\n`respondToolSnippet` explains the `respond()` tool structure. `conversationStatesSnippet` explains valid `conversationState` values. Both belong in every LLM handler's system prompt — without them the LLM does not know it must call `respond()` instead of replying with free text.\n\n## createLLMHandler()\n\nBuilds the `EventHandler` for an LLM-backed handler. Register it exactly like a deterministic handler. The handler renders the inbound `session:request` parts into a message, runs its context-builders, drives the respond() loop, and replies by routing a `session:reply` event — it never reads `session.destinations`.\n\n```typescript\nimport { createLLMHandler } from '@cool-ai/beach-llm';\n\nconst concierge = createLLMHandler({\n  config: handlerConfig,\n  provider,\n  registry,\n  contextBuilders: [async ({ sessionId }) => historyStore.load(sessionId)],  // optional — context injected ahead of the inbound parts\n  timeoutMs: 60_000,                                                          // optional — wall-clock budget per invocation\n  onToolExecution: async (record) => auditLog.write(record),                 // optional — fires after every tool call\n});\n\nrouter.register('concierge', concierge);\n```\n\nThe handler reads `context.session`, drives its own timeout / durable checkpointing / cancellation, and replies by routing a `session:reply` event. The event-router delivers the reply to each of the session's destinations.\n\n## runRespondLoop()\n\nDrives an LLM through its tool loop until it calls `respond()`. `createLLMHandler` uses it internally; call it directly only when you don't need the handler wrapper.\n\n```typescript\nimport { runRespondLoop } from '@cool-ai/beach-llm';\nimport type { SpecialistExecutionRecord } from '@cool-ai/beach-llm';\n\nconst result = await runRespondLoop({\n  config: handlerConfig,\n  messages: [{ role: 'user', content: 'Hello' }],\n  sessionId: 'my-session',\n  registry,\n  provider,\n  signal: abortController.signal,  // optional — passed to tool handlers\n  onTextBlock: (text) => { ... },  // optional — fires for interim text before respond()\n  onToolExecution: async (record: SpecialistExecutionRecord) => {\n    // Fires after every tool execution — use for audit/replay log entries.\n    // record.toolName, record.toolInput, record.toolOutput, record.durationMs,\n    // record.handlerId, record.sessionId, record.eventId, record.iteration\n\n    // record.error is set (string) when the tool threw.\n    //\n    // Routing-audit fields: record.scope ('generalist' | 'specialist'),\n    // record.routing ('routed' | 'bypass'), record.bypass (boolean),\n    // record.bypassReason (the articulated reason when bypass is true),\n    // record.registrationSite (best-effort 'file:line' from the registration\n    // site), record.tags (the tool's declared tags).\n    await auditLog.write(record);\n  },\n});\n\n// result.respond   — the RespondCall from the LLM\n// result.messages  — full message thread after the tool loop\n// result.usage     — { inputTokens, outputTokens }\n// result.latencyMs\n// result.eventId   — resolved (generated if not supplied)\n```\n\n## HITL approval\n\nTools declare `requiresApproval` to gate execution on human approval before the handler runs.\n\n```typescript\nregistry.register({\n  name: 'book_flight',\n  // ...\n  requiresApproval: true,  // always requires user-level approval\n});\n```\n\nFor context-dependent requirements, pass an `ApprovalPolicy` function instead:\n\n```typescript\nimport type { ApprovalPolicy } from '@cool-ai/beach-llm';\n\nconst bookingPolicy: ApprovalPolicy = async ({ args }, context) => {\n  if ((args as { totalValue: number }).totalValue > 500) return 'user';\n  return 'auto';\n};\n\nregistry.register({\n  name: 'book_flight',\n  // ...\n  requiresApproval: bookingPolicy,\n});\n```\n\n`ApprovalLevel`:\n- `'auto'` — no approval needed; handler executes immediately\n- `'user'` — requires user approval\n- `'admin'` — requires admin approval\n\n`true` is shorthand for always `'user'`. Absent or `false`-y is always `'auto'`.\n\nWire the intercept with `withApprovalIntercept()`, providing a callback that emits the `approval-request` part and waits for the user's response:\n\n```typescript\nimport { withApprovalIntercept } from '@cool-ai/beach-llm';\n\nconst intercepted = withApprovalIntercept(tool, {\n  onApprovalRequired: async (request) => {\n    // request.level — 'user' | 'admin'\n    // request.toolName, request.toolInput, request.approvalId\n    // Emit approval-request part, wait for decision, return:\n    return { approvalId: request.approvalId, decision: 'approved' };\n  },\n});\n```\n\n## Not in this package\n\n- Event routing and session lifecycle (`@cool-ai/beach-core`).\n- Channel rendering and delivery (the `@cool-ai/beach-channel-*` adaptors and `@cool-ai/beach-a2ui-renderer-*`).\n\n## Related\n\n- [https://cool-ai.org/docs/respond-tool](https://cool-ai.org/docs/respond-tool) — the `respond()` tool schema.\n- [https://cool-ai.org/docs/design-principles](https://cool-ai.org/docs/design-principles) — principles 2.3, 2.4 (LLMs never emit free text; tools constrain and prompts guide).\n","readmeFilename":"README.md"}