{"_id":"@cloudrise/openclaw-channel-rocketchat","_rev":"14-c452cc207f28dec5a8632c50482fcd83","name":"@cloudrise/openclaw-channel-rocketchat","dist-tags":{"latest":"0.6.1"},"versions":{"0.1.0":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.0","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.0","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"a49fc782608d9f0c2a90ddcb222b817701e88ab8","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.0.tgz","fileCount":16,"integrity":"sha512-aYYGAZQQo5ZDxm3DgbyB34oGwnUqlph758+aU/4J2a3iDXl/VAtgxtxOsQHvqvYVPR+dTJ1bQd9pUpk0vCzbFg==","signatures":[{"sig":"MEUCIBxL8xminXlcAXZgqdNHVrc3T7zE29MM+2uKavX/WPpMAiEAqFEuzrFez3h+iPcf5/0pZmJLrDfESzY5Dklq0EX1tkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60333},"main":"index.ts","type":"module","gitHead":"3efa3be73822b38f78d936889a23fc899b920d54","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.0_1769831034089_0.045337775580959416","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.9","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.9","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"ed55b373ecbebbc6ffbf87ad60c06223be32d52f","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.9.tgz","fileCount":17,"integrity":"sha512-qusHT89FjyZeX++WbszJdLNqc1w8N2DxE9foNPjh/XM2bmjZsOV3ZOlzqou0i/12mwlc9EjB1p1/N3BGzdY48A==","signatures":[{"sig":"MEUCIQD9c5LtR/m/DsqLcWZwZrKkbS3C37aD7AoAG1lUjWWSBAIgSfSu4CkbklMjbFGjOwExZ4Eh1JOkAlXcdTjAoH0fCK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64804},"main":"index.ts","type":"module","gitHead":"60cd04db9b31baf6f3bd5f1ad7b2eb6f0805644b","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.9_1769874560957_0.20327030551722647","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.10","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.10","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"662b1e55c19f49b6979f7a40327879d19ad56c06","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.10.tgz","fileCount":17,"integrity":"sha512-XcFOFyaddZJUuJHaXidcZwMRXitDgRLRI2UAPfqgHvuoXnDlgs+8qNx+SSZ3ZHmbB9BW7yTqO8oEfc7WaRpi/Q==","signatures":[{"sig":"MEUCIGb6Kp1S0JDk7ydKiK1OwO8FlGo7fbhLErkodiNsjojwAiEA76X0QfF0NgpvIX5GdM0Rtk/zv2aDZIpRgLW5qyCtEmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68490},"main":"index.ts","type":"module","gitHead":"4ff4dd3eb4afd80afe840ceba144bff620dfc82c","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.10_1769974378590_0.9207442642429915","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.11","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.11","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"89c7a450303359146ce67bc94cebdc8874a0550d","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.11.tgz","fileCount":17,"integrity":"sha512-8VDFP+asHvxbR2ybIxcBPIMdSDKh5KlBSaT34W+nZNQxxUH3pwovIchQocyy3WWWEw/BEtiHkM0gfgw+2Z4r4g==","signatures":[{"sig":"MEYCIQCMMJpGoJyJQSqY1Rq61PAL0fm2zWbY9MTjnvUIzSY7DgIhAKknUkndBeMHX9gl2cqcvlcO8OuSRyQvC8FhZsOkig3X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71605},"main":"index.ts","type":"module","gitHead":"ebee7f9cfc0fdc7028782e47a1e8d2775ee44740","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.11_1769975763027_0.8962572186127165","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.12","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.12","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"56b6348e3447163cf66f93a8248febbbe12a8ea1","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.12.tgz","fileCount":17,"integrity":"sha512-R/DXv7J9N3/HvXMM2Od3YOb79lOBfyubVJtK51X2rSXlsF8czbSHx5WjCHMRIgYreVt6EMithn5pko4w0bryPw==","signatures":[{"sig":"MEQCIGYFW/WeUpjhMnpVmHQInsQn+va7gdN2OnWBTj9dQ4FYAiAHHIeYSHhhzmuV/kG2d9qXd2SQFgOTzVYCnj0qOdUDfg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72230},"main":"index.ts","type":"module","gitHead":"e294b43a1fc4e3f1f5c07cd50f617bd193e31b6a","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.12_1769976562066_0.5442500951934919","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.14","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.14","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"04f20f41c2521e3b293acd3348e1ebf35289d30a","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.14.tgz","fileCount":17,"integrity":"sha512-mxNfOvcs5wAI9BJurn4MXx/5G7LH9jfFET45VY7WCOSwS9nUaFWgvSIXML8qKDiN0BSLgvdIrMBTxi5eOvNS+Q==","signatures":[{"sig":"MEYCIQCqPtSjr16M+BY+IqZ1jhoQOTeYNuUsQZRxfS47wXYoKwIhAPGZ4buwq4ADVX+uEFDaGCK4JVAqIhU1G9gmvQapHd/y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77383},"main":"index.ts","type":"module","gitHead":"182ade6db21c9739a00a77b75c43b4f365ae8f9e","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.14_1769978823833_0.25568824336018037","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.15","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.15","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"abdc3b03e24cdda484557b68984e13bf3eaec84e","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.15.tgz","fileCount":17,"integrity":"sha512-JdY1eMba1DJ2JlZlOF4qZ5fhtSBtj6A0Y6AXH+UBNmoKvfJhvz232TRRlEp1eoR81qoVZn6mbNwaI4eg0Qe+Zg==","signatures":[{"sig":"MEQCIAT2Y6UYudA0ACyJw91FMQFJW+xmTDx2a4MBNanNxojcAiAGoQotRWBNgcxVDF8UO6EQdSWiGOBHiDg6/HWeM0+Kag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77513},"main":"index.ts","type":"module","gitHead":"5c4587cd428a237fa19575e429fbca29f61411ed","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.15_1769979083368_0.11134939577692138","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.1.16","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.1.16","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"0cfeef66eb969a38257fb4db5c1cce55800621cb","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.1.16.tgz","fileCount":17,"integrity":"sha512-kIj6zRypS5DlEMvDMz8kpVD3GXYC/YCa+gJ9pKlHF2wf7mzINniR7rTIPn4ljPMXNp/eU/TOgVMLpaFXb2Wrtg==","signatures":[{"sig":"MEQCIH0HZzILdA3i0t7iqxlpfarmDqQ32+lb/EuVHwJw/leQAiARGG48qndpwi9pNUZONiCNBPTmc1fLQ/tQJT8MALY/HQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80425},"main":"index.ts","type":"module","gitHead":"29c7887c09d1eb683f24122d5569bde20f7bf43d","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.1.16_1769980707535_0.8632807128932634","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.2.0","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.2.0","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"06558628638e675534de9c794cbba557b539cec8","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.2.0.tgz","fileCount":18,"integrity":"sha512-A5hWPc5hRHglY/fHe/E4iR/pfadD5RKOlcmDTZz8w1z5MlOGN0yyJJ7Me3S8Lsb5ypQIDTYcQRwHNEGE4dZGVQ==","signatures":[{"sig":"MEYCIQC6qjCw2eheQrPhaJVYXdHGyL2fLb95WarNMTs6pYXb7wIhAIRukSL3oRN6pmJ2TJ6GgEeFvhPaLtnDf8u0O0fbBXPo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82775},"main":"index.ts","type":"module","gitHead":"42403180eb744adf9944e0575a7e24f37e5774fd","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.2.0_1771117798777_0.8025792771029558","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.3.0","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.3.0","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"da786149acfbdded8263a976c6f7ab4ba2009a06","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.3.0.tgz","fileCount":19,"integrity":"sha512-YY2XIum32rRi355KoGt0CHJinZIbq2TtmHFig1xFya08w6JDWQQun0T6pssVyC9AKQUxBiJfrggx2Wa8DI/sRw==","signatures":[{"sig":"MEQCICVJcUDW7c7OcfyK9A5/Sdm/lG2k9JiOHrTret6zBvQSAiBiKPbtwz/wbfOOtgnFPeX8MkeiHlxTUsP8V2KG96LBww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96143},"main":"index.ts","type":"module","gitHead":"02ff5d6ef726046a889cd85c634523e48c0482fa","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.3.0_1771122597274_0.738684188146248","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.4.0","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.4.0","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"381adff0b70e0d1a1ac3398851abc52a5ee70a4e","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.4.0.tgz","fileCount":23,"integrity":"sha512-YUJUsUgtQTV/QFIF3YWwp76krlXhvHmVSHaFy6SjwB8KP7IDNCt47FehFlqBlfDnA8cpNIoRdqYkNn2GXLeNMA==","signatures":[{"sig":"MEQCIGkDFvXDfLuFoHp3bFFZJPwFF56971/7V32vqcmdW3rNAiA/UG9pHUXiUZxmlVOe3SZH3UtC7V9Ov+rnaOQdOViGig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128971},"main":"index.ts","type":"module","gitHead":"8605640b6faa12f7728df02abb394ca8ff49682c","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.4.0_1771123658481_0.7595950606940312","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.4.1","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.4.1","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"a41cdf7ac772f8a7d9034689e58c1a52cb5c341b","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.4.1.tgz","fileCount":23,"integrity":"sha512-qiianRwbNBU/PM9pqlrWOH3R5lmOz+W9e32mYmIiPn3u8m6Ox70IR9DSDL7ZMdwySxIvY9UTTu3uOsdKZQ+kzg==","signatures":[{"sig":"MEUCIQC1iaoej3w26uPpRGAHhiWCFuCqIPyTepc5YStE35VPvAIgKUljxSC9NdcrLRxSPOMILRxw4/BAQQErYKoNzQ3ajr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129502},"main":"index.ts","type":"module","gitHead":"6420818b2a447b17f87134d0be9f63e951c98c9f","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.4.1_1771125438667_0.04676257241183657","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.6.0","license":"MIT","_id":"@cloudrise/openclaw-channel-rocketchat@0.6.0","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"dist":{"shasum":"dfea40a9e7189fa750b16ef280f95bd4cca64fec","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.6.0.tgz","fileCount":24,"integrity":"sha512-ZURjHdY1YLlb0lU3Az8R9Og6fag7NxkZ0hlmqzodf96s8xEbg4SwL0WDZxE0wxA5eyZJ7sxep1PY2FNrjAW7SA==","signatures":[{"sig":"MEUCIA7R4nq1ea9q+4by0wItC8XORiH0VCzmbA8tIKdsU8+0AiEA8CakZTEVkEEu7nLCS41cULd++OynKutfGxMnN6cfO2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159603},"main":"index.ts","type":"module","gitHead":"c291a1f06863f037798ae90eb4d2cb87634a2515","_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"openclaw":{"channel":{"id":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","label":"Rocket.Chat","order":66,"aliases":["rc","rocket"],"docsPath":"/channels/rocketchat","docsLabel":"rocketchat","selectionLabel":"Rocket.Chat (self-hosted)"},"extensions":["./index.ts"]},"_npmVersion":"10.9.4","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ws":"^8.14.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel-rocketchat_0.6.0_1771132415526_0.31361186836890353","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@cloudrise/openclaw-channel-rocketchat","version":"0.6.1","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","license":"MIT","type":"module","main":"index.ts","openclaw":{"extensions":["./index.ts"],"channel":{"id":"rocketchat","label":"Rocket.Chat","selectionLabel":"Rocket.Chat (self-hosted)","docsPath":"/channels/rocketchat","docsLabel":"rocketchat","blurb":"Self-hosted team chat via Rocket.Chat REST + Realtime API.","order":66,"aliases":["rc","rocket"]}},"dependencies":{"ws":"^8.14.0"},"peerDependencies":{"openclaw":"*"},"_id":"@cloudrise/openclaw-channel-rocketchat@0.6.1","gitHead":"8482b6a181b65c021ff054e089aed30276502eaf","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-Zc+9oAbFNdErcIhMvph7QNIXgjTx/YD4zu0mJ4FHPf2qnmoy2mbkcmNSwrGKZSu5ychdiku9Q7eZOya1uvH+mQ==","shasum":"49494f4428038e7128cda4a0d1c857c357e2b4de","tarball":"https://registry.npmjs.org/@cloudrise/openclaw-channel-rocketchat/-/openclaw-channel-rocketchat-0.6.1.tgz","fileCount":24,"unpackedSize":161024,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDD7FFTe7f9ATWRchXrIWcGaYw2f4m9ecYv3qz6nxltIwIgW/MMbN9buLp/cwVoRkBnzqpaRMFrtas7BXxcmBCnkDg="}]},"_npmUser":{"name":"marshalmorse","email":"marshal@cloudrise.net"},"directories":{},"maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openclaw-channel-rocketchat_0.6.1_1771133273769_0.3179740911528568"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-31T03:43:54.007Z","modified":"2026-02-15T05:27:54.097Z","0.1.0":"2026-01-31T03:43:54.236Z","0.1.9":"2026-01-31T15:49:21.120Z","0.1.10":"2026-02-01T19:32:58.758Z","0.1.11":"2026-02-01T19:56:03.189Z","0.1.12":"2026-02-01T20:09:22.220Z","0.1.14":"2026-02-01T20:47:03.990Z","0.1.15":"2026-02-01T20:51:23.524Z","0.1.16":"2026-02-01T21:18:27.713Z","0.2.0":"2026-02-15T01:09:58.939Z","0.3.0":"2026-02-15T02:29:57.437Z","0.4.0":"2026-02-15T02:47:38.621Z","0.4.1":"2026-02-15T03:17:18.817Z","0.6.0":"2026-02-15T05:13:35.680Z","0.6.1":"2026-02-15T05:27:53.933Z"},"license":"MIT","description":"Rocket.Chat channel plugin for OpenClaw (Cloudrise)","maintainers":[{"name":"marshalmorse","email":"marshal@cloudrise.net"}],"readme":"# OpenClaw Rocket.Chat Channel Plugin\n\n[![npm](https://img.shields.io/npm/v/@cloudrise/openclaw-channel-rocketchat)](https://www.npmjs.com/package/@cloudrise/openclaw-channel-rocketchat)\n[![license](https://img.shields.io/npm/l/@cloudrise/openclaw-channel-rocketchat)](LICENSE)\n\nNeutral, self-host friendly Rocket.Chat channel plugin for **OpenClaw** (Cloudrise-maintained).\n\n- **Inbound:** Rocket.Chat Realtime (DDP/WebSocket) subscribe to `stream-room-messages`\n- **Outbound:** Rocket.Chat REST `chat.postMessage`\n\n## Upgrade notices\n\n### v0.6.0 — Per-room access control (beta)\n\nNew fine-grained per-room user access control:\n- `rooms.<roomId>.canInteract` — static list of users/roles who can interact\n- `rooms.<roomId>.roomApprovers` — who can approve others for this room\n- `rooms.<roomId>.responseMode` — \"always\" or \"mention-only\"\n- Room-level commands: `--room-approve @user`, `--room-deny @user`, `--room-list`\n\n> ⚠️ **Beta**: Per-room ACL is functional but should be tested before production use.\n\n### v0.5.0 — Channel/room approval flow (beta)\n\nNew `groupPolicy: \"owner-approval\"` for controlling which channels the bot responds in:\n- Bot sends \"pending approval\" message on first message in unapproved channels\n- Approve with `--approve room:ROOMID`, deny with `--deny room:ROOMID`\n\n> ⚠️ **Beta**: Channel approval flow is functional but should be tested before production use.\n\n### v0.4.0 — Owner-approval DM policy\n\nNew `dmPolicy: \"owner-approval\"` for in-channel approval flow (no CLI needed):\n- Configure `ownerApproval.notifyChannels` for where to receive requests\n- Configure `ownerApproval.approvers` with usernames or Rocket.Chat roles (`role:admin`, `role:moderator`)\n- Commands: `--approve @user`, `--deny @user`, `--pending`\n\n### v0.3.0 — DM pairing support\n\nAdded support for OpenClaw's DM pairing flow. Default behavior unchanged (`dmPolicy: \"open\"`), but you can now enable `dmPolicy: \"pairing\"` for per-user approval.\n\n### v0.2.0+ — plugin id change\n\nThe plugin id changed from `rocketchat` to `openclaw-channel-rocketchat` to align with OpenClaw's package-derived id convention and eliminate the \"plugin id mismatch\" warning.\n\n**Update your config:**\n\n```yaml\nplugins:\n  entries:\n    openclaw-channel-rocketchat:  # ← was \"rocketchat\"\n      enabled: true\n\nchannels:\n  rocketchat:  # ← stays the same (channel id ≠ plugin id)\n    ...\n```\n\n### Clawdbot → OpenClaw migration\n\nIf you were using the old Clawdbot-era package:\n\n- Old: `@cloudrise/clawdbot-channel-rocketchat`\n- New: `@cloudrise/openclaw-channel-rocketchat`\n\n## Authors\n\n- Chad (AI assistant running in OpenClaw) — primary implementer\n- Marshal Morse — project owner, requirements, infrastructure, and testing\n\n## Quickstart (5–10 minutes)\n\n1) **Create a Rocket.Chat bot user** (or a dedicated user account) and obtain:\n   - `userId`\n   - `authToken` (treat like a password)\n\n2) **Add the bot user to the rooms** you want it to monitor (channels/private groups). For DMs, ensure users can message the bot.\n\n3) **Install + enable the plugin in OpenClaw**\n\n```yaml\nplugins:\n  installs:\n    rocketchat:\n      source: npm\n      spec: \"@cloudrise/openclaw-channel-rocketchat\"\n  entries:\n    openclaw-channel-rocketchat:\n      enabled: true\n\nchannels:\n  rocketchat:\n    baseUrl: \"https://chat.example.com\"\n    userId: \"<ROCKETCHAT_USER_ID>\"\n    authToken: \"<ROCKETCHAT_AUTH_TOKEN>\"\n\n    # Optional: keep noise down\n    replyMode: auto\n    rooms:\n      GENERAL:\n        requireMention: true\n```\n\n4) **Restart the gateway**.\n\n5) **Test** by @mentioning the bot in a room it’s a member of.\n\n### Example chat commands (reply to a room + model switching)\n\nIn Rocket.Chat you can send a normal message, or you can switch the session’s model first.\n\n**Switch model, then ask a question**:\n\nRocket.Chat treats messages starting with `/` as Rocket.Chat slash-commands.\nSo for model switching, either:\n\n- put the directive *after* an @mention (works on most servers/clients), or\n- use the plugin’s alternate `--model` / `--<alias>` syntax.\n\n```text\n# Option A: use /model after an @mention\n@Chad /model qwen3\n@Chad write a 5-line summary of our incident in plain English\n\n# Option B: alternate syntax (avoids Rocket.Chat /commands)\n@Chad --model qwen3\n@Chad write a 5-line summary of our incident in plain English\n\n# Option C: shorthand alias form\n@Chad --qwen3\n@Chad write a 5-line summary of our incident in plain English\n```\n\n**Example output** (with `messages.responsePrefix: \"({model}) \"` enabled):\n\n```text\n(mlx-qwen/mlx-community/Qwen3-14B-4bit) Here’s a 5-line summary...\n...\n```\n\n**Send a one-off message to a specific Rocket.Chat room** (from the gateway host):\n\n```bash\nopenclaw message send --channel rocketchat --to room:GENERAL --message \"Hello from OpenClaw\"\n```\n\n**Send using a specific model for that one message**:\n\n```bash\nopenclaw message send --channel rocketchat --to room:GENERAL --message \"/model qwen3 Hello from Qwen3\"\n```\n\n---\n\n## Install\n\n### Install from npm\n\n```bash\nnpm install @cloudrise/openclaw-channel-rocketchat\n```\n\n### Configure OpenClaw to load the plugin\n\nYou need to tell OpenClaw to load the installed plugin.\n\n**Option A (recommended): install via `plugins.installs` (npm source)**\n\n```yaml\nplugins:\n  installs:\n    rocketchat:\n      source: npm\n      spec: \"@cloudrise/openclaw-channel-rocketchat\"\n  entries:\n    openclaw-channel-rocketchat:\n      enabled: true\n```\n\n**Option B: load from a local path**\n\n```yaml\nplugins:\n  load:\n    paths:\n      - /absolute/path/to/node_modules/@cloudrise/openclaw-channel-rocketchat\n  entries:\n    openclaw-channel-rocketchat:\n      enabled: true\n```\n\nThen restart the gateway.\n\n## Features\n\n- **Inbound attachments**: receives images, PDFs/documents, and audio; forwards them to OpenClaw for vision/document understanding and transcription.\n- **Outbound attachments**: can send local file paths as real Rocket.Chat uploads (inline previews when supported).\n- **Reactions**: can react to messages with emoji (via `chat.react`).\n\n- **File attachments**: receives images, PDFs, documents, audio uploaded to Rocket.Chat and passes them to the vision model.\n- **Model prefix**: honors `messages.responsePrefix` (e.g. `({model}) `) so replies can include the model name.\n\n## Model switching\n\nThere are two parts:\n\n1) **Switching models in chat** (temporary, per-session) via `/model ...`\n2) **Defining short aliases** like `qwen3` so you don’t have to type the full `provider/model`\n\n### Switching models in chat (`/model`)\n\nIn any chat where OpenClaw slash-commands are enabled, you can switch the current session’s model:\n\n```text\n/model\n/model list\n/model status\n/model openai/gpt-5.2\n/model qwen3\n```\n\nTip: on Rocket.Chat you’ll often be writing something like:\n\n```text\n@Chad /model qwen3\n@Chad what do you think about ...\n```\n\n### Model aliases (shortcuts like `qwen3`)\n\nOpenClaw supports **model aliases** so you can type a short name (like `qwen3`) instead of a full `provider/model` ref.\n\n**Option A: define aliases in config**\n\nAliases come from `agents.defaults.models.<modelId>.alias`.\n\n```yaml\nagents:\n  defaults:\n    models:\n      \"mlx-qwen/mlx-community/qwen3-14b-4bit\":\n        alias: qwen3\n```\n\n**Option B: use the CLI**\n\n```bash\nopenclaw models aliases add qwen3 mlx-qwen/mlx-community/Qwen3-14B-4bit\nopenclaw models aliases list\n```\n\nNotes:\n- Model refs are normalized to lowercase.\n- If you define the same alias in config and via CLI, your config value wins.\n\n## Configuration\n\n> Use the room **rid** (e.g. `GENERAL`) for per-room settings.\n\n### Minimal (single account)\n\n```yaml\nchannels:\n  rocketchat:\n    baseUrl: \"https://chat.example.com\"\n    userId: \"<ROCKETCHAT_USER_ID>\"\n    authToken: \"<ROCKETCHAT_AUTH_TOKEN>\"\n```\n\n### Multiple accounts / multiple Rocket.Chat servers\n\nYou can configure multiple Rocket.Chat “accounts” under `channels.rocketchat.accounts` and choose which one to use via `accountId` when sending.\n\n```yaml\nchannels:\n  rocketchat:\n    accounts:\n      prod:\n        name: \"Prod RC\"\n        baseUrl: \"https://chat.example.com\"\n        userId: \"<PROD_USER_ID>\"\n        authToken: \"<PROD_AUTH_TOKEN>\"\n\n      staging:\n        name: \"Staging RC\"\n        baseUrl: \"https://chat-staging.example.com\"\n        userId: \"<STAGING_USER_ID>\"\n        authToken: \"<STAGING_AUTH_TOKEN>\"\n```\n\nNotes:\n- The legacy single-account format (top-level `baseUrl/userId/authToken`) still works and is treated as `accountId: default`.\n- Per-room settings live under each account (e.g. `channels.rocketchat.accounts.prod.rooms`).\n\n### Reply routing (thread vs channel)\n\n```yaml\nchannels:\n  rocketchat:\n    # thread | channel | auto\n    replyMode: auto\n\n    rooms:\n      GENERAL:\n        requireMention: false\n        # Optional per-room override\n        # replyMode: channel\n```\n\n**Auto rules** (deterministic):\n- If the inbound message is already in a thread (`tmid` exists) → reply in that thread\n- Else if the inbound message is “long” (≥280 chars or contains a newline) → reply in a thread\n- Else → reply in channel\n\n### Per-message overrides\n\nPrefix your message:\n- `!thread ...` → force the reply to be posted as a thread reply\n- `!channel ...` → force the reply to be posted in the channel\n\n(The prefix is stripped before the message is sent to the agent.)\n\n### Typing indicator\n\n```yaml\nchannels:\n  rocketchat:\n    # Delay (ms) before emitting typing indicator\n    typingDelayMs: 500\n```\n\n(When using multiple accounts, this can also be set per account at `channels.rocketchat.accounts.<accountId>.typingDelayMs`.)\n\nTyping indicators are emitted via DDP `stream-notify-room` using `<RID>/user-activity`.\n- Channel replies emit typing without `tmid` → shows under channel composer\n- Thread replies include `{ tmid: ... }` → shows under thread composer\n\n## Development\n\n```bash\ngit clone git@github.com:cloudrise-network/openclaw-channel-rocketchat.git\ncd openclaw-channel-rocketchat\nnpm install\n```\n\nLocal smoke tests (uses env vars; see `.env.example`):\n\n```bash\n# REST send\nnode test-chad.mjs\n\n# Realtime receive\nnode test-realtime.mjs\n```\n\n## Packaging + publishing (no secrets)\n\nBefore publishing:\n\n1) Run a quick secret scan (at minimum):\n\n```bash\ngrep -RIn --exclude-dir=node_modules --exclude=package-lock.json -E \"npm_[A-Za-z0-9]+|ghp_[A-Za-z0-9]+|xox[baprs]-|authToken\\s*[:=]\\s*\\\"\" .\n```\n\n2) Bump version in `package.json`.\n\n3) Verify the tarball:\n\n```bash\nnpm pack\n```\n\n4) Publish:\n\n```bash\nnpm publish\n```\n\n(There is also a GitHub Actions workflow in `.github/workflows/publish.yml`.)\n\n## DM Access Control\n\nThe plugin supports multiple DM access control modes, including a unique **Owner Channel Approval** flow.\n\n### DM Policies\n\n```yaml\nchannels:\n  rocketchat:\n    dmPolicy: \"owner-approval\"  # or \"open\" | \"pairing\" | \"allowlist\" | \"disabled\"\n```\n\n| Policy | Behavior |\n|--------|----------|\n| `open` | **(Default)** All DMs allowed. Rocket.Chat server-level auth is the only gate. |\n| `owner-approval` | **🆕** Unknown senders trigger approval request to owner channel. No CLI needed! |\n| `pairing` | Unknown senders get a pairing code. Owner approves via CLI. |\n| `allowlist` | Only users in `allowFrom` can DM. Others are silently blocked. |\n| `disabled` | All DMs blocked. |\n\n---\n\n### Owner Channel Approval (Recommended)\n\nApprove or deny users **directly in Rocket.Chat** — no CLI needed!\n\n```yaml\nchannels:\n  rocketchat:\n    dmPolicy: \"owner-approval\"\n    ownerApproval:\n      enabled: true\n      \n      # Where to send approval notifications\n      notifyChannels:\n        - \"@admin\"            # DM to specific user\n        - \"room:APPROVERS\"    # or a dedicated room\n      \n      # Who can approve (supports Rocket.Chat roles!)\n      approvers:\n        - \"@marshal\"          # specific username\n        - \"role:admin\"        # anyone with RC admin role\n        - \"role:moderator\"    # anyone with moderator role\n      \n      # Notify requester when decision is made\n      notifyOnApprove: true\n      notifyOnDeny: true\n      \n      # Optional timeout (seconds)\n      timeout: 3600\n      onTimeout: \"pending\"    # or \"deny\" or \"remind\"\n```\n\n**Flow:**\n1. Unknown user sends a DM\n2. Bot notifies owner channel: `\"🔔 New DM request from @user123\"`\n3. Owner replies: `--approve @user123` or `--deny @user123`\n4. Requester gets notified: `\"✅ You've been approved!\"`\n5. Future messages are processed normally\n\n**Commands (in owner channel or DM to bot):**\n```\n--approve @user123           # approve a user\n--deny @user123              # deny a user\n--approve room:GENERAL       # approve a room\n--pending                    # list pending requests\n```\n\n> 💡 **Note:** Rocket.Chat has built-in `/slash` commands that may intercept messages starting with `/`. Use `--` prefix instead (e.g., `--approve` not `/approve`).\n\n---\n\n### Channel/Room Approval (groupPolicy)\n\nControl which channels the bot responds in:\n\n```yaml\nchannels:\n  rocketchat:\n    groupPolicy: \"owner-approval\"  # or \"open\" | \"allowlist\" | \"disabled\"\n```\n\n| Policy | Behavior |\n|--------|----------|\n| `open` | **(Default)** Bot responds in any channel it's added to. |\n| `owner-approval` | Bot sends \"pending approval\" on first message in new channels. |\n| `allowlist` | Only channels in `groupAllowFrom` receive responses. |\n| `disabled` | Bot ignores all channel messages. |\n\n**With `groupPolicy: \"owner-approval\"`:**\n- When invited to a new channel, first message triggers approval request\n- Approvers receive: `\"🔔 Bot invited to #channel-name by @user\"`\n- Approve with: `--approve room:ROOMID`\n\n---\n\n### 🔑 Auto-Approval (Important!)\n\n**Approvers and notify channels are automatically allowed through access gates** — no manual pre-approval needed!\n\n| `ownerApproval` Entry | DM Gate | Channel/Group Gate |\n|-----------------------|---------|-------------------|\n| `approvers: [\"@user\"]` | ✅ Auto-allowed | ✅ Auto-allowed (in any room) |\n| `notifyChannels: [\"room:ID\"]` | N/A | ✅ Auto-allowed |\n\n**Minimal recommended config (no lockout risk):**\n\n```yaml\nchannels:\n  rocketchat:\n    dmPolicy: \"owner-approval\"\n    groupPolicy: \"owner-approval\"\n    \n    ownerApproval:\n      enabled: true\n      approvers:\n        - \"@yourusername\"           # You can DM the bot + approve in any room\n      notifyChannels:\n        - \"room:YOUR_MAIN_ROOM_ID\"  # This room is auto-approved\n      notifyOnApprove: true\n      notifyOnDeny: true\n```\n\nThat's it! With this config:\n- ✅ You can DM the bot (you're an approver)\n- ✅ Your main room works (it's a notify channel)\n- ✅ Approval commands work in your main room\n- 🔒 Everyone else needs approval\n\n---\n\n### Manual Pre-Approval (Optional)\n\nIf you need to pre-approve additional users or rooms that aren't approvers/notifyChannels:\n\n**In config:**\n```yaml\nchannels:\n  rocketchat:\n    allowFrom:           # Pre-approved DM users\n      - \"@alice\"\n      - \"@bob\"\n    groupAllowFrom:      # Pre-approved rooms\n      - \"room:GENERAL\"\n      - \"#support\"\n```\n\n**Or via files:**\n```bash\n# Pre-approve DM users\necho '{\"version\":1,\"entries\":[\"alice\",\"bob\"]}' > ~/.openclaw/credentials/rocketchat-allowFrom.json\n\n# Pre-approve rooms\necho '{\"version\":1,\"entries\":[\"GENERAL\"]}' > ~/.openclaw/credentials/rocketchat-rooms-allowFrom.json\n```\n\n---\n\n### Per-Room User Access Control\n\nControl which users can interact with the bot **within each approved room**:\n\n```yaml\nchannels:\n  rocketchat:\n    rooms:\n      GENERAL:\n        # Response mode for approved users\n        responseMode: \"mention-only\"  # or \"always\" (default)\n        \n        # Who can interact (static list)\n        canInteract:\n          - \"@alice\"\n          - \"@bob\"\n          - \"role:admin\"\n          - \"role:moderator\"\n        \n        # Who can approve/deny users for THIS room\n        roomApprovers:\n          - \"role:owner\"          # Room owners\n          - \"role:moderator\"\n          - \"@marshal\"\n        \n        # When non-approved user @mentions bot\n        onMentionUnauthorized: \"ignore\"  # or \"reply\" (sends \"not authorized\")\n      \n      SUPPORT:\n        # No restrictions - everyone in the room can interact\n        responseMode: \"always\"\n```\n\n**Room-level commands** (usable by `roomApprovers`):\n```\n--room-approve @alice     # Approve alice for THIS room only\n--room-deny @alice        # Remove alice from this room's approved list\n--room-list               # Show who's approved in this room\n```\n\n**How it works:**\n1. Room gets global approval (via `groupPolicy`)\n2. Per-room user check: is sender in `canInteract`, `roomApprovers`, or dynamically approved?\n3. If not approved:\n   - Silent ignore (unless `onMentionUnauthorized: \"reply\"`)\n4. If approved:\n   - Check `responseMode` — respond always or only when @mentioned\n\n**Storage:** `~/.openclaw/credentials/rocketchat-room-users.json`\n\n**Note:** Global approvers (`ownerApproval.approvers`) can interact in ANY room, regardless of per-room settings.\n\n---\n\n### CLI-Based Pairing\n\nIf you prefer CLI-based approval:\n\n```yaml\nchannels:\n  rocketchat:\n    dmPolicy: \"pairing\"\n    allowFrom:\n      - \"@admin\"           # pre-approved users\n```\n\n**Flow:**\n1. Unknown user sends a DM\n2. Bot replies with a pairing code: `\"Pairing required. Code: ABC12345\"`\n3. Owner approves via CLI:\n   ```bash\n   openclaw pairing list rocketchat\n   openclaw pairing approve rocketchat ABC12345\n   ```\n4. User is added to allowlist\n\n---\n\n### Why is the default \"open\"?\n\nUnlike public platforms (Telegram, WhatsApp, Signal), Rocket.Chat is typically:\n- Self-hosted with authenticated users\n- Behind organizational access controls\n- Already requires user accounts to message\n\nSo **server-level authentication acts as the primary gate**. Use `owner-approval` or `pairing` if you need per-user approval on top of that.\n\n## Security\n\nTreat Rocket.Chat `authToken` like a password.\n\nThis repository is intended to be publishable (no secrets committed).\n\n## License\n\nMIT","readmeFilename":"README.md"}