profclaw 2.0.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/.env.example +14 -2
  2. package/CHANGELOG.md +37 -0
  3. package/CONTRIBUTING.md +20 -0
  4. package/Dockerfile +39 -23
  5. package/README.md +174 -40
  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 +14 -2
  71. package/dist/chat/execution/tools/index.js +86 -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/telegram/index.d.ts +2 -0
  104. package/dist/chat/providers/telegram/index.js +21 -2
  105. package/dist/chat/system-prompts.d.ts +3 -3
  106. package/dist/chat/system-prompts.js +116 -61
  107. package/dist/chat/tools.d.ts +6 -6
  108. package/dist/cli/commands/auth.js +64 -1
  109. package/dist/cli/commands/chat.js +1327 -138
  110. package/dist/cli/commands/doctor.js +222 -16
  111. package/dist/cli/commands/history.d.ts +3 -0
  112. package/dist/cli/commands/history.js +138 -0
  113. package/dist/cli/commands/import.d.ts +44 -0
  114. package/dist/cli/commands/import.js +526 -0
  115. package/dist/cli/commands/init.d.ts +13 -0
  116. package/dist/cli/commands/init.js +381 -0
  117. package/dist/cli/commands/onboard.js +210 -30
  118. package/dist/cli/commands/plan.d.ts +13 -0
  119. package/dist/cli/commands/plan.js +184 -0
  120. package/dist/cli/commands/serve.d.ts +7 -0
  121. package/dist/cli/commands/serve.js +77 -18
  122. package/dist/cli/commands/setup.js +84 -3
  123. package/dist/cli/commands/status.js +54 -0
  124. package/dist/cli/commands/tools.js +13 -13
  125. package/dist/cli/commands/tui.js +26 -1
  126. package/dist/cli/index.js +19 -0
  127. package/dist/cli/ink/App.d.ts +13 -0
  128. package/dist/cli/ink/App.js +6 -0
  129. package/dist/cli/ink/ChatApp.d.ts +60 -0
  130. package/dist/cli/ink/ChatApp.js +325 -0
  131. package/dist/cli/ink/DashboardApp.d.ts +3 -0
  132. package/dist/cli/ink/DashboardApp.js +143 -0
  133. package/dist/cli/ink/components/AgentStatus.d.ts +17 -0
  134. package/dist/cli/ink/components/AgentStatus.js +33 -0
  135. package/dist/cli/ink/components/ChannelList.d.ts +17 -0
  136. package/dist/cli/ink/components/ChannelList.js +33 -0
  137. package/dist/cli/ink/components/ConnectionStatus.d.ts +19 -0
  138. package/dist/cli/ink/components/ConnectionStatus.js +50 -0
  139. package/dist/cli/ink/components/CostBar.d.ts +19 -0
  140. package/dist/cli/ink/components/CostBar.js +35 -0
  141. package/dist/cli/ink/components/HookStatus.d.ts +15 -0
  142. package/dist/cli/ink/components/HookStatus.js +7 -0
  143. package/dist/cli/ink/components/PermissionPrompt.d.ts +21 -0
  144. package/dist/cli/ink/components/PermissionPrompt.js +51 -0
  145. package/dist/cli/ink/components/PlanView.d.ts +23 -0
  146. package/dist/cli/ink/components/PlanView.js +26 -0
  147. package/dist/cli/ink/components/ProviderList.d.ts +16 -0
  148. package/dist/cli/ink/components/ProviderList.js +16 -0
  149. package/dist/cli/ink/components/SessionHeader.d.ts +15 -0
  150. package/dist/cli/ink/components/SessionHeader.js +15 -0
  151. package/dist/cli/ink/components/StreamingMessage.d.ts +20 -0
  152. package/dist/cli/ink/components/StreamingMessage.js +27 -0
  153. package/dist/cli/ink/components/SuggestionBar.d.ts +15 -0
  154. package/dist/cli/ink/components/SuggestionBar.js +28 -0
  155. package/dist/cli/ink/components/SystemHealth.d.ts +20 -0
  156. package/dist/cli/ink/components/SystemHealth.js +39 -0
  157. package/dist/cli/ink/components/TaskList.d.ts +17 -0
  158. package/dist/cli/ink/components/TaskList.js +59 -0
  159. package/dist/cli/ink/components/ToolCall.d.ts +17 -0
  160. package/dist/cli/ink/components/ToolCall.js +43 -0
  161. package/dist/cli/ink/index.d.ts +23 -0
  162. package/dist/cli/ink/index.js +15 -0
  163. package/dist/cli/ink/keybindings.d.ts +35 -0
  164. package/dist/cli/ink/keybindings.js +105 -0
  165. package/dist/cli/ink/markdown-renderer.d.ts +47 -0
  166. package/dist/cli/ink/markdown-renderer.js +380 -0
  167. package/dist/cli/ink/output-styles.d.ts +39 -0
  168. package/dist/cli/ink/output-styles.js +119 -0
  169. package/dist/cli/interactive/auto-serve.d.ts +38 -0
  170. package/dist/cli/interactive/auto-serve.js +209 -0
  171. package/dist/cli/interactive/index.d.ts +25 -0
  172. package/dist/cli/interactive/index.js +23 -0
  173. package/dist/cli/interactive/picker.d.ts +28 -0
  174. package/dist/cli/interactive/picker.js +153 -0
  175. package/dist/cli/interactive/renderer.d.ts +26 -0
  176. package/dist/cli/interactive/renderer.js +555 -0
  177. package/dist/cli/interactive/repl.d.ts +14 -0
  178. package/dist/cli/interactive/repl.js +1516 -0
  179. package/dist/cli/interactive/stream-client.d.ts +59 -0
  180. package/dist/cli/interactive/stream-client.js +506 -0
  181. package/dist/cli/interactive/types.d.ts +121 -0
  182. package/dist/cli/interactive/types.js +10 -0
  183. package/dist/cli/utils/api.d.ts +9 -0
  184. package/dist/cli/utils/api.js +58 -2
  185. package/dist/cron/natural-language.d.ts +54 -0
  186. package/dist/cron/natural-language.js +569 -0
  187. package/dist/cron/scheduler.d.ts +34 -4
  188. package/dist/cron/scheduler.js +141 -9
  189. package/dist/cron/templates.d.ts +1 -1
  190. package/dist/cron/templates.js +219 -0
  191. package/dist/feeds/feed-engine.d.ts +149 -0
  192. package/dist/feeds/feed-engine.js +600 -0
  193. package/dist/feeds/index.d.ts +9 -0
  194. package/dist/feeds/index.js +8 -0
  195. package/dist/gateway/router.js +6 -1
  196. package/dist/hooks/built-in/audit-log.d.ts +11 -0
  197. package/dist/hooks/built-in/audit-log.js +84 -0
  198. package/dist/hooks/built-in/cost-warning.d.ts +10 -0
  199. package/dist/hooks/built-in/cost-warning.js +59 -0
  200. package/dist/hooks/built-in/dangerous-tool.d.ts +32 -0
  201. package/dist/hooks/built-in/dangerous-tool.js +80 -0
  202. package/dist/hooks/built-in/index.d.ts +14 -0
  203. package/dist/hooks/built-in/index.js +20 -0
  204. package/dist/hooks/index.d.ts +3 -0
  205. package/dist/hooks/index.js +6 -0
  206. package/dist/hooks/loader.d.ts +17 -0
  207. package/dist/hooks/loader.js +142 -0
  208. package/dist/hooks/registry.d.ts +62 -0
  209. package/dist/hooks/registry.js +127 -0
  210. package/dist/integrations/web-search.js +6 -3
  211. package/dist/memory/index.d.ts +1 -0
  212. package/dist/memory/index.js +2 -0
  213. package/dist/memory/memory-service.js +14 -13
  214. package/dist/memory/observational.d.ts +62 -0
  215. package/dist/memory/observational.js +396 -0
  216. package/dist/middleware/content-filter.d.ts +22 -0
  217. package/dist/middleware/content-filter.js +69 -0
  218. package/dist/middleware/request-validator.d.ts +159 -0
  219. package/dist/middleware/request-validator.js +93 -0
  220. package/dist/plugins/sdk.d.ts +22 -0
  221. package/dist/plugins/sdk.js +17 -1
  222. package/dist/projects/types.d.ts +10 -10
  223. package/dist/providers/ai-sdk.d.ts +11 -0
  224. package/dist/providers/ai-sdk.js +78 -19
  225. package/dist/providers/core/models.js +67 -1
  226. package/dist/providers/core/types.d.ts +3 -0
  227. package/dist/providers/index.d.ts +1 -0
  228. package/dist/providers/index.js +1 -0
  229. package/dist/providers/smart-router.d.ts +118 -0
  230. package/dist/providers/smart-router.js +685 -0
  231. package/dist/providers/types.d.ts +16 -16
  232. package/dist/routes/agents.js +50 -0
  233. package/dist/routes/auth.js +8 -1
  234. package/dist/routes/chat.js +259 -14
  235. package/dist/routes/costs.js +32 -0
  236. package/dist/routes/cron.js +80 -5
  237. package/dist/routes/feeds.d.ts +10 -0
  238. package/dist/routes/feeds.js +168 -0
  239. package/dist/routes/mcp.js +21 -0
  240. package/dist/routes/memory.js +130 -0
  241. package/dist/routes/skills.js +129 -0
  242. package/dist/routes/teams.d.ts +9 -0
  243. package/dist/routes/teams.js +210 -0
  244. package/dist/routes/tools.js +14 -0
  245. package/dist/routes/users.js +2 -0
  246. package/dist/server/route-loader.js +3 -1
  247. package/dist/server/stream-bridge.d.ts +19 -0
  248. package/dist/server/stream-bridge.js +38 -0
  249. package/dist/server.js +310 -36
  250. package/dist/skills/marketplace.d.ts +87 -0
  251. package/dist/skills/marketplace.js +268 -0
  252. package/dist/storage/index.d.ts +14 -0
  253. package/dist/storage/index.js +64 -3
  254. package/dist/storage/schema.d.ts +4 -4
  255. package/dist/storage/schema.js +1 -1
  256. package/dist/teams/index.d.ts +110 -0
  257. package/dist/teams/index.js +365 -0
  258. package/dist/tickets/types.d.ts +39 -39
  259. package/dist/types/summary.d.ts +5 -5
  260. package/dist/utils/auto-update.d.ts +23 -0
  261. package/dist/utils/auto-update.js +157 -0
  262. package/dist/utils/offline-detect.d.ts +55 -0
  263. package/dist/utils/offline-detect.js +121 -0
  264. package/dist/utils/pid-file.d.ts +36 -0
  265. package/dist/utils/pid-file.js +125 -0
  266. package/dist/utils/prevent-sleep.d.ts +27 -0
  267. package/dist/utils/prevent-sleep.js +95 -0
  268. package/dist/utils/sanitizer.d.ts +57 -0
  269. package/dist/utils/sanitizer.js +174 -0
  270. package/docker-compose.yml +13 -137
  271. package/package.json +31 -6
  272. package/skills/deploy-cloudflare/SKILL.md +62 -0
  273. package/skills/deploy-vercel/SKILL.md +67 -0
  274. package/skills/docker-deploy/SKILL.md +158 -0
  275. package/skills/full-stack-builder/SKILL.md +92 -0
  276. package/skills/humanizer/SKILL.md +488 -0
  277. package/skills/profclaw-assistant/SKILL.md +85 -56
  278. package/ui/dist/assets/ActivityView-Da6HQ8ws.js +1 -0
  279. package/ui/dist/assets/AgentList-H58R0kX3.js +1 -0
  280. package/ui/dist/assets/AnalyticsDashboard-B28AeRsc.js +1 -0
  281. package/ui/dist/assets/AreaChart-DwLzeAQ8.js +1 -0
  282. package/ui/dist/assets/CartesianChart-piKQsTAR.js +36 -0
  283. package/ui/dist/assets/ChatView-Dbj8rxU5.js +10 -0
  284. package/ui/dist/assets/CostsDashboard-C6F5df0F.js +1 -0
  285. package/ui/dist/assets/EstimateSelect-wga0rUKX.js +1 -0
  286. package/ui/dist/assets/FeedDashboard-Ef6FEzEf.js +1 -0
  287. package/ui/dist/assets/FloatingChatbot-0yhkUeCq.js +2 -0
  288. package/ui/dist/assets/InviteCodeManagement-tUXfx4Bc.js +2 -0
  289. package/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  290. package/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  291. package/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  292. package/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  293. package/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  294. package/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  295. package/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  296. package/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  297. package/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  298. package/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  299. package/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  300. package/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  301. package/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  302. package/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  303. package/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  304. package/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  305. package/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  306. package/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  307. package/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  308. package/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  309. package/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  310. package/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  311. package/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  312. package/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  313. package/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  314. package/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  315. package/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  316. package/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  317. package/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  318. package/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  319. package/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  320. package/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  321. package/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  322. package/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  323. package/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  324. package/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  325. package/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  326. package/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  327. package/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  328. package/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  329. package/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  330. package/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  331. package/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  332. package/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  333. package/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  334. package/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  335. package/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  336. package/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  337. package/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  338. package/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  339. package/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  340. package/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  341. package/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  342. package/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  343. package/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  344. package/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  345. package/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  346. package/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  347. package/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  348. package/ui/dist/assets/MarketplacePage-DGrLtolR.js +1 -0
  349. package/ui/dist/assets/{ProjectDetail--gPfvATB.js → ProjectDetail-BgWvA6UP.js} +2 -2
  350. package/ui/dist/assets/ProjectIcon-TDuliqwg.js +1 -0
  351. package/ui/dist/assets/ProjectList-DXgM4187.js +1 -0
  352. package/ui/dist/assets/{Settings-1kaf7VHE.js → Settings-xA8Zhi3p.js} +3 -3
  353. package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
  354. package/ui/dist/assets/{SummaryDetail-DV3AmONk.js → SummaryDetail-eedRfTtF.js} +2 -2
  355. package/ui/dist/assets/SummaryList-CLNX2P84.js +1 -0
  356. package/ui/dist/assets/TaskDetail-BtWclNiR.js +1 -0
  357. package/ui/dist/assets/TaskList-JjODAgSc.js +1 -0
  358. package/ui/dist/assets/TeamsPage-CBK5iAyx.js +1 -0
  359. package/ui/dist/assets/TicketBoard-C9aJNNYp.js +1 -0
  360. package/ui/dist/assets/TicketDetail-CV5JmL31.js +1 -0
  361. package/ui/dist/assets/TicketList-68V4lzUz.js +1 -0
  362. package/ui/dist/assets/UserManagement-DKTb6UpE.js +2 -0
  363. package/ui/dist/assets/ViewSwitcher-BvdQht2Y.js +1 -0
  364. package/ui/dist/assets/alert-dialog-O6qBOv_f.js +1 -0
  365. package/ui/dist/assets/{archive-BsLa7brF.js → archive-CX7UvZpf.js} +1 -1
  366. package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
  367. package/ui/dist/assets/{bug-CmZI7jqM.js → bug-3WX0394-.js} +1 -1
  368. package/ui/dist/assets/{calendar-Bf0t2B82.js → calendar-buq77TaS.js} +1 -1
  369. package/ui/dist/assets/{chevron-up-CoUsOvZj.js → chevron-up-4ymsBJRo.js} +1 -1
  370. package/ui/dist/assets/{circle-x-Dgw11LgT.js → circle-x-ByXtwR6Y.js} +1 -1
  371. package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
  372. package/ui/dist/assets/{cpu-DiPMQICV.js → cpu-CiuoCeDY.js} +1 -1
  373. package/ui/dist/assets/{database-BwTfupDi.js → database-BWXSBg5a.js} +1 -1
  374. package/ui/dist/assets/dialog-lDg4NvMV.js +1 -0
  375. package/ui/dist/assets/dollar-sign-Dmijd6DP.js +1 -0
  376. package/ui/dist/assets/{ellipsis-UJx4Xnf6.js → ellipsis-vT-5SVIp.js} +1 -1
  377. package/ui/dist/assets/{ellipsis-vertical-DoULYEKn.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
  378. package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
  379. package/ui/dist/assets/{file-code-B2UrJLwi.js → file-code-ChOWdKXf.js} +1 -1
  380. package/ui/dist/assets/{folder-open-BJi577JH.js → folder-open-CkOUbIiP.js} +1 -1
  381. package/ui/dist/assets/{funnel-PkaD_HSR.js → funnel-uZkoSPP-.js} +1 -1
  382. package/ui/dist/assets/{git-branch-C_K30am0.js → git-branch-CwvUxj7C.js} +1 -1
  383. package/ui/dist/assets/{git-commit-horizontal-IT6ecxWQ.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
  384. package/ui/dist/assets/{globe-f-jjCa_g.js → globe-D_WpJdsj.js} +1 -1
  385. package/ui/dist/assets/{hash-DNEv8Elo.js → hash-CA0hJ7vh.js} +1 -1
  386. package/ui/dist/assets/{history-BQSBo_1Q.js → history-CEWMLELs.js} +1 -1
  387. package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
  388. package/ui/dist/assets/{index-nS3EErDg.js → index-C1rhbml4.js} +3 -3
  389. package/ui/dist/assets/index-CR8gfCHv.js +1 -0
  390. package/ui/dist/assets/index-DVXMpWai.js +1 -0
  391. package/ui/dist/assets/index-DaDJMM2v.js +1 -0
  392. package/ui/dist/assets/index-Djdq_0xu.js +1 -0
  393. package/ui/dist/assets/index-M46Gcb8K.css +1 -0
  394. package/ui/dist/assets/index-sEBN7w8J.js +109 -0
  395. package/ui/dist/assets/layers-C6Mhf8Nk.js +1 -0
  396. package/ui/dist/assets/{layout-dashboard-CcKt1hXw.js → layout-dashboard-BRUM0kpT.js} +1 -1
  397. package/ui/dist/assets/{lightbulb-Jhp7FvbU.js → lightbulb-CN2q1O5l.js} +1 -1
  398. package/ui/dist/assets/{link-2-DdO7ostF.js → link-2-CC4E28yJ.js} +1 -1
  399. package/ui/dist/assets/markdown-renderer-C6ENbB0u.js +10 -0
  400. package/ui/dist/assets/markdown-renderer-CfVKi3_s.css +1 -0
  401. package/ui/dist/assets/{message-square-CBgH65X7.js → message-square-Bbb241am.js} +1 -1
  402. package/ui/dist/assets/package-CwT3IzFx.js +1 -0
  403. package/ui/dist/assets/{pencil-CYXCEPQh.js → pencil-CDmiHzoj.js} +1 -1
  404. package/ui/dist/assets/{play-d1ONaH0-.js → play-tjy5jMQX.js} +1 -1
  405. package/ui/dist/assets/popover-CFHZf3pE.js +1 -0
  406. package/ui/dist/assets/progress-BboUHuLf.js +1 -0
  407. package/ui/dist/assets/{rocket-DhvUetsk.js → rocket--8ZHgdXJ.js} +1 -1
  408. package/ui/dist/assets/select-n108rXny.js +1 -0
  409. package/ui/dist/assets/{send-P0r5D7td.js → send-Cu7MR2Qh.js} +1 -1
  410. package/ui/dist/assets/server-DmodxZp-.js +1 -0
  411. package/ui/dist/assets/{settings-2-ocj5uHGx.js → settings-2-CkRNqkxj.js} +1 -1
  412. package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
  413. package/ui/dist/assets/{shield-check-DfVdE34l.js → shield-check-ViI3nMKE.js} +1 -1
  414. package/ui/dist/assets/{shield-off-8l0J6R-8.js → shield-off-DN3tagkn.js} +1 -1
  415. package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
  416. package/ui/dist/assets/{smartphone-77_g3SQn.js → smartphone-5FghiXpA.js} +1 -1
  417. package/ui/dist/assets/{square-Ckzsr3Rn.js → square-DiNSx8K7.js} +1 -1
  418. package/ui/dist/assets/star-DhdFVidS.js +1 -0
  419. package/ui/dist/assets/switch-CIgVbZqQ.js +1 -0
  420. package/ui/dist/assets/table-BC56FVMV.js +1 -0
  421. package/ui/dist/assets/{tag-C35mgoEv.js → tag-CH_vQliw.js} +1 -1
  422. package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
  423. package/ui/dist/assets/{timer-DHJBS2w1.js → timer-CdGVTb60.js} +1 -1
  424. package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
  425. package/ui/dist/assets/{trash-2-keO5tKPE.js → trash-2-CucZJL0N.js} +1 -1
  426. package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
  427. package/ui/dist/assets/{trending-up-BBv8KbrY.js → trending-up-C5OYX2k2.js} +1 -1
  428. package/ui/dist/assets/vendor-query-C0p7b53x.js +4 -0
  429. package/ui/dist/assets/vendor-react-Mc5_kfYG.js +12 -0
  430. package/ui/dist/assets/vendor-ui-CXPAUBFv.js +51 -0
  431. package/ui/dist/assets/{wand-sparkles-BusQ52ZK.js → wand-sparkles-BaH6pJnc.js} +1 -1
  432. package/ui/dist/assets/{wrench-02YaOSiK.js → wrench-CjxjP6ok.js} +1 -1
  433. package/ui/dist/index.html +5 -2
  434. package/ui/dist/assets/ActivityView-BeshZXmE.js +0 -1
  435. package/ui/dist/assets/AgentList-QVHeldPi.js +0 -1
  436. package/ui/dist/assets/AnalyticsDashboard-C9R97dXE.js +0 -1
  437. package/ui/dist/assets/AreaChart-B73gaiVQ.js +0 -1
  438. package/ui/dist/assets/CartesianChart-CXYL2R-A.js +0 -36
  439. package/ui/dist/assets/ChatView-qjZErlrp.js +0 -10
  440. package/ui/dist/assets/CostsDashboard-O4DCLy1i.js +0 -1
  441. package/ui/dist/assets/EstimateSelect-1hQf4Osk.js +0 -1
  442. package/ui/dist/assets/FloatingChatbot-BZBzrJxd.js +0 -2
  443. package/ui/dist/assets/InviteCodeManagement-LEoGqYeA.js +0 -2
  444. package/ui/dist/assets/ProjectIcon-Chd_ofsw.js +0 -1
  445. package/ui/dist/assets/ProjectList-BvUfVB6c.js +0 -4
  446. package/ui/dist/assets/StatusIndicator-pRfkNcdV.js +0 -1
  447. package/ui/dist/assets/SummaryList-B6kXiTxL.js +0 -1
  448. package/ui/dist/assets/TaskDetail-CV6CzbOS.js +0 -1
  449. package/ui/dist/assets/TaskList-DL7brQKd.js +0 -1
  450. package/ui/dist/assets/TicketBoard-CrkkFj7C.js +0 -1
  451. package/ui/dist/assets/TicketDetail-hnnYclpD.js +0 -1
  452. package/ui/dist/assets/TicketList-CsDAyQCL.js +0 -1
  453. package/ui/dist/assets/UserManagement-BGFQyTSr.js +0 -2
  454. package/ui/dist/assets/ViewSwitcher-CnL0OqA8.js +0 -1
  455. package/ui/dist/assets/alert-dialog-SKM6Gjz4.js +0 -7
  456. package/ui/dist/assets/badge-CVHH1a-v.js +0 -1
  457. package/ui/dist/assets/brain-6o_RHVpe.js +0 -1
  458. package/ui/dist/assets/constants-Q5Zivl-a.js +0 -1
  459. package/ui/dist/assets/dialog-BUqN9Psj.js +0 -1
  460. package/ui/dist/assets/index-BUmnwPQr.js +0 -1
  461. package/ui/dist/assets/index-BfF5G4Cw.js +0 -1
  462. package/ui/dist/assets/index-C8N375c2.js +0 -1
  463. package/ui/dist/assets/index-CuxnqVVz.css +0 -1
  464. package/ui/dist/assets/index-CzMM3QOk.js +0 -1
  465. package/ui/dist/assets/index-lJlNPFVJ.js +0 -67
  466. package/ui/dist/assets/layers-jFqVrWMD.js +0 -1
  467. package/ui/dist/assets/markdown-renderer-n1ToC4XQ.js +0 -36
  468. package/ui/dist/assets/popover-CrmZgoWu.js +0 -1
  469. package/ui/dist/assets/progress-uv4SPkL5.js +0 -1
  470. package/ui/dist/assets/select-CeQ8AHGy.js +0 -1
  471. package/ui/dist/assets/server-CVHTZB72.js +0 -1
  472. package/ui/dist/assets/sheet-DuQExSho.js +0 -1
  473. package/ui/dist/assets/skeleton-TFiFJ3nB.js +0 -1
  474. package/ui/dist/assets/switch-CAePkd6k.js +0 -1
  475. package/ui/dist/assets/table-ZjAZ7hkt.js +0 -1
  476. package/ui/dist/assets/textarea-DsVPnSgR.js +0 -1
  477. package/ui/dist/assets/tooltip-BYmQ331W.js +0 -1
package/.env.example CHANGED
@@ -197,13 +197,25 @@ POOL_QUEUE_TIMEOUT_MS=30000
197
197
  # SEARCH & EMBEDDINGS
198
198
  # ════════════════════════════════════════════════════════════════════════════════
199
199
 
200
- # Web search via SearXNG
201
- SEARXNG_URL=https://searx.tiekoetter.com
200
+ # Web search via SearXNG (self-hosted only — public instances rate-limit heavily)
201
+ # SEARXNG_URL=https://searx.tiekoetter.com # disabled: 429 Too Many Requests
202
+
203
+ # Preferred: set one of these instead (sign up for a free tier key)
204
+ # BRAVE_API_KEY= # https://api.search.brave.com (2000 free/month)
205
+ # SERPER_API_KEY= # https://serper.dev (2500 free)
206
+ # TAVILY_API_KEY= # https://tavily.com (1000 free/month)
202
207
 
203
208
  # Embedding provider: local, openai, voyage
204
209
  EMBEDDING_PROVIDER=local
205
210
  # VOYAGE_API_KEY=xxx
206
211
 
212
+ # ════════════════════════════════════════════════════════════════════════════════
213
+ # CONTENT MODERATION (optional)
214
+ # ════════════════════════════════════════════════════════════════════════════════
215
+
216
+ # Content moderation (optional, uses glin-profanity)
217
+ # CONTENT_FILTER=true
218
+
207
219
  # ════════════════════════════════════════════════════════════════════════════════
208
220
  # DOCKER / MONITORING (docker-compose only)
209
221
  # ════════════════════════════════════════════════════════════════════════════════
package/CHANGELOG.md CHANGED
@@ -2,6 +2,43 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [2.3.0](https://github.com/profclaw/profclaw/compare/v2.2.0...v2.3.0) (2026-04-13)
6
+
7
+
8
+ ### Features
9
+
10
+ * integrate glin-profanity content filter + thesvg brand icons ([#44](https://github.com/profclaw/profclaw/issues/44)) ([67b84d6](https://github.com/profclaw/profclaw/commit/67b84d6f20247f9933007fcbbd6b44ec911406c8))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * npm OIDC publish - upgrade to npm 11, unset NODE_AUTH_TOKEN ([a49ffdd](https://github.com/profclaw/profclaw/commit/a49ffddfc982a43245c23178d3d3d61eef5148db))
16
+
17
+
18
+ ### Performance Improvements
19
+
20
+ * parallel multi-arch Docker builds + pico image in CI ([5fd0d5c](https://github.com/profclaw/profclaw/commit/5fd0d5c3b5b0da877a879ac4636e202bdedc36d7))
21
+
22
+ ## [2.2.0](https://github.com/profclaw/profclaw/compare/v2.1.0...v2.2.0) (2026-04-13)
23
+
24
+
25
+ ### Features
26
+
27
+ * pico auth bypass, docs overhaul, issue templates, quickstart guide ([#32](https://github.com/profclaw/profclaw/issues/32)) ([d80b7ac](https://github.com/profclaw/profclaw/commit/d80b7ac6b63a72cf163791138c99c13baca8ab39))
28
+ * token optimization, Qwen 3 support, tool routing ([#30](https://github.com/profclaw/profclaw/issues/30)) ([6a3d2bd](https://github.com/profclaw/profclaw/commit/6a3d2bd91fd5b72514e5170a29d5a30e0548f315))
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * add missing @tiptap/core and @tiptap/suggestion to ui deps ([557abe1](https://github.com/profclaw/profclaw/commit/557abe109fe1f6ff71c1444fa1e53f93a6d24820))
34
+
35
+ ## [2.1.0](https://github.com/profclaw/profclaw/compare/v2.0.0...v2.1.0) (2026-04-11)
36
+
37
+
38
+ ### Features
39
+
40
+ * engine hardening, Ink TUI, launch-ready enhancements ([#21](https://github.com/profclaw/profclaw/issues/21)) ([7bb38cf](https://github.com/profclaw/profclaw/commit/7bb38cf4006a2c68ec3c7cda70e8808964654c48))
41
+
5
42
  ## [2.0.0](https://github.com/profclaw/profclaw/releases/tag/v2.0.0) (2026-03-14)
6
43
 
7
44
  Initial public beta release.
package/CONTRIBUTING.md CHANGED
@@ -112,6 +112,26 @@ skills/ - Built-in skill definitions
112
112
  2. Register in `src/chat/execution/tools/index.ts`
113
113
  3. Add tests
114
114
 
115
+ ## Release checklist
116
+
117
+ For maintainers publishing a new version:
118
+
119
+ 1. Merge PRs to `main`
120
+ 2. Release-please auto-creates a release PR (bumps version, updates CHANGELOG)
121
+ 3. Merge the release PR. This creates a git tag and triggers npm publish via CI.
122
+ 4. Build and push Docker images locally:
123
+ ```bash
124
+ ./scripts/release-docker.sh
125
+ ```
126
+ The script builds both main and pico images, shows sizes, and asks before pushing to ghcr.io.
127
+ 5. Verify the release:
128
+ ```bash
129
+ npm info profclaw version # npm
130
+ docker pull ghcr.io/profclaw/profclaw:latest # Docker
131
+ ```
132
+
133
+ Docker images are built locally (not in CI) to save GitHub Actions minutes. The script handles ghcr.io login via `gh auth`.
134
+
115
135
  ## License
116
136
 
117
137
  By contributing, you agree that your contributions will be licensed under the AGPL-3.0 license.
package/Dockerfile CHANGED
@@ -1,7 +1,7 @@
1
1
  # ====================
2
2
  # Stage 1: Base
3
3
  # ====================
4
- FROM node:22-alpine AS base
4
+ FROM node:22-slim AS base
5
5
 
6
6
  # Install pnpm
7
7
  RUN corepack enable && corepack prepare pnpm@latest --activate
@@ -19,60 +19,76 @@ RUN pnpm install --frozen-lockfile
19
19
  # Stage 3: Dependencies (UI)
20
20
  # ====================
21
21
  FROM base AS ui-deps
22
- WORKDIR /app/ui
23
- COPY ui/package.json ui/pnpm-lock.yaml* ./
24
- RUN pnpm install --frozen-lockfile
22
+ WORKDIR /app
23
+ # Workspace lockfile lives at root — copy both for pnpm resolution
24
+ COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
25
+ COPY ui/package.json ./ui/
26
+ RUN pnpm install --frozen-lockfile --filter ui
25
27
 
26
28
  # ====================
27
- # Stage 4: Build Backend (tsc only — UI is built in stage 5)
29
+ # Stage 4: Build Backend (tsc only)
28
30
  # ====================
29
31
  FROM base AS build-backend
30
32
  COPY --from=deps /app/node_modules ./node_modules
31
33
  COPY . .
32
- RUN ./node_modules/.bin/tsc --project tsconfig.json
34
+ RUN ./node_modules/.bin/tsc --project tsconfig.json --skipLibCheck
33
35
 
34
36
  # ====================
35
- # Stage 5: Build UI
37
+ # Stage 5: Build UI (vite build)
36
38
  # ====================
37
39
  FROM base AS build-ui
38
40
  WORKDIR /app/ui
41
+ COPY --from=ui-deps /app/node_modules ../node_modules
39
42
  COPY --from=ui-deps /app/ui/node_modules ./node_modules
40
43
  COPY ui/ ./
41
44
  RUN pnpm build
42
45
 
43
46
  # ====================
44
- # Stage 6: Production
47
+ # Stage 6: Production dependencies (pruned)
48
+ # ====================
49
+ FROM base AS prod-deps
50
+ COPY package.json pnpm-lock.yaml* ./
51
+ RUN pnpm install --frozen-lockfile --prod && \
52
+ # Remove unnecessary files from node_modules to reduce image size
53
+ find node_modules -name "*.d.ts" -delete 2>/dev/null || true && \
54
+ find node_modules -name "*.map" -delete 2>/dev/null || true && \
55
+ find node_modules -name "README*" -delete 2>/dev/null || true && \
56
+ find node_modules -name "CHANGELOG*" -delete 2>/dev/null || true && \
57
+ find node_modules -name "LICENSE*" -delete 2>/dev/null || true && \
58
+ find node_modules -name ".npmignore" -delete 2>/dev/null || true && \
59
+ find node_modules -type d -name "test" -prune -exec rm -rf {} + 2>/dev/null || true && \
60
+ find node_modules -type d -name "tests" -prune -exec rm -rf {} + 2>/dev/null || true && \
61
+ find node_modules -type d -name "__tests__" -prune -exec rm -rf {} + 2>/dev/null || true
62
+
63
+ # ====================
64
+ # Stage 7: Production (pro mode - full features)
45
65
  # ====================
46
- FROM node:22-alpine AS production
66
+ FROM node:22-slim AS production
47
67
 
48
- # Install Chromium for Playwright, git for agent sandbox, dev tools
49
- RUN apk add --no-cache \
68
+ # Install runtime dependencies: Chromium for Playwright, git for agent sandbox
69
+ RUN apt-get update && apt-get install -y --no-install-recommends \
50
70
  chromium \
51
- nss \
52
- freetype \
53
- harfbuzz \
54
71
  ca-certificates \
55
- ttf-freefont \
56
72
  curl \
57
73
  git \
58
- && rm -rf /var/cache/apk/*
74
+ && rm -rf /var/lib/apt/lists/*
59
75
 
60
76
  # Enable pnpm via corepack (for agent sandbox: clone, build, lint)
61
77
  RUN corepack enable && corepack prepare pnpm@latest --activate
62
78
 
63
79
  # Set Playwright to use system Chromium
64
80
  ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
65
- ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium-browser
81
+ ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium
66
82
 
67
83
  # Create non-root user for security
68
- RUN addgroup -g 1001 -S profclaw && \
69
- adduser -S profclaw -u 1001 -G profclaw
84
+ RUN groupadd -g 1001 profclaw && \
85
+ useradd -u 1001 -g profclaw -s /bin/bash -m profclaw
70
86
 
71
87
  WORKDIR /app
72
88
 
73
- # Copy backend artifacts
89
+ # Copy pruned production deps (smaller than full node_modules)
90
+ COPY --from=prod-deps /app/node_modules ./node_modules
74
91
  COPY --from=build-backend /app/dist ./dist
75
- COPY --from=build-backend /app/node_modules ./node_modules
76
92
  COPY --from=build-backend /app/package.json ./
77
93
 
78
94
  # Copy runtime config (settings.yml for storage tier, queue, etc.)
@@ -90,13 +106,13 @@ RUN mkdir -p /app/data && \
90
106
  chmod +x /app/dist/cli/index.js 2>/dev/null || true && \
91
107
  chown -R profclaw:profclaw /app
92
108
 
93
- # Production environment
109
+ # Production environment defaults (override via env_file or environment)
94
110
  ENV NODE_ENV=production
95
111
  ENV PORT=3000
96
112
  ENV PROFCLAW_MODE=pro
97
113
 
98
114
  # Health check
99
- HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
115
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
100
116
  CMD curl -f http://localhost:${PORT}/health || exit 1
101
117
 
102
118
  # Switch to non-root user
package/README.md CHANGED
@@ -5,8 +5,8 @@
5
5
  <h1 align="center">profClaw</h1>
6
6
 
7
7
  <p align="center">
8
- <b>Smart, lightweight AI agent engine.</b><br>
9
- Run locally on anything from a Raspberry Pi to a production VPS.
8
+ <b>Self-hosted AI agent engine for developers.</b><br>
9
+ 35 providers · 72 tools · 22 channels · runs on anything.
10
10
  </p>
11
11
 
12
12
  <p align="center">
@@ -14,6 +14,9 @@
14
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>
15
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+">
16
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">
17
20
  </p>
18
21
 
19
22
  <p align="center">
@@ -24,11 +27,22 @@
24
27
 
25
28
  ---
26
29
 
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>
33
+
34
+ <p align="center"><i>Chat with Gemma 4 locally. Zero cost. Runs on your Mac.</i></p>
35
+
36
+ ---
37
+
27
38
  ## Table of Contents
28
39
 
29
40
  - [Why profClaw](#why-profclaw)
30
41
  - [Features](#features)
31
- - [Installation](#installation)
42
+ - [Quick Start](#quick-start)
43
+ - [Interactive TUI](#interactive-tui)
44
+ - [Slash Commands](#slash-commands)
45
+ - [Headless Mode](#headless-mode)
32
46
  - [Deployment Modes](#deployment-modes)
33
47
  - [Where It Runs](#where-it-runs)
34
48
  - [Configuration](#configuration)
@@ -43,50 +57,57 @@
43
57
 
44
58
  ## Why profClaw
45
59
 
46
- Most AI coding tools are either cloud-only (Cursor, Devin) or single-purpose CLIs (Aider, SWE-Agent). profClaw is different:
47
-
48
- - **Local-first** - runs on your machine, your data stays local
49
- - **Multi-agent orchestration** - routes tasks to the right agent (Claude, GPT, Ollama) based on capability scoring, not just round-robin
50
- - **Real task queue** - BullMQ with dead letter queue, retry with backoff, priority scheduling
51
- - **Built-in project management** - tickets, Kanban, sprints, burndown charts, bi-directional sync with GitHub/Jira/Linear
52
- - **22 chat channels** - talk to your AI through Slack, Discord, Telegram, WhatsApp, Teams, or 17 others
53
- - **Cost tracking** - per-token budget management with alerts at 50/80/100%
54
- - **72 built-in tools** - file ops, git, browser automation, cron, web search, canvas, voice
55
- - **Mode-aware** - scales from a Raspberry Pi (pico) to a full team server (pro)
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.
56
61
 
57
- No other open-source tool combines task orchestration, project management, and cost tracking in one self-hosted package.
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.
58
71
 
59
72
  ## Features
60
73
 
61
74
  | | |
62
75
  |---|---|
63
- | **35 AI providers** | Anthropic, OpenAI, Google, Groq, Ollama, DeepSeek, Bedrock, and more |
64
- | **22 chat channels** | Slack, Discord, Telegram, WhatsApp, iMessage, Matrix, Teams, and 15 more |
65
- | **72 built-in tools** | File ops, git, browser automation, cron, web search, canvas, voice |
66
- | **50 skills** | Coding agent, GitHub issues, Notion, Obsidian, image gen, and more |
67
- | **MCP server** | Native Model Context Protocol - connect to any MCP-compatible client |
68
- | **Voice I/O** | STT (Whisper) + TTS (ElevenLabs/OpenAI/system) + Talk Mode |
69
- | **Plugin SDK** | Build and share third-party plugins via npm or ClawHub |
70
- | **3 deployment modes** | Pico (~140MB), Mini (~145MB), 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) |
85
+
86
+ ## Quick Start
71
87
 
72
- ## Installation
73
-
74
- ### npm (recommended)
88
+ ```bash
89
+ npm install -g profclaw
90
+ profclaw init
91
+ profclaw chat --tui
92
+ ```
75
93
 
76
94
  ```bash
77
- npx profclaw onboard
95
+ # Verify
96
+ curl http://localhost:3000/health
78
97
  ```
79
98
 
80
- This runs the zero-to-running wizard: picks your AI provider, sets up config, and starts the server.
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.
81
100
 
82
- Or install globally:
101
+ `profclaw chat --tui` opens the terminal UI with streaming responses, code highlighting, slash commands, and a model selector.
102
+
103
+ ### Full setup wizard
83
104
 
84
105
  ```bash
85
- npm install -g profclaw@latest
86
- profclaw setup
87
- profclaw serve
106
+ npx profclaw onboard
88
107
  ```
89
108
 
109
+ Walks you through provider setup, config, and server start. Takes about 5 minutes.
110
+
90
111
  ### Docker
91
112
 
92
113
  ```bash
@@ -118,15 +139,107 @@ docker compose --profile ai up -d
118
139
  curl -fsSL https://raw.githubusercontent.com/profclaw/profclaw/main/install.sh | bash
119
140
  ```
120
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
+
121
234
  ## Deployment Modes
122
235
 
123
- profClaw scales from a Raspberry Pi to a full production server:
236
+ Same binary, different scale. Set `PROFCLAW_MODE` and go:
124
237
 
125
238
  | Mode | What you get | RAM | Best for |
126
239
  |------|-------------|-----|----------|
127
240
  | **pico** | Agent + tools + 1 chat channel + cron. No UI. | ~140MB | Raspberry Pi, $5 VPS, home server |
128
241
  | **mini** | + Dashboard, integrations, 3 channels | ~145MB | Personal dev server, small VPS |
129
- | **pro** | + All channels, Redis queues, plugins, browser tools | ~120-200MB | Teams, production |
242
+ | **pro** | + All channels, Redis queues, plugins, browser tools | ~200MB | Teams, production |
130
243
 
131
244
  Set via `PROFCLAW_MODE=pico|mini|pro` environment variable.
132
245
 
@@ -146,7 +259,7 @@ profClaw requires Node.js 22+. For bare-metal embedded devices (ESP32, Arduino),
146
259
 
147
260
  ## Configuration
148
261
 
149
- 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:
150
263
 
151
264
  ```bash
152
265
  # AI Provider (pick one)
@@ -162,7 +275,9 @@ PORT=3000
162
275
  REDIS_URL=redis://localhost:6379 # Required for pro mode
163
276
  ```
164
277
 
165
- See [`.env.example`](.env.example) for all options.
278
+ Run `profclaw doctor` to verify your configuration at any time.
279
+
280
+ See [`.env.example`](.env.example) for all 130+ options.
166
281
 
167
282
  ## AI Providers
168
283
 
@@ -183,7 +298,8 @@ See [`.env.example`](.env.example) for all options.
183
298
  | Together | Open models | No |
184
299
  | Fireworks | Open models | No |
185
300
  | Mistral | Mistral Large, Codestral | No |
186
- | ... and 22 more | HuggingFace, NVIDIA NIM, Cerebras, Replicate, Zhipu, Moonshot, Qwen, etc. | |
301
+ | LM Studio | Local models | Yes |
302
+ | ... and 21 more | HuggingFace, NVIDIA NIM, Cerebras, Replicate, Zhipu, Moonshot, Qwen, etc. | |
187
303
 
188
304
  ## Chat Channels
189
305
 
@@ -216,9 +332,11 @@ See [`.env.example`](.env.example) for all options.
216
332
 
217
333
  | Platform | Features |
218
334
  |----------|----------|
219
- | **GitHub** | Webhooks, OAuth, issue sync, PR automation |
220
- | **Jira** | Webhooks, OAuth, issue sync, transitions |
221
- | **Linear** | Webhooks, OAuth, issue sync |
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 |
222
340
 
223
341
  ## Architecture
224
342
 
@@ -234,12 +352,21 @@ src/
234
352
  providers/ 35 AI SDK providers
235
353
  skills/ Skill loader and registry
236
354
  mcp/ MCP server (stdio + SSE)
355
+ tui/ Interactive terminal UI (ink + blessed)
237
356
  types/ Shared TypeScript types
238
357
 
239
358
  ui/src/ React 19 + Vite dashboard (mini/pro only)
240
- skills/ Built-in skill definitions
359
+ skills/ Built-in skill definitions (Markdown)
241
360
  ```
242
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.
369
+
243
370
  ## Development
244
371
 
245
372
  ```bash
@@ -256,6 +383,13 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines.
256
383
 
257
384
  See [SECURITY.md](SECURITY.md) for our security policy and how to report vulnerabilities.
258
385
 
386
+ ## Need help?
387
+
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)
392
+
259
393
  ## License
260
394
 
261
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