centaurus-cli 3.0.1 → 3.1.1

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":"InteractiveShell.js","sourceRoot":"","sources":["../../../src/ui/components/InteractiveShell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/ui/components/InteractiveShell.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from 'react';\r\nimport { Box, Text, useInput } from 'ink';\r\nimport Spinner from 'ink-spinner';\r\nimport stripAnsi from 'strip-ansi';\r\nimport { encodeKeyToAnsi } from '../../utils/ansi-encoder.js';\r\nimport { processTerminalOutput } from '../../utils/terminal-output.js';\r\nimport { getTerminalDimensions, TERMINAL_HEIGHT_CONSTANTS } from '../../hooks/useTerminalDimensions.js';\r\nimport { sanitizeUnicode } from '../../utils/unicode-sanitizer.js';\r\n\r\ninterface InteractiveShellProps {\r\n command: string;\r\n cwd: string;\r\n isRunning: boolean;\r\n output: string;\r\n exitCode?: number;\r\n error?: string;\r\n onInput?: (input: string) => void;\r\n isFocused: boolean;\r\n onFocusChange: (focused: boolean) => void;\r\n /** Whether to show a blinking cursor in focus mode (default: true) */\r\n showCursor?: boolean;\r\n onSignal?: (signal: string) => void;\r\n /** Callback to handle terminal resize */\r\n onResize?: (cols: number, rows: number) => void;\r\n /** Remote context for SSH/WSL/Docker environments */\r\n remoteContext?: string;\r\n /** Unique shell ID for agent control mode */\r\n shellId?: string;\r\n /** Whether agent control mode is enabled */\r\n isAgentControlled?: boolean;\r\n /** Callback when agent control mode is toggled */\r\n onToggleAgentControl?: () => void;\r\n /** Callback to warpify (attach to) the current session */\r\n onWarpifySession?: () => void;\r\n}\r\n\r\n/**\r\n * Format CWD with remote context prefix for SSH/Docker/WSL environments.\r\n */\r\nfunction formatCwdWithContext(cwd: string, remoteContext?: string): string {\r\n if (remoteContext && cwd) {\r\n return `${remoteContext}:${cwd.replace(/\\\\/g, '/')}`;\r\n }\r\n return cwd;\r\n}\r\n\r\n/**\r\n * Truncate long commands for display to prevent rendering issues\r\n * @param command - The command string to truncate\r\n * @param maxLength - Maximum length before truncation (default: 80)\r\n * @returns Truncated command with ellipsis if needed\r\n */\r\nfunction truncateCommand(command: string, maxLength: number = 80): string {\r\n if (!command || command.length <= maxLength) return command;\r\n return command.substring(0, maxLength) + '...';\r\n}\r\n\r\nexport const InteractiveShell: React.FC<InteractiveShellProps> = React.memo(({\r\n command,\r\n cwd,\r\n isRunning,\r\n output,\r\n exitCode,\r\n error,\r\n onInput,\r\n isFocused,\r\n onFocusChange,\r\n onSignal,\r\n onResize,\r\n remoteContext,\r\n shellId,\r\n isAgentControlled = false,\r\n showCursor = true,\r\n onToggleAgentControl,\r\n onWarpifySession\r\n}) => {\r\n const isMac = process.platform === 'darwin';\r\n\r\n // Scroll offset for viewing previous output (0 = at bottom/following latest)\r\n const [scrollOffset, setScrollOffset] = useState(0);\r\n // Track if user has manually scrolled (to disable auto-follow)\r\n const isAutoFollowRef = useRef(true);\r\n // Track total lines for scroll calculations\r\n const totalLinesRef = useRef(0);\r\n\r\n // Blinking cursor state\r\n const [cursorVisible, setCursorVisible] = useState(true);\r\n\r\n // Handle cursor blinking\r\n useEffect(() => {\r\n if (!isFocused || !showCursor) return;\r\n\r\n const interval = setInterval(() => {\r\n setCursorVisible(v => !v);\r\n }, 530); // 530ms is a standard blink rate\r\n\r\n return () => clearInterval(interval);\r\n }, [isFocused, showCursor]);\r\n\r\n // Calculate visible lines based on focus mode and terminal height\r\n // Uses centralized terminal dimensions for consistency\r\n const terminalRows = process.stdout.rows || 24;\r\n const {\r\n INPUT_BOX_RESERVED_HEIGHT,\r\n SAFETY_BUFFER,\r\n MIN_STREAMING_LINES\r\n } = TERMINAL_HEIGHT_CONSTANTS;\r\n\r\n // Shell-specific chrome: header (2), borders (2), focus indicator (1)\r\n const shellChrome = 5;\r\n\r\n // In focus mode, InputBox is hidden so we don't reserve space for it\r\n // Reserve enough to target ~23 visible lines in a typical terminal\r\n const totalReservedFocused = 12; // Header, footer, focus indicator, and safety buffer\r\n const totalReservedUnfocused = INPUT_BOX_RESERVED_HEIGHT + shellChrome + SAFETY_BUFFER;\r\n\r\n // Calculate max visible lines based on focus state\r\n // Calculate max visible lines based on focus state\r\n // User Requirement: Max 75% of screen height\r\n const maxAllowedHeight = Math.floor(terminalRows * 0.75);\r\n\r\n const availableForShellFocused = Math.max(\r\n MIN_STREAMING_LINES,\r\n Math.min(terminalRows - totalReservedFocused, maxAllowedHeight)\r\n );\r\n\r\n const availableForShellUnfocused = Math.max(MIN_STREAMING_LINES, terminalRows - totalReservedUnfocused);\r\n\r\n // When agent controlled, use only half the available height to make room for AI panel\r\n // SAFEGUARD: Ensure we don't calculate a negative or zero height, and maintain a minimum usable area\r\n const rawAgentHeight = Math.floor(availableForShellFocused / 2);\r\n const agentControlledHeight = Math.max(MIN_STREAMING_LINES, rawAgentHeight);\r\n\r\n // If even the minimum agent height would push us beyond available space (very small terminal),\r\n // we might need to compromise. But for now, ensuring it's at least MIN_STREAMING_LINES (3) is key.\r\n const maxVisibleLines = isFocused\r\n ? (isAgentControlled\r\n ? agentControlledHeight // Already clamped above\r\n : Math.max(MIN_STREAMING_LINES, availableForShellFocused)) // Focus mode: use most of terminal\r\n : Math.max(1, Math.min(5, availableForShellUnfocused)); // Unfocused: show at most 5 lines, at least 1\r\n\r\n // Handle terminal resize events\r\n useEffect(() => {\r\n if (!onResize || !isRunning) return;\r\n\r\n const handleResize = () => {\r\n const cols = process.stdout.columns || 80;\r\n const rows = process.stdout.rows || 24;\r\n onResize(cols, rows);\r\n };\r\n\r\n handleResize();\r\n process.stdout.on('resize', handleResize);\r\n return () => {\r\n process.stdout.off('resize', handleResize);\r\n };\r\n }, [onResize, isRunning]);\r\n\r\n // Get processed output and calculate total lines\r\n // Memoize this to prevent expensive re-processing on every render/blink\r\n // Only re-process if output changes or cursor state changes\r\n const { lines, total } = React.useMemo(() => {\r\n if (!output) return { lines: [] as string[], total: 0 };\r\n\r\n const highlightCursor = isFocused && showCursor && cursorVisible;\r\n const processedOutput = processTerminalOutput(output, { highlightCursor });\r\n const splitLines = processedOutput.split('\\n');\r\n return { lines: splitLines, total: splitLines.length };\r\n }, [output, isFocused, showCursor, cursorVisible]);\r\n\r\n // Helper to access lines (replacing getProcessedOutput call)\r\n // const getProcessedOutput = () => ... REMOVED\r\n\r\n // Get visible lines based on scroll offset\r\n const getVisibleOutput = () => {\r\n // const { lines, total } = getProcessedOutput(); // Replaced by useMemo above\r\n totalLinesRef.current = total;\r\n\r\n if (total === 0) return '';\r\n\r\n // SAFETY: Use current terminal width for wrapping calculations\r\n const cols = process.stdout.columns || 80;\r\n\r\n // STRICT HEIGHT CALCULATION\r\n // We must count *visual* lines (how many rows a line takes up when wrapped)\r\n // otherwise a single long line could blow out our height budget\r\n let visualLineCount = 0;\r\n const visualLinesMap: number[] = new Array(lines.length).fill(1);\r\n\r\n // 1. Calculate visual height of all lines\r\n // precise calculation is expensive, so we estimate: length / columns\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i];\r\n const stripped = stripAnsi(line || '');\r\n // Minimum 1 row, ceil(length/cols) for wrapping\r\n // We add a small buffer for safety margin in calculation logic\r\n const rows = Math.max(1, Math.ceil(stripped.length / cols));\r\n visualLinesMap[i] = rows;\r\n }\r\n\r\n // 2. Determine which lines to show based on scrollOffset\r\n // We work backwards from the bottom (latest output)\r\n\r\n const visibleLinesToRender: string[] = [];\r\n let currentHeight = 0;\r\n\r\n // Apply scroll offset - skip N visual lines from bottom\r\n // This is a simplified approach: we skip logical lines until we pass the visual offset\r\n // Ideally we would skip pixel-perfect but logical-line skipping is safer for now\r\n let linesToSkip = scrollOffset;\r\n let startIndex = lines.length - 1;\r\n\r\n // Adjust start index based on scroll\r\n while (linesToSkip > 0 && startIndex >= 0) {\r\n // We treat scrollOffset as \"logical lines\" for consistency with existing UX controls\r\n // or we could treat it as visual lines? \r\n // Existing behavior: scrollOffset is logical lines. Let's keep that for predictable scrolling.\r\n linesToSkip--;\r\n startIndex--;\r\n }\r\n\r\n // 3. Collect lines that fit in maxVisibleLines\r\n for (let i = startIndex; i >= 0; i--) {\r\n const lineRows = visualLinesMap[i];\r\n\r\n // If adding this line exceeds max height, we stop\r\n // Exception: Always show at least one line if it's the only one\r\n if (currentHeight + lineRows > maxVisibleLines && visibleLinesToRender.length > 0) {\r\n break;\r\n }\r\n\r\n visibleLinesToRender.unshift(lines[i]);\r\n currentHeight += lineRows;\r\n }\r\n\r\n return visibleLinesToRender.join('\\n');\r\n };\r\n\r\n // Reset scroll offset when exiting focus mode\r\n useEffect(() => {\r\n if (!isFocused) {\r\n setScrollOffset(0);\r\n isAutoFollowRef.current = true;\r\n }\r\n }, [isFocused]);\r\n\r\n // Track previous total lines to adjust scroll offset when new output arrives\r\n const prevTotalLinesRef = useRef(0);\r\n\r\n // When new output comes in and user is scrolled up, adjust offset to maintain position\r\n useEffect(() => {\r\n // const { total } = getProcessedOutput(); // Replaced by useMemo\r\n const prevTotal = prevTotalLinesRef.current;\r\n\r\n if (prevTotal > 0 && total > prevTotal && !isAutoFollowRef.current && scrollOffset > 0) {\r\n // New lines were added while user is scrolled up\r\n // Increase scroll offset by the number of new lines to stay at the same position\r\n const newLines = total - prevTotal;\r\n const maxOffset = Math.max(0, total - maxVisibleLines);\r\n setScrollOffset(prev => Math.min(prev + newLines, maxOffset));\r\n }\r\n\r\n prevTotalLinesRef.current = total;\r\n }, [output, maxVisibleLines, total]);\r\n\r\n // Handle input - PTY mode sends everything immediately\r\n useInput((input, key) => {\r\n if (!isFocused) return;\r\n\r\n // Alt+E: Warpify session - detect and attach to remote session\r\n // Mac: Cmd+E (key.meta) OR Ctrl+E (fallback if Cmd intercepted)\r\n // Win: Alt+E (key.meta)\r\n // Note: Ctrl+E might come in as input='\\u0005' (ASCII 5) rather than key.ctrl+e\r\n const isCtrlE = (key.ctrl && input.toLowerCase() === 'e') || input === '\\u0005';\r\n if ((key.meta && input.toLowerCase() === 'e') || isCtrlE) {\r\n if (onWarpifySession) {\r\n onWarpifySession();\r\n }\r\n return;\r\n }\r\n\r\n // Alt+I: Toggle agent control mode\r\n // Mac: Cmd+I (key.meta)\r\n if (key.meta && input.toLowerCase() === 'i') {\r\n if (onToggleAgentControl) {\r\n onToggleAgentControl();\r\n }\r\n return;\r\n }\r\n\r\n // Global: Ctrl+F to exit focus mode\r\n // BUT: Block if agent controlled AND still running\r\n if (key.ctrl && input === 'f') {\r\n if (isAgentControlled && isRunning) {\r\n // Blocked - can't exit focus while agent controlled and running\r\n // User must first disable agent control with Alt+I or wait for completion\r\n return;\r\n }\r\n onFocusChange(false);\r\n return;\r\n }\r\n\r\n // Scroll controls (only in focus mode, don't send to PTY)\r\n // Shift+Up: Scroll up one line\r\n if (key.shift && key.upArrow) {\r\n const maxOffset = Math.max(0, totalLinesRef.current - maxVisibleLines);\r\n if (scrollOffset < maxOffset) {\r\n isAutoFollowRef.current = false;\r\n setScrollOffset(prev => Math.min(prev + 1, maxOffset));\r\n }\r\n return;\r\n }\r\n\r\n // Shift+Down: Scroll down one line\r\n if (key.shift && key.downArrow) {\r\n if (scrollOffset > 0) {\r\n setScrollOffset(prev => {\r\n const newOffset = Math.max(prev - 1, 0);\r\n if (newOffset === 0) {\r\n isAutoFollowRef.current = true;\r\n }\r\n return newOffset;\r\n });\r\n }\r\n return;\r\n }\r\n\r\n // Page Up: Scroll up one page\r\n if (key.pageUp) {\r\n const maxOffset = Math.max(0, totalLinesRef.current - maxVisibleLines);\r\n if (scrollOffset < maxOffset) {\r\n isAutoFollowRef.current = false;\r\n setScrollOffset(prev => Math.min(prev + maxVisibleLines, maxOffset));\r\n }\r\n return;\r\n }\r\n\r\n // Page Down: Scroll down one page\r\n if (key.pageDown) {\r\n if (scrollOffset > 0) {\r\n setScrollOffset(prev => {\r\n const newOffset = Math.max(prev - maxVisibleLines, 0);\r\n if (newOffset === 0) {\r\n isAutoFollowRef.current = true;\r\n }\r\n return newOffset;\r\n });\r\n }\r\n return;\r\n }\r\n\r\n // Below this point, we need onInput to send to PTY\r\n if (!onInput) return;\r\n\r\n // Ctrl+C - send to PTY AND signal backend for forceful termination\r\n if (key.ctrl && input === 'c') {\r\n onInput('\\x03');\r\n if (onSignal) {\r\n onSignal('SIGINT');\r\n }\r\n return;\r\n }\r\n\r\n // Ctrl+D - EOF\r\n if (key.ctrl && input === 'd') {\r\n onInput('\\x04');\r\n return;\r\n }\r\n\r\n // Ctrl+Z - Suspend\r\n if (key.ctrl && input === 'z') {\r\n onInput('\\x1A');\r\n return;\r\n }\r\n\r\n // Encode and send all keys immediately\r\n const encoded = encodeKeyToAnsi(input, key);\r\n if (encoded) {\r\n onInput(encoded);\r\n }\r\n }, { isActive: isFocused });\r\n\r\n // Determine border color and icon based on status\r\n const getBorderColor = () => {\r\n if (isRunning) return '#00ccff';\r\n if (error || (exitCode !== undefined && exitCode !== 0)) return '#ff3366';\r\n return '#00cc66';\r\n };\r\n\r\n const getStatusIcon = () => {\r\n if (isRunning) return <Spinner type=\"dots\" />;\r\n if (error || (exitCode !== undefined && exitCode !== 0)) return '✗';\r\n return '✓';\r\n };\r\n\r\n const color = getBorderColor();\r\n const visibleOutput = getVisibleOutput();\r\n // Strip ANSI codes then sanitize problematic Unicode (emojis, wide chars)\r\n // to prevent layout issues caused by character width mismatches\r\n const cleanOutput = sanitizeUnicode(visibleOutput);\r\n const truncatedCommand = truncateCommand(command, 80);\r\n\r\n // SAFEGUARD: Check for critically small dimensions that crash Yoga WASM\r\n // Yoga can crash with \"memory access out of bounds\" if containers have negative computed size\r\n // affecting Ink's Box rendering.\r\n const currentCols = process.stdout.columns || 80;\r\n const currentRows = process.stdout.rows || 24;\r\n const SAFE_MIN_WIDTH = 15;\r\n const SAFE_MIN_HEIGHT = 5;\r\n\r\n if (currentCols < SAFE_MIN_WIDTH || currentRows < SAFE_MIN_HEIGHT) {\r\n return (\r\n <Box flexDirection=\"column\" padding={1}>\r\n <Text color=\"yellow\">Terminal too small</Text>\r\n <Text dimColor>{currentCols}x{currentRows}</Text>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box flexDirection=\"column\" marginBottom={1}>\r\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={color} paddingX={1}>\r\n {/* Header */}\r\n <Box marginBottom={1}>\r\n <Text color={color} bold>\r\n {getStatusIcon()} Shell\r\n </Text>\r\n <Text color=\"#666666\"> {truncatedCommand} </Text>\r\n <Text color=\"#666666\" dimColor>[current working directory {formatCwdWithContext(cwd, remoteContext)}]</Text>\r\n </Box>\r\n\r\n {/* Output area */}\r\n {/* Output area */}\r\n {cleanOutput && (\r\n <Box height={maxVisibleLines} overflow=\"hidden\">\r\n <Text wrap=\"wrap\">{cleanOutput}</Text>\r\n </Box>\r\n )}\r\n\r\n {/* Focus mode indicator */}\r\n {isFocused && isRunning && (\r\n <Box marginTop={1} flexDirection=\"column\">\r\n <Box>\r\n {isAgentControlled ? (\r\n <>\r\n <Text color=\"#9945FF\" bold>[ AGENT CONTROL ] </Text>\r\n <Text color=\"#666666\">\r\n {isMac ? 'Cmd+I' : 'Alt+I'} to disable | Shift+↑↓ scroll | PgUp/PgDn page\r\n </Text>\r\n </>\r\n ) : (\r\n <>\r\n <Text color=\"#ffaa00\" bold>[ FOCUS MODE ] </Text>\r\n <Text color=\"#666666\">\r\n Ctrl+F exit {onWarpifySession ? `| ${isMac ? 'Cmd+E / Ctrl+E' : 'Alt+E'} warpify ` : ''}| {isMac ? 'Cmd+I' : 'Alt+I'} agent | Shift+↑↓ scroll\r\n </Text>\r\n </>\r\n )}\r\n </Box>\r\n {scrollOffset > 0 && (\r\n <Box>\r\n <Text color=\"#666666\" dimColor>\r\n ↑ Scrolled {scrollOffset} line{scrollOffset > 1 ? 's' : ''} from bottom (viewing history)\r\n </Text>\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n\r\n {/* Error display */}\r\n {error && !isRunning && (\r\n <Box marginTop={1}>\r\n <Text color=\"#ff3366\" wrap=\"wrap\">{error.replace(/\\r/g, '')}</Text>\r\n </Box>\r\n )}\r\n </Box>\r\n {isRunning && !isFocused && (\r\n <Box marginLeft={1}>\r\n <Text color=\"#666666\" dimColor>ctrl + f to focus</Text>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n});\r\n"],"mappings":"AAAA,OAAO,SAAS,WAAW,UAAU,cAAc;AACnD,SAAS,KAAK,MAAM,gBAAgB;AACpC,OAAO,aAAa;AACpB,OAAO,eAAe;AACtB,SAAS,uBAAuB;AAChC,SAAS,6BAA6B;AACtC,SAAgC,iCAAiC;AACjE,SAAS,uBAAuB;AAgChC,SAAS,qBAAqB,KAAa,eAAgC;AACzE,MAAI,iBAAiB,KAAK;AACxB,WAAO,GAAG,aAAa,IAAI,IAAI,QAAQ,OAAO,GAAG,CAAC;AAAA,EACpD;AACA,SAAO;AACT;AAQA,SAAS,gBAAgB,SAAiB,YAAoB,IAAY;AACxE,MAAI,CAAC,WAAW,QAAQ,UAAU,UAAW,QAAO;AACpD,SAAO,QAAQ,UAAU,GAAG,SAAS,IAAI;AAC3C;AAEO,MAAM,mBAAoD,MAAM,KAAK,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,QAAQ,aAAa;AAGnC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAElD,QAAM,kBAAkB,OAAO,IAAI;AAEnC,QAAM,gBAAgB,OAAO,CAAC;AAG9B,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,IAAI;AAGvD,YAAU,MAAM;AACd,QAAI,CAAC,aAAa,CAAC,WAAY;AAE/B,UAAM,WAAW,YAAY,MAAM;AACjC,uBAAiB,OAAK,CAAC,CAAC;AAAA,IAC1B,GAAG,GAAG;AAEN,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,GAAG,CAAC,WAAW,UAAU,CAAC;AAI1B,QAAM,eAAe,QAAQ,OAAO,QAAQ;AAC5C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAGJ,QAAM,cAAc;AAIpB,QAAM,uBAAuB;AAC7B,QAAM,yBAAyB,4BAA4B,cAAc;AAKzE,QAAM,mBAAmB,KAAK,MAAM,eAAe,IAAI;AAEvD,QAAM,2BAA2B,KAAK;AAAA,IACpC;AAAA,IACA,KAAK,IAAI,eAAe,sBAAsB,gBAAgB;AAAA,EAChE;AAEA,QAAM,6BAA6B,KAAK,IAAI,qBAAqB,eAAe,sBAAsB;AAItG,QAAM,iBAAiB,KAAK,MAAM,2BAA2B,CAAC;AAC9D,QAAM,wBAAwB,KAAK,IAAI,qBAAqB,cAAc;AAI1E,QAAM,kBAAkB,YACnB,oBACC,wBACA,KAAK,IAAI,qBAAqB,wBAAwB,IACxD,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,0BAA0B,CAAC;AAGvD,YAAU,MAAM;AACd,QAAI,CAAC,YAAY,CAAC,UAAW;AAE7B,UAAM,eAAe,MAAM;AACzB,YAAM,OAAO,QAAQ,OAAO,WAAW;AACvC,YAAM,OAAO,QAAQ,OAAO,QAAQ;AACpC,eAAS,MAAM,IAAI;AAAA,IACrB;AAEA,iBAAa;AACb,YAAQ,OAAO,GAAG,UAAU,YAAY;AACxC,WAAO,MAAM;AACX,cAAQ,OAAO,IAAI,UAAU,YAAY;AAAA,IAC3C;AAAA,EACF,GAAG,CAAC,UAAU,SAAS,CAAC;AAKxB,QAAM,EAAE,OAAO,MAAM,IAAI,MAAM,QAAQ,MAAM;AAC3C,QAAI,CAAC,OAAQ,QAAO,EAAE,OAAO,CAAC,GAAe,OAAO,EAAE;AAEtD,UAAM,kBAAkB,aAAa,cAAc;AACnD,UAAM,kBAAkB,sBAAsB,QAAQ,EAAE,gBAAgB,CAAC;AACzE,UAAM,aAAa,gBAAgB,MAAM,IAAI;AAC7C,WAAO,EAAE,OAAO,YAAY,OAAO,WAAW,OAAO;AAAA,EACvD,GAAG,CAAC,QAAQ,WAAW,YAAY,aAAa,CAAC;AAMjD,QAAM,mBAAmB,MAAM;AAE7B,kBAAc,UAAU;AAExB,QAAI,UAAU,EAAG,QAAO;AAGxB,UAAM,OAAO,QAAQ,OAAO,WAAW;AAKvC,QAAI,kBAAkB;AACtB,UAAM,iBAA2B,IAAI,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC;AAI/D,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,WAAW,UAAU,QAAQ,EAAE;AAGrC,YAAM,OAAO,KAAK,IAAI,GAAG,KAAK,KAAK,SAAS,SAAS,IAAI,CAAC;AAC1D,qBAAe,CAAC,IAAI;AAAA,IACtB;AAKA,UAAM,uBAAiC,CAAC;AACxC,QAAI,gBAAgB;AAKpB,QAAI,cAAc;AAClB,QAAI,aAAa,MAAM,SAAS;AAGhC,WAAO,cAAc,KAAK,cAAc,GAAG;AAIzC;AACA;AAAA,IACF;AAGA,aAAS,IAAI,YAAY,KAAK,GAAG,KAAK;AACpC,YAAM,WAAW,eAAe,CAAC;AAIjC,UAAI,gBAAgB,WAAW,mBAAmB,qBAAqB,SAAS,GAAG;AACjF;AAAA,MACF;AAEA,2BAAqB,QAAQ,MAAM,CAAC,CAAC;AACrC,uBAAiB;AAAA,IACnB;AAEA,WAAO,qBAAqB,KAAK,IAAI;AAAA,EACvC;AAGA,YAAU,MAAM;AACd,QAAI,CAAC,WAAW;AACd,sBAAgB,CAAC;AACjB,sBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAGd,QAAM,oBAAoB,OAAO,CAAC;AAGlC,YAAU,MAAM;AAEd,UAAM,YAAY,kBAAkB;AAEpC,QAAI,YAAY,KAAK,QAAQ,aAAa,CAAC,gBAAgB,WAAW,eAAe,GAAG;AAGtF,YAAM,WAAW,QAAQ;AACzB,YAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,eAAe;AACrD,sBAAgB,UAAQ,KAAK,IAAI,OAAO,UAAU,SAAS,CAAC;AAAA,IAC9D;AAEA,sBAAkB,UAAU;AAAA,EAC9B,GAAG,CAAC,QAAQ,iBAAiB,KAAK,CAAC;AAGnC,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,CAAC,UAAW;AAMhB,UAAM,UAAW,IAAI,QAAQ,MAAM,YAAY,MAAM,OAAQ,UAAU;AACvE,QAAK,IAAI,QAAQ,MAAM,YAAY,MAAM,OAAQ,SAAS;AACxD,UAAI,kBAAkB;AACpB,yBAAiB;AAAA,MACnB;AACA;AAAA,IACF;AAIA,QAAI,IAAI,QAAQ,MAAM,YAAY,MAAM,KAAK;AAC3C,UAAI,sBAAsB;AACxB,6BAAqB;AAAA,MACvB;AACA;AAAA,IACF;AAIA,QAAI,IAAI,QAAQ,UAAU,KAAK;AAC7B,UAAI,qBAAqB,WAAW;AAGlC;AAAA,MACF;AACA,oBAAc,KAAK;AACnB;AAAA,IACF;AAIA,QAAI,IAAI,SAAS,IAAI,SAAS;AAC5B,YAAM,YAAY,KAAK,IAAI,GAAG,cAAc,UAAU,eAAe;AACrE,UAAI,eAAe,WAAW;AAC5B,wBAAgB,UAAU;AAC1B,wBAAgB,UAAQ,KAAK,IAAI,OAAO,GAAG,SAAS,CAAC;AAAA,MACvD;AACA;AAAA,IACF;AAGA,QAAI,IAAI,SAAS,IAAI,WAAW;AAC9B,UAAI,eAAe,GAAG;AACpB,wBAAgB,UAAQ;AACtB,gBAAM,YAAY,KAAK,IAAI,OAAO,GAAG,CAAC;AACtC,cAAI,cAAc,GAAG;AACnB,4BAAgB,UAAU;AAAA,UAC5B;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAGA,QAAI,IAAI,QAAQ;AACd,YAAM,YAAY,KAAK,IAAI,GAAG,cAAc,UAAU,eAAe;AACrE,UAAI,eAAe,WAAW;AAC5B,wBAAgB,UAAU;AAC1B,wBAAgB,UAAQ,KAAK,IAAI,OAAO,iBAAiB,SAAS,CAAC;AAAA,MACrE;AACA;AAAA,IACF;AAGA,QAAI,IAAI,UAAU;AAChB,UAAI,eAAe,GAAG;AACpB,wBAAgB,UAAQ;AACtB,gBAAM,YAAY,KAAK,IAAI,OAAO,iBAAiB,CAAC;AACpD,cAAI,cAAc,GAAG;AACnB,4BAAgB,UAAU;AAAA,UAC5B;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAGA,QAAI,CAAC,QAAS;AAGd,QAAI,IAAI,QAAQ,UAAU,KAAK;AAC7B,cAAQ,GAAM;AACd,UAAI,UAAU;AACZ,iBAAS,QAAQ;AAAA,MACnB;AACA;AAAA,IACF;AAGA,QAAI,IAAI,QAAQ,UAAU,KAAK;AAC7B,cAAQ,GAAM;AACd;AAAA,IACF;AAGA,QAAI,IAAI,QAAQ,UAAU,KAAK;AAC7B,cAAQ,GAAM;AACd;AAAA,IACF;AAGA,UAAM,UAAU,gBAAgB,OAAO,GAAG;AAC1C,QAAI,SAAS;AACX,cAAQ,OAAO;AAAA,IACjB;AAAA,EACF,GAAG,EAAE,UAAU,UAAU,CAAC;AAG1B,QAAM,iBAAiB,MAAM;AAC3B,QAAI,UAAW,QAAO;AACtB,QAAI,SAAU,aAAa,UAAa,aAAa,EAAI,QAAO;AAChE,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,MAAM;AAC1B,QAAI,UAAW,QAAO,oCAAC,WAAQ,MAAK,QAAO;AAC3C,QAAI,SAAU,aAAa,UAAa,aAAa,EAAI,QAAO;AAChE,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,eAAe;AAC7B,QAAM,gBAAgB,iBAAiB;AAGvC,QAAM,cAAc,gBAAgB,aAAa;AACjD,QAAM,mBAAmB,gBAAgB,SAAS,EAAE;AAKpD,QAAM,cAAc,QAAQ,OAAO,WAAW;AAC9C,QAAM,cAAc,QAAQ,OAAO,QAAQ;AAC3C,QAAM,iBAAiB;AACvB,QAAM,kBAAkB;AAExB,MAAI,cAAc,kBAAkB,cAAc,iBAAiB;AACjE,WACE,oCAAC,OAAI,eAAc,UAAS,SAAS,KACnC,oCAAC,QAAK,OAAM,YAAS,oBAAkB,GACvC,oCAAC,QAAK,UAAQ,QAAE,aAAY,KAAE,WAAY,CAC5C;AAAA,EAEJ;AAEA,SACE,oCAAC,OAAI,eAAc,UAAS,cAAc,KACxC,oCAAC,OAAI,eAAc,UAAS,aAAY,SAAQ,aAAa,OAAO,UAAU,KAE5E,oCAAC,OAAI,cAAc,KACjB,oCAAC,QAAK,OAAc,MAAI,QACrB,cAAc,GAAE,SACnB,GACA,oCAAC,QAAK,OAAM,aAAU,KAAE,kBAAiB,GAAC,GAC1C,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,+BAA4B,qBAAqB,KAAK,aAAa,GAAE,GAAC,CACvG,GAIC,eACC,oCAAC,OAAI,QAAQ,iBAAiB,UAAS,YACrC,oCAAC,QAAK,MAAK,UAAQ,WAAY,CACjC,GAID,aAAa,aACZ,oCAAC,OAAI,WAAW,GAAG,eAAc,YAC/B,oCAAC,WACE,oBACC,0DACE,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,oBAAkB,GAC7C,oCAAC,QAAK,OAAM,aACT,QAAQ,UAAU,SAAQ,0DAC7B,CACF,IAEA,0DACE,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,iBAAe,GAC1C,oCAAC,QAAK,OAAM,aAAU,gBACP,mBAAmB,KAAK,QAAQ,mBAAmB,OAAO,cAAc,IAAG,MAAG,QAAQ,UAAU,SAAQ,oCACvH,CACF,CAEJ,GACC,eAAe,KACd,oCAAC,WACC,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,oBACjB,cAAa,SAAM,eAAe,IAAI,MAAM,IAAG,gCAC7D,CACF,CAEJ,GAID,SAAS,CAAC,aACT,oCAAC,OAAI,WAAW,KACd,oCAAC,QAAK,OAAM,WAAU,MAAK,UAAQ,MAAM,QAAQ,OAAO,EAAE,CAAE,CAC9D,CAEJ,GACC,aAAa,CAAC,aACb,oCAAC,OAAI,YAAY,KACf,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,mBAAiB,CAClD,CAEJ;AAEJ,CAAC;","names":[]}
@@ -1,37 +1,36 @@
1
- import React from 'react';
2
- import { Box, Text, useInput } from 'ink';
3
- export const KeyboardHelp = ({ onClose }) => {
4
- useInput((input, key) => {
5
- if (key.escape || input === '?') {
6
- onClose();
7
- }
8
- });
9
- const isMac = process.platform === 'darwin';
10
- const metaKey = isMac ? 'Cmd' : 'Alt';
11
- const ctrlKey = isMac ? 'Cmd' : 'Ctrl'; // For things like Undo/All/Select usually Cmd on Mac, Ctrl on Win
12
- // Note: Some shortcuts like Ctrl+C are standard across terminals including Mac (Ctrl+C, not Cmd+C)
13
- // But navigation/editing often uses Cmd on Mac.
14
- const shortcuts = [
15
- { key: 'Enter', action: 'Submit message' },
16
- { key: 'Ctrl+D', action: 'Toggle command mode' },
17
- { key: 'Tab', action: 'Autocomplete' },
18
- { key: 'Ctrl+T', action: 'Toggle auto-accept' },
19
- { key: 'Ctrl+C', action: 'Cancel / Exit' },
20
- { key: `${metaKey}+Z`, action: 'Undo' }, // undo
21
- { key: isMac ? 'Cmd/Ctrl+E' : 'Alt+E', action: 'Warpify (Interactive)' },
22
- { key: `${isMac ? 'Cmd' : 'Ctrl'}+Left`, action: 'Home / Word Back' }, // Simplified
23
- { key: `${metaKey}+V`, action: 'Paste File / Image' },
24
- { key: `${metaKey}+X`, action: 'Remove Last File' },
25
- { key: '/', action: 'Slash command' },
26
- { key: '?', action: 'Show help' }
27
- ];
28
- return (React.createElement(Box, { flexDirection: "column", borderStyle: "double", borderColor: "#00ccff", paddingX: 1, marginY: 1 },
29
- React.createElement(Box, { marginBottom: 1 },
30
- React.createElement(Text, { color: "#00ccff", bold: true }, "Keyboard Shortcuts")),
31
- shortcuts.map((s, idx) => (React.createElement(Box, { key: idx, marginBottom: 1 },
32
- React.createElement(Text, { color: "#00cc66", bold: true }, s.key.padEnd(15)),
33
- React.createElement(Text, { color: "#ffffff" }, s.action)))),
34
- React.createElement(Box, { marginTop: 1 },
35
- React.createElement(Text, { color: "#666666", dimColor: true }, "Press ? or ESC to close"))));
1
+ import React from "react";
2
+ import { Box, Text, useInput } from "ink";
3
+ const KeyboardHelp = ({ onClose }) => {
4
+ useInput((input, key) => {
5
+ if (key.escape || input === "?") {
6
+ onClose();
7
+ }
8
+ });
9
+ const isMac = process.platform === "darwin";
10
+ const metaKey = isMac ? "Cmd" : "Alt";
11
+ const altKey = isMac ? "Option" : "Alt";
12
+ const shortcuts = [
13
+ { key: "Enter", action: "Submit message" },
14
+ { key: `${altKey}+Enter`, action: "Insert newline (Shift+Enter remap)" },
15
+ { key: "Ctrl+Enter", action: "Insert newline" },
16
+ { key: "\\ + Enter", action: "Insert newline fallback" },
17
+ { key: "Ctrl+D", action: "Toggle command mode" },
18
+ { key: "Tab", action: "Autocomplete" },
19
+ { key: "Ctrl+T", action: "Toggle auto-accept" },
20
+ { key: "Ctrl+C", action: "Cancel / Exit" },
21
+ { key: `${metaKey}+Z`, action: "Undo" },
22
+ // undo
23
+ { key: isMac ? "Cmd/Ctrl+E" : "Alt+E", action: "Warpify (Interactive)" },
24
+ { key: `${isMac ? "Cmd" : "Ctrl"}+Left`, action: "Home / Word Back" },
25
+ // Simplified
26
+ { key: `${metaKey}+V`, action: "Paste File / Image" },
27
+ { key: `${metaKey}+X`, action: "Remove Last File" },
28
+ { key: "/", action: "Slash command" },
29
+ { key: "?", action: "Show help" }
30
+ ];
31
+ return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", borderStyle: "double", borderColor: "#00ccff", paddingX: 1, marginY: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#00ccff", bold: true }, "Keyboard Shortcuts")), shortcuts.map((s, idx) => /* @__PURE__ */ React.createElement(Box, { key: idx, marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#00cc66", bold: true }, s.key.padEnd(15)), /* @__PURE__ */ React.createElement(Text, { color: "#ffffff" }, s.action))), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, "Press ? or ESC to close")));
32
+ };
33
+ export {
34
+ KeyboardHelp
36
35
  };
37
36
  //# sourceMappingURL=KeyboardHelp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeyboardHelp.js","sourceRoot":"","sources":["../../../src/ui/components/KeyboardHelp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAM1C,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IACvE,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,kEAAkE;IAE1G,mGAAmG;IACnG,gDAAgD;IAEhD,MAAM,SAAS,GAAG;QAChB,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE;QAC1C,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE;QAChD,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;QACtC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE;QAC/C,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;QAC1C,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO;QAChD,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE;QACxE,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,aAAa;QACpF,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE;QACrD,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACnD,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE;QACrC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE;KAClC,CAAC;IAEF,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,SAAS,EAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QAC5F,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC;YAClB,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,+BAA0B,CAChD;QAEL,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CACzB,oBAAC,GAAG,IAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;YAC5B,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,UAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAQ;YACpD,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,IAAE,CAAC,CAAC,MAAM,CAAQ,CACnC,CACP,CAAC;QAEF,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,oCAEvB,CACH,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/ui/components/KeyboardHelp.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text, useInput } from 'ink';\r\n\r\ninterface KeyboardHelpProps {\r\n onClose: () => void;\r\n}\r\n\r\nexport const KeyboardHelp: React.FC<KeyboardHelpProps> = ({ onClose }) => {\r\n useInput((input, key) => {\r\n if (key.escape || input === '?') {\r\n onClose();\r\n }\r\n });\r\n\r\n const isMac = process.platform === 'darwin';\r\n const metaKey = isMac ? 'Cmd' : 'Alt';\r\n const altKey = isMac ? 'Option' : 'Alt';\r\n\r\n // Note: Some shortcuts like Ctrl+C are standard across terminals including Mac (Ctrl+C, not Cmd+C)\r\n // But navigation/editing often uses Cmd on Mac.\r\n\r\n const shortcuts = [\r\n { key: 'Enter', action: 'Submit message' },\r\n { key: `${altKey}+Enter`, action: 'Insert newline (Shift+Enter remap)' },\r\n { key: 'Ctrl+Enter', action: 'Insert newline' },\r\n { key: '\\\\ + Enter', action: 'Insert newline fallback' },\r\n { key: 'Ctrl+D', action: 'Toggle command mode' },\r\n { key: 'Tab', action: 'Autocomplete' },\r\n { key: 'Ctrl+T', action: 'Toggle auto-accept' },\r\n { key: 'Ctrl+C', action: 'Cancel / Exit' },\r\n { key: `${metaKey}+Z`, action: 'Undo' }, // undo\r\n { key: isMac ? 'Cmd/Ctrl+E' : 'Alt+E', action: 'Warpify (Interactive)' },\r\n { key: `${isMac ? 'Cmd' : 'Ctrl'}+Left`, action: 'Home / Word Back' }, // Simplified\r\n { key: `${metaKey}+V`, action: 'Paste File / Image' },\r\n { key: `${metaKey}+X`, action: 'Remove Last File' },\r\n { key: '/', action: 'Slash command' },\r\n { key: '?', action: 'Show help' }\r\n ];\r\n\r\n return (\r\n <Box flexDirection=\"column\" borderStyle=\"double\" borderColor=\"#00ccff\" paddingX={1} marginY={1}>\r\n <Box marginBottom={1}>\r\n <Text color=\"#00ccff\" bold>Keyboard Shortcuts</Text>\r\n </Box>\r\n\r\n {shortcuts.map((s, idx) => (\r\n <Box key={idx} marginBottom={1}>\r\n <Text color=\"#00cc66\" bold>{s.key.padEnd(15)}</Text>\r\n <Text color=\"#ffffff\">{s.action}</Text>\r\n </Box>\r\n ))}\r\n\r\n <Box marginTop={1}>\r\n <Text color=\"#666666\" dimColor>\r\n Press ? or ESC to close\r\n </Text>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,MAAM,gBAAgB;AAM7B,MAAM,eAA4C,CAAC,EAAE,QAAQ,MAAM;AACxE,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,IAAI,UAAU,UAAU,KAAK;AAC/B,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,QAAQ,aAAa;AACnC,QAAM,UAAU,QAAQ,QAAQ;AAChC,QAAM,SAAS,QAAQ,WAAW;AAKlC,QAAM,YAAY;AAAA,IAChB,EAAE,KAAK,SAAS,QAAQ,iBAAiB;AAAA,IACzC,EAAE,KAAK,GAAG,MAAM,UAAU,QAAQ,qCAAqC;AAAA,IACvE,EAAE,KAAK,cAAc,QAAQ,iBAAiB;AAAA,IAC9C,EAAE,KAAK,cAAc,QAAQ,0BAA0B;AAAA,IACvD,EAAE,KAAK,UAAU,QAAQ,sBAAsB;AAAA,IAC/C,EAAE,KAAK,OAAO,QAAQ,eAAe;AAAA,IACrC,EAAE,KAAK,UAAU,QAAQ,qBAAqB;AAAA,IAC9C,EAAE,KAAK,UAAU,QAAQ,gBAAgB;AAAA,IACzC,EAAE,KAAK,GAAG,OAAO,MAAM,QAAQ,OAAO;AAAA;AAAA,IACtC,EAAE,KAAK,QAAQ,eAAe,SAAS,QAAQ,wBAAwB;AAAA,IACvE,EAAE,KAAK,GAAG,QAAQ,QAAQ,MAAM,SAAS,QAAQ,mBAAmB;AAAA;AAAA,IACpE,EAAE,KAAK,GAAG,OAAO,MAAM,QAAQ,qBAAqB;AAAA,IACpD,EAAE,KAAK,GAAG,OAAO,MAAM,QAAQ,mBAAmB;AAAA,IAClD,EAAE,KAAK,KAAK,QAAQ,gBAAgB;AAAA,IACpC,EAAE,KAAK,KAAK,QAAQ,YAAY;AAAA,EAClC;AAEA,SACE,oCAAC,OAAI,eAAc,UAAS,aAAY,UAAS,aAAY,WAAU,UAAU,GAAG,SAAS,KAC3F,oCAAC,OAAI,cAAc,KACjB,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,oBAAkB,CAC/C,GAEC,UAAU,IAAI,CAAC,GAAG,QACjB,oCAAC,OAAI,KAAK,KAAK,cAAc,KAC3B,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAE,EAAE,IAAI,OAAO,EAAE,CAAE,GAC7C,oCAAC,QAAK,OAAM,aAAW,EAAE,MAAO,CAClC,CACD,GAED,oCAAC,OAAI,WAAW,KACd,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,yBAE/B,CACF,CACF;AAEJ;","names":[]}
@@ -1,29 +1,26 @@
1
- import React from 'react';
2
- import { Box, Text } from 'ink';
3
- import Spinner from 'ink-spinner';
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+ import Spinner from "ink-spinner";
4
+ import { ShimmerText } from "./ShimmerText.js";
4
5
  const LOADING_MESSAGES = [
5
- 'Thrusting',
6
- 'Propelling',
7
- 'Boosting',
8
- 'Launching',
9
- 'Intercepting',
10
- 'Slingshotting',
11
- 'Accelerating',
12
- 'Cruising',
13
- 'Warping',
14
- 'Docking'
6
+ "Thrusting",
7
+ "Propelling",
8
+ "Boosting",
9
+ "Launching",
10
+ "Intercepting",
11
+ "Slingshotting",
12
+ "Accelerating",
13
+ "Cruising",
14
+ "Warping",
15
+ "Docking"
15
16
  ];
16
- const SPINNER_TYPES = ['dots', 'dots2', 'line', 'star', 'arc', 'circle', 'arrow', 'bouncingBar', 'bouncingBall', 'earth', 'moon'];
17
- export const LoadingIndicator = () => {
18
- // Use useMemo to pick random message and spinner only once, not on every render
19
- const messageIndex = React.useMemo(() => Math.floor(Math.random() * LOADING_MESSAGES.length), []);
20
- const spinnerType = React.useMemo(() => SPINNER_TYPES[Math.floor(Math.random() * SPINNER_TYPES.length)], []);
21
- return (React.createElement(Box, null,
22
- React.createElement(Text, { color: "#00ccff" },
23
- React.createElement(Spinner, { type: spinnerType })),
24
- React.createElement(Text, { color: "#00ccff", bold: true },
25
- " ",
26
- LOADING_MESSAGES[messageIndex],
27
- "...")));
17
+ const SPINNER_TYPES = ["dots", "dots2", "line", "star", "arc", "circle", "arrow", "bouncingBar", "bouncingBall", "earth", "moon"];
18
+ const LoadingIndicator = () => {
19
+ const messageIndex = React.useMemo(() => Math.floor(Math.random() * LOADING_MESSAGES.length), []);
20
+ const spinnerType = React.useMemo(() => SPINNER_TYPES[Math.floor(Math.random() * SPINNER_TYPES.length)], []);
21
+ return /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, /* @__PURE__ */ React.createElement(Spinner, { type: spinnerType })), /* @__PURE__ */ React.createElement(Text, null, " "), /* @__PURE__ */ React.createElement(ShimmerText, { text: `${LOADING_MESSAGES[messageIndex]}...`, baseColor: "#00ccff", bold: true }));
22
+ };
23
+ export {
24
+ LoadingIndicator
28
25
  };
29
26
  //# sourceMappingURL=LoadingIndicator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoadingIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/LoadingIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,OAAO,MAAM,aAAa,CAAC;AAElC,MAAM,gBAAgB,GAAG;IACvB,WAAW;IACX,YAAY;IACZ,UAAU;IACV,WAAW;IACX,cAAc;IACd,eAAe;IACf,cAAc;IACd,UAAU;IACV,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAE3I,MAAM,CAAC,MAAM,gBAAgB,GAAa,GAAG,EAAE;IAC7C,gFAAgF;IAChF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAClG,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7G,OAAO,CACL,oBAAC,GAAG;QACF,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS;YACnB,oBAAC,OAAO,IAAC,IAAI,EAAE,WAAW,GAAI,CACzB;QACP,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI;;YAAG,gBAAgB,CAAC,YAAY,CAAC;kBAAW,CAClE,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/ui/components/LoadingIndicator.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text } from 'ink';\r\nimport Spinner from 'ink-spinner';\r\nimport { ShimmerText } from './ShimmerText.js';\r\n\r\nconst LOADING_MESSAGES = [\r\n 'Thrusting',\r\n 'Propelling',\r\n 'Boosting',\r\n 'Launching',\r\n 'Intercepting',\r\n 'Slingshotting',\r\n 'Accelerating',\r\n 'Cruising',\r\n 'Warping',\r\n 'Docking'\r\n];\r\n\r\nconst SPINNER_TYPES = ['dots', 'dots2', 'line', 'star', 'arc', 'circle', 'arrow', 'bouncingBar', 'bouncingBall', 'earth', 'moon'] as const;\r\n\r\nexport const LoadingIndicator: React.FC = () => {\r\n // Use useMemo to pick random message and spinner only once, not on every render\r\n const messageIndex = React.useMemo(() => Math.floor(Math.random() * LOADING_MESSAGES.length), []);\r\n const spinnerType = React.useMemo(() => SPINNER_TYPES[Math.floor(Math.random() * SPINNER_TYPES.length)], []);\r\n\r\n return (\r\n <Box>\r\n <Text color=\"#00ccff\">\r\n <Spinner type={spinnerType} />\r\n </Text>\r\n <Text> </Text>\r\n <ShimmerText text={`${LOADING_MESSAGES[messageIndex]}...`} baseColor=\"#00ccff\" bold />\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,OAAO,aAAa;AACpB,SAAS,mBAAmB;AAE5B,MAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,gBAAgB,CAAC,QAAQ,SAAS,QAAQ,QAAQ,OAAO,UAAU,SAAS,eAAe,gBAAgB,SAAS,MAAM;AAEzH,MAAM,mBAA6B,MAAM;AAE9C,QAAM,eAAe,MAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,iBAAiB,MAAM,GAAG,CAAC,CAAC;AAChG,QAAM,cAAc,MAAM,QAAQ,MAAM,cAAc,KAAK,MAAM,KAAK,OAAO,IAAI,cAAc,MAAM,CAAC,GAAG,CAAC,CAAC;AAE3G,SACE,oCAAC,WACC,oCAAC,QAAK,OAAM,aACV,oCAAC,WAAQ,MAAM,aAAa,CAC9B,GACA,oCAAC,YAAK,GAAC,GACP,oCAAC,eAAY,MAAM,GAAG,iBAAiB,YAAY,CAAC,OAAO,WAAU,WAAU,MAAI,MAAC,CACtF;AAEJ;","names":[]}
@@ -1,54 +1,43 @@
1
- import React from 'react';
2
- import { Box, Text } from 'ink';
3
- import { MultiLineInput } from './MultiLineInput.js';
4
- export const MCPAddScreen = ({ onAdd, onCancel, validateConfig }) => {
5
- const [input, setInput] = React.useState('');
6
- const [validationResult, setValidationResult] = React.useState(null);
7
- // Note: ESC key handling is done in App.tsx
8
- const handleSubmit = () => {
9
- if (!input.trim()) {
10
- setValidationResult({ valid: false, error: 'Please paste your MCP server configuration' });
11
- return;
12
- }
13
- // Validate and add immediately on first Enter
14
- const result = validateConfig(input.trim());
15
- setValidationResult(result);
16
- if (result.valid && result.config) {
17
- // Add the server immediately
18
- onAdd(result.config);
19
- }
20
- };
21
- const handleInputChange = (value) => {
22
- setInput(value);
23
- // Reset validation when input changes
24
- if (validationResult) {
25
- setValidationResult(null);
26
- }
27
- };
28
- const exampleConfig = `"chrome-devtools": {
29
- "command": "npx",
30
- "args": ["-y", "chrome-devtools-mcp@latest"]
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+ import { MultiLineInput } from "./MultiLineInput.js";
4
+ const MCPAddScreen = ({ onAdd, onCancel, validateConfig }) => {
5
+ const [input, setInput] = React.useState("");
6
+ const [validationResult, setValidationResult] = React.useState(null);
7
+ const handleSubmit = () => {
8
+ if (!input.trim()) {
9
+ setValidationResult({ valid: false, error: "Please paste your MCP server configuration" });
10
+ return;
11
+ }
12
+ const result = validateConfig(input.trim());
13
+ setValidationResult(result);
14
+ if (result.valid && result.config) {
15
+ onAdd(result.config);
16
+ }
17
+ };
18
+ const handleInputChange = (value) => {
19
+ setInput(value);
20
+ if (validationResult) {
21
+ setValidationResult(null);
22
+ }
23
+ };
24
+ const exampleConfig = `"chrome-devtools": {
25
+ "command": "npx",
26
+ "args": ["-y", "chrome-devtools-mcp@latest"]
31
27
  }`;
32
- return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#00ccff", paddingX: 1 },
33
- React.createElement(Text, { color: "#00ccff", bold: true }, "Add MCP Server"),
34
- React.createElement(Box, { marginTop: 1 },
35
- React.createElement(Text, { color: "gray" }, "Example format:")),
36
- React.createElement(Box, { marginTop: 1, borderStyle: "round", borderColor: "gray", paddingX: 1 },
37
- React.createElement(Text, { color: "#888888" }, exampleConfig)),
38
- React.createElement(Box, { marginTop: 1 },
39
- React.createElement(Text, { color: "gray" }, "Paste your MCP server config:")),
40
- React.createElement(Box, { marginTop: 1, borderStyle: "round", borderColor: validationResult?.valid ? '#00cc66' : (validationResult?.error ? '#ff6666' : '#555555'), paddingX: 1 },
41
- React.createElement(MultiLineInput, { value: input, onChange: handleInputChange, onSubmit: handleSubmit, placeholder: '{"name": "...", "command": "...", "args": [...]}', minHeight: 3, maxHeight: 5 })),
42
- React.createElement(Box, { marginTop: 1 },
43
- !validationResult && (React.createElement(Text, { dimColor: true }, "Press Enter to add the server")),
44
- validationResult?.valid && (React.createElement(Text, { color: "#00cc66" },
45
- "Adding server \"",
46
- validationResult.config?.name,
47
- "\"...")),
48
- validationResult?.error && (React.createElement(Text, { color: "#ff6666" },
49
- "Error: ",
50
- validationResult.error))),
51
- React.createElement(Box, { marginTop: 1 },
52
- React.createElement(Text, { dimColor: true }, "[Enter] Add Server [ESC] Cancel"))));
28
+ return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#00ccff", paddingX: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#00ccff", bold: true }, "Add MCP Server"), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "gray" }, "Example format:")), /* @__PURE__ */ React.createElement(Box, { marginTop: 1, borderStyle: "round", borderColor: "gray", paddingX: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#888888" }, exampleConfig)), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "gray" }, "Paste your MCP server config:")), /* @__PURE__ */ React.createElement(Box, { marginTop: 1, borderStyle: "round", borderColor: validationResult?.valid ? "#00cc66" : validationResult?.error ? "#ff6666" : "#555555", paddingX: 1 }, /* @__PURE__ */ React.createElement(
29
+ MultiLineInput,
30
+ {
31
+ value: input,
32
+ onChange: handleInputChange,
33
+ onSubmit: handleSubmit,
34
+ placeholder: '{"name": "...", "command": "...", "args": [...]}',
35
+ minHeight: 3,
36
+ maxHeight: 5
37
+ }
38
+ )), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, !validationResult && /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Enter to add the server"), validationResult?.valid && /* @__PURE__ */ React.createElement(Text, { color: "#00cc66" }, 'Adding server "', validationResult.config?.name, '"...'), validationResult?.error && /* @__PURE__ */ React.createElement(Text, { color: "#ff6666" }, "Error: ", validationResult.error)), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "[Enter] Add Server [ESC] Cancel")));
39
+ };
40
+ export {
41
+ MCPAddScreen
53
42
  };
54
43
  //# sourceMappingURL=MCPAddScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MCPAddScreen.js","sourceRoot":"","sources":["../../../src/ui/components/MCPAddScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE;IAC7F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAA0D,IAAI,CAAC,CAAC;IAC9H,4CAA4C;IAE5C,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC,CAAC;YAC3F,OAAO;QACX,CAAC;QAED,8CAA8C;QAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAE5B,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,6BAA6B;YAC7B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE;QACxC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,sCAAsC;QACtC,IAAI,gBAAgB,EAAE,CAAC;YACnB,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG;;;EAGxB,CAAC;IAEC,OAAO,CACH,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,QAAQ,EAAE,CAAC;QAC7E,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,2BAAsB;QAEhD,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACb,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,sBAAuB,CACvC;QAEN,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC;YACjE,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,IAAE,aAAa,CAAQ,CAC1C;QAEN,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACb,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,oCAAqC,CACrD;QAEN,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;YACpJ,oBAAC,cAAc,IACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAC,kDAAkD,EAC9D,SAAS,EAAE,CAAC,EACZ,SAAS,EAAE,CAAC,GACd,CACA;QAGN,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACZ,CAAC,gBAAgB,IAAI,CAClB,oBAAC,IAAI,IAAC,QAAQ,0CAAqC,CACtD;YACA,gBAAgB,EAAE,KAAK,IAAI,CACxB,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS;;gBAAiB,gBAAgB,CAAC,MAAM,EAAE,IAAI;wBAAY,CAClF;YACA,gBAAgB,EAAE,KAAK,IAAI,CACxB,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS;;gBAAS,gBAAgB,CAAC,KAAK,CAAQ,CAC/D,CACC;QAEN,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACb,oBAAC,IAAI,IAAC,QAAQ,6CAAwC,CACpD,CACJ,CACT,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/ui/components/MCPAddScreen.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text } from 'ink';\r\nimport { MultiLineInput } from './MultiLineInput.js';\r\n\r\ninterface MCPAddScreenProps {\r\n onAdd: (config: any) => void;\r\n onCancel: () => void;\r\n validateConfig: (jsonString: string) => { valid: boolean; config?: any; error?: string };\r\n}\r\n\r\nexport const MCPAddScreen: React.FC<MCPAddScreenProps> = ({ onAdd, onCancel, validateConfig }) => {\r\n const [input, setInput] = React.useState('');\r\n const [validationResult, setValidationResult] = React.useState<{ valid: boolean; config?: any; error?: string } | null>(null);\r\n // Note: ESC key handling is done in App.tsx\r\n\r\n const handleSubmit = () => {\r\n if (!input.trim()) {\r\n setValidationResult({ valid: false, error: 'Please paste your MCP server configuration' });\r\n return;\r\n }\r\n\r\n // Validate and add immediately on first Enter\r\n const result = validateConfig(input.trim());\r\n setValidationResult(result);\r\n\r\n if (result.valid && result.config) {\r\n // Add the server immediately\r\n onAdd(result.config);\r\n }\r\n };\r\n\r\n const handleInputChange = (value: string) => {\r\n setInput(value);\r\n // Reset validation when input changes\r\n if (validationResult) {\r\n setValidationResult(null);\r\n }\r\n };\r\n\r\n const exampleConfig = `\"chrome-devtools\": {\r\n \"command\": \"npx\",\r\n \"args\": [\"-y\", \"chrome-devtools-mcp@latest\"]\r\n}`;\r\n\r\n return (\r\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"#00ccff\" paddingX={1}>\r\n <Text color=\"#00ccff\" bold>Add MCP Server</Text>\r\n\r\n <Box marginTop={1}>\r\n <Text color=\"gray\">Example format:</Text>\r\n </Box>\r\n\r\n <Box marginTop={1} borderStyle=\"round\" borderColor=\"gray\" paddingX={1}>\r\n <Text color=\"#888888\">{exampleConfig}</Text>\r\n </Box>\r\n\r\n <Box marginTop={1}>\r\n <Text color=\"gray\">Paste your MCP server config:</Text>\r\n </Box>\r\n\r\n <Box marginTop={1} borderStyle=\"round\" borderColor={validationResult?.valid ? '#00cc66' : (validationResult?.error ? '#ff6666' : '#555555')} paddingX={1}>\r\n <MultiLineInput\r\n value={input}\r\n onChange={handleInputChange}\r\n onSubmit={handleSubmit}\r\n placeholder='{\"name\": \"...\", \"command\": \"...\", \"args\": [...]}'\r\n minHeight={3}\r\n maxHeight={5}\r\n />\r\n </Box>\r\n\r\n {/* Validation result */}\r\n <Box marginTop={1}>\r\n {!validationResult && (\r\n <Text dimColor>Press Enter to add the server</Text>\r\n )}\r\n {validationResult?.valid && (\r\n <Text color=\"#00cc66\">Adding server \"{validationResult.config?.name}\"...</Text>\r\n )}\r\n {validationResult?.error && (\r\n <Text color=\"#ff6666\">Error: {validationResult.error}</Text>\r\n )}\r\n </Box>\r\n\r\n <Box marginTop={1}>\r\n <Text dimColor>[Enter] Add Server [ESC] Cancel</Text>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,SAAS,sBAAsB;AAQxB,MAAM,eAA4C,CAAC,EAAE,OAAO,UAAU,eAAe,MAAM;AAC9F,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,EAAE;AAC3C,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,MAAM,SAAkE,IAAI;AAG5H,QAAM,eAAe,MAAM;AACvB,QAAI,CAAC,MAAM,KAAK,GAAG;AACf,0BAAoB,EAAE,OAAO,OAAO,OAAO,6CAA6C,CAAC;AACzF;AAAA,IACJ;AAGA,UAAM,SAAS,eAAe,MAAM,KAAK,CAAC;AAC1C,wBAAoB,MAAM;AAE1B,QAAI,OAAO,SAAS,OAAO,QAAQ;AAE/B,YAAM,OAAO,MAAM;AAAA,IACvB;AAAA,EACJ;AAEA,QAAM,oBAAoB,CAAC,UAAkB;AACzC,aAAS,KAAK;AAEd,QAAI,kBAAkB;AAClB,0BAAoB,IAAI;AAAA,IAC5B;AAAA,EACJ;AAEA,QAAM,gBAAgB;AAAA;AAAA;AAAA;AAKtB,SACI,oCAAC,OAAI,eAAc,UAAS,aAAY,SAAQ,aAAY,WAAU,UAAU,KAC5E,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,gBAAc,GAEzC,oCAAC,OAAI,WAAW,KACZ,oCAAC,QAAK,OAAM,UAAO,iBAAe,CACtC,GAEA,oCAAC,OAAI,WAAW,GAAG,aAAY,SAAQ,aAAY,QAAO,UAAU,KAChE,oCAAC,QAAK,OAAM,aAAW,aAAc,CACzC,GAEA,oCAAC,OAAI,WAAW,KACZ,oCAAC,QAAK,OAAM,UAAO,+BAA6B,CACpD,GAEA,oCAAC,OAAI,WAAW,GAAG,aAAY,SAAQ,aAAa,kBAAkB,QAAQ,YAAa,kBAAkB,QAAQ,YAAY,WAAY,UAAU,KACnJ;AAAA,IAAC;AAAA;AAAA,MACG,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,aAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA;AAAA,EACf,CACJ,GAGA,oCAAC,OAAI,WAAW,KACX,CAAC,oBACE,oCAAC,QAAK,UAAQ,QAAC,+BAA6B,GAE/C,kBAAkB,SACf,oCAAC,QAAK,OAAM,aAAU,mBAAgB,iBAAiB,QAAQ,MAAK,MAAI,GAE3E,kBAAkB,SACf,oCAAC,QAAK,OAAM,aAAU,WAAQ,iBAAiB,KAAM,CAE7D,GAEA,oCAAC,OAAI,WAAW,KACZ,oCAAC,QAAK,UAAQ,QAAC,kCAAgC,CACnD,CACJ;AAER;","names":[]}
@@ -1,50 +1,42 @@
1
- import React from 'react';
2
- import { Box, Text } from 'ink';
3
- export const MCPListScreen = ({ servers, onClose }) => {
4
- // Note: ESC key handling is done in App.tsx
5
- const getStatusIcon = (server) => {
6
- if (!server.enabled)
7
- return '⏸️';
8
- switch (server.status) {
9
- case 'connected': return '✓';
10
- case 'error': return '❌';
11
- case 'connecting': return '⚠️';
12
- default: return '⚠️';
13
- }
14
- };
15
- const getStatusText = (server) => {
16
- if (!server.enabled)
17
- return 'Disabled';
18
- switch (server.status) {
19
- case 'connected': return 'Enabled';
20
- case 'error': return 'Error';
21
- case 'connecting': return 'Connecting';
22
- default: return 'Unknown';
23
- }
24
- };
25
- const renderToolsBox = (tools) => {
26
- if (tools.length === 0) {
27
- return (React.createElement(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, marginTop: 1 },
28
- React.createElement(Text, { color: "gray" }, "No tools available")));
29
- }
30
- // Create a string with all tool names separated by spaces
31
- const toolNames = tools.map(t => t.name).join(' ');
32
- return (React.createElement(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, marginTop: 1, flexWrap: "wrap" },
33
- React.createElement(Text, { color: "gray" }, toolNames)));
34
- };
35
- return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#00aaff", paddingX: 1 },
36
- React.createElement(Text, { color: "#00aaff", bold: true }, "MCP Servers and Tools"),
37
- React.createElement(Text, { dimColor: true }, "View all configured MCP servers and their available tools"),
38
- React.createElement(Box, { flexDirection: "column", marginTop: 1 }, servers.map((server, index) => (React.createElement(Box, { key: server.name, flexDirection: "column", marginBottom: index < servers.length - 1 ? 1 : 0 },
39
- React.createElement(Box, null,
40
- React.createElement(Text, null,
41
- getStatusIcon(server),
42
- " ",
43
- React.createElement(Text, { bold: true }, server.name),
44
- " - ",
45
- React.createElement(Text, { color: server.enabled ? 'green' : 'yellow' }, getStatusText(server)))),
46
- renderToolsBox(server.tools))))),
47
- React.createElement(Box, { marginTop: 1 },
48
- React.createElement(Text, { dimColor: true }, "Press ESC to return to chat"))));
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+ const MCPListScreen = ({ servers, onClose }) => {
4
+ const getStatusIcon = (server) => {
5
+ if (!server.enabled) return "\u23F8\uFE0F";
6
+ switch (server.status) {
7
+ case "connected":
8
+ return "\u2713";
9
+ case "error":
10
+ return "\u274C";
11
+ case "connecting":
12
+ return "\u26A0\uFE0F";
13
+ default:
14
+ return "\u26A0\uFE0F";
15
+ }
16
+ };
17
+ const getStatusText = (server) => {
18
+ if (!server.enabled) return "Disabled";
19
+ switch (server.status) {
20
+ case "connected":
21
+ return "Enabled";
22
+ case "error":
23
+ return "Error";
24
+ case "connecting":
25
+ return "Connecting";
26
+ default:
27
+ return "Unknown";
28
+ }
29
+ };
30
+ const renderToolsBox = (tools) => {
31
+ if (tools.length === 0) {
32
+ return /* @__PURE__ */ React.createElement(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "gray" }, "No tools available"));
33
+ }
34
+ const toolNames = tools.map((t) => t.name).join(" ");
35
+ return /* @__PURE__ */ React.createElement(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, marginTop: 1, flexWrap: "wrap" }, /* @__PURE__ */ React.createElement(Text, { color: "gray" }, toolNames));
36
+ };
37
+ return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#00aaff", paddingX: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#00aaff", bold: true }, "MCP Servers and Tools"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "View all configured MCP servers and their available tools"), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginTop: 1 }, servers.map((server, index) => /* @__PURE__ */ React.createElement(Box, { key: server.name, flexDirection: "column", marginBottom: index < servers.length - 1 ? 1 : 0 }, /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, null, getStatusIcon(server), " ", /* @__PURE__ */ React.createElement(Text, { bold: true }, server.name), " - ", /* @__PURE__ */ React.createElement(Text, { color: server.enabled ? "green" : "yellow" }, getStatusText(server)))), renderToolsBox(server.tools)))), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ESC to return to chat")));
38
+ };
39
+ export {
40
+ MCPListScreen
49
41
  };
50
42
  //# sourceMappingURL=MCPListScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MCPListScreen.js","sourceRoot":"","sources":["../../../src/ui/components/MCPListScreen.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/ui/components/MCPListScreen.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text } from 'ink';\r\n\r\ninterface MCPTool {\r\n name: string;\r\n}\r\n\r\ninterface MCPServerInfo {\r\n name: string;\r\n enabled: boolean;\r\n status: 'connected' | 'disconnected' | 'error' | 'connecting';\r\n tools: MCPTool[];\r\n}\r\n\r\ninterface MCPListScreenProps {\r\n servers: MCPServerInfo[];\r\n onClose: () => void;\r\n}\r\n\r\nexport const MCPListScreen: React.FC<MCPListScreenProps> = ({ servers, onClose }) => {\r\n // Note: ESC key handling is done in App.tsx\r\n\r\n const getStatusIcon = (server: MCPServerInfo) => {\r\n if (!server.enabled) return '⏸️';\r\n switch (server.status) {\r\n case 'connected': return '✓';\r\n case 'error': return '❌';\r\n case 'connecting': return '⚠️';\r\n default: return '⚠️';\r\n }\r\n };\r\n\r\n const getStatusText = (server: MCPServerInfo) => {\r\n if (!server.enabled) return 'Disabled';\r\n switch (server.status) {\r\n case 'connected': return 'Enabled';\r\n case 'error': return 'Error';\r\n case 'connecting': return 'Connecting';\r\n default: return 'Unknown';\r\n }\r\n };\r\n\r\n const renderToolsBox = (tools: MCPTool[]) => {\r\n if (tools.length === 0) {\r\n return (\r\n <Box borderStyle=\"round\" borderColor=\"gray\" paddingX={1} marginTop={1}>\r\n <Text color=\"gray\">No tools available</Text>\r\n </Box>\r\n );\r\n }\r\n\r\n // Create a string with all tool names separated by spaces\r\n const toolNames = tools.map(t => t.name).join(' ');\r\n\r\n return (\r\n <Box borderStyle=\"round\" borderColor=\"gray\" paddingX={1} marginTop={1} flexWrap=\"wrap\">\r\n <Text color=\"gray\">{toolNames}</Text>\r\n </Box>\r\n );\r\n };\r\n\r\n return (\r\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"#00aaff\" paddingX={1}>\r\n <Text color=\"#00aaff\" bold>MCP Servers and Tools</Text>\r\n <Text dimColor>View all configured MCP servers and their available tools</Text>\r\n\r\n <Box flexDirection=\"column\" marginTop={1}>\r\n {servers.map((server, index) => (\r\n <Box key={server.name} flexDirection=\"column\" marginBottom={index < servers.length - 1 ? 1 : 0}>\r\n <Box>\r\n <Text>\r\n {getStatusIcon(server)} <Text bold>{server.name}</Text> - <Text color={server.enabled ? 'green' : 'yellow'}>{getStatusText(server)}</Text>\r\n </Text>\r\n </Box>\r\n {renderToolsBox(server.tools)}\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n <Box marginTop={1}>\r\n <Text dimColor>Press ESC to return to chat</Text>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAkBnB,MAAM,gBAA8C,CAAC,EAAE,SAAS,QAAQ,MAAM;AAGjF,QAAM,gBAAgB,CAAC,WAA0B;AAC7C,QAAI,CAAC,OAAO,QAAS,QAAO;AAC5B,YAAQ,OAAO,QAAQ;AAAA,MACnB,KAAK;AAAa,eAAO;AAAA,MACzB,KAAK;AAAS,eAAO;AAAA,MACrB,KAAK;AAAc,eAAO;AAAA,MAC1B;AAAS,eAAO;AAAA,IACpB;AAAA,EACJ;AAEA,QAAM,gBAAgB,CAAC,WAA0B;AAC7C,QAAI,CAAC,OAAO,QAAS,QAAO;AAC5B,YAAQ,OAAO,QAAQ;AAAA,MACnB,KAAK;AAAa,eAAO;AAAA,MACzB,KAAK;AAAS,eAAO;AAAA,MACrB,KAAK;AAAc,eAAO;AAAA,MAC1B;AAAS,eAAO;AAAA,IACpB;AAAA,EACJ;AAEA,QAAM,iBAAiB,CAAC,UAAqB;AACzC,QAAI,MAAM,WAAW,GAAG;AACpB,aACI,oCAAC,OAAI,aAAY,SAAQ,aAAY,QAAO,UAAU,GAAG,WAAW,KAChE,oCAAC,QAAK,OAAM,UAAO,oBAAkB,CACzC;AAAA,IAER;AAGA,UAAM,YAAY,MAAM,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,IAAI;AAElD,WACI,oCAAC,OAAI,aAAY,SAAQ,aAAY,QAAO,UAAU,GAAG,WAAW,GAAG,UAAS,UAC5E,oCAAC,QAAK,OAAM,UAAQ,SAAU,CAClC;AAAA,EAER;AAEA,SACI,oCAAC,OAAI,eAAc,UAAS,aAAY,SAAQ,aAAY,WAAU,UAAU,KAC5E,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,uBAAqB,GAChD,oCAAC,QAAK,UAAQ,QAAC,2DAAyD,GAExE,oCAAC,OAAI,eAAc,UAAS,WAAW,KAClC,QAAQ,IAAI,CAAC,QAAQ,UAClB,oCAAC,OAAI,KAAK,OAAO,MAAM,eAAc,UAAS,cAAc,QAAQ,QAAQ,SAAS,IAAI,IAAI,KACzF,oCAAC,WACG,oCAAC,YACI,cAAc,MAAM,GAAE,KAAC,oCAAC,QAAK,MAAI,QAAE,OAAO,IAAK,GAAO,OAAG,oCAAC,QAAK,OAAO,OAAO,UAAU,UAAU,YAAW,cAAc,MAAM,CAAE,CACvI,CACJ,GACC,eAAe,OAAO,KAAK,CAChC,CACH,CACL,GAEA,oCAAC,OAAI,WAAW,KACZ,oCAAC,QAAK,UAAQ,QAAC,6BAA2B,CAC9C,CACJ;AAER;","names":[]}