profclaw 2.0.0 → 2.4.0
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 +14 -2
- package/CHANGELOG.md +52 -0
- package/CONTRIBUTING.md +20 -0
- package/Dockerfile +39 -23
- package/README.md +178 -41
- package/config/pricing.yml +26 -2
- package/dist/agents/agent-summary.d.ts +44 -0
- package/dist/agents/agent-summary.js +176 -0
- package/dist/agents/auto-memory.d.ts +59 -0
- package/dist/agents/auto-memory.js +310 -0
- package/dist/agents/checkpoint-manager.d.ts +76 -0
- package/dist/agents/checkpoint-manager.js +156 -0
- package/dist/agents/circuit-breaker.d.ts +54 -0
- package/dist/agents/circuit-breaker.js +153 -0
- package/dist/agents/command-sandbox.d.ts +93 -0
- package/dist/agents/command-sandbox.js +235 -0
- package/dist/agents/context-compactor.d.ts +70 -0
- package/dist/agents/context-compactor.js +361 -0
- package/dist/agents/conversation-branch.d.ts +55 -0
- package/dist/agents/conversation-branch.js +115 -0
- package/dist/agents/error-recovery.d.ts +44 -0
- package/dist/agents/error-recovery.js +197 -0
- package/dist/agents/events.d.ts +76 -0
- package/dist/agents/events.js +8 -0
- package/dist/agents/executor-runner.d.ts +135 -0
- package/dist/agents/executor-runner.js +303 -0
- package/dist/agents/executor.d.ts +37 -1
- package/dist/agents/executor.js +606 -124
- package/dist/agents/file-snapshots.d.ts +72 -0
- package/dist/agents/file-snapshots.js +182 -0
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/orchestrator.d.ts +183 -0
- package/dist/agents/orchestrator.js +495 -0
- package/dist/agents/output-truncator.d.ts +59 -0
- package/dist/agents/output-truncator.js +128 -0
- package/dist/agents/permissions.d.ts +63 -0
- package/dist/agents/permissions.js +138 -0
- package/dist/agents/plan-mode.d.ts +71 -0
- package/dist/agents/plan-mode.js +186 -0
- package/dist/agents/prompt-suggestions.d.ts +33 -0
- package/dist/agents/prompt-suggestions.js +208 -0
- package/dist/agents/rate-limit-monitor.d.ts +56 -0
- package/dist/agents/rate-limit-monitor.js +224 -0
- package/dist/agents/receipt/receipt-cli.d.ts +43 -0
- package/dist/agents/receipt/receipt-cli.js +82 -0
- package/dist/agents/receipt/receipt-types.d.ts +136 -0
- package/dist/agents/receipt/receipt-types.js +19 -0
- package/dist/agents/receipt/receipt-verify.d.ts +19 -0
- package/dist/agents/receipt/receipt-verify.js +176 -0
- package/dist/agents/receipt/receipt-view.d.ts +29 -0
- package/dist/agents/receipt/receipt-view.js +227 -0
- package/dist/agents/receipt/receipt-writer.d.ts +47 -0
- package/dist/agents/receipt/receipt-writer.js +186 -0
- package/dist/agents/result-store.d.ts +43 -0
- package/dist/agents/result-store.js +145 -0
- package/dist/agents/session-diff.d.ts +49 -0
- package/dist/agents/session-diff.js +249 -0
- package/dist/agents/tool-loader.d.ts +65 -0
- package/dist/agents/tool-loader.js +273 -0
- package/dist/agents/tool-selector.d.ts +123 -0
- package/dist/agents/tool-selector.js +321 -0
- package/dist/agents/transcript.d.ts +96 -0
- package/dist/agents/transcript.js +267 -0
- package/dist/agents/verified-run-git.d.ts +49 -0
- package/dist/agents/verified-run-git.js +82 -0
- package/dist/agents/verified-run.d.ts +149 -0
- package/dist/agents/verified-run.js +402 -0
- package/dist/agents/verifier.d.ts +64 -0
- package/dist/agents/verifier.js +186 -0
- package/dist/agents/worktree-manager.d.ts +80 -0
- package/dist/agents/worktree-manager.js +203 -0
- package/dist/agents/worktree-tools.d.ts +47 -0
- package/dist/agents/worktree-tools.js +246 -0
- package/dist/auth/middleware.js +14 -0
- package/dist/chat/agentic-executor.d.ts +7 -0
- package/dist/chat/agentic-executor.js +263 -32
- package/dist/chat/conversations.d.ts +2 -0
- package/dist/chat/conversations.js +8 -0
- package/dist/chat/execution/executor.d.ts +8 -0
- package/dist/chat/execution/executor.js +157 -103
- package/dist/chat/execution/index.js +5 -1
- package/dist/chat/execution/sandbox.d.ts +8 -0
- package/dist/chat/execution/sandbox.js +25 -1
- package/dist/chat/execution/tool-router.js +40 -14
- package/dist/chat/execution/tools/canvas.d.ts +2 -2
- package/dist/chat/execution/tools/code-tools.d.ts +66 -0
- package/dist/chat/execution/tools/code-tools.js +353 -0
- package/dist/chat/execution/tools/complete-task.d.ts +2 -2
- package/dist/chat/execution/tools/cron-tool.d.ts +26 -10
- package/dist/chat/execution/tools/cron-tool.js +48 -3
- package/dist/chat/execution/tools/decompose-task.d.ts +58 -0
- package/dist/chat/execution/tools/decompose-task.js +166 -0
- package/dist/chat/execution/tools/exec.d.ts +5 -2
- package/dist/chat/execution/tools/exec.js +294 -155
- package/dist/chat/execution/tools/feed-tools.d.ts +77 -0
- package/dist/chat/execution/tools/feed-tools.js +142 -0
- package/dist/chat/execution/tools/file-ops.d.ts +1 -1
- package/dist/chat/execution/tools/github.d.ts +2 -2
- package/dist/chat/execution/tools/index.d.ts +14 -2
- package/dist/chat/execution/tools/index.js +86 -12
- package/dist/chat/execution/tools/integrations.d.ts +8 -8
- package/dist/chat/execution/tools/multi-patch.d.ts +53 -0
- package/dist/chat/execution/tools/multi-patch.js +373 -0
- package/dist/chat/execution/tools/openai-image-gen.d.ts +2 -2
- package/dist/chat/execution/tools/plan-tools.d.ts +80 -0
- package/dist/chat/execution/tools/plan-tools.js +134 -0
- package/dist/chat/execution/tools/profclaw-ops.d.ts +6 -6
- package/dist/chat/execution/tools/repl-tool.d.ts +46 -0
- package/dist/chat/execution/tools/repl-tool.js +207 -0
- package/dist/chat/execution/tools/sessions-send.d.ts +2 -2
- package/dist/chat/execution/tools/slack-actions.d.ts +2 -2
- package/dist/chat/execution/tools/system.d.ts +4 -4
- package/dist/chat/execution/tools/todo-tool.d.ts +72 -0
- package/dist/chat/execution/tools/todo-tool.js +152 -0
- package/dist/chat/execution/tools/tool-search.d.ts +50 -0
- package/dist/chat/execution/tools/tool-search.js +155 -0
- package/dist/chat/execution/tools/tts-speak.d.ts +2 -2
- package/dist/chat/execution/types.d.ts +21 -14
- package/dist/chat/execution/workflows/executor.d.ts +11 -0
- package/dist/chat/execution/workflows/executor.js +99 -1
- package/dist/chat/execution/workflows/types.d.ts +35 -2
- package/dist/chat/format/index.d.ts +1 -0
- package/dist/chat/format/index.js +1 -0
- package/dist/chat/format/markdown-convert.d.ts +23 -0
- package/dist/chat/format/markdown-convert.js +149 -0
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/chat/message-handler.js +58 -6
- package/dist/chat/meta-tool-handlers.d.ts +18 -0
- package/dist/chat/meta-tool-handlers.js +51 -0
- package/dist/chat/proactive/index.d.ts +62 -0
- package/dist/chat/proactive/index.js +147 -0
- package/dist/chat/prompt-adapter.js +2 -0
- package/dist/chat/providers/irc/index.d.ts +2 -2
- package/dist/chat/providers/telegram/index.d.ts +2 -0
- package/dist/chat/providers/telegram/index.js +21 -2
- package/dist/chat/system-prompts.d.ts +3 -3
- package/dist/chat/system-prompts.js +121 -61
- package/dist/chat/tool-handler.d.ts +2 -0
- package/dist/chat/tool-handler.js +47 -3
- package/dist/chat/tools.d.ts +6 -6
- package/dist/cli/commands/auth.js +64 -1
- package/dist/cli/commands/chat.js +1327 -138
- package/dist/cli/commands/doctor.js +222 -16
- package/dist/cli/commands/history.d.ts +3 -0
- package/dist/cli/commands/history.js +138 -0
- package/dist/cli/commands/import.d.ts +44 -0
- package/dist/cli/commands/import.js +526 -0
- package/dist/cli/commands/init.d.ts +13 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/onboard.js +210 -30
- package/dist/cli/commands/plan.d.ts +13 -0
- package/dist/cli/commands/plan.js +184 -0
- package/dist/cli/commands/receipt.d.ts +7 -0
- package/dist/cli/commands/receipt.js +90 -0
- package/dist/cli/commands/run.d.ts +28 -0
- package/dist/cli/commands/run.js +204 -0
- package/dist/cli/commands/serve.d.ts +7 -0
- package/dist/cli/commands/serve.js +77 -18
- package/dist/cli/commands/setup.js +84 -3
- package/dist/cli/commands/status.js +54 -0
- package/dist/cli/commands/tools.js +13 -13
- package/dist/cli/commands/tui.js +26 -1
- package/dist/cli/index.js +23 -0
- package/dist/cli/ink/App.d.ts +13 -0
- package/dist/cli/ink/App.js +6 -0
- package/dist/cli/ink/ChatApp.d.ts +60 -0
- package/dist/cli/ink/ChatApp.js +325 -0
- package/dist/cli/ink/DashboardApp.d.ts +3 -0
- package/dist/cli/ink/DashboardApp.js +143 -0
- package/dist/cli/ink/components/AgentStatus.d.ts +17 -0
- package/dist/cli/ink/components/AgentStatus.js +33 -0
- package/dist/cli/ink/components/ChannelList.d.ts +17 -0
- package/dist/cli/ink/components/ChannelList.js +33 -0
- package/dist/cli/ink/components/ConnectionStatus.d.ts +19 -0
- package/dist/cli/ink/components/ConnectionStatus.js +50 -0
- package/dist/cli/ink/components/CostBar.d.ts +19 -0
- package/dist/cli/ink/components/CostBar.js +35 -0
- package/dist/cli/ink/components/HookStatus.d.ts +15 -0
- package/dist/cli/ink/components/HookStatus.js +7 -0
- package/dist/cli/ink/components/PermissionPrompt.d.ts +21 -0
- package/dist/cli/ink/components/PermissionPrompt.js +51 -0
- package/dist/cli/ink/components/PlanView.d.ts +23 -0
- package/dist/cli/ink/components/PlanView.js +26 -0
- package/dist/cli/ink/components/ProviderList.d.ts +16 -0
- package/dist/cli/ink/components/ProviderList.js +16 -0
- package/dist/cli/ink/components/SessionHeader.d.ts +15 -0
- package/dist/cli/ink/components/SessionHeader.js +15 -0
- package/dist/cli/ink/components/StreamingMessage.d.ts +20 -0
- package/dist/cli/ink/components/StreamingMessage.js +27 -0
- package/dist/cli/ink/components/SuggestionBar.d.ts +15 -0
- package/dist/cli/ink/components/SuggestionBar.js +28 -0
- package/dist/cli/ink/components/SystemHealth.d.ts +20 -0
- package/dist/cli/ink/components/SystemHealth.js +39 -0
- package/dist/cli/ink/components/TaskList.d.ts +17 -0
- package/dist/cli/ink/components/TaskList.js +59 -0
- package/dist/cli/ink/components/ToolCall.d.ts +17 -0
- package/dist/cli/ink/components/ToolCall.js +43 -0
- package/dist/cli/ink/index.d.ts +23 -0
- package/dist/cli/ink/index.js +15 -0
- package/dist/cli/ink/keybindings.d.ts +35 -0
- package/dist/cli/ink/keybindings.js +105 -0
- package/dist/cli/ink/markdown-renderer.d.ts +47 -0
- package/dist/cli/ink/markdown-renderer.js +380 -0
- package/dist/cli/ink/output-styles.d.ts +39 -0
- package/dist/cli/ink/output-styles.js +119 -0
- package/dist/cli/interactive/auto-serve.d.ts +38 -0
- package/dist/cli/interactive/auto-serve.js +209 -0
- package/dist/cli/interactive/index.d.ts +25 -0
- package/dist/cli/interactive/index.js +23 -0
- package/dist/cli/interactive/picker.d.ts +28 -0
- package/dist/cli/interactive/picker.js +153 -0
- package/dist/cli/interactive/renderer.d.ts +26 -0
- package/dist/cli/interactive/renderer.js +555 -0
- package/dist/cli/interactive/repl.d.ts +14 -0
- package/dist/cli/interactive/repl.js +1516 -0
- package/dist/cli/interactive/stream-client.d.ts +59 -0
- package/dist/cli/interactive/stream-client.js +506 -0
- package/dist/cli/interactive/types.d.ts +121 -0
- package/dist/cli/interactive/types.js +10 -0
- package/dist/cli/utils/api.d.ts +9 -0
- package/dist/cli/utils/api.js +58 -2
- package/dist/costs/token-tracker.d.ts +10 -1
- package/dist/costs/token-tracker.js +37 -5
- package/dist/cron/natural-language.d.ts +54 -0
- package/dist/cron/natural-language.js +569 -0
- package/dist/cron/scheduler.d.ts +34 -4
- package/dist/cron/scheduler.js +141 -9
- package/dist/cron/templates.d.ts +1 -1
- package/dist/cron/templates.js +219 -0
- package/dist/feeds/feed-engine.d.ts +149 -0
- package/dist/feeds/feed-engine.js +600 -0
- package/dist/feeds/index.d.ts +9 -0
- package/dist/feeds/index.js +8 -0
- package/dist/gateway/router.js +6 -1
- package/dist/hooks/built-in/audit-log.d.ts +11 -0
- package/dist/hooks/built-in/audit-log.js +84 -0
- package/dist/hooks/built-in/cost-warning.d.ts +10 -0
- package/dist/hooks/built-in/cost-warning.js +59 -0
- package/dist/hooks/built-in/dangerous-tool.d.ts +32 -0
- package/dist/hooks/built-in/dangerous-tool.js +80 -0
- package/dist/hooks/built-in/index.d.ts +14 -0
- package/dist/hooks/built-in/index.js +20 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/loader.d.ts +17 -0
- package/dist/hooks/loader.js +142 -0
- package/dist/hooks/registry.d.ts +62 -0
- package/dist/hooks/registry.js +127 -0
- package/dist/integrations/web-search.js +6 -3
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.js +2 -0
- package/dist/memory/memory-service.js +14 -13
- package/dist/memory/observational.d.ts +62 -0
- package/dist/memory/observational.js +396 -0
- package/dist/middleware/content-filter.d.ts +22 -0
- package/dist/middleware/content-filter.js +69 -0
- package/dist/middleware/request-validator.d.ts +159 -0
- package/dist/middleware/request-validator.js +93 -0
- package/dist/plugins/sdk.d.ts +22 -0
- package/dist/plugins/sdk.js +17 -1
- package/dist/projects/types.d.ts +10 -10
- package/dist/providers/ai-sdk.d.ts +11 -0
- package/dist/providers/ai-sdk.js +111 -56
- package/dist/providers/core/models.js +114 -6
- package/dist/providers/core/types.d.ts +7 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers/prompt-cache.d.ts +68 -0
- package/dist/providers/prompt-cache.js +165 -0
- package/dist/providers/smart-router.d.ts +118 -0
- package/dist/providers/smart-router.js +693 -0
- package/dist/providers/types.d.ts +16 -16
- package/dist/routes/agents.js +50 -0
- package/dist/routes/auth.js +8 -1
- package/dist/routes/chat.js +280 -18
- package/dist/routes/costs.js +32 -0
- package/dist/routes/cron.js +80 -5
- package/dist/routes/feeds.d.ts +10 -0
- package/dist/routes/feeds.js +168 -0
- package/dist/routes/mcp.js +21 -0
- package/dist/routes/memory.js +130 -0
- package/dist/routes/skills.js +129 -0
- package/dist/routes/teams.d.ts +9 -0
- package/dist/routes/teams.js +210 -0
- package/dist/routes/tools.js +14 -0
- package/dist/routes/users.js +2 -0
- package/dist/server/route-loader.js +3 -1
- package/dist/server/stream-bridge.d.ts +19 -0
- package/dist/server/stream-bridge.js +38 -0
- package/dist/server.js +313 -36
- package/dist/skills/marketplace.d.ts +87 -0
- package/dist/skills/marketplace.js +268 -0
- package/dist/storage/index.d.ts +14 -0
- package/dist/storage/index.js +64 -3
- package/dist/storage/schema.d.ts +4 -4
- package/dist/storage/schema.js +1 -1
- package/dist/teams/index.d.ts +110 -0
- package/dist/teams/index.js +365 -0
- package/dist/tickets/types.d.ts +39 -39
- package/dist/types/summary.d.ts +5 -5
- package/dist/utils/auto-update.d.ts +23 -0
- package/dist/utils/auto-update.js +157 -0
- package/dist/utils/offline-detect.d.ts +55 -0
- package/dist/utils/offline-detect.js +121 -0
- package/dist/utils/pid-file.d.ts +36 -0
- package/dist/utils/pid-file.js +125 -0
- package/dist/utils/prevent-sleep.d.ts +27 -0
- package/dist/utils/prevent-sleep.js +95 -0
- package/dist/utils/sanitizer.d.ts +57 -0
- package/dist/utils/sanitizer.js +174 -0
- package/docker-compose.yml +13 -137
- package/package.json +31 -6
- package/skills/deploy-cloudflare/SKILL.md +62 -0
- package/skills/deploy-vercel/SKILL.md +67 -0
- package/skills/docker-deploy/SKILL.md +158 -0
- package/skills/full-stack-builder/SKILL.md +92 -0
- package/skills/humanizer/SKILL.md +488 -0
- package/skills/profclaw-assistant/SKILL.md +85 -56
- package/ui/dist/assets/ActivityView-Da6HQ8ws.js +1 -0
- package/ui/dist/assets/AgentList-H58R0kX3.js +1 -0
- package/ui/dist/assets/AnalyticsDashboard-B28AeRsc.js +1 -0
- package/ui/dist/assets/AreaChart-DwLzeAQ8.js +1 -0
- package/ui/dist/assets/CartesianChart-piKQsTAR.js +36 -0
- package/ui/dist/assets/ChatView-Dbj8rxU5.js +10 -0
- package/ui/dist/assets/CostsDashboard-C6F5df0F.js +1 -0
- package/ui/dist/assets/EstimateSelect-wga0rUKX.js +1 -0
- package/ui/dist/assets/FeedDashboard-Ef6FEzEf.js +1 -0
- package/ui/dist/assets/FloatingChatbot-0yhkUeCq.js +2 -0
- package/ui/dist/assets/InviteCodeManagement-tUXfx4Bc.js +2 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/ui/dist/assets/MarketplacePage-DGrLtolR.js +1 -0
- package/ui/dist/assets/{ProjectDetail--gPfvATB.js → ProjectDetail-BgWvA6UP.js} +2 -2
- package/ui/dist/assets/ProjectIcon-TDuliqwg.js +1 -0
- package/ui/dist/assets/ProjectList-DXgM4187.js +1 -0
- package/ui/dist/assets/{Settings-1kaf7VHE.js → Settings-xA8Zhi3p.js} +3 -3
- package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
- package/ui/dist/assets/{SummaryDetail-DV3AmONk.js → SummaryDetail-eedRfTtF.js} +2 -2
- package/ui/dist/assets/SummaryList-CLNX2P84.js +1 -0
- package/ui/dist/assets/TaskDetail-BtWclNiR.js +1 -0
- package/ui/dist/assets/TaskList-JjODAgSc.js +1 -0
- package/ui/dist/assets/TeamsPage-CBK5iAyx.js +1 -0
- package/ui/dist/assets/TicketBoard-C9aJNNYp.js +1 -0
- package/ui/dist/assets/TicketDetail-CV5JmL31.js +1 -0
- package/ui/dist/assets/TicketList-68V4lzUz.js +1 -0
- package/ui/dist/assets/UserManagement-DKTb6UpE.js +2 -0
- package/ui/dist/assets/ViewSwitcher-BvdQht2Y.js +1 -0
- package/ui/dist/assets/alert-dialog-O6qBOv_f.js +1 -0
- package/ui/dist/assets/{archive-BsLa7brF.js → archive-CX7UvZpf.js} +1 -1
- package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
- package/ui/dist/assets/{bug-CmZI7jqM.js → bug-3WX0394-.js} +1 -1
- package/ui/dist/assets/{calendar-Bf0t2B82.js → calendar-buq77TaS.js} +1 -1
- package/ui/dist/assets/{chevron-up-CoUsOvZj.js → chevron-up-4ymsBJRo.js} +1 -1
- package/ui/dist/assets/{circle-x-Dgw11LgT.js → circle-x-ByXtwR6Y.js} +1 -1
- package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
- package/ui/dist/assets/{cpu-DiPMQICV.js → cpu-CiuoCeDY.js} +1 -1
- package/ui/dist/assets/{database-BwTfupDi.js → database-BWXSBg5a.js} +1 -1
- package/ui/dist/assets/dialog-lDg4NvMV.js +1 -0
- package/ui/dist/assets/dollar-sign-Dmijd6DP.js +1 -0
- package/ui/dist/assets/{ellipsis-UJx4Xnf6.js → ellipsis-vT-5SVIp.js} +1 -1
- package/ui/dist/assets/{ellipsis-vertical-DoULYEKn.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
- package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
- package/ui/dist/assets/{file-code-B2UrJLwi.js → file-code-ChOWdKXf.js} +1 -1
- package/ui/dist/assets/{folder-open-BJi577JH.js → folder-open-CkOUbIiP.js} +1 -1
- package/ui/dist/assets/{funnel-PkaD_HSR.js → funnel-uZkoSPP-.js} +1 -1
- package/ui/dist/assets/{git-branch-C_K30am0.js → git-branch-CwvUxj7C.js} +1 -1
- package/ui/dist/assets/{git-commit-horizontal-IT6ecxWQ.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
- package/ui/dist/assets/{globe-f-jjCa_g.js → globe-D_WpJdsj.js} +1 -1
- package/ui/dist/assets/{hash-DNEv8Elo.js → hash-CA0hJ7vh.js} +1 -1
- package/ui/dist/assets/{history-BQSBo_1Q.js → history-CEWMLELs.js} +1 -1
- package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
- package/ui/dist/assets/{index-nS3EErDg.js → index-C1rhbml4.js} +3 -3
- package/ui/dist/assets/index-CR8gfCHv.js +1 -0
- package/ui/dist/assets/index-DVXMpWai.js +1 -0
- package/ui/dist/assets/index-DaDJMM2v.js +1 -0
- package/ui/dist/assets/index-Djdq_0xu.js +1 -0
- package/ui/dist/assets/index-M46Gcb8K.css +1 -0
- package/ui/dist/assets/index-sEBN7w8J.js +109 -0
- package/ui/dist/assets/layers-C6Mhf8Nk.js +1 -0
- package/ui/dist/assets/{layout-dashboard-CcKt1hXw.js → layout-dashboard-BRUM0kpT.js} +1 -1
- package/ui/dist/assets/{lightbulb-Jhp7FvbU.js → lightbulb-CN2q1O5l.js} +1 -1
- package/ui/dist/assets/{link-2-DdO7ostF.js → link-2-CC4E28yJ.js} +1 -1
- package/ui/dist/assets/markdown-renderer-C6ENbB0u.js +10 -0
- package/ui/dist/assets/markdown-renderer-CfVKi3_s.css +1 -0
- package/ui/dist/assets/{message-square-CBgH65X7.js → message-square-Bbb241am.js} +1 -1
- package/ui/dist/assets/package-CwT3IzFx.js +1 -0
- package/ui/dist/assets/{pencil-CYXCEPQh.js → pencil-CDmiHzoj.js} +1 -1
- package/ui/dist/assets/{play-d1ONaH0-.js → play-tjy5jMQX.js} +1 -1
- package/ui/dist/assets/popover-CFHZf3pE.js +1 -0
- package/ui/dist/assets/progress-BboUHuLf.js +1 -0
- package/ui/dist/assets/{rocket-DhvUetsk.js → rocket--8ZHgdXJ.js} +1 -1
- package/ui/dist/assets/select-n108rXny.js +1 -0
- package/ui/dist/assets/{send-P0r5D7td.js → send-Cu7MR2Qh.js} +1 -1
- package/ui/dist/assets/server-DmodxZp-.js +1 -0
- package/ui/dist/assets/{settings-2-ocj5uHGx.js → settings-2-CkRNqkxj.js} +1 -1
- package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
- package/ui/dist/assets/{shield-check-DfVdE34l.js → shield-check-ViI3nMKE.js} +1 -1
- package/ui/dist/assets/{shield-off-8l0J6R-8.js → shield-off-DN3tagkn.js} +1 -1
- package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
- package/ui/dist/assets/{smartphone-77_g3SQn.js → smartphone-5FghiXpA.js} +1 -1
- package/ui/dist/assets/{square-Ckzsr3Rn.js → square-DiNSx8K7.js} +1 -1
- package/ui/dist/assets/star-DhdFVidS.js +1 -0
- package/ui/dist/assets/switch-CIgVbZqQ.js +1 -0
- package/ui/dist/assets/table-BC56FVMV.js +1 -0
- package/ui/dist/assets/{tag-C35mgoEv.js → tag-CH_vQliw.js} +1 -1
- package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
- package/ui/dist/assets/{timer-DHJBS2w1.js → timer-CdGVTb60.js} +1 -1
- package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
- package/ui/dist/assets/{trash-2-keO5tKPE.js → trash-2-CucZJL0N.js} +1 -1
- package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
- package/ui/dist/assets/{trending-up-BBv8KbrY.js → trending-up-C5OYX2k2.js} +1 -1
- package/ui/dist/assets/vendor-query-C0p7b53x.js +4 -0
- package/ui/dist/assets/vendor-react-Mc5_kfYG.js +12 -0
- package/ui/dist/assets/vendor-ui-CXPAUBFv.js +51 -0
- package/ui/dist/assets/{wand-sparkles-BusQ52ZK.js → wand-sparkles-BaH6pJnc.js} +1 -1
- package/ui/dist/assets/{wrench-02YaOSiK.js → wrench-CjxjP6ok.js} +1 -1
- package/ui/dist/index.html +5 -2
- package/ui/dist/assets/ActivityView-BeshZXmE.js +0 -1
- package/ui/dist/assets/AgentList-QVHeldPi.js +0 -1
- package/ui/dist/assets/AnalyticsDashboard-C9R97dXE.js +0 -1
- package/ui/dist/assets/AreaChart-B73gaiVQ.js +0 -1
- package/ui/dist/assets/CartesianChart-CXYL2R-A.js +0 -36
- package/ui/dist/assets/ChatView-qjZErlrp.js +0 -10
- package/ui/dist/assets/CostsDashboard-O4DCLy1i.js +0 -1
- package/ui/dist/assets/EstimateSelect-1hQf4Osk.js +0 -1
- package/ui/dist/assets/FloatingChatbot-BZBzrJxd.js +0 -2
- package/ui/dist/assets/InviteCodeManagement-LEoGqYeA.js +0 -2
- package/ui/dist/assets/ProjectIcon-Chd_ofsw.js +0 -1
- package/ui/dist/assets/ProjectList-BvUfVB6c.js +0 -4
- package/ui/dist/assets/StatusIndicator-pRfkNcdV.js +0 -1
- package/ui/dist/assets/SummaryList-B6kXiTxL.js +0 -1
- package/ui/dist/assets/TaskDetail-CV6CzbOS.js +0 -1
- package/ui/dist/assets/TaskList-DL7brQKd.js +0 -1
- package/ui/dist/assets/TicketBoard-CrkkFj7C.js +0 -1
- package/ui/dist/assets/TicketDetail-hnnYclpD.js +0 -1
- package/ui/dist/assets/TicketList-CsDAyQCL.js +0 -1
- package/ui/dist/assets/UserManagement-BGFQyTSr.js +0 -2
- package/ui/dist/assets/ViewSwitcher-CnL0OqA8.js +0 -1
- package/ui/dist/assets/alert-dialog-SKM6Gjz4.js +0 -7
- package/ui/dist/assets/badge-CVHH1a-v.js +0 -1
- package/ui/dist/assets/brain-6o_RHVpe.js +0 -1
- package/ui/dist/assets/constants-Q5Zivl-a.js +0 -1
- package/ui/dist/assets/dialog-BUqN9Psj.js +0 -1
- package/ui/dist/assets/index-BUmnwPQr.js +0 -1
- package/ui/dist/assets/index-BfF5G4Cw.js +0 -1
- package/ui/dist/assets/index-C8N375c2.js +0 -1
- package/ui/dist/assets/index-CuxnqVVz.css +0 -1
- package/ui/dist/assets/index-CzMM3QOk.js +0 -1
- package/ui/dist/assets/index-lJlNPFVJ.js +0 -67
- package/ui/dist/assets/layers-jFqVrWMD.js +0 -1
- package/ui/dist/assets/markdown-renderer-n1ToC4XQ.js +0 -36
- package/ui/dist/assets/popover-CrmZgoWu.js +0 -1
- package/ui/dist/assets/progress-uv4SPkL5.js +0 -1
- package/ui/dist/assets/select-CeQ8AHGy.js +0 -1
- package/ui/dist/assets/server-CVHTZB72.js +0 -1
- package/ui/dist/assets/sheet-DuQExSho.js +0 -1
- package/ui/dist/assets/skeleton-TFiFJ3nB.js +0 -1
- package/ui/dist/assets/switch-CAePkd6k.js +0 -1
- package/ui/dist/assets/table-ZjAZ7hkt.js +0 -1
- package/ui/dist/assets/textarea-DsVPnSgR.js +0 -1
- package/ui/dist/assets/tooltip-BYmQ331W.js +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Loader
|
|
3
|
+
*
|
|
4
|
+
* Manages tool categorization and lazy loading for the agentic system.
|
|
5
|
+
* Provides search over tool categories so the AI can discover and enable
|
|
6
|
+
* tools on demand without paying the full context cost of all schemas.
|
|
7
|
+
*/
|
|
8
|
+
import type { ToolDefinition } from '../chat/execution/types.js';
|
|
9
|
+
export interface ToolCategory {
|
|
10
|
+
/** Unique slug for this category (e.g. "file_ops") */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Human-readable description shown to users and the AI */
|
|
13
|
+
description: string;
|
|
14
|
+
/** Keywords used for fuzzy search / auto-load decisions */
|
|
15
|
+
keywords: string[];
|
|
16
|
+
/** Canonical tool names that belong to this category */
|
|
17
|
+
tools: string[];
|
|
18
|
+
/** When true, these tools are always included in every session */
|
|
19
|
+
alwaysLoaded: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class ToolLoader {
|
|
22
|
+
private allTools;
|
|
23
|
+
private categories;
|
|
24
|
+
private loadedToolNames;
|
|
25
|
+
constructor(allTools: Map<string, ToolDefinition>);
|
|
26
|
+
/**
|
|
27
|
+
* Return the subset of tools that are always loaded (core session tools).
|
|
28
|
+
*/
|
|
29
|
+
getCoreTools(): ToolDefinition[];
|
|
30
|
+
/**
|
|
31
|
+
* Return all tools that have been loaded for the current session,
|
|
32
|
+
* including always_loaded plus any dynamically loaded categories/tools.
|
|
33
|
+
*/
|
|
34
|
+
getSessionTools(): ToolDefinition[];
|
|
35
|
+
/**
|
|
36
|
+
* Search categories by query string.
|
|
37
|
+
* Matches against category name, description, and keywords using
|
|
38
|
+
* case-insensitive substring matching; results are ranked by score.
|
|
39
|
+
*/
|
|
40
|
+
search(query: string): ToolCategory[];
|
|
41
|
+
/**
|
|
42
|
+
* Load all tools belonging to a named category into the active session.
|
|
43
|
+
* Silently ignores tool names that are not registered.
|
|
44
|
+
*/
|
|
45
|
+
loadCategory(categoryName: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Load a single tool by name into the active session.
|
|
48
|
+
* Silently ignores names that are not registered.
|
|
49
|
+
*/
|
|
50
|
+
loadTool(toolName: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Return all registered categories.
|
|
53
|
+
*/
|
|
54
|
+
getCategories(): ToolCategory[];
|
|
55
|
+
/**
|
|
56
|
+
* Register a custom category.
|
|
57
|
+
* Will overwrite any existing category with the same name.
|
|
58
|
+
*/
|
|
59
|
+
registerCategory(category: ToolCategory): void;
|
|
60
|
+
/**
|
|
61
|
+
* Check whether a specific tool is currently loaded into the session.
|
|
62
|
+
*/
|
|
63
|
+
isLoaded(toolName: string): boolean;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=tool-loader.d.ts.map
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Loader
|
|
3
|
+
*
|
|
4
|
+
* Manages tool categorization and lazy loading for the agentic system.
|
|
5
|
+
* Provides search over tool categories so the AI can discover and enable
|
|
6
|
+
* tools on demand without paying the full context cost of all schemas.
|
|
7
|
+
*/
|
|
8
|
+
// Built-in Category Definitions
|
|
9
|
+
const BUILT_IN_CATEGORIES = [
|
|
10
|
+
{
|
|
11
|
+
name: 'always_loaded',
|
|
12
|
+
description: 'Core tools that are always available in every session',
|
|
13
|
+
keywords: ['core', 'always', 'base', 'default', 'essential'],
|
|
14
|
+
tools: [
|
|
15
|
+
'read_file',
|
|
16
|
+
'write_file',
|
|
17
|
+
'search_files',
|
|
18
|
+
'exec',
|
|
19
|
+
'git_status',
|
|
20
|
+
'git_commit',
|
|
21
|
+
'complete_task',
|
|
22
|
+
'search_available_tools',
|
|
23
|
+
],
|
|
24
|
+
alwaysLoaded: true,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'file_ops',
|
|
28
|
+
description: 'Extended file system operations: edit, grep, patch, directory tree',
|
|
29
|
+
keywords: ['file', 'filesystem', 'read', 'write', 'edit', 'grep', 'search', 'patch', 'directory'],
|
|
30
|
+
tools: [
|
|
31
|
+
'read_file',
|
|
32
|
+
'write_file',
|
|
33
|
+
'search_files',
|
|
34
|
+
'grep',
|
|
35
|
+
'edit_file',
|
|
36
|
+
'directory_tree',
|
|
37
|
+
'patch_apply',
|
|
38
|
+
'multi_patch',
|
|
39
|
+
],
|
|
40
|
+
alwaysLoaded: false,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'browser',
|
|
44
|
+
description: 'Browser automation tools for web scraping and UI testing',
|
|
45
|
+
keywords: ['browser', 'playwright', 'navigate', 'click', 'screenshot', 'web', 'automation', 'scrape'],
|
|
46
|
+
tools: [
|
|
47
|
+
'browser_navigate',
|
|
48
|
+
'browser_click',
|
|
49
|
+
'browser_fill',
|
|
50
|
+
'browser_screenshot',
|
|
51
|
+
'browser_evaluate',
|
|
52
|
+
],
|
|
53
|
+
alwaysLoaded: false,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'integration',
|
|
57
|
+
description: 'Third-party integration tools: Slack, Discord, Telegram, screen capture, clipboard',
|
|
58
|
+
keywords: ['slack', 'discord', 'telegram', 'notification', 'clipboard', 'screen', 'capture', 'integration'],
|
|
59
|
+
tools: [
|
|
60
|
+
'slack_actions',
|
|
61
|
+
'discord_actions',
|
|
62
|
+
'telegram_actions',
|
|
63
|
+
'screen_capture',
|
|
64
|
+
'clipboard_read',
|
|
65
|
+
'clipboard_write',
|
|
66
|
+
'notify',
|
|
67
|
+
],
|
|
68
|
+
alwaysLoaded: false,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'git_advanced',
|
|
72
|
+
description: 'Advanced Git operations beyond status and commit',
|
|
73
|
+
keywords: ['git', 'diff', 'log', 'branch', 'stash', 'remote', 'merge', 'rebase', 'version control'],
|
|
74
|
+
tools: [
|
|
75
|
+
'git_status',
|
|
76
|
+
'git_diff',
|
|
77
|
+
'git_log',
|
|
78
|
+
'git_commit',
|
|
79
|
+
'git_branch',
|
|
80
|
+
'git_stash',
|
|
81
|
+
'git_remote',
|
|
82
|
+
],
|
|
83
|
+
alwaysLoaded: false,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'canvas',
|
|
87
|
+
description: 'Canvas rendering and image generation tools',
|
|
88
|
+
keywords: ['canvas', 'image', 'render', 'draw', 'generate', 'visual', 'graphic'],
|
|
89
|
+
tools: [
|
|
90
|
+
'canvas_render',
|
|
91
|
+
'openai_image_gen',
|
|
92
|
+
'image_analyze',
|
|
93
|
+
],
|
|
94
|
+
alwaysLoaded: false,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'voice',
|
|
98
|
+
description: 'Text-to-speech and voice synthesis tools',
|
|
99
|
+
keywords: ['voice', 'tts', 'speech', 'audio', 'speak', 'synthesize'],
|
|
100
|
+
tools: [
|
|
101
|
+
'tts_speak',
|
|
102
|
+
],
|
|
103
|
+
alwaysLoaded: false,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'memory',
|
|
107
|
+
description: 'Conversation memory management: search, retrieval, and statistics',
|
|
108
|
+
keywords: ['memory', 'remember', 'recall', 'search', 'context', 'history', 'retrieve'],
|
|
109
|
+
tools: [
|
|
110
|
+
'memory_search',
|
|
111
|
+
'memory_get',
|
|
112
|
+
'memory_stats',
|
|
113
|
+
],
|
|
114
|
+
alwaysLoaded: false,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'system',
|
|
118
|
+
description: 'System information, environment variables, and process management',
|
|
119
|
+
keywords: ['system', 'env', 'environment', 'process', 'info', 'hardware', 'os', 'which', 'path'],
|
|
120
|
+
tools: [
|
|
121
|
+
'env',
|
|
122
|
+
'system_info',
|
|
123
|
+
'process_list',
|
|
124
|
+
'path_info',
|
|
125
|
+
'which',
|
|
126
|
+
],
|
|
127
|
+
alwaysLoaded: false,
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
// Tool Loader
|
|
131
|
+
export class ToolLoader {
|
|
132
|
+
allTools;
|
|
133
|
+
categories;
|
|
134
|
+
loadedToolNames;
|
|
135
|
+
constructor(allTools) {
|
|
136
|
+
this.allTools = allTools;
|
|
137
|
+
this.categories = new Map();
|
|
138
|
+
this.loadedToolNames = new Set();
|
|
139
|
+
// Register built-in categories
|
|
140
|
+
for (const category of BUILT_IN_CATEGORIES) {
|
|
141
|
+
this.categories.set(category.name, category);
|
|
142
|
+
}
|
|
143
|
+
// Pre-load always_loaded tools
|
|
144
|
+
const alwaysLoaded = this.categories.get('always_loaded');
|
|
145
|
+
if (alwaysLoaded) {
|
|
146
|
+
for (const toolName of alwaysLoaded.tools) {
|
|
147
|
+
if (this.allTools.has(toolName)) {
|
|
148
|
+
this.loadedToolNames.add(toolName);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Return the subset of tools that are always loaded (core session tools).
|
|
155
|
+
*/
|
|
156
|
+
getCoreTools() {
|
|
157
|
+
const core = this.categories.get('always_loaded');
|
|
158
|
+
if (!core)
|
|
159
|
+
return [];
|
|
160
|
+
return core.tools
|
|
161
|
+
.map((name) => this.allTools.get(name))
|
|
162
|
+
.filter((tool) => tool !== undefined);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Return all tools that have been loaded for the current session,
|
|
166
|
+
* including always_loaded plus any dynamically loaded categories/tools.
|
|
167
|
+
*/
|
|
168
|
+
getSessionTools() {
|
|
169
|
+
return Array.from(this.loadedToolNames)
|
|
170
|
+
.map((name) => this.allTools.get(name))
|
|
171
|
+
.filter((tool) => tool !== undefined);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Search categories by query string.
|
|
175
|
+
* Matches against category name, description, and keywords using
|
|
176
|
+
* case-insensitive substring matching; results are ranked by score.
|
|
177
|
+
*/
|
|
178
|
+
search(query) {
|
|
179
|
+
if (!query.trim()) {
|
|
180
|
+
return Array.from(this.categories.values());
|
|
181
|
+
}
|
|
182
|
+
const terms = query
|
|
183
|
+
.toLowerCase()
|
|
184
|
+
.split(/\s+/)
|
|
185
|
+
.filter((t) => t.length > 0);
|
|
186
|
+
const scored = [];
|
|
187
|
+
for (const category of this.categories.values()) {
|
|
188
|
+
let score = 0;
|
|
189
|
+
for (const term of terms) {
|
|
190
|
+
// Exact name match gets highest weight
|
|
191
|
+
if (category.name === term) {
|
|
192
|
+
score += 10;
|
|
193
|
+
}
|
|
194
|
+
else if (category.name.includes(term)) {
|
|
195
|
+
score += 5;
|
|
196
|
+
}
|
|
197
|
+
// Description match
|
|
198
|
+
if (category.description.toLowerCase().includes(term)) {
|
|
199
|
+
score += 3;
|
|
200
|
+
}
|
|
201
|
+
// Keyword match
|
|
202
|
+
for (const keyword of category.keywords) {
|
|
203
|
+
if (keyword === term) {
|
|
204
|
+
score += 4;
|
|
205
|
+
}
|
|
206
|
+
else if (keyword.includes(term)) {
|
|
207
|
+
score += 2;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Tool name match
|
|
211
|
+
for (const toolName of category.tools) {
|
|
212
|
+
if (toolName.includes(term)) {
|
|
213
|
+
score += 1;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (score > 0) {
|
|
218
|
+
scored.push({ category, score });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return scored
|
|
222
|
+
.sort((a, b) => b.score - a.score)
|
|
223
|
+
.map((s) => s.category);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Load all tools belonging to a named category into the active session.
|
|
227
|
+
* Silently ignores tool names that are not registered.
|
|
228
|
+
*/
|
|
229
|
+
loadCategory(categoryName) {
|
|
230
|
+
const category = this.categories.get(categoryName);
|
|
231
|
+
if (!category) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
for (const toolName of category.tools) {
|
|
235
|
+
if (this.allTools.has(toolName)) {
|
|
236
|
+
this.loadedToolNames.add(toolName);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Load a single tool by name into the active session.
|
|
242
|
+
* Silently ignores names that are not registered.
|
|
243
|
+
*/
|
|
244
|
+
loadTool(toolName) {
|
|
245
|
+
if (this.allTools.has(toolName)) {
|
|
246
|
+
this.loadedToolNames.add(toolName);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Return all registered categories.
|
|
251
|
+
*/
|
|
252
|
+
getCategories() {
|
|
253
|
+
return Array.from(this.categories.values());
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Register a custom category.
|
|
257
|
+
* Will overwrite any existing category with the same name.
|
|
258
|
+
*/
|
|
259
|
+
registerCategory(category) {
|
|
260
|
+
this.categories.set(category.name, category);
|
|
261
|
+
// If the new category is marked always_loaded, immediately load its tools
|
|
262
|
+
if (category.alwaysLoaded) {
|
|
263
|
+
this.loadCategory(category.name);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Check whether a specific tool is currently loaded into the session.
|
|
268
|
+
*/
|
|
269
|
+
isLoaded(toolName) {
|
|
270
|
+
return this.loadedToolNames.has(toolName);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=tool-loader.js.map
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Selector
|
|
3
|
+
*
|
|
4
|
+
* Sends only the tool schemas that are likely needed on a given turn instead
|
|
5
|
+
* of every registered tool. Selection is a cheap, deterministic heuristic (no
|
|
6
|
+
* LLM call): a small core set, plus groups whose keywords appear in the user
|
|
7
|
+
* message or whose tools were used recently. The model can request more groups
|
|
8
|
+
* with the `load_tools` meta-tool.
|
|
9
|
+
*
|
|
10
|
+
* Cache stability: within a session the set of loaded groups only grows, and
|
|
11
|
+
* the output is always sorted by tool name, so the tool prefix of the prompt
|
|
12
|
+
* stays byte-identical between turns unless a new group is genuinely needed.
|
|
13
|
+
*
|
|
14
|
+
* Env:
|
|
15
|
+
* PROFCLAW_TOOL_SELECTION off/0/false/no disables (default on)
|
|
16
|
+
* PROFCLAW_TOOL_SELECTION_MIN_TOOLS skip selection when the tool count is at
|
|
17
|
+
* or below this number (default 12)
|
|
18
|
+
* PROFCLAW_TOOL_SELECTION_KEEP_UNGROUPED
|
|
19
|
+
* keep tools that match no group, such as
|
|
20
|
+
* MCP or plugin tools (default true)
|
|
21
|
+
*/
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
export interface SelectableTool {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
parameters: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface ToolGroup {
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
/** Exact tool names, or prefixes ending in `*` */
|
|
32
|
+
tools: string[];
|
|
33
|
+
/** Matched against the lowercased user message */
|
|
34
|
+
keywords: RegExp;
|
|
35
|
+
}
|
|
36
|
+
export declare const LOAD_TOOLS_NAME = "load_tools";
|
|
37
|
+
export declare const FETCH_RESULT_NAME = "fetch_result";
|
|
38
|
+
/** Tools that are always sent. Keep this small. */
|
|
39
|
+
export declare const CORE_TOOL_NAMES: readonly string[];
|
|
40
|
+
export declare const TOOL_GROUPS: readonly ToolGroup[];
|
|
41
|
+
export declare function isToolSelectionEnabled(): boolean;
|
|
42
|
+
/** Group name a tool belongs to, or undefined for core/ungrouped tools. */
|
|
43
|
+
export declare function groupOfTool(name: string): string | undefined;
|
|
44
|
+
export declare class ToolSelectorSession {
|
|
45
|
+
/** Groups loaded so far. Only ever grows, which keeps the prefix stable. */
|
|
46
|
+
private readonly loaded;
|
|
47
|
+
getLoadedGroups(): string[];
|
|
48
|
+
/** Mark groups loaded. Returns the names that were valid. */
|
|
49
|
+
loadGroups(names: string[]): string[];
|
|
50
|
+
/** Keep the group of a tool that was just executed loaded. */
|
|
51
|
+
noteToolUse(toolName: string): void;
|
|
52
|
+
/** Add groups whose keywords match the user message. */
|
|
53
|
+
noteMessage(message: string): string[];
|
|
54
|
+
/**
|
|
55
|
+
* Select tools for this turn. Output is sorted by name and, apart from
|
|
56
|
+
* newly loaded groups, identical across calls in the same session.
|
|
57
|
+
*/
|
|
58
|
+
select<T extends SelectableTool>(all: readonly T[], message?: string): T[];
|
|
59
|
+
}
|
|
60
|
+
export declare function getToolSelectorSession(sessionId: string): ToolSelectorSession;
|
|
61
|
+
export declare function resetToolSelectorSessions(): void;
|
|
62
|
+
declare const LoadToolsSchema: z.ZodObject<{
|
|
63
|
+
groups: z.ZodArray<z.ZodString, "many">;
|
|
64
|
+
invoke: z.ZodOptional<z.ZodObject<{
|
|
65
|
+
tool: z.ZodString;
|
|
66
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
67
|
+
}, "strip", z.ZodTypeAny, {
|
|
68
|
+
tool: string;
|
|
69
|
+
args?: Record<string, unknown> | undefined;
|
|
70
|
+
}, {
|
|
71
|
+
tool: string;
|
|
72
|
+
args?: Record<string, unknown> | undefined;
|
|
73
|
+
}>>;
|
|
74
|
+
}, "strip", z.ZodTypeAny, {
|
|
75
|
+
groups: string[];
|
|
76
|
+
invoke?: {
|
|
77
|
+
tool: string;
|
|
78
|
+
args?: Record<string, unknown> | undefined;
|
|
79
|
+
} | undefined;
|
|
80
|
+
}, {
|
|
81
|
+
groups: string[];
|
|
82
|
+
invoke?: {
|
|
83
|
+
tool: string;
|
|
84
|
+
args?: Record<string, unknown> | undefined;
|
|
85
|
+
} | undefined;
|
|
86
|
+
}>;
|
|
87
|
+
declare const FetchResultSchema: z.ZodObject<{
|
|
88
|
+
result_id: z.ZodString;
|
|
89
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
90
|
+
length: z.ZodOptional<z.ZodNumber>;
|
|
91
|
+
}, "strip", z.ZodTypeAny, {
|
|
92
|
+
result_id: string;
|
|
93
|
+
length?: number | undefined;
|
|
94
|
+
offset?: number | undefined;
|
|
95
|
+
}, {
|
|
96
|
+
result_id: string;
|
|
97
|
+
length?: number | undefined;
|
|
98
|
+
offset?: number | undefined;
|
|
99
|
+
}>;
|
|
100
|
+
export type LoadToolsArgs = z.infer<typeof LoadToolsSchema>;
|
|
101
|
+
export type FetchResultArgs = z.infer<typeof FetchResultSchema>;
|
|
102
|
+
export declare function parseLoadToolsArgs(args: unknown): LoadToolsArgs | null;
|
|
103
|
+
export declare function parseFetchResultArgs(args: unknown): FetchResultArgs | null;
|
|
104
|
+
/** Stable, compact meta-tool definitions. Description text must not vary. */
|
|
105
|
+
export declare function getMetaTools(includeFetchResult: boolean): SelectableTool[];
|
|
106
|
+
/** Rough tokens for one tool schema as sent to the provider (about 4 chars per token). */
|
|
107
|
+
export declare function estimateToolTokens(tool: SelectableTool): number;
|
|
108
|
+
export declare function estimateToolsTokens(tools: readonly SelectableTool[]): number;
|
|
109
|
+
/** Compact JSON schema for a tool, used in load_tools results. */
|
|
110
|
+
export declare function describeTool(tool: SelectableTool): {
|
|
111
|
+
name: string;
|
|
112
|
+
description: string;
|
|
113
|
+
parameters: unknown;
|
|
114
|
+
};
|
|
115
|
+
/** Tools belonging to a named group, sorted by name. */
|
|
116
|
+
export declare function toolsInGroup<T extends SelectableTool>(all: readonly T[], groupName: string): T[];
|
|
117
|
+
/**
|
|
118
|
+
* Select tools for one agentic request and append the meta-tools. When
|
|
119
|
+
* selection is disabled the input list is returned unchanged.
|
|
120
|
+
*/
|
|
121
|
+
export declare function selectToolsForRequest<T extends SelectableTool>(tools: readonly T[], sessionId: string, message: string): Array<T | SelectableTool>;
|
|
122
|
+
export {};
|
|
123
|
+
//# sourceMappingURL=tool-selector.d.ts.map
|