centaurus-cli 3.0.0 → 3.1.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 (552) hide show
  1. package/dist/ai/types.js +0 -1
  2. package/dist/ai/types.js.map +1 -1
  3. package/dist/cli-adapter.js +5047 -5037
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.js +372 -315
  6. package/dist/commands/CommandParser.js.map +1 -1
  7. package/dist/config/build-config.js +11 -42
  8. package/dist/config/build-config.js.map +1 -1
  9. package/dist/config/defaultConfig.js +94 -82
  10. package/dist/config/defaultConfig.js.map +1 -1
  11. package/dist/config/manager.js +144 -160
  12. package/dist/config/manager.js.map +1 -1
  13. package/dist/config/mcp-config-manager.js +411 -364
  14. package/dist/config/mcp-config-manager.js.map +1 -1
  15. package/dist/config/models.js +118 -185
  16. package/dist/config/models.js.map +1 -1
  17. package/dist/config/slash-commands.js +186 -184
  18. package/dist/config/slash-commands.js.map +1 -1
  19. package/dist/config/types.js +33 -26
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/context/command-detector.js +63 -67
  22. package/dist/context/command-detector.js.map +1 -1
  23. package/dist/context/context-manager.js +533 -518
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/handlers/docker-handler.js +518 -576
  26. package/dist/context/handlers/docker-handler.js.map +1 -1
  27. package/dist/context/handlers/ssh-handler.js +1050 -1109
  28. package/dist/context/handlers/ssh-handler.js.map +1 -1
  29. package/dist/context/handlers/wsl-handler.js +558 -630
  30. package/dist/context/handlers/wsl-handler.js.map +1 -1
  31. package/dist/context/index.js +42 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/subshell-handler.js +0 -4
  34. package/dist/context/subshell-handler.js.map +1 -1
  35. package/dist/context/types.js +20 -31
  36. package/dist/context/types.js.map +1 -1
  37. package/dist/hooks/useConnectivity.js +13 -10
  38. package/dist/hooks/useConnectivity.js.map +1 -1
  39. package/dist/hooks/useTerminalDimensions.js +67 -79
  40. package/dist/hooks/useTerminalDimensions.js.map +1 -1
  41. package/dist/index.js +228 -251
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/mcp-command-handler.js +297 -260
  44. package/dist/mcp/mcp-command-handler.js.map +1 -1
  45. package/dist/mcp/mcp-server-manager.js +139 -155
  46. package/dist/mcp/mcp-server-manager.js.map +1 -1
  47. package/dist/mcp/mcp-tool-wrapper.js +74 -94
  48. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  49. package/dist/services/ai-autocomplete-agent.js +169 -181
  50. package/dist/services/ai-autocomplete-agent.js.map +1 -1
  51. package/dist/services/ai-context-injector.js +180 -93
  52. package/dist/services/ai-context-injector.js.map +1 -1
  53. package/dist/services/ai-service-client.js +513 -456
  54. package/dist/services/ai-service-client.js.map +1 -1
  55. package/dist/services/api-client.js +443 -441
  56. package/dist/services/api-client.js.map +1 -1
  57. package/dist/services/auth-handler.js +162 -198
  58. package/dist/services/auth-handler.js.map +1 -1
  59. package/dist/services/background-task-manager.js +258 -282
  60. package/dist/services/background-task-manager.js.map +1 -1
  61. package/dist/services/checkpoint-manager.js +1513 -973
  62. package/dist/services/checkpoint-manager.js.map +1 -1
  63. package/dist/services/clipboard-service.js +151 -200
  64. package/dist/services/clipboard-service.js.map +1 -1
  65. package/dist/services/connectivity-manager.js +63 -65
  66. package/dist/services/connectivity-manager.js.map +1 -1
  67. package/dist/services/conversation-manager.js +118 -121
  68. package/dist/services/conversation-manager.js.map +1 -1
  69. package/dist/services/environment-context-injector.js +160 -187
  70. package/dist/services/environment-context-injector.js.map +1 -1
  71. package/dist/services/fast-context-agent.js +203 -243
  72. package/dist/services/fast-context-agent.js.map +1 -1
  73. package/dist/services/input-detection-agent.js +190 -202
  74. package/dist/services/input-detection-agent.js.map +1 -1
  75. package/dist/services/input-requirement-detector.js +155 -189
  76. package/dist/services/input-requirement-detector.js.map +1 -1
  77. package/dist/services/local-chat-storage.js +342 -365
  78. package/dist/services/local-chat-storage.js.map +1 -1
  79. package/dist/services/monitored-shell-manager.js +225 -233
  80. package/dist/services/monitored-shell-manager.js.map +1 -1
  81. package/dist/services/ollama-service.js +293 -310
  82. package/dist/services/ollama-service.js.map +1 -1
  83. package/dist/services/rules-storage.js +142 -0
  84. package/dist/services/rules-storage.js.map +1 -0
  85. package/dist/services/session-quota-manager.js +219 -235
  86. package/dist/services/session-quota-manager.js.map +1 -1
  87. package/dist/services/shell-input-agent.js +299 -334
  88. package/dist/services/shell-input-agent.js.map +1 -1
  89. package/dist/services/sub-agent-manager.js +459 -501
  90. package/dist/services/sub-agent-manager.js.map +1 -1
  91. package/dist/services/warpify-detector.js +133 -183
  92. package/dist/services/warpify-detector.js.map +1 -1
  93. package/dist/services/workflow-storage.js +202 -217
  94. package/dist/services/workflow-storage.js.map +1 -1
  95. package/dist/test-ssh-handler.js +148 -193
  96. package/dist/test-ssh-handler.js.map +1 -1
  97. package/dist/tools/add-mcp.js +161 -0
  98. package/dist/tools/add-mcp.js.map +1 -0
  99. package/dist/tools/background-command.js +240 -273
  100. package/dist/tools/background-command.js.map +1 -1
  101. package/dist/tools/command.js +447 -440
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/create-image.js +172 -202
  104. package/dist/tools/create-image.js.map +1 -1
  105. package/dist/tools/enter-remote-session.js +169 -215
  106. package/dist/tools/enter-remote-session.js.map +1 -1
  107. package/dist/tools/fast-context.js +60 -67
  108. package/dist/tools/fast-context.js.map +1 -1
  109. package/dist/tools/file-ops.js +605 -537
  110. package/dist/tools/file-ops.js.map +1 -1
  111. package/dist/tools/find-files.js +262 -303
  112. package/dist/tools/find-files.js.map +1 -1
  113. package/dist/tools/get-diff.js +423 -400
  114. package/dist/tools/get-diff.js.map +1 -1
  115. package/dist/tools/grep-search.js +966 -948
  116. package/dist/tools/grep-search.js.map +1 -1
  117. package/dist/tools/inspect-symbol.js +308 -323
  118. package/dist/tools/inspect-symbol.js.map +1 -1
  119. package/dist/tools/plan-mode.js +459 -503
  120. package/dist/tools/plan-mode.js.map +1 -1
  121. package/dist/tools/read-binary-file.js +160 -190
  122. package/dist/tools/read-binary-file.js.map +1 -1
  123. package/dist/tools/registry.js +100 -84
  124. package/dist/tools/registry.js.map +1 -1
  125. package/dist/tools/reproduce_issue.js +170 -151
  126. package/dist/tools/reproduce_issue.js.map +1 -1
  127. package/dist/tools/sub-agent.js +223 -228
  128. package/dist/tools/sub-agent.js.map +1 -1
  129. package/dist/tools/task-complete.js +28 -27
  130. package/dist/tools/task-complete.js.map +1 -1
  131. package/dist/tools/types.js +0 -1
  132. package/dist/tools/types.js.map +1 -1
  133. package/dist/tools/validation.js +96 -118
  134. package/dist/tools/validation.js.map +1 -1
  135. package/dist/tools/web-search.js +194 -194
  136. package/dist/tools/web-search.js.map +1 -1
  137. package/dist/tools/workflow-tool.js +77 -82
  138. package/dist/tools/workflow-tool.js.map +1 -1
  139. package/dist/types/index.js +0 -1
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/rule.js +1 -0
  142. package/dist/types/rule.js.map +1 -0
  143. package/dist/types/workflow.js +0 -7
  144. package/dist/types/workflow.js.map +1 -1
  145. package/dist/ui/components/AgentTimer.js +24 -25
  146. package/dist/ui/components/AgentTimer.js.map +1 -1
  147. package/dist/ui/components/App.js +3266 -3249
  148. package/dist/ui/components/App.js.map +1 -1
  149. package/dist/ui/components/AuthScreen.js +22 -34
  150. package/dist/ui/components/AuthScreen.js.map +1 -1
  151. package/dist/ui/components/AuthWelcomeScreen.js +30 -24
  152. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
  153. package/dist/ui/components/Breadcrumbs.js +53 -82
  154. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  155. package/dist/ui/components/CircularSelectInput.js +59 -67
  156. package/dist/ui/components/CircularSelectInput.js.map +1 -1
  157. package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
  158. package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
  159. package/dist/ui/components/CodeBlock.js +24 -42
  160. package/dist/ui/components/CodeBlock.js.map +1 -1
  161. package/dist/ui/components/ConfigViewer.js +18 -25
  162. package/dist/ui/components/ConfigViewer.js.map +1 -1
  163. package/dist/ui/components/ConfirmPrompt.js +49 -71
  164. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  165. package/dist/ui/components/ConnectionStatusMessage.js +32 -83
  166. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  167. package/dist/ui/components/ContextWindowIndicator.js +34 -49
  168. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  169. package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
  170. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
  171. package/dist/ui/components/DiffViewer.js +68 -121
  172. package/dist/ui/components/DiffViewer.js.map +1 -1
  173. package/dist/ui/components/ErrorBoundary.js +40 -48
  174. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  175. package/dist/ui/components/FileCreationPreview.js +29 -60
  176. package/dist/ui/components/FileCreationPreview.js.map +1 -1
  177. package/dist/ui/components/FileOperation.js +34 -29
  178. package/dist/ui/components/FileOperation.js.map +1 -1
  179. package/dist/ui/components/FileTagAutocomplete.js +55 -25
  180. package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
  181. package/dist/ui/components/FontRecommendation.js.map +1 -1
  182. package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
  183. package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
  184. package/dist/ui/components/InputBox.js +1620 -2150
  185. package/dist/ui/components/InputBox.js.map +1 -1
  186. package/dist/ui/components/InteractiveShell.js +234 -352
  187. package/dist/ui/components/InteractiveShell.js.map +1 -1
  188. package/dist/ui/components/KeyboardHelp.js +34 -35
  189. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  190. package/dist/ui/components/LoadingIndicator.js +22 -25
  191. package/dist/ui/components/LoadingIndicator.js.map +1 -1
  192. package/dist/ui/components/MCPAddScreen.js +40 -51
  193. package/dist/ui/components/MCPAddScreen.js.map +1 -1
  194. package/dist/ui/components/MCPListScreen.js +40 -48
  195. package/dist/ui/components/MCPListScreen.js.map +1 -1
  196. package/dist/ui/components/MCPServerListScreen.js +49 -56
  197. package/dist/ui/components/MCPServerListScreen.js.map +1 -1
  198. package/dist/ui/components/MarkdownRenderer.js +69 -96
  199. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  200. package/dist/ui/components/MessageBox.js +66 -48
  201. package/dist/ui/components/MessageBox.js.map +1 -1
  202. package/dist/ui/components/MessageDisplay.js +150 -142
  203. package/dist/ui/components/MessageDisplay.js.map +1 -1
  204. package/dist/ui/components/MonitorModeAIPanel.js +46 -65
  205. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
  206. package/dist/ui/components/MultiLineInput.js +243 -277
  207. package/dist/ui/components/MultiLineInput.js.map +1 -1
  208. package/dist/ui/components/PasswordPrompt.js +37 -18
  209. package/dist/ui/components/PasswordPrompt.js.map +1 -1
  210. package/dist/ui/components/PlanAcceptedMessage.js +27 -38
  211. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  212. package/dist/ui/components/PlanReviewScreen.js +46 -50
  213. package/dist/ui/components/PlanReviewScreen.js.map +1 -1
  214. package/dist/ui/components/RulesEditorScreen.js +81 -0
  215. package/dist/ui/components/RulesEditorScreen.js.map +1 -0
  216. package/dist/ui/components/SelectPrompt.js +19 -8
  217. package/dist/ui/components/SelectPrompt.js.map +1 -1
  218. package/dist/ui/components/ShimmerText.js +44 -0
  219. package/dist/ui/components/ShimmerText.js.map +1 -0
  220. package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
  221. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  222. package/dist/ui/components/StatusBar.js +56 -87
  223. package/dist/ui/components/StatusBar.js.map +1 -1
  224. package/dist/ui/components/StreamingMessageDisplay.js +116 -99
  225. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  226. package/dist/ui/components/TaskCompletedMessage.js +28 -23
  227. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  228. package/dist/ui/components/TaskProgressIndicator.js +44 -70
  229. package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
  230. package/dist/ui/components/ThinkingDisplay.js +44 -41
  231. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  232. package/dist/ui/components/ToolExecutionMessage.js +772 -1326
  233. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  234. package/dist/ui/components/ToolExecutionStatus.js +53 -84
  235. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  236. package/dist/ui/components/ToolResult.js +22 -15
  237. package/dist/ui/components/ToolResult.js.map +1 -1
  238. package/dist/ui/components/VersionUpdatePrompt.js +88 -120
  239. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  240. package/dist/ui/components/WelcomeBanner.js +176 -26
  241. package/dist/ui/components/WelcomeBanner.js.map +1 -1
  242. package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
  243. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
  244. package/dist/utils/ansi-encoder.js +30 -61
  245. package/dist/utils/ansi-encoder.js.map +1 -1
  246. package/dist/utils/chat-formatter.js +327 -305
  247. package/dist/utils/chat-formatter.js.map +1 -1
  248. package/dist/utils/command-history.js +152 -174
  249. package/dist/utils/command-history.js.map +1 -1
  250. package/dist/utils/context-sanitizer.js +49 -112
  251. package/dist/utils/context-sanitizer.js.map +1 -1
  252. package/dist/utils/conversation-logger.js +292 -324
  253. package/dist/utils/conversation-logger.js.map +1 -1
  254. package/dist/utils/custom-commands-manager.js +126 -131
  255. package/dist/utils/custom-commands-manager.js.map +1 -1
  256. package/dist/utils/editor-utils.js +732 -837
  257. package/dist/utils/editor-utils.js.map +1 -1
  258. package/dist/utils/file.js +174 -213
  259. package/dist/utils/file.js.map +1 -1
  260. package/dist/utils/git-stats.js +169 -0
  261. package/dist/utils/git-stats.js.map +1 -0
  262. package/dist/utils/input-classifier.js +960 -482
  263. package/dist/utils/input-classifier.js.map +1 -1
  264. package/dist/utils/logger.js +48 -73
  265. package/dist/utils/logger.js.map +1 -1
  266. package/dist/utils/markdown-parser.js +277 -310
  267. package/dist/utils/markdown-parser.js.map +1 -1
  268. package/dist/utils/rule-reference-resolver.js +54 -0
  269. package/dist/utils/rule-reference-resolver.js.map +1 -0
  270. package/dist/utils/shell.js +144 -156
  271. package/dist/utils/shell.js.map +1 -1
  272. package/dist/utils/state.js +23 -22
  273. package/dist/utils/state.js.map +1 -1
  274. package/dist/utils/syntax-checker.js +279 -327
  275. package/dist/utils/syntax-checker.js.map +1 -1
  276. package/dist/utils/terminal-output.js +199 -302
  277. package/dist/utils/terminal-output.js.map +1 -1
  278. package/dist/utils/text-clipboard.js +47 -70
  279. package/dist/utils/text-clipboard.js.map +1 -1
  280. package/dist/utils/unicode-sanitizer.js +134 -197
  281. package/dist/utils/unicode-sanitizer.js.map +1 -1
  282. package/dist/utils/version-checker.js +46 -56
  283. package/dist/utils/version-checker.js.map +1 -1
  284. package/package.json +6 -4
  285. package/dist/ai/types.d.ts +0 -20
  286. package/dist/ai/types.d.ts.map +0 -1
  287. package/dist/cli-adapter.d.ts +0 -511
  288. package/dist/cli-adapter.d.ts.map +0 -1
  289. package/dist/commands/CommandParser.d.ts +0 -27
  290. package/dist/commands/CommandParser.d.ts.map +0 -1
  291. package/dist/config/build-config.d.ts +0 -42
  292. package/dist/config/build-config.d.ts.map +0 -1
  293. package/dist/config/defaultConfig.d.ts +0 -79
  294. package/dist/config/defaultConfig.d.ts.map +0 -1
  295. package/dist/config/manager.d.ts +0 -62
  296. package/dist/config/manager.d.ts.map +0 -1
  297. package/dist/config/mcp-config-manager.d.ts +0 -79
  298. package/dist/config/mcp-config-manager.d.ts.map +0 -1
  299. package/dist/config/models.d.ts +0 -83
  300. package/dist/config/models.d.ts.map +0 -1
  301. package/dist/config/slash-commands.d.ts +0 -23
  302. package/dist/config/slash-commands.d.ts.map +0 -1
  303. package/dist/config/types.d.ts +0 -35
  304. package/dist/config/types.d.ts.map +0 -1
  305. package/dist/context/command-detector.d.ts +0 -50
  306. package/dist/context/command-detector.d.ts.map +0 -1
  307. package/dist/context/context-manager.d.ts +0 -157
  308. package/dist/context/context-manager.d.ts.map +0 -1
  309. package/dist/context/handlers/docker-handler.d.ts +0 -130
  310. package/dist/context/handlers/docker-handler.d.ts.map +0 -1
  311. package/dist/context/handlers/ssh-handler.d.ts +0 -201
  312. package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
  313. package/dist/context/handlers/wsl-handler.d.ts +0 -146
  314. package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
  315. package/dist/context/index.d.ts +0 -8
  316. package/dist/context/index.d.ts.map +0 -1
  317. package/dist/context/subshell-handler.d.ts +0 -165
  318. package/dist/context/subshell-handler.d.ts.map +0 -1
  319. package/dist/context/types.d.ts +0 -70
  320. package/dist/context/types.d.ts.map +0 -1
  321. package/dist/hooks/useConnectivity.d.ts +0 -2
  322. package/dist/hooks/useConnectivity.d.ts.map +0 -1
  323. package/dist/hooks/useTerminalDimensions.d.ts +0 -41
  324. package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
  325. package/dist/index.d.ts +0 -9
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/mcp/mcp-command-handler.d.ts +0 -47
  328. package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
  329. package/dist/mcp/mcp-server-manager.d.ts +0 -30
  330. package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
  331. package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
  332. package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
  333. package/dist/services/ai-autocomplete-agent.d.ts +0 -39
  334. package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
  335. package/dist/services/ai-context-injector.d.ts +0 -41
  336. package/dist/services/ai-context-injector.d.ts.map +0 -1
  337. package/dist/services/ai-service-client.d.ts +0 -128
  338. package/dist/services/ai-service-client.d.ts.map +0 -1
  339. package/dist/services/api-client.d.ts +0 -353
  340. package/dist/services/api-client.d.ts.map +0 -1
  341. package/dist/services/auth-handler.d.ts +0 -30
  342. package/dist/services/auth-handler.d.ts.map +0 -1
  343. package/dist/services/background-task-manager.d.ts +0 -114
  344. package/dist/services/background-task-manager.d.ts.map +0 -1
  345. package/dist/services/checkpoint-manager.d.ts +0 -167
  346. package/dist/services/checkpoint-manager.d.ts.map +0 -1
  347. package/dist/services/clipboard-service.d.ts +0 -37
  348. package/dist/services/clipboard-service.d.ts.map +0 -1
  349. package/dist/services/connectivity-manager.d.ts +0 -18
  350. package/dist/services/connectivity-manager.d.ts.map +0 -1
  351. package/dist/services/conversation-manager.d.ts +0 -73
  352. package/dist/services/conversation-manager.d.ts.map +0 -1
  353. package/dist/services/environment-context-injector.d.ts +0 -69
  354. package/dist/services/environment-context-injector.d.ts.map +0 -1
  355. package/dist/services/fast-context-agent.d.ts +0 -12
  356. package/dist/services/fast-context-agent.d.ts.map +0 -1
  357. package/dist/services/input-detection-agent.d.ts +0 -40
  358. package/dist/services/input-detection-agent.d.ts.map +0 -1
  359. package/dist/services/input-requirement-detector.d.ts +0 -28
  360. package/dist/services/input-requirement-detector.d.ts.map +0 -1
  361. package/dist/services/local-chat-storage.d.ts +0 -182
  362. package/dist/services/local-chat-storage.d.ts.map +0 -1
  363. package/dist/services/monitored-shell-manager.d.ts +0 -120
  364. package/dist/services/monitored-shell-manager.d.ts.map +0 -1
  365. package/dist/services/ollama-service.d.ts +0 -197
  366. package/dist/services/ollama-service.d.ts.map +0 -1
  367. package/dist/services/session-quota-manager.d.ts +0 -101
  368. package/dist/services/session-quota-manager.d.ts.map +0 -1
  369. package/dist/services/shell-input-agent.d.ts +0 -89
  370. package/dist/services/shell-input-agent.d.ts.map +0 -1
  371. package/dist/services/sub-agent-manager.d.ts +0 -140
  372. package/dist/services/sub-agent-manager.d.ts.map +0 -1
  373. package/dist/services/warpify-detector.d.ts +0 -43
  374. package/dist/services/warpify-detector.d.ts.map +0 -1
  375. package/dist/services/workflow-storage.d.ts +0 -72
  376. package/dist/services/workflow-storage.d.ts.map +0 -1
  377. package/dist/test-ssh-handler.d.ts +0 -8
  378. package/dist/test-ssh-handler.d.ts.map +0 -1
  379. package/dist/tools/background-command.d.ts +0 -11
  380. package/dist/tools/background-command.d.ts.map +0 -1
  381. package/dist/tools/command.d.ts +0 -3
  382. package/dist/tools/command.d.ts.map +0 -1
  383. package/dist/tools/create-image.d.ts +0 -10
  384. package/dist/tools/create-image.d.ts.map +0 -1
  385. package/dist/tools/enter-remote-session.d.ts +0 -48
  386. package/dist/tools/enter-remote-session.d.ts.map +0 -1
  387. package/dist/tools/fast-context.d.ts +0 -3
  388. package/dist/tools/fast-context.d.ts.map +0 -1
  389. package/dist/tools/file-ops.d.ts +0 -7
  390. package/dist/tools/file-ops.d.ts.map +0 -1
  391. package/dist/tools/find-files.d.ts +0 -49
  392. package/dist/tools/find-files.d.ts.map +0 -1
  393. package/dist/tools/get-diff.d.ts +0 -14
  394. package/dist/tools/get-diff.d.ts.map +0 -1
  395. package/dist/tools/grep-search.d.ts +0 -155
  396. package/dist/tools/grep-search.d.ts.map +0 -1
  397. package/dist/tools/inspect-symbol.d.ts +0 -32
  398. package/dist/tools/inspect-symbol.d.ts.map +0 -1
  399. package/dist/tools/plan-mode.d.ts +0 -140
  400. package/dist/tools/plan-mode.d.ts.map +0 -1
  401. package/dist/tools/read-binary-file.d.ts +0 -10
  402. package/dist/tools/read-binary-file.d.ts.map +0 -1
  403. package/dist/tools/registry.d.ts +0 -31
  404. package/dist/tools/registry.d.ts.map +0 -1
  405. package/dist/tools/reproduce_issue.d.ts +0 -2
  406. package/dist/tools/reproduce_issue.d.ts.map +0 -1
  407. package/dist/tools/sub-agent.d.ts +0 -9
  408. package/dist/tools/sub-agent.d.ts.map +0 -1
  409. package/dist/tools/task-complete.d.ts +0 -3
  410. package/dist/tools/task-complete.d.ts.map +0 -1
  411. package/dist/tools/types.d.ts +0 -40
  412. package/dist/tools/types.d.ts.map +0 -1
  413. package/dist/tools/validation.d.ts +0 -47
  414. package/dist/tools/validation.d.ts.map +0 -1
  415. package/dist/tools/web-search.d.ts +0 -24
  416. package/dist/tools/web-search.d.ts.map +0 -1
  417. package/dist/tools/workflow-tool.d.ts +0 -11
  418. package/dist/tools/workflow-tool.d.ts.map +0 -1
  419. package/dist/types/index.d.ts +0 -123
  420. package/dist/types/index.d.ts.map +0 -1
  421. package/dist/types/workflow.d.ts +0 -110
  422. package/dist/types/workflow.d.ts.map +0 -1
  423. package/dist/ui/components/AgentTimer.d.ts +0 -7
  424. package/dist/ui/components/AgentTimer.d.ts.map +0 -1
  425. package/dist/ui/components/App.d.ts +0 -197
  426. package/dist/ui/components/App.d.ts.map +0 -1
  427. package/dist/ui/components/AuthScreen.d.ts +0 -8
  428. package/dist/ui/components/AuthScreen.d.ts.map +0 -1
  429. package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
  430. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
  431. package/dist/ui/components/Breadcrumbs.d.ts +0 -13
  432. package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
  433. package/dist/ui/components/CircularSelectInput.d.ts +0 -24
  434. package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
  435. package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
  436. package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
  437. package/dist/ui/components/CodeBlock.d.ts +0 -9
  438. package/dist/ui/components/CodeBlock.d.ts.map +0 -1
  439. package/dist/ui/components/ConfigViewer.d.ts +0 -11
  440. package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
  441. package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
  442. package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
  443. package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
  444. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
  445. package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
  446. package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
  447. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
  448. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
  449. package/dist/ui/components/DiffViewer.d.ts +0 -9
  450. package/dist/ui/components/DiffViewer.d.ts.map +0 -1
  451. package/dist/ui/components/ErrorBoundary.d.ts +0 -17
  452. package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
  453. package/dist/ui/components/FileCreationPreview.d.ts +0 -8
  454. package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
  455. package/dist/ui/components/FileOperation.d.ts +0 -10
  456. package/dist/ui/components/FileOperation.d.ts.map +0 -1
  457. package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
  458. package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
  459. package/dist/ui/components/FontRecommendation.d.ts +0 -1
  460. package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
  461. package/dist/ui/components/InputBox.d.ts +0 -42
  462. package/dist/ui/components/InputBox.d.ts.map +0 -1
  463. package/dist/ui/components/InteractiveShell.d.ts +0 -30
  464. package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
  465. package/dist/ui/components/KeyboardHelp.d.ts +0 -7
  466. package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
  467. package/dist/ui/components/LoadingIndicator.d.ts +0 -3
  468. package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
  469. package/dist/ui/components/MCPAddScreen.d.ts +0 -13
  470. package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
  471. package/dist/ui/components/MCPListScreen.d.ts +0 -17
  472. package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
  473. package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
  474. package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
  475. package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
  476. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  477. package/dist/ui/components/MessageBox.d.ts +0 -10
  478. package/dist/ui/components/MessageBox.d.ts.map +0 -1
  479. package/dist/ui/components/MessageDisplay.d.ts +0 -14
  480. package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
  481. package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
  482. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
  483. package/dist/ui/components/MultiLineInput.d.ts +0 -13
  484. package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
  485. package/dist/ui/components/PasswordPrompt.d.ts +0 -9
  486. package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
  487. package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
  488. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
  489. package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
  490. package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
  491. package/dist/ui/components/SelectPrompt.d.ts +0 -12
  492. package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
  493. package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
  494. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
  495. package/dist/ui/components/StatusBar.d.ts +0 -14
  496. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  497. package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
  498. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
  499. package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
  500. package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
  501. package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
  502. package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
  503. package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
  504. package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
  505. package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
  506. package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
  507. package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
  508. package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
  509. package/dist/ui/components/ToolResult.d.ts +0 -10
  510. package/dist/ui/components/ToolResult.d.ts.map +0 -1
  511. package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
  512. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
  513. package/dist/ui/components/WelcomeBanner.d.ts +0 -3
  514. package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
  515. package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
  516. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
  517. package/dist/utils/ansi-encoder.d.ts +0 -7
  518. package/dist/utils/ansi-encoder.d.ts.map +0 -1
  519. package/dist/utils/chat-formatter.d.ts +0 -12
  520. package/dist/utils/chat-formatter.d.ts.map +0 -1
  521. package/dist/utils/command-history.d.ts +0 -24
  522. package/dist/utils/command-history.d.ts.map +0 -1
  523. package/dist/utils/context-sanitizer.d.ts +0 -50
  524. package/dist/utils/context-sanitizer.d.ts.map +0 -1
  525. package/dist/utils/conversation-logger.d.ts +0 -142
  526. package/dist/utils/conversation-logger.d.ts.map +0 -1
  527. package/dist/utils/custom-commands-manager.d.ts +0 -59
  528. package/dist/utils/custom-commands-manager.d.ts.map +0 -1
  529. package/dist/utils/editor-utils.d.ts +0 -101
  530. package/dist/utils/editor-utils.d.ts.map +0 -1
  531. package/dist/utils/file.d.ts +0 -61
  532. package/dist/utils/file.d.ts.map +0 -1
  533. package/dist/utils/input-classifier.d.ts +0 -25
  534. package/dist/utils/input-classifier.d.ts.map +0 -1
  535. package/dist/utils/logger.d.ts +0 -17
  536. package/dist/utils/logger.d.ts.map +0 -1
  537. package/dist/utils/markdown-parser.d.ts +0 -60
  538. package/dist/utils/markdown-parser.d.ts.map +0 -1
  539. package/dist/utils/shell.d.ts +0 -47
  540. package/dist/utils/shell.d.ts.map +0 -1
  541. package/dist/utils/state.d.ts +0 -13
  542. package/dist/utils/state.d.ts.map +0 -1
  543. package/dist/utils/syntax-checker.d.ts +0 -24
  544. package/dist/utils/syntax-checker.d.ts.map +0 -1
  545. package/dist/utils/terminal-output.d.ts +0 -25
  546. package/dist/utils/terminal-output.d.ts.map +0 -1
  547. package/dist/utils/text-clipboard.d.ts +0 -12
  548. package/dist/utils/text-clipboard.d.ts.map +0 -1
  549. package/dist/utils/unicode-sanitizer.d.ts +0 -44
  550. package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
  551. package/dist/utils/version-checker.d.ts +0 -14
  552. package/dist/utils/version-checker.d.ts.map +0 -1
@@ -1,324 +1,291 @@
1
- export class MarkdownParser {
2
- /**
3
- * Main parse function that processes markdown text into structured elements
4
- */
5
- parse(markdown) {
6
- // Strip thinking tags and tool call text before parsing
7
- const cleanedMarkdown = this.stripThinkingAndToolCalls(markdown);
8
- const lines = cleanedMarkdown.split('\n');
9
- const elements = [];
10
- let i = 0;
11
- while (i < lines.length) {
12
- const line = lines[i];
13
- // Code blocks
14
- if (line.trim().startsWith('```')) {
15
- const codeBlock = this.parseCodeBlock(lines, i);
16
- if (codeBlock) {
17
- elements.push(codeBlock.element);
18
- i = codeBlock.endIndex;
19
- continue;
20
- }
21
- }
22
- // Headings
23
- const heading = this.parseHeading(line);
24
- if (heading) {
25
- elements.push(heading);
26
- i++;
27
- continue;
28
- }
29
- // Horizontal rule
30
- if (this.isHorizontalRule(line)) {
31
- elements.push({ type: 'horizontal-rule', content: '' });
32
- i++;
33
- continue;
34
- }
35
- // Blockquote
36
- if (line.trim().startsWith('>')) {
37
- elements.push(this.parseBlockquote(line));
38
- i++;
39
- continue;
40
- }
41
- // Ordered list
42
- const orderedList = this.parseOrderedListItem(line);
43
- if (orderedList) {
44
- elements.push(orderedList);
45
- i++;
46
- continue;
47
- }
48
- // Unordered list
49
- const unorderedList = this.parseUnorderedListItem(line);
50
- if (unorderedList) {
51
- elements.push(unorderedList);
52
- i++;
53
- continue;
54
- }
55
- // Empty line
56
- if (line.trim() === '') {
57
- elements.push({ type: 'line-break', content: '' });
58
- i++;
59
- continue;
60
- }
61
- // Regular text with inline formatting
62
- const textElement = this.parseInlineFormatting(line);
63
- elements.push(textElement);
64
- i++;
1
+ class MarkdownParser {
2
+ /**
3
+ * Main parse function that processes markdown text into structured elements
4
+ */
5
+ parse(markdown) {
6
+ const cleanedMarkdown = this.stripThinkingAndToolCalls(markdown);
7
+ const lines = cleanedMarkdown.split("\n");
8
+ const elements = [];
9
+ let i = 0;
10
+ while (i < lines.length) {
11
+ const line = lines[i];
12
+ if (line.trim().startsWith("```")) {
13
+ const codeBlock = this.parseCodeBlock(lines, i);
14
+ if (codeBlock) {
15
+ elements.push(codeBlock.element);
16
+ i = codeBlock.endIndex;
17
+ continue;
65
18
  }
66
- return this.mergeAdjacentText(elements);
19
+ }
20
+ const heading = this.parseHeading(line);
21
+ if (heading) {
22
+ elements.push(heading);
23
+ i++;
24
+ continue;
25
+ }
26
+ if (this.isHorizontalRule(line)) {
27
+ elements.push({ type: "horizontal-rule", content: "" });
28
+ i++;
29
+ continue;
30
+ }
31
+ if (line.trim().startsWith(">")) {
32
+ elements.push(this.parseBlockquote(line));
33
+ i++;
34
+ continue;
35
+ }
36
+ const orderedList = this.parseOrderedListItem(line);
37
+ if (orderedList) {
38
+ elements.push(orderedList);
39
+ i++;
40
+ continue;
41
+ }
42
+ const unorderedList = this.parseUnorderedListItem(line);
43
+ if (unorderedList) {
44
+ elements.push(unorderedList);
45
+ i++;
46
+ continue;
47
+ }
48
+ if (line.trim() === "") {
49
+ elements.push({ type: "line-break", content: "" });
50
+ i++;
51
+ continue;
52
+ }
53
+ const textElement = this.parseInlineFormatting(line);
54
+ elements.push(textElement);
55
+ i++;
67
56
  }
68
- /**
69
- * Strip thinking tags and tool call text from markdown
70
- */
71
- stripThinkingAndToolCalls(markdown) {
72
- // Remove <thinking>...</thinking> tags and their content
73
- let cleaned = markdown.replace(/<thinking>[\s\S]*?<\/thinking>/gi, '');
74
- // Remove [Tool: ...] text
75
- cleaned = cleaned.replace(/\[Tool:\s*[^\]]+\]/g, '');
76
- // Remove extra blank lines that may have been left behind
77
- cleaned = cleaned.replace(/\n{3,}/g, '\n\n');
78
- return cleaned.trim();
57
+ return this.mergeAdjacentText(elements);
58
+ }
59
+ /**
60
+ * Strip thinking tags and tool call text from markdown
61
+ */
62
+ stripThinkingAndToolCalls(markdown) {
63
+ let cleaned = markdown.replace(/<thinking>[\s\S]*?<\/thinking>/gi, "");
64
+ cleaned = cleaned.replace(/\[Tool:\s*[^\]]+\]/g, "");
65
+ cleaned = cleaned.replace(/\n{3,}/g, "\n\n");
66
+ return cleaned.trim();
67
+ }
68
+ /**
69
+ * Parse code block (```)
70
+ */
71
+ parseCodeBlock(lines, startIndex) {
72
+ const firstLine = lines[startIndex].trim();
73
+ if (!firstLine.startsWith("```")) return null;
74
+ const language = firstLine.slice(3).trim() || "text";
75
+ let code = "";
76
+ let endIndex = startIndex + 1;
77
+ while (endIndex < lines.length) {
78
+ if (lines[endIndex].trim().startsWith("```")) {
79
+ break;
80
+ }
81
+ code += lines[endIndex] + "\n";
82
+ endIndex++;
79
83
  }
80
- /**
81
- * Parse code block (```)
82
- */
83
- parseCodeBlock(lines, startIndex) {
84
- const firstLine = lines[startIndex].trim();
85
- if (!firstLine.startsWith('```'))
86
- return null;
87
- const language = firstLine.slice(3).trim() || 'text';
88
- let code = '';
89
- let endIndex = startIndex + 1;
90
- while (endIndex < lines.length) {
91
- if (lines[endIndex].trim().startsWith('```')) {
92
- break;
93
- }
94
- code += lines[endIndex] + '\n';
95
- endIndex++;
84
+ return {
85
+ element: {
86
+ type: "code-block",
87
+ content: code.trimEnd(),
88
+ language
89
+ },
90
+ endIndex: endIndex + 1
91
+ };
92
+ }
93
+ /**
94
+ * Parse heading (# ## ### etc.)
95
+ */
96
+ parseHeading(line) {
97
+ const match = line.match(/^(#{1,6})\s+(.+)$/);
98
+ if (!match) return null;
99
+ return {
100
+ type: "heading",
101
+ content: match[2].trim(),
102
+ level: match[1].length,
103
+ children: this.parseInlineElements(match[2].trim())
104
+ };
105
+ }
106
+ /**
107
+ * Check if line is horizontal rule
108
+ */
109
+ isHorizontalRule(line) {
110
+ const trimmed = line.trim();
111
+ return /^(-{3,}|_{3,}|\*{3,})$/.test(trimmed);
112
+ }
113
+ /**
114
+ * Parse blockquote
115
+ */
116
+ parseBlockquote(line) {
117
+ const content = line.replace(/^\s*>\s?/, "");
118
+ return {
119
+ type: "blockquote",
120
+ content,
121
+ children: this.parseInlineElements(content)
122
+ };
123
+ }
124
+ /**
125
+ * Parse ordered list item
126
+ */
127
+ parseOrderedListItem(line) {
128
+ const match = line.match(/^(\s*)(\d+)\.\s+(.+)$/);
129
+ if (!match) return null;
130
+ const indent = match[1].length;
131
+ const index = parseInt(match[2], 10);
132
+ const content = match[3];
133
+ return {
134
+ type: "list-item",
135
+ content,
136
+ ordered: true,
137
+ index,
138
+ level: Math.floor(indent / 2),
139
+ children: this.parseInlineElements(content)
140
+ };
141
+ }
142
+ /**
143
+ * Parse unordered list item
144
+ */
145
+ parseUnorderedListItem(line) {
146
+ const match = line.match(/^(\s*)[-*+]\s+(.+)$/);
147
+ if (!match) return null;
148
+ const indent = match[1].length;
149
+ const content = match[2];
150
+ return {
151
+ type: "list-item",
152
+ content,
153
+ ordered: false,
154
+ level: Math.floor(indent / 2),
155
+ children: this.parseInlineElements(content)
156
+ };
157
+ }
158
+ /**
159
+ * Parse inline formatting (bold, italic, code, links)
160
+ */
161
+ parseInlineFormatting(text) {
162
+ return {
163
+ type: "text",
164
+ content: text,
165
+ children: this.parseInlineElements(text)
166
+ };
167
+ }
168
+ /**
169
+ * Parse inline elements within text
170
+ */
171
+ parseInlineElements(text) {
172
+ const elements = [];
173
+ let currentPos = 0;
174
+ const patterns = [
175
+ { regex: /\*\*([^\*]+?)\*\*/g, type: "bold" },
176
+ { regex: /(?<![a-zA-Z0-9])__([^_]+?)__(?![a-zA-Z0-9])/g, type: "bold" },
177
+ { regex: /\*([^\*]+?)\*/g, type: "italic" },
178
+ // Only match _text_ when underscores are NOT surrounded by alphanumeric chars (word boundaries)
179
+ { regex: /(?<![a-zA-Z0-9_])_([^_]+?)_(?![a-zA-Z0-9_])/g, type: "italic" },
180
+ { regex: /`([^`]+?)`/g, type: "code-inline" },
181
+ { regex: /\[(.+?)\]\((.+?)\)/g, type: "link" }
182
+ ];
183
+ const matches = [];
184
+ for (const pattern of patterns) {
185
+ pattern.regex.lastIndex = 0;
186
+ let match;
187
+ while ((match = pattern.regex.exec(text)) !== null) {
188
+ if (pattern.type === "link") {
189
+ matches.push({
190
+ start: match.index,
191
+ end: match.index + match[0].length,
192
+ type: pattern.type,
193
+ content: match[1],
194
+ url: match[2]
195
+ });
196
+ } else {
197
+ matches.push({
198
+ start: match.index,
199
+ end: match.index + match[0].length,
200
+ type: pattern.type,
201
+ content: match[1]
202
+ });
96
203
  }
97
- return {
98
- element: {
99
- type: 'code-block',
100
- content: code.trimEnd(),
101
- language,
102
- },
103
- endIndex: endIndex + 1,
104
- };
204
+ }
105
205
  }
106
- /**
107
- * Parse heading (# ## ### etc.)
108
- */
109
- parseHeading(line) {
110
- const match = line.match(/^(#{1,6})\s+(.+)$/);
111
- if (!match)
112
- return null;
113
- return {
114
- type: 'heading',
115
- content: match[2].trim(),
116
- level: match[1].length,
117
- children: this.parseInlineElements(match[2].trim()),
118
- };
206
+ matches.sort((a, b) => a.start - b.start);
207
+ const filteredMatches = [];
208
+ let lastEnd = 0;
209
+ for (const match of matches) {
210
+ if (match.start >= lastEnd) {
211
+ filteredMatches.push(match);
212
+ lastEnd = match.end;
213
+ }
119
214
  }
120
- /**
121
- * Check if line is horizontal rule
122
- */
123
- isHorizontalRule(line) {
124
- const trimmed = line.trim();
125
- return /^(-{3,}|_{3,}|\*{3,})$/.test(trimmed);
126
- }
127
- /**
128
- * Parse blockquote
129
- */
130
- parseBlockquote(line) {
131
- const content = line.replace(/^\s*>\s?/, '');
132
- return {
133
- type: 'blockquote',
134
- content,
135
- children: this.parseInlineElements(content),
136
- };
137
- }
138
- /**
139
- * Parse ordered list item
140
- */
141
- parseOrderedListItem(line) {
142
- const match = line.match(/^(\s*)(\d+)\.\s+(.+)$/);
143
- if (!match)
144
- return null;
145
- const indent = match[1].length;
146
- const index = parseInt(match[2], 10);
147
- const content = match[3];
148
- return {
149
- type: 'list-item',
150
- content,
151
- ordered: true,
152
- index,
153
- level: Math.floor(indent / 2),
154
- children: this.parseInlineElements(content),
155
- };
156
- }
157
- /**
158
- * Parse unordered list item
159
- */
160
- parseUnorderedListItem(line) {
161
- const match = line.match(/^(\s*)[-*+]\s+(.+)$/);
162
- if (!match)
163
- return null;
164
- const indent = match[1].length;
165
- const content = match[2];
166
- return {
167
- type: 'list-item',
168
- content,
169
- ordered: false,
170
- level: Math.floor(indent / 2),
171
- children: this.parseInlineElements(content),
172
- };
173
- }
174
- /**
175
- * Parse inline formatting (bold, italic, code, links)
176
- */
177
- parseInlineFormatting(text) {
178
- return {
179
- type: 'text',
180
- content: text,
181
- children: this.parseInlineElements(text),
182
- };
183
- }
184
- /**
185
- * Parse inline elements within text
186
- */
187
- parseInlineElements(text) {
188
- const elements = [];
189
- let currentPos = 0;
190
- // Patterns for inline formatting
191
- // IMPORTANT: Bold (**) must come before italic (*) to match correctly
192
- // NOTE: Underscore patterns require word boundaries to avoid matching file paths like cli_ai_tool
193
- const patterns = [
194
- { regex: /\*\*([^\*]+?)\*\*/g, type: 'bold' },
195
- { regex: /(?<![a-zA-Z0-9])__([^_]+?)__(?![a-zA-Z0-9])/g, type: 'bold' },
196
- { regex: /\*([^\*]+?)\*/g, type: 'italic' },
197
- // Only match _text_ when underscores are NOT surrounded by alphanumeric chars (word boundaries)
198
- { regex: /(?<![a-zA-Z0-9_])_([^_]+?)_(?![a-zA-Z0-9_])/g, type: 'italic' },
199
- { regex: /`([^`]+?)`/g, type: 'code-inline' },
200
- { regex: /\[(.+?)\]\((.+?)\)/g, type: 'link' },
201
- ];
202
- // Find all matches
203
- const matches = [];
204
- for (const pattern of patterns) {
205
- pattern.regex.lastIndex = 0;
206
- let match;
207
- while ((match = pattern.regex.exec(text)) !== null) {
208
- if (pattern.type === 'link') {
209
- matches.push({
210
- start: match.index,
211
- end: match.index + match[0].length,
212
- type: pattern.type,
213
- content: match[1],
214
- url: match[2],
215
- });
216
- }
217
- else {
218
- matches.push({
219
- start: match.index,
220
- end: match.index + match[0].length,
221
- type: pattern.type,
222
- content: match[1],
223
- });
224
- }
225
- }
226
- }
227
- // Sort by position
228
- matches.sort((a, b) => a.start - b.start);
229
- // Remove overlapping matches (keep first one)
230
- const filteredMatches = [];
231
- let lastEnd = 0;
232
- for (const match of matches) {
233
- if (match.start >= lastEnd) {
234
- filteredMatches.push(match);
235
- lastEnd = match.end;
236
- }
237
- }
238
- // Build elements
239
- currentPos = 0;
240
- for (const match of filteredMatches) {
241
- // Add plain text before match
242
- if (match.start > currentPos) {
243
- const plainText = text.slice(currentPos, match.start);
244
- if (plainText) {
245
- elements.push({ type: 'text', content: plainText });
246
- }
247
- }
248
- // Add formatted element
249
- if (match.type === 'link') {
250
- elements.push({
251
- type: 'link',
252
- content: `${match.content} (${match.url})`,
253
- });
254
- }
255
- else {
256
- elements.push({
257
- type: match.type,
258
- content: match.content,
259
- });
260
- }
261
- currentPos = match.end;
215
+ currentPos = 0;
216
+ for (const match of filteredMatches) {
217
+ if (match.start > currentPos) {
218
+ const plainText = text.slice(currentPos, match.start);
219
+ if (plainText) {
220
+ elements.push({ type: "text", content: plainText });
262
221
  }
263
- // Add remaining text
264
- if (currentPos < text.length) {
265
- const remaining = text.slice(currentPos);
266
- if (remaining) {
267
- elements.push({ type: 'text', content: remaining });
268
- }
269
- }
270
- return elements.length > 0 ? elements : [{ type: 'text', content: text }];
222
+ }
223
+ if (match.type === "link") {
224
+ elements.push({
225
+ type: "link",
226
+ content: `${match.content} (${match.url})`
227
+ });
228
+ } else {
229
+ elements.push({
230
+ type: match.type,
231
+ content: match.content
232
+ });
233
+ }
234
+ currentPos = match.end;
271
235
  }
272
- /**
273
- * Merge adjacent text elements
274
- */
275
- mergeAdjacentText(elements) {
276
- const merged = [];
277
- for (let i = 0; i < elements.length; i++) {
278
- const current = elements[i];
279
- if (merged.length === 0) {
280
- merged.push(current);
281
- continue;
282
- }
283
- const last = merged[merged.length - 1];
284
- // Merge consecutive text elements without formatting
285
- if (last.type === 'text' &&
286
- current.type === 'text' &&
287
- (!last.children || last.children.length === 0) &&
288
- (!current.children || current.children.length === 0)) {
289
- last.content += ' ' + current.content;
290
- }
291
- else {
292
- merged.push(current);
293
- }
294
- }
295
- return merged;
236
+ if (currentPos < text.length) {
237
+ const remaining = text.slice(currentPos);
238
+ if (remaining) {
239
+ elements.push({ type: "text", content: remaining });
240
+ }
296
241
  }
297
- }
298
- /**
299
- * Utility to wrap text to a specific width
300
- */
301
- export function wrapText(text, maxWidth, indent = 0) {
302
- const words = text.split(/\s+/);
303
- const lines = [];
304
- let currentLine = '';
305
- const indentStr = ' '.repeat(indent);
306
- const effectiveWidth = maxWidth - indent;
307
- for (const word of words) {
308
- const testLine = currentLine ? `${currentLine} ${word}` : word;
309
- if (testLine.length <= effectiveWidth) {
310
- currentLine = testLine;
311
- }
312
- else {
313
- if (currentLine) {
314
- lines.push(indentStr + currentLine);
315
- }
316
- currentLine = word;
317
- }
242
+ return elements.length > 0 ? elements : [{ type: "text", content: text }];
243
+ }
244
+ /**
245
+ * Merge adjacent text elements
246
+ */
247
+ mergeAdjacentText(elements) {
248
+ const merged = [];
249
+ for (let i = 0; i < elements.length; i++) {
250
+ const current = elements[i];
251
+ if (merged.length === 0) {
252
+ merged.push(current);
253
+ continue;
254
+ }
255
+ const last = merged[merged.length - 1];
256
+ if (last.type === "text" && current.type === "text" && (!last.children || last.children.length === 0) && (!current.children || current.children.length === 0)) {
257
+ last.content += " " + current.content;
258
+ } else {
259
+ merged.push(current);
260
+ }
318
261
  }
319
- if (currentLine) {
262
+ return merged;
263
+ }
264
+ }
265
+ function wrapText(text, maxWidth, indent = 0) {
266
+ const words = text.split(/\s+/);
267
+ const lines = [];
268
+ let currentLine = "";
269
+ const indentStr = " ".repeat(indent);
270
+ const effectiveWidth = maxWidth - indent;
271
+ for (const word of words) {
272
+ const testLine = currentLine ? `${currentLine} ${word}` : word;
273
+ if (testLine.length <= effectiveWidth) {
274
+ currentLine = testLine;
275
+ } else {
276
+ if (currentLine) {
320
277
  lines.push(indentStr + currentLine);
278
+ }
279
+ currentLine = word;
321
280
  }
322
- return lines.length > 0 ? lines : [indentStr];
281
+ }
282
+ if (currentLine) {
283
+ lines.push(indentStr + currentLine);
284
+ }
285
+ return lines.length > 0 ? lines : [indentStr];
323
286
  }
287
+ export {
288
+ MarkdownParser,
289
+ wrapText
290
+ };
324
291
  //# sourceMappingURL=markdown-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../src/utils/markdown-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/markdown-parser.ts"],"sourcesContent":["import { Box } from 'ink';\r\n\r\nexport interface ParsedElement {\r\n type: 'text' | 'heading' | 'list-item' | 'code-block' | 'code-inline' | 'bold' | 'italic' | 'link' | 'blockquote' | 'horizontal-rule' | 'line-break';\r\n content: string;\r\n level?: number; // For headings (1-6) and list nesting\r\n language?: string; // For code blocks\r\n ordered?: boolean; // For lists\r\n index?: number; // For ordered list items\r\n children?: ParsedElement[]; // For nested/formatted text\r\n}\r\n\r\nexport class MarkdownParser {\r\n /**\r\n * Main parse function that processes markdown text into structured elements\r\n */\r\n parse(markdown: string): ParsedElement[] {\r\n // Strip thinking tags and tool call text before parsing\r\n const cleanedMarkdown = this.stripThinkingAndToolCalls(markdown);\r\n const lines = cleanedMarkdown.split('\\n');\r\n const elements: ParsedElement[] = [];\r\n let i = 0;\r\n\r\n while (i < lines.length) {\r\n const line = lines[i];\r\n\r\n // Code blocks\r\n if (line.trim().startsWith('```')) {\r\n const codeBlock = this.parseCodeBlock(lines, i);\r\n if (codeBlock) {\r\n elements.push(codeBlock.element);\r\n i = codeBlock.endIndex;\r\n continue;\r\n }\r\n }\r\n\r\n // Headings\r\n const heading = this.parseHeading(line);\r\n if (heading) {\r\n elements.push(heading);\r\n i++;\r\n continue;\r\n }\r\n\r\n // Horizontal rule\r\n if (this.isHorizontalRule(line)) {\r\n elements.push({ type: 'horizontal-rule', content: '' });\r\n i++;\r\n continue;\r\n }\r\n\r\n // Blockquote\r\n if (line.trim().startsWith('>')) {\r\n elements.push(this.parseBlockquote(line));\r\n i++;\r\n continue;\r\n }\r\n\r\n // Ordered list\r\n const orderedList = this.parseOrderedListItem(line);\r\n if (orderedList) {\r\n elements.push(orderedList);\r\n i++;\r\n continue;\r\n }\r\n\r\n // Unordered list\r\n const unorderedList = this.parseUnorderedListItem(line);\r\n if (unorderedList) {\r\n elements.push(unorderedList);\r\n i++;\r\n continue;\r\n }\r\n\r\n // Empty line\r\n if (line.trim() === '') {\r\n elements.push({ type: 'line-break', content: '' });\r\n i++;\r\n continue;\r\n }\r\n\r\n // Regular text with inline formatting\r\n const textElement = this.parseInlineFormatting(line);\r\n elements.push(textElement);\r\n i++;\r\n }\r\n\r\n return this.mergeAdjacentText(elements);\r\n }\r\n\r\n /**\r\n * Strip thinking tags and tool call text from markdown\r\n */\r\n private stripThinkingAndToolCalls(markdown: string): string {\r\n // Remove <thinking>...</thinking> tags and their content\r\n let cleaned = markdown.replace(/<thinking>[\\s\\S]*?<\\/thinking>/gi, '');\r\n\r\n // Remove [Tool: ...] text\r\n cleaned = cleaned.replace(/\\[Tool:\\s*[^\\]]+\\]/g, '');\r\n\r\n // Remove extra blank lines that may have been left behind\r\n cleaned = cleaned.replace(/\\n{3,}/g, '\\n\\n');\r\n\r\n return cleaned.trim();\r\n }\r\n\r\n /**\r\n * Parse code block (```)\r\n */\r\n private parseCodeBlock(lines: string[], startIndex: number): { element: ParsedElement; endIndex: number } | null {\r\n const firstLine = lines[startIndex].trim();\r\n if (!firstLine.startsWith('```')) return null;\r\n\r\n const language = firstLine.slice(3).trim() || 'text';\r\n let code = '';\r\n let endIndex = startIndex + 1;\r\n\r\n while (endIndex < lines.length) {\r\n if (lines[endIndex].trim().startsWith('```')) {\r\n break;\r\n }\r\n code += lines[endIndex] + '\\n';\r\n endIndex++;\r\n }\r\n\r\n return {\r\n element: {\r\n type: 'code-block',\r\n content: code.trimEnd(),\r\n language,\r\n },\r\n endIndex: endIndex + 1,\r\n };\r\n }\r\n\r\n /**\r\n * Parse heading (# ## ### etc.)\r\n */\r\n private parseHeading(line: string): ParsedElement | null {\r\n const match = line.match(/^(#{1,6})\\s+(.+)$/);\r\n if (!match) return null;\r\n\r\n return {\r\n type: 'heading',\r\n content: match[2].trim(),\r\n level: match[1].length,\r\n children: this.parseInlineElements(match[2].trim()),\r\n };\r\n }\r\n\r\n /**\r\n * Check if line is horizontal rule\r\n */\r\n private isHorizontalRule(line: string): boolean {\r\n const trimmed = line.trim();\r\n return /^(-{3,}|_{3,}|\\*{3,})$/.test(trimmed);\r\n }\r\n\r\n /**\r\n * Parse blockquote\r\n */\r\n private parseBlockquote(line: string): ParsedElement {\r\n const content = line.replace(/^\\s*>\\s?/, '');\r\n return {\r\n type: 'blockquote',\r\n content,\r\n children: this.parseInlineElements(content),\r\n };\r\n }\r\n\r\n /**\r\n * Parse ordered list item\r\n */\r\n private parseOrderedListItem(line: string): ParsedElement | null {\r\n const match = line.match(/^(\\s*)(\\d+)\\.\\s+(.+)$/);\r\n if (!match) return null;\r\n\r\n const indent = match[1].length;\r\n const index = parseInt(match[2], 10);\r\n const content = match[3];\r\n\r\n return {\r\n type: 'list-item',\r\n content,\r\n ordered: true,\r\n index,\r\n level: Math.floor(indent / 2),\r\n children: this.parseInlineElements(content),\r\n };\r\n }\r\n\r\n /**\r\n * Parse unordered list item\r\n */\r\n private parseUnorderedListItem(line: string): ParsedElement | null {\r\n const match = line.match(/^(\\s*)[-*+]\\s+(.+)$/);\r\n if (!match) return null;\r\n\r\n const indent = match[1].length;\r\n const content = match[2];\r\n\r\n return {\r\n type: 'list-item',\r\n content,\r\n ordered: false,\r\n level: Math.floor(indent / 2),\r\n children: this.parseInlineElements(content),\r\n };\r\n }\r\n\r\n /**\r\n * Parse inline formatting (bold, italic, code, links)\r\n */\r\n private parseInlineFormatting(text: string): ParsedElement {\r\n return {\r\n type: 'text',\r\n content: text,\r\n children: this.parseInlineElements(text),\r\n };\r\n }\r\n\r\n /**\r\n * Parse inline elements within text\r\n */\r\n private parseInlineElements(text: string): ParsedElement[] {\r\n const elements: ParsedElement[] = [];\r\n let currentPos = 0;\r\n\r\n // Patterns for inline formatting\r\n // IMPORTANT: Bold (**) must come before italic (*) to match correctly\r\n // NOTE: Underscore patterns require word boundaries to avoid matching file paths like cli_ai_tool\r\n const patterns = [\r\n { regex: /\\*\\*([^\\*]+?)\\*\\*/g, type: 'bold' as const },\r\n { regex: /(?<![a-zA-Z0-9])__([^_]+?)__(?![a-zA-Z0-9])/g, type: 'bold' as const },\r\n { regex: /\\*([^\\*]+?)\\*/g, type: 'italic' as const },\r\n // Only match _text_ when underscores are NOT surrounded by alphanumeric chars (word boundaries)\r\n { regex: /(?<![a-zA-Z0-9_])_([^_]+?)_(?![a-zA-Z0-9_])/g, type: 'italic' as const },\r\n { regex: /`([^`]+?)`/g, type: 'code-inline' as const },\r\n { regex: /\\[(.+?)\\]\\((.+?)\\)/g, type: 'link' as const },\r\n ];\r\n\r\n // Find all matches\r\n const matches: Array<{ start: number; end: number; type: string; content: string; url?: string }> = [];\r\n\r\n for (const pattern of patterns) {\r\n pattern.regex.lastIndex = 0;\r\n let match;\r\n while ((match = pattern.regex.exec(text)) !== null) {\r\n if (pattern.type === 'link') {\r\n matches.push({\r\n start: match.index,\r\n end: match.index + match[0].length,\r\n type: pattern.type,\r\n content: match[1],\r\n url: match[2],\r\n });\r\n } else {\r\n matches.push({\r\n start: match.index,\r\n end: match.index + match[0].length,\r\n type: pattern.type,\r\n content: match[1],\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Sort by position\r\n matches.sort((a, b) => a.start - b.start);\r\n\r\n // Remove overlapping matches (keep first one)\r\n const filteredMatches: typeof matches = [];\r\n let lastEnd = 0;\r\n for (const match of matches) {\r\n if (match.start >= lastEnd) {\r\n filteredMatches.push(match);\r\n lastEnd = match.end;\r\n }\r\n }\r\n\r\n // Build elements\r\n currentPos = 0;\r\n for (const match of filteredMatches) {\r\n // Add plain text before match\r\n if (match.start > currentPos) {\r\n const plainText = text.slice(currentPos, match.start);\r\n if (plainText) {\r\n elements.push({ type: 'text', content: plainText });\r\n }\r\n }\r\n\r\n // Add formatted element\r\n if (match.type === 'link') {\r\n elements.push({\r\n type: 'link',\r\n content: `${match.content} (${match.url})`,\r\n });\r\n } else {\r\n elements.push({\r\n type: match.type as any,\r\n content: match.content,\r\n });\r\n }\r\n\r\n currentPos = match.end;\r\n }\r\n\r\n // Add remaining text\r\n if (currentPos < text.length) {\r\n const remaining = text.slice(currentPos);\r\n if (remaining) {\r\n elements.push({ type: 'text', content: remaining });\r\n }\r\n }\r\n\r\n return elements.length > 0 ? elements : [{ type: 'text', content: text }];\r\n }\r\n\r\n /**\r\n * Merge adjacent text elements\r\n */\r\n private mergeAdjacentText(elements: ParsedElement[]): ParsedElement[] {\r\n const merged: ParsedElement[] = [];\r\n\r\n for (let i = 0; i < elements.length; i++) {\r\n const current = elements[i];\r\n\r\n if (merged.length === 0) {\r\n merged.push(current);\r\n continue;\r\n }\r\n\r\n const last = merged[merged.length - 1];\r\n\r\n // Merge consecutive text elements without formatting\r\n if (\r\n last.type === 'text' &&\r\n current.type === 'text' &&\r\n (!last.children || last.children.length === 0) &&\r\n (!current.children || current.children.length === 0)\r\n ) {\r\n last.content += ' ' + current.content;\r\n } else {\r\n merged.push(current);\r\n }\r\n }\r\n\r\n return merged;\r\n }\r\n}\r\n\r\n/**\r\n * Utility to wrap text to a specific width\r\n */\r\nexport function wrapText(text: string, maxWidth: number, indent: number = 0): string[] {\r\n const words = text.split(/\\s+/);\r\n const lines: string[] = [];\r\n let currentLine = '';\r\n const indentStr = ' '.repeat(indent);\r\n const effectiveWidth = maxWidth - indent;\r\n\r\n for (const word of words) {\r\n const testLine = currentLine ? `${currentLine} ${word}` : word;\r\n\r\n if (testLine.length <= effectiveWidth) {\r\n currentLine = testLine;\r\n } else {\r\n if (currentLine) {\r\n lines.push(indentStr + currentLine);\r\n }\r\n currentLine = word;\r\n }\r\n }\r\n\r\n if (currentLine) {\r\n lines.push(indentStr + currentLine);\r\n }\r\n\r\n return lines.length > 0 ? lines : [indentStr];\r\n}\r\n"],"mappings":"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","names":[]}