{"_id":"@agent-ops/pi-nats-channel","_rev":"9-e66b42c487f24e690186d12bcd1af700","name":"@agent-ops/pi-nats-channel","dist-tags":{"latest":"0.8.0"},"versions":{"0.4.0":{"name":"@agent-ops/pi-nats-channel","version":"0.4.0","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.4.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"25802eadd20a13dd48397b1b87e7e2c93b2c2f50","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.4.0.tgz","fileCount":7,"integrity":"sha512-ts9zDCaeeFD9U8UE/pXeQXZx1yYvvt/VgB0MYkIAnGAWhCcpE1/SY8Jk1Co0fPUiYahXIC1gizgQeGupVqEczQ==","signatures":[{"sig":"MEQCIHI14KcomI0Et25HmsVRXW+p6NhJPSMSJQ+c/PnOMUJmAiAcdD3J/S2I/MSOaWt1OCSOUMfCYNutrFMB3r1p/eeXIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102241},"type":"module","gitHead":"fb734eac7df086e21e36b3e62faf4a7014d2b5ee","scripts":{"test:smoke":"bun test/smoke.mjs"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"11.12.1","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@sesh-channels/sdk":"workspace:*","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.4.0_1779797919922_0.9917926662021472","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@agent-ops/pi-nats-channel","version":"0.4.1","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.4.1","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"c9db5e6461396ddec7bc83991950b83ecbf5d32b","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.4.1.tgz","fileCount":7,"integrity":"sha512-5eVdGglWsB9KAavJNnl7fyjVZAkabfKaNXkGlOohIcrXlGrr0cJT9V+jWkE9REDhHAPBUDXN/MF1ma8tLQgC0Q==","signatures":[{"sig":"MEUCIFCRypjIk6+cFq+RF2pKTkC5TZ8DfNLNrlQqEqZbUznLAiEAvIH/t71KFcf2XG8pHFUu4rm4o2SMYOW3a5I3a3Z7IGg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102276},"type":"module","gitHead":"fb734eac7df086e21e36b3e62faf4a7014d2b5ee","scripts":{"test:smoke":"bun test/smoke.mjs"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"11.12.1","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0","@agent-ops/sesh-channels-sdk":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.4.1_1779798597677_0.6641160117522356","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@agent-ops/pi-nats-channel","version":"0.5.0","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.5.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"5bcb9dea4fcd749f9d755abdedea24fa472b9309","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.5.0.tgz","fileCount":7,"integrity":"sha512-4l3iBXY1xYFZSQInbdVqWkA5oYn0VU0iRlj/ph2+SK3lkwIL2fhhq+3XWj1neq2KE1cVCF+/5zjbHd0b1DJauw==","signatures":[{"sig":"MEQCIFbJb3eXKvOv/xuJ0ohAEy5oEzU6/oZAWRrCufdVNDIdAiAMNNOQKsQmGZPkdtSs+SKk/9NGqo+x6bwPazfJUQnVFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102212},"type":"module","gitHead":"ce460a3de118410a68b6827a7328e577b57dda71","scripts":{"test:smoke":"bun test/smoke.mjs"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"11.12.1","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0","@agent-ops/sesh-channels-sdk":"^0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.5.0_1779923056573_0.8460661238660183","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@agent-ops/pi-nats-channel","version":"0.6.0","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.6.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"9aab5272a053df91c75a5a03d0ec28cdb160bcef","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.6.0.tgz","fileCount":7,"integrity":"sha512-tvCGiXu00s9V9FrRYfv+68wldDF3fZLncI8HgIAvUn3eTrxhTdjKreLGO8IUnA8Tfs8vMzsAhazx8Q9/B5bUuA==","signatures":[{"sig":"MEUCIQCvPoyHVgxrnqWzr2eimEzaKOzvBdfyU3sDHiSzTE/53gIgK9ZMw3xXM812DmjyuC2mvqbxzHuTSJvU2OSGqA8+w7M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99324},"type":"module","gitHead":"02f0f4573d4a08feac449e583b19d67e4c38dfb6","scripts":{"test:smoke":"bun test/smoke.mjs"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"11.12.1","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0","@agent-ops/sesh-channels-sdk":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.6.0_1780004978920_0.906090573219209","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@agent-ops/pi-nats-channel","version":"0.6.1","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.6.1","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"5e19ab11e7f4b253940beaf8b428a693e9b8f837","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.6.1.tgz","fileCount":7,"integrity":"sha512-rnH4LrMM+8GYNQRKGIFYjlEWQLnf4Sb541ZcmS/GMj7k+t3LRU8iJ6t3Zm8CnFG76ot2U5abZ157Eb5XpeM9CQ==","signatures":[{"sig":"MEQCIGGibDs/WX848Ha7n4hHr0Ko4/0Q1hZQ8DNTdLKT8Jn8AiBB7SQIpWC6/rouT8bXv6wz3J1RMbfUPvB849IAPJYB8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99324},"type":"module","gitHead":"fa429ea99447140d87e7795c1246e80faf47b219","scripts":{"test:smoke":"bun test/smoke.mjs"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"10.9.8","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0","@agent-ops/sesh-channels-sdk":"^0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.6.1_1780009555571_0.3886093623466891","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@agent-ops/pi-nats-channel","version":"0.6.2","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.6.2","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"3953ded07e9c359998c9773b85d61e5dbd704016","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.6.2.tgz","fileCount":7,"integrity":"sha512-VwwiPZuAmeusosBK4fiFgOsSran4k/V2rw+w3VpqKr78x4ioLG4BtoMxZ7U82DKiwq6RI0vOiYRNRf9xyKvmew==","signatures":[{"sig":"MEQCIDFEQ35ILcU6E7IHc2kRX9z0oVFDiFhn2hUrl2f3JaDOAiAJgYlhJd6kk9SgrEu3fZXRt8nTyjB3itszTUaVi91OAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99433},"type":"module","gitHead":"25f05420a1928f3f4e81616872b9ca36df321127","scripts":{"test:smoke":"bun test/smoke.mjs"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"10.9.8","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0","@agent-ops/sesh-channels-sdk":"^0.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.6.2_1780056489504_0.0785873218119657","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@agent-ops/pi-nats-channel","version":"0.6.3","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.6.3","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"85a4fdb3f52f5fa2091f416bac5ee6e540588085","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.6.3.tgz","fileCount":7,"integrity":"sha512-wsR5OHj9dMq85cBDFkqKhYt241knVI302AbNAylnIgwTgLrjSAilDokVXDJYqteiWfcMwOAgIlsZfKjwjKB5+A==","signatures":[{"sig":"MEQCIGnP+HMVECVleI3OkP2ZlloEe94ZFMwS2ad4Dj/6U4PjAiBJ0TPD3+HSL6+e/yyB8oAk6r3oKNKrmBE2+vLEaQKz/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99391},"type":"module","gitHead":"216dab50b303706b1ec28f29d139e6d3f97c965c","scripts":{},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"10.9.8","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0","@agent-ops/sesh-channels-sdk":"^0.6.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.6.3_1780190181059_0.29672978228586566","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@agent-ops/pi-nats-channel","version":"0.7.0","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"author":{"name":"Synadia Communications"},"license":"Apache-2.0","_id":"@agent-ops/pi-nats-channel@0.7.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"pi":{"extensions":["./extensions/nats-channel.ts"]},"dist":{"shasum":"b0b76a94db1aa38b2f10f0d06db54b9a2ed52fc2","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.7.0.tgz","fileCount":7,"integrity":"sha512-0WqYdResRXIGVke/oh6oOY1EPHSMx2uYvhrlhUbJ4FHd6Mqdq/lz/1F//JkgNbI7hHKnj0MyAOizSwvWDKB8dQ==","signatures":[{"sig":"MEUCIAYuWMp9ulxv/vqhQvhazNHYJuwtZKpYRfgoGEPQO+riAiEAlbF6AaNYZ2BMSmW6xmIqFQ4WMo+OHsLBvyBp1ZOWP2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99138},"type":"module","gitHead":"bede47b7865f186355403cd4a8ed7da239e57172","scripts":{},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/synadia-ai/synadia-agents.git","type":"git","directory":"agents/pi"},"_npmVersion":"10.9.8","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ulid":"^3.0.0","typebox":"^1.0.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@synadia-ai/agents":"^0.5.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@synadia-ai/agent-service":"^0.5.0","@agent-ops/sesh-channels-sdk":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-nats-channel_0.7.0_1780491846644_0.19613448028166336","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@agent-ops/pi-nats-channel","version":"0.8.0","description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"license":"Apache-2.0","author":{"name":"Synadia Communications"},"repository":{"type":"git","url":"git+https://github.com/synadia-ai/synadia-agents.git","directory":"agents/pi"},"homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"publishConfig":{"access":"public"},"type":"module","pi":{"extensions":["./extensions/nats-channel.ts"]},"scripts":{},"dependencies":{"@agent-ops/sesh-channels":"^0.1.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/transport-node":"^3.4.0","@nats-io/services":"^3.4.0","@agent-ops/sesh-channels-sdk":"^0.8.0","@synadia-ai/agents":"^0.5.0","@synadia-ai/agent-service":"^0.5.0","typebox":"^1.0.0","ulid":"^3.0.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_id":"@agent-ops/pi-nats-channel@0.8.0","gitHead":"55eb88a73a01dd47cddf2216cfad00bf4c2daf53","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-p1QFB7i9+YdGdspNVABwo/yOtHMTbciYJaOBIU2AZUFpZ5dOvPOrYjtHMMEMCQ7pSpjIBo8CTf4oo0zstirY4w==","shasum":"b918db15adceff851b1ce72a0958158f8460171d","tarball":"https://registry.npmjs.org/@agent-ops/pi-nats-channel/-/pi-nats-channel-0.8.0.tgz","fileCount":7,"unpackedSize":104246,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGbNow7czZV7E7XxGgd6czurh0jtED+BDFSbXB3b7LYYAiAMIzYqE0/cSGOoooYFxwiBuCr7fa7hEsyelPCceNREbQ=="}]},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"directories":{},"maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-nats-channel_0.8.0_1780541845237_0.42904200601572473"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-26T12:18:39.803Z","modified":"2026-06-04T02:57:25.501Z","0.4.0":"2026-05-26T12:18:40.062Z","0.4.1":"2026-05-26T12:29:57.837Z","0.5.0":"2026-05-27T23:04:16.723Z","0.6.0":"2026-05-28T21:49:39.078Z","0.6.1":"2026-05-28T23:05:55.727Z","0.6.2":"2026-05-29T12:08:09.659Z","0.6.3":"2026-05-31T01:16:21.195Z","0.7.0":"2026-06-03T13:04:06.778Z","0.8.0":"2026-06-04T02:57:25.397Z"},"bugs":{"url":"https://github.com/synadia-ai/synadia-agents/issues"},"author":{"name":"Synadia Communications"},"license":"Apache-2.0","homepage":"https://github.com/synadia-ai/synadia-agents/tree/main/agents/pi","keywords":["pi-package","pi-agent","nats","agent","channel","synadia-agent-protocol","synadia-agents"],"repository":{"type":"git","url":"git+https://github.com/synadia-ai/synadia-agents.git","directory":"agents/pi"},"description":"Synadia Agent Protocol for NATS channel for PI Agent. Makes every PI session a discoverable, spec-compliant agent on NATS.","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"readme":"# @agent-ops/pi-nats-channel\n\nNATS channel extension for [PI Agent](https://github.com/earendil-works/pi). Every running PI session becomes discoverable, addressable, and streamable over NATS — anyone with a [Synadia Agent Protocol for NATS](https://github.com/synadia-ai/synadia-agent-sdk-docs) client (e.g. [`@synadia-ai/agents`](../../client-sdk/typescript) or [`synadia-ai-agents`](../../client-sdk/python)) can find your session, prompt it, and stream the reply back.\n\n## Install\n\n```bash\n# From npm\npi install npm:@agent-ops/pi-nats-channel\n\n# From a local clone (development)\npi install /absolute/path/to/nats-pi-channel\n```\n\nWhen iterating on the SDKs locally, both `@synadia-ai/agents` and `@synadia-ai/agent-service` need a current `dist/` for PI's loader to resolve the `file:` links — see [`README-DEV.md`](../../README-DEV.md) at the repo root for the build sequence.\n\nThen start PI normally:\n\n```bash\npi\n```\n\nYou should see `Connected to NATS (<server>) as agents.prompt.<machine>.<project>.<session>` and a footer status line `NATS: agents.prompt.<machine>.<project>.<session>`.\n\n## Configure\n\nOut of the box, no configuration is needed: PI connects to `demo.nats.io` and derives the machine, project, and session tokens from its environment. Your session is reachable at:\n\n```\nagents.prompt.<machine>.<project>.<session>\n```\n\nFor real deployments, point PI at your own NATS via a context file. Two common setups:\n\n**Production with a NATS CLI context** (already configured via `nats context add`):\n\n```json\n// ~/.pi/agent/nats-channel.json\n{\n  \"context\": \"prod\"\n}\n```\n\n**Pin a stable session name** (so callers can address the same logical session even if you cd around):\n\n```json\n{\n  \"context\": \"prod\",\n  \"sessionName\": \"my-session\"\n}\n```\n\nRestart PI to pick up changes — or use the in-PI commands below.\n\n### Configuration reference\n\nConfig file lives at `~/.pi/agent/nats-channel.json`:\n\n| Field | Required | Default | Description |\n|-------|----------|---------|-------------|\n| `context` | no | — | Name of a NATS CLI context (file under `~/.config/nats/context/<name>.json`). When unset, falls back to `$NATS_URL` or, if that's also unset, the built-in `demo.nats.io`. |\n| `sessionName` | no | sanitized basename of CWD | The 5th subject token. Override to give your session a stable, addressable name. |\n\nThe `owner` token (4th) is always derived from `$USER` — there's no override for it. For multi-tenant isolation, see [Multi-tenancy](#multi-tenancy) below.\n\n### Environment variables\n\nEnv vars override the config file:\n\n| Variable | Sets | Notes |\n|----------|------|-------|\n| `NATS_CONTEXT` | `context` | Highest precedence — see below. |\n| `NATS_URL` | raw URL (no auth context) | Used only when `NATS_CONTEXT` and `config.context` are both unset. |\n| `SESH_SESSION` | `sessionName` | Canonical sesh contract — set by `sesh up --exec` and `orch-spawn` SESH_* exports. Wins over `NATS_SESSION_NAME`. |\n| `NATS_SESSION_NAME` | `sessionName` | Legacy operator override; kept for back-compat. |\n| `SESH_ROLE` | `metadata.role` on the NATS Micro service registration | Free-form role token (`^[a-z0-9_-]+$`, 1–63 chars). Identifies the function this agent plays in the swarm — e.g. `implementer`, `verifier`, `spy`. Surfaced as `metadata.role` and as `role` in sesh's session manifest. Default `worker`. |\n| `SESH_CLASS` | `metadata.class` on the NATS Micro service registration | One of `active` or `observer`. Coordination-subject routing keys on this: `active` agents subscribe to `workers.*`, `observer` agents subscribe to `spies.*`. Default `active`. |\n\n### Resolution order\n\n1. Built-in default — `demo.nats.io`, no auth\n2. `config.context` — wizard-set / hand-edited NATS CLI context\n3. `$NATS_URL` — raw URL fallback (only consulted when no context is set)\n4. **`$NATS_CONTEXT`** — wins over everything\n\nFor `sessionName` (first non-empty wins): `$SESH_SESSION` (canonical sesh contract — also resolved via `.sesh/sessions/<label>.json` state-walk when unset) → `$NATS_SESSION_NAME` (legacy operator override) → `config.sessionName` → sanitised CWD-basename.\n\n### Synadia Agent Protocol v0.4 (additive)\n\nThis channel also advertises the v0.4 protocol surface alongside the v0.3 endpoints — both run concurrently, so existing v0.3 callers see no change. The shim/sender chooses the wire version per request based on `$SRV.INFO.agents` metadata: `sesh.protocol_version: \"0.4\"` plus a comma-separated `sesh.v04_capabilities` (currently `messages,artifacts,cards`).\n\nNew endpoints registered on the same `agents` micro service:\n\n| Endpoint | Subject | Purpose |\n|----------|---------|---------|\n| `v2-prompt` | `agents.prompt.<machine>.<project>.<session>` | A2A-shaped prompt envelopes (flat Parts). Replies stream on `agents.task.stream.<scope-kind>.<scope-id>.<task-id>` rather than the request's reply inbox. |\n| `card-get` | `agents.card.<machine>.<session>.<name>` | L3 AgentCard contribution — public description + skills. The shim merges this with L1/L2 and signs before serving over HTTPS. |\n\nCoord tokens for the v2-prompt subject:\n\n| Token | Source |\n|-------|--------|\n| `machine` | `$SESH_MACHINE` → `os.hostname()` → `\"local\"` |\n| `project` | `$SESH_PROJECT` → `<owner>` |\n| `session` | resolved `sessionName` (same as v0.3) |\n| `role` | `$SESH_ROLE` (default `worker`) |\n| `inst` | `$SESH_INSTANCE` (optional; omitted when unset) |\n\nAll tokens are sanitized with the same rule as the v0.3 subject path.\n\n### In-PI commands\n\nAvailable inside a running PI session:\n\n| Command | What it does |\n|---------|--------------|\n| `/nats-status` | Show current subject, service, instance id, protocol version, pending/queued counts |\n| `/nats-configure` | Print current config |\n| `/nats-configure <context>` | Switch NATS context |\n| `/nats-configure session <name>` | Override session name |\n| `/nats-configure session clear` | Revert to CWD basename |\n\n`/nats-configure` writes the config file; restart PI to apply. (Live reconnect on context switch is a deferral — see [Limitations](#limitations).)\n\n## Verify\n\n```bash\n# Find your session (and any other agents on the same NATS)\nnats req '$SRV.INFO.agents' '' --replies=0 --timeout=2s\n\n# Watch heartbeats — your session beats every ~5 s\nnats sub 'agents.hb.*.*.*'\n```\n\nA successful `$SRV.INFO.agents` response for a PI session looks like:\n\n```json\n{\n  \"type\": \"io.nats.micro.v1.info_response\",\n  \"name\": \"agents\",\n  \"id\": \"JC8O0IGAWI5APOHLAOA96N\",\n  \"version\": \"0.4.0\",\n  \"description\": \"PI agent (my-session) in /home/me\",\n  \"metadata\": {\n    \"agent\": \"pi\",\n    \"owner\": \"me\",\n    \"session\": \"my-session\",\n    \"protocol_version\": \"0.3\",\n    \"cwd\": \"/home/me\"\n  },\n  \"endpoints\": [\n    {\n      \"name\": \"prompt\",\n      \"subject\": \"agents.prompt.m4.my-project.my-session\",\n      \"queue_group\": \"agents\",\n      \"metadata\": { \"max_payload\": \"8MB\", \"attachments_ok\": \"true\" }\n    },\n    {\n      \"name\": \"status\",\n      \"subject\": \"agents.status.m4.my-project.my-session\",\n      \"queue_group\": \"agents\"\n    }\n  ]\n}\n```\n\nIf you see your `agents.prompt.<machine>.<project>.<session>` subject in the response, you're discoverable. Multiple PI sessions show up as multiple responses to the same query — the `cwd` metadata field tells you which working directory each one was started from, useful when you've got several PI windows open and need to pick the right session to prompt.\n\n## Talk to your session\n\nFrom the CLI:\n\n```bash\n# Plain text prompt\nnats req agents.prompt.<machine>.<project>.<session> \"What files are here?\" \\\n  --wait-for-empty --reply-timeout 30s --timeout 120s\n\n# JSON envelope (caller SDKs use this form)\nnats req agents.prompt.<machine>.<project>.<session> '{\"prompt\":\"What files are here?\"}' \\\n  --wait-for-empty --reply-timeout 30s --timeout 120s\n```\n\n`--wait-for-empty` is required: replies stream as multiple chunks and end with an empty terminator message.\n\n`--reply-timeout` matters too. Its default is **300 ms** — the maximum gap allowed between consecutive replies. The agent publishes an immediate `{type:\"status\",data:\"ack\"}` chunk on request receipt, but the LLM's first response chunk typically lands 1–2 s later, so the default fires before the first response and the CLI exits after just the ack. Setting `--reply-timeout 30s` gives the LLM enough warm-up time. SDK callers (`requestMany` with `strategy:\"sentinel\"`) don't hit this — they wait the full `maxWait` regardless of inter-arrival gaps.\n\nFrom TypeScript using `@synadia-ai/agents`:\n\n```ts\nimport { connect } from \"@nats-io/transport-node\";\nimport { Agents } from \"@synadia-ai/agents\";\n\nconst nc = await connect({ servers: \"nats://localhost:4222\" });\nconst agents = new Agents({ nc });\n\nconst [agent] = await agents.discover({ filter: { agent: \"pi\" } });\n\nfor await (const msg of await agent!.prompt(\"What files are here?\")) {\n  if (msg.type === \"response\") process.stdout.write(msg.text);\n}\n\nawait agents.close();\nawait nc.close();\n```\n\n## Attachments\n\nWhen a request envelope carries `attachments`, each file is decoded and staged at:\n\n```\n~/.pi/agent/attachments/<session>/<uuid>/<filename>\n```\n\nThe absolute paths are prepended to the prompt text so PI's model can open them with its file tools. Files staged earlier in a session stay on disk so follow-up turns can reference them; the whole `<session>/` directory is removed on session shutdown.\n\nEncode files with `base64 -w0 <file>` (Linux/macOS) or `Buffer.from(bytes).toString(\"base64\")` in Node before embedding in the JSON envelope. Caller SDKs do this for you.\n\nCaller-side limits (rejected with `400` if violated):\n\n- `content` must be standard-alphabet padded base64 — no URL-safe variant, no whitespace.\n- `filename` must be a plain basename. Path separators, `..`, absolute paths, and NUL bytes are rejected, not silently flattened.\n- The fully-encoded request must fit within the server-negotiated `max_payload` (1 MB on a default `nats-server`, more if the operator raised `--max_payload`).\n\n## Concurrency\n\nEach PI session processes one NATS request at a time. Additional requests queue until the session is idle. The local TUI input and inbound NATS prompts share the same agent — typing locally during a NATS-driven turn means that local output flows to the NATS reply alongside the remote prompt's response.\n\nMultiple PI sessions on the same host register as distinct service instances; `nats micro info agents` aggregates across all of them. If two sessions try to register on the same `owner + session`, the later one auto-suffixes `-2`, `-3`, … — pick a stable name with `/nats-configure session <name>` if you want addressability.\n\n## Multi-tenancy\n\nThe agent subject layout has no per-tenant slot. For real isolation between tenants or environments, use **NATS accounts** and subject permissions — that's a server-side configuration, not an extension one. Within a single account, sessions with distinct `owner` values (i.e. different `$USER`s) coexist cleanly.\n\n## Limitations\n\nDeliberate deferrals:\n\n- **No mid-stream queries.** PI doesn't initiate permission prompts or clarifications over this channel; the protocol's `query` chunk type is supported by callers but never emitted by the PI side.\n- **No live reconfigure.** `/nats-configure` writes the config file; PI must be restarted for the new context or session name to apply.\n- **TUI bleed.** Local typing during a NATS-driven turn flows to the NATS reply subject as part of the response.\n\n## Troubleshooting\n\n- **`NATS: disconnected` in footer** — run `/nats-status`, then check the context file at `~/.config/nats/context/<context>.json` and that the NATS server is reachable.\n- **`NATS: reconnecting…`** — the connection dropped; the client restores it automatically.\n- **My session got a `-2` suffix** — another PI session was already registered on the same `owner + session`. Use `/nats-configure session <name>` to pick a different one.\n- **`nats req` returns only the initial ack and exits** — pass `--reply-timeout 30s` (default is 300 ms, shorter than the gap between the ack chunk and the LLM's first response). See the \"Talk to your session\" section above for the full command. `--wait-for-empty` alone isn't enough.\n- **`nats req` hangs or returns nothing** — pass `--wait-for-empty`. The protocol ends streams with an empty-body message, not a single response.\n- **`400 attachment[N] has invalid base64 content`** — the caller emitted URL-safe base64 or unpadded output. `Buffer.from(bytes).toString(\"base64\")` (Node) produces the right form.\n- **`400 attachment[N] has unsafe filename`** — send the basename only (`\"report.pdf\"`), not a path (`\"./reports/report.pdf\"`).\n- **Stale attachments piling up under `~/.pi/agent/attachments/`** — clean session shutdown removes the whole `<session>/` tree, but a force-quit or crash leaves the per-request UUID directories on disk. Safe to `rm -rf ~/.pi/agent/attachments/<session>/` between runs if you don't need to re-reference earlier attachments.\n\n## See also\n\n- Sibling channel plugins: [`openclaw`](../openclaw) (OpenClaw), [`claude-code`](../claude-code) (Claude Code).\n- The wire-level protocol behind it all: [`synadia-ai/synadia-agent-sdk-docs`](https://github.com/synadia-ai/synadia-agent-sdk-docs).\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}