@quantumclaw/quantumclaw 2026.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4601 -0
- package/LICENSE +21 -0
- package/README.md +559 -0
- package/assets/avatar-placeholder.svg +19 -0
- package/assets/chrome-extension/icons/icon128.png +0 -0
- package/assets/chrome-extension/icons/icon16.png +0 -0
- package/assets/chrome-extension/icons/icon32.png +0 -0
- package/assets/chrome-extension/icons/icon48.png +0 -0
- package/assets/dmg-background-small.png +0 -0
- package/assets/dmg-background.png +0 -0
- package/docs/.i18n/README.md +31 -0
- package/docs/.i18n/glossary.ja-JP.json +14 -0
- package/docs/.i18n/glossary.zh-CN.json +302 -0
- package/docs/.i18n/ja-JP.tm.jsonl +0 -0
- package/docs/assets/install-script.svg +1 -0
- package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
- package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
- package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
- package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
- package/docs/assets/macos-onboarding/05-permissions.png +0 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/quantumclaw-logo-text-dark.png +0 -0
- package/docs/assets/quantumclaw-logo-text-dark.svg +418 -0
- package/docs/assets/quantumclaw-logo-text.png +0 -0
- package/docs/assets/quantumclaw-logo-text.svg +418 -0
- package/docs/assets/showcase/agents-ui.jpg +0 -0
- package/docs/assets/showcase/bambu-cli.png +0 -0
- package/docs/assets/showcase/codexmonitor.png +0 -0
- package/docs/assets/showcase/gohome-grafana.png +0 -0
- package/docs/assets/showcase/ios-testflight.jpg +0 -0
- package/docs/assets/showcase/oura-health.png +0 -0
- package/docs/assets/showcase/padel-cli.svg +11 -0
- package/docs/assets/showcase/padel-screenshot.jpg +0 -0
- package/docs/assets/showcase/papla-tts.jpg +0 -0
- package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
- package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
- package/docs/assets/showcase/roborock-status.svg +13 -0
- package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
- package/docs/assets/showcase/snag.png +0 -0
- package/docs/assets/showcase/tesco-shop.jpg +0 -0
- package/docs/assets/showcase/wienerlinien.png +0 -0
- package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
- package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
- package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
- package/docs/assets/sponsors/blacksmith.svg +14 -0
- package/docs/assets/sponsors/convex.svg +16 -0
- package/docs/assets/sponsors/openai.svg +3 -0
- package/docs/assets/sponsors/vercel.svg +5 -0
- package/docs/auth-credential-semantics.md +53 -0
- package/docs/automation/auth-monitoring.md +44 -0
- package/docs/automation/cron-jobs.md +727 -0
- package/docs/automation/cron-vs-heartbeat.md +286 -0
- package/docs/automation/gmail-pubsub.md +256 -0
- package/docs/automation/hooks.md +1056 -0
- package/docs/automation/poll.md +86 -0
- package/docs/automation/standing-orders.md +251 -0
- package/docs/automation/troubleshooting.md +122 -0
- package/docs/automation/webhook.md +217 -0
- package/docs/brave-search.md +93 -0
- package/docs/channels/bluebubbles.md +347 -0
- package/docs/channels/broadcast-groups.md +442 -0
- package/docs/channels/channel-routing.md +139 -0
- package/docs/channels/discord.md +1229 -0
- package/docs/channels/feishu.md +747 -0
- package/docs/channels/googlechat.md +261 -0
- package/docs/channels/group-messages.md +84 -0
- package/docs/channels/groups.md +379 -0
- package/docs/channels/imessage.md +367 -0
- package/docs/channels/index.md +47 -0
- package/docs/channels/irc.md +242 -0
- package/docs/channels/line.md +194 -0
- package/docs/channels/location.md +56 -0
- package/docs/channels/matrix.md +677 -0
- package/docs/channels/mattermost.md +427 -0
- package/docs/channels/msteams.md +780 -0
- package/docs/channels/nextcloud-talk.md +138 -0
- package/docs/channels/nostr.md +249 -0
- package/docs/channels/pairing.md +114 -0
- package/docs/channels/signal.md +329 -0
- package/docs/channels/slack.md +603 -0
- package/docs/channels/synology-chat.md +134 -0
- package/docs/channels/telegram.md +987 -0
- package/docs/channels/tlon.md +276 -0
- package/docs/channels/troubleshooting.md +118 -0
- package/docs/channels/twitch.md +379 -0
- package/docs/channels/whatsapp.md +460 -0
- package/docs/channels/zalo.md +243 -0
- package/docs/channels/zalouser.md +181 -0
- package/docs/ci.md +55 -0
- package/docs/cli/acp.md +288 -0
- package/docs/cli/agent.md +29 -0
- package/docs/cli/agents.md +123 -0
- package/docs/cli/approvals.md +50 -0
- package/docs/cli/backup.md +76 -0
- package/docs/cli/browser.md +106 -0
- package/docs/cli/channels.md +102 -0
- package/docs/cli/clawbot.md +21 -0
- package/docs/cli/completion.md +35 -0
- package/docs/cli/config.md +295 -0
- package/docs/cli/configure.md +36 -0
- package/docs/cli/cron.md +77 -0
- package/docs/cli/daemon.md +53 -0
- package/docs/cli/dashboard.md +22 -0
- package/docs/cli/devices.md +139 -0
- package/docs/cli/directory.md +63 -0
- package/docs/cli/dns.md +23 -0
- package/docs/cli/docs.md +15 -0
- package/docs/cli/doctor.md +48 -0
- package/docs/cli/gateway.md +235 -0
- package/docs/cli/health.md +21 -0
- package/docs/cli/hooks.md +329 -0
- package/docs/cli/index.md +1150 -0
- package/docs/cli/logs.md +28 -0
- package/docs/cli/memory.md +66 -0
- package/docs/cli/message.md +278 -0
- package/docs/cli/models.md +81 -0
- package/docs/cli/node.md +127 -0
- package/docs/cli/nodes.md +75 -0
- package/docs/cli/onboard.md +157 -0
- package/docs/cli/pairing.md +32 -0
- package/docs/cli/plugins.md +210 -0
- package/docs/cli/qr.md +46 -0
- package/docs/cli/reset.md +20 -0
- package/docs/cli/sandbox.md +197 -0
- package/docs/cli/secrets.md +188 -0
- package/docs/cli/security.md +79 -0
- package/docs/cli/sessions.md +110 -0
- package/docs/cli/setup.md +29 -0
- package/docs/cli/skills.md +36 -0
- package/docs/cli/status.md +30 -0
- package/docs/cli/system.md +60 -0
- package/docs/cli/tui.md +30 -0
- package/docs/cli/uninstall.md +20 -0
- package/docs/cli/update.md +103 -0
- package/docs/cli/voicecall.md +34 -0
- package/docs/cli/webhooks.md +25 -0
- package/docs/concepts/agent-loop.md +148 -0
- package/docs/concepts/agent-workspace.md +236 -0
- package/docs/concepts/agent.md +122 -0
- package/docs/concepts/architecture.md +137 -0
- package/docs/concepts/compaction.md +123 -0
- package/docs/concepts/context-engine.md +268 -0
- package/docs/concepts/context.md +172 -0
- package/docs/concepts/delegate-architecture.md +296 -0
- package/docs/concepts/features.md +73 -0
- package/docs/concepts/markdown-formatting.md +130 -0
- package/docs/concepts/memory.md +108 -0
- package/docs/concepts/messages.md +154 -0
- package/docs/concepts/model-failover.md +152 -0
- package/docs/concepts/model-providers.md +607 -0
- package/docs/concepts/models.md +225 -0
- package/docs/concepts/multi-agent.md +552 -0
- package/docs/concepts/oauth.md +158 -0
- package/docs/concepts/presence.md +102 -0
- package/docs/concepts/queue.md +89 -0
- package/docs/concepts/retry.md +69 -0
- package/docs/concepts/session-pruning.md +121 -0
- package/docs/concepts/session-tool.md +242 -0
- package/docs/concepts/session.md +310 -0
- package/docs/concepts/streaming.md +155 -0
- package/docs/concepts/system-prompt.md +132 -0
- package/docs/concepts/timezone.md +91 -0
- package/docs/concepts/typebox.md +291 -0
- package/docs/concepts/typing-indicators.md +68 -0
- package/docs/concepts/usage-tracking.md +35 -0
- package/docs/date-time.md +128 -0
- package/docs/debug/node-issue.md +85 -0
- package/docs/diagnostics/flags.md +91 -0
- package/docs/docs.json +2078 -0
- package/docs/gateway/authentication.md +179 -0
- package/docs/gateway/background-process.md +97 -0
- package/docs/gateway/bonjour.md +177 -0
- package/docs/gateway/bridge-protocol.md +91 -0
- package/docs/gateway/cli-backends.md +225 -0
- package/docs/gateway/configuration-examples.md +651 -0
- package/docs/gateway/configuration-reference.md +3123 -0
- package/docs/gateway/configuration.md +633 -0
- package/docs/gateway/discovery.md +123 -0
- package/docs/gateway/doctor.md +362 -0
- package/docs/gateway/gateway-lock.md +34 -0
- package/docs/gateway/health.md +44 -0
- package/docs/gateway/heartbeat.md +393 -0
- package/docs/gateway/index.md +261 -0
- package/docs/gateway/local-models.md +152 -0
- package/docs/gateway/logging.md +113 -0
- package/docs/gateway/multiple-gateways.md +112 -0
- package/docs/gateway/network-model.md +22 -0
- package/docs/gateway/openai-http-api.md +132 -0
- package/docs/gateway/openresponses-http-api.md +295 -0
- package/docs/gateway/openshell.md +307 -0
- package/docs/gateway/pairing.md +99 -0
- package/docs/gateway/protocol.md +267 -0
- package/docs/gateway/remote-gateway-readme.md +158 -0
- package/docs/gateway/remote.md +153 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +134 -0
- package/docs/gateway/sandboxing.md +469 -0
- package/docs/gateway/secrets-plan-contract.md +116 -0
- package/docs/gateway/secrets.md +503 -0
- package/docs/gateway/security/index.md +1220 -0
- package/docs/gateway/tailscale.md +132 -0
- package/docs/gateway/tools-invoke-http-api.md +118 -0
- package/docs/gateway/troubleshooting.md +378 -0
- package/docs/gateway/trusted-proxy-auth.md +330 -0
- package/docs/help/debugging.md +168 -0
- package/docs/help/environment.md +163 -0
- package/docs/help/faq.md +2997 -0
- package/docs/help/index.md +28 -0
- package/docs/help/scripts.md +28 -0
- package/docs/help/testing.md +526 -0
- package/docs/help/troubleshooting.md +297 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-step2-create-app.png +0 -0
- package/docs/images/feishu-step3-credentials.png +0 -0
- package/docs/images/feishu-step4-permissions.png +0 -0
- package/docs/images/feishu-step5-bot-capability.png +0 -0
- package/docs/images/feishu-step6-event-subscription.png +0 -0
- package/docs/images/feishu-verification-token.png +0 -0
- package/docs/images/groups-flow.svg +52 -0
- package/docs/images/mobile-ui-screenshot.png +0 -0
- package/docs/index.md +196 -0
- package/docs/install/ansible.md +230 -0
- package/docs/install/azure.md +311 -0
- package/docs/install/bun.md +55 -0
- package/docs/install/development-channels.md +120 -0
- package/docs/install/digitalocean.md +129 -0
- package/docs/install/docker-vm-runtime.md +142 -0
- package/docs/install/docker.md +375 -0
- package/docs/install/exe-dev.md +126 -0
- package/docs/install/fly.md +501 -0
- package/docs/install/gcp.md +402 -0
- package/docs/install/hetzner.md +251 -0
- package/docs/install/index.md +183 -0
- package/docs/install/installer.md +415 -0
- package/docs/install/kubernetes.md +191 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-matrix.md +346 -0
- package/docs/install/migrating.md +110 -0
- package/docs/install/nix.md +89 -0
- package/docs/install/node.md +138 -0
- package/docs/install/northflank.mdx +54 -0
- package/docs/install/oracle.md +156 -0
- package/docs/install/podman.md +133 -0
- package/docs/install/railway.mdx +100 -0
- package/docs/install/raspberry-pi.md +159 -0
- package/docs/install/render.mdx +169 -0
- package/docs/install/uninstall.md +128 -0
- package/docs/install/updating.md +128 -0
- package/docs/ja-JP/index.md +186 -0
- package/docs/ja-JP/start/getting-started.md +125 -0
- package/docs/ja-JP/start/wizard.md +77 -0
- package/docs/logging.md +352 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +54 -0
- package/docs/nodes/audio.md +187 -0
- package/docs/nodes/camera.md +162 -0
- package/docs/nodes/images.md +72 -0
- package/docs/nodes/index.md +393 -0
- package/docs/nodes/location-command.md +98 -0
- package/docs/nodes/media-understanding.md +394 -0
- package/docs/nodes/talk.md +92 -0
- package/docs/nodes/troubleshooting.md +114 -0
- package/docs/nodes/voicewake.md +66 -0
- package/docs/perplexity.md +174 -0
- package/docs/pi-dev.md +80 -0
- package/docs/pi.md +567 -0
- package/docs/platforms/android.md +168 -0
- package/docs/platforms/digitalocean.md +266 -0
- package/docs/platforms/index.md +54 -0
- package/docs/platforms/ios.md +220 -0
- package/docs/platforms/linux.md +94 -0
- package/docs/platforms/mac/bundled-gateway.md +73 -0
- package/docs/platforms/mac/canvas.md +125 -0
- package/docs/platforms/mac/child-process.md +69 -0
- package/docs/platforms/mac/dev-setup.md +104 -0
- package/docs/platforms/mac/health.md +34 -0
- package/docs/platforms/mac/icon.md +31 -0
- package/docs/platforms/mac/logging.md +57 -0
- package/docs/platforms/mac/menu-bar.md +81 -0
- package/docs/platforms/mac/peekaboo.md +65 -0
- package/docs/platforms/mac/permissions.md +50 -0
- package/docs/platforms/mac/remote.md +84 -0
- package/docs/platforms/mac/signing.md +47 -0
- package/docs/platforms/mac/skills.md +33 -0
- package/docs/platforms/mac/voice-overlay.md +60 -0
- package/docs/platforms/mac/voicewake.md +67 -0
- package/docs/platforms/mac/webchat.md +43 -0
- package/docs/platforms/mac/xpc.md +61 -0
- package/docs/platforms/macos.md +226 -0
- package/docs/platforms/oracle.md +303 -0
- package/docs/platforms/raspberry-pi.md +412 -0
- package/docs/platforms/windows.md +241 -0
- package/docs/plugins/agent-tools.md +10 -0
- package/docs/plugins/architecture.md +1366 -0
- package/docs/plugins/building-extensions.md +10 -0
- package/docs/plugins/building-plugins.md +239 -0
- package/docs/plugins/bundles.md +181 -0
- package/docs/plugins/community.md +145 -0
- package/docs/plugins/manifest.md +241 -0
- package/docs/plugins/sdk-channel-plugins.md +370 -0
- package/docs/plugins/sdk-entrypoints.md +161 -0
- package/docs/plugins/sdk-migration.md +172 -0
- package/docs/plugins/sdk-overview.md +196 -0
- package/docs/plugins/sdk-provider-plugins.md +370 -0
- package/docs/plugins/sdk-runtime.md +345 -0
- package/docs/plugins/sdk-setup.md +331 -0
- package/docs/plugins/sdk-testing.md +263 -0
- package/docs/plugins/voice-call.md +380 -0
- package/docs/plugins/zalouser.md +77 -0
- package/docs/prose.md +134 -0
- package/docs/providers/anthropic.md +259 -0
- package/docs/providers/bedrock.md +176 -0
- package/docs/providers/claude-max-api-proxy.md +154 -0
- package/docs/providers/cloudflare-ai-gateway.md +71 -0
- package/docs/providers/deepgram.md +93 -0
- package/docs/providers/github-copilot.md +72 -0
- package/docs/providers/glm.md +43 -0
- package/docs/providers/google.md +78 -0
- package/docs/providers/groq.md +96 -0
- package/docs/providers/huggingface.md +209 -0
- package/docs/providers/index.md +69 -0
- package/docs/providers/kilocode.md +74 -0
- package/docs/providers/litellm.md +154 -0
- package/docs/providers/minimax.md +224 -0
- package/docs/providers/mistral.md +54 -0
- package/docs/providers/models.md +45 -0
- package/docs/providers/modelstudio.md +66 -0
- package/docs/providers/moonshot.md +175 -0
- package/docs/providers/nvidia.md +55 -0
- package/docs/providers/ollama.md +352 -0
- package/docs/providers/openai.md +303 -0
- package/docs/providers/opencode-go.md +45 -0
- package/docs/providers/opencode.md +64 -0
- package/docs/providers/openrouter.md +37 -0
- package/docs/providers/perplexity-provider.md +62 -0
- package/docs/providers/qianfan.md +38 -0
- package/docs/providers/qwen.md +53 -0
- package/docs/providers/sglang.md +104 -0
- package/docs/providers/synthetic.md +99 -0
- package/docs/providers/together.md +66 -0
- package/docs/providers/venice.md +282 -0
- package/docs/providers/vercel-ai-gateway.md +60 -0
- package/docs/providers/vllm.md +92 -0
- package/docs/providers/volcengine.md +74 -0
- package/docs/providers/xai.md +60 -0
- package/docs/providers/xiaomi.md +86 -0
- package/docs/providers/zai.md +46 -0
- package/docs/reference/AGENTS.default.md +126 -0
- package/docs/reference/RELEASING.md +42 -0
- package/docs/reference/api-usage-costs.md +144 -0
- package/docs/reference/credits.md +30 -0
- package/docs/reference/device-models.md +47 -0
- package/docs/reference/memory-config.md +711 -0
- package/docs/reference/prompt-caching.md +185 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +140 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +563 -0
- package/docs/reference/session-management-compaction.md +324 -0
- package/docs/reference/templates/AGENTS.dev.md +83 -0
- package/docs/reference/templates/AGENTS.md +219 -0
- package/docs/reference/templates/BOOT.md +11 -0
- package/docs/reference/templates/BOOTSTRAP.md +62 -0
- package/docs/reference/templates/HEARTBEAT.md +14 -0
- package/docs/reference/templates/IDENTITY.dev.md +47 -0
- package/docs/reference/templates/IDENTITY.md +29 -0
- package/docs/reference/templates/SOUL.dev.md +76 -0
- package/docs/reference/templates/SOUL.md +43 -0
- package/docs/reference/templates/TOOLS.dev.md +24 -0
- package/docs/reference/templates/TOOLS.md +47 -0
- package/docs/reference/templates/USER.dev.md +18 -0
- package/docs/reference/templates/USER.md +23 -0
- package/docs/reference/test.md +90 -0
- package/docs/reference/token-use.md +175 -0
- package/docs/reference/transcript-hygiene.md +151 -0
- package/docs/reference/wizard.md +235 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
- package/docs/security/formal-verification.md +167 -0
- package/docs/start/bootstrapping.md +41 -0
- package/docs/start/docs-directory.md +66 -0
- package/docs/start/getting-started.md +116 -0
- package/docs/start/hubs.md +198 -0
- package/docs/start/lore.md +219 -0
- package/docs/start/onboarding-overview.md +67 -0
- package/docs/start/onboarding.md +91 -0
- package/docs/start/openclaw.md +221 -0
- package/docs/start/quickstart.md +22 -0
- package/docs/start/setup.md +164 -0
- package/docs/start/showcase.md +418 -0
- package/docs/start/wizard-cli-automation.md +215 -0
- package/docs/start/wizard-cli-reference.md +299 -0
- package/docs/start/wizard.md +125 -0
- package/docs/style.css +37 -0
- package/docs/tools/acp-agents.md +623 -0
- package/docs/tools/agent-send.md +100 -0
- package/docs/tools/apply-patch.md +51 -0
- package/docs/tools/brave-search.md +93 -0
- package/docs/tools/browser-linux-troubleshooting.md +138 -0
- package/docs/tools/browser-login.md +73 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +211 -0
- package/docs/tools/browser.md +731 -0
- package/docs/tools/btw.md +142 -0
- package/docs/tools/capability-cookbook.md +119 -0
- package/docs/tools/clawhub.md +298 -0
- package/docs/tools/creating-skills.md +117 -0
- package/docs/tools/diffs.md +386 -0
- package/docs/tools/elevated.md +114 -0
- package/docs/tools/exec-approvals.md +430 -0
- package/docs/tools/exec.md +207 -0
- package/docs/tools/firecrawl.md +140 -0
- package/docs/tools/index.md +137 -0
- package/docs/tools/llm-task.md +119 -0
- package/docs/tools/lobster.md +340 -0
- package/docs/tools/loop-detection.md +100 -0
- package/docs/tools/multi-agent-sandbox-tools.md +364 -0
- package/docs/tools/pdf.md +156 -0
- package/docs/tools/perplexity-search.md +174 -0
- package/docs/tools/plugin.md +255 -0
- package/docs/tools/reactions.md +64 -0
- package/docs/tools/skills-config.md +86 -0
- package/docs/tools/skills.md +309 -0
- package/docs/tools/slash-commands.md +294 -0
- package/docs/tools/subagents.md +295 -0
- package/docs/tools/tavily.md +125 -0
- package/docs/tools/thinking.md +96 -0
- package/docs/tools/tts.md +406 -0
- package/docs/tools/web.md +516 -0
- package/docs/tts.md +406 -0
- package/docs/vps.md +112 -0
- package/docs/web/control-ui.md +275 -0
- package/docs/web/dashboard.md +54 -0
- package/docs/web/index.md +120 -0
- package/docs/web/tui.md +170 -0
- package/docs/web/webchat.md +61 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/docs/zh-CN/AGENTS.md +61 -0
- package/docs/zh-CN/automation/auth-monitoring.md +47 -0
- package/docs/zh-CN/automation/cron-jobs.md +435 -0
- package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
- package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
- package/docs/zh-CN/automation/hooks.md +1051 -0
- package/docs/zh-CN/automation/poll.md +76 -0
- package/docs/zh-CN/automation/troubleshooting.md +8 -0
- package/docs/zh-CN/automation/webhook.md +163 -0
- package/docs/zh-CN/brave-search.md +60 -0
- package/docs/zh-CN/channels/bluebubbles.md +354 -0
- package/docs/zh-CN/channels/broadcast-groups.md +449 -0
- package/docs/zh-CN/channels/channel-routing.md +117 -0
- package/docs/zh-CN/channels/discord.md +468 -0
- package/docs/zh-CN/channels/feishu.md +728 -0
- package/docs/zh-CN/channels/googlechat.md +257 -0
- package/docs/zh-CN/channels/grammy.md +38 -0
- package/docs/zh-CN/channels/group-messages.md +91 -0
- package/docs/zh-CN/channels/groups.md +379 -0
- package/docs/zh-CN/channels/imessage.md +302 -0
- package/docs/zh-CN/channels/index.md +53 -0
- package/docs/zh-CN/channels/line.md +180 -0
- package/docs/zh-CN/channels/location.md +63 -0
- package/docs/zh-CN/channels/matrix.md +221 -0
- package/docs/zh-CN/channels/mattermost.md +144 -0
- package/docs/zh-CN/channels/msteams.md +775 -0
- package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
- package/docs/zh-CN/channels/nostr.md +249 -0
- package/docs/zh-CN/channels/pairing.md +89 -0
- package/docs/zh-CN/channels/signal.md +209 -0
- package/docs/zh-CN/channels/slack.md +531 -0
- package/docs/zh-CN/channels/synology-chat.md +138 -0
- package/docs/zh-CN/channels/telegram.md +751 -0
- package/docs/zh-CN/channels/tlon.md +136 -0
- package/docs/zh-CN/channels/troubleshooting.md +36 -0
- package/docs/zh-CN/channels/twitch.md +385 -0
- package/docs/zh-CN/channels/whatsapp.md +411 -0
- package/docs/zh-CN/channels/zalo.md +196 -0
- package/docs/zh-CN/channels/zalouser.md +147 -0
- package/docs/zh-CN/cli/acp.md +173 -0
- package/docs/zh-CN/cli/agent.md +30 -0
- package/docs/zh-CN/cli/agents.md +82 -0
- package/docs/zh-CN/cli/approvals.md +57 -0
- package/docs/zh-CN/cli/browser.md +114 -0
- package/docs/zh-CN/cli/channels.md +86 -0
- package/docs/zh-CN/cli/config.md +57 -0
- package/docs/zh-CN/cli/configure.md +38 -0
- package/docs/zh-CN/cli/cron.md +43 -0
- package/docs/zh-CN/cli/dashboard.md +23 -0
- package/docs/zh-CN/cli/devices.md +74 -0
- package/docs/zh-CN/cli/directory.md +70 -0
- package/docs/zh-CN/cli/dns.md +30 -0
- package/docs/zh-CN/cli/docs.md +22 -0
- package/docs/zh-CN/cli/doctor.md +48 -0
- package/docs/zh-CN/cli/gateway.md +206 -0
- package/docs/zh-CN/cli/health.md +28 -0
- package/docs/zh-CN/cli/hooks.md +298 -0
- package/docs/zh-CN/cli/index.md +1143 -0
- package/docs/zh-CN/cli/logs.md +31 -0
- package/docs/zh-CN/cli/memory.md +52 -0
- package/docs/zh-CN/cli/message.md +246 -0
- package/docs/zh-CN/cli/models.md +85 -0
- package/docs/zh-CN/cli/node.md +115 -0
- package/docs/zh-CN/cli/nodes.md +80 -0
- package/docs/zh-CN/cli/onboard.md +164 -0
- package/docs/zh-CN/cli/pairing.md +28 -0
- package/docs/zh-CN/cli/plugins.md +66 -0
- package/docs/zh-CN/cli/reset.md +24 -0
- package/docs/zh-CN/cli/sandbox.md +158 -0
- package/docs/zh-CN/cli/security.md +33 -0
- package/docs/zh-CN/cli/sessions.md +23 -0
- package/docs/zh-CN/cli/setup.md +36 -0
- package/docs/zh-CN/cli/skills.md +33 -0
- package/docs/zh-CN/cli/status.md +33 -0
- package/docs/zh-CN/cli/system.md +63 -0
- package/docs/zh-CN/cli/tui.md +30 -0
- package/docs/zh-CN/cli/uninstall.md +24 -0
- package/docs/zh-CN/cli/update.md +101 -0
- package/docs/zh-CN/cli/voicecall.md +41 -0
- package/docs/zh-CN/cli/webhooks.md +32 -0
- package/docs/zh-CN/concepts/agent-loop.md +146 -0
- package/docs/zh-CN/concepts/agent-workspace.md +219 -0
- package/docs/zh-CN/concepts/agent.md +115 -0
- package/docs/zh-CN/concepts/architecture.md +123 -0
- package/docs/zh-CN/concepts/compaction.md +67 -0
- package/docs/zh-CN/concepts/context.md +168 -0
- package/docs/zh-CN/concepts/features.md +59 -0
- package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
- package/docs/zh-CN/concepts/memory.md +412 -0
- package/docs/zh-CN/concepts/messages.md +141 -0
- package/docs/zh-CN/concepts/model-failover.md +145 -0
- package/docs/zh-CN/concepts/model-providers.md +606 -0
- package/docs/zh-CN/concepts/models.md +225 -0
- package/docs/zh-CN/concepts/multi-agent.md +372 -0
- package/docs/zh-CN/concepts/oauth.md +164 -0
- package/docs/zh-CN/concepts/presence.md +99 -0
- package/docs/zh-CN/concepts/queue.md +94 -0
- package/docs/zh-CN/concepts/retry.md +76 -0
- package/docs/zh-CN/concepts/session-pruning.md +129 -0
- package/docs/zh-CN/concepts/session-tool.md +200 -0
- package/docs/zh-CN/concepts/session.md +166 -0
- package/docs/zh-CN/concepts/streaming.md +133 -0
- package/docs/zh-CN/concepts/system-prompt.md +101 -0
- package/docs/zh-CN/concepts/timezone.md +96 -0
- package/docs/zh-CN/concepts/typebox.md +284 -0
- package/docs/zh-CN/concepts/typing-indicators.md +74 -0
- package/docs/zh-CN/concepts/usage-tracking.md +42 -0
- package/docs/zh-CN/date-time.md +129 -0
- package/docs/zh-CN/debug/node-issue.md +90 -0
- package/docs/zh-CN/diagnostics/flags.md +98 -0
- package/docs/zh-CN/gateway/authentication.md +184 -0
- package/docs/zh-CN/gateway/background-process.md +100 -0
- package/docs/zh-CN/gateway/bonjour.md +174 -0
- package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
- package/docs/zh-CN/gateway/cli-backends.md +213 -0
- package/docs/zh-CN/gateway/configuration-examples.md +587 -0
- package/docs/zh-CN/gateway/configuration-reference.md +3103 -0
- package/docs/zh-CN/gateway/configuration.md +640 -0
- package/docs/zh-CN/gateway/discovery.md +123 -0
- package/docs/zh-CN/gateway/doctor.md +238 -0
- package/docs/zh-CN/gateway/gateway-lock.md +41 -0
- package/docs/zh-CN/gateway/health.md +42 -0
- package/docs/zh-CN/gateway/heartbeat.md +274 -0
- package/docs/zh-CN/gateway/index.md +335 -0
- package/docs/zh-CN/gateway/local-models.md +159 -0
- package/docs/zh-CN/gateway/logging.md +114 -0
- package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
- package/docs/zh-CN/gateway/network-model.md +23 -0
- package/docs/zh-CN/gateway/openai-http-api.md +125 -0
- package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
- package/docs/zh-CN/gateway/pairing.md +99 -0
- package/docs/zh-CN/gateway/protocol.md +220 -0
- package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
- package/docs/zh-CN/gateway/remote.md +133 -0
- package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
- package/docs/zh-CN/gateway/sandboxing.md +188 -0
- package/docs/zh-CN/gateway/security/index.md +777 -0
- package/docs/zh-CN/gateway/tailscale.md +124 -0
- package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
- package/docs/zh-CN/gateway/troubleshooting.md +771 -0
- package/docs/zh-CN/help/debugging.md +160 -0
- package/docs/zh-CN/help/environment.md +88 -0
- package/docs/zh-CN/help/faq.md +2640 -0
- package/docs/zh-CN/help/index.md +28 -0
- package/docs/zh-CN/help/scripts.md +35 -0
- package/docs/zh-CN/help/testing.md +375 -0
- package/docs/zh-CN/help/troubleshooting.md +104 -0
- package/docs/zh-CN/index.md +186 -0
- package/docs/zh-CN/install/ansible.md +215 -0
- package/docs/zh-CN/install/bun.md +65 -0
- package/docs/zh-CN/install/development-channels.md +81 -0
- package/docs/zh-CN/install/docker.md +532 -0
- package/docs/zh-CN/install/exe-dev.md +133 -0
- package/docs/zh-CN/install/fly.md +490 -0
- package/docs/zh-CN/install/gcp.md +510 -0
- package/docs/zh-CN/install/hetzner.md +337 -0
- package/docs/zh-CN/install/index.md +235 -0
- package/docs/zh-CN/install/installer.md +422 -0
- package/docs/zh-CN/install/macos-vm.md +288 -0
- package/docs/zh-CN/install/migrating.md +199 -0
- package/docs/zh-CN/install/nix.md +99 -0
- package/docs/zh-CN/install/node.md +8 -0
- package/docs/zh-CN/install/northflank.mdx +60 -0
- package/docs/zh-CN/install/railway.mdx +106 -0
- package/docs/zh-CN/install/render.mdx +169 -0
- package/docs/zh-CN/install/uninstall.md +135 -0
- package/docs/zh-CN/install/updating.md +233 -0
- package/docs/zh-CN/logging.md +329 -0
- package/docs/zh-CN/network.md +59 -0
- package/docs/zh-CN/nodes/audio.md +120 -0
- package/docs/zh-CN/nodes/camera.md +162 -0
- package/docs/zh-CN/nodes/images.md +79 -0
- package/docs/zh-CN/nodes/index.md +348 -0
- package/docs/zh-CN/nodes/location-command.md +120 -0
- package/docs/zh-CN/nodes/media-understanding.md +380 -0
- package/docs/zh-CN/nodes/talk.md +97 -0
- package/docs/zh-CN/nodes/troubleshooting.md +8 -0
- package/docs/zh-CN/nodes/voicewake.md +72 -0
- package/docs/zh-CN/perplexity.md +102 -0
- package/docs/zh-CN/pi-dev.md +77 -0
- package/docs/zh-CN/pi.md +619 -0
- package/docs/zh-CN/platforms/android.md +155 -0
- package/docs/zh-CN/platforms/digitalocean.md +273 -0
- package/docs/zh-CN/platforms/index.md +60 -0
- package/docs/zh-CN/platforms/ios.md +114 -0
- package/docs/zh-CN/platforms/linux.md +100 -0
- package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
- package/docs/zh-CN/platforms/mac/canvas.md +128 -0
- package/docs/zh-CN/platforms/mac/child-process.md +73 -0
- package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
- package/docs/zh-CN/platforms/mac/health.md +41 -0
- package/docs/zh-CN/platforms/mac/icon.md +38 -0
- package/docs/zh-CN/platforms/mac/logging.md +64 -0
- package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
- package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
- package/docs/zh-CN/platforms/mac/permissions.md +46 -0
- package/docs/zh-CN/platforms/mac/remote.md +90 -0
- package/docs/zh-CN/platforms/mac/signing.md +54 -0
- package/docs/zh-CN/platforms/mac/skills.md +40 -0
- package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
- package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
- package/docs/zh-CN/platforms/mac/webchat.md +43 -0
- package/docs/zh-CN/platforms/mac/xpc.md +68 -0
- package/docs/zh-CN/platforms/macos.md +193 -0
- package/docs/zh-CN/platforms/oracle.md +310 -0
- package/docs/zh-CN/platforms/raspberry-pi.md +416 -0
- package/docs/zh-CN/platforms/windows.md +247 -0
- package/docs/zh-CN/plugins/agent-tools.md +99 -0
- package/docs/zh-CN/plugins/manifest.md +68 -0
- package/docs/zh-CN/plugins/voice-call.md +250 -0
- package/docs/zh-CN/plugins/zalouser.md +88 -0
- package/docs/zh-CN/prose.md +141 -0
- package/docs/zh-CN/providers/anthropic.md +265 -0
- package/docs/zh-CN/providers/bedrock.md +170 -0
- package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
- package/docs/zh-CN/providers/cloudflare-ai-gateway.md +78 -0
- package/docs/zh-CN/providers/deepgram.md +97 -0
- package/docs/zh-CN/providers/github-copilot.md +67 -0
- package/docs/zh-CN/providers/glm.md +50 -0
- package/docs/zh-CN/providers/huggingface.md +216 -0
- package/docs/zh-CN/providers/index.md +69 -0
- package/docs/zh-CN/providers/kilocode.md +80 -0
- package/docs/zh-CN/providers/litellm.md +160 -0
- package/docs/zh-CN/providers/minimax.md +222 -0
- package/docs/zh-CN/providers/mistral.md +61 -0
- package/docs/zh-CN/providers/models.md +51 -0
- package/docs/zh-CN/providers/moonshot.md +182 -0
- package/docs/zh-CN/providers/nvidia.md +62 -0
- package/docs/zh-CN/providers/ollama.md +359 -0
- package/docs/zh-CN/providers/openai.md +308 -0
- package/docs/zh-CN/providers/opencode-go.md +52 -0
- package/docs/zh-CN/providers/opencode.md +71 -0
- package/docs/zh-CN/providers/openrouter.md +44 -0
- package/docs/zh-CN/providers/qianfan.md +45 -0
- package/docs/zh-CN/providers/qwen.md +55 -0
- package/docs/zh-CN/providers/sglang.md +111 -0
- package/docs/zh-CN/providers/synthetic.md +106 -0
- package/docs/zh-CN/providers/together.md +72 -0
- package/docs/zh-CN/providers/venice.md +289 -0
- package/docs/zh-CN/providers/vercel-ai-gateway.md +66 -0
- package/docs/zh-CN/providers/xiaomi.md +93 -0
- package/docs/zh-CN/providers/zai.md +53 -0
- package/docs/zh-CN/reference/AGENTS.default.md +131 -0
- package/docs/zh-CN/reference/RELEASING.md +48 -0
- package/docs/zh-CN/reference/api-usage-costs.md +141 -0
- package/docs/zh-CN/reference/credits.md +34 -0
- package/docs/zh-CN/reference/device-models.md +54 -0
- package/docs/zh-CN/reference/rpc.md +48 -0
- package/docs/zh-CN/reference/session-management-compaction.md +287 -0
- package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
- package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
- package/docs/zh-CN/reference/templates/BOOT.md +17 -0
- package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
- package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
- package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
- package/docs/zh-CN/reference/templates/IDENTITY.md +36 -0
- package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
- package/docs/zh-CN/reference/templates/SOUL.md +49 -0
- package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
- package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
- package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
- package/docs/zh-CN/reference/templates/USER.md +30 -0
- package/docs/zh-CN/reference/test.md +57 -0
- package/docs/zh-CN/reference/token-use.md +119 -0
- package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
- package/docs/zh-CN/reference/wizard.md +242 -0
- package/docs/zh-CN/security/formal-verification.md +171 -0
- package/docs/zh-CN/start/bootstrapping.md +9 -0
- package/docs/zh-CN/start/docs-directory.md +70 -0
- package/docs/zh-CN/start/getting-started.md +143 -0
- package/docs/zh-CN/start/hubs.md +194 -0
- package/docs/zh-CN/start/lore.md +226 -0
- package/docs/zh-CN/start/onboarding-overview.md +58 -0
- package/docs/zh-CN/start/onboarding.md +105 -0
- package/docs/zh-CN/start/openclaw.md +248 -0
- package/docs/zh-CN/start/quickstart.md +88 -0
- package/docs/zh-CN/start/setup.md +153 -0
- package/docs/zh-CN/start/showcase.md +423 -0
- package/docs/zh-CN/start/wizard-cli-automation.md +222 -0
- package/docs/zh-CN/start/wizard-cli-reference.md +306 -0
- package/docs/zh-CN/start/wizard.md +132 -0
- package/docs/zh-CN/tools/agent-send.md +59 -0
- package/docs/zh-CN/tools/apply-patch.md +57 -0
- package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
- package/docs/zh-CN/tools/browser-login.md +75 -0
- package/docs/zh-CN/tools/browser.md +553 -0
- package/docs/zh-CN/tools/chrome-extension.md +183 -0
- package/docs/zh-CN/tools/clawhub.md +209 -0
- package/docs/zh-CN/tools/creating-skills.md +61 -0
- package/docs/zh-CN/tools/elevated.md +64 -0
- package/docs/zh-CN/tools/exec-approvals.md +234 -0
- package/docs/zh-CN/tools/exec.md +169 -0
- package/docs/zh-CN/tools/firecrawl.md +68 -0
- package/docs/zh-CN/tools/index.md +515 -0
- package/docs/zh-CN/tools/llm-task.md +117 -0
- package/docs/zh-CN/tools/lobster.md +349 -0
- package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +401 -0
- package/docs/zh-CN/tools/plugin.md +1612 -0
- package/docs/zh-CN/tools/reactions.md +29 -0
- package/docs/zh-CN/tools/skills-config.md +78 -0
- package/docs/zh-CN/tools/skills.md +279 -0
- package/docs/zh-CN/tools/slash-commands.md +205 -0
- package/docs/zh-CN/tools/subagents.md +167 -0
- package/docs/zh-CN/tools/thinking.md +80 -0
- package/docs/zh-CN/tools/web.md +289 -0
- package/docs/zh-CN/tts.md +375 -0
- package/docs/zh-CN/vps.md +47 -0
- package/docs/zh-CN/web/control-ui.md +191 -0
- package/docs/zh-CN/web/dashboard.md +53 -0
- package/docs/zh-CN/web/index.md +118 -0
- package/docs/zh-CN/web/tui.md +166 -0
- package/docs/zh-CN/web/webchat.md +56 -0
- package/package.json +841 -0
- package/quantumclaw.mjs +135 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +198 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +295 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +865 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +320 -0
- package/skills/model-usage/scripts/test_model_usage.py +40 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/node-connect/SKILL.md +142 -0
- package/skills/notion/SKILL.md +174 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +92 -0
- package/skills/openai-image-gen/scripts/gen.py +328 -0
- package/skills/openai-image-gen/scripts/test_gen.py +140 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +372 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +139 -0
- package/skills/skill-creator/scripts/quick_validate.py +159 -0
- package/skills/skill-creator/scripts/test_package_skill.py +160 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +153 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +112 -0
- package/skills/xurl/SKILL.md +461 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Building Provider Plugins"
|
|
3
|
+
sidebarTitle: "Provider Plugins"
|
|
4
|
+
summary: "Step-by-step guide to building a model provider plugin for QuantumClaw"
|
|
5
|
+
read_when:
|
|
6
|
+
- You are building a new model provider plugin
|
|
7
|
+
- You want to add an OpenAI-compatible proxy or custom LLM to QuantumClaw
|
|
8
|
+
- You need to understand provider auth, catalogs, and runtime hooks
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Building Provider Plugins
|
|
12
|
+
|
|
13
|
+
This guide walks through building a provider plugin that adds a model provider
|
|
14
|
+
(LLM) to QuantumClaw. By the end you will have a provider with a model catalog,
|
|
15
|
+
API key auth, and dynamic model resolution.
|
|
16
|
+
|
|
17
|
+
<Info>
|
|
18
|
+
If you have not built any QuantumClaw plugin before, read
|
|
19
|
+
[Getting Started](/plugins/building-plugins) first for the basic package
|
|
20
|
+
structure and manifest setup.
|
|
21
|
+
</Info>
|
|
22
|
+
|
|
23
|
+
## Walkthrough
|
|
24
|
+
|
|
25
|
+
<Steps>
|
|
26
|
+
<Step title="Package and manifest">
|
|
27
|
+
<CodeGroup>
|
|
28
|
+
```json package.json
|
|
29
|
+
{
|
|
30
|
+
"name": "@myorg/quantumclaw-acme-ai",
|
|
31
|
+
"version": "1.0.0",
|
|
32
|
+
"type": "module",
|
|
33
|
+
"quantumclaw": {
|
|
34
|
+
"extensions": ["./index.ts"],
|
|
35
|
+
"providers": ["acme-ai"]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```json quantumclaw.plugin.json
|
|
41
|
+
{
|
|
42
|
+
"id": "acme-ai",
|
|
43
|
+
"name": "Acme AI",
|
|
44
|
+
"description": "Acme AI model provider",
|
|
45
|
+
"providers": ["acme-ai"],
|
|
46
|
+
"providerAuthEnvVars": {
|
|
47
|
+
"acme-ai": ["ACME_AI_API_KEY"]
|
|
48
|
+
},
|
|
49
|
+
"providerAuthChoices": [
|
|
50
|
+
{
|
|
51
|
+
"provider": "acme-ai",
|
|
52
|
+
"method": "api-key",
|
|
53
|
+
"choiceId": "acme-ai-api-key",
|
|
54
|
+
"choiceLabel": "Acme AI API key",
|
|
55
|
+
"groupId": "acme-ai",
|
|
56
|
+
"groupLabel": "Acme AI",
|
|
57
|
+
"cliFlag": "--acme-ai-api-key",
|
|
58
|
+
"cliOption": "--acme-ai-api-key <key>",
|
|
59
|
+
"cliDescription": "Acme AI API key"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"configSchema": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"additionalProperties": false
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
</CodeGroup>
|
|
69
|
+
|
|
70
|
+
The manifest declares `providerAuthEnvVars` so QuantumClaw can detect
|
|
71
|
+
credentials without loading your plugin runtime.
|
|
72
|
+
|
|
73
|
+
</Step>
|
|
74
|
+
|
|
75
|
+
<Step title="Register the provider">
|
|
76
|
+
A minimal provider needs an `id`, `label`, `auth`, and `catalog`:
|
|
77
|
+
|
|
78
|
+
```typescript index.ts
|
|
79
|
+
import { definePluginEntry } from "quantumclaw/plugin-sdk/plugin-entry";
|
|
80
|
+
import { createProviderApiKeyAuthMethod } from "quantumclaw/plugin-sdk/provider-auth";
|
|
81
|
+
|
|
82
|
+
export default definePluginEntry({
|
|
83
|
+
id: "acme-ai",
|
|
84
|
+
name: "Acme AI",
|
|
85
|
+
description: "Acme AI model provider",
|
|
86
|
+
register(api) {
|
|
87
|
+
api.registerProvider({
|
|
88
|
+
id: "acme-ai",
|
|
89
|
+
label: "Acme AI",
|
|
90
|
+
docsPath: "/providers/acme-ai",
|
|
91
|
+
envVars: ["ACME_AI_API_KEY"],
|
|
92
|
+
|
|
93
|
+
auth: [
|
|
94
|
+
createProviderApiKeyAuthMethod({
|
|
95
|
+
providerId: "acme-ai",
|
|
96
|
+
methodId: "api-key",
|
|
97
|
+
label: "Acme AI API key",
|
|
98
|
+
hint: "API key from your Acme AI dashboard",
|
|
99
|
+
optionKey: "acmeAiApiKey",
|
|
100
|
+
flagName: "--acme-ai-api-key",
|
|
101
|
+
envVar: "ACME_AI_API_KEY",
|
|
102
|
+
promptMessage: "Enter your Acme AI API key",
|
|
103
|
+
defaultModel: "acme-ai/acme-large",
|
|
104
|
+
}),
|
|
105
|
+
],
|
|
106
|
+
|
|
107
|
+
catalog: {
|
|
108
|
+
order: "simple",
|
|
109
|
+
run: async (ctx) => {
|
|
110
|
+
const apiKey =
|
|
111
|
+
ctx.resolveProviderApiKey("acme-ai").apiKey;
|
|
112
|
+
if (!apiKey) return null;
|
|
113
|
+
return {
|
|
114
|
+
provider: {
|
|
115
|
+
baseUrl: "https://api.acme-ai.com/v1",
|
|
116
|
+
apiKey,
|
|
117
|
+
api: "openai-completions",
|
|
118
|
+
models: [
|
|
119
|
+
{
|
|
120
|
+
id: "acme-large",
|
|
121
|
+
name: "Acme Large",
|
|
122
|
+
reasoning: true,
|
|
123
|
+
input: ["text", "image"],
|
|
124
|
+
cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
|
125
|
+
contextWindow: 200000,
|
|
126
|
+
maxTokens: 32768,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: "acme-small",
|
|
130
|
+
name: "Acme Small",
|
|
131
|
+
reasoning: false,
|
|
132
|
+
input: ["text"],
|
|
133
|
+
cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
|
|
134
|
+
contextWindow: 128000,
|
|
135
|
+
maxTokens: 8192,
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
That is a working provider. Users can now
|
|
148
|
+
`quantumclaw onboard --acme-ai-api-key <key>` and select
|
|
149
|
+
`acme-ai/acme-large` as their model.
|
|
150
|
+
|
|
151
|
+
</Step>
|
|
152
|
+
|
|
153
|
+
<Step title="Add dynamic model resolution">
|
|
154
|
+
If your provider accepts arbitrary model IDs (like a proxy or router),
|
|
155
|
+
add `resolveDynamicModel`:
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
api.registerProvider({
|
|
159
|
+
// ... id, label, auth, catalog from above
|
|
160
|
+
|
|
161
|
+
resolveDynamicModel: (ctx) => ({
|
|
162
|
+
id: ctx.modelId,
|
|
163
|
+
name: ctx.modelId,
|
|
164
|
+
provider: "acme-ai",
|
|
165
|
+
api: "openai-completions",
|
|
166
|
+
baseUrl: "https://api.acme-ai.com/v1",
|
|
167
|
+
reasoning: false,
|
|
168
|
+
input: ["text"],
|
|
169
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
170
|
+
contextWindow: 128000,
|
|
171
|
+
maxTokens: 8192,
|
|
172
|
+
}),
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
If resolving requires a network call, use `prepareDynamicModel` for async
|
|
177
|
+
warm-up — `resolveDynamicModel` runs again after it completes.
|
|
178
|
+
|
|
179
|
+
</Step>
|
|
180
|
+
|
|
181
|
+
<Step title="Add runtime hooks (as needed)">
|
|
182
|
+
Most providers only need `catalog` + `resolveDynamicModel`. Add hooks
|
|
183
|
+
incrementally as your provider requires them.
|
|
184
|
+
|
|
185
|
+
<Tabs>
|
|
186
|
+
<Tab title="Token exchange">
|
|
187
|
+
For providers that need a token exchange before each inference call:
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
prepareRuntimeAuth: async (ctx) => {
|
|
191
|
+
const exchanged = await exchangeToken(ctx.apiKey);
|
|
192
|
+
return {
|
|
193
|
+
apiKey: exchanged.token,
|
|
194
|
+
baseUrl: exchanged.baseUrl,
|
|
195
|
+
expiresAt: exchanged.expiresAt,
|
|
196
|
+
};
|
|
197
|
+
},
|
|
198
|
+
```
|
|
199
|
+
</Tab>
|
|
200
|
+
<Tab title="Custom headers">
|
|
201
|
+
For providers that need custom request headers or body modifications:
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
// wrapStreamFn returns a StreamFn derived from ctx.streamFn
|
|
205
|
+
wrapStreamFn: (ctx) => {
|
|
206
|
+
if (!ctx.streamFn) return undefined;
|
|
207
|
+
const inner = ctx.streamFn;
|
|
208
|
+
return async (params) => {
|
|
209
|
+
params.headers = {
|
|
210
|
+
...params.headers,
|
|
211
|
+
"X-Acme-Version": "2",
|
|
212
|
+
};
|
|
213
|
+
return inner(params);
|
|
214
|
+
};
|
|
215
|
+
},
|
|
216
|
+
```
|
|
217
|
+
</Tab>
|
|
218
|
+
<Tab title="Usage and billing">
|
|
219
|
+
For providers that expose usage/billing data:
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
resolveUsageAuth: async (ctx) => {
|
|
223
|
+
const auth = await ctx.resolveOAuthToken();
|
|
224
|
+
return auth ? { token: auth.token } : null;
|
|
225
|
+
},
|
|
226
|
+
fetchUsageSnapshot: async (ctx) => {
|
|
227
|
+
return await fetchAcmeUsage(ctx.token, ctx.timeoutMs);
|
|
228
|
+
},
|
|
229
|
+
```
|
|
230
|
+
</Tab>
|
|
231
|
+
</Tabs>
|
|
232
|
+
|
|
233
|
+
<Accordion title="All 21 available hooks">
|
|
234
|
+
QuantumClaw calls hooks in this order. Most providers only use 2-3:
|
|
235
|
+
|
|
236
|
+
| # | Hook | When to use |
|
|
237
|
+
| --- | --- | --- |
|
|
238
|
+
| 1 | `catalog` | Model catalog or base URL defaults |
|
|
239
|
+
| 2 | `resolveDynamicModel` | Accept arbitrary upstream model IDs |
|
|
240
|
+
| 3 | `prepareDynamicModel` | Async metadata fetch before resolving |
|
|
241
|
+
| 4 | `normalizeResolvedModel` | Transport rewrites before the runner |
|
|
242
|
+
| 5 | `capabilities` | Transcript/tooling metadata |
|
|
243
|
+
| 6 | `prepareExtraParams` | Default request params |
|
|
244
|
+
| 7 | `wrapStreamFn` | Custom headers/body wrappers |
|
|
245
|
+
| 8 | `formatApiKey` | Custom runtime token shape |
|
|
246
|
+
| 9 | `refreshOAuth` | Custom OAuth refresh |
|
|
247
|
+
| 10 | `buildAuthDoctorHint` | Auth repair guidance |
|
|
248
|
+
| 11 | `isCacheTtlEligible` | Prompt cache TTL gating |
|
|
249
|
+
| 12 | `buildMissingAuthMessage` | Custom missing-auth hint |
|
|
250
|
+
| 13 | `suppressBuiltInModel` | Hide stale upstream rows |
|
|
251
|
+
| 14 | `augmentModelCatalog` | Synthetic forward-compat rows |
|
|
252
|
+
| 15 | `isBinaryThinking` | Binary thinking on/off |
|
|
253
|
+
| 16 | `supportsXHighThinking` | `xhigh` reasoning support |
|
|
254
|
+
| 17 | `resolveDefaultThinkingLevel` | Default `/think` policy |
|
|
255
|
+
| 18 | `isModernModelRef` | Live/smoke model matching |
|
|
256
|
+
| 19 | `prepareRuntimeAuth` | Token exchange before inference |
|
|
257
|
+
| 20 | `resolveUsageAuth` | Custom usage credential parsing |
|
|
258
|
+
| 21 | `fetchUsageSnapshot` | Custom usage endpoint |
|
|
259
|
+
|
|
260
|
+
For detailed descriptions and real-world examples, see
|
|
261
|
+
[Internals: Provider Runtime Hooks](/plugins/architecture#provider-runtime-hooks).
|
|
262
|
+
</Accordion>
|
|
263
|
+
|
|
264
|
+
</Step>
|
|
265
|
+
|
|
266
|
+
<Step title="Add extra capabilities (optional)">
|
|
267
|
+
A provider plugin can register speech, media understanding, image
|
|
268
|
+
generation, and web search alongside text inference:
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
register(api) {
|
|
272
|
+
api.registerProvider({ id: "acme-ai", /* ... */ });
|
|
273
|
+
|
|
274
|
+
api.registerSpeechProvider({
|
|
275
|
+
id: "acme-ai",
|
|
276
|
+
label: "Acme Speech",
|
|
277
|
+
isConfigured: ({ config }) => Boolean(config.messages?.tts),
|
|
278
|
+
synthesize: async (req) => ({
|
|
279
|
+
audioBuffer: Buffer.from(/* PCM data */),
|
|
280
|
+
outputFormat: "mp3",
|
|
281
|
+
fileExtension: ".mp3",
|
|
282
|
+
voiceCompatible: false,
|
|
283
|
+
}),
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
api.registerMediaUnderstandingProvider({
|
|
287
|
+
id: "acme-ai",
|
|
288
|
+
capabilities: ["image", "audio"],
|
|
289
|
+
describeImage: async (req) => ({ text: "A photo of..." }),
|
|
290
|
+
transcribeAudio: async (req) => ({ text: "Transcript..." }),
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
api.registerImageGenerationProvider({
|
|
294
|
+
id: "acme-ai",
|
|
295
|
+
label: "Acme Images",
|
|
296
|
+
generate: async (req) => ({ /* image result */ }),
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
QuantumClaw classifies this as a **hybrid-capability** plugin. This is the
|
|
302
|
+
recommended pattern for company plugins (one plugin per vendor). See
|
|
303
|
+
[Internals: Capability Ownership](/plugins/architecture#capability-ownership-model).
|
|
304
|
+
|
|
305
|
+
</Step>
|
|
306
|
+
|
|
307
|
+
<Step title="Test">
|
|
308
|
+
```typescript src/provider.test.ts
|
|
309
|
+
import { describe, it, expect } from "vitest";
|
|
310
|
+
// Export your provider config object from index.ts or a dedicated file
|
|
311
|
+
import { acmeProvider } from "./provider.js";
|
|
312
|
+
|
|
313
|
+
describe("acme-ai provider", () => {
|
|
314
|
+
it("resolves dynamic models", () => {
|
|
315
|
+
const model = acmeProvider.resolveDynamicModel!({
|
|
316
|
+
modelId: "acme-beta-v3",
|
|
317
|
+
} as any);
|
|
318
|
+
expect(model.id).toBe("acme-beta-v3");
|
|
319
|
+
expect(model.provider).toBe("acme-ai");
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
it("returns catalog when key is available", async () => {
|
|
323
|
+
const result = await acmeProvider.catalog!.run({
|
|
324
|
+
resolveProviderApiKey: () => ({ apiKey: "test-key" }),
|
|
325
|
+
} as any);
|
|
326
|
+
expect(result?.provider?.models).toHaveLength(2);
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
it("returns null catalog when no key", async () => {
|
|
330
|
+
const result = await acmeProvider.catalog!.run({
|
|
331
|
+
resolveProviderApiKey: () => ({ apiKey: undefined }),
|
|
332
|
+
} as any);
|
|
333
|
+
expect(result).toBeNull();
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
</Step>
|
|
339
|
+
</Steps>
|
|
340
|
+
|
|
341
|
+
## File structure
|
|
342
|
+
|
|
343
|
+
```
|
|
344
|
+
extensions/acme-ai/
|
|
345
|
+
├── package.json # quantumclaw.providers metadata
|
|
346
|
+
├── quantumclaw.plugin.json # Manifest with providerAuthEnvVars
|
|
347
|
+
├── index.ts # definePluginEntry + registerProvider
|
|
348
|
+
└── src/
|
|
349
|
+
├── provider.test.ts # Tests
|
|
350
|
+
└── usage.ts # Usage endpoint (optional)
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## Catalog order reference
|
|
354
|
+
|
|
355
|
+
`catalog.order` controls when your catalog merges relative to built-in
|
|
356
|
+
providers:
|
|
357
|
+
|
|
358
|
+
| Order | When | Use case |
|
|
359
|
+
| --------- | ------------- | ----------------------------------------------- |
|
|
360
|
+
| `simple` | First pass | Plain API-key providers |
|
|
361
|
+
| `profile` | After simple | Providers gated on auth profiles |
|
|
362
|
+
| `paired` | After profile | Synthesize multiple related entries |
|
|
363
|
+
| `late` | Last pass | Override existing providers (wins on collision) |
|
|
364
|
+
|
|
365
|
+
## Next steps
|
|
366
|
+
|
|
367
|
+
- [Channel Plugins](/plugins/sdk-channel-plugins) — if your plugin also provides a channel
|
|
368
|
+
- [SDK Runtime](/plugins/sdk-runtime) — `api.runtime` helpers (TTS, search, subagent)
|
|
369
|
+
- [SDK Overview](/plugins/sdk-overview) — full subpath import reference
|
|
370
|
+
- [Plugin Internals](/plugins/architecture#provider-runtime-hooks) — hook details and bundled examples
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Plugin SDK Runtime"
|
|
3
|
+
sidebarTitle: "Runtime Helpers"
|
|
4
|
+
summary: "api.runtime -- the injected runtime helpers available to plugins"
|
|
5
|
+
read_when:
|
|
6
|
+
- You need to call core helpers from a plugin (TTS, STT, image gen, web search, subagent)
|
|
7
|
+
- You want to understand what api.runtime exposes
|
|
8
|
+
- You are accessing config, agent, or media helpers from plugin code
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Plugin Runtime Helpers
|
|
12
|
+
|
|
13
|
+
Reference for the `api.runtime` object injected into every plugin during
|
|
14
|
+
registration. Use these helpers instead of importing host internals directly.
|
|
15
|
+
|
|
16
|
+
<Tip>
|
|
17
|
+
**Looking for a walkthrough?** See [Channel Plugins](/plugins/sdk-channel-plugins)
|
|
18
|
+
or [Provider Plugins](/plugins/sdk-provider-plugins) for step-by-step guides
|
|
19
|
+
that show these helpers in context.
|
|
20
|
+
</Tip>
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
register(api) {
|
|
24
|
+
const runtime = api.runtime;
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Runtime namespaces
|
|
29
|
+
|
|
30
|
+
### `api.runtime.agent`
|
|
31
|
+
|
|
32
|
+
Agent identity, directories, and session management.
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// Resolve the agent's working directory
|
|
36
|
+
const agentDir = api.runtime.agent.resolveAgentDir(cfg);
|
|
37
|
+
|
|
38
|
+
// Resolve agent workspace
|
|
39
|
+
const workspaceDir = api.runtime.agent.resolveAgentWorkspaceDir(cfg);
|
|
40
|
+
|
|
41
|
+
// Get agent identity
|
|
42
|
+
const identity = api.runtime.agent.resolveAgentIdentity(cfg);
|
|
43
|
+
|
|
44
|
+
// Get default thinking level
|
|
45
|
+
const thinking = api.runtime.agent.resolveThinkingDefault(cfg, provider, model);
|
|
46
|
+
|
|
47
|
+
// Get agent timeout
|
|
48
|
+
const timeoutMs = api.runtime.agent.resolveAgentTimeoutMs(cfg);
|
|
49
|
+
|
|
50
|
+
// Ensure workspace exists
|
|
51
|
+
await api.runtime.agent.ensureAgentWorkspace(cfg);
|
|
52
|
+
|
|
53
|
+
// Run an embedded Pi agent (requires sessionFile + workspaceDir at minimum)
|
|
54
|
+
const agentDir = api.runtime.agent.resolveAgentDir(cfg);
|
|
55
|
+
const result = await api.runtime.agent.runEmbeddedPiAgent({
|
|
56
|
+
sessionId: "my-plugin:task-1",
|
|
57
|
+
sessionFile: path.join(agentDir, "sessions", "my-plugin-task-1.jsonl"),
|
|
58
|
+
workspaceDir: api.runtime.agent.resolveAgentWorkspaceDir(cfg),
|
|
59
|
+
prompt: "Summarize the latest changes",
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Session store helpers** are under `api.runtime.agent.session`:
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
const storePath = api.runtime.agent.session.resolveStorePath(cfg);
|
|
67
|
+
const store = api.runtime.agent.session.loadSessionStore(cfg);
|
|
68
|
+
await api.runtime.agent.session.saveSessionStore(cfg, store);
|
|
69
|
+
const filePath = api.runtime.agent.session.resolveSessionFilePath(cfg, sessionId);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### `api.runtime.agent.defaults`
|
|
73
|
+
|
|
74
|
+
Default model and provider constants:
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
const model = api.runtime.agent.defaults.model; // e.g. "anthropic/claude-sonnet-4-6"
|
|
78
|
+
const provider = api.runtime.agent.defaults.provider; // e.g. "anthropic"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### `api.runtime.subagent`
|
|
82
|
+
|
|
83
|
+
Launch and manage background subagent runs.
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// Start a subagent run
|
|
87
|
+
const { runId } = await api.runtime.subagent.run({
|
|
88
|
+
sessionKey: "agent:main:subagent:search-helper",
|
|
89
|
+
message: "Expand this query into focused follow-up searches.",
|
|
90
|
+
provider: "openai", // optional override
|
|
91
|
+
model: "gpt-4.1-mini", // optional override
|
|
92
|
+
deliver: false,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// Wait for completion
|
|
96
|
+
const result = await api.runtime.subagent.waitForRun({ runId, timeoutMs: 30000 });
|
|
97
|
+
|
|
98
|
+
// Read session messages
|
|
99
|
+
const { messages } = await api.runtime.subagent.getSessionMessages({
|
|
100
|
+
sessionKey: "agent:main:subagent:search-helper",
|
|
101
|
+
limit: 10,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Delete a session
|
|
105
|
+
await api.runtime.subagent.deleteSession({
|
|
106
|
+
sessionKey: "agent:main:subagent:search-helper",
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
<Warning>
|
|
111
|
+
Model overrides (`provider`/`model`) require operator opt-in via
|
|
112
|
+
`plugins.entries.<id>.subagent.allowModelOverride: true` in config.
|
|
113
|
+
Untrusted plugins can still run subagents, but override requests are rejected.
|
|
114
|
+
</Warning>
|
|
115
|
+
|
|
116
|
+
### `api.runtime.tts`
|
|
117
|
+
|
|
118
|
+
Text-to-speech synthesis.
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// Standard TTS
|
|
122
|
+
const clip = await api.runtime.tts.textToSpeech({
|
|
123
|
+
text: "Hello from QuantumClaw",
|
|
124
|
+
cfg: api.config,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// Telephony-optimized TTS
|
|
128
|
+
const telephonyClip = await api.runtime.tts.textToSpeechTelephony({
|
|
129
|
+
text: "Hello from QuantumClaw",
|
|
130
|
+
cfg: api.config,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// List available voices
|
|
134
|
+
const voices = await api.runtime.tts.listVoices({
|
|
135
|
+
provider: "elevenlabs",
|
|
136
|
+
cfg: api.config,
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Uses core `messages.tts` configuration and provider selection. Returns PCM audio
|
|
141
|
+
buffer + sample rate.
|
|
142
|
+
|
|
143
|
+
### `api.runtime.mediaUnderstanding`
|
|
144
|
+
|
|
145
|
+
Image, audio, and video analysis.
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
// Describe an image
|
|
149
|
+
const image = await api.runtime.mediaUnderstanding.describeImageFile({
|
|
150
|
+
filePath: "/tmp/inbound-photo.jpg",
|
|
151
|
+
cfg: api.config,
|
|
152
|
+
agentDir: "/tmp/agent",
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// Transcribe audio
|
|
156
|
+
const { text } = await api.runtime.mediaUnderstanding.transcribeAudioFile({
|
|
157
|
+
filePath: "/tmp/inbound-audio.ogg",
|
|
158
|
+
cfg: api.config,
|
|
159
|
+
mime: "audio/ogg", // optional, for when MIME cannot be inferred
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// Describe a video
|
|
163
|
+
const video = await api.runtime.mediaUnderstanding.describeVideoFile({
|
|
164
|
+
filePath: "/tmp/inbound-video.mp4",
|
|
165
|
+
cfg: api.config,
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// Generic file analysis
|
|
169
|
+
const result = await api.runtime.mediaUnderstanding.runFile({
|
|
170
|
+
filePath: "/tmp/inbound-file.pdf",
|
|
171
|
+
cfg: api.config,
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Returns `{ text: undefined }` when no output is produced (e.g. skipped input).
|
|
176
|
+
|
|
177
|
+
<Info>
|
|
178
|
+
`api.runtime.stt.transcribeAudioFile(...)` remains as a compatibility alias
|
|
179
|
+
for `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`.
|
|
180
|
+
</Info>
|
|
181
|
+
|
|
182
|
+
### `api.runtime.imageGeneration`
|
|
183
|
+
|
|
184
|
+
Image generation.
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
const result = await api.runtime.imageGeneration.generate({
|
|
188
|
+
prompt: "A robot painting a sunset",
|
|
189
|
+
cfg: api.config,
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
const providers = api.runtime.imageGeneration.listProviders({ cfg: api.config });
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### `api.runtime.webSearch`
|
|
196
|
+
|
|
197
|
+
Web search.
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
const providers = api.runtime.webSearch.listProviders({ config: api.config });
|
|
201
|
+
|
|
202
|
+
const result = await api.runtime.webSearch.search({
|
|
203
|
+
config: api.config,
|
|
204
|
+
args: { query: "QuantumClaw plugin SDK", count: 5 },
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### `api.runtime.media`
|
|
209
|
+
|
|
210
|
+
Low-level media utilities.
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
const webMedia = await api.runtime.media.loadWebMedia(url);
|
|
214
|
+
const mime = await api.runtime.media.detectMime(buffer);
|
|
215
|
+
const kind = api.runtime.media.mediaKindFromMime("image/jpeg"); // "image"
|
|
216
|
+
const isVoice = api.runtime.media.isVoiceCompatibleAudio(filePath);
|
|
217
|
+
const metadata = await api.runtime.media.getImageMetadata(filePath);
|
|
218
|
+
const resized = await api.runtime.media.resizeToJpeg(buffer, { maxWidth: 800 });
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### `api.runtime.config`
|
|
222
|
+
|
|
223
|
+
Config load and write.
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
const cfg = await api.runtime.config.loadConfig();
|
|
227
|
+
await api.runtime.config.writeConfigFile(cfg);
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### `api.runtime.system`
|
|
231
|
+
|
|
232
|
+
System-level utilities.
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
await api.runtime.system.enqueueSystemEvent(event);
|
|
236
|
+
api.runtime.system.requestHeartbeatNow();
|
|
237
|
+
const output = await api.runtime.system.runCommandWithTimeout(cmd, args, opts);
|
|
238
|
+
const hint = api.runtime.system.formatNativeDependencyHint(pkg);
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### `api.runtime.events`
|
|
242
|
+
|
|
243
|
+
Event subscriptions.
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
api.runtime.events.onAgentEvent((event) => {
|
|
247
|
+
/* ... */
|
|
248
|
+
});
|
|
249
|
+
api.runtime.events.onSessionTranscriptUpdate((update) => {
|
|
250
|
+
/* ... */
|
|
251
|
+
});
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### `api.runtime.logging`
|
|
255
|
+
|
|
256
|
+
Logging.
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
const verbose = api.runtime.logging.shouldLogVerbose();
|
|
260
|
+
const childLogger = api.runtime.logging.getChildLogger({ plugin: "my-plugin" }, { level: "debug" });
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### `api.runtime.modelAuth`
|
|
264
|
+
|
|
265
|
+
Model and provider auth resolution.
|
|
266
|
+
|
|
267
|
+
```typescript
|
|
268
|
+
const auth = await api.runtime.modelAuth.getApiKeyForModel({ model, cfg });
|
|
269
|
+
const providerAuth = await api.runtime.modelAuth.resolveApiKeyForProvider({
|
|
270
|
+
provider: "openai",
|
|
271
|
+
cfg,
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### `api.runtime.state`
|
|
276
|
+
|
|
277
|
+
State directory resolution.
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
const stateDir = api.runtime.state.resolveStateDir();
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### `api.runtime.tools`
|
|
284
|
+
|
|
285
|
+
Memory tool factories and CLI.
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
const getTool = api.runtime.tools.createMemoryGetTool(/* ... */);
|
|
289
|
+
const searchTool = api.runtime.tools.createMemorySearchTool(/* ... */);
|
|
290
|
+
api.runtime.tools.registerMemoryCli(/* ... */);
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### `api.runtime.channel`
|
|
294
|
+
|
|
295
|
+
Channel-specific runtime helpers (available when a channel plugin is loaded).
|
|
296
|
+
|
|
297
|
+
## Storing runtime references
|
|
298
|
+
|
|
299
|
+
Use `createPluginRuntimeStore` to store the runtime reference for use outside
|
|
300
|
+
the `register` callback:
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
import { createPluginRuntimeStore } from "quantumclaw/plugin-sdk/runtime-store";
|
|
304
|
+
import type { PluginRuntime } from "quantumclaw/plugin-sdk/runtime-store";
|
|
305
|
+
|
|
306
|
+
const store = createPluginRuntimeStore<PluginRuntime>("my-plugin runtime not initialized");
|
|
307
|
+
|
|
308
|
+
// In your entry point
|
|
309
|
+
export default defineChannelPluginEntry({
|
|
310
|
+
id: "my-plugin",
|
|
311
|
+
name: "My Plugin",
|
|
312
|
+
description: "Example",
|
|
313
|
+
plugin: myPlugin,
|
|
314
|
+
setRuntime: store.setRuntime,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// In other files
|
|
318
|
+
export function getRuntime() {
|
|
319
|
+
return store.getRuntime(); // throws if not initialized
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export function tryGetRuntime() {
|
|
323
|
+
return store.tryGetRuntime(); // returns null if not initialized
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Other top-level `api` fields
|
|
328
|
+
|
|
329
|
+
Beyond `api.runtime`, the API object also provides:
|
|
330
|
+
|
|
331
|
+
| Field | Type | Description |
|
|
332
|
+
| ------------------------ | ------------------------- | --------------------------------------------------------- |
|
|
333
|
+
| `api.id` | `string` | Plugin id |
|
|
334
|
+
| `api.name` | `string` | Plugin display name |
|
|
335
|
+
| `api.config` | `QuantumClawConfig` | Current config snapshot |
|
|
336
|
+
| `api.pluginConfig` | `Record<string, unknown>` | Plugin-specific config from `plugins.entries.<id>.config` |
|
|
337
|
+
| `api.logger` | `PluginLogger` | Scoped logger (`debug`, `info`, `warn`, `error`) |
|
|
338
|
+
| `api.registrationMode` | `PluginRegistrationMode` | `"full"`, `"setup-only"`, or `"setup-runtime"` |
|
|
339
|
+
| `api.resolvePath(input)` | `(string) => string` | Resolve a path relative to the plugin root |
|
|
340
|
+
|
|
341
|
+
## Related
|
|
342
|
+
|
|
343
|
+
- [SDK Overview](/plugins/sdk-overview) -- subpath reference
|
|
344
|
+
- [SDK Entry Points](/plugins/sdk-entrypoints) -- `definePluginEntry` options
|
|
345
|
+
- [Plugin Internals](/plugins/architecture) -- capability model and registry
|