{"_id":"@cameronjweeks/cortex-channel","_rev":"9-8cc9ec55e059d68aeb30d14abb302a32","name":"@cameronjweeks/cortex-channel","dist-tags":{"latest":"2.2.5"},"versions":{"2.0.0":{"name":"@cameronjweeks/cortex-channel","version":"2.0.0","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.0.0","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"7ab0d54209a84b0839d5f207ea5b56a2644d545a","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.0.0.tgz","fileCount":8,"integrity":"sha512-rt9Yif/QN+LD/6zR8RqzyesRbM9dkl6+WV99ipCF1zmgp3C6CCvSY/JWreNAmRV/m0A/EfPbkhWK8TIkDQKhAg==","signatures":[{"sig":"MEYCIQCa4ZSLvAR+BKhidRyOGoB1QDwRcDqamn/ZIzMtMNeNiQIhAP4yJVW+pUdmvvkmyP6ItuuK14fzvJIzneI8uHGogFr7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55074},"main":"index.ts","engines":{"node":">=22"},"gitHead":"7227e444cf9c942dd71ede9c8830d844d545e19e","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.0.0_1776200233274_0.8439696161686998","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@cameronjweeks/cortex-channel","version":"2.0.1","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.0.1","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"a4b0c604d46368579c8e28ef2cbe64b209a9ee89","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.0.1.tgz","fileCount":8,"integrity":"sha512-PjyevvhHcxs9CFjsbw3AekKTaQV1u4ID1SkETErSvSEaUVirx8pfm5pxHrAMCAxP7xw0DXyIVPjJHDm4MCF2ug==","signatures":[{"sig":"MEQCHzuzQqwzNUgvoUZcbaXaB0eUo5RKWLfyPLuc22sY+c0CIQCdOA5XHmZZ4Lf50hvKvNotkWvdFNQxz/ZVxkae3PO4Zg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55497},"main":"index.ts","engines":{"node":">=22"},"gitHead":"d1ffe02792df61b8ceb92d8a8b4963f6446cae9c","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.0.1_1776265259081_0.02510931625929591","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@cameronjweeks/cortex-channel","version":"2.1.0","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.1.0","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"4de93e0db9b0970f72f5f458522fea0d49d8ea3f","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.1.0.tgz","fileCount":8,"integrity":"sha512-KzNZywZaoZAYFQF8+5MYglCY0TjAUYlFGZjgU4vRyuJv6/pKLhDtSDfYflWgJICpM07t988KvLO2xO97YJ2zlQ==","signatures":[{"sig":"MEUCIQCkQyWP61xoI1A4E3BrVTagMXvx0xQq7V9uK78OqsUlAQIgKSLuFNqkWRYMakpFA4aVWw9JcqdtlG4RUifbO3gG9Sg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56060},"main":"index.ts","engines":{"node":">=22"},"gitHead":"1ea96819b51d8a43753617080c3546815641ef7e","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.1.0_1776266275006_0.40406661439822056","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@cameronjweeks/cortex-channel","version":"2.2.0","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.2.0","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"4823e27c307f46a5405cbfb5cdf04b4b0feb8c9d","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.2.0.tgz","fileCount":8,"integrity":"sha512-Ps+SdpbZ1ItGufXvO4qAI6hwIiLqqf5H1isEKvyHYL/Dk9QVa8+8xBLtZKRkniua7BrTh2TMSmeyYUKGt5UNDA==","signatures":[{"sig":"MEUCID5GVD4p+gw418lVwz/Wdv6EEkVN3MRL4KtjYuPz189FAiEAioGPDb5HgPV8g4fecUBBzFKhs+WM6VqhYqfdEIvUXHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50281},"main":"index.ts","engines":{"node":">=22"},"gitHead":"d8c9f8213b93610f30aed0c09278d66af10c6990","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.2.0_1776269547406_0.12914453373320534","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@cameronjweeks/cortex-channel","version":"2.2.1","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.2.1","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"132a8b76611b42eea06710957272ebc09f678cb2","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.2.1.tgz","fileCount":8,"integrity":"sha512-GywRSqoF+3nQgBflnOD1rBVVo6ptk0s5Qb7mrqR6zucx+Qv22nnqmJOWZvqwCRVcGGLKCDSZ0DIGcVKCFSNJxA==","signatures":[{"sig":"MEYCIQC2UWIMlRnOnd8A+KFtHQuLyvZCA2UcdT9gBRa3nIG4HgIhAKB85ln5dVgTgW2LXgJwX8uLtslP4ivbt6ixLAvnBk7Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50273},"main":"index.ts","engines":{"node":">=22"},"gitHead":"15b1649becd885d648da0ed847249ce03f827499","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.2.1_1776270617006_0.6121016694569277","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@cameronjweeks/cortex-channel","version":"2.2.2","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.2.2","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"a3ec7f1ae869445513a957d05188d557149443e5","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.2.2.tgz","fileCount":8,"integrity":"sha512-rveT4kEJ/RvKKNr5fTlXCsPxANKAOstZnZVlGPAyCjAUN9086CzdMuTHGj6GI5MBo2eHJil/XToQXHztFsdZiw==","signatures":[{"sig":"MEQCIC2Lz4NPeVqTJ24kghTe47flm4T4pdP+7FragUAaSrXBAiAGt/g0rqybTcUi+rb/mu6d7nsBePP0HfsWqgj/jHbuBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50588},"main":"index.ts","engines":{"node":">=22"},"gitHead":"9f341c0fd53f2e59e1cb1bffbc7e3946f960196d","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.2.2_1776272014066_0.9104641409002403","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@cameronjweeks/cortex-channel","version":"2.2.3","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.2.3","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"31d3d7e03ca4ae78b4759d0db1f530290f6435aa","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.2.3.tgz","fileCount":8,"integrity":"sha512-yqvwVQDXXFQ1a/r+gqjlZAczWbadKpgOzjYOwboS5ap02dVpxF0UfOi3aiVyY/xDZMRNCWjCcggieA5zu+itnw==","signatures":[{"sig":"MEUCIA4BawZ+p8tNxWgbuLJ24t0U++tzbrkGJnhJ6tqOncP6AiEA4EmnuTrBqnHBMlQB9iz63DPIHjw/UUeKp59OMUczGAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53011},"main":"index.ts","engines":{"node":">=22"},"gitHead":"db235ec29b72b9238dd37a79969e0f1bbaeaea6f","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.2.3_1776292467619_0.2570181631783448","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"@cameronjweeks/cortex-channel","version":"2.2.4","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","_id":"@cameronjweeks/cortex-channel@2.2.4","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"dist":{"shasum":"e6d68615780b3494ea8e1a0c4444e3b9b47629f2","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.2.4.tgz","fileCount":8,"integrity":"sha512-ZKv1a6pWd+s2QiP1ymxnBR5AvITg4jFYVfINgdMDbcabqGqz1bLa9RoQUtImoLF5wDkC6ktROtl5OeviRVo3rA==","signatures":[{"sig":"MEUCIQDrX4ySDdbT/dyaAP8flOOGkrbyqmAN389lPm3kN2+gZgIgZpRT6H9tIlBTosSQaiqrDqT9B5TU5hLduWf8mePrxNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53768},"main":"index.ts","engines":{"node":">=22"},"gitHead":"db235ec29b72b9238dd37a79969e0f1bbaeaea6f","scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git","type":"git"},"_npmVersion":"10.9.4","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"node-fetch":"^2.7.0","typescript":"^5.9.3","jsonwebtoken":"^9.0.3","socket.io-client":"^4.8.3","@types/node-fetch":"^2.6.13"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.5.0","@types/jsonwebtoken":"^9.0.10"},"_npmOperationalInternal":{"tmp":"tmp/cortex-channel_2.2.4_1776304415809_0.8503240755647508","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"@cameronjweeks/cortex-channel","version":"2.2.5","description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","main":"index.ts","openclaw":{"extensions":["./index.ts"]},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","prepack":"npm run typecheck","typecheck":"tsc --noEmit"},"keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"author":{"name":"Cameron Weeks"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git"},"bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","engines":{"node":">=22"},"dependencies":{"@types/node-fetch":"^2.6.13","jsonwebtoken":"^9.0.3","node-fetch":"^2.7.0","socket.io-client":"^4.8.3","typescript":"^5.9.3"},"devDependencies":{"@types/jsonwebtoken":"^9.0.10","@types/node":"^25.5.0"},"_id":"@cameronjweeks/cortex-channel@2.2.5","gitHead":"db235ec29b72b9238dd37a79969e0f1bbaeaea6f","_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-ipPcE3wQTLB28CTQI0oMygjHLwmoef5LlAOnO3Y77m/L4J6OvYFJpbdx5/BR82jQ3YIZkY/7M18umsJsHyQWfw==","shasum":"10e1896eaff368bd74fe6f777f7458dc0ea8ea10","tarball":"https://registry.npmjs.org/@cameronjweeks/cortex-channel/-/cortex-channel-2.2.5.tgz","fileCount":8,"unpackedSize":54823,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEIJ2v9xwgRXY9RMnlHSuBF2OBwQy3c4rr7vstiOzUV6AiAcb1rSnmf+T/FsGfXZzhk3CwuiFP8coC5tlCQV3amdHQ=="}]},"_npmUser":{"name":"cameronjweeks","email":"cameron@backv.co"},"directories":{},"maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cortex-channel_2.2.5_1776306772150_0.33749065229377573"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T20:57:13.182Z","modified":"2026-04-16T02:32:52.404Z","2.0.0":"2026-04-14T20:57:13.409Z","2.0.1":"2026-04-15T15:00:59.226Z","2.1.0":"2026-04-15T15:17:55.165Z","2.2.0":"2026-04-15T16:12:27.552Z","2.2.1":"2026-04-15T16:30:17.169Z","2.2.2":"2026-04-15T16:53:34.211Z","2.2.3":"2026-04-15T22:34:27.771Z","2.2.4":"2026-04-16T01:53:35.950Z","2.2.5":"2026-04-16T02:32:52.286Z"},"bugs":{"url":"https://github.com/cameronjweeks/cortex-openclaw-channel/issues"},"author":{"name":"Cameron Weeks"},"license":"MIT","homepage":"https://github.com/cameronjweeks/cortex-openclaw-channel#readme","keywords":["openclaw","openclaw-plugin","openclaw-channel","cortex","chat","ai","bot"],"repository":{"type":"git","url":"git+https://github.com/cameronjweeks/cortex-openclaw-channel.git"},"description":"OpenClaw channel plugin that bridges OpenClaw agents to Cortex chat — rich AI status events, automatic channel task lifecycle, attachment handling, and crash-safe task persistence.","maintainers":[{"name":"cameronjweeks","email":"cameron@backv.co"}],"readme":"# Cortex Channel Plugin for OpenClaw\n\nConnects an [OpenClaw](https://github.com/openclaw-ai/openclaw) agent to\n[Cortex](https://github.com/cameronjweeks/cortex-app) — a team chat platform\nwhere multiple users can interact with AI bots in shared channels.\n\n## What this does\n\nThe plugin runs inside the OpenClaw gateway and bridges it to Cortex:\n\n- Opens a Socket.IO connection to `cortex-socket` (realtime relay) as the bot user\n- Subscribes to `messages:new` events in channels the bot is a member of\n- Dispatches each inbound message to the OpenClaw agent\n- Emits rich AI status (`typing`, `thinking`, tool-call lifecycle) back to the channel\n- Creates and completes channel tasks automatically as the bot works\n- Downloads message attachments to local storage and injects the paths into agent context\n- Persists in-flight task state so crashes can be recovered cleanly\n- Re-keys the OpenClaw session whenever Cortex rotates (reset/compact) so context actually resets\n\n```\n┌────────────┐   Socket.IO   ┌───────────────┐   HTTP  ┌────────────┐\n│ Cortex App │ ◄───────────► │ cortex-socket │ ──────► │ cortex-api │\n└────────────┘               └───────────────┘         └────────────┘\n                                     ▲\n                                     │ Socket.IO\n                                     │\n                             ┌───────┴─────────┐\n                             │ OpenClaw        │\n                             │ cortex-channel  │\n                             │ (this plugin)   │\n                             └─────────────────┘\n```\n\n## Requirements\n\n- OpenClaw `>= 2026.4.14` (earlier versions work but lack plugin-SDK alias resolution\n  fixes needed for symlinked installs)\n- A running Cortex deployment: `cortex-api`, `cortex-socket`, `cortex-app`\n- A user row in the Cortex database with `is_ai = true` whose email matches the\n  plugin's configured `botEmail`\n\n## Installation\n\n### From npm (recommended)\n\n```bash\nopenclaw plugin install @cameronjweeks/cortex-channel\n```\n\n### From git\n\n```bash\nopenclaw plugin install git+https://github.com/cameronjweeks/cortex-openclaw-channel.git\n```\n\n### Local development\n\n```bash\ngit clone https://github.com/cameronjweeks/cortex-openclaw-channel.git\ncd cortex-openclaw-channel\nnpm install\nnpm pack\nopenclaw plugin install ./cortex-channel-*.tgz\n```\n\n## Configuration\n\nAll required values can be supplied two ways. **There are no hardcoded defaults.**\nIf neither source provides a required value, the plugin logs a warning and skips\nstartup rather than silently authenticating as a default identity.\n\n### Option A — OpenClaw config (preferred)\n\nIn `~/.openclaw/openclaw.json`:\n\n```json\n{\n  \"channels\": {\n    \"cortex\": {\n      \"enabled\": true,\n      \"apiUrl\": \"http://localhost:3201\",\n      \"realtimeUrl\": \"http://localhost:3202\",\n      \"jwtSecret\": \"<matches cortex-api JWT_SECRET>\",\n      \"botEmail\": \"bot@example.com\",\n      \"botName\": \"Bot\"\n    }\n  }\n}\n```\n\n### Option B — Environment variables\n\nUseful for containerized / 12-factor deployments where the operator prefers to\nkeep secrets out of `openclaw.json`:\n\n```bash\nCORTEX_API_URL=http://localhost:3201\nCORTEX_REALTIME_URL=http://localhost:3202\nCORTEX_JWT_SECRET=<matches cortex-api JWT_SECRET>\nCORTEX_BOT_EMAIL=bot@example.com\nCORTEX_BOT_NAME=Bot\n```\n\nValues from `openclaw.json` take precedence over environment variables when\nboth are set.\n\n### Required fields\n\n| Field / env var | Description |\n|---|---|\n| `apiUrl` / `CORTEX_API_URL` | cortex-api base URL (e.g. `http://localhost:3201` or `https://<domain>/api`) |\n| `realtimeUrl` / `CORTEX_REALTIME_URL` | cortex-socket base URL (Socket.IO) |\n| `jwtSecret` / `CORTEX_JWT_SECRET` | Must match `JWT_SECRET` in cortex-api's env |\n| `botEmail` / `CORTEX_BOT_EMAIL` | Must match the `email` of the `is_ai=true` user in the Cortex `users` table |\n| `botName` / `CORTEX_BOT_NAME` | Display name used for `ai:status` events and JWT claims |\n\n### Multi-account\n\nTo run multiple bots from a single OpenClaw gateway, provide an `accounts`\nmap in `channels.cortex`:\n\n```json\n{\n  \"channels\": {\n    \"cortex\": {\n      \"enabled\": true,\n      \"accounts\": {\n        \"alice\": {\n          \"apiUrl\": \"https://cortex.example.com/api\",\n          \"realtimeUrl\": \"https://cortex.example.com\",\n          \"jwtSecret\": \"<shared secret>\",\n          \"botEmail\": \"alice@example.com\",\n          \"botName\": \"Alice\"\n        },\n        \"bob\": {\n          \"apiUrl\": \"https://cortex.example.com/api\",\n          \"realtimeUrl\": \"https://cortex.example.com\",\n          \"jwtSecret\": \"<shared secret>\",\n          \"botEmail\": \"bob@example.com\",\n          \"botName\": \"Bob\"\n        }\n      }\n    }\n  }\n}\n```\n\nEnvironment variables are only consulted for the single default account (no\nmulti-account env-var scheme).\n\n## How it works\n\n### Inbound flow\n1. User sends a message in a Cortex channel\n2. `cortex-socket` broadcasts `messages:new`\n3. Plugin filters out bot/system messages and skips empty payloads\n4. Plugin fetches the active `session` from cortex-api, resolving both its\n   `sessionKey` and any `summary` seeded by a prior session reset\n5. If Cortex has rotated the session since last turn, the plugin starts a\n   fresh OpenClaw session keyed off the new Cortex `sessionKey` and injects\n   the summary into `UntrustedContext` so the bot picks up the thread\n6. Plugin creates a channel task (visible in the Cortex UI) for the work unit\n7. Plugin dispatches to the OpenClaw agent with full context\n8. Agent's reply is routed back to Cortex via the Socket.IO `apiRequest.request`\n   relay, which calls `POST /v1/chat/messages` server-side\n\n### AI status events\nDuring each turn, the plugin emits `ai:status` events on the channel:\n- `working` — generic activity\n- `thinking` — extended-reasoning model is in the reasoning phase\n- `searching` / `browsing` / `reading` / `writing` — mapped from tool-call names\n- `null` — clear the indicator\n\nThese are consumed by cortex-app's chat store to show the user what the bot\nis doing in real time.\n\n### Channel task lifecycle\nThe plugin creates a channel task when it starts processing a message and\nupdates it to `completed` or `cancelled` when the agent finishes. A\n`TaskPersistenceManager` records in-flight tasks to disk with a 20-second\nheartbeat, and on startup cleans up any orphaned tasks from a prior crash.\n\n### Authentication\nThe plugin generates a JWT signed with `jwtSecret`, containing `{ email, name }`\nclaims. Cortex-api validates the JWT and treats the bot as a regular user with\n`is_ai = true`.\n\n## Troubleshooting\n\n- **Plugin logs \"missing required config, skipping\"** — one of `jwtSecret`, `apiUrl`,\n  `realtimeUrl`, `botEmail`, `botName` is unset in both `openclaw.json` and\n  the `CORTEX_*` environment.\n- **Bot connects but no replies** — make sure the bot's email exists in the\n  Cortex `users` table with `is_ai = true`, and that the bot is a member of\n  the channel.\n- **Intermittent \"Send failed: fetch failed\"** — `cortex-socket` may not be\n  reachable; check that it's running on `realtimeUrl`.\n- **Status indicators never show** — cortex-app must be on a build that\n  subscribes to `ai:status` events (the chat store at `src/lib/stores/chat.ts`).\n\n## Source layout\n\n```\nsrc/\n  channel.ts              — Plugin entry: WebSocket wiring, inbound handler,\n                            outbound sendText, StatusManager, task lifecycle\n  runtime.ts              — OpenClaw runtime context holder\n  download-attachments.ts — Downloads message attachments into\n                            ~/.openclaw/media/inbound/ and returns local paths\n  task-persistence.ts     — Crash-safe in-flight task recorder with heartbeat\n                            + orphan cleanup on startup\nindex.ts                  — Plugin registration (registerChannel)\nopenclaw.plugin.json      — Plugin manifest (id: cortex-channel)\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}