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,484 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills Loader
|
|
3
|
+
*
|
|
4
|
+
* Parses SKILL.md files with YAML frontmatter and loads skills from
|
|
5
|
+
* multiple sources with precedence ordering.
|
|
6
|
+
*
|
|
7
|
+
* Loading precedence (lowest to highest):
|
|
8
|
+
* 1. Extra dirs (config.load.extraDirs)
|
|
9
|
+
* 2. Bundled (built-in skills)
|
|
10
|
+
* 3. Managed (~/.profclaw/skills/)
|
|
11
|
+
* 4. Workspace (<project>/skills/)
|
|
12
|
+
*
|
|
13
|
+
* Later sources override earlier ones by skill name.
|
|
14
|
+
*/
|
|
15
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
16
|
+
import { join, basename } from 'node:path';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { execFile } from 'node:child_process';
|
|
19
|
+
import { promisify } from 'node:util';
|
|
20
|
+
import { logger } from '../utils/logger.js';
|
|
21
|
+
import { DEFAULT_SKILLS_CONFIG, } from './types.js';
|
|
22
|
+
import { compileSkill } from './compiler.js';
|
|
23
|
+
const execFileAsync = promisify(execFile);
|
|
24
|
+
// Compiled Skill Registry (populated during loadSkillFromDir)
|
|
25
|
+
/** In-memory registry of compiled skills, keyed by skillKey/skillName */
|
|
26
|
+
const compiledSkillRegistry = new Map();
|
|
27
|
+
/**
|
|
28
|
+
* Return the compiled (model-adaptive) version of a skill by its ID.
|
|
29
|
+
* Returns undefined if the skill has not been loaded yet.
|
|
30
|
+
*/
|
|
31
|
+
export function getCompiledSkill(skillId) {
|
|
32
|
+
return compiledSkillRegistry.get(skillId);
|
|
33
|
+
}
|
|
34
|
+
// SKILL.md Parser
|
|
35
|
+
const FRONTMATTER_REGEX = /^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/;
|
|
36
|
+
/**
|
|
37
|
+
* Parse a SKILL.md file into frontmatter + instructions
|
|
38
|
+
*/
|
|
39
|
+
export function parseSkillMd(content) {
|
|
40
|
+
const match = content.match(FRONTMATTER_REGEX);
|
|
41
|
+
if (!match) {
|
|
42
|
+
// No frontmatter - treat entire content as instructions
|
|
43
|
+
return {
|
|
44
|
+
frontmatter: { name: 'unknown', description: '' },
|
|
45
|
+
instructions: content,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const [, yamlStr, instructions] = match;
|
|
49
|
+
// Parse YAML frontmatter (simple key-value parser, no dependency needed)
|
|
50
|
+
const rawFrontmatter = parseSimpleYaml(yamlStr);
|
|
51
|
+
const frontmatter = {
|
|
52
|
+
name: rawFrontmatter.name ?? 'unknown',
|
|
53
|
+
description: rawFrontmatter.description ?? '',
|
|
54
|
+
'user-invocable': rawFrontmatter['user-invocable'],
|
|
55
|
+
'disable-model-invocation': rawFrontmatter['disable-model-invocation'],
|
|
56
|
+
'command-dispatch': rawFrontmatter['command-dispatch'],
|
|
57
|
+
'command-tool': rawFrontmatter['command-tool'],
|
|
58
|
+
'command-arg-mode': rawFrontmatter['command-arg-mode'],
|
|
59
|
+
metadata: rawFrontmatter.metadata,
|
|
60
|
+
};
|
|
61
|
+
// Parse extended metadata from JSON string
|
|
62
|
+
let metadata;
|
|
63
|
+
if (frontmatter.metadata) {
|
|
64
|
+
try {
|
|
65
|
+
const parsed = JSON.parse(frontmatter.metadata);
|
|
66
|
+
// Support both { profclaw: {...} } and direct format
|
|
67
|
+
metadata = parsed.profclaw || parsed.openclaw || parsed;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
logger.warn(`[Skills] Failed to parse metadata JSON for skill: ${frontmatter.name}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { frontmatter, metadata, instructions: instructions.trim() };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Simple YAML parser for frontmatter (handles common cases without js-yaml dep)
|
|
77
|
+
*/
|
|
78
|
+
function parseSimpleYaml(yaml) {
|
|
79
|
+
const result = {};
|
|
80
|
+
let multilineKey = '';
|
|
81
|
+
let multilineValue = '';
|
|
82
|
+
let inMultiline = false;
|
|
83
|
+
for (const line of yaml.split('\n')) {
|
|
84
|
+
// Handle multiline values (metadata: |)
|
|
85
|
+
if (inMultiline) {
|
|
86
|
+
if (line.startsWith(' ') || line.startsWith('\t') || line.trim() === '') {
|
|
87
|
+
multilineValue += (multilineValue ? '\n' : '') + line.replace(/^ /, '');
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// End of multiline
|
|
92
|
+
result[multilineKey] = multilineValue.trim();
|
|
93
|
+
inMultiline = false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const colonIndex = line.indexOf(':');
|
|
97
|
+
if (colonIndex === -1)
|
|
98
|
+
continue;
|
|
99
|
+
const key = line.slice(0, colonIndex).trim();
|
|
100
|
+
const rawValue = line.slice(colonIndex + 1).trim();
|
|
101
|
+
if (!key)
|
|
102
|
+
continue;
|
|
103
|
+
// Check for multiline indicator
|
|
104
|
+
if (rawValue === '|' || rawValue === '>') {
|
|
105
|
+
multilineKey = key;
|
|
106
|
+
multilineValue = '';
|
|
107
|
+
inMultiline = true;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
// Parse value
|
|
111
|
+
if (rawValue === 'true') {
|
|
112
|
+
result[key] = true;
|
|
113
|
+
}
|
|
114
|
+
else if (rawValue === 'false') {
|
|
115
|
+
result[key] = false;
|
|
116
|
+
}
|
|
117
|
+
else if (/^\d+$/.test(rawValue)) {
|
|
118
|
+
result[key] = parseInt(rawValue, 10);
|
|
119
|
+
}
|
|
120
|
+
else if (/^\d+\.\d+$/.test(rawValue)) {
|
|
121
|
+
result[key] = parseFloat(rawValue);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Strip quotes
|
|
125
|
+
result[key] = rawValue.replace(/^['"]|['"]$/g, '');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Handle final multiline value
|
|
129
|
+
if (inMultiline) {
|
|
130
|
+
result[multilineKey] = multilineValue.trim();
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
// Skill Loading
|
|
135
|
+
/**
|
|
136
|
+
* Load a single skill from a directory
|
|
137
|
+
*/
|
|
138
|
+
async function loadSkillFromDir(dirPath, source, config) {
|
|
139
|
+
const skillMdPath = join(dirPath, 'SKILL.md');
|
|
140
|
+
try {
|
|
141
|
+
const content = await readFile(skillMdPath, 'utf-8');
|
|
142
|
+
const { frontmatter, metadata, instructions } = parseSkillMd(content);
|
|
143
|
+
const skillName = frontmatter.name || basename(dirPath);
|
|
144
|
+
const skillKey = metadata?.skillKey || skillName;
|
|
145
|
+
const skillConfig = config?.entries?.[skillKey];
|
|
146
|
+
// Build invocation policy
|
|
147
|
+
const invocation = {
|
|
148
|
+
userInvocable: frontmatter['user-invocable'] !== false,
|
|
149
|
+
modelInvocable: frontmatter['disable-model-invocation'] !== true,
|
|
150
|
+
};
|
|
151
|
+
// Check eligibility
|
|
152
|
+
const { eligible, errors } = await checkEligibility(metadata, skillConfig);
|
|
153
|
+
// Build command spec
|
|
154
|
+
let command;
|
|
155
|
+
if (invocation.userInvocable) {
|
|
156
|
+
const cmdName = sanitizeCommandName(skillName);
|
|
157
|
+
command = {
|
|
158
|
+
name: cmdName,
|
|
159
|
+
skillName,
|
|
160
|
+
description: (frontmatter.description || '').slice(0, 100),
|
|
161
|
+
};
|
|
162
|
+
if (frontmatter['command-dispatch'] === 'tool' && frontmatter['command-tool']) {
|
|
163
|
+
command.dispatch = {
|
|
164
|
+
kind: 'tool',
|
|
165
|
+
toolName: frontmatter['command-tool'],
|
|
166
|
+
argMode: frontmatter['command-arg-mode'] || 'raw',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Compile skill instructions for model-adaptive injection (9.1)
|
|
171
|
+
const compiled = compileSkill(skillKey, skillName, instructions);
|
|
172
|
+
compiledSkillRegistry.set(skillKey, compiled);
|
|
173
|
+
return {
|
|
174
|
+
name: skillName,
|
|
175
|
+
description: frontmatter.description || '',
|
|
176
|
+
source,
|
|
177
|
+
dirPath,
|
|
178
|
+
skillMdPath,
|
|
179
|
+
frontmatter,
|
|
180
|
+
metadata,
|
|
181
|
+
instructions,
|
|
182
|
+
invocation,
|
|
183
|
+
eligible: metadata?.always || eligible,
|
|
184
|
+
eligibilityErrors: errors,
|
|
185
|
+
enabled: skillConfig?.enabled !== false,
|
|
186
|
+
command,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// SKILL.md doesn't exist or can't be read - skip silently
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Load skills from a directory containing skill subdirectories
|
|
196
|
+
*/
|
|
197
|
+
async function loadSkillsFromDir(parentDir, source, config) {
|
|
198
|
+
const skills = [];
|
|
199
|
+
try {
|
|
200
|
+
const entries = await readdir(parentDir, { withFileTypes: true });
|
|
201
|
+
for (const entry of entries) {
|
|
202
|
+
if (!entry.isDirectory())
|
|
203
|
+
continue;
|
|
204
|
+
// Skip hidden directories
|
|
205
|
+
if (entry.name.startsWith('.'))
|
|
206
|
+
continue;
|
|
207
|
+
const skillDir = join(parentDir, entry.name);
|
|
208
|
+
const skill = await loadSkillFromDir(skillDir, source, config);
|
|
209
|
+
if (skill) {
|
|
210
|
+
skills.push(skill);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Directory doesn't exist - that's fine
|
|
216
|
+
}
|
|
217
|
+
return skills;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Load all skills from all sources with precedence ordering
|
|
221
|
+
*/
|
|
222
|
+
export async function loadAllSkills(params) {
|
|
223
|
+
const { workspaceDir, extraDirs, config = DEFAULT_SKILLS_CONFIG } = params;
|
|
224
|
+
const skillMap = new Map();
|
|
225
|
+
// Merge extraDirs from params with config
|
|
226
|
+
const allExtraDirs = [...(config.load?.extraDirs ?? []), ...(extraDirs ?? [])];
|
|
227
|
+
// 1. Extra dirs (lowest precedence)
|
|
228
|
+
for (const dir of allExtraDirs) {
|
|
229
|
+
const skills = await loadSkillsFromDir(dir, 'plugin', config);
|
|
230
|
+
for (const skill of skills) {
|
|
231
|
+
skillMap.set(skill.name, skill);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// 2. Bundled skills
|
|
235
|
+
// Navigate relative to the project root
|
|
236
|
+
const bundledDir = join(process.cwd(), 'skills');
|
|
237
|
+
const bundledSkills = await loadSkillsFromDir(bundledDir, 'bundled', config);
|
|
238
|
+
for (const skill of bundledSkills) {
|
|
239
|
+
// Check allowlist (empty = all allowed)
|
|
240
|
+
if ((config.allowBundled?.length ?? 0) === 0 || config.allowBundled?.includes(skill.name)) {
|
|
241
|
+
skillMap.set(skill.name, skill);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// 3. Managed skills (~/.profclaw/skills/)
|
|
245
|
+
const managedDir = join(homedir(), '.profclaw', 'skills');
|
|
246
|
+
const managedSkills = await loadSkillsFromDir(managedDir, 'managed', config);
|
|
247
|
+
for (const skill of managedSkills) {
|
|
248
|
+
skillMap.set(skill.name, skill);
|
|
249
|
+
}
|
|
250
|
+
// 4. Workspace skills (highest precedence)
|
|
251
|
+
if (workspaceDir) {
|
|
252
|
+
const workspaceSkillsDir = join(workspaceDir, 'skills');
|
|
253
|
+
const workspaceSkills = await loadSkillsFromDir(workspaceSkillsDir, 'workspace', config);
|
|
254
|
+
for (const skill of workspaceSkills) {
|
|
255
|
+
skillMap.set(skill.name, skill);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
const allSkills = Array.from(skillMap.values());
|
|
259
|
+
logger.info(`[Skills] Loaded ${allSkills.length} skills ` +
|
|
260
|
+
`(${bundledSkills.length} bundled, ${managedSkills.length} managed)`);
|
|
261
|
+
return allSkills;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Filter skills by eligibility and configuration
|
|
265
|
+
*/
|
|
266
|
+
export function filterSkills(skills, config) {
|
|
267
|
+
return skills.filter((skill) => {
|
|
268
|
+
// Check if skill is enabled
|
|
269
|
+
if (!skill.enabled)
|
|
270
|
+
return false;
|
|
271
|
+
// Check eligibility
|
|
272
|
+
if (!skill.eligible)
|
|
273
|
+
return false;
|
|
274
|
+
// Check config-based disabling
|
|
275
|
+
const skillKey = skill.metadata?.skillKey ?? skill.name;
|
|
276
|
+
const skillConfig = config?.entries?.[skillKey];
|
|
277
|
+
if (skillConfig?.enabled === false)
|
|
278
|
+
return false;
|
|
279
|
+
return true;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
// Eligibility Checking
|
|
283
|
+
/** Cache for binary existence checks */
|
|
284
|
+
const binaryCache = new Map();
|
|
285
|
+
/**
|
|
286
|
+
* Check if a binary exists in PATH
|
|
287
|
+
*/
|
|
288
|
+
export async function hasBinary(name) {
|
|
289
|
+
const cached = binaryCache.get(name);
|
|
290
|
+
if (cached !== undefined)
|
|
291
|
+
return cached;
|
|
292
|
+
try {
|
|
293
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
294
|
+
await execFileAsync(cmd, [name], { timeout: 3000 });
|
|
295
|
+
binaryCache.set(name, true);
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
binaryCache.set(name, false);
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/** Clear binary cache (for testing or after installs) */
|
|
304
|
+
export function clearBinaryCache() {
|
|
305
|
+
binaryCache.clear();
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Check if a skill's requirements are met
|
|
309
|
+
*/
|
|
310
|
+
export async function checkEligibility(metadata, skillConfig) {
|
|
311
|
+
const errors = [];
|
|
312
|
+
if (!metadata?.requires) {
|
|
313
|
+
return { eligible: true, errors };
|
|
314
|
+
}
|
|
315
|
+
const { requires } = metadata;
|
|
316
|
+
// Check OS
|
|
317
|
+
if (metadata.os && !metadata.os.includes(process.platform)) {
|
|
318
|
+
errors.push(`Unsupported platform: ${process.platform} (requires: ${metadata.os.join(', ')})`);
|
|
319
|
+
}
|
|
320
|
+
// Check required binaries (all must exist)
|
|
321
|
+
if (requires.bins) {
|
|
322
|
+
for (const bin of requires.bins) {
|
|
323
|
+
if (!(await hasBinary(bin))) {
|
|
324
|
+
errors.push(`Missing binary: ${bin}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Check any binaries (at least one must exist)
|
|
329
|
+
if (requires.anyBins && requires.anyBins.length > 0) {
|
|
330
|
+
let hasAny = false;
|
|
331
|
+
for (const bin of requires.anyBins) {
|
|
332
|
+
if (await hasBinary(bin)) {
|
|
333
|
+
hasAny = true;
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (!hasAny) {
|
|
338
|
+
errors.push(`Missing one of: ${requires.anyBins.join(', ')}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Check environment variables
|
|
342
|
+
if (requires.env) {
|
|
343
|
+
for (const envVar of requires.env) {
|
|
344
|
+
// Check skill config first, then process.env
|
|
345
|
+
const hasValue = skillConfig?.apiKey && metadata.primaryEnv === envVar
|
|
346
|
+
? true
|
|
347
|
+
: !!process.env[envVar];
|
|
348
|
+
if (!hasValue) {
|
|
349
|
+
errors.push(`Missing env: ${envVar}`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return { eligible: errors.length === 0, errors };
|
|
354
|
+
}
|
|
355
|
+
// Skill Snapshot
|
|
356
|
+
/**
|
|
357
|
+
* Build a skills snapshot with prompt for AI model (synchronous version)
|
|
358
|
+
* Use this when you already have loaded skills.
|
|
359
|
+
*/
|
|
360
|
+
export function buildSkillSnapshotSync(skills, version) {
|
|
361
|
+
const eligible = skills.filter(s => s.eligible && s.enabled);
|
|
362
|
+
// Build prompt
|
|
363
|
+
const lines = [];
|
|
364
|
+
if (eligible.length > 0) {
|
|
365
|
+
lines.push('## Available Skills\n');
|
|
366
|
+
lines.push('The following skills extend your capabilities:\n');
|
|
367
|
+
for (const skill of eligible) {
|
|
368
|
+
const emoji = skill.metadata?.emoji || '';
|
|
369
|
+
lines.push(`### ${emoji} ${skill.name}`);
|
|
370
|
+
lines.push(skill.description);
|
|
371
|
+
// Include instructions if not too long (progressive disclosure)
|
|
372
|
+
if (skill.instructions.length <= 2000) {
|
|
373
|
+
lines.push('');
|
|
374
|
+
lines.push(skill.instructions);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
lines.push(`\n*Full instructions available (${Math.round(skill.instructions.length / 4)} tokens)*`);
|
|
378
|
+
}
|
|
379
|
+
lines.push('');
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
const snapshot = {
|
|
383
|
+
prompt: lines.join('\n'),
|
|
384
|
+
skills: eligible.map(s => ({
|
|
385
|
+
name: s.name,
|
|
386
|
+
description: s.description,
|
|
387
|
+
primaryEnv: s.metadata?.primaryEnv,
|
|
388
|
+
source: s.source,
|
|
389
|
+
})),
|
|
390
|
+
entries: eligible,
|
|
391
|
+
version,
|
|
392
|
+
builtAt: Date.now(),
|
|
393
|
+
};
|
|
394
|
+
return { prompt: lines.join('\n'), snapshot };
|
|
395
|
+
}
|
|
396
|
+
// Skill Status
|
|
397
|
+
/**
|
|
398
|
+
* Build detailed status for all skills
|
|
399
|
+
*/
|
|
400
|
+
export function buildSkillsStatus(skills, version) {
|
|
401
|
+
const sources = { bundled: 0, managed: 0, workspace: 0, plugin: 0 };
|
|
402
|
+
const skillStatuses = skills.map(skill => {
|
|
403
|
+
sources[skill.source]++;
|
|
404
|
+
const missingBins = [];
|
|
405
|
+
const missingEnv = [];
|
|
406
|
+
const missingConfig = [];
|
|
407
|
+
// Parse errors to find missing items
|
|
408
|
+
for (const err of skill.eligibilityErrors) {
|
|
409
|
+
if (err.startsWith('Missing binary:'))
|
|
410
|
+
missingBins.push(err.replace('Missing binary: ', ''));
|
|
411
|
+
if (err.startsWith('Missing env:'))
|
|
412
|
+
missingEnv.push(err.replace('Missing env: ', ''));
|
|
413
|
+
if (err.startsWith('Missing config:'))
|
|
414
|
+
missingConfig.push(err.replace('Missing config: ', ''));
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
name: skill.name,
|
|
418
|
+
source: skill.source,
|
|
419
|
+
enabled: skill.enabled,
|
|
420
|
+
eligible: skill.eligible,
|
|
421
|
+
errors: skill.eligibilityErrors,
|
|
422
|
+
missing: { bins: missingBins, env: missingEnv, config: missingConfig },
|
|
423
|
+
installOptions: skill.metadata?.install || [],
|
|
424
|
+
metadata: skill.metadata,
|
|
425
|
+
};
|
|
426
|
+
});
|
|
427
|
+
return {
|
|
428
|
+
totalLoaded: skills.length,
|
|
429
|
+
totalEligible: skills.filter(s => s.eligible).length,
|
|
430
|
+
totalEnabled: skills.filter(s => s.enabled && s.eligible).length,
|
|
431
|
+
skills: skillStatuses,
|
|
432
|
+
sources,
|
|
433
|
+
version,
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
// Utility
|
|
437
|
+
/** Sanitize a skill name for use as a chat command (alphanumeric + underscore, max 32 chars) */
|
|
438
|
+
function sanitizeCommandName(name) {
|
|
439
|
+
return name
|
|
440
|
+
.toLowerCase()
|
|
441
|
+
.replace(/[^a-z0-9_-]/g, '-')
|
|
442
|
+
.replace(/-+/g, '-')
|
|
443
|
+
.slice(0, 32);
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Apply per-skill environment overrides
|
|
447
|
+
* Returns a cleanup function to restore original env
|
|
448
|
+
*/
|
|
449
|
+
export function applySkillEnvOverrides(skills, config) {
|
|
450
|
+
const original = {};
|
|
451
|
+
for (const skill of skills) {
|
|
452
|
+
if (!skill.eligible || !skill.enabled)
|
|
453
|
+
continue;
|
|
454
|
+
const skillKey = skill.metadata?.skillKey || skill.name;
|
|
455
|
+
const skillConfig = config.entries[skillKey];
|
|
456
|
+
if (!skillConfig)
|
|
457
|
+
continue;
|
|
458
|
+
// Apply API key as primary env
|
|
459
|
+
if (skillConfig.apiKey && skill.metadata?.primaryEnv) {
|
|
460
|
+
const envVar = skill.metadata.primaryEnv;
|
|
461
|
+
original[envVar] = process.env[envVar];
|
|
462
|
+
process.env[envVar] = skillConfig.apiKey;
|
|
463
|
+
}
|
|
464
|
+
// Apply custom env overrides
|
|
465
|
+
if (skillConfig.env) {
|
|
466
|
+
for (const [key, value] of Object.entries(skillConfig.env)) {
|
|
467
|
+
original[key] = process.env[key];
|
|
468
|
+
process.env[key] = value;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
// Return cleanup function
|
|
473
|
+
return () => {
|
|
474
|
+
for (const [key, value] of Object.entries(original)) {
|
|
475
|
+
if (value === undefined) {
|
|
476
|
+
delete process.env[key];
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
process.env[key] = value;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills Prompt Builder
|
|
3
|
+
*
|
|
4
|
+
* Formats eligible skills into prompt context for the LLM.
|
|
5
|
+
* Following OpenClaw's XML format for compatibility.
|
|
6
|
+
*/
|
|
7
|
+
import type { SkillEntry, SkillSnapshot, SkillsSystemConfig } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Format multiple skills for prompt injection
|
|
10
|
+
* Following OpenClaw's XML format
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatSkillsForPrompt(entries: SkillEntry[]): string;
|
|
13
|
+
/**
|
|
14
|
+
* Build a skill snapshot for a session
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildSkillSnapshot(params: {
|
|
17
|
+
workspaceDir?: string;
|
|
18
|
+
config?: SkillsSystemConfig;
|
|
19
|
+
entries?: SkillEntry[];
|
|
20
|
+
version?: number;
|
|
21
|
+
}): Promise<SkillSnapshot>;
|
|
22
|
+
/**
|
|
23
|
+
* Build skills prompt for a single run
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildSkillsPrompt(params: {
|
|
26
|
+
workspaceDir?: string;
|
|
27
|
+
config?: SkillsSystemConfig;
|
|
28
|
+
entries?: SkillEntry[];
|
|
29
|
+
}): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve skills prompt from snapshot or build fresh
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveSkillsPromptForRun(params: {
|
|
34
|
+
skillsSnapshot?: SkillSnapshot;
|
|
35
|
+
entries?: SkillEntry[];
|
|
36
|
+
config?: SkillsSystemConfig;
|
|
37
|
+
workspaceDir?: string;
|
|
38
|
+
}): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Get skill entry by name from snapshot
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSkillFromSnapshot(snapshot: SkillSnapshot, name: string): SkillEntry | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Calculate approximate token cost of skills prompt
|
|
45
|
+
* Based on OpenClaw's formula: ~4 chars per token
|
|
46
|
+
*/
|
|
47
|
+
export declare function estimateSkillsTokenCost(entries: SkillEntry[]): number;
|
|
48
|
+
//# sourceMappingURL=prompt-builder.d.ts.map
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills Prompt Builder
|
|
3
|
+
*
|
|
4
|
+
* Formats eligible skills into prompt context for the LLM.
|
|
5
|
+
* Following OpenClaw's XML format for compatibility.
|
|
6
|
+
*/
|
|
7
|
+
import { loadAllSkills, filterSkills } from './loader.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Escape XML special characters
|
|
11
|
+
*/
|
|
12
|
+
function escapeXml(text) {
|
|
13
|
+
return text
|
|
14
|
+
.replace(/&/g, '&')
|
|
15
|
+
.replace(/</g, '<')
|
|
16
|
+
.replace(/>/g, '>')
|
|
17
|
+
.replace(/"/g, '"')
|
|
18
|
+
.replace(/'/g, ''');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format a single skill entry for prompt injection
|
|
22
|
+
*/
|
|
23
|
+
function formatSkillForPrompt(entry) {
|
|
24
|
+
const name = escapeXml(entry.name);
|
|
25
|
+
const description = escapeXml(entry.description);
|
|
26
|
+
const location = escapeXml(entry.skillMdPath);
|
|
27
|
+
return `<skill>
|
|
28
|
+
<name>${name}</name>
|
|
29
|
+
<description>${description}</description>
|
|
30
|
+
<location>${location}</location>
|
|
31
|
+
<content>
|
|
32
|
+
${entry.instructions}
|
|
33
|
+
</content>
|
|
34
|
+
</skill>`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Format multiple skills for prompt injection
|
|
38
|
+
* Following OpenClaw's XML format
|
|
39
|
+
*/
|
|
40
|
+
export function formatSkillsForPrompt(entries) {
|
|
41
|
+
if (entries.length === 0) {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
const formatted = entries.map(formatSkillForPrompt).join('\n\n');
|
|
45
|
+
return `<available_skills>
|
|
46
|
+
The following skills are available. Use them to understand how to accomplish tasks:
|
|
47
|
+
|
|
48
|
+
${formatted}
|
|
49
|
+
</available_skills>`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build a skill snapshot for a session
|
|
53
|
+
*/
|
|
54
|
+
export async function buildSkillSnapshot(params) {
|
|
55
|
+
const { workspaceDir, config, entries: providedEntries, version = 1 } = params;
|
|
56
|
+
// Load entries if not provided
|
|
57
|
+
const allEntries = providedEntries ?? await loadAllSkills({
|
|
58
|
+
workspaceDir,
|
|
59
|
+
extraDirs: config?.load?.extraDirs,
|
|
60
|
+
});
|
|
61
|
+
// Filter to eligible skills
|
|
62
|
+
const eligible = filterSkills(allEntries, config);
|
|
63
|
+
// Filter out skills that shouldn't be in the model prompt
|
|
64
|
+
const promptEntries = eligible.filter((entry) => entry.invocation.modelInvocable);
|
|
65
|
+
// Build prompt
|
|
66
|
+
const prompt = formatSkillsForPrompt(promptEntries);
|
|
67
|
+
logger.info(`[Skills] Built snapshot with ${eligible.length} eligible skills (${promptEntries.length} for prompt)`);
|
|
68
|
+
return {
|
|
69
|
+
prompt,
|
|
70
|
+
skills: eligible.map((entry) => ({
|
|
71
|
+
name: entry.name,
|
|
72
|
+
description: entry.description,
|
|
73
|
+
primaryEnv: entry.metadata?.primaryEnv,
|
|
74
|
+
source: entry.source,
|
|
75
|
+
})),
|
|
76
|
+
entries: eligible,
|
|
77
|
+
version,
|
|
78
|
+
builtAt: Date.now(),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build skills prompt for a single run
|
|
83
|
+
*/
|
|
84
|
+
export async function buildSkillsPrompt(params) {
|
|
85
|
+
const snapshot = await buildSkillSnapshot(params);
|
|
86
|
+
return snapshot.prompt;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolve skills prompt from snapshot or build fresh
|
|
90
|
+
*/
|
|
91
|
+
export async function resolveSkillsPromptForRun(params) {
|
|
92
|
+
// Use cached snapshot if available
|
|
93
|
+
const snapshotPrompt = params.skillsSnapshot?.prompt?.trim();
|
|
94
|
+
if (snapshotPrompt) {
|
|
95
|
+
return snapshotPrompt;
|
|
96
|
+
}
|
|
97
|
+
// Build from entries if provided
|
|
98
|
+
if (params.entries && params.entries.length > 0) {
|
|
99
|
+
return buildSkillsPrompt({
|
|
100
|
+
workspaceDir: params.workspaceDir,
|
|
101
|
+
entries: params.entries,
|
|
102
|
+
config: params.config,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// No skills available
|
|
106
|
+
return '';
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get skill entry by name from snapshot
|
|
110
|
+
*/
|
|
111
|
+
export function getSkillFromSnapshot(snapshot, name) {
|
|
112
|
+
return snapshot.entries?.find((s) => s.name === name);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Calculate approximate token cost of skills prompt
|
|
116
|
+
* Based on OpenClaw's formula: ~4 chars per token
|
|
117
|
+
*/
|
|
118
|
+
export function estimateSkillsTokenCost(entries) {
|
|
119
|
+
if (entries.length === 0) {
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
// Base overhead: ~195 chars
|
|
123
|
+
let totalChars = 195;
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
// Per skill: ~97 chars + field lengths
|
|
126
|
+
totalChars += 97;
|
|
127
|
+
totalChars += entry.name.length;
|
|
128
|
+
totalChars += entry.description.length;
|
|
129
|
+
totalChars += entry.skillMdPath.length;
|
|
130
|
+
totalChars += entry.instructions.length;
|
|
131
|
+
}
|
|
132
|
+
// Rough estimate: ~4 chars per token
|
|
133
|
+
return Math.ceil(totalChars / 4);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=prompt-builder.js.map
|