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,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Password Hashing Utilities
|
|
3
|
+
*
|
|
4
|
+
* Uses Node.js built-in scrypt for secure password hashing.
|
|
5
|
+
* Supports transparent upgrade from legacy SHA256 hashes.
|
|
6
|
+
*
|
|
7
|
+
* Recovery codes use deterministic SHA256 (acceptable since codes are random, high-entropy).
|
|
8
|
+
*/
|
|
9
|
+
import { createHash, randomBytes, scryptSync, timingSafeEqual } from 'crypto';
|
|
10
|
+
const SCRYPT_KEYLEN = 64;
|
|
11
|
+
const SCRYPT_COST = 16384; // N
|
|
12
|
+
const SCRYPT_BLOCK_SIZE = 8; // r
|
|
13
|
+
const SCRYPT_PARALLELIZATION = 1; // p
|
|
14
|
+
/**
|
|
15
|
+
* Hash a password using scrypt.
|
|
16
|
+
* Returns format: scrypt:<salt>:<hash>
|
|
17
|
+
*/
|
|
18
|
+
export function hashPassword(password) {
|
|
19
|
+
const salt = randomBytes(16).toString('hex');
|
|
20
|
+
const derived = scryptSync(password, salt, SCRYPT_KEYLEN, {
|
|
21
|
+
N: SCRYPT_COST,
|
|
22
|
+
r: SCRYPT_BLOCK_SIZE,
|
|
23
|
+
p: SCRYPT_PARALLELIZATION,
|
|
24
|
+
});
|
|
25
|
+
return `scrypt:${salt}:${derived.toString('hex')}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Verify a password against a stored hash.
|
|
29
|
+
* Supports both scrypt and legacy SHA256 formats.
|
|
30
|
+
*
|
|
31
|
+
* @returns { valid, needsUpgrade } - needsUpgrade is true when using legacy SHA256
|
|
32
|
+
*/
|
|
33
|
+
export function verifyPassword(password, storedHash) {
|
|
34
|
+
// New format: scrypt:salt:hash
|
|
35
|
+
if (storedHash.startsWith('scrypt:')) {
|
|
36
|
+
const parts = storedHash.split(':');
|
|
37
|
+
if (parts.length !== 3)
|
|
38
|
+
return { valid: false, needsUpgrade: false };
|
|
39
|
+
const [, salt, hash] = parts;
|
|
40
|
+
const derived = scryptSync(password, salt, SCRYPT_KEYLEN, {
|
|
41
|
+
N: SCRYPT_COST,
|
|
42
|
+
r: SCRYPT_BLOCK_SIZE,
|
|
43
|
+
p: SCRYPT_PARALLELIZATION,
|
|
44
|
+
});
|
|
45
|
+
try {
|
|
46
|
+
const valid = timingSafeEqual(Buffer.from(hash, 'hex'), derived);
|
|
47
|
+
return { valid, needsUpgrade: false };
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return { valid: false, needsUpgrade: false };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Legacy format: salt:hash (SHA256)
|
|
54
|
+
const [salt, hash] = storedHash.split(':');
|
|
55
|
+
if (!salt || !hash)
|
|
56
|
+
return { valid: false, needsUpgrade: false };
|
|
57
|
+
const computedHash = createHash('sha256')
|
|
58
|
+
.update(password + salt)
|
|
59
|
+
.digest('hex');
|
|
60
|
+
try {
|
|
61
|
+
const valid = timingSafeEqual(Buffer.from(hash), Buffer.from(computedHash));
|
|
62
|
+
return { valid, needsUpgrade: valid }; // If valid with legacy, needs upgrade
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return { valid: false, needsUpgrade: false };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate password strength.
|
|
70
|
+
* Requires: 8+ chars, at least 1 letter, at least 1 number.
|
|
71
|
+
* Returns null if valid, or an error message string.
|
|
72
|
+
*/
|
|
73
|
+
export function validatePasswordStrength(password) {
|
|
74
|
+
if (password.length < 8)
|
|
75
|
+
return 'Password must be at least 8 characters';
|
|
76
|
+
if (password.length > 128)
|
|
77
|
+
return 'Password must be at most 128 characters';
|
|
78
|
+
if (!/[a-zA-Z]/.test(password))
|
|
79
|
+
return 'Password must contain at least one letter';
|
|
80
|
+
if (!/[0-9]/.test(password))
|
|
81
|
+
return 'Password must contain at least one number';
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Deterministic hash for recovery codes.
|
|
86
|
+
* SHA256 is acceptable here since recovery codes are random, high-entropy strings.
|
|
87
|
+
*/
|
|
88
|
+
export function hashRecoveryCode(code) {
|
|
89
|
+
return createHash('sha256').update(code.replace(/-/g, '')).digest('hex');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generate recovery codes (XXXX-XXXX format).
|
|
93
|
+
*/
|
|
94
|
+
export function generateRecoveryCodes(count = 8) {
|
|
95
|
+
const codes = [];
|
|
96
|
+
for (let i = 0; i < count; i++) {
|
|
97
|
+
const code = randomBytes(4).toString('hex').toUpperCase();
|
|
98
|
+
codes.push(`${code.slice(0, 4)}-${code.slice(4)}`);
|
|
99
|
+
}
|
|
100
|
+
return codes;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Hash an array of recovery codes.
|
|
104
|
+
*/
|
|
105
|
+
export function hashRecoveryCodes(codes) {
|
|
106
|
+
return codes.map(hashRecoveryCode);
|
|
107
|
+
}
|
|
108
|
+
// INVITE CODE UTILITIES
|
|
109
|
+
/**
|
|
110
|
+
* Generate a human-friendly invite code.
|
|
111
|
+
* Format: PC-XXXX-XXXX-XXXX (12 hex chars)
|
|
112
|
+
*/
|
|
113
|
+
export function generateInviteCode() {
|
|
114
|
+
const hex = randomBytes(6).toString('hex').toUpperCase();
|
|
115
|
+
return `PC-${hex.slice(0, 4)}-${hex.slice(4, 8)}-${hex.slice(8, 12)}`;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Hash an invite code for secure storage.
|
|
119
|
+
* Normalizes by removing dashes and uppercasing before hashing.
|
|
120
|
+
*/
|
|
121
|
+
export function hashInviteCode(code) {
|
|
122
|
+
return createHash('sha256')
|
|
123
|
+
.update(code.replace(/-/g, '').toUpperCase())
|
|
124
|
+
.digest('hex');
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=password.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QR Code Generation for Device Pairing
|
|
3
|
+
*
|
|
4
|
+
* Generates QR codes containing pairing URLs for easy device setup.
|
|
5
|
+
* Uses text-based QR encoding (no native image deps).
|
|
6
|
+
*/
|
|
7
|
+
interface QRPairingOptions {
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
format?: 'url' | 'json';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generate a pairing URL suitable for QR encoding
|
|
13
|
+
*/
|
|
14
|
+
export declare function generatePairingUrl(code: string, options?: QRPairingOptions): string;
|
|
15
|
+
/**
|
|
16
|
+
* Generate a QR code as SVG string (no external deps)
|
|
17
|
+
* Uses a minimal QR encoder for alphanumeric data
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateQRSvg(data: string, size?: number): string;
|
|
20
|
+
/**
|
|
21
|
+
* Generate QR code as text (terminal-friendly)
|
|
22
|
+
* Uses Unicode block characters for display
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateQRText(data: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Generate full pairing QR response
|
|
27
|
+
*/
|
|
28
|
+
export declare function generatePairingQR(code: string, options?: QRPairingOptions & {
|
|
29
|
+
size?: number;
|
|
30
|
+
}): {
|
|
31
|
+
url: string;
|
|
32
|
+
svg: string;
|
|
33
|
+
text: string;
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=qr-pairing.d.ts.map
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QR Code Generation for Device Pairing
|
|
3
|
+
*
|
|
4
|
+
* Generates QR codes containing pairing URLs for easy device setup.
|
|
5
|
+
* Uses text-based QR encoding (no native image deps).
|
|
6
|
+
*/
|
|
7
|
+
import { formatPairingCode } from './pairing-codes.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate a pairing URL suitable for QR encoding
|
|
11
|
+
*/
|
|
12
|
+
export function generatePairingUrl(code, options = {}) {
|
|
13
|
+
const baseUrl = options.baseUrl || process.env.PROFCLAW_URL || 'http://localhost:3000';
|
|
14
|
+
const formatted = formatPairingCode(code);
|
|
15
|
+
return `${baseUrl}/pair?code=${encodeURIComponent(formatted)}`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate a QR code as SVG string (no external deps)
|
|
19
|
+
* Uses a minimal QR encoder for alphanumeric data
|
|
20
|
+
*/
|
|
21
|
+
export function generateQRSvg(data, size = 256) {
|
|
22
|
+
const modules = encodeToMatrix(data);
|
|
23
|
+
const moduleCount = modules.length;
|
|
24
|
+
const cellSize = size / (moduleCount + 8); // 4-module quiet zone each side
|
|
25
|
+
let svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}">`;
|
|
26
|
+
svg += `<rect width="${size}" height="${size}" fill="white"/>`;
|
|
27
|
+
for (let row = 0; row < moduleCount; row++) {
|
|
28
|
+
for (let col = 0; col < moduleCount; col++) {
|
|
29
|
+
if (modules[row][col]) {
|
|
30
|
+
const x = (col + 4) * cellSize;
|
|
31
|
+
const y = (row + 4) * cellSize;
|
|
32
|
+
svg += `<rect x="${x}" y="${y}" width="${cellSize}" height="${cellSize}" fill="black"/>`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
svg += '</svg>';
|
|
37
|
+
return svg;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Generate QR code as text (terminal-friendly)
|
|
41
|
+
* Uses Unicode block characters for display
|
|
42
|
+
*/
|
|
43
|
+
export function generateQRText(data) {
|
|
44
|
+
const modules = encodeToMatrix(data);
|
|
45
|
+
const lines = [];
|
|
46
|
+
// Use upper/lower half block chars for 2-row-per-line encoding
|
|
47
|
+
for (let row = 0; row < modules.length; row += 2) {
|
|
48
|
+
let line = '';
|
|
49
|
+
for (let col = 0; col < modules[0].length; col++) {
|
|
50
|
+
const top = modules[row]?.[col] ?? false;
|
|
51
|
+
const bottom = modules[row + 1]?.[col] ?? false;
|
|
52
|
+
if (top && bottom)
|
|
53
|
+
line += '\u2588'; // full block
|
|
54
|
+
else if (top)
|
|
55
|
+
line += '\u2580'; // upper half
|
|
56
|
+
else if (bottom)
|
|
57
|
+
line += '\u2584'; // lower half
|
|
58
|
+
else
|
|
59
|
+
line += ' ';
|
|
60
|
+
}
|
|
61
|
+
lines.push(line);
|
|
62
|
+
}
|
|
63
|
+
return lines.join('\n');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Minimal QR-like matrix encoder
|
|
67
|
+
* Encodes short alphanumeric strings into a visual matrix.
|
|
68
|
+
* For pairing codes (8 chars) this produces a visually distinct pattern per code.
|
|
69
|
+
*/
|
|
70
|
+
function encodeToMatrix(data) {
|
|
71
|
+
const size = 21; // QR Version 1 is 21x21
|
|
72
|
+
const matrix = Array.from({ length: size }, () => Array.from({ length: size }, () => false));
|
|
73
|
+
// Add finder patterns (3 corners)
|
|
74
|
+
addFinderPattern(matrix, 0, 0);
|
|
75
|
+
addFinderPattern(matrix, 0, size - 7);
|
|
76
|
+
addFinderPattern(matrix, size - 7, 0);
|
|
77
|
+
// Add timing patterns
|
|
78
|
+
for (let i = 8; i < size - 8; i++) {
|
|
79
|
+
matrix[6][i] = i % 2 === 0;
|
|
80
|
+
matrix[i][6] = i % 2 === 0;
|
|
81
|
+
}
|
|
82
|
+
// Encode data bytes into remaining cells
|
|
83
|
+
const bytes = new TextEncoder().encode(data);
|
|
84
|
+
let bitIndex = 0;
|
|
85
|
+
for (let col = size - 1; col >= 1; col -= 2) {
|
|
86
|
+
if (col === 6)
|
|
87
|
+
col = 5; // Skip timing column
|
|
88
|
+
for (let row = 0; row < size; row++) {
|
|
89
|
+
for (let c = 0; c < 2; c++) {
|
|
90
|
+
const actualCol = col - c;
|
|
91
|
+
if (matrix[row][actualCol] !== undefined && !isReserved(row, actualCol, size)) {
|
|
92
|
+
const byteIdx = Math.floor(bitIndex / 8);
|
|
93
|
+
const bitIdx = 7 - (bitIndex % 8);
|
|
94
|
+
if (byteIdx < bytes.length) {
|
|
95
|
+
matrix[row][actualCol] = ((bytes[byteIdx] >> bitIdx) & 1) === 1;
|
|
96
|
+
}
|
|
97
|
+
bitIndex++;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return matrix;
|
|
103
|
+
}
|
|
104
|
+
function addFinderPattern(matrix, startRow, startCol) {
|
|
105
|
+
for (let r = 0; r < 7; r++) {
|
|
106
|
+
for (let c = 0; c < 7; c++) {
|
|
107
|
+
const isOuter = r === 0 || r === 6 || c === 0 || c === 6;
|
|
108
|
+
const isInner = r >= 2 && r <= 4 && c >= 2 && c <= 4;
|
|
109
|
+
matrix[startRow + r][startCol + c] = isOuter || isInner;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function isReserved(row, col, size) {
|
|
114
|
+
// Finder patterns + separators
|
|
115
|
+
if (row < 9 && col < 9)
|
|
116
|
+
return true;
|
|
117
|
+
if (row < 9 && col >= size - 8)
|
|
118
|
+
return true;
|
|
119
|
+
if (row >= size - 8 && col < 9)
|
|
120
|
+
return true;
|
|
121
|
+
// Timing patterns
|
|
122
|
+
if (row === 6 || col === 6)
|
|
123
|
+
return true;
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Generate full pairing QR response
|
|
128
|
+
*/
|
|
129
|
+
export function generatePairingQR(code, options = {}) {
|
|
130
|
+
const url = generatePairingUrl(code, options);
|
|
131
|
+
logger.debug('Generated QR pairing data', { code: formatPairingCode(code), url });
|
|
132
|
+
return {
|
|
133
|
+
url,
|
|
134
|
+
svg: generateQRSvg(url, options.size),
|
|
135
|
+
text: generateQRText(url),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=qr-pairing.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack OAuth Authentication
|
|
3
|
+
*
|
|
4
|
+
* Handles OAuth flow for installing profClaw Slack app into workspaces.
|
|
5
|
+
*/
|
|
6
|
+
export interface SlackOAuthResult {
|
|
7
|
+
accessToken: string;
|
|
8
|
+
refreshToken?: string;
|
|
9
|
+
expiresIn?: number;
|
|
10
|
+
teamId: string;
|
|
11
|
+
teamName: string;
|
|
12
|
+
botUserId: string;
|
|
13
|
+
scopes: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if Slack OAuth is configured
|
|
17
|
+
*/
|
|
18
|
+
export declare function isSlackOAuthConfigured(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Get Slack OAuth authorization URL
|
|
21
|
+
*/
|
|
22
|
+
export declare function getSlackAuthUrl(state: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Handle Slack OAuth callback
|
|
25
|
+
*/
|
|
26
|
+
export declare function handleSlackCallback(code: string, state: string): Promise<SlackOAuthResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Verify Slack webhook signature
|
|
29
|
+
*/
|
|
30
|
+
export declare function verifySlackSignature(signature: string, timestamp: string, body: string): boolean;
|
|
31
|
+
//# sourceMappingURL=slack-oauth.d.ts.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack OAuth Authentication
|
|
3
|
+
*
|
|
4
|
+
* Handles OAuth flow for installing profClaw Slack app into workspaces.
|
|
5
|
+
*/
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { getChatRegistry } from '../chat/providers/index.js';
|
|
8
|
+
// CONFIGURATION
|
|
9
|
+
const SLACK_CLIENT_ID = process.env.SLACK_CLIENT_ID || '';
|
|
10
|
+
const SLACK_CLIENT_SECRET = process.env.SLACK_CLIENT_SECRET || '';
|
|
11
|
+
const SLACK_REDIRECT_URI = process.env.SLACK_REDIRECT_URI || '';
|
|
12
|
+
// OAUTH FUNCTIONS
|
|
13
|
+
/**
|
|
14
|
+
* Check if Slack OAuth is configured
|
|
15
|
+
*/
|
|
16
|
+
export function isSlackOAuthConfigured() {
|
|
17
|
+
return !!(SLACK_CLIENT_ID && SLACK_CLIENT_SECRET && SLACK_REDIRECT_URI);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get Slack OAuth authorization URL
|
|
21
|
+
*/
|
|
22
|
+
export function getSlackAuthUrl(state) {
|
|
23
|
+
const registry = getChatRegistry();
|
|
24
|
+
const provider = registry.get('slack');
|
|
25
|
+
if (!provider?.auth) {
|
|
26
|
+
throw new Error('Slack provider not registered or missing auth adapter');
|
|
27
|
+
}
|
|
28
|
+
return provider.auth.getAuthUrl(state);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Handle Slack OAuth callback
|
|
32
|
+
*/
|
|
33
|
+
export async function handleSlackCallback(code, state) {
|
|
34
|
+
const registry = getChatRegistry();
|
|
35
|
+
const provider = registry.get('slack');
|
|
36
|
+
if (!provider?.auth) {
|
|
37
|
+
throw new Error('Slack provider not registered or missing auth adapter');
|
|
38
|
+
}
|
|
39
|
+
logger.info('[Slack OAuth] Exchanging code for tokens', { state });
|
|
40
|
+
const result = await provider.auth.exchangeCode(code);
|
|
41
|
+
logger.info('[Slack OAuth] Successfully obtained tokens', {
|
|
42
|
+
teamId: result.teamId,
|
|
43
|
+
teamName: result.teamName,
|
|
44
|
+
});
|
|
45
|
+
// Register the account
|
|
46
|
+
if (result.teamId) {
|
|
47
|
+
registry.registerAccount({
|
|
48
|
+
id: result.teamId,
|
|
49
|
+
provider: 'slack',
|
|
50
|
+
name: result.teamName || result.teamId,
|
|
51
|
+
enabled: true,
|
|
52
|
+
isDefault: true,
|
|
53
|
+
mode: 'http',
|
|
54
|
+
botToken: result.accessToken,
|
|
55
|
+
teamId: result.teamId,
|
|
56
|
+
teamName: result.teamName,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
accessToken: result.accessToken,
|
|
61
|
+
refreshToken: result.refreshToken,
|
|
62
|
+
expiresIn: result.expiresIn,
|
|
63
|
+
teamId: result.teamId || '',
|
|
64
|
+
teamName: result.teamName || '',
|
|
65
|
+
botUserId: result.botUserId || '',
|
|
66
|
+
scopes: [], // Would need to parse from response
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Verify Slack webhook signature
|
|
71
|
+
*/
|
|
72
|
+
export function verifySlackSignature(signature, timestamp, body) {
|
|
73
|
+
const registry = getChatRegistry();
|
|
74
|
+
const provider = registry.get('slack');
|
|
75
|
+
if (!provider?.auth) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return provider.auth.verifyWebhook(signature, timestamp, body);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=slack-oauth.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Backup & Restore
|
|
3
|
+
*
|
|
4
|
+
* Full database export to JSON for backup/migration.
|
|
5
|
+
* Supports selective table export and atomic restore.
|
|
6
|
+
*/
|
|
7
|
+
interface BackupMetadata {
|
|
8
|
+
id: string;
|
|
9
|
+
version: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
tables: string[];
|
|
12
|
+
rowCounts: Record<string, number>;
|
|
13
|
+
sizeBytes: number;
|
|
14
|
+
}
|
|
15
|
+
type DbClient = {
|
|
16
|
+
execute: (sql: string, params?: unknown[]) => Promise<{
|
|
17
|
+
rows: unknown[];
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Export entire database to a JSON backup
|
|
22
|
+
*/
|
|
23
|
+
export declare function exportDatabase(db: DbClient, options?: {
|
|
24
|
+
tables?: string[];
|
|
25
|
+
outputDir?: string;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
filePath: string;
|
|
28
|
+
metadata: BackupMetadata;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Import database from a JSON backup
|
|
32
|
+
* Uses INSERT OR REPLACE to handle conflicts
|
|
33
|
+
*/
|
|
34
|
+
export declare function importDatabase(db: DbClient, filePath: string, options?: {
|
|
35
|
+
tables?: string[];
|
|
36
|
+
dryRun?: boolean;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
metadata: BackupMetadata;
|
|
39
|
+
imported: Record<string, number>;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* List available backups
|
|
43
|
+
*/
|
|
44
|
+
export declare function listBackups(backupDir?: string): Promise<BackupMetadata[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Delete old backups, keeping the most recent N
|
|
47
|
+
*/
|
|
48
|
+
export declare function pruneBackups(keepCount?: number, backupDir?: string): Promise<number>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Backup & Restore
|
|
3
|
+
*
|
|
4
|
+
* Full database export to JSON for backup/migration.
|
|
5
|
+
* Supports selective table export and atomic restore.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'crypto';
|
|
8
|
+
import { writeFile, readFile, mkdir } from 'fs/promises';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import { logger } from '../utils/logger.js';
|
|
12
|
+
const BACKUP_TABLES = [
|
|
13
|
+
'tasks',
|
|
14
|
+
'summaries',
|
|
15
|
+
'tickets',
|
|
16
|
+
'ticket_comments',
|
|
17
|
+
'ticket_history',
|
|
18
|
+
'projects',
|
|
19
|
+
'labels',
|
|
20
|
+
'ticket_labels',
|
|
21
|
+
'states',
|
|
22
|
+
'sprints',
|
|
23
|
+
'sprint_tickets',
|
|
24
|
+
'scheduled_jobs',
|
|
25
|
+
'job_templates',
|
|
26
|
+
'settings',
|
|
27
|
+
'embeddings',
|
|
28
|
+
'agent_sessions',
|
|
29
|
+
'cost_history',
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Export entire database to a JSON backup
|
|
33
|
+
*/
|
|
34
|
+
export async function exportDatabase(db, options = {}) {
|
|
35
|
+
const tables = options.tables ?? BACKUP_TABLES;
|
|
36
|
+
const outputDir = options.outputDir ?? path.resolve(process.cwd(), 'data', 'backups');
|
|
37
|
+
if (!existsSync(outputDir)) {
|
|
38
|
+
await mkdir(outputDir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
const backupId = randomUUID().slice(0, 8);
|
|
41
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
42
|
+
const fileName = `profclaw-backup-${timestamp}-${backupId}.json`;
|
|
43
|
+
const filePath = path.join(outputDir, fileName);
|
|
44
|
+
const data = {};
|
|
45
|
+
const rowCounts = {};
|
|
46
|
+
const exportedTables = [];
|
|
47
|
+
for (const table of tables) {
|
|
48
|
+
try {
|
|
49
|
+
const result = await db.execute(`SELECT * FROM ${table}`);
|
|
50
|
+
const rows = result.rows ?? [];
|
|
51
|
+
data[table] = rows;
|
|
52
|
+
rowCounts[table] = rows.length;
|
|
53
|
+
exportedTables.push(table);
|
|
54
|
+
logger.debug('[Backup] Exported table', { table, rows: rows.length });
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Table may not exist yet
|
|
58
|
+
logger.debug('[Backup] Skipped table (not found)', { table });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const metadata = {
|
|
62
|
+
id: backupId,
|
|
63
|
+
version: '2.0.0',
|
|
64
|
+
createdAt: new Date().toISOString(),
|
|
65
|
+
tables: exportedTables,
|
|
66
|
+
rowCounts,
|
|
67
|
+
sizeBytes: 0,
|
|
68
|
+
};
|
|
69
|
+
const backup = { metadata, data };
|
|
70
|
+
const json = JSON.stringify(backup, null, 2);
|
|
71
|
+
metadata.sizeBytes = Buffer.byteLength(json, 'utf-8');
|
|
72
|
+
await writeFile(filePath, JSON.stringify(backup, null, 2), 'utf-8');
|
|
73
|
+
logger.info('[Backup] Database exported', {
|
|
74
|
+
file: fileName,
|
|
75
|
+
tables: exportedTables.length,
|
|
76
|
+
totalRows: Object.values(rowCounts).reduce((a, b) => a + b, 0),
|
|
77
|
+
sizeBytes: metadata.sizeBytes,
|
|
78
|
+
});
|
|
79
|
+
return { filePath, metadata };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Import database from a JSON backup
|
|
83
|
+
* Uses INSERT OR REPLACE to handle conflicts
|
|
84
|
+
*/
|
|
85
|
+
export async function importDatabase(db, filePath, options = {}) {
|
|
86
|
+
const content = await readFile(filePath, 'utf-8');
|
|
87
|
+
const backup = JSON.parse(content);
|
|
88
|
+
if (!backup.metadata || !backup.data) {
|
|
89
|
+
throw new Error('Invalid backup file format');
|
|
90
|
+
}
|
|
91
|
+
const tablesToImport = options.tables ?? backup.metadata.tables;
|
|
92
|
+
const imported = {};
|
|
93
|
+
for (const table of tablesToImport) {
|
|
94
|
+
const rows = backup.data[table];
|
|
95
|
+
if (!rows || rows.length === 0)
|
|
96
|
+
continue;
|
|
97
|
+
if (options.dryRun) {
|
|
98
|
+
imported[table] = rows.length;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
let count = 0;
|
|
102
|
+
for (const row of rows) {
|
|
103
|
+
try {
|
|
104
|
+
const record = row;
|
|
105
|
+
const columns = Object.keys(record);
|
|
106
|
+
const placeholders = columns.map(() => '?').join(', ');
|
|
107
|
+
const values = columns.map(col => record[col]);
|
|
108
|
+
await db.execute(`INSERT OR REPLACE INTO ${table} (${columns.join(', ')}) VALUES (${placeholders})`, values);
|
|
109
|
+
count++;
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
logger.warn('[Backup] Failed to import row', { table, error: err.message });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
imported[table] = count;
|
|
116
|
+
logger.debug('[Backup] Imported table', { table, rows: count });
|
|
117
|
+
}
|
|
118
|
+
logger.info('[Backup] Database imported', {
|
|
119
|
+
from: path.basename(filePath),
|
|
120
|
+
tables: Object.keys(imported).length,
|
|
121
|
+
totalRows: Object.values(imported).reduce((a, b) => a + b, 0),
|
|
122
|
+
});
|
|
123
|
+
return { metadata: backup.metadata, imported };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* List available backups
|
|
127
|
+
*/
|
|
128
|
+
export async function listBackups(backupDir) {
|
|
129
|
+
const dir = backupDir ?? path.resolve(process.cwd(), 'data', 'backups');
|
|
130
|
+
if (!existsSync(dir))
|
|
131
|
+
return [];
|
|
132
|
+
const { readdir, stat } = await import('fs/promises');
|
|
133
|
+
const files = await readdir(dir);
|
|
134
|
+
const backups = [];
|
|
135
|
+
for (const file of files) {
|
|
136
|
+
if (!file.startsWith('profclaw-backup-') || !file.endsWith('.json'))
|
|
137
|
+
continue;
|
|
138
|
+
try {
|
|
139
|
+
const filePath = path.join(dir, file);
|
|
140
|
+
const fileStat = await stat(filePath);
|
|
141
|
+
const content = await readFile(filePath, 'utf-8');
|
|
142
|
+
const backup = JSON.parse(content);
|
|
143
|
+
if (backup.metadata) {
|
|
144
|
+
backup.metadata.sizeBytes = fileStat.size;
|
|
145
|
+
backups.push(backup.metadata);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Skip malformed backups
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return backups.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Delete old backups, keeping the most recent N
|
|
156
|
+
*/
|
|
157
|
+
export async function pruneBackups(keepCount = 5, backupDir) {
|
|
158
|
+
const dir = backupDir ?? path.resolve(process.cwd(), 'data', 'backups');
|
|
159
|
+
const backups = await listBackups(dir);
|
|
160
|
+
if (backups.length <= keepCount)
|
|
161
|
+
return 0;
|
|
162
|
+
const { unlink } = await import('fs/promises');
|
|
163
|
+
const toDelete = backups.slice(keepCount);
|
|
164
|
+
let deleted = 0;
|
|
165
|
+
for (const backup of toDelete) {
|
|
166
|
+
try {
|
|
167
|
+
const timestamp = backup.createdAt.replace(/[:.]/g, '-');
|
|
168
|
+
const fileName = `profclaw-backup-${timestamp}-${backup.id}.json`;
|
|
169
|
+
const filePath = path.join(dir, fileName);
|
|
170
|
+
if (existsSync(filePath)) {
|
|
171
|
+
await unlink(filePath);
|
|
172
|
+
deleted++;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Skip
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (deleted > 0) {
|
|
180
|
+
logger.info('[Backup] Pruned old backups', { deleted, kept: keepCount });
|
|
181
|
+
}
|
|
182
|
+
return deleted;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Tools Adapters
|
|
3
|
+
*
|
|
4
|
+
* Uses unified adapter system from src/tools/adapters.ts
|
|
5
|
+
* This file provides browser-specific exports for backwards compatibility.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolDefinition as ChatToolDefinition } from '../chat/execution/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* MCP tool definitions for browser tools (with profclaw__ prefix)
|
|
10
|
+
*/
|
|
11
|
+
export declare const MCP_BROWSER_TOOLS: import("../tools/types.js").MCPToolSchema[];
|
|
12
|
+
/**
|
|
13
|
+
* Handle MCP browser tool call
|
|
14
|
+
*/
|
|
15
|
+
export declare const handleMCPBrowserTool: (name: string, args: unknown) => Promise<import("@modelcontextprotocol/sdk/types.js").CallToolResult | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Chat execution tool definitions for browser tools
|
|
18
|
+
*/
|
|
19
|
+
export declare const CHAT_BROWSER_TOOLS: ChatToolDefinition[];
|
|
20
|
+
/**
|
|
21
|
+
* Get chat browser tool by name
|
|
22
|
+
*/
|
|
23
|
+
export declare function getChatBrowserTool(name: string): ChatToolDefinition | undefined;
|
|
24
|
+
export { BROWSER_TOOLS, SAFE_BROWSER_TOOL_NAMES } from './tools.js';
|
|
25
|
+
//# sourceMappingURL=adapters.d.ts.map
|