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,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Inference Utility
|
|
3
|
+
*
|
|
4
|
+
* Lightweight AI inference for quick tasks like:
|
|
5
|
+
* - Ticket categorization (type, priority, labels)
|
|
6
|
+
* - Text summarization
|
|
7
|
+
* - Similarity matching
|
|
8
|
+
* - Smart suggestions
|
|
9
|
+
*
|
|
10
|
+
* Uses Ollama for local inference, falls back gracefully.
|
|
11
|
+
*/
|
|
12
|
+
import { logger } from './logger.js';
|
|
13
|
+
const OLLAMA_BASE_URL = process.env.OLLAMA_BASE_URL || 'http://localhost:11434';
|
|
14
|
+
const OLLAMA_MODEL = process.env.OLLAMA_MODEL || 'llama3.2';
|
|
15
|
+
const INFERENCE_TIMEOUT = 30000; // 30 seconds for quick tasks
|
|
16
|
+
/**
|
|
17
|
+
* Check if AI inference is available
|
|
18
|
+
*/
|
|
19
|
+
export async function isAIAvailable() {
|
|
20
|
+
try {
|
|
21
|
+
const response = await fetch(`${OLLAMA_BASE_URL}/api/tags`, {
|
|
22
|
+
signal: AbortSignal.timeout(2000),
|
|
23
|
+
});
|
|
24
|
+
return response.ok;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Run a quick AI inference with structured output
|
|
32
|
+
*/
|
|
33
|
+
export async function quickInference(systemPrompt, userPrompt, parseResponse) {
|
|
34
|
+
const startTime = Date.now();
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(`${OLLAMA_BASE_URL}/api/chat`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: { 'Content-Type': 'application/json' },
|
|
39
|
+
body: JSON.stringify({
|
|
40
|
+
model: OLLAMA_MODEL,
|
|
41
|
+
messages: [
|
|
42
|
+
{ role: 'system', content: systemPrompt },
|
|
43
|
+
{ role: 'user', content: userPrompt },
|
|
44
|
+
],
|
|
45
|
+
stream: false,
|
|
46
|
+
options: {
|
|
47
|
+
temperature: 0.3, // Lower temperature for more consistent results
|
|
48
|
+
num_predict: 512, // Short responses for quick tasks
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
signal: AbortSignal.timeout(INFERENCE_TIMEOUT),
|
|
52
|
+
});
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
error: `Ollama API error: ${response.status}`,
|
|
57
|
+
durationMs: Date.now() - startTime,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const result = (await response.json());
|
|
61
|
+
const content = result.message?.content || '';
|
|
62
|
+
try {
|
|
63
|
+
const parsed = parseResponse(content);
|
|
64
|
+
return {
|
|
65
|
+
success: true,
|
|
66
|
+
data: parsed,
|
|
67
|
+
durationMs: Date.now() - startTime,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (parseError) {
|
|
71
|
+
logger.warn('[AI] Failed to parse response', { content, parseError });
|
|
72
|
+
return {
|
|
73
|
+
success: false,
|
|
74
|
+
error: 'Failed to parse AI response',
|
|
75
|
+
durationMs: Date.now() - startTime,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
error: error instanceof Error ? error.message : 'Inference failed',
|
|
83
|
+
durationMs: Date.now() - startTime,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Auto-categorize a ticket based on title and description
|
|
89
|
+
*/
|
|
90
|
+
export async function categorizeTicket(title, description) {
|
|
91
|
+
const systemPrompt = `You are a ticket categorization system. Analyze the ticket and return a JSON object with:
|
|
92
|
+
- type: one of "task", "bug", "feature", "epic", "story", "subtask"
|
|
93
|
+
- priority: one of "critical", "high", "medium", "low", "none"
|
|
94
|
+
- labels: array of 1-5 relevant labels (lowercase, hyphen-separated)
|
|
95
|
+
- confidence: number 0-1 representing your confidence
|
|
96
|
+
|
|
97
|
+
Rules:
|
|
98
|
+
- "bug" = something broken, error, crash, not working
|
|
99
|
+
- "feature" = new functionality request
|
|
100
|
+
- "task" = work item, general task
|
|
101
|
+
- "epic" = large initiative with multiple stories
|
|
102
|
+
- "story" = user-facing requirement
|
|
103
|
+
- "subtask" = small piece of larger work
|
|
104
|
+
|
|
105
|
+
For priority:
|
|
106
|
+
- "critical" = security issue, data loss, system down
|
|
107
|
+
- "high" = important, affects many users
|
|
108
|
+
- "medium" = standard priority
|
|
109
|
+
- "low" = nice to have
|
|
110
|
+
- "none" = informational
|
|
111
|
+
|
|
112
|
+
Return ONLY valid JSON, no explanation.`;
|
|
113
|
+
const userPrompt = `Title: ${title}
|
|
114
|
+
${description ? `Description: ${description}` : ''}`;
|
|
115
|
+
return quickInference(systemPrompt, userPrompt, (text) => {
|
|
116
|
+
// Extract JSON from response (handle markdown code blocks)
|
|
117
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
118
|
+
if (!jsonMatch)
|
|
119
|
+
throw new Error('No JSON found');
|
|
120
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
121
|
+
// Validate and normalize
|
|
122
|
+
const validTypes = ['task', 'bug', 'feature', 'epic', 'story', 'subtask'];
|
|
123
|
+
const validPriorities = ['critical', 'high', 'medium', 'low', 'none'];
|
|
124
|
+
return {
|
|
125
|
+
type: validTypes.includes(parsed.type) ? parsed.type : 'task',
|
|
126
|
+
priority: validPriorities.includes(parsed.priority) ? parsed.priority : 'medium',
|
|
127
|
+
labels: Array.isArray(parsed.labels) ? parsed.labels.slice(0, 5) : [],
|
|
128
|
+
confidence: typeof parsed.confidence === 'number' ? Math.min(1, Math.max(0, parsed.confidence)) : 0.5,
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get AI suggestions to improve a ticket
|
|
134
|
+
*/
|
|
135
|
+
export async function suggestTicketImprovements(title, description, type) {
|
|
136
|
+
const systemPrompt = `You are a ticket improvement assistant. Analyze the ticket and suggest improvements as JSON:
|
|
137
|
+
- title: improved title (only if current is unclear, otherwise null)
|
|
138
|
+
- description: improved description with more detail (only if needed, otherwise null)
|
|
139
|
+
- acceptanceCriteria: array of 2-4 acceptance criteria (clear, testable statements)
|
|
140
|
+
- suggestedLabels: array of 2-4 relevant labels
|
|
141
|
+
- estimatedEffort: "small" (< 1 day), "medium" (1-3 days), "large" (> 3 days)
|
|
142
|
+
|
|
143
|
+
Keep suggestions practical and actionable. Return ONLY valid JSON.`;
|
|
144
|
+
const userPrompt = `Type: ${type || 'task'}
|
|
145
|
+
Title: ${title}
|
|
146
|
+
${description ? `Description: ${description}` : 'No description provided'}`;
|
|
147
|
+
return quickInference(systemPrompt, userPrompt, (text) => {
|
|
148
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
149
|
+
if (!jsonMatch)
|
|
150
|
+
throw new Error('No JSON found');
|
|
151
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
152
|
+
return {
|
|
153
|
+
title: parsed.title || undefined,
|
|
154
|
+
description: parsed.description || undefined,
|
|
155
|
+
acceptanceCriteria: Array.isArray(parsed.acceptanceCriteria) ? parsed.acceptanceCriteria : undefined,
|
|
156
|
+
suggestedLabels: Array.isArray(parsed.suggestedLabels) ? parsed.suggestedLabels : undefined,
|
|
157
|
+
estimatedEffort: ['small', 'medium', 'large'].includes(parsed.estimatedEffort)
|
|
158
|
+
? parsed.estimatedEffort
|
|
159
|
+
: undefined,
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Generate a summary from ticket content
|
|
165
|
+
*/
|
|
166
|
+
export async function summarizeTicket(title, description, comments) {
|
|
167
|
+
const systemPrompt = `Summarize the ticket in 1-2 sentences. Be concise and focus on the main objective.`;
|
|
168
|
+
const userPrompt = `Title: ${title}
|
|
169
|
+
${description ? `Description: ${description}` : ''}
|
|
170
|
+
${comments && comments.length > 0 ? `\nComments:\n${comments.join('\n')}` : ''}`;
|
|
171
|
+
return quickInference(systemPrompt, userPrompt, (text) => text.trim());
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Calculate text similarity score (simple word overlap for now)
|
|
175
|
+
* Returns 0-1 where 1 is identical
|
|
176
|
+
*/
|
|
177
|
+
export function calculateSimilarity(text1, text2) {
|
|
178
|
+
const normalize = (s) => s.toLowerCase()
|
|
179
|
+
.replace(/[^a-z0-9\s]/g, '')
|
|
180
|
+
.split(/\s+/)
|
|
181
|
+
.filter(w => w.length > 2);
|
|
182
|
+
const words1 = new Set(normalize(text1));
|
|
183
|
+
const words2 = new Set(normalize(text2));
|
|
184
|
+
if (words1.size === 0 || words2.size === 0)
|
|
185
|
+
return 0;
|
|
186
|
+
const intersection = [...words1].filter(w => words2.has(w)).length;
|
|
187
|
+
const union = new Set([...words1, ...words2]).size;
|
|
188
|
+
return intersection / union; // Jaccard similarity
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=ai-inference.js.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Comment Responder
|
|
3
|
+
*
|
|
4
|
+
* Generates helpful AI responses to ticket comments using Ollama.
|
|
5
|
+
* Can analyze context, answer questions, and provide suggestions.
|
|
6
|
+
*/
|
|
7
|
+
import type { Ticket, TicketComment } from '../tickets/types.js';
|
|
8
|
+
export interface AIResponseResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
response?: string;
|
|
11
|
+
shouldPost: boolean;
|
|
12
|
+
confidence: number;
|
|
13
|
+
responseType: 'answer' | 'clarification' | 'suggestion' | 'acknowledgment' | 'none';
|
|
14
|
+
error?: string;
|
|
15
|
+
durationMs: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Analyze a comment to determine if it needs an AI response
|
|
19
|
+
*/
|
|
20
|
+
export declare function analyzeComment(comment: string, ticket: Pick<Ticket, 'title' | 'description' | 'type' | 'status' | 'labels'>, previousComments?: TicketComment[]): Promise<{
|
|
21
|
+
needsResponse: boolean;
|
|
22
|
+
reason: string;
|
|
23
|
+
responseType: AIResponseResult['responseType'];
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Generate an AI response to a comment
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateResponse(comment: string, ticket: Pick<Ticket, 'title' | 'description' | 'type' | 'status' | 'labels' | 'priority'>, previousComments?: TicketComment[], responseType?: AIResponseResult['responseType']): Promise<AIResponseResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Full pipeline: analyze comment and generate response if needed
|
|
31
|
+
*/
|
|
32
|
+
export declare function processComment(comment: string, ticket: Pick<Ticket, 'title' | 'description' | 'type' | 'status' | 'labels' | 'priority'>, previousComments?: TicketComment[], options?: {
|
|
33
|
+
autoPost?: boolean;
|
|
34
|
+
minConfidence?: number;
|
|
35
|
+
}): Promise<AIResponseResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Get a quick status on AI responder availability
|
|
38
|
+
*/
|
|
39
|
+
export declare function getResponderStatus(): Promise<{
|
|
40
|
+
available: boolean;
|
|
41
|
+
model: string;
|
|
42
|
+
baseUrl: string;
|
|
43
|
+
}>;
|
|
44
|
+
//# sourceMappingURL=ai-responder.d.ts.map
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Comment Responder
|
|
3
|
+
*
|
|
4
|
+
* Generates helpful AI responses to ticket comments using Ollama.
|
|
5
|
+
* Can analyze context, answer questions, and provide suggestions.
|
|
6
|
+
*/
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
import { quickInference, isAIAvailable } from './ai-inference.js';
|
|
9
|
+
const OLLAMA_BASE_URL = process.env.OLLAMA_BASE_URL || 'http://localhost:11434';
|
|
10
|
+
const OLLAMA_MODEL = process.env.OLLAMA_MODEL || 'llama3.2';
|
|
11
|
+
const RESPONSE_TIMEOUT = 60000; // 60 seconds for longer responses
|
|
12
|
+
/**
|
|
13
|
+
* Analyze a comment to determine if it needs an AI response
|
|
14
|
+
*/
|
|
15
|
+
export async function analyzeComment(comment, ticket, previousComments = []) {
|
|
16
|
+
const systemPrompt = `You analyze ticket comments to determine if an AI assistant should respond.
|
|
17
|
+
|
|
18
|
+
Return a JSON object with:
|
|
19
|
+
- needsResponse: boolean - true if AI should respond
|
|
20
|
+
- reason: brief explanation
|
|
21
|
+
- responseType: "answer" | "clarification" | "suggestion" | "acknowledgment" | "none"
|
|
22
|
+
|
|
23
|
+
Respond TRUE for:
|
|
24
|
+
- Direct questions about implementation, approach, or status
|
|
25
|
+
- Requests for help or clarification
|
|
26
|
+
- Technical questions the AI can help with
|
|
27
|
+
- Comments asking for suggestions or alternatives
|
|
28
|
+
|
|
29
|
+
Respond FALSE for:
|
|
30
|
+
- Simple status updates ("working on this", "done", "merged")
|
|
31
|
+
- Acknowledgments without questions ("thanks", "got it", "ok")
|
|
32
|
+
- Comments that are clearly human-to-human conversation
|
|
33
|
+
- Already answered questions (check previous comments)
|
|
34
|
+
- Inflammatory or off-topic comments
|
|
35
|
+
|
|
36
|
+
Return ONLY valid JSON.`;
|
|
37
|
+
const userPrompt = `Ticket: ${ticket.title}
|
|
38
|
+
Type: ${ticket.type}
|
|
39
|
+
Status: ${ticket.status}
|
|
40
|
+
Description: ${ticket.description || 'None'}
|
|
41
|
+
Labels: ${ticket.labels.join(', ') || 'None'}
|
|
42
|
+
|
|
43
|
+
Previous comments (last 3):
|
|
44
|
+
${previousComments.slice(-3).map((c) => `- ${c.author.name}: ${c.content}`).join('\n') || 'None'}
|
|
45
|
+
|
|
46
|
+
New comment to analyze:
|
|
47
|
+
"${comment}"`;
|
|
48
|
+
const result = await quickInference(systemPrompt, userPrompt, (text) => {
|
|
49
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
50
|
+
if (!jsonMatch)
|
|
51
|
+
throw new Error('No JSON found');
|
|
52
|
+
return JSON.parse(jsonMatch[0]);
|
|
53
|
+
});
|
|
54
|
+
if (!result.success || !result.data) {
|
|
55
|
+
return { needsResponse: false, reason: 'Analysis failed', responseType: 'none' };
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
needsResponse: result.data.needsResponse === true,
|
|
59
|
+
reason: result.data.reason || '',
|
|
60
|
+
responseType: result.data.responseType || 'none',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Generate an AI response to a comment
|
|
65
|
+
*/
|
|
66
|
+
export async function generateResponse(comment, ticket, previousComments = [], responseType = 'answer') {
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
try {
|
|
69
|
+
const available = await isAIAvailable();
|
|
70
|
+
if (!available) {
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
shouldPost: false,
|
|
74
|
+
confidence: 0,
|
|
75
|
+
responseType: 'none',
|
|
76
|
+
error: 'AI service not available',
|
|
77
|
+
durationMs: Date.now() - startTime,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const systemPrompt = buildSystemPrompt(responseType, ticket);
|
|
81
|
+
const userPrompt = buildUserPrompt(comment, ticket, previousComments);
|
|
82
|
+
logger.debug('[AIResponder] Generating response', { ticketType: ticket.type, responseType });
|
|
83
|
+
const response = await fetch(`${OLLAMA_BASE_URL}/api/chat`, {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: { 'Content-Type': 'application/json' },
|
|
86
|
+
body: JSON.stringify({
|
|
87
|
+
model: OLLAMA_MODEL,
|
|
88
|
+
messages: [
|
|
89
|
+
{ role: 'system', content: systemPrompt },
|
|
90
|
+
{ role: 'user', content: userPrompt },
|
|
91
|
+
],
|
|
92
|
+
stream: false,
|
|
93
|
+
options: {
|
|
94
|
+
temperature: 0.5,
|
|
95
|
+
num_predict: 1024,
|
|
96
|
+
},
|
|
97
|
+
}),
|
|
98
|
+
signal: AbortSignal.timeout(RESPONSE_TIMEOUT),
|
|
99
|
+
});
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
const errorText = await response.text();
|
|
102
|
+
logger.error('[AIResponder] API error', undefined, { status: response.status, error: errorText });
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
shouldPost: false,
|
|
106
|
+
confidence: 0,
|
|
107
|
+
responseType: 'none',
|
|
108
|
+
error: `API error: ${response.status}`,
|
|
109
|
+
durationMs: Date.now() - startTime,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const result = (await response.json());
|
|
113
|
+
const content = result.message?.content || '';
|
|
114
|
+
// Parse response to extract confidence and actual response
|
|
115
|
+
const { responseText, confidence, shouldPost } = parseResponse(content, responseType);
|
|
116
|
+
logger.info('[AIResponder] Response generated', {
|
|
117
|
+
responseType,
|
|
118
|
+
confidence,
|
|
119
|
+
shouldPost,
|
|
120
|
+
length: responseText.length,
|
|
121
|
+
durationMs: Date.now() - startTime,
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
response: responseText,
|
|
126
|
+
shouldPost,
|
|
127
|
+
confidence,
|
|
128
|
+
responseType,
|
|
129
|
+
durationMs: Date.now() - startTime,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
logger.error('[AIResponder] Generation failed', error instanceof Error ? error : undefined);
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
shouldPost: false,
|
|
137
|
+
confidence: 0,
|
|
138
|
+
responseType: 'none',
|
|
139
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
140
|
+
durationMs: Date.now() - startTime,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Full pipeline: analyze comment and generate response if needed
|
|
146
|
+
*/
|
|
147
|
+
export async function processComment(comment, ticket, previousComments = [], options = {}) {
|
|
148
|
+
const startTime = Date.now();
|
|
149
|
+
const { autoPost = false, minConfidence = 0.6 } = options;
|
|
150
|
+
// First, analyze if response is needed
|
|
151
|
+
const analysis = await analyzeComment(comment, ticket, previousComments);
|
|
152
|
+
if (!analysis.needsResponse) {
|
|
153
|
+
logger.debug('[AIResponder] No response needed', { reason: analysis.reason });
|
|
154
|
+
return {
|
|
155
|
+
success: true,
|
|
156
|
+
shouldPost: false,
|
|
157
|
+
confidence: 0,
|
|
158
|
+
responseType: 'none',
|
|
159
|
+
durationMs: Date.now() - startTime,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// Generate response
|
|
163
|
+
const result = await generateResponse(comment, ticket, previousComments, analysis.responseType);
|
|
164
|
+
// Override shouldPost based on options
|
|
165
|
+
if (autoPost && result.success && result.confidence >= minConfidence) {
|
|
166
|
+
result.shouldPost = true;
|
|
167
|
+
}
|
|
168
|
+
else if (!autoPost) {
|
|
169
|
+
result.shouldPost = false;
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
// === Helper Functions ===
|
|
174
|
+
function buildSystemPrompt(responseType, ticket) {
|
|
175
|
+
const basePrompt = `You are a helpful AI assistant for a software project ticket system.
|
|
176
|
+
You're responding to a comment on a ${ticket.type} ticket (status: ${ticket.status}, priority: ${ticket.priority}).
|
|
177
|
+
|
|
178
|
+
Guidelines:
|
|
179
|
+
- Be concise and helpful
|
|
180
|
+
- Focus on actionable information
|
|
181
|
+
- Use technical language appropriate for developers
|
|
182
|
+
- If unsure, ask clarifying questions
|
|
183
|
+
- Never make promises about timelines
|
|
184
|
+
- Reference relevant documentation or patterns when helpful`;
|
|
185
|
+
switch (responseType) {
|
|
186
|
+
case 'answer':
|
|
187
|
+
return `${basePrompt}
|
|
188
|
+
|
|
189
|
+
Your task: Provide a direct, helpful answer to the question or request.
|
|
190
|
+
Format: Start with the key answer, then add supporting details if needed.`;
|
|
191
|
+
case 'clarification':
|
|
192
|
+
return `${basePrompt}
|
|
193
|
+
|
|
194
|
+
Your task: Ask clarifying questions to better understand the request.
|
|
195
|
+
Format: Acknowledge what you understand, then ask specific questions.`;
|
|
196
|
+
case 'suggestion':
|
|
197
|
+
return `${basePrompt}
|
|
198
|
+
|
|
199
|
+
Your task: Provide constructive suggestions or alternatives.
|
|
200
|
+
Format: Present 2-3 concrete suggestions with brief pros/cons.`;
|
|
201
|
+
case 'acknowledgment':
|
|
202
|
+
return `${basePrompt}
|
|
203
|
+
|
|
204
|
+
Your task: Acknowledge the comment and offer to help if needed.
|
|
205
|
+
Format: Brief acknowledgment with optional follow-up offer.`;
|
|
206
|
+
default:
|
|
207
|
+
return basePrompt;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function buildUserPrompt(comment, ticket, previousComments) {
|
|
211
|
+
let prompt = `**Ticket Context:**
|
|
212
|
+
Title: ${ticket.title}
|
|
213
|
+
Type: ${ticket.type}
|
|
214
|
+
Status: ${ticket.status}
|
|
215
|
+
Labels: ${ticket.labels.join(', ') || 'None'}
|
|
216
|
+
${ticket.description ? `\nDescription:\n${ticket.description}` : ''}`;
|
|
217
|
+
if (previousComments.length > 0) {
|
|
218
|
+
prompt += `\n\n**Recent Comments:**\n`;
|
|
219
|
+
prompt += previousComments.slice(-5).map((c) => {
|
|
220
|
+
const author = c.author.type === 'ai' ? `AI (${c.author.name})` : c.author.name;
|
|
221
|
+
return `- ${author}: ${c.content}`;
|
|
222
|
+
}).join('\n');
|
|
223
|
+
}
|
|
224
|
+
prompt += `\n\n**Comment to respond to:**\n"${comment}"`;
|
|
225
|
+
prompt += `\n\nProvide a helpful response:`;
|
|
226
|
+
return prompt;
|
|
227
|
+
}
|
|
228
|
+
function parseResponse(content, responseType) {
|
|
229
|
+
// Clean up the response
|
|
230
|
+
let responseText = content.trim();
|
|
231
|
+
// Remove any markdown code block wrapping
|
|
232
|
+
if (responseText.startsWith('```')) {
|
|
233
|
+
responseText = responseText.replace(/^```\w*\n?/, '').replace(/\n?```$/, '');
|
|
234
|
+
}
|
|
235
|
+
// Calculate confidence based on response quality indicators
|
|
236
|
+
let confidence = 0.7; // Base confidence
|
|
237
|
+
// Higher confidence for longer, more detailed responses
|
|
238
|
+
if (responseText.length > 200)
|
|
239
|
+
confidence += 0.1;
|
|
240
|
+
if (responseText.length > 500)
|
|
241
|
+
confidence += 0.05;
|
|
242
|
+
// Lower confidence for short responses
|
|
243
|
+
if (responseText.length < 50)
|
|
244
|
+
confidence -= 0.2;
|
|
245
|
+
// Check for uncertainty markers
|
|
246
|
+
const uncertaintyMarkers = ['i\'m not sure', 'i think', 'maybe', 'possibly', 'unclear'];
|
|
247
|
+
if (uncertaintyMarkers.some((m) => responseText.toLowerCase().includes(m))) {
|
|
248
|
+
confidence -= 0.1;
|
|
249
|
+
}
|
|
250
|
+
// Check for definitive markers
|
|
251
|
+
const definitiveMarkers = ['specifically', 'exactly', 'definitely', 'here\'s how'];
|
|
252
|
+
if (definitiveMarkers.some((m) => responseText.toLowerCase().includes(m))) {
|
|
253
|
+
confidence += 0.1;
|
|
254
|
+
}
|
|
255
|
+
// Clamp confidence
|
|
256
|
+
confidence = Math.min(1, Math.max(0, confidence));
|
|
257
|
+
// Determine if should post based on response type and confidence
|
|
258
|
+
const shouldPost = responseType !== 'none' && confidence >= 0.5 && responseText.length >= 20;
|
|
259
|
+
return { responseText, confidence, shouldPost };
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get a quick status on AI responder availability
|
|
263
|
+
*/
|
|
264
|
+
export async function getResponderStatus() {
|
|
265
|
+
const available = await isAIAvailable();
|
|
266
|
+
return {
|
|
267
|
+
available,
|
|
268
|
+
model: OLLAMA_MODEL,
|
|
269
|
+
baseUrl: OLLAMA_BASE_URL,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=ai-responder.js.map
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit Breaker Implementation
|
|
3
|
+
*
|
|
4
|
+
* Protects against cascading failures by "opening" the circuit
|
|
5
|
+
* when error rates exceed thresholds, preventing further requests
|
|
6
|
+
* until the service has time to recover.
|
|
7
|
+
*/
|
|
8
|
+
import { AppError } from '../types/errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Circuit breaker states
|
|
11
|
+
*/
|
|
12
|
+
export declare enum CircuitState {
|
|
13
|
+
/** Circuit is closed, requests flow normally */
|
|
14
|
+
CLOSED = "CLOSED",
|
|
15
|
+
/** Circuit is open, requests are blocked */
|
|
16
|
+
OPEN = "OPEN",
|
|
17
|
+
/** Circuit is testing if service recovered */
|
|
18
|
+
HALF_OPEN = "HALF_OPEN"
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Circuit breaker configuration
|
|
22
|
+
*/
|
|
23
|
+
export interface CircuitBreakerConfig {
|
|
24
|
+
/** Name for logging/debugging */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Number of failures before opening circuit */
|
|
27
|
+
failureThreshold: number;
|
|
28
|
+
/** Time window for counting failures (ms) */
|
|
29
|
+
failureWindow: number;
|
|
30
|
+
/** Time to wait before attempting recovery (ms) */
|
|
31
|
+
resetTimeout: number;
|
|
32
|
+
/** Number of successful requests in half-open before closing */
|
|
33
|
+
successThreshold: number;
|
|
34
|
+
/** Request timeout (ms) */
|
|
35
|
+
timeout?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Circuit breaker statistics
|
|
39
|
+
*/
|
|
40
|
+
export interface CircuitBreakerStats {
|
|
41
|
+
state: CircuitState;
|
|
42
|
+
failureCount: number;
|
|
43
|
+
successCount: number;
|
|
44
|
+
totalRequests: number;
|
|
45
|
+
lastFailureTime?: Date;
|
|
46
|
+
lastSuccessTime?: Date;
|
|
47
|
+
stateChangedAt: Date;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Circuit breaker error
|
|
51
|
+
*/
|
|
52
|
+
export declare class CircuitBreakerError extends AppError {
|
|
53
|
+
constructor(name: string, state: CircuitState);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Circuit Breaker implementation
|
|
57
|
+
*/
|
|
58
|
+
export declare class CircuitBreaker {
|
|
59
|
+
private config;
|
|
60
|
+
private state;
|
|
61
|
+
private failureCount;
|
|
62
|
+
private successCount;
|
|
63
|
+
private totalRequests;
|
|
64
|
+
private lastFailureTime?;
|
|
65
|
+
private lastSuccessTime?;
|
|
66
|
+
private stateChangedAt;
|
|
67
|
+
private failures;
|
|
68
|
+
private resetTimer?;
|
|
69
|
+
constructor(config: CircuitBreakerConfig);
|
|
70
|
+
/**
|
|
71
|
+
* Execute a function through the circuit breaker
|
|
72
|
+
*/
|
|
73
|
+
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
74
|
+
/**
|
|
75
|
+
* Execute function with timeout
|
|
76
|
+
*/
|
|
77
|
+
private withTimeout;
|
|
78
|
+
/**
|
|
79
|
+
* Handle successful execution
|
|
80
|
+
*/
|
|
81
|
+
private onSuccess;
|
|
82
|
+
/**
|
|
83
|
+
* Handle failed execution
|
|
84
|
+
*/
|
|
85
|
+
private onFailure;
|
|
86
|
+
/**
|
|
87
|
+
* Transition to a new state
|
|
88
|
+
*/
|
|
89
|
+
private transitionTo;
|
|
90
|
+
/**
|
|
91
|
+
* Get current statistics
|
|
92
|
+
*/
|
|
93
|
+
getStats(): CircuitBreakerStats;
|
|
94
|
+
/**
|
|
95
|
+
* Manually reset the circuit breaker
|
|
96
|
+
*/
|
|
97
|
+
reset(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Manually open the circuit breaker
|
|
100
|
+
*/
|
|
101
|
+
open(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Get current state
|
|
104
|
+
*/
|
|
105
|
+
getState(): CircuitState;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Circuit breaker registry for managing multiple breakers
|
|
109
|
+
*/
|
|
110
|
+
declare class CircuitBreakerRegistry {
|
|
111
|
+
private breakers;
|
|
112
|
+
/**
|
|
113
|
+
* Get or create a circuit breaker
|
|
114
|
+
*/
|
|
115
|
+
getOrCreate(name: string, config?: Partial<CircuitBreakerConfig>): CircuitBreaker;
|
|
116
|
+
/**
|
|
117
|
+
* Get all circuit breakers
|
|
118
|
+
*/
|
|
119
|
+
getAll(): Map<string, CircuitBreaker>;
|
|
120
|
+
/**
|
|
121
|
+
* Get stats for all breakers
|
|
122
|
+
*/
|
|
123
|
+
getAllStats(): Record<string, CircuitBreakerStats>;
|
|
124
|
+
/**
|
|
125
|
+
* Reset a specific breaker
|
|
126
|
+
*/
|
|
127
|
+
reset(name: string): void;
|
|
128
|
+
/**
|
|
129
|
+
* Reset all breakers
|
|
130
|
+
*/
|
|
131
|
+
resetAll(): void;
|
|
132
|
+
}
|
|
133
|
+
export declare const circuitBreakers: CircuitBreakerRegistry;
|
|
134
|
+
/**
|
|
135
|
+
* Decorator to wrap a function with a circuit breaker
|
|
136
|
+
*/
|
|
137
|
+
export declare function withCircuitBreaker<TArgs extends unknown[], TResult>(name: string, config?: Partial<CircuitBreakerConfig>): (_target: object, _propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: TArgs) => Promise<TResult>>) => TypedPropertyDescriptor<(...args: TArgs) => Promise<TResult>>;
|
|
138
|
+
export {};
|
|
139
|
+
//# sourceMappingURL=circuit-breaker.d.ts.map
|