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.
Files changed (535) hide show
  1. package/.env.example +14 -2
  2. package/CHANGELOG.md +54 -34
  3. package/CONTRIBUTING.md +23 -5
  4. package/Dockerfile +39 -23
  5. package/README.md +271 -72
  6. package/dist/agents/agent-summary.d.ts +44 -0
  7. package/dist/agents/agent-summary.js +176 -0
  8. package/dist/agents/auto-memory.d.ts +59 -0
  9. package/dist/agents/auto-memory.js +310 -0
  10. package/dist/agents/checkpoint-manager.d.ts +76 -0
  11. package/dist/agents/checkpoint-manager.js +156 -0
  12. package/dist/agents/circuit-breaker.d.ts +54 -0
  13. package/dist/agents/circuit-breaker.js +153 -0
  14. package/dist/agents/context-compactor.d.ts +70 -0
  15. package/dist/agents/context-compactor.js +361 -0
  16. package/dist/agents/conversation-branch.d.ts +55 -0
  17. package/dist/agents/conversation-branch.js +115 -0
  18. package/dist/agents/error-recovery.d.ts +44 -0
  19. package/dist/agents/error-recovery.js +197 -0
  20. package/dist/agents/events.d.ts +76 -0
  21. package/dist/agents/events.js +8 -0
  22. package/dist/agents/executor.d.ts +35 -1
  23. package/dist/agents/executor.js +573 -124
  24. package/dist/agents/file-snapshots.d.ts +72 -0
  25. package/dist/agents/file-snapshots.js +182 -0
  26. package/dist/agents/index.d.ts +2 -0
  27. package/dist/agents/orchestrator.d.ts +183 -0
  28. package/dist/agents/orchestrator.js +495 -0
  29. package/dist/agents/permissions.d.ts +63 -0
  30. package/dist/agents/permissions.js +138 -0
  31. package/dist/agents/plan-mode.d.ts +71 -0
  32. package/dist/agents/plan-mode.js +186 -0
  33. package/dist/agents/prompt-suggestions.d.ts +33 -0
  34. package/dist/agents/prompt-suggestions.js +208 -0
  35. package/dist/agents/rate-limit-monitor.d.ts +56 -0
  36. package/dist/agents/rate-limit-monitor.js +224 -0
  37. package/dist/agents/result-store.d.ts +37 -0
  38. package/dist/agents/result-store.js +104 -0
  39. package/dist/agents/session-diff.d.ts +43 -0
  40. package/dist/agents/session-diff.js +258 -0
  41. package/dist/agents/tool-loader.d.ts +65 -0
  42. package/dist/agents/tool-loader.js +273 -0
  43. package/dist/agents/transcript.d.ts +96 -0
  44. package/dist/agents/transcript.js +267 -0
  45. package/dist/agents/worktree-manager.d.ts +80 -0
  46. package/dist/agents/worktree-manager.js +203 -0
  47. package/dist/auth/middleware.js +14 -0
  48. package/dist/chat/agentic-executor.d.ts +7 -0
  49. package/dist/chat/agentic-executor.js +253 -30
  50. package/dist/chat/conversations.d.ts +2 -0
  51. package/dist/chat/conversations.js +8 -0
  52. package/dist/chat/execution/executor.d.ts +8 -0
  53. package/dist/chat/execution/executor.js +157 -103
  54. package/dist/chat/execution/index.js +5 -1
  55. package/dist/chat/execution/tool-router.js +40 -14
  56. package/dist/chat/execution/tools/canvas.d.ts +2 -2
  57. package/dist/chat/execution/tools/code-tools.d.ts +66 -0
  58. package/dist/chat/execution/tools/code-tools.js +353 -0
  59. package/dist/chat/execution/tools/complete-task.d.ts +2 -2
  60. package/dist/chat/execution/tools/cron-tool.d.ts +26 -10
  61. package/dist/chat/execution/tools/cron-tool.js +48 -3
  62. package/dist/chat/execution/tools/decompose-task.d.ts +58 -0
  63. package/dist/chat/execution/tools/decompose-task.js +166 -0
  64. package/dist/chat/execution/tools/exec.d.ts +5 -2
  65. package/dist/chat/execution/tools/exec.js +294 -155
  66. package/dist/chat/execution/tools/feed-tools.d.ts +77 -0
  67. package/dist/chat/execution/tools/feed-tools.js +142 -0
  68. package/dist/chat/execution/tools/file-ops.d.ts +1 -1
  69. package/dist/chat/execution/tools/github.d.ts +2 -2
  70. package/dist/chat/execution/tools/index.d.ts +15 -3
  71. package/dist/chat/execution/tools/index.js +125 -12
  72. package/dist/chat/execution/tools/integrations.d.ts +8 -8
  73. package/dist/chat/execution/tools/multi-patch.d.ts +53 -0
  74. package/dist/chat/execution/tools/multi-patch.js +373 -0
  75. package/dist/chat/execution/tools/openai-image-gen.d.ts +2 -2
  76. package/dist/chat/execution/tools/plan-tools.d.ts +80 -0
  77. package/dist/chat/execution/tools/plan-tools.js +134 -0
  78. package/dist/chat/execution/tools/profclaw-ops.d.ts +6 -6
  79. package/dist/chat/execution/tools/repl-tool.d.ts +46 -0
  80. package/dist/chat/execution/tools/repl-tool.js +207 -0
  81. package/dist/chat/execution/tools/sessions-send.d.ts +2 -2
  82. package/dist/chat/execution/tools/slack-actions.d.ts +2 -2
  83. package/dist/chat/execution/tools/system.d.ts +4 -4
  84. package/dist/chat/execution/tools/todo-tool.d.ts +72 -0
  85. package/dist/chat/execution/tools/todo-tool.js +152 -0
  86. package/dist/chat/execution/tools/tool-search.d.ts +50 -0
  87. package/dist/chat/execution/tools/tool-search.js +155 -0
  88. package/dist/chat/execution/types.d.ts +21 -14
  89. package/dist/chat/execution/workflows/executor.d.ts +11 -0
  90. package/dist/chat/execution/workflows/executor.js +99 -1
  91. package/dist/chat/execution/workflows/types.d.ts +35 -2
  92. package/dist/chat/format/index.d.ts +1 -0
  93. package/dist/chat/format/index.js +1 -0
  94. package/dist/chat/format/markdown-convert.d.ts +23 -0
  95. package/dist/chat/format/markdown-convert.js +149 -0
  96. package/dist/chat/index.d.ts +1 -1
  97. package/dist/chat/index.js +1 -1
  98. package/dist/chat/message-handler.js +58 -6
  99. package/dist/chat/proactive/index.d.ts +62 -0
  100. package/dist/chat/proactive/index.js +147 -0
  101. package/dist/chat/prompt-adapter.js +2 -0
  102. package/dist/chat/providers/irc/index.d.ts +2 -2
  103. package/dist/chat/providers/slack/index.d.ts +2 -2
  104. package/dist/chat/providers/telegram/index.d.ts +2 -0
  105. package/dist/chat/providers/telegram/index.js +21 -2
  106. package/dist/chat/system-prompts.d.ts +3 -3
  107. package/dist/chat/system-prompts.js +116 -61
  108. package/dist/chat/tools.d.ts +6 -6
  109. package/dist/cli/commands/auth.js +64 -1
  110. package/dist/cli/commands/chat.js +1327 -138
  111. package/dist/cli/commands/doctor.js +222 -16
  112. package/dist/cli/commands/history.d.ts +3 -0
  113. package/dist/cli/commands/history.js +138 -0
  114. package/dist/cli/commands/import.d.ts +44 -0
  115. package/dist/cli/commands/import.js +526 -0
  116. package/dist/cli/commands/init.d.ts +13 -0
  117. package/dist/cli/commands/init.js +381 -0
  118. package/dist/cli/commands/models.js +39 -26
  119. package/dist/cli/commands/onboard.js +263 -98
  120. package/dist/cli/commands/plan.d.ts +13 -0
  121. package/dist/cli/commands/plan.js +184 -0
  122. package/dist/cli/commands/serve.d.ts +7 -0
  123. package/dist/cli/commands/serve.js +77 -18
  124. package/dist/cli/commands/setup.js +375 -91
  125. package/dist/cli/commands/status.js +54 -0
  126. package/dist/cli/commands/tools.js +13 -13
  127. package/dist/cli/commands/tui.js +26 -1
  128. package/dist/cli/index.js +19 -6
  129. package/dist/cli/ink/App.d.ts +13 -0
  130. package/dist/cli/ink/App.js +6 -0
  131. package/dist/cli/ink/ChatApp.d.ts +60 -0
  132. package/dist/cli/ink/ChatApp.js +325 -0
  133. package/dist/cli/ink/DashboardApp.d.ts +3 -0
  134. package/dist/cli/ink/DashboardApp.js +143 -0
  135. package/dist/cli/ink/components/AgentStatus.d.ts +17 -0
  136. package/dist/cli/ink/components/AgentStatus.js +33 -0
  137. package/dist/cli/ink/components/ChannelList.d.ts +17 -0
  138. package/dist/cli/ink/components/ChannelList.js +33 -0
  139. package/dist/cli/ink/components/ConnectionStatus.d.ts +19 -0
  140. package/dist/cli/ink/components/ConnectionStatus.js +50 -0
  141. package/dist/cli/ink/components/CostBar.d.ts +19 -0
  142. package/dist/cli/ink/components/CostBar.js +35 -0
  143. package/dist/cli/ink/components/HookStatus.d.ts +15 -0
  144. package/dist/cli/ink/components/HookStatus.js +7 -0
  145. package/dist/cli/ink/components/PermissionPrompt.d.ts +21 -0
  146. package/dist/cli/ink/components/PermissionPrompt.js +51 -0
  147. package/dist/cli/ink/components/PlanView.d.ts +23 -0
  148. package/dist/cli/ink/components/PlanView.js +26 -0
  149. package/dist/cli/ink/components/ProviderList.d.ts +16 -0
  150. package/dist/cli/ink/components/ProviderList.js +16 -0
  151. package/dist/cli/ink/components/SessionHeader.d.ts +15 -0
  152. package/dist/cli/ink/components/SessionHeader.js +15 -0
  153. package/dist/cli/ink/components/StreamingMessage.d.ts +20 -0
  154. package/dist/cli/ink/components/StreamingMessage.js +27 -0
  155. package/dist/cli/ink/components/SuggestionBar.d.ts +15 -0
  156. package/dist/cli/ink/components/SuggestionBar.js +28 -0
  157. package/dist/cli/ink/components/SystemHealth.d.ts +20 -0
  158. package/dist/cli/ink/components/SystemHealth.js +39 -0
  159. package/dist/cli/ink/components/TaskList.d.ts +17 -0
  160. package/dist/cli/ink/components/TaskList.js +59 -0
  161. package/dist/cli/ink/components/ToolCall.d.ts +17 -0
  162. package/dist/cli/ink/components/ToolCall.js +43 -0
  163. package/dist/cli/ink/index.d.ts +23 -0
  164. package/dist/cli/ink/index.js +15 -0
  165. package/dist/cli/ink/keybindings.d.ts +35 -0
  166. package/dist/cli/ink/keybindings.js +105 -0
  167. package/dist/cli/ink/markdown-renderer.d.ts +47 -0
  168. package/dist/cli/ink/markdown-renderer.js +380 -0
  169. package/dist/cli/ink/output-styles.d.ts +39 -0
  170. package/dist/cli/ink/output-styles.js +119 -0
  171. package/dist/cli/interactive/auto-serve.d.ts +38 -0
  172. package/dist/cli/interactive/auto-serve.js +209 -0
  173. package/dist/cli/interactive/index.d.ts +25 -0
  174. package/dist/cli/interactive/index.js +23 -0
  175. package/dist/cli/interactive/picker.d.ts +28 -0
  176. package/dist/cli/interactive/picker.js +153 -0
  177. package/dist/cli/interactive/renderer.d.ts +26 -0
  178. package/dist/cli/interactive/renderer.js +555 -0
  179. package/dist/cli/interactive/repl.d.ts +14 -0
  180. package/dist/cli/interactive/repl.js +1516 -0
  181. package/dist/cli/interactive/stream-client.d.ts +59 -0
  182. package/dist/cli/interactive/stream-client.js +506 -0
  183. package/dist/cli/interactive/types.d.ts +121 -0
  184. package/dist/cli/interactive/types.js +10 -0
  185. package/dist/cli/providers.d.ts +15 -0
  186. package/dist/cli/providers.js +41 -0
  187. package/dist/cli/utils/api.d.ts +9 -0
  188. package/dist/cli/utils/api.js +58 -2
  189. package/dist/core/deployment.js +2 -0
  190. package/dist/cron/natural-language.d.ts +54 -0
  191. package/dist/cron/natural-language.js +569 -0
  192. package/dist/cron/scheduler.d.ts +34 -4
  193. package/dist/cron/scheduler.js +141 -9
  194. package/dist/cron/templates.d.ts +1 -1
  195. package/dist/cron/templates.js +219 -0
  196. package/dist/feeds/feed-engine.d.ts +149 -0
  197. package/dist/feeds/feed-engine.js +600 -0
  198. package/dist/feeds/index.d.ts +9 -0
  199. package/dist/feeds/index.js +8 -0
  200. package/dist/gateway/router.js +6 -1
  201. package/dist/hooks/built-in/audit-log.d.ts +11 -0
  202. package/dist/hooks/built-in/audit-log.js +84 -0
  203. package/dist/hooks/built-in/cost-warning.d.ts +10 -0
  204. package/dist/hooks/built-in/cost-warning.js +59 -0
  205. package/dist/hooks/built-in/dangerous-tool.d.ts +32 -0
  206. package/dist/hooks/built-in/dangerous-tool.js +80 -0
  207. package/dist/hooks/built-in/index.d.ts +14 -0
  208. package/dist/hooks/built-in/index.js +20 -0
  209. package/dist/hooks/index.d.ts +3 -0
  210. package/dist/hooks/index.js +6 -0
  211. package/dist/hooks/loader.d.ts +17 -0
  212. package/dist/hooks/loader.js +142 -0
  213. package/dist/hooks/registry.d.ts +62 -0
  214. package/dist/hooks/registry.js +127 -0
  215. package/dist/integrations/web-search.js +6 -3
  216. package/dist/memory/index.d.ts +1 -0
  217. package/dist/memory/index.js +2 -0
  218. package/dist/memory/memory-service.js +14 -13
  219. package/dist/memory/observational.d.ts +62 -0
  220. package/dist/memory/observational.js +396 -0
  221. package/dist/middleware/content-filter.d.ts +22 -0
  222. package/dist/middleware/content-filter.js +69 -0
  223. package/dist/middleware/request-validator.d.ts +159 -0
  224. package/dist/middleware/request-validator.js +93 -0
  225. package/dist/plugins/sdk.d.ts +22 -0
  226. package/dist/plugins/sdk.js +17 -1
  227. package/dist/projects/types.d.ts +10 -10
  228. package/dist/providers/ai-sdk.d.ts +11 -0
  229. package/dist/providers/ai-sdk.js +97 -18
  230. package/dist/providers/core/models.js +67 -1
  231. package/dist/providers/core/types.d.ts +3 -0
  232. package/dist/providers/index.d.ts +1 -0
  233. package/dist/providers/index.js +1 -0
  234. package/dist/providers/smart-router.d.ts +118 -0
  235. package/dist/providers/smart-router.js +685 -0
  236. package/dist/providers/types.d.ts +16 -16
  237. package/dist/routes/agents.js +50 -0
  238. package/dist/routes/auth.js +8 -1
  239. package/dist/routes/channels.d.ts +12 -0
  240. package/dist/routes/channels.js +166 -0
  241. package/dist/routes/chat.js +259 -14
  242. package/dist/routes/costs.js +32 -0
  243. package/dist/routes/cron.js +80 -5
  244. package/dist/routes/feeds.d.ts +10 -0
  245. package/dist/routes/feeds.js +168 -0
  246. package/dist/routes/mcp.js +21 -0
  247. package/dist/routes/memory.js +130 -0
  248. package/dist/routes/skills.js +129 -0
  249. package/dist/routes/teams.d.ts +9 -0
  250. package/dist/routes/teams.js +210 -0
  251. package/dist/routes/tools.js +14 -0
  252. package/dist/routes/users.js +2 -0
  253. package/dist/server/route-loader.js +4 -1
  254. package/dist/server/stream-bridge.d.ts +19 -0
  255. package/dist/server/stream-bridge.js +38 -0
  256. package/dist/server.js +421 -141
  257. package/dist/skills/marketplace.d.ts +87 -0
  258. package/dist/skills/marketplace.js +268 -0
  259. package/dist/storage/index.d.ts +14 -0
  260. package/dist/storage/index.js +64 -3
  261. package/dist/storage/schema.d.ts +4 -4
  262. package/dist/storage/schema.js +1 -1
  263. package/dist/teams/index.d.ts +110 -0
  264. package/dist/teams/index.js +365 -0
  265. package/dist/tickets/types.d.ts +39 -39
  266. package/dist/types/summary.d.ts +5 -5
  267. package/dist/utils/auto-update.d.ts +23 -0
  268. package/dist/utils/auto-update.js +157 -0
  269. package/dist/utils/offline-detect.d.ts +55 -0
  270. package/dist/utils/offline-detect.js +121 -0
  271. package/dist/utils/pid-file.d.ts +36 -0
  272. package/dist/utils/pid-file.js +125 -0
  273. package/dist/utils/prevent-sleep.d.ts +27 -0
  274. package/dist/utils/prevent-sleep.js +95 -0
  275. package/dist/utils/sanitizer.d.ts +57 -0
  276. package/dist/utils/sanitizer.js +174 -0
  277. package/docker-compose.yml +13 -137
  278. package/package.json +31 -6
  279. package/skills/deploy-cloudflare/SKILL.md +62 -0
  280. package/skills/deploy-vercel/SKILL.md +67 -0
  281. package/skills/docker-deploy/SKILL.md +158 -0
  282. package/skills/full-stack-builder/SKILL.md +92 -0
  283. package/skills/git-workflow/SKILL.md +3 -3
  284. package/skills/humanizer/SKILL.md +488 -0
  285. package/skills/profclaw-assistant/SKILL.md +85 -56
  286. package/ui/dist/assets/ActivityView-Da6HQ8ws.js +1 -0
  287. package/ui/dist/assets/AgentList-H58R0kX3.js +1 -0
  288. package/ui/dist/assets/AnalyticsDashboard-B28AeRsc.js +1 -0
  289. package/ui/dist/assets/AreaChart-DwLzeAQ8.js +1 -0
  290. package/ui/dist/assets/CartesianChart-piKQsTAR.js +36 -0
  291. package/ui/dist/assets/ChatView-Dbj8rxU5.js +10 -0
  292. package/ui/dist/assets/CostsDashboard-C6F5df0F.js +1 -0
  293. package/ui/dist/assets/EstimateSelect-wga0rUKX.js +1 -0
  294. package/ui/dist/assets/FeedDashboard-Ef6FEzEf.js +1 -0
  295. package/ui/dist/assets/FloatingChatbot-0yhkUeCq.js +2 -0
  296. package/ui/dist/assets/InviteCodeManagement-tUXfx4Bc.js +2 -0
  297. package/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  298. package/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  299. package/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  300. package/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  301. package/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  302. package/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  303. package/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  304. package/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  305. package/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  306. package/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  307. package/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  308. package/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  309. package/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  310. package/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  311. package/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  312. package/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  313. package/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  314. package/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  315. package/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  316. package/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  317. package/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  318. package/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  319. package/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  320. package/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  321. package/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  322. package/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  323. package/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  324. package/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  325. package/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  326. package/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  327. package/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  328. package/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  329. package/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  330. package/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  331. package/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  332. package/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  333. package/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  334. package/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  335. package/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  336. package/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  337. package/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  338. package/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  339. package/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  340. package/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  341. package/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  342. package/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  343. package/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  344. package/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  345. package/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  346. package/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  347. package/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  348. package/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  349. package/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  350. package/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  351. package/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  352. package/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  353. package/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  354. package/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  355. package/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  356. package/ui/dist/assets/MarketplacePage-DGrLtolR.js +1 -0
  357. package/ui/dist/assets/{ProjectDetail-DlYUcOss.js → ProjectDetail-BgWvA6UP.js} +2 -2
  358. package/ui/dist/assets/ProjectIcon-TDuliqwg.js +1 -0
  359. package/ui/dist/assets/ProjectList-DXgM4187.js +1 -0
  360. package/ui/dist/assets/{Settings-CgPqzUvj.js → Settings-xA8Zhi3p.js} +3 -3
  361. package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
  362. package/ui/dist/assets/{SummaryDetail-CwLAfHgJ.js → SummaryDetail-eedRfTtF.js} +2 -2
  363. package/ui/dist/assets/SummaryList-CLNX2P84.js +1 -0
  364. package/ui/dist/assets/TaskDetail-BtWclNiR.js +1 -0
  365. package/ui/dist/assets/TaskList-JjODAgSc.js +1 -0
  366. package/ui/dist/assets/TeamsPage-CBK5iAyx.js +1 -0
  367. package/ui/dist/assets/TicketBoard-C9aJNNYp.js +1 -0
  368. package/ui/dist/assets/TicketDetail-CV5JmL31.js +1 -0
  369. package/ui/dist/assets/TicketList-68V4lzUz.js +1 -0
  370. package/ui/dist/assets/UserManagement-DKTb6UpE.js +2 -0
  371. package/ui/dist/assets/ViewSwitcher-BvdQht2Y.js +1 -0
  372. package/ui/dist/assets/alert-dialog-O6qBOv_f.js +1 -0
  373. package/ui/dist/assets/{archive-CGck7gxR.js → archive-CX7UvZpf.js} +1 -1
  374. package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
  375. package/ui/dist/assets/{bug-DqSGPUUE.js → bug-3WX0394-.js} +1 -1
  376. package/ui/dist/assets/{calendar-BuZ4zbPW.js → calendar-buq77TaS.js} +1 -1
  377. package/ui/dist/assets/{chevron-up-DcJ4LL_N.js → chevron-up-4ymsBJRo.js} +1 -1
  378. package/ui/dist/assets/{circle-x-C78PNZjF.js → circle-x-ByXtwR6Y.js} +1 -1
  379. package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
  380. package/ui/dist/assets/{cpu-Ck6AoG8c.js → cpu-CiuoCeDY.js} +1 -1
  381. package/ui/dist/assets/{database-CA2w8Lvt.js → database-BWXSBg5a.js} +1 -1
  382. package/ui/dist/assets/dialog-lDg4NvMV.js +1 -0
  383. package/ui/dist/assets/dollar-sign-Dmijd6DP.js +1 -0
  384. package/ui/dist/assets/{ellipsis-FhHKRbfl.js → ellipsis-vT-5SVIp.js} +1 -1
  385. package/ui/dist/assets/{ellipsis-vertical-CO0UqE4-.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
  386. package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
  387. package/ui/dist/assets/{file-code-ChnhYYj1.js → file-code-ChOWdKXf.js} +1 -1
  388. package/ui/dist/assets/{folder-open-CHwA1-ve.js → folder-open-CkOUbIiP.js} +1 -1
  389. package/ui/dist/assets/{funnel-ByEjRFNB.js → funnel-uZkoSPP-.js} +1 -1
  390. package/ui/dist/assets/{git-branch-GTOPQgU4.js → git-branch-CwvUxj7C.js} +1 -1
  391. package/ui/dist/assets/{git-commit-horizontal-F5M84Kut.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
  392. package/ui/dist/assets/{globe-CQWfr7hT.js → globe-D_WpJdsj.js} +1 -1
  393. package/ui/dist/assets/{hash-nKC9gtLg.js → hash-CA0hJ7vh.js} +1 -1
  394. package/ui/dist/assets/{history-DfFSA9xJ.js → history-CEWMLELs.js} +1 -1
  395. package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
  396. package/ui/dist/assets/{index-a4Fxq0Hb.js → index-C1rhbml4.js} +3 -3
  397. package/ui/dist/assets/index-CR8gfCHv.js +1 -0
  398. package/ui/dist/assets/index-DVXMpWai.js +1 -0
  399. package/ui/dist/assets/index-DaDJMM2v.js +1 -0
  400. package/ui/dist/assets/index-Djdq_0xu.js +1 -0
  401. package/ui/dist/assets/index-M46Gcb8K.css +1 -0
  402. package/ui/dist/assets/index-sEBN7w8J.js +109 -0
  403. package/ui/dist/assets/layers-C6Mhf8Nk.js +1 -0
  404. package/ui/dist/assets/{layout-dashboard-WmgjMhWF.js → layout-dashboard-BRUM0kpT.js} +1 -1
  405. package/ui/dist/assets/{lightbulb-Bo8hEr7B.js → lightbulb-CN2q1O5l.js} +1 -1
  406. package/ui/dist/assets/{link-2-YqrpQXBH.js → link-2-CC4E28yJ.js} +1 -1
  407. package/ui/dist/assets/markdown-renderer-C6ENbB0u.js +10 -0
  408. package/ui/dist/assets/markdown-renderer-CfVKi3_s.css +1 -0
  409. package/ui/dist/assets/{message-square-CD0H5hot.js → message-square-Bbb241am.js} +1 -1
  410. package/ui/dist/assets/package-CwT3IzFx.js +1 -0
  411. package/ui/dist/assets/{pencil-DpFnj5dn.js → pencil-CDmiHzoj.js} +1 -1
  412. package/ui/dist/assets/{play-DVgea_jT.js → play-tjy5jMQX.js} +1 -1
  413. package/ui/dist/assets/popover-CFHZf3pE.js +1 -0
  414. package/ui/dist/assets/progress-BboUHuLf.js +1 -0
  415. package/ui/dist/assets/{rocket-BFxPYGx9.js → rocket--8ZHgdXJ.js} +1 -1
  416. package/ui/dist/assets/select-n108rXny.js +1 -0
  417. package/ui/dist/assets/{send-eYnW_7n-.js → send-Cu7MR2Qh.js} +1 -1
  418. package/ui/dist/assets/server-DmodxZp-.js +1 -0
  419. package/ui/dist/assets/{settings-2-scXUOuE_.js → settings-2-CkRNqkxj.js} +1 -1
  420. package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
  421. package/ui/dist/assets/{shield-check-PEr7nmVw.js → shield-check-ViI3nMKE.js} +1 -1
  422. package/ui/dist/assets/{shield-off-CLtXio62.js → shield-off-DN3tagkn.js} +1 -1
  423. package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
  424. package/ui/dist/assets/{smartphone-DusFfY0U.js → smartphone-5FghiXpA.js} +1 -1
  425. package/ui/dist/assets/{square-e1yxB2eR.js → square-DiNSx8K7.js} +1 -1
  426. package/ui/dist/assets/star-DhdFVidS.js +1 -0
  427. package/ui/dist/assets/switch-CIgVbZqQ.js +1 -0
  428. package/ui/dist/assets/table-BC56FVMV.js +1 -0
  429. package/ui/dist/assets/{tag-tAwMmQ9G.js → tag-CH_vQliw.js} +1 -1
  430. package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
  431. package/ui/dist/assets/{timer-Vel1N3RP.js → timer-CdGVTb60.js} +1 -1
  432. package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
  433. package/ui/dist/assets/{trash-2-eM-CNwsZ.js → trash-2-CucZJL0N.js} +1 -1
  434. package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
  435. package/ui/dist/assets/{trending-up-BGafmjRo.js → trending-up-C5OYX2k2.js} +1 -1
  436. package/ui/dist/assets/vendor-query-C0p7b53x.js +4 -0
  437. package/ui/dist/assets/vendor-react-Mc5_kfYG.js +12 -0
  438. package/ui/dist/assets/vendor-ui-CXPAUBFv.js +51 -0
  439. package/ui/dist/assets/{wand-sparkles-DPvcd9Pi.js → wand-sparkles-BaH6pJnc.js} +1 -1
  440. package/ui/dist/assets/{wrench-B8s3zYVV.js → wrench-CjxjP6ok.js} +1 -1
  441. package/ui/dist/index.html +5 -2
  442. package/dist/chat/auto-reply.d.ts +0 -90
  443. package/dist/chat/auto-reply.js +0 -272
  444. package/dist/chat/execution/pty.d.ts +0 -92
  445. package/dist/chat/execution/pty.js +0 -285
  446. package/dist/chat/execution/tools/glinr-ops.d.ts +0 -202
  447. package/dist/chat/execution/tools/glinr-ops.js +0 -694
  448. package/dist/cli/commands/browser.d.ts +0 -3
  449. package/dist/cli/commands/browser.js +0 -138
  450. package/dist/cli/commands/canvas.d.ts +0 -3
  451. package/dist/cli/commands/canvas.js +0 -155
  452. package/dist/cli/commands/nodes.d.ts +0 -3
  453. package/dist/cli/commands/nodes.js +0 -193
  454. package/dist/diagnostics/exporters.d.ts +0 -21
  455. package/dist/diagnostics/exporters.js +0 -138
  456. package/dist/diagnostics/index.d.ts +0 -10
  457. package/dist/diagnostics/index.js +0 -9
  458. package/dist/diagnostics/middleware.d.ts +0 -12
  459. package/dist/diagnostics/middleware.js +0 -58
  460. package/dist/diagnostics/tracer.d.ts +0 -133
  461. package/dist/diagnostics/tracer.js +0 -257
  462. package/dist/discovery/index.d.ts +0 -8
  463. package/dist/discovery/index.js +0 -7
  464. package/dist/discovery/mdns.d.ts +0 -40
  465. package/dist/discovery/mdns.js +0 -249
  466. package/dist/plugins/registry.d.ts +0 -122
  467. package/dist/plugins/registry.js +0 -352
  468. package/dist/plugins/sandbox.d.ts +0 -77
  469. package/dist/plugins/sandbox.js +0 -287
  470. package/dist/plugins/search/brave.d.ts +0 -9
  471. package/dist/plugins/search/brave.js +0 -157
  472. package/dist/plugins/search/duckduckgo.d.ts +0 -9
  473. package/dist/plugins/search/duckduckgo.js +0 -171
  474. package/dist/plugins/search/index.d.ts +0 -13
  475. package/dist/plugins/search/index.js +0 -23
  476. package/dist/plugins/search/searxng.d.ts +0 -9
  477. package/dist/plugins/search/searxng.js +0 -170
  478. package/dist/plugins/search/serper.d.ts +0 -9
  479. package/dist/plugins/search/serper.js +0 -135
  480. package/dist/plugins/search/tavily.d.ts +0 -9
  481. package/dist/plugins/search/tavily.js +0 -146
  482. package/dist/providers/adapters/anthropic.d.ts +0 -26
  483. package/dist/providers/adapters/anthropic.js +0 -306
  484. package/dist/providers/adapters/base.d.ts +0 -53
  485. package/dist/providers/adapters/base.js +0 -99
  486. package/dist/providers/adapters/ollama.d.ts +0 -30
  487. package/dist/providers/adapters/ollama.js +0 -292
  488. package/dist/utils/ai-cache.d.ts +0 -72
  489. package/dist/utils/ai-cache.js +0 -204
  490. package/dist/utils/file-lock.d.ts +0 -85
  491. package/dist/utils/file-lock.js +0 -204
  492. package/ui/dist/assets/ActivityView-DIPQSJ_d.js +0 -1
  493. package/ui/dist/assets/AgentList-CqyaYrcq.js +0 -1
  494. package/ui/dist/assets/AnalyticsDashboard-C-mjuGHT.js +0 -1
  495. package/ui/dist/assets/AreaChart-CfYWmbtr.js +0 -1
  496. package/ui/dist/assets/CartesianChart-BaQ3It0c.js +0 -36
  497. package/ui/dist/assets/ChatView-DxxQy6pl.js +0 -10
  498. package/ui/dist/assets/CostsDashboard-CDBBcGkg.js +0 -1
  499. package/ui/dist/assets/EstimateSelect-CDjf5qKl.js +0 -1
  500. package/ui/dist/assets/FloatingChatbot-CZHjvJIe.js +0 -2
  501. package/ui/dist/assets/InviteCodeManagement-DTm-IPTm.js +0 -2
  502. package/ui/dist/assets/ProjectIcon-BMRpnM04.js +0 -1
  503. package/ui/dist/assets/ProjectList-D85TN0i0.js +0 -4
  504. package/ui/dist/assets/StatusIndicator-yig0uZEA.js +0 -1
  505. package/ui/dist/assets/SummaryList-BvS5Idnu.js +0 -1
  506. package/ui/dist/assets/TaskDetail-zarC1fOt.js +0 -1
  507. package/ui/dist/assets/TaskList-CyJq3ANE.js +0 -1
  508. package/ui/dist/assets/TicketBoard-BlWr3-iH.js +0 -1
  509. package/ui/dist/assets/TicketDetail-DmqWKj2W.js +0 -1
  510. package/ui/dist/assets/TicketList-Scj4pMWa.js +0 -1
  511. package/ui/dist/assets/UserManagement-BH7uG7dw.js +0 -2
  512. package/ui/dist/assets/ViewSwitcher-3HzZUdWn.js +0 -1
  513. package/ui/dist/assets/alert-dialog-DWPb2IfQ.js +0 -7
  514. package/ui/dist/assets/badge-DEmc3Z_l.js +0 -1
  515. package/ui/dist/assets/brain-CfFdLVqb.js +0 -1
  516. package/ui/dist/assets/constants-DhDjZe4P.js +0 -1
  517. package/ui/dist/assets/dialog-BOdGWhgE.js +0 -1
  518. package/ui/dist/assets/index--JkIxVXb.js +0 -67
  519. package/ui/dist/assets/index-Ca3vk7Gq.js +0 -1
  520. package/ui/dist/assets/index-DHGvP9mp.js +0 -1
  521. package/ui/dist/assets/index-DeI8lKRR.js +0 -1
  522. package/ui/dist/assets/index-WclMPci1.css +0 -1
  523. package/ui/dist/assets/index-Z4-RtZcs.js +0 -1
  524. package/ui/dist/assets/layers-DFeLExSa.js +0 -1
  525. package/ui/dist/assets/markdown-renderer-Croje6Xe.js +0 -36
  526. package/ui/dist/assets/popover-JXecfWG5.js +0 -1
  527. package/ui/dist/assets/progress-C1ghf1Fu.js +0 -1
  528. package/ui/dist/assets/select-MADP8m6Q.js +0 -1
  529. package/ui/dist/assets/server-CPMaysH8.js +0 -1
  530. package/ui/dist/assets/sheet-r6NSOxi-.js +0 -1
  531. package/ui/dist/assets/skeleton-C9oEzNlU.js +0 -1
  532. package/ui/dist/assets/switch-tNs0n-kz.js +0 -1
  533. package/ui/dist/assets/table-CXxtLicg.js +0 -1
  534. package/ui/dist/assets/textarea-BjiEeIWh.js +0 -1
  535. package/ui/dist/assets/tooltip-ZMwtfr1J.js +0 -1
package/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  <p align="center">
2
- <h1 align="center">profClaw</h1>
3
- <p align="center">Smart, lightweight AI agent engine. Run locally on anything from a $10 board to a VPS.</p>
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
- profClaw is a local-first AI agent that talks to your tools. Connect it to Slack, Discord, Telegram, or any of 22 supported chat channels. Point it at your GitHub, Jira, or Linear. Give it an AI provider (Anthropic, OpenAI, Ollama, or 30+ others). It handles the rest - executing tasks, managing workflows, and automating your dev life through natural language.
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
- Runs on your machine. Your data stays local. No cloud required.
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
- | **35 AI providers** | Anthropic, OpenAI, Google, Groq, Ollama, DeepSeek, Bedrock, and more |
30
- | **22 chat channels** | Slack, Discord, Telegram, WhatsApp, iMessage, Matrix, Teams, and 15 more |
31
- | **72 built-in tools** | File ops, git, browser automation, cron, web search, canvas, voice |
32
- | **50 skills** | Coding agent, GitHub issues, Notion, Obsidian, image gen, and more |
33
- | **MCP server** | Native Model Context Protocol - connect to any MCP-compatible client |
34
- | **Voice I/O** | STT (Whisper) + TTS (ElevenLabs/OpenAI/system) + Talk Mode |
35
- | **Plugin SDK** | Build and share third-party plugins via npm or ClawHub |
36
- | **3 deployment modes** | Pico (~140MB), Mini (~180MB), Pro (full features) |
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
- ## Deployment Modes
86
+ ## Quick Start
39
87
 
40
- profClaw scales from a Raspberry Pi to a full production server:
88
+ ```bash
89
+ npm install -g profclaw
90
+ profclaw init
91
+ profclaw chat --tui
92
+ ```
41
93
 
42
- | Mode | What you get | RAM | Best for |
43
- |------|-------------|-----|----------|
44
- | **pico** | Agent + tools + chat. No UI. | ~140MB | IoT, home automation, $10 boards |
45
- | **mini** | + Dashboard, basic cron, 1-2 channels | ~180MB | Personal dev server, VPS |
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
- Set via `PROFCLAW_MODE=pico|mini|pro` environment variable.
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
- ## Quick Start
101
+ `profclaw chat --tui` opens the terminal UI with streaming responses, code highlighting, slash commands, and a model selector.
51
102
 
52
- ### npm
103
+ ### Full setup wizard
53
104
 
54
105
  ```bash
55
- npx profclaw onboard # Zero-to-running wizard
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 # Add your API key
126
+ cp .env.example .env
78
127
  docker compose up -d
79
128
  ```
80
129
 
81
- **Free local AI?** Add Ollama:
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 setup`) handles everything interactively. Or set environment variables:
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 # pico | mini | pro
105
- PORT=3000 # HTTP server port
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
- See [`.env.example`](.env.example) for all options.
278
+ Run `profclaw doctor` to verify your configuration at any time.
112
279
 
113
- ## Architecture
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
- | Zhipu AI | GLM-4, GLM-5 | No |
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
- | OpenRouter | Any model | No |
155
- | Replicate | Open models | No |
156
- | ... and 18 more | HuggingFace, NVIDIA NIM, Watsonx, Volcengine, etc. | |
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
- | **GitHub** | Webhooks, OAuth, issue sync, PR automation |
163
- | **Jira** | Webhooks, OAuth, issue sync, transitions |
164
- | **Linear** | Webhooks, OAuth, issue sync |
165
- | **Slack** | Slash commands, DM pairing, thread replies |
166
- | **Discord** | Bot commands, channel routing |
167
- | **Telegram** | Bot API, inline commands |
168
- | **WhatsApp** | Cloud API or Baileys |
169
- | **WebChat** | Browser-based SSE chat, embeddable widget |
170
- | **Matrix** | Room-based, Client-Server API |
171
- | **Google Chat** | Webhook + service account, Cards v2 |
172
- | **MS Teams** | Bot Framework, Adaptive Cards |
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
- ## Docs & Website
386
+ ## Need help?
191
387
 
192
- Documentation and marketing site live in a separate repo: [`profclaw-site`](https://github.com/profclaw/profclaw-site)
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) -- profclaw contributors, 2024-2026
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