{"_id":"@agent-ops/gemini-nats-channel","_rev":"9-b2d7cd4949b208b97c157a22b1de86f7","name":"@agent-ops/gemini-nats-channel","dist-tags":{"latest":"0.8.0"},"versions":{"0.4.0":{"name":"@agent-ops/gemini-nats-channel","version":"0.4.0","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.4.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"8828f73aaf97e0d8e5f4ce1aad752f8059fe31e0","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.4.0.tgz","fileCount":46,"integrity":"sha512-nJFLYmKBcniFvCpdBvPsMAyEG9rAtBxR7vpXGiAzC8L7+Pcy2IOh7NYFFIW9U61yOcgwN3vBIfmyt35j/oN1cQ==","signatures":[{"sig":"MEQCIEL0KYSv7EfdMJ5cbDSJUuuvFRmaPJ6l3Trv3TWKzpB0AiArQUVq8653MNKzgHJJmuoNJ/jWugIwEwIIz+2uB2zjMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251016},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"fb734eac7df086e21e36b3e62faf4a7014d2b5ee","scripts":{"cli":"bun run src/cli.ts","smoke":"bun run test/smoke.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"11.12.1","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.gemini.<owner>.<session>.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@sesh-channels/sdk":"workspace:*","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.4.0_1779797914619_0.8319039417437601","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@agent-ops/gemini-nats-channel","version":"0.4.1","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.4.1","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"d0a8de2adb6e17db277257687bb84f736ff0bcf8","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.4.1.tgz","fileCount":46,"integrity":"sha512-T2oZeDpHRo+hsZ70O1w2Kq1+TKrX0jtW78zaAXuqSqpMQfcUzUKpp5yOiivWwQuv9sjbXuEuwvKlGP9WWLj5XQ==","signatures":[{"sig":"MEUCIBsIZhrLJgfa/dstchOs5sK/edzSVqJN2bPXNGzpWUWPAiEAyg7wKwTzuEbDPwEmymiPhP6hfTU7H4r6wpTH2P+Hc2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251031},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"fb734eac7df086e21e36b3e62faf4a7014d2b5ee","scripts":{"cli":"bun run src/cli.ts","smoke":"bun run test/smoke.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"11.12.1","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.gemini.<owner>.<session>.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@agent-ops/sesh-channels-sdk":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.4.1_1779798592176_0.22371757144689464","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@agent-ops/gemini-nats-channel","version":"0.5.0","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.5.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"73a8cdbda7246ace9306da989fc6980a2197826f","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.5.0.tgz","fileCount":46,"integrity":"sha512-S8COiYjkqHM7mU1a1yL551/CjIzVVZP15NgZmzsnCw3KlNN6ukJYf5OA11fqnVUMwzU6RqNxwOawrqLjUQoGpA==","signatures":[{"sig":"MEQCIGjYAbz3mPAzRxMIl6nYyw3v3ketR5OzpzTsiMPgyQJVAiABvDXqfLZ68BCHgfeSXL/dq4pQWkua6SUElTyLriwJaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251055},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"ce460a3de118410a68b6827a7328e577b57dda71","scripts":{"cli":"bun run src/cli.ts","smoke":"bun run test/smoke.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"11.12.1","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.gemini.<owner>.<session>.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@agent-ops/sesh-channels-sdk":"^0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.5.0_1779923052395_0.23205488271588415","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@agent-ops/gemini-nats-channel","version":"0.6.0","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.6.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"639ad4c7e0367897541d499a90bec50de3d52005","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.6.0.tgz","fileCount":46,"integrity":"sha512-hO8833Lu9BimdGmav79uYPhJlKMHjGH/geM6L6t0ghzKtAqfK0n2J/jGTYP0C00ONaTntO9Fxmg3/+AU8tngVQ==","signatures":[{"sig":"MEYCIQDl8myeM59rmlrGIVT+9JCCteF4t68XMxNuGqluL2X0nAIhAJLdAspiTBnKmwBh4BBXdWGNBs5o8T1BMryHp0CqYXAh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":249341},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"02f0f4573d4a08feac449e583b19d67e4c38dfb6","scripts":{"cli":"bun run src/cli.ts","smoke":"bun run test/smoke.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"11.12.1","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.<machine>.<project>.<session>.<role>.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@agent-ops/sesh-channels-sdk":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.6.0_1780004983882_0.8168588911192509","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@agent-ops/gemini-nats-channel","version":"0.6.1","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.6.1","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"961eb5c62f0bfe7d70549217ed57171a993ddcde","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.6.1.tgz","fileCount":46,"integrity":"sha512-dRrjDGY3A5kpW2dvKX69Xd7NHsj64r5fl1YaEeDuhgfOecyr67C8ZnK+JOP1GMQivGS8yDcOvQul0mJa4Go3EQ==","signatures":[{"sig":"MEQCIAzUC8wGmOPqohx/47rxNfrwZKR9/o9PabKzlBaGW5cAAiBpa1apsgQt8UBpXHC/lf8iwTKUtN3ytGBaB0KtElxj4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":249341},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"fa429ea99447140d87e7795c1246e80faf47b219","scripts":{"cli":"bun run src/cli.ts","smoke":"bun run test/smoke.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.<machine>.<project>.<session>.<role>.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@agent-ops/sesh-channels-sdk":"^0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.6.1_1780009560780_0.15599946335438952","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@agent-ops/gemini-nats-channel","version":"0.6.2","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.6.2","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"bd0260f00cd968d5ec4bff17ae3c973d776ad01d","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.6.2.tgz","fileCount":46,"integrity":"sha512-w055c+6mwd+tCThQgUTOLz3iAUBnJ7nw3hIFvKIedtUy2GCBLstRRGj84ivJGtoDadrcNL14XD9cWtTP2bimfw==","signatures":[{"sig":"MEUCICWdm5WRyrS+o/ojEFkIFugIZ348ZRE6ZVH14fzafpdAAiEA3eXGxWEqt3HcFB9/Bz7l+VPlNyaKhHxg7nSIRm1k+so=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":249382},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"25f05420a1928f3f4e81616872b9ca36df321127","scripts":{"cli":"bun run src/cli.ts","smoke":"bun run test/smoke.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.<machine>.<project>.<session>.<role>.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@agent-ops/sesh-channels-sdk":"^0.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.6.2_1780056493906_0.5755919209792157","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@agent-ops/gemini-nats-channel","version":"0.6.3","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.6.3","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"2f6fc92bc5d8ae4e8a33358075f2a0bec0365a45","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.6.3.tgz","fileCount":46,"integrity":"sha512-QNi3PNswxCQn5c0Ykc/FcZvBl+ZO2dElMaPBkkGvgGBOiZdmhSU38ezMKn5OQaoa7lODaBTTWPguURnbT6Gcug==","signatures":[{"sig":"MEUCIAL+duO5vRK6xhwhmmUBfqAZD3g/iehMwFkDjQZ3f/S0AiEAvp9/sIx8X0D3Dk5lPK37bA6wLEKgl9GHC7eW9wzD1oM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253407},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"216dab50b303706b1ec28f29d139e6d3f97c965c","scripts":{"cli":"bun run src/cli.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.<machine>.<project>.<session>.<role>.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@agent-ops/sesh-channels-sdk":"^0.6.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.6.3_1780190186397_0.3835668368354339","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@agent-ops/gemini-nats-channel","version":"0.7.0","license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.7.0","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"bin":{"gemini-nats-channel":"src/cli.ts"},"dist":{"shasum":"8abcb259ba697934a232f70d79da9eabcec087f4","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.7.0.tgz","fileCount":46,"integrity":"sha512-TE/VE1Vo4Kd/gyQhwnkW5bOhcQEnPVXRRShqwgU+N8lWei3pBkYhUKIgTOR8Cw+w7U+bSA3L5blyW5wUH3vqLQ==","signatures":[{"sig":"MEQCIGR1aTWbF5o2SOrxQEqS8lvZ4Gkom+Jts4vS37ToT7bPAiAUFo4QG9xUF8NWMc2Uc9wkB3psFoFO87GdquCgvgiLUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253231},"main":"./src/index.ts","type":"module","exports":{".":"./src/index.ts"},"gitHead":"bede47b7865f186355403cd4a8ed7da239e57172","scripts":{"cli":"bun run src/cli.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"danmestas","email":"daniel.mestas@craftdesign.group"},"repository":{"url":"git+https://github.com/danmestas/gemini-nats-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.<machine>.<project>.<session>.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ink":"^5.0.1","ulid":"^3.0.0","react":"^18.3.1","@nats-io/kv":"3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/jetstream":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@agent-ops/sesh-channels-sdk":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0","@types/react":"^18.3.12"},"_npmOperationalInternal":{"tmp":"tmp/gemini-nats-channel_0.7.0_1780491851681_0.4083340038000225","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@agent-ops/gemini-nats-channel","version":"0.8.0","type":"module","description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.<machine>.<project>.<session>.","bin":{"gemini-nats-channel":"src/cli.ts"},"main":"./src/index.ts","exports":{".":"./src/index.ts"},"scripts":{"cli":"bun run src/cli.ts","typecheck":"tsc --noEmit"},"dependencies":{"@agent-ops/sesh-channels":"^0.1.1","@agentclientprotocol/sdk":"^0.22.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"^3.4.0","@nats-io/obj":"3.4.0","@nats-io/services":"^3.4.0","@nats-io/transport-node":"^3.4.0","@agent-ops/sesh-channels-sdk":"^0.8.0","ink":"^5.0.1","react":"^18.3.1","ulid":"^3.0.0"},"devDependencies":{"@types/bun":"latest","@types/node":"^22.0.0","@types/react":"^18.3.12","typescript":"^5.6.0"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/danmestas/gemini-nats-channel.git"},"homepage":"https://github.com/danmestas/gemini-nats-channel","bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"license":"Apache-2.0","_id":"@agent-ops/gemini-nats-channel@0.8.0","gitHead":"55eb88a73a01dd47cddf2216cfad00bf4c2daf53","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-n/gFoUmpoP8sbTblLOgGr2xlYceqc3Qejv7p4xOXC2deS4ahYHVOUZvYIxjTwFA2RA9bUyGnIkC7XKClh79ezQ==","shasum":"3cb608e33f4e658404555b1c840262022a4d9ea7","tarball":"https://registry.npmjs.org/@agent-ops/gemini-nats-channel/-/gemini-nats-channel-0.8.0.tgz","fileCount":46,"unpackedSize":256977,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBoj2pQ3RPfpDZiKedQJVTYeH6+SvG6epX9iTY0Kgl7DAiEAxdHW6eY6+ElHD0rfffxFEudPetr6mYmvBA4Hauvo21E="}]},"_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/gemini-nats-channel_0.8.0_1780541849839_0.4233968724923085"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-26T12:18:34.502Z","modified":"2026-06-04T02:57:30.121Z","0.4.0":"2026-05-26T12:18:34.828Z","0.4.1":"2026-05-26T12:29:52.318Z","0.5.0":"2026-05-27T23:04:12.541Z","0.6.0":"2026-05-28T21:49:44.041Z","0.6.1":"2026-05-28T23:06:00.930Z","0.6.2":"2026-05-29T12:08:14.121Z","0.6.3":"2026-05-31T01:16:26.557Z","0.7.0":"2026-06-03T13:04:11.822Z","0.8.0":"2026-06-04T02:57:29.987Z"},"bugs":{"url":"https://github.com/danmestas/gemini-nats-channel/issues"},"license":"Apache-2.0","homepage":"https://github.com/danmestas/gemini-nats-channel","repository":{"type":"git","url":"git+https://github.com/danmestas/gemini-nats-channel.git"},"description":"NATS channel bridge for gemini-cli's native ACP mode — exposes a Gemini CLI session on agents.prompt.<machine>.<project>.<session>.","maintainers":[{"name":"danmestas","email":"daniel.mestas@craftdesign.group"}],"readme":"# gemini-nats-channel\n\nNATS channel bridge for [`gemini-cli`](https://github.com/google-gemini/gemini-cli)'s native ACP mode. Exposes a Gemini CLI session as a discoverable, addressable agent on a NATS mesh, implementing the [Synadia Agent Protocol for NATS](https://github.com/synadia-ai/synadia-agent-sdk-docs) v0.3.\n\nThe bridge spawns `gemini --acp` as a child process and runs an ink-based terminal UI that displays inbound NATS prompts, streams Gemini responses, prompts for permission decisions, and lets the operator type local prompts that flow into the same Gemini session. The wire protocol is bit-compatible with the rest of the [Synadia Agent Protocol](https://github.com/synadia-ai/synadia-agent-sdk-docs) ecosystem — any caller using `@synadia-ai/agents` (TypeScript) or `synadia-ai-agents` (Python) can discover, prompt, and stream from this bridge the same way it can talk to the reference claude-code, pi, or openclaw channels.\n\n---\n\n## Prerequisites\n\n- [Bun](https://bun.sh) — the bridge runs on Bun. Install with `curl -fsSL https://bun.sh/install | bash` and make sure `bun` is on your `PATH`. The package ships TypeScript source directly (no compiled dist).\n- [`gemini-cli`](https://github.com/google-gemini/gemini-cli) on `PATH`. Override the launch command with `GEMINI_ACP_COMMAND` if your binary lives elsewhere or you want extra flags (`gemini --yolo --acp`, etc.).\n- [NATS CLI](https://github.com/nats-io/natscli) — for managing contexts and quick wire tests.\n- A NATS server reachable from the bridge (defaults to `nats://127.0.0.1:4222`; configure via a saved CLI context or `NATS_URL`).\n- A Gemini API key — set `GEMINI_API_KEY` or `GOOGLE_API_KEY` in the bridge's env. The bridge forwards both to the spawned `gemini --acp` child verbatim.\n\n---\n\n## Quick Setup\n\n**1. Install globally** (publishes are under the `@agent-ops` scope; for local development use `bun install --global <path>`):\n\n```sh\nbun add -g @agent-ops/gemini-nats-channel\n# or, from a local checkout:\nbun install --global /path/to/gemini-nats-channel\n```\n\n**2. Run interactively** (defaults: owner = `$USER`, session = the current directory's basename, NATS at `nats://127.0.0.1:4222`):\n\n```sh\ngemini-nats-channel\n```\n\nThe TUI shows a header with the resolved subject + session, a streaming event log, and an input field at the bottom. Type to send a local prompt to the same Gemini session a remote caller would reach over NATS.\n\n**3. Or run headless** for systemd / tmux deployments — you must declare an explicit permission policy:\n\n```sh\ngemini-nats-channel --headless --auto-approve-permissions\n# or:\ngemini-nats-channel --headless --deny-permissions\n```\n\nThe bridge refuses to start in headless mode without one of these flags. There is no silent default.\n\n---\n\n## Protocol compliance\n\nThis channel implements the **Synadia Agent Protocol for NATS v0.3** end-to-end:\n\n- Registers as an `agents` NATS micro service (§3.1 — the bare subject-safe token).\n- Service metadata includes `agent: \"gemini\"`, `owner`, `session`, and `protocol_version: \"0.3\"` (§3.2).\n- `prompt` endpoint declares `max_payload` (advertised in `\\d+(B|KB|MB|GB)` form per §2.1) and `attachments_ok: \"true\"`. Queue group `\"agents\"` (§3.3).\n- Accepts plain-text shorthand and JSON envelopes with optional base64-encoded attachments (§5.1, §5.2, §5.3). Inbound attachments split:\n  - **Images** (`png`, `jpg`, `jpeg`, `gif`, `webp`) — kept in memory as base64 and forwarded as ACP `image` content blocks. No disk I/O.\n  - **Everything else** — staged to `<STATE_DIR>/attachments/<request_id>/<filename>` and forwarded as ACP `resource_link` content blocks with a `file://` URI. Cleaned up when the prompt completes.\n- Rejects malformed envelopes, empty payloads, oversize requests, and invalid base64 with `Nats-Service-Error-Code: 400` (§9).\n- Emits typed response chunks `{\"type\":\"response\",\"data\":\"...\"}` (§6.3) terminated by an empty headerless message (§6.5). Large responses are split into UTF-8-safe slices that each fit under the advertised `max_payload`.\n- Publishes heartbeats at `agents.hb.<machine>.<project>.<session>` with the §8.3 payload including `instance_id` (§8).\n- `status` endpoint at `agents.status.<machine>.<project>.<session>` replies with the same payload as a heartbeat (§8.7).\n- Permission requests from `gemini-cli` are surfaced according to mode:\n  - **TUI mode (default):** interactive `y` / `n` prompt rendered in the bridge's terminal UI.\n  - **Headless mode:** every request resolves to the policy declared via `--auto-approve-permissions` or `--deny-permissions` and logs to stderr.\n\n### v0.4 (additive — both versions served on the same registration)\n\nThis channel also advertises **A2A protocol v0.4** capability via the shared `@sesh-channels/sdk` wrapper. The v0.3 path above is untouched — v0.4 is purely additive:\n\n- Service metadata adds `sesh.protocol_version: \"0.4\"` and `sesh.v04_capabilities: \"messages,artifacts,cards\"` alongside the v0.3 `protocol_version: \"0.3\"`. The sesh shim reads these to decide whether to publish v2 envelopes to this adapter.\n- The prompt endpoint listens on `agents.prompt.<machine>.<project>.<session>`, registered via the SDK's `AgentServiceOptions.extraEndpoints` mechanism. `machine` / `project` / `session` come from `$SESH_MACHINE` / `$SESH_PROJECT` / `$SESH_SESSION` (sanitized for subject safety); defaults are `os.hostname()` and the working-directory basename if those env vars are unset. `$SESH_ROLE` is advertised as `metadata.role`, not as a subject token.\n- v2 envelopes are JSON Messages (per the [A2A v0.4 design](https://github.com/danmestas/sesh/blob/main/docs/proposals/2026-05-24-synadia-v0.4-a2a-parity-design.md)) — text parts are flattened and forwarded into the same ACP pipeline as v1, so streaming, permission prompts, and the TUI all behave identically. Response chunks stream back via the standard SDK encoder; the v2 reply terminates with an empty headerless message.\n- An L3 AgentCard is registered on `agents.card.<machine>.<session>.<name>` advertising one skill (`gemini.code`). The card is byte-identical on every request; the shim merges this L3 contribution with its L1+L2 defaults before signing and serving over HTTPS.\n- The ACP runtime is **opaque** to v0.4 wiring (parent plan open question #4): the SDK only touches NATS subjects + metadata, so gemini's ACP-vs-MCP architecture has no impact on v0.4 parity.\n\n---\n\n## Session names\n\nThe prompt subject is `agents.prompt.<machine>.<project>.<session>`. Heartbeats go to `agents.hb.<machine>.<project>.<session>` and the status endpoint replies on `agents.status.<machine>.<project>.<session>`.\n\n- **Default:** sanitized basename of the working directory the bridge was launched from (e.g., `my-project`).\n- **Canonical override:** set `SESH_SESSION` env var — the sesh contract, populated automatically by `sesh up --exec` / `orch-spawn`. Also resolved via the `.sesh/sessions/<label>.json` state-walk when unset.\n- **Other overrides (in precedence order):** pass `--session <name>` on the CLI (wins over everything), set `GEMINI_SESSION_NAME` env (legacy, kept for back-compat), or persist `sessionName` in `config.json`.\n- **Multiple sessions:** if the resolved name is already taken by another `gemini` instance owned by the same user, the bridge auto-appends `-2`, `-3`, etc.\n\nDiscover running sessions via the protocol's discovery subjects:\n\n```sh\nnats req '$SRV.INFO.agents' '' --replies=0 --timeout=2s\nnats req '$SRV.PING.agents' '' --replies=0 --timeout=2s\nnats micro ls\nnats micro info agents\n```\n\n---\n\n## Talking to the running bridge\n\n**Plain text prompt:**\n\n```sh\nnats req agents.prompt.\"$SESH_MACHINE\".my-project.my-session \\\n  --replies=0 --reply-timeout=30s --timeout=5m \\\n  \"explain the README in three sentences\"\n```\n\n**With the `@synadia-ai/agents` TypeScript SDK** (or its `@agent-ops` equivalent in this repo's vendored copy):\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 });\nconst gemini = (await agents.discover()).find((a) => a.agent === \"gemini\");\nfor await (const msg of await gemini!.prompt(\"hello gemini\")) {\n  if (msg.type === \"response\") process.stdout.write(msg.text);\n}\nawait agents.close();\nawait nc.close();\n```\n\n---\n\n## Permissions\n\nThe bridge does not see your code or files directly — `gemini-cli` does. When Gemini wants to invoke a tool (read a file, execute a command, etc.), it sends an ACP `session/request_permission` to the bridge. The bridge surfaces this differently depending on mode:\n\n| Mode | Behavior |\n| --- | --- |\n| **TUI** (default — operator sits in front of the terminal) | Interactive `y` / `n` prompt in the bridge UI. `y` selects the first `allow_once` option from the ACP request (falls back to `allow_always`, then first option); `n` returns `cancelled`. |\n| **`--headless --auto-approve-permissions`** | Every request resolves to the first allow option. Use only when the harness's own auto-approve (`gemini --yolo`) and your environment are sufficiently sandboxed. |\n| **`--headless --deny-permissions`** | Every request resolves to `cancelled`. Suitable when you've pre-configured `gemini-cli` to skip the permission prompts entirely (e.g., via `--yolo`), so this path is just a defensive backstop. |\n\nThe bridge **refuses to start in headless mode without an explicit policy flag** — there is no silent default. This is deliberate: an unattended Gemini session deciding what to do without your guidance is exactly the situation worth being explicit about.\n\n---\n\n## Configuration\n\nState lives in `~/.gemini/channels/nats/` (override with `GEMINI_STATE_DIR`):\n\n| File / dir | Purpose |\n| --- | --- |\n| `config.json` | Persisted NATS context, owner, session-name override |\n| `attachments/<request_id>/` | Per-request staged non-image attachments; auto-cleaned on prompt completion |\n\nNATS CLI contexts live in `~/.config/nats/context/<name>.json` — listed with `nats context ls`.\n\n### `config.json`\n\n```json\n{\n  \"context\": \"my-nats-context\",\n  \"owner\": \"alice\",\n  \"sessionName\": \"demo\"\n}\n```\n\n| Field | Purpose |\n| --- | --- |\n| `context` | NATS CLI context name passed to the bridge's connect resolver. |\n| `owner` | Default 4th subject token. Useful for headless / systemd where `$USER` may be `nobody`. CLI flag / env var override. |\n| `sessionName` | Default 5th subject token. CLI flag / env var override. |\n\n### CLI flags\n\n| Flag | Notes |\n| --- | --- |\n| `--owner <name>` | Override the 4th subject token. |\n| `--session <name>` | Override the 5th subject token. |\n| `--cwd <path>` | Working directory passed to the `gemini --acp` child. |\n| `--nats-url <url>` | Direct NATS URL. Highest precedence. |\n| `--nats-context <name>` | Saved NATS CLI context name. |\n| `--headless` | Disable the TUI; logs to stderr. **Requires** one of the next two flags. |\n| `--auto-approve-permissions` | Headless: resolve every permission request as \"allow\". |\n| `--deny-permissions` | Headless: resolve every permission request as \"deny\". |\n\n### Environment variables\n\n| Variable | Overrides | Default |\n| --- | --- | --- |\n| `GEMINI_OWNER` | Owner | `$USER` (or config `owner`) |\n| `SESH_SESSION` | Session name; canonical sesh contract — wins over `GEMINI_SESSION_NAME`. Also resolved via `.sesh/sessions/<label>.json` state-walk when unset. | *(unset)* |\n| `GEMINI_SESSION_NAME` | Legacy operator override for session name. | sanitized basename of CWD |\n| `GEMINI_CWD` | ACP child's working directory | `${TMPDIR}/gemini-agent/<session>/` |\n| `GEMINI_ACP_COMMAND` | ACP child launch command | `gemini --acp` |\n| `GEMINI_STATE_DIR` | Bridge state dir | `~/.gemini/channels/nats` |\n| `NATS_URL` | NATS connection URL | `nats://127.0.0.1:4222` |\n| `GEMINI_API_KEY` / `GOOGLE_API_KEY` | Forwarded to `gemini --acp` | (whatever you set; both honored by the harness) |\n| `SESH_ROLE` | 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` on the NATS Micro service and as `role` in sesh's session manifest. | `worker` |\n| `SESH_CLASS` | One of `active` or `observer`. Coordination-subject routing keys on this: `active` agents subscribe to `workers.*`, `observer` agents subscribe to `spies.*`. | `active` |\n\n### Working directories\n\nThree distinct concepts — don't conflate them:\n\n| Concept | Default | Used for |\n| --- | --- | --- |\n| **Bridge process CWD** | wherever you launched `gemini-nats-channel` from | Determines the *default* session name (basename of this directory). |\n| **ACP child CWD** (`--cwd` / `GEMINI_CWD`) | `${TMPDIR}/gemini-agent/<session>/` | Working directory passed to `gemini --acp`. Where Gemini reads / writes files via its tools. |\n| **State directory** (`GEMINI_STATE_DIR`) | `~/.gemini/channels/nats/` | Per-user config + attachment staging. |\n\n---\n\n## Troubleshooting\n\n- **`spawn gemini ENOENT`** — install `gemini-cli` (`npm install -g @google/gemini-cli` or equivalent) so `gemini` is on the bridge's `PATH`, or set `GEMINI_ACP_COMMAND` to a locally installed binary.\n- **`GEMINI_API_KEY required`** in the child's stderr — the bridge forwards `GEMINI_API_KEY` / `GOOGLE_API_KEY` from its own environment. Export one before launching the bridge.\n- **No response chunks** — confirm the harness spawned (look for `acp-client: initialized` and `session ready` lines on stderr). `gemini-cli` writes its own diagnostics to stderr; the bridge mirrors them.\n- **`connection refused`** at startup — the bridge tried to connect to NATS and got nothing. Confirm a NATS server is up (`nats server ping`) or point the bridge elsewhere via `--nats-url` / `--nats-context`.\n- **`--headless requires an explicit permission policy`** — pass `--auto-approve-permissions` or `--deny-permissions`. The bridge will not run headless with an implicit policy.\n- **Multiple instances colliding on the same `(owner, session)` subject** — they don't, automatically. The bridge polls `$SRV.INFO.agents` at startup and auto-suffixes the session name with `-2`, `-3`, … so two bridges in the same working directory get distinct subjects.\n\n---\n\n## License\n\nApache-2.0.\n","readmeFilename":"README.md"}