profclaw 0.0.1-beta.3 → 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 +54 -34
- package/CONTRIBUTING.md +23 -5
- package/Dockerfile +39 -23
- package/README.md +271 -72
- 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 +15 -3
- package/dist/chat/execution/tools/index.js +125 -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/slack/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/models.js +39 -26
- package/dist/cli/commands/onboard.js +263 -98
- 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 +375 -91
- 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 -6
- 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/providers.d.ts +15 -0
- package/dist/cli/providers.js +41 -0
- package/dist/cli/utils/api.d.ts +9 -0
- package/dist/cli/utils/api.js +58 -2
- package/dist/core/deployment.js +2 -0
- 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 +97 -18
- 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/channels.d.ts +12 -0
- package/dist/routes/channels.js +166 -0
- 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 +4 -1
- package/dist/server/stream-bridge.d.ts +19 -0
- package/dist/server/stream-bridge.js +38 -0
- package/dist/server.js +421 -141
- 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/git-workflow/SKILL.md +3 -3
- 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-DlYUcOss.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-CgPqzUvj.js → Settings-xA8Zhi3p.js} +3 -3
- package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
- package/ui/dist/assets/{SummaryDetail-CwLAfHgJ.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-CGck7gxR.js → archive-CX7UvZpf.js} +1 -1
- package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
- package/ui/dist/assets/{bug-DqSGPUUE.js → bug-3WX0394-.js} +1 -1
- package/ui/dist/assets/{calendar-BuZ4zbPW.js → calendar-buq77TaS.js} +1 -1
- package/ui/dist/assets/{chevron-up-DcJ4LL_N.js → chevron-up-4ymsBJRo.js} +1 -1
- package/ui/dist/assets/{circle-x-C78PNZjF.js → circle-x-ByXtwR6Y.js} +1 -1
- package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
- package/ui/dist/assets/{cpu-Ck6AoG8c.js → cpu-CiuoCeDY.js} +1 -1
- package/ui/dist/assets/{database-CA2w8Lvt.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-FhHKRbfl.js → ellipsis-vT-5SVIp.js} +1 -1
- package/ui/dist/assets/{ellipsis-vertical-CO0UqE4-.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
- package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
- package/ui/dist/assets/{file-code-ChnhYYj1.js → file-code-ChOWdKXf.js} +1 -1
- package/ui/dist/assets/{folder-open-CHwA1-ve.js → folder-open-CkOUbIiP.js} +1 -1
- package/ui/dist/assets/{funnel-ByEjRFNB.js → funnel-uZkoSPP-.js} +1 -1
- package/ui/dist/assets/{git-branch-GTOPQgU4.js → git-branch-CwvUxj7C.js} +1 -1
- package/ui/dist/assets/{git-commit-horizontal-F5M84Kut.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
- package/ui/dist/assets/{globe-CQWfr7hT.js → globe-D_WpJdsj.js} +1 -1
- package/ui/dist/assets/{hash-nKC9gtLg.js → hash-CA0hJ7vh.js} +1 -1
- package/ui/dist/assets/{history-DfFSA9xJ.js → history-CEWMLELs.js} +1 -1
- package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
- package/ui/dist/assets/{index-a4Fxq0Hb.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-WmgjMhWF.js → layout-dashboard-BRUM0kpT.js} +1 -1
- package/ui/dist/assets/{lightbulb-Bo8hEr7B.js → lightbulb-CN2q1O5l.js} +1 -1
- package/ui/dist/assets/{link-2-YqrpQXBH.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-CD0H5hot.js → message-square-Bbb241am.js} +1 -1
- package/ui/dist/assets/package-CwT3IzFx.js +1 -0
- package/ui/dist/assets/{pencil-DpFnj5dn.js → pencil-CDmiHzoj.js} +1 -1
- package/ui/dist/assets/{play-DVgea_jT.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-BFxPYGx9.js → rocket--8ZHgdXJ.js} +1 -1
- package/ui/dist/assets/select-n108rXny.js +1 -0
- package/ui/dist/assets/{send-eYnW_7n-.js → send-Cu7MR2Qh.js} +1 -1
- package/ui/dist/assets/server-DmodxZp-.js +1 -0
- package/ui/dist/assets/{settings-2-scXUOuE_.js → settings-2-CkRNqkxj.js} +1 -1
- package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
- package/ui/dist/assets/{shield-check-PEr7nmVw.js → shield-check-ViI3nMKE.js} +1 -1
- package/ui/dist/assets/{shield-off-CLtXio62.js → shield-off-DN3tagkn.js} +1 -1
- package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
- package/ui/dist/assets/{smartphone-DusFfY0U.js → smartphone-5FghiXpA.js} +1 -1
- package/ui/dist/assets/{square-e1yxB2eR.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-tAwMmQ9G.js → tag-CH_vQliw.js} +1 -1
- package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
- package/ui/dist/assets/{timer-Vel1N3RP.js → timer-CdGVTb60.js} +1 -1
- package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
- package/ui/dist/assets/{trash-2-eM-CNwsZ.js → trash-2-CucZJL0N.js} +1 -1
- package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
- package/ui/dist/assets/{trending-up-BGafmjRo.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-DPvcd9Pi.js → wand-sparkles-BaH6pJnc.js} +1 -1
- package/ui/dist/assets/{wrench-B8s3zYVV.js → wrench-CjxjP6ok.js} +1 -1
- package/ui/dist/index.html +5 -2
- package/dist/chat/auto-reply.d.ts +0 -90
- package/dist/chat/auto-reply.js +0 -272
- package/dist/chat/execution/pty.d.ts +0 -92
- package/dist/chat/execution/pty.js +0 -285
- package/dist/chat/execution/tools/glinr-ops.d.ts +0 -202
- package/dist/chat/execution/tools/glinr-ops.js +0 -694
- package/dist/cli/commands/browser.d.ts +0 -3
- package/dist/cli/commands/browser.js +0 -138
- package/dist/cli/commands/canvas.d.ts +0 -3
- package/dist/cli/commands/canvas.js +0 -155
- package/dist/cli/commands/nodes.d.ts +0 -3
- package/dist/cli/commands/nodes.js +0 -193
- package/dist/diagnostics/exporters.d.ts +0 -21
- package/dist/diagnostics/exporters.js +0 -138
- package/dist/diagnostics/index.d.ts +0 -10
- package/dist/diagnostics/index.js +0 -9
- package/dist/diagnostics/middleware.d.ts +0 -12
- package/dist/diagnostics/middleware.js +0 -58
- package/dist/diagnostics/tracer.d.ts +0 -133
- package/dist/diagnostics/tracer.js +0 -257
- package/dist/discovery/index.d.ts +0 -8
- package/dist/discovery/index.js +0 -7
- package/dist/discovery/mdns.d.ts +0 -40
- package/dist/discovery/mdns.js +0 -249
- package/dist/plugins/registry.d.ts +0 -122
- package/dist/plugins/registry.js +0 -352
- package/dist/plugins/sandbox.d.ts +0 -77
- package/dist/plugins/sandbox.js +0 -287
- package/dist/plugins/search/brave.d.ts +0 -9
- package/dist/plugins/search/brave.js +0 -157
- package/dist/plugins/search/duckduckgo.d.ts +0 -9
- package/dist/plugins/search/duckduckgo.js +0 -171
- package/dist/plugins/search/index.d.ts +0 -13
- package/dist/plugins/search/index.js +0 -23
- package/dist/plugins/search/searxng.d.ts +0 -9
- package/dist/plugins/search/searxng.js +0 -170
- package/dist/plugins/search/serper.d.ts +0 -9
- package/dist/plugins/search/serper.js +0 -135
- package/dist/plugins/search/tavily.d.ts +0 -9
- package/dist/plugins/search/tavily.js +0 -146
- package/dist/providers/adapters/anthropic.d.ts +0 -26
- package/dist/providers/adapters/anthropic.js +0 -306
- package/dist/providers/adapters/base.d.ts +0 -53
- package/dist/providers/adapters/base.js +0 -99
- package/dist/providers/adapters/ollama.d.ts +0 -30
- package/dist/providers/adapters/ollama.js +0 -292
- package/dist/utils/ai-cache.d.ts +0 -72
- package/dist/utils/ai-cache.js +0 -204
- package/dist/utils/file-lock.d.ts +0 -85
- package/dist/utils/file-lock.js +0 -204
- package/ui/dist/assets/ActivityView-DIPQSJ_d.js +0 -1
- package/ui/dist/assets/AgentList-CqyaYrcq.js +0 -1
- package/ui/dist/assets/AnalyticsDashboard-C-mjuGHT.js +0 -1
- package/ui/dist/assets/AreaChart-CfYWmbtr.js +0 -1
- package/ui/dist/assets/CartesianChart-BaQ3It0c.js +0 -36
- package/ui/dist/assets/ChatView-DxxQy6pl.js +0 -10
- package/ui/dist/assets/CostsDashboard-CDBBcGkg.js +0 -1
- package/ui/dist/assets/EstimateSelect-CDjf5qKl.js +0 -1
- package/ui/dist/assets/FloatingChatbot-CZHjvJIe.js +0 -2
- package/ui/dist/assets/InviteCodeManagement-DTm-IPTm.js +0 -2
- package/ui/dist/assets/ProjectIcon-BMRpnM04.js +0 -1
- package/ui/dist/assets/ProjectList-D85TN0i0.js +0 -4
- package/ui/dist/assets/StatusIndicator-yig0uZEA.js +0 -1
- package/ui/dist/assets/SummaryList-BvS5Idnu.js +0 -1
- package/ui/dist/assets/TaskDetail-zarC1fOt.js +0 -1
- package/ui/dist/assets/TaskList-CyJq3ANE.js +0 -1
- package/ui/dist/assets/TicketBoard-BlWr3-iH.js +0 -1
- package/ui/dist/assets/TicketDetail-DmqWKj2W.js +0 -1
- package/ui/dist/assets/TicketList-Scj4pMWa.js +0 -1
- package/ui/dist/assets/UserManagement-BH7uG7dw.js +0 -2
- package/ui/dist/assets/ViewSwitcher-3HzZUdWn.js +0 -1
- package/ui/dist/assets/alert-dialog-DWPb2IfQ.js +0 -7
- package/ui/dist/assets/badge-DEmc3Z_l.js +0 -1
- package/ui/dist/assets/brain-CfFdLVqb.js +0 -1
- package/ui/dist/assets/constants-DhDjZe4P.js +0 -1
- package/ui/dist/assets/dialog-BOdGWhgE.js +0 -1
- package/ui/dist/assets/index--JkIxVXb.js +0 -67
- package/ui/dist/assets/index-Ca3vk7Gq.js +0 -1
- package/ui/dist/assets/index-DHGvP9mp.js +0 -1
- package/ui/dist/assets/index-DeI8lKRR.js +0 -1
- package/ui/dist/assets/index-WclMPci1.css +0 -1
- package/ui/dist/assets/index-Z4-RtZcs.js +0 -1
- package/ui/dist/assets/layers-DFeLExSa.js +0 -1
- package/ui/dist/assets/markdown-renderer-Croje6Xe.js +0 -36
- package/ui/dist/assets/popover-JXecfWG5.js +0 -1
- package/ui/dist/assets/progress-C1ghf1Fu.js +0 -1
- package/ui/dist/assets/select-MADP8m6Q.js +0 -1
- package/ui/dist/assets/server-CPMaysH8.js +0 -1
- package/ui/dist/assets/sheet-r6NSOxi-.js +0 -1
- package/ui/dist/assets/skeleton-C9oEzNlU.js +0 -1
- package/ui/dist/assets/switch-tNs0n-kz.js +0 -1
- package/ui/dist/assets/table-CXxtLicg.js +0 -1
- package/ui/dist/assets/textarea-BjiEeIWh.js +0 -1
- package/ui/dist/assets/tooltip-ZMwtfr1J.js +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<
|
|
3
|
-
|
|
2
|
+
<img src="ui/public/brand/profclaw-appicon.svg" alt="profClaw" width="120" height="120">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">profClaw</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<b>Self-hosted AI agent engine for developers.</b><br>
|
|
9
|
+
35 providers · 72 tools · 22 channels · runs on anything.
|
|
4
10
|
</p>
|
|
5
11
|
|
|
6
12
|
<p align="center">
|
|
@@ -8,6 +14,9 @@
|
|
|
8
14
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-AGPL--3.0-blue.svg?style=for-the-badge" alt="License: AGPL-3.0"></a>
|
|
9
15
|
<img src="https://img.shields.io/badge/Node.js-22%2B-339933?style=for-the-badge&logo=node.js&logoColor=white" alt="Node.js 22+">
|
|
10
16
|
<a href="https://github.com/profclaw/profclaw/pkgs/container/profclaw"><img src="https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=for-the-badge&logo=docker&logoColor=white" alt="Docker"></a>
|
|
17
|
+
<img src="https://img.shields.io/badge/providers-35-f43f5e?style=for-the-badge" alt="35 providers">
|
|
18
|
+
<img src="https://img.shields.io/badge/tools-72-fb7185?style=for-the-badge" alt="72 tools">
|
|
19
|
+
<img src="https://img.shields.io/badge/channels-22-e11d48?style=for-the-badge" alt="22 channels">
|
|
11
20
|
</p>
|
|
12
21
|
|
|
13
22
|
<p align="center">
|
|
@@ -18,47 +27,87 @@
|
|
|
18
27
|
|
|
19
28
|
---
|
|
20
29
|
|
|
21
|
-
|
|
30
|
+
<p align="center">
|
|
31
|
+
<img src="docs-local/demos/hero-chat.gif" alt="profClaw chat with Gemma 4, local and free" width="700">
|
|
32
|
+
</p>
|
|
22
33
|
|
|
23
|
-
|
|
34
|
+
<p align="center"><i>Chat with Gemma 4 locally. Zero cost. Runs on your Mac.</i></p>
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Table of Contents
|
|
39
|
+
|
|
40
|
+
- [Why profClaw](#why-profclaw)
|
|
41
|
+
- [Features](#features)
|
|
42
|
+
- [Quick Start](#quick-start)
|
|
43
|
+
- [Interactive TUI](#interactive-tui)
|
|
44
|
+
- [Slash Commands](#slash-commands)
|
|
45
|
+
- [Headless Mode](#headless-mode)
|
|
46
|
+
- [Deployment Modes](#deployment-modes)
|
|
47
|
+
- [Where It Runs](#where-it-runs)
|
|
48
|
+
- [Configuration](#configuration)
|
|
49
|
+
- [AI Providers](#ai-providers)
|
|
50
|
+
- [Chat Channels](#chat-channels)
|
|
51
|
+
- [Integrations](#integrations)
|
|
52
|
+
- [Architecture](#architecture)
|
|
53
|
+
- [Development](#development)
|
|
54
|
+
- [License](#license)
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Why profClaw
|
|
59
|
+
|
|
60
|
+
Most AI coding tools are cloud-only (Cursor, Devin) or single-purpose CLIs (Aider, SWE-Agent). profClaw runs on your machine, talks to 35 providers (or none, Ollama works offline), and does more than chat.
|
|
61
|
+
|
|
62
|
+
- Local-first. Your data stays on your hardware.
|
|
63
|
+
- 35 AI providers, including Ollama for fully offline usage.
|
|
64
|
+
- Interactive TUI with streaming markdown, syntax highlighting, and a model switcher.
|
|
65
|
+
- Routes tasks to the right agent based on capability scoring.
|
|
66
|
+
- Real task queue with retry, backoff, and dead letter handling (BullMQ + Redis).
|
|
67
|
+
- 22 chat channels: Slack, Discord, Telegram, WhatsApp, Teams, and more.
|
|
68
|
+
- Per-token cost tracking with budget alerts.
|
|
69
|
+
- 72 built-in tools: file ops, git, browser automation, cron, web search, voice.
|
|
70
|
+
- Pico mode runs on a Raspberry Pi Zero 2W in ~140MB RAM.
|
|
24
71
|
|
|
25
72
|
## Features
|
|
26
73
|
|
|
27
74
|
| | |
|
|
28
75
|
|---|---|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
76
|
+
| 35 AI providers | Anthropic, OpenAI, Google, Groq, Ollama, DeepSeek, Bedrock, and 28 more |
|
|
77
|
+
| 22 chat channels | Slack, Discord, Telegram, WhatsApp, iMessage, Matrix, Teams, and 15 more |
|
|
78
|
+
| 72 built-in tools | File ops, git, browser automation, cron, web search, canvas, voice |
|
|
79
|
+
| 50 skills | Coding agent, GitHub issues, Notion, Obsidian, image gen, and more |
|
|
80
|
+
| Interactive TUI | Streaming markdown, syntax highlighting, slash picker, model selector |
|
|
81
|
+
| MCP server | Model Context Protocol. Works with Claude Desktop, Cursor, any MCP client |
|
|
82
|
+
| Voice I/O | Whisper STT + TTS (ElevenLabs/OpenAI/system) + talk mode |
|
|
83
|
+
| Plugin SDK | Build and share plugins via npm or ClawHub |
|
|
84
|
+
| 3 deployment modes | Pico (~140MB), Mini (~145MB), Pro (full features) |
|
|
37
85
|
|
|
38
|
-
##
|
|
86
|
+
## Quick Start
|
|
39
87
|
|
|
40
|
-
|
|
88
|
+
```bash
|
|
89
|
+
npm install -g profclaw
|
|
90
|
+
profclaw init
|
|
91
|
+
profclaw chat --tui
|
|
92
|
+
```
|
|
41
93
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
| **pro** | + All channels, Redis queues, plugins, sandbox | ~200MB | Teams, production |
|
|
94
|
+
```bash
|
|
95
|
+
# Verify
|
|
96
|
+
curl http://localhost:3000/health
|
|
97
|
+
```
|
|
47
98
|
|
|
48
|
-
|
|
99
|
+
`profclaw init` scans your project, detects your stack, and writes a `PROFCLAW.md` context file. It picks up any AI provider keys already in your environment.
|
|
49
100
|
|
|
50
|
-
|
|
101
|
+
`profclaw chat --tui` opens the terminal UI with streaming responses, code highlighting, slash commands, and a model selector.
|
|
51
102
|
|
|
52
|
-
###
|
|
103
|
+
### Full setup wizard
|
|
53
104
|
|
|
54
105
|
```bash
|
|
55
|
-
npx profclaw onboard
|
|
56
|
-
# or
|
|
57
|
-
npm install -g profclaw@latest
|
|
58
|
-
profclaw setup # Interactive config
|
|
59
|
-
profclaw serve # Start the agent
|
|
106
|
+
npx profclaw onboard
|
|
60
107
|
```
|
|
61
108
|
|
|
109
|
+
Walks you through provider setup, config, and server start. Takes about 5 minutes.
|
|
110
|
+
|
|
62
111
|
### Docker
|
|
63
112
|
|
|
64
113
|
```bash
|
|
@@ -74,11 +123,11 @@ docker run -d \
|
|
|
74
123
|
```bash
|
|
75
124
|
git clone https://github.com/profclaw/profclaw.git
|
|
76
125
|
cd profclaw
|
|
77
|
-
cp .env.example .env
|
|
126
|
+
cp .env.example .env
|
|
78
127
|
docker compose up -d
|
|
79
128
|
```
|
|
80
129
|
|
|
81
|
-
|
|
130
|
+
Want free local AI? Add Ollama:
|
|
82
131
|
|
|
83
132
|
```bash
|
|
84
133
|
docker compose --profile ai up -d
|
|
@@ -90,9 +139,127 @@ docker compose --profile ai up -d
|
|
|
90
139
|
curl -fsSL https://raw.githubusercontent.com/profclaw/profclaw/main/install.sh | bash
|
|
91
140
|
```
|
|
92
141
|
|
|
142
|
+
## Interactive TUI
|
|
143
|
+
|
|
144
|
+
<p align="center">
|
|
145
|
+
<img src="docs-local/demos/tasks-demo.gif" alt="profClaw task management" width="700">
|
|
146
|
+
</p>
|
|
147
|
+
|
|
148
|
+
profClaw has a full terminal UI. No browser needed.
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
profclaw chat --tui
|
|
152
|
+
# or
|
|
153
|
+
profclaw tui
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
What you get:
|
|
157
|
+
|
|
158
|
+
- Streaming markdown rendered as the model responds
|
|
159
|
+
- Syntax-highlighted code blocks (100+ languages)
|
|
160
|
+
- Slash command picker: type `/` to browse skills
|
|
161
|
+
- Model selector: switch providers mid-conversation with `Ctrl+M`
|
|
162
|
+
- Tool execution panel showing every call, argument, and result
|
|
163
|
+
- Session history and full keyboard navigation
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
┌─ profClaw v2.x.x ─────────────────────────────────────────────┐
|
|
167
|
+
│ [Chat] [Tools] │
|
|
168
|
+
│ │
|
|
169
|
+
│ You: Review src/auth.ts for security issues │
|
|
170
|
+
│ │
|
|
171
|
+
│ Agent: I'll analyze auth.ts for security issues. read_file │
|
|
172
|
+
│ ───────── │
|
|
173
|
+
│ ## Security Analysis auth.ts │
|
|
174
|
+
│ │
|
|
175
|
+
│ **Critical**: JWT secret read from env without analyze │
|
|
176
|
+
│ fallback guard on line 42. If `JWT_SECRET` is ──────── │
|
|
177
|
+
│ undefined the app will sign tokens with `undefined`. auth.ts │
|
|
178
|
+
│ ... │
|
|
179
|
+
└─────────────────────────────── [claude-sonnet-4-6] [pro] ──────┘
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Slash Commands
|
|
183
|
+
|
|
184
|
+
Type `/` in any chat to run a skill. Skills are plain Markdown files, easy to create your own.
|
|
185
|
+
|
|
186
|
+
| Command | What it does |
|
|
187
|
+
|---|---|
|
|
188
|
+
| `/commit` | Write a conventional commit message for staged changes |
|
|
189
|
+
| `/review-pr 42` | Full code review of a pull request |
|
|
190
|
+
| `/deploy` | Run your deploy script with rollback awareness |
|
|
191
|
+
| `/summarize src/` | Summarize all files in a directory |
|
|
192
|
+
| `/web-research "topic"` | Research a topic across the web |
|
|
193
|
+
| `/analyze-code file.ts` | Security, performance, and style analysis |
|
|
194
|
+
| `/ticket PROJ-123` | Pull ticket context into the conversation |
|
|
195
|
+
| `/image "prompt"` | Generate an image via configured image provider |
|
|
196
|
+
| `/help` | List all available slash commands |
|
|
197
|
+
| `/exit` | Exit the current session |
|
|
198
|
+
|
|
199
|
+
See [Skills docs](https://profclaw.ai/docs/skills/overview) for all 50 built-in skills and how to create your own with a plain Markdown file.
|
|
200
|
+
|
|
201
|
+
## Headless Mode
|
|
202
|
+
|
|
203
|
+
<p align="center">
|
|
204
|
+
<img src="docs-local/demos/tools-demo.gif" alt="profClaw agentic tool calling" width="700">
|
|
205
|
+
</p>
|
|
206
|
+
|
|
207
|
+
Run agents from scripts, CI pipelines, or other services:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# One-shot message
|
|
211
|
+
profclaw chat "Summarize the last 10 git commits"
|
|
212
|
+
|
|
213
|
+
# JSON output for scripting
|
|
214
|
+
profclaw chat "List open TODOs in src/" --output json
|
|
215
|
+
|
|
216
|
+
# Run a skill headlessly
|
|
217
|
+
profclaw skill run commit --message "feat: add auth"
|
|
218
|
+
|
|
219
|
+
# Agent task with file context
|
|
220
|
+
profclaw agent run "Review src/ for security issues" --files src/
|
|
221
|
+
|
|
222
|
+
# Verify your setup
|
|
223
|
+
profclaw doctor
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
REST API:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
curl -X POST http://localhost:3000/api/chat/message \
|
|
230
|
+
-H "Content-Type: application/json" \
|
|
231
|
+
-d '{"message": "List open GitHub issues", "provider": "anthropic"}'
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Deployment Modes
|
|
235
|
+
|
|
236
|
+
Same binary, different scale. Set `PROFCLAW_MODE` and go:
|
|
237
|
+
|
|
238
|
+
| Mode | What you get | RAM | Best for |
|
|
239
|
+
|------|-------------|-----|----------|
|
|
240
|
+
| **pico** | Agent + tools + 1 chat channel + cron. No UI. | ~140MB | Raspberry Pi, $5 VPS, home server |
|
|
241
|
+
| **mini** | + Dashboard, integrations, 3 channels | ~145MB | Personal dev server, small VPS |
|
|
242
|
+
| **pro** | + All channels, Redis queues, plugins, browser tools | ~200MB | Teams, production |
|
|
243
|
+
|
|
244
|
+
Set via `PROFCLAW_MODE=pico|mini|pro` environment variable.
|
|
245
|
+
|
|
246
|
+
## Where It Runs
|
|
247
|
+
|
|
248
|
+
| Hardware | RAM | Recommended mode |
|
|
249
|
+
|----------|-----|-----------------|
|
|
250
|
+
| Raspberry Pi Zero 2W | 512MB | pico |
|
|
251
|
+
| Raspberry Pi 3/4/5 | 1-8GB | mini or pro |
|
|
252
|
+
| Orange Pi / Rock Pi | 1-4GB | mini or pro |
|
|
253
|
+
| $5/mo VPS (Hetzner, OVH) | 512MB-1GB | pico or mini |
|
|
254
|
+
| Old laptop / home PC | 4-16GB | pro |
|
|
255
|
+
| Docker (alongside other services) | 512MB+ | any mode |
|
|
256
|
+
| Old Android phone (Termux) | 1-2GB | pico |
|
|
257
|
+
|
|
258
|
+
profClaw requires Node.js 22+. For bare-metal embedded devices (ESP32, Arduino), see [MimiClaw](https://github.com/mimiclaw) (C) or [PicoClaw](https://github.com/picoclaw) (Go).
|
|
259
|
+
|
|
93
260
|
## Configuration
|
|
94
261
|
|
|
95
|
-
The setup wizard (`profclaw
|
|
262
|
+
The setup wizard (`profclaw onboard`) handles everything interactively. Or set environment variables:
|
|
96
263
|
|
|
97
264
|
```bash
|
|
98
265
|
# AI Provider (pick one)
|
|
@@ -101,34 +268,16 @@ OPENAI_API_KEY=sk-xxx
|
|
|
101
268
|
OLLAMA_BASE_URL=http://localhost:11434
|
|
102
269
|
|
|
103
270
|
# Deployment
|
|
104
|
-
PROFCLAW_MODE=mini
|
|
105
|
-
PORT=3000
|
|
271
|
+
PROFCLAW_MODE=mini
|
|
272
|
+
PORT=3000
|
|
106
273
|
|
|
107
274
|
# Optional
|
|
108
275
|
REDIS_URL=redis://localhost:6379 # Required for pro mode
|
|
109
276
|
```
|
|
110
277
|
|
|
111
|
-
|
|
278
|
+
Run `profclaw doctor` to verify your configuration at any time.
|
|
112
279
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
src/
|
|
117
|
-
adapters/ AI agent adapters (tool calling, streaming)
|
|
118
|
-
chat/ Chat engine + execution pipeline
|
|
119
|
-
providers/ Slack, Discord, Telegram, WhatsApp, WebChat, ...
|
|
120
|
-
execution/ Tool executor, sandbox, agentic loop
|
|
121
|
-
core/ Deployment modes, feature flags
|
|
122
|
-
integrations/ GitHub, Jira, Linear webhooks
|
|
123
|
-
queue/ BullMQ (pro) + in-memory (pico/mini) task queue
|
|
124
|
-
providers/ 35 AI SDK providers
|
|
125
|
-
skills/ Skill loader and registry
|
|
126
|
-
mcp/ MCP server (stdio + SSE)
|
|
127
|
-
types/ Shared TypeScript types
|
|
128
|
-
|
|
129
|
-
ui/src/ React 19 + Vite dashboard (mini/pro only)
|
|
130
|
-
skills/ Built-in skill definitions
|
|
131
|
-
```
|
|
280
|
+
See [`.env.example`](.env.example) for all 130+ options.
|
|
132
281
|
|
|
133
282
|
## AI Providers
|
|
134
283
|
|
|
@@ -145,31 +294,78 @@ skills/ Built-in skill definitions
|
|
|
145
294
|
| DeepSeek | V3, R1 | No |
|
|
146
295
|
| Azure OpenAI | GPT-4o | No |
|
|
147
296
|
| xAI | Grok | No |
|
|
148
|
-
|
|
|
149
|
-
| Moonshot | Kimi | No |
|
|
150
|
-
| Qwen API | Qwen 2.5 | No |
|
|
297
|
+
| OpenRouter | Any model | No |
|
|
151
298
|
| Together | Open models | No |
|
|
152
299
|
| Fireworks | Open models | No |
|
|
153
300
|
| Mistral | Mistral Large, Codestral | No |
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
301
|
+
| LM Studio | Local models | Yes |
|
|
302
|
+
| ... and 21 more | HuggingFace, NVIDIA NIM, Cerebras, Replicate, Zhipu, Moonshot, Qwen, etc. | |
|
|
303
|
+
|
|
304
|
+
## Chat Channels
|
|
305
|
+
|
|
306
|
+
| Channel | Protocol |
|
|
307
|
+
|---------|----------|
|
|
308
|
+
| Slack | Bolt SDK |
|
|
309
|
+
| Discord | HTTP Interactions |
|
|
310
|
+
| Telegram | Bot API |
|
|
311
|
+
| WhatsApp | Cloud API |
|
|
312
|
+
| WebChat | SSE (browser-based) |
|
|
313
|
+
| Matrix | Client-Server API |
|
|
314
|
+
| Google Chat | Webhook + API |
|
|
315
|
+
| Microsoft Teams | Bot Framework |
|
|
316
|
+
| iMessage | BlueBubbles |
|
|
317
|
+
| Signal | signald bridge |
|
|
318
|
+
| IRC | TLS, RFC 1459 |
|
|
319
|
+
| LINE | Messaging API |
|
|
320
|
+
| Mattermost | REST API v4 |
|
|
321
|
+
| DingTalk | OpenAPI + webhook |
|
|
322
|
+
| WeCom | WeChat Work API |
|
|
323
|
+
| Feishu/Lark | Open Platform |
|
|
324
|
+
| QQ | Bot API |
|
|
325
|
+
| Nostr | Relay protocol |
|
|
326
|
+
| Twitch | Helix API + IRC |
|
|
327
|
+
| Zalo | OA API v3 |
|
|
328
|
+
| Nextcloud Talk | OCS API |
|
|
329
|
+
| Synology Chat | Webhook |
|
|
157
330
|
|
|
158
331
|
## Integrations
|
|
159
332
|
|
|
160
333
|
| Platform | Features |
|
|
161
334
|
|----------|----------|
|
|
162
|
-
|
|
|
163
|
-
|
|
|
164
|
-
|
|
|
165
|
-
|
|
|
166
|
-
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
335
|
+
| GitHub | Webhooks, OAuth, issue sync, PR automation |
|
|
336
|
+
| Jira | Webhooks, OAuth, issue sync, transitions |
|
|
337
|
+
| Linear | Webhooks, OAuth, issue sync |
|
|
338
|
+
| Cloudflare | Workers deployment, KV, D1 |
|
|
339
|
+
| Tailscale | Private network access |
|
|
340
|
+
|
|
341
|
+
## Architecture
|
|
342
|
+
|
|
343
|
+
```
|
|
344
|
+
src/
|
|
345
|
+
adapters/ AI agent adapters (tool calling, streaming)
|
|
346
|
+
chat/ Chat engine + execution pipeline
|
|
347
|
+
providers/ Slack, Discord, Telegram, WhatsApp, WebChat, ...
|
|
348
|
+
execution/ Tool executor, sandbox, agentic loop
|
|
349
|
+
core/ Deployment modes, feature flags
|
|
350
|
+
integrations/ GitHub, Jira, Linear webhooks
|
|
351
|
+
queue/ BullMQ (pro) + in-memory (pico/mini) task queue
|
|
352
|
+
providers/ 35 AI SDK providers
|
|
353
|
+
skills/ Skill loader and registry
|
|
354
|
+
mcp/ MCP server (stdio + SSE)
|
|
355
|
+
tui/ Interactive terminal UI (ink + blessed)
|
|
356
|
+
types/ Shared TypeScript types
|
|
357
|
+
|
|
358
|
+
ui/src/ React 19 + Vite dashboard (mini/pro only)
|
|
359
|
+
skills/ Built-in skill definitions (Markdown)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Design decisions:
|
|
363
|
+
- Same binary scales from pico to pro. Features are gated at runtime.
|
|
364
|
+
- Adding an AI provider is one file implementing `ModelAdapter`.
|
|
365
|
+
- Skills are plain `.md` files. No code needed.
|
|
366
|
+
- BullMQ for production queues, in-memory fallback for pico/mini.
|
|
367
|
+
|
|
368
|
+
See [Architecture docs](https://profclaw.ai/docs/architecture/overview) for a deep dive.
|
|
173
369
|
|
|
174
370
|
## Development
|
|
175
371
|
|
|
@@ -187,10 +383,13 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines.
|
|
|
187
383
|
|
|
188
384
|
See [SECURITY.md](SECURITY.md) for our security policy and how to report vulnerabilities.
|
|
189
385
|
|
|
190
|
-
##
|
|
386
|
+
## Need help?
|
|
191
387
|
|
|
192
|
-
|
|
388
|
+
- [Quickstart guide](https://docs.profclaw.ai/guides/quickstart)
|
|
389
|
+
- [Full docs](https://docs.profclaw.ai)
|
|
390
|
+
- [Report a bug](https://github.com/profclaw/profclaw/issues/new?template=bug_report.md)
|
|
391
|
+
- [Discord](https://discord.gg/profclaw)
|
|
193
392
|
|
|
194
393
|
## License
|
|
195
394
|
|
|
196
|
-
[AGPL-3.0](LICENSE)
|
|
395
|
+
[AGPL-3.0](LICENSE)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Summary Tracker
|
|
3
|
+
*
|
|
4
|
+
* Provides real-time 1-2 word progress summaries of what agents are doing,
|
|
5
|
+
* suitable for display in CLI/UI progress indicators.
|
|
6
|
+
*/
|
|
7
|
+
export interface AgentSummary {
|
|
8
|
+
sessionId: string;
|
|
9
|
+
status: 'idle' | 'thinking' | 'executing' | 'waiting';
|
|
10
|
+
currentAction: string;
|
|
11
|
+
lastToolName?: string;
|
|
12
|
+
lastToolArgs?: string;
|
|
13
|
+
stepCount: number;
|
|
14
|
+
tokensUsed: number;
|
|
15
|
+
startedAt: number;
|
|
16
|
+
updatedAt: number;
|
|
17
|
+
}
|
|
18
|
+
type SseBroadcaster = (eventType: string, data: Record<string, unknown>) => void;
|
|
19
|
+
export declare class AgentSummaryTracker {
|
|
20
|
+
private summaries;
|
|
21
|
+
private broadcaster;
|
|
22
|
+
registerSSEBroadcaster(broadcaster: SseBroadcaster): void;
|
|
23
|
+
start(sessionId: string): void;
|
|
24
|
+
update(sessionId: string, updates: Partial<AgentSummary>): void;
|
|
25
|
+
/**
|
|
26
|
+
* Auto-generate a human-readable summary from a tool call.
|
|
27
|
+
*
|
|
28
|
+
* Examples:
|
|
29
|
+
* read_file({ path: '/src/auth.ts' }) → "Reading auth.ts"
|
|
30
|
+
* write_file({ path: '/src/fix.ts' }) → "Writing fix.ts"
|
|
31
|
+
* bash({ command: 'npm test' }) → "Running npm test"
|
|
32
|
+
* search_files({ query: 'login' }) → "Searching for 'login'"
|
|
33
|
+
* git_commit({ message: 'fix: auth' }) → "Committing changes"
|
|
34
|
+
* complete_task → "Completing task"
|
|
35
|
+
* default → "Using {toolName}"
|
|
36
|
+
*/
|
|
37
|
+
summarizeToolCall(sessionId: string, toolName: string, args: unknown): string;
|
|
38
|
+
get(sessionId: string): AgentSummary | undefined;
|
|
39
|
+
getAll(): AgentSummary[];
|
|
40
|
+
end(sessionId: string): void;
|
|
41
|
+
}
|
|
42
|
+
export declare function getAgentSummaryTracker(): AgentSummaryTracker;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=agent-summary.d.ts.map
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Summary Tracker
|
|
3
|
+
*
|
|
4
|
+
* Provides real-time 1-2 word progress summaries of what agents are doing,
|
|
5
|
+
* suitable for display in CLI/UI progress indicators.
|
|
6
|
+
*/
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
function extractFilename(filePath) {
|
|
9
|
+
if (typeof filePath !== 'string' || filePath.length === 0)
|
|
10
|
+
return undefined;
|
|
11
|
+
return path.basename(filePath);
|
|
12
|
+
}
|
|
13
|
+
function extractCommand(command) {
|
|
14
|
+
if (typeof command !== 'string' || command.length === 0)
|
|
15
|
+
return undefined;
|
|
16
|
+
// Truncate long commands to first 40 chars
|
|
17
|
+
const trimmed = command.trim();
|
|
18
|
+
return trimmed.length > 40 ? `${trimmed.substring(0, 40)}…` : trimmed;
|
|
19
|
+
}
|
|
20
|
+
function extractQuery(query) {
|
|
21
|
+
if (typeof query !== 'string' || query.length === 0)
|
|
22
|
+
return undefined;
|
|
23
|
+
const trimmed = query.trim();
|
|
24
|
+
return trimmed.length > 30 ? `${trimmed.substring(0, 30)}…` : trimmed;
|
|
25
|
+
}
|
|
26
|
+
function isRecord(value) {
|
|
27
|
+
return typeof value === 'object' && value !== null;
|
|
28
|
+
}
|
|
29
|
+
function toArgs(input) {
|
|
30
|
+
return isRecord(input) ? input : {};
|
|
31
|
+
}
|
|
32
|
+
export class AgentSummaryTracker {
|
|
33
|
+
summaries = new Map();
|
|
34
|
+
broadcaster;
|
|
35
|
+
registerSSEBroadcaster(broadcaster) {
|
|
36
|
+
this.broadcaster = broadcaster;
|
|
37
|
+
}
|
|
38
|
+
start(sessionId) {
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const summary = {
|
|
41
|
+
sessionId,
|
|
42
|
+
status: 'idle',
|
|
43
|
+
currentAction: 'Starting',
|
|
44
|
+
stepCount: 0,
|
|
45
|
+
tokensUsed: 0,
|
|
46
|
+
startedAt: now,
|
|
47
|
+
updatedAt: now,
|
|
48
|
+
};
|
|
49
|
+
this.summaries.set(sessionId, summary);
|
|
50
|
+
this.broadcaster?.('agent:summary', summary);
|
|
51
|
+
}
|
|
52
|
+
update(sessionId, updates) {
|
|
53
|
+
const existing = this.summaries.get(sessionId);
|
|
54
|
+
if (!existing)
|
|
55
|
+
return;
|
|
56
|
+
const updated = {
|
|
57
|
+
...existing,
|
|
58
|
+
...updates,
|
|
59
|
+
sessionId, // always preserve original sessionId
|
|
60
|
+
updatedAt: Date.now(),
|
|
61
|
+
};
|
|
62
|
+
this.summaries.set(sessionId, updated);
|
|
63
|
+
this.broadcaster?.('agent:summary', updated);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Auto-generate a human-readable summary from a tool call.
|
|
67
|
+
*
|
|
68
|
+
* Examples:
|
|
69
|
+
* read_file({ path: '/src/auth.ts' }) → "Reading auth.ts"
|
|
70
|
+
* write_file({ path: '/src/fix.ts' }) → "Writing fix.ts"
|
|
71
|
+
* bash({ command: 'npm test' }) → "Running npm test"
|
|
72
|
+
* search_files({ query: 'login' }) → "Searching for 'login'"
|
|
73
|
+
* git_commit({ message: 'fix: auth' }) → "Committing changes"
|
|
74
|
+
* complete_task → "Completing task"
|
|
75
|
+
* default → "Using {toolName}"
|
|
76
|
+
*/
|
|
77
|
+
summarizeToolCall(sessionId, toolName, args) {
|
|
78
|
+
const argsRecord = toArgs(args);
|
|
79
|
+
// File reads
|
|
80
|
+
if (toolName === 'read_file' || toolName === 'Read') {
|
|
81
|
+
const filename = extractFilename(argsRecord['path'] ?? argsRecord['file_path']);
|
|
82
|
+
return filename ? `Reading ${filename}` : 'Reading file';
|
|
83
|
+
}
|
|
84
|
+
// File writes
|
|
85
|
+
if (toolName === 'write_file' || toolName === 'Write' || toolName === 'create_file') {
|
|
86
|
+
const filename = extractFilename(argsRecord['path'] ?? argsRecord['file_path']);
|
|
87
|
+
return filename ? `Writing ${filename}` : 'Writing file';
|
|
88
|
+
}
|
|
89
|
+
// File edits
|
|
90
|
+
if (toolName === 'edit_file' || toolName === 'Edit' || toolName === 'str_replace_editor') {
|
|
91
|
+
const filename = extractFilename(argsRecord['path'] ?? argsRecord['file_path']);
|
|
92
|
+
return filename ? `Editing ${filename}` : 'Editing file';
|
|
93
|
+
}
|
|
94
|
+
// Bash/shell execution
|
|
95
|
+
if (toolName === 'bash' || toolName === 'Bash' || toolName === 'execute_command' || toolName === 'run_command') {
|
|
96
|
+
const cmd = extractCommand(argsRecord['command'] ?? argsRecord['cmd']);
|
|
97
|
+
return cmd ? `Running ${cmd}` : 'Running command';
|
|
98
|
+
}
|
|
99
|
+
// File search / glob
|
|
100
|
+
if (toolName === 'search_files' || toolName === 'Glob' || toolName === 'glob') {
|
|
101
|
+
const query = extractQuery(argsRecord['query'] ?? argsRecord['pattern']);
|
|
102
|
+
return query ? `Searching for '${query}'` : 'Searching files';
|
|
103
|
+
}
|
|
104
|
+
// Content search / grep
|
|
105
|
+
if (toolName === 'grep' || toolName === 'Grep' || toolName === 'search_content') {
|
|
106
|
+
const query = extractQuery(argsRecord['query'] ?? argsRecord['pattern']);
|
|
107
|
+
return query ? `Searching for '${query}'` : 'Searching content';
|
|
108
|
+
}
|
|
109
|
+
// Git operations
|
|
110
|
+
if (toolName === 'git_commit' || toolName === 'git_push') {
|
|
111
|
+
return 'Committing changes';
|
|
112
|
+
}
|
|
113
|
+
if (toolName === 'git_status') {
|
|
114
|
+
return 'Checking git status';
|
|
115
|
+
}
|
|
116
|
+
if (toolName === 'git_diff') {
|
|
117
|
+
return 'Reviewing changes';
|
|
118
|
+
}
|
|
119
|
+
// Task completion
|
|
120
|
+
if (toolName === 'complete_task') {
|
|
121
|
+
return 'Completing task';
|
|
122
|
+
}
|
|
123
|
+
// Web fetch / browse
|
|
124
|
+
if (toolName === 'web_fetch' || toolName === 'WebFetch' || toolName === 'fetch_url' || toolName === 'browse') {
|
|
125
|
+
const url = argsRecord['url'] ?? argsRecord['href'];
|
|
126
|
+
if (typeof url === 'string' && url.length > 0) {
|
|
127
|
+
try {
|
|
128
|
+
const { hostname } = new URL(url);
|
|
129
|
+
return `Fetching ${hostname}`;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// malformed URL - fall through to default
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return 'Fetching URL';
|
|
136
|
+
}
|
|
137
|
+
// Task tool — spawn sub-agent
|
|
138
|
+
if (toolName === 'Task' || toolName === 'task') {
|
|
139
|
+
return 'Spawning agent';
|
|
140
|
+
}
|
|
141
|
+
// Default fallback: humanize camelCase/snake_case tool name
|
|
142
|
+
const humanized = toolName
|
|
143
|
+
.replace(/_/g, ' ')
|
|
144
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
145
|
+
.toLowerCase();
|
|
146
|
+
return `Using ${humanized}`;
|
|
147
|
+
}
|
|
148
|
+
get(sessionId) {
|
|
149
|
+
return this.summaries.get(sessionId);
|
|
150
|
+
}
|
|
151
|
+
getAll() {
|
|
152
|
+
return Array.from(this.summaries.values());
|
|
153
|
+
}
|
|
154
|
+
end(sessionId) {
|
|
155
|
+
const existing = this.summaries.get(sessionId);
|
|
156
|
+
if (existing) {
|
|
157
|
+
this.broadcaster?.('agent:summary', {
|
|
158
|
+
...existing,
|
|
159
|
+
status: 'idle',
|
|
160
|
+
currentAction: 'Done',
|
|
161
|
+
updatedAt: Date.now(),
|
|
162
|
+
ended: true,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
this.summaries.delete(sessionId);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Singleton instance
|
|
169
|
+
let tracker;
|
|
170
|
+
export function getAgentSummaryTracker() {
|
|
171
|
+
if (!tracker) {
|
|
172
|
+
tracker = new AgentSummaryTracker();
|
|
173
|
+
}
|
|
174
|
+
return tracker;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=agent-summary.js.map
|