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":"sub-agent-manager.js","sourceRoot":"","sources":["../../src/services/sub-agent-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/services/sub-agent-manager.ts"],"sourcesContent":["/**\r\n * Sub-Agent Manager Service\r\n * \r\n * Manages the lifecycle of background sub-agents that can be spawned\r\n * by the main agent to handle delegated tasks.\r\n */\r\n\r\nimport { randomUUID } from 'crypto';\r\nimport { aiServiceClient, Message as AIMessage, StreamChunk } from './ai-service-client.js';\r\nimport { apiClient } from './api-client.js';\r\nimport { ToolRegistry } from '../tools/registry.js';\r\nimport { ToolExecutionContext } from '../tools/types.js';\r\nimport { sessionQuotaManager } from './session-quota-manager.js';\r\nimport { logError, logWarning } from '../utils/logger.js';\r\nimport { quickLog } from '../utils/conversation-logger.js';\r\nimport { ContextManager } from '../context/context-manager.js';\r\n\r\n// ==================== Types ====================\r\n\r\nexport interface SubAgentConfig {\r\n prompt: string; // Task description\r\n context: string; // Context information (file paths, structure, etc.)\r\n workingDirectory: string; // CWD for the sub-agent\r\n complexity: number; // 1-10, decides model selection\r\n parentContextManager?: any; // Parent's ContextManager for remote session support (SSH/Docker/WSL)\r\n}\r\n\r\nexport interface FileOperation {\r\n type: 'create' | 'edit' | 'delete';\r\n path: string;\r\n originalContent?: string; // For edits: content before change\r\n newContent?: string; // For create/edit: content after change\r\n diff?: string; // Unified diff format\r\n reasonText?: string; // reason_text from the tool call\r\n timestamp: Date;\r\n}\r\n\r\nexport interface ToolExecution {\r\n toolName: string;\r\n arguments: Record<string, any>;\r\n reasonText?: string;\r\n result: string;\r\n success: boolean;\r\n timestamp: Date;\r\n}\r\n\r\nexport type SubAgentStatus = 'pending' | 'running' | 'completed' | 'failed' | 'terminated';\r\n\r\nexport interface SubAgent {\r\n id: string;\r\n status: SubAgentStatus;\r\n prompt: string;\r\n context: string;\r\n workingDirectory: string;\r\n complexity: number;\r\n model: string;\r\n startTime: Date;\r\n endTime?: Date;\r\n\r\n // Agent loop state\r\n conversationHistory: AIMessage[];\r\n turnCount: number;\r\n\r\n // Tracking changes\r\n fileOperations: FileOperation[];\r\n toolHistory: ToolExecution[];\r\n\r\n // Results\r\n result?: string;\r\n error?: string;\r\n\r\n // Internal flags\r\n isRead: boolean; // Whether main agent has read the results\r\n abortController?: AbortController; // For cancellation\r\n}\r\n\r\n// ==================== Constants ====================\r\n\r\nconst MAX_CONCURRENT_SUBAGENTS = 5;\r\nconst SUBAGENT_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes\r\nconst MAX_TURNS_PER_SUBAGENT = 50;\r\n\r\n// Model selection based on complexity\r\nconst SIMPLE_MODEL = 'gemini-3-flash-preview';\r\nconst COMPLEX_MODEL = 'gemini-3.1-pro-preview';\r\nconst COMPLEXITY_THRESHOLD = 5;\r\n\r\n// ==================== Sub-Agent System Prompt ====================\r\n\r\nconst SUBAGENT_SYSTEM_PROMPT = `You are a sub-agent spawned by a main AI agent to complete a specific task.\r\n\r\nIMPORTANT RULES:\r\n1. You have full access to file system tools (read, write, edit, list, grep, find)\r\n2. You have access to command execution tools\r\n3. Focus ONLY on the task assigned to you\r\n4. Always provide reason_text for every tool call to explain what you're doing\r\n5. Call task_complete when you've finished the assigned task\r\n6. Be efficient - don't explore unnecessarily, stick to the task\r\n7. If you encounter errors, try to resolve them or report clearly what went wrong\r\n\r\nCONTEXT FROM MAIN AGENT:\r\nWorking Directory: {WORKING_DIRECTORY}\r\n\r\n{CONTEXT}\r\n\r\nYOUR TASK:\r\n{PROMPT}\r\n\r\nComplete this task efficiently and call task_complete when done.`;\r\n\r\n// ==================== SubAgentManager Class ====================\r\n\r\nclass SubAgentManagerClass {\r\n private subAgents: Map<string, SubAgent> = new Map();\r\n private toolRegistry?: ToolRegistry;\r\n private onSubAgentCountChange?: (count: number) => void;\r\n private onToolExecutionUpdate?: (update: any) => void;\r\n\r\n /**\r\n * Initialize the manager with a tool registry\r\n */\r\n initialize(toolRegistry: ToolRegistry): void {\r\n this.toolRegistry = toolRegistry;\r\n quickLog(`[${new Date().toISOString()}] [SubAgentManager] Initialized with tool registry\\n`);\r\n }\r\n\r\n /**\r\n * Set callback for sub-agent count changes\r\n */\r\n setOnSubAgentCountChange(callback: (count: number) => void): void {\r\n this.onSubAgentCountChange = callback;\r\n quickLog(`[${new Date().toISOString()}] [SubAgentManager] setOnSubAgentCountChange callback registered\\n`);\r\n }\r\n\r\n /**\r\n * Set callback for tool execution updates (for logging)\r\n */\r\n setOnToolExecutionUpdate(callback: (update: any) => void): void {\r\n this.onToolExecutionUpdate = callback;\r\n }\r\n\r\n /**\r\n * Notify listeners about sub-agent count change\r\n */\r\n private notifyCountChange(): void {\r\n const runningAgents = this.getRunningSubAgents();\r\n const runningCount = runningAgents.length;\r\n const details = runningAgents.map(a => `${a.id}:${a.status}`).join(', ');\r\n\r\n quickLog(`[${new Date().toISOString()}] [SubAgentManager] notifyCountChange called, runningCount=${runningCount}, agents=[${details}]\\n`);\r\n\r\n if (this.onSubAgentCountChange) {\r\n this.onSubAgentCountChange(runningCount);\r\n // quickLog(`Callback invoked`) // Removed redundant log or kept if preferred\r\n }\r\n }\r\n\r\n /**\r\n * Select model based on complexity\r\n */\r\n private selectModel(complexity: number): string {\r\n return complexity <= COMPLEXITY_THRESHOLD ? SIMPLE_MODEL : COMPLEX_MODEL;\r\n }\r\n\r\n /**\r\n * Generate system prompt for sub-agent\r\n */\r\n private generateSystemPrompt(config: SubAgentConfig): string {\r\n return SUBAGENT_SYSTEM_PROMPT\r\n .replace('{WORKING_DIRECTORY}', config.workingDirectory)\r\n .replace('{CONTEXT}', config.context || 'No additional context provided.')\r\n .replace('{PROMPT}', config.prompt);\r\n }\r\n\r\n /**\r\n * Spawn a new sub-agent\r\n */\r\n async spawnSubAgent(config: SubAgentConfig): Promise<{ success: boolean; agentId?: string; error?: string }> {\r\n // Check concurrent limit\r\n if (this.getRunningSubAgents().length >= MAX_CONCURRENT_SUBAGENTS) {\r\n return {\r\n success: false,\r\n error: `Maximum ${MAX_CONCURRENT_SUBAGENTS} concurrent sub-agents allowed. Wait for existing sub-agents to complete.`\r\n };\r\n }\r\n\r\n // Check if tool registry is initialized\r\n if (!this.toolRegistry) {\r\n return {\r\n success: false,\r\n error: 'SubAgentManager not initialized. Tool registry is missing.'\r\n };\r\n }\r\n\r\n // Check authentication\r\n if (!apiClient.isAuthenticated()) {\r\n return {\r\n success: false,\r\n error: 'Authentication required for sub-agents.'\r\n };\r\n }\r\n\r\n // Check session quota\r\n if (!sessionQuotaManager.canSendMessage()) {\r\n return {\r\n success: false,\r\n error: 'Session quota exhausted. Cannot spawn sub-agent.'\r\n };\r\n }\r\n\r\n // Create sub-agent\r\n const agentId = `subagent-${randomUUID().substring(0, 8)}`;\r\n const model = this.selectModel(config.complexity);\r\n\r\n const subAgent: SubAgent = {\r\n id: agentId,\r\n status: 'pending',\r\n prompt: config.prompt,\r\n context: config.context,\r\n workingDirectory: config.workingDirectory,\r\n complexity: config.complexity,\r\n model,\r\n startTime: new Date(),\r\n conversationHistory: [],\r\n turnCount: 0,\r\n fileOperations: [],\r\n toolHistory: [],\r\n isRead: false,\r\n abortController: new AbortController(),\r\n };\r\n\r\n this.subAgents.set(agentId, subAgent);\r\n quickLog(`[${new Date().toISOString()}] [SubAgentManager] Sub-agent ${agentId} added to map, calling notifyCountChange\\\\n`);\r\n this.notifyCountChange();\r\n\r\n // Start the sub-agent loop in background (don't await)\r\n this.runSubAgentLoop(agentId, config).catch(error => {\r\n logError(`Sub-agent ${agentId} failed:`, error);\r\n const agent = this.subAgents.get(agentId);\r\n if (agent && agent.status === 'running') {\r\n agent.status = 'failed';\r\n agent.error = error.message || String(error);\r\n agent.endTime = new Date();\r\n this.notifyCountChange();\r\n }\r\n });\r\n\r\n return { success: true, agentId };\r\n }\r\n\r\n /**\r\n * Run the sub-agent's agent loop\r\n */\r\n private async runSubAgentLoop(agentId: string, config: SubAgentConfig): Promise<void> {\r\n const subAgent = this.subAgents.get(agentId);\r\n if (!subAgent) {\r\n throw new Error(`Sub-agent ${agentId} not found`);\r\n }\r\n\r\n subAgent.status = 'running';\r\n this.notifyCountChange();\r\n\r\n // Set up timeout\r\n const timeoutId = setTimeout(() => {\r\n const agent = this.subAgents.get(agentId);\r\n if (agent && agent.status === 'running') {\r\n agent.status = 'failed';\r\n agent.error = 'Sub-agent timed out after 10 minutes';\r\n agent.endTime = new Date();\r\n agent.abortController?.abort();\r\n this.notifyCountChange();\r\n }\r\n }, SUBAGENT_TIMEOUT_MS);\r\n\r\n try {\r\n // Initialize conversation with system prompt (as user message since backend injects system)\r\n const systemPrompt = this.generateSystemPrompt(config);\r\n subAgent.conversationHistory.push({\r\n role: 'user',\r\n content: systemPrompt,\r\n });\r\n\r\n const tools = this.toolRegistry!.getSchemas();\r\n\r\n // Build execution context\r\n // Use parent's ContextManager if available (for remote sessions like SSH/Docker/WSL),\r\n // otherwise create a new local one\r\n const effectiveContextManager = config.parentContextManager || new ContextManager(config.workingDirectory, process.platform);\r\n\r\n const context: ToolExecutionContext = {\r\n cwd: config.workingDirectory,\r\n contextManager: effectiveContextManager,\r\n requireApproval: async () => true, // Auto-approve for sub-agents (autonomous)\r\n onStreamingOutput: () => { }, // No streaming output for sub-agents (yet)\r\n };\r\n\r\n // Detect environment from the effective context manager's current state\r\n // This ensures the AI model knows the correct OS/shell when in a remote session\r\n const currentCtx = effectiveContextManager.getCurrentContext();\r\n const isRemote = currentCtx && currentCtx.type !== 'local';\r\n let envOs: string;\r\n let envShell: string;\r\n let envHomeDir: string;\r\n let envPlatform: string;\r\n\r\n if (isRemote && currentCtx.metadata) {\r\n // Use remote session's OS/shell info\r\n const remoteOs = currentCtx.metadata.os;\r\n envOs = remoteOs || 'linux'; // Most remote sessions are Linux\r\n envPlatform = envOs === 'windows' ? 'win32' : 'linux';\r\n envShell = currentCtx.metadata.shell || 'bash';\r\n envHomeDir = currentCtx.metadata.homeDirectory || `/home/${currentCtx.metadata.username || 'user'}`;\r\n } else {\r\n // Local environment\r\n envOs = process.platform === 'win32' ? 'windows' : process.platform === 'darwin' ? 'macos' : 'linux';\r\n envPlatform = process.platform;\r\n envShell = process.env.SHELL || 'cmd.exe';\r\n envHomeDir = process.env.USERPROFILE || process.env.HOME || '';\r\n }\r\n\r\n // Agent loop\r\n while (subAgent.turnCount < MAX_TURNS_PER_SUBAGENT && subAgent.status === 'running') {\r\n subAgent.turnCount++;\r\n\r\n // Check quota\r\n sessionQuotaManager.incrementMessageCount();\r\n if (!sessionQuotaManager.canSendMessage()) {\r\n subAgent.status = 'failed';\r\n subAgent.error = 'Session quota exhausted during sub-agent execution';\r\n break;\r\n }\r\n\r\n let assistantMessage = '';\r\n let toolCalls: any[] = [];\r\n\r\n // Stream AI response\r\n try {\r\n for await (const chunk of aiServiceClient.streamChat(\r\n subAgent.model,\r\n subAgent.conversationHistory,\r\n tools,\r\n { cwd: config.workingDirectory, platform: envPlatform, shell: envShell, os: envOs as 'windows' | 'macos' | 'linux', homeDir: envHomeDir },\r\n undefined,\r\n undefined,\r\n subAgent.abortController?.signal\r\n )) {\r\n if (chunk.type === 'error') {\r\n throw new Error(chunk.message);\r\n }\r\n\r\n if (chunk.type === 'text') {\r\n assistantMessage += chunk.content;\r\n }\r\n\r\n if (chunk.type === 'tool_call') {\r\n const toolCall = chunk.toolCall;\r\n // Parse string arguments if needed\r\n if (toolCall.arguments && typeof toolCall.arguments === 'string') {\r\n try {\r\n toolCall.arguments = JSON.parse(toolCall.arguments);\r\n } catch (e) {\r\n // Ignore parsing error\r\n }\r\n }\r\n toolCalls.push(toolCall);\r\n }\r\n\r\n if (chunk.type === 'done') {\r\n break;\r\n }\r\n }\r\n } catch (error: any) {\r\n if (error.name === 'AbortError') {\r\n // Sub-agent was terminated\r\n subAgent.status = 'terminated';\r\n subAgent.endTime = new Date();\r\n break;\r\n }\r\n throw error;\r\n }\r\n\r\n // Add assistant message to history\r\n if (toolCalls.length > 0 || assistantMessage) {\r\n const assistantMsg: AIMessage = {\r\n role: 'assistant',\r\n content: assistantMessage,\r\n };\r\n if (toolCalls.length > 0) {\r\n assistantMsg.tool_calls = toolCalls;\r\n }\r\n subAgent.conversationHistory.push(assistantMsg);\r\n }\r\n\r\n // Execute tool calls\r\n if (toolCalls.length === 0) {\r\n // No tool calls and no task_complete - something went wrong\r\n subAgent.status = 'completed';\r\n subAgent.result = assistantMessage || 'Sub-agent completed without explicit task_complete';\r\n subAgent.endTime = new Date();\r\n break;\r\n }\r\n\r\n for (const toolCall of toolCalls) {\r\n // Check for task_complete\r\n if (toolCall.name === 'task_complete') {\r\n subAgent.status = 'completed';\r\n subAgent.result = assistantMessage || 'Task completed successfully';\r\n subAgent.endTime = new Date();\r\n break;\r\n }\r\n\r\n // Track the tool execution\r\n const reasonText = toolCall.arguments?.reason_text;\r\n const toolExecution: ToolExecution = {\r\n toolName: toolCall.name,\r\n arguments: toolCall.arguments,\r\n reasonText,\r\n result: '',\r\n success: false,\r\n timestamp: new Date(),\r\n };\r\n\r\n try {\r\n quickLog(`[SubAgent ${subAgent.id}] Executing tool: ${toolCall.name}`);\r\n\r\n // Execute the tool\r\n const result = await this.toolRegistry!.execute(toolCall.name, toolCall.arguments, context);\r\n\r\n quickLog(`[SubAgent ${subAgent.id}] Tool ${toolCall.name} execution result: ${JSON.stringify(result)}`);\r\n\r\n toolExecution.success = result.success;\r\n toolExecution.result = result.result;\r\n\r\n // Track file operations\r\n this.trackFileOperation(subAgent, toolCall, result);\r\n\r\n // Add tool result to history\r\n subAgent.conversationHistory.push({\r\n role: 'tool',\r\n tool_call_id: toolCall.id,\r\n content: result.success ? result.result : `Error: ${result.error}`,\r\n });\r\n\r\n } catch (error: any) {\r\n toolExecution.success = false;\r\n toolExecution.result = `Error: ${error.message}`;\r\n\r\n subAgent.conversationHistory.push({\r\n role: 'tool',\r\n tool_call_id: toolCall.id,\r\n content: `Error: ${error.message}`,\r\n });\r\n }\r\n\r\n subAgent.toolHistory.push(toolExecution);\r\n }\r\n\r\n // Check if task was completed\r\n if (subAgent.status === 'completed') {\r\n break;\r\n }\r\n }\r\n\r\n // Check if we hit max turns\r\n if (subAgent.turnCount >= MAX_TURNS_PER_SUBAGENT && subAgent.status === 'running') {\r\n subAgent.status = 'failed';\r\n subAgent.error = `Sub-agent exceeded maximum ${MAX_TURNS_PER_SUBAGENT} turns`;\r\n subAgent.endTime = new Date();\r\n }\r\n\r\n } finally {\r\n clearTimeout(timeoutId);\r\n this.notifyCountChange();\r\n }\r\n\r\n quickLog(`[${new Date().toISOString()}] [SubAgent] ${agentId} finished with status: ${subAgent.status}\\n`);\r\n }\r\n\r\n /**\r\n * Track file operations made by sub-agent\r\n */\r\n private trackFileOperation(subAgent: SubAgent, toolCall: any, result: any): void {\r\n const { name, arguments: args } = toolCall;\r\n\r\n if (name === 'write_to_file') {\r\n subAgent.fileOperations.push({\r\n type: 'create',\r\n path: args.TargetFile || args.target_path || args.file_path || 'unknown_file',\r\n newContent: args.content,\r\n reasonText: args.reason_text,\r\n timestamp: new Date(),\r\n });\r\n } else if (name === 'edit_file' || name === 'multi_edit_file') {\r\n subAgent.fileOperations.push({\r\n type: 'edit',\r\n path: args.file_path || args.target_path || 'unknown_file',\r\n diff: result.success ? result.result : undefined,\r\n reasonText: args.reason_text,\r\n timestamp: new Date(),\r\n });\r\n }\r\n // Note: We could also track delete operations if there was a delete_file tool\r\n }\r\n\r\n /**\r\n * Get a sub-agent by ID\r\n */\r\n getSubAgent(agentId: string): SubAgent | undefined {\r\n return this.subAgents.get(agentId);\r\n }\r\n\r\n /**\r\n * Get all sub-agents\r\n */\r\n getAllSubAgents(): SubAgent[] {\r\n return Array.from(this.subAgents.values());\r\n }\r\n\r\n /**\r\n * Get running sub-agents\r\n */\r\n getRunningSubAgents(): SubAgent[] {\r\n return this.getAllSubAgents().filter(a => a.status === 'running' || a.status === 'pending');\r\n }\r\n\r\n /**\r\n * Get completed but unread sub-agents\r\n */\r\n getCompletedUnreadSubAgents(): SubAgent[] {\r\n return this.getAllSubAgents().filter(a =>\r\n (a.status === 'completed' || a.status === 'failed' || a.status === 'terminated') &&\r\n !a.isRead\r\n );\r\n }\r\n\r\n /**\r\n * Terminate a sub-agent\r\n */\r\n terminateSubAgent(agentId: string): { success: boolean; error?: string } {\r\n const subAgent = this.subAgents.get(agentId);\r\n if (!subAgent) {\r\n return { success: false, error: `Sub-agent ${agentId} not found` };\r\n }\r\n\r\n if (subAgent.status !== 'running' && subAgent.status !== 'pending') {\r\n return { success: false, error: `Sub-agent ${agentId} is not running (status: ${subAgent.status})` };\r\n }\r\n\r\n subAgent.abortController?.abort();\r\n subAgent.status = 'terminated';\r\n subAgent.endTime = new Date();\r\n this.notifyCountChange();\r\n\r\n return { success: true };\r\n }\r\n\r\n /**\r\n * Get formatted diff output for a sub-agent\r\n */\r\n getSubAgentDiff(agentId: string): string {\r\n const subAgent = this.subAgents.get(agentId);\r\n if (!subAgent) {\r\n return `Sub-agent ${agentId} not found`;\r\n }\r\n\r\n const lines: string[] = [];\r\n lines.push(`## Sub-Agent Results: ${agentId}`);\r\n lines.push(`**Status:** ${subAgent.status}`);\r\n lines.push(`**Model:** ${subAgent.model}`);\r\n lines.push(`**Duration:** ${this.formatDuration(subAgent.startTime, subAgent.endTime)}`);\r\n lines.push(`**Turns:** ${subAgent.turnCount}`);\r\n lines.push('');\r\n\r\n if (subAgent.result) {\r\n lines.push(`**Result:** ${subAgent.result}`);\r\n lines.push('');\r\n }\r\n\r\n if (subAgent.error) {\r\n lines.push(`**Error:** ${subAgent.error}`);\r\n lines.push('');\r\n }\r\n\r\n // File operations\r\n if (subAgent.fileOperations.length > 0) {\r\n lines.push('### File Operations');\r\n lines.push('');\r\n\r\n for (const op of subAgent.fileOperations) {\r\n const typeIcon = op.type === 'create' ? '📝' : op.type === 'edit' ? '✏️' : '🗑️';\r\n lines.push(`${typeIcon} **${op.type.toUpperCase()}**: \\`${op.path}\\``);\r\n\r\n if (op.reasonText) {\r\n lines.push(` *Reason:* ${op.reasonText}`);\r\n }\r\n\r\n if (op.diff) {\r\n lines.push('```diff');\r\n lines.push(op.diff);\r\n lines.push('```');\r\n } else if (op.newContent && op.type === 'create') {\r\n // For new files, show a summary\r\n const lineCount = op.newContent.split('\\n').length;\r\n lines.push(` *Created file with ${lineCount} lines*`);\r\n }\r\n lines.push('');\r\n }\r\n }\r\n\r\n // Tool execution history (summarized)\r\n if (subAgent.toolHistory.length > 0) {\r\n lines.push('### Tool Execution Summary');\r\n lines.push('');\r\n\r\n const toolCounts = new Map<string, number>();\r\n for (const exec of subAgent.toolHistory) {\r\n toolCounts.set(exec.toolName, (toolCounts.get(exec.toolName) || 0) + 1);\r\n }\r\n\r\n for (const [tool, count] of toolCounts) {\r\n lines.push(`- ${tool}: ${count} call(s)`);\r\n }\r\n lines.push('');\r\n }\r\n\r\n const markdownReport = lines.join('\\n');\r\n\r\n // Create structured data for UI\r\n const structuredData = {\r\n agentId: subAgent.id,\r\n status: subAgent.status,\r\n model: subAgent.model,\r\n duration: this.formatDuration(subAgent.startTime, subAgent.endTime),\r\n turnCount: subAgent.turnCount,\r\n fileOperations: subAgent.fileOperations.map(op => ({\r\n type: op.type,\r\n path: op.path\r\n })),\r\n result: subAgent.result,\r\n error: subAgent.error\r\n };\r\n\r\n // Return JSON string containing both checkable text (for AI) and structured data (for UI)\r\n // Wrapped in a format that looks like text but can be parsed as JSON if needed by UI\r\n // Actually, let's just return a JSON object string. The AI can read JSON.\r\n return JSON.stringify({\r\n report: markdownReport,\r\n data: structuredData\r\n }, null, 2);\r\n }\r\n\r\n /**\r\n * Mark sub-agent results as read\r\n */\r\n markSubAgentRead(agentId: string): void {\r\n const subAgent = this.subAgents.get(agentId);\r\n if (subAgent) {\r\n subAgent.isRead = true;\r\n }\r\n }\r\n\r\n /**\r\n * Format duration between two dates\r\n */\r\n private formatDuration(start: Date, end?: Date): string {\r\n const endTime = end || new Date();\r\n const durationMs = endTime.getTime() - start.getTime();\r\n const seconds = Math.floor(durationMs / 1000);\r\n const minutes = Math.floor(seconds / 60);\r\n\r\n if (minutes > 0) {\r\n return `${minutes}m ${seconds % 60}s`;\r\n }\r\n return `${seconds}s`;\r\n }\r\n\r\n /**\r\n * Clean up old completed sub-agents (call periodically)\r\n */\r\n cleanup(): void {\r\n const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);\r\n\r\n for (const [id, agent] of this.subAgents) {\r\n if (agent.endTime && agent.endTime < oneHourAgo && agent.isRead) {\r\n this.subAgents.delete(id);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Export singleton\r\nexport const SubAgentManager = new SubAgentManagerClass();\r\n"],"mappings":"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","names":[]}
@@ -1,203 +1,153 @@
1
- /**
2
- * Warpify Detector Service
3
- *
4
- * Detects if the current PTY session has an active warpifiable remote session
5
- * (SSH, WSL, Docker) by analyzing:
6
- * 1. The command that started the shell (most reliable)
7
- * 2. Terminal output patterns (fallback)
8
- */
9
- import stripAnsi from 'strip-ansi';
10
- /**
11
- * SSH command patterns - detect based on the shell command
12
- */
1
+ import stripAnsi from "strip-ansi";
13
2
  const SSH_COMMAND_PATTERNS = [
14
- // ssh user@host, ssh -p port user@host, ssh -i key user@host
15
- /^ssh\s+(?:(?:-\w+\s+\S+\s+)*)?(?:(\S+)@)?(\S+)/i,
3
+ // ssh user@host, ssh -p port user@host, ssh -i key user@host
4
+ /^ssh\s+(?:(?:-\w+\s+\S+\s+)*)?(?:(\S+)@)?(\S+)/i
16
5
  ];
17
- /**
18
- * WSL command patterns
19
- */
20
6
  const WSL_COMMAND_PATTERNS = [
21
- // wsl, wsl -d distro, wsl --distribution distro
22
- /^wsl(?:\s+(?:-d|--distribution)\s+(\S+))?/i,
23
- // bash (when on Windows, often means WSL)
24
- /^bash$/i,
7
+ // wsl, wsl -d distro, wsl --distribution distro
8
+ /^wsl(?:\s+(?:-d|--distribution)\s+(\S+))?/i,
9
+ // bash (when on Windows, often means WSL)
10
+ /^bash$/i
25
11
  ];
26
- /**
27
- * Docker command patterns
28
- */
29
12
  const DOCKER_COMMAND_PATTERNS = [
30
- // docker exec -it container bash
31
- /^docker\s+exec\s+(?:(?:-\w+\s+)*)?(\S+)/i,
32
- // docker run -it image bash
33
- /^docker\s+run\s+(?:(?:-\w+(?:\s+\S+)?\s+)*)?(\S+)/i,
13
+ // docker exec -it container bash
14
+ /^docker\s+exec\s+(?:(?:-\w+\s+)*)?(\S+)/i,
15
+ // docker run -it image bash
16
+ /^docker\s+run\s+(?:(?:-\w+(?:\s+\S+)?\s+)*)?(\S+)/i
34
17
  ];
35
- /**
36
- * Detect warpifiable session - PRIMARY METHOD
37
- * Uses the command that started the shell for reliable detection
38
- *
39
- * @param command - The command that started the shell session (e.g., "ssh rohan@localhost")
40
- * @param output - Optional PTY output for fallback detection
41
- */
42
- export function detectWarpifySession(command, output) {
43
- // First, try command-based detection (most reliable)
44
- const commandSession = detectFromCommand(command);
45
- if (commandSession.type !== 'none') {
46
- return commandSession;
18
+ function detectWarpifySession(command, output) {
19
+ const commandSession = detectFromCommand(command);
20
+ if (commandSession.type !== "none") {
21
+ return commandSession;
22
+ }
23
+ if (output) {
24
+ const outputSession = detectFromOutput(output);
25
+ if (outputSession.type !== "none") {
26
+ return outputSession;
47
27
  }
48
- // Fallback: try output-based detection
49
- if (output) {
50
- const outputSession = detectFromOutput(output);
51
- if (outputSession.type !== 'none') {
52
- return outputSession;
53
- }
54
- }
55
- return {
56
- type: 'none',
57
- detectedFrom: 'none',
58
- confidence: 'high',
59
- };
28
+ }
29
+ return {
30
+ type: "none",
31
+ detectedFrom: "none",
32
+ confidence: "high"
33
+ };
60
34
  }
61
- /**
62
- * Detect session type from the shell command
63
- */
64
35
  function detectFromCommand(command) {
65
- if (!command) {
66
- return { type: 'none', detectedFrom: 'none', confidence: 'high' };
36
+ if (!command) {
37
+ return { type: "none", detectedFrom: "none", confidence: "high" };
38
+ }
39
+ const trimmedCommand = command.trim();
40
+ for (const pattern of SSH_COMMAND_PATTERNS) {
41
+ const match = trimmedCommand.match(pattern);
42
+ if (match) {
43
+ const user = match[1] || "user";
44
+ const host = match[2] || "remote";
45
+ return {
46
+ type: "ssh",
47
+ connectionString: `${user}@${host}`,
48
+ detectedFrom: "command",
49
+ confidence: "high"
50
+ };
67
51
  }
68
- const trimmedCommand = command.trim();
69
- // Check for SSH command
70
- for (const pattern of SSH_COMMAND_PATTERNS) {
71
- const match = trimmedCommand.match(pattern);
72
- if (match) {
73
- const user = match[1] || 'user';
74
- const host = match[2] || 'remote';
75
- return {
76
- type: 'ssh',
77
- connectionString: `${user}@${host}`,
78
- detectedFrom: 'command',
79
- confidence: 'high',
80
- };
81
- }
52
+ }
53
+ for (const pattern of WSL_COMMAND_PATTERNS) {
54
+ const match = trimmedCommand.match(pattern);
55
+ if (match) {
56
+ const distro = match[1] || "Ubuntu";
57
+ return {
58
+ type: "wsl",
59
+ connectionString: distro,
60
+ detectedFrom: "command",
61
+ confidence: "high"
62
+ };
82
63
  }
83
- // Check for WSL command
84
- for (const pattern of WSL_COMMAND_PATTERNS) {
85
- const match = trimmedCommand.match(pattern);
86
- if (match) {
87
- const distro = match[1] || 'Ubuntu';
88
- return {
89
- type: 'wsl',
90
- connectionString: distro,
91
- detectedFrom: 'command',
92
- confidence: 'high',
93
- };
94
- }
64
+ }
65
+ for (const pattern of DOCKER_COMMAND_PATTERNS) {
66
+ const match = trimmedCommand.match(pattern);
67
+ if (match) {
68
+ const container = match[1]?.substring(0, 12) || "container";
69
+ return {
70
+ type: "docker",
71
+ connectionString: container,
72
+ detectedFrom: "command",
73
+ confidence: "high"
74
+ };
95
75
  }
96
- // Check for Docker command
97
- for (const pattern of DOCKER_COMMAND_PATTERNS) {
98
- const match = trimmedCommand.match(pattern);
99
- if (match) {
100
- const container = match[1]?.substring(0, 12) || 'container';
101
- return {
102
- type: 'docker',
103
- connectionString: container,
104
- detectedFrom: 'command',
105
- confidence: 'high',
106
- };
107
- }
108
- }
109
- return { type: 'none', detectedFrom: 'none', confidence: 'high' };
76
+ }
77
+ return { type: "none", detectedFrom: "none", confidence: "high" };
110
78
  }
111
- /**
112
- * Detect session from PTY output (fallback method)
113
- * Used when the command was not an obvious SSH/WSL/Docker command
114
- */
115
79
  function detectFromOutput(output) {
116
- // Strip ANSI codes for reliable pattern matching
117
- const cleanOutput = stripAnsi(output);
118
- const recentOutput = getRecentLines(cleanOutput, 30);
119
- // Check for SSH environment variables (very reliable)
120
- if (/SSH_CLIENT=|SSH_CONNECTION=|SSH_TTY=/.test(recentOutput)) {
121
- // Try to extract connection info from prompt
122
- const promptMatch = recentOutput.match(/([a-zA-Z0-9_-]+)@([a-zA-Z0-9._-]+)/);
123
- return {
124
- type: 'ssh',
125
- connectionString: promptMatch ? `${promptMatch[1]}@${promptMatch[2]}` : undefined,
126
- detectedFrom: 'env',
127
- confidence: 'high',
128
- };
129
- }
130
- // Check for WSL indicators
131
- if (/\/mnt\/[a-z]\//.test(recentOutput) || /microsoft-standard-WSL/i.test(recentOutput)) {
132
- const promptMatch = recentOutput.match(/([a-zA-Z0-9_-]+)@([a-zA-Z0-9._-]+)/);
133
- return {
134
- type: 'wsl',
135
- connectionString: promptMatch?.[2] || 'WSL',
136
- detectedFrom: 'prompt',
137
- confidence: 'high',
138
- };
139
- }
140
- // Check for Docker indicators
141
- if (/docker|container/i.test(recentOutput) || /^[a-f0-9]{12}:/.test(recentOutput)) {
142
- const containerMatch = recentOutput.match(/@([a-f0-9]{12})/);
143
- return {
144
- type: 'docker',
145
- connectionString: containerMatch?.[1] || 'container',
146
- detectedFrom: 'prompt',
147
- confidence: 'medium',
148
- };
149
- }
150
- return { type: 'none', detectedFrom: 'none', confidence: 'high' };
80
+ const cleanOutput = stripAnsi(output);
81
+ const recentOutput = getRecentLines(cleanOutput, 30);
82
+ if (/SSH_CLIENT=|SSH_CONNECTION=|SSH_TTY=/.test(recentOutput)) {
83
+ const promptMatch = recentOutput.match(/([a-zA-Z0-9_-]+)@([a-zA-Z0-9._-]+)/);
84
+ return {
85
+ type: "ssh",
86
+ connectionString: promptMatch ? `${promptMatch[1]}@${promptMatch[2]}` : void 0,
87
+ detectedFrom: "env",
88
+ confidence: "high"
89
+ };
90
+ }
91
+ if (/\/mnt\/[a-z]\//.test(recentOutput) || /microsoft-standard-WSL/i.test(recentOutput)) {
92
+ const promptMatch = recentOutput.match(/([a-zA-Z0-9_-]+)@([a-zA-Z0-9._-]+)/);
93
+ return {
94
+ type: "wsl",
95
+ connectionString: promptMatch?.[2] || "WSL",
96
+ detectedFrom: "prompt",
97
+ confidence: "high"
98
+ };
99
+ }
100
+ if (/docker|container/i.test(recentOutput) || /^[a-f0-9]{12}:/.test(recentOutput)) {
101
+ const containerMatch = recentOutput.match(/@([a-f0-9]{12})/);
102
+ return {
103
+ type: "docker",
104
+ connectionString: containerMatch?.[1] || "container",
105
+ detectedFrom: "prompt",
106
+ confidence: "medium"
107
+ };
108
+ }
109
+ return { type: "none", detectedFrom: "none", confidence: "high" };
151
110
  }
152
- /**
153
- * Get the last N lines of output
154
- */
155
111
  function getRecentLines(output, n) {
156
- const lines = output.split('\n');
157
- return lines.slice(-n).join('\n');
112
+ const lines = output.split("\n");
113
+ return lines.slice(-n).join("\n");
158
114
  }
159
- /**
160
- * Get a human-readable description of the detected session
161
- */
162
- export function getSessionDescription(session) {
163
- switch (session.type) {
164
- case 'ssh':
165
- return session.connectionString
166
- ? `SSH session: ${session.connectionString}`
167
- : 'SSH session detected';
168
- case 'wsl':
169
- return session.connectionString
170
- ? `WSL: ${session.connectionString}`
171
- : 'WSL session detected';
172
- case 'docker':
173
- return session.connectionString
174
- ? `Docker container: ${session.connectionString}`
175
- : 'Docker session detected';
176
- default:
177
- return 'No remote session detected';
178
- }
115
+ function getSessionDescription(session) {
116
+ switch (session.type) {
117
+ case "ssh":
118
+ return session.connectionString ? `SSH session: ${session.connectionString}` : "SSH session detected";
119
+ case "wsl":
120
+ return session.connectionString ? `WSL: ${session.connectionString}` : "WSL session detected";
121
+ case "docker":
122
+ return session.connectionString ? `Docker container: ${session.connectionString}` : "Docker session detected";
123
+ default:
124
+ return "No remote session detected";
125
+ }
179
126
  }
180
- /**
181
- * WarpifyDetector class for stateful detection
182
- */
183
- export class WarpifyDetector {
184
- lastDetection = null;
185
- /**
186
- * Detect warpifiable session
187
- * @param command - The shell command that started the session
188
- * @param output - Optional PTY output for fallback detection
189
- */
190
- detect(command, output) {
191
- const session = detectWarpifySession(command, output);
192
- this.lastDetection = session;
193
- return session;
194
- }
195
- getLastDetection() {
196
- return this.lastDetection;
197
- }
198
- reset() {
199
- this.lastDetection = null;
200
- }
127
+ class WarpifyDetector {
128
+ lastDetection = null;
129
+ /**
130
+ * Detect warpifiable session
131
+ * @param command - The shell command that started the session
132
+ * @param output - Optional PTY output for fallback detection
133
+ */
134
+ detect(command, output) {
135
+ const session = detectWarpifySession(command, output);
136
+ this.lastDetection = session;
137
+ return session;
138
+ }
139
+ getLastDetection() {
140
+ return this.lastDetection;
141
+ }
142
+ reset() {
143
+ this.lastDetection = null;
144
+ }
201
145
  }
202
- export const warpifyDetector = new WarpifyDetector();
146
+ const warpifyDetector = new WarpifyDetector();
147
+ export {
148
+ WarpifyDetector,
149
+ detectWarpifySession,
150
+ getSessionDescription,
151
+ warpifyDetector
152
+ };
203
153
  //# sourceMappingURL=warpify-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"warpify-detector.js","sourceRoot":"","sources":["../../src/services/warpify-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/services/warpify-detector.ts"],"sourcesContent":["/**\r\n * Warpify Detector Service\r\n * \r\n * Detects if the current PTY session has an active warpifiable remote session\r\n * (SSH, WSL, Docker) by analyzing:\r\n * 1. The command that started the shell (most reliable)\r\n * 2. Terminal output patterns (fallback)\r\n */\r\n\r\nimport stripAnsi from 'strip-ansi';\r\n\r\nexport type WarpifySessionType = 'ssh' | 'wsl' | 'docker' | 'none';\r\n\r\nexport interface WarpifySession {\r\n type: WarpifySessionType;\r\n connectionString?: string; // e.g., \"user@hostname\" for SSH, \"Ubuntu\" for WSL\r\n detectedFrom: 'command' | 'prompt' | 'env' | 'none';\r\n confidence: 'high' | 'medium' | 'low';\r\n}\r\n\r\n/**\r\n * SSH command patterns - detect based on the shell command\r\n */\r\nconst SSH_COMMAND_PATTERNS = [\r\n // ssh user@host, ssh -p port user@host, ssh -i key user@host\r\n /^ssh\\s+(?:(?:-\\w+\\s+\\S+\\s+)*)?(?:(\\S+)@)?(\\S+)/i,\r\n];\r\n\r\n/**\r\n * WSL command patterns\r\n */\r\nconst WSL_COMMAND_PATTERNS = [\r\n // wsl, wsl -d distro, wsl --distribution distro\r\n /^wsl(?:\\s+(?:-d|--distribution)\\s+(\\S+))?/i,\r\n // bash (when on Windows, often means WSL)\r\n /^bash$/i,\r\n];\r\n\r\n/**\r\n * Docker command patterns\r\n */\r\nconst DOCKER_COMMAND_PATTERNS = [\r\n // docker exec -it container bash\r\n /^docker\\s+exec\\s+(?:(?:-\\w+\\s+)*)?(\\S+)/i,\r\n // docker run -it image bash\r\n /^docker\\s+run\\s+(?:(?:-\\w+(?:\\s+\\S+)?\\s+)*)?(\\S+)/i,\r\n];\r\n\r\n/**\r\n * Detect warpifiable session - PRIMARY METHOD\r\n * Uses the command that started the shell for reliable detection\r\n * \r\n * @param command - The command that started the shell session (e.g., \"ssh rohan@localhost\")\r\n * @param output - Optional PTY output for fallback detection\r\n */\r\nexport function detectWarpifySession(command: string, output?: string): WarpifySession {\r\n // First, try command-based detection (most reliable)\r\n const commandSession = detectFromCommand(command);\r\n if (commandSession.type !== 'none') {\r\n return commandSession;\r\n }\r\n\r\n // Fallback: try output-based detection\r\n if (output) {\r\n const outputSession = detectFromOutput(output);\r\n if (outputSession.type !== 'none') {\r\n return outputSession;\r\n }\r\n }\r\n\r\n return {\r\n type: 'none',\r\n detectedFrom: 'none',\r\n confidence: 'high',\r\n };\r\n}\r\n\r\n/**\r\n * Detect session type from the shell command\r\n */\r\nfunction detectFromCommand(command: string): WarpifySession {\r\n if (!command) {\r\n return { type: 'none', detectedFrom: 'none', confidence: 'high' };\r\n }\r\n\r\n const trimmedCommand = command.trim();\r\n\r\n // Check for SSH command\r\n for (const pattern of SSH_COMMAND_PATTERNS) {\r\n const match = trimmedCommand.match(pattern);\r\n if (match) {\r\n const user = match[1] || 'user';\r\n const host = match[2] || 'remote';\r\n return {\r\n type: 'ssh',\r\n connectionString: `${user}@${host}`,\r\n detectedFrom: 'command',\r\n confidence: 'high',\r\n };\r\n }\r\n }\r\n\r\n // Check for WSL command\r\n for (const pattern of WSL_COMMAND_PATTERNS) {\r\n const match = trimmedCommand.match(pattern);\r\n if (match) {\r\n const distro = match[1] || 'Ubuntu';\r\n return {\r\n type: 'wsl',\r\n connectionString: distro,\r\n detectedFrom: 'command',\r\n confidence: 'high',\r\n };\r\n }\r\n }\r\n\r\n // Check for Docker command\r\n for (const pattern of DOCKER_COMMAND_PATTERNS) {\r\n const match = trimmedCommand.match(pattern);\r\n if (match) {\r\n const container = match[1]?.substring(0, 12) || 'container';\r\n return {\r\n type: 'docker',\r\n connectionString: container,\r\n detectedFrom: 'command',\r\n confidence: 'high',\r\n };\r\n }\r\n }\r\n\r\n return { type: 'none', detectedFrom: 'none', confidence: 'high' };\r\n}\r\n\r\n/**\r\n * Detect session from PTY output (fallback method)\r\n * Used when the command was not an obvious SSH/WSL/Docker command\r\n */\r\nfunction detectFromOutput(output: string): WarpifySession {\r\n // Strip ANSI codes for reliable pattern matching\r\n const cleanOutput = stripAnsi(output);\r\n const recentOutput = getRecentLines(cleanOutput, 30);\r\n\r\n // Check for SSH environment variables (very reliable)\r\n if (/SSH_CLIENT=|SSH_CONNECTION=|SSH_TTY=/.test(recentOutput)) {\r\n // Try to extract connection info from prompt\r\n const promptMatch = recentOutput.match(/([a-zA-Z0-9_-]+)@([a-zA-Z0-9._-]+)/);\r\n return {\r\n type: 'ssh',\r\n connectionString: promptMatch ? `${promptMatch[1]}@${promptMatch[2]}` : undefined,\r\n detectedFrom: 'env',\r\n confidence: 'high',\r\n };\r\n }\r\n\r\n // Check for WSL indicators\r\n if (/\\/mnt\\/[a-z]\\//.test(recentOutput) || /microsoft-standard-WSL/i.test(recentOutput)) {\r\n const promptMatch = recentOutput.match(/([a-zA-Z0-9_-]+)@([a-zA-Z0-9._-]+)/);\r\n return {\r\n type: 'wsl',\r\n connectionString: promptMatch?.[2] || 'WSL',\r\n detectedFrom: 'prompt',\r\n confidence: 'high',\r\n };\r\n }\r\n\r\n // Check for Docker indicators\r\n if (/docker|container/i.test(recentOutput) || /^[a-f0-9]{12}:/.test(recentOutput)) {\r\n const containerMatch = recentOutput.match(/@([a-f0-9]{12})/);\r\n return {\r\n type: 'docker',\r\n connectionString: containerMatch?.[1] || 'container',\r\n detectedFrom: 'prompt',\r\n confidence: 'medium',\r\n };\r\n }\r\n\r\n return { type: 'none', detectedFrom: 'none', confidence: 'high' };\r\n}\r\n\r\n/**\r\n * Get the last N lines of output\r\n */\r\nfunction getRecentLines(output: string, n: number): string {\r\n const lines = output.split('\\n');\r\n return lines.slice(-n).join('\\n');\r\n}\r\n\r\n/**\r\n * Get a human-readable description of the detected session\r\n */\r\nexport function getSessionDescription(session: WarpifySession): string {\r\n switch (session.type) {\r\n case 'ssh':\r\n return session.connectionString\r\n ? `SSH session: ${session.connectionString}`\r\n : 'SSH session detected';\r\n case 'wsl':\r\n return session.connectionString\r\n ? `WSL: ${session.connectionString}`\r\n : 'WSL session detected';\r\n case 'docker':\r\n return session.connectionString\r\n ? `Docker container: ${session.connectionString}`\r\n : 'Docker session detected';\r\n default:\r\n return 'No remote session detected';\r\n }\r\n}\r\n\r\n/**\r\n * WarpifyDetector class for stateful detection\r\n */\r\nexport class WarpifyDetector {\r\n private lastDetection: WarpifySession | null = null;\r\n\r\n /**\r\n * Detect warpifiable session\r\n * @param command - The shell command that started the session\r\n * @param output - Optional PTY output for fallback detection\r\n */\r\n detect(command: string, output?: string): WarpifySession {\r\n const session = detectWarpifySession(command, output);\r\n this.lastDetection = session;\r\n return session;\r\n }\r\n\r\n getLastDetection(): WarpifySession | null {\r\n return this.lastDetection;\r\n }\r\n\r\n reset(): void {\r\n this.lastDetection = null;\r\n }\r\n}\r\n\r\nexport const warpifyDetector = new WarpifyDetector();\r\n"],"mappings":"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","names":[]}