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":"terminal-output.js","sourceRoot":"","sources":["../../src/utils/terminal-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/terminal-output.ts"],"sourcesContent":["/**\r\n * Utility for processing terminal output with proper carriage return handling.\r\n * \r\n * When commands output text with \\r (carriage return), it means \"go back to the start\r\n * of the line\" - used for spinners, progress bars, and other dynamic output.\r\n * \r\n * This module provides functions to correctly process such output so that only the\r\n * final rendered state is preserved (not intermediate states that should be overwritten).\r\n */\r\n\r\n\r\n\r\n/**\r\n * Process terminal output to properly handle carriage returns and ANSI sequences.\r\n * \r\n * This function simulates how a terminal would render the output:\r\n * - \\r (carriage return) moves cursor to the start of the line\r\n * - \\x1b[H (cursor home) also moves cursor to start - PTY uses this instead of \\r\r\n * - Subsequent text overwrites from the beginning\r\n * - ANSI cursor sequences are handled appropriately\r\n * \r\n * @param raw - Raw terminal output with potential \\r and ANSI sequences\r\n * @returns Processed output with only the final rendered state\r\n */\r\nexport function processTerminalOutput(raw: string, options?: { highlightCursor?: boolean }): string {\r\n if (!raw) return '';\r\n\r\n // Virtual Terminal Emulator Approach with Color Support\r\n // We maintain a virtual screen buffer of cells with char and style\r\n\r\n interface Cell {\r\n char: string;\r\n style: string;\r\n }\r\n\r\n const SCREEN_ROWS = 500;\r\n const MAX_CURSOR_ROW = 10000;\r\n const MAX_CURSOR_COL = 1000;\r\n // const SCREEN_COLS = 200; // Dynamic columns not needed for array-based storage\r\n\r\n // Initialize screen buffer - array of arrays of Cells\r\n // We use a sparse approach: rows are created as needed\r\n const screen: Cell[][] = [];\r\n\r\n // Ensure initial rows exist\r\n for (let i = 0; i < SCREEN_ROWS; i++) {\r\n screen[i] = [];\r\n }\r\n\r\n let cursorRow = 0;\r\n let cursorCol = 0;\r\n let maxRowUsed = 0;\r\n let currentStyle = ''; // Current accumulated ANSI style sequence\r\n\r\n // Pre-processing: Strip only non-SGR sequences that we don't handle\r\n // We keep \\x1b[...m (SGR) for colors\r\n let input = raw\r\n // OSC sequences (\\x1b] ... \\x07 or \\x1b\\) - Robustly consume until terminator\r\n .replace(/\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)/g, '')\r\n // Character set designations (e.g. \\x1b(0)\r\n .replace(/\\x1b[()#][0-9A-Za-z]/g, '')\r\n // BEL and Form Feed (ignore for layout)\r\n .replace(/\\x07/g, '')\r\n .replace(/\\x0C/g, '')\r\n // DEL\r\n .replace(/\\x7F/g, '');\r\n\r\n let i = 0;\r\n while (i < input.length) {\r\n // Check for escape sequences\r\n if (input[i] === '\\x1b') {\r\n // Check for CSI sequence: ESC [\r\n if (i + 1 < input.length && input[i + 1] === '[') {\r\n let j = i + 2;\r\n\r\n // 1. Parameter Bytes (0x30-0x3F): 0-9:;<=>?\r\n // These includes digits, semicolons, and private mode markers like ? and >\r\n let params = '';\r\n while (j < input.length && input.charCodeAt(j) >= 0x30 && input.charCodeAt(j) <= 0x3F) {\r\n params += input[j];\r\n j++;\r\n }\r\n\r\n // 2. Intermediate Bytes (0x20-0x2F): !\"#$%&'()*+,-./\r\n while (j < input.length && input.charCodeAt(j) >= 0x20 && input.charCodeAt(j) <= 0x2F) {\r\n // We consume but ignore intermediates for now as we don't support them\r\n j++;\r\n }\r\n\r\n // 3. Final Byte (0x40-0x7E): @A-Z[\\]^_`a-z{|}~\r\n if (j < input.length && input.charCodeAt(j) >= 0x40 && input.charCodeAt(j) <= 0x7E) {\r\n const cmd = input[j];\r\n\r\n // Parse parameters only if they exist and aren't just private markers\r\n // We filter out ?, > etc for the numeric splitting to avoid NaN\r\n // but keep them in 'params' string for detection if needed.\r\n const cleanParams = params.replace(/[<>=?]/g, '');\r\n const numbers = cleanParams.split(';').map(s => parseInt(s) || 0);\r\n\r\n // Default to 1 if missing, for most commands (1-based)\r\n const n = numbers[0] || 1;\r\n const m = numbers[1] || 1;\r\n\r\n // Handle supported commands\r\n switch (cmd) {\r\n case 'm': // SGR - Select Graphic Rendition (Colors)\r\n if (params === '' || params === '0' || (cleanParams === '0' && numbers.length === 1)) {\r\n currentStyle = ''; // Reset\r\n } else {\r\n // Add to current style. \r\n // Ideally we should be smarter about merging, but appending works.\r\n if (numbers.includes(0)) {\r\n // If sequence contains reset (e.g. 0;1;31), we treat it as reset + others.\r\n // For simplicity, we just take the whole sequence as the new style \r\n // since it usually starts with 0 if 0 is present.\r\n currentStyle = `\\x1b[${cleanParams}m`;\r\n } else {\r\n currentStyle += `\\x1b[${cleanParams}m`;\r\n }\r\n }\r\n break;\r\n\r\n case 'H': // CUP - Cursor Position\r\n case 'f': // HVP - Horizontal and Vertical Position\r\n // Defaults are 1,1\r\n cursorRow = Math.min(MAX_CURSOR_ROW, Math.max(0, (numbers[0] || 1) - 1));\r\n cursorCol = Math.min(MAX_CURSOR_COL, Math.max(0, (numbers[1] || 1) - 1));\r\n break;\r\n\r\n case 'A': // CUU - Cursor Up\r\n cursorRow = Math.max(0, cursorRow - n);\r\n break;\r\n\r\n case 'B': // CUD - Cursor Down\r\n case 'e': // VPR - Vertical Position Relative\r\n cursorRow = Math.min(MAX_CURSOR_ROW, cursorRow + n);\r\n break;\r\n\r\n case 'C': // CUF - Cursor Forward\r\n case 'a': // HPR - Horizontal Position Relative\r\n cursorCol = Math.min(MAX_CURSOR_COL, cursorCol + n);\r\n break;\r\n\r\n case 'D': // CUB - Cursor Back\r\n cursorCol = Math.max(0, cursorCol - n);\r\n break;\r\n\r\n case 'E': // CNL - Cursor Next Line\r\n cursorRow = Math.min(MAX_CURSOR_ROW, cursorRow + n);\r\n cursorCol = 0;\r\n break;\r\n\r\n case 'F': // CPL - Cursor Preceding Line\r\n cursorRow = Math.max(0, cursorRow - n);\r\n cursorCol = 0;\r\n break;\r\n\r\n case 'G': // CHA - Cursor Horizontal Absolute\r\n cursorCol = Math.min(MAX_CURSOR_COL, Math.max(0, n - 1));\r\n break;\r\n\r\n case 'd': // VPA - Vertical Position Absolute\r\n cursorRow = Math.min(MAX_CURSOR_ROW, Math.max(0, n - 1));\r\n break;\r\n\r\n case 'K': // EL - Erase in Line\r\n {\r\n const mode = numbers[0] || 0;\r\n if (!screen[cursorRow]) screen[cursorRow] = [];\r\n\r\n if (mode === 0) { // Cursor to end\r\n screen[cursorRow].splice(cursorCol);\r\n } else if (mode === 1) { // Start to cursor\r\n for (let k = 0; k <= cursorCol; k++) {\r\n if (k < screen[cursorRow].length) {\r\n screen[cursorRow][k] = { char: ' ', style: '' };\r\n }\r\n }\r\n } else if (mode === 2) { // Entire line\r\n screen[cursorRow] = [];\r\n }\r\n }\r\n break;\r\n\r\n case 'J': // ED - Erase in Display\r\n {\r\n const mode = numbers[0] || 0;\r\n if (mode === 0) {\r\n // Erase from cursor to end of display\r\n if (screen[cursorRow]) screen[cursorRow].splice(cursorCol);\r\n for (let r = cursorRow + 1; r <= maxRowUsed; r++) {\r\n screen[r] = [];\r\n }\r\n maxRowUsed = cursorRow;\r\n } else if (mode === 1) {\r\n // Erase from start of display to cursor\r\n for (let r = 0; r < cursorRow; r++) {\r\n screen[r] = [];\r\n }\r\n if (screen[cursorRow]) {\r\n for (let c = 0; c <= cursorCol; c++) {\r\n if (c < screen[cursorRow].length) {\r\n screen[cursorRow][c] = { char: ' ', style: '' };\r\n }\r\n }\r\n }\r\n } else if (mode === 2 || mode === 3) {\r\n // Erase entire display (2) or erase display + scrollback (3)\r\n for (let r = 0; r <= maxRowUsed; r++) {\r\n screen[r] = [];\r\n }\r\n maxRowUsed = cursorRow;\r\n }\r\n }\r\n break;\r\n\r\n // P (DCH), @ (ICH), L (IL), M (DL) - Delete/Insert characters/lines\r\n // These are complex to implement fully for a buffer-based approach without strict bounds.\r\n // For now we ignore them to avoid corruption, or we could implement simple versions.\r\n\r\n default:\r\n // Unknown command, we just consume it (which is the fix for the bug!)\r\n break;\r\n }\r\n\r\n // Move past the final byte\r\n i = j + 1;\r\n continue;\r\n } else {\r\n // Malformed CSI, treat as plain text if no final byte found? \r\n // Or just consume what we found? \r\n // ECMA-48 says if it doesn't end with 0x40-0x7E it's not a valid CSI?\r\n // But in practice we should probably just treat ESC as a char if not valid.\r\n }\r\n }\r\n // Check for simple ESC sequences (ESC X)\r\n // e.g. ESC 7 (Save Cursor), ESC 8 (Restore Cursor), ESC M (Reverse Index)\r\n else if (i + 1 < input.length) {\r\n // Simple 2-char escape\r\n const next = input[i + 1];\r\n // If it is [ it is CSI (handled above)\r\n // If not, we might want to handle some.\r\n\r\n // However, the main bug is CSI parsing.\r\n // Let's not be too aggressive with consuming other escapes unless we distinguish them.\r\n // Valid simple escapes are usually 0x30-0x7E.\r\n }\r\n }\r\n\r\n const char = input[i];\r\n\r\n if (char === '\\r') {\r\n cursorCol = 0;\r\n } else if (char === '\\n') {\r\n cursorRow++;\r\n cursorCol = 0;\r\n } else if (char === '\\x08') { // Backspace\r\n if (cursorCol > 0) cursorCol--;\r\n } else if (char === '\\t') {\r\n cursorCol = Math.min(MAX_CURSOR_COL, Math.floor(cursorCol / 8 + 1) * 8);\r\n } else if (char >= ' ' || char === '\\x00') {\r\n if (char === '\\x00') {\r\n i++;\r\n continue;\r\n }\r\n\r\n // Ensure row exists\r\n while (cursorRow >= screen.length) {\r\n screen.push([]);\r\n }\r\n if (!screen[cursorRow]) screen[cursorRow] = [];\r\n\r\n // Pad with spaces if needed\r\n while (screen[cursorRow].length < cursorCol) {\r\n screen[cursorRow].push({ char: ' ', style: '' });\r\n }\r\n\r\n // Write cell with current style\r\n screen[cursorRow][cursorCol] = { char: char, style: currentStyle };\r\n cursorCol++;\r\n\r\n if (cursorRow > maxRowUsed) maxRowUsed = cursorRow;\r\n }\r\n\r\n i++;\r\n }\r\n\r\n // ... (previous code)\r\n\r\n // Render to string with optimization\r\n const outputLines: string[] = [];\r\n let lastRenderedStyle = '';\r\n\r\n for (let row = 0; row <= maxRowUsed; row++) {\r\n let lineStr = '';\r\n const rowCells = screen[row] || [];\r\n\r\n // Ensure we process up to cursor column if this is the cursor row\r\n // This ensures the cursor is drawn even if it's past the end of text\r\n const effectiveLength = (options?.highlightCursor && row === cursorRow)\r\n ? Math.max(rowCells.length, cursorCol + 1)\r\n : rowCells.length;\r\n\r\n for (let col = 0; col < effectiveLength; col++) {\r\n let cell = rowCells[col] || { char: ' ', style: '' };\r\n\r\n // Apply cursor highlighting\r\n if (options?.highlightCursor && row === cursorRow && col === cursorCol) {\r\n // Invert colors for cursor\r\n // Standard ANSI invert is 7\r\n // We append it to the current style\r\n // If style is empty, it becomes \\x1b[7m\r\n // If style is \\x1b[31m, it becomes \\x1b[31m\\x1b[7m\r\n // We create a temporary cell for rendering\r\n cell = {\r\n char: cell.char || ' ', // Ensure visible char for cursor block\r\n style: cell.style + '\\x1b[7m'\r\n };\r\n }\r\n\r\n // If style changed, emit ANSI code\r\n if (cell.style !== lastRenderedStyle) {\r\n if (cell.style === '') {\r\n lineStr += '\\x1b[0m';\r\n } else {\r\n lineStr += '\\x1b[0m' + cell.style;\r\n }\r\n lastRenderedStyle = cell.style;\r\n }\r\n lineStr += cell.char;\r\n }\r\n\r\n // Reset at end of line\r\n if (lastRenderedStyle !== '') {\r\n lineStr += '\\x1b[0m';\r\n lastRenderedStyle = '';\r\n }\r\n\r\n outputLines.push(lineStr);\r\n }\r\n\r\n let result = outputLines.join('\\n');\r\n\r\n // Cleanup\r\n result = result.replace(/\\n{3,}/g, '\\n\\n');\r\n result = result.replace(/^\\n+/, '');\r\n result = result.trimEnd();\r\n // Ensure final reset\r\n result += '\\x1b[0m';\r\n\r\n return result;\r\n}\r\n"],"mappings":"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","names":["i"]}
@@ -1,76 +1,53 @@
1
- /**
2
- * Text Clipboard Utility
3
- *
4
- * Cross-platform utility to copy text to the system clipboard.
5
- * Uses native clipboard commands for Windows, macOS, and Linux.
6
- */
7
- import { spawn } from 'child_process';
8
- import * as fs from 'fs';
9
- import * as path from 'path';
10
- import * as os from 'os';
11
- import { logDebug, logError } from './logger.js';
12
- /**
13
- * Copy text to clipboard using platform-specific commands.
14
- * Uses a temp file approach to avoid shell escaping issues with large/complex text.
15
- */
16
- export async function copyTextToClipboard(text) {
17
- const platform = process.platform;
1
+ import { spawn } from "child_process";
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import * as os from "os";
5
+ import { logDebug, logError } from "./logger.js";
6
+ async function copyTextToClipboard(text) {
7
+ const platform = process.platform;
8
+ try {
9
+ const tempDir = os.tmpdir();
10
+ const tempFile = path.join(tempDir, `centaurus-clipboard-${Date.now()}.txt`);
11
+ fs.writeFileSync(tempFile, text, "utf-8");
18
12
  try {
19
- // Create a temp file to hold the text (avoids shell escaping issues)
20
- const tempDir = os.tmpdir();
21
- const tempFile = path.join(tempDir, `centaurus-clipboard-${Date.now()}.txt`);
22
- // Write text to temp file
23
- fs.writeFileSync(tempFile, text, 'utf-8');
13
+ const pipeFileToCommand = (cmd, args) => {
14
+ return new Promise((resolve, reject) => {
15
+ const proc = spawn(cmd, args, { shell: false });
16
+ const stream = fs.createReadStream(tempFile);
17
+ stream.on("error", reject);
18
+ proc.on("error", reject);
19
+ proc.on("close", (code) => {
20
+ if (code === 0) resolve();
21
+ else reject(new Error(`Command ${cmd} exited with code ${code}`));
22
+ });
23
+ stream.pipe(proc.stdin);
24
+ });
25
+ };
26
+ if (platform === "win32") {
27
+ await pipeFileToCommand("clip", []);
28
+ } else if (platform === "darwin") {
29
+ await pipeFileToCommand("pbcopy", []);
30
+ } else {
24
31
  try {
25
- const pipeFileToCommand = (cmd, args) => {
26
- return new Promise((resolve, reject) => {
27
- const proc = spawn(cmd, args, { shell: false });
28
- const stream = fs.createReadStream(tempFile);
29
- stream.on('error', reject);
30
- proc.on('error', reject);
31
- proc.on('close', (code) => {
32
- if (code === 0)
33
- resolve();
34
- else
35
- reject(new Error(`Command ${cmd} exited with code ${code}`));
36
- });
37
- stream.pipe(proc.stdin);
38
- });
39
- };
40
- if (platform === 'win32') {
41
- // Windows: Use clip
42
- await pipeFileToCommand('clip', []);
43
- }
44
- else if (platform === 'darwin') {
45
- // macOS: Use pbcopy
46
- await pipeFileToCommand('pbcopy', []);
47
- }
48
- else {
49
- // Linux: Try xclip first, then xsel
50
- try {
51
- await pipeFileToCommand('xclip', ['-selection', 'clipboard']);
52
- }
53
- catch {
54
- // Fallback to xsel
55
- await pipeFileToCommand('xsel', ['--clipboard', '--input']);
56
- }
57
- }
58
- logDebug(`Successfully copied ${text.length} characters to clipboard`);
59
- return true;
32
+ await pipeFileToCommand("xclip", ["-selection", "clipboard"]);
33
+ } catch {
34
+ await pipeFileToCommand("xsel", ["--clipboard", "--input"]);
60
35
  }
61
- finally {
62
- // Clean up temp file
63
- try {
64
- fs.unlinkSync(tempFile);
65
- }
66
- catch {
67
- // Ignore cleanup errors
68
- }
69
- }
70
- }
71
- catch (error) {
72
- logError('Failed to copy text to clipboard', error instanceof Error ? error : undefined);
73
- return false;
36
+ }
37
+ logDebug(`Successfully copied ${text.length} characters to clipboard`);
38
+ return true;
39
+ } finally {
40
+ try {
41
+ fs.unlinkSync(tempFile);
42
+ } catch {
43
+ }
74
44
  }
45
+ } catch (error) {
46
+ logError("Failed to copy text to clipboard", error instanceof Error ? error : void 0);
47
+ return false;
48
+ }
75
49
  }
50
+ export {
51
+ copyTextToClipboard
52
+ };
76
53
  //# sourceMappingURL=text-clipboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-clipboard.js","sourceRoot":"","sources":["../../src/utils/text-clipboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/text-clipboard.ts"],"sourcesContent":["/**\r\n * Text Clipboard Utility\r\n * \r\n * Cross-platform utility to copy text to the system clipboard.\r\n * Uses native clipboard commands for Windows, macOS, and Linux.\r\n */\r\n\r\nimport { spawn } from 'child_process';\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as os from 'os';\r\nimport { logDebug, logError } from './logger.js';\r\n\r\n/**\r\n * Copy text to clipboard using platform-specific commands.\r\n * Uses a temp file approach to avoid shell escaping issues with large/complex text.\r\n */\r\nexport async function copyTextToClipboard(text: string): Promise<boolean> {\r\n const platform = process.platform;\r\n\r\n try {\r\n // Create a temp file to hold the text (avoids shell escaping issues)\r\n const tempDir = os.tmpdir();\r\n const tempFile = path.join(tempDir, `centaurus-clipboard-${Date.now()}.txt`);\r\n\r\n // Write text to temp file\r\n fs.writeFileSync(tempFile, text, 'utf-8');\r\n\r\n try {\r\n const pipeFileToCommand = (cmd: string, args: string[]): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n const proc = spawn(cmd, args, { shell: false });\r\n const stream = fs.createReadStream(tempFile);\r\n\r\n stream.on('error', reject);\r\n proc.on('error', reject);\r\n proc.on('close', (code) => {\r\n if (code === 0) resolve();\r\n else reject(new Error(`Command ${cmd} exited with code ${code}`));\r\n });\r\n\r\n stream.pipe(proc.stdin);\r\n });\r\n };\r\n\r\n if (platform === 'win32') {\r\n // Windows: Use clip\r\n await pipeFileToCommand('clip', []);\r\n } else if (platform === 'darwin') {\r\n // macOS: Use pbcopy\r\n await pipeFileToCommand('pbcopy', []);\r\n } else {\r\n // Linux: Try xclip first, then xsel\r\n try {\r\n await pipeFileToCommand('xclip', ['-selection', 'clipboard']);\r\n } catch {\r\n // Fallback to xsel\r\n await pipeFileToCommand('xsel', ['--clipboard', '--input']);\r\n }\r\n }\r\n\r\n logDebug(`Successfully copied ${text.length} characters to clipboard`);\r\n return true;\r\n } finally {\r\n // Clean up temp file\r\n try {\r\n fs.unlinkSync(tempFile);\r\n } catch {\r\n // Ignore cleanup errors\r\n }\r\n }\r\n } catch (error) {\r\n logError('Failed to copy text to clipboard', error instanceof Error ? error : undefined);\r\n return false;\r\n }\r\n}\r\n"],"mappings":"AAOA,SAAS,aAAa;AACtB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,SAAS,UAAU,gBAAgB;AAMnC,eAAsB,oBAAoB,MAAgC;AACtE,QAAM,WAAW,QAAQ;AAEzB,MAAI;AAEA,UAAM,UAAU,GAAG,OAAO;AAC1B,UAAM,WAAW,KAAK,KAAK,SAAS,uBAAuB,KAAK,IAAI,CAAC,MAAM;AAG3E,OAAG,cAAc,UAAU,MAAM,OAAO;AAExC,QAAI;AACA,YAAM,oBAAoB,CAAC,KAAa,SAAkC;AACtE,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,gBAAM,OAAO,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC;AAC9C,gBAAM,SAAS,GAAG,iBAAiB,QAAQ;AAE3C,iBAAO,GAAG,SAAS,MAAM;AACzB,eAAK,GAAG,SAAS,MAAM;AACvB,eAAK,GAAG,SAAS,CAAC,SAAS;AACvB,gBAAI,SAAS,EAAG,SAAQ;AAAA,gBACnB,QAAO,IAAI,MAAM,WAAW,GAAG,qBAAqB,IAAI,EAAE,CAAC;AAAA,UACpE,CAAC;AAED,iBAAO,KAAK,KAAK,KAAK;AAAA,QAC1B,CAAC;AAAA,MACL;AAEA,UAAI,aAAa,SAAS;AAEtB,cAAM,kBAAkB,QAAQ,CAAC,CAAC;AAAA,MACtC,WAAW,aAAa,UAAU;AAE9B,cAAM,kBAAkB,UAAU,CAAC,CAAC;AAAA,MACxC,OAAO;AAEH,YAAI;AACA,gBAAM,kBAAkB,SAAS,CAAC,cAAc,WAAW,CAAC;AAAA,QAChE,QAAQ;AAEJ,gBAAM,kBAAkB,QAAQ,CAAC,eAAe,SAAS,CAAC;AAAA,QAC9D;AAAA,MACJ;AAEA,eAAS,uBAAuB,KAAK,MAAM,0BAA0B;AACrE,aAAO;AAAA,IACX,UAAE;AAEE,UAAI;AACA,WAAG,WAAW,QAAQ;AAAA,MAC1B,QAAQ;AAAA,MAER;AAAA,IACJ;AAAA,EACJ,SAAS,OAAO;AACZ,aAAS,oCAAoC,iBAAiB,QAAQ,QAAQ,MAAS;AACvF,WAAO;AAAA,EACX;AACJ;","names":[]}
@@ -1,211 +1,148 @@
1
- /**
2
- * Unicode Sanitizer for Terminal Output
3
- *
4
- * This utility sanitizes problematic Unicode characters that cause display issues
5
- * in terminal-based UIs like React Ink. The main problems are:
6
- *
7
- * 1. Emojis have double display width but string.length returns 1
8
- * 2. Variation selectors (U+FE0F) change emoji rendering
9
- * 3. Zero-width characters cause layout issues
10
- * 4. Combining characters can cause unexpected visual output
11
- *
12
- * This module provides functions to:
13
- * - Replace problematic emojis with ASCII fallbacks
14
- * - Strip zero-width and invisible characters
15
- * - Remove variation selectors
16
- */
17
- /**
18
- * Map of emojis to their ASCII text fallbacks.
19
- * These are common emojis that might appear in terminal output.
20
- */
21
1
  const EMOJI_FALLBACKS = {
22
- // Status indicators
23
- '✓': '[ok]',
24
- '✔': '[ok]',
25
- '✗': '[x]',
26
- '✘': '[x]',
27
- '✅': '[ok]',
28
- '❌': '[x]',
29
- '⚠': '[!]',
30
- '⚡': '*',
31
- '✨': '*',
32
- // Common emojis in dev tools
33
- '🚀': '>',
34
- '📝': '#',
35
- '🔥': '*',
36
- '💡': '*',
37
- '📦': '#',
38
- '🔧': '*',
39
- '⚙': '*',
40
- '🔍': '*',
41
- '📁': '#',
42
- '📂': '#',
43
- '💬': '#',
44
- '🎉': '*',
45
- '🎯': '*',
46
- '🐛': '#',
47
- '🔒': '#',
48
- '🔓': '#',
49
- // Arrows (these usually work, but some might cause issues)
50
- '➡': '->',
51
- '⬅': '<-',
52
- '⬆': '^',
53
- '⬇': 'v',
54
- '↔': '<->',
55
- '↕': '^v',
56
- '⇐': '<=',
57
- '⇒': '=>',
58
- '⇑': '^^',
59
- '⇓': 'vv',
60
- // Weather/Nature
61
- '☀': '*',
62
- '☁': '*',
63
- '☂': '#',
64
- '⛅': '*',
65
- // Misc symbols that might cause issues
66
- '⌘': '#',
67
- '⎇': '#',
2
+ // Status indicators
3
+ "\u2713": "[ok]",
4
+ "\u2714": "[ok]",
5
+ "\u2717": "[x]",
6
+ "\u2718": "[x]",
7
+ "\u2705": "[ok]",
8
+ "\u274C": "[x]",
9
+ "\u26A0": "[!]",
10
+ "\u26A1": "*",
11
+ "\u2728": "*",
12
+ // Common emojis in dev tools
13
+ "\u{1F680}": ">",
14
+ "\u{1F4DD}": "#",
15
+ "\u{1F525}": "*",
16
+ "\u{1F4A1}": "*",
17
+ "\u{1F4E6}": "#",
18
+ "\u{1F527}": "*",
19
+ "\u2699": "*",
20
+ "\u{1F50D}": "*",
21
+ "\u{1F4C1}": "#",
22
+ "\u{1F4C2}": "#",
23
+ "\u{1F4AC}": "#",
24
+ "\u{1F389}": "*",
25
+ "\u{1F3AF}": "*",
26
+ "\u{1F41B}": "#",
27
+ "\u{1F512}": "#",
28
+ "\u{1F513}": "#",
29
+ // Arrows (these usually work, but some might cause issues)
30
+ "\u27A1": "->",
31
+ "\u2B05": "<-",
32
+ "\u2B06": "^",
33
+ "\u2B07": "v",
34
+ "\u2194": "<->",
35
+ "\u2195": "^v",
36
+ "\u21D0": "<=",
37
+ "\u21D2": "=>",
38
+ "\u21D1": "^^",
39
+ "\u21D3": "vv",
40
+ // Weather/Nature
41
+ "\u2600": "*",
42
+ "\u2601": "*",
43
+ "\u2602": "#",
44
+ "\u26C5": "*",
45
+ // Misc symbols that might cause issues
46
+ "\u2318": "#",
47
+ "\u2387": "#"
68
48
  };
69
- /**
70
- * Regex patterns for Unicode ranges that should be handled
71
- */
72
49
  const PATTERNS = {
73
- // Variation selectors: U+FE00-U+FE0F (VS1-VS16)
74
- variationSelectors: /[\uFE00-\uFE0F]/g,
75
- // Zero-width characters
76
- zeroWidth: /[\u200B-\u200D\uFEFF\u2060]/g,
77
- // Emoji modifiers (skin tones, etc.): U+1F3FB-U+1F3FF
78
- emojiModifiers: /[\u{1F3FB}-\u{1F3FF}]/gu,
79
- // Regional indicator symbols (flag emojis): U+1F1E0-U+1F1FF
80
- regionalIndicators: /[\u{1F1E0}-\u{1F1FF}]/gu,
81
- // Emoji presentation sequences (typically cause double-width issues)
82
- // This covers most emoji ranges including:
83
- // - Emoticons: U+1F600-U+1F64F
84
- // - Miscellaneous Symbols and Pictographs: U+1F300-U+1F5FF
85
- // - Transport and Map Symbols: U+1F680-U+1F6FF
86
- // - Supplemental Symbols: U+1F900-U+1F9FF
87
- // - Symbols and Pictographs Extended-A: U+1FA00-U+1FA6F
88
- // - Additional emoji blocks: U+1FA70-U+1FAFF
89
- commonEmojis: /[\u{1F300}-\u{1F9FF}\u{1FA00}-\u{1FAFF}]/gu,
90
- // Enclosed alphanumerics and symbols (circled letters, numbers)
91
- enclosedAlphanumerics: /[\u2460-\u24FF\u2776-\u2793]/g,
92
- // Dingbats that might cause issues (but not all - keep common ones)
93
- problematicDingbats: /[\u2700-\u27BF]/g,
94
- // Miscellaneous symbols that are typically single-width: U+2600-U+26FF
95
- // We'll handle these selectively
96
- miscSymbols: /[\u2600-\u26FF]/g,
50
+ // Variation selectors: U+FE00-U+FE0F (VS1-VS16)
51
+ variationSelectors: /[\uFE00-\uFE0F]/g,
52
+ // Zero-width characters
53
+ zeroWidth: /[\u200B-\u200D\uFEFF\u2060]/g,
54
+ // Emoji modifiers (skin tones, etc.): U+1F3FB-U+1F3FF
55
+ emojiModifiers: /[\u{1F3FB}-\u{1F3FF}]/gu,
56
+ // Regional indicator symbols (flag emojis): U+1F1E0-U+1F1FF
57
+ regionalIndicators: /[\u{1F1E0}-\u{1F1FF}]/gu,
58
+ // Emoji presentation sequences (typically cause double-width issues)
59
+ // This covers most emoji ranges including:
60
+ // - Emoticons: U+1F600-U+1F64F
61
+ // - Miscellaneous Symbols and Pictographs: U+1F300-U+1F5FF
62
+ // - Transport and Map Symbols: U+1F680-U+1F6FF
63
+ // - Supplemental Symbols: U+1F900-U+1F9FF
64
+ // - Symbols and Pictographs Extended-A: U+1FA00-U+1FA6F
65
+ // - Additional emoji blocks: U+1FA70-U+1FAFF
66
+ commonEmojis: /[\u{1F300}-\u{1F9FF}\u{1FA00}-\u{1FAFF}]/gu,
67
+ // Enclosed alphanumerics and symbols (circled letters, numbers)
68
+ enclosedAlphanumerics: /[\u2460-\u24FF\u2776-\u2793]/g,
69
+ // Dingbats that might cause issues (but not all - keep common ones)
70
+ problematicDingbats: /[\u2700-\u27BF]/g,
71
+ // Miscellaneous symbols that are typically single-width: U+2600-U+26FF
72
+ // We'll handle these selectively
73
+ miscSymbols: /[\u2600-\u26FF]/g
97
74
  };
98
- /**
99
- * Characters/ranges that should be PRESERVED (work fine in terminals)
100
- */
101
75
  const PRESERVE_RANGES = {
102
- // Box-drawing characters: U+2500-U+257F
103
- boxDrawing: /[\u2500-\u257F]/,
104
- // Block elements: U+2580-U+259F
105
- blockElements: /[\u2580-\u259F]/,
106
- // Basic Latin punctuation and symbols
107
- basicLatin: /[\u0020-\u007E]/,
108
- // Latin-1 Supplement
109
- latin1: /[\u00A0-\u00FF]/,
110
- // General punctuation: U+2000-U+206F (except zero-width)
111
- generalPunctuation: /[\u2010-\u205E]/,
112
- // Arrows: U+2190-U+21FF (single-width arrows work fine)
113
- arrows: /[\u2190-\u21FF]/,
114
- // Mathematical operators: U+2200-U+22FF
115
- mathOperators: /[\u2200-\u22FF]/,
116
- // Currency symbols: U+20A0-U+20CF
117
- currency: /[\u20A0-\u20CF]/,
118
- // Common card suits and symbols that work: ♠♣♥♦★☆
119
- commonSymbols: /[♠♣♥♦★☆]/,
76
+ // Box-drawing characters: U+2500-U+257F
77
+ boxDrawing: /[\u2500-\u257F]/,
78
+ // Block elements: U+2580-U+259F
79
+ blockElements: /[\u2580-\u259F]/,
80
+ // Basic Latin punctuation and symbols
81
+ basicLatin: /[\u0020-\u007E]/,
82
+ // Latin-1 Supplement
83
+ latin1: /[\u00A0-\u00FF]/,
84
+ // General punctuation: U+2000-U+206F (except zero-width)
85
+ generalPunctuation: /[\u2010-\u205E]/,
86
+ // Arrows: U+2190-U+21FF (single-width arrows work fine)
87
+ arrows: /[\u2190-\u21FF]/,
88
+ // Mathematical operators: U+2200-U+22FF
89
+ mathOperators: /[\u2200-\u22FF]/,
90
+ // Currency symbols: U+20A0-U+20CF
91
+ currency: /[\u20A0-\u20CF]/,
92
+ // Common card suits and symbols that work: ♠♣♥♦★☆
93
+ commonSymbols: /[♠♣♥♦★☆]/
120
94
  };
121
- /**
122
- * Check if a character should be preserved (not sanitized)
123
- */
124
95
  function shouldPreserve(char) {
125
- for (const pattern of Object.values(PRESERVE_RANGES)) {
126
- if (pattern.test(char)) {
127
- return true;
128
- }
96
+ for (const pattern of Object.values(PRESERVE_RANGES)) {
97
+ if (pattern.test(char)) {
98
+ return true;
129
99
  }
130
- return false;
100
+ }
101
+ return false;
131
102
  }
132
- /**
133
- * Sanitize a string for terminal display by replacing or removing
134
- * problematic Unicode characters.
135
- *
136
- * @param input - The string to sanitize
137
- * @param options - Sanitization options
138
- * @returns Sanitized string safe for terminal display
139
- */
140
- export function sanitizeUnicode(input, options = {}) {
141
- if (!input)
142
- return '';
143
- const { useFallbacks = true, aggressive = false } = options;
144
- let result = input;
145
- // Step 1: Remove variation selectors (these change emoji presentation)
146
- result = result.replace(PATTERNS.variationSelectors, '');
147
- // Step 2: Remove zero-width characters
148
- result = result.replace(PATTERNS.zeroWidth, '');
149
- // Step 3: Remove emoji modifiers (skin tones)
150
- result = result.replace(PATTERNS.emojiModifiers, '');
151
- // Step 4: Remove regional indicators (flag emojis become letter pairs)
152
- result = result.replace(PATTERNS.regionalIndicators, '');
153
- // Step 5: Replace known emojis with fallbacks or strip them
154
- if (useFallbacks) {
155
- // Replace known emojis with their fallbacks
156
- for (const [emoji, fallback] of Object.entries(EMOJI_FALLBACKS)) {
157
- result = result.split(emoji).join(fallback);
158
- }
103
+ function sanitizeUnicode(input, options = {}) {
104
+ if (!input) return "";
105
+ const { useFallbacks = true, aggressive = false } = options;
106
+ let result = input;
107
+ result = result.replace(PATTERNS.variationSelectors, "");
108
+ result = result.replace(PATTERNS.zeroWidth, "");
109
+ result = result.replace(PATTERNS.emojiModifiers, "");
110
+ result = result.replace(PATTERNS.regionalIndicators, "");
111
+ if (useFallbacks) {
112
+ for (const [emoji, fallback] of Object.entries(EMOJI_FALLBACKS)) {
113
+ result = result.split(emoji).join(fallback);
159
114
  }
160
- // Step 6: Strip remaining common emojis
161
- result = result.replace(PATTERNS.commonEmojis, aggressive ? '' : '*');
162
- // Step 7: Handle miscellaneous symbols selectively
163
- // Many of these work fine, but some cause issues
164
- // In aggressive mode, strip all; otherwise, only strip known problematic ones
165
- if (aggressive) {
166
- result = result.replace(PATTERNS.miscSymbols, (char) => {
167
- // Preserve if it's in our preserve list
168
- if (shouldPreserve(char)) {
169
- return char;
170
- }
171
- return '';
172
- });
173
- result = result.replace(PATTERNS.enclosedAlphanumerics, '');
174
- result = result.replace(PATTERNS.problematicDingbats, '');
175
- }
176
- // Step 8: Clean up any resulting double spaces
177
- result = result.replace(/ +/g, ' ');
178
- return result;
115
+ }
116
+ result = result.replace(PATTERNS.commonEmojis, aggressive ? "" : "*");
117
+ if (aggressive) {
118
+ result = result.replace(PATTERNS.miscSymbols, (char) => {
119
+ if (shouldPreserve(char)) {
120
+ return char;
121
+ }
122
+ return "";
123
+ });
124
+ result = result.replace(PATTERNS.enclosedAlphanumerics, "");
125
+ result = result.replace(PATTERNS.problematicDingbats, "");
126
+ }
127
+ result = result.replace(/ +/g, " ");
128
+ return result;
179
129
  }
180
- /**
181
- * Light sanitization that only removes the most problematic characters
182
- * while preserving as much Unicode as possible.
183
- *
184
- * Use this for final display where you want to keep most characters
185
- * but prevent layout breaking.
186
- */
187
- export function sanitizeUnicodeLight(input) {
188
- if (!input)
189
- return '';
190
- let result = input;
191
- // Only remove variation selectors and zero-width characters
192
- result = result.replace(PATTERNS.variationSelectors, '');
193
- result = result.replace(PATTERNS.zeroWidth, '');
194
- // Replace common problematic emojis with simple markers
195
- result = result.replace(PATTERNS.commonEmojis, '*');
196
- result = result.replace(PATTERNS.enclosedAlphanumerics, '#');
197
- return result;
130
+ function sanitizeUnicodeLight(input) {
131
+ if (!input) return "";
132
+ let result = input;
133
+ result = result.replace(PATTERNS.variationSelectors, "");
134
+ result = result.replace(PATTERNS.zeroWidth, "");
135
+ result = result.replace(PATTERNS.commonEmojis, "*");
136
+ result = result.replace(PATTERNS.enclosedAlphanumerics, "#");
137
+ return result;
198
138
  }
199
- /**
200
- * Check if a string contains any potentially problematic Unicode
201
- * that might cause display issues.
202
- */
203
- export function hasProblematicUnicode(input) {
204
- if (!input)
205
- return false;
206
- return (PATTERNS.commonEmojis.test(input) ||
207
- PATTERNS.variationSelectors.test(input) ||
208
- PATTERNS.emojiModifiers.test(input) ||
209
- PATTERNS.regionalIndicators.test(input));
139
+ function hasProblematicUnicode(input) {
140
+ if (!input) return false;
141
+ return PATTERNS.commonEmojis.test(input) || PATTERNS.variationSelectors.test(input) || PATTERNS.emojiModifiers.test(input) || PATTERNS.regionalIndicators.test(input);
210
142
  }
143
+ export {
144
+ hasProblematicUnicode,
145
+ sanitizeUnicode,
146
+ sanitizeUnicodeLight
147
+ };
211
148
  //# sourceMappingURL=unicode-sanitizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unicode-sanitizer.js","sourceRoot":"","sources":["../../src/utils/unicode-sanitizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/unicode-sanitizer.ts"],"sourcesContent":["/**\r\n * Unicode Sanitizer for Terminal Output\r\n * \r\n * This utility sanitizes problematic Unicode characters that cause display issues\r\n * in terminal-based UIs like React Ink. The main problems are:\r\n * \r\n * 1. Emojis have double display width but string.length returns 1\r\n * 2. Variation selectors (U+FE0F) change emoji rendering\r\n * 3. Zero-width characters cause layout issues\r\n * 4. Combining characters can cause unexpected visual output\r\n * \r\n * This module provides functions to:\r\n * - Replace problematic emojis with ASCII fallbacks\r\n * - Strip zero-width and invisible characters\r\n * - Remove variation selectors\r\n */\r\n\r\n/**\r\n * Map of emojis to their ASCII text fallbacks.\r\n * These are common emojis that might appear in terminal output.\r\n */\r\nconst EMOJI_FALLBACKS: Record<string, string> = {\r\n // Status indicators\r\n '✓': '[ok]',\r\n '✔': '[ok]',\r\n '✗': '[x]',\r\n '✘': '[x]',\r\n '✅': '[ok]',\r\n '❌': '[x]',\r\n '⚠': '[!]',\r\n '⚡': '*',\r\n '✨': '*',\r\n\r\n // Common emojis in dev tools\r\n '🚀': '>',\r\n '📝': '#',\r\n '🔥': '*',\r\n '💡': '*',\r\n '📦': '#',\r\n '🔧': '*',\r\n '⚙': '*',\r\n '🔍': '*',\r\n '📁': '#',\r\n '📂': '#',\r\n '💬': '#',\r\n '🎉': '*',\r\n '🎯': '*',\r\n '🐛': '#',\r\n '🔒': '#',\r\n '🔓': '#',\r\n\r\n // Arrows (these usually work, but some might cause issues)\r\n '➡': '->',\r\n '⬅': '<-',\r\n '⬆': '^',\r\n '⬇': 'v',\r\n '↔': '<->',\r\n '↕': '^v',\r\n '⇐': '<=',\r\n '⇒': '=>',\r\n '⇑': '^^',\r\n '⇓': 'vv',\r\n\r\n // Weather/Nature\r\n '☀': '*',\r\n '☁': '*',\r\n '☂': '#',\r\n '⛅': '*',\r\n\r\n // Misc symbols that might cause issues\r\n '⌘': '#',\r\n '⎇': '#',\r\n};\r\n\r\n/**\r\n * Regex patterns for Unicode ranges that should be handled\r\n */\r\nconst PATTERNS = {\r\n // Variation selectors: U+FE00-U+FE0F (VS1-VS16)\r\n variationSelectors: /[\\uFE00-\\uFE0F]/g,\r\n\r\n // Zero-width characters\r\n zeroWidth: /[\\u200B-\\u200D\\uFEFF\\u2060]/g,\r\n\r\n // Emoji modifiers (skin tones, etc.): U+1F3FB-U+1F3FF\r\n emojiModifiers: /[\\u{1F3FB}-\\u{1F3FF}]/gu,\r\n\r\n // Regional indicator symbols (flag emojis): U+1F1E0-U+1F1FF\r\n regionalIndicators: /[\\u{1F1E0}-\\u{1F1FF}]/gu,\r\n\r\n // Emoji presentation sequences (typically cause double-width issues)\r\n // This covers most emoji ranges including:\r\n // - Emoticons: U+1F600-U+1F64F\r\n // - Miscellaneous Symbols and Pictographs: U+1F300-U+1F5FF\r\n // - Transport and Map Symbols: U+1F680-U+1F6FF\r\n // - Supplemental Symbols: U+1F900-U+1F9FF\r\n // - Symbols and Pictographs Extended-A: U+1FA00-U+1FA6F\r\n // - Additional emoji blocks: U+1FA70-U+1FAFF\r\n commonEmojis: /[\\u{1F300}-\\u{1F9FF}\\u{1FA00}-\\u{1FAFF}]/gu,\r\n\r\n // Enclosed alphanumerics and symbols (circled letters, numbers)\r\n enclosedAlphanumerics: /[\\u2460-\\u24FF\\u2776-\\u2793]/g,\r\n\r\n // Dingbats that might cause issues (but not all - keep common ones)\r\n problematicDingbats: /[\\u2700-\\u27BF]/g,\r\n\r\n // Miscellaneous symbols that are typically single-width: U+2600-U+26FF\r\n // We'll handle these selectively\r\n miscSymbols: /[\\u2600-\\u26FF]/g,\r\n};\r\n\r\n/**\r\n * Characters/ranges that should be PRESERVED (work fine in terminals)\r\n */\r\nconst PRESERVE_RANGES = {\r\n // Box-drawing characters: U+2500-U+257F\r\n boxDrawing: /[\\u2500-\\u257F]/,\r\n\r\n // Block elements: U+2580-U+259F\r\n blockElements: /[\\u2580-\\u259F]/,\r\n\r\n // Basic Latin punctuation and symbols\r\n basicLatin: /[\\u0020-\\u007E]/,\r\n\r\n // Latin-1 Supplement\r\n latin1: /[\\u00A0-\\u00FF]/,\r\n\r\n // General punctuation: U+2000-U+206F (except zero-width)\r\n generalPunctuation: /[\\u2010-\\u205E]/,\r\n\r\n // Arrows: U+2190-U+21FF (single-width arrows work fine)\r\n arrows: /[\\u2190-\\u21FF]/,\r\n\r\n // Mathematical operators: U+2200-U+22FF\r\n mathOperators: /[\\u2200-\\u22FF]/,\r\n\r\n // Currency symbols: U+20A0-U+20CF\r\n currency: /[\\u20A0-\\u20CF]/,\r\n\r\n // Common card suits and symbols that work: ♠♣♥♦★☆\r\n commonSymbols: /[♠♣♥♦★☆]/,\r\n};\r\n\r\n/**\r\n * Check if a character should be preserved (not sanitized)\r\n */\r\nfunction shouldPreserve(char: string): boolean {\r\n for (const pattern of Object.values(PRESERVE_RANGES)) {\r\n if (pattern.test(char)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Sanitize a string for terminal display by replacing or removing\r\n * problematic Unicode characters.\r\n * \r\n * @param input - The string to sanitize\r\n * @param options - Sanitization options\r\n * @returns Sanitized string safe for terminal display\r\n */\r\nexport function sanitizeUnicode(input: string, options: {\r\n /** Replace emojis with ASCII fallbacks instead of stripping */\r\n useFallbacks?: boolean;\r\n /** Aggressively strip all non-ASCII characters (except box-drawing) */\r\n aggressive?: boolean;\r\n} = {}): string {\r\n if (!input) return '';\r\n\r\n const { useFallbacks = true, aggressive = false } = options;\r\n\r\n let result = input;\r\n\r\n // Step 1: Remove variation selectors (these change emoji presentation)\r\n result = result.replace(PATTERNS.variationSelectors, '');\r\n\r\n // Step 2: Remove zero-width characters\r\n result = result.replace(PATTERNS.zeroWidth, '');\r\n\r\n // Step 3: Remove emoji modifiers (skin tones)\r\n result = result.replace(PATTERNS.emojiModifiers, '');\r\n\r\n // Step 4: Remove regional indicators (flag emojis become letter pairs)\r\n result = result.replace(PATTERNS.regionalIndicators, '');\r\n\r\n // Step 5: Replace known emojis with fallbacks or strip them\r\n if (useFallbacks) {\r\n // Replace known emojis with their fallbacks\r\n for (const [emoji, fallback] of Object.entries(EMOJI_FALLBACKS)) {\r\n result = result.split(emoji).join(fallback);\r\n }\r\n }\r\n\r\n // Step 6: Strip remaining common emojis\r\n result = result.replace(PATTERNS.commonEmojis, aggressive ? '' : '*');\r\n\r\n // Step 7: Handle miscellaneous symbols selectively\r\n // Many of these work fine, but some cause issues\r\n // In aggressive mode, strip all; otherwise, only strip known problematic ones\r\n if (aggressive) {\r\n result = result.replace(PATTERNS.miscSymbols, (char) => {\r\n // Preserve if it's in our preserve list\r\n if (shouldPreserve(char)) {\r\n return char;\r\n }\r\n return '';\r\n });\r\n\r\n result = result.replace(PATTERNS.enclosedAlphanumerics, '');\r\n result = result.replace(PATTERNS.problematicDingbats, '');\r\n }\r\n\r\n // Step 8: Clean up any resulting double spaces\r\n result = result.replace(/ +/g, ' ');\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Light sanitization that only removes the most problematic characters\r\n * while preserving as much Unicode as possible.\r\n * \r\n * Use this for final display where you want to keep most characters\r\n * but prevent layout breaking.\r\n */\r\nexport function sanitizeUnicodeLight(input: string): string {\r\n if (!input) return '';\r\n\r\n let result = input;\r\n\r\n // Only remove variation selectors and zero-width characters\r\n result = result.replace(PATTERNS.variationSelectors, '');\r\n result = result.replace(PATTERNS.zeroWidth, '');\r\n\r\n // Replace common problematic emojis with simple markers\r\n result = result.replace(PATTERNS.commonEmojis, '*');\r\n result = result.replace(PATTERNS.enclosedAlphanumerics, '#');\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Check if a string contains any potentially problematic Unicode\r\n * that might cause display issues.\r\n */\r\nexport function hasProblematicUnicode(input: string): boolean {\r\n if (!input) return false;\r\n\r\n return (\r\n PATTERNS.commonEmojis.test(input) ||\r\n PATTERNS.variationSelectors.test(input) ||\r\n PATTERNS.emojiModifiers.test(input) ||\r\n PATTERNS.regionalIndicators.test(input)\r\n );\r\n}\r\n"],"mappings":"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","names":[]}