diff --git a/ansible/host_vars/zap.yml b/ansible/host_vars/zap.yml index e4cd5b4..7d0c6e0 100644 --- a/ansible/host_vars/zap.yml +++ b/ansible/host_vars/zap.yml @@ -4,7 +4,7 @@ # ── VM provisioning ──────────────────────────────────────────────────────── vm_domain: "zap [claw]" vm_hostname: zap -vm_memory_mib: 4096 +vm_memory_mib: 6144 vm_vcpus: 4 vm_disk_path: /var/lib/libvirt/images/claw.qcow2 vm_disk_size: "60G" diff --git a/openclaw/agents/main/agent/models.json b/openclaw/agents/main/agent/models.json index 5fd0fab..1925773 100644 --- a/openclaw/agents/main/agent/models.json +++ b/openclaw/agents/main/agent/models.json @@ -92,7 +92,8 @@ "cacheWrite": 0 }, "contextWindow": 202800, - "maxTokens": 131100 + "maxTokens": 131100, + "api": "openai-completions" }, { "id": "glm-5-turbo", @@ -108,7 +109,8 @@ "cacheWrite": 0 }, "contextWindow": 202800, - "maxTokens": 131100 + "maxTokens": 131100, + "api": "openai-completions" }, { "id": "glm-4.7", @@ -124,7 +126,8 @@ "cacheWrite": 0 }, "contextWindow": 204800, - "maxTokens": 131072 + "maxTokens": 131072, + "api": "openai-completions" }, { "id": "glm-4.7-flash", @@ -140,7 +143,8 @@ "cacheWrite": 0 }, "contextWindow": 200000, - "maxTokens": 131072 + "maxTokens": 131072, + "api": "openai-completions" }, { "id": "glm-4.7-flashx", @@ -156,7 +160,8 @@ "cacheWrite": 0 }, "contextWindow": 200000, - "maxTokens": 128000 + "maxTokens": 128000, + "api": "openai-completions" }, { "id": "glm-4.6", @@ -172,7 +177,8 @@ "cacheWrite": 0 }, "contextWindow": 204800, - "maxTokens": 131072 + "maxTokens": 131072, + "api": "openai-completions" }, { "id": "glm-4.6v", @@ -189,7 +195,8 @@ "cacheWrite": 0 }, "contextWindow": 128000, - "maxTokens": 32768 + "maxTokens": 32768, + "api": "openai-completions" }, { "id": "glm-4.5", @@ -205,7 +212,8 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 98304 + "maxTokens": 98304, + "api": "openai-completions" }, { "id": "glm-4.5-air", @@ -221,7 +229,8 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 98304 + "maxTokens": 98304, + "api": "openai-completions" }, { "id": "glm-4.5-flash", @@ -237,7 +246,8 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 98304 + "maxTokens": 98304, + "api": "openai-completions" }, { "id": "glm-4.5v", @@ -254,7 +264,8 @@ "cacheWrite": 0 }, "contextWindow": 64000, - "maxTokens": 16384 + "maxTokens": 16384, + "api": "openai-completions" }, { "id": "glm-5.1", @@ -270,19 +281,21 @@ "cacheWrite": 0 }, "contextWindow": 204800, - "maxTokens": 131072 + "maxTokens": 131072, + "api": "openai-completions" } ] }, "local": { "baseUrl": "http://192.168.153.130:18806/v1", + "apiKey": "not-needed", "api": "openai-completions", "models": [ { - "id": "gemma-3-12b-local", - "name": "Gemma 3 12B Instruct (local)", + "id": "gemma-4-26b-local", + "name": "Gemma 4 26B A4B Instruct (local)", "api": "openai-completions", - "reasoning": false, + "reasoning": true, "input": [ "text" ], @@ -292,7 +305,7 @@ "cacheRead": 0, "cacheWrite": 0 }, - "contextWindow": 131072, + "contextWindow": 262144, "maxTokens": 8192 } ] diff --git a/openclaw/cron/jobs.json b/openclaw/cron/jobs.json index cba46d3..609dfd6 100644 --- a/openclaw/cron/jobs.json +++ b/openclaw/cron/jobs.json @@ -160,11 +160,15 @@ "kind": "cron", "expr": "0 3 * * *" }, - "sessionTarget": "main", + "sessionTarget": "isolated", "wakeMode": "now", "payload": { - "kind": "systemEvent", - "text": "__openclaw_memory_core_short_term_promotion_dream__" + "kind": "agentTurn", + "message": "__openclaw_memory_core_short_term_promotion_dream__", + "lightContext": true + }, + "delivery": { + "mode": "none" }, "state": {} }, @@ -174,7 +178,7 @@ "sessionKey": "agent:main:discord:channel:1494746041604509848", "name": "n8n Gmail trigger failure monitor", "description": "Read-only monitor for n8n Gmail workflow whtdorf7yJMVYeHm. Runs 2x/day and alerts #ops-alerts only for factual failure states: workflow inactive, Gmail Trigger node missing, or recent failed executions. Do not alert on mere inactivity/idle time alone.", - "enabled": true, + "enabled": false, "createdAtMs": 1776975556829, "schedule": { "kind": "cron", @@ -186,7 +190,7 @@ "payload": { "kind": "agentTurn", "message": "Run `/home/openclaw/.openclaw/workspace/scripts/check-n8n-gmail-trigger.sh` from the workspace. If it prints an ALERT line or exits non-zero, send a concise factual alert to this Discord channel summarizing only the confirmed condition from the script output. Do not speculate about OAuth, deactivation, or root cause unless the script output explicitly proves it. If it prints OK, stay quiet. Do not modify workflows or credentials.", - "model": "local/gemma-3-12b-local", + "model": "local/gemma-4-26b-local", "thinking": "off", "timeoutSeconds": 120, "toolsAllow": [ diff --git a/openclaw/openclaw-current b/openclaw/openclaw-current index 5d0db68..15ad38b 120000 --- a/openclaw/openclaw-current +++ b/openclaw/openclaw-current @@ -1 +1 @@ -/home/openclaw/.local/share/pnpm/5/node_modules/.pnpm/openclaw@2026.4.9_@napi-rs+canvas@0.1.97_@types+express@5.0.6_apache-arrow@18.1.0/node_modules/openclaw \ No newline at end of file +/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw \ No newline at end of file diff --git a/openclaw/openclaw.json b/openclaw/openclaw.json index b574cc3..f2ec6ad 100644 --- a/openclaw/openclaw.json +++ b/openclaw/openclaw.json @@ -1,11 +1,11 @@ { "meta": { - "lastTouchedVersion": "2026.4.23", - "lastTouchedAt": "2026-04-29T16:46:42.428Z" + "lastTouchedVersion": "2026.4.29", + "lastTouchedAt": "2026-05-01T23:21:29.865Z" }, "wizard": { - "lastRunAt": "2026-04-09T22:23:03.566Z", - "lastRunVersion": "2026.4.9", + "lastRunAt": "2026-05-01T20:32:33.527Z", + "lastRunVersion": "2026.4.29", "lastRunCommand": "doctor", "lastRunMode": "local" }, @@ -253,10 +253,10 @@ "api": "openai-completions", "models": [ { - "id": "gemma-3-12b-local", - "name": "Gemma 3 12B Instruct (local)", + "id": "gemma-4-26b-local", + "name": "Gemma 4 26B A4B Instruct (local)", "api": "openai-completions", - "reasoning": false, + "reasoning": true, "input": [ "text" ], @@ -266,48 +266,19 @@ "cacheRead": 0, "cacheWrite": 0 }, - "contextWindow": 131072, + "contextWindow": 262144, "maxTokens": 8192 } - ] + ], + "apiKey": "not-needed" } } }, "agents": { "defaults": { "model": { - "primary": "github-copilot/claude-sonnet-4.6", - "fallbacks": [ - "zai/glm-5.1", - "zai/glm-5", - "zai/glm-4.7", - "openai-codex/gpt-5.3-codex", - "openai-codex/gpt-5.4", - "openai-codex/gpt-5.3-codex-spark", - "openai/gpt-5.2", - "openai/gpt-5.3-codex", - "github-copilot/gpt-5.3-codex", - "github-copilot/gpt-5.4", - "github-copilot/grok-code-fast-1", - "github-copilot/claude-opus-4.5", - "github-copilot/claude-opus-4.6", - "github-copilot/claude-sonnet-4.5", - "github-copilot/claude-sonnet-4.6", - "github-copilot/gemini-2.5-pro", - "github-copilot/gemini-3-flash-preview", - "github-copilot/gemini-3-pro-preview", - "github-copilot/gemini-3.1-pro-preview", - "github-copilot/gpt-5", - "github-copilot/gpt-5-mini", - "github-copilot/gpt-5.1", - "github-copilot/gpt-5.1-codex", - "github-copilot/gpt-5.1-codex-max", - "github-copilot/gpt-5.1-codex-mini", - "github-copilot/gpt-5.2-codex", - "github-copilot/gpt-5.2", - "anthropic/claude-opus-4-6", - "anthropic/claude-sonnet-4-6" - ] + "primary": "openai-codex/gpt-5.5", + "fallbacks": [] }, "models": { "openai-codex/gpt-5.4": { @@ -332,7 +303,7 @@ "alias": "GPT-5.3 Codex" }, "openai/gpt-5.5": { - "alias": "GPT-5.5" + "alias": "GPT-5.5 API Key" }, "openai/gpt-5.4-mini": { "alias": "GPT-5.4 Mini" @@ -411,6 +382,12 @@ }, "zai/glm-4.5v": { "alias": "GLM-4.5V" + }, + "local/gemma-4-26b-local": { + "alias": "Gemma 4 26B (local)" + }, + "openai-codex/gpt-5.5": { + "alias": "GPT-5.5" } }, "memorySearch": { @@ -473,9 +450,8 @@ "id": "automation", "name": "Automation", "model": { - "primary": "local/gemma-3-12b-local", + "primary": "local/gemma-4-26b-local", "fallbacks": [ - "openai-codex/gpt-5.4-nano", "openai-codex/gpt-5.4-mini", "zai/glm-4.7-flash" ] @@ -486,11 +462,8 @@ "default": true, "name": "Main", "model": { - "primary": "openai-codex/gpt-5.4", - "fallbacks": [ - "openai-codex/gpt-5.4", - "zai/glm-5.1" - ] + "primary": "openai-codex/gpt-5.5", + "fallbacks": [] }, "subagents": { "allowAgents": [ @@ -747,6 +720,9 @@ "voice": "af_heart" } } + }, + "groupChat": { + "visibleReplies": "automatic" } }, "commands": { @@ -760,13 +736,17 @@ "maintenance": { "mode": "warn", "pruneAfter": "30d", - "maxEntries": 500, - "rotateBytes": "50mb" + "maxEntries": 500 } }, "hooks": { "internal": { - "enabled": true + "enabled": true, + "entries": { + "boot-md": { + "enabled": false + } + } } }, "channels": { @@ -805,6 +785,13 @@ "groupPolicy": "allowlist", "streaming": { "mode": "partial" + }, + "network": { + "autoSelectFamily": false, + "dnsResultOrder": "ipv4first" + }, + "commands": { + "native": false } }, "discord": { @@ -830,7 +817,10 @@ }, "allowFrom": [ "425208577846935553" - ] + ], + "commands": { + "native": false + } } }, "gateway": { @@ -852,7 +842,7 @@ "config": {} }, "brave": { - "enabled": true, + "enabled": false, "config": { "webSearch": { "apiKey": "BSAgLuWVVMnrGvobOt7pDQjmVJ5u380" @@ -860,24 +850,33 @@ } }, "github-copilot": { - "enabled": true + "enabled": false }, "zai": { - "enabled": true + "enabled": false }, "openai": { "enabled": true }, "anthropic": { - "enabled": true + "enabled": false }, "memory-core": { "config": { "dreaming": { "enabled": true } - } + }, + "enabled": false } + }, + "allow": [ + "discord", + "telegram", + "openai" + ], + "slots": { + "memory": "none" } }, "ui": { diff --git a/openclaw/openclaw.json.last-good b/openclaw/openclaw.json.last-good index b574cc3..f2ec6ad 100644 --- a/openclaw/openclaw.json.last-good +++ b/openclaw/openclaw.json.last-good @@ -1,11 +1,11 @@ { "meta": { - "lastTouchedVersion": "2026.4.23", - "lastTouchedAt": "2026-04-29T16:46:42.428Z" + "lastTouchedVersion": "2026.4.29", + "lastTouchedAt": "2026-05-01T23:21:29.865Z" }, "wizard": { - "lastRunAt": "2026-04-09T22:23:03.566Z", - "lastRunVersion": "2026.4.9", + "lastRunAt": "2026-05-01T20:32:33.527Z", + "lastRunVersion": "2026.4.29", "lastRunCommand": "doctor", "lastRunMode": "local" }, @@ -253,10 +253,10 @@ "api": "openai-completions", "models": [ { - "id": "gemma-3-12b-local", - "name": "Gemma 3 12B Instruct (local)", + "id": "gemma-4-26b-local", + "name": "Gemma 4 26B A4B Instruct (local)", "api": "openai-completions", - "reasoning": false, + "reasoning": true, "input": [ "text" ], @@ -266,48 +266,19 @@ "cacheRead": 0, "cacheWrite": 0 }, - "contextWindow": 131072, + "contextWindow": 262144, "maxTokens": 8192 } - ] + ], + "apiKey": "not-needed" } } }, "agents": { "defaults": { "model": { - "primary": "github-copilot/claude-sonnet-4.6", - "fallbacks": [ - "zai/glm-5.1", - "zai/glm-5", - "zai/glm-4.7", - "openai-codex/gpt-5.3-codex", - "openai-codex/gpt-5.4", - "openai-codex/gpt-5.3-codex-spark", - "openai/gpt-5.2", - "openai/gpt-5.3-codex", - "github-copilot/gpt-5.3-codex", - "github-copilot/gpt-5.4", - "github-copilot/grok-code-fast-1", - "github-copilot/claude-opus-4.5", - "github-copilot/claude-opus-4.6", - "github-copilot/claude-sonnet-4.5", - "github-copilot/claude-sonnet-4.6", - "github-copilot/gemini-2.5-pro", - "github-copilot/gemini-3-flash-preview", - "github-copilot/gemini-3-pro-preview", - "github-copilot/gemini-3.1-pro-preview", - "github-copilot/gpt-5", - "github-copilot/gpt-5-mini", - "github-copilot/gpt-5.1", - "github-copilot/gpt-5.1-codex", - "github-copilot/gpt-5.1-codex-max", - "github-copilot/gpt-5.1-codex-mini", - "github-copilot/gpt-5.2-codex", - "github-copilot/gpt-5.2", - "anthropic/claude-opus-4-6", - "anthropic/claude-sonnet-4-6" - ] + "primary": "openai-codex/gpt-5.5", + "fallbacks": [] }, "models": { "openai-codex/gpt-5.4": { @@ -332,7 +303,7 @@ "alias": "GPT-5.3 Codex" }, "openai/gpt-5.5": { - "alias": "GPT-5.5" + "alias": "GPT-5.5 API Key" }, "openai/gpt-5.4-mini": { "alias": "GPT-5.4 Mini" @@ -411,6 +382,12 @@ }, "zai/glm-4.5v": { "alias": "GLM-4.5V" + }, + "local/gemma-4-26b-local": { + "alias": "Gemma 4 26B (local)" + }, + "openai-codex/gpt-5.5": { + "alias": "GPT-5.5" } }, "memorySearch": { @@ -473,9 +450,8 @@ "id": "automation", "name": "Automation", "model": { - "primary": "local/gemma-3-12b-local", + "primary": "local/gemma-4-26b-local", "fallbacks": [ - "openai-codex/gpt-5.4-nano", "openai-codex/gpt-5.4-mini", "zai/glm-4.7-flash" ] @@ -486,11 +462,8 @@ "default": true, "name": "Main", "model": { - "primary": "openai-codex/gpt-5.4", - "fallbacks": [ - "openai-codex/gpt-5.4", - "zai/glm-5.1" - ] + "primary": "openai-codex/gpt-5.5", + "fallbacks": [] }, "subagents": { "allowAgents": [ @@ -747,6 +720,9 @@ "voice": "af_heart" } } + }, + "groupChat": { + "visibleReplies": "automatic" } }, "commands": { @@ -760,13 +736,17 @@ "maintenance": { "mode": "warn", "pruneAfter": "30d", - "maxEntries": 500, - "rotateBytes": "50mb" + "maxEntries": 500 } }, "hooks": { "internal": { - "enabled": true + "enabled": true, + "entries": { + "boot-md": { + "enabled": false + } + } } }, "channels": { @@ -805,6 +785,13 @@ "groupPolicy": "allowlist", "streaming": { "mode": "partial" + }, + "network": { + "autoSelectFamily": false, + "dnsResultOrder": "ipv4first" + }, + "commands": { + "native": false } }, "discord": { @@ -830,7 +817,10 @@ }, "allowFrom": [ "425208577846935553" - ] + ], + "commands": { + "native": false + } } }, "gateway": { @@ -852,7 +842,7 @@ "config": {} }, "brave": { - "enabled": true, + "enabled": false, "config": { "webSearch": { "apiKey": "BSAgLuWVVMnrGvobOt7pDQjmVJ5u380" @@ -860,24 +850,33 @@ } }, "github-copilot": { - "enabled": true + "enabled": false }, "zai": { - "enabled": true + "enabled": false }, "openai": { "enabled": true }, "anthropic": { - "enabled": true + "enabled": false }, "memory-core": { "config": { "dreaming": { "enabled": true } - } + }, + "enabled": false } + }, + "allow": [ + "discord", + "telegram", + "openai" + ], + "slots": { + "memory": "none" } }, "ui": { diff --git a/openclaw/plugins/installs.json b/openclaw/plugins/installs.json new file mode 100644 index 0000000..f5f2d4c --- /dev/null +++ b/openclaw/plugins/installs.json @@ -0,0 +1,3208 @@ +{ + "version": 1, + "warning": "DO NOT EDIT. This file is generated by OpenClaw from plugin manifests, install records, and config policy. Use `openclaw plugins registry --refresh`, `openclaw plugins install/update/uninstall`, or `openclaw plugins enable/disable` instead.", + "hostContractVersion": "2026.4.29", + "compatRegistryVersion": "6415856543d13e5d9a8bf06648de1e227db6eeb6c74441119a3dafa61202c053", + "migrationVersion": 1, + "policyHash": "16e3aefa59a8972560fdf9b5dae38ceb268f5ed88fdac1b88ef0632be1389f23", + "generatedAtMs": 1777693749823, + "refreshReason": "migration", + "installRecords": {}, + "plugins": [ + { + "pluginId": "acpx", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/acpx/openclaw.plugin.json", + "manifestHash": "10c590d99e47b441bab9512316ba5d9b6cd409f38cc8c4c32e4eba8566f11560", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/acpx/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/acpx", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/acpx", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "348995c3f5db04dd80165088975beaa3719f603e19342f083eedc09bbf27771a" + } + }, + { + "pluginId": "active-memory", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/active-memory/openclaw.plugin.json", + "manifestHash": "c0d13529708077062093ac7915b693bc190634dfb3fd81500be67353f8ebf841", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/active-memory/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/active-memory", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [] + }, + { + "pluginId": "alibaba", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/alibaba/openclaw.plugin.json", + "manifestHash": "f89fad1382270da7c135c5668bd1824d02245ac8053909917ae6dde400c5c800", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/alibaba/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/alibaba", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/alibaba-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "fc0391fd2f1bc9faae69c1122d11c63e6858a4b82c62375aea9d232d9469f8b8" + } + }, + { + "pluginId": "amazon-bedrock", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/amazon-bedrock/openclaw.plugin.json", + "manifestHash": "bb1a7b233694644e6ea2f50189304f4c21eeb419481cc8c56b51e5b00dd7b091", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/amazon-bedrock/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/amazon-bedrock", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/amazon-bedrock-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "7c28989b23c5001de74f00ac4336fdc150f6649e60089bc45a452fe907f4ed13" + } + }, + { + "pluginId": "amazon-bedrock-mantle", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/amazon-bedrock-mantle/openclaw.plugin.json", + "manifestHash": "0e54aa11a7b9646286e8d039e4020fd420b376df37a6cf98db11d065800e3264", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/amazon-bedrock-mantle/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/amazon-bedrock-mantle", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/amazon-bedrock-mantle-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "e82d04fdfcb89a69b8d6e2bc34bec64aab79d506d5491d831662ac2a4c4dab27" + } + }, + { + "pluginId": "anthropic", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/anthropic/openclaw.plugin.json", + "manifestHash": "fe5476813e60bbee2d009f90bdb35c5e2b8df17f0094172d8f0bb04482f39c10", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/anthropic/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/anthropic", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [ + "claude-cli" + ] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "syntheticAuthRefs": [ + "claude-cli" + ], + "packageName": "@openclaw/anthropic-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "a7a26ae18c8864cd57c14d383c5b78ea3acee06c4d1e2376502f80256f643419" + } + }, + { + "pluginId": "anthropic-vertex", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/anthropic-vertex/openclaw.plugin.json", + "manifestHash": "fb7708c012b22ba8e3378da1b7dd70bb79a6061a2936f99636b30a51c20c209f", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/anthropic-vertex/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/anthropic-vertex", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "syntheticAuthRefs": [ + "anthropic-vertex" + ], + "packageName": "@openclaw/anthropic-vertex-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "b35567973820913ef7a9a816ee543c5f1e1582bc6180d200f705651dfe50ced4" + } + }, + { + "pluginId": "arcee", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/arcee/openclaw.plugin.json", + "manifestHash": "b05b148475f5a5ca10852019063baf416d133dbb61d5d62ff2566b5a488c9b77", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/arcee/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/arcee", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/arcee-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "7b820f1773346cd06e9e1305eb5423f77f5a25208dd32570612bc16e88b69e61" + } + }, + { + "pluginId": "azure-speech", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/azure-speech/openclaw.plugin.json", + "manifestHash": "ad7359ef75d84324f572b4862979ca99c7cd1d5c1d9563f50c3e4bbaf5489b3d", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/azure-speech/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/azure-speech", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/azure-speech", + "packageVersion": "2026.4.16", + "packageJson": { + "path": "package.json", + "hash": "8cb4d46ec877b19ff8a5c04cc00e7f76c0e7b0b85d35d6491d1aab02556cae94" + } + }, + { + "pluginId": "bluebubbles", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/bluebubbles/openclaw.plugin.json", + "manifestHash": "9d6cb7b3956e87b793015e07ce1d4d144fd346413c080b6722d551d44b95cf24", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/bluebubbles/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/bluebubbles", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/bluebubbles/setup-entry.js", + "packageName": "@openclaw/bluebubbles", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/bluebubbles", + "packageName": "@openclaw/bluebubbles", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "bluebubbles", + "label": "BlueBubbles", + "blurb": "iMessage via the BlueBubbles mac app + REST API.", + "preferOver": [ + "imessage" + ] + }, + "packageJson": { + "path": "package.json", + "hash": "2c83096ae282b9445aca5582a157a63eb82b66245e8087decaaec2637ebaefbc" + } + }, + { + "pluginId": "bonjour", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/bonjour/openclaw.plugin.json", + "manifestHash": "d02e25ac8a097eaf03c5e2c7ff6e9f4183df55817afd3a7d37ceed82fa42c02a", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/bonjour/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/bonjour", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/bonjour", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "e713394483d69f23c4eeb879c40920fb9c86a34bc817814a045a26442d69a92c" + } + }, + { + "pluginId": "brave", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/brave/openclaw.plugin.json", + "manifestHash": "fbad013893225080fc9dd51a9a85c0c2b1c44f222c347388806728e92eba3764", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/brave/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/brave", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "packageName": "@openclaw/brave-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "d5fd97ac78caba7c41a27f062b2bc5fa86745dcaaf0d1810159b16a245b4af0d" + } + }, + { + "pluginId": "browser", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/browser/openclaw.plugin.json", + "manifestHash": "a763484a628de1dda8684fa02b535c48d62b55a7a9b865973dba36d371231301", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/browser/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/browser", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "activation-config-path-hint" + ], + "enabledByDefault": true, + "packageName": "@openclaw/browser-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "9bf41925b64a9850f7dde28b9e958ef4c5e8dedc1024b45dec9e41dbf5a0aea3" + } + }, + { + "pluginId": "byteplus", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/byteplus/openclaw.plugin.json", + "manifestHash": "40e33aabc354339503140b61df26980a49e34b8b827263af4b64e70ffd726c02", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/byteplus/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/byteplus", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/byteplus-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "8326868ff14a9ddb783084f9f2373c3c5d89ad1d878c230e7a3438a5d28e4e56" + } + }, + { + "pluginId": "cerebras", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/cerebras/openclaw.plugin.json", + "manifestHash": "d8e02762c7a3f1e0b339e9148d3c543ea1704ace62ef7cb8ed30b6b4f579e8c9", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/cerebras/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/cerebras", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/cerebras-provider", + "packageVersion": "2026.4.26", + "packageJson": { + "path": "package.json", + "hash": "d5e2cb48f35214be2efc21344e8f1307519666eeff97e47b3b9a3f55efca5bb5" + } + }, + { + "pluginId": "chutes", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/chutes/openclaw.plugin.json", + "manifestHash": "3c48df51770e0e4f33148911e9701d8241499a6626f8238a2811354aeae5f5e2", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/chutes/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/chutes", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/chutes-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "e91bf8521f7a6e7f674c39b2c2052f2ec4d8baf26ac6ff583441d80ccc136154" + } + }, + { + "pluginId": "cloudflare-ai-gateway", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/cloudflare-ai-gateway/openclaw.plugin.json", + "manifestHash": "4f61916c79ed48303da0a044736950a19b350c3d9032fb9dc0852a74e95b73ea", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/cloudflare-ai-gateway/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/cloudflare-ai-gateway", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/cloudflare-ai-gateway-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "d66e9c6bca454e62f2bdfbeeaaf2a5d1549198640fc49d7686c1af99a3f74592" + } + }, + { + "pluginId": "codex", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/codex/openclaw.plugin.json", + "manifestHash": "69dd87578b47d1bf42697c3b4bc45a72977516ccd87fb02ab232317704fd4f45", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/codex/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/codex", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [ + "codex" + ] + }, + "compat": [ + "activation-agent-harness-hint" + ], + "syntheticAuthRefs": [ + "codex" + ], + "packageName": "@openclaw/codex", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "effbd8e97b94199ded47e1bdc0c38985ebd34806459cee2c52e972305658fa91" + } + }, + { + "pluginId": "comfy", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/comfy/openclaw.plugin.json", + "manifestHash": "b3b95a5b228af73d62dc82b13d2de0ed4d1a6d33f690d12027228b53f1900a05", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/comfy/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/comfy", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/comfy-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "461116149678bf1d24de4660b794145d1a29d47a3eeff053594db5cf840424e9" + } + }, + { + "pluginId": "copilot-proxy", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/copilot-proxy/openclaw.plugin.json", + "manifestHash": "2e238fcce7097fc4e52b8fded692a105f61c671c6805c70bcfdc840412981390", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/copilot-proxy/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/copilot-proxy", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/copilot-proxy", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "62bebe9f8e242288255a12fcb86ae47c1e751a292142134629972273a2f61cff" + } + }, + { + "pluginId": "deepgram", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepgram/openclaw.plugin.json", + "manifestHash": "afaa62fc51e5677eb2bc4c0f7016d6255a77c636679e82952f18aed593353092", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepgram/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepgram", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/deepgram-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "51d181b7b996931044d52c5d33a023bdf191a76119eb59a8b1f1e235166332d1" + } + }, + { + "pluginId": "deepinfra", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepinfra/openclaw.plugin.json", + "manifestHash": "8a53d5d1e2da548db49541a082b3b363299f2fd38404df227f96d9943eca65de", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepinfra/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepinfra", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/deepinfra-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "ba220b399cec488194efde31105ae33869fc3b37563bcb8538ece3164a32677b" + } + }, + { + "pluginId": "deepseek", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepseek/openclaw.plugin.json", + "manifestHash": "3fe51d49ffd6202817e8a0c73db577c032e06b7591679fe384f2e721a5a79fc8", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepseek/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/deepseek", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/deepseek-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "eb662a261bcdf4c9e0b2a5726cc0061d31f08da5c10745c841ee245758affdb2" + } + }, + { + "pluginId": "device-pair", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/device-pair/openclaw.plugin.json", + "manifestHash": "12927d5b8f22d47494cc74bd977149db7f4923665d775f78e06c73b1608b7cd2", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/device-pair/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/device-pair", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true + }, + { + "pluginId": "diagnostics-otel", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diagnostics-otel/openclaw.plugin.json", + "manifestHash": "4d43d3a44f3ee366abc89c18374a90406d554921c7ee74743980374690d2de68", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diagnostics-otel/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diagnostics-otel", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/diagnostics-otel", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "3fee6c1c49c4a54ecc3a823b413f47cb2ef2ef2ffdbe41508145e940e5aaad60" + } + }, + { + "pluginId": "diagnostics-prometheus", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diagnostics-prometheus/openclaw.plugin.json", + "manifestHash": "6fe259e24f263dc8906c82c60681143e79124d40a4701f7caca12c2d1c0e9100", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diagnostics-prometheus/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diagnostics-prometheus", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/diagnostics-prometheus", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "867c30c32edb792c89b9275ae4bce39870f0ff907ec5d91afe1e765a68fee3eb" + } + }, + { + "pluginId": "diffs", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diffs/openclaw.plugin.json", + "manifestHash": "034897256f93baaf2ff92dcd29a69ea1aad1dad787a3e94f94d378aa6fad4880", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diffs/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/diffs", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/diffs", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "4808950ab3380b5677ce97460a147fd2bc3e18568222161945bc659a044051eb" + } + }, + { + "pluginId": "discord", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/discord/openclaw.plugin.json", + "manifestHash": "4472bf72cc8720fe9349df01a78658d7b601422b8f477c7a34bd1f51ae7fa0d4", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/discord/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/discord", + "origin": "bundled", + "enabled": true, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/discord/setup-entry.js", + "packageName": "@openclaw/discord", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/discord", + "packageName": "@openclaw/discord", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "discord", + "label": "Discord", + "blurb": "very well supported right now.", + "commands": { + "nativeCommandsAutoEnabled": true, + "nativeSkillsAutoEnabled": true + } + }, + "packageJson": { + "path": "package.json", + "hash": "0b717f57ab5d38e2ea1a5de120447f28279b3805a6f97682810b29e7b05f49ff" + } + }, + { + "pluginId": "document-extract", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/document-extract/openclaw.plugin.json", + "manifestHash": "c4bcd246214ef231b69b438dc8a4b7d0bcf51c8605e0ea32f1db4c7a8dc0df18", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/document-extract/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/document-extract", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/document-extract-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "b2f8f4d37f2aa615b58b3a15eb5b49a4a67675a88c725933ddb5bcd8f974244b" + } + }, + { + "pluginId": "duckduckgo", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/duckduckgo/openclaw.plugin.json", + "manifestHash": "97c43b0c6846179073a218e2f878a8523d7467743919e18deef83ab95e49ca21", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/duckduckgo/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/duckduckgo", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/duckduckgo-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "4211f4a668aecbda2f76588964b42552702b840cb01621fa8226dfb32b6e75b1" + } + }, + { + "pluginId": "elevenlabs", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/elevenlabs/openclaw.plugin.json", + "manifestHash": "2413900479ffe13408e984ab4014365497f820defa716247f33cfd590d4b9888", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/elevenlabs/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/elevenlabs", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/elevenlabs-speech", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "84ee953aa9a568fcc5b01646bff8457955eb559d34b1f0c03bde2d08b2b83371" + } + }, + { + "pluginId": "exa", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/exa/openclaw.plugin.json", + "manifestHash": "66673cd6d442661d662dd41611fca57da53934dbaaf96f6abba751e818bb8223", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/exa/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/exa", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "packageName": "@openclaw/exa-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "863e72c8c20af9eeab1be0fc6d1b2d59be86f8b8009c86e920c1607a86b1293d" + } + }, + { + "pluginId": "fal", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/fal/openclaw.plugin.json", + "manifestHash": "3efbf68eb24e7b98be1752810676873ef4730ce0abefb89933e59e309ef48bf6", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/fal/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/fal", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/fal-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "7751db0ed0214fe9d367ae4a908cfeaa1494ee533fa5616a682207dd44a93f12" + } + }, + { + "pluginId": "feishu", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/feishu/openclaw.plugin.json", + "manifestHash": "0fae9746ab1e60abd4da1a4e5de7850890875c2ed5aa2fa8b477db299b5979c5", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/feishu/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/feishu", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/feishu/setup-entry.js", + "packageName": "@openclaw/feishu", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/feishu", + "packageName": "@openclaw/feishu", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "feishu", + "label": "Feishu", + "blurb": "飞书/Lark enterprise messaging with doc/wiki/drive tools." + }, + "packageJson": { + "path": "package.json", + "hash": "a2b2209b28c040cb7ef5e98c7624505b8a703d0189809f26ad8eda590e631f5a" + } + }, + { + "pluginId": "file-transfer", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/file-transfer/openclaw.plugin.json", + "manifestHash": "58af0929b80753b3778f240b8480cbaf7d14280ac81cce23b01d92b51e44ae0e", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/file-transfer/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/file-transfer", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/file-transfer", + "packageVersion": "2026.4.27", + "packageJson": { + "path": "package.json", + "hash": "ae2a826b50525b088666fe936eb1d452683d711144687443e1e4aadb7efb7844" + } + }, + { + "pluginId": "firecrawl", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/firecrawl/openclaw.plugin.json", + "manifestHash": "351769bde70308fcd4c29cc231d7d5497cd96208f7b8bc9d544be4e11ddb21cf", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/firecrawl/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/firecrawl", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "packageName": "@openclaw/firecrawl-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "0308b289f48e6b273186e6752a744cc638ae40d109305f79e02bf8a1ab4636df" + } + }, + { + "pluginId": "fireworks", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/fireworks/openclaw.plugin.json", + "manifestHash": "c21067b9fc6e1f042cd52bcdb995eb7190042f48d3cc08d8a63a90601283ea47", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/fireworks/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/fireworks", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/fireworks-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "e0ff0d0d6ef7be55c1488fa469b13bd51b8ee22e0641a950a73e697dccc94a2a" + } + }, + { + "pluginId": "github-copilot", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/github-copilot/openclaw.plugin.json", + "manifestHash": "b4db6c7de9ee002fded7ebf3355f8748abd8c6ad01a3bc938a86ec03217b7fd3", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/github-copilot/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/github-copilot", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/github-copilot-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "92ca04188d0726b755b72e69f089a5520c78f634596035ca1598422821c668be" + } + }, + { + "pluginId": "google", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/google/openclaw.plugin.json", + "manifestHash": "b8444b457ed64f5e1f54d2ab65b9b9bc5df3bea422bfa6d5713074f6d6677372", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/google/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/google", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [ + "google-gemini-cli" + ] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/google-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "7391cc68db8db05faa009ba2d318cd5fe46bb9e0e5c9809e584ebd7123e92d6d" + } + }, + { + "pluginId": "google-meet", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/google-meet/openclaw.plugin.json", + "manifestHash": "b93c338672b7ddb5d3753cb74b8060e8ed2ff29b63249d562cd292e9198d88d8", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/google-meet/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/google-meet", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "activation-capability-hint", + "activation-command-hint" + ], + "packageName": "@openclaw/google-meet", + "packageVersion": "2026.4.25", + "packageInstall": { + "warnings": [] + }, + "packageJson": { + "path": "package.json", + "hash": "e848e4107728d5c465ed1ec1552f070f91d1b62ee1fc7e579f345610b1885f4d" + } + }, + { + "pluginId": "googlechat", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/googlechat/openclaw.plugin.json", + "manifestHash": "9ceb567b509a4cc92112ca57317d4fff6412f777bbec3d0b1395f3a47c325640", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/googlechat/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/googlechat", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/googlechat/setup-entry.js", + "packageName": "@openclaw/googlechat", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/googlechat", + "packageName": "@openclaw/googlechat", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "googlechat", + "label": "Google Chat", + "blurb": "Google Workspace Chat app with HTTP webhook." + }, + "packageJson": { + "path": "package.json", + "hash": "ef916d0fbdf647969261a86767d2551b78b469a720aa7378283f0d59937597a1" + } + }, + { + "pluginId": "gradium", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/gradium/openclaw.plugin.json", + "manifestHash": "5bf59788c06079f3cdc53ff8a8cfdbe1e90499797bcd88dfeb8058a2625047c3", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/gradium/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/gradium", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "packageName": "@openclaw/gradium-speech", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "faf10acb129acc892eaa3ed9d3caa88d9f01b1fff5fc22aadb95d64f19ebbe74" + } + }, + { + "pluginId": "groq", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/groq/openclaw.plugin.json", + "manifestHash": "8f4231f8a688c8e25d37b64a519fc658094600cc4bc7678bcbb14c61aa6e601d", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/groq/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/groq", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/groq-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "9458d49f25c682135ff03b47757bbbf92d66e64ba3b57968e335e5d7bba99bd0" + } + }, + { + "pluginId": "huggingface", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/huggingface/openclaw.plugin.json", + "manifestHash": "9531c1e1072a399aa7c550db1a587fe7e6cb18ee179443a9e9ff387ff63742db", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/huggingface/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/huggingface", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/huggingface-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "36cd21534a139368723767b45f47e81686c8cd22cc8554cf5cd31389dd0221ee" + } + }, + { + "pluginId": "imessage", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/imessage/openclaw.plugin.json", + "manifestHash": "9c8b4e3fa6be1f0f60de3aac7e93ee4731493428ca7ab4a989b3f8e94342064d", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/imessage/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/imessage", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/imessage/setup-entry.js", + "packageName": "@openclaw/imessage", + "packageVersion": "2026.4.25", + "packageChannel": { + "id": "imessage", + "label": "iMessage", + "blurb": "this is still a work in progress." + }, + "packageJson": { + "path": "package.json", + "hash": "4062cb824c379685dcff41a39ea4be8f379eeae693eeb11e39c6ac1909eed0ee" + } + }, + { + "pluginId": "inworld", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/inworld/openclaw.plugin.json", + "manifestHash": "9844afe693d076d7375fa4e759c6654a9af7a1b9b90ee49322cb828648351d3e", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/inworld/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/inworld", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/inworld-speech", + "packageVersion": "2026.4.16", + "packageJson": { + "path": "package.json", + "hash": "56eb7869e1d59d2166e0e08dcdc95e53bc54e298efd60bc80fdc710481f50679" + } + }, + { + "pluginId": "irc", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/irc/openclaw.plugin.json", + "manifestHash": "1065f8ff5cf69276d66de118b25933972e29907d942a18eb36994080f40a5a8d", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/irc/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/irc", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/irc/setup-entry.js", + "packageName": "@openclaw/irc", + "packageVersion": "2026.4.25", + "packageInstall": { + "warnings": [] + }, + "packageChannel": { + "id": "irc", + "label": "IRC", + "blurb": "classic IRC networks with DM/channel routing and pairing controls." + }, + "packageJson": { + "path": "package.json", + "hash": "fcf6169330aa196a86b78c3b76dc181ac4d418f378a753df3f52651022da08e6" + } + }, + { + "pluginId": "kilocode", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/kilocode/openclaw.plugin.json", + "manifestHash": "77d506ade22537a72a957fe9a40a7b713f4da1b7e7f282c2ad6ae1c7c6e8e1cf", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/kilocode/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/kilocode", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/kilocode-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "7a42d630747a2eb3696dce29c0f35f9fa4daf7661fff5f34eaaa3f1822672eb7" + } + }, + { + "pluginId": "kimi", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/kimi-coding/openclaw.plugin.json", + "manifestHash": "bee898a9e5dd1f1beefe75d5d8ff77234b53204985f545d6c7b36f98ce285f77", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/kimi-coding/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/kimi-coding", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/kimi-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "7dd1c534c6401cf4ecd6ca30acc11fc2e9bd493b61f24e1f0b36b1311b08086b" + } + }, + { + "pluginId": "line", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/line/openclaw.plugin.json", + "manifestHash": "8b7249db4a7aa9a94424f3da7d0f42a29236b2ff77749b84c0819d8511f0891d", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/line/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/line", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/line/setup-entry.js", + "packageName": "@openclaw/line", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/line", + "packageName": "@openclaw/line", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "line", + "label": "LINE", + "blurb": "LINE Messaging API webhook bot." + }, + "packageJson": { + "path": "package.json", + "hash": "4a8069d8fefff4fc5be85fb168125eadbce6ae540161127217a8f4d7cb0ef88f" + } + }, + { + "pluginId": "litellm", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/litellm/openclaw.plugin.json", + "manifestHash": "e980b4fd8066da6921c151495444800da489e65404046af70a1d38bf567456d0", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/litellm/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/litellm", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/litellm-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "c69d929598b739aab0a620c5e47c46ad76ee2c6144e30506346e0de3cd9b8b40" + } + }, + { + "pluginId": "llm-task", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/llm-task/openclaw.plugin.json", + "manifestHash": "6b16100c00cc56399df60bffe5eaf659c85ba8645e1b73ff21a3c3cd07615bd2", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/llm-task/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/llm-task", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/llm-task", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "5d8a199e1eb8e98d4bc5a56c53c847424bea7524017813386e8e79b6f6faa240" + } + }, + { + "pluginId": "lmstudio", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/lmstudio/openclaw.plugin.json", + "manifestHash": "0d03315ae27a60855763b052be8b61144719d8e2ab627ab1368263c0b2fbcf0b", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/lmstudio/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/lmstudio", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/lmstudio-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "acaff1eacc285b3a1c4526cd62f07dbcff100b73137b07239569857f12b79ed5" + } + }, + { + "pluginId": "lobster", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/lobster/openclaw.plugin.json", + "manifestHash": "da2d3511b4ffb34d2785ddeab4c27e0c613092d77205627602edb8c8d117c8d9", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/lobster/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/lobster", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/lobster", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "e1ce92d365db043923e5fedda90ec89a4be16267263ec7e9eec49df0fadcc437" + } + }, + { + "pluginId": "matrix", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/matrix/openclaw.plugin.json", + "manifestHash": "bc6800832ba0d7049a1825dde019c905c7ad61af1c98fbc718886691e4e3e957", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/matrix/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/matrix", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/matrix/setup-entry.js", + "packageName": "@openclaw/matrix", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/matrix", + "packageName": "@openclaw/matrix", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "matrix", + "label": "Matrix", + "blurb": "open protocol; install the plugin to enable." + }, + "packageJson": { + "path": "package.json", + "hash": "5a31f32ca000703d2985e6be60fc88fa7a95e7173bea7489c7f13c5c14d5e62f" + } + }, + { + "pluginId": "mattermost", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/mattermost/openclaw.plugin.json", + "manifestHash": "5a65029b1e25dd3956a458815cf6d1930805c9c33e8a43213576bb750827875e", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/mattermost/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/mattermost", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/mattermost/setup-entry.js", + "packageName": "@openclaw/mattermost", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/mattermost", + "packageName": "@openclaw/mattermost", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "mattermost", + "label": "Mattermost", + "blurb": "self-hosted Slack-style chat; install the plugin to enable." + }, + "packageJson": { + "path": "package.json", + "hash": "3d7e65394cee513119605338ffd3f80325d600e02cc8905698db45699e01226b" + } + }, + { + "pluginId": "memory-core", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-core/openclaw.plugin.json", + "manifestHash": "60e3a5295d97929cd3763c7029ff4d76d14190972a899c468b0f806a1331cea5", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-core/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-core", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": true, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/memory-core", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "500d44ff6beb14cfcf9445aeeecbce089c0c124b573a049142d014b35dbe2e4b" + } + }, + { + "pluginId": "memory-lancedb", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-lancedb/openclaw.plugin.json", + "manifestHash": "a9cd2d677f7a86f335b0b157d08cddac4a1d2068b5696125644523a1aaacb540", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-lancedb/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-lancedb", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": true, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/memory-lancedb", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/memory-lancedb", + "packageName": "@openclaw/memory-lancedb", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageJson": { + "path": "package.json", + "hash": "ffc6176092a7e8957955ad240bbc2f09d56855b4b1bb9f25976d2befe93da37d" + } + }, + { + "pluginId": "memory-wiki", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-wiki/openclaw.plugin.json", + "manifestHash": "4fa7e66f3dd370db8edcaea44ece0046d8f7b5672da12a2d00660fa04fe3ee98", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-wiki/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/memory-wiki", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/memory-wiki", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "df1060df03849722244947d7bc438394ae233d0c921781af69f3359ad13a702d" + } + }, + { + "pluginId": "microsoft", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/microsoft/openclaw.plugin.json", + "manifestHash": "4fae9b5374016e1d457a0c18e7ab86f116af790fea107e1f63c683fe78951d69", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/microsoft/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/microsoft", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/microsoft-speech", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "545ec65dc58d79eeb727b60f61f87ea47ff9ff0197298637875fda29e4df964f" + } + }, + { + "pluginId": "microsoft-foundry", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/microsoft-foundry/openclaw.plugin.json", + "manifestHash": "52f4abbe73017c0c006a596c150826bafde6889af3882bb0bb06360ad7dd3c70", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/microsoft-foundry/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/microsoft-foundry", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/microsoft-foundry", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "40e4d66c8a93368b0f88a33399f714c0800c47ee4bca1b0e7de1a3b017ea77e6" + } + }, + { + "pluginId": "migrate-claude", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/migrate-claude/openclaw.plugin.json", + "manifestHash": "ab37718aca1e40a1347c058f5497719ba83f7d30a8c0b5de1bfc27f8638275f2", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/migrate-claude/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/migrate-claude", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/migrate-claude", + "packageVersion": "2026.4.26", + "packageJson": { + "path": "package.json", + "hash": "cce4be22bdaf18bce2e65d176432974ecd01daac4dfff12c537de9dcf439969c" + } + }, + { + "pluginId": "migrate-hermes", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/migrate-hermes/openclaw.plugin.json", + "manifestHash": "82bb35ee30b4305bd66d2c76d79c3efda1adc348164d36fcae4ba7484f2958d6", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/migrate-hermes/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/migrate-hermes", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/migrate-hermes", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "023cba2c116b0f91a5560758a68fb343e71452db51ea4cbafa07865764bad538" + } + }, + { + "pluginId": "minimax", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/minimax/openclaw.plugin.json", + "manifestHash": "0d58923712c6f1516c002e911825420a883e7fb9c833d6fa9a8db76f3fa2b821", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/minimax/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/minimax", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/minimax-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "429ed9e2dc3ed6ff39686b08add1a69a1e2e09773771bbea604bbc0f83a73d8b" + } + }, + { + "pluginId": "mistral", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/mistral/openclaw.plugin.json", + "manifestHash": "7e47f73e868bf88682f047688906d7575d384733c60db78b258ae3a99ac14f24", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/mistral/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/mistral", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/mistral-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "08ed115db3d0ab6ef76f4ac774cf3af1858e69115454fcddc38df5b49e45f79a" + } + }, + { + "pluginId": "moonshot", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/moonshot/openclaw.plugin.json", + "manifestHash": "de633d72c55f10ee2a23ab1e38e2d03042e62350e7d04f7c2779ec68dcbeb797", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/moonshot/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/moonshot", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/moonshot-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "e2f597b5cc1281b578c4028aeeff83afab70a2bd9beb7f3476ba3a206b9231fe" + } + }, + { + "pluginId": "msteams", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/msteams/openclaw.plugin.json", + "manifestHash": "1918b1f86e7847a880b3b6c397b66d967d7121aaef37be177d7bd67473d2a47f", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/msteams/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/msteams", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/msteams/setup-entry.js", + "packageName": "@openclaw/msteams", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/msteams", + "packageName": "@openclaw/msteams", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "msteams", + "label": "Microsoft Teams", + "blurb": "Teams SDK; enterprise support." + }, + "packageJson": { + "path": "package.json", + "hash": "81e4e205bd99ee06cf7eef6480868102b2ca54b0e38033e8b2600a2f0fc23e65" + } + }, + { + "pluginId": "nextcloud-talk", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nextcloud-talk/openclaw.plugin.json", + "manifestHash": "05762deb446ee4cc3297ee3b10d7aad1def417dc9c2b34b75f52447f101158ef", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nextcloud-talk/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nextcloud-talk", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nextcloud-talk/setup-entry.js", + "packageName": "@openclaw/nextcloud-talk", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/nextcloud-talk", + "packageName": "@openclaw/nextcloud-talk", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "nextcloud-talk", + "label": "Nextcloud Talk", + "blurb": "Self-hosted chat via Nextcloud Talk webhook bots." + }, + "packageJson": { + "path": "package.json", + "hash": "6e969ccea11362403316ce4845f1d7f671beb3ffb41ccca76a787261bff83da3" + } + }, + { + "pluginId": "nostr", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nostr/openclaw.plugin.json", + "manifestHash": "f6ff347d27c6044423a50c226762cee34fe410b13498e42fad2fddaefb4bad32", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nostr/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nostr", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nostr/setup-entry.js", + "packageName": "@openclaw/nostr", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/nostr", + "packageName": "@openclaw/nostr", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "nostr", + "label": "Nostr", + "blurb": "Decentralized protocol; encrypted DMs via NIP-04." + }, + "packageJson": { + "path": "package.json", + "hash": "e91dd996a24ebe5b5f01506bd71ba82293989c8402e2712be8af05a2a96b5f8c" + } + }, + { + "pluginId": "nvidia", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nvidia/openclaw.plugin.json", + "manifestHash": "7d7ce5299a33c5929869f88dfb95a57b0b2043a67809fe83801826094cd2b4ba", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nvidia/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/nvidia", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/nvidia-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "2901002541f3f18b8c6ea8df4b138a8fdc90a1dcf772939c395343847512e093" + } + }, + { + "pluginId": "ollama", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/ollama/openclaw.plugin.json", + "manifestHash": "50f27f6cee42ac98c71b341275f0f8c85272732b9a3c2c2482460f71e6b7516f", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/ollama/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/ollama", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "syntheticAuthRefs": [ + "ollama" + ], + "packageName": "@openclaw/ollama-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "ea5b291af9e4317c0d7de5ba80a19d5b761e28adbad69ee9b191f70255dc7033" + } + }, + { + "pluginId": "open-prose", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/open-prose/openclaw.plugin.json", + "manifestHash": "b7b6e77271010216cc988012c9238b1b989a5e7ab8a70ad7b98b499031a6b89a", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/open-prose/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/open-prose", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/open-prose", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "2e243ada0e583d33557964a639603259587c5f00e562ccb6790262f8f59caf93" + } + }, + { + "pluginId": "openai", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openai/openclaw.plugin.json", + "manifestHash": "0cb3dfeda2767b5c7d07cf18487f87525a993d6d2bbeed327dab3ddfd86a47ee", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openai/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openai", + "origin": "bundled", + "enabled": true, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [ + "codex-cli" + ] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/openai-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "2a3d6b66dc31226e502d3b5729362c595475c9c4a3b82203c02c01b4a0add2a8" + } + }, + { + "pluginId": "opencode", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/opencode/openclaw.plugin.json", + "manifestHash": "5dbd1513f4fc7a6e7baedc5fd81681523df3c5c9f42eeeebde050eb87e0ef465", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/opencode/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/opencode", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/opencode-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "c4e6362741834b21418bfdd6af0a941a3890ec869b2c124ecf55efe708997054" + } + }, + { + "pluginId": "opencode-go", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/opencode-go/openclaw.plugin.json", + "manifestHash": "865d0eb0867fb936580818f1efee9ff23950f833f9a6ea4ecec86b722bcf1ad4", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/opencode-go/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/opencode-go", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/opencode-go-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "30edd7c01109985c5e98bbe27eb7c8901446d80b3c5200483c3c1fb3a366abb0" + } + }, + { + "pluginId": "openrouter", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openrouter/openclaw.plugin.json", + "manifestHash": "391cb3aaa02ec9d697c149f2a9137e3cf241ad6b5b1a073e4de59a17a61d3b97", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openrouter/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openrouter", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/openrouter-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "920d367d485ffa8f65495f6b979cbee771bbe6feecd8a1c3e1734d05544c9d16" + } + }, + { + "pluginId": "openshell", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openshell/openclaw.plugin.json", + "manifestHash": "a145b0c701f9683f1233679547061155db4fabd5279d80c77082e3d225222e31", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openshell/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/openshell", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/openshell-sandbox", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "d277364e1dc53b91bd29c2bdec71e86b454470dc48b5151a859842643529e42d" + } + }, + { + "pluginId": "perplexity", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/perplexity/openclaw.plugin.json", + "manifestHash": "e74ebc83aac018f7c6d8324ba6841c383067d7611f29c7b63a3b8f49d082a917", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/perplexity/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/perplexity", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "packageName": "@openclaw/perplexity-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "77e9a99d2d6b46974482b926b85e0214bc4e2133eceefc9f97cad2155d0d6db9" + } + }, + { + "pluginId": "phone-control", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/phone-control/openclaw.plugin.json", + "manifestHash": "b72511655c2d09e181fae00026ac7aab2784d73c4a351022dd8bd3be68826ec1", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/phone-control/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/phone-control", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true + }, + { + "pluginId": "qianfan", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qianfan/openclaw.plugin.json", + "manifestHash": "fa4e31f6f12cb78e0364858bef2f1754def438e5ac5052581e741380451c12f3", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qianfan/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qianfan", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/qianfan-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "cbe7b63a94bc560dea4938c1c55e3d3dcc8b12afc79d28f031f60a8247f034c0" + } + }, + { + "pluginId": "qqbot", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qqbot/openclaw.plugin.json", + "manifestHash": "7257e9722717a110c40dd4fcadffcaa66b15df71e24a4dc185abaed2ee6e9d0b", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qqbot/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qqbot", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "enabledByDefault": true, + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qqbot/setup-entry.js", + "packageName": "@openclaw/qqbot", + "packageVersion": "2026.4.27", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/qqbot", + "packageName": "@openclaw/qqbot", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "local": { + "path": "extensions/qqbot" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "qqbot", + "label": "QQ Bot", + "blurb": "connect to QQ via official QQ Bot API with group chat and direct message support." + }, + "packageJson": { + "path": "package.json", + "hash": "660bcafdac4f8f9c220b78cae7cd173f9f8888bc339aa6f22876b3484bc8935f" + } + }, + { + "pluginId": "qwen", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qwen/openclaw.plugin.json", + "manifestHash": "994c4339229eff999ac92cbd758ee94c919d2772450043aa146b60db8e5ff817", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qwen/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/qwen", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/qwen-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "dc54854f9a8c254cccee2af81ac821b2a6e5a228f03a79455aee8b28fcad2fca" + } + }, + { + "pluginId": "runway", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/runway/openclaw.plugin.json", + "manifestHash": "85ba6a67ee0c0c754b459df417c143cf0bb54d70c06ba7682ed94a5560bcd879", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/runway/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/runway", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/runway-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "6f1acddf5e2315e4d6cace07ebb43f8a4edc1657b47a734f1de1c8f9e4df8a72" + } + }, + { + "pluginId": "searxng", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/searxng/openclaw.plugin.json", + "manifestHash": "1870f1133b5090e746c1507328755b5972e69bca59c7de72c5285ea18f514d3b", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/searxng/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/searxng", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/searxng-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "4cec5e24714742e3aa89132bdf467df3848a9e5d8afcbcebb1713d2935817609" + } + }, + { + "pluginId": "senseaudio", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/senseaudio/openclaw.plugin.json", + "manifestHash": "8127452c5a626bc5f6120ea7cf693bacfe2ff2e682173c1b8bd82e0ee9910bea", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/senseaudio/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/senseaudio", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/senseaudio-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "cd3e14392a560126edefd162cf5f55e8bdda1f86324c78703b7fd84162c94435" + } + }, + { + "pluginId": "sglang", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/sglang/openclaw.plugin.json", + "manifestHash": "b5144177b734d85fd025fedbbc424386b62a36667e18e66b0244ae5ffb226986", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/sglang/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/sglang", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/sglang-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "029898f456e8d442c5230f25142f0dd0ef96264708f50531df3dde90850a8e07" + } + }, + { + "pluginId": "signal", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/signal/openclaw.plugin.json", + "manifestHash": "c48244361a12dc78f5b5d9f15dff06fc7384603f0a3818946090b76775a456fc", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/signal/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/signal", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/signal/setup-entry.js", + "packageName": "@openclaw/signal", + "packageVersion": "2026.4.25", + "packageChannel": { + "id": "signal", + "label": "Signal", + "blurb": "signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\")." + }, + "packageJson": { + "path": "package.json", + "hash": "c1eb2ca13a0868630bf675292c29d047d5c7e6839f538e27ffe25d33b0563172" + } + }, + { + "pluginId": "skill-workshop", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/skill-workshop/openclaw.plugin.json", + "manifestHash": "f480b74bb21088de8def5612525f1892d5f50ca54beedc086122beca75ac77dd", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/skill-workshop/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/skill-workshop", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/skill-workshop", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "7027c83a7b4bad315f3add320477c47e8aca51dcab83edef45c900ebd0237aec" + } + }, + { + "pluginId": "slack", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/slack/openclaw.plugin.json", + "manifestHash": "da8efdd023950ff3e792e40d11eb7baa09a1309d62f6dfa2d8b103a05801e9cb", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/slack/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/slack", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/slack/setup-entry.js", + "packageName": "@openclaw/slack", + "packageVersion": "2026.4.25", + "packageChannel": { + "id": "slack", + "label": "Slack", + "blurb": "supported (Socket Mode).", + "commands": { + "nativeCommandsAutoEnabled": false, + "nativeSkillsAutoEnabled": false + } + }, + "packageJson": { + "path": "package.json", + "hash": "d997cb6c1fb353703027f8b831e5310f6c8e7a4dca83d85220925e13cc61c28f" + } + }, + { + "pluginId": "stepfun", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/stepfun/openclaw.plugin.json", + "manifestHash": "aaa39c269b64908b2daf3d1a0c71e4151880e32edadce3099bb5be6bf34ea623", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/stepfun/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/stepfun", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/stepfun-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "ca40bafd0bba02022bdf1a03d2d3be0bc0ce155383ccccf3465cb27e2d551ff7" + } + }, + { + "pluginId": "synology-chat", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/synology-chat/openclaw.plugin.json", + "manifestHash": "6afa1321b1b8e2008b992c979835816cc7e6a08b4188fdf4bd887aa55f8a9a8c", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/synology-chat/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/synology-chat", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/synology-chat/setup-entry.js", + "packageName": "@openclaw/synology-chat", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/synology-chat", + "packageName": "@openclaw/synology-chat", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "synology-chat", + "label": "Synology Chat", + "blurb": "Connect your Synology NAS Chat to OpenClaw with full agent capabilities." + }, + "packageJson": { + "path": "package.json", + "hash": "0ec607683eedf320909615b2201b8b86d355b41d70debe28d36d842467c374c3" + } + }, + { + "pluginId": "synthetic", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/synthetic/openclaw.plugin.json", + "manifestHash": "06849c938523b2429c169c5fafd29753bc74191ddd91e0e8c235a8a01b5ced80", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/synthetic/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/synthetic", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/synthetic-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "bd3b7ab5d699b1b3f8c82894a2ffe1c0db450dcc72df9c437195699ec4809369" + } + }, + { + "pluginId": "talk-voice", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/talk-voice/openclaw.plugin.json", + "manifestHash": "e74b5b2dfff117b54cd80728c4fc5b54a56085fc870e6f9d5c9914a151aa812f", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/talk-voice/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/talk-voice", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true + }, + { + "pluginId": "tavily", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tavily/openclaw.plugin.json", + "manifestHash": "a1166b6ed60832b3359628844e6dead8b4869802eb8c520dfa9bd1ce16dbe59b", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tavily/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tavily", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "packageName": "@openclaw/tavily-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "8157fd04da32ccaa05ab11dde29fa7752ff25d36b917ab59c38979e30ddfe51c" + } + }, + { + "pluginId": "telegram", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/telegram/openclaw.plugin.json", + "manifestHash": "649b888dc8bca0bec4e4c03670172d3ab7413d184f380a436a5897d6a47f3225", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/telegram/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/telegram", + "origin": "bundled", + "enabled": true, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/telegram/setup-entry.js", + "packageName": "@openclaw/telegram", + "packageVersion": "2026.4.25", + "packageChannel": { + "id": "telegram", + "label": "Telegram", + "blurb": "simplest way to get started — register a bot with @BotFather and get going.", + "commands": { + "nativeCommandsAutoEnabled": true, + "nativeSkillsAutoEnabled": true + } + }, + "packageJson": { + "path": "package.json", + "hash": "ec02e77a9bb91c15bfb345853e4ce4bc9e59925b26371cdd024ab6a3dca30622" + } + }, + { + "pluginId": "tencent", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tencent/openclaw.plugin.json", + "manifestHash": "d9ae8a4dfc783d79af35a938e01e0208a6719850483756d3fdf20b231d7909ef", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tencent/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tencent", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/tencent-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "2f3e24e75ea2eadd29069ddf81d6b90a23c70ddb5ce34ab81ca4344cc9df4e58" + } + }, + { + "pluginId": "thread-ownership", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/thread-ownership/openclaw.plugin.json", + "manifestHash": "d9b6ba4a091fbd003fe01376b6ebb6c63c0adf67b92e77c814210fea908213f2", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/thread-ownership/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/thread-ownership", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [] + }, + { + "pluginId": "tlon", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tlon/openclaw.plugin.json", + "manifestHash": "0f2f22c3e23d65cd3073e47ac604f4f953d9744135fe8ae84d085366ea2eea7c", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tlon/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tlon", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tlon/setup-entry.js", + "packageName": "@openclaw/tlon", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/tlon", + "packageName": "@openclaw/tlon", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "tlon", + "label": "Tlon", + "blurb": "decentralized messaging on Urbit; install the plugin to enable." + }, + "packageJson": { + "path": "package.json", + "hash": "ecaac0e4aa3ee6fbb69f9433a0e7a59e34437948d0681badc72d5f17c9a325ef" + } + }, + { + "pluginId": "together", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/together/openclaw.plugin.json", + "manifestHash": "5550d194d452815b3e852c40932bbea4751da8a9fb978c219ebf836e1e070bb4", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/together/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/together", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/together-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "4b4fa55aabb935a48a0e6fb7e66041d1fd29a3110f631b3d23a130a34a304067" + } + }, + { + "pluginId": "tokenjuice", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tokenjuice/openclaw.plugin.json", + "manifestHash": "48244d67406b7ea708353ccbd6ef9d80805ea81b1f00595317cdd9a629be4cb4", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tokenjuice/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tokenjuice", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/tokenjuice", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "fdfb4bc113ced9370c75fa20cf4a8a70dd9a397bf53d996f6df78b72c6cd9720" + } + }, + { + "pluginId": "tts-local-cli", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tts-local-cli/openclaw.plugin.json", + "manifestHash": "3d5e89884b8b1e7a70bf66a931ac9065253f045e80c04121b706ab6cd60c26a7", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tts-local-cli/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/tts-local-cli", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/tts-local-cli", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "d8fba750b58d165cce40b440be4445f068f7f51f3bc3d5934171bee16b36a253" + } + }, + { + "pluginId": "twitch", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/twitch/openclaw.plugin.json", + "manifestHash": "090ad7e31ee44101496a88a5d83601e88dd51246c3d63e67a6a8cf4b7f37279d", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/twitch/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/twitch", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/twitch/setup-entry.js", + "packageName": "@openclaw/twitch", + "packageVersion": "2026.4.25", + "packageInstall": { + "warnings": [] + }, + "packageChannel": { + "id": "twitch", + "label": "Twitch", + "blurb": "Twitch chat integration" + }, + "packageJson": { + "path": "package.json", + "hash": "742171f6c21aee5c295696eeb66215ca295b4edd64a0037a42d9608f93877f71" + } + }, + { + "pluginId": "venice", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/venice/openclaw.plugin.json", + "manifestHash": "c8129a5ea11a2896b259f77121acf6b2cb3da24ff5990ae02edd0ecee9580eaf", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/venice/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/venice", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/venice-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "3fa8ed3241453ccbd1b50e84602d38b6a7100d947785023355cce24f13a0b595" + } + }, + { + "pluginId": "vercel-ai-gateway", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vercel-ai-gateway/openclaw.plugin.json", + "manifestHash": "121fc8506f2a07479dcf222567771054771177c78d8d69e4ca1c751c89cc5840", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vercel-ai-gateway/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vercel-ai-gateway", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/vercel-ai-gateway-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "822abef10c4f91fc4ef1a76c808fbfeef3c07708ae4a300d763ef55d3cd3db7a" + } + }, + { + "pluginId": "vllm", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vllm/openclaw.plugin.json", + "manifestHash": "b1429f12511c8edb6c6e5d58d812d34c1bb2e58eea689014665859dc6611c5c5", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vllm/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vllm", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/vllm-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "da920f5ab2990e2dd02a63f2e2406c2f599555390d0a9d3215ae8db3fd3224f3" + } + }, + { + "pluginId": "voice-call", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/voice-call/openclaw.plugin.json", + "manifestHash": "a6c3f731b4dd3790b05e46578cbf783191d42989b7e9035fb68183c4b8f3137c", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/voice-call/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/voice-call", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "packageName": "@openclaw/voice-call", + "packageVersion": "2026.4.25", + "packageInstall": { + "warnings": [] + }, + "packageJson": { + "path": "package.json", + "hash": "5ff55c4ab312c4481fe1d77249072a3525cc71d25f1ea6f972e9812cd710cc6d" + } + }, + { + "pluginId": "volcengine", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/volcengine/openclaw.plugin.json", + "manifestHash": "8b2cb1b71a74235f10f98e50d95683029c4372b7f2d0beb501e96766f4cb177a", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/volcengine/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/volcengine", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/volcengine-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "753a110aa30bb14fff0d152879778350381fcec12e84eca2874ddc2ead1cd47a" + } + }, + { + "pluginId": "voyage", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/voyage/openclaw.plugin.json", + "manifestHash": "d5064db53aabba5a0dff434cbb696ddac00872baf91b41a9ead4e91068b4a834", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/voyage/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/voyage", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/voyage-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "17298f962b71eb2935dcddd20bc9b21e2cac825467437c64c0aade47cf4dc46d" + } + }, + { + "pluginId": "vydra", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vydra/openclaw.plugin.json", + "manifestHash": "32d6dc637659275061ddde70ae3d07f9614ba6b28c6e7c1a32f3b53d1e65f71f", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vydra/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/vydra", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/vydra-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "d503c435fcb7350babc577c12b7a2d5b1441ae708c333acd92dd3890c5e2d3cf" + } + }, + { + "pluginId": "web-readability", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/web-readability/openclaw.plugin.json", + "manifestHash": "3fb9b2d5c284d27c5bef18b63c99baf5f2bdfd82ac874b342fd387f450b2d7e8", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/web-readability/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/web-readability", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "enabledByDefault": true, + "packageName": "@openclaw/web-readability-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "a3b921d19a6f0bd7454e3be1e85d2d0d5c1ebd6621178c11af2d7030b6760344" + } + }, + { + "pluginId": "webhooks", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/webhooks/openclaw.plugin.json", + "manifestHash": "7191e52bc4113b1ef24deececc8cb6dbfa598e569c96a296af1f787051d9c63a", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/webhooks/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/webhooks", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": true, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "packageName": "@openclaw/webhooks", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "a6aa8639d32b62d469f86b87b3e7fa44da7e426bac7c9c3be66883397764948a" + } + }, + { + "pluginId": "whatsapp", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/whatsapp/openclaw.plugin.json", + "manifestHash": "987d13b828e8ab107c72ba537f6b289fa6df4558a5d89a3bd61496171b51e453", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/whatsapp/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/whatsapp", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/whatsapp/setup-entry.js", + "packageName": "@openclaw/whatsapp", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/whatsapp", + "packageName": "@openclaw/whatsapp", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "whatsapp", + "label": "WhatsApp", + "blurb": "works with your own number; recommend a separate phone + eSIM." + }, + "packageJson": { + "path": "package.json", + "hash": "e54b709475ccaef9dadd3aec11b4c2f34b169191fee4f5387d4a58c1389847e6" + } + }, + { + "pluginId": "xai", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/xai/openclaw.plugin.json", + "manifestHash": "c795dde319dcac51b6cf35eb1c741928fa6956ece6fdfa31599d0bdb4fb00561", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/xai/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/xai", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "syntheticAuthRefs": [ + "xai" + ], + "packageName": "@openclaw/xai-plugin", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "28e7cd44bcfe699e45e5450d5c7a0bbd93b58896c1c3e3028c0e8e3e8bec99b7" + } + }, + { + "pluginId": "xiaomi", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/xiaomi/openclaw.plugin.json", + "manifestHash": "ef8a6e1b3c221d82a3fe40a7b141876aed1684dbb968c66a4a50fece1c5fcc04", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/xiaomi/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/xiaomi", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/xiaomi-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "60d8b2344da4bd7f417948484e6fbae1dda8e66cbbe07f9b56dc306c2f4afcdf" + } + }, + { + "pluginId": "zai", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zai/openclaw.plugin.json", + "manifestHash": "2540d6eb3cd13d9552d4622e5f56c847cc4b6ed70c236ab5478b7112081d8c63", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zai/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zai", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "provider-auth-env-vars" + ], + "enabledByDefault": true, + "packageName": "@openclaw/zai-provider", + "packageVersion": "2026.4.25", + "packageJson": { + "path": "package.json", + "hash": "9014cf0b8fa30aa3625cf21868797f2e4bf34a1249d9472f56e17ad54aeea419" + } + }, + { + "pluginId": "zalo", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalo/openclaw.plugin.json", + "manifestHash": "635c83aa3b28d07c85cf55257e084dd678fcbe9808bc2b76db19edadcc43dcb1", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalo/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalo", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalo/setup-entry.js", + "packageName": "@openclaw/zalo", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/zalo", + "packageName": "@openclaw/zalo", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "zalo", + "label": "Zalo", + "blurb": "Vietnam-focused messaging platform with Bot API." + }, + "packageJson": { + "path": "package.json", + "hash": "b3123fe70d536546407d3f4bdb99a745570058acbad9f3bd256a8c2bddd1549d" + } + }, + { + "pluginId": "zalouser", + "manifestPath": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalouser/openclaw.plugin.json", + "manifestHash": "ddc0e836a0d176d0e2c04e2d3bef6b5a81c3df40d3e17929f59e3a8975381366", + "source": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalouser/index.js", + "rootDir": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalouser", + "origin": "bundled", + "enabled": false, + "startup": { + "sidecar": false, + "memory": false, + "deferConfiguredChannelFullLoadUntilAfterListen": false, + "agentHarnesses": [] + }, + "compat": [ + "channel-env-vars" + ], + "setupSource": "/home/openclaw/.local/share/pnpm/5/.pnpm/openclaw@2026.4.29/node_modules/openclaw/dist/extensions/zalouser/setup-entry.js", + "packageName": "@openclaw/zalouser", + "packageVersion": "2026.4.25", + "packageInstall": { + "defaultChoice": "npm", + "npm": { + "spec": "@openclaw/zalouser", + "packageName": "@openclaw/zalouser", + "selectorKind": "none", + "exactVersion": false, + "pinState": "floating-without-integrity" + }, + "warnings": [ + "npm-spec-floating", + "npm-spec-missing-integrity" + ] + }, + "packageChannel": { + "id": "zalouser", + "label": "Zalo Personal", + "blurb": "Zalo personal account via QR code login." + }, + "packageJson": { + "path": "package.json", + "hash": "65f578897117d6ae428bb54e4b02b44f2cc0ca0e88b05463abd2e2a7a2a3f370" + } + } + ], + "diagnostics": [] +} diff --git a/scripts/voice-memo-service.py b/scripts/voice-memo-service.py new file mode 100644 index 0000000..ccdaed0 --- /dev/null +++ b/scripts/voice-memo-service.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python3 +"""Voice Memo Pipeline Service - native voice ingress + Kokoro TTS read-back.""" +from __future__ import annotations +import base64, json, os, re, time +import urllib.error, urllib.request, uuid +from http.server import HTTPServer, BaseHTTPRequestHandler +from pathlib import Path + +PORT = int(os.environ.get("VOICE_MEMO_PORT", "18813")) +WHISPER_URL = os.environ.get("WHISPER_BASE_URL", "http://127.0.0.1:18811") +LLM_URL = os.environ.get("LLAMA_CPP_BASE_URL", "http://127.0.0.1:18806") +KOKORO_URL = os.environ.get("KOKORO_BASE_URL", "http://127.0.0.1:18805") +TELEGRAM_BOT_TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN", "") +DISCORD_BOT_TOKEN = os.environ.get("DISCORD_BOT_TOKEN", "") +KOKORO_VOICE = os.environ.get("KOKORO_VOICE", "af_heart") +AUDIO_DIR = Path(os.environ.get("VOICE_MEMO_AUDIO_DIR", "/tmp/voice-memo-audio")) +LLM_MODEL = os.environ.get("VOICE_MEMO_LLM_MODEL", "local") +AUDIO_DIR.mkdir(parents=True, exist_ok=True) + +def log(msg): + print(f"[voice-memo] {time.strftime('%H:%M:%S')} {msg}", flush=True) + +def encode_multipart(fields, files): + boundary = "----voice-memo-" + uuid.uuid4().hex + parts = [] + for n, v in fields.items(): + parts.append(f"--{boundary}\r\n".encode()) + parts.append(f'Content-Disposition: form-data; name="{n}"\r\n\r\n'.encode()) + parts.append(str(v).encode()) + parts.append(b"\r\n") + for n, (fn, data, ct) in files.items(): + parts.append(f"--{boundary}\r\n".encode()) + parts.append(f'Content-Disposition: form-data; name="{n}"; filename="{fn}"\r\n'.encode()) + parts.append(f"Content-Type: {ct}\r\n\r\n".encode()) + parts.append(data) + parts.append(b"\r\n") + parts.append(f"--{boundary}--\r\n".encode()) + return b"".join(parts), f"multipart/form-data; boundary={boundary}" + +def http_get_json(url, headers=None, timeout=30): + req = urllib.request.Request(url, method="GET") + for k, v in (headers or {}).items(): + req.add_header(k, v) + with urllib.request.urlopen(req, timeout=timeout) as r: + return json.loads(r.read().decode()) + +def http_download(url, headers=None, timeout=120): + req = urllib.request.Request(url, method="GET") + for k, v in (headers or {}).items(): + req.add_header(k, v) + with urllib.request.urlopen(req, timeout=timeout) as r: + return r.read() + +def download_telegram_voice(file_id): + if not TELEGRAM_BOT_TOKEN: + raise ValueError("TELEGRAM_BOT_TOKEN not configured") + base = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}" + info = http_get_json(f"{base}/getFile?file_id={file_id}") + if not info.get("ok"): + raise ValueError(f"Telegram getFile failed: {info}") + fp = info["result"]["file_path"] + return http_download(f"https://api.telegram.org/file/bot{TELEGRAM_BOT_TOKEN}/{fp}") + +def download_discord_attachment(url): + hdrs = {} + if DISCORD_BOT_TOKEN: + hdrs["Authorization"] = f"Bot {DISCORD_BOT_TOKEN}" + return http_download(url, headers=hdrs) + +def transcribe_audio(audio_data, filename="audio.ogg", language="en"): + fields = {"response_format": "json", "language": language or "en", "temperature": "0.0"} + files = {"file": (filename, audio_data, "application/octet-stream")} + body, ct = encode_multipart(fields, files) + url = WHISPER_URL.rstrip("/") + "/v1/audio/transcriptions" + req = urllib.request.Request(url, data=body, headers={"Content-Type": ct}, method="POST") + try: + with urllib.request.urlopen(req, timeout=300) as r: + raw = r.read().decode() + except urllib.error.HTTPError as e: + raise RuntimeError(f"Whisper HTTP {e.code}: {e.read().decode()[:300]}") + data = json.loads(raw) + text = str(data.get("text", data.get("transcript", ""))).strip() if isinstance(data, dict) else raw.strip() + if not text: + raise RuntimeError("Whisper returned no transcript") + return text + +SUMMARY_PROMPT = """You process voice memos. Given the transcript, produce a JSON object with: +- "summary": 2-4 sentence summary +- "action_items": list of tasks/reminders/follow-ups (empty list if none) +Output ONLY valid JSON. +TRANSCRIPT: +{transcript}""" + +def summarize_transcript(transcript): + payload = { + "model": LLM_MODEL, + "messages": [ + {"role": "system", "content": "You output only valid JSON."}, + {"role": "user", "content": SUMMARY_PROMPT.format(transcript=transcript)} + ], + "temperature": 0.3, "max_tokens": 1024, "stream": False + } + url = LLM_URL.rstrip("/") + "/v1/chat/completions" + req = urllib.request.Request(url, data=json.dumps(payload).encode(), + headers={"Content-Type": "application/json"}, method="POST") + try: + with urllib.request.urlopen(req, timeout=120) as r: + result = json.loads(r.read().decode()) + except urllib.error.HTTPError as e: + raise RuntimeError(f"LLM HTTP {e.code}: {e.read().decode()[:300]}") + content = result.get("choices", [{}])[0].get("message", {}).get("content", "").strip() + m = re.search(r"\{[\s\S]*\}", content) + if m: + try: + p = json.loads(m.group()) + return {"summary": p.get("summary", content), "action_items": p.get("action_items", [])} + except json.JSONDecodeError: + pass + return {"summary": content, "action_items": []} + +def generate_tts(text, voice=None, fmt="mp3", speed=1.0): + payload = {"model": "kokoro", "input": text, "voice": voice or KOKORO_VOICE, + "response_format": fmt, "speed": speed, "stream": False} + url = KOKORO_URL.rstrip("/") + "/v1/audio/speech" + req = urllib.request.Request(url, data=json.dumps(payload).encode(), + headers={"Content-Type": "application/json", "Accept": "audio/*"}, method="POST") + try: + with urllib.request.urlopen(req, timeout=120) as r: + return r.read() + except urllib.error.HTTPError as e: + raise RuntimeError(f"Kokoro HTTP {e.code}: {e.read().decode()[:300]}") + +def save_audio(data, fmt="mp3"): + fname = f"{uuid.uuid4().hex}.{fmt}" + (AUDIO_DIR / fname).write_bytes(data) + return f"/audio/{fname}" + +def process_memo(body, uploaded_audio=None): + t0 = time.time() + language = body.get("language", "en") + audio_fmt = body.get("audio_format", "ogg") + tts_readback = body.get("tts_readback", False) + tts_voice = body.get("tts_voice", KOKORO_VOICE) + tts_format = body.get("tts_format", "mp3") + source = body.get("source", "unknown") + + if uploaded_audio: + audio_data = uploaded_audio + source = source or "upload" + elif body.get("telegram_file_id"): + log(f"Downloading Telegram voice: {body['telegram_file_id'][:20]}...") + audio_data = download_telegram_voice(body["telegram_file_id"]) + source = "telegram" + elif body.get("discord_audio_url"): + log(f"Downloading Discord attachment...") + audio_data = download_discord_attachment(body["discord_audio_url"]) + source = "discord" + elif body.get("audio_url"): + log(f"Downloading audio URL...") + audio_data = http_download(body["audio_url"]) + source = source or "url" + elif body.get("audio_base64"): + audio_data = base64.b64decode(body["audio_base64"]) + source = source or "base64" + else: + raise ValueError("No audio source. Send: audio_url, telegram_file_id, discord_audio_url, audio_base64, or upload.") + + if not audio_data: + raise ValueError("Audio data is empty") + log(f"Got {len(audio_data)} bytes from {source}") + + ext = "ogg" if source == "telegram" else audio_fmt + log("Transcribing...") + transcript = transcribe_audio(audio_data, filename=f"voice_memo.{ext}", language=language) + log(f"Transcript ({len(transcript)} chars)") + + log("Summarizing...") + result = summarize_transcript(transcript) + + audio_url = None + if tts_readback and result.get("summary"): + log("Generating TTS read-back...") + try: + tts_data = generate_tts(result["summary"], voice=tts_voice, fmt=tts_format) + audio_url = save_audio(tts_data, fmt=tts_format) + log(f"TTS saved: {audio_url}") + except Exception as exc: + log(f"TTS failed (non-fatal): {exc}") + + elapsed = round(time.time() - t0, 2) + log(f"Done in {elapsed}s") + return {"ok": True, "transcript": transcript, "summary": result.get("summary", ""), + "action_items": result.get("action_items", []), "audio_url": audio_url, + "source": source, "duration_s": elapsed, "metadata": body.get("metadata", {})} + +class VoiceMemoHandler(BaseHTTPRequestHandler): + def do_GET(self): + path = self.path.split("?")[0].rstrip("/") + if path == "/healthz": + self._json({"status": "ok", "service": "voice-memo", "port": PORT}) + elif path.startswith("/audio/"): + self._serve_audio(path) + else: + self._json({"error": "not found"}, 404) + + def do_POST(self): + path = self.path.split("?")[0].rstrip("/") + if path == "/memo": + self._handle_json() + elif path == "/memo/upload": + self._handle_upload() + else: + self._json({"error": "not found"}, 404) + + def _handle_json(self): + try: + n = int(self.headers.get("Content-Length", 0)) + body = json.loads(self.rfile.read(n).decode()) + except Exception as e: + return self._json({"ok": False, "error": f"Bad body: {e}"}, 400) + try: + self._json(process_memo(body)) + except Exception as e: + log(f"Error: {e}") + self._json({"ok": False, "error": str(e)}, 500) + + def _handle_upload(self): + try: + ct = self.headers.get("Content-Type", "") + n = int(self.headers.get("Content-Length", 0)) + raw = self.rfile.read(n) + audio_data = None + audio_fmt = "ogg" + if "multipart/form-data" in ct: + boundary = ct.split("boundary=")[-1].strip() + for part in raw.split(f"--{boundary}".encode()): + if not part or part.strip() in (b"--", b"--\r\n"): + continue + try: + hend = part.index(b"\r\n\r\n") + except ValueError: + continue + hdrs = part[:hend].decode("utf-8", errors="replace") + bdata = part[hend+4:] + if bdata.endswith(b"\r\n"): + bdata = bdata[:-2] + if 'name="file"' in hdrs or 'name="audio"' in hdrs: + audio_data = bdata + fm = re.search(r'filename="([^"]+)"', hdrs) + if fm: + e = fm.group(1).rsplit(".", 1)[-1].lower() + if e in ("ogg","mp3","wav","webm","m4a","flac","opus"): + audio_fmt = e + else: + audio_data = raw + self._json(process_memo({"source": "upload", "audio_format": audio_fmt}, uploaded_audio=audio_data)) + except Exception as e: + log(f"Upload error: {e}") + self._json({"ok": False, "error": str(e)}, 500) + + def _serve_audio(self, path): + fname = path.split("/")[-1] + fpath = AUDIO_DIR / fname + if not fpath.exists(): + return self._json({"error": "audio not found"}, 404) + ext = fname.rsplit(".", 1)[-1].lower() + mime = {"mp3":"audio/mpeg","ogg":"audio/ogg","wav":"audio/wav", + "flac":"audio/flac","opus":"audio/opus"}.get(ext, "application/octet-stream") + data = fpath.read_bytes() + self.send_response(200) + self.send_header("Content-Type", mime) + self.send_header("Content-Length", str(len(data))) + self.end_headers() + self.wfile.write(data) + + def _json(self, data, status=200): + body = json.dumps(data, indent=2, ensure_ascii=False).encode() + self.send_response(status) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.send_header("Access-Control-Allow-Origin", "*") + self.end_headers() + self.wfile.write(body) + + def log_message(self, fmt, *args): + pass + +def main(): + srv = HTTPServer(("0.0.0.0", PORT), VoiceMemoHandler) + log(f"Voice Memo Service on 0.0.0.0:{PORT}") + log(f" Whisper: {WHISPER_URL} LLM: {LLM_URL} Kokoro: {KOKORO_URL}") + try: + srv.serve_forever() + except KeyboardInterrupt: + pass + srv.server_close() + +if __name__ == "__main__": + main()