{"_id":"@agent-session-broker/worker","_rev":"25-1be13b7d734b387b1537c5d9d4edb5a3","name":"@agent-session-broker/worker","dist-tags":{"latest":"0.1.29"},"versions":{"0.1.0":{"name":"@agent-session-broker/worker","version":"0.1.0","license":"MIT","_id":"@agent-session-broker/worker@0.1.0","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"e7b80bec358b01be9dff4dff9fc3a4b2f70cf85b","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.0.tgz","fileCount":80,"integrity":"sha512-MAnnVq2uTTciwZZSC81YnIQw24bhVxOdaddglsCeIcuVqDoAlebLeeX8FhqBQe8QkF3Rg65tiQBiobL0AnjTzg==","signatures":[{"sig":"MEQCIHG3M0jtH6B7eGApKRGOU7ecNSV9p7RxIjjL54y+6pGKAiAyIeo31twQrBvNQXUdO1D1xOMhbvpt+Gpjun16wQK5qA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":821200},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"a1c110ea842a5367006dcba58ba5560e06dfe0a6","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.0_1778740426078_0.2383666951158998","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agent-session-broker/worker","version":"0.1.1","license":"MIT","_id":"@agent-session-broker/worker@0.1.1","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"f72e17909ef5008bc43553f33e312918c8f4ffe8","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.1.tgz","fileCount":80,"integrity":"sha512-OenauZo9YFBg3Fag25wLg0LK8N+MVQ044JjpjJQtYdSAKobJ5JMf4bCwNIEm4LIYaiQ6LMaI/tRCwwrtJxUF9A==","signatures":[{"sig":"MEUCIQDbl+/YjVWpVxPYLRWL1PszaCZMvIpNtjcgqgdIJDUT1wIgA4u5TOSMWKX/j1u8atvCjk3/l3gONMEkqZBAFWMnKyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":821200},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"f1033c5867719d858178ca2cafb3ee6d71d36810","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.1_1778741284840_0.8469771832014341","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@agent-session-broker/worker","version":"0.1.2","license":"MIT","_id":"@agent-session-broker/worker@0.1.2","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"758987157cd600a2169bbf80871359791176690b","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.2.tgz","fileCount":80,"integrity":"sha512-a4jaGHsI+7tQPYKIKYWYuN9y9y/0zwsRVuMJlyNzLQ+PcWbDpAWygW2B77LnM1XioGpEgN5Jyz3ySoplRUnvXg==","signatures":[{"sig":"MEUCIAi57SqN0VjA4KsVO8oZ8Vo7gxTmuqgFpn6RYueWUkEiAiEAj87J71Fq9HT669ZkyQHZoFzupYmg8M8jzQiHUkxFHgQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":821200},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"bbe7ef8683c6a91769ecebcd0dede8000ce5093e","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.2_1778741816892_0.08522522020183221","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@agent-session-broker/worker","version":"0.1.3","license":"MIT","_id":"@agent-session-broker/worker@0.1.3","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"4ee843f8364d6f9cd2bfe654b99935dfea192da5","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.3.tgz","fileCount":80,"integrity":"sha512-txH7j+AKFDEENJp4kjJWLo5tobuSbBhAM6KmiJxai3k+vvtcC+mI+9DZHbxugLjcxpRQ1NG84UhY9Cpn5ijaAw==","signatures":[{"sig":"MEUCIHsS5Unf9wNNlIyVOCHSr0F0F6qAAqFvmxOy8yLQSxlqAiEA5HQB6Pjn0ebyevbLP0XmAup1vTCC1Nk7v5sSeMlWj2w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":824694},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"3322cde14e945ca3cfee5897606e9a60bf8000ce","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.3_1778746864115_0.3389069936371303","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@agent-session-broker/worker","version":"0.1.4","license":"MIT","_id":"@agent-session-broker/worker@0.1.4","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"474f27b52bb2aab3a1cb12f73176b21799ee8fa1","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.4.tgz","fileCount":80,"integrity":"sha512-bGjdpowXHLw8bQwDTf6Jfij1uBe8vCWo3WDAwNJnyD8AhZaMI+CE2BeTWJxESq8BEY1lZrpz3pyLPZ7frM3zGg==","signatures":[{"sig":"MEUCIQChP8O0lPeMdnbjgTZ7PFroOWJ7eJZMSEjj6esA4N/3owIgALH5ZzT9oP93syGL1T+9bqRKJ8+08wf8sIvq+KGkox0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":841408},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"2ffdc50599fe183374224bafad2e1f29970dce2e","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.4_1778753751504_0.5982013055370234","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@agent-session-broker/worker","version":"0.1.5","license":"MIT","_id":"@agent-session-broker/worker@0.1.5","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"578f79ce99cb48c6d3032e0a637763741ee88977","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.5.tgz","fileCount":80,"integrity":"sha512-enKogLj6vyUTrkHV4z8tw3qjQnia1WImCImmy60VmXEWLgp1jl6E/yV5rG01XtuT3Y4rp78sYrY/XVqqK7ayVQ==","signatures":[{"sig":"MEUCIQDJLqpCBvscRYGQvCNZs1mEltAIBWzKX2G92VsvLqM2TwIgGzPUXNfKnzTcb3g8p70A5V3VJDWOR/aEbxA5LdyJn1Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":842999},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"73c71905498def68851218908ac84ac6d75c09d0","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.5_1778755276145_0.14211798008902976","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@agent-session-broker/worker","version":"0.1.6","license":"MIT","_id":"@agent-session-broker/worker@0.1.6","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"8cab60878e3106ec40215b1cf5257199f5396544","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.6.tgz","fileCount":80,"integrity":"sha512-DTlyKIrksnIh/roKEL2JdLuQIx6h6Hz1pVrfvQzzoPvN+iaHDyZ8+5BLrRDvF4YefmuT+avKO6NmFu8GV19xPw==","signatures":[{"sig":"MEQCICejvRCTT8K40wS65avKt6xPD3UyU8cMhWTe54WqsAPKAiA3HId110pqf41hMQoU5nFh3WKnudSqPH48Waryhp/pYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":840828},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"8f957057fd71917cede4db7e34da892331ef65da","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.6_1778755742611_0.9830469514710705","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@agent-session-broker/worker","version":"0.1.7","license":"MIT","_id":"@agent-session-broker/worker@0.1.7","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"e33787eabe90bc41f1af0dd14323477c84f33f78","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.7.tgz","fileCount":80,"integrity":"sha512-1hMvPdAd63Fdlgi1nSnxH9y3DuD7GoGuvvJMICEy7INDkDpCjfhXIWG0QyT8EeE2GZRfgXpqTuRQxZk1cC/mbA==","signatures":[{"sig":"MEUCIQDILskX5W6VKzMYY0xcnrHbIDQBJDEauUfRQU7Lfrr7wwIgWsPNqcp09eKcPX58MR/R9tFYnjfbZgtGKAhjJI75Y7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":841194},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"03ea7e48e420eb06659534fcad30102b59f561ab","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.7_1778758836601_0.7420093035127158","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@agent-session-broker/worker","version":"0.1.8","license":"MIT","_id":"@agent-session-broker/worker@0.1.8","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"e0209ffb47e8a2cf4b4fe628c150393072b10703","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.8.tgz","fileCount":80,"integrity":"sha512-oVId5Z9iAAWT5dc0rUk6m6Xil0TUOd8VDoYe41k+zpacAkR2ER87yG4xvZy7UPCvPyKkQWD+SXmdw9cg5wmniA==","signatures":[{"sig":"MEUCIQCY0waT23DM0H1X9lNVVjW1nsOUfnxrNeuGW2t5KkV4WAIgAQzHqiZSu/96qrF+7+nolLQWvEZSknQ6/uFYSrR8VMA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":844487},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"641891896fbed050daa52f915b70db8172cb493d","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.8_1778759556315_0.40297259252733353","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@agent-session-broker/worker","version":"0.1.10","license":"MIT","_id":"@agent-session-broker/worker@0.1.10","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"e272e6de8650a0bd13a24e0556d4f62dea88b92f","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.10.tgz","fileCount":80,"integrity":"sha512-w1KI2nSiUnGeFlBSq3GpwuANLlqWWDQ/PUhAhK/HWZfsBnGmPmXisplllWvV7FonxCnJVeC6Ccsczm71acfItw==","signatures":[{"sig":"MEYCIQDtTmrCn1VPEcpDZ6FU6kEzC+fjoQ3etYN2z7ux+G/bAQIhAM95XCgTAW2064SYN9yvOGPFA8D20LoF376budi/kzuh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":847217},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"5b2acc0dcdfce6e01a13a667dd2a357299fa1e4d","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.10_1778761075006_0.596668314710296","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@agent-session-broker/worker","version":"0.1.11","license":"MIT","_id":"@agent-session-broker/worker@0.1.11","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"d0f23447ac68629a9bd204b5c89ece2a2b5ab527","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.11.tgz","fileCount":80,"integrity":"sha512-OGhUAYgZtR2VQGqx1t5Tg/ICrUmpC8HuvnUT4m0N0sH8Z2bXtl4FI0YZvpQ2X//a3X+mTrLqdzSHJ9eObG3w3g==","signatures":[{"sig":"MEUCIE7fRtXpN/I3/vuy+WreGOef+60obZfBfPbGuOYU18AiAiEA5IW0a1AxkQGmZnldp0IsA3CBuiSydLXE/znEHKkcLxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":850435},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"fe928ccc5cfd3dbb3dc0a6d51e04f1f0f2109e14","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.11_1778763308162_0.16909108603158796","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@agent-session-broker/worker","version":"0.1.12","license":"MIT","_id":"@agent-session-broker/worker@0.1.12","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"f94504b4a0e1d3211c8855223b08940dae597e56","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.12.tgz","fileCount":84,"integrity":"sha512-KL+evUvn4mEw5xf/Q1azjBaMGNKJbC/2+T7i5Zcsa5FRBfFNj4zryUjRWrGeHblnfTp+kGvhSWNJHNtj/gCaBw==","signatures":[{"sig":"MEYCIQDL3rFzaWPIusHtTMVvGgya0jBx/afgXg9AWQw7d7F0rwIhAMzfb4S7S8sEDr2SIJgYbMcCgAxn5G9H0cawEDX/2XEW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":896984},"type":"module","engines":{"node":">=22.5.0"},"_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"11.4.2","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.12_1778786735720_0.07424295929568103","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@agent-session-broker/worker","version":"0.1.13","license":"MIT","_id":"@agent-session-broker/worker@0.1.13","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"1a4bb7de9a7d949788a8264af196bf838d4ccef0","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.13.tgz","fileCount":81,"integrity":"sha512-OpPaMfuA0ljP17SSb+L9hPNFbdMswp3Ia+CZeA6FCWG2avu6mjP+J2xTJ97rtTsSBm7X7C0tSlCRH6Ahnob5Tw==","signatures":[{"sig":"MEUCIQCGbxOmWSGLTepkwroPHW2WvhvkGePf+uP1GFN4VbP0agIgepyA4m2yfkl0Yn7A2dml7qzzAT4gbbUSrGgzrxFyCSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":860526},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"f46d31ccf71ae3ed34a2f8d37b7ac2efda62b4d2","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.13_1778787295482_0.4309167748247862","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@agent-session-broker/worker","version":"0.1.14","license":"MIT","_id":"@agent-session-broker/worker@0.1.14","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"0509e43edc4f7c7ff9338eb7475bee943369f694","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.14.tgz","fileCount":81,"integrity":"sha512-oDK6thea9X60EYl2QuIB5K856bknp1/1PxfVYoM8tsA99zidAuJpVNQ60ymro4A7NdReZbtoYEYfoq00HpFuFA==","signatures":[{"sig":"MEUCIQDbiz4D37Ma+liVhEueq0XlOugbY31JbHycTxADzNKgHgIgYJEzGkzQMEs4Arl5Tk3NTIc33cQc9h/vw6q2iEYu/Ww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":864110},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"3dbb5aa3ae47beece9c5657f3b6f78414c88ad0f","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.14_1778789457773_0.18595580146998159","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@agent-session-broker/worker","version":"0.1.15","license":"MIT","_id":"@agent-session-broker/worker@0.1.15","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"930c05130e819e9c93ef737f8b7cebd666053f21","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.15.tgz","fileCount":81,"integrity":"sha512-4ouXEOr5k6mdIYkb9tf5ZObKnA24eG9qJfNg2da18yY5aoHajKVw17E3h/IjhrTunLrLvGpwOGxvfpz51iLaVA==","signatures":[{"sig":"MEUCIQDxorYDhq4sxdzWDcM7Wm2PuGG8vjjY4MHKBQR5BvDROAIgEfwSEHkXPLnzrHhUknLirHbJ6bZ3xsnFtknY/1KD6sA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":864110},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"01d0573a96d1ac74d8c045d537fcad2b07e06042","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.15_1778817627344_0.11279675319520632","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@agent-session-broker/worker","version":"0.1.16","license":"MIT","_id":"@agent-session-broker/worker@0.1.16","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"e2f4d36dd209e9241f766a34d5e6a45fe6c35b16","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.16.tgz","fileCount":81,"integrity":"sha512-ZmVAfv+9ubr1CakLnvud51aIzoZGHmYwAMqkiX/ujn8eCVQbQ34IbaOta+dsAG2CEjettMhItdPbDRhH+d0fAg==","signatures":[{"sig":"MEYCIQCPIr0HXvypuX2jEgphQs+253+stv/EH0FT2YkDlIMilgIhAOSolaGhvQRBBS6F9XKYVBd5gKKLEin5kH8sMDP1Dj1v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":867502},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"ae447387ecbc7bbb60700081597ecdf42996562b","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.16_1778945788294_0.8981717711105668","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@agent-session-broker/worker","version":"0.1.17","license":"MIT","_id":"@agent-session-broker/worker@0.1.17","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"c97d1302f8d2257a3b5b3331205f6d5448169d57","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.17.tgz","fileCount":81,"integrity":"sha512-Dyw1LouFO6P2MgUTNDiwRHTyvOpK3t82PpfOTGO6Y1behEGhRrjsnDd667nHGzLxfen+vKgl45QFcFkcIRH+cw==","signatures":[{"sig":"MEQCIEKrPoV2HW2znzZhwyEiWEa4cmO30npU5+blqlvk7MI8AiAe5ok0Ld02+vcmmJi6Bxcyj3mAPFe2QL2kZN0GyKTN9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":868286},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"907aca28eac6f70e9506e91570301eea291641d4","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.17_1779091007530_0.75608763041134","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@agent-session-broker/worker","version":"0.1.18","license":"MIT","_id":"@agent-session-broker/worker@0.1.18","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"def127137a4d2741a44db6416fd1b78b2dae275e","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.18.tgz","fileCount":81,"integrity":"sha512-VJm1wJkCSnb0eST+tywaSioF0RsX7eyoWkne9zkvAgH4KS14yIS5fspEkNsJVXvHyhc2Fm1NfJE7SNiF9Ihnfg==","signatures":[{"sig":"MEUCIBvjjKgd+wwS5ShpJkZ2+Rm53n7ZNwKK8kCXih62uiYfAiEA75UfA2umTOxRuh3bh5OcvuHoZyEEBb+vqjSPm55amw4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":876592},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"b186e0b23c5f535ae888361c5f6c24dc4e398c11","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.18_1779097065523_0.14764211404761407","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@agent-session-broker/worker","version":"0.1.19","license":"MIT","_id":"@agent-session-broker/worker@0.1.19","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"10fe5666b816b718fa11f362f0933ff85687ccdc","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.19.tgz","fileCount":81,"integrity":"sha512-kmnd5TzeKyfB4IcjweaLgHxfLsyxYZuBCnggjiDtJTONSDb+5COi2KmfbGl+F8ESYxnmxDEIIr5+AP4pYBv+Wg==","signatures":[{"sig":"MEUCIQDwazj3P4xFQGeBwiOjmqO7idn5Zv47fz+UONedE7cY5gIgdNZlhMgR6vCbdLBSKIJhYMlU2e84vw+O8/cPE4pF4L0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":879711},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"4c5364b838be15c4ccf494fc80951b24da1b91fb","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.19_1779115456836_0.3884105588760176","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@agent-session-broker/worker","version":"0.1.21","license":"MIT","_id":"@agent-session-broker/worker@0.1.21","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"3ae68a4377581c62b678238265f2d6ef9f087231","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.21.tgz","fileCount":81,"integrity":"sha512-DM4SXTXRp6AfJfBZfdivE08YzoBBBc6sxFGPfG1FoBjx1ug1LlDI0+AaNi1S/9ctdjU9aPD2W9hemFF7oOaBgw==","signatures":[{"sig":"MEUCIGDbKChaCQBMZzDZMdLbiDFChubFNf5n/cMFLklNrhxBAiEAle40ovbM6tYmmSZYdK+4GbBCFgXkBFNaJeIivBjkZfY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":882173},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"e9649a77a8fe868ced416ab7fdae95426e00f8cb","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.21_1779146800874_0.5859407567520567","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@agent-session-broker/worker","version":"0.1.22","license":"MIT","_id":"@agent-session-broker/worker@0.1.22","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"5d5d6ad2a8cf90cf50a2a2bc0d210de8ea5a00c3","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.22.tgz","fileCount":81,"integrity":"sha512-Nj6wdfP0HYCEVJikDLAUZY02JOdCqOzKkiID3ZMnWnM8rFvag1DfqGEaqB+CneZJpJQVKM+s//0Pt7pU2E6Opg==","signatures":[{"sig":"MEUCIQCy8UsSatMCAqOVDCe1I7+2te3j7scmAuppzKpiMd3nPwIgNOqgB1vUazoVkryq2F17Jugo0MatZRpSy+mpflkmtQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":903009},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"a92babf0a6878f7443e1b38e1d1aa55bf82f3139","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.22_1779190279493_0.5188582682109297","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@agent-session-broker/worker","version":"0.1.25","license":"MIT","_id":"@agent-session-broker/worker@0.1.25","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"22edf0e10d0981b9073a05e82be52f5b04776d23","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.25.tgz","fileCount":82,"integrity":"sha512-fEud6Llrj//bbuvfFBOAOnXmqIfYHEc8RqmWtgZjWvITMND0BP1kfEcH+7LWGiIEyGRuDoT/SJCZryuuzANiWg==","signatures":[{"sig":"MEUCIHPV/hqsyfh6kMj7GS6F9qyjTcqBv4Yj3jcBNgkpMrTZAiEAj5vP7RmHn9e1qdsKphU/Y+xkJycIH4mr+7YOVCf5kso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":912655},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"1ecc56d8f543737de238bda27dda3fa11960f4d2","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.25_1779276454632_0.5161489418320033","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@agent-session-broker/worker","version":"0.1.26","license":"MIT","_id":"@agent-session-broker/worker@0.1.26","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/slack-codex-broker#readme","bugs":{"url":"https://github.com/HOOLC/slack-codex-broker/issues"},"dist":{"shasum":"92085486da0da720bbedd704d49ae68fa18269b8","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.26.tgz","fileCount":83,"integrity":"sha512-t4mWMJ4sn9f4WoL3h6pyI/kvitQdbQAylgKfRymiEYeJsYasih1KkUkSg8Q8hMyYJO61m+QabXQtcTk4bfz5xA==","signatures":[{"sig":"MEQCIF2G+8VJ2Xgz8TsWL1pInqFJsfeeuEoB8rverPRNLK4sAiA1HbQtXk2XJZgkw865dzUn6tpI0RahRiSjODBHceZ43Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":913375},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"b2a913dcd0726a0b7b19e787da863f012e3c363b","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/slack-codex-broker.git","type":"git"},"_npmVersion":"10.9.7","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.26_1779303143223_0.2069012576977416","host":"s3://npm-registry-packages-npm-production"}},"0.1.28":{"name":"@agent-session-broker/worker","version":"0.1.28","license":"MIT","_id":"@agent-session-broker/worker@0.1.28","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"homepage":"https://github.com/HOOLC/open-worker#readme","bugs":{"url":"https://github.com/HOOLC/open-worker/issues"},"dist":{"shasum":"dc069964cb886b0bf3737b78f49ff7c714d6c44e","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.28.tgz","fileCount":154,"integrity":"sha512-WEhOwp1NROrt/xSIBU4fm3oabTt7TtWhdFhZ0PxYoa6lRMfHSoyYfZcrag/OiK5JrMWtRLD8/FteRVrcEqXhRg==","signatures":[{"sig":"MEQCID/nU5Bthk8BXxtvR4Oj35LW3gLCymfehlgxM9WQL88PAiBrIPW7ydPTS7DQ+4h7LmrUL6ezY77V6kRDc+OOGJpHDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2573116},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"2d99cc7ce32ed4d6bcab3b4a6eb8cb31f750aca1","_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"repository":{"url":"git+https://github.com/HOOLC/open-worker.git","type":"git"},"_npmVersion":"10.9.2","description":"Worker runtime for the agent session broker.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"ws":"^8.18.3","react":"19.2.6","react-dom":"19.2.6","@modelcontextprotocol/sdk":"1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/worker_0.1.28_1786706040856_0.3045641935461403","host":"s3://npm-registry-packages-npm-production"}},"0.1.29":{"name":"@agent-session-broker/worker","version":"0.1.29","description":"Worker runtime for the agent session broker.","homepage":"https://github.com/HOOLC/open-worker#readme","bugs":{"url":"https://github.com/HOOLC/open-worker/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/HOOLC/open-worker.git"},"type":"module","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"dependencies":{"@larksuiteoapi/node-sdk":"^1.66.0","@modelcontextprotocol/sdk":"1.27.1","marked":"^18.0.4","react":"19.2.6","react-dom":"19.2.6","ws":"^8.18.3"},"engines":{"node":">=22.13.0"},"_id":"@agent-session-broker/worker@0.1.29","gitHead":"f813dcc946893827d53388c3ac97427207d95cc2","_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-0lB1TX7Xflft/y2XT8wPZHgkNY6TKQIC//fNw7PmTqujKJaokGHnb0KvCRstUcyCsC0Wcm98U0ItDvQkPmOuLQ==","shasum":"91e36bc62d09dc6a438ac5b8c18e649d93b24f62","tarball":"https://registry.npmjs.org/@agent-session-broker/worker/-/worker-0.1.29.tgz","fileCount":154,"unpackedSize":2573183,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-session-broker%2fworker@0.1.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDF/KNuLh0y/JldRPXghFVfKQD0dEBBSGid36F5GDhcQAiBH9BEC2n4UEHBAHlwW0VmLlqDhZjg0Q5fCxS5XTCaXyw=="}]},"_npmUser":{"name":"zzj3720","email":"zuozijian1994@gmail.com"},"directories":{},"maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/worker_0.1.29_1786727561852_0.5996072375263273"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-14T06:33:45.989Z","modified":"2026-08-14T17:12:42.346Z","0.1.0":"2026-05-14T06:33:46.304Z","0.1.1":"2026-05-14T06:48:04.991Z","0.1.2":"2026-05-14T06:56:57.060Z","0.1.3":"2026-05-14T08:21:04.522Z","0.1.4":"2026-05-14T10:15:51.718Z","0.1.5":"2026-05-14T10:41:16.341Z","0.1.6":"2026-05-14T10:49:02.758Z","0.1.7":"2026-05-14T11:40:36.766Z","0.1.8":"2026-05-14T11:52:36.468Z","0.1.10":"2026-05-14T12:17:55.194Z","0.1.11":"2026-05-14T12:55:08.319Z","0.1.12":"2026-05-14T19:25:35.916Z","0.1.13":"2026-05-14T19:34:55.684Z","0.1.14":"2026-05-14T20:10:58.029Z","0.1.15":"2026-05-15T04:00:27.514Z","0.1.16":"2026-05-16T15:36:28.594Z","0.1.17":"2026-05-18T07:56:47.689Z","0.1.18":"2026-05-18T09:37:45.668Z","0.1.19":"2026-05-18T14:44:17.048Z","0.1.21":"2026-05-18T23:26:41.069Z","0.1.22":"2026-05-19T11:31:19.728Z","0.1.25":"2026-05-20T11:27:34.830Z","0.1.26":"2026-05-20T18:52:23.402Z","0.1.28":"2026-08-14T11:14:01.058Z","0.1.29":"2026-08-14T17:12:42.032Z"},"bugs":{"url":"https://github.com/HOOLC/open-worker/issues"},"license":"MIT","homepage":"https://github.com/HOOLC/open-worker#readme","repository":{"type":"git","url":"git+https://github.com/HOOLC/open-worker.git"},"description":"Worker runtime for the agent session broker.","maintainers":[{"name":"zzj3720","email":"zuozijian1994@gmail.com"}],"readme":"# slack-codex-broker\n\nMinimal Slack + China Feishu bridge to Codex for multi-repository workflows.\n\nIt connects to Slack over Socket Mode, starts or resumes one Codex app-server thread per Slack thread, and gives each Slack session an isolated workspace directory. The Codex session always starts in that neutral workspace instead of being pinned to a specific repository. If code work is needed, the agent is expected to use a shared `repos/` cache for canonical clones and create any task-specific git worktrees under the current session workspace. Normal thread replies continue the same Codex thread. Sending `-stop` in the thread interrupts the current Codex turn.\n\nOn the first `@bot` inside an existing Slack thread, the broker backfills a bounded slice of earlier thread history into Codex. If Codex needs older context than the initial backfill, it can query the broker's local thread-history HTTP API from inside its shell.\n\nFeishu support runs in the same broker process as Slack. Feishu group `@bot ...`: create or resume a group session; private chats are ignored. For production parity, configure `FEISHU_ENABLED=true`, `FEISHU_GROUP_MESSAGE_MODE=all`, `FEISHU_APP_ID`, `FEISHU_APP_SECRET`, and at least one Feishu bot identity. `at_only` is a visible degraded mode; set `FEISHU_ALL_MESSAGE_DELIVERY_VERIFIED=true` only after the real non-@ follow-up smoke passes; keep `LOG_RAW_FEISHU_EVENTS=false` unless collecting a focused, redacted fixture.\n\nFeishu rollout:\n\n- run the preflight and smoke scripts against a China Feishu self-built app installed in the target group\n- capture a sanitized pre-rollout log snapshot; the snapshot redacts non-structured lines instead of copying raw Docker log text\n- verify metadata recursively redacts unsafe string fields while preserving safe posture text such as `FEISHU_APP_SECRET=missing`\n- Operator-facing auth status and replacement output summarize filesystem paths instead of echoing full host paths\n- Profile command output also summarizes auth/profile paths without full host filesystem paths\n\nAdmin and chat APIs are platform-aware:\n\n- platform-aware `Slack/Feishu user -> GitHub author` mappings\n- `GET /admin/api/status?platform=slack|feishu`\n- `DELETE /admin/api/github-authors/:userId?platform=slack|feishu`\n- filters sessions, jobs, and GitHub author mappings to that platform\n- allowlisted `recentBrokerLogs` remain cross-platform\n- Platform query/body values must be `slack` or `feishu`; invalid values return 400 `invalid_platform` instead of falling back to Slack\n- generic platform-aware chat endpoints\n- Generic `/chat/*` JSON/query contracts use canonical `conversationId` and `rootMessageId` fields\n- also accepts `conversation_id` and `root_message_id` aliases\n- Invalid `platform` values return 400 `invalid_platform` with allowed values `slack` and `feishu`\n- Generic file uploads use canonical `filePath` or `contentBase64`\n- `file_path` and `content_base64` aliases accepted and named in validation errors\n- Inline `contentBase64`/`content_base64` uploads require `filename` and must decode to non-empty file content\n- Generic file uploads accept `filePath` or non-empty `content_base64` plus `filename`\n- `richText`/`rich_text` and `card` can be structured JSON values or JSON strings\n- invalid JSON strings return 400 with only the field name, not the raw payload\n- request logging redact message text, state reasons, file comments/alt text, rich/card payloads\n- `/integrations/*` request logging redacts MCP call `arguments`\n- Registered jobs receive `CHAT_PLATFORM`, `CHAT_CONVERSATION_ID`, and `CHAT_ROOT_MESSAGE_ID`\n- legacy Slack `channel_id` and `thread_ts` aliases only for Slack compatibility when `platform` is omitted or set to `slack`\n- Invalid generic job `platform` values return 400 `invalid_platform` before coordinate validation\n- Job callback `detailsJson`/`details_json` fields and `/integrations/mcp-call` `arguments` can be structured JSON values or JSON strings\n- `pnpm test:e2e:feishu-mock` covers the Feishu mock e2e gate, fixture replay, and Slack+Feishu same-process readiness\n- `pnpm rfc:feishu-audit` and `pnpm rfc:feishu-audit:local` summarize implementation surfaces, test slices, behavior evidence probes, package-script gates, and remaining real-tenant evidence gaps without sending Feishu messages\n- its JSON still keeps `ok=false` until real tenant gates pass\n- run `pnpm manual:feishu-smoke -- --preflight --env-file .env`; the extra `--` keeps Node's own `--env-file` flag from intercepting the smoke-checker argument\n- smoke CLI value flags also accept `--flag=value`; missing values fail before another flag is swallowed\n- secret-bearing values only as set/missing\n- generic platform-aware chat endpoints include `curl -sS -X POST http://127.0.0.1:3000/chat/post-message` and `curl -sS -X POST http://127.0.0.1:3000/chat/post-file`\n- `limit` (optional positive integer, clamped by `SLACK_HISTORY_API_MAX_LIMIT`; invalid values return 400 `invalid_limit`)\n- Generic chat history `limit` uses the same positive-integer validation\n- Generic chat history `format` uses the same `text|json` validation before broker delegation\n- For Feishu, outbound message images up to 10 MB are uploaded as image messages and fall back to file upload when still within the 30 MB file/resource limit\n\n## What It Expects\n\n- A Slack app using Socket Mode\n- Codex authentication via either:\n  - `OPENAI_API_KEY`\n  - a mounted `auth.json` plus `CODEX_AUTH_JSON_PATH`\n\n## Slack App Setup\n\nCreate a Slack app with:\n\n- Socket Mode enabled\n- Interactivity enabled\n- App-level token with `connections:write`\n- Bot token scopes:\n  - `app_mentions:read`\n  - `chat:write`\n  - `channels:history`\n  - `files:read` if you want Codex to receive image attachments from Slack messages\n  - `files:write` if you want Codex to upload images/files back into Slack threads\n  - `users:read` if you want Codex to see Slack display names instead of only raw user IDs\n  - `users:read.email` if you want the broker to infer GitHub co-author mappings from Slack profile email\n\nEvent subscriptions needed for the current broker flow:\n\n- `app_mention`\n- `message.channels`\n- `message.im` for direct-message sessions\n\nIf you want to support private channels or DMs, add the corresponding `groups:history`, `im:history`, or `mpim:history` scopes plus matching message events.\n\nThe broker's Slack co-author flow uses Socket Mode interactive envelopes, thread ephemerals, and modals. With Socket Mode enabled, you do not need a separate public interactivity Request URL for this flow.\n\n## Environment\n\nCopy `.env.example` to `.env` and fill in:\n\n- `SLACK_APP_TOKEN`\n- `SLACK_BOT_TOKEN`\n- optional `SLACK_INITIAL_THREAD_HISTORY_COUNT`\n- optional `SLACK_HISTORY_API_MAX_LIMIT`\n- optional `SESSIONS_ROOT`\n- optional `REPOS_ROOT`\n- optional `LOG_DIR`\n- optional `LOG_LEVEL`\n- optional `LOG_RAW_SLACK_EVENTS`\n- optional `LOG_RAW_CODEX_RPC`\n- optional `LOG_RAW_HTTP_REQUESTS`\n- optional `LOG_RAW_MAX_BYTES`\n- optional disk cleanup settings (`DISK_CLEANUP_*`), including safe-by-default\n  dry-run mode and session cache TTL. Keep `DISK_CLEANUP_DRY_RUN=true`\n  for the first few days after enabling cleanup, review the structured\n  candidate logs, and only set it to `false` after confirming the listed\n  paths are expected rebuildable artifacts.\n- one Codex auth mode\n- optional host Codex home mount if you want the container to inherit your global `~/.codex` memory/instructions\n\n## Codex Auth Modes\n\n### 1. API key\n\nSet:\n\n```env\nOPENAI_API_KEY=sk-...\n```\n\nThis is the simplest automation setup.\n\n### 2. Reuse Codex/ChatGPT OAuth\n\nMount an existing `auth.json` into the container and set:\n\n```env\nCODEX_AUTH_JSON_PATH=/auth/auth.json\n```\n\nThen add a read-only volume to `docker-compose.yml`:\n\n```yaml\nvolumes:\n  - ~/.codex/auth.json:/auth/auth.json:ro\n```\n\nAt startup the broker copies that file into its own `CODEX_HOME`/data directory and uses it to authenticate the embedded Codex app-server.\n\nThe main Codex runtime disables all built-in MCP servers by default, and starts the Codex app-server with the `apps` feature disabled so Apps/Connectors are not exposed to model turns. Keep tool access outside the main runtime and use broker-managed integrations instead. MCP removal only affects the broker's container-local Codex config. It does not modify your host `~/.codex/config.toml`.\n\n## Shared Codex Team Home\n\nBroker auth profiles are quota/auth boundaries, not memory boundaries. Shared Codex behavior should live in one team-level home:\n\n```env\nCODEX_TEAM_HOME=/app/.data/team-codex-home\nHOST_AGENTS_PATH_HOST=/Users/you/.agents\nHOST_AGENTS_CONTAINER_PATH=/Users/you/.agents\n```\n\nShared entries include:\n\n- `AGENT.md`\n- `AGENTS.md`\n- `memory.md`\n- `config.toml`\n- `memories/`\n- `skills/`\n- `superpowers/`\n- `rules/`\n- `vendor_imports/`\n\nRuntime behavior:\n\n- `CODEX_TEAM_HOME` defaults to `.data/team-codex-home`.\n- Each auth profile still has its own `CODEX_HOME` for `auth.json`, generated images, cache, logs, and runtime state.\n- Shared entries in each profile `CODEX_HOME` are symlinks to `CODEX_TEAM_HOME`.\n- New Slack sessions inject personal memory from `CODEX_TEAM_HOME/AGENT.md` once at `thread/start`; later turns reuse the existing session context instead of re-sending it.\n- The runtime shell path `~/.codex/AGENT.md` is wired back to `CODEX_TEAM_HOME/AGENT.md`, so agent-written memory updates are visible across auth profiles.\n- If the team home is missing and there is no existing shared profile/source content, the broker creates empty shared files/directories only.\n- If existing profile/source shared content is present while the team home is empty, the broker preserves the legacy local-copy behavior instead of linking profiles to empty team files.\n- Historical profile data migration is a one-off operator action and is intentionally not part of the runtime code path.\n- `HOST_AGENTS_PATH_HOST` plus `HOST_AGENTS_CONTAINER_PATH` lets relative skill symlinks like `../../.agents/...` resolve correctly if the team home contains those symlinks.\n- For docker-side skills that need to call a host-local helper service, either set an explicit container-safe URL such as `TEMPAD_LINK_SERVICE_URL=http://host.docker.internal:4320`, or leave it unset and let the broker probe the common host-local tempad endpoints automatically.\n\nBefore enabling this on an existing machine, seed `CODEX_TEAM_HOME` once from the reviewed canonical profile/global Codex files and keep an external backup of replaced profile-local shared entries. Do not move `auth.json` into the team home.\n\n## Run With Docker Compose\n\n```bash\ncp .env.example .env\ndocker compose up --build\n```\n\nOperational scripts for the real container:\n\n```bash\npnpm ops:check:real\npnpm ops:rollout:real\npnpm ops:status:real\npnpm ops:auth:real status\npnpm ops:auth:profiles bootstrap\npnpm ops:auth:profiles status\npnpm ops:auth:profiles list\npnpm ops:auth:profiles import-host --name backup-account\npnpm ops:auth:profiles use backup-account\npnpm ops:ui:real\n```\n\n`ops:rollout:real` reuses the current `slack-codex-broker-real` container's env vars and bind mounts, refuses to restart while active turns exist unless you pass `--allow-active`, rebuilds the image, recreates the container, and then runs the fixed post-update checks. Each rollout also writes sanitized metadata plus pre-rollout logs under `.backups/rollouts/`.\n`ops:status:real` prints a structured runtime snapshot for the live container, including health, active sessions, open inbound messages, background jobs, and recent broker logs. Use `--open-inbound-limit` and `--log-lines` to tune output volume.\n`ops:auth:real status` prints the live container's Codex auth files, runtime account identity, any quota/usage fields exposed by `account/read`, plus the current session state snapshot.\n`ops:auth:profiles` manages a local auth-profile directory under the live data root. The host auth is kept as a reference copy, while the docker auth points at a selectable `active` profile. Use `bootstrap` once, then `import-host --name <profile>` or `import --name <profile> --from <path>` to add more docker-side auth profiles, and `use <profile>` to switch the live container.\n`ops:ui:real` starts a local-only admin page on `127.0.0.1` so you can inspect sessions/account state and upload a replacement `auth.json` without using CLI flags directly.\n\n## Run On a macOS VM\n\nThe preferred macOS deployment model is package-first:\n\n- build and publish/pack the admin and worker npm packages outside the VM\n- run the bootstrap script with the package version to install\n- upload `auth.json` later through the admin page\n- do all later deploy / rollback operations from the admin page by target and\n  package version\n\nThere is no host-side code sync or production build step in the normal path.\n\n### First bootstrap on the VM\n\n```bash\nnpm install -g @agent-session-broker/admin@0.1.2\nagent-session-broker-macos-bootstrap --service-root ~/services/slack-codex-broker --package-version 0.1.2 --start-worker\n```\n\nThe bootstrap script installs `@agent-session-broker/admin@<version>` and\n`@agent-session-broker/worker@<version>` into the service root. Admin launchd\nruns through `current-admin`; worker launchd runs through `current-worker`.\n\nBefore running it, make sure the Slack app credentials are available through one of these sources:\n\n- the current shell environment, for example `SLACK_APP_TOKEN=... SLACK_BOT_TOKEN=... node scripts/ops/macos-bootstrap.mjs --start-worker`\n- an existing `config/broker.env` in the service root, which the bootstrap script will reuse for the new admin / worker env files\n\nWhat it prepares:\n\n- `releases/admin/npm-<version>/` and `releases/worker/npm-<version>/` package installs\n- `current-admin`, `previous-admin`, `failed-admin` release links\n- `current-worker`, `previous-worker`, `failed-worker` release links\n- shared runtime state under `.data/`\n- support homes under `runtime-support/`\n- launchd agents for:\n  - `io.github.hoolc.agent-session-broker` (admin/control plane)\n  - `io.github.hoolc.agent-session-broker.worker` (Slack/Codex worker)\n\nWhat it does not do:\n\n- it does not copy `auth.json`; import auth profiles later through `/admin`\n- it does not copy historical sessions, logs, jobs, or repo caches from another machine\n- it does not run `pnpm install` or `pnpm build` on the VM\n\n### Runtime layout on the VM\n\nThe npm packages are the release units. Runtime services execute code through\ntheir target-specific current release links, not from a source checkout.\n\n- `<service-root>/`:\n  - release manager and shared runtime root\n- `<service-root>/releases/admin/npm-<version>/`:\n  - npm install root for one admin package version\n- `<service-root>/releases/worker/npm-<version>/`:\n  - npm install root for one worker package version\n- `<service-root>/current-admin` and `<service-root>/current-worker`:\n  - symlinks to the active installed package roots\n- `<service-root>/previous-admin` and `<service-root>/previous-worker`:\n  - symlinks to the last good release for each target\n- `<service-root>/failed-admin` and `<service-root>/failed-worker`:\n  - symlinks to the most recent failed cutover for each target\n- `<service-root>/.data/`:\n  - shared broker state, sessions, jobs, logs, repos, auth profiles, codex home\n\n### Deploy and rollback\n\nThe admin service deploys a selected target and npm package version into a new\nrelease directory. Admin and worker are independent release targets: an admin\ndeploy switches only `current-admin` and schedules only the admin restart; a\nworker deploy switches only `current-worker`, restarts the worker immediately,\nand waits for worker readiness.\n\n- deploy:\n  - read package versions from the selected target's npm registry entry\n  - install the selected package under `releases/<target>/npm-<version>`\n  - switch that target's current symlink\n  - for worker deploys, restart the worker launchd service\n  - run worker health + Codex-ready checks with a 90s startup window, because worker startup can spend tens of seconds reconciling Slack thread state before `/readyz` answers\n  - for admin deploys, schedule the admin launchd service restart from `current-admin`\n  - auto-rollback on failed cutover\n- rollback:\n  - switch the requested target back to `previous-*`, or to an explicitly selected installed package version\n  - restart only that target's launchd service\n  - run worker health checks only for worker rollback\n\nBecause old releases stay on disk, rollback is a pointer switch. It does not fetch source or build a missing version.\n\n### Admin surface\n\n```text\nGET /admin\nGET /readyz\nGET /admin/api/status\nPOST /admin/api/auth-profiles\nPOST /admin/api/auth-profiles/:name/activate\nDELETE /admin/api/auth-profiles/:name\nPOST /admin/api/github-authors\nDELETE /admin/api/github-authors/:slackUserId\nPOST /admin/api/deploy\nPOST /admin/api/rollback\n```\n\nTypical first-run flow:\n\n1. Open `/admin`.\n2. Upload one or more `auth.json` files into Auth Profiles.\n3. Activate the profile you want the worker to use.\n4. Later, deploy a package version from the Deploy panel.\n5. Roll back from the same panel when needed.\n\nThe same admin page also exposes a `GitHub Authors` panel for manually maintaining `Slack user -> GitHub author` mappings. Manual entries override Slack-inferred mappings.\n\nIf `BROKER_ADMIN_TOKEN` is set, `/admin/api/*` requires that token via `x-admin-token` or `Authorization: Bearer ...`. If it is unset, the admin API is still enabled, so only expose the broker port in environments you trust.\n\nThe container image:\n\n- uses Node 22.13+ for the built-in SQLite runtime state store and lint/format toolchain\n- installs `git`\n- installs `gh`\n- installs `rg` via `ripgrep`\n- installs the Codex CLI globally via `@openai/codex`\n- runs the broker with `node dist/src/index.js`\n\n## Runtime Layout\n\nInside the container:\n\n- broker state lives under `/app/.data`\n- Codex state defaults to `/app/.data/codex-home`\n- session workspaces default to `/app/.data/sessions/<channel-thread>/workspace`\n- shared canonical repositories live under `/app/.data/repos`\n- structured logs default to `/app/.data/logs`\n\nIn practice, `.data` is the broker's runtime data root. It contains both durable broker-owned identity/config data and disposable runtime state.\n\nDurable broker-owned identity/config data:\n\n- `codex-home/`\n- `auth-profiles/`\n\nDisposable runtime state:\n\n- `state/broker.sqlite`\n- `sessions/`\n- `jobs/`\n- `logs/`\n- `repos/`\n\nThe macOS bare-run deploy path only reuses the durable broker-owned subset that defines behavior and identity. It intentionally leaves the disposable runtime state behind and starts the VM with a clean `state/`, `sessions/`, `jobs/`, `logs/`, and `repos/`.\n\n## Logging\n\nThe broker now keeps a layered JSONL log set intended for postmortem debugging.\n\nDefault layout under `LOG_DIR`:\n\n- `broker/<yyyy-mm-dd-hh>.jsonl`\n  Hourly global structured application logs for every `info` / `warn` / `error` / `debug` event.\n- `sessions/<base64url-session-key>/<yyyy-mm-dd-hh>.jsonl`\n  Per-session fan-out log. Useful when one Slack thread goes bad and you want only its history.\n- `jobs/<base64url-job-id>/<yyyy-mm-dd-hh>.jsonl`\n  Per-background-job fan-out log.\n- `raw/slack-events/<yyyy-mm-dd-hh>.jsonl`\n  Raw Socket Mode envelopes from Slack.\n- `raw/codex-rpc/<yyyy-mm-dd-hh>.jsonl`\n  Raw Codex app-server RPC requests, responses, and notifications.\n- `raw/http-requests/<yyyy-mm-dd-hh>.jsonl`\n  Raw local broker HTTP traffic for `/slack/*` and `/jobs/*`.\n\nSupported environment knobs:\n\n- `LOG_LEVEL=debug|info|warn|error`\n- `LOG_RAW_SLACK_EVENTS=true|false`\n- `LOG_RAW_CODEX_RPC=true|false`\n- `LOG_RAW_HTTP_REQUESTS=true|false`\n- `LOG_RAW_MAX_BYTES=131072`\n- `DISK_CLEANUP_ENABLED=true|false`\n- `DISK_CLEANUP_CHECK_INTERVAL_MS=300000`\n- `DISK_CLEANUP_MIN_FREE_BYTES=10737418240`\n- `DISK_CLEANUP_TARGET_FREE_BYTES=21474836480`\n- `DISK_CLEANUP_INACTIVE_SESSION_MS=86400000`\n- `DISK_CLEANUP_JOB_PROTECTION_MS=172800000`\n- `DISK_CLEANUP_OLD_LOG_MS=86400000`\n\nNotes:\n\n- Raw logs are intentionally verbose and can grow quickly during long sessions. Oversized raw payloads are truncated to `LOG_RAW_MAX_BYTES` before they are written.\n- Admin status reads only a bounded tail of recent broker JSONL files; it does not decode entire log files into memory.\n- Broker-managed background jobs are automatically cancelled once they exceed five hours of runtime, including restartable jobs that are already over the limit when the worker boots.\n- When free space falls below `DISK_CLEANUP_MIN_FREE_BYTES`, the worker removes old hourly log files first. If space is still below `DISK_CLEANUP_TARGET_FREE_BYTES`, it removes sessions inactive for at least `DISK_CLEANUP_INACTIVE_SESSION_MS`, oldest activity first. Active turns, pending inbound work, and running jobs protect sessions only until `DISK_CLEANUP_JOB_PROTECTION_MS`; older sessions can be removed with their jobs.\n- `/slack/post-file` request logging redacts inline `content_base64` payloads into a size marker instead of writing the full blob.\n- Session and job log files are written independently, so one noisy thread no longer forces the entire broker state or log history into one giant file.\n\n## Current Interaction Model\n\n- First `@bot ...` in a thread: create or resume the session, ensure the session workspace exists, send the message to Codex\n- First `@bot ...` inside an already active human thread: also backfill the most recent earlier thread messages before that mention\n- Later plain thread replies: continue the same Codex thread\n- Direct message root message: create a session keyed by that DM thread and send it to Codex\n- `-stop`: interrupt the current Codex turn\n- If the task needs code, Codex should use `/app/.data/repos` for canonical clones and create any worktrees or task directories inside the current session workspace\n\n## Slack Thread History API\n\nThe broker exposes a local-only helper endpoint on the same port as the health check:\n\n```bash\ncurl \"http://127.0.0.1:3000/slack/thread-history?channel_id=C123&thread_ts=111.222&before_ts=111.223&limit=20&format=text\"\n```\n\nQuery params:\n\n- `channel_id` (required)\n- `thread_ts` (required)\n- `before_ts` (optional, exclusive upper bound)\n- `limit` (optional, clamped by `SLACK_HISTORY_API_MAX_LIMIT`)\n- `channel_type` (optional)\n- `format=text|json` (default `json`)\n\nThis is meant for Codex itself to pull older Slack context when the initial backfill window is not enough.\n\n## Slack Post APIs\n\nThe broker exposes two local-only delivery endpoints for Codex:\n\n### Post text\n\n```bash\ncurl -sS -X POST http://127.0.0.1:3000/slack/post-message \\\n  -H 'content-type: application/json' \\\n  -d '{\"channel_id\":\"C123\",\"thread_ts\":\"111.222\",\"text\":\"working on it\"}'\n```\n\n`text` accepts normal Markdown/markdownish input. The broker converts it to Slack `mrkdwn` before posting.\n\n### Upload a local image or file\n\n```bash\ncurl -sS -X POST http://127.0.0.1:3000/slack/post-file \\\n  -H 'content-type: application/json' \\\n  -d '{\"channel_id\":\"C123\",\"thread_ts\":\"111.222\",\"file_path\":\"/absolute/path/to/report.png\",\"initial_comment\":\"latest screenshot\"}'\n```\n\n`/slack/post-file` accepts either:\n\n- `file_path` pointing at a local file visible to the broker process\n- or `content_base64` plus `filename`\n\nOptional fields:\n\n- `title`\n- `initial_comment` (or `text` as an alias)\n- `alt_text`\n- `snippet_type`\n- `content_type`\n\n`initial_comment` accepts normal Markdown/markdownish input and is converted to Slack `mrkdwn` before upload completion.\n\n## Notes\n\n- This compose file is intentionally minimal and does not pre-mount or pre-select any single target repository.\n- The runtime image already includes `gh`, `git`, and `rg`.\n- The broker no longer manages repo selection or git worktree naming. That is now an agent-level responsibility inside the shared `repos/` cache and the current session workspace.\n\n## GitHub Support\n\nIf you want Codex to push branches or open PRs with `gh`:\n\n- set `GH_TOKEN` (and optionally `GITHUB_TOKEN`) to a token with `repo` scope\n- mount an SSH agent socket if your repo remote uses `git@github.com:...`\n\nExample:\n\n```env\nGH_TOKEN=gho_***\nSSH_AUTH_SOCK_HOST=/run/host-services/ssh-auth.sock\nSSH_AUTH_SOCK_CONTAINER=/ssh-agent\n```\n\nThe runtime image includes `gh`, exports your GitHub token to the process environment, and configures git to:\n\n- use `gh auth git-credential` as the credential helper\n- rewrite `git@github.com:...` remotes to `https://github.com/...`\n\nThat means `gh` and ordinary `git push` can both work with a GitHub token, even if the checked-out repo still uses an SSH-style origin URL.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}