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":"SlashCommandAutocomplete.js","sourceRoot":"","sources":["../../../src/ui/components/SlashCommandAutocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,CAAC,MAAM,wBAAwB,GAA4C,CAAC,EAC9E,QAAQ,EACR,aAAa,EACb,eAAe,EACf,YAAY,EACf,EAAE,EAAE;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,2CAA2C;IAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;IAErF,yCAAyC;IACzC,MAAM,YAAY,GAAG,YAAY,GAAG,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,YAAY,GAAG,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEtE,OAAO,CACH,oBAAC,GAAG,IACA,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,OAAO,EACnB,QAAQ,EAAE,CAAC,EACX,UAAU,EAAE,CAAC,EACb,SAAS,EAAE,CAAC;QAGX,YAAY,IAAI,CACb,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,wBAAc,CAC/C;QAEA,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,WAAW,GAAG,YAAY,GAAG,KAAK,CAAC;YACzC,MAAM,UAAU,GAAG,WAAW,KAAK,aAAa,CAAC;YAEjD,OAAO,CACH,oBAAC,GAAG,IACA,GAAG,EAAE,GAAG,CAAC,IAAI,EACb,QAAQ,EAAE,CAAC;gBAEX,oBAAC,IAAI,IACD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACzC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,UAAU,IAElB,GAAG,CAAC,IAAI,CACN;gBACP,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS;;oBAAI,GAAG,CAAC,WAAW,CAAQ,CAC9C,CACT,CAAC;QACN,CAAC,CAAC;QAGD,YAAY,IAAI,CACb,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,wBAAc,CAC/C,CACC,CACT,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/ui/components/SlashCommandAutocomplete.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text } from 'ink';\r\n\r\ninterface SlashCommandAutocompleteProps {\r\n commands: Array<{ name: string; description: string }>;\r\n selectedIndex: number;\r\n maxVisibleItems: number;\r\n scrollOffset: number;\r\n}\r\n\r\nexport const SlashCommandAutocomplete: React.FC<SlashCommandAutocompleteProps> = ({\r\n commands,\r\n selectedIndex,\r\n maxVisibleItems,\r\n scrollOffset\r\n}) => {\r\n if (commands.length === 0 || maxVisibleItems === 0) return null;\r\n\r\n // Calculate the visible window of commands\r\n const visibleCommands = commands.slice(scrollOffset, scrollOffset + maxVisibleItems);\r\n\r\n // Determine if we need scroll indicators\r\n const hasMoreAbove = scrollOffset > 0;\r\n const hasMoreBelow = scrollOffset + maxVisibleItems < commands.length;\r\n\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle=\"round\"\r\n borderColor=\"white\"\r\n paddingX={1}\r\n marginLeft={1}\r\n marginTop={0}\r\n >\r\n {/* Scroll up indicator */}\r\n {hasMoreAbove && (\r\n <Text color=\"#666666\" dimColor>↑ more</Text>\r\n )}\r\n\r\n {visibleCommands.map((cmd, index) => {\r\n const actualIndex = scrollOffset + index;\r\n const isSelected = actualIndex === selectedIndex;\r\n\r\n return (\r\n <Box\r\n key={cmd.name}\r\n paddingX={1}\r\n >\r\n <Text\r\n color={isSelected ? '#00ccff' : '#666666'}\r\n bold={isSelected}\r\n inverse={isSelected}\r\n >\r\n {cmd.name}\r\n </Text>\r\n <Text color=\"#666666\"> {cmd.description}</Text>\r\n </Box>\r\n );\r\n })}\r\n\r\n {/* Scroll down indicator */}\r\n {hasMoreBelow && (\r\n <Text color=\"#666666\" dimColor>↓ more</Text>\r\n )}\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AASnB,MAAM,2BAAoE,CAAC;AAAA,EAC9E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,MAAI,SAAS,WAAW,KAAK,oBAAoB,EAAG,QAAO;AAG3D,QAAM,kBAAkB,SAAS,MAAM,cAAc,eAAe,eAAe;AAGnF,QAAM,eAAe,eAAe;AACpC,QAAM,eAAe,eAAe,kBAAkB,SAAS;AAE/D,SACI;AAAA,IAAC;AAAA;AAAA,MACG,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA;AAAA,IAGV,gBACG,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,aAAM;AAAA,IAGxC,gBAAgB,IAAI,CAAC,KAAK,UAAU;AACjC,YAAM,cAAc,eAAe;AACnC,YAAM,aAAa,gBAAgB;AAEnC,aACI;AAAA,QAAC;AAAA;AAAA,UACG,KAAK,IAAI;AAAA,UACT,UAAU;AAAA;AAAA,QAEV;AAAA,UAAC;AAAA;AAAA,YACG,OAAO,aAAa,YAAY;AAAA,YAChC,MAAM;AAAA,YACN,SAAS;AAAA;AAAA,UAER,IAAI;AAAA,QACT;AAAA,QACA,oCAAC,QAAK,OAAM,aAAU,MAAG,IAAI,WAAY;AAAA,MAC7C;AAAA,IAER,CAAC;AAAA,IAGA,gBACG,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,aAAM;AAAA,EAE7C;AAER;","names":[]}
@@ -1,90 +1,59 @@
1
- import React from 'react';
2
- import { Box, Text } from 'ink';
3
- import Spinner from 'ink-spinner';
4
- import { useConnectivity } from '../../hooks/useConnectivity.js';
5
- export const StatusBar = ({ autoAcceptMode, isLoading, loadingMessage = 'Processing...', model, subshellContext, currentTokens, maxTokens }) => {
6
- const isConnected = useConnectivity();
7
- // Calculate token usage percentage
8
- const tokenUsagePercent = currentTokens && maxTokens && maxTokens > 0
9
- ? Math.round((currentTokens / maxTokens) * 100)
10
- : 0;
11
- // Determine color based on usage
12
- const getTokenColor = () => {
13
- if (tokenUsagePercent >= 90)
14
- return 'red';
15
- if (tokenUsagePercent >= 75)
16
- return 'yellow';
17
- return '#00ccff';
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+ import Spinner from "ink-spinner";
4
+ import { useConnectivity } from "../../hooks/useConnectivity.js";
5
+ const StatusBar = ({
6
+ autoAcceptMode,
7
+ isLoading,
8
+ loadingMessage = "Processing...",
9
+ model,
10
+ subshellContext,
11
+ currentTokens,
12
+ maxTokens
13
+ }) => {
14
+ const isConnected = useConnectivity();
15
+ const tokenUsagePercent = currentTokens && maxTokens && maxTokens > 0 ? Math.round(currentTokens / maxTokens * 100) : 0;
16
+ const getTokenColor = () => {
17
+ if (tokenUsagePercent >= 90) return "red";
18
+ if (tokenUsagePercent >= 75) return "yellow";
19
+ return "#00ccff";
20
+ };
21
+ const formatTokenCount = (count) => {
22
+ if (count >= 1e6) {
23
+ return `${(count / 1e6).toFixed(1)}M`;
24
+ }
25
+ if (count >= 1e3) {
26
+ return `${(count / 1e3).toFixed(1)}K`;
27
+ }
28
+ return count.toString();
29
+ };
30
+ const getSubshellPrefix = () => {
31
+ if (!subshellContext || subshellContext.type === "local") {
32
+ return null;
33
+ }
34
+ const typeColors = {
35
+ ssh: "cyan",
36
+ wsl: "yellow",
37
+ docker: "blue"
18
38
  };
19
- // Format token count with K/M suffix
20
- const formatTokenCount = (count) => {
21
- if (count >= 1000000) {
22
- return `${(count / 1000000).toFixed(1)}M`;
23
- }
24
- if (count >= 1000) {
25
- return `${(count / 1000).toFixed(1)}K`;
26
- }
27
- return count.toString();
28
- };
29
- // Get subshell type prefix with appropriate color
30
- const getSubshellPrefix = () => {
31
- if (!subshellContext || subshellContext.type === 'local') {
32
- return null;
33
- }
34
- const typeColors = {
35
- ssh: 'cyan',
36
- wsl: 'yellow',
37
- docker: 'blue',
38
- };
39
- const color = typeColors[subshellContext.type] || 'cyan';
40
- const prefix = subshellContext.type.toUpperCase();
41
- return (React.createElement(Box, { marginRight: 1 },
42
- React.createElement(Text, { color: color, bold: true },
43
- "[",
44
- prefix,
45
- "]")));
46
- };
47
- // Get working directory from context if available
48
- const getWorkingDirectory = () => {
49
- if (subshellContext && subshellContext.type !== 'local') {
50
- const cwd = subshellContext.metadata.workingDirectory;
51
- // Truncate long paths
52
- if (cwd.length > 40) {
53
- return '...' + cwd.slice(-37);
54
- }
55
- return cwd;
56
- }
57
- return null;
58
- };
59
- const workingDir = getWorkingDirectory();
60
- return (React.createElement(Box, { borderStyle: "single", borderColor: "#003b59", paddingX: 1 },
61
- React.createElement(Box, { flexGrow: 1 },
62
- getSubshellPrefix(),
63
- workingDir && (React.createElement(Box, { marginRight: 1 },
64
- React.createElement(Text, { color: "#666666" }, "CWD: "),
65
- React.createElement(Text, { color: "#00ccff" }, workingDir))),
66
- isLoading && (React.createElement(Box, { marginRight: 1 },
67
- React.createElement(Text, { color: "#00ccff" },
68
- React.createElement(Spinner, { type: "dots" })),
69
- React.createElement(Text, { color: "#00ccff" },
70
- " ",
71
- loadingMessage))),
72
- !isLoading && model && (React.createElement(Box, { marginRight: 1 },
73
- React.createElement(Text, { color: "#666666" }, "Model: "),
74
- React.createElement(Text, { color: "#00ccff" }, model))),
75
- currentTokens !== undefined && maxTokens !== undefined && maxTokens > 0 && (React.createElement(Box, { marginRight: 1 },
76
- React.createElement(Text, { color: "#666666" }, "Context: "),
77
- React.createElement(Text, { color: getTokenColor() },
78
- formatTokenCount(currentTokens),
79
- "/",
80
- formatTokenCount(maxTokens),
81
- " (",
82
- tokenUsagePercent,
83
- "%)")))),
84
- React.createElement(Box, null,
85
- !isConnected && (React.createElement(Box, { marginRight: 2 },
86
- React.createElement(Text, { color: "red", bold: true }, "No internet connection"))),
87
- autoAcceptMode && (React.createElement(Text, { color: "#00cc66", bold: true }, "[AUTO-ACCEPT: ON]")),
88
- !autoAcceptMode && (React.createElement(Text, { color: "#666666", dimColor: true }, "[AUTO-ACCEPT: OFF]")))));
39
+ const color = typeColors[subshellContext.type] || "cyan";
40
+ const prefix = subshellContext.type.toUpperCase();
41
+ return /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color, bold: true }, "[", prefix, "]"));
42
+ };
43
+ const getWorkingDirectory = () => {
44
+ if (subshellContext && subshellContext.type !== "local") {
45
+ const cwd = subshellContext.metadata.workingDirectory;
46
+ if (cwd.length > 40) {
47
+ return "..." + cwd.slice(-37);
48
+ }
49
+ return cwd;
50
+ }
51
+ return null;
52
+ };
53
+ const workingDir = getWorkingDirectory();
54
+ return /* @__PURE__ */ React.createElement(Box, { borderStyle: "single", borderColor: "#003b59", paddingX: 1 }, /* @__PURE__ */ React.createElement(Box, { flexGrow: 1 }, getSubshellPrefix(), workingDir && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666" }, "CWD: "), /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, workingDir)), isLoading && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, /* @__PURE__ */ React.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, " ", loadingMessage)), !isLoading && model && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666" }, "Model: "), /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, model)), currentTokens !== void 0 && maxTokens !== void 0 && maxTokens > 0 && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666" }, "Context: "), /* @__PURE__ */ React.createElement(Text, { color: getTokenColor() }, formatTokenCount(currentTokens), "/", formatTokenCount(maxTokens), " (", tokenUsagePercent, "%)"))), /* @__PURE__ */ React.createElement(Box, null, !isConnected && /* @__PURE__ */ React.createElement(Box, { marginRight: 2 }, /* @__PURE__ */ React.createElement(Text, { color: "red", bold: true }, "No internet connection")), autoAcceptMode && /* @__PURE__ */ React.createElement(Text, { color: "#00cc66", bold: true }, "[AUTO-ACCEPT: ON]"), !autoAcceptMode && /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, "[AUTO-ACCEPT: OFF]")));
55
+ };
56
+ export {
57
+ StatusBar
89
58
  };
90
59
  //# sourceMappingURL=StatusBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/ui/components/StatusBar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/ui/components/StatusBar.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text } from 'ink';\r\nimport Spinner from 'ink-spinner';\r\nimport { SubshellContext } from '../../context/types.js';\r\n\r\ninterface StatusBarProps {\r\n autoAcceptMode: boolean;\r\n isLoading: boolean;\r\n loadingMessage?: string;\r\n model?: string;\r\n subshellContext?: SubshellContext;\r\n currentTokens?: number;\r\n maxTokens?: number;\r\n}\r\n\r\nimport { useConnectivity } from '../../hooks/useConnectivity.js';\r\n\r\nexport const StatusBar: React.FC<StatusBarProps> = ({\r\n autoAcceptMode,\r\n isLoading,\r\n loadingMessage = 'Processing...',\r\n model,\r\n subshellContext,\r\n currentTokens,\r\n maxTokens\r\n}) => {\r\n const isConnected = useConnectivity();\r\n\r\n // Calculate token usage percentage\r\n const tokenUsagePercent = currentTokens && maxTokens && maxTokens > 0\r\n ? Math.round((currentTokens / maxTokens) * 100)\r\n : 0;\r\n\r\n // Determine color based on usage\r\n const getTokenColor = () => {\r\n if (tokenUsagePercent >= 90) return 'red';\r\n if (tokenUsagePercent >= 75) return 'yellow';\r\n return '#00ccff';\r\n };\r\n\r\n // Format token count with K/M suffix\r\n const formatTokenCount = (count: number): string => {\r\n if (count >= 1000000) {\r\n return `${(count / 1000000).toFixed(1)}M`;\r\n }\r\n if (count >= 1000) {\r\n return `${(count / 1000).toFixed(1)}K`;\r\n }\r\n return count.toString();\r\n };\r\n\r\n // Get subshell type prefix with appropriate color\r\n const getSubshellPrefix = () => {\r\n if (!subshellContext || subshellContext.type === 'local') {\r\n return null;\r\n }\r\n\r\n const typeColors: Record<string, string> = {\r\n ssh: 'cyan',\r\n wsl: 'yellow',\r\n docker: 'blue',\r\n };\r\n\r\n const color = typeColors[subshellContext.type] || 'cyan';\r\n const prefix = subshellContext.type.toUpperCase();\r\n\r\n return (\r\n <Box marginRight={1}>\r\n <Text color={color} bold>[{prefix}]</Text>\r\n </Box>\r\n );\r\n };\r\n\r\n // Get working directory from context if available\r\n const getWorkingDirectory = () => {\r\n if (subshellContext && subshellContext.type !== 'local') {\r\n const cwd = subshellContext.metadata.workingDirectory;\r\n // Truncate long paths\r\n if (cwd.length > 40) {\r\n return '...' + cwd.slice(-37);\r\n }\r\n return cwd;\r\n }\r\n return null;\r\n };\r\n\r\n const workingDir = getWorkingDirectory();\r\n\r\n return (\r\n <Box borderStyle=\"single\" borderColor=\"#003b59\" paddingX={1}>\r\n <Box flexGrow={1}>\r\n {/* Show subshell prefix and working directory */}\r\n {getSubshellPrefix()}\r\n\r\n {workingDir && (\r\n <Box marginRight={1}>\r\n <Text color=\"#666666\">CWD: </Text>\r\n <Text color=\"#00ccff\">{workingDir}</Text>\r\n </Box>\r\n )}\r\n\r\n {isLoading && (\r\n <Box marginRight={1}>\r\n <Text color=\"#00ccff\">\r\n <Spinner type=\"dots\" />\r\n </Text>\r\n <Text color=\"#00ccff\"> {loadingMessage}</Text>\r\n </Box>\r\n )}\r\n\r\n {!isLoading && model && (\r\n <Box marginRight={1}>\r\n <Text color=\"#666666\">Model: </Text>\r\n <Text color=\"#00ccff\">{model}</Text>\r\n </Box>\r\n )}\r\n\r\n {/* Token usage display */}\r\n {currentTokens !== undefined && maxTokens !== undefined && maxTokens > 0 && (\r\n <Box marginRight={1}>\r\n <Text color=\"#666666\">Context: </Text>\r\n <Text color={getTokenColor()}>\r\n {formatTokenCount(currentTokens)}/{formatTokenCount(maxTokens)} ({tokenUsagePercent}%)\r\n </Text>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <Box>\r\n {!isConnected && (\r\n <Box marginRight={2}>\r\n <Text color=\"red\" bold>No internet connection</Text>\r\n </Box>\r\n )}\r\n\r\n {autoAcceptMode && (\r\n <Text color=\"#00cc66\" bold>[AUTO-ACCEPT: ON]</Text>\r\n )}\r\n {!autoAcceptMode && (\r\n <Text color=\"#666666\" dimColor>[AUTO-ACCEPT: OFF]</Text>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,OAAO,aAAa;AAapB,SAAS,uBAAuB;AAEzB,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAc,gBAAgB;AAGpC,QAAM,oBAAoB,iBAAiB,aAAa,YAAY,IAChE,KAAK,MAAO,gBAAgB,YAAa,GAAG,IAC5C;AAGJ,QAAM,gBAAgB,MAAM;AAC1B,QAAI,qBAAqB,GAAI,QAAO;AACpC,QAAI,qBAAqB,GAAI,QAAO;AACpC,WAAO;AAAA,EACT;AAGA,QAAM,mBAAmB,CAAC,UAA0B;AAClD,QAAI,SAAS,KAAS;AACpB,aAAO,IAAI,QAAQ,KAAS,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,IACrC;AACA,WAAO,MAAM,SAAS;AAAA,EACxB;AAGA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,CAAC,mBAAmB,gBAAgB,SAAS,SAAS;AACxD,aAAO;AAAA,IACT;AAEA,UAAM,aAAqC;AAAA,MACzC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,IACV;AAEA,UAAM,QAAQ,WAAW,gBAAgB,IAAI,KAAK;AAClD,UAAM,SAAS,gBAAgB,KAAK,YAAY;AAEhD,WACE,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAc,MAAI,QAAC,KAAE,QAAO,GAAC,CACrC;AAAA,EAEJ;AAGA,QAAM,sBAAsB,MAAM;AAChC,QAAI,mBAAmB,gBAAgB,SAAS,SAAS;AACvD,YAAM,MAAM,gBAAgB,SAAS;AAErC,UAAI,IAAI,SAAS,IAAI;AACnB,eAAO,QAAQ,IAAI,MAAM,GAAG;AAAA,MAC9B;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,oBAAoB;AAEvC,SACE,oCAAC,OAAI,aAAY,UAAS,aAAY,WAAU,UAAU,KACxD,oCAAC,OAAI,UAAU,KAEZ,kBAAkB,GAElB,cACC,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aAAU,OAAK,GAC3B,oCAAC,QAAK,OAAM,aAAW,UAAW,CACpC,GAGD,aACC,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aACV,oCAAC,WAAQ,MAAK,QAAO,CACvB,GACA,oCAAC,QAAK,OAAM,aAAU,KAAE,cAAe,CACzC,GAGD,CAAC,aAAa,SACb,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aAAU,SAAO,GAC7B,oCAAC,QAAK,OAAM,aAAW,KAAM,CAC/B,GAID,kBAAkB,UAAa,cAAc,UAAa,YAAY,KACrE,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aAAU,WAAS,GAC/B,oCAAC,QAAK,OAAO,cAAc,KACxB,iBAAiB,aAAa,GAAE,KAAE,iBAAiB,SAAS,GAAE,MAAG,mBAAkB,IACtF,CACF,CAEJ,GAEA,oCAAC,WACE,CAAC,eACA,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,OAAM,MAAI,QAAC,wBAAsB,CAC/C,GAGD,kBACC,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,mBAAiB,GAE7C,CAAC,kBACA,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,oBAAkB,CAErD,CACF;AAEJ;","names":[]}
@@ -1,103 +1,120 @@
1
- import React, { useState, useEffect, useRef } from 'react';
2
- import { Box, Text } from 'ink';
3
- import { MarkdownRenderer } from './MarkdownRenderer.js';
4
- import { getTerminalDimensions } from '../../hooks/useTerminalDimensions.js';
5
- /**
6
- * StreamingMessageDisplay - Shows streaming content as it arrives
7
- * Truncates from top if content exceeds max lines to prevent flickering
8
- * Dynamically adjusts based on terminal height
9
- */
10
- export const StreamingMessageDisplay = React.memo(({ message, maxLines }) => {
11
- const [displayContent, setDisplayContent] = useState('');
12
- const contentBufferRef = useRef('');
13
- const updateTimerRef = useRef(null);
14
- const messageIdRef = useRef(message.id);
15
- useEffect(() => {
16
- // If message ID changed, reset everything
17
- if (messageIdRef.current !== message.id) {
18
- messageIdRef.current = message.id;
19
- setDisplayContent('');
20
- contentBufferRef.current = '';
21
- if (updateTimerRef.current) {
22
- clearTimeout(updateTimerRef.current);
23
- }
24
- }
25
- // Buffer the new content
26
- contentBufferRef.current = message.content;
27
- // Clear any existing timer
28
- if (updateTimerRef.current) {
29
- clearTimeout(updateTimerRef.current);
30
- }
31
- // Throttle updates to every 50ms for more responsive streaming while preventing excessive re-renders
32
- updateTimerRef.current = setTimeout(() => {
33
- const fullContent = contentBufferRef.current;
34
- const lines = fullContent.split('\n');
35
- // Calculate dynamic max lines based on terminal height
36
- // Use provided maxLines prop, or calculate dynamically
37
- const { maxStreamingLines } = getTerminalDimensions();
38
- const effectiveMaxLines = maxLines ?? maxStreamingLines;
39
- if (lines.length > effectiveMaxLines) {
40
- // Show only the last N lines to prevent overflow/flickering
41
- const truncatedLines = lines.slice(-effectiveMaxLines);
42
- setDisplayContent(truncatedLines.join('\n'));
43
- }
44
- else {
45
- // Show all content if within limit
46
- setDisplayContent(fullContent);
47
- }
48
- }, 50);
49
- return () => {
50
- if (updateTimerRef.current) {
51
- clearTimeout(updateTimerRef.current);
52
- }
53
- };
54
- }, [message.content, message.id]);
55
- const getRoleColor = (role) => {
56
- switch (role) {
57
- case 'user': return '#00ccff';
58
- case 'assistant': return '#00cc66';
59
- case 'system': return '#ffaa00';
60
- case 'tool': return '#00ccff';
61
- default: return '#ffffff';
62
- }
63
- };
64
- const getRoleLabel = (role) => {
65
- switch (role) {
66
- case 'user': return 'You';
67
- case 'assistant': return 'Centaurus';
68
- case 'system': return 'System';
69
- case 'tool': return 'Tool';
70
- default: return role;
71
- }
1
+ import React, { useState, useEffect, useRef } from "react";
2
+ import { Box, Text } from "ink";
3
+ import wrapAnsi from "wrap-ansi";
4
+ import { MarkdownRenderer } from "./MarkdownRenderer.js";
5
+ import { getTerminalDimensions } from "../../hooks/useTerminalDimensions.js";
6
+ import { ShimmerText } from "./ShimmerText.js";
7
+ const STREAMING_TAIL_MAX_LINES = 5;
8
+ const STREAMING_UPDATE_THROTTLE_MS = 50;
9
+ function getLatestVisualTail(content, maxLines, width) {
10
+ if (!content) return "";
11
+ const normalized = content.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
12
+ const logicalLines = normalized.split("\n");
13
+ const safeWidth = Math.max(1, width);
14
+ let remaining = Math.max(1, maxLines);
15
+ const tail = [];
16
+ for (let i = logicalLines.length - 1; i >= 0 && remaining > 0; i--) {
17
+ const line = logicalLines[i];
18
+ const wrapped = wrapAnsi(line.length > 0 ? line : " ", safeWidth, { hard: true, trim: false }).split("\n");
19
+ if (wrapped.length <= remaining) {
20
+ tail.unshift(line);
21
+ remaining -= wrapped.length;
22
+ continue;
23
+ }
24
+ tail.unshift(wrapped.slice(-remaining).join("\n"));
25
+ remaining = 0;
26
+ }
27
+ return tail.join("\n");
28
+ }
29
+ const StreamingMessageDisplay = React.memo(({
30
+ message,
31
+ maxLines
32
+ }) => {
33
+ const [displayContent, setDisplayContent] = useState("");
34
+ const contentBufferRef = useRef("");
35
+ const updateTimerRef = useRef(null);
36
+ const messageIdRef = useRef(message.id);
37
+ useEffect(() => {
38
+ if (messageIdRef.current !== message.id) {
39
+ messageIdRef.current = message.id;
40
+ setDisplayContent("");
41
+ contentBufferRef.current = "";
42
+ if (updateTimerRef.current) {
43
+ clearTimeout(updateTimerRef.current);
44
+ }
45
+ }
46
+ contentBufferRef.current = message.content;
47
+ if (updateTimerRef.current) {
48
+ clearTimeout(updateTimerRef.current);
49
+ }
50
+ updateTimerRef.current = setTimeout(() => {
51
+ const fullContent = contentBufferRef.current;
52
+ const renderWidth = Math.max(20, (process.stdout.columns || 120) - 6);
53
+ const { maxStreamingLines } = getTerminalDimensions();
54
+ const effectiveMaxLines = Math.max(
55
+ 1,
56
+ Math.min(maxLines ?? maxStreamingLines, STREAMING_TAIL_MAX_LINES)
57
+ );
58
+ setDisplayContent(getLatestVisualTail(fullContent, effectiveMaxLines, renderWidth));
59
+ }, STREAMING_UPDATE_THROTTLE_MS);
60
+ return () => {
61
+ if (updateTimerRef.current) {
62
+ clearTimeout(updateTimerRef.current);
63
+ }
72
64
  };
73
- const timestamp = message.timestamp
74
- ? new Date(message.timestamp).toLocaleTimeString()
75
- : '';
76
- // Skip rendering completely empty streaming messages
77
- // This prevents blank space from appearing when tool goes to executing state
78
- const hasContent = displayContent.trim();
79
- const hasThoughts = message.thoughts && message.thoughts.length > 0;
80
- const hasThinkingDuration = message.thinkingDuration !== undefined;
81
- if (!hasContent && !hasThoughts && !hasThinkingDuration) {
82
- return null;
65
+ }, [maxLines, message.content, message.id]);
66
+ const getRoleColor = (role) => {
67
+ switch (role) {
68
+ case "user":
69
+ return "#00ccff";
70
+ case "assistant":
71
+ return "#00cc66";
72
+ case "system":
73
+ return "#ffaa00";
74
+ case "tool":
75
+ return "#00ccff";
76
+ default:
77
+ return "#ffffff";
78
+ }
79
+ };
80
+ const getRoleLabel = (role) => {
81
+ switch (role) {
82
+ case "user":
83
+ return "You";
84
+ case "assistant":
85
+ return "Centaurus";
86
+ case "system":
87
+ return "System";
88
+ case "tool":
89
+ return "Tool";
90
+ default:
91
+ return role;
83
92
  }
84
- return (React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
85
- React.createElement(Box, { marginBottom: 1 },
86
- React.createElement(Text, { color: getRoleColor(message.role), bold: true },
87
- getRoleLabel(message.role),
88
- ":"),
89
- timestamp && (React.createElement(Text, { color: "#666666", dimColor: true },
90
- " ",
91
- timestamp))),
92
- message.thinkingDuration !== undefined && message.thinkingDuration >= 0 && (React.createElement(Box, { marginBottom: 1 },
93
- React.createElement(Text, { dimColor: true },
94
- "Thought for ",
95
- message.thinkingDuration,
96
- " second",
97
- message.thinkingDuration !== 1 ? 's' : '',
98
- " \u203A"))),
99
- (displayContent.trim() || (message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === undefined)) && (React.createElement(Box, { borderStyle: "single", borderColor: "#00ccff", borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, paddingLeft: 1, flexDirection: "column" },
100
- displayContent.trim() && (React.createElement(MarkdownRenderer, { content: displayContent, maxWidth: (process.stdout.columns || 120) - 6 })),
101
- message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === undefined && (React.createElement(Box, { flexDirection: "column", marginTop: displayContent.trim() ? 1 : 0 }, message.thoughts.map((line, idx) => (React.createElement(Text, { key: idx, dimColor: true }, line)))))))));
93
+ };
94
+ const timestamp = message.timestamp ? new Date(message.timestamp).toLocaleTimeString() : "";
95
+ const hasContent = displayContent.trim();
96
+ const hasThoughts = message.thoughts && message.thoughts.length > 0;
97
+ const hasThinkingDuration = message.thinkingDuration !== void 0;
98
+ if (!hasContent && !hasThoughts && !hasThinkingDuration) {
99
+ return null;
100
+ }
101
+ return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: getRoleColor(message.role), bold: true }, getRoleLabel(message.role), ":"), timestamp && /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, " ", timestamp)), message.thinkingDuration !== void 0 && message.thinkingDuration >= 0 && /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Thought for ", message.thinkingDuration, " second", message.thinkingDuration !== 1 ? "s" : "", " \u203A")), (displayContent.trim() || message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === void 0) && /* @__PURE__ */ React.createElement(
102
+ Box,
103
+ {
104
+ borderStyle: "single",
105
+ borderColor: "#00ccff",
106
+ borderLeft: true,
107
+ borderRight: false,
108
+ borderTop: false,
109
+ borderBottom: false,
110
+ paddingLeft: 1,
111
+ flexDirection: "column"
112
+ },
113
+ displayContent.trim() && /* @__PURE__ */ React.createElement(MarkdownRenderer, { content: displayContent, maxWidth: (process.stdout.columns || 120) - 6 }),
114
+ message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === void 0 && /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginTop: displayContent.trim() ? 1 : 0 }, /* @__PURE__ */ React.createElement(ShimmerText, { text: "Thinking...", baseColor: "#4a4a4a", dimShimmer: true }), message.thoughts.map((line, idx) => /* @__PURE__ */ React.createElement(Text, { key: idx, dimColor: true }, line)))
115
+ ));
102
116
  });
117
+ export {
118
+ StreamingMessageDisplay
119
+ };
103
120
  //# sourceMappingURL=StreamingMessageDisplay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StreamingMessageDisplay.js","sourceRoot":"","sources":["../../../src/ui/components/StreamingMessageDisplay.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/ui/components/StreamingMessageDisplay.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\nimport { Box, Text } from 'ink';\r\nimport wrapAnsi from 'wrap-ansi';\r\nimport { Message } from '../../types/index.js';\r\nimport { MarkdownRenderer } from './MarkdownRenderer.js';\r\nimport { getTerminalDimensions } from '../../hooks/useTerminalDimensions.js';\r\nimport { ShimmerText } from './ShimmerText.js';\r\n\r\ninterface StreamingMessageDisplayProps {\r\n message: Message;\r\n /** Optional override for max lines to display during streaming */\r\n maxLines?: number;\r\n}\r\n\r\nconst STREAMING_TAIL_MAX_LINES = 5;\r\nconst STREAMING_UPDATE_THROTTLE_MS = 50;\r\n\r\n/**\r\n * Keep only the latest visual lines (after wrapping), not just newline-delimited lines.\r\n * This prevents long wrapped paragraphs from flooding the streaming area.\r\n */\r\nfunction getLatestVisualTail(content: string, maxLines: number, width: number): string {\r\n if (!content) return '';\r\n\r\n const normalized = content.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\r\n const logicalLines = normalized.split('\\n');\r\n const safeWidth = Math.max(1, width);\r\n let remaining = Math.max(1, maxLines);\r\n const tail: string[] = [];\r\n\r\n for (let i = logicalLines.length - 1; i >= 0 && remaining > 0; i--) {\r\n const line = logicalLines[i];\r\n const wrapped = wrapAnsi(line.length > 0 ? line : ' ', safeWidth, { hard: true, trim: false }).split('\\n');\r\n\r\n if (wrapped.length <= remaining) {\r\n tail.unshift(line);\r\n remaining -= wrapped.length;\r\n continue;\r\n }\r\n\r\n // Include only the visible tail of this line when it exceeds the remaining budget.\r\n tail.unshift(wrapped.slice(-remaining).join('\\n'));\r\n remaining = 0;\r\n }\r\n\r\n return tail.join('\\n');\r\n}\r\n\r\n/**\r\n * StreamingMessageDisplay - Shows streaming content as it arrives\r\n * Truncates from top if content exceeds max lines to prevent flickering\r\n * Dynamically adjusts based on terminal height\r\n */\r\nexport const StreamingMessageDisplay: React.FC<StreamingMessageDisplayProps> = React.memo(({\r\n message,\r\n maxLines\r\n}) => {\r\n const [displayContent, setDisplayContent] = useState('');\r\n const contentBufferRef = useRef('');\r\n const updateTimerRef = useRef<NodeJS.Timeout | null>(null);\r\n const messageIdRef = useRef(message.id);\r\n\r\n useEffect(() => {\r\n // If message ID changed, reset everything\r\n if (messageIdRef.current !== message.id) {\r\n messageIdRef.current = message.id;\r\n setDisplayContent('');\r\n contentBufferRef.current = '';\r\n if (updateTimerRef.current) {\r\n clearTimeout(updateTimerRef.current);\r\n }\r\n }\r\n\r\n // Buffer the new content\r\n contentBufferRef.current = message.content;\r\n\r\n // Clear any existing timer\r\n if (updateTimerRef.current) {\r\n clearTimeout(updateTimerRef.current);\r\n }\r\n\r\n // Throttle updates to every 50ms for more responsive streaming while preventing excessive re-renders\r\n updateTimerRef.current = setTimeout(() => {\r\n const fullContent = contentBufferRef.current;\r\n const renderWidth = Math.max(20, (process.stdout.columns || 120) - 6);\r\n\r\n // Keep a tight tail window to avoid Ink duplication/flicker from large streamed payloads.\r\n const { maxStreamingLines } = getTerminalDimensions();\r\n const effectiveMaxLines = Math.max(\r\n 1,\r\n Math.min(maxLines ?? maxStreamingLines, STREAMING_TAIL_MAX_LINES)\r\n );\r\n\r\n setDisplayContent(getLatestVisualTail(fullContent, effectiveMaxLines, renderWidth));\r\n }, STREAMING_UPDATE_THROTTLE_MS);\r\n\r\n return () => {\r\n if (updateTimerRef.current) {\r\n clearTimeout(updateTimerRef.current);\r\n }\r\n };\r\n }, [maxLines, message.content, message.id]);\r\n\r\n const getRoleColor = (role: string) => {\r\n switch (role) {\r\n case 'user': return '#00ccff';\r\n case 'assistant': return '#00cc66';\r\n case 'system': return '#ffaa00';\r\n case 'tool': return '#00ccff';\r\n default: return '#ffffff';\r\n }\r\n };\r\n\r\n const getRoleLabel = (role: string) => {\r\n switch (role) {\r\n case 'user': return 'You';\r\n case 'assistant': return 'Centaurus';\r\n case 'system': return 'System';\r\n case 'tool': return 'Tool';\r\n default: return role;\r\n }\r\n };\r\n\r\n const timestamp = message.timestamp\r\n ? new Date(message.timestamp).toLocaleTimeString()\r\n : '';\r\n\r\n // Skip rendering completely empty streaming messages\r\n // This prevents blank space from appearing when tool goes to executing state\r\n const hasContent = displayContent.trim();\r\n const hasThoughts = message.thoughts && message.thoughts.length > 0;\r\n const hasThinkingDuration = message.thinkingDuration !== undefined;\r\n\r\n if (!hasContent && !hasThoughts && !hasThinkingDuration) {\r\n return null;\r\n }\r\n\r\n\r\n return (\r\n <Box flexDirection=\"column\" marginBottom={1}>\r\n <Box marginBottom={1}>\r\n <Text color={getRoleColor(message.role)} bold>\r\n {getRoleLabel(message.role)}:\r\n </Text>\r\n {timestamp && (\r\n <Text color=\"#666666\" dimColor> {timestamp}</Text>\r\n )}\r\n </Box>\r\n\r\n {/* Display thinking duration at the TOP after thinking completes */}\r\n {message.thinkingDuration !== undefined && message.thinkingDuration >= 0 && (\r\n <Box marginBottom={1}>\r\n <Text dimColor>Thought for {message.thinkingDuration} second{message.thinkingDuration !== 1 ? 's' : ''} ›</Text>\r\n </Box>\r\n )}\r\n\r\n {/* Display the current streaming content with markdown formatting and blue border */}\r\n {/* Also includes thinking lines inside the same border to keep the blue line continuous */}\r\n {/* Only render if there's actual content or thinking lines to display */}\r\n {(displayContent.trim() || (message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === undefined)) && (\r\n <Box\r\n borderStyle=\"single\"\r\n borderColor=\"#00ccff\"\r\n borderLeft={true}\r\n borderRight={false}\r\n borderTop={false}\r\n borderBottom={false}\r\n paddingLeft={1}\r\n flexDirection=\"column\"\r\n >\r\n {displayContent.trim() && (\r\n <MarkdownRenderer content={displayContent} maxWidth={(process.stdout.columns || 120) - 6} />\r\n )}\r\n\r\n {/* Display thinking lines (greyed out, last 3 lines) - shown WHILE thinking */}\r\n {message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === undefined && (\r\n <Box flexDirection=\"column\" marginTop={displayContent.trim() ? 1 : 0}>\r\n {/* \"Thinking...\" label just above the thought preview lines */}\r\n <ShimmerText text=\"Thinking...\" baseColor=\"#4a4a4a\" dimShimmer />\r\n {message.thoughts.map((line, idx) => (\r\n <Text key={idx} dimColor>\r\n {line}\r\n </Text>\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n});\r\n"],"mappings":"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","names":[]}
@@ -1,25 +1,30 @@
1
- /**
2
- * TaskCompletedMessage Component
3
- * Displays a task completion message in the chat with checkbox styling
4
- */
5
- import React from 'react';
6
- import { Box, Text } from 'ink';
7
- export const TaskCompletedMessage = ({ taskNumber, totalTasks, taskDescription, completionNote }) => {
8
- return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#f59e0b", paddingX: 1, paddingY: 0, marginY: 0, alignSelf: "flex-start" },
9
- React.createElement(Box, null,
10
- React.createElement(Text, { color: "#f59e0b", bold: true }, "[x] "),
11
- React.createElement(Text, { color: "#f59e0b", bold: true },
12
- "Task ",
13
- taskNumber,
14
- " of ",
15
- totalTasks,
16
- " Completed")),
17
- React.createElement(Box, { marginLeft: 2 },
18
- React.createElement(Text, { color: "#888888", wrap: "wrap" }, taskDescription)),
19
- completionNote && (React.createElement(Box, { marginLeft: 2, marginTop: 0 },
20
- React.createElement(Text, { color: "#666666", dimColor: true, wrap: "wrap" },
21
- "Note: ",
22
- completionNote)))));
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+ const TaskCompletedMessage = ({
4
+ taskNumber,
5
+ totalTasks,
6
+ taskDescription,
7
+ completionNote
8
+ }) => {
9
+ return /* @__PURE__ */ React.createElement(
10
+ Box,
11
+ {
12
+ flexDirection: "column",
13
+ borderStyle: "round",
14
+ borderColor: "#f59e0b",
15
+ paddingX: 1,
16
+ paddingY: 0,
17
+ marginY: 0,
18
+ alignSelf: "flex-start"
19
+ },
20
+ /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: "#f59e0b", bold: true }, "[x] "), /* @__PURE__ */ React.createElement(Text, { color: "#f59e0b", bold: true }, "Task ", taskNumber, " of ", totalTasks, " Completed")),
21
+ /* @__PURE__ */ React.createElement(Box, { marginLeft: 2 }, /* @__PURE__ */ React.createElement(Text, { color: "#888888", wrap: "wrap" }, taskDescription)),
22
+ completionNote && /* @__PURE__ */ React.createElement(Box, { marginLeft: 2, marginTop: 0 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true, wrap: "wrap" }, "Note: ", completionNote))
23
+ );
24
+ };
25
+ var TaskCompletedMessage_default = TaskCompletedMessage;
26
+ export {
27
+ TaskCompletedMessage,
28
+ TaskCompletedMessage_default as default
23
29
  };
24
- export default TaskCompletedMessage;
25
30
  //# sourceMappingURL=TaskCompletedMessage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskCompletedMessage.js","sourceRoot":"","sources":["../../../src/ui/components/TaskCompletedMessage.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EACtE,UAAU,EACV,UAAU,EACV,eAAe,EACf,cAAc,EACjB,EAAE,EAAE;IACD,OAAO,CACH,oBAAC,GAAG,IACA,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC,EACV,SAAS,EAAC,YAAY;QAEtB,oBAAC,GAAG;YACA,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,iBAAY;YACtC,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI;;gBAAO,UAAU;;gBAAM,UAAU;6BAAkB,CAC3E;QACN,oBAAC,GAAG,IAAC,UAAU,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,IAAE,eAAe,CAAQ,CACxD;QACL,cAAc,IAAI,CACf,oBAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;YAC5B,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,QAAC,IAAI,EAAC,MAAM;;gBAAQ,cAAc,CAAQ,CACtE,CACT,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"sources":["../../../src/ui/components/TaskCompletedMessage.tsx"],"sourcesContent":["/**\r\n * TaskCompletedMessage Component\r\n * Displays a task completion message in the chat with checkbox styling\r\n */\r\n\r\nimport React from 'react';\r\nimport { Box, Text } from 'ink';\r\n\r\ninterface TaskCompletedMessageProps {\r\n taskNumber: number;\r\n totalTasks: number;\r\n taskDescription: string;\r\n completionNote?: string;\r\n}\r\n\r\nexport const TaskCompletedMessage: React.FC<TaskCompletedMessageProps> = ({\r\n taskNumber,\r\n totalTasks,\r\n taskDescription,\r\n completionNote\r\n}) => {\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle=\"round\"\r\n borderColor=\"#f59e0b\"\r\n paddingX={1}\r\n paddingY={0}\r\n marginY={0}\r\n alignSelf=\"flex-start\"\r\n >\r\n <Box>\r\n <Text color=\"#f59e0b\" bold>[x] </Text>\r\n <Text color=\"#f59e0b\" bold>Task {taskNumber} of {totalTasks} Completed</Text>\r\n </Box>\r\n <Box marginLeft={2}>\r\n <Text color=\"#888888\" wrap=\"wrap\">{taskDescription}</Text>\r\n </Box>\r\n {completionNote && (\r\n <Box marginLeft={2} marginTop={0}>\r\n <Text color=\"#666666\" dimColor wrap=\"wrap\">Note: {completionNote}</Text>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default TaskCompletedMessage;\r\n"],"mappings":"AAKA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AASnB,MAAM,uBAA4D,CAAC;AAAA,EACtE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,SACI;AAAA,IAAC;AAAA;AAAA,MACG,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAU;AAAA;AAAA,IAEV,oCAAC,WACG,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,MAAI,GAC/B,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,SAAM,YAAW,QAAK,YAAW,YAAU,CAC1E;AAAA,IACA,oCAAC,OAAI,YAAY,KACb,oCAAC,QAAK,OAAM,WAAU,MAAK,UAAQ,eAAgB,CACvD;AAAA,IACC,kBACG,oCAAC,OAAI,YAAY,GAAG,WAAW,KAC3B,oCAAC,QAAK,OAAM,WAAU,UAAQ,MAAC,MAAK,UAAO,UAAO,cAAe,CACrE;AAAA,EAER;AAER;AAEA,IAAO,+BAAQ;","names":[]}