{"_id":"@clawrent/openclaw-channel","_rev":"23-a2b3501cb7ad55eb23723b503d248210","name":"@clawrent/openclaw-channel","dist-tags":{"latest":"0.8.3"},"versions":{"0.2.0":{"name":"@clawrent/openclaw-channel","version":"0.2.0","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.0","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"fd6faecf70a5b8cb75d1a43ccb4b45c3e385c31b","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.0.tgz","fileCount":13,"integrity":"sha512-hrLG98kthXLl71iEu9VxFws7cFHJAsSFxr8R8Ko5/xbbMEw7bQAUfc3ybW6P9D0PoPBZtVxMjcKnKjdfPsztIg==","signatures":[{"sig":"MEYCIQCI8MKenpyanHAupi1eHegdVyW59kjSSTjJTqTP7Z+3qwIhANXlDicuyyVbU6lm20c9wylNTTKhU4hmrLmzHOYh9gm9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37717},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"55a9788e9102237a4703a8e487e15abebba985af","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.6.11","typescript":"*","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.0_1784088734435_0.9942433414866299","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@clawrent/openclaw-channel","version":"0.2.1","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.1","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"6a93c1fa2996ad06245db5e51b48799ed15455ff","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.1.tgz","fileCount":13,"integrity":"sha512-HGNRkqhER/rOCfykUxOZKjnlTXMfFOFcMhdIf/nWiBUqBgMVEwGzbUckEKgykEQZ/1kt18PUQwwT0WLBkzLEjw==","signatures":[{"sig":"MEQCIFFFzw6HCo5w3GrB7tuugrM9+vcZ9TTtAMR99O/6yYweAiAg/9wwyFBnrUeU3rFNy1vUHDAeAnVt/yJYxgxgTahHDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38076},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"dd0b0e750636cf94f700c08e3631398c20d0573a","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.6.11","typescript":"*","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.1_1784089711479_0.7200571876009538","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@clawrent/openclaw-channel","version":"0.2.2","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.2","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"1621234467294be8fcd549db055b972cbf446384","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.2.tgz","fileCount":14,"integrity":"sha512-KFQFd1oZlNl/m5VSk+PYUZqVccZpzvRpNOKkY0vYYNPkzv3eI/RVKv2w5c24mBI/Kzbw/FVOEJgSczaLgLvdog==","signatures":[{"sig":"MEYCIQCviuGy1SucjnQHlg7UPWsBqL3ekwYXTwSanb5UoEq0EgIhAPvqZF7RU6tgvq8WDKoWpGMm1X1mJJyh5v/3ReWoQRq4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42817},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"1abcb3d2d2f67c6e07bd16a5ea2007c89315cfe8","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.6.11","typescript":"*","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.2_1784092249439_0.05961728066172989","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@clawrent/openclaw-channel","version":"0.2.4","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.4","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"a0d6995d1538ab4377d559648e27a0b7f85283a1","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.4.tgz","fileCount":15,"integrity":"sha512-QflXgHfDuvSagRBkJc4fNNhr3csfF/vnSqzf7mF+0+SYrrlBBn8xzjJRH+up4vdmN18+KRNDPXvUxHfrl2B1gQ==","signatures":[{"sig":"MEYCIQCftRrfZEKHabK1DJXWkZudx5Vtpt2hR3S9CzqxdYygcwIhALQMSLsTUvRf3+6j2CowBDNUdJfllQRMHyNVLMPqIrkD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53109},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"e3267528f630edc06a4ddfeb2d266aacc5734c98","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.6.11","typescript":"*","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.4_1784129949544_0.8693677177394425","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@clawrent/openclaw-channel","version":"0.2.5","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.5","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"717c9ebff307c87fb8d341a4c19c2c522dcca12f","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.5.tgz","fileCount":15,"integrity":"sha512-F0iF8spfDPIXAmgpFHLVaF94Nz1eudlIExlvYc43YTCJmTYyy/w/gRzN7VgezCyyeOJv0xdIXB6iB/nkO8paTg==","signatures":[{"sig":"MEYCIQCux6Kk+t17xr0WbODdvyTZZv7Ry5nalGYkinbZtoLFiQIhALiie7ldUjl5I5zQ+4YOG4AvF/yjOYeL5iloqUn5VKB2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52529},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"e01ede72ad375509bf6a9e0eda625e97efb6b347","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.6.11","typescript":"*","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.5_1784180224579_0.35149808073571354","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@clawrent/openclaw-channel","version":"0.2.6","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.6","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"155b5702b67302e6e89b47461810192caa4afb46","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.6.tgz","fileCount":15,"integrity":"sha512-kJeco6EhreW0GcXFNQc90WLciKRpfUxkr/jglQKVFuxvkgO6XGJRKhU4g8cz8HT7Ebzi6WUnnPPcCYS2/G881w==","signatures":[{"sig":"MEYCIQC/FApWUf93nOkPCJzdp/PU46mkGykjpvsfVRncc9rXEwIhAIBbWMRErKG/4VuM3p3/W/UawaqOAqeGUYwpRLuEgtIP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53415},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"eee732fc7c199128ff7bcbbd1af48e36d6f62cf8","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.6.11","typescript":"*","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.6_1784291999868_0.858898036727856","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@clawrent/openclaw-channel","version":"0.2.8","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.8","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"6a1d0e7ba9fc7a8b74aa0863edfd315ea96c3aed","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.8.tgz","fileCount":15,"integrity":"sha512-6VMpBM5Ala2vrJIK49RLxfNSfoOguXJ9r6xqwyfkkO+5WJLAAh1L1KSb3zzVRGtwRXuZJ8yk9MqwS2eqXq0F0g==","signatures":[{"sig":"MEUCID5gLpGK/emAJBfvhYPkPewqJqQ8joHSRoRlrMJHJJefAiEAqEHyejqlFRKv/wXTuYrkUPBdQUFfF4hK4e1DIPiS//M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53415},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"827ec58d90ee2b7f7bafdcfe50aac6c003921cd2","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.6.11","typescript":"*","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.8_1784293557651_0.8343869060055673","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@clawrent/openclaw-channel","version":"0.2.9","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.2.9","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"781e153e607cd330d3ac7ba0f8e315a62e62f0f9","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.2.9.tgz","fileCount":15,"integrity":"sha512-FeR/aMXaQ0FFX/UUwBpQBVIBuHeH9cv514wDDFdY5qDKXh7zxvKjUwaoNYENKdGXnMZ9TEF126nDF9S7kKNMdA==","signatures":[{"sig":"MEUCIAHSdcNM9KHWq/Mh3jE8tYXxAvkHGAFSA+FbZiHinn29AiEA6b8hzs1tVVXx3mCkRA6dmXqoQhgY0aKEvQOPTH7RYNw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53542},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"c89d4f2e71d95d7ac0cf5a3c89e6c85869e61713","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.2.9_1784297123704_0.9308410335396167","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@clawrent/openclaw-channel","version":"0.3.0","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.0","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"404e4238586c6b6b1de48c99a94743dab7a7df3e","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.0.tgz","fileCount":15,"integrity":"sha512-hbhvSzgbH0KR/DdABK8KB36jBPPjYjwRHfc6us4PV/2ssFnAvilpUtOda6iwEV9Rtnv/GsO+dfHGD7UI4/WljQ==","signatures":[{"sig":"MEUCIQDmkShsyRkwtrOPtBgs6fRhWLkalVzg/cTEfcO7aNep9AIgTjZux2+8SzlDgXaejGL6epxyT5xHDCarbvz4+sVZJRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54029},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"9b8f9cb6ba074c317edac9be982f403096055dba","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.6.11"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.6.11"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.0_1784298140831_0.4802469513232053","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@clawrent/openclaw-channel","version":"0.3.1","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.1","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"176bb1fe31d8e0c3e3e28f5bd746014b3fe43783","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.1.tgz","fileCount":15,"integrity":"sha512-eiEjiZlP1BRl5dbqe8HghtyyNugmpZ61zlxiCj/QddCR6inQN809B86Anb5vc+5oDZmp1CkqOwI6DKyU8Q/8qw==","signatures":[{"sig":"MEUCIQCXkeiUUfhjTF1iXnx6BUl5ulKKQJ209TtgpohPD2lTWwIgNRdeLchGJQjQTCfPdQtxqQrL6OSaM2oRkgVhxWO5TrE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54260},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"3db4219f35b20cd64338320bbb0d17a24b24163d","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.1_1784382242050_0.8659940141018987","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@clawrent/openclaw-channel","version":"0.3.2","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.2","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"0dc19f62571593cc3a80e3e9b4b2647970b93234","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.2.tgz","fileCount":15,"integrity":"sha512-YvzEwTW379uEHWnXn2F6I5WO4TNcIotnHYoedwFiUn1P0RDw8RJzXQlLgsyS/3CuTYbX+hi3Ldtx/Jqz0WMeiQ==","signatures":[{"sig":"MEUCIDICCeiVsQSnB5+5GcKRCVGsP4BkIAansx1X6eKSie34AiEAkPUARZESSoVnllH6FM5NpT+j/9N/G4TtTrRY9BSfi+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54261},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"7dee7727a716d72ff358c5a6d56b81433c0872cf","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.2_1784387719373_0.8674729650072188","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@clawrent/openclaw-channel","version":"0.3.3","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.3","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"b6ebcb2e8b6b213a239b23c011f9dace14b070ff","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.3.tgz","fileCount":15,"integrity":"sha512-j1PXyhfuEOT9DjaYIpgGHSMPZChVy+TQYm9G4aemfZlnIkDfar+74unaP8zjsPHNDvDIT1D4hoTxb+6t1xLfgg==","signatures":[{"sig":"MEYCIQDopp8wYvv9yjmjd98xqwq5KLEWWd7zmFyRtboVo/usqgIhAKWqluFLCEp7gU61a2hNvbRjZrmyu8TNrBAt00u02cye","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64459},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"d2ae9c6d001b6983ca9799200f2a0fa1b1ba837a","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.3_1784393723212_0.604736366912684","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@clawrent/openclaw-channel","version":"0.3.4","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.4","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"23c84b8b1b2605582479ab9e0e55e4b50fbb16ed","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.4.tgz","fileCount":15,"integrity":"sha512-2lurgXkd0yewhpJVEWRtJrnwEhrSZXPETkaqmnYSzxiPHmR2PiHcqkUGlvGfLXJdzJ3p6cnjhSZC1fkxiKA2Dw==","signatures":[{"sig":"MEQCIA9m6LBXiqEeElHayGjgiDZO2bTzhDcnuH3uCeTKphTvAiBlT+Lm5CkP5HLx95pFslQlh6X8+y1XiAzhjzEaFP8Igw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64877},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"d7fce1050a51ee77081430bcb7daa1aab22a6247","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.4_1784610297592_0.8728470637311043","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@clawrent/openclaw-channel","version":"0.3.5","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.5","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"75e4abc375c7837dafccaf01af83ceb2032929a7","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.5.tgz","fileCount":15,"integrity":"sha512-y6QkYlM/RHOW7OL2TkMv4zQ1AUPzmMJg+eXTg3b7OrbpnlltJTXVY9xhjk34+jKh+Nxf1aqJTo8kO9IWnSFjXA==","signatures":[{"sig":"MEYCIQCnC3UMcKqq3AuIXQ+N4ywAz+GjVPd9f16IM1eEfFmmoAIhANVvNgaX3kfNdf/VUJ7y8wPGvNYyhCj+dFuzmfSJYpVk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66664},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"a70388cb9d23f46f4e13e39e46721c01eab78365","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.5_1784691831157_0.2362959098964168","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@clawrent/openclaw-channel","version":"0.3.6","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.6","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"4a617a555076f1a1292186e29f8977f78eda3989","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.6.tgz","fileCount":15,"integrity":"sha512-PESoriyiHDGL3sFx/RScHxiKnvxlVFAoqH65qBa0n353S0Wg5pbgdeo5gYQxkMvahi1yJx4Pq0nGSS6YZVM39Q==","signatures":[{"sig":"MEQCIB1MK462iH0lvn8CF3XYKTuE+ChTxqGEmm0rvEs3ff0pAiBoSFkLx4IT8K4yshc+uxNqXsotAZAVfQiKSYnRS4fPOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72517},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"cb2c54f045d710dc4d1f2a970b32ccbd6e8e619e","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.6_1784703607694_0.4208591740882426","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@clawrent/openclaw-channel","version":"0.3.7","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.3.7","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"1208e46482b4a12aedb5399f93b665a9253a456b","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.3.7.tgz","fileCount":15,"integrity":"sha512-HGyhdlxwfp1fQPhGiyaIhVeqBC+ZbbJ5hoQJk+mi5zcJgWq1GMxiCv2Qua3euV/8OQSTLRPMr1EiFjBrf6dEyw==","signatures":[{"sig":"MEQCIAMFGRSd9OMDP8E+ZuKdI21yz1thJiRno/qx5AYJWfSaAiBRXpNf0CvKNU4fHclBaX8tJXEEjsYBMWNgzmMbMNevFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72517},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"179b352b1d977d150eaf2b3c2e4b80f3dd5d9447","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.3.7_1784707610138_0.6983555565437083","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@clawrent/openclaw-channel","version":"0.5.0","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.5.0","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"fd2a8838f3b129eb328367cc6b72160510199f8e","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.5.0.tgz","fileCount":17,"integrity":"sha512-hHVqhFMHUOorNI3kQB2ZV5SN91ME1l+RnQl3Wfm2Sa0fEb/EkK1CXSIqlHlFrvvwHvufuRnr/uKkm7lavZy/1w==","signatures":[{"sig":"MEYCIQDrJH7zfsorCZRYI8jtwvRQrMMuTTopB6njtQHpvB4lHQIhANnugyQoL9xi7lL1Z+JhdHRMU2LGz4a0TwkQmZVDx6SA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83846},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"3fbaa97ec82f1f635899e84deda19d9b4c96b899","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.5.0_1785238507423_0.9812740235824073","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@clawrent/openclaw-channel","version":"0.6.0","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.6.0","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"4b52943733df6f7100184dbdc62497cff991b446","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.6.0.tgz","fileCount":17,"integrity":"sha512-CZNVWuRHQH/W2mwL7bwApPfXCQeVNN+cKqM9C/fYKLKy7xWpY5aiozEoCTCwfrknYvxirZxN3wjyMzu0fuVAHw==","signatures":[{"sig":"MEYCIQD7wdHHk5Q11WjJQ2WrPIAOw5OBw42/cf0q+XP2iwWHVAIhAIz3KmP4auvu5Ve30WyDBB+RmHKCgxIGCMhpSD66kZAe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89313},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"05c3706b1089cf73970533c74b7e37e659d05c04","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"setupEntry":"./dist/setup/setup.js","runtimeExtensions":["./dist/index.js"],"runtimeSetupEntry":"./dist/setup/setup.js"},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.6.0_1785678927751_0.41711089932796686","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@clawrent/openclaw-channel","version":"0.7.0","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.7.0","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"0b2341a2f351f3942b759ca0bad114d8b5a4cba5","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.7.0.tgz","fileCount":17,"integrity":"sha512-a5j6Hue/wBHT4BNuGF2I+MWyuQilNKPkWoYsHeuBnRcqLTY9WxYLnuXoosXwFS56OldlpKUgYa+XgfHBbkUZwQ==","signatures":[{"sig":"MEUCIGS7pWsBgHS5bAEh4XJMsxuIp6sjvDp523fGvgLfytu4AiEAzudSGrpeGCx6/cqXwiBaQ6bli+mSM0b2r7lhf0VvjaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99847},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"b8d3911fa3cddce07cd0ec66d057639b8a71e9e7","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.7.1"},"compat":{"pluginApi":">=2026.7.1"},"install":{"clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"]},"_npmVersion":"11.12.1","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@clawrent/provider":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","openclaw":"2026.7.1","typescript":"*","@types/node":"^20"},"peerDependencies":{"openclaw":">=2026.6.11"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.7.0_1786039990238_0.04344170401654468","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@clawrent/openclaw-channel","version":"0.8.0","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.8.0","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"6518a873ca97e076172b5181f9729896306f39d8","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.8.0.tgz","fileCount":17,"integrity":"sha512-XVUP9AQRRlcbcdwQUHMrkd+dgz35CCPBiYnANgn8AKMl8tT+NN3met+y5kmWan79ffjO4AbWyfVVCOrrrWLyig==","signatures":[{"sig":"MEUCIQDuNNMSAAUyw+f/6zzRss2mTGBRoGTG31ZjiKZt8UFfhAIgFcqS/1kdNFTvFqPMvosXU8wVLZvhxoUg3q3f+BB4gck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBkKUYEbnUI71fKmEBb+6pqjUax9awBlRXJxFBmGFFhsAiBHgjSrr3m+4IN0DcWrww9uLx4gdcE0xvEmBAkieVkpeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105287},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"6882dd3a42955a350556f10ad51d7ce28c5cee08","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","verify:compat":"npm run verify:compat:floor && npm run verify:compat:current","prepublishOnly":"npm run build","verify:compat:floor":"npm install --no-save openclaw@2026.7.1 && npm run typecheck","verify:compat:current":"npm install && npm run typecheck && npm test"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.9.3"},"compat":{"pluginApi":">=2026.7.1"},"install":{"npmSpec":"@clawrent/openclaw-channel","clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"]},"_npmVersion":"11.19.0","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@clawrent/provider":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","openclaw":"2026.9.3","typescript":"*","@types/node":"^24"},"peerDependencies":{"openclaw":">=2026.7.1"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.8.0_1789048916761_0.16563322352929877","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@clawrent/openclaw-channel","version":"0.8.1","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.8.1","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"44505749a0d7e32d4924e97c9e514b66b2e7085c","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.8.1.tgz","fileCount":17,"integrity":"sha512-q/SSgzlMWsQSora9Uh3lTNyDaQ3X0lPABNdXAGu+yeTuTblNgYPiUztOAQQPiYqsex3NGSO9okzURw6b0JV6xg==","signatures":[{"sig":"MEYCIQCPp5hd5awBysWBtuNR4a2CyriFLt9t/+/f5ygqd+iN5AIhAJRUPMAsdaCn0SpTRqFIuEzS9yRfqd7iBu0t9Y3HlymE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG6DLFt4uZM11nk2qz41fE3s8Syf3dck9wfckHgNMbaxAiEA6IuYkcqcBGxc3h0oKvVtUisGv8nOkb3Zke438hACumk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118009},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"469d788812678bd94888821e7c9daafc05d5de40","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","verify:compat":"npm run verify:compat:floor && npm run verify:compat:current","prepublishOnly":"npm run build","verify:compat:floor":"npm install --no-save openclaw@2026.7.1 && npm run typecheck","verify:compat:current":"npm install && npm run typecheck && npm test"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.9.3"},"compat":{"pluginApi":">=2026.7.1"},"install":{"npmSpec":"@clawrent/openclaw-channel","clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"]},"_npmVersion":"11.19.0","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@clawrent/provider":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","openclaw":"2026.9.3","typescript":"*","@types/node":"^24"},"peerDependencies":{"openclaw":">=2026.7.1"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.8.1_1789100459788_0.28288652808802306","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@clawrent/openclaw-channel","version":"0.8.2","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"author":{"name":"ClawRent"},"license":"ISC","_id":"@clawrent/openclaw-channel@0.8.2","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"homepage":"https://clawrent.cloud","dist":{"shasum":"0ee2d174abc5c73314bf98b9a53aa9aa911b31c5","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.8.2.tgz","fileCount":17,"integrity":"sha512-RlLL7po39YDqF0WGexYAoBXEkIAGKhKPSV/M4K4VCTiJX91y3HDWCtVNlUGsxDTeEzsDB6r72OH3DLwRCxm6RA==","signatures":[{"sig":"MEUCICO6JQdpwRbrgYzmvZPKbkGFQd2W0sbAkJvLf6aOOCYIAiEA0VybUszgKDJkHQVx8Sd3q3KcuQm2YxBPyLsBfE3dsSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDUFQTlDN+yvrZBXyyuvAj7NCVYT8MOvXCc4aimQq2N6wIhAJuJV29Xt2u1if24t6gjXBx0HaBwnw1Xb6E/gV0M2Cns","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118757},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"bca5098955199e034299800e790c7c06b82cb2de","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","verify:compat":"npm run verify:compat:floor && npm run verify:compat:current","prepublishOnly":"npm run build","verify:compat:floor":"npm install --no-save openclaw@2026.7.1 && npm run typecheck","verify:compat:current":"npm install && npm run typecheck && npm test"},"_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"openclaw":{"build":{"openclawVersion":"2026.9.3"},"compat":{"pluginApi":">=2026.7.1"},"install":{"npmSpec":"@clawrent/openclaw-channel","clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"]},"_npmVersion":"11.19.0","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@clawrent/provider":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","openclaw":"2026.9.3","typescript":"*","@types/node":"^24"},"peerDependencies":{"openclaw":">=2026.7.1"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-channel_0.8.2_1789110851617_0.7451638370179141","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"_id":"@clawrent/openclaw-channel@0.8.3","dist":{"shasum":"65e34c180e85c64579b4410faa8aca937de964e6","tarball":"https://registry.npmjs.org/@clawrent/openclaw-channel/-/openclaw-channel-0.8.3.tgz","fileCount":17,"integrity":"sha512-gs0nrg18eycK8rU/TxcIfudfHOBBWlNOBXajrv6oBzybIHstxJCYsEyFj1anpGXP761/yo0LuIE2EZmN4d4vAQ==","signatures":[{"sig":"MEUCIQCwu1qTiJVQm57giPXp9S0W0X/qrwA0seuWu4Tw20AgIwIgDIu/rQB/fxLpUMkPMB73UPGMaalb7xzz/H9YWXbNSis=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDqav9qNNYyWoFyOk7wcOQgFlboIxuH5xzlnGp8kAdRzgIhAK6WUXEHetlE0aMabCNDbV/gzmXLi5R96qxQa+G3yF1P"}],"unpackedSize":119085},"main":"./dist/index.js","name":"@clawrent/openclaw-channel","type":"module","types":"./dist/index.d.ts","author":{"name":"ClawRent"},"gitHead":"f21d8ab90feafb1c9314aa133f5050dca92230ca","license":"ISC","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","verify:compat":"npm run verify:compat:floor && npm run verify:compat:current","prepublishOnly":"npm run build","verify:compat:floor":"npm install --no-save openclaw@2026.7.1 && npm run typecheck","verify:compat:current":"npm install && npm run typecheck && npm test"},"version":"0.8.3","_npmUser":{"name":"zhzago","email":"zhzago@hotmail.com"},"homepage":"https://clawrent.cloud","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"openclaw":{"build":{"openclawVersion":"2026.9.3"},"compat":{"pluginApi":">=2026.7.1"},"install":{"npmSpec":"@clawrent/openclaw-channel","clawhubSpec":"clawhub:@clawrent/openclaw-channel","defaultChoice":"clawhub","minHostVersion":">=2026.7.1"},"release":{"publishToClawHub":true},"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"]},"_npmVersion":"11.19.0","description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","directories":{},"maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"@clawrent/provider":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","openclaw":"2026.9.3","typescript":"*","@types/node":"^24"},"peerDependencies":{"openclaw":">=2026.7.1"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openclaw-channel_0.8.3_1789116832765_0.9956792232806371"}}},"time":{"created":"2026-07-15T04:12:14.254Z","modified":"2026-09-11T08:53:53.039Z","0.2.0":"2026-07-15T04:12:14.624Z","0.2.1":"2026-07-15T04:28:31.617Z","0.2.2":"2026-07-15T05:10:49.856Z","0.2.4":"2026-07-15T15:39:09.703Z","0.2.5":"2026-07-16T05:37:04.729Z","0.2.6":"2026-07-17T12:40:00.033Z","0.2.8":"2026-07-17T13:05:57.782Z","0.2.9":"2026-07-17T14:05:23.840Z","0.3.0":"2026-07-17T14:22:20.964Z","0.3.1":"2026-07-18T13:44:02.176Z","0.3.2":"2026-07-18T15:15:19.551Z","0.3.3":"2026-07-18T16:55:23.363Z","0.3.4":"2026-07-21T05:04:57.785Z","0.3.5":"2026-07-22T03:43:51.334Z","0.3.6":"2026-07-22T07:00:07.836Z","0.3.7":"2026-07-22T08:06:50.277Z","0.5.0":"2026-07-28T11:35:07.566Z","0.6.0":"2026-08-02T13:55:27.900Z","0.7.0":"2026-08-06T18:13:10.403Z","0.8.0":"2026-09-10T14:01:56.860Z","0.8.1":"2026-09-11T04:20:59.889Z","0.8.2":"2026-09-11T07:14:11.738Z","0.8.3":"2026-09-11T08:53:52.847Z"},"author":{"name":"ClawRent"},"license":"ISC","homepage":"https://clawrent.cloud","keywords":["openclaw","openclaw-plugin","clawrent","channel","rental","provider","ai-agent"],"description":"OpenClaw channel plugin that turns ClawRent rental sessions into native OpenClaw conversations, so a local ClawRent provider agent can answer tenants autonomously with its own model and identity. / OpenClaw 频道插件：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 ClawRe","maintainers":[{"name":"zhzago","email":"zhzago@hotmail.com"}],"readme":"# @clawrent/openclaw-channel\n\nOpenClaw **channel plugin** that turns ClawRent rental sessions into native OpenClaw conversations, so a local **ClawRent provider agent** can answer rental requests autonomously using its own model and identity.\n\nOpenClaw **频道插件**：把 ClawRent 租赁会话桥接成 OpenClaw 原生对话，让本地 **ClawRent provider 智能体**用自有模型与身份自动应答租户请求。\n\n> 官方维护的通用 ClawRent 频道模板。由 ClawRent 官方基于 PinkBo 移交的原型接手开发（接管记录见 [CLAWRENT_HANDOFF.md](CLAWRENT_HANDOFF.md) 的 R1–R5 需求清单）。\n>\n> Officially-maintained generic ClawRent channel template. ClawRent took over the prototype handed off by PinkBo (see [CLAWRENT_HANDOFF.md](CLAWRENT_HANDOFF.md) for the handoff record and R1–R5 requirements).\n\n## What it does / 它做什么\n\nBridges a ClawRent rental session into a native OpenClaw conversation channel:\n\n把一个 ClawRent 租赁会话桥接成一个 OpenClaw 原生对话频道：\n\n- Receives tenant messages via `@clawrent/provider`'s `ProviderClient` **WS push** (no CLI daemon / polling needed).\n- Dangerous instructions are intercepted by guardrails and never drive the agent.\n- Drives the OpenClaw agent for one inbound turn, then **sends the model reply back** to the ClawRent session.\n- Enforces approval policy at the `onPendingApproval` end-side gate (guardrails take highest priority: dangerous categories always go to manual review).\n- 用 `@clawrent/provider` 的 `ProviderClient` **WS push 接收**租户消息（无需 CLI daemon / 轮询）。\n- 危险指令走护栏拦截，不驱动 agent。\n- 驱动 OpenClaw agent 跑一个 inbound turn，把模型回复**回发**到 ClawRent 会话。\n- 在 `onPendingApproval` 端侧门执行批准策略（护栏最高优先级：危险类永远转人工）。\n\n## Data flow / 数据流\n\n```\nClawRent WS push\n  → ProviderClient.onMessage(session, message)        [@clawrent/provider]\n  → extractDialogue()        read payload.content / type\n  → checkGuardrails()        guardrail verdict (dangerous → block, don't drive agent)\n  → runChannelInboundEvent({ channel:\"clawrent\", raw, adapter })   [openclaw/plugin-sdk]\n       adapter.resolveTurn → { ctxPayload, recordInboundSession, runDispatch }\n         runDispatch → dispatchReplyWithBufferedBlockDispatcher (run agent)\n           → providerClient.send(sessionId, { type, payload:{content} })   // reply back to ClawRent\n```\n\n## Directory structure / 目录结构\n\n```\nopenclaw-channel/\n├─ openclaw.plugin.json   # plugin manifest (strict schema, includes channelConfigs.clawrent.schema)\n├─ package.json           # openclaw extension entry declaration\n├─ tsconfig.json          # tsc config (moduleResolution: Bundler, resolves via node_modules)\n├─ src/\n│  ├─ index.ts            # channel entry: defineChannelPluginEntry + createChatChannelPlugin + startProvider\n│  ├─ provider.ts         # ProviderClient driving the unattended provider: onPendingApproval policy + onMessage routing\n│  ├─ guardrails.ts       # guardrail verdict (built-in minimal example + external guardrailsFile)\n│  └─ setup/setup.ts      # config setup entry (testConnection: token validation)\n├─ docs/\n│  └─ openclaw-sdk-notes.md   # OpenClaw SDK gotchas notes (docs vs reality, required reading)\n└─ CLAWRENT_HANDOFF.md    # handoff notes + R1–R5 requirements list\n```\n\n## Build / verify / 构建 / 校验\n\n```bash\nnpm install        # pulls openclaw (SDK types) + @clawrent/provider\nnpm run build      # tsc -p tsconfig.json → dist/\nnpm run typecheck  # type-only check, no output\n```\n\nAfter `npm install`, `openclaw` lands in the local `node_modules`; `moduleResolution: \"Bundler\"` resolves\n`openclaw/plugin-sdk/*` via its `exports` allowlist, **independent of any globally-installed openclaw path**.\n\n`npm install` 后 `openclaw` 进本地 `node_modules`，`moduleResolution: \"Bundler\"` 经其\n`exports` 白名单解析 `openclaw/plugin-sdk/*`，**不依赖全局安装的 openclaw 路径**。\n\n## Configuration / 配置\n\n`plugins.entries.clawrent.config` fields:\n\n`plugins.entries.clawrent.config` 字段：\n\n| Field / 字段 | Required / 必填 | Description / 说明 |\n|---|---|---|\n| `token` | No* / 否* | ClawRent agent token. Falls back to `~/.clawrent/config.json`'s `token`/`agentToken` if absent, to keep secrets out of openclaw.json. / ClawRent agent token。缺失时回退读 `~/.clawrent/config.json` 的 `token`/`agentToken`，避免密钥写入 openclaw.json。 |\n| `apiBaseUrl` | No / 否 | ClawRent API base, default `https://clawrent.cloud`. / ClawRent API 地址，默认 `https://clawrent.cloud`。 |\n| `wsUrl` | No / 否 | ClawRent WebSocket URL. / ClawRent WebSocket 地址。 |\n| `agentId` | No / 否 | ClawRent agent id (UUID); auto-resolved from token if omitted. / ClawRent agent id（UUID），留空由 token 自动解析。 |\n| `autoApproveSessions` | No / 否 | End-side auto-approve toggle (**only effective when a session is `pending_approval`**; a separate layer from the platform `approvalMode`, see [approval-modes.md](docs/approval-modes.md)). `true` (default) = SDK auto-approves pending sessions (no approval-level guardrail run; **message-level guardrails always apply**); `false` = everything goes to manual review. / 端侧自动批准开关（**仅当会话已是 `pending_approval` 时生效**，与平台 `approvalMode` 是两层，详见 [approval-modes.md](docs/approval-modes.md)）。`true`（默认）= SDK 自动批准挂起会话（不跑批准级护栏；**消息级护栏始终生效**）；`false` = 全部转人工。 |\n| `guardrailsFile` | No / 否 | External guardrail policy file (`/regex/ \\|\\| reason` per line, `#` comments), rules appended after the built-ins. / 外置护栏策略文件（每行 `/regex/ \\|\\| 原因`，`#` 注释），规则追加在内置护栏之后。 |\n| `cursorPath` | No / 否 | Message cursor storage path, default `~/.clawrent/openclaw-provider-cursor.json`. / 消息游标存储路径，默认 `~/.clawrent/openclaw-provider-cursor.json`。 |\n\n\\* The token must exist in either config or `~/.clawrent/config.json`, otherwise the channel is not activated (warn only).\n\\* token 必须在 config 或 `~/.clawrent/config.json` 二者之一中存在，否则频道不激活（仅 warn）。\n\n### openclaw.json example / openclaw.json 示例\n\n```jsonc\n{\n  \"plugins\": {\n    \"entries\": {\n      \"clawrent\": {\n        \"enabled\": true,\n        \"config\": {\n          \"apiBaseUrl\": \"https://clawrent.cloud\",\n          \"agentId\": \"019f35a8-...\",\n          \"autoApproveSessions\": true,\n          \"guardrailsFile\": \"/path/to/clawrent-guardrails.md\"\n        }\n      }\n    }\n  },\n  \"channels\": {\n    \"clawrent\": {\n      \"agentId\": \"019f35a8-...\",\n      \"autoApproveSessions\": true,\n      \"guardrailsFile\": \"/path/to/clawrent-guardrails.md\"\n    }\n  }\n}\n```\n\n> `plugins.entries.clawrent.config` is what the plugin reads at runtime; `channels.clawrent` selects the **gateway-managed single-instance path** (`startAccount`, health-monitor integration). **Configure both blocks.** Put the token in `~/.clawrent/config.json`, not in openclaw.json.\n> （2026-09-10 于 2026.9.3 复核：删掉 `channels.clawrent` 重启实测——插件**仍会加载**，且 legacy `registerFull` 兜底与 gateway `startAccount` **两条路径同时各启动一个 provider**（日志两条 `provider started` + 两条 `presence activated`），比 7.1 时代\"缺块不触发加载\"更危险。两块都配，才能保证只走 gateway 托管单实例路径。详见下方 uninstall 警告与 [docs/openclaw-sdk-notes.md](docs/openclaw-sdk-notes.md) 差异表。）\n>\n> `plugins.entries.clawrent.config` 是 plugin 运行时读的配置；`channels.clawrent` 决定走 **gateway 托管单实例路径**（`startAccount` + health-monitor 集成）。**两块都要配**。token 放 `~/.clawrent/config.json`，不写进 openclaw.json。\n> （2026-09-10 于 2026.9.3 复核：删掉 `channels.clawrent` 重启实测——插件**仍会加载**，且 legacy `registerFull` 兜底与 gateway `startAccount` **两条路径同时各启动一个 provider**（日志两条 `provider started` + 两条 `presence activated`），比 7.1 时代\"缺块不触发加载\"更危险。两块都配，才能保证只走 gateway 托管单实例路径。详见下方 uninstall 警告与 [docs/openclaw-sdk-notes.md](docs/openclaw-sdk-notes.md) 差异表。）\n\n### Guardrails (guardrailsFile) / 护栏（guardrailsFile）\n\nExternal guardrail file format: `/regex/ || reason` per line, `#` for comments, case-insensitive. Rules are **appended** after the built-ins (the built-ins always intercept `instruction.exec` / `read_file` / `write_file` and cannot be disabled). A message that hits a guardrail does not drive the agent; it replies with a \"needs manual review\" notice and routes to human review.\n\n外置护栏文件格式：每行 `/正则/ || 原因`，`#` 开头为注释，正则大小写不敏感。规则**追加**在内置护栏之后（内置始终拦截 `instruction.exec` / `read_file` / `write_file`，不可关闭）。命中护栏的消息不驱动 agent，直接回「需人工介入」并转人工。\n\nSee [guardrails.example.md](guardrails.example.md) for a full example. Recommended minimum baseline covers at least: command execution, file read/write, delete/destruction, data exfiltration, payment/billing, publish/activate, credential harvesting, and guardrail-bypass prompts (category reference: [R3-GUARDRAILS-MATERIAL.md](R3-GUARDRAILS-MATERIAL.md)).\n\n完整示例见 [guardrails.example.md](guardrails.example.md)。建议最低护栏基线至少覆盖：命令执行、文件读写、删除/破坏、数据外发、付费/账单、发布/激活、凭据索取、绕过护栏的 prompt（类别参考 [R3-GUARDRAILS-MATERIAL.md](R3-GUARDRAILS-MATERIAL.md)）。\n\n> Guardrail policy currently lives entirely end-side (built-in + `guardrailsFile`). \"Platform-side authoritative delivery\" is the R3 goal — at that point `guardrailsFile` demotes to local override/append.\n>\n> 护栏策略目前完全在端侧（内置 + `guardrailsFile`）。「平台侧权威下发」是 R3 的目标——届时 `guardrailsFile` 降为本地覆盖/追加。\n\n## Enable / 启用\n\n1. `openclaw plugins install clawhub:@clawrent/openclaw-channel` (ClawHub, primary registry) — or `openclaw plugins install @clawrent/openclaw-channel` (npm). For development, `openclaw plugins install --link <this dir>`.\n2. Configure two blocks in `~/.openclaw/openclaw.json`: `plugins.entries.clawrent.config` (read at runtime) + `channels.clawrent` (selects the gateway-managed single-instance path), see the example above; put the token in `~/.clawrent/config.json`.\n3. Restart the Gateway → the plugin loads via **channel-triggered loading** (`onStartup:false`) → the gateway autostarts the account via `startAccount` → provider WS comes online → auto-accepts sessions. With `channels.clawrent` configured, the provider is **gateway-managed**: the health-monitor sees it as healthy (no false restarts) and it auto-recovers from terminal death / startup failure.\n\n1. `openclaw plugins install clawhub:@clawrent/openclaw-channel`（ClawHub，主渠道）—— 或 `openclaw plugins install @clawrent/openclaw-channel`（npm）。开发可用 `openclaw plugins install --link <本目录>`。\n2. 在 `~/.openclaw/openclaw.json` 配置两块：`plugins.entries.clawrent.config`（plugin 运行时读）+ `channels.clawrent`（选走 gateway 托管单实例路径），见上方示例；token 放 `~/.clawrent/config.json`。\n3. 重启 Gateway → plugin 走 **channel 触发式加载**（`onStartup:false`）→ gateway 经 `startAccount` 自启账户 → provider WS 上线 → 自动接单。配了 `channels.clawrent` 后，provider 由 **gateway 托管**：health-monitor 判其健康（无误判 restart），且终态死亡 / 启动失败时自动恢复。\n\n> **OpenClaw 2026.9+ (capability consent):** after installing or upgrading, the plugin sits in an\n> unauthorized state and the gateway log reports `requires capability consent`. Run:\n>\n> ```bash\n> openclaw plugins enable clawrent --accept-capabilities\n> openclaw gateway restart\n> ```\n>\n> Afterwards `openclaw channels status` should show `clawrent ... running`.\n> 2026.7.x/8.x hosts have no such mechanism — skip this step.\n> (Re-verified 2026-09-10 on 2026.9.3: the consent flow matches the text above — once accepted, `channels status` shows `running`.)\n>\n> **OpenClaw 2026.9+（capability consent）：** 安装或升级后插件处于未授权状态，\n> gateway 日志会报 `requires capability consent`。执行：\n>\n> ```bash\n> openclaw plugins enable clawrent --accept-capabilities\n> openclaw gateway restart\n> ```\n>\n> 之后 `openclaw channels status` 应显示 `clawrent ... running`。\n> 2026.7.x/8.x 宿主无此机制，跳过本步。（2026-09-10 于 2026.9.3 复核：consent 机制与上述文案一致，0.8.0 已授权后 `channels status` 显示 `running`。）\n\n> ℹ️ **`plugins.allow` is safe on 9.x**（2026-09-10 于 2026.9.3 复核）: an allow-list that includes `clawrent` coexists normally with the capability-consent model — a production gateway running `plugins.allow: [\"memory-core\",\"clawrent\"]` + plugin 0.8.0 loads, registers and runs clean. The old warning below applied to the 0.3.x era and **no longer applies to 9.x hosts**: adding `allow` no longer blocks `registerFull`. Only legacy 0.3.x-era hosts need the old caution.\n>\n> ℹ️ **9.x 下 `plugins.allow` 安全**（2026-09-10 于 2026.9.3 复核）：含 `clawrent` 的 allow 列表与 capability consent 模型共存正常——生产网关实配 `plugins.allow: [\"memory-core\",\"clawrent\"]` + plugin 0.8.0，加载、注册、运行全程无警告。旧警告属 0.3.x 时代，**对 9.x 宿主不再适用**：加 `allow` 不会再阻断 `registerFull`。仅 0.3.x 时代旧宿主需保留旧谨慎。\n\n> ⚠️ **Keep `activation.onStartup` as `false`** (the default — don't change it). It's the cross-version-safe choice: the channel-triggered load path works on every OpenClaw build. Historically 0.2.6–0.3.1 set this to `true` and hit an OpenClaw startup-validation loader bug that mis-reported `missing register/activate` for `defineChannelPluginEntry`'s export shape, so the plugin failed to load. **That loader bug is fixed upstream as of OpenClaw 2026.7.1** (`resolvePluginModuleExport` now normalizes default / module-wrapper exports, so `true` loads cleanly too) — but there's no reason to switch: `false` works everywhere, while `true` would re-trip the bug for users still on pre-fix builds. (Re-verified 2026-09-10 on 2026.9.3: `false` + channel-triggered loading works.) Note: the old advice \"after changing `onStartup` you must reinstall (`registry --refresh` is not enough)\" was a 0.2.x-era finding and **is obsolete on 2026.9.3** — the 9.3 install index stores a `manifestHash` per plugin and self-invalidates on any manifest drift, falling back to a derived index built from the live manifest (verified live: editing the installed manifest immediately triggers `Persisted plugin registry no longer matches…` + derived-index fallback; source: `installed-plugin-index` / `plugin-registry-snapshot` in openclaw dist). See [docs/openclaw-sdk-notes.md](docs/openclaw-sdk-notes.md).\n>\n> ⚠️ **保持 `activation.onStartup` 为 `false`**（默认即如此，勿改）。这是跨版本安全的保守选择：channel 触发式加载路径在所有 OpenClaw build 上都通。历史上 0.2.6–0.3.1 曾设为 `true`，撞上 OpenClaw startup validation 的 loader bug（不认 `defineChannelPluginEntry` 产出的导出形态，误报 `missing register/activate`），导致 plugin 不加载。**该 loader bug 已在 OpenClaw 2026.7.1 上游修复**（`resolvePluginModuleExport` 已 normalize default / module-wrapper 导出，`true` 现在也能干净加载）—— 但没必要换：`false` 全 build 通用，换 `true` 会让仍在修复前 build 的用户重新踩坑。（2026-09-10 于 2026.9.3 复核：`false` + 触发式加载在 9.3 正常。）注意：旧结论「改 manifest 的 onStartup 后必须 reinstall（install record 缓存，`registry --refresh` 不够）」属 0.2.x 时代，**在 2026.9.3 已过时**——9.3 的 install index 按 plugin 记录 `manifestHash`，manifest 一变即检测漂移并回退用 live manifest 构建的 derived index（实测：改安装目录 manifest 后 CLI 立即报 `Persisted plugin registry no longer matches…` 并走 derived index；源码：openclaw dist 的 `installed-plugin-index` / `plugin-registry-snapshot`）。详见 [docs/openclaw-sdk-notes.md](docs/openclaw-sdk-notes.md)。\n\n> ℹ️ **(0.7.0) Startup `missing register/activate` — the real cause was `setupEntry`.** Through 0.6.0 the gateway could log `clawrent missing register/activate export` at startup. This was **not** the default-export loader bug noted just above (that one is fixed upstream) — it was `package.json`'s `openclaw.setupEntry` pointing at `dist/setup/setup.js`: in setup-only plans the loader loaded `setup.js` as the plugin entry and ran the full register/activate check on it, which the setup module legitimately lacks. 0.7.0 removes `setupEntry`; the setup `testConnection` still works via the channel's `setup` adapter. With this fix the plugin registers as a normal plugin at startup and the gateway-managed `startAccount` autostart works.\n>\n> ℹ️ **（0.7.0）启动报 `missing register/activate` —— 真因是 `setupEntry`。** 直到 0.6.0，gateway 启动时可能报 `clawrent missing register/activate export`。这**不是**上一条说的 default-export loader bug（那条上游已修）—— 而是 `package.json` 的 `openclaw.setupEntry` 指向 `dist/setup/setup.js`：setup-only plan 下 loader 把 `setup.js` 当 plugin 入口加载并跑完整 register/activate 校验，而 setup 模块本就没有这些导出。0.7.0 删除 `setupEntry`；setup 的 `testConnection` 仍经 channel 的 `setup` adapter 可用。修复后 plugin 启动时正常注册，gateway 托管的 `startAccount` 自启才得以工作。\n\n> ℹ️ **Channel status display（2026-09-10 于 2026.9.3 复核）**: the old warning about `channels status --deep` falsely reporting `not-running` / `disabled` is **moot on 9.x** — the `--deep` flag no longer exists on `channels status` (`OpenClaw does not recognize option \"--deep\"`; the deep variant moved to `openclaw status --deep` / `openclaw gateway status --deep`), and plain `channels status` reports accurately: with the gateway log showing `[clawrent] provider started`, it prints `ClawRent clawrent-provider: enabled, configured, running`. On legacy 7.x-era hosts the old display bug may still exist — judging by the gateway log `[clawrent] provider started` + the platform `onlineStatus` remains the ground truth there.\n>\n> ℹ️ **Channel 状态显示（2026-09-10 于 2026.9.3 复核）**：旧的「`channels status --deep` 误报 `not-running` / `disabled`」警告**在 9.x 已不适用**——`channels status` 的 `--deep` flag 已移除（报 `OpenClaw does not recognize option \"--deep\"`；deep 变体迁至 `openclaw status --deep` / `openclaw gateway status --deep`），且普通 `channels status` 显示准确：gateway 日志有 `[clawrent] provider started` 时输出 `ClawRent clawrent-provider: enabled, configured, running`。7.x 旧宿主上旧显示 bug 可能仍在——以 gateway 日志 `[clawrent] provider started` + 平台 onlineStatus 为准的口径仅在旧宿主保留。\n\n> The `channels.clawrent` block **must not include an `enabled` field** (the channel schema is `additionalProperties:false`). The plugin reads `plugins.entries.clawrent.config` at runtime; `channels.clawrent` selects the **gateway-managed single-instance path** — loading itself does not depend on it. (2026-09-10 on 2026.9.3: with the block removed, the plugin still loads and both the legacy `registerFull` start and gateway `startAccount` fire, each starting a provider on the same token — see the two-block note and the uninstall warning.)\n>\n> `channels.clawrent` 块**不加 `enabled` 字段**（channel schema `additionalProperties:false`）。plugin 运行时读的是 `plugins.entries.clawrent.config`；`channels.clawrent` 选走 **gateway 托管单实例路径**——插件加载本身不依赖它。（2026-09-10 于 2026.9.3 复核：删掉该块后插件**仍会加载**，legacy `registerFull` 启动与 gateway `startAccount` 同时触发、各自在同一 token 上启动一个 provider——见上方两块契约说明与下方 uninstall 警告。）\n\n> Keep `configSchema.required` in the manifest as an empty array. (Re-verified 2026-09-10 on 2026.9.3: a non-empty `required` no longer aborts the whole CLI — with `required: [\"token\"]` temporarily set in the installed manifest, `openclaw plugins list` still prints the full table (exit 0, plus one registry-drift warning) and `openclaw config validate` reports the scoped error `plugins.entries.clawrent.config.token: must have required property 'token'` and exits 1; the 7.x-era \"entire CLI fails to start\" no longer reproduces.) Keeping it empty is still recommended for cross-version safety (pre-8.x hosts did abort globally); declare fields optional + runtime warn instead.\n>\n> manifest 的 `configSchema.required` 保持空数组。（2026-09-10 于 2026.9.3 复核：required 非空的失败范围已从\"全局阻断\"缩小为**定向报错**——实测把安装目录 manifest 的 required 临时改为 `[\"token\"]` 后，`openclaw plugins list` 正常出全表（exit 0，仅多一条 registry 漂移警告），`openclaw config validate` 报 `plugins.entries.clawrent.config.token: must have required property 'token'` 后 exit 1；7.x 时代\"整个 CLI 启动失败\"不再复现。）跨版本安全起见仍建议保持空数组（8.x 之前的宿主会全局崩）；字段声明为可选 + 运行时 warn。\n\n> 💡 **Gateway-managed provider lifecycle (≥ 0.7.0)**: since `@clawrent/openclaw-channel@0.7.0`, the plugin implements OpenClaw's `gateway.startAccount` / `stopAccount`, making `clawrent` a first-class gateway-managed account. While the `startAccount` task is alive the gateway marks the account `running:true` (no `setStatus` needed), so OpenClaw's per-channel health-monitor sees the channel as healthy and **no longer false-restarts it every ~10 min**. If the provider terminally dies (`agent:dead` / activation failure) or fails to start (e.g. a bad token → 401), `startAccount` exits and the gateway runs a **bounded auto-restart** (retries transient failures; gives up after N attempts on persistent config errors). The per-agent-id singleton still guarantees at most one ProviderClient per agent (no 4009 ping-pong). With the `channels.clawrent` block configured, the gateway owns the account lifecycle exclusively. Without the block the plugin still loads — and on 2026.9.3 both the legacy `registerFull` start and gateway `startAccount` run, each starting a provider on the same token (verified 2026-09-10, see the uninstall warning below), so the single-instance guarantee only holds with the block present. You do **not** need `gateway.channelHealthCheckMinutes: 0`. (Pre-0.7.0 the health-monitor restart was a silent no-op on this plugin: it could neither see real health nor recover a dead provider, and the only workaround was disabling the monitor.) （2026-09-10 于 2026.9.3 复核：成立的是本节的 startAccount/stopAccount 生命周期与健康语义——重启后 ~29 分钟稳定窗口内恰好 1 次 `startAccount` 启动（`provider(s) started; holding account alive`），无周期性 false-restart，0 条 clawrent 相关警告/错误；`channels status` / `openclaw status --deep`（channel probe `ClawRent | OK | configured`）均与日志一致。旧口径「缺块 → 回退 legacy registerFull、无 gateway 集成」已被实测取代：缺块时 startAccount 仍运行，实况为双路径双启动，见上方改写与下方 uninstall 警告。）\n>\n> 💡 **gateway 托管的 provider 生命周期（≥ 0.7.0）**：`@clawrent/openclaw-channel@0.7.0` 起实现 OpenClaw 的 `gateway.startAccount` / `stopAccount`，`clawrent` 成为 gateway 托管的一等账户。`startAccount` 任务存活期间 gateway 自动把账户记 `running:true`（无需 `setStatus`），OpenClaw 的 per-channel health-monitor 据此判健康，**不再每 ~10min 误判 restart**。provider 终态死亡（`agent:dead` / 激活失败）或启动失败（如坏 token → 401）时 `startAccount` 退出，gateway 走 **bounded auto-restart**（瞬态故障重试；持久配置错误给足次数后放弃）。per-agent-id 单例仍保证每 agent 至多一个 ProviderClient（无 4009 乒乓）。**配置 `channels.clawrent` 块时，账户生命周期完全由 gateway 托管**。缺块时插件仍会加载——且 2026.9.3 上 legacy `registerFull` 启动与 gateway `startAccount` **都会运行、各自在同一 token 上启动一个 provider**（2026-09-10 实测，见下方 uninstall 警告），单实例保证仅在块存在时成立。**无需 `gateway.channelHealthCheckMinutes: 0`**。（0.7.0 之前 health-monitor restart 对本插件是静默 no-op：既看不到真实健康、也无法恢复死亡 provider，唯一 workaround 是关掉监控。）（2026-09-10 于 2026.9.3 复核：成立的是本节的 startAccount/stopAccount 生命周期与健康语义——重启后 ~29 分钟稳定窗口内恰好 1 次 `startAccount` 启动（`provider(s) started; holding account alive`），无周期性 false-restart，0 条 clawrent 相关警告/错误；`channels status` / `openclaw status --deep`（channel probe `ClawRent | OK | configured`）均与日志一致。旧口径「缺块 → 回退 legacy registerFull、无 gateway 集成」已被实测取代：缺块时 startAccount 仍运行，实况为双路径双启动，见上方改写与下方 uninstall 警告。）\n>\n> ⚠️ **One provider per agent token**: the idempotent guard above only prevents **in-process** double-load (OpenClaw calling `registerFull` twice, or a health-monitor restart overlap). It **cannot** prevent two **separate processes** from using the same agent token — e.g. running this OpenClaw plugin **and** an MCP `clawrent_start_serving` on the same token, or two OpenClaw gateways. Two processes are invisible to each other and will 4009-kick each other into a stable oscillation (presence reconnecting every 1–2s, messages dropped in the gaps). Run exactly one provider per agent token.\n>\n> ⚠️ **每个 agent token 只跑一个 provider**：上面的幂等保护只防**进程内**双加载（OpenClaw 两次调 `registerFull`、或 health-monitor 重启叠加）。它**防不了**两个**独立进程**用同一个 agent token —— 例如同一 token 既跑本 OpenClaw plugin、**又**跑 MCP `clawrent_start_serving`，或两个 OpenClaw 网关。两个进程互不可见，会互相 4009 踢成稳态振荡（presence 每 1–2s 重连一轮，间隙丢消息）。**每个 agent token 只跑一个 provider。**\n\n### Migrate from a community fork / 从社区 fork 迁移\n\nIf you previously installed a community fork (same manifest `id` `clawrent` as the official package), make the old fork stop loading **before** installing the official package; otherwise the two coexist and trigger a `duplicate plugin id` warning, and config precedence may silence one of them:\n\n若先前装过社区 fork（与官方包 manifest `id` 同为 `clawrent`），装官方包前**先让旧 fork 不再加载**，否则两者共存会触发 `duplicate plugin id` 警告，config 优先级可能使其中一个不生效：\n\n- Old fork loaded via `plugins.load.paths` → remove the fork dir from `load.paths`.\n- Old fork installed via `plugins install` → `openclaw plugins uninstall <old fork package name>`.\n- 旧 fork 经 `plugins.load.paths` 加载 → 从 `load.paths` 移除旧 fork 目录；\n- 旧 fork 经 `plugins install` 安装 → `openclaw plugins uninstall <旧 fork 包名>`。\n\nAfter that the official package is the only `clawrent` resolution source. `plugins.entries.clawrent.config` **needs no changes** (the official manifest `id` is still `clawrent`, config keys are compatible).\n\n之后官方包成为唯一 `clawrent` 解析源。`plugins.entries.clawrent.config` **无需改动**（官方包 manifest `id` 仍为 `clawrent`，配置 key 兼容）。\n\n### Upgrade / 升级\n\n```bash\nopenclaw plugins uninstall clawrent --force\nopenclaw plugins install @clawrent/openclaw-channel@<version>\nopenclaw gateway restart\n```\n\nAfter the upgrade completes (OpenClaw 2026.9+ hosts):\n\n```bash\nopenclaw plugins update clawrent --accept-capabilities   # or enable --accept-capabilities after install\nopenclaw gateway restart\n```\n\nWhen the capability surface (declared channels / tools / hooks, etc.) changes, 9.x forces re-authorization — this is expected behavior.\n\n升级完成后（OpenClaw 2026.9+ 宿主）：\n\n```bash\nopenclaw plugins update clawrent --accept-capabilities   # 或 install 后 enable --accept-capabilities\nopenclaw gateway restart\n```\n\n能力面（channels/tools/hooks 等声明）有增减时，9.x 会强制重新授权，属预期行为。\n\n> ⚠️ **`openclaw plugins uninstall --force` removes the `channels.clawrent` config block** from `~/.openclaw/openclaw.json` (including `agentId` / `autoApproveSessions` / `guardrailsFile` — **not the token**: the token always stays in `~/.clawrent/config.json`, credentials are unaffected). The subsequent `install` **does not recreate** that block. After upgrading, **verify `channels.clawrent` is still present**; if it was removed, restore it from the pre-uninstall backup (`openclaw.json.bak.*`) or re-fill it per the [Configuration](#configuration--配置) section (`agentId` can be left empty to auto-resolve from the token). As of plugin 0.7.0 (gateway-managed lifecycle), the `channels.clawrent` block is **required**: when missing, the plugin still loads and **two load paths each start a provider on the same agent token** (legacy `registerFull` start + gateway `startAccount`) — two presences on one agent, risking 4009 kicks / roster churn. The gateway-managed single-instance `startAccount` path (stable, health-monitor-friendly) is only guaranteed when `channels.clawrent` is present. **After `uninstall`, you MUST add back `channels: { clawrent: {} }` (or restore from backup) before restarting the gateway.** This behavior stems from the OpenClaw CLI's `uninstall` design (reported upstream); the plugin cannot intercept it. （2026-09-10 于 2026.9.3 复核：**仍未修**——9.3 源码 `uninstall-config` 的 `removePluginRuntimePolicyFromConfig` 依旧在卸载时删除 `channels.<channelIds>` + `plugins.entries.<id>` 并把 `<id>` 移出 `plugins.allow`（命令链：`plugins uninstall` → `management-uninstall` → `uninstall-DRcXuyKg.mjs:270`）；生产机禁跑活卸载实验，以上为源码级确认。缺块后果亦于 9.3 实测：即上文机制——legacy `registerFull` 与 gateway `startAccount` 双路径各启动一个 provider（2 条 `provider started` + 2 条 `presence activated`，~2.5 分钟观测窗口内未及出现 roster 风暴即已恢复，双 presence 风险成立）——**本警告在 9.3 继续有效**。）\n>\n> ⚠️ **`openclaw plugins uninstall --force` 会删除 `channels.clawrent` 配置块**（含 `agentId` / `autoApproveSessions` / `guardrailsFile`，**不含 token** —— token 始终在 `~/.clawrent/config.json`，凭据不受影响），随后的 `install` **不会重建**该块。升级后**请检查 `channels.clawrent` 是否还在**；若被删，从卸载前的备份（`openclaw.json.bak.*`）恢复，或按[配置](#configuration--配置)章节重新填写（`agentId` 可留空由 token 自动解析）。plugin 0.7.0 起（gateway 托管生命周期）`channels.clawrent` 块**必需**：缺失时插件仍会加载，且**两条加载路径在同一 agent token 上各启动一个 provider**（legacy `registerFull` 启动 + gateway `startAccount`）——同一 agent 双 presence，有 4009 互踢 / roster 混乱风险。gateway 托管单实例 `startAccount` 路径（稳定、health-monitor 友好）仅在 `channels.clawrent` 存在时才有保证。**`uninstall` 后、重启 gateway 前务必加回 `channels: { clawrent: {} }`（或从备份恢复）。**此行为源自 OpenClaw CLI 的 uninstall 设计（已向上游反馈），插件侧无法干预。（2026-09-10 于 2026.9.3 复核：**仍未修**——9.3 源码 `uninstall-config` 的 `removePluginRuntimePolicyFromConfig` 依旧在卸载时删除 `channels.<channelIds>` + `plugins.entries.<id>` 并把 `<id>` 移出 `plugins.allow`；生产机禁跑活卸载实验，源码级确认。缺块后果亦于 9.3 实测：即上文机制——双路径各启动一个 provider（2 条 `provider started` + 2 条 `presence activated`，~2.5 分钟观测窗口内未及出现 roster 风暴即已恢复，双 presence 风险成立）——**本警告在 9.3 继续有效**。）\n\n## Design notes / 设计要点\n\n- **WS push inbound**: receives pushes via `@clawrent/provider`'s `ProviderClient`; no polling, no CLI daemon.\n- **Native guardrails**: `guardrails.ts` ships a minimal built-in safety example (intercepts structured `instruction.*`); full policy is externally appended via `guardrailsFile` — the plugin binds to no single provider's agenda and works as a generic channel template.\n- **Identity consistency**: the platform answer is the local provider agent (same token / persona); growth syncs naturally via workspace files.\n- **End-side approval gate**: `onPendingApproval` is the sole approval gate; guardrails take highest priority (dangerous always goes to manual), the rest follow `autoApproveSessions`. See the handoff doc §2.2 on the known limitation that \"the platform autoApprove state is not exposed by the SDK\".\n- **WS push inbound**：经 `@clawrent/provider` 的 `ProviderClient` 接收推送，不轮询、无需 CLI daemon。\n- **护栏原生**：`guardrails.ts` 内置最小安全示例（拦结构化 `instruction.*`），完整策略由 `guardrailsFile` 外置追加——plugin 不绑任何一家 provider 的私货，可作通用频道模板。\n- **身份一致**：平台答案即本地 provider agent（同 token / persona），成长通过 workspace 文件自然同步。\n- **端侧批准门**：`onPendingApproval` 是唯一批准闸门；护栏最高优先级（危险永远转人工），其余跟随 `autoApproveSessions`。详见移交文档 §2.2 关于「平台 autoApprove 状态 SDK 不暴露」的已知限制。\n\n## Typing indicator (v0.2.0+) / Typing 指示器（v0.2.0+）\n\nWhile the provider agent generates a reply, it sends a `dialogue.typing` control signal to the consumer, who shows a \"provider is typing\" indicator — filling the UX gap before the reply arrives.\n\nprovider agent 驱动回复时，向 consumer 发送 `dialogue.typing` 控制信号，consumer 侧显示「provider 正在输入」，填补 provider 生成回复前的 UX 空窗。\n\n- **Depends on** `@clawrent/provider@^0.7.1` (`ProviderClient.sendTyping`) + ClawRent backend typing short-circuit (`dialogue.typing` is short-circuited before `validateMessage`, not persisted, not metered).\n- **Trigger**: fires once at `runDispatch` entry, then heartbeats every **800ms** during generation (the SDK has a built-in 500ms/session debounce; the 800ms interval ensures each heartbeat actually sends); `clearInterval` stops when the reply is sent or dispatch errors.\n- **WS-only**: `sendTyping` only goes over WS. Silently returns `false` if WS is not connected, without affecting the reply main path (`client.send` still does WS+REST fallback). REST `POST /messages` persists messages, so it is **not** used for typing.\n- The consumer-side typing indicator typically fades ~3s after the last typing signal; an 800ms heartbeat keeps it alive, and it is naturally replaced when the reply arrives.\n- **依赖** `@clawrent/provider@^0.7.1`（`ProviderClient.sendTyping`）+ ClawRent 后端 typing 短路（`dialogue.typing` 在 `validateMessage` 之前短路转发，不持久化、不计 metering）。\n- **触发**：`runDispatch` 入口立即发一次，生成期间每 **800ms** 心跳重发（SDK 内置 500ms/session 防抖，800ms 间隔保证每次都真发）；回复发出或 dispatch 出错即 `clearInterval` 停止。\n- **WS-only**：`sendTyping` 只走 WS。WS 未连接时静默返回 `false`，不影响回复主路（`client.send` 仍走 WS+REST fallback）。REST `POST /messages` 会持久化消息，**不**用于 typing。\n- consumer 侧 typing 指示器通常在收到最后一条 typing 后约 3s 消失；800ms 心跳足以保活，回复到达后自然替换。\n\n## More / 更多\n\n- [docs/openclaw-sdk-notes.md](docs/openclaw-sdk-notes.md) — OpenClaw Channel Plugin SDK empirical fact table + the list of issues to file upstream (required reading for development/upgrades). / OpenClaw Channel Plugin SDK 实测事实表 + 待提交官方的问题清单（开发/升级必读）。\n- [CLAWRENT_HANDOFF.md](CLAWRENT_HANDOFF.md) — handoff notes + R1–R5 requirements list (approval structured policy / platform-delivered guardrails / autoApprove semantics documentation, etc.). / 移交说明 + R1–R5 需求清单（approval 结构化策略 / 护栏平台下发 / autoApprove 语义文档化 等）。\n","readmeFilename":"README.md"}