{"_id":"@carbonvoice/openclaw-extension","_rev":"5-e188ff2ef9e0ed4c668a5104b590b890","name":"@carbonvoice/openclaw-extension","dist-tags":{"latest":"2026.5.14"},"versions":{"2026.3.14":{"name":"@carbonvoice/openclaw-extension","version":"2026.3.14","license":"MIT","_id":"@carbonvoice/openclaw-extension@2026.3.14","maintainers":[{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/openclaw/openclaw#readme","bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"dist":{"shasum":"86131283f7c56ead0903e67cc8eba25f46e8db8c","tarball":"https://registry.npmjs.org/@carbonvoice/openclaw-extension/-/openclaw-extension-2026.3.14.tgz","fileCount":25,"integrity":"sha512-WK9aheaeBhY1zr9JZCT0yJEEUFia/IJbZH5d/C+H4dKzhqBxEg/vAAhvGGM5SWXjYK6IxB705y3pQgDwR9yRBw==","signatures":[{"sig":"MEQCIHH58an7/PwyOyoJ6vYaMscZiS2AwlaDPI7KBXYy7nUhAiBC6+d5BgjhANDvpBBKrCguN6Jz8BOukW+oQs/vqK2NCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143838},"type":"module","gitHead":"1f8a2bc7b02eb741e44ea19b2474d3f07ed3cf73","_npmUser":{"name":"russellclarvoepx","email":"russell@phononx.com"},"openclaw":{"build":{"openclawVersion":"2026.3.14"},"compat":{"pluginApi":">=2026.3.14"},"channel":{"id":"carbonvoice","blurb":"Carbon Voice API webhooks and text replies (voice/TTS on the Carbon Voice side).","label":"Carbon Voice","order":72,"docsPath":"/channels/carbonvoice","docsLabel":"carbonvoice","selectionLabel":"Carbon Voice"},"install":{"npmSpec":"@carbonvoice/openclaw-extension","localPath":"extensions/carbonvoice","defaultChoice":"npm","minHostVersion":">=2026.3.14"},"release":{"publishToNpm":false,"publishToClawHub":false},"extensions":["./index.ts"],"setupEntry":"./setup-entry.ts","releaseChecks":{"rootDependencyMirrorAllowlist":["socket.io-client"]}},"repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/carbonvoice"},"_npmVersion":"10.9.4","description":"OpenClaw Carbon Voice channel plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"socket.io-client":"^4.8.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"workspace:*","@openclaw/plugin-sdk":"workspace:*"},"peerDependencies":{"openclaw":">=2026.3.14"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-extension_2026.3.14_1778596804276_0.7090205201140978","host":"s3://npm-registry-packages-npm-production"}},"2026.5.12-beta.1":{"name":"@carbonvoice/openclaw-extension","version":"2026.5.12-beta.1","license":"MIT","_id":"@carbonvoice/openclaw-extension@2026.5.12-beta.1","maintainers":[{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/openclaw/openclaw#readme","bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"dist":{"shasum":"1438e979b65ad919ff082adeca355001c8022b5d","tarball":"https://registry.npmjs.org/@carbonvoice/openclaw-extension/-/openclaw-extension-2026.5.12-beta.1.tgz","fileCount":25,"integrity":"sha512-jvn7SCFsEQitqt+GoL3D80kLw3C6Z3T9kTRRG3wSME7/z5I/d6GnfqLDZFKxctlwg4kwxLnnhBfPUirv5HJP5A==","signatures":[{"sig":"MEYCIQDGNYAGxjpFWSoLBnzavcpPYzJbuz/0m187Rp52AdZzQgIhAJAx/+I3qxGhcSpZd3LpjXIrhrlDOlaSSH+Xo/OBk5ei","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145376},"type":"module","gitHead":"1f8a2bc7b02eb741e44ea19b2474d3f07ed3cf73","_npmUser":{"name":"russellclarvoepx","email":"russell@phononx.com"},"openclaw":{"build":{"openclawVersion":"2026.3.14"},"compat":{"pluginApi":">=2026.3.14"},"channel":{"id":"carbonvoice","blurb":"Carbon Voice API webhooks and text replies (voice/TTS on the Carbon Voice side).","label":"Carbon Voice","order":72,"docsPath":"/channels/carbonvoice","docsLabel":"carbonvoice","selectionLabel":"Carbon Voice"},"install":{"npmSpec":"@carbonvoice/openclaw-extension","localPath":"extensions/carbonvoice","defaultChoice":"npm","minHostVersion":">=2026.3.14"},"release":{"publishToNpm":false,"publishToClawHub":false},"extensions":["./index.ts"],"setupEntry":"./setup-entry.ts","releaseChecks":{"rootDependencyMirrorAllowlist":["socket.io-client"]}},"repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/carbonvoice"},"_npmVersion":"10.9.4","description":"OpenClaw Carbon Voice channel plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"socket.io-client":"^4.8.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"workspace:*","@openclaw/plugin-sdk":"workspace:*"},"peerDependencies":{"openclaw":">=2026.3.14"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-extension_2026.5.12-beta.1_1778601508416_0.9372085273171495","host":"s3://npm-registry-packages-npm-production"}},"2026.5.13":{"name":"@carbonvoice/openclaw-extension","version":"2026.5.13","license":"MIT","_id":"@carbonvoice/openclaw-extension@2026.5.13","maintainers":[{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/openclaw/openclaw#readme","bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"dist":{"shasum":"a5f8c209f7e6083e1ff87af5eb06103ccff70f9b","tarball":"https://registry.npmjs.org/@carbonvoice/openclaw-extension/-/openclaw-extension-2026.5.13.tgz","fileCount":25,"integrity":"sha512-iygMlNwNnV6aOqf7rUyqiBKjsjk/MtUKICFkzHjV8zEGdhRx9zj6U4e77HIaDGqKpyyOU6BF/SuhMYHCcfKUMA==","signatures":[{"sig":"MEUCIQD73TfpM5DT5M1a3tuQ5CM4QYcLNggxUcup6wtDhuoTKgIgSBknQbzMYHcLra1DLwkqW8p3HCMNGEbqYRSFKW58Hyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145369},"type":"module","gitHead":"02326838e9daadf0bf409465bd69ab92f5fc0ca1","_npmUser":{"name":"russellclarvoepx","email":"russell@phononx.com"},"openclaw":{"build":{"openclawVersion":"2026.3.14"},"compat":{"pluginApi":">=2026.3.14"},"channel":{"id":"carbonvoice","blurb":"Carbon Voice API webhooks and text replies (voice/TTS on the Carbon Voice side).","label":"Carbon Voice","order":72,"docsPath":"/channels/carbonvoice","docsLabel":"carbonvoice","selectionLabel":"Carbon Voice"},"install":{"npmSpec":"@carbonvoice/openclaw-extension","localPath":"extensions/carbonvoice","defaultChoice":"npm","minHostVersion":">=2026.3.14"},"release":{"publishToNpm":false,"publishToClawHub":false},"extensions":["./index.ts"],"setupEntry":"./setup-entry.ts","releaseChecks":{"rootDependencyMirrorAllowlist":["socket.io-client"]}},"repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/carbonvoice"},"_npmVersion":"10.9.4","description":"OpenClaw Carbon Voice channel plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"socket.io-client":"^4.8.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"workspace:*","@openclaw/plugin-sdk":"workspace:*"},"peerDependencies":{"openclaw":">=2026.3.14"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-extension_2026.5.13_1778602765949_0.17968522772896445","host":"s3://npm-registry-packages-npm-production"}},"2026.5.14":{"name":"@carbonvoice/openclaw-extension","version":"2026.5.14","license":"MIT","_id":"@carbonvoice/openclaw-extension@2026.5.14","maintainers":[{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/openclaw/openclaw#readme","bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"dist":{"shasum":"2303a772579a82da7cbc011e256f079e25c13ee8","tarball":"https://registry.npmjs.org/@carbonvoice/openclaw-extension/-/openclaw-extension-2026.5.14.tgz","fileCount":26,"integrity":"sha512-OE7TlDmlnAUZeTYri88o13x235YPPMwDJEENH3N6em1P7H4+xqtJK/tM50McsfBeaSKlepPNdzwruAYnNouHJQ==","signatures":[{"sig":"MEYCIQD3kLuhplN1SQFxpMeQQJFWwUMjeXqzac74NKJXalCJeQIhALzojdW3uYUA18+CdxTWLuiELWEbO8PDStb7QSPH66jZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148761},"type":"module","gitHead":"02326838e9daadf0bf409465bd69ab92f5fc0ca1","_npmUser":{"name":"russellclarvoepx","email":"russell@phononx.com"},"openclaw":{"build":{"openclawVersion":"2026.3.14"},"compat":{"pluginApi":">=2026.3.14"},"channel":{"id":"carbonvoice","blurb":"Carbon Voice API webhooks and text replies (voice/TTS on the Carbon Voice side).","label":"Carbon Voice","order":72,"docsPath":"/channels/carbonvoice","docsLabel":"carbonvoice","selectionLabel":"Carbon Voice"},"install":{"npmSpec":"@carbonvoice/openclaw-extension","localPath":"extensions/carbonvoice","defaultChoice":"npm","minHostVersion":">=2026.3.14"},"release":{"publishToNpm":false,"publishToClawHub":false},"extensions":["./index.ts"],"setupEntry":"./setup-entry.ts","releaseChecks":{"rootDependencyMirrorAllowlist":["socket.io-client"]}},"repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/carbonvoice"},"_npmVersion":"10.9.4","description":"OpenClaw Carbon Voice channel plugin","directories":{},"_nodeVersion":"22.22.1","dependencies":{"socket.io-client":"^4.8.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"openclaw":"workspace:*","@openclaw/plugin-sdk":"workspace:*"},"peerDependencies":{"openclaw":">=2026.3.14"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openclaw-extension_2026.5.14_1778769473611_0.11862427614842197","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-05-12T14:40:04.146Z","modified":"2026-05-15T18:33:37.680Z","2026.3.14":"2026-05-12T14:40:04.466Z","2026.5.12-beta.1":"2026-05-12T15:58:28.601Z","2026.5.13":"2026-05-12T16:19:26.098Z","2026.5.14":"2026-05-14T14:37:53.747Z"},"bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"license":"MIT","homepage":"https://github.com/openclaw/openclaw#readme","repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/carbonvoice"},"description":"OpenClaw Carbon Voice channel plugin","maintainers":[{"email":"cristianmgm7@gmail.com","name":"cristian_murillo"},{"email":"russell@phononx.com","name":"russellclarvoepx"},{"email":"travis@phononx.com","name":"travisbogardpx"},{"email":"frederico@phononx.com","name":"fredericomartini"}],"readme":"# @carbonvoice/openclaw-extension\n\nOpenClaw channel plugin for **Carbon Voice**: PAT websocket plus optional webhooks, with `POST /v3/messages/recent` catch-up after disconnects; text replies (voice/TTS stays on the Carbon Voice side).\n\nnpm package name (install spec): **`@carbonvoice/openclaw-extension`**. Plugin id in OpenClaw remains **`carbonvoice`** (`openclaw.plugin.json` / `openclaw.channel.id`).\n\nDocs: `https://docs.openclaw.ai/channels/carbonvoice`  \nPlugin system: `https://docs.openclaw.ai/plugin`\n\n## Bundled vs installable\n\nCarbon Voice ships **bundled** with the main `openclaw` npm package. Enable it with:\n\n```bash\nopenclaw plugins enable carbonvoice\n```\n\nTo try a different copy from disk (for example a patched checkout), install from a path or tarball; that copy **shadows** the bundled plugin when it uses the same id. See <https://docs.openclaw.ai/plugin> (discovery and precedence).\n\n## Install (local path)\n\nFrom the OpenClaw repo root:\n\n```bash\nopenclaw plugins install ./extensions/carbonvoice\n```\n\nRestart the Gateway after install.\n\n### Dev link (no copy)\n\n```bash\nopenclaw plugins install --link ./extensions/carbonvoice\n```\n\n### Tarball (npm / ClawHub)\n\nPublished plugins must ship **compiled** `dist/*.js` files. Plain `npm pack` inside `extensions/carbonvoice` only packs TypeScript sources and **`openclaw plugins install` will reject the tarball**.\n\nFrom the **OpenClaw repository root** (after `pnpm install`):\n\n```bash\nnode scripts/lib/plugin-npm-runtime-build.mjs extensions/carbonvoice\n# --pack-destination must already exist (npm does not mkdir for you)\nmkdir -p ./dist-pack\nnode scripts/lib/plugin-npm-package-manifest.mjs --run extensions/carbonvoice -- npm pack --pack-destination ./dist-pack\n```\n\nExample using `/tmp` only:\n\n```bash\nnode scripts/lib/plugin-npm-package-manifest.mjs --run extensions/carbonvoice -- npm pack --pack-destination /tmp\n```\n\nThat writes `carbonvoice-openclaw-extension-<version>.tgz` (npm’s filename for scoped packages) with `dist/`, `openclaw.runtimeExtensions`, and `openclaw.runtimeSetupEntry` set for the installer.\n\nOn the target host:\n\n```bash\nopenclaw plugins install ./carbonvoice-openclaw-extension-<version>.tgz\n# or\nopenclaw plugins install npm-pack:/tmp/carbonvoice-openclaw-extension-<version>.tgz\n```\n\n### Publish to npm (`@carbonvoice` org)\n\nThis package is scoped to **`@carbonvoice`** on npm (`publishConfig.access: \"public\"`). It is **not** part of OpenClaw’s automated `@openclaw/*` plugin npm matrix (`openclaw.release.publishToNpm` is `false` here so repo release scripts keep enforcing the `@openclaw` publisher contract).\n\n**One-time npm setup**\n\n1. Create the **`carbonvoice`** organization on [npmjs.com](https://www.npmjs.com/) (if it does not exist) and invite maintainers.\n2. Create a granular **Automation** or **Publish** token with permission to publish that org’s packages (or use `npm login` with a user who is an org member).\n\n**Publish from the OpenClaw repo root** (after `pnpm install`):\n\n```bash\nexport NODE_AUTH_TOKEN=\"npm_...\"   # token with publish rights to @carbonvoice\n# Local / non-GitHub-OIDC publishes cannot use npm provenance; disable for this shell:\nexport OPENCLAW_NPM_PUBLISH_PROVENANCE=0\n\nbash scripts/plugin-npm-publish.sh --pack-dry-run extensions/carbonvoice\nbash scripts/plugin-npm-publish.sh --publish extensions/carbonvoice\n```\n\nIf you publish with **trusted publishing** (no `NODE_AUTH_TOKEN` / `NPM_TOKEN`) and the script refuses because **beta dist-tag mirroring** needs a token, either export a token as above or set `OPENCLAW_NPM_SKIP_DIST_TAG_MIRROR=1` (the `extensions/carbonvoice/publish.sh` wrapper sets this by default).\n\nThe script runs the runtime build, applies the same `package.json` overlay as `npm pack`, then **`npm publish --access public`**. First publish of a scoped public package must stay **`public`** (already set in `publishConfig`).\n\n**Install for users** (after publish):\n\n```bash\nopenclaw plugins install npm:@carbonvoice/openclaw-extension\nopenclaw plugins install npm:@carbonvoice/openclaw-extension@2026.3.14\n```\n\n### Publish to ClawHub\n\nClawHub is optional; use the [ClawHub CLI](https://docs.openclaw.ai/plugins/manage-plugins#publish-to-clawhub) (`clawhub package publish …`) with an owner whose scope matches **`@carbonvoice`**, or publish the tarball produced by `clawhub package pack` after the same `dist/` build as above. See [Publishing on ClawHub](https://docs.openclaw.ai/clawhub/publishing).\n\n**Install spec** (after a ClawHub release exists):\n\n```bash\nopenclaw plugins install clawhub:@carbonvoice/openclaw-extension\n```\n\nPeer dependency: `openclaw` must satisfy `peerDependencies.openclaw` in this package’s `package.json`.\n\n## Dependencies\n\nThe plugin install runs `npm install --omit=dev` in the extension directory. Ensure `socket.io-client` resolves (declared in `dependencies`).\n\n## Config\n\nChannel config lives under `channels.carbonvoice` (multi-account under `accounts.<accountId>`).\n\n**Credential:** set the **`AGENT_PAT`** environment variable to your Carbon Voice agent personal access token (`cv_pat_...`) for the default account, or set `apiKey` on the account in config (same value). On startup, OpenClaw calls `GET /whoami`, opens the realtime websocket, and runs recents catch-up on connect. If you set **`publicWebhookBaseUrl`**, it also subscribes webhooks and registers the HTTP route. Inbound filters exclude the PAT user’s own messages; optional **`creatorId`** limits inbound to that user only.\n\nTypical fields per account:\n\n- `creatorId` (optional) — Carbon Voice user id; when set, only messages from this user are delivered (in addition to excluding the PAT user).\n- `baseUrl` — API base (default `https://api.carbonvoice.app`).\n- `publicWebhookBaseUrl` (optional) — public origin of your OpenClaw gateway for Carbon Voice webhooks. Omit for PAT-only websocket mode.\n- `webhookPath` — path on the gateway when using webhooks (default `/openclaw/carbonvoice/webhook` when `publicWebhookBaseUrl` is set).\n\nExample (PAT-only via env):\n\n```bash\nexport AGENT_PAT=\"cv_pat_...\"\n```\n\n```json5\n{\n  channels: {\n    carbonvoice: {\n      accounts: {\n        default: {\n          enabled: true,\n          // optional: \"publicWebhookBaseUrl\": \"https://gateway.example.com\",\n          // optional: \"creatorId\": \"YOUR_USER_GUID\",\n        },\n      },\n    },\n  },\n}\n```\n\nUse `openclaw onboard` or channel setup for interactive configuration where available.\n","readmeFilename":"README.md"}