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