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,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Snapshot Manager
|
|
3
|
+
*
|
|
4
|
+
* Captures file contents before edits so users can rewind changes.
|
|
5
|
+
* Snapshots are persisted to disk under .profclaw/snapshots/{sessionId}/
|
|
6
|
+
*/
|
|
7
|
+
export interface FileSnapshot {
|
|
8
|
+
path: string;
|
|
9
|
+
content: string;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
turnIndex: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class FileSnapshotManager {
|
|
14
|
+
private snapshots;
|
|
15
|
+
private sessionDir;
|
|
16
|
+
constructor(sessionId: string);
|
|
17
|
+
/**
|
|
18
|
+
* Call BEFORE writing a file.
|
|
19
|
+
* Reads current contents and stores a snapshot keyed by file path.
|
|
20
|
+
* If the file does not exist yet, the snapshot is skipped (new file creation).
|
|
21
|
+
*/
|
|
22
|
+
captureBeforeEdit(filePath: string, turnIndex: number): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Rewind a file to its state before a specific turn.
|
|
25
|
+
* If no turnIndex is supplied, rewinds to the most recent snapshot.
|
|
26
|
+
*/
|
|
27
|
+
rewind(filePath: string, turnIndex?: number): Promise<{
|
|
28
|
+
restored: boolean;
|
|
29
|
+
path: string;
|
|
30
|
+
turnIndex: number;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Rewind ALL files that were modified during the given turn.
|
|
34
|
+
* Restores each file to the snapshot captured at the start of that turn
|
|
35
|
+
* (i.e. the snapshot whose turnIndex equals the supplied value).
|
|
36
|
+
*/
|
|
37
|
+
rewindTurn(turnIndex: number): Promise<Array<{
|
|
38
|
+
path: string;
|
|
39
|
+
restored: boolean;
|
|
40
|
+
}>>;
|
|
41
|
+
/**
|
|
42
|
+
* List all files that have at least one snapshot.
|
|
43
|
+
*/
|
|
44
|
+
getModifiedFiles(): Array<{
|
|
45
|
+
path: string;
|
|
46
|
+
snapshotCount: number;
|
|
47
|
+
lastModified: number;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Return the full snapshot history for a specific file.
|
|
51
|
+
*/
|
|
52
|
+
getHistory(filePath: string): FileSnapshot[];
|
|
53
|
+
/**
|
|
54
|
+
* Persist snapshot index to disk.
|
|
55
|
+
*/
|
|
56
|
+
save(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Load snapshot index from disk (for session resume).
|
|
59
|
+
*/
|
|
60
|
+
load(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Remove the on-disk snapshot directory.
|
|
63
|
+
*/
|
|
64
|
+
cleanup(): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns the singleton FileSnapshotManager for this process.
|
|
68
|
+
* Pass sessionId on first call to initialise; subsequent calls without an
|
|
69
|
+
* argument return the existing instance.
|
|
70
|
+
*/
|
|
71
|
+
export declare function getFileSnapshotManager(sessionId?: string): FileSnapshotManager;
|
|
72
|
+
//# sourceMappingURL=file-snapshots.d.ts.map
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Snapshot Manager
|
|
3
|
+
*
|
|
4
|
+
* Captures file contents before edits so users can rewind changes.
|
|
5
|
+
* Snapshots are persisted to disk under .profclaw/snapshots/{sessionId}/
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'node:fs/promises';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
let defaultManager = null;
|
|
10
|
+
export class FileSnapshotManager {
|
|
11
|
+
snapshots;
|
|
12
|
+
sessionDir;
|
|
13
|
+
constructor(sessionId) {
|
|
14
|
+
this.snapshots = new Map();
|
|
15
|
+
this.sessionDir = path.join('.profclaw', 'snapshots', sessionId);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Call BEFORE writing a file.
|
|
19
|
+
* Reads current contents and stores a snapshot keyed by file path.
|
|
20
|
+
* If the file does not exist yet, the snapshot is skipped (new file creation).
|
|
21
|
+
*/
|
|
22
|
+
async captureBeforeEdit(filePath, turnIndex) {
|
|
23
|
+
const resolved = path.resolve(filePath);
|
|
24
|
+
let content;
|
|
25
|
+
try {
|
|
26
|
+
content = await fs.readFile(resolved, 'utf-8');
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// File does not exist — nothing to snapshot before creation
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const snapshot = {
|
|
33
|
+
path: resolved,
|
|
34
|
+
content,
|
|
35
|
+
timestamp: Date.now(),
|
|
36
|
+
turnIndex,
|
|
37
|
+
};
|
|
38
|
+
const history = this.snapshots.get(resolved) ?? [];
|
|
39
|
+
history.push(snapshot);
|
|
40
|
+
this.snapshots.set(resolved, history);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Rewind a file to its state before a specific turn.
|
|
44
|
+
* If no turnIndex is supplied, rewinds to the most recent snapshot.
|
|
45
|
+
*/
|
|
46
|
+
async rewind(filePath, turnIndex) {
|
|
47
|
+
const resolved = path.resolve(filePath);
|
|
48
|
+
const history = this.snapshots.get(resolved);
|
|
49
|
+
if (!history || history.length === 0) {
|
|
50
|
+
return { restored: false, path: resolved, turnIndex: turnIndex ?? -1 };
|
|
51
|
+
}
|
|
52
|
+
let target;
|
|
53
|
+
if (turnIndex === undefined) {
|
|
54
|
+
target = history[history.length - 1];
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Find the latest snapshot at or before the requested turn
|
|
58
|
+
const candidates = history.filter((s) => s.turnIndex <= turnIndex);
|
|
59
|
+
if (candidates.length === 0) {
|
|
60
|
+
return { restored: false, path: resolved, turnIndex };
|
|
61
|
+
}
|
|
62
|
+
target = candidates[candidates.length - 1];
|
|
63
|
+
}
|
|
64
|
+
await fs.mkdir(path.dirname(resolved), { recursive: true });
|
|
65
|
+
await fs.writeFile(resolved, target.content, 'utf-8');
|
|
66
|
+
return { restored: true, path: resolved, turnIndex: target.turnIndex };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Rewind ALL files that were modified during the given turn.
|
|
70
|
+
* Restores each file to the snapshot captured at the start of that turn
|
|
71
|
+
* (i.e. the snapshot whose turnIndex equals the supplied value).
|
|
72
|
+
*/
|
|
73
|
+
async rewindTurn(turnIndex) {
|
|
74
|
+
const results = [];
|
|
75
|
+
for (const [filePath, history] of this.snapshots.entries()) {
|
|
76
|
+
const hadChangeInTurn = history.some((s) => s.turnIndex === turnIndex);
|
|
77
|
+
if (!hadChangeInTurn)
|
|
78
|
+
continue;
|
|
79
|
+
// Find the snapshot taken at the start of this turn (before the edit)
|
|
80
|
+
const snapshot = history.find((s) => s.turnIndex === turnIndex);
|
|
81
|
+
if (!snapshot) {
|
|
82
|
+
results.push({ path: filePath, restored: false });
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
const resolved = path.resolve(filePath);
|
|
87
|
+
await fs.mkdir(path.dirname(resolved), { recursive: true });
|
|
88
|
+
await fs.writeFile(resolved, snapshot.content, 'utf-8');
|
|
89
|
+
results.push({ path: filePath, restored: true });
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
results.push({ path: filePath, restored: false });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* List all files that have at least one snapshot.
|
|
99
|
+
*/
|
|
100
|
+
getModifiedFiles() {
|
|
101
|
+
const result = [];
|
|
102
|
+
for (const [filePath, history] of this.snapshots.entries()) {
|
|
103
|
+
if (history.length === 0)
|
|
104
|
+
continue;
|
|
105
|
+
const lastModified = history[history.length - 1].timestamp;
|
|
106
|
+
result.push({
|
|
107
|
+
path: filePath,
|
|
108
|
+
snapshotCount: history.length,
|
|
109
|
+
lastModified,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Return the full snapshot history for a specific file.
|
|
116
|
+
*/
|
|
117
|
+
getHistory(filePath) {
|
|
118
|
+
const resolved = path.resolve(filePath);
|
|
119
|
+
return this.snapshots.get(resolved) ?? [];
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Persist snapshot index to disk.
|
|
123
|
+
*/
|
|
124
|
+
async save() {
|
|
125
|
+
try {
|
|
126
|
+
await fs.mkdir(this.sessionDir, { recursive: true });
|
|
127
|
+
const indexPath = path.join(this.sessionDir, 'index.json');
|
|
128
|
+
const index = {
|
|
129
|
+
sessionId: path.basename(this.sessionDir),
|
|
130
|
+
snapshots: {},
|
|
131
|
+
};
|
|
132
|
+
for (const [filePath, history] of this.snapshots.entries()) {
|
|
133
|
+
index.snapshots[filePath] = history;
|
|
134
|
+
}
|
|
135
|
+
await fs.writeFile(indexPath, JSON.stringify(index, null, 2), 'utf-8');
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Non-fatal — snapshots still work in memory
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Load snapshot index from disk (for session resume).
|
|
143
|
+
*/
|
|
144
|
+
async load() {
|
|
145
|
+
try {
|
|
146
|
+
const indexPath = path.join(this.sessionDir, 'index.json');
|
|
147
|
+
const raw = await fs.readFile(indexPath, 'utf-8');
|
|
148
|
+
const index = JSON.parse(raw);
|
|
149
|
+
for (const [filePath, history] of Object.entries(index.snapshots)) {
|
|
150
|
+
this.snapshots.set(filePath, history);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// No persisted data — start fresh
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Remove the on-disk snapshot directory.
|
|
159
|
+
*/
|
|
160
|
+
async cleanup() {
|
|
161
|
+
try {
|
|
162
|
+
await fs.rm(this.sessionDir, { recursive: true, force: true });
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Best-effort cleanup
|
|
166
|
+
}
|
|
167
|
+
this.snapshots.clear();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns the singleton FileSnapshotManager for this process.
|
|
172
|
+
* Pass sessionId on first call to initialise; subsequent calls without an
|
|
173
|
+
* argument return the existing instance.
|
|
174
|
+
*/
|
|
175
|
+
export function getFileSnapshotManager(sessionId) {
|
|
176
|
+
if (!defaultManager) {
|
|
177
|
+
const id = sessionId ?? `session-${Date.now().toString(36)}`;
|
|
178
|
+
defaultManager = new FileSnapshotManager(id);
|
|
179
|
+
}
|
|
180
|
+
return defaultManager;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=file-snapshots.js.map
|
package/dist/agents/index.d.ts
CHANGED
|
@@ -6,5 +6,7 @@
|
|
|
6
6
|
export type { AgentStatus, ToolCallStatus, ToolCallRecord, AgentState, AgentContext, AgentArtifact, AgentResult, StopCondition, AgentConfig, AgentEvents, StepContext, ThinkingEffort, } from './types.js';
|
|
7
7
|
export { EFFORT_BUDGET_MAP } from './types.js';
|
|
8
8
|
export { AgentExecutor, createAgent, createSimpleAgent, createComplexAgent } from './executor.js';
|
|
9
|
+
export type { ToolExecuteHandler } from './executor.js';
|
|
10
|
+
export type { AgentEvent } from './events.js';
|
|
9
11
|
export { stepCountIs, stepCountExceeds, hasToolCall, hasAnyToolCall, toolCallCount, totalToolCalls, sameToolRepeated, budgetExceeded, budgetBelowThreshold, budgetPercentageExceeds, taskCompleted, modelIndicatesCompletion, noToolCallsInLastStep, toolCallFailed, consecutiveFailures, timeoutExceeded, anyOf, allOf, not, custom, defaultStopConditions, minimalStopConditions, strictStopConditions, } from './stop-conditions.js';
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Agent Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Enables spawning, managing, and merging results from sub-agents.
|
|
5
|
+
* Supports orchestration patterns:
|
|
6
|
+
* - Fan-out: N parallel workers + 1 synthesizer
|
|
7
|
+
* - Pipeline: sequential agent chain (A -> B -> C)
|
|
8
|
+
* - Debate: 2+ agents argue, 1 judges
|
|
9
|
+
*
|
|
10
|
+
* Each sub-agent gets an isolated session with scoped tool access.
|
|
11
|
+
* Parent can set token budgets, timeouts, and tool policies per child.
|
|
12
|
+
*/
|
|
13
|
+
export type OrchestrationPattern = 'fan_out' | 'pipeline' | 'debate' | 'custom';
|
|
14
|
+
export interface SubAgentConfig {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
/** The prompt/task for this sub-agent */
|
|
18
|
+
prompt: string;
|
|
19
|
+
/** System prompt override */
|
|
20
|
+
systemPrompt?: string;
|
|
21
|
+
/** AI model to use */
|
|
22
|
+
model?: string;
|
|
23
|
+
/** Max tokens this agent can consume */
|
|
24
|
+
maxTokens?: number;
|
|
25
|
+
/** Timeout in ms (default: 300000 = 5min) */
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
/** Which tools this agent can access (empty = all) */
|
|
28
|
+
allowedTools?: string[];
|
|
29
|
+
/** Thinking effort */
|
|
30
|
+
effort?: 'low' | 'medium' | 'high';
|
|
31
|
+
}
|
|
32
|
+
export interface SubAgentResult {
|
|
33
|
+
agentId: string;
|
|
34
|
+
agentName: string;
|
|
35
|
+
success: boolean;
|
|
36
|
+
output: string;
|
|
37
|
+
error?: string;
|
|
38
|
+
durationMs: number;
|
|
39
|
+
tokensUsed?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface OrchestrationConfig {
|
|
42
|
+
/** Unique ID for this orchestration */
|
|
43
|
+
id: string;
|
|
44
|
+
/** Human-readable name */
|
|
45
|
+
name: string;
|
|
46
|
+
/** Which pattern to use */
|
|
47
|
+
pattern: OrchestrationPattern;
|
|
48
|
+
/** Sub-agent configurations */
|
|
49
|
+
agents: SubAgentConfig[];
|
|
50
|
+
/** For fan_out: prompt for the synthesizer that merges results */
|
|
51
|
+
synthesizerPrompt?: string;
|
|
52
|
+
/** For debate: prompt for the judge */
|
|
53
|
+
judgePrompt?: string;
|
|
54
|
+
/** For pipeline: output of agent N becomes input context for agent N+1 */
|
|
55
|
+
pipelineContext?: boolean;
|
|
56
|
+
/** Overall timeout for the entire orchestration */
|
|
57
|
+
timeoutMs?: number;
|
|
58
|
+
/** Cancel all children if any fails */
|
|
59
|
+
failFast?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface OrchestrationResult {
|
|
62
|
+
id: string;
|
|
63
|
+
pattern: OrchestrationPattern;
|
|
64
|
+
success: boolean;
|
|
65
|
+
/** Individual agent results */
|
|
66
|
+
agentResults: SubAgentResult[];
|
|
67
|
+
/** Synthesized/final output */
|
|
68
|
+
finalOutput: string;
|
|
69
|
+
totalDurationMs: number;
|
|
70
|
+
totalTokens: number;
|
|
71
|
+
error?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Execute an orchestration.
|
|
75
|
+
*/
|
|
76
|
+
export declare function orchestrate(config: OrchestrationConfig): Promise<OrchestrationResult>;
|
|
77
|
+
/**
|
|
78
|
+
* Cancel a running orchestration.
|
|
79
|
+
*/
|
|
80
|
+
export declare function cancelOrchestration(id: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* List active orchestrations.
|
|
83
|
+
*/
|
|
84
|
+
export declare function listActiveOrchestrations(): string[];
|
|
85
|
+
/**
|
|
86
|
+
* A single unit of work dispatched to a sub-agent.
|
|
87
|
+
*/
|
|
88
|
+
export interface SubAgentTask {
|
|
89
|
+
id: string;
|
|
90
|
+
description: string;
|
|
91
|
+
prompt: string;
|
|
92
|
+
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
93
|
+
result?: string;
|
|
94
|
+
error?: string;
|
|
95
|
+
startedAt?: number;
|
|
96
|
+
completedAt?: number;
|
|
97
|
+
tokensUsed: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Configuration for AgentOrchestrator.
|
|
101
|
+
*/
|
|
102
|
+
export interface OrchestratorConfig {
|
|
103
|
+
/** Maximum number of sub-tasks running concurrently (default: 3). */
|
|
104
|
+
maxConcurrent: number;
|
|
105
|
+
/** Timeout per sub-task in ms (default: 300_000). */
|
|
106
|
+
timeoutMs: number;
|
|
107
|
+
model?: string;
|
|
108
|
+
provider?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Class-based orchestrator for fan-out parallel sub-agent tasks.
|
|
112
|
+
*
|
|
113
|
+
* The caller provides an `apiCall` function that wraps the actual LLM API —
|
|
114
|
+
* following the same injected-client pattern used by ContextCompactor.
|
|
115
|
+
*
|
|
116
|
+
* Usage:
|
|
117
|
+
* ```ts
|
|
118
|
+
* const orch = getAgentOrchestrator({ maxConcurrent: 2 });
|
|
119
|
+
* const results = await orch.dispatch([
|
|
120
|
+
* { description: 'Summarise file A', prompt: '...' },
|
|
121
|
+
* { description: 'Summarise file B', prompt: '...' },
|
|
122
|
+
* ], myApiCall);
|
|
123
|
+
* console.log(orch.synthesize(results));
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export declare class AgentOrchestrator {
|
|
127
|
+
private readonly tasks;
|
|
128
|
+
private readonly config;
|
|
129
|
+
/** Number of tasks currently in the 'running' state. */
|
|
130
|
+
private running;
|
|
131
|
+
/** Cancelled task IDs — checked before executing. */
|
|
132
|
+
private readonly cancelled;
|
|
133
|
+
constructor(config?: Partial<OrchestratorConfig>);
|
|
134
|
+
/**
|
|
135
|
+
* Dispatch multiple sub-tasks in parallel, respecting `maxConcurrent`.
|
|
136
|
+
* Resolves when every task has either completed, failed, or timed out.
|
|
137
|
+
*/
|
|
138
|
+
dispatch(taskDefs: Array<{
|
|
139
|
+
description: string;
|
|
140
|
+
prompt: string;
|
|
141
|
+
}>, apiCall: (prompt: string) => Promise<string>): Promise<SubAgentTask[]>;
|
|
142
|
+
/**
|
|
143
|
+
* Run a single sub-agent task with timeout and cancellation support.
|
|
144
|
+
* Mutates `task` in place and returns it.
|
|
145
|
+
*/
|
|
146
|
+
runTask(task: SubAgentTask, apiCall: (prompt: string) => Promise<string>): Promise<SubAgentTask>;
|
|
147
|
+
/**
|
|
148
|
+
* Return a snapshot of all tasks tracked by this orchestrator.
|
|
149
|
+
*/
|
|
150
|
+
getStatus(): SubAgentTask[];
|
|
151
|
+
/**
|
|
152
|
+
* Mark a task as cancelled. If it is still pending it will be skipped
|
|
153
|
+
* entirely; if it is already running the next post-API-call check will
|
|
154
|
+
* mark it failed.
|
|
155
|
+
*/
|
|
156
|
+
cancel(taskId: string): void;
|
|
157
|
+
/**
|
|
158
|
+
* Build a markdown summary of completed task results.
|
|
159
|
+
*
|
|
160
|
+
* ```markdown
|
|
161
|
+
* ## Task Results
|
|
162
|
+
* ### 1. Summarise file A ✓
|
|
163
|
+
* <result text>
|
|
164
|
+
* ### 2. Summarise file B ✗
|
|
165
|
+
* Error: timed out after 300000ms
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
synthesize(tasks: SubAgentTask[]): string;
|
|
169
|
+
/**
|
|
170
|
+
* Wait until all currently-tracked tasks have left the 'pending' or
|
|
171
|
+
* 'running' state, or until the optional `timeoutMs` elapses.
|
|
172
|
+
*
|
|
173
|
+
* Resolves with the current task snapshot once settled.
|
|
174
|
+
*/
|
|
175
|
+
waitAll(timeoutMs?: number): Promise<SubAgentTask[]>;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Return a lazily-created singleton `AgentOrchestrator`.
|
|
179
|
+
* Pass `config` on first call to customise defaults; subsequent calls with
|
|
180
|
+
* a different config will replace the singleton.
|
|
181
|
+
*/
|
|
182
|
+
export declare function getAgentOrchestrator(config?: Partial<OrchestratorConfig>): AgentOrchestrator;
|
|
183
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|