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,380 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ // ── Syntax highlighting ───────────────────────────────────────────────────────
4
+ const JS_KEYWORDS = new Set([
5
+ 'const', 'let', 'var', 'function', 'async', 'await', 'return',
6
+ 'import', 'export', 'from', 'default', 'class', 'extends', 'super',
7
+ 'this', 'if', 'else', 'for', 'while', 'do', 'switch', 'case',
8
+ 'break', 'continue', 'try', 'catch', 'finally', 'throw', 'new',
9
+ 'delete', 'typeof', 'instanceof', 'yield', 'of', 'in', 'static',
10
+ 'get', 'set', 'enum', 'interface', 'type', 'implements', 'declare',
11
+ 'abstract', 'readonly', 'as', 'is', 'keyof', 'infer', 'satisfies',
12
+ ]);
13
+ const PY_KEYWORDS = new Set([
14
+ 'def', 'class', 'if', 'elif', 'else', 'for', 'while', 'try',
15
+ 'except', 'finally', 'with', 'as', 'import', 'from', 'return',
16
+ 'yield', 'raise', 'pass', 'break', 'continue', 'and', 'or', 'not',
17
+ 'in', 'is', 'lambda', 'global', 'nonlocal', 'True', 'False', 'None',
18
+ 'async', 'await', 'self',
19
+ ]);
20
+ const COMMON_TYPES = new Set([
21
+ 'string', 'number', 'boolean', 'void', 'null', 'undefined', 'any',
22
+ 'never', 'unknown', 'object', 'Array', 'Map', 'Set', 'Promise',
23
+ 'Record', 'Partial', 'Required', 'Readonly', 'Pick', 'Omit',
24
+ 'int', 'float', 'str', 'bool', 'list', 'dict', 'tuple',
25
+ // From the spec
26
+ 'Dict', 'List', 'Optional',
27
+ ]);
28
+ function tokenizeLine(line, lang) {
29
+ const isPython = lang === 'python' || lang === 'py';
30
+ const isBash = lang === 'bash' || lang === 'shell' || lang === 'sh';
31
+ const isJson = lang === 'json';
32
+ const isYaml = lang === 'yaml' || lang === 'yml';
33
+ // Comments (whole line)
34
+ const commentMatch = line.match(/^(\s*)(\/\/.*|#.*)$/);
35
+ if (commentMatch) {
36
+ const tokens = [];
37
+ if (commentMatch[1])
38
+ tokens.push({ kind: 'plain', value: commentMatch[1] });
39
+ tokens.push({ kind: 'comment', value: commentMatch[2] });
40
+ return tokens;
41
+ }
42
+ // For JSON/YAML, do minimal tokenization (strings + numbers)
43
+ if (isJson || isYaml || isBash) {
44
+ return tokenizeSimple(line);
45
+ }
46
+ // Full tokenization for JS/TS/Python/Go/Rust
47
+ const tokens = [];
48
+ const keywords = isPython ? PY_KEYWORDS : JS_KEYWORDS;
49
+ // We walk the string and emit tokens as we go.
50
+ // Strategy: scan for strings first (they can contain keywords), then others.
51
+ let i = 0;
52
+ let plain = '';
53
+ const flushPlain = () => {
54
+ if (!plain)
55
+ return;
56
+ // Match: identifier (possibly followed by '('), standalone number, or any other char.
57
+ // NOTE: \s* is NOT used after identifiers — whitespace is captured by the `\s+` arm
58
+ // so it is emitted as a plain token and not silently swallowed.
59
+ const wordRe = /([a-zA-Z_]\w*)(\()?|\b(\d+\.?\d*)\b|(\s+)|([\S])/g;
60
+ let wm;
61
+ const plainResult = [];
62
+ let wp = 0;
63
+ while ((wm = wordRe.exec(plain)) !== null) {
64
+ if (wm.index > wp) {
65
+ plainResult.push({ kind: 'plain', value: plain.slice(wp, wm.index) });
66
+ }
67
+ wp = wm.index + wm[0].length;
68
+ if (wm[3] !== undefined) {
69
+ // standalone number (not part of an identifier)
70
+ plainResult.push({ kind: 'number', value: wm[3] });
71
+ }
72
+ else if (wm[4] !== undefined) {
73
+ // whitespace — always emit as plain so spacing is preserved
74
+ plainResult.push({ kind: 'plain', value: wm[4] });
75
+ }
76
+ else if (wm[5] !== undefined) {
77
+ // any other non-space character
78
+ plainResult.push({ kind: 'plain', value: wm[5] });
79
+ }
80
+ else if (wm[1] !== undefined) {
81
+ const word = wm[1];
82
+ const hasParens = wm[2] !== undefined;
83
+ if (keywords.has(word)) {
84
+ plainResult.push({ kind: 'keyword', value: word });
85
+ if (hasParens)
86
+ plainResult.push({ kind: 'plain', value: '(' });
87
+ }
88
+ else if (COMMON_TYPES.has(word)) {
89
+ plainResult.push({ kind: 'type', value: word });
90
+ if (hasParens)
91
+ plainResult.push({ kind: 'plain', value: '(' });
92
+ }
93
+ else if (hasParens) {
94
+ plainResult.push({ kind: 'func', value: word });
95
+ plainResult.push({ kind: 'plain', value: '(' });
96
+ }
97
+ else {
98
+ plainResult.push({ kind: 'plain', value: word });
99
+ }
100
+ }
101
+ }
102
+ if (wp < plain.length) {
103
+ plainResult.push({ kind: 'plain', value: plain.slice(wp) });
104
+ }
105
+ tokens.push(...plainResult);
106
+ plain = '';
107
+ };
108
+ while (i < line.length) {
109
+ const ch = line[i];
110
+ // String literals (single, double, backtick)
111
+ if (ch === '"' || ch === "'" || ch === '`') {
112
+ flushPlain();
113
+ const quote = ch;
114
+ let str = quote;
115
+ i++;
116
+ while (i < line.length) {
117
+ const c = line[i];
118
+ str += c;
119
+ if (c === '\\') {
120
+ i++;
121
+ if (i < line.length) {
122
+ str += line[i];
123
+ i++;
124
+ }
125
+ continue;
126
+ }
127
+ if (c === quote) {
128
+ i++;
129
+ break;
130
+ }
131
+ i++;
132
+ }
133
+ tokens.push({ kind: 'string', value: str });
134
+ continue;
135
+ }
136
+ plain += ch;
137
+ i++;
138
+ }
139
+ flushPlain();
140
+ return tokens;
141
+ }
142
+ function tokenizeSimple(line) {
143
+ const tokens = [];
144
+ const strRe = /(["'])(?:(?!\1|\\).|\\.)*?\1|\b(\d+\.?\d*)\b/g;
145
+ let last = 0;
146
+ let m;
147
+ while ((m = strRe.exec(line)) !== null) {
148
+ if (m.index > last) {
149
+ tokens.push({ kind: 'plain', value: line.slice(last, m.index) });
150
+ }
151
+ if (m[1] !== undefined) {
152
+ tokens.push({ kind: 'string', value: m[0] });
153
+ }
154
+ else {
155
+ tokens.push({ kind: 'number', value: m[0] });
156
+ }
157
+ last = m.index + m[0].length;
158
+ }
159
+ if (last < line.length) {
160
+ tokens.push({ kind: 'plain', value: line.slice(last) });
161
+ }
162
+ return tokens;
163
+ }
164
+ function tokenColor(kind) {
165
+ switch (kind) {
166
+ case 'comment': return '#546E7A';
167
+ case 'string': return '#C3E88D';
168
+ case 'number': return '#F78C6C';
169
+ case 'keyword': return '#C792EA';
170
+ case 'type': return '#FFCB6B';
171
+ case 'func': return '#82AAFF';
172
+ default: return undefined;
173
+ }
174
+ }
175
+ /**
176
+ * Renders a single line of code with syntax highlighting.
177
+ * Returns an array of React elements (one per token).
178
+ */
179
+ export function highlightCode(code, language) {
180
+ const tokens = tokenizeLine(code, language);
181
+ return (_jsx(Text, { children: tokens.map((tok, i) => {
182
+ const color = tokenColor(tok.kind);
183
+ return color
184
+ ? _jsx(Text, { color: color, children: tok.value }, i)
185
+ : _jsx(Text, { children: tok.value }, i);
186
+ }) }));
187
+ }
188
+ function parseInline(text) {
189
+ const segments = [];
190
+ // Order matters: bold (**) before italic (*), strike (~~) before others
191
+ const re = /(\*\*(.+?)\*\*|~~(.+?)~~|\*([^*\n]+)\*(?!\*)|_([^_\n]+)_|`([^`]+)`|\[([^\]\n]+)\]\(([^)\n]+)\))/g;
192
+ let last = 0;
193
+ let m;
194
+ while ((m = re.exec(text)) !== null) {
195
+ if (m.index > last) {
196
+ segments.push({ type: 'text', value: text.slice(last, m.index) });
197
+ }
198
+ if (m[2] !== undefined) {
199
+ segments.push({ type: 'bold', value: m[2] });
200
+ }
201
+ else if (m[3] !== undefined) {
202
+ segments.push({ type: 'strike', value: m[3] });
203
+ }
204
+ else if (m[4] !== undefined) {
205
+ segments.push({ type: 'italic', value: m[4] });
206
+ }
207
+ else if (m[5] !== undefined) {
208
+ segments.push({ type: 'italic', value: m[5] });
209
+ }
210
+ else if (m[6] !== undefined) {
211
+ segments.push({ type: 'code', value: m[6] });
212
+ }
213
+ else if (m[7] !== undefined && m[8] !== undefined) {
214
+ segments.push({ type: 'link', label: m[7], url: m[8] });
215
+ }
216
+ last = m.index + m[0].length;
217
+ }
218
+ if (last < text.length) {
219
+ segments.push({ type: 'text', value: text.slice(last) });
220
+ }
221
+ return segments;
222
+ }
223
+ const InlineSegmentNode = ({ seg, linkStyle }) => {
224
+ switch (seg.type) {
225
+ case 'bold':
226
+ return _jsx(Text, { bold: true, children: seg.value });
227
+ case 'italic':
228
+ return _jsx(Text, { italic: true, children: seg.value });
229
+ case 'code':
230
+ return _jsx(Text, { color: "#F0C987", children: seg.value });
231
+ case 'strike':
232
+ return _jsx(Text, { strikethrough: true, dimColor: true, children: seg.value });
233
+ case 'link': {
234
+ if (linkStyle === 'hidden') {
235
+ return _jsx(Text, { children: seg.label });
236
+ }
237
+ if (linkStyle === 'footnote') {
238
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "blue", underline: true, children: seg.label }), _jsx(Text, { dimColor: true, children: ' (' + seg.url + ')' })] }));
239
+ }
240
+ // Default: inline — label in blue + underline
241
+ return _jsx(Text, { color: "blue", underline: true, children: seg.label });
242
+ }
243
+ default:
244
+ return _jsx(Text, { children: seg.value });
245
+ }
246
+ };
247
+ const InlineText = ({ text, linkStyle }) => {
248
+ const segs = parseInline(text);
249
+ if (segs.length === 1 && segs[0].type === 'text') {
250
+ return _jsx(Text, { children: segs[0].value });
251
+ }
252
+ return (_jsx(Text, { children: segs.map((seg, i) => (_jsx(InlineSegmentNode, { seg: seg, linkStyle: linkStyle }, i))) }));
253
+ };
254
+ const BlockLine = ({ line, inCode, codeLang, linkStyle, syntaxHighlight, }) => {
255
+ // Inside code block
256
+ if (inCode) {
257
+ return (_jsxs(Box, { paddingLeft: 1, children: [_jsx(Text, { color: "#3C414B", children: "\u2502 " }), syntaxHighlight
258
+ ? highlightCode(line, codeLang)
259
+ : _jsx(Text, { color: "#F0C987", children: line })] }));
260
+ }
261
+ // H1
262
+ if (line.startsWith('# ')) {
263
+ return (_jsx(Text, { bold: true, color: "cyan", children: _jsx(InlineText, { text: line.slice(2), linkStyle: linkStyle }) }));
264
+ }
265
+ // H2
266
+ if (line.startsWith('## ')) {
267
+ return (_jsx(Text, { bold: true, color: "cyan", children: _jsx(InlineText, { text: line.slice(3), linkStyle: linkStyle }) }));
268
+ }
269
+ // H3+
270
+ if (line.startsWith('### ')) {
271
+ return (_jsx(Text, { bold: true, children: _jsx(InlineText, { text: line.slice(4), linkStyle: linkStyle }) }));
272
+ }
273
+ if (line.startsWith('#### ')) {
274
+ return (_jsx(Text, { bold: true, children: _jsx(InlineText, { text: line.slice(5), linkStyle: linkStyle }) }));
275
+ }
276
+ // Blockquote
277
+ if (line.startsWith('> ')) {
278
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "#3C414B", children: "\u2502 " }), _jsx(Text, { italic: true, dimColor: true, children: _jsx(InlineText, { text: line.slice(2), linkStyle: linkStyle }) })] }));
279
+ }
280
+ // Bullet list
281
+ const bullet = line.match(/^(\s*)([-*])\s(.*)/);
282
+ if (bullet) {
283
+ const indent = bullet[1].length;
284
+ return (_jsxs(Box, { paddingLeft: indent + 2, flexDirection: "row", gap: 1, children: [_jsx(Text, { dimColor: true, children: "\u203A" }), _jsx(InlineText, { text: bullet[3], linkStyle: linkStyle })] }));
285
+ }
286
+ // Numbered list
287
+ const num = line.match(/^(\s*)(\d+\.)\s(.*)/);
288
+ if (num) {
289
+ const indent = num[1].length;
290
+ return (_jsxs(Box, { paddingLeft: indent + 2, flexDirection: "row", gap: 1, children: [_jsx(Text, { dimColor: true, children: num[2] }), _jsx(InlineText, { text: num[3], linkStyle: linkStyle })] }));
291
+ }
292
+ // Horizontal rule
293
+ if (line.match(/^[-*_]{3,}$/)) {
294
+ return _jsx(Text, { dimColor: true, children: '─'.repeat(40) });
295
+ }
296
+ // Empty line — spacer
297
+ if (line.trim() === '') {
298
+ return _jsx(Text, { children: ' ' });
299
+ }
300
+ // Normal paragraph text
301
+ return _jsx(InlineText, { text: line, linkStyle: linkStyle });
302
+ };
303
+ // ── Code fence header/footer components ──────────────────────────────────────
304
+ const CodeFenceOpen = ({ lang }) => (_jsxs(Box, { paddingLeft: 1, children: [_jsx(Text, { dimColor: true, children: '┌───' }), lang ? _jsxs(Text, { dimColor: true, children: [" ", lang] }) : null] }));
305
+ const CodeFenceClose = () => (_jsx(Box, { paddingLeft: 1, children: _jsx(Text, { dimColor: true, children: "\u2514\u2500\u2500\u2500" }) }));
306
+ // ── Main renderMarkdown function ──────────────────────────────────────────────
307
+ /**
308
+ * Convert a markdown string to Ink React elements.
309
+ *
310
+ * Handles:
311
+ * - **bold**, *italic*, `inline code`, ~~strikethrough~~
312
+ * - ```lang ... ``` code blocks with optional syntax highlighting
313
+ * - # / ## / ### headings → bold cyan
314
+ * - > blockquotes → dim italic with left border
315
+ * - - / * bullet and 1. numbered lists with indent
316
+ * - [text](url) links
317
+ * - --- horizontal rules
318
+ */
319
+ export function renderMarkdown(text, options) {
320
+ const syntaxHighlight = options?.syntaxHighlight ?? true;
321
+ const linkStyle = options?.linkStyle ?? 'inline';
322
+ const lines = text.split('\n');
323
+ const nodes = [];
324
+ let inCode = false;
325
+ let codeLang = '';
326
+ for (let i = 0; i < lines.length; i++) {
327
+ const line = lines[i];
328
+ if (line.startsWith('```')) {
329
+ if (inCode) {
330
+ inCode = false;
331
+ nodes.push(_jsx(CodeFenceClose, {}, `cfclose-${i}`));
332
+ codeLang = '';
333
+ }
334
+ else {
335
+ inCode = true;
336
+ codeLang = line.slice(3).trim();
337
+ nodes.push(_jsx(CodeFenceOpen, { lang: codeLang }, `cfopen-${i}`));
338
+ }
339
+ continue;
340
+ }
341
+ nodes.push(_jsx(Box, { children: _jsx(BlockLine, { line: line, inCode: inCode, codeLang: codeLang, linkStyle: linkStyle, syntaxHighlight: syntaxHighlight }) }, `line-${i}`));
342
+ }
343
+ return (_jsx(Box, { flexDirection: "column", children: nodes }));
344
+ }
345
+ // ── stripMarkdown ─────────────────────────────────────────────────────────────
346
+ /**
347
+ * Strip all markdown formatting from text, returning plain readable text.
348
+ * Used by /copy and /save operations.
349
+ */
350
+ export function stripMarkdown(text) {
351
+ return text
352
+ // Code fences — remove fence markers, keep content
353
+ .replace(/^```[a-z]*\n?/gm, '')
354
+ .replace(/^```\s*$/gm, '')
355
+ // Headings — remove # prefix
356
+ .replace(/^#{1,6}\s+/gm, '')
357
+ // Bold
358
+ .replace(/\*\*(.+?)\*\*/g, '$1')
359
+ // Strikethrough
360
+ .replace(/~~(.+?)~~/g, '$1')
361
+ // Italic (asterisk and underscore)
362
+ .replace(/\*([^*\n]+)\*/g, '$1')
363
+ .replace(/_([^_\n]+)_/g, '$1')
364
+ // Inline code
365
+ .replace(/`([^`]+)`/g, '$1')
366
+ // Links — keep label, discard URL
367
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
368
+ // Blockquotes — remove leading >
369
+ .replace(/^>\s*/gm, '')
370
+ // Horizontal rules
371
+ .replace(/^[-*_]{3,}$/gm, '')
372
+ // Trim trailing whitespace per line
373
+ .split('\n')
374
+ .map((l) => l.trimEnd())
375
+ .join('\n')
376
+ // Collapse 3+ consecutive blank lines to 2
377
+ .replace(/\n{3,}/g, '\n\n')
378
+ .trim();
379
+ }
380
+ //# sourceMappingURL=markdown-renderer.js.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Output Styles — configurable formatting for TUI messages.
3
+ *
4
+ * Styles control how assistant messages, code blocks, and tool calls
5
+ * are presented in the terminal. Load from .profclaw/style.json or
6
+ * use one of the built-in named styles.
7
+ */
8
+ export interface OutputStyle {
9
+ name: string;
10
+ /** Prefix prepended to each line of an assistant message, e.g. '│ ' */
11
+ messagePrefix: string;
12
+ /** Chalk color name for the message prefix, e.g. 'cyan' or 'gray' */
13
+ messagePrefixColor: string;
14
+ /** Whether to draw a top/bottom border around code blocks */
15
+ codeBlockBorder: boolean;
16
+ /** Chalk color name for the code language label, e.g. 'yellow' */
17
+ codeLabelColor: string;
18
+ /** Icon shown before a tool call name, e.g. '⚙' or '->' */
19
+ toolIcon: string;
20
+ /** Chalk color name for tool call output */
21
+ toolColor: string;
22
+ /** Reduce whitespace between consecutive messages */
23
+ compact: boolean;
24
+ }
25
+ export declare const BUILT_IN_STYLES: Record<string, OutputStyle>;
26
+ /**
27
+ * Load an OutputStyle by name, or from a .profclaw/style.json config file.
28
+ *
29
+ * Resolution order:
30
+ * 1. If `name` matches a built-in style key — use it.
31
+ * 2. If a style.json file exists — merge it on top of the default style.
32
+ * If the file has a `name` field that matches a built-in, use that as
33
+ * the base instead of `default`.
34
+ * 3. Fall back to the `default` built-in style.
35
+ *
36
+ * @param name Optional style name override (e.g. from `--style minimal`).
37
+ */
38
+ export declare function loadOutputStyle(name?: string): OutputStyle;
39
+ //# sourceMappingURL=output-styles.d.ts.map
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Output Styles — configurable formatting for TUI messages.
3
+ *
4
+ * Styles control how assistant messages, code blocks, and tool calls
5
+ * are presented in the terminal. Load from .profclaw/style.json or
6
+ * use one of the built-in named styles.
7
+ */
8
+ import { existsSync, readFileSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ // ── Built-in styles ────────────────────────────────────────────────────────────
12
+ export const BUILT_IN_STYLES = {
13
+ /** Full-featured default style with color, borders, and icons */
14
+ default: {
15
+ name: 'default',
16
+ messagePrefix: ' ',
17
+ messagePrefixColor: 'cyan',
18
+ codeBlockBorder: true,
19
+ codeLabelColor: 'yellow',
20
+ toolIcon: '⚙',
21
+ toolColor: 'cyan',
22
+ compact: false,
23
+ },
24
+ /** Minimal style: no prefix, reduced whitespace */
25
+ minimal: {
26
+ name: 'minimal',
27
+ messagePrefix: '',
28
+ messagePrefixColor: 'gray',
29
+ codeBlockBorder: false,
30
+ codeLabelColor: 'gray',
31
+ toolIcon: '->',
32
+ toolColor: 'gray',
33
+ compact: true,
34
+ },
35
+ /** Bordered style: sidebar line on every message, bordered code blocks */
36
+ bordered: {
37
+ name: 'bordered',
38
+ messagePrefix: '│ ',
39
+ messagePrefixColor: 'cyan',
40
+ codeBlockBorder: true,
41
+ codeLabelColor: 'cyan',
42
+ toolIcon: '⚙',
43
+ toolColor: 'cyan',
44
+ compact: false,
45
+ },
46
+ /**
47
+ * Plain style: no decoration, suitable for piping output to other tools.
48
+ * Disables borders, icons, and color prefixes.
49
+ */
50
+ plain: {
51
+ name: 'plain',
52
+ messagePrefix: '',
53
+ messagePrefixColor: 'white',
54
+ codeBlockBorder: false,
55
+ codeLabelColor: 'white',
56
+ toolIcon: '[tool]',
57
+ toolColor: 'white',
58
+ compact: true,
59
+ },
60
+ };
61
+ // ── Loader ─────────────────────────────────────────────────────────────────────
62
+ /**
63
+ * Resolve the style config file location. Checks (in order):
64
+ * 1. .profclaw/style.json in the current working directory
65
+ * 2. ~/.profclaw/style.json in the user home directory
66
+ */
67
+ function findStyleConfigPath() {
68
+ const candidates = [
69
+ join(process.cwd(), '.profclaw', 'style.json'),
70
+ join(homedir(), '.profclaw', 'style.json'),
71
+ ];
72
+ for (const p of candidates) {
73
+ if (existsSync(p))
74
+ return p;
75
+ }
76
+ return null;
77
+ }
78
+ /**
79
+ * Load an OutputStyle by name, or from a .profclaw/style.json config file.
80
+ *
81
+ * Resolution order:
82
+ * 1. If `name` matches a built-in style key — use it.
83
+ * 2. If a style.json file exists — merge it on top of the default style.
84
+ * If the file has a `name` field that matches a built-in, use that as
85
+ * the base instead of `default`.
86
+ * 3. Fall back to the `default` built-in style.
87
+ *
88
+ * @param name Optional style name override (e.g. from `--style minimal`).
89
+ */
90
+ export function loadOutputStyle(name) {
91
+ // Direct named style lookup
92
+ if (name !== undefined && name in BUILT_IN_STYLES) {
93
+ return BUILT_IN_STYLES[name];
94
+ }
95
+ // Try loading from config file
96
+ const configPath = findStyleConfigPath();
97
+ if (configPath !== null) {
98
+ try {
99
+ const raw = readFileSync(configPath, 'utf-8');
100
+ const parsed = JSON.parse(raw);
101
+ // Determine which built-in to use as the base
102
+ const baseName = parsed.name ?? name ?? 'default';
103
+ const base = BUILT_IN_STYLES[baseName] ?? BUILT_IN_STYLES['default'];
104
+ // Merge file overrides on top of the base, then assign the final name
105
+ const merged = {
106
+ ...base,
107
+ ...parsed,
108
+ name: baseName,
109
+ };
110
+ return merged;
111
+ }
112
+ catch {
113
+ // Silently fall through to built-in default on parse errors
114
+ }
115
+ }
116
+ // Final fallback: named built-in or default
117
+ return BUILT_IN_STYLES[name ?? 'default'] ?? BUILT_IN_STYLES['default'];
118
+ }
119
+ //# sourceMappingURL=output-styles.js.map
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Auto-Serve
3
+ *
4
+ * Automatically starts the profClaw server if it's not running.
5
+ * Inspired by OpenClaw's pattern where the CLI "just works" -
6
+ * you type `openclaw` and it handles server lifecycle.
7
+ *
8
+ * @package profclaw-interactive (future standalone)
9
+ */
10
+ /**
11
+ * Check if the profClaw server is reachable.
12
+ */
13
+ export declare function checkServer(baseUrl: string): Promise<boolean>;
14
+ /**
15
+ * Start the profClaw server as a background child process.
16
+ * Returns when the server is healthy or times out.
17
+ */
18
+ export declare function autoStartServer(options: {
19
+ port?: number;
20
+ baseUrl: string;
21
+ silent?: boolean;
22
+ }): Promise<{
23
+ success: boolean;
24
+ pid?: number;
25
+ error?: string;
26
+ }>;
27
+ /**
28
+ * Ensure the server is running. Auto-starts if needed.
29
+ * This is the main entry point for the "just works" pattern.
30
+ */
31
+ export declare function ensureServer(baseUrl: string, options?: {
32
+ autoStart?: boolean;
33
+ silent?: boolean;
34
+ }): Promise<{
35
+ ok: boolean;
36
+ error?: string;
37
+ }>;
38
+ //# sourceMappingURL=auto-serve.d.ts.map