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
|
@@ -9,15 +9,15 @@
|
|
|
9
9
|
import { MODEL_ALIASES } from '../providers/core/models.js';
|
|
10
10
|
import { getSkillsRegistry } from '../skills/index.js';
|
|
11
11
|
// === Core profClaw Context ===
|
|
12
|
-
export const PROFCLAW_CONTEXT = `You are profClaw
|
|
13
|
-
|
|
14
|
-
profClaw is a task orchestration platform for AI-assisted development - managing tickets, routing work to AI agents, and tracking progress.
|
|
12
|
+
export const PROFCLAW_CONTEXT = `You are profClaw, a personal AI assistant running inside profClaw engine.
|
|
13
|
+
You help with coding, research, automation, and general tasks. You have access to tools - use them.
|
|
15
14
|
|
|
16
15
|
## Response Style
|
|
17
|
-
- Be
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
16
|
+
- Be concise and direct. No filler, no preamble.
|
|
17
|
+
- Do NOT use emoji headers, LaTeX, or excessive formatting.
|
|
18
|
+
- Use short paragraphs and plain markdown (headers, bold, code blocks only when needed).
|
|
19
|
+
- Match the user's tone — casual question gets a casual answer.
|
|
20
|
+
- Lead with the answer, then explain only if needed.`;
|
|
21
21
|
// === Grounding Suffix (appended to prevent hallucinations) ===
|
|
22
22
|
export const GROUNDING_SUFFIX = `
|
|
23
23
|
|
|
@@ -35,48 +35,62 @@ If asked to "run" or "execute" something, explain that you can help write or dra
|
|
|
35
35
|
// === Tool-Enabled Mode Suffix (replaces grounding when tools are available) ===
|
|
36
36
|
export const TOOL_ENABLED_SUFFIX = `
|
|
37
37
|
|
|
38
|
-
##
|
|
39
|
-
You have
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
4. If a tool fails, explain the error and suggest alternatives
|
|
51
|
-
|
|
52
|
-
**IMPORTANT**: When a tool returns "pending" or "requires approval", tell the user you're waiting for their approval in the UI, then STOP and wait. Do not continue until approval is given.
|
|
53
|
-
|
|
54
|
-
**After approval**: Once a tool is approved and executed, summarize the results and continue helping the user.`;
|
|
38
|
+
## Tools — YOU MUST USE THEM
|
|
39
|
+
You have real tools that execute actions. You are NOT limited to text responses.
|
|
40
|
+
|
|
41
|
+
ALWAYS call a tool when the user asks you to:
|
|
42
|
+
- Search the web → call web_search
|
|
43
|
+
- Read a URL or website → call web_fetch
|
|
44
|
+
- Read a file → call read_file
|
|
45
|
+
- Run a command → call exec
|
|
46
|
+
- Write a file → call write_file
|
|
47
|
+
|
|
48
|
+
Do NOT say "I can't browse the web" or "I can't access files." You CAN. Call the tool.
|
|
49
|
+
If you're unsure, call the tool anyway — it's better to try and fail than refuse.`;
|
|
55
50
|
// === Agent Mode Suffix (for autonomous operation) ===
|
|
56
51
|
export const AGENT_MODE_SUFFIX = `
|
|
57
52
|
|
|
53
|
+
## Tool Call Style
|
|
54
|
+
Do not narrate routine tool calls - just call the tool.
|
|
55
|
+
Narrate only for multi-step work, complex problems, or sensitive actions.
|
|
56
|
+
When a tool exists for an action, use it directly. Never say "I can't do that" when a tool can.
|
|
57
|
+
|
|
58
58
|
## Tool Usage
|
|
59
|
-
You have
|
|
60
|
-
|
|
61
|
-
**
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
**
|
|
73
|
-
- Chain tools
|
|
74
|
-
- Use parallel
|
|
75
|
-
- Do NOT ask
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
59
|
+
You have tools. Use them when the task requires external data or actions.
|
|
60
|
+
|
|
61
|
+
**ALWAYS use tools for:**
|
|
62
|
+
- Any search/lookup/research request -> web_search
|
|
63
|
+
- Reading a URL/website -> web_fetch
|
|
64
|
+
- File operations -> read_file, write_file, edit_file, grep
|
|
65
|
+
- Running commands -> exec
|
|
66
|
+
- Git/GitHub operations -> git_*, github_pr, create_pr
|
|
67
|
+
- Code quality -> typecheck, lint, build, test_run
|
|
68
|
+
- "What is X?" about anything specific -> web_search (do NOT guess)
|
|
69
|
+
|
|
70
|
+
**Skip tools only for:** greetings, thanks, simple math, questions about yourself.
|
|
71
|
+
|
|
72
|
+
**Rules:**
|
|
73
|
+
- Chain tools for multi-step tasks. Do not stop after one call.
|
|
74
|
+
- Use parallel calls when steps are independent.
|
|
75
|
+
- Do NOT ask permission. Just execute.
|
|
76
|
+
- If a tool fails, try an alternative approach.
|
|
77
|
+
- After completing work, call complete_task with a brief summary.
|
|
78
|
+
- For text-only replies, do NOT call complete_task.
|
|
79
|
+
|
|
80
|
+
## Skills
|
|
81
|
+
You have access to skills (see Available Skills list). Before starting a complex task:
|
|
82
|
+
1. Scan the skills list for a relevant skill
|
|
83
|
+
2. If found, read the skill's SKILL.md with read_file to get detailed instructions
|
|
84
|
+
3. Follow the skill's workflow
|
|
85
|
+
|
|
86
|
+
## Workspace
|
|
87
|
+
Treat the current directory as your workspace. Use relative paths.
|
|
88
|
+
When modifying code: read first, then edit, then verify (typecheck/test).
|
|
89
|
+
|
|
90
|
+
## Safety
|
|
91
|
+
Do not pursue independent goals beyond the user's request.
|
|
92
|
+
Prioritize safety and human oversight. If instructions conflict, ask.
|
|
93
|
+
Do not manipulate access controls or bypass safeguards.`;
|
|
80
94
|
export const CHAT_PRESETS = [
|
|
81
95
|
{
|
|
82
96
|
id: 'profclaw-assistant',
|
|
@@ -236,6 +250,36 @@ export async function buildSystemPrompt(presetId, context, options) {
|
|
|
236
250
|
// Find the preset
|
|
237
251
|
const preset = CHAT_PRESETS.find((p) => p.id === presetId) || CHAT_PRESETS[0];
|
|
238
252
|
let prompt = preset.prompt;
|
|
253
|
+
// Inject workspace context (CLAUDE.md, project type)
|
|
254
|
+
// OpenClaw pattern: load project context files into system prompt
|
|
255
|
+
try {
|
|
256
|
+
const { existsSync, readFileSync } = await import('node:fs');
|
|
257
|
+
const { join } = await import('node:path');
|
|
258
|
+
const cwd = process.cwd();
|
|
259
|
+
const contextFiles = [];
|
|
260
|
+
// Only inject MEMORY.md (lightweight project context)
|
|
261
|
+
// AGENTS.md/CLAUDE.md are dev docs, not useful for chat — they cause
|
|
262
|
+
// small models to regurgitate raw context instead of answering naturally
|
|
263
|
+
const candidates = ['MEMORY.md'];
|
|
264
|
+
const maxChars = 800; // Keep tight for small models
|
|
265
|
+
for (const file of candidates) {
|
|
266
|
+
const path = join(cwd, file);
|
|
267
|
+
if (existsSync(path)) {
|
|
268
|
+
try {
|
|
269
|
+
const content = readFileSync(path, 'utf-8').slice(0, maxChars);
|
|
270
|
+
contextFiles.push({ name: file, content });
|
|
271
|
+
}
|
|
272
|
+
catch { /* skip unreadable */ }
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (contextFiles.length > 0) {
|
|
276
|
+
prompt += '\n\n# Background (do NOT repeat this to the user)\n';
|
|
277
|
+
for (const f of contextFiles) {
|
|
278
|
+
prompt += `\n${f.content}\n`;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch { /* skip on error */ }
|
|
239
283
|
// Inject dynamic context if available
|
|
240
284
|
if (context) {
|
|
241
285
|
const contextParts = [];
|
|
@@ -275,12 +319,11 @@ ${context.ticket.description ? `- **Description**: ${context.ticket.description}
|
|
|
275
319
|
|
|
276
320
|
The user is currently viewing or discussing this ticket.`);
|
|
277
321
|
}
|
|
278
|
-
|
|
322
|
+
// Only include activity when there's meaningful data (saves tokens on quiet instances)
|
|
323
|
+
if (context.recentActivity && (context.recentActivity.tasksCompleted > 0 || context.recentActivity.tasksPending > 0)) {
|
|
279
324
|
contextParts.push(`
|
|
280
|
-
##
|
|
281
|
-
|
|
282
|
-
- Tasks pending: ${context.recentActivity.tasksPending}
|
|
283
|
-
- Active agents: ${context.recentActivity.activeAgents.join(', ') || 'None'}`);
|
|
325
|
+
## Activity
|
|
326
|
+
${context.recentActivity.tasksCompleted} completed, ${context.recentActivity.tasksPending} pending`);
|
|
284
327
|
}
|
|
285
328
|
if (context.user) {
|
|
286
329
|
contextParts.push(`
|
|
@@ -292,20 +335,37 @@ ${context.user.role ? `- Role: ${context.user.role}` : ''}`);
|
|
|
292
335
|
prompt += '\n\n---\n' + contextParts.join('\n');
|
|
293
336
|
}
|
|
294
337
|
}
|
|
295
|
-
// Add model aliases section (
|
|
296
|
-
|
|
338
|
+
// Add model aliases section — skip for local models (saves ~150 tokens)
|
|
339
|
+
const isLocalModel = context?.runtime?.provider === 'ollama';
|
|
340
|
+
if (options?.includeModelAliases !== false && !isLocalModel) {
|
|
297
341
|
prompt += buildModelAliasesSection();
|
|
298
342
|
}
|
|
299
|
-
// Inject skills
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
343
|
+
// Inject skills summary — only for tool-enabled/agent modes
|
|
344
|
+
// Regular chat doesn't need the full skill list (saves ~800 tokens per message)
|
|
345
|
+
if (options?.enableTools || options?.agentMode) {
|
|
346
|
+
try {
|
|
347
|
+
const registry = getSkillsRegistry();
|
|
348
|
+
const entries = registry.getAllEntries();
|
|
349
|
+
if (entries.length > 0) {
|
|
350
|
+
// Only include top 15 most relevant skills, not all 55
|
|
351
|
+
const prioritySkills = entries
|
|
352
|
+
.filter((e) => e.enabled !== false)
|
|
353
|
+
.sort((a, b) => {
|
|
354
|
+
const pa = a.metadata?.priority ?? 0;
|
|
355
|
+
const pb = b.metadata?.priority ?? 0;
|
|
356
|
+
// Name tie-break keeps the cached prompt prefix byte-stable
|
|
357
|
+
return pb - pa || (a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
|
|
358
|
+
})
|
|
359
|
+
.slice(0, 15);
|
|
360
|
+
const skillLines = prioritySkills
|
|
361
|
+
.map((e) => `- ${e.name}: ${e.description || 'No description'}`)
|
|
362
|
+
.join('\n');
|
|
363
|
+
prompt += `\n\n## Skills (${entries.length} available, top ${prioritySkills.length} shown)\nUse read_file on skills/<name>/SKILL.md for details.\n${skillLines}`;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
// Skills not initialized yet - skip
|
|
305
368
|
}
|
|
306
|
-
}
|
|
307
|
-
catch {
|
|
308
|
-
// Skills not initialized yet - skip
|
|
309
369
|
}
|
|
310
370
|
// Add appropriate suffix based on mode
|
|
311
371
|
if (options?.agentMode) {
|
|
@@ -25,6 +25,8 @@ export interface ChatToolHandler {
|
|
|
25
25
|
}>;
|
|
26
26
|
/** Handle approval decision */
|
|
27
27
|
handleApproval(approvalId: string, decision: 'allow-once' | 'allow-always' | 'deny'): Promise<ToolExecutionResult | null>;
|
|
28
|
+
/** Delete spilled tool-result temp files. Call when the request/run ends. */
|
|
29
|
+
dispose(): Promise<void>;
|
|
28
30
|
}
|
|
29
31
|
export declare function createChatToolHandler(options: ChatToolHandlerOptions): Promise<ChatToolHandler>;
|
|
30
32
|
/**
|
|
@@ -9,6 +9,10 @@ import { randomUUID } from 'node:crypto';
|
|
|
9
9
|
import { getToolExecutor, getToolRegistry, initializeToolExecution, } from './execution/index.js';
|
|
10
10
|
import { logger } from '../utils/logger.js';
|
|
11
11
|
import { SAFE_BROWSER_TOOL_NAMES } from '../browser/index.js';
|
|
12
|
+
import { ResultStore } from '../agents/result-store.js';
|
|
13
|
+
import { truncateAndStore, isTruncationEnabled } from '../agents/output-truncator.js';
|
|
14
|
+
import { LOAD_TOOLS_NAME, FETCH_RESULT_NAME, getToolSelectorSession, } from '../agents/tool-selector.js';
|
|
15
|
+
import { runLoadTools, runFetchResult } from './meta-tool-handlers.js';
|
|
12
16
|
// In-Memory Session Manager for Chat
|
|
13
17
|
class ChatSessionManager {
|
|
14
18
|
sessions = new Map();
|
|
@@ -78,6 +82,23 @@ export async function createChatToolHandler(options) {
|
|
|
78
82
|
const registry = getToolRegistry();
|
|
79
83
|
const executor = getToolExecutor();
|
|
80
84
|
const sessionManager = new ChatSessionManager();
|
|
85
|
+
const resultStore = new ResultStore(options.conversationId.replace(/[^a-zA-Z0-9_-]/g, '_'));
|
|
86
|
+
/** Cap large results before they reach the model; the full result stays in the store. */
|
|
87
|
+
const capForModel = async (toolName, toolCallId, data) => {
|
|
88
|
+
if (!isTruncationEnabled() || toolName === FETCH_RESULT_NAME || toolName === LOAD_TOOLS_NAME) {
|
|
89
|
+
return data;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
return (await truncateAndStore(resultStore, toolCallId, data)).value;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
logger.warn(`[ChatToolHandler] Output truncation failed for ${toolName}`, {
|
|
96
|
+
component: 'ChatToolHandler',
|
|
97
|
+
error: error instanceof Error ? error.message : String(error),
|
|
98
|
+
});
|
|
99
|
+
return data;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
81
102
|
// Build security policy
|
|
82
103
|
const securityPolicy = {
|
|
83
104
|
mode: options.securityMode || 'ask',
|
|
@@ -93,7 +114,7 @@ export async function createChatToolHandler(options) {
|
|
|
93
114
|
securityPolicy,
|
|
94
115
|
sessionManager,
|
|
95
116
|
});
|
|
96
|
-
|
|
117
|
+
const handler = {
|
|
97
118
|
getTools() {
|
|
98
119
|
const tools = registry.list();
|
|
99
120
|
return tools.map((tool) => ({
|
|
@@ -107,7 +128,26 @@ export async function createChatToolHandler(options) {
|
|
|
107
128
|
component: 'ChatToolHandler',
|
|
108
129
|
toolCallId,
|
|
109
130
|
});
|
|
131
|
+
// Meta-tools are served locally, not through the registry
|
|
132
|
+
if (toolName === LOAD_TOOLS_NAME) {
|
|
133
|
+
const allTools = registry.list().map((t) => ({
|
|
134
|
+
name: t.name,
|
|
135
|
+
description: t.description,
|
|
136
|
+
parameters: t.parameters,
|
|
137
|
+
}));
|
|
138
|
+
return {
|
|
139
|
+
result: await runLoadTools(args, {
|
|
140
|
+
session: getToolSelectorSession(options.conversationId),
|
|
141
|
+
allTools,
|
|
142
|
+
invoke: async (tool, toolArgs) => (await handler.executeTool(tool, toolArgs, randomUUID())).result,
|
|
143
|
+
}),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (toolName === FETCH_RESULT_NAME) {
|
|
147
|
+
return { result: await runFetchResult(args, resultStore) };
|
|
148
|
+
}
|
|
110
149
|
try {
|
|
150
|
+
getToolSelectorSession(options.conversationId).noteToolUse(toolName);
|
|
111
151
|
const context = createContext(toolCallId);
|
|
112
152
|
const result = await executor.execute({
|
|
113
153
|
id: toolCallId,
|
|
@@ -134,7 +174,7 @@ export async function createChatToolHandler(options) {
|
|
|
134
174
|
// The AI only sees `result` — `output` is preserved for UI rendering
|
|
135
175
|
if (result.result.success) {
|
|
136
176
|
// Extract clean data for the AI model
|
|
137
|
-
const aiResult = result.result.data ?? { success: true };
|
|
177
|
+
const aiResult = await capForModel(toolName, toolCallId, result.result.data ?? { success: true });
|
|
138
178
|
return {
|
|
139
179
|
result: aiResult,
|
|
140
180
|
output: result.result.output, // Sidecar for UI display
|
|
@@ -166,6 +206,9 @@ export async function createChatToolHandler(options) {
|
|
|
166
206
|
params: a.params,
|
|
167
207
|
}));
|
|
168
208
|
},
|
|
209
|
+
async dispose() {
|
|
210
|
+
await resultStore.cleanup();
|
|
211
|
+
},
|
|
169
212
|
async handleApproval(approvalId, decision) {
|
|
170
213
|
logger.info(`[ChatToolHandler] Handling approval: ${approvalId} -> ${decision}`, {
|
|
171
214
|
component: 'ChatToolHandler',
|
|
@@ -176,7 +219,7 @@ export async function createChatToolHandler(options) {
|
|
|
176
219
|
return null;
|
|
177
220
|
}
|
|
178
221
|
if (result.result.success) {
|
|
179
|
-
const aiResult = result.result.data ?? { success: true };
|
|
222
|
+
const aiResult = await capForModel(approvalId, randomUUID(), result.result.data ?? { success: true });
|
|
180
223
|
return {
|
|
181
224
|
result: aiResult,
|
|
182
225
|
output: result.result.output,
|
|
@@ -200,6 +243,7 @@ export async function createChatToolHandler(options) {
|
|
|
200
243
|
}
|
|
201
244
|
},
|
|
202
245
|
};
|
|
246
|
+
return handler;
|
|
203
247
|
}
|
|
204
248
|
// Tool Categories for Chat
|
|
205
249
|
/**
|
package/dist/chat/tools.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export declare const CreateTicketToolSchema: z.ZodObject<{
|
|
|
34
34
|
storyPoints: z.ZodOptional<z.ZodNumber>;
|
|
35
35
|
}, "strip", z.ZodTypeAny, {
|
|
36
36
|
title: string;
|
|
37
|
-
priority: "critical" | "medium" | "
|
|
37
|
+
priority: "critical" | "medium" | "low" | "high";
|
|
38
38
|
type: "task" | "bug" | "story" | "epic" | "subtask";
|
|
39
39
|
projectKey: string;
|
|
40
40
|
description?: string | undefined;
|
|
@@ -44,7 +44,7 @@ export declare const CreateTicketToolSchema: z.ZodObject<{
|
|
|
44
44
|
title: string;
|
|
45
45
|
projectKey: string;
|
|
46
46
|
description?: string | undefined;
|
|
47
|
-
priority?: "critical" | "medium" | "
|
|
47
|
+
priority?: "critical" | "medium" | "low" | "high" | undefined;
|
|
48
48
|
type?: "task" | "bug" | "story" | "epic" | "subtask" | undefined;
|
|
49
49
|
labels?: string[] | undefined;
|
|
50
50
|
storyPoints?: number | undefined;
|
|
@@ -176,7 +176,7 @@ export declare const CHAT_TOOLS: {
|
|
|
176
176
|
storyPoints: z.ZodOptional<z.ZodNumber>;
|
|
177
177
|
}, "strip", z.ZodTypeAny, {
|
|
178
178
|
title: string;
|
|
179
|
-
priority: "critical" | "medium" | "
|
|
179
|
+
priority: "critical" | "medium" | "low" | "high";
|
|
180
180
|
type: "task" | "bug" | "story" | "epic" | "subtask";
|
|
181
181
|
projectKey: string;
|
|
182
182
|
description?: string | undefined;
|
|
@@ -186,7 +186,7 @@ export declare const CHAT_TOOLS: {
|
|
|
186
186
|
title: string;
|
|
187
187
|
projectKey: string;
|
|
188
188
|
description?: string | undefined;
|
|
189
|
-
priority?: "critical" | "medium" | "
|
|
189
|
+
priority?: "critical" | "medium" | "low" | "high" | undefined;
|
|
190
190
|
type?: "task" | "bug" | "story" | "epic" | "subtask" | undefined;
|
|
191
191
|
labels?: string[] | undefined;
|
|
192
192
|
storyPoints?: number | undefined;
|
|
@@ -294,7 +294,7 @@ export declare function getToolDefinitions(): {
|
|
|
294
294
|
storyPoints: z.ZodOptional<z.ZodNumber>;
|
|
295
295
|
}, "strip", z.ZodTypeAny, {
|
|
296
296
|
title: string;
|
|
297
|
-
priority: "critical" | "medium" | "
|
|
297
|
+
priority: "critical" | "medium" | "low" | "high";
|
|
298
298
|
type: "task" | "bug" | "story" | "epic" | "subtask";
|
|
299
299
|
projectKey: string;
|
|
300
300
|
description?: string | undefined;
|
|
@@ -304,7 +304,7 @@ export declare function getToolDefinitions(): {
|
|
|
304
304
|
title: string;
|
|
305
305
|
projectKey: string;
|
|
306
306
|
description?: string | undefined;
|
|
307
|
-
priority?: "critical" | "medium" | "
|
|
307
|
+
priority?: "critical" | "medium" | "low" | "high" | undefined;
|
|
308
308
|
type?: "task" | "bug" | "story" | "epic" | "subtask" | undefined;
|
|
309
309
|
labels?: string[] | undefined;
|
|
310
310
|
storyPoints?: number | undefined;
|
|
@@ -12,7 +12,7 @@ import chalk from 'chalk';
|
|
|
12
12
|
import { randomUUID } from 'crypto';
|
|
13
13
|
import { eq } from 'drizzle-orm';
|
|
14
14
|
import { initStorage, getDb } from '../../storage/index.js';
|
|
15
|
-
import { users, sessions, inviteCodes } from '../../storage/schema.js';
|
|
15
|
+
import { users, sessions, inviteCodes, userPreferences } from '../../storage/schema.js';
|
|
16
16
|
import { generateInviteCode, hashInviteCode, hashPassword, generateRecoveryCodes, hashRecoveryCodes, } from '../../auth/password.js';
|
|
17
17
|
import { updateSettings } from '../../settings/index.js';
|
|
18
18
|
import { createTable, success, error, info, warn } from '../utils/output.js';
|
|
@@ -276,6 +276,69 @@ export function authCommands() {
|
|
|
276
276
|
process.exit(1);
|
|
277
277
|
}
|
|
278
278
|
});
|
|
279
|
+
// profclaw auth create-admin
|
|
280
|
+
auth
|
|
281
|
+
.command('create-admin')
|
|
282
|
+
.description('Create an admin user (for headless/pico setups)')
|
|
283
|
+
.option('--email <email>', 'Email address')
|
|
284
|
+
.option('--password <password>', 'Password (min 8 characters)')
|
|
285
|
+
.option('--name <name>', 'Display name')
|
|
286
|
+
.action(async (options) => {
|
|
287
|
+
if (!options.email || !options.password || !options.name) {
|
|
288
|
+
console.log('');
|
|
289
|
+
console.log('Usage: profclaw auth create-admin --email <email> --password <pass> --name <name>');
|
|
290
|
+
console.log('');
|
|
291
|
+
console.log(' --email Email address for the admin account');
|
|
292
|
+
console.log(' --password Password (min 8 characters)');
|
|
293
|
+
console.log(' --name Display name');
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
const db = await ensureDb();
|
|
298
|
+
const existing = await db
|
|
299
|
+
.select({ id: users.id })
|
|
300
|
+
.from(users)
|
|
301
|
+
.where(eq(users.email, options.email.toLowerCase()))
|
|
302
|
+
.limit(1);
|
|
303
|
+
if (existing.length > 0) {
|
|
304
|
+
error(`User already exists: ${options.email}`);
|
|
305
|
+
process.exit(1);
|
|
306
|
+
}
|
|
307
|
+
if (options.password.length < 8) {
|
|
308
|
+
error('Password must be at least 8 characters');
|
|
309
|
+
process.exit(1);
|
|
310
|
+
}
|
|
311
|
+
const userId = randomUUID();
|
|
312
|
+
const now = new Date();
|
|
313
|
+
await db.insert(users).values({
|
|
314
|
+
id: userId,
|
|
315
|
+
email: options.email.toLowerCase(),
|
|
316
|
+
passwordHash: hashPassword(options.password),
|
|
317
|
+
name: options.name,
|
|
318
|
+
role: 'admin',
|
|
319
|
+
status: 'active',
|
|
320
|
+
createdAt: now,
|
|
321
|
+
updatedAt: now,
|
|
322
|
+
});
|
|
323
|
+
await db.insert(userPreferences).values({
|
|
324
|
+
id: randomUUID(),
|
|
325
|
+
userId,
|
|
326
|
+
updatedAt: now,
|
|
327
|
+
});
|
|
328
|
+
console.log('');
|
|
329
|
+
success(`Admin user created`);
|
|
330
|
+
console.log('');
|
|
331
|
+
console.log(` Name: ${chalk.bold(options.name)}`);
|
|
332
|
+
console.log(` Email: ${chalk.bold(options.email.toLowerCase())}`);
|
|
333
|
+
console.log(` Role: ${chalk.yellow('admin')}`);
|
|
334
|
+
console.log(` ID: ${chalk.dim(userId)}`);
|
|
335
|
+
console.log('');
|
|
336
|
+
}
|
|
337
|
+
catch (err) {
|
|
338
|
+
error(err instanceof Error ? err.message : 'Failed to create admin user');
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
279
342
|
// profclaw auth set-mode
|
|
280
343
|
auth
|
|
281
344
|
.command('set-mode <mode>')
|