profclaw 2.0.0 → 2.3.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 +37 -0
- package/CONTRIBUTING.md +20 -0
- package/Dockerfile +39 -23
- package/README.md +174 -40
- 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/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.d.ts +35 -1
- package/dist/agents/executor.js +573 -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/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/result-store.d.ts +37 -0
- package/dist/agents/result-store.js +104 -0
- package/dist/agents/session-diff.d.ts +43 -0
- package/dist/agents/session-diff.js +258 -0
- package/dist/agents/tool-loader.d.ts +65 -0
- package/dist/agents/tool-loader.js +273 -0
- package/dist/agents/transcript.d.ts +96 -0
- package/dist/agents/transcript.js +267 -0
- package/dist/agents/worktree-manager.d.ts +80 -0
- package/dist/agents/worktree-manager.js +203 -0
- package/dist/auth/middleware.js +14 -0
- package/dist/chat/agentic-executor.d.ts +7 -0
- package/dist/chat/agentic-executor.js +253 -30
- 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/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/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/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 +116 -61
- 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/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 +19 -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/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 +78 -19
- package/dist/providers/core/models.js +67 -1
- package/dist/providers/core/types.d.ts +3 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers/smart-router.d.ts +118 -0
- package/dist/providers/smart-router.js +685 -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 +259 -14
- 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 +310 -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,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL Tool
|
|
3
|
+
*
|
|
4
|
+
* Execute code in persistent REPL sessions.
|
|
5
|
+
* State (variables, imports) survives between calls within the same session.
|
|
6
|
+
* Supports Node.js and Python 3.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import type { ChildProcess } from 'child_process';
|
|
10
|
+
import type { ToolDefinition } from '../types.js';
|
|
11
|
+
export interface REPLSession {
|
|
12
|
+
id: string;
|
|
13
|
+
language: 'node' | 'python';
|
|
14
|
+
process: ChildProcess;
|
|
15
|
+
output: string[];
|
|
16
|
+
createdAt: number;
|
|
17
|
+
}
|
|
18
|
+
export interface REPLResult {
|
|
19
|
+
output: string;
|
|
20
|
+
sessionId: string;
|
|
21
|
+
language: 'node' | 'python';
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
declare const ReplExecuteParamsSchema: z.ZodObject<{
|
|
25
|
+
code: z.ZodString;
|
|
26
|
+
language: z.ZodDefault<z.ZodEnum<["node", "python"]>>;
|
|
27
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
code: string;
|
|
30
|
+
language: "node" | "python";
|
|
31
|
+
sessionId?: string | undefined;
|
|
32
|
+
}, {
|
|
33
|
+
code: string;
|
|
34
|
+
sessionId?: string | undefined;
|
|
35
|
+
language?: "node" | "python" | undefined;
|
|
36
|
+
}>;
|
|
37
|
+
export type ReplExecuteParams = z.infer<typeof ReplExecuteParamsSchema>;
|
|
38
|
+
export declare const replTool: ToolDefinition<ReplExecuteParams, REPLResult>;
|
|
39
|
+
/** List all active REPL session IDs */
|
|
40
|
+
export declare function listReplSessions(): string[];
|
|
41
|
+
/** Terminate and remove a session by ID */
|
|
42
|
+
export declare function closeReplSession(id: string): boolean;
|
|
43
|
+
/** Exposed for tests — direct access to the internal session map */
|
|
44
|
+
export declare function getReplSessionsMap(): Map<string, REPLSession>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=repl-tool.d.ts.map
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL Tool
|
|
3
|
+
*
|
|
4
|
+
* Execute code in persistent REPL sessions.
|
|
5
|
+
* State (variables, imports) survives between calls within the same session.
|
|
6
|
+
* Supports Node.js and Python 3.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { spawn } from 'child_process';
|
|
10
|
+
import { randomUUID } from 'node:crypto';
|
|
11
|
+
import { logger } from '../../../utils/logger.js';
|
|
12
|
+
// Module-level session registry
|
|
13
|
+
const sessions = new Map();
|
|
14
|
+
// Constants
|
|
15
|
+
const REPL_TIMEOUT_MS = 30_000;
|
|
16
|
+
const MAX_OUTPUT_CHARS = 50_000;
|
|
17
|
+
const MAX_OUTPUT_HISTORY = 50;
|
|
18
|
+
// Prompt patterns that indicate the REPL is ready for next input
|
|
19
|
+
const NODE_PROMPT_RE = /^> $/m;
|
|
20
|
+
const PYTHON_PROMPT_RE = /^>>> $/m;
|
|
21
|
+
/**
|
|
22
|
+
* Retrieve an existing session or create a new one.
|
|
23
|
+
*/
|
|
24
|
+
function getOrCreateSession(language, sessionId) {
|
|
25
|
+
if (sessionId) {
|
|
26
|
+
const existing = sessions.get(sessionId);
|
|
27
|
+
if (existing)
|
|
28
|
+
return existing;
|
|
29
|
+
}
|
|
30
|
+
const id = sessionId ?? randomUUID();
|
|
31
|
+
const command = language === 'node' ? 'node' : 'python3';
|
|
32
|
+
const args = language === 'node' ? ['-i'] : ['-i', '-u'];
|
|
33
|
+
const proc = spawn(command, args, {
|
|
34
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
35
|
+
env: { ...process.env },
|
|
36
|
+
});
|
|
37
|
+
const session = {
|
|
38
|
+
id,
|
|
39
|
+
language,
|
|
40
|
+
process: proc,
|
|
41
|
+
output: [],
|
|
42
|
+
createdAt: Date.now(),
|
|
43
|
+
};
|
|
44
|
+
proc.on('close', () => {
|
|
45
|
+
sessions.delete(id);
|
|
46
|
+
logger.debug(`[ReplTool] Session ${id} closed`, { component: 'ReplTool' });
|
|
47
|
+
});
|
|
48
|
+
proc.on('error', (err) => {
|
|
49
|
+
logger.warn(`[ReplTool] Session ${id} process error: ${err.message}`, { component: 'ReplTool' });
|
|
50
|
+
sessions.delete(id);
|
|
51
|
+
});
|
|
52
|
+
sessions.set(id, session);
|
|
53
|
+
logger.debug(`[ReplTool] Created session ${id} (${language})`, { component: 'ReplTool' });
|
|
54
|
+
return session;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Write code to a REPL session and collect output until the prompt reappears.
|
|
58
|
+
* Returns a promise that resolves with the captured output string.
|
|
59
|
+
*/
|
|
60
|
+
function executeInSession(session, code) {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const { process: proc, language } = session;
|
|
63
|
+
const promptRe = language === 'node' ? NODE_PROMPT_RE : PYTHON_PROMPT_RE;
|
|
64
|
+
if (!proc.stdin || !proc.stdout || !proc.stderr) {
|
|
65
|
+
reject(new Error('REPL process streams unavailable'));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
let collected = '';
|
|
69
|
+
let settled = false;
|
|
70
|
+
const settle = (result, err) => {
|
|
71
|
+
if (settled)
|
|
72
|
+
return;
|
|
73
|
+
settled = true;
|
|
74
|
+
clearTimeout(timeoutHandle);
|
|
75
|
+
proc.stdout?.removeListener('data', onData);
|
|
76
|
+
proc.stderr?.removeListener('data', onData);
|
|
77
|
+
if (err) {
|
|
78
|
+
reject(err);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
resolve(result);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const onData = (chunk) => {
|
|
85
|
+
collected += chunk.toString();
|
|
86
|
+
// Truncate if runaway output
|
|
87
|
+
if (collected.length > MAX_OUTPUT_CHARS) {
|
|
88
|
+
collected = `[...truncated...]\n${collected.slice(-MAX_OUTPUT_CHARS)}`;
|
|
89
|
+
}
|
|
90
|
+
// Check for the prompt — indicates execution is complete
|
|
91
|
+
if (promptRe.test(collected)) {
|
|
92
|
+
// Strip the trailing prompt line from the output
|
|
93
|
+
const cleaned = collected.replace(/\n?> $|\n?>>> $/m, '').trim();
|
|
94
|
+
settle(cleaned);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const timeoutHandle = setTimeout(() => {
|
|
98
|
+
settle('', new Error(`REPL execution timed out after ${REPL_TIMEOUT_MS / 1000}s`));
|
|
99
|
+
}, REPL_TIMEOUT_MS);
|
|
100
|
+
proc.stdout.on('data', onData);
|
|
101
|
+
proc.stderr.on('data', onData);
|
|
102
|
+
// Send code followed by a newline so the REPL executes it
|
|
103
|
+
const input = code.endsWith('\n') ? code : `${code}\n`;
|
|
104
|
+
proc.stdin.write(input);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// Schema
|
|
108
|
+
const ReplExecuteParamsSchema = z.object({
|
|
109
|
+
code: z.string().min(1).describe('Code to execute in the REPL'),
|
|
110
|
+
language: z.enum(['node', 'python']).default('node').describe('REPL language runtime'),
|
|
111
|
+
sessionId: z.string().optional().describe('Reuse an existing session ID. Omit to create a new session.'),
|
|
112
|
+
});
|
|
113
|
+
// Tool Definition
|
|
114
|
+
export const replTool = {
|
|
115
|
+
name: 'repl_execute',
|
|
116
|
+
description: `Execute code in a persistent REPL session. State persists between calls (variables, imports stay alive). Use for iterative exploration, testing code snippets, or running multi-step computations.
|
|
117
|
+
|
|
118
|
+
Examples:
|
|
119
|
+
- node: assign variables, require modules, test expressions
|
|
120
|
+
- python: import libraries, define functions, explore data
|
|
121
|
+
|
|
122
|
+
The sessionId returned can be passed back to reuse the same session.`,
|
|
123
|
+
category: 'execution',
|
|
124
|
+
securityLevel: 'dangerous',
|
|
125
|
+
parameters: ReplExecuteParamsSchema,
|
|
126
|
+
examples: [
|
|
127
|
+
{ description: 'Run a Node.js snippet', params: { code: 'const x = 42; x * 2', language: 'node' } },
|
|
128
|
+
{ description: 'Run Python', params: { code: 'import sys; sys.version', language: 'python' } },
|
|
129
|
+
{ description: 'Reuse a session', params: { code: 'x + 1', language: 'node', sessionId: 'existing-session-id' } },
|
|
130
|
+
],
|
|
131
|
+
async execute(_context, params) {
|
|
132
|
+
const { code, language, sessionId } = params;
|
|
133
|
+
let session;
|
|
134
|
+
try {
|
|
135
|
+
session = getOrCreateSession(language, sessionId);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return {
|
|
139
|
+
success: false,
|
|
140
|
+
output: `Failed to create REPL session: ${error instanceof Error ? error.message : String(error)}`,
|
|
141
|
+
error: {
|
|
142
|
+
code: 'SESSION_CREATE_FAILED',
|
|
143
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const output = await executeInSession(session, code);
|
|
149
|
+
// Store output in session history (capped to prevent unbounded growth)
|
|
150
|
+
session.output.push(output);
|
|
151
|
+
if (session.output.length > MAX_OUTPUT_HISTORY) {
|
|
152
|
+
session.output.splice(0, session.output.length - MAX_OUTPUT_HISTORY);
|
|
153
|
+
}
|
|
154
|
+
const result = {
|
|
155
|
+
output,
|
|
156
|
+
sessionId: session.id,
|
|
157
|
+
language,
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
success: true,
|
|
161
|
+
data: result,
|
|
162
|
+
output: output || '(no output)',
|
|
163
|
+
sessionId: session.id,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
168
|
+
// Remove dead session on timeout/error
|
|
169
|
+
if (error instanceof Error && error.message.includes('timed out')) {
|
|
170
|
+
sessions.delete(session.id);
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
success: false,
|
|
174
|
+
output: `REPL execution failed: ${message}`,
|
|
175
|
+
error: {
|
|
176
|
+
code: 'REPL_EXECUTION_FAILED',
|
|
177
|
+
message,
|
|
178
|
+
},
|
|
179
|
+
sessionId: session.id,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
// Exported helpers for testing and session management
|
|
185
|
+
/** List all active REPL session IDs */
|
|
186
|
+
export function listReplSessions() {
|
|
187
|
+
return Array.from(sessions.keys());
|
|
188
|
+
}
|
|
189
|
+
/** Terminate and remove a session by ID */
|
|
190
|
+
export function closeReplSession(id) {
|
|
191
|
+
const session = sessions.get(id);
|
|
192
|
+
if (!session)
|
|
193
|
+
return false;
|
|
194
|
+
try {
|
|
195
|
+
session.process.kill('SIGTERM');
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// already dead
|
|
199
|
+
}
|
|
200
|
+
sessions.delete(id);
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
/** Exposed for tests — direct access to the internal session map */
|
|
204
|
+
export function getReplSessionsMap() {
|
|
205
|
+
return sessions;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=repl-tool.js.map
|
|
@@ -18,15 +18,15 @@ declare const SessionsSendParamsSchema: z.ZodObject<{
|
|
|
18
18
|
sessionId: string;
|
|
19
19
|
waitForResponse: boolean;
|
|
20
20
|
model?: string | undefined;
|
|
21
|
-
temperature?: number | undefined;
|
|
22
21
|
maxTokens?: number | undefined;
|
|
22
|
+
temperature?: number | undefined;
|
|
23
23
|
}, {
|
|
24
24
|
message: string;
|
|
25
25
|
sessionId: string;
|
|
26
26
|
model?: string | undefined;
|
|
27
|
+
maxTokens?: number | undefined;
|
|
27
28
|
waitForResponse?: boolean | undefined;
|
|
28
29
|
temperature?: number | undefined;
|
|
29
|
-
maxTokens?: number | undefined;
|
|
30
30
|
}>;
|
|
31
31
|
export type SessionsSendParams = z.infer<typeof SessionsSendParamsSchema>;
|
|
32
32
|
export interface SessionsSendResult {
|
|
@@ -51,12 +51,12 @@ declare const SlackActionsParamsSchema: z.ZodDiscriminatedUnion<"action", [z.Zod
|
|
|
51
51
|
topic: z.ZodString;
|
|
52
52
|
}, "strip", z.ZodTypeAny, {
|
|
53
53
|
action: "set_topic";
|
|
54
|
-
topic: string;
|
|
55
54
|
channel: string;
|
|
55
|
+
topic: string;
|
|
56
56
|
}, {
|
|
57
57
|
action: "set_topic";
|
|
58
|
-
topic: string;
|
|
59
58
|
channel: string;
|
|
59
|
+
topic: string;
|
|
60
60
|
}>, z.ZodObject<{
|
|
61
61
|
action: z.ZodLiteral<"invite_user">;
|
|
62
62
|
channel: z.ZodString;
|
|
@@ -18,9 +18,9 @@ declare const EnvParamsSchema: z.ZodObject<{
|
|
|
18
18
|
declare const SystemInfoParamsSchema: z.ZodObject<{
|
|
19
19
|
type: z.ZodDefault<z.ZodEnum<["all", "cpu", "memory", "network", "disk", "os"]>>;
|
|
20
20
|
}, "strip", z.ZodTypeAny, {
|
|
21
|
-
type: "all" | "memory" | "
|
|
21
|
+
type: "all" | "memory" | "disk" | "network" | "cpu" | "os";
|
|
22
22
|
}, {
|
|
23
|
-
type?: "all" | "memory" | "
|
|
23
|
+
type?: "all" | "memory" | "disk" | "network" | "cpu" | "os" | undefined;
|
|
24
24
|
}>;
|
|
25
25
|
declare const ProcessListParamsSchema: z.ZodObject<{
|
|
26
26
|
filter: z.ZodOptional<z.ZodString>;
|
|
@@ -28,12 +28,12 @@ declare const ProcessListParamsSchema: z.ZodObject<{
|
|
|
28
28
|
sortBy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["cpu", "memory", "pid", "name"]>>>;
|
|
29
29
|
}, "strip", z.ZodTypeAny, {
|
|
30
30
|
limit: number;
|
|
31
|
-
sortBy: "name" | "
|
|
31
|
+
sortBy: "name" | "pid" | "memory" | "cpu";
|
|
32
32
|
filter?: string | undefined;
|
|
33
33
|
}, {
|
|
34
34
|
filter?: string | undefined;
|
|
35
35
|
limit?: number | undefined;
|
|
36
|
-
sortBy?: "name" | "
|
|
36
|
+
sortBy?: "name" | "pid" | "memory" | "cpu" | undefined;
|
|
37
37
|
}>;
|
|
38
38
|
declare const PathInfoParamsSchema: z.ZodObject<{
|
|
39
39
|
path: z.ZodString;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Todo Tools
|
|
3
|
+
*
|
|
4
|
+
* Session-scoped todo list management for agents working through multi-step tasks.
|
|
5
|
+
* Stored in module-level Maps keyed by conversationId so each conversation
|
|
6
|
+
* has its own isolated list.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import type { ToolDefinition } from '../types.js';
|
|
10
|
+
export type TodoStatus = 'pending' | 'in_progress' | 'completed' | 'blocked';
|
|
11
|
+
export type TodoPriority = 'high' | 'medium' | 'low';
|
|
12
|
+
export interface TodoItem {
|
|
13
|
+
id: string;
|
|
14
|
+
description: string;
|
|
15
|
+
status: TodoStatus;
|
|
16
|
+
priority?: TodoPriority;
|
|
17
|
+
}
|
|
18
|
+
export interface TodoWriteResult {
|
|
19
|
+
count: number;
|
|
20
|
+
summary: string;
|
|
21
|
+
items: TodoItem[];
|
|
22
|
+
}
|
|
23
|
+
export interface TodoReadResult {
|
|
24
|
+
count: number;
|
|
25
|
+
items: TodoItem[];
|
|
26
|
+
summary: string;
|
|
27
|
+
}
|
|
28
|
+
declare const TodoWriteParamsSchema: z.ZodObject<{
|
|
29
|
+
items: z.ZodArray<z.ZodObject<{
|
|
30
|
+
id: z.ZodString;
|
|
31
|
+
description: z.ZodString;
|
|
32
|
+
status: z.ZodEnum<["pending", "in_progress", "completed", "blocked"]>;
|
|
33
|
+
priority: z.ZodOptional<z.ZodEnum<["high", "medium", "low"]>>;
|
|
34
|
+
}, "strip", z.ZodTypeAny, {
|
|
35
|
+
description: string;
|
|
36
|
+
status: "pending" | "in_progress" | "completed" | "blocked";
|
|
37
|
+
id: string;
|
|
38
|
+
priority?: "medium" | "low" | "high" | undefined;
|
|
39
|
+
}, {
|
|
40
|
+
description: string;
|
|
41
|
+
status: "pending" | "in_progress" | "completed" | "blocked";
|
|
42
|
+
id: string;
|
|
43
|
+
priority?: "medium" | "low" | "high" | undefined;
|
|
44
|
+
}>, "many">;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
items: {
|
|
47
|
+
description: string;
|
|
48
|
+
status: "pending" | "in_progress" | "completed" | "blocked";
|
|
49
|
+
id: string;
|
|
50
|
+
priority?: "medium" | "low" | "high" | undefined;
|
|
51
|
+
}[];
|
|
52
|
+
}, {
|
|
53
|
+
items: {
|
|
54
|
+
description: string;
|
|
55
|
+
status: "pending" | "in_progress" | "completed" | "blocked";
|
|
56
|
+
id: string;
|
|
57
|
+
priority?: "medium" | "low" | "high" | undefined;
|
|
58
|
+
}[];
|
|
59
|
+
}>;
|
|
60
|
+
declare const TodoReadParamsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
61
|
+
export type TodoWriteParams = z.infer<typeof TodoWriteParamsSchema>;
|
|
62
|
+
export type TodoReadParams = z.infer<typeof TodoReadParamsSchema>;
|
|
63
|
+
export declare const todoWriteTool: ToolDefinition<TodoWriteParams, TodoWriteResult>;
|
|
64
|
+
export declare const todoReadTool: ToolDefinition<TodoReadParams, TodoReadResult>;
|
|
65
|
+
/** Clear todos for a given conversation key */
|
|
66
|
+
export declare function clearTodos(conversationId: string): void;
|
|
67
|
+
/** Get todos for a conversation key (for testing) */
|
|
68
|
+
export declare function getTodos(conversationId: string): TodoItem[];
|
|
69
|
+
/** Exposed for tests */
|
|
70
|
+
export declare function getTodoStore(): Map<string, TodoItem[]>;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=todo-tool.d.ts.map
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Todo Tools
|
|
3
|
+
*
|
|
4
|
+
* Session-scoped todo list management for agents working through multi-step tasks.
|
|
5
|
+
* Stored in module-level Maps keyed by conversationId so each conversation
|
|
6
|
+
* has its own isolated list.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
// Module-level store: conversationId -> TodoItem[]
|
|
10
|
+
const todoStore = new Map();
|
|
11
|
+
// Helpers
|
|
12
|
+
function getStoreKey(context) {
|
|
13
|
+
return context.conversationId;
|
|
14
|
+
}
|
|
15
|
+
function formatSummary(items) {
|
|
16
|
+
if (items.length === 0)
|
|
17
|
+
return 'No todos.';
|
|
18
|
+
const counts = {
|
|
19
|
+
pending: 0,
|
|
20
|
+
in_progress: 0,
|
|
21
|
+
completed: 0,
|
|
22
|
+
blocked: 0,
|
|
23
|
+
};
|
|
24
|
+
for (const item of items) {
|
|
25
|
+
counts[item.status]++;
|
|
26
|
+
}
|
|
27
|
+
const parts = [];
|
|
28
|
+
if (counts.pending > 0)
|
|
29
|
+
parts.push(`${counts.pending} pending`);
|
|
30
|
+
if (counts.in_progress > 0)
|
|
31
|
+
parts.push(`${counts.in_progress} in progress`);
|
|
32
|
+
if (counts.completed > 0)
|
|
33
|
+
parts.push(`${counts.completed} completed`);
|
|
34
|
+
if (counts.blocked > 0)
|
|
35
|
+
parts.push(`${counts.blocked} blocked`);
|
|
36
|
+
return parts.join(', ');
|
|
37
|
+
}
|
|
38
|
+
function renderItemsText(items) {
|
|
39
|
+
if (items.length === 0)
|
|
40
|
+
return 'No todos.';
|
|
41
|
+
return items
|
|
42
|
+
.map((item) => {
|
|
43
|
+
const statusIcon = item.status === 'completed'
|
|
44
|
+
? '[x]'
|
|
45
|
+
: item.status === 'in_progress'
|
|
46
|
+
? '[~]'
|
|
47
|
+
: item.status === 'blocked'
|
|
48
|
+
? '[!]'
|
|
49
|
+
: '[ ]';
|
|
50
|
+
const priorityTag = item.priority ? ` (${item.priority})` : '';
|
|
51
|
+
return `${statusIcon} [${item.id}] ${item.description}${priorityTag}`;
|
|
52
|
+
})
|
|
53
|
+
.join('\n');
|
|
54
|
+
}
|
|
55
|
+
// Schemas
|
|
56
|
+
const TodoItemSchema = z.object({
|
|
57
|
+
id: z.string().min(1).describe('Unique identifier for the todo item'),
|
|
58
|
+
description: z.string().min(1).describe('Description of the work to do'),
|
|
59
|
+
status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).describe('Current status'),
|
|
60
|
+
priority: z.enum(['high', 'medium', 'low']).optional().describe('Priority level'),
|
|
61
|
+
});
|
|
62
|
+
const TodoWriteParamsSchema = z.object({
|
|
63
|
+
items: z.array(TodoItemSchema).min(1).describe('Full todo list to write (replaces existing list)'),
|
|
64
|
+
});
|
|
65
|
+
const TodoReadParamsSchema = z.object({});
|
|
66
|
+
// todo_write Tool
|
|
67
|
+
export const todoWriteTool = {
|
|
68
|
+
name: 'todo_write',
|
|
69
|
+
description: `Create or update a structured todo list to track multi-step work. The todo list persists for the session and helps coordinate complex tasks.
|
|
70
|
+
|
|
71
|
+
Pass the complete desired list on every call — this replaces the existing list. To update an item's status, include all items with the updated status values.
|
|
72
|
+
|
|
73
|
+
Status values:
|
|
74
|
+
- pending: not started
|
|
75
|
+
- in_progress: actively being worked on (use for at most one item at a time)
|
|
76
|
+
- completed: done
|
|
77
|
+
- blocked: waiting on something
|
|
78
|
+
|
|
79
|
+
Use todo_read to retrieve the current list without modifying it.`,
|
|
80
|
+
category: 'profclaw',
|
|
81
|
+
securityLevel: 'safe',
|
|
82
|
+
parameters: TodoWriteParamsSchema,
|
|
83
|
+
examples: [
|
|
84
|
+
{
|
|
85
|
+
description: 'Create a todo list',
|
|
86
|
+
params: {
|
|
87
|
+
items: [
|
|
88
|
+
{ id: '1', description: 'Read existing code', status: 'completed', priority: 'high' },
|
|
89
|
+
{ id: '2', description: 'Write new feature', status: 'in_progress', priority: 'high' },
|
|
90
|
+
{ id: '3', description: 'Write tests', status: 'pending', priority: 'medium' },
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
async execute(context, params) {
|
|
96
|
+
const key = getStoreKey(context);
|
|
97
|
+
todoStore.set(key, params.items);
|
|
98
|
+
const summary = formatSummary(params.items);
|
|
99
|
+
const result = {
|
|
100
|
+
count: params.items.length,
|
|
101
|
+
summary,
|
|
102
|
+
items: params.items,
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
data: result,
|
|
107
|
+
output: `Todo list updated (${params.items.length} items: ${summary})\n\n${renderItemsText(params.items)}`,
|
|
108
|
+
};
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
// todo_read Tool
|
|
112
|
+
export const todoReadTool = {
|
|
113
|
+
name: 'todo_read',
|
|
114
|
+
description: 'Read the current todo list for this session. Returns all items with their current status.',
|
|
115
|
+
category: 'profclaw',
|
|
116
|
+
securityLevel: 'safe',
|
|
117
|
+
parameters: TodoReadParamsSchema,
|
|
118
|
+
examples: [
|
|
119
|
+
{ description: 'Check current todos', params: {} },
|
|
120
|
+
],
|
|
121
|
+
async execute(context, _params) {
|
|
122
|
+
const key = getStoreKey(context);
|
|
123
|
+
const items = todoStore.get(key) ?? [];
|
|
124
|
+
const summary = formatSummary(items);
|
|
125
|
+
const result = {
|
|
126
|
+
count: items.length,
|
|
127
|
+
items,
|
|
128
|
+
summary,
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
success: true,
|
|
132
|
+
data: result,
|
|
133
|
+
output: items.length === 0
|
|
134
|
+
? 'No todos.'
|
|
135
|
+
: `Todo list (${items.length} items: ${summary})\n\n${renderItemsText(items)}`,
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
// Exported helpers for testing
|
|
140
|
+
/** Clear todos for a given conversation key */
|
|
141
|
+
export function clearTodos(conversationId) {
|
|
142
|
+
todoStore.delete(conversationId);
|
|
143
|
+
}
|
|
144
|
+
/** Get todos for a conversation key (for testing) */
|
|
145
|
+
export function getTodos(conversationId) {
|
|
146
|
+
return todoStore.get(conversationId) ?? [];
|
|
147
|
+
}
|
|
148
|
+
/** Exposed for tests */
|
|
149
|
+
export function getTodoStore() {
|
|
150
|
+
return todoStore;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=todo-tool.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Search Tool
|
|
3
|
+
*
|
|
4
|
+
* Allows the AI agent to discover available tool categories and
|
|
5
|
+
* dynamically load them into the current session.
|
|
6
|
+
*
|
|
7
|
+
* This solves the cold-start problem: instead of including all tool
|
|
8
|
+
* schemas up front (high token cost), only core tools are loaded by
|
|
9
|
+
* default, and the agent can search/load others as needed.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import type { ToolDefinition } from '../types.js';
|
|
13
|
+
import { ToolLoader } from '../../../agents/tool-loader.js';
|
|
14
|
+
declare const ToolSearchParamsSchema: z.ZodObject<{
|
|
15
|
+
query: z.ZodString;
|
|
16
|
+
autoLoad: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
query: string;
|
|
19
|
+
autoLoad: boolean;
|
|
20
|
+
}, {
|
|
21
|
+
query: string;
|
|
22
|
+
autoLoad?: boolean | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export type ToolSearchParams = z.infer<typeof ToolSearchParamsSchema>;
|
|
25
|
+
interface ToolSearchMatch {
|
|
26
|
+
categoryName: string;
|
|
27
|
+
description: string;
|
|
28
|
+
keywords: string[];
|
|
29
|
+
tools: string[];
|
|
30
|
+
alwaysLoaded: boolean;
|
|
31
|
+
loaded: boolean;
|
|
32
|
+
}
|
|
33
|
+
interface ToolSearchResult {
|
|
34
|
+
query: string;
|
|
35
|
+
matches: ToolSearchMatch[];
|
|
36
|
+
autoLoaded: string | null;
|
|
37
|
+
hint: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Remove the loader for a conversation when it ends (called externally).
|
|
41
|
+
*/
|
|
42
|
+
export declare function clearSessionLoader(conversationId: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Expose the loader for a conversation so callers (e.g. the orchestrator)
|
|
45
|
+
* can query which tools are currently loaded.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getSessionLoader(conversationId: string): ToolLoader | undefined;
|
|
48
|
+
export declare const searchAvailableToolsTool: ToolDefinition<ToolSearchParams, ToolSearchResult>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=tool-search.d.ts.map
|