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,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Failure Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles task failures with:
|
|
5
|
+
* - Exponential backoff with jitter (prevents thundering herd)
|
|
6
|
+
* - Database-persisted dead letter queue (survives restarts)
|
|
7
|
+
* - BullMQ integration for actual delayed retries
|
|
8
|
+
*/
|
|
9
|
+
import { sendSlackNotification } from '../notifications/slack.js';
|
|
10
|
+
import { getStorage } from '../storage/index.js';
|
|
11
|
+
import { randomUUID } from 'crypto';
|
|
12
|
+
// Reference to the task queue (set during init)
|
|
13
|
+
let taskQueueRef = null;
|
|
14
|
+
/**
|
|
15
|
+
* Set reference to BullMQ queue for retry operations
|
|
16
|
+
*/
|
|
17
|
+
export function setTaskQueueRef(queue) {
|
|
18
|
+
taskQueueRef = queue;
|
|
19
|
+
}
|
|
20
|
+
function toUnixSeconds(date) {
|
|
21
|
+
return date ? Math.floor(date.getTime() / 1000) : null;
|
|
22
|
+
}
|
|
23
|
+
function undefinedIfNull(value) {
|
|
24
|
+
return value ?? undefined;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize DLQ table (call on startup)
|
|
28
|
+
*/
|
|
29
|
+
export async function initDeadLetterQueue() {
|
|
30
|
+
const storage = getStorage();
|
|
31
|
+
await storage.execute(`
|
|
32
|
+
CREATE TABLE IF NOT EXISTS dead_letter_tasks (
|
|
33
|
+
id TEXT PRIMARY KEY,
|
|
34
|
+
task_id TEXT NOT NULL,
|
|
35
|
+
title TEXT NOT NULL,
|
|
36
|
+
description TEXT,
|
|
37
|
+
prompt TEXT NOT NULL,
|
|
38
|
+
source TEXT NOT NULL,
|
|
39
|
+
source_id TEXT,
|
|
40
|
+
source_url TEXT,
|
|
41
|
+
repository TEXT,
|
|
42
|
+
branch TEXT,
|
|
43
|
+
labels TEXT NOT NULL DEFAULT '[]',
|
|
44
|
+
assigned_agent TEXT,
|
|
45
|
+
priority INTEGER NOT NULL DEFAULT 3,
|
|
46
|
+
attempts INTEGER NOT NULL,
|
|
47
|
+
max_attempts INTEGER NOT NULL,
|
|
48
|
+
last_error_code TEXT NOT NULL,
|
|
49
|
+
last_error_message TEXT NOT NULL,
|
|
50
|
+
last_error_stack TEXT,
|
|
51
|
+
retry_count INTEGER NOT NULL DEFAULT 0,
|
|
52
|
+
last_retry_at INTEGER,
|
|
53
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
54
|
+
resolved_at INTEGER,
|
|
55
|
+
resolved_by TEXT,
|
|
56
|
+
resolution_note TEXT,
|
|
57
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
58
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
59
|
+
task_created_at INTEGER,
|
|
60
|
+
task_started_at INTEGER
|
|
61
|
+
)
|
|
62
|
+
`);
|
|
63
|
+
// Index for querying pending items
|
|
64
|
+
await storage.execute(`
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_dlq_status ON dead_letter_tasks(status)
|
|
66
|
+
`);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle a failed task
|
|
70
|
+
*/
|
|
71
|
+
export async function handleTaskFailure(task, error) {
|
|
72
|
+
console.error(`[FailureHandler] Task ${task.id} failed: ${error.message}`);
|
|
73
|
+
task.attempts = (task.attempts || 0) + 1;
|
|
74
|
+
// Check if we should retry
|
|
75
|
+
if (task.attempts < task.maxAttempts) {
|
|
76
|
+
const delay = calculateBackoffWithJitter(task.attempts);
|
|
77
|
+
console.log(`[FailureHandler] Scheduling retry ${task.attempts}/${task.maxAttempts} in ${Math.round(delay / 1000)}s`);
|
|
78
|
+
// Actually retry with BullMQ delay
|
|
79
|
+
if (taskQueueRef) {
|
|
80
|
+
await taskQueueRef.add(`retry-${task.id}-${task.attempts}`, { ...task, status: 'pending' }, {
|
|
81
|
+
delay,
|
|
82
|
+
priority: task.priority,
|
|
83
|
+
jobId: `${task.id}-retry-${task.attempts}`,
|
|
84
|
+
});
|
|
85
|
+
console.log(`[FailureHandler] Task ${task.id} requeued with ${delay}ms delay`);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.warn('[FailureHandler] Task queue not available, cannot retry');
|
|
89
|
+
}
|
|
90
|
+
await sendSlackNotification({
|
|
91
|
+
type: 'task_retry',
|
|
92
|
+
title: `🔄 Task Retry: ${task.title}`,
|
|
93
|
+
message: `Attempt ${task.attempts}/${task.maxAttempts} failed. Retrying in ${Math.round(delay / 60000)} minutes.\nError: ${error.message}`,
|
|
94
|
+
task,
|
|
95
|
+
severity: 'info',
|
|
96
|
+
}).catch(console.error);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Max retries reached - move to dead letter queue
|
|
100
|
+
console.error(`[FailureHandler] Task ${task.id} exceeded max retries, moving to dead letter queue`);
|
|
101
|
+
task.status = 'failed';
|
|
102
|
+
task.result = {
|
|
103
|
+
success: false,
|
|
104
|
+
output: '',
|
|
105
|
+
error: {
|
|
106
|
+
code: 'MAX_RETRIES_EXCEEDED',
|
|
107
|
+
message: `Task failed after ${task.maxAttempts} attempts. Last error: ${error.message}`,
|
|
108
|
+
stack: error.stack,
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
// Persist to database DLQ
|
|
112
|
+
await addToDeadLetterQueue(task, error);
|
|
113
|
+
// Post failure comment on GitHub
|
|
114
|
+
await postFailureComment(task, error);
|
|
115
|
+
// Send critical alert
|
|
116
|
+
await sendSlackNotification({
|
|
117
|
+
type: 'task_failed',
|
|
118
|
+
title: `❌ Task Failed: ${task.title}`,
|
|
119
|
+
message: `Task failed after ${task.maxAttempts} attempts and moved to dead letter queue.\n\nLast error: ${error.message}\n\nSource: ${task.sourceUrl || 'N/A'}`,
|
|
120
|
+
task,
|
|
121
|
+
severity: 'error',
|
|
122
|
+
}).catch(console.error);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Calculate exponential backoff with jitter
|
|
126
|
+
* Base: 5min, 15min, 45min pattern + ±10% jitter
|
|
127
|
+
*/
|
|
128
|
+
function calculateBackoffWithJitter(attempt) {
|
|
129
|
+
const baseDelay = 5 * 60 * 1000; // 5 minutes
|
|
130
|
+
const exponentialDelay = Math.pow(3, attempt - 1) * baseDelay;
|
|
131
|
+
// Add jitter: ±10% randomization to prevent thundering herd
|
|
132
|
+
const jitter = 0.9 + Math.random() * 0.2; // 0.9 to 1.1
|
|
133
|
+
return Math.floor(exponentialDelay * jitter);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Add task to database DLQ
|
|
137
|
+
*/
|
|
138
|
+
async function addToDeadLetterQueue(task, error) {
|
|
139
|
+
const storage = getStorage();
|
|
140
|
+
const id = randomUUID();
|
|
141
|
+
await storage.execute(`INSERT INTO dead_letter_tasks (
|
|
142
|
+
id, task_id, title, description, prompt, source, source_id, source_url,
|
|
143
|
+
repository, branch, labels, assigned_agent, priority,
|
|
144
|
+
attempts, max_attempts, last_error_code, last_error_message, last_error_stack,
|
|
145
|
+
status, metadata, task_created_at, task_started_at
|
|
146
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
147
|
+
id,
|
|
148
|
+
task.id,
|
|
149
|
+
task.title,
|
|
150
|
+
task.description ?? null,
|
|
151
|
+
task.prompt,
|
|
152
|
+
task.source,
|
|
153
|
+
task.sourceId ?? null,
|
|
154
|
+
task.sourceUrl ?? null,
|
|
155
|
+
task.repository ?? null,
|
|
156
|
+
task.branch ?? null,
|
|
157
|
+
JSON.stringify(task.labels ?? []),
|
|
158
|
+
task.assignedAgent ?? null,
|
|
159
|
+
task.priority ?? 3,
|
|
160
|
+
task.attempts ?? 0,
|
|
161
|
+
task.maxAttempts ?? 3,
|
|
162
|
+
'MAX_RETRIES_EXCEEDED',
|
|
163
|
+
error.message,
|
|
164
|
+
error.stack ?? null,
|
|
165
|
+
'pending',
|
|
166
|
+
JSON.stringify(task.metadata ?? {}),
|
|
167
|
+
toUnixSeconds(task.createdAt),
|
|
168
|
+
toUnixSeconds(task.startedAt),
|
|
169
|
+
]);
|
|
170
|
+
console.log(`[FailureHandler] Task ${task.id} persisted to DLQ with ID ${id}`);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Post failure comment on GitHub issue
|
|
174
|
+
*/
|
|
175
|
+
async function postFailureComment(task, error) {
|
|
176
|
+
const token = process.env.GITHUB_TOKEN;
|
|
177
|
+
if (!token || !task.repository || !task.sourceId) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (task.source !== 'github_issue' && task.source !== 'github_pr') {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const [owner, repo] = task.repository.split('/');
|
|
184
|
+
const issueNumber = parseInt(task.sourceId);
|
|
185
|
+
const body = `## ❌ AI Task Failed
|
|
186
|
+
|
|
187
|
+
**Status:** Failed after ${task.maxAttempts} attempts
|
|
188
|
+
|
|
189
|
+
### Error
|
|
190
|
+
\`\`\`
|
|
191
|
+
${error.message}
|
|
192
|
+
\`\`\`
|
|
193
|
+
|
|
194
|
+
### Details
|
|
195
|
+
- **Task ID:** \`${task.id}\`
|
|
196
|
+
- **Attempts:** ${task.attempts}/${task.maxAttempts}
|
|
197
|
+
- **Duration:** ${task.startedAt ? Math.round((Date.now() - task.startedAt.getTime()) / 1000) : 'N/A'}s
|
|
198
|
+
|
|
199
|
+
### Next Steps
|
|
200
|
+
This task has been moved to the dead letter queue for manual review. Please:
|
|
201
|
+
1. Check if the issue description is clear
|
|
202
|
+
2. Verify the codebase is in a buildable state
|
|
203
|
+
3. Re-trigger the task or assign to a human developer
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
*Posted by [profClaw Task Manager](https://github.com/profclaw/profclaw)*`;
|
|
207
|
+
try {
|
|
208
|
+
await fetch(`https://api.github.com/repos/${owner}/${repo}/issues/${issueNumber}/comments`, {
|
|
209
|
+
method: 'POST',
|
|
210
|
+
headers: {
|
|
211
|
+
Authorization: `Bearer ${token}`,
|
|
212
|
+
'Content-Type': 'application/json',
|
|
213
|
+
'User-Agent': 'profclaw',
|
|
214
|
+
},
|
|
215
|
+
body: JSON.stringify({ body }),
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
console.error('[FailureHandler] Failed to post GitHub comment:', err);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get dead letter queue tasks from database
|
|
224
|
+
*/
|
|
225
|
+
export async function getDeadLetterQueue(options) {
|
|
226
|
+
const storage = getStorage();
|
|
227
|
+
const status = options?.status || 'pending';
|
|
228
|
+
const limit = options?.limit || 50;
|
|
229
|
+
const offset = options?.offset || 0;
|
|
230
|
+
// Get total count
|
|
231
|
+
const countResult = await storage.query('SELECT COUNT(*) as count FROM dead_letter_tasks WHERE status = ?', [status]);
|
|
232
|
+
const total = countResult[0]?.count || 0;
|
|
233
|
+
// Get tasks
|
|
234
|
+
const rows = await storage.query(`SELECT * FROM dead_letter_tasks WHERE status = ? ORDER BY created_at DESC LIMIT ? OFFSET ?`, [status, limit, offset]);
|
|
235
|
+
const tasks = rows.map((row) => ({
|
|
236
|
+
id: row.id,
|
|
237
|
+
taskId: row.task_id,
|
|
238
|
+
title: row.title,
|
|
239
|
+
description: undefinedIfNull(row.description),
|
|
240
|
+
prompt: row.prompt,
|
|
241
|
+
source: row.source,
|
|
242
|
+
sourceId: undefinedIfNull(row.source_id),
|
|
243
|
+
sourceUrl: undefinedIfNull(row.source_url),
|
|
244
|
+
repository: undefinedIfNull(row.repository),
|
|
245
|
+
branch: undefinedIfNull(row.branch),
|
|
246
|
+
labels: JSON.parse(row.labels || '[]'),
|
|
247
|
+
assignedAgent: undefinedIfNull(row.assigned_agent),
|
|
248
|
+
priority: row.priority,
|
|
249
|
+
attempts: row.attempts,
|
|
250
|
+
maxAttempts: row.max_attempts,
|
|
251
|
+
lastErrorCode: row.last_error_code,
|
|
252
|
+
lastErrorMessage: row.last_error_message,
|
|
253
|
+
lastErrorStack: undefinedIfNull(row.last_error_stack),
|
|
254
|
+
retryCount: row.retry_count,
|
|
255
|
+
lastRetryAt: row.last_retry_at ? new Date(row.last_retry_at * 1000) : undefined,
|
|
256
|
+
status: row.status,
|
|
257
|
+
resolvedAt: row.resolved_at ? new Date(row.resolved_at * 1000) : undefined,
|
|
258
|
+
resolvedBy: undefinedIfNull(row.resolved_by),
|
|
259
|
+
resolutionNote: undefinedIfNull(row.resolution_note),
|
|
260
|
+
metadata: JSON.parse(row.metadata || '{}'),
|
|
261
|
+
createdAt: new Date(row.created_at * 1000),
|
|
262
|
+
taskCreatedAt: row.task_created_at ? new Date(row.task_created_at * 1000) : undefined,
|
|
263
|
+
taskStartedAt: row.task_started_at ? new Date(row.task_started_at * 1000) : undefined,
|
|
264
|
+
}));
|
|
265
|
+
return { tasks, total };
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Remove task from dead letter queue (mark as resolved)
|
|
269
|
+
*/
|
|
270
|
+
export async function removeFromDeadLetterQueue(dlqId, resolvedBy, resolutionNote) {
|
|
271
|
+
const storage = getStorage();
|
|
272
|
+
await storage.execute(`UPDATE dead_letter_tasks
|
|
273
|
+
SET status = 'resolved', resolved_at = strftime('%s', 'now'), resolved_by = ?, resolution_note = ?
|
|
274
|
+
WHERE id = ?`, [resolvedBy || 'system', resolutionNote || null, dlqId]);
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Discard a task from dead letter queue (won't be retried)
|
|
279
|
+
*/
|
|
280
|
+
export async function discardFromDeadLetterQueue(dlqId, resolvedBy, resolutionNote) {
|
|
281
|
+
const storage = getStorage();
|
|
282
|
+
await storage.execute(`UPDATE dead_letter_tasks
|
|
283
|
+
SET status = 'discarded', resolved_at = strftime('%s', 'now'), resolved_by = ?, resolution_note = ?
|
|
284
|
+
WHERE id = ?`, [resolvedBy || 'system', resolutionNote || 'Discarded', dlqId]);
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Retry a task from dead letter queue
|
|
289
|
+
*/
|
|
290
|
+
export async function retryDeadLetterTask(dlqId) {
|
|
291
|
+
if (!taskQueueRef) {
|
|
292
|
+
console.error('[FailureHandler] Task queue not available, cannot retry');
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
const storage = getStorage();
|
|
296
|
+
// Get the DLQ entry
|
|
297
|
+
const rows = await storage.query('SELECT * FROM dead_letter_tasks WHERE id = ? AND status = ?', [dlqId, 'pending']);
|
|
298
|
+
if (rows.length === 0) {
|
|
299
|
+
console.error(`[FailureHandler] DLQ entry ${dlqId} not found or not pending`);
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
const dlqEntry = rows[0];
|
|
303
|
+
// Reconstruct task object
|
|
304
|
+
const task = {
|
|
305
|
+
id: dlqEntry.task_id,
|
|
306
|
+
title: dlqEntry.title,
|
|
307
|
+
description: undefinedIfNull(dlqEntry.description),
|
|
308
|
+
prompt: dlqEntry.prompt,
|
|
309
|
+
status: 'pending',
|
|
310
|
+
priority: dlqEntry.priority,
|
|
311
|
+
source: dlqEntry.source,
|
|
312
|
+
sourceId: undefinedIfNull(dlqEntry.source_id),
|
|
313
|
+
sourceUrl: undefinedIfNull(dlqEntry.source_url),
|
|
314
|
+
repository: undefinedIfNull(dlqEntry.repository),
|
|
315
|
+
branch: undefinedIfNull(dlqEntry.branch),
|
|
316
|
+
labels: JSON.parse(dlqEntry.labels || '[]'),
|
|
317
|
+
assignedAgent: undefinedIfNull(dlqEntry.assigned_agent),
|
|
318
|
+
createdAt: new Date(),
|
|
319
|
+
updatedAt: new Date(),
|
|
320
|
+
attempts: 0, // Reset attempts for retry
|
|
321
|
+
maxAttempts: dlqEntry.max_attempts,
|
|
322
|
+
metadata: {
|
|
323
|
+
...JSON.parse(dlqEntry.metadata || '{}'),
|
|
324
|
+
retriedFromDLQ: dlqId,
|
|
325
|
+
dlqRetryCount: (dlqEntry.retry_count || 0) + 1,
|
|
326
|
+
},
|
|
327
|
+
};
|
|
328
|
+
// Add back to main queue
|
|
329
|
+
await taskQueueRef.add(`dlq-retry-${task.id}`, task, {
|
|
330
|
+
priority: task.priority,
|
|
331
|
+
jobId: `${task.id}-dlq-retry-${Date.now()}`,
|
|
332
|
+
});
|
|
333
|
+
// Update DLQ entry
|
|
334
|
+
await storage.execute(`UPDATE dead_letter_tasks
|
|
335
|
+
SET retry_count = retry_count + 1, last_retry_at = strftime('%s', 'now'), status = 'resolved', resolution_note = 'Retried'
|
|
336
|
+
WHERE id = ?`, [dlqId]);
|
|
337
|
+
console.log(`[FailureHandler] Task ${task.id} moved from DLQ back to main queue`);
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Clean up resolved/discarded DLQ entries older than retention period.
|
|
342
|
+
* Called from daily cron or on-demand.
|
|
343
|
+
*/
|
|
344
|
+
export async function cleanupDeadLetterQueue(retentionDays = parseInt(process.env['DLQ_RETENTION_DAYS'] ?? '30', 10)) {
|
|
345
|
+
const storage = getStorage();
|
|
346
|
+
const cutoffSeconds = Math.floor(Date.now() / 1000) - (retentionDays * 86400);
|
|
347
|
+
await storage.execute(`DELETE FROM dead_letter_tasks
|
|
348
|
+
WHERE status IN ('resolved', 'discarded')
|
|
349
|
+
AND (resolved_at IS NOT NULL AND resolved_at < ?)`, [cutoffSeconds]);
|
|
350
|
+
// SQLite execute doesn't reliably return affected rows, so count separately
|
|
351
|
+
const remaining = await storage.query(`SELECT COUNT(*) as count FROM dead_letter_tasks WHERE status IN ('resolved', 'discarded')`);
|
|
352
|
+
const remainingCount = remaining[0]?.count ?? 0;
|
|
353
|
+
console.log(`[FailureHandler] DLQ cleanup: removed entries older than ${retentionDays} days (${remainingCount} resolved/discarded remaining)`);
|
|
354
|
+
return remainingCount;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Get DLQ statistics
|
|
358
|
+
*/
|
|
359
|
+
export async function getDeadLetterQueueStats() {
|
|
360
|
+
const storage = getStorage();
|
|
361
|
+
const rows = await storage.query(`SELECT status, COUNT(*) as count FROM dead_letter_tasks GROUP BY status`);
|
|
362
|
+
const stats = {
|
|
363
|
+
pending: 0,
|
|
364
|
+
resolved: 0,
|
|
365
|
+
discarded: 0,
|
|
366
|
+
total: 0,
|
|
367
|
+
};
|
|
368
|
+
for (const row of rows) {
|
|
369
|
+
if (row.status === 'pending')
|
|
370
|
+
stats.pending = row.count;
|
|
371
|
+
else if (row.status === 'resolved')
|
|
372
|
+
stats.resolved = row.count;
|
|
373
|
+
else if (row.status === 'discarded')
|
|
374
|
+
stats.discarded = row.count;
|
|
375
|
+
stats.total += row.count;
|
|
376
|
+
}
|
|
377
|
+
return stats;
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=failure-handler.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Task Queue
|
|
3
|
+
*
|
|
4
|
+
* Delegates to BullMQ (Redis) or in-memory queue based on deployment mode.
|
|
5
|
+
* All consumers import from this module instead of task-queue or memory-queue directly.
|
|
6
|
+
*/
|
|
7
|
+
import type { Task, CreateTaskInput, TaskStatusType } from '../types/task.js';
|
|
8
|
+
export declare function initQueue(): Promise<void>;
|
|
9
|
+
export declare function addTask(input: CreateTaskInput): Promise<Task>;
|
|
10
|
+
export declare function getTask(id: string): Task | undefined;
|
|
11
|
+
export declare function getTasks(options?: {
|
|
12
|
+
status?: TaskStatusType;
|
|
13
|
+
limit?: number;
|
|
14
|
+
offset?: number;
|
|
15
|
+
}): Task[];
|
|
16
|
+
export declare function onTaskEvent(callback: (event: Record<string, unknown>) => void): () => void;
|
|
17
|
+
export declare function registerSSEBroadcaster(broadcaster: (eventType: string, data: Record<string, unknown>) => void): void;
|
|
18
|
+
export declare function cancelTask(id: string): Promise<boolean>;
|
|
19
|
+
export declare function retryTask(id: string): Promise<Task | null>;
|
|
20
|
+
export declare function closeQueue(): Promise<void>;
|
|
21
|
+
/** Get current queue backend type. */
|
|
22
|
+
export declare function getQueueType(): 'redis' | 'memory' | null;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Task Queue
|
|
3
|
+
*
|
|
4
|
+
* Delegates to BullMQ (Redis) or in-memory queue based on deployment mode.
|
|
5
|
+
* All consumers import from this module instead of task-queue or memory-queue directly.
|
|
6
|
+
*/
|
|
7
|
+
import { shouldUseRedis } from '../core/deployment.js';
|
|
8
|
+
let backend = null;
|
|
9
|
+
let backendType = null;
|
|
10
|
+
async function loadBackend() {
|
|
11
|
+
if (backend)
|
|
12
|
+
return backend;
|
|
13
|
+
if (shouldUseRedis()) {
|
|
14
|
+
try {
|
|
15
|
+
// Test Redis connectivity before committing
|
|
16
|
+
const IORedis = (await import('ioredis')).default;
|
|
17
|
+
const redisUrl = process.env.REDIS_URL || 'redis://localhost:6379';
|
|
18
|
+
const testRedis = new IORedis(redisUrl, {
|
|
19
|
+
maxRetriesPerRequest: 1,
|
|
20
|
+
connectTimeout: 5000,
|
|
21
|
+
lazyConnect: true,
|
|
22
|
+
});
|
|
23
|
+
await testRedis.connect();
|
|
24
|
+
await testRedis.ping();
|
|
25
|
+
await testRedis.disconnect();
|
|
26
|
+
backend = await import('./task-queue.js');
|
|
27
|
+
backendType = 'redis';
|
|
28
|
+
console.log('[Queue] Using Redis-backed BullMQ queue');
|
|
29
|
+
return backend;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
if (process.env.PROFCLAW_REQUIRE_REDIS === 'true') {
|
|
33
|
+
console.error('[FATAL] PROFCLAW_REQUIRE_REDIS=true but Redis is unreachable');
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
console.log('[Queue] Redis unavailable, falling back to in-memory queue');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Fallback: in-memory queue
|
|
40
|
+
backend = await import('./memory-queue.js');
|
|
41
|
+
backendType = 'memory';
|
|
42
|
+
console.log('[Queue] Using in-memory queue (no Redis)');
|
|
43
|
+
return backend;
|
|
44
|
+
}
|
|
45
|
+
function getBackend() {
|
|
46
|
+
if (!backend) {
|
|
47
|
+
throw new Error('Queue not initialized. Call initQueue() first.');
|
|
48
|
+
}
|
|
49
|
+
return backend;
|
|
50
|
+
}
|
|
51
|
+
// -- Public API (matches task-queue.ts exports) --
|
|
52
|
+
export async function initQueue() {
|
|
53
|
+
const b = await loadBackend();
|
|
54
|
+
await b.initTaskQueue();
|
|
55
|
+
}
|
|
56
|
+
export async function addTask(input) {
|
|
57
|
+
return getBackend().addTask(input);
|
|
58
|
+
}
|
|
59
|
+
export function getTask(id) {
|
|
60
|
+
return getBackend().getTask(id);
|
|
61
|
+
}
|
|
62
|
+
export function getTasks(options) {
|
|
63
|
+
return getBackend().getTasks(options);
|
|
64
|
+
}
|
|
65
|
+
export function onTaskEvent(callback) {
|
|
66
|
+
return getBackend().onTaskEvent(callback);
|
|
67
|
+
}
|
|
68
|
+
export function registerSSEBroadcaster(broadcaster) {
|
|
69
|
+
getBackend().registerSSEBroadcaster(broadcaster);
|
|
70
|
+
}
|
|
71
|
+
export async function cancelTask(id) {
|
|
72
|
+
return getBackend().cancelTask(id);
|
|
73
|
+
}
|
|
74
|
+
export async function retryTask(id) {
|
|
75
|
+
return getBackend().retryTask(id);
|
|
76
|
+
}
|
|
77
|
+
export async function closeQueue() {
|
|
78
|
+
if (backend) {
|
|
79
|
+
await backend.closeTaskQueue();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Get current queue backend type. */
|
|
83
|
+
export function getQueueType() {
|
|
84
|
+
return backendType;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Memory Task Queue
|
|
3
|
+
*
|
|
4
|
+
* Drop-in replacement for BullMQ task queue in pico/mini modes.
|
|
5
|
+
* Uses a Map-based FIFO with priority ordering. No Redis required.
|
|
6
|
+
* Persists tasks to the same SQLite storage as the BullMQ queue.
|
|
7
|
+
*/
|
|
8
|
+
import type { Task, TaskResult, CreateTaskInput, TaskStatusType } from '../types/task.js';
|
|
9
|
+
interface TaskEvent {
|
|
10
|
+
type: 'created' | 'queued' | 'started' | 'progress' | 'completed' | 'failed';
|
|
11
|
+
taskId: string;
|
|
12
|
+
task: Task;
|
|
13
|
+
result?: TaskResult;
|
|
14
|
+
progress?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function initTaskQueue(): Promise<void>;
|
|
17
|
+
export declare function addTask(input: CreateTaskInput): Promise<Task>;
|
|
18
|
+
export declare function getTask(id: string): Task | undefined;
|
|
19
|
+
export declare function getTasks(options?: {
|
|
20
|
+
status?: TaskStatusType;
|
|
21
|
+
limit?: number;
|
|
22
|
+
offset?: number;
|
|
23
|
+
}): Task[];
|
|
24
|
+
export declare function onTaskEvent(callback: (event: TaskEvent) => void): () => void;
|
|
25
|
+
export declare function registerSSEBroadcaster(broadcaster: (eventType: string, data: Record<string, unknown>) => void): void;
|
|
26
|
+
export declare function cancelTask(id: string): Promise<boolean>;
|
|
27
|
+
export declare function retryTask(id: string): Promise<Task | null>;
|
|
28
|
+
export declare function closeTaskQueue(): Promise<void>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=memory-queue.d.ts.map
|