centaurus-cli 3.0.1 → 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 -5158
  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 +1526 -1512
  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 +601 -572
  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 -406
  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 -3263
  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 -514
  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 -204
  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 +1 @@
1
- {"version":3,"file":"syntax-checker.js","sourceRoot":"","sources":["../../src/utils/syntax-checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/syntax-checker.ts"],"sourcesContent":["import * as vm from 'vm';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\nimport { spawn } from 'child_process';\r\nimport * as ts from 'typescript';\r\n\r\n/**\r\n * Result of a syntax check operation\r\n */\r\nexport interface SyntaxCheckResult {\r\n success: boolean;\r\n language: string;\r\n error?: string;\r\n skipped?: boolean;\r\n skipReason?: string;\r\n}\r\n\r\n/**\r\n * File extension to language mapping\r\n */\r\nconst LANGUAGE_MAP: Record<string, string> = {\r\n // JavaScript\r\n '.js': 'javascript',\r\n '.mjs': 'javascript',\r\n '.cjs': 'javascript',\r\n '.jsx': 'javascript',\r\n\r\n // TypeScript\r\n '.ts': 'typescript',\r\n '.tsx': 'typescript',\r\n '.mts': 'typescript',\r\n '.cts': 'typescript',\r\n\r\n // Python\r\n '.py': 'python',\r\n '.pyw': 'python',\r\n\r\n // JSON\r\n '.json': 'json',\r\n '.jsonc': 'json',\r\n\r\n // Skip syntax checking for these (text/markup/config)\r\n '.txt': 'text',\r\n '.md': 'markdown',\r\n '.markdown': 'markdown',\r\n '.log': 'log',\r\n '.csv': 'csv',\r\n '.html': 'html',\r\n '.htm': 'html',\r\n '.css': 'css',\r\n '.scss': 'scss',\r\n '.sass': 'sass',\r\n '.less': 'less',\r\n '.xml': 'xml',\r\n '.yaml': 'yaml',\r\n '.yml': 'yaml',\r\n '.toml': 'toml',\r\n '.ini': 'ini',\r\n '.cfg': 'config',\r\n '.conf': 'config',\r\n '.env': 'env',\r\n '.gitignore': 'gitignore',\r\n '.dockerignore': 'dockerignore',\r\n '.editorconfig': 'config',\r\n '.prettierrc': 'config',\r\n '.eslintrc': 'config',\r\n '.babelrc': 'config',\r\n};\r\n\r\n/**\r\n * Languages that should skip syntax checking\r\n */\r\nconst SKIP_SYNTAX_CHECK = new Set([\r\n 'text',\r\n 'markdown',\r\n 'log',\r\n 'csv',\r\n 'html',\r\n 'css',\r\n 'scss',\r\n 'sass',\r\n 'less',\r\n 'xml',\r\n 'yaml',\r\n 'toml',\r\n 'ini',\r\n 'config',\r\n 'env',\r\n 'gitignore',\r\n 'dockerignore',\r\n]);\r\n\r\n/**\r\n * Detect language from file path\r\n */\r\nexport function detectLanguage(filePath: string): string {\r\n const ext = path.extname(filePath).toLowerCase();\r\n const basename = path.basename(filePath).toLowerCase();\r\n\r\n // Check for special filenames without extensions\r\n if (!ext) {\r\n // Common config files without extensions\r\n if (basename === 'dockerfile') return 'dockerfile';\r\n if (basename === 'makefile') return 'makefile';\r\n if (basename === '.gitignore') return 'gitignore';\r\n if (basename === '.dockerignore') return 'dockerignore';\r\n if (basename === '.env') return 'env';\r\n return 'unknown';\r\n }\r\n\r\n return LANGUAGE_MAP[ext] || 'unknown';\r\n}\r\n\r\n/**\r\n * Check JavaScript syntax using vm.Script\r\n */\r\nfunction checkJavaScriptSyntax(content: string): SyntaxCheckResult {\r\n try {\r\n // Use vm.Script to parse and check syntax without execution\r\n new vm.Script(content, { filename: 'syntax-check.js' });\r\n return {\r\n success: true,\r\n language: 'JavaScript',\r\n };\r\n } catch (error) {\r\n const err = error as Error;\r\n return {\r\n success: false,\r\n language: 'JavaScript',\r\n error: err.message,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check TypeScript syntax using the TypeScript compiler API\r\n */\r\nfunction checkTypeScriptSyntax(content: string, filePath: string): SyntaxCheckResult {\r\n try {\r\n const isTsx = filePath.endsWith('.tsx');\r\n const compilerOptions: ts.CompilerOptions = {\r\n noEmit: true,\r\n target: ts.ScriptTarget.ESNext,\r\n module: ts.ModuleKind.ESNext,\r\n jsx: isTsx ? ts.JsxEmit.React : undefined,\r\n strict: false, // Don't enforce strict mode for syntax checking\r\n skipLibCheck: true,\r\n allowJs: true,\r\n };\r\n\r\n // Create a simple in-memory source file\r\n const sourceFile = ts.createSourceFile(\r\n filePath,\r\n content,\r\n ts.ScriptTarget.ESNext,\r\n true,\r\n isTsx ? ts.ScriptKind.TSX : ts.ScriptKind.TS\r\n );\r\n\r\n // Check for parse errors (syntax errors)\r\n const parseErrors: string[] = [];\r\n\r\n // Walk through the source file to find syntax errors\r\n // TypeScript's createSourceFile doesn't throw on syntax errors,\r\n // but we can check for diagnostic messages\r\n const parseDiagnostics = (sourceFile as any).parseDiagnostics;\r\n if (parseDiagnostics && parseDiagnostics.length > 0) {\r\n for (const diag of parseDiagnostics) {\r\n const message = ts.flattenDiagnosticMessageText(diag.messageText, '\\n');\r\n const lineAndChar = sourceFile.getLineAndCharacterOfPosition(diag.start || 0);\r\n parseErrors.push(`Line ${lineAndChar.line + 1}: ${message}`);\r\n }\r\n }\r\n\r\n if (parseErrors.length > 0) {\r\n return {\r\n success: false,\r\n language: 'TypeScript',\r\n error: parseErrors.join('\\n'),\r\n };\r\n }\r\n\r\n return {\r\n success: true,\r\n language: 'TypeScript',\r\n };\r\n } catch (error) {\r\n const err = error as Error;\r\n return {\r\n success: false,\r\n language: 'TypeScript',\r\n error: err.message,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check Python syntax using the py_compile module\r\n */\r\nasync function checkPythonSyntax(filePath: string): Promise<SyntaxCheckResult> {\r\n return new Promise((resolve) => {\r\n // Use python -m py_compile to check syntax\r\n const pythonCommands = process.platform === 'win32'\r\n ? ['python', 'python3', 'py']\r\n : ['python3', 'python'];\r\n\r\n let attemptIndex = 0;\r\n\r\n const tryNextCommand = () => {\r\n if (attemptIndex >= pythonCommands.length) {\r\n // No Python found\r\n resolve({\r\n success: true,\r\n language: 'Python',\r\n skipped: true,\r\n skipReason: 'Python interpreter not found. Syntax check skipped.',\r\n });\r\n return;\r\n }\r\n\r\n const pythonCmd = pythonCommands[attemptIndex];\r\n attemptIndex++;\r\n\r\n const proc = spawn(pythonCmd, ['-m', 'py_compile', filePath], {\r\n stdio: ['pipe', 'pipe', 'pipe'],\r\n timeout: 5000, // 5 second timeout\r\n });\r\n\r\n // Close stdin to prevent hanging if python expects input\r\n proc.stdin.end();\r\n\r\n let stderr = '';\r\n let timeoutTriggered = false;\r\n\r\n // Enforce hard timeout and SIGKILL if it hangs\r\n const timeoutTimer = setTimeout(() => {\r\n timeoutTriggered = true;\r\n proc.kill('SIGKILL');\r\n }, 5000);\r\n\r\n proc.stderr.on('data', (data) => {\r\n stderr += data.toString();\r\n });\r\n\r\n proc.on('error', () => {\r\n clearTimeout(timeoutTimer);\r\n if (timeoutTriggered) {\r\n resolve({\r\n success: false,\r\n language: 'Python',\r\n error: 'Syntax check timed out after 5 seconds',\r\n });\r\n return;\r\n }\r\n // This python command failed, try next\r\n tryNextCommand();\r\n });\r\n\r\n proc.on('close', (code) => {\r\n clearTimeout(timeoutTimer);\r\n\r\n if (timeoutTriggered) {\r\n resolve({\r\n success: false,\r\n language: 'Python',\r\n error: 'Syntax check timed out after 5 seconds',\r\n });\r\n return;\r\n }\r\n\r\n if (code === 0) {\r\n resolve({\r\n success: true,\r\n language: 'Python',\r\n });\r\n } else {\r\n // Parse the error message\r\n const errorLines = stderr.trim().split('\\n');\r\n const relevantError = errorLines.length > 0\r\n ? errorLines[errorLines.length - 1]\r\n : 'Syntax error detected';\r\n\r\n resolve({\r\n success: false,\r\n language: 'Python',\r\n error: relevantError,\r\n });\r\n }\r\n });\r\n };\r\n\r\n tryNextCommand();\r\n });\r\n}\r\n\r\n/**\r\n * Check JSON syntax using JSON.parse\r\n */\r\nfunction checkJsonSyntax(content: string): SyntaxCheckResult {\r\n try {\r\n JSON.parse(content);\r\n return {\r\n success: true,\r\n language: 'JSON',\r\n };\r\n } catch (error) {\r\n const err = error as SyntaxError;\r\n return {\r\n success: false,\r\n language: 'JSON',\r\n error: err.message,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Main syntax check function\r\n * Checks the syntax of a file based on its extension\r\n */\r\nexport async function checkSyntax(filePath: string, content?: string): Promise<SyntaxCheckResult> {\r\n const language = detectLanguage(filePath);\r\n\r\n // Skip syntax checking for text/config files\r\n if (SKIP_SYNTAX_CHECK.has(language)) {\r\n return {\r\n success: true,\r\n language: language.charAt(0).toUpperCase() + language.slice(1),\r\n skipped: true,\r\n skipReason: `Syntax check skipped for ${language} files`,\r\n };\r\n }\r\n\r\n // Skip unknown file types\r\n if (language === 'unknown') {\r\n return {\r\n success: true,\r\n language: 'Unknown',\r\n skipped: true,\r\n skipReason: 'Syntax check skipped for unknown file type',\r\n };\r\n }\r\n\r\n // Read content from file if not provided\r\n let fileContent = content;\r\n if (!fileContent) {\r\n try {\r\n fileContent = fs.readFileSync(filePath, 'utf-8');\r\n } catch (error) {\r\n return {\r\n success: true,\r\n language: language.charAt(0).toUpperCase() + language.slice(1),\r\n skipped: true,\r\n skipReason: 'Could not read file for syntax check',\r\n };\r\n }\r\n }\r\n\r\n // Perform language-specific syntax check\r\n switch (language) {\r\n case 'javascript':\r\n return checkJavaScriptSyntax(fileContent);\r\n\r\n case 'typescript':\r\n return checkTypeScriptSyntax(fileContent, filePath);\r\n\r\n case 'python':\r\n // Python requires the file to be on disk for py_compile\r\n return await checkPythonSyntax(filePath);\r\n\r\n case 'json':\r\n return checkJsonSyntax(fileContent);\r\n\r\n default:\r\n return {\r\n success: true,\r\n language: language.charAt(0).toUpperCase() + language.slice(1),\r\n skipped: true,\r\n skipReason: `Syntax check not implemented for ${language}`,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Format syntax check result as a human-readable string\r\n */\r\nexport function formatSyntaxCheckResult(result: SyntaxCheckResult): string {\r\n if (result.skipped) {\r\n return `(${result.skipReason})`;\r\n }\r\n\r\n if (result.success) {\r\n return `✓ Syntax check passed (${result.language})`;\r\n }\r\n\r\n return `✗ Syntax error (${result.language}): ${result.error}`;\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1,313 +1,210 @@
1
- /**
2
- * Utility for processing terminal output with proper carriage return handling.
3
- *
4
- * When commands output text with \r (carriage return), it means "go back to the start
5
- * of the line" - used for spinners, progress bars, and other dynamic output.
6
- *
7
- * This module provides functions to correctly process such output so that only the
8
- * final rendered state is preserved (not intermediate states that should be overwritten).
9
- */
10
- /**
11
- * Process terminal output to properly handle carriage returns and ANSI sequences.
12
- *
13
- * This function simulates how a terminal would render the output:
14
- * - \r (carriage return) moves cursor to the start of the line
15
- * - \x1b[H (cursor home) also moves cursor to start - PTY uses this instead of \r
16
- * - Subsequent text overwrites from the beginning
17
- * - ANSI cursor sequences are handled appropriately
18
- *
19
- * @param raw - Raw terminal output with potential \r and ANSI sequences
20
- * @returns Processed output with only the final rendered state
21
- */
22
- export function processTerminalOutput(raw, options) {
23
- if (!raw)
24
- return '';
25
- const SCREEN_ROWS = 500;
26
- const MAX_CURSOR_ROW = 10000;
27
- const MAX_CURSOR_COL = 1000;
28
- // const SCREEN_COLS = 200; // Dynamic columns not needed for array-based storage
29
- // Initialize screen buffer - array of arrays of Cells
30
- // We use a sparse approach: rows are created as needed
31
- const screen = [];
32
- // Ensure initial rows exist
33
- for (let i = 0; i < SCREEN_ROWS; i++) {
34
- screen[i] = [];
35
- }
36
- let cursorRow = 0;
37
- let cursorCol = 0;
38
- let maxRowUsed = 0;
39
- let currentStyle = ''; // Current accumulated ANSI style sequence
40
- // Pre-processing: Strip only non-SGR sequences that we don't handle
41
- // We keep \x1b[...m (SGR) for colors
42
- let input = raw
43
- // OSC sequences (\x1b] ... \x07 or \x1b\) - Robustly consume until terminator
44
- .replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, '')
45
- // Character set designations (e.g. \x1b(0)
46
- .replace(/\x1b[()#][0-9A-Za-z]/g, '')
47
- // BEL and Form Feed (ignore for layout)
48
- .replace(/\x07/g, '')
49
- .replace(/\x0C/g, '')
50
- // DEL
51
- .replace(/\x7F/g, '');
52
- let i = 0;
53
- while (i < input.length) {
54
- // Check for escape sequences
55
- if (input[i] === '\x1b') {
56
- // Check for CSI sequence: ESC [
57
- if (i + 1 < input.length && input[i + 1] === '[') {
58
- let j = i + 2;
59
- // 1. Parameter Bytes (0x30-0x3F): 0-9:;<=>?
60
- // These includes digits, semicolons, and private mode markers like ? and >
61
- let params = '';
62
- while (j < input.length && input.charCodeAt(j) >= 0x30 && input.charCodeAt(j) <= 0x3F) {
63
- params += input[j];
64
- j++;
65
- }
66
- // 2. Intermediate Bytes (0x20-0x2F): !"#$%&'()*+,-./
67
- while (j < input.length && input.charCodeAt(j) >= 0x20 && input.charCodeAt(j) <= 0x2F) {
68
- // We consume but ignore intermediates for now as we don't support them
69
- j++;
1
+ function processTerminalOutput(raw, options) {
2
+ if (!raw) return "";
3
+ const SCREEN_ROWS = 500;
4
+ const MAX_CURSOR_ROW = 1e4;
5
+ const MAX_CURSOR_COL = 1e3;
6
+ const screen = [];
7
+ for (let i2 = 0; i2 < SCREEN_ROWS; i2++) {
8
+ screen[i2] = [];
9
+ }
10
+ let cursorRow = 0;
11
+ let cursorCol = 0;
12
+ let maxRowUsed = 0;
13
+ let currentStyle = "";
14
+ let input = raw.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, "").replace(/\x1b[()#][0-9A-Za-z]/g, "").replace(/\x07/g, "").replace(/\x0C/g, "").replace(/\x7F/g, "");
15
+ let i = 0;
16
+ while (i < input.length) {
17
+ if (input[i] === "\x1B") {
18
+ if (i + 1 < input.length && input[i + 1] === "[") {
19
+ let j = i + 2;
20
+ let params = "";
21
+ while (j < input.length && input.charCodeAt(j) >= 48 && input.charCodeAt(j) <= 63) {
22
+ params += input[j];
23
+ j++;
24
+ }
25
+ while (j < input.length && input.charCodeAt(j) >= 32 && input.charCodeAt(j) <= 47) {
26
+ j++;
27
+ }
28
+ if (j < input.length && input.charCodeAt(j) >= 64 && input.charCodeAt(j) <= 126) {
29
+ const cmd = input[j];
30
+ const cleanParams = params.replace(/[<>=?]/g, "");
31
+ const numbers = cleanParams.split(";").map((s) => parseInt(s) || 0);
32
+ const n = numbers[0] || 1;
33
+ const m = numbers[1] || 1;
34
+ switch (cmd) {
35
+ case "m":
36
+ if (params === "" || params === "0" || cleanParams === "0" && numbers.length === 1) {
37
+ currentStyle = "";
38
+ } else {
39
+ if (numbers.includes(0)) {
40
+ currentStyle = `\x1B[${cleanParams}m`;
41
+ } else {
42
+ currentStyle += `\x1B[${cleanParams}m`;
70
43
  }
71
- // 3. Final Byte (0x40-0x7E): @A-Z[\]^_`a-z{|}~
72
- if (j < input.length && input.charCodeAt(j) >= 0x40 && input.charCodeAt(j) <= 0x7E) {
73
- const cmd = input[j];
74
- // Parse parameters only if they exist and aren't just private markers
75
- // We filter out ?, > etc for the numeric splitting to avoid NaN
76
- // but keep them in 'params' string for detection if needed.
77
- const cleanParams = params.replace(/[<>=?]/g, '');
78
- const numbers = cleanParams.split(';').map(s => parseInt(s) || 0);
79
- // Default to 1 if missing, for most commands (1-based)
80
- const n = numbers[0] || 1;
81
- const m = numbers[1] || 1;
82
- // Handle supported commands
83
- switch (cmd) {
84
- case 'm': // SGR - Select Graphic Rendition (Colors)
85
- if (params === '' || params === '0' || (cleanParams === '0' && numbers.length === 1)) {
86
- currentStyle = ''; // Reset
87
- }
88
- else {
89
- // Add to current style.
90
- // Ideally we should be smarter about merging, but appending works.
91
- if (numbers.includes(0)) {
92
- // If sequence contains reset (e.g. 0;1;31), we treat it as reset + others.
93
- // For simplicity, we just take the whole sequence as the new style
94
- // since it usually starts with 0 if 0 is present.
95
- currentStyle = `\x1b[${cleanParams}m`;
96
- }
97
- else {
98
- currentStyle += `\x1b[${cleanParams}m`;
99
- }
100
- }
101
- break;
102
- case 'H': // CUP - Cursor Position
103
- case 'f': // HVP - Horizontal and Vertical Position
104
- // Defaults are 1,1
105
- cursorRow = Math.min(MAX_CURSOR_ROW, Math.max(0, (numbers[0] || 1) - 1));
106
- cursorCol = Math.min(MAX_CURSOR_COL, Math.max(0, (numbers[1] || 1) - 1));
107
- break;
108
- case 'A': // CUU - Cursor Up
109
- cursorRow = Math.max(0, cursorRow - n);
110
- break;
111
- case 'B': // CUD - Cursor Down
112
- case 'e': // VPR - Vertical Position Relative
113
- cursorRow = Math.min(MAX_CURSOR_ROW, cursorRow + n);
114
- break;
115
- case 'C': // CUF - Cursor Forward
116
- case 'a': // HPR - Horizontal Position Relative
117
- cursorCol = Math.min(MAX_CURSOR_COL, cursorCol + n);
118
- break;
119
- case 'D': // CUB - Cursor Back
120
- cursorCol = Math.max(0, cursorCol - n);
121
- break;
122
- case 'E': // CNL - Cursor Next Line
123
- cursorRow = Math.min(MAX_CURSOR_ROW, cursorRow + n);
124
- cursorCol = 0;
125
- break;
126
- case 'F': // CPL - Cursor Preceding Line
127
- cursorRow = Math.max(0, cursorRow - n);
128
- cursorCol = 0;
129
- break;
130
- case 'G': // CHA - Cursor Horizontal Absolute
131
- cursorCol = Math.min(MAX_CURSOR_COL, Math.max(0, n - 1));
132
- break;
133
- case 'd': // VPA - Vertical Position Absolute
134
- cursorRow = Math.min(MAX_CURSOR_ROW, Math.max(0, n - 1));
135
- break;
136
- case 'K': // EL - Erase in Line
137
- {
138
- const mode = numbers[0] || 0;
139
- if (!screen[cursorRow])
140
- screen[cursorRow] = [];
141
- if (mode === 0) { // Cursor to end
142
- screen[cursorRow].splice(cursorCol);
143
- }
144
- else if (mode === 1) { // Start to cursor
145
- for (let k = 0; k <= cursorCol; k++) {
146
- if (k < screen[cursorRow].length) {
147
- screen[cursorRow][k] = { char: ' ', style: '' };
148
- }
149
- }
150
- }
151
- else if (mode === 2) { // Entire line
152
- screen[cursorRow] = [];
153
- }
154
- }
155
- break;
156
- case 'J': // ED - Erase in Display
157
- {
158
- const mode = numbers[0] || 0;
159
- if (mode === 0) {
160
- // Erase from cursor to end of display
161
- if (screen[cursorRow])
162
- screen[cursorRow].splice(cursorCol);
163
- for (let r = cursorRow + 1; r <= maxRowUsed; r++) {
164
- screen[r] = [];
165
- }
166
- maxRowUsed = cursorRow;
167
- }
168
- else if (mode === 1) {
169
- // Erase from start of display to cursor
170
- for (let r = 0; r < cursorRow; r++) {
171
- screen[r] = [];
172
- }
173
- if (screen[cursorRow]) {
174
- for (let c = 0; c <= cursorCol; c++) {
175
- if (c < screen[cursorRow].length) {
176
- screen[cursorRow][c] = { char: ' ', style: '' };
177
- }
178
- }
179
- }
180
- }
181
- else if (mode === 2 || mode === 3) {
182
- // Erase entire display (2) or erase display + scrollback (3)
183
- for (let r = 0; r <= maxRowUsed; r++) {
184
- screen[r] = [];
185
- }
186
- maxRowUsed = cursorRow;
187
- }
188
- }
189
- break;
190
- // P (DCH), @ (ICH), L (IL), M (DL) - Delete/Insert characters/lines
191
- // These are complex to implement fully for a buffer-based approach without strict bounds.
192
- // For now we ignore them to avoid corruption, or we could implement simple versions.
193
- default:
194
- // Unknown command, we just consume it (which is the fix for the bug!)
195
- break;
44
+ }
45
+ break;
46
+ case "H":
47
+ // CUP - Cursor Position
48
+ case "f":
49
+ cursorRow = Math.min(MAX_CURSOR_ROW, Math.max(0, (numbers[0] || 1) - 1));
50
+ cursorCol = Math.min(MAX_CURSOR_COL, Math.max(0, (numbers[1] || 1) - 1));
51
+ break;
52
+ case "A":
53
+ cursorRow = Math.max(0, cursorRow - n);
54
+ break;
55
+ case "B":
56
+ // CUD - Cursor Down
57
+ case "e":
58
+ cursorRow = Math.min(MAX_CURSOR_ROW, cursorRow + n);
59
+ break;
60
+ case "C":
61
+ // CUF - Cursor Forward
62
+ case "a":
63
+ cursorCol = Math.min(MAX_CURSOR_COL, cursorCol + n);
64
+ break;
65
+ case "D":
66
+ cursorCol = Math.max(0, cursorCol - n);
67
+ break;
68
+ case "E":
69
+ cursorRow = Math.min(MAX_CURSOR_ROW, cursorRow + n);
70
+ cursorCol = 0;
71
+ break;
72
+ case "F":
73
+ cursorRow = Math.max(0, cursorRow - n);
74
+ cursorCol = 0;
75
+ break;
76
+ case "G":
77
+ cursorCol = Math.min(MAX_CURSOR_COL, Math.max(0, n - 1));
78
+ break;
79
+ case "d":
80
+ cursorRow = Math.min(MAX_CURSOR_ROW, Math.max(0, n - 1));
81
+ break;
82
+ case "K":
83
+ {
84
+ const mode = numbers[0] || 0;
85
+ if (!screen[cursorRow]) screen[cursorRow] = [];
86
+ if (mode === 0) {
87
+ screen[cursorRow].splice(cursorCol);
88
+ } else if (mode === 1) {
89
+ for (let k = 0; k <= cursorCol; k++) {
90
+ if (k < screen[cursorRow].length) {
91
+ screen[cursorRow][k] = { char: " ", style: "" };
196
92
  }
197
- // Move past the final byte
198
- i = j + 1;
199
- continue;
93
+ }
94
+ } else if (mode === 2) {
95
+ screen[cursorRow] = [];
200
96
  }
201
- else {
202
- // Malformed CSI, treat as plain text if no final byte found?
203
- // Or just consume what we found?
204
- // ECMA-48 says if it doesn't end with 0x40-0x7E it's not a valid CSI?
205
- // But in practice we should probably just treat ESC as a char if not valid.
97
+ }
98
+ break;
99
+ case "J":
100
+ {
101
+ const mode = numbers[0] || 0;
102
+ if (mode === 0) {
103
+ if (screen[cursorRow]) screen[cursorRow].splice(cursorCol);
104
+ for (let r = cursorRow + 1; r <= maxRowUsed; r++) {
105
+ screen[r] = [];
106
+ }
107
+ maxRowUsed = cursorRow;
108
+ } else if (mode === 1) {
109
+ for (let r = 0; r < cursorRow; r++) {
110
+ screen[r] = [];
111
+ }
112
+ if (screen[cursorRow]) {
113
+ for (let c = 0; c <= cursorCol; c++) {
114
+ if (c < screen[cursorRow].length) {
115
+ screen[cursorRow][c] = { char: " ", style: "" };
116
+ }
117
+ }
118
+ }
119
+ } else if (mode === 2 || mode === 3) {
120
+ for (let r = 0; r <= maxRowUsed; r++) {
121
+ screen[r] = [];
122
+ }
123
+ maxRowUsed = cursorRow;
206
124
  }
207
- }
208
- // Check for simple ESC sequences (ESC X)
209
- // e.g. ESC 7 (Save Cursor), ESC 8 (Restore Cursor), ESC M (Reverse Index)
210
- else if (i + 1 < input.length) {
211
- // Simple 2-char escape
212
- const next = input[i + 1];
213
- // If it is [ it is CSI (handled above)
214
- // If not, we might want to handle some.
215
- // However, the main bug is CSI parsing.
216
- // Let's not be too aggressive with consuming other escapes unless we distinguish them.
217
- // Valid simple escapes are usually 0x30-0x7E.
218
- }
219
- }
220
- const char = input[i];
221
- if (char === '\r') {
222
- cursorCol = 0;
223
- }
224
- else if (char === '\n') {
225
- cursorRow++;
226
- cursorCol = 0;
227
- }
228
- else if (char === '\x08') { // Backspace
229
- if (cursorCol > 0)
230
- cursorCol--;
231
- }
232
- else if (char === '\t') {
233
- cursorCol = Math.min(MAX_CURSOR_COL, Math.floor(cursorCol / 8 + 1) * 8);
234
- }
235
- else if (char >= ' ' || char === '\x00') {
236
- if (char === '\x00') {
237
- i++;
238
- continue;
239
- }
240
- // Ensure row exists
241
- while (cursorRow >= screen.length) {
242
- screen.push([]);
243
- }
244
- if (!screen[cursorRow])
245
- screen[cursorRow] = [];
246
- // Pad with spaces if needed
247
- while (screen[cursorRow].length < cursorCol) {
248
- screen[cursorRow].push({ char: ' ', style: '' });
249
- }
250
- // Write cell with current style
251
- screen[cursorRow][cursorCol] = { char: char, style: currentStyle };
252
- cursorCol++;
253
- if (cursorRow > maxRowUsed)
254
- maxRowUsed = cursorRow;
125
+ }
126
+ break;
127
+ // P (DCH), @ (ICH), L (IL), M (DL) - Delete/Insert characters/lines
128
+ // These are complex to implement fully for a buffer-based approach without strict bounds.
129
+ // For now we ignore them to avoid corruption, or we could implement simple versions.
130
+ default:
131
+ break;
132
+ }
133
+ i = j + 1;
134
+ continue;
135
+ } else {
255
136
  }
137
+ } else if (i + 1 < input.length) {
138
+ const next = input[i + 1];
139
+ }
140
+ }
141
+ const char = input[i];
142
+ if (char === "\r") {
143
+ cursorCol = 0;
144
+ } else if (char === "\n") {
145
+ cursorRow++;
146
+ cursorCol = 0;
147
+ } else if (char === "\b") {
148
+ if (cursorCol > 0) cursorCol--;
149
+ } else if (char === " ") {
150
+ cursorCol = Math.min(MAX_CURSOR_COL, Math.floor(cursorCol / 8 + 1) * 8);
151
+ } else if (char >= " " || char === "\0") {
152
+ if (char === "\0") {
256
153
  i++;
154
+ continue;
155
+ }
156
+ while (cursorRow >= screen.length) {
157
+ screen.push([]);
158
+ }
159
+ if (!screen[cursorRow]) screen[cursorRow] = [];
160
+ while (screen[cursorRow].length < cursorCol) {
161
+ screen[cursorRow].push({ char: " ", style: "" });
162
+ }
163
+ screen[cursorRow][cursorCol] = { char, style: currentStyle };
164
+ cursorCol++;
165
+ if (cursorRow > maxRowUsed) maxRowUsed = cursorRow;
257
166
  }
258
- // ... (previous code)
259
- // Render to string with optimization
260
- const outputLines = [];
261
- let lastRenderedStyle = '';
262
- for (let row = 0; row <= maxRowUsed; row++) {
263
- let lineStr = '';
264
- const rowCells = screen[row] || [];
265
- // Ensure we process up to cursor column if this is the cursor row
266
- // This ensures the cursor is drawn even if it's past the end of text
267
- const effectiveLength = (options?.highlightCursor && row === cursorRow)
268
- ? Math.max(rowCells.length, cursorCol + 1)
269
- : rowCells.length;
270
- for (let col = 0; col < effectiveLength; col++) {
271
- let cell = rowCells[col] || { char: ' ', style: '' };
272
- // Apply cursor highlighting
273
- if (options?.highlightCursor && row === cursorRow && col === cursorCol) {
274
- // Invert colors for cursor
275
- // Standard ANSI invert is 7
276
- // We append it to the current style
277
- // If style is empty, it becomes \x1b[7m
278
- // If style is \x1b[31m, it becomes \x1b[31m\x1b[7m
279
- // We create a temporary cell for rendering
280
- cell = {
281
- char: cell.char || ' ', // Ensure visible char for cursor block
282
- style: cell.style + '\x1b[7m'
283
- };
284
- }
285
- // If style changed, emit ANSI code
286
- if (cell.style !== lastRenderedStyle) {
287
- if (cell.style === '') {
288
- lineStr += '\x1b[0m';
289
- }
290
- else {
291
- lineStr += '\x1b[0m' + cell.style;
292
- }
293
- lastRenderedStyle = cell.style;
294
- }
295
- lineStr += cell.char;
296
- }
297
- // Reset at end of line
298
- if (lastRenderedStyle !== '') {
299
- lineStr += '\x1b[0m';
300
- lastRenderedStyle = '';
167
+ i++;
168
+ }
169
+ const outputLines = [];
170
+ let lastRenderedStyle = "";
171
+ for (let row = 0; row <= maxRowUsed; row++) {
172
+ let lineStr = "";
173
+ const rowCells = screen[row] || [];
174
+ const effectiveLength = options?.highlightCursor && row === cursorRow ? Math.max(rowCells.length, cursorCol + 1) : rowCells.length;
175
+ for (let col = 0; col < effectiveLength; col++) {
176
+ let cell = rowCells[col] || { char: " ", style: "" };
177
+ if (options?.highlightCursor && row === cursorRow && col === cursorCol) {
178
+ cell = {
179
+ char: cell.char || " ",
180
+ // Ensure visible char for cursor block
181
+ style: cell.style + "\x1B[7m"
182
+ };
183
+ }
184
+ if (cell.style !== lastRenderedStyle) {
185
+ if (cell.style === "") {
186
+ lineStr += "\x1B[0m";
187
+ } else {
188
+ lineStr += "\x1B[0m" + cell.style;
301
189
  }
302
- outputLines.push(lineStr);
190
+ lastRenderedStyle = cell.style;
191
+ }
192
+ lineStr += cell.char;
193
+ }
194
+ if (lastRenderedStyle !== "") {
195
+ lineStr += "\x1B[0m";
196
+ lastRenderedStyle = "";
303
197
  }
304
- let result = outputLines.join('\n');
305
- // Cleanup
306
- result = result.replace(/\n{3,}/g, '\n\n');
307
- result = result.replace(/^\n+/, '');
308
- result = result.trimEnd();
309
- // Ensure final reset
310
- result += '\x1b[0m';
311
- return result;
198
+ outputLines.push(lineStr);
199
+ }
200
+ let result = outputLines.join("\n");
201
+ result = result.replace(/\n{3,}/g, "\n\n");
202
+ result = result.replace(/^\n+/, "");
203
+ result = result.trimEnd();
204
+ result += "\x1B[0m";
205
+ return result;
312
206
  }
207
+ export {
208
+ processTerminalOutput
209
+ };
313
210
  //# sourceMappingURL=terminal-output.js.map