profclaw 0.0.1-beta.1
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/.env.example +215 -0
- package/CHANGELOG.md +49 -0
- package/CONTRIBUTING.md +119 -0
- package/Dockerfile +107 -0
- package/LICENSE +661 -0
- package/README.md +196 -0
- package/config/agents.yml +55 -0
- package/config/budget.yml +15 -0
- package/config/pricing.yml +46 -0
- package/config/settings.yml +168 -0
- package/dist/adapters/claude-code.d.ts +46 -0
- package/dist/adapters/claude-code.js +215 -0
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.js +4 -0
- package/dist/adapters/ollama.d.ts +45 -0
- package/dist/adapters/ollama.js +277 -0
- package/dist/adapters/openclaw.d.ts +60 -0
- package/dist/adapters/openclaw.js +289 -0
- package/dist/adapters/registry.d.ts +56 -0
- package/dist/adapters/registry.js +163 -0
- package/dist/agents/executor.d.ts +78 -0
- package/dist/agents/executor.js +657 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.js +27 -0
- package/dist/agents/stop-conditions.d.ts +108 -0
- package/dist/agents/stop-conditions.js +299 -0
- package/dist/agents/types.d.ts +185 -0
- package/dist/agents/types.js +14 -0
- package/dist/ai/embedding-service.d.ts +96 -0
- package/dist/ai/embedding-service.js +333 -0
- package/dist/auth/api-tokens.d.ts +71 -0
- package/dist/auth/api-tokens.js +235 -0
- package/dist/auth/auth-service.d.ts +75 -0
- package/dist/auth/auth-service.js +557 -0
- package/dist/auth/device-identity.d.ts +96 -0
- package/dist/auth/device-identity.js +250 -0
- package/dist/auth/github-oauth.d.ts +20 -0
- package/dist/auth/github-oauth.js +59 -0
- package/dist/auth/jira-oauth.d.ts +25 -0
- package/dist/auth/jira-oauth.js +75 -0
- package/dist/auth/linear-oauth.d.ts +21 -0
- package/dist/auth/linear-oauth.js +59 -0
- package/dist/auth/middleware.d.ts +44 -0
- package/dist/auth/middleware.js +190 -0
- package/dist/auth/pairing-codes.d.ts +109 -0
- package/dist/auth/pairing-codes.js +274 -0
- package/dist/auth/password.d.ts +53 -0
- package/dist/auth/password.js +126 -0
- package/dist/auth/qr-pairing.d.ts +36 -0
- package/dist/auth/qr-pairing.js +138 -0
- package/dist/auth/slack-oauth.d.ts +31 -0
- package/dist/auth/slack-oauth.js +80 -0
- package/dist/backup/index.d.ts +50 -0
- package/dist/backup/index.js +184 -0
- package/dist/browser/adapters.d.ts +25 -0
- package/dist/browser/adapters.js +32 -0
- package/dist/browser/cli.d.ts +19 -0
- package/dist/browser/cli.js +277 -0
- package/dist/browser/compression.d.ts +32 -0
- package/dist/browser/compression.js +269 -0
- package/dist/browser/extensions.d.ts +144 -0
- package/dist/browser/extensions.js +251 -0
- package/dist/browser/index.d.ts +37 -0
- package/dist/browser/index.js +43 -0
- package/dist/browser/refs.d.ts +46 -0
- package/dist/browser/refs.js +120 -0
- package/dist/browser/search.d.ts +36 -0
- package/dist/browser/search.js +193 -0
- package/dist/browser/service.d.ts +94 -0
- package/dist/browser/service.js +358 -0
- package/dist/browser/snapshot.d.ts +19 -0
- package/dist/browser/snapshot.js +250 -0
- package/dist/browser/tools.d.ts +259 -0
- package/dist/browser/tools.js +463 -0
- package/dist/browser/types.d.ts +134 -0
- package/dist/browser/types.js +17 -0
- package/dist/chat/agentic-executor.d.ts +108 -0
- package/dist/chat/agentic-executor.js +739 -0
- package/dist/chat/api-key-detector.d.ts +41 -0
- package/dist/chat/api-key-detector.js +290 -0
- package/dist/chat/auto-reply.d.ts +90 -0
- package/dist/chat/auto-reply.js +272 -0
- package/dist/chat/conversations.d.ts +91 -0
- package/dist/chat/conversations.js +297 -0
- package/dist/chat/execution/audit.d.ts +192 -0
- package/dist/chat/execution/audit.js +323 -0
- package/dist/chat/execution/executor.d.ts +56 -0
- package/dist/chat/execution/executor.js +654 -0
- package/dist/chat/execution/guardrails.d.ts +98 -0
- package/dist/chat/execution/guardrails.js +571 -0
- package/dist/chat/execution/index.d.ts +61 -0
- package/dist/chat/execution/index.js +129 -0
- package/dist/chat/execution/model-capability.d.ts +34 -0
- package/dist/chat/execution/model-capability.js +96 -0
- package/dist/chat/execution/process-pool.d.ts +110 -0
- package/dist/chat/execution/process-pool.js +290 -0
- package/dist/chat/execution/pty.d.ts +92 -0
- package/dist/chat/execution/pty.js +285 -0
- package/dist/chat/execution/rate-limiter.d.ts +87 -0
- package/dist/chat/execution/rate-limiter.js +305 -0
- package/dist/chat/execution/registry.d.ts +54 -0
- package/dist/chat/execution/registry.js +220 -0
- package/dist/chat/execution/sandbox.d.ts +109 -0
- package/dist/chat/execution/sandbox.js +684 -0
- package/dist/chat/execution/secrets.d.ts +45 -0
- package/dist/chat/execution/secrets.js +338 -0
- package/dist/chat/execution/security.d.ts +179 -0
- package/dist/chat/execution/security.js +739 -0
- package/dist/chat/execution/self-correction.d.ts +162 -0
- package/dist/chat/execution/self-correction.js +557 -0
- package/dist/chat/execution/session-manager.d.ts +79 -0
- package/dist/chat/execution/session-manager.js +356 -0
- package/dist/chat/execution/session-spawn/config.d.ts +37 -0
- package/dist/chat/execution/session-spawn/config.js +83 -0
- package/dist/chat/execution/session-spawn/index.d.ts +10 -0
- package/dist/chat/execution/session-spawn/index.js +10 -0
- package/dist/chat/execution/session-spawn/manager.d.ts +35 -0
- package/dist/chat/execution/session-spawn/manager.js +418 -0
- package/dist/chat/execution/session-spawn/types.d.ts +117 -0
- package/dist/chat/execution/session-spawn/types.js +16 -0
- package/dist/chat/execution/smart-prompts.d.ts +34 -0
- package/dist/chat/execution/smart-prompts.js +151 -0
- package/dist/chat/execution/stream-results.d.ts +65 -0
- package/dist/chat/execution/stream-results.js +156 -0
- package/dist/chat/execution/tool-router.d.ts +76 -0
- package/dist/chat/execution/tool-router.js +296 -0
- package/dist/chat/execution/tools/agents-list.d.ts +49 -0
- package/dist/chat/execution/tools/agents-list.js +165 -0
- package/dist/chat/execution/tools/browser.d.ts +12 -0
- package/dist/chat/execution/tools/browser.js +14 -0
- package/dist/chat/execution/tools/canvas.d.ts +61 -0
- package/dist/chat/execution/tools/canvas.js +150 -0
- package/dist/chat/execution/tools/complete-task.d.ts +72 -0
- package/dist/chat/execution/tools/complete-task.js +104 -0
- package/dist/chat/execution/tools/cron-tool.d.ts +204 -0
- package/dist/chat/execution/tools/cron-tool.js +680 -0
- package/dist/chat/execution/tools/discord-actions.d.ts +120 -0
- package/dist/chat/execution/tools/discord-actions.js +361 -0
- package/dist/chat/execution/tools/exec.d.ts +43 -0
- package/dist/chat/execution/tools/exec.js +223 -0
- package/dist/chat/execution/tools/file-ops.d.ts +175 -0
- package/dist/chat/execution/tools/file-ops.js +723 -0
- package/dist/chat/execution/tools/git.d.ts +143 -0
- package/dist/chat/execution/tools/git.js +395 -0
- package/dist/chat/execution/tools/github.d.ts +42 -0
- package/dist/chat/execution/tools/github.js +184 -0
- package/dist/chat/execution/tools/glinr-ops.d.ts +202 -0
- package/dist/chat/execution/tools/glinr-ops.js +694 -0
- package/dist/chat/execution/tools/image-analyze.d.ts +29 -0
- package/dist/chat/execution/tools/image-analyze.js +127 -0
- package/dist/chat/execution/tools/index.d.ts +64 -0
- package/dist/chat/execution/tools/index.js +245 -0
- package/dist/chat/execution/tools/integrations.d.ts +109 -0
- package/dist/chat/execution/tools/integrations.js +237 -0
- package/dist/chat/execution/tools/link-understand.d.ts +34 -0
- package/dist/chat/execution/tools/link-understand.js +307 -0
- package/dist/chat/execution/tools/maintenance.d.ts +29 -0
- package/dist/chat/execution/tools/maintenance.js +105 -0
- package/dist/chat/execution/tools/memory-tools.d.ts +76 -0
- package/dist/chat/execution/tools/memory-tools.js +278 -0
- package/dist/chat/execution/tools/openai-image-gen.d.ts +51 -0
- package/dist/chat/execution/tools/openai-image-gen.js +212 -0
- package/dist/chat/execution/tools/profclaw-ops.d.ts +204 -0
- package/dist/chat/execution/tools/profclaw-ops.js +665 -0
- package/dist/chat/execution/tools/session-spawn.d.ts +146 -0
- package/dist/chat/execution/tools/session-spawn.js +544 -0
- package/dist/chat/execution/tools/session-status.d.ts +38 -0
- package/dist/chat/execution/tools/session-status.js +185 -0
- package/dist/chat/execution/tools/sessions-list.d.ts +49 -0
- package/dist/chat/execution/tools/sessions-list.js +153 -0
- package/dist/chat/execution/tools/sessions-send.d.ts +48 -0
- package/dist/chat/execution/tools/sessions-send.js +207 -0
- package/dist/chat/execution/tools/sessions-spawn.d.ts +51 -0
- package/dist/chat/execution/tools/sessions-spawn.js +137 -0
- package/dist/chat/execution/tools/slack-actions.d.ts +90 -0
- package/dist/chat/execution/tools/slack-actions.js +272 -0
- package/dist/chat/execution/tools/subagent-orchestrate.d.ts +66 -0
- package/dist/chat/execution/tools/subagent-orchestrate.js +313 -0
- package/dist/chat/execution/tools/system.d.ts +121 -0
- package/dist/chat/execution/tools/system.js +415 -0
- package/dist/chat/execution/tools/telegram-actions.d.ts +126 -0
- package/dist/chat/execution/tools/telegram-actions.js +339 -0
- package/dist/chat/execution/tools/test-run.d.ts +43 -0
- package/dist/chat/execution/tools/test-run.js +391 -0
- package/dist/chat/execution/tools/tts-speak.d.ts +39 -0
- package/dist/chat/execution/tools/tts-speak.js +199 -0
- package/dist/chat/execution/tools/web-fetch.d.ts +42 -0
- package/dist/chat/execution/tools/web-fetch.js +247 -0
- package/dist/chat/execution/tools/web-search.d.ts +53 -0
- package/dist/chat/execution/tools/web-search.js +130 -0
- package/dist/chat/execution/types.d.ts +337 -0
- package/dist/chat/execution/types.js +8 -0
- package/dist/chat/execution/workflows/built-in.d.ts +10 -0
- package/dist/chat/execution/workflows/built-in.js +249 -0
- package/dist/chat/execution/workflows/executor.d.ts +13 -0
- package/dist/chat/execution/workflows/executor.js +259 -0
- package/dist/chat/execution/workflows/index.d.ts +5 -0
- package/dist/chat/execution/workflows/index.js +5 -0
- package/dist/chat/execution/workflows/trigger.d.ts +15 -0
- package/dist/chat/execution/workflows/trigger.js +111 -0
- package/dist/chat/execution/workflows/types.d.ts +80 -0
- package/dist/chat/execution/workflows/types.js +2 -0
- package/dist/chat/failover/error.d.ts +73 -0
- package/dist/chat/failover/error.js +412 -0
- package/dist/chat/failover/index.d.ts +10 -0
- package/dist/chat/failover/index.js +11 -0
- package/dist/chat/failover/model-fallback.d.ts +97 -0
- package/dist/chat/failover/model-fallback.js +328 -0
- package/dist/chat/failover/types.d.ts +47 -0
- package/dist/chat/failover/types.js +8 -0
- package/dist/chat/format/chunk.d.ts +59 -0
- package/dist/chat/format/chunk.js +253 -0
- package/dist/chat/format/index.d.ts +7 -0
- package/dist/chat/format/index.js +7 -0
- package/dist/chat/format/tool-result-formatter.d.ts +30 -0
- package/dist/chat/format/tool-result-formatter.js +177 -0
- package/dist/chat/group.d.ts +232 -0
- package/dist/chat/group.js +311 -0
- package/dist/chat/index.d.ts +21 -0
- package/dist/chat/index.js +30 -0
- package/dist/chat/memory.d.ts +108 -0
- package/dist/chat/memory.js +343 -0
- package/dist/chat/message-handler.d.ts +38 -0
- package/dist/chat/message-handler.js +274 -0
- package/dist/chat/proactive/index.d.ts +167 -0
- package/dist/chat/proactive/index.js +721 -0
- package/dist/chat/prompt-adapter.d.ts +52 -0
- package/dist/chat/prompt-adapter.js +245 -0
- package/dist/chat/providers/dingtalk/index.d.ts +69 -0
- package/dist/chat/providers/dingtalk/index.js +225 -0
- package/dist/chat/providers/discord/index.d.ts +264 -0
- package/dist/chat/providers/discord/index.js +657 -0
- package/dist/chat/providers/feishu/index.d.ts +97 -0
- package/dist/chat/providers/feishu/index.js +362 -0
- package/dist/chat/providers/googlechat/index.d.ts +269 -0
- package/dist/chat/providers/googlechat/index.js +634 -0
- package/dist/chat/providers/imessage/index.d.ts +61 -0
- package/dist/chat/providers/imessage/index.js +166 -0
- package/dist/chat/providers/index.d.ts +76 -0
- package/dist/chat/providers/index.js +430 -0
- package/dist/chat/providers/irc/index.d.ts +101 -0
- package/dist/chat/providers/irc/index.js +557 -0
- package/dist/chat/providers/line/index.d.ts +113 -0
- package/dist/chat/providers/line/index.js +434 -0
- package/dist/chat/providers/matrix/index.d.ts +161 -0
- package/dist/chat/providers/matrix/index.js +559 -0
- package/dist/chat/providers/mattermost/index.d.ts +106 -0
- package/dist/chat/providers/mattermost/index.js +425 -0
- package/dist/chat/providers/msteams/index.d.ts +198 -0
- package/dist/chat/providers/msteams/index.js +694 -0
- package/dist/chat/providers/nextcloud/index.d.ts +52 -0
- package/dist/chat/providers/nextcloud/index.js +156 -0
- package/dist/chat/providers/nostr/index.d.ts +60 -0
- package/dist/chat/providers/nostr/index.js +200 -0
- package/dist/chat/providers/qq/index.d.ts +57 -0
- package/dist/chat/providers/qq/index.js +260 -0
- package/dist/chat/providers/registry.d.ts +89 -0
- package/dist/chat/providers/registry.js +213 -0
- package/dist/chat/providers/signal/index.d.ts +88 -0
- package/dist/chat/providers/signal/index.js +357 -0
- package/dist/chat/providers/slack/index.d.ts +52 -0
- package/dist/chat/providers/slack/index.js +477 -0
- package/dist/chat/providers/synology/index.d.ts +50 -0
- package/dist/chat/providers/synology/index.js +138 -0
- package/dist/chat/providers/telegram/index.d.ts +148 -0
- package/dist/chat/providers/telegram/index.js +492 -0
- package/dist/chat/providers/tlon/index.d.ts +44 -0
- package/dist/chat/providers/tlon/index.js +243 -0
- package/dist/chat/providers/twitch/index.d.ts +79 -0
- package/dist/chat/providers/twitch/index.js +349 -0
- package/dist/chat/providers/types.d.ts +437 -0
- package/dist/chat/providers/types.js +14 -0
- package/dist/chat/providers/webchat/index.d.ts +38 -0
- package/dist/chat/providers/webchat/index.js +214 -0
- package/dist/chat/providers/wecom/index.d.ts +62 -0
- package/dist/chat/providers/wecom/index.js +228 -0
- package/dist/chat/providers/whatsapp/index.d.ts +147 -0
- package/dist/chat/providers/whatsapp/index.js +396 -0
- package/dist/chat/providers/zalo/index.d.ts +54 -0
- package/dist/chat/providers/zalo/index.js +158 -0
- package/dist/chat/providers/zalo-personal/index.d.ts +53 -0
- package/dist/chat/providers/zalo-personal/index.js +212 -0
- package/dist/chat/skills.d.ts +82 -0
- package/dist/chat/skills.js +410 -0
- package/dist/chat/system-prompts.d.ts +76 -0
- package/dist/chat/system-prompts.js +407 -0
- package/dist/chat/tool-handler.d.ts +57 -0
- package/dist/chat/tool-handler.js +336 -0
- package/dist/chat/tools.d.ts +373 -0
- package/dist/chat/tools.js +512 -0
- package/dist/cli/commands/agent.d.ts +3 -0
- package/dist/cli/commands/agent.js +108 -0
- package/dist/cli/commands/auth.d.ts +12 -0
- package/dist/cli/commands/auth.js +301 -0
- package/dist/cli/commands/browser.d.ts +3 -0
- package/dist/cli/commands/browser.js +138 -0
- package/dist/cli/commands/canvas.d.ts +3 -0
- package/dist/cli/commands/canvas.js +155 -0
- package/dist/cli/commands/channels.d.ts +3 -0
- package/dist/cli/commands/channels.js +167 -0
- package/dist/cli/commands/chat.d.ts +9 -0
- package/dist/cli/commands/chat.js +360 -0
- package/dist/cli/commands/completion.d.ts +3 -0
- package/dist/cli/commands/completion.js +170 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.js +193 -0
- package/dist/cli/commands/cost.d.ts +3 -0
- package/dist/cli/commands/cost.js +134 -0
- package/dist/cli/commands/daemon.d.ts +3 -0
- package/dist/cli/commands/daemon.js +381 -0
- package/dist/cli/commands/devices.d.ts +3 -0
- package/dist/cli/commands/devices.js +150 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +295 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.js +139 -0
- package/dist/cli/commands/mcp.d.ts +15 -0
- package/dist/cli/commands/mcp.js +157 -0
- package/dist/cli/commands/memory.d.ts +3 -0
- package/dist/cli/commands/memory.js +170 -0
- package/dist/cli/commands/models.d.ts +3 -0
- package/dist/cli/commands/models.js +197 -0
- package/dist/cli/commands/nodes.d.ts +3 -0
- package/dist/cli/commands/nodes.js +193 -0
- package/dist/cli/commands/onboard.d.ts +13 -0
- package/dist/cli/commands/onboard.js +360 -0
- package/dist/cli/commands/plugin.d.ts +15 -0
- package/dist/cli/commands/plugin.js +226 -0
- package/dist/cli/commands/provider.d.ts +16 -0
- package/dist/cli/commands/provider.js +320 -0
- package/dist/cli/commands/security.d.ts +3 -0
- package/dist/cli/commands/security.js +180 -0
- package/dist/cli/commands/serve.d.ts +3 -0
- package/dist/cli/commands/serve.js +179 -0
- package/dist/cli/commands/session.d.ts +3 -0
- package/dist/cli/commands/session.js +172 -0
- package/dist/cli/commands/setup.d.ts +13 -0
- package/dist/cli/commands/setup.js +636 -0
- package/dist/cli/commands/skill.d.ts +15 -0
- package/dist/cli/commands/skill.js +191 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.js +71 -0
- package/dist/cli/commands/summary.d.ts +3 -0
- package/dist/cli/commands/summary.js +160 -0
- package/dist/cli/commands/task.d.ts +3 -0
- package/dist/cli/commands/task.js +170 -0
- package/dist/cli/commands/ticket.d.ts +3 -0
- package/dist/cli/commands/ticket.js +421 -0
- package/dist/cli/commands/tools.d.ts +9 -0
- package/dist/cli/commands/tools.js +508 -0
- package/dist/cli/commands/tui.d.ts +3 -0
- package/dist/cli/commands/tui.js +158 -0
- package/dist/cli/commands/tunnel.d.ts +3 -0
- package/dist/cli/commands/tunnel.js +135 -0
- package/dist/cli/commands/webhooks.d.ts +3 -0
- package/dist/cli/commands/webhooks.js +191 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +127 -0
- package/dist/cli/utils/api.d.ts +17 -0
- package/dist/cli/utils/api.js +63 -0
- package/dist/cli/utils/config.d.ts +31 -0
- package/dist/cli/utils/config.js +81 -0
- package/dist/cli/utils/output.d.ts +58 -0
- package/dist/cli/utils/output.js +148 -0
- package/dist/core/deployment.d.ts +30 -0
- package/dist/core/deployment.js +114 -0
- package/dist/core/sandbox-config.d.ts +63 -0
- package/dist/core/sandbox-config.js +148 -0
- package/dist/costs/budget.d.ts +28 -0
- package/dist/costs/budget.js +57 -0
- package/dist/costs/persistence.d.ts +77 -0
- package/dist/costs/persistence.js +210 -0
- package/dist/costs/pricing.d.ts +16 -0
- package/dist/costs/pricing.js +39 -0
- package/dist/costs/token-tracker.d.ts +34 -0
- package/dist/costs/token-tracker.js +141 -0
- package/dist/cron/heartbeat.d.ts +23 -0
- package/dist/cron/heartbeat.js +109 -0
- package/dist/cron/index.d.ts +22 -0
- package/dist/cron/index.js +37 -0
- package/dist/cron/issue-poller.d.ts +15 -0
- package/dist/cron/issue-poller.js +174 -0
- package/dist/cron/scheduler.d.ts +315 -0
- package/dist/cron/scheduler.js +1008 -0
- package/dist/cron/stale-checker.d.ts +16 -0
- package/dist/cron/stale-checker.js +61 -0
- package/dist/cron/templates.d.ts +107 -0
- package/dist/cron/templates.js +395 -0
- package/dist/diagnostics/exporters.d.ts +21 -0
- package/dist/diagnostics/exporters.js +138 -0
- package/dist/diagnostics/index.d.ts +10 -0
- package/dist/diagnostics/index.js +9 -0
- package/dist/diagnostics/middleware.d.ts +12 -0
- package/dist/diagnostics/middleware.js +58 -0
- package/dist/diagnostics/tracer.d.ts +133 -0
- package/dist/diagnostics/tracer.js +257 -0
- package/dist/discovery/index.d.ts +8 -0
- package/dist/discovery/index.js +7 -0
- package/dist/discovery/mdns.d.ts +40 -0
- package/dist/discovery/mdns.js +249 -0
- package/dist/gateway/index.d.ts +35 -0
- package/dist/gateway/index.js +36 -0
- package/dist/gateway/router.d.ts +110 -0
- package/dist/gateway/router.js +649 -0
- package/dist/gateway/types.d.ts +275 -0
- package/dist/gateway/types.js +2 -0
- package/dist/gateway/workflows.d.ts +37 -0
- package/dist/gateway/workflows.js +748 -0
- package/dist/hooks/agent-webhook.d.ts +277 -0
- package/dist/hooks/agent-webhook.js +197 -0
- package/dist/hooks/index.d.ts +13 -0
- package/dist/hooks/index.js +15 -0
- package/dist/hooks/prompt-submit.d.ts +45 -0
- package/dist/hooks/prompt-submit.js +111 -0
- package/dist/hooks/schemas.d.ts +563 -0
- package/dist/hooks/schemas.js +108 -0
- package/dist/hooks/session-end.d.ts +25 -0
- package/dist/hooks/session-end.js +153 -0
- package/dist/hooks/tool-use.d.ts +41 -0
- package/dist/hooks/tool-use.js +201 -0
- package/dist/hooks/types.d.ts +76 -0
- package/dist/hooks/types.js +7 -0
- package/dist/integrations/cloudflare-tunnel.d.ts +78 -0
- package/dist/integrations/cloudflare-tunnel.js +268 -0
- package/dist/integrations/github-client.d.ts +27 -0
- package/dist/integrations/github-client.js +79 -0
- package/dist/integrations/github-projects.d.ts +97 -0
- package/dist/integrations/github-projects.js +433 -0
- package/dist/integrations/github-ticket-sync.d.ts +82 -0
- package/dist/integrations/github-ticket-sync.js +352 -0
- package/dist/integrations/github.d.ts +11 -0
- package/dist/integrations/github.js +241 -0
- package/dist/integrations/jira-client.d.ts +30 -0
- package/dist/integrations/jira-client.js +67 -0
- package/dist/integrations/jira.d.ts +13 -0
- package/dist/integrations/jira.js +108 -0
- package/dist/integrations/linear-client.d.ts +23 -0
- package/dist/integrations/linear-client.js +52 -0
- package/dist/integrations/linear.d.ts +15 -0
- package/dist/integrations/linear.js +312 -0
- package/dist/integrations/tailscale.d.ts +68 -0
- package/dist/integrations/tailscale.js +173 -0
- package/dist/integrations/web-search.d.ts +112 -0
- package/dist/integrations/web-search.js +287 -0
- package/dist/intelligence/index.d.ts +8 -0
- package/dist/intelligence/index.js +8 -0
- package/dist/intelligence/ollama.d.ts +50 -0
- package/dist/intelligence/ollama.js +213 -0
- package/dist/intelligence/rules.d.ts +39 -0
- package/dist/intelligence/rules.js +308 -0
- package/dist/labels/index.d.ts +93 -0
- package/dist/labels/index.js +248 -0
- package/dist/mcp/browser-tools.d.ts +10 -0
- package/dist/mcp/browser-tools.js +16 -0
- package/dist/mcp/client.d.ts +54 -0
- package/dist/mcp/client.js +153 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.js +13 -0
- package/dist/mcp/server.d.ts +40 -0
- package/dist/mcp/server.js +826 -0
- package/dist/mcp/tool-adapter.d.ts +49 -0
- package/dist/mcp/tool-adapter.js +193 -0
- package/dist/memory/experience-store.d.ts +121 -0
- package/dist/memory/experience-store.js +439 -0
- package/dist/memory/index.d.ts +8 -0
- package/dist/memory/index.js +25 -0
- package/dist/memory/memory-service.d.ts +312 -0
- package/dist/memory/memory-service.js +1172 -0
- package/dist/memory/memory-watcher.d.ts +116 -0
- package/dist/memory/memory-watcher.js +239 -0
- package/dist/middleware/logging.d.ts +34 -0
- package/dist/middleware/logging.js +184 -0
- package/dist/middleware/rate-limit.d.ts +29 -0
- package/dist/middleware/rate-limit.js +91 -0
- package/dist/notifications/in-app.d.ts +28 -0
- package/dist/notifications/in-app.js +53 -0
- package/dist/notifications/index.d.ts +3 -0
- package/dist/notifications/index.js +3 -0
- package/dist/notifications/push.d.ts +74 -0
- package/dist/notifications/push.js +175 -0
- package/dist/notifications/slack.d.ts +32 -0
- package/dist/notifications/slack.js +157 -0
- package/dist/plugins/clawhub.d.ts +70 -0
- package/dist/plugins/clawhub.js +260 -0
- package/dist/plugins/loader.d.ts +23 -0
- package/dist/plugins/loader.js +140 -0
- package/dist/plugins/marketplace.d.ts +77 -0
- package/dist/plugins/marketplace.js +275 -0
- package/dist/plugins/registry.d.ts +122 -0
- package/dist/plugins/registry.js +352 -0
- package/dist/plugins/sandbox.d.ts +77 -0
- package/dist/plugins/sandbox.js +287 -0
- package/dist/plugins/scaffolder.d.ts +28 -0
- package/dist/plugins/scaffolder.js +409 -0
- package/dist/plugins/sdk.d.ts +35 -0
- package/dist/plugins/sdk.js +8 -0
- package/dist/plugins/search/brave.d.ts +9 -0
- package/dist/plugins/search/brave.js +157 -0
- package/dist/plugins/search/duckduckgo.d.ts +9 -0
- package/dist/plugins/search/duckduckgo.js +171 -0
- package/dist/plugins/search/index.d.ts +13 -0
- package/dist/plugins/search/index.js +23 -0
- package/dist/plugins/search/searxng.d.ts +9 -0
- package/dist/plugins/search/searxng.js +170 -0
- package/dist/plugins/search/serper.d.ts +9 -0
- package/dist/plugins/search/serper.js +135 -0
- package/dist/plugins/search/tavily.d.ts +9 -0
- package/dist/plugins/search/tavily.js +146 -0
- package/dist/plugins/types.d.ts +174 -0
- package/dist/plugins/types.js +8 -0
- package/dist/projects/index.d.ts +133 -0
- package/dist/projects/index.js +897 -0
- package/dist/projects/types.d.ts +444 -0
- package/dist/projects/types.js +207 -0
- package/dist/providers/adapters/anthropic.d.ts +26 -0
- package/dist/providers/adapters/anthropic.js +306 -0
- package/dist/providers/adapters/base.d.ts +53 -0
- package/dist/providers/adapters/base.js +99 -0
- package/dist/providers/adapters/ollama.d.ts +30 -0
- package/dist/providers/adapters/ollama.js +292 -0
- package/dist/providers/ai-sdk.d.ts +178 -0
- package/dist/providers/ai-sdk.js +1552 -0
- package/dist/providers/core/index.d.ts +8 -0
- package/dist/providers/core/index.js +10 -0
- package/dist/providers/core/models.d.ts +31 -0
- package/dist/providers/core/models.js +949 -0
- package/dist/providers/core/types.d.ts +117 -0
- package/dist/providers/core/types.js +83 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +7 -0
- package/dist/providers/registry.d.ts +93 -0
- package/dist/providers/registry.js +228 -0
- package/dist/providers/schema-utils.d.ts +23 -0
- package/dist/providers/schema-utils.js +545 -0
- package/dist/providers/types.d.ts +609 -0
- package/dist/providers/types.js +279 -0
- package/dist/queue/failure-handler.d.ts +93 -0
- package/dist/queue/failure-handler.js +379 -0
- package/dist/queue/index.d.ts +23 -0
- package/dist/queue/index.js +86 -0
- package/dist/queue/memory-queue.d.ts +30 -0
- package/dist/queue/memory-queue.js +429 -0
- package/dist/queue/notifications.d.ts +6 -0
- package/dist/queue/notifications.js +128 -0
- package/dist/queue/task-queue.d.ts +55 -0
- package/dist/queue/task-queue.js +518 -0
- package/dist/queue/webhook-queue.d.ts +47 -0
- package/dist/queue/webhook-queue.js +158 -0
- package/dist/routes/agents.d.ts +4 -0
- package/dist/routes/agents.js +45 -0
- package/dist/routes/auth.d.ts +19 -0
- package/dist/routes/auth.js +492 -0
- package/dist/routes/backup.d.ts +6 -0
- package/dist/routes/backup.js +71 -0
- package/dist/routes/chat.d.ts +10 -0
- package/dist/routes/chat.js +1678 -0
- package/dist/routes/clawhub.d.ts +8 -0
- package/dist/routes/clawhub.js +89 -0
- package/dist/routes/costs.d.ts +4 -0
- package/dist/routes/costs.js +78 -0
- package/dist/routes/cron.d.ts +11 -0
- package/dist/routes/cron.js +708 -0
- package/dist/routes/devices.d.ts +9 -0
- package/dist/routes/devices.js +490 -0
- package/dist/routes/discord.d.ts +15 -0
- package/dist/routes/discord.js +524 -0
- package/dist/routes/dlq.d.ts +4 -0
- package/dist/routes/dlq.js +64 -0
- package/dist/routes/gateway.d.ts +4 -0
- package/dist/routes/gateway.js +253 -0
- package/dist/routes/health.d.ts +29 -0
- package/dist/routes/health.js +296 -0
- package/dist/routes/hooks.d.ts +4 -0
- package/dist/routes/hooks.js +170 -0
- package/dist/routes/import.d.ts +9 -0
- package/dist/routes/import.js +540 -0
- package/dist/routes/index.d.ts +38 -0
- package/dist/routes/index.js +39 -0
- package/dist/routes/integrations.d.ts +10 -0
- package/dist/routes/integrations.js +200 -0
- package/dist/routes/labels.d.ts +8 -0
- package/dist/routes/labels.js +240 -0
- package/dist/routes/mcp.d.ts +14 -0
- package/dist/routes/mcp.js +125 -0
- package/dist/routes/memory.d.ts +10 -0
- package/dist/routes/memory.js +622 -0
- package/dist/routes/notifications.d.ts +9 -0
- package/dist/routes/notifications.js +154 -0
- package/dist/routes/oobe.d.ts +10 -0
- package/dist/routes/oobe.js +405 -0
- package/dist/routes/openapi.d.ts +9 -0
- package/dist/routes/openapi.js +537 -0
- package/dist/routes/plugins.d.ts +8 -0
- package/dist/routes/plugins.js +108 -0
- package/dist/routes/projects.d.ts +8 -0
- package/dist/routes/projects.js +592 -0
- package/dist/routes/push.d.ts +8 -0
- package/dist/routes/push.js +75 -0
- package/dist/routes/search.d.ts +4 -0
- package/dist/routes/search.js +189 -0
- package/dist/routes/security.d.ts +10 -0
- package/dist/routes/security.js +189 -0
- package/dist/routes/settings.d.ts +4 -0
- package/dist/routes/settings.js +119 -0
- package/dist/routes/setup.d.ts +11 -0
- package/dist/routes/setup.js +525 -0
- package/dist/routes/skills.d.ts +13 -0
- package/dist/routes/skills.js +152 -0
- package/dist/routes/slack.d.ts +12 -0
- package/dist/routes/slack.js +999 -0
- package/dist/routes/states.d.ts +8 -0
- package/dist/routes/states.js +123 -0
- package/dist/routes/stats.d.ts +6 -0
- package/dist/routes/stats.js +369 -0
- package/dist/routes/summaries.d.ts +4 -0
- package/dist/routes/summaries.js +344 -0
- package/dist/routes/sync.d.ts +13 -0
- package/dist/routes/sync.js +268 -0
- package/dist/routes/tasks.d.ts +4 -0
- package/dist/routes/tasks.js +473 -0
- package/dist/routes/telegram.d.ts +14 -0
- package/dist/routes/telegram.js +420 -0
- package/dist/routes/tickets.d.ts +4 -0
- package/dist/routes/tickets.js +1090 -0
- package/dist/routes/tokens.d.ts +4 -0
- package/dist/routes/tokens.js +83 -0
- package/dist/routes/tools.d.ts +14 -0
- package/dist/routes/tools.js +790 -0
- package/dist/routes/tunnels.d.ts +8 -0
- package/dist/routes/tunnels.js +145 -0
- package/dist/routes/users.d.ts +15 -0
- package/dist/routes/users.js +998 -0
- package/dist/routes/voice.d.ts +8 -0
- package/dist/routes/voice.js +127 -0
- package/dist/routes/webchat.d.ts +11 -0
- package/dist/routes/webchat.js +173 -0
- package/dist/routes/webhook-dedup.d.ts +11 -0
- package/dist/routes/webhook-dedup.js +49 -0
- package/dist/routes/webhooks.d.ts +4 -0
- package/dist/routes/webhooks.js +71 -0
- package/dist/routes/whatsapp.d.ts +14 -0
- package/dist/routes/whatsapp.js +391 -0
- package/dist/security/audit-scanner.d.ts +32 -0
- package/dist/security/audit-scanner.js +217 -0
- package/dist/security/fs-guard.d.ts +41 -0
- package/dist/security/fs-guard.js +206 -0
- package/dist/security/prompt-guard.d.ts +47 -0
- package/dist/security/prompt-guard.js +198 -0
- package/dist/security/ssrf-guard.d.ts +38 -0
- package/dist/security/ssrf-guard.js +266 -0
- package/dist/security/types.d.ts +92 -0
- package/dist/security/types.js +8 -0
- package/dist/server/route-loader.d.ts +15 -0
- package/dist/server/route-loader.js +135 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.js +835 -0
- package/dist/settings/index.d.ts +841 -0
- package/dist/settings/index.js +451 -0
- package/dist/skills/compiler.d.ts +83 -0
- package/dist/skills/compiler.js +358 -0
- package/dist/skills/frontmatter.d.ts +33 -0
- package/dist/skills/frontmatter.js +175 -0
- package/dist/skills/index.d.ts +19 -0
- package/dist/skills/index.js +24 -0
- package/dist/skills/installer.d.ts +22 -0
- package/dist/skills/installer.js +220 -0
- package/dist/skills/loader.d.ts +72 -0
- package/dist/skills/loader.js +484 -0
- package/dist/skills/prompt-builder.d.ts +48 -0
- package/dist/skills/prompt-builder.js +135 -0
- package/dist/skills/registry.d.ts +115 -0
- package/dist/skills/registry.js +225 -0
- package/dist/skills/types.d.ts +202 -0
- package/dist/skills/types.js +24 -0
- package/dist/states/index.d.ts +64 -0
- package/dist/states/index.js +142 -0
- package/dist/storage/adapter.d.ts +146 -0
- package/dist/storage/adapter.js +2 -0
- package/dist/storage/index.d.ts +48 -0
- package/dist/storage/index.js +135 -0
- package/dist/storage/libsql.d.ts +99 -0
- package/dist/storage/libsql.js +1873 -0
- package/dist/storage/migrations.d.ts +65 -0
- package/dist/storage/migrations.js +289 -0
- package/dist/storage/schema.d.ts +10185 -0
- package/dist/storage/schema.js +1113 -0
- package/dist/summaries/extractor.d.ts +56 -0
- package/dist/summaries/extractor.js +377 -0
- package/dist/summaries/index.d.ts +13 -0
- package/dist/summaries/index.js +14 -0
- package/dist/summaries/storage.d.ts +51 -0
- package/dist/summaries/storage.js +101 -0
- package/dist/summaries/templates.d.ts +68 -0
- package/dist/summaries/templates.js +245 -0
- package/dist/sync/adapters/base.d.ts +42 -0
- package/dist/sync/adapters/base.js +142 -0
- package/dist/sync/adapters/github.d.ts +45 -0
- package/dist/sync/adapters/github.js +445 -0
- package/dist/sync/adapters/linear.d.ts +40 -0
- package/dist/sync/adapters/linear.js +434 -0
- package/dist/sync/config.d.ts +388 -0
- package/dist/sync/config.js +281 -0
- package/dist/sync/engine.d.ts +112 -0
- package/dist/sync/engine.js +623 -0
- package/dist/sync/index.d.ts +31 -0
- package/dist/sync/index.js +34 -0
- package/dist/sync/integration.d.ts +53 -0
- package/dist/sync/integration.js +231 -0
- package/dist/sync/types.d.ts +249 -0
- package/dist/sync/types.js +30 -0
- package/dist/tickets/index.d.ts +139 -0
- package/dist/tickets/index.js +1406 -0
- package/dist/tickets/types.d.ts +817 -0
- package/dist/tickets/types.js +310 -0
- package/dist/tools/adapters.d.ts +56 -0
- package/dist/tools/adapters.js +183 -0
- package/dist/tools/index.d.ts +66 -0
- package/dist/tools/index.js +105 -0
- package/dist/tools/types.d.ts +117 -0
- package/dist/tools/types.js +20 -0
- package/dist/types/agent.d.ts +101 -0
- package/dist/types/agent.js +2 -0
- package/dist/types/errors.d.ts +150 -0
- package/dist/types/errors.js +338 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +3 -0
- package/dist/types/summary.d.ts +638 -0
- package/dist/types/summary.js +137 -0
- package/dist/types/task.d.ts +123 -0
- package/dist/types/task.js +46 -0
- package/dist/utils/ai-cache.d.ts +72 -0
- package/dist/utils/ai-cache.js +204 -0
- package/dist/utils/ai-inference.d.ts +57 -0
- package/dist/utils/ai-inference.js +190 -0
- package/dist/utils/ai-responder.d.ts +44 -0
- package/dist/utils/ai-responder.js +272 -0
- package/dist/utils/circuit-breaker.d.ts +139 -0
- package/dist/utils/circuit-breaker.js +281 -0
- package/dist/utils/config-loader.d.ts +12 -0
- package/dist/utils/config-loader.js +44 -0
- package/dist/utils/crypto.d.ts +10 -0
- package/dist/utils/crypto.js +59 -0
- package/dist/utils/env-validator.d.ts +44 -0
- package/dist/utils/env-validator.js +236 -0
- package/dist/utils/file-lock.d.ts +85 -0
- package/dist/utils/file-lock.js +204 -0
- package/dist/utils/logger.d.ts +153 -0
- package/dist/utils/logger.js +282 -0
- package/dist/utils/metrics.d.ts +183 -0
- package/dist/utils/metrics.js +345 -0
- package/dist/utils/security.d.ts +90 -0
- package/dist/utils/security.js +347 -0
- package/dist/voice/index.d.ts +79 -0
- package/dist/voice/index.js +144 -0
- package/dist/voice/stt/whisper.d.ts +13 -0
- package/dist/voice/stt/whisper.js +116 -0
- package/dist/voice/tts/elevenlabs.d.ts +18 -0
- package/dist/voice/tts/elevenlabs.js +178 -0
- package/dist/voice/tts/openai-tts.d.ts +19 -0
- package/dist/voice/tts/openai-tts.js +127 -0
- package/dist/voice/tts/system.d.ts +26 -0
- package/dist/voice/tts/system.js +146 -0
- package/dist/voice/wake-word.d.ts +44 -0
- package/dist/voice/wake-word.js +145 -0
- package/docker-compose.yml +222 -0
- package/package.json +154 -0
- package/profclaw.mjs +24 -0
- package/skills/1password/SKILL.md +155 -0
- package/skills/api-tester/SKILL.md +177 -0
- package/skills/apple-notes/SKILL.md +167 -0
- package/skills/apple-reminders/SKILL.md +178 -0
- package/skills/bear-notes/SKILL.md +166 -0
- package/skills/blogwatcher/SKILL.md +177 -0
- package/skills/camsnap/SKILL.md +130 -0
- package/skills/code-generation/SKILL.md +139 -0
- package/skills/code-review/SKILL.md +116 -0
- package/skills/coding-agent/SKILL.md +184 -0
- package/skills/cron-manager/SKILL.md +141 -0
- package/skills/debug-helper/SKILL.md +134 -0
- package/skills/docker-ops/SKILL.md +246 -0
- package/skills/file-manager/SKILL.md +160 -0
- package/skills/git-workflow/SKILL.md +171 -0
- package/skills/github-issues/SKILL.md +244 -0
- package/skills/gog/SKILL.md +191 -0
- package/skills/goplaces/SKILL.md +156 -0
- package/skills/healthcheck/SKILL.md +270 -0
- package/skills/himalaya/SKILL.md +165 -0
- package/skills/mcp-discovery/SKILL.md +109 -0
- package/skills/memory-manager/SKILL.md +151 -0
- package/skills/model-usage/SKILL.md +177 -0
- package/skills/nano-banana-pro/SKILL.md +214 -0
- package/skills/nano-pdf/SKILL.md +165 -0
- package/skills/notion/SKILL.md +147 -0
- package/skills/obsidian/SKILL.md +163 -0
- package/skills/openai-image-gen/SKILL.md +194 -0
- package/skills/openai-whisper/SKILL.md +98 -0
- package/skills/openai-whisper-api/SKILL.md +130 -0
- package/skills/openhue/SKILL.md +203 -0
- package/skills/oracle/SKILL.md +236 -0
- package/skills/phone-control/SKILL.md +201 -0
- package/skills/profclaw-assistant/SKILL.md +81 -0
- package/skills/profclaw-projects/SKILL.md +68 -0
- package/skills/profclaw-tickets/SKILL.md +91 -0
- package/skills/session-logs/SKILL.md +216 -0
- package/skills/sherpa-onnx-tts/SKILL.md +134 -0
- package/skills/skill-creator/SKILL.md +183 -0
- package/skills/songsee/SKILL.md +170 -0
- package/skills/spotify-player/SKILL.md +254 -0
- package/skills/summarize/SKILL.md +155 -0
- package/skills/system-admin/SKILL.md +179 -0
- package/skills/things-mac/SKILL.md +179 -0
- package/skills/tmux/SKILL.md +170 -0
- package/skills/trello/SKILL.md +154 -0
- package/skills/video-frames/SKILL.md +127 -0
- package/skills/weather/SKILL.md +186 -0
- package/skills/web-research/SKILL.md +128 -0
- package/skills/xurl/SKILL.md +198 -0
- package/ui/README.md +73 -0
- package/ui/dist/assets/ActivityView-CkPgKhwm.js +1 -0
- package/ui/dist/assets/AgentList-C3SVdeEz.js +1 -0
- package/ui/dist/assets/AnalyticsDashboard-DVU--vlP.js +1 -0
- package/ui/dist/assets/AreaChart-B5qMEGWj.js +1 -0
- package/ui/dist/assets/CartesianChart-B50bcUJi.js +36 -0
- package/ui/dist/assets/ChatView-BZFJs7w_.js +10 -0
- package/ui/dist/assets/CostsDashboard-ChfH8BlG.js +1 -0
- package/ui/dist/assets/EstimateSelect-CLpB4NQO.js +1 -0
- package/ui/dist/assets/FloatingChatbot-CBzBY9a0.js +2 -0
- package/ui/dist/assets/InviteCodeManagement-DsbdPa6W.js +2 -0
- package/ui/dist/assets/ProjectDetail-BEM3tFXg.js +2 -0
- package/ui/dist/assets/ProjectDetail-D1-0B2xV.css +1 -0
- package/ui/dist/assets/ProjectIcon-CN1FmFAk.js +1 -0
- package/ui/dist/assets/ProjectList-DSDaNhxQ.js +4 -0
- package/ui/dist/assets/Settings-dPVcqC_d.js +6 -0
- package/ui/dist/assets/StatusIndicator-DA3NAo_b.js +1 -0
- package/ui/dist/assets/SummaryDetail-Bjnf9lT8.js +27 -0
- package/ui/dist/assets/SummaryList-ENwKDBKW.js +1 -0
- package/ui/dist/assets/TaskDetail-DnwG6MzB.js +1 -0
- package/ui/dist/assets/TaskList-D9Ug_HiV.js +1 -0
- package/ui/dist/assets/TicketBoard-CviH1571.js +1 -0
- package/ui/dist/assets/TicketDetail-8Jk8O-33.js +1 -0
- package/ui/dist/assets/TicketList-B-iV4rRA.js +1 -0
- package/ui/dist/assets/UserManagement-CPZ8s7s2.js +2 -0
- package/ui/dist/assets/ViewSwitcher-BUyOOWDI.js +1 -0
- package/ui/dist/assets/alert-dialog-BOmnTkN-.js +7 -0
- package/ui/dist/assets/archive-D5my9zOG.js +1 -0
- package/ui/dist/assets/badge-B4ov81_m.js +1 -0
- package/ui/dist/assets/brain-C53ElFLD.js +1 -0
- package/ui/dist/assets/bug-D0TJoCYn.js +1 -0
- package/ui/dist/assets/calendar-BkWIhKa1.js +1 -0
- package/ui/dist/assets/chevron-up-BRTtndUZ.js +1 -0
- package/ui/dist/assets/circle-x-BN89YhbS.js +1 -0
- package/ui/dist/assets/constants-fc7TFI7u.js +1 -0
- package/ui/dist/assets/cpu-B41x1-vV.js +1 -0
- package/ui/dist/assets/database-D9Cnfmzj.js +1 -0
- package/ui/dist/assets/defineProperty-CoXUr7_6.js +2 -0
- package/ui/dist/assets/dialog-DrWB4EYD.js +1 -0
- package/ui/dist/assets/element-adapter-DL0DQilL.js +4 -0
- package/ui/dist/assets/ellipsis-NuUWekvu.js +1 -0
- package/ui/dist/assets/ellipsis-vertical-BueMfuCw.js +1 -0
- package/ui/dist/assets/file-code-HR9829Jc.js +1 -0
- package/ui/dist/assets/folder-open-C_7oYEqe.js +1 -0
- package/ui/dist/assets/funnel-B5gmNXGf.js +1 -0
- package/ui/dist/assets/git-branch-BRMiJmV3.js +1 -0
- package/ui/dist/assets/git-commit-horizontal-CXOUQeJI.js +1 -0
- package/ui/dist/assets/globe-CCspjvus.js +1 -0
- package/ui/dist/assets/hash-g3102kPC.js +1 -0
- package/ui/dist/assets/history-CNqcBBrV.js +1 -0
- package/ui/dist/assets/index-27mTPKuh.js +1 -0
- package/ui/dist/assets/index-BMx3fH-e.js +1 -0
- package/ui/dist/assets/index-C9jNQXzL.js +1 -0
- package/ui/dist/assets/index-CEZ6R2Uw.js +7 -0
- package/ui/dist/assets/index-DURTouJI.js +1 -0
- package/ui/dist/assets/index-WclMPci1.css +1 -0
- package/ui/dist/assets/index-kb4AJXUB.js +67 -0
- package/ui/dist/assets/layers-CLXiHN6o.js +1 -0
- package/ui/dist/assets/layout-dashboard-B07MFhBs.js +1 -0
- package/ui/dist/assets/lightbulb-B2dgG5ks.js +1 -0
- package/ui/dist/assets/link-2-BxNmr9hL.js +1 -0
- package/ui/dist/assets/markdown-renderer-CjU6hBcW.js +36 -0
- package/ui/dist/assets/message-square-Bf2-CVbt.js +1 -0
- package/ui/dist/assets/pencil-D096Ey62.js +1 -0
- package/ui/dist/assets/play-DfdcSI3x.js +1 -0
- package/ui/dist/assets/popover-BV0QJDQq.js +1 -0
- package/ui/dist/assets/progress-DjPEDJfI.js +1 -0
- package/ui/dist/assets/rocket-CPsTc-5G.js +1 -0
- package/ui/dist/assets/select-LsO16slr.js +1 -0
- package/ui/dist/assets/send-BDYBZDUZ.js +1 -0
- package/ui/dist/assets/server-B3k6noce.js +1 -0
- package/ui/dist/assets/settings-2-Cu4xTjhG.js +1 -0
- package/ui/dist/assets/sheet-BScLnPKX.js +1 -0
- package/ui/dist/assets/shield-check-CQqkwufI.js +1 -0
- package/ui/dist/assets/shield-off-ZFruH9KO.js +1 -0
- package/ui/dist/assets/skeleton-CtkIA_MU.js +1 -0
- package/ui/dist/assets/smartphone-DnoksVkc.js +1 -0
- package/ui/dist/assets/square-uD9ZHMfW.js +1 -0
- package/ui/dist/assets/switch-MQPnwGJK.js +1 -0
- package/ui/dist/assets/table-B8cqlywA.js +1 -0
- package/ui/dist/assets/tag-wEJQRWlV.js +1 -0
- package/ui/dist/assets/textarea-D5LJCOGl.js +1 -0
- package/ui/dist/assets/timer-mbGHegmr.js +1 -0
- package/ui/dist/assets/tooltip-Df1CunSp.js +1 -0
- package/ui/dist/assets/trash-2-B4oAXsX-.js +1 -0
- package/ui/dist/assets/trending-up-BGWxvlmZ.js +1 -0
- package/ui/dist/assets/wand-sparkles-CZy4xvL3.js +1 -0
- package/ui/dist/assets/wrench-ByZkjO6m.js +1 -0
- package/ui/dist/audio-worklets/vad-processor.js +132 -0
- package/ui/dist/brand/profclaw-appicon-192.png +0 -0
- package/ui/dist/brand/profclaw-appicon-512.png +0 -0
- package/ui/dist/brand/profclaw-appicon-shadow.svg +51 -0
- package/ui/dist/brand/profclaw-appicon.svg +50 -0
- package/ui/dist/brand/profclaw-favicon-coral-bg-128.png +0 -0
- package/ui/dist/brand/profclaw-favicon-coral-bg-64.png +0 -0
- package/ui/dist/brand/profclaw-favicon-coral-bg.svg +52 -0
- package/ui/dist/brand/profclaw-favicon-coral-body-128.png +0 -0
- package/ui/dist/brand/profclaw-favicon-coral-body.svg +41 -0
- package/ui/dist/brand/profclaw-favicon-shadow-128.png +0 -0
- package/ui/dist/brand/profclaw-favicon-shadow-64.png +0 -0
- package/ui/dist/brand/profclaw-favicon-shadow.svg +51 -0
- package/ui/dist/brand/profclaw-mark-coral-256.png +0 -0
- package/ui/dist/brand/profclaw-mark-coral-64.png +0 -0
- package/ui/dist/brand/profclaw-mark-coral.svg +31 -0
- package/ui/dist/brand/profclaw-mono-white.svg +18 -0
- package/ui/dist/brand/profclaw-text-dark.svg +18 -0
- package/ui/dist/brand/profclaw-text-light.svg +18 -0
- package/ui/dist/brand/profclaw-wordmark-dark.svg +48 -0
- package/ui/dist/brand/profclaw-wordmark-light.svg +48 -0
- package/ui/dist/brand/safari-pinned-tab.svg +15 -0
- package/ui/dist/favicon/android-chrome-192x192.png +0 -0
- package/ui/dist/favicon/android-chrome-384x384.png +0 -0
- package/ui/dist/favicon/android-chrome-512x512.png +0 -0
- package/ui/dist/favicon/apple-touch-icon.png +0 -0
- package/ui/dist/favicon/browserconfig.xml +9 -0
- package/ui/dist/favicon/favicon-16x16.png +0 -0
- package/ui/dist/favicon/favicon-32x32.png +0 -0
- package/ui/dist/favicon/favicon.ico +0 -0
- package/ui/dist/favicon/mstile-150x150.png +0 -0
- package/ui/dist/favicon/safari-pinned-tab.svg +46 -0
- package/ui/dist/favicon/site.webmanifest +22 -0
- package/ui/dist/index.html +32 -0
- package/ui/dist/manifest.json +49 -0
- package/ui/dist/sw.js +124 -0
- package/ui/dist/vite.svg +1 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-Correction & Retry Loop (Phase 19 Category 3)
|
|
3
|
+
*
|
|
4
|
+
* Classifies tool failures and provides retry strategies, parameter fix
|
|
5
|
+
* suggestions, alternative tool recommendations, and error context for
|
|
6
|
+
* the AI model. Makes every model more reliable by handling failures at
|
|
7
|
+
* the system level instead of silently passing errors back.
|
|
8
|
+
*
|
|
9
|
+
* Items implemented:
|
|
10
|
+
* 3.1 Tool failure classifier
|
|
11
|
+
* 3.2 Auto-retry with exponential backoff + jitter
|
|
12
|
+
* 3.3 Parameter fix suggestions
|
|
13
|
+
* 3.4 Alternative tool suggestions
|
|
14
|
+
* 3.5 Error context injection
|
|
15
|
+
* 3.6 Correction budget tracker
|
|
16
|
+
*/
|
|
17
|
+
import { logger } from '../../utils/logger.js';
|
|
18
|
+
/** HTTP status codes and error patterns that indicate a transient error */
|
|
19
|
+
const RETRYABLE_PATTERNS = [
|
|
20
|
+
/timeout/i,
|
|
21
|
+
/ETIMEDOUT/i,
|
|
22
|
+
/ECONNRESET/i,
|
|
23
|
+
/ECONNREFUSED/i,
|
|
24
|
+
/rate.?limit/i,
|
|
25
|
+
/429/,
|
|
26
|
+
/502/,
|
|
27
|
+
/503/,
|
|
28
|
+
/504/,
|
|
29
|
+
/too many requests/i,
|
|
30
|
+
/service unavailable/i,
|
|
31
|
+
/temporarily unavailable/i,
|
|
32
|
+
/network error/i,
|
|
33
|
+
/socket hang up/i,
|
|
34
|
+
/connection reset/i,
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* HTTP status codes and error patterns that indicate wrong parameters or
|
|
38
|
+
* a missing resource the caller can fix without server-side changes.
|
|
39
|
+
*/
|
|
40
|
+
const FIXABLE_PATTERNS = [
|
|
41
|
+
/validation.*fail/i,
|
|
42
|
+
/invalid.*param/i,
|
|
43
|
+
/missing.*required/i,
|
|
44
|
+
/parse.*error/i,
|
|
45
|
+
/syntax.*error/i,
|
|
46
|
+
/ZodError/i,
|
|
47
|
+
/wrong.*type/i,
|
|
48
|
+
/expected.*string/i,
|
|
49
|
+
/expected.*number/i,
|
|
50
|
+
/400/,
|
|
51
|
+
/422/,
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Classify a ToolError into retryable / fixable / terminal.
|
|
55
|
+
*
|
|
56
|
+
* Priority order:
|
|
57
|
+
* 1. Explicit `retryable` flag on ToolError
|
|
58
|
+
* 2. Auth / permission codes -> terminal
|
|
59
|
+
* 3. Retryable patterns -> retryable
|
|
60
|
+
* 4. Fixable patterns -> fixable
|
|
61
|
+
* 5. Default -> terminal
|
|
62
|
+
*/
|
|
63
|
+
export function classifyFailure(error, toolName) {
|
|
64
|
+
const msg = `${error.code} ${error.message}`.trim();
|
|
65
|
+
// Explicit retryable hint from the error itself
|
|
66
|
+
if (error.retryable === true) {
|
|
67
|
+
return {
|
|
68
|
+
type: 'retryable',
|
|
69
|
+
reason: 'Error is marked as retryable by the tool',
|
|
70
|
+
suggestedAction: `Retry "${toolName}" after a short delay`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Auth and permission failures are always terminal
|
|
74
|
+
if (/401|403|EPERM|EACCES|permission denied|unauthorized|forbidden/i.test(msg)) {
|
|
75
|
+
return {
|
|
76
|
+
type: 'terminal',
|
|
77
|
+
reason: 'Authentication or permission failure - credentials are invalid or access is denied',
|
|
78
|
+
suggestedAction: 'Check credentials and permissions before attempting again',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// 404 / ENOENT for file-system tools are fixable (wrong path), but for
|
|
82
|
+
// web tools they are terminal (resource genuinely does not exist).
|
|
83
|
+
if (/404|not found|ENOENT|no such file/i.test(msg)) {
|
|
84
|
+
const isWebTool = /web_fetch|web_search|browser_navigate/i.test(toolName);
|
|
85
|
+
if (isWebTool) {
|
|
86
|
+
return {
|
|
87
|
+
type: 'terminal',
|
|
88
|
+
reason: `${toolName} returned 404 - resource does not exist at this URL`,
|
|
89
|
+
suggestedAction: 'Verify the URL or use web_search to locate the correct resource',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
type: 'fixable',
|
|
94
|
+
reason: 'File or directory not found - path is likely incorrect',
|
|
95
|
+
suggestedAction: 'Use directory_tree or search_files to locate the correct path first',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
for (const pattern of RETRYABLE_PATTERNS) {
|
|
99
|
+
if (pattern.test(msg)) {
|
|
100
|
+
return {
|
|
101
|
+
type: 'retryable',
|
|
102
|
+
reason: `Transient error detected: ${error.message}`,
|
|
103
|
+
suggestedAction: `Retry "${toolName}" after exponential backoff`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
for (const pattern of FIXABLE_PATTERNS) {
|
|
108
|
+
if (pattern.test(msg)) {
|
|
109
|
+
return {
|
|
110
|
+
type: 'fixable',
|
|
111
|
+
reason: `Parameter or validation error: ${error.message}`,
|
|
112
|
+
suggestedAction: 'Review and correct the parameters before retrying',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
type: 'terminal',
|
|
118
|
+
reason: `Unrecoverable error in "${toolName}": ${error.message}`,
|
|
119
|
+
suggestedAction: 'Consider an alternative approach or tool',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const DEFAULT_RETRY_CONFIG = {
|
|
123
|
+
maxAttempts: 3,
|
|
124
|
+
baseDelayMs: 1000,
|
|
125
|
+
maxDelayMs: 10000,
|
|
126
|
+
backoffMultiplier: 2,
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Calculate the delay for the nth retry attempt (0-indexed) with full jitter.
|
|
130
|
+
* Full jitter: delay = random(0, min(maxDelayMs, baseDelayMs * multiplier^attempt))
|
|
131
|
+
*/
|
|
132
|
+
function calcRetryDelay(attempt, config) {
|
|
133
|
+
const exponential = config.baseDelayMs * Math.pow(config.backoffMultiplier, attempt);
|
|
134
|
+
const capped = Math.min(exponential, config.maxDelayMs);
|
|
135
|
+
return Math.floor(Math.random() * capped);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Execute `fn` with automatic exponential-backoff retries for retryable failures.
|
|
139
|
+
* Respects the provided AbortSignal.
|
|
140
|
+
*/
|
|
141
|
+
export async function executeWithRetry(fn, config, signal) {
|
|
142
|
+
const cfg = { ...DEFAULT_RETRY_CONFIG, ...config };
|
|
143
|
+
let lastResult;
|
|
144
|
+
for (let attempt = 0; attempt < cfg.maxAttempts; attempt++) {
|
|
145
|
+
if (signal?.aborted) {
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
error: { code: 'ABORTED', message: 'Execution aborted by caller' },
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
lastResult = await fn();
|
|
152
|
+
if (lastResult.success) {
|
|
153
|
+
return lastResult;
|
|
154
|
+
}
|
|
155
|
+
const error = lastResult.error ?? { code: 'UNKNOWN', message: 'Unknown error' };
|
|
156
|
+
const isRetryable = error.retryable === true ||
|
|
157
|
+
RETRYABLE_PATTERNS.some((p) => p.test(`${error.code} ${error.message}`));
|
|
158
|
+
if (!isRetryable || attempt === cfg.maxAttempts - 1) {
|
|
159
|
+
return lastResult;
|
|
160
|
+
}
|
|
161
|
+
const delayMs = calcRetryDelay(attempt, cfg);
|
|
162
|
+
logger.info(`[self-correction] Retrying after ${delayMs}ms (attempt ${attempt + 1}/${cfg.maxAttempts})`, { component: 'self-correction', attempt, delayMs });
|
|
163
|
+
await new Promise((resolve, reject) => {
|
|
164
|
+
const timer = setTimeout(resolve, delayMs);
|
|
165
|
+
signal?.addEventListener('abort', () => {
|
|
166
|
+
clearTimeout(timer);
|
|
167
|
+
reject(new Error('Aborted'));
|
|
168
|
+
}, { once: true });
|
|
169
|
+
}).catch(() => {
|
|
170
|
+
/* aborted - fall through, next loop iteration checks signal */
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return lastResult;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Analyse the failed tool's error and current parameters to produce concrete
|
|
177
|
+
* fix suggestions. Returns an empty array when no specific fix can be inferred.
|
|
178
|
+
*/
|
|
179
|
+
export function suggestParameterFixes(error, toolName, params) {
|
|
180
|
+
const fixes = [];
|
|
181
|
+
const msg = `${error.code} ${error.message}`;
|
|
182
|
+
for (const [key, value] of Object.entries(params)) {
|
|
183
|
+
const strVal = typeof value === 'string' ? value : '';
|
|
184
|
+
// Path doesn't exist: suggest resolving relative to cwd
|
|
185
|
+
if (/ENOENT|no such file|not found/i.test(msg) && /path|file|dir/i.test(key)) {
|
|
186
|
+
if (strVal && !strVal.startsWith('/') && !strVal.startsWith('~')) {
|
|
187
|
+
const suggested = `${process.cwd()}/${strVal}`;
|
|
188
|
+
fixes.push({
|
|
189
|
+
paramName: key,
|
|
190
|
+
currentValue: value,
|
|
191
|
+
suggestedValue: suggested,
|
|
192
|
+
reason: 'Path not found - resolved to absolute path relative to working directory',
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Invalid JSON string: attempt to parse and re-serialise
|
|
197
|
+
if (/parse.*error|invalid.*json|syntax.*error/i.test(msg) && /json|data|body|payload/i.test(key)) {
|
|
198
|
+
if (typeof value === 'string') {
|
|
199
|
+
try {
|
|
200
|
+
const parsed = JSON.parse(value);
|
|
201
|
+
const fixed = JSON.stringify(parsed);
|
|
202
|
+
if (fixed !== value) {
|
|
203
|
+
fixes.push({
|
|
204
|
+
paramName: key,
|
|
205
|
+
currentValue: value,
|
|
206
|
+
suggestedValue: fixed,
|
|
207
|
+
reason: 'JSON re-serialised to fix formatting issues',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
fixes.push({
|
|
213
|
+
paramName: key,
|
|
214
|
+
currentValue: value,
|
|
215
|
+
suggestedValue: value.replace(/'/g, '"').replace(/(\w+):/g, '"$1":'),
|
|
216
|
+
reason: 'Attempted to convert single-quoted or unquoted JSON to valid JSON',
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Wrong type: string expected but number provided (or vice-versa)
|
|
222
|
+
if (/expected.*string|must be.*string/i.test(msg) && typeof value === 'number') {
|
|
223
|
+
fixes.push({
|
|
224
|
+
paramName: key,
|
|
225
|
+
currentValue: value,
|
|
226
|
+
suggestedValue: String(value),
|
|
227
|
+
reason: 'Parameter must be a string - converted number to string',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
if (/expected.*number|must be.*number/i.test(msg) && typeof value === 'string') {
|
|
231
|
+
const coerced = Number(value);
|
|
232
|
+
if (!Number.isNaN(coerced)) {
|
|
233
|
+
fixes.push({
|
|
234
|
+
paramName: key,
|
|
235
|
+
currentValue: value,
|
|
236
|
+
suggestedValue: coerced,
|
|
237
|
+
reason: 'Parameter must be a number - coerced from string',
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// URL without protocol
|
|
242
|
+
if (/url|endpoint|href|link/i.test(key) && typeof value === 'string') {
|
|
243
|
+
if (value && !/^https?:\/\//i.test(value) && !value.startsWith('/')) {
|
|
244
|
+
fixes.push({
|
|
245
|
+
paramName: key,
|
|
246
|
+
currentValue: value,
|
|
247
|
+
suggestedValue: `https://${value}`,
|
|
248
|
+
reason: 'URL missing protocol - prepended https://',
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Missing required field: check error message for field name hints
|
|
254
|
+
const missingMatch = /missing.*required.*['"`]?(\w+)['"`]?|['"`]?(\w+)['"`]? is required/i.exec(msg);
|
|
255
|
+
if (missingMatch) {
|
|
256
|
+
const fieldName = missingMatch[1] ?? missingMatch[2];
|
|
257
|
+
if (fieldName && !(fieldName in params)) {
|
|
258
|
+
fixes.push({
|
|
259
|
+
paramName: fieldName,
|
|
260
|
+
currentValue: undefined,
|
|
261
|
+
suggestedValue: `<provide ${fieldName}>`,
|
|
262
|
+
reason: `Required field "${fieldName}" is missing from the parameters`,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return fixes;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Full alternative tool mapping table.
|
|
270
|
+
* Keys are the failed tool names; values are ranked alternatives with context.
|
|
271
|
+
*/
|
|
272
|
+
const ALTERNATIVE_TOOL_MAP = {
|
|
273
|
+
web_fetch: [
|
|
274
|
+
{
|
|
275
|
+
toolName: 'web_search',
|
|
276
|
+
reason: 'web_fetch failed - web_search can locate the resource by keyword',
|
|
277
|
+
paramMapping: { url: 'query' },
|
|
278
|
+
onlyFor: /404|timeout|ETIMEDOUT|ECONNRESET/i,
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
exec: [
|
|
282
|
+
{
|
|
283
|
+
toolName: 'read_file',
|
|
284
|
+
reason: 'exec failed - read_file can inspect a file without executing it',
|
|
285
|
+
paramMapping: { command: 'path' },
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
toolName: 'write_file',
|
|
289
|
+
reason: 'exec failed - write_file can create or overwrite a file directly',
|
|
290
|
+
paramMapping: { command: 'path' },
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
grep: [
|
|
294
|
+
{
|
|
295
|
+
toolName: 'search_files',
|
|
296
|
+
reason: 'grep returned no results - search_files performs a broader recursive search',
|
|
297
|
+
paramMapping: { pattern: 'query', path: 'directory' },
|
|
298
|
+
},
|
|
299
|
+
],
|
|
300
|
+
search_files: [
|
|
301
|
+
{
|
|
302
|
+
toolName: 'grep',
|
|
303
|
+
reason: 'search_files failed - grep supports full regex patterns',
|
|
304
|
+
paramMapping: { query: 'pattern', directory: 'path' },
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
toolName: 'directory_tree',
|
|
308
|
+
reason: 'search_files failed - directory_tree lists all paths to find the target manually',
|
|
309
|
+
paramMapping: { directory: 'path' },
|
|
310
|
+
},
|
|
311
|
+
],
|
|
312
|
+
read_file: [
|
|
313
|
+
{
|
|
314
|
+
toolName: 'directory_tree',
|
|
315
|
+
reason: 'read_file failed (ENOENT) - directory_tree can reveal the correct path',
|
|
316
|
+
paramMapping: { path: 'path' },
|
|
317
|
+
onlyFor: /ENOENT|not found|no such file/i,
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
toolName: 'search_files',
|
|
321
|
+
reason: 'read_file failed (ENOENT) - search_files can locate the file by name',
|
|
322
|
+
paramMapping: { path: 'query' },
|
|
323
|
+
onlyFor: /ENOENT|not found|no such file/i,
|
|
324
|
+
},
|
|
325
|
+
],
|
|
326
|
+
git: [
|
|
327
|
+
{
|
|
328
|
+
toolName: 'exec',
|
|
329
|
+
reason: 'git tool failed - exec can run git commands directly with git init if needed',
|
|
330
|
+
paramMapping: { subcommand: 'command' },
|
|
331
|
+
onlyFor: /not a git repo|not a git repository/i,
|
|
332
|
+
},
|
|
333
|
+
],
|
|
334
|
+
browser_navigate: [
|
|
335
|
+
{
|
|
336
|
+
toolName: 'web_fetch',
|
|
337
|
+
reason: 'browser_navigate timed out - web_fetch fetches the page content without a browser',
|
|
338
|
+
paramMapping: { url: 'url' },
|
|
339
|
+
onlyFor: /timeout|ETIMEDOUT/i,
|
|
340
|
+
},
|
|
341
|
+
],
|
|
342
|
+
};
|
|
343
|
+
/**
|
|
344
|
+
* Suggest alternative tools when `failedTool` cannot complete its task.
|
|
345
|
+
* Filters by error context when the mapping has an `onlyFor` condition.
|
|
346
|
+
*/
|
|
347
|
+
export function suggestAlternativeTools(failedTool, error) {
|
|
348
|
+
const candidates = ALTERNATIVE_TOOL_MAP[failedTool] ?? [];
|
|
349
|
+
const errorText = `${error.code} ${error.message}`;
|
|
350
|
+
return candidates
|
|
351
|
+
.filter((c) => !c.onlyFor || c.onlyFor.test(errorText))
|
|
352
|
+
.map(({ toolName, reason, paramMapping }) => ({ toolName, reason, paramMapping }));
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Build structured error context that gets appended to the next AI prompt
|
|
356
|
+
* so the model can learn from the failure and adapt its strategy.
|
|
357
|
+
*/
|
|
358
|
+
export function buildErrorContext(failedTool, error, attemptNumber, classification) {
|
|
359
|
+
const alternatives = suggestAlternativeTools(failedTool, error).map((a) => a.toolName);
|
|
360
|
+
return {
|
|
361
|
+
failedTool,
|
|
362
|
+
error: `[${error.code}] ${error.message}`,
|
|
363
|
+
attemptNumber,
|
|
364
|
+
suggestion: classification.suggestedAction,
|
|
365
|
+
alternatives,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Serialise an ErrorContext into a human-readable string suitable for
|
|
370
|
+
* appending to a prompt message.
|
|
371
|
+
*/
|
|
372
|
+
export function formatErrorContextForPrompt(ctx) {
|
|
373
|
+
const lines = [
|
|
374
|
+
`TOOL FAILURE (attempt ${ctx.attemptNumber}): "${ctx.failedTool}" failed with ${ctx.error}.`,
|
|
375
|
+
`Suggestion: ${ctx.suggestion}`,
|
|
376
|
+
];
|
|
377
|
+
if (ctx.alternatives.length > 0) {
|
|
378
|
+
lines.push(`Alternative tools you may use instead: ${ctx.alternatives.join(', ')}.`);
|
|
379
|
+
}
|
|
380
|
+
return lines.join('\n');
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Per-chain correction budget tracker.
|
|
384
|
+
* Prevents infinite retry/correction loops by capping self-corrections at a
|
|
385
|
+
* configurable limit (default: 3) per tool call chain.
|
|
386
|
+
*/
|
|
387
|
+
export class CorrectionTracker {
|
|
388
|
+
budget;
|
|
389
|
+
constructor(maxPerChain = 3) {
|
|
390
|
+
this.budget = {
|
|
391
|
+
maxCorrections: maxPerChain,
|
|
392
|
+
used: 0,
|
|
393
|
+
exhausted: false,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
canCorrect() {
|
|
397
|
+
return !this.budget.exhausted;
|
|
398
|
+
}
|
|
399
|
+
recordCorrection() {
|
|
400
|
+
if (this.budget.exhausted)
|
|
401
|
+
return;
|
|
402
|
+
this.budget.used += 1;
|
|
403
|
+
this.budget.exhausted = this.budget.used >= this.budget.maxCorrections;
|
|
404
|
+
}
|
|
405
|
+
reset() {
|
|
406
|
+
this.budget.used = 0;
|
|
407
|
+
this.budget.exhausted = false;
|
|
408
|
+
}
|
|
409
|
+
getStatus() {
|
|
410
|
+
return { ...this.budget };
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Execute a tool with full self-correction: auto-retry for transient errors,
|
|
415
|
+
* parameter fix suggestions for validation errors, alternative tool suggestions,
|
|
416
|
+
* and error context injection for the AI model.
|
|
417
|
+
*
|
|
418
|
+
* Usage:
|
|
419
|
+
* ```ts
|
|
420
|
+
* const outcome = await executeWithSelfCorrection('read_file', () =>
|
|
421
|
+
* fileOpsTool.execute(ctx, { path: '/tmp/foo.txt' }),
|
|
422
|
+
* );
|
|
423
|
+
* if (!outcome.result.success && outcome.errorContexts.length > 0) {
|
|
424
|
+
* promptBuilder.appendSystem(formatErrorContextForPrompt(outcome.errorContexts.at(-1)!));
|
|
425
|
+
* }
|
|
426
|
+
* ```
|
|
427
|
+
*/
|
|
428
|
+
export async function executeWithSelfCorrection(toolName, executor, options) {
|
|
429
|
+
const tracker = new CorrectionTracker(options?.correctionBudget ?? 3);
|
|
430
|
+
const errorContexts = [];
|
|
431
|
+
const alternativesSuggested = [];
|
|
432
|
+
let retries = 0;
|
|
433
|
+
let corrections = 0;
|
|
434
|
+
const attemptNumber = 1;
|
|
435
|
+
// Wrap executor with retry logic for retryable failures
|
|
436
|
+
const retryWrapper = async () => {
|
|
437
|
+
const innerResult = await executor();
|
|
438
|
+
if (innerResult.success)
|
|
439
|
+
return innerResult;
|
|
440
|
+
const err = innerResult.error ?? { code: 'UNKNOWN', message: 'Unknown error' };
|
|
441
|
+
const cls = classifyFailure(err, toolName);
|
|
442
|
+
if (cls.type === 'retryable' && tracker.canCorrect()) {
|
|
443
|
+
options?.onRetry?.(attemptNumber, err);
|
|
444
|
+
const retryResult = await executeWithRetry(executor, options?.retryConfig, options?.signal);
|
|
445
|
+
// Count each retry loop iteration
|
|
446
|
+
const maxAttempts = options?.retryConfig?.maxAttempts ?? DEFAULT_RETRY_CONFIG.maxAttempts;
|
|
447
|
+
retries += maxAttempts - 1; // at most maxAttempts-1 retries after first call
|
|
448
|
+
return retryResult;
|
|
449
|
+
}
|
|
450
|
+
return innerResult;
|
|
451
|
+
};
|
|
452
|
+
const result = await retryWrapper();
|
|
453
|
+
if (!result.success) {
|
|
454
|
+
const err = result.error ?? { code: 'UNKNOWN', message: 'Unknown error' };
|
|
455
|
+
const cls = classifyFailure(err, toolName);
|
|
456
|
+
// Build error context for the AI model
|
|
457
|
+
const ctx = buildErrorContext(toolName, err, attemptNumber, cls);
|
|
458
|
+
errorContexts.push(ctx);
|
|
459
|
+
corrections += 1;
|
|
460
|
+
tracker.recordCorrection();
|
|
461
|
+
// Collect alternative tool suggestions
|
|
462
|
+
const alts = suggestAlternativeTools(toolName, err);
|
|
463
|
+
if (alts.length > 0) {
|
|
464
|
+
alternativesSuggested.push(...alts);
|
|
465
|
+
options?.onCorrection?.(alts);
|
|
466
|
+
}
|
|
467
|
+
// For fixable errors, also produce parameter fix suggestions
|
|
468
|
+
// (callers can read them via errorContexts[n] and alternativesSuggested)
|
|
469
|
+
logger.error(`[self-correction] Tool "${toolName}" failed (${cls.type}) after ${retries} retries. Budget: ${tracker.getStatus().used}/${tracker.getStatus().maxCorrections}`, { component: 'self-correction', toolName, failureType: cls.type, attemptNumber });
|
|
470
|
+
}
|
|
471
|
+
else {
|
|
472
|
+
logger.info(`[self-correction] Tool "${toolName}" succeeded after ${retries} retries`, { component: 'self-correction', toolName, retries });
|
|
473
|
+
}
|
|
474
|
+
return {
|
|
475
|
+
result,
|
|
476
|
+
corrections,
|
|
477
|
+
retries,
|
|
478
|
+
errorContexts,
|
|
479
|
+
alternativesSuggested,
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
/** Map from tool name to simple list of alternative tool names (for quick lookup) */
|
|
483
|
+
const TOOL_ALTERNATIVES = {
|
|
484
|
+
web_fetch: ['web_search', 'link_understand'],
|
|
485
|
+
web_search: ['web_fetch'],
|
|
486
|
+
exec: ['read_file', 'directory_tree'],
|
|
487
|
+
write_file: ['edit_file'],
|
|
488
|
+
edit_file: ['write_file'],
|
|
489
|
+
search_files: ['grep', 'directory_tree'],
|
|
490
|
+
grep: ['search_files', 'read_file'],
|
|
491
|
+
git_diff: ['git_status', 'git_log'],
|
|
492
|
+
git_stash: ['git_status', 'git_diff'],
|
|
493
|
+
browser_navigate: ['web_fetch', 'link_understand'],
|
|
494
|
+
browser_click: ['browser_type', 'browser_search'],
|
|
495
|
+
openai_image_gen: ['canvas_render'],
|
|
496
|
+
screen_capture: ['browser_screenshot'],
|
|
497
|
+
};
|
|
498
|
+
/** @deprecated Use executeWithSelfCorrection instead */
|
|
499
|
+
export async function executeWithCorrection(chainId, toolName, executeFn) {
|
|
500
|
+
// Map legacy budget using chainId
|
|
501
|
+
let used = 0;
|
|
502
|
+
const maxCorrections = 3;
|
|
503
|
+
let result = await executeFn();
|
|
504
|
+
if (result.success)
|
|
505
|
+
return { result };
|
|
506
|
+
const error = result.error ?? { code: 'UNKNOWN', message: 'Unknown error' };
|
|
507
|
+
const cls = classifyFailure(error, toolName);
|
|
508
|
+
if (cls.type === 'retryable' && used < maxCorrections) {
|
|
509
|
+
used++;
|
|
510
|
+
const delay = Math.min(1000 * Math.pow(2, used - 1), 10000);
|
|
511
|
+
logger.info(`[self-correction] Retrying "${toolName}" after ${delay}ms (legacy path)`, {
|
|
512
|
+
component: 'self-correction',
|
|
513
|
+
toolName,
|
|
514
|
+
chainId,
|
|
515
|
+
});
|
|
516
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
517
|
+
result = await executeFn();
|
|
518
|
+
if (result.success)
|
|
519
|
+
return { result };
|
|
520
|
+
return { result, correctionContext: cls.suggestedAction };
|
|
521
|
+
}
|
|
522
|
+
const alternatives = TOOL_ALTERNATIVES[toolName];
|
|
523
|
+
const context = [
|
|
524
|
+
`Tool "${toolName}" failed: ${error.message}`,
|
|
525
|
+
`Suggestion: ${cls.suggestedAction}`,
|
|
526
|
+
alternatives?.length ? `Alternative tools: ${alternatives.join(', ')}` : '',
|
|
527
|
+
].filter(Boolean).join('\n');
|
|
528
|
+
return { result, correctionContext: context };
|
|
529
|
+
}
|
|
530
|
+
/** @deprecated Use CorrectionTracker class instead */
|
|
531
|
+
const budgets = new Map();
|
|
532
|
+
/** @deprecated */
|
|
533
|
+
export function getCorrectionBudget(chainId) {
|
|
534
|
+
let budget = budgets.get(chainId);
|
|
535
|
+
if (!budget) {
|
|
536
|
+
budget = { maxCorrections: 3, used: 0, exhausted: false };
|
|
537
|
+
budgets.set(chainId, budget);
|
|
538
|
+
}
|
|
539
|
+
return budget;
|
|
540
|
+
}
|
|
541
|
+
/** @deprecated */
|
|
542
|
+
export function consumeCorrection(chainId) {
|
|
543
|
+
const budget = getCorrectionBudget(chainId);
|
|
544
|
+
budget.used += 1;
|
|
545
|
+
budget.exhausted = budget.used >= budget.maxCorrections;
|
|
546
|
+
budgets.set(chainId, budget);
|
|
547
|
+
return budget;
|
|
548
|
+
}
|
|
549
|
+
/** @deprecated */
|
|
550
|
+
export function resetCorrectionBudget(chainId) {
|
|
551
|
+
budgets.delete(chainId);
|
|
552
|
+
}
|
|
553
|
+
/** @deprecated */
|
|
554
|
+
export function clearAllBudgets() {
|
|
555
|
+
budgets.clear();
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=self-correction.js.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Tracks running tool execution sessions (processes).
|
|
5
|
+
* Handles backgrounding, output collection, and cleanup.
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionManager, ToolSession, SessionFilter } from "./types.js";
|
|
8
|
+
import type { ChildProcess } from "child_process";
|
|
9
|
+
export declare class ToolSessionManager implements SessionManager {
|
|
10
|
+
private sessions;
|
|
11
|
+
private cleanupTimer;
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Create a new session
|
|
15
|
+
*/
|
|
16
|
+
create(data: Omit<ToolSession, "id" | "createdAt">): ToolSession;
|
|
17
|
+
/**
|
|
18
|
+
* Get a session by ID
|
|
19
|
+
*/
|
|
20
|
+
get(sessionId: string): ToolSession | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Update a session
|
|
23
|
+
*/
|
|
24
|
+
update(sessionId: string, update: Partial<ToolSession>): void;
|
|
25
|
+
/**
|
|
26
|
+
* List sessions with optional filtering
|
|
27
|
+
*/
|
|
28
|
+
list(filter?: SessionFilter): ToolSession[];
|
|
29
|
+
/**
|
|
30
|
+
* Kill a running session
|
|
31
|
+
*/
|
|
32
|
+
kill(sessionId: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Cleanup old/completed sessions
|
|
35
|
+
*/
|
|
36
|
+
cleanup(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Attach a process to a session
|
|
39
|
+
*/
|
|
40
|
+
attachProcess(sessionId: string, process: ChildProcess): void;
|
|
41
|
+
/**
|
|
42
|
+
* Append output to a session
|
|
43
|
+
*/
|
|
44
|
+
appendOutput(sessionId: string, stream: "stdout" | "stderr", data: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Subscribe to session output
|
|
47
|
+
*/
|
|
48
|
+
subscribe(sessionId: string, listener: SessionOutputListener): () => void;
|
|
49
|
+
/**
|
|
50
|
+
* Get session output (combined stdout + stderr)
|
|
51
|
+
*/
|
|
52
|
+
getOutput(sessionId: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Get tail of session output
|
|
55
|
+
*/
|
|
56
|
+
getTail(sessionId: string, chars?: number): string;
|
|
57
|
+
/**
|
|
58
|
+
* Mark session as backgrounded
|
|
59
|
+
*/
|
|
60
|
+
background(sessionId: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Write to session stdin
|
|
63
|
+
*/
|
|
64
|
+
write(sessionId: string, data: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Destroy the session manager
|
|
67
|
+
*/
|
|
68
|
+
destroy(): void;
|
|
69
|
+
private generateSessionId;
|
|
70
|
+
private handleProcessExit;
|
|
71
|
+
private cleanupOldestSessions;
|
|
72
|
+
}
|
|
73
|
+
export type SessionOutputListener = (event: {
|
|
74
|
+
sessionId: string;
|
|
75
|
+
stream: "stdout" | "stderr";
|
|
76
|
+
data: string;
|
|
77
|
+
}) => void;
|
|
78
|
+
export declare function getSessionManager(): ToolSessionManager;
|
|
79
|
+
//# sourceMappingURL=session-manager.d.ts.map
|