profclaw 0.0.1-beta.3 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (535) hide show
  1. package/.env.example +14 -2
  2. package/CHANGELOG.md +54 -34
  3. package/CONTRIBUTING.md +23 -5
  4. package/Dockerfile +39 -23
  5. package/README.md +271 -72
  6. package/dist/agents/agent-summary.d.ts +44 -0
  7. package/dist/agents/agent-summary.js +176 -0
  8. package/dist/agents/auto-memory.d.ts +59 -0
  9. package/dist/agents/auto-memory.js +310 -0
  10. package/dist/agents/checkpoint-manager.d.ts +76 -0
  11. package/dist/agents/checkpoint-manager.js +156 -0
  12. package/dist/agents/circuit-breaker.d.ts +54 -0
  13. package/dist/agents/circuit-breaker.js +153 -0
  14. package/dist/agents/context-compactor.d.ts +70 -0
  15. package/dist/agents/context-compactor.js +361 -0
  16. package/dist/agents/conversation-branch.d.ts +55 -0
  17. package/dist/agents/conversation-branch.js +115 -0
  18. package/dist/agents/error-recovery.d.ts +44 -0
  19. package/dist/agents/error-recovery.js +197 -0
  20. package/dist/agents/events.d.ts +76 -0
  21. package/dist/agents/events.js +8 -0
  22. package/dist/agents/executor.d.ts +35 -1
  23. package/dist/agents/executor.js +573 -124
  24. package/dist/agents/file-snapshots.d.ts +72 -0
  25. package/dist/agents/file-snapshots.js +182 -0
  26. package/dist/agents/index.d.ts +2 -0
  27. package/dist/agents/orchestrator.d.ts +183 -0
  28. package/dist/agents/orchestrator.js +495 -0
  29. package/dist/agents/permissions.d.ts +63 -0
  30. package/dist/agents/permissions.js +138 -0
  31. package/dist/agents/plan-mode.d.ts +71 -0
  32. package/dist/agents/plan-mode.js +186 -0
  33. package/dist/agents/prompt-suggestions.d.ts +33 -0
  34. package/dist/agents/prompt-suggestions.js +208 -0
  35. package/dist/agents/rate-limit-monitor.d.ts +56 -0
  36. package/dist/agents/rate-limit-monitor.js +224 -0
  37. package/dist/agents/result-store.d.ts +37 -0
  38. package/dist/agents/result-store.js +104 -0
  39. package/dist/agents/session-diff.d.ts +43 -0
  40. package/dist/agents/session-diff.js +258 -0
  41. package/dist/agents/tool-loader.d.ts +65 -0
  42. package/dist/agents/tool-loader.js +273 -0
  43. package/dist/agents/transcript.d.ts +96 -0
  44. package/dist/agents/transcript.js +267 -0
  45. package/dist/agents/worktree-manager.d.ts +80 -0
  46. package/dist/agents/worktree-manager.js +203 -0
  47. package/dist/auth/middleware.js +14 -0
  48. package/dist/chat/agentic-executor.d.ts +7 -0
  49. package/dist/chat/agentic-executor.js +253 -30
  50. package/dist/chat/conversations.d.ts +2 -0
  51. package/dist/chat/conversations.js +8 -0
  52. package/dist/chat/execution/executor.d.ts +8 -0
  53. package/dist/chat/execution/executor.js +157 -103
  54. package/dist/chat/execution/index.js +5 -1
  55. package/dist/chat/execution/tool-router.js +40 -14
  56. package/dist/chat/execution/tools/canvas.d.ts +2 -2
  57. package/dist/chat/execution/tools/code-tools.d.ts +66 -0
  58. package/dist/chat/execution/tools/code-tools.js +353 -0
  59. package/dist/chat/execution/tools/complete-task.d.ts +2 -2
  60. package/dist/chat/execution/tools/cron-tool.d.ts +26 -10
  61. package/dist/chat/execution/tools/cron-tool.js +48 -3
  62. package/dist/chat/execution/tools/decompose-task.d.ts +58 -0
  63. package/dist/chat/execution/tools/decompose-task.js +166 -0
  64. package/dist/chat/execution/tools/exec.d.ts +5 -2
  65. package/dist/chat/execution/tools/exec.js +294 -155
  66. package/dist/chat/execution/tools/feed-tools.d.ts +77 -0
  67. package/dist/chat/execution/tools/feed-tools.js +142 -0
  68. package/dist/chat/execution/tools/file-ops.d.ts +1 -1
  69. package/dist/chat/execution/tools/github.d.ts +2 -2
  70. package/dist/chat/execution/tools/index.d.ts +15 -3
  71. package/dist/chat/execution/tools/index.js +125 -12
  72. package/dist/chat/execution/tools/integrations.d.ts +8 -8
  73. package/dist/chat/execution/tools/multi-patch.d.ts +53 -0
  74. package/dist/chat/execution/tools/multi-patch.js +373 -0
  75. package/dist/chat/execution/tools/openai-image-gen.d.ts +2 -2
  76. package/dist/chat/execution/tools/plan-tools.d.ts +80 -0
  77. package/dist/chat/execution/tools/plan-tools.js +134 -0
  78. package/dist/chat/execution/tools/profclaw-ops.d.ts +6 -6
  79. package/dist/chat/execution/tools/repl-tool.d.ts +46 -0
  80. package/dist/chat/execution/tools/repl-tool.js +207 -0
  81. package/dist/chat/execution/tools/sessions-send.d.ts +2 -2
  82. package/dist/chat/execution/tools/slack-actions.d.ts +2 -2
  83. package/dist/chat/execution/tools/system.d.ts +4 -4
  84. package/dist/chat/execution/tools/todo-tool.d.ts +72 -0
  85. package/dist/chat/execution/tools/todo-tool.js +152 -0
  86. package/dist/chat/execution/tools/tool-search.d.ts +50 -0
  87. package/dist/chat/execution/tools/tool-search.js +155 -0
  88. package/dist/chat/execution/types.d.ts +21 -14
  89. package/dist/chat/execution/workflows/executor.d.ts +11 -0
  90. package/dist/chat/execution/workflows/executor.js +99 -1
  91. package/dist/chat/execution/workflows/types.d.ts +35 -2
  92. package/dist/chat/format/index.d.ts +1 -0
  93. package/dist/chat/format/index.js +1 -0
  94. package/dist/chat/format/markdown-convert.d.ts +23 -0
  95. package/dist/chat/format/markdown-convert.js +149 -0
  96. package/dist/chat/index.d.ts +1 -1
  97. package/dist/chat/index.js +1 -1
  98. package/dist/chat/message-handler.js +58 -6
  99. package/dist/chat/proactive/index.d.ts +62 -0
  100. package/dist/chat/proactive/index.js +147 -0
  101. package/dist/chat/prompt-adapter.js +2 -0
  102. package/dist/chat/providers/irc/index.d.ts +2 -2
  103. package/dist/chat/providers/slack/index.d.ts +2 -2
  104. package/dist/chat/providers/telegram/index.d.ts +2 -0
  105. package/dist/chat/providers/telegram/index.js +21 -2
  106. package/dist/chat/system-prompts.d.ts +3 -3
  107. package/dist/chat/system-prompts.js +116 -61
  108. package/dist/chat/tools.d.ts +6 -6
  109. package/dist/cli/commands/auth.js +64 -1
  110. package/dist/cli/commands/chat.js +1327 -138
  111. package/dist/cli/commands/doctor.js +222 -16
  112. package/dist/cli/commands/history.d.ts +3 -0
  113. package/dist/cli/commands/history.js +138 -0
  114. package/dist/cli/commands/import.d.ts +44 -0
  115. package/dist/cli/commands/import.js +526 -0
  116. package/dist/cli/commands/init.d.ts +13 -0
  117. package/dist/cli/commands/init.js +381 -0
  118. package/dist/cli/commands/models.js +39 -26
  119. package/dist/cli/commands/onboard.js +263 -98
  120. package/dist/cli/commands/plan.d.ts +13 -0
  121. package/dist/cli/commands/plan.js +184 -0
  122. package/dist/cli/commands/serve.d.ts +7 -0
  123. package/dist/cli/commands/serve.js +77 -18
  124. package/dist/cli/commands/setup.js +375 -91
  125. package/dist/cli/commands/status.js +54 -0
  126. package/dist/cli/commands/tools.js +13 -13
  127. package/dist/cli/commands/tui.js +26 -1
  128. package/dist/cli/index.js +19 -6
  129. package/dist/cli/ink/App.d.ts +13 -0
  130. package/dist/cli/ink/App.js +6 -0
  131. package/dist/cli/ink/ChatApp.d.ts +60 -0
  132. package/dist/cli/ink/ChatApp.js +325 -0
  133. package/dist/cli/ink/DashboardApp.d.ts +3 -0
  134. package/dist/cli/ink/DashboardApp.js +143 -0
  135. package/dist/cli/ink/components/AgentStatus.d.ts +17 -0
  136. package/dist/cli/ink/components/AgentStatus.js +33 -0
  137. package/dist/cli/ink/components/ChannelList.d.ts +17 -0
  138. package/dist/cli/ink/components/ChannelList.js +33 -0
  139. package/dist/cli/ink/components/ConnectionStatus.d.ts +19 -0
  140. package/dist/cli/ink/components/ConnectionStatus.js +50 -0
  141. package/dist/cli/ink/components/CostBar.d.ts +19 -0
  142. package/dist/cli/ink/components/CostBar.js +35 -0
  143. package/dist/cli/ink/components/HookStatus.d.ts +15 -0
  144. package/dist/cli/ink/components/HookStatus.js +7 -0
  145. package/dist/cli/ink/components/PermissionPrompt.d.ts +21 -0
  146. package/dist/cli/ink/components/PermissionPrompt.js +51 -0
  147. package/dist/cli/ink/components/PlanView.d.ts +23 -0
  148. package/dist/cli/ink/components/PlanView.js +26 -0
  149. package/dist/cli/ink/components/ProviderList.d.ts +16 -0
  150. package/dist/cli/ink/components/ProviderList.js +16 -0
  151. package/dist/cli/ink/components/SessionHeader.d.ts +15 -0
  152. package/dist/cli/ink/components/SessionHeader.js +15 -0
  153. package/dist/cli/ink/components/StreamingMessage.d.ts +20 -0
  154. package/dist/cli/ink/components/StreamingMessage.js +27 -0
  155. package/dist/cli/ink/components/SuggestionBar.d.ts +15 -0
  156. package/dist/cli/ink/components/SuggestionBar.js +28 -0
  157. package/dist/cli/ink/components/SystemHealth.d.ts +20 -0
  158. package/dist/cli/ink/components/SystemHealth.js +39 -0
  159. package/dist/cli/ink/components/TaskList.d.ts +17 -0
  160. package/dist/cli/ink/components/TaskList.js +59 -0
  161. package/dist/cli/ink/components/ToolCall.d.ts +17 -0
  162. package/dist/cli/ink/components/ToolCall.js +43 -0
  163. package/dist/cli/ink/index.d.ts +23 -0
  164. package/dist/cli/ink/index.js +15 -0
  165. package/dist/cli/ink/keybindings.d.ts +35 -0
  166. package/dist/cli/ink/keybindings.js +105 -0
  167. package/dist/cli/ink/markdown-renderer.d.ts +47 -0
  168. package/dist/cli/ink/markdown-renderer.js +380 -0
  169. package/dist/cli/ink/output-styles.d.ts +39 -0
  170. package/dist/cli/ink/output-styles.js +119 -0
  171. package/dist/cli/interactive/auto-serve.d.ts +38 -0
  172. package/dist/cli/interactive/auto-serve.js +209 -0
  173. package/dist/cli/interactive/index.d.ts +25 -0
  174. package/dist/cli/interactive/index.js +23 -0
  175. package/dist/cli/interactive/picker.d.ts +28 -0
  176. package/dist/cli/interactive/picker.js +153 -0
  177. package/dist/cli/interactive/renderer.d.ts +26 -0
  178. package/dist/cli/interactive/renderer.js +555 -0
  179. package/dist/cli/interactive/repl.d.ts +14 -0
  180. package/dist/cli/interactive/repl.js +1516 -0
  181. package/dist/cli/interactive/stream-client.d.ts +59 -0
  182. package/dist/cli/interactive/stream-client.js +506 -0
  183. package/dist/cli/interactive/types.d.ts +121 -0
  184. package/dist/cli/interactive/types.js +10 -0
  185. package/dist/cli/providers.d.ts +15 -0
  186. package/dist/cli/providers.js +41 -0
  187. package/dist/cli/utils/api.d.ts +9 -0
  188. package/dist/cli/utils/api.js +58 -2
  189. package/dist/core/deployment.js +2 -0
  190. package/dist/cron/natural-language.d.ts +54 -0
  191. package/dist/cron/natural-language.js +569 -0
  192. package/dist/cron/scheduler.d.ts +34 -4
  193. package/dist/cron/scheduler.js +141 -9
  194. package/dist/cron/templates.d.ts +1 -1
  195. package/dist/cron/templates.js +219 -0
  196. package/dist/feeds/feed-engine.d.ts +149 -0
  197. package/dist/feeds/feed-engine.js +600 -0
  198. package/dist/feeds/index.d.ts +9 -0
  199. package/dist/feeds/index.js +8 -0
  200. package/dist/gateway/router.js +6 -1
  201. package/dist/hooks/built-in/audit-log.d.ts +11 -0
  202. package/dist/hooks/built-in/audit-log.js +84 -0
  203. package/dist/hooks/built-in/cost-warning.d.ts +10 -0
  204. package/dist/hooks/built-in/cost-warning.js +59 -0
  205. package/dist/hooks/built-in/dangerous-tool.d.ts +32 -0
  206. package/dist/hooks/built-in/dangerous-tool.js +80 -0
  207. package/dist/hooks/built-in/index.d.ts +14 -0
  208. package/dist/hooks/built-in/index.js +20 -0
  209. package/dist/hooks/index.d.ts +3 -0
  210. package/dist/hooks/index.js +6 -0
  211. package/dist/hooks/loader.d.ts +17 -0
  212. package/dist/hooks/loader.js +142 -0
  213. package/dist/hooks/registry.d.ts +62 -0
  214. package/dist/hooks/registry.js +127 -0
  215. package/dist/integrations/web-search.js +6 -3
  216. package/dist/memory/index.d.ts +1 -0
  217. package/dist/memory/index.js +2 -0
  218. package/dist/memory/memory-service.js +14 -13
  219. package/dist/memory/observational.d.ts +62 -0
  220. package/dist/memory/observational.js +396 -0
  221. package/dist/middleware/content-filter.d.ts +22 -0
  222. package/dist/middleware/content-filter.js +69 -0
  223. package/dist/middleware/request-validator.d.ts +159 -0
  224. package/dist/middleware/request-validator.js +93 -0
  225. package/dist/plugins/sdk.d.ts +22 -0
  226. package/dist/plugins/sdk.js +17 -1
  227. package/dist/projects/types.d.ts +10 -10
  228. package/dist/providers/ai-sdk.d.ts +11 -0
  229. package/dist/providers/ai-sdk.js +97 -18
  230. package/dist/providers/core/models.js +67 -1
  231. package/dist/providers/core/types.d.ts +3 -0
  232. package/dist/providers/index.d.ts +1 -0
  233. package/dist/providers/index.js +1 -0
  234. package/dist/providers/smart-router.d.ts +118 -0
  235. package/dist/providers/smart-router.js +685 -0
  236. package/dist/providers/types.d.ts +16 -16
  237. package/dist/routes/agents.js +50 -0
  238. package/dist/routes/auth.js +8 -1
  239. package/dist/routes/channels.d.ts +12 -0
  240. package/dist/routes/channels.js +166 -0
  241. package/dist/routes/chat.js +259 -14
  242. package/dist/routes/costs.js +32 -0
  243. package/dist/routes/cron.js +80 -5
  244. package/dist/routes/feeds.d.ts +10 -0
  245. package/dist/routes/feeds.js +168 -0
  246. package/dist/routes/mcp.js +21 -0
  247. package/dist/routes/memory.js +130 -0
  248. package/dist/routes/skills.js +129 -0
  249. package/dist/routes/teams.d.ts +9 -0
  250. package/dist/routes/teams.js +210 -0
  251. package/dist/routes/tools.js +14 -0
  252. package/dist/routes/users.js +2 -0
  253. package/dist/server/route-loader.js +4 -1
  254. package/dist/server/stream-bridge.d.ts +19 -0
  255. package/dist/server/stream-bridge.js +38 -0
  256. package/dist/server.js +421 -141
  257. package/dist/skills/marketplace.d.ts +87 -0
  258. package/dist/skills/marketplace.js +268 -0
  259. package/dist/storage/index.d.ts +14 -0
  260. package/dist/storage/index.js +64 -3
  261. package/dist/storage/schema.d.ts +4 -4
  262. package/dist/storage/schema.js +1 -1
  263. package/dist/teams/index.d.ts +110 -0
  264. package/dist/teams/index.js +365 -0
  265. package/dist/tickets/types.d.ts +39 -39
  266. package/dist/types/summary.d.ts +5 -5
  267. package/dist/utils/auto-update.d.ts +23 -0
  268. package/dist/utils/auto-update.js +157 -0
  269. package/dist/utils/offline-detect.d.ts +55 -0
  270. package/dist/utils/offline-detect.js +121 -0
  271. package/dist/utils/pid-file.d.ts +36 -0
  272. package/dist/utils/pid-file.js +125 -0
  273. package/dist/utils/prevent-sleep.d.ts +27 -0
  274. package/dist/utils/prevent-sleep.js +95 -0
  275. package/dist/utils/sanitizer.d.ts +57 -0
  276. package/dist/utils/sanitizer.js +174 -0
  277. package/docker-compose.yml +13 -137
  278. package/package.json +31 -6
  279. package/skills/deploy-cloudflare/SKILL.md +62 -0
  280. package/skills/deploy-vercel/SKILL.md +67 -0
  281. package/skills/docker-deploy/SKILL.md +158 -0
  282. package/skills/full-stack-builder/SKILL.md +92 -0
  283. package/skills/git-workflow/SKILL.md +3 -3
  284. package/skills/humanizer/SKILL.md +488 -0
  285. package/skills/profclaw-assistant/SKILL.md +85 -56
  286. package/ui/dist/assets/ActivityView-Da6HQ8ws.js +1 -0
  287. package/ui/dist/assets/AgentList-H58R0kX3.js +1 -0
  288. package/ui/dist/assets/AnalyticsDashboard-B28AeRsc.js +1 -0
  289. package/ui/dist/assets/AreaChart-DwLzeAQ8.js +1 -0
  290. package/ui/dist/assets/CartesianChart-piKQsTAR.js +36 -0
  291. package/ui/dist/assets/ChatView-Dbj8rxU5.js +10 -0
  292. package/ui/dist/assets/CostsDashboard-C6F5df0F.js +1 -0
  293. package/ui/dist/assets/EstimateSelect-wga0rUKX.js +1 -0
  294. package/ui/dist/assets/FeedDashboard-Ef6FEzEf.js +1 -0
  295. package/ui/dist/assets/FloatingChatbot-0yhkUeCq.js +2 -0
  296. package/ui/dist/assets/InviteCodeManagement-tUXfx4Bc.js +2 -0
  297. package/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  298. package/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  299. package/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  300. package/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  301. package/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  302. package/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  303. package/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  304. package/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  305. package/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  306. package/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  307. package/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  308. package/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  309. package/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  310. package/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  311. package/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  312. package/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  313. package/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  314. package/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  315. package/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  316. package/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  317. package/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  318. package/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  319. package/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  320. package/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  321. package/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  322. package/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  323. package/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  324. package/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  325. package/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  326. package/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  327. package/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  328. package/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  329. package/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  330. package/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  331. package/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  332. package/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  333. package/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  334. package/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  335. package/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  336. package/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  337. package/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  338. package/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  339. package/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  340. package/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  341. package/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  342. package/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  343. package/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  344. package/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  345. package/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  346. package/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  347. package/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  348. package/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  349. package/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  350. package/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  351. package/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  352. package/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  353. package/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  354. package/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  355. package/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  356. package/ui/dist/assets/MarketplacePage-DGrLtolR.js +1 -0
  357. package/ui/dist/assets/{ProjectDetail-DlYUcOss.js → ProjectDetail-BgWvA6UP.js} +2 -2
  358. package/ui/dist/assets/ProjectIcon-TDuliqwg.js +1 -0
  359. package/ui/dist/assets/ProjectList-DXgM4187.js +1 -0
  360. package/ui/dist/assets/{Settings-CgPqzUvj.js → Settings-xA8Zhi3p.js} +3 -3
  361. package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
  362. package/ui/dist/assets/{SummaryDetail-CwLAfHgJ.js → SummaryDetail-eedRfTtF.js} +2 -2
  363. package/ui/dist/assets/SummaryList-CLNX2P84.js +1 -0
  364. package/ui/dist/assets/TaskDetail-BtWclNiR.js +1 -0
  365. package/ui/dist/assets/TaskList-JjODAgSc.js +1 -0
  366. package/ui/dist/assets/TeamsPage-CBK5iAyx.js +1 -0
  367. package/ui/dist/assets/TicketBoard-C9aJNNYp.js +1 -0
  368. package/ui/dist/assets/TicketDetail-CV5JmL31.js +1 -0
  369. package/ui/dist/assets/TicketList-68V4lzUz.js +1 -0
  370. package/ui/dist/assets/UserManagement-DKTb6UpE.js +2 -0
  371. package/ui/dist/assets/ViewSwitcher-BvdQht2Y.js +1 -0
  372. package/ui/dist/assets/alert-dialog-O6qBOv_f.js +1 -0
  373. package/ui/dist/assets/{archive-CGck7gxR.js → archive-CX7UvZpf.js} +1 -1
  374. package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
  375. package/ui/dist/assets/{bug-DqSGPUUE.js → bug-3WX0394-.js} +1 -1
  376. package/ui/dist/assets/{calendar-BuZ4zbPW.js → calendar-buq77TaS.js} +1 -1
  377. package/ui/dist/assets/{chevron-up-DcJ4LL_N.js → chevron-up-4ymsBJRo.js} +1 -1
  378. package/ui/dist/assets/{circle-x-C78PNZjF.js → circle-x-ByXtwR6Y.js} +1 -1
  379. package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
  380. package/ui/dist/assets/{cpu-Ck6AoG8c.js → cpu-CiuoCeDY.js} +1 -1
  381. package/ui/dist/assets/{database-CA2w8Lvt.js → database-BWXSBg5a.js} +1 -1
  382. package/ui/dist/assets/dialog-lDg4NvMV.js +1 -0
  383. package/ui/dist/assets/dollar-sign-Dmijd6DP.js +1 -0
  384. package/ui/dist/assets/{ellipsis-FhHKRbfl.js → ellipsis-vT-5SVIp.js} +1 -1
  385. package/ui/dist/assets/{ellipsis-vertical-CO0UqE4-.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
  386. package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
  387. package/ui/dist/assets/{file-code-ChnhYYj1.js → file-code-ChOWdKXf.js} +1 -1
  388. package/ui/dist/assets/{folder-open-CHwA1-ve.js → folder-open-CkOUbIiP.js} +1 -1
  389. package/ui/dist/assets/{funnel-ByEjRFNB.js → funnel-uZkoSPP-.js} +1 -1
  390. package/ui/dist/assets/{git-branch-GTOPQgU4.js → git-branch-CwvUxj7C.js} +1 -1
  391. package/ui/dist/assets/{git-commit-horizontal-F5M84Kut.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
  392. package/ui/dist/assets/{globe-CQWfr7hT.js → globe-D_WpJdsj.js} +1 -1
  393. package/ui/dist/assets/{hash-nKC9gtLg.js → hash-CA0hJ7vh.js} +1 -1
  394. package/ui/dist/assets/{history-DfFSA9xJ.js → history-CEWMLELs.js} +1 -1
  395. package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
  396. package/ui/dist/assets/{index-a4Fxq0Hb.js → index-C1rhbml4.js} +3 -3
  397. package/ui/dist/assets/index-CR8gfCHv.js +1 -0
  398. package/ui/dist/assets/index-DVXMpWai.js +1 -0
  399. package/ui/dist/assets/index-DaDJMM2v.js +1 -0
  400. package/ui/dist/assets/index-Djdq_0xu.js +1 -0
  401. package/ui/dist/assets/index-M46Gcb8K.css +1 -0
  402. package/ui/dist/assets/index-sEBN7w8J.js +109 -0
  403. package/ui/dist/assets/layers-C6Mhf8Nk.js +1 -0
  404. package/ui/dist/assets/{layout-dashboard-WmgjMhWF.js → layout-dashboard-BRUM0kpT.js} +1 -1
  405. package/ui/dist/assets/{lightbulb-Bo8hEr7B.js → lightbulb-CN2q1O5l.js} +1 -1
  406. package/ui/dist/assets/{link-2-YqrpQXBH.js → link-2-CC4E28yJ.js} +1 -1
  407. package/ui/dist/assets/markdown-renderer-C6ENbB0u.js +10 -0
  408. package/ui/dist/assets/markdown-renderer-CfVKi3_s.css +1 -0
  409. package/ui/dist/assets/{message-square-CD0H5hot.js → message-square-Bbb241am.js} +1 -1
  410. package/ui/dist/assets/package-CwT3IzFx.js +1 -0
  411. package/ui/dist/assets/{pencil-DpFnj5dn.js → pencil-CDmiHzoj.js} +1 -1
  412. package/ui/dist/assets/{play-DVgea_jT.js → play-tjy5jMQX.js} +1 -1
  413. package/ui/dist/assets/popover-CFHZf3pE.js +1 -0
  414. package/ui/dist/assets/progress-BboUHuLf.js +1 -0
  415. package/ui/dist/assets/{rocket-BFxPYGx9.js → rocket--8ZHgdXJ.js} +1 -1
  416. package/ui/dist/assets/select-n108rXny.js +1 -0
  417. package/ui/dist/assets/{send-eYnW_7n-.js → send-Cu7MR2Qh.js} +1 -1
  418. package/ui/dist/assets/server-DmodxZp-.js +1 -0
  419. package/ui/dist/assets/{settings-2-scXUOuE_.js → settings-2-CkRNqkxj.js} +1 -1
  420. package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
  421. package/ui/dist/assets/{shield-check-PEr7nmVw.js → shield-check-ViI3nMKE.js} +1 -1
  422. package/ui/dist/assets/{shield-off-CLtXio62.js → shield-off-DN3tagkn.js} +1 -1
  423. package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
  424. package/ui/dist/assets/{smartphone-DusFfY0U.js → smartphone-5FghiXpA.js} +1 -1
  425. package/ui/dist/assets/{square-e1yxB2eR.js → square-DiNSx8K7.js} +1 -1
  426. package/ui/dist/assets/star-DhdFVidS.js +1 -0
  427. package/ui/dist/assets/switch-CIgVbZqQ.js +1 -0
  428. package/ui/dist/assets/table-BC56FVMV.js +1 -0
  429. package/ui/dist/assets/{tag-tAwMmQ9G.js → tag-CH_vQliw.js} +1 -1
  430. package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
  431. package/ui/dist/assets/{timer-Vel1N3RP.js → timer-CdGVTb60.js} +1 -1
  432. package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
  433. package/ui/dist/assets/{trash-2-eM-CNwsZ.js → trash-2-CucZJL0N.js} +1 -1
  434. package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
  435. package/ui/dist/assets/{trending-up-BGafmjRo.js → trending-up-C5OYX2k2.js} +1 -1
  436. package/ui/dist/assets/vendor-query-C0p7b53x.js +4 -0
  437. package/ui/dist/assets/vendor-react-Mc5_kfYG.js +12 -0
  438. package/ui/dist/assets/vendor-ui-CXPAUBFv.js +51 -0
  439. package/ui/dist/assets/{wand-sparkles-DPvcd9Pi.js → wand-sparkles-BaH6pJnc.js} +1 -1
  440. package/ui/dist/assets/{wrench-B8s3zYVV.js → wrench-CjxjP6ok.js} +1 -1
  441. package/ui/dist/index.html +5 -2
  442. package/dist/chat/auto-reply.d.ts +0 -90
  443. package/dist/chat/auto-reply.js +0 -272
  444. package/dist/chat/execution/pty.d.ts +0 -92
  445. package/dist/chat/execution/pty.js +0 -285
  446. package/dist/chat/execution/tools/glinr-ops.d.ts +0 -202
  447. package/dist/chat/execution/tools/glinr-ops.js +0 -694
  448. package/dist/cli/commands/browser.d.ts +0 -3
  449. package/dist/cli/commands/browser.js +0 -138
  450. package/dist/cli/commands/canvas.d.ts +0 -3
  451. package/dist/cli/commands/canvas.js +0 -155
  452. package/dist/cli/commands/nodes.d.ts +0 -3
  453. package/dist/cli/commands/nodes.js +0 -193
  454. package/dist/diagnostics/exporters.d.ts +0 -21
  455. package/dist/diagnostics/exporters.js +0 -138
  456. package/dist/diagnostics/index.d.ts +0 -10
  457. package/dist/diagnostics/index.js +0 -9
  458. package/dist/diagnostics/middleware.d.ts +0 -12
  459. package/dist/diagnostics/middleware.js +0 -58
  460. package/dist/diagnostics/tracer.d.ts +0 -133
  461. package/dist/diagnostics/tracer.js +0 -257
  462. package/dist/discovery/index.d.ts +0 -8
  463. package/dist/discovery/index.js +0 -7
  464. package/dist/discovery/mdns.d.ts +0 -40
  465. package/dist/discovery/mdns.js +0 -249
  466. package/dist/plugins/registry.d.ts +0 -122
  467. package/dist/plugins/registry.js +0 -352
  468. package/dist/plugins/sandbox.d.ts +0 -77
  469. package/dist/plugins/sandbox.js +0 -287
  470. package/dist/plugins/search/brave.d.ts +0 -9
  471. package/dist/plugins/search/brave.js +0 -157
  472. package/dist/plugins/search/duckduckgo.d.ts +0 -9
  473. package/dist/plugins/search/duckduckgo.js +0 -171
  474. package/dist/plugins/search/index.d.ts +0 -13
  475. package/dist/plugins/search/index.js +0 -23
  476. package/dist/plugins/search/searxng.d.ts +0 -9
  477. package/dist/plugins/search/searxng.js +0 -170
  478. package/dist/plugins/search/serper.d.ts +0 -9
  479. package/dist/plugins/search/serper.js +0 -135
  480. package/dist/plugins/search/tavily.d.ts +0 -9
  481. package/dist/plugins/search/tavily.js +0 -146
  482. package/dist/providers/adapters/anthropic.d.ts +0 -26
  483. package/dist/providers/adapters/anthropic.js +0 -306
  484. package/dist/providers/adapters/base.d.ts +0 -53
  485. package/dist/providers/adapters/base.js +0 -99
  486. package/dist/providers/adapters/ollama.d.ts +0 -30
  487. package/dist/providers/adapters/ollama.js +0 -292
  488. package/dist/utils/ai-cache.d.ts +0 -72
  489. package/dist/utils/ai-cache.js +0 -204
  490. package/dist/utils/file-lock.d.ts +0 -85
  491. package/dist/utils/file-lock.js +0 -204
  492. package/ui/dist/assets/ActivityView-DIPQSJ_d.js +0 -1
  493. package/ui/dist/assets/AgentList-CqyaYrcq.js +0 -1
  494. package/ui/dist/assets/AnalyticsDashboard-C-mjuGHT.js +0 -1
  495. package/ui/dist/assets/AreaChart-CfYWmbtr.js +0 -1
  496. package/ui/dist/assets/CartesianChart-BaQ3It0c.js +0 -36
  497. package/ui/dist/assets/ChatView-DxxQy6pl.js +0 -10
  498. package/ui/dist/assets/CostsDashboard-CDBBcGkg.js +0 -1
  499. package/ui/dist/assets/EstimateSelect-CDjf5qKl.js +0 -1
  500. package/ui/dist/assets/FloatingChatbot-CZHjvJIe.js +0 -2
  501. package/ui/dist/assets/InviteCodeManagement-DTm-IPTm.js +0 -2
  502. package/ui/dist/assets/ProjectIcon-BMRpnM04.js +0 -1
  503. package/ui/dist/assets/ProjectList-D85TN0i0.js +0 -4
  504. package/ui/dist/assets/StatusIndicator-yig0uZEA.js +0 -1
  505. package/ui/dist/assets/SummaryList-BvS5Idnu.js +0 -1
  506. package/ui/dist/assets/TaskDetail-zarC1fOt.js +0 -1
  507. package/ui/dist/assets/TaskList-CyJq3ANE.js +0 -1
  508. package/ui/dist/assets/TicketBoard-BlWr3-iH.js +0 -1
  509. package/ui/dist/assets/TicketDetail-DmqWKj2W.js +0 -1
  510. package/ui/dist/assets/TicketList-Scj4pMWa.js +0 -1
  511. package/ui/dist/assets/UserManagement-BH7uG7dw.js +0 -2
  512. package/ui/dist/assets/ViewSwitcher-3HzZUdWn.js +0 -1
  513. package/ui/dist/assets/alert-dialog-DWPb2IfQ.js +0 -7
  514. package/ui/dist/assets/badge-DEmc3Z_l.js +0 -1
  515. package/ui/dist/assets/brain-CfFdLVqb.js +0 -1
  516. package/ui/dist/assets/constants-DhDjZe4P.js +0 -1
  517. package/ui/dist/assets/dialog-BOdGWhgE.js +0 -1
  518. package/ui/dist/assets/index--JkIxVXb.js +0 -67
  519. package/ui/dist/assets/index-Ca3vk7Gq.js +0 -1
  520. package/ui/dist/assets/index-DHGvP9mp.js +0 -1
  521. package/ui/dist/assets/index-DeI8lKRR.js +0 -1
  522. package/ui/dist/assets/index-WclMPci1.css +0 -1
  523. package/ui/dist/assets/index-Z4-RtZcs.js +0 -1
  524. package/ui/dist/assets/layers-DFeLExSa.js +0 -1
  525. package/ui/dist/assets/markdown-renderer-Croje6Xe.js +0 -36
  526. package/ui/dist/assets/popover-JXecfWG5.js +0 -1
  527. package/ui/dist/assets/progress-C1ghf1Fu.js +0 -1
  528. package/ui/dist/assets/select-MADP8m6Q.js +0 -1
  529. package/ui/dist/assets/server-CPMaysH8.js +0 -1
  530. package/ui/dist/assets/sheet-r6NSOxi-.js +0 -1
  531. package/ui/dist/assets/skeleton-C9oEzNlU.js +0 -1
  532. package/ui/dist/assets/switch-tNs0n-kz.js +0 -1
  533. package/ui/dist/assets/table-CXxtLicg.js +0 -1
  534. package/ui/dist/assets/textarea-BjiEeIWh.js +0 -1
  535. package/ui/dist/assets/tooltip-ZMwtfr1J.js +0 -1
@@ -1,272 +0,0 @@
1
- /**
2
- * Auto-Reply System
3
- *
4
- * Template-based automatic responses for chat messages.
5
- * Supports:
6
- * - Out-of-office / away mode
7
- * - Busy/DND mode with queue position
8
- * - Keyword-triggered quick replies
9
- * - Rate-limited to prevent spam
10
- * - Per-channel configuration
11
- */
12
- import { logger } from '../utils/logger.js';
13
- // --- State ---
14
- const DEFAULT_CONFIG = {
15
- enabled: false,
16
- templates: [],
17
- globalCooldownMs: 30_000, // 30 seconds between replies to same user
18
- maxRepliesPerHour: 10,
19
- };
20
- let config = { ...DEFAULT_CONFIG };
21
- // Track last reply time per user to enforce cooldowns
22
- const lastReplyMap = new Map();
23
- // --- Core Functions ---
24
- /**
25
- * Load auto-reply configuration
26
- */
27
- export function configureAutoReply(newConfig) {
28
- config = { ...config, ...newConfig };
29
- if (newConfig.templates) {
30
- // Sort by priority descending
31
- config.templates.sort((a, b) => b.priority - a.priority);
32
- }
33
- logger.info('[AutoReply] Configuration updated', {
34
- enabled: config.enabled,
35
- templates: config.templates.length,
36
- });
37
- }
38
- /**
39
- * Get current auto-reply configuration
40
- */
41
- export function getAutoReplyConfig() {
42
- return { ...config };
43
- }
44
- /**
45
- * Check if a message should trigger an auto-reply
46
- */
47
- export function checkAutoReply(message, userId, channelId) {
48
- if (!config.enabled || config.templates.length === 0) {
49
- return { shouldReply: false, reason: 'disabled' };
50
- }
51
- // Check global cooldown
52
- const userState = lastReplyMap.get(userId);
53
- const now = Date.now();
54
- if (userState) {
55
- // Reset hourly counter if hour has passed
56
- if (now - userState.hourStart > 3_600_000) {
57
- userState.count = 0;
58
- userState.hourStart = now;
59
- }
60
- // Check cooldown
61
- if (now - userState.time < config.globalCooldownMs) {
62
- return { shouldReply: false, reason: 'cooldown' };
63
- }
64
- // Check rate limit
65
- if (userState.count >= config.maxRepliesPerHour) {
66
- return { shouldReply: false, reason: 'rate_limited' };
67
- }
68
- }
69
- // Find matching template (sorted by priority)
70
- for (const template of config.templates) {
71
- if (!template.enabled)
72
- continue;
73
- // Check channel filter
74
- if (template.channels && template.channels.length > 0 && channelId) {
75
- if (!template.channels.includes(channelId))
76
- continue;
77
- }
78
- // Check per-template cooldown
79
- const templateKey = `${userId}:${template.id}`;
80
- const templateState = lastReplyMap.get(templateKey);
81
- if (templateState && now - templateState.time < template.cooldownMs) {
82
- continue;
83
- }
84
- // Check trigger
85
- if (matchesTrigger(template.trigger, message)) {
86
- // Update global user state
87
- const existing = lastReplyMap.get(userId);
88
- const updatedState = existing
89
- ? { ...existing, time: now, count: existing.count + 1 }
90
- : { time: now, count: 1, hourStart: now };
91
- lastReplyMap.set(userId, updatedState);
92
- // Update per-template state
93
- lastReplyMap.set(templateKey, { time: now, count: 1, hourStart: now });
94
- // Render message with variables
95
- const rendered = renderTemplate(template.message, {
96
- ...template.variables,
97
- user: userId,
98
- channel: channelId ?? 'unknown',
99
- time: new Date().toLocaleTimeString(),
100
- date: new Date().toLocaleDateString(),
101
- });
102
- logger.debug('[AutoReply] Triggered', { templateId: template.id, userId, channelId });
103
- return {
104
- shouldReply: true,
105
- templateId: template.id,
106
- message: rendered,
107
- };
108
- }
109
- }
110
- return { shouldReply: false, reason: 'no_match' };
111
- }
112
- /**
113
- * Check if a trigger matches the message
114
- */
115
- function matchesTrigger(trigger, message) {
116
- switch (trigger.type) {
117
- case 'always':
118
- return true;
119
- case 'keyword': {
120
- const lower = message.toLowerCase();
121
- return trigger.keywords.some(kw => lower.includes(kw.toLowerCase()));
122
- }
123
- case 'regex': {
124
- try {
125
- const re = new RegExp(trigger.pattern, 'i');
126
- return re.test(message);
127
- }
128
- catch {
129
- return false;
130
- }
131
- }
132
- case 'no_agent':
133
- // This is checked externally - always matches when the trigger is selected
134
- return true;
135
- case 'after_hours':
136
- return isAfterHours(trigger.schedule);
137
- default:
138
- return false;
139
- }
140
- }
141
- /**
142
- * Check if current time is outside business hours
143
- */
144
- function isAfterHours(schedule) {
145
- try {
146
- const now = new Date();
147
- // Use Intl to get time in the specified timezone
148
- const formatter = new Intl.DateTimeFormat('en-US', {
149
- timeZone: schedule.timezone,
150
- hour: 'numeric',
151
- minute: 'numeric',
152
- hour12: false,
153
- weekday: 'short',
154
- });
155
- const parts = formatter.formatToParts(now);
156
- const hour = Number(parts.find(p => p.type === 'hour')?.value ?? 0);
157
- const weekday = parts.find(p => p.type === 'weekday')?.value ?? '';
158
- // Map weekday names to numbers
159
- const dayMap = {
160
- Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6,
161
- };
162
- const dayNum = dayMap[weekday] ?? -1;
163
- // Check if today is a business day
164
- if (!schedule.days.includes(dayNum))
165
- return true;
166
- // Check if current hour is outside business hours
167
- return hour < schedule.hours.start || hour >= schedule.hours.end;
168
- }
169
- catch {
170
- return false;
171
- }
172
- }
173
- /**
174
- * Render template variables: {{variable}} -> value
175
- */
176
- function renderTemplate(template, vars) {
177
- return template.replace(/\{\{(\w+)\}\}/g, (_match, key) => {
178
- return vars[key] ?? `{{${key}}}`;
179
- });
180
- }
181
- /**
182
- * Add or replace a template by ID
183
- */
184
- export function addTemplate(template) {
185
- // Remove existing with same ID
186
- config.templates = config.templates.filter(t => t.id !== template.id);
187
- config.templates.push(template);
188
- config.templates.sort((a, b) => b.priority - a.priority);
189
- }
190
- /**
191
- * Remove a template by ID
192
- */
193
- export function removeTemplate(id) {
194
- const before = config.templates.length;
195
- config.templates = config.templates.filter(t => t.id !== id);
196
- return config.templates.length < before;
197
- }
198
- /**
199
- * Get built-in template presets
200
- */
201
- export function getTemplatePresets() {
202
- return [
203
- {
204
- id: 'away',
205
- name: 'Away / Out of Office',
206
- trigger: { type: 'always' },
207
- message: "I'm currently away and will respond when I return. For urgent matters, please contact the team directly.",
208
- enabled: false,
209
- cooldownMs: 300_000, // 5 min
210
- maxPerHour: 5,
211
- priority: 100,
212
- },
213
- {
214
- id: 'after-hours',
215
- name: 'After Hours',
216
- trigger: {
217
- type: 'after_hours',
218
- schedule: {
219
- timezone: 'America/New_York',
220
- hours: { start: 9, end: 17 },
221
- days: [1, 2, 3, 4, 5], // Mon-Fri
222
- },
223
- },
224
- message: "Thanks for your message! I'm currently outside business hours (Mon-Fri 9AM-5PM ET). I'll respond during the next business day.",
225
- enabled: false,
226
- cooldownMs: 600_000, // 10 min
227
- maxPerHour: 3,
228
- priority: 90,
229
- },
230
- {
231
- id: 'help',
232
- name: 'Help / FAQ',
233
- trigger: { type: 'keyword', keywords: ['help', 'faq', 'how to', 'getting started'] },
234
- message: "Need help? Here are some commands:\n- `/help` - Show all commands\n- `/status` - System status\n- `/skills` - Available skills\n\nOr just ask me anything!",
235
- enabled: false,
236
- cooldownMs: 60_000,
237
- maxPerHour: 10,
238
- priority: 50,
239
- },
240
- {
241
- id: 'no-agent',
242
- name: 'No Agent Available',
243
- trigger: { type: 'no_agent' },
244
- message: "All agents are currently busy. Your message has been queued and will be processed shortly. Current wait time: approximately {{waitTime}}.",
245
- enabled: false,
246
- cooldownMs: 120_000,
247
- maxPerHour: 5,
248
- priority: 80,
249
- variables: { waitTime: '1-2 minutes' },
250
- },
251
- ];
252
- }
253
- /**
254
- * Cleanup stale tracking entries (call periodically)
255
- */
256
- export function cleanupAutoReplyState() {
257
- const now = Date.now();
258
- const staleThreshold = 3_600_000; // 1 hour
259
- for (const [key, state] of lastReplyMap) {
260
- if (now - state.time > staleThreshold) {
261
- lastReplyMap.delete(key);
262
- }
263
- }
264
- }
265
- /**
266
- * Reset all state (for testing)
267
- */
268
- export function resetAutoReply() {
269
- config = { ...DEFAULT_CONFIG };
270
- lastReplyMap.clear();
271
- }
272
- //# sourceMappingURL=auto-reply.js.map
@@ -1,92 +0,0 @@
1
- /**
2
- * PTY (Pseudo-Terminal) Support
3
- *
4
- * Provides interactive terminal support for commands that require TTY.
5
- * Uses node-pty for cross-platform PTY handling.
6
- *
7
- * Use cases:
8
- * - Interactive installers (npm init, create-react-app)
9
- * - Text editors (vim, nano)
10
- * - Pagers (less, more)
11
- * - Password prompts
12
- * - SSH sessions
13
- */
14
- import { EventEmitter } from 'events';
15
- export interface PTYSession {
16
- id: string;
17
- pid: number;
18
- command: string;
19
- cols: number;
20
- rows: number;
21
- status: 'running' | 'exited';
22
- exitCode?: number;
23
- output: string;
24
- createdAt: Date;
25
- exitedAt?: Date;
26
- }
27
- export interface PTYOptions {
28
- cols?: number;
29
- rows?: number;
30
- cwd?: string;
31
- env?: Record<string, string>;
32
- timeout?: number;
33
- maxOutputChars?: number;
34
- }
35
- export interface PTYResult {
36
- success: boolean;
37
- exitCode: number;
38
- output: string;
39
- durationMs: number;
40
- truncated: boolean;
41
- secretsRedacted: boolean;
42
- }
43
- export declare class PTYManager extends EventEmitter {
44
- private sessions;
45
- private sessionCounter;
46
- /**
47
- * Spawn a new PTY session
48
- */
49
- spawn(command: string, args?: string[], options?: PTYOptions): PTYSession;
50
- /**
51
- * Execute a command and wait for completion
52
- */
53
- execute(command: string, args?: string[], options?: PTYOptions): Promise<PTYResult>;
54
- /**
55
- * Write input to PTY
56
- */
57
- write(sessionId: string, data: string): boolean;
58
- /**
59
- * Resize PTY dimensions
60
- */
61
- resize(sessionId: string, cols: number, rows: number): boolean;
62
- /**
63
- * Kill a PTY session
64
- */
65
- kill(sessionId: string, signal?: string): boolean;
66
- /**
67
- * Get session info
68
- */
69
- getSession(sessionId: string): PTYSession | null;
70
- /**
71
- * Get all active sessions
72
- */
73
- getActiveSessions(): PTYSession[];
74
- /**
75
- * Subscribe to session output
76
- */
77
- subscribe(sessionId: string, listener: (data: string) => void): () => void;
78
- /**
79
- * Clean up completed session
80
- */
81
- cleanup(sessionId: string): void;
82
- /**
83
- * Clean up all sessions
84
- */
85
- cleanupAll(): void;
86
- }
87
- export declare function getPTYManager(): PTYManager;
88
- /**
89
- * Check if a command likely requires PTY
90
- */
91
- export declare function commandNeedsPTY(command: string): boolean;
92
- //# sourceMappingURL=pty.d.ts.map
@@ -1,285 +0,0 @@
1
- /**
2
- * PTY (Pseudo-Terminal) Support
3
- *
4
- * Provides interactive terminal support for commands that require TTY.
5
- * Uses node-pty for cross-platform PTY handling.
6
- *
7
- * Use cases:
8
- * - Interactive installers (npm init, create-react-app)
9
- * - Text editors (vim, nano)
10
- * - Pagers (less, more)
11
- * - Password prompts
12
- * - SSH sessions
13
- */
14
- import * as pty from 'node-pty';
15
- import { EventEmitter } from 'events';
16
- import { logger } from '../../utils/logger.js';
17
- import { redactSecrets, isSecretsDetectionEnabled } from './secrets.js';
18
- // =============================================================================
19
- // Constants
20
- // =============================================================================
21
- const DEFAULT_COLS = 80;
22
- const DEFAULT_ROWS = 24;
23
- const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
24
- const DEFAULT_MAX_OUTPUT = 200_000;
25
- // =============================================================================
26
- // PTY Manager
27
- // =============================================================================
28
- export class PTYManager extends EventEmitter {
29
- sessions = new Map();
30
- sessionCounter = 0;
31
- /**
32
- * Spawn a new PTY session
33
- */
34
- spawn(command, args = [], options = {}) {
35
- const id = `pty_${Date.now()}_${++this.sessionCounter}`;
36
- const cols = options.cols ?? DEFAULT_COLS;
37
- const rows = options.rows ?? DEFAULT_ROWS;
38
- // Determine shell
39
- const shell = process.platform === 'win32'
40
- ? process.env.ComSpec || 'cmd.exe'
41
- : process.env.SHELL || '/bin/bash';
42
- // Build args
43
- const shellArgs = process.platform === 'win32'
44
- ? ['/c', command, ...args]
45
- : ['-c', `${command} ${args.join(' ')}`];
46
- logger.debug(`[PTY] Spawning: ${command}`, { id, cols, rows });
47
- // Spawn PTY
48
- const ptyProcess = pty.spawn(shell, shellArgs, {
49
- name: 'xterm-256color',
50
- cols,
51
- rows,
52
- cwd: options.cwd ?? process.cwd(),
53
- env: {
54
- ...process.env,
55
- ...options.env,
56
- TERM: 'xterm-256color',
57
- COLORTERM: 'truecolor',
58
- },
59
- });
60
- const session = {
61
- id,
62
- pid: ptyProcess.pid,
63
- command,
64
- cols,
65
- rows,
66
- status: 'running',
67
- output: '',
68
- createdAt: new Date(),
69
- };
70
- const entry = {
71
- pty: ptyProcess,
72
- session,
73
- outputBuffer: '',
74
- listeners: new Set(),
75
- };
76
- this.sessions.set(id, entry);
77
- // Handle data
78
- ptyProcess.onData((data) => {
79
- entry.outputBuffer += data;
80
- session.output = entry.outputBuffer;
81
- // Truncate if needed
82
- const maxChars = options.maxOutputChars ?? DEFAULT_MAX_OUTPUT;
83
- if (entry.outputBuffer.length > maxChars) {
84
- entry.outputBuffer = `[...truncated...]\n${entry.outputBuffer.slice(-maxChars)}`;
85
- session.output = entry.outputBuffer;
86
- }
87
- // Notify listeners
88
- for (const listener of entry.listeners) {
89
- listener(data);
90
- }
91
- this.emit('data', id, data);
92
- });
93
- // Handle exit
94
- ptyProcess.onExit(({ exitCode }) => {
95
- session.status = 'exited';
96
- session.exitCode = exitCode;
97
- session.exitedAt = new Date();
98
- logger.debug(`[PTY] Exited: ${id}`, { exitCode });
99
- this.emit('exit', id, exitCode);
100
- });
101
- return session;
102
- }
103
- /**
104
- * Execute a command and wait for completion
105
- */
106
- async execute(command, args = [], options = {}) {
107
- const startTime = Date.now();
108
- const timeout = options.timeout ?? DEFAULT_TIMEOUT_MS;
109
- const maxOutput = options.maxOutputChars ?? DEFAULT_MAX_OUTPUT;
110
- const session = this.spawn(command, args, options);
111
- const entry = this.sessions.get(session.id);
112
- if (!entry) {
113
- throw new Error('Failed to create PTY session');
114
- }
115
- return new Promise((resolve) => {
116
- let timedOut = false;
117
- // Timeout handler
118
- const timeoutId = setTimeout(() => {
119
- timedOut = true;
120
- this.kill(session.id);
121
- }, timeout);
122
- // Wait for exit
123
- const exitHandler = (id, exitCode) => {
124
- if (id !== session.id)
125
- return;
126
- clearTimeout(timeoutId);
127
- this.off('exit', exitHandler);
128
- const durationMs = Date.now() - startTime;
129
- let output = entry.outputBuffer;
130
- let secretsRedacted = false;
131
- // Redact secrets if enabled
132
- if (isSecretsDetectionEnabled()) {
133
- output = redactSecrets(output);
134
- secretsRedacted = output !== entry.outputBuffer;
135
- }
136
- // Clean up session after a delay
137
- setTimeout(() => this.cleanup(session.id), 5000);
138
- resolve({
139
- success: !timedOut && exitCode === 0,
140
- exitCode: timedOut ? -1 : exitCode,
141
- output: output.trim() || '(no output)',
142
- durationMs,
143
- truncated: entry.outputBuffer.length >= maxOutput,
144
- secretsRedacted,
145
- });
146
- };
147
- this.on('exit', exitHandler);
148
- });
149
- }
150
- /**
151
- * Write input to PTY
152
- */
153
- write(sessionId, data) {
154
- const entry = this.sessions.get(sessionId);
155
- if (!entry || entry.session.status !== 'running') {
156
- return false;
157
- }
158
- entry.pty.write(data);
159
- return true;
160
- }
161
- /**
162
- * Resize PTY dimensions
163
- */
164
- resize(sessionId, cols, rows) {
165
- const entry = this.sessions.get(sessionId);
166
- if (!entry || entry.session.status !== 'running') {
167
- return false;
168
- }
169
- entry.pty.resize(cols, rows);
170
- entry.session.cols = cols;
171
- entry.session.rows = rows;
172
- return true;
173
- }
174
- /**
175
- * Kill a PTY session
176
- */
177
- kill(sessionId, signal = 'SIGTERM') {
178
- const entry = this.sessions.get(sessionId);
179
- if (!entry || entry.session.status !== 'running') {
180
- return false;
181
- }
182
- try {
183
- entry.pty.kill(signal);
184
- return true;
185
- }
186
- catch (error) {
187
- logger.warn(`[PTY] Failed to kill session ${sessionId}`, { error });
188
- return false;
189
- }
190
- }
191
- /**
192
- * Get session info
193
- */
194
- getSession(sessionId) {
195
- return this.sessions.get(sessionId)?.session ?? null;
196
- }
197
- /**
198
- * Get all active sessions
199
- */
200
- getActiveSessions() {
201
- return Array.from(this.sessions.values())
202
- .filter((e) => e.session.status === 'running')
203
- .map((e) => e.session);
204
- }
205
- /**
206
- * Subscribe to session output
207
- */
208
- subscribe(sessionId, listener) {
209
- const entry = this.sessions.get(sessionId);
210
- if (!entry) {
211
- return () => { };
212
- }
213
- entry.listeners.add(listener);
214
- return () => entry.listeners.delete(listener);
215
- }
216
- /**
217
- * Clean up completed session
218
- */
219
- cleanup(sessionId) {
220
- const entry = this.sessions.get(sessionId);
221
- if (entry) {
222
- if (entry.session.status === 'running') {
223
- this.kill(sessionId);
224
- }
225
- entry.listeners.clear();
226
- this.sessions.delete(sessionId);
227
- logger.debug(`[PTY] Cleaned up session: ${sessionId}`);
228
- }
229
- }
230
- /**
231
- * Clean up all sessions
232
- */
233
- cleanupAll() {
234
- for (const sessionId of this.sessions.keys()) {
235
- this.cleanup(sessionId);
236
- }
237
- }
238
- }
239
- // =============================================================================
240
- // Singleton Instance
241
- // =============================================================================
242
- let _ptyManager = null;
243
- export function getPTYManager() {
244
- if (!_ptyManager) {
245
- _ptyManager = new PTYManager();
246
- }
247
- return _ptyManager;
248
- }
249
- // =============================================================================
250
- // Helper: Check if command needs PTY
251
- // =============================================================================
252
- const PTY_REQUIRED_COMMANDS = new Set([
253
- 'vim', 'vi', 'nvim', 'nano', 'emacs',
254
- 'less', 'more', 'man',
255
- 'top', 'htop', 'btop',
256
- 'ssh', 'telnet',
257
- 'ftp', 'sftp',
258
- 'mysql', 'psql', 'mongo', 'redis-cli',
259
- 'python', 'python3', 'node', 'irb', 'rails',
260
- 'bash', 'zsh', 'sh', 'fish',
261
- ]);
262
- const PTY_HINT_PATTERNS = [
263
- /npm\s+init/i,
264
- /yarn\s+init/i,
265
- /npx\s+create-/i,
266
- /\bpassword\b/i,
267
- /\bsudo\b/,
268
- /--interactive/i,
269
- /-i\b/,
270
- ];
271
- /**
272
- * Check if a command likely requires PTY
273
- */
274
- export function commandNeedsPTY(command) {
275
- // Extract base command
276
- const parts = command.trim().split(/\s+/);
277
- const baseCmd = parts[0]?.split('/').pop() ?? '';
278
- // Check known PTY-required commands
279
- if (PTY_REQUIRED_COMMANDS.has(baseCmd)) {
280
- return true;
281
- }
282
- // Check hint patterns
283
- return PTY_HINT_PATTERNS.some((p) => p.test(command));
284
- }
285
- //# sourceMappingURL=pty.js.map