centaurus-cli 3.0.0 → 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 -5037
  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 +1513 -973
  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 +605 -537
  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 -400
  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 -3249
  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 -511
  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 -167
  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,301 +1,277 @@
1
- /**
2
- * Background Task Manager
3
- *
4
- * Manages background shell tasks, tracking their state and providing
5
- * notifications when tasks start, complete, or are cancelled.
6
- * Uses PTY for proper terminal emulation and signal handling.
7
- */
8
- import { EventEmitter } from 'events';
9
- import * as os from 'os';
10
- import { createRequire } from 'module';
11
- // Use createRequire for ESM compatibility with native modules
12
- const require = createRequire(import.meta.url);
13
- const nodePty = require('@homebridge/node-pty-prebuilt-multiarch');
14
- import { quickLog } from '../utils/conversation-logger.js';
1
+ import { EventEmitter } from "events";
2
+ import * as os from "os";
3
+ import { createRequire } from "module";
4
+ const require2 = createRequire(import.meta.url);
5
+ const nodePty = require2("@homebridge/node-pty-prebuilt-multiarch");
6
+ import { quickLog } from "../utils/conversation-logger.js";
15
7
  class BackgroundTaskManagerClass extends EventEmitter {
16
- tasks = new Map();
17
- taskCounter = 0;
18
- /**
19
- * Start a new background task using PTY
20
- */
21
- startTask(command, cwd) {
22
- const id = `bkg-${++this.taskCounter}-${Date.now()}`;
23
- const task = {
24
- id,
25
- command,
26
- cwd,
27
- startTime: new Date(),
28
- output: '',
29
- isRunning: true,
30
- };
31
- // Determine shell based on platform
32
- const isWindows = os.platform() === 'win32';
33
- const shell = isWindows ? 'powershell.exe' : (process.env.SHELL || '/bin/bash');
34
- const args = isWindows ? ['-Command', command] : ['-c', command];
35
- // Get initial terminal dimensions
36
- const cols = process.stdout.columns || 80;
37
- const rows = process.stdout.rows || 24;
38
- try {
39
- // Spawn PTY process for proper terminal emulation
40
- const ptyProcess = nodePty.spawn(shell, args, {
41
- name: 'xterm-256color',
42
- cols,
43
- rows,
44
- cwd,
45
- env: {
46
- ...process.env,
47
- TERM: 'xterm-256color',
48
- COLORTERM: 'truecolor',
49
- FORCE_COLOR: '1',
50
- CLICOLOR: '1',
51
- PYTHONUNBUFFERED: '1',
52
- },
53
- });
54
- task.ptyProcess = ptyProcess;
55
- // Capture output
56
- ptyProcess.onData((data) => {
57
- task.output += data;
58
- this.emit('taskOutput', id, data);
59
- });
60
- // Handle process completion
61
- ptyProcess.onExit(({ exitCode }) => {
62
- task.isRunning = false;
63
- task.exitCode = exitCode;
64
- // Debug logging
65
- const fs = require('fs');
66
- try {
67
- quickLog(`[${new Date().toISOString()}] [BackgroundTaskManager] taskCompleted event emitted: id=${id}, exitCode=${exitCode}\n`);
68
- }
69
- catch (e) { }
70
- this.emit('taskCompleted', id, exitCode);
71
- this.emit('countChanged', this.getRunningCount());
72
- });
73
- this.tasks.set(id, task);
74
- this.emit('taskStarted', id, command);
75
- this.emit('countChanged', this.getRunningCount());
76
- return id;
8
+ tasks = /* @__PURE__ */ new Map();
9
+ taskCounter = 0;
10
+ /**
11
+ * Start a new background task using PTY
12
+ */
13
+ startTask(command, cwd) {
14
+ const id = `bkg-${++this.taskCounter}-${Date.now()}`;
15
+ const task = {
16
+ id,
17
+ command,
18
+ cwd,
19
+ startTime: /* @__PURE__ */ new Date(),
20
+ output: "",
21
+ isRunning: true
22
+ };
23
+ const isWindows = os.platform() === "win32";
24
+ const shell = isWindows ? "powershell.exe" : process.env.SHELL || "/bin/bash";
25
+ const args = isWindows ? ["-Command", command] : ["-c", command];
26
+ const cols = process.stdout.columns || 80;
27
+ const rows = process.stdout.rows || 24;
28
+ try {
29
+ const ptyProcess = nodePty.spawn(shell, args, {
30
+ name: "xterm-256color",
31
+ cols,
32
+ rows,
33
+ cwd,
34
+ env: {
35
+ ...process.env,
36
+ TERM: "xterm-256color",
37
+ COLORTERM: "truecolor",
38
+ FORCE_COLOR: "1",
39
+ CLICOLOR: "1",
40
+ PYTHONUNBUFFERED: "1"
77
41
  }
78
- catch (err) {
79
- task.isRunning = false;
80
- task.error = err.message;
81
- this.tasks.set(id, task);
82
- this.emit('taskError', id, err.message);
83
- return id;
42
+ });
43
+ task.ptyProcess = ptyProcess;
44
+ ptyProcess.onData((data) => {
45
+ task.output += data;
46
+ this.emit("taskOutput", id, data);
47
+ });
48
+ ptyProcess.onExit(({ exitCode }) => {
49
+ task.isRunning = false;
50
+ task.exitCode = exitCode;
51
+ const fs = require2("fs");
52
+ try {
53
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [BackgroundTaskManager] taskCompleted event emitted: id=${id}, exitCode=${exitCode}
54
+ `);
55
+ } catch (e) {
84
56
  }
57
+ this.emit("taskCompleted", id, exitCode);
58
+ this.emit("countChanged", this.getRunningCount());
59
+ });
60
+ this.tasks.set(id, task);
61
+ this.emit("taskStarted", id, command);
62
+ this.emit("countChanged", this.getRunningCount());
63
+ return id;
64
+ } catch (err) {
65
+ task.isRunning = false;
66
+ task.error = err.message;
67
+ this.tasks.set(id, task);
68
+ this.emit("taskError", id, err.message);
69
+ return id;
85
70
  }
86
- /**
87
- * Start a new remote background task (SSH/WSL/Docker)
88
- * This registers the task and returns callbacks that should be passed to the remote PTY creator
89
- * @param command The command being executed
90
- * @param cwd The working directory on the remote system
91
- * @param remoteContext Display string for the remote context (e.g., "user@host", "wsl:Ubuntu")
92
- * @returns Object with task ID and callbacks to pass to the remote PTY creator
93
- */
94
- startRemoteTask(command, cwd, remoteContext) {
95
- const id = `bkg-${++this.taskCounter}-${Date.now()}`;
96
- const task = {
97
- id,
98
- command,
99
- cwd,
100
- startTime: new Date(),
101
- output: '',
102
- isRunning: true,
103
- remoteContext
104
- };
105
- this.tasks.set(id, task);
106
- this.emit('taskStarted', id, command);
107
- this.emit('countChanged', this.getRunningCount());
108
- // Return callbacks that the caller should pass to runSSHCommand/runWSLCommand/runDockerCommand
109
- return {
110
- id,
111
- onData: (data) => {
112
- task.output += data;
113
- this.emit('taskOutput', id, data);
114
- },
115
- onExit: (exitCode) => {
116
- task.isRunning = false;
117
- task.exitCode = exitCode;
118
- // Debug logging
119
- const fs = require('fs');
120
- try {
121
- quickLog(`[${new Date().toISOString()}] [BackgroundTaskManager] Remote taskCompleted event emitted: id=${id}, exitCode=${exitCode}\n`);
122
- }
123
- catch (e) { }
124
- this.emit('taskCompleted', id, exitCode);
125
- this.emit('countChanged', this.getRunningCount());
126
- },
127
- setRemotePty: (remotePty) => {
128
- task.remotePtyProcess = remotePty;
129
- }
130
- };
131
- }
132
- /**
133
- * Get all tasks (running and completed)
134
- */
135
- getAllTasks() {
136
- const now = Date.now();
137
- return Array.from(this.tasks.values()).map(task => ({
138
- id: task.id,
139
- command: task.command,
140
- cwd: task.cwd,
141
- startTime: task.startTime,
142
- durationMs: now - task.startTime.getTime(),
143
- isRunning: task.isRunning,
144
- exitCode: task.exitCode,
145
- error: task.error,
146
- outputPreview: task.output.slice(-200), // Last 200 chars
147
- }));
71
+ }
72
+ /**
73
+ * Start a new remote background task (SSH/WSL/Docker)
74
+ * This registers the task and returns callbacks that should be passed to the remote PTY creator
75
+ * @param command The command being executed
76
+ * @param cwd The working directory on the remote system
77
+ * @param remoteContext Display string for the remote context (e.g., "user@host", "wsl:Ubuntu")
78
+ * @returns Object with task ID and callbacks to pass to the remote PTY creator
79
+ */
80
+ startRemoteTask(command, cwd, remoteContext) {
81
+ const id = `bkg-${++this.taskCounter}-${Date.now()}`;
82
+ const task = {
83
+ id,
84
+ command,
85
+ cwd,
86
+ startTime: /* @__PURE__ */ new Date(),
87
+ output: "",
88
+ isRunning: true,
89
+ remoteContext
90
+ };
91
+ this.tasks.set(id, task);
92
+ this.emit("taskStarted", id, command);
93
+ this.emit("countChanged", this.getRunningCount());
94
+ return {
95
+ id,
96
+ onData: (data) => {
97
+ task.output += data;
98
+ this.emit("taskOutput", id, data);
99
+ },
100
+ onExit: (exitCode) => {
101
+ task.isRunning = false;
102
+ task.exitCode = exitCode;
103
+ const fs = require2("fs");
104
+ try {
105
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [BackgroundTaskManager] Remote taskCompleted event emitted: id=${id}, exitCode=${exitCode}
106
+ `);
107
+ } catch (e) {
108
+ }
109
+ this.emit("taskCompleted", id, exitCode);
110
+ this.emit("countChanged", this.getRunningCount());
111
+ },
112
+ setRemotePty: (remotePty) => {
113
+ task.remotePtyProcess = remotePty;
114
+ }
115
+ };
116
+ }
117
+ /**
118
+ * Get all tasks (running and completed)
119
+ */
120
+ getAllTasks() {
121
+ const now = Date.now();
122
+ return Array.from(this.tasks.values()).map((task) => ({
123
+ id: task.id,
124
+ command: task.command,
125
+ cwd: task.cwd,
126
+ startTime: task.startTime,
127
+ durationMs: now - task.startTime.getTime(),
128
+ isRunning: task.isRunning,
129
+ exitCode: task.exitCode,
130
+ error: task.error,
131
+ outputPreview: task.output.slice(-200)
132
+ // Last 200 chars
133
+ }));
134
+ }
135
+ /**
136
+ * Get only running tasks
137
+ */
138
+ getRunningTasks() {
139
+ return this.getAllTasks().filter((t) => t.isRunning);
140
+ }
141
+ /**
142
+ * Get the count of running tasks
143
+ */
144
+ getRunningCount() {
145
+ let count = 0;
146
+ for (const task of this.tasks.values()) {
147
+ if (task.isRunning) count++;
148
148
  }
149
- /**
150
- * Get only running tasks
151
- */
152
- getRunningTasks() {
153
- return this.getAllTasks().filter(t => t.isRunning);
149
+ return count;
150
+ }
151
+ /**
152
+ * Get a specific task by ID
153
+ */
154
+ getTask(id) {
155
+ return this.tasks.get(id);
156
+ }
157
+ /**
158
+ * Get task output (full output for streaming view)
159
+ */
160
+ getTaskOutput(id) {
161
+ return this.tasks.get(id)?.output || "";
162
+ }
163
+ /**
164
+ * Send input to a running background task (via PTY or remote PTY)
165
+ */
166
+ sendInput(id, input) {
167
+ const task = this.tasks.get(id);
168
+ const fs = require2("fs");
169
+ try {
170
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [BackgroundTaskManager.sendInput] taskId: ${id}, input: ${JSON.stringify(input)}, taskFound: ${!!task}, isRunning: ${task?.isRunning}, hasPty: ${!!task?.ptyProcess}, hasRemotePty: ${!!task?.remotePtyProcess}
171
+ `);
172
+ } catch (e) {
154
173
  }
155
- /**
156
- * Get the count of running tasks
157
- */
158
- getRunningCount() {
159
- let count = 0;
160
- for (const task of this.tasks.values()) {
161
- if (task.isRunning)
162
- count++;
163
- }
164
- return count;
174
+ if (!task || !task.isRunning) {
175
+ return false;
165
176
  }
166
- /**
167
- * Get a specific task by ID
168
- */
169
- getTask(id) {
170
- return this.tasks.get(id);
177
+ try {
178
+ if (task.ptyProcess) {
179
+ task.ptyProcess.write(input);
180
+ return true;
181
+ }
182
+ if (task.remotePtyProcess) {
183
+ task.remotePtyProcess.write(input);
184
+ return true;
185
+ }
186
+ return false;
187
+ } catch (err) {
188
+ return false;
171
189
  }
172
- /**
173
- * Get task output (full output for streaming view)
174
- */
175
- getTaskOutput(id) {
176
- return this.tasks.get(id)?.output || '';
190
+ }
191
+ /**
192
+ * Send a signal to a running background task (via PTY or remote PTY)
193
+ * For PTY, we send control characters directly - same as normal shell focus mode
194
+ */
195
+ sendSignal(id, signal) {
196
+ const task = this.tasks.get(id);
197
+ if (!task || !task.isRunning) {
198
+ return false;
177
199
  }
178
- /**
179
- * Send input to a running background task (via PTY or remote PTY)
180
- */
181
- sendInput(id, input) {
182
- const task = this.tasks.get(id);
183
- // Debug logging
184
- const fs = require('fs');
185
- try {
186
- quickLog(`[${new Date().toISOString()}] [BackgroundTaskManager.sendInput] taskId: ${id}, input: ${JSON.stringify(input)}, taskFound: ${!!task}, isRunning: ${task?.isRunning}, hasPty: ${!!task?.ptyProcess}, hasRemotePty: ${!!task?.remotePtyProcess}\n`);
187
- }
188
- catch (e) { }
189
- if (!task || !task.isRunning) {
190
- return false;
191
- }
192
- try {
193
- // Handle local PTY
194
- if (task.ptyProcess) {
195
- task.ptyProcess.write(input);
196
- return true;
197
- }
198
- // Handle remote PTY (SSH/WSL/Docker)
199
- if (task.remotePtyProcess) {
200
- task.remotePtyProcess.write(input);
201
- return true;
200
+ try {
201
+ if (task.ptyProcess) {
202
+ if (signal === "SIGINT") {
203
+ task.ptyProcess.write("");
204
+ setTimeout(() => {
205
+ if (task.isRunning && task.ptyProcess) {
206
+ task.ptyProcess.kill();
202
207
  }
203
- return false;
204
- }
205
- catch (err) {
206
- return false;
208
+ }, 500);
209
+ } else {
210
+ task.ptyProcess.kill();
207
211
  }
208
- }
209
- /**
210
- * Send a signal to a running background task (via PTY or remote PTY)
211
- * For PTY, we send control characters directly - same as normal shell focus mode
212
- */
213
- sendSignal(id, signal) {
214
- const task = this.tasks.get(id);
215
- if (!task || !task.isRunning) {
216
- return false;
217
- }
218
- try {
219
- // Handle local PTY
220
- if (task.ptyProcess) {
221
- if (signal === 'SIGINT') {
222
- task.ptyProcess.write('\x03'); // Ctrl+C
223
- setTimeout(() => {
224
- if (task.isRunning && task.ptyProcess) {
225
- task.ptyProcess.kill();
226
- }
227
- }, 500);
228
- }
229
- else {
230
- task.ptyProcess.kill();
231
- }
232
- return true;
233
- }
234
- // Handle remote PTY (SSH/WSL/Docker)
235
- if (task.remotePtyProcess) {
236
- if (signal === 'SIGINT') {
237
- task.remotePtyProcess.write('\x03'); // Ctrl+C
238
- setTimeout(() => {
239
- if (task.isRunning && task.remotePtyProcess) {
240
- task.remotePtyProcess.kill();
241
- }
242
- }, 500);
243
- }
244
- else {
245
- task.remotePtyProcess.kill();
246
- }
247
- return true;
212
+ return true;
213
+ }
214
+ if (task.remotePtyProcess) {
215
+ if (signal === "SIGINT") {
216
+ task.remotePtyProcess.write("");
217
+ setTimeout(() => {
218
+ if (task.isRunning && task.remotePtyProcess) {
219
+ task.remotePtyProcess.kill();
248
220
  }
249
- return false;
250
- }
251
- catch (err) {
252
- return false;
221
+ }, 500);
222
+ } else {
223
+ task.remotePtyProcess.kill();
253
224
  }
225
+ return true;
226
+ }
227
+ return false;
228
+ } catch (err) {
229
+ return false;
254
230
  }
255
- /**
256
- * Cancel a running task (via PTY or remote PTY)
257
- */
258
- cancelTask(id) {
259
- const task = this.tasks.get(id);
260
- if (!task || !task.isRunning) {
261
- return false;
262
- }
263
- try {
264
- // Handle local PTY
265
- if (task.ptyProcess) {
266
- task.ptyProcess.kill();
267
- }
268
- // Handle remote PTY (SSH/WSL/Docker)
269
- if (task.remotePtyProcess) {
270
- task.remotePtyProcess.kill();
271
- }
272
- task.isRunning = false;
273
- task.error = 'Cancelled by user';
274
- this.emit('taskCancelled', id);
275
- this.emit('countChanged', this.getRunningCount());
276
- return true;
277
- }
278
- catch (err) {
279
- return false;
280
- }
231
+ }
232
+ /**
233
+ * Cancel a running task (via PTY or remote PTY)
234
+ */
235
+ cancelTask(id) {
236
+ const task = this.tasks.get(id);
237
+ if (!task || !task.isRunning) {
238
+ return false;
281
239
  }
282
- /**
283
- * Clear completed tasks from the list
284
- */
285
- clearCompleted() {
286
- for (const [id, task] of this.tasks.entries()) {
287
- if (!task.isRunning) {
288
- this.tasks.delete(id);
289
- }
290
- }
240
+ try {
241
+ if (task.ptyProcess) {
242
+ task.ptyProcess.kill();
243
+ }
244
+ if (task.remotePtyProcess) {
245
+ task.remotePtyProcess.kill();
246
+ }
247
+ task.isRunning = false;
248
+ task.error = "Cancelled by user";
249
+ this.emit("taskCancelled", id);
250
+ this.emit("countChanged", this.getRunningCount());
251
+ return true;
252
+ } catch (err) {
253
+ return false;
291
254
  }
292
- /**
293
- * Check if a task is running
294
- */
295
- isTaskRunning(id) {
296
- return this.tasks.get(id)?.isRunning ?? false;
255
+ }
256
+ /**
257
+ * Clear completed tasks from the list
258
+ */
259
+ clearCompleted() {
260
+ for (const [id, task] of this.tasks.entries()) {
261
+ if (!task.isRunning) {
262
+ this.tasks.delete(id);
263
+ }
297
264
  }
265
+ }
266
+ /**
267
+ * Check if a task is running
268
+ */
269
+ isTaskRunning(id) {
270
+ return this.tasks.get(id)?.isRunning ?? false;
271
+ }
298
272
  }
299
- // Singleton instance
300
- export const BackgroundTaskManager = new BackgroundTaskManagerClass();
273
+ const BackgroundTaskManager = new BackgroundTaskManagerClass();
274
+ export {
275
+ BackgroundTaskManager
276
+ };
301
277
  //# sourceMappingURL=background-task-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"background-task-manager.js","sourceRoot":"","sources":["../../src/services/background-task-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/services/background-task-manager.ts"],"sourcesContent":["/**\r\n * Background Task Manager\r\n * \r\n * Manages background shell tasks, tracking their state and providing\r\n * notifications when tasks start, complete, or are cancelled.\r\n * Uses PTY for proper terminal emulation and signal handling.\r\n */\r\n\r\nimport { EventEmitter } from 'events';\r\nimport * as os from 'os';\r\nimport * as path from 'path';\r\nimport { createRequire } from 'module';\r\n\r\n// Use createRequire for ESM compatibility with native modules\r\nconst require = createRequire(import.meta.url);\r\nconst nodePty = require('@homebridge/node-pty-prebuilt-multiarch');\r\n\r\nimport { quickLog } from '../utils/conversation-logger.js';\r\n\r\n// PTY process interface\r\ninterface PtyProcess {\r\n write: (data: string) => void;\r\n resize: (cols: number, rows: number) => void;\r\n kill: () => void;\r\n onData: (callback: (data: string) => void) => void;\r\n onExit: (callback: (e: { exitCode: number }) => void) => void;\r\n pid: number;\r\n}\r\n\r\n// Remote PTY process interface (SSH/WSL/Docker)\r\n// These have a different callback signature (using onData string callback directly)\r\nexport interface RemotePtyProcess {\r\n write: (data: string) => void;\r\n kill: () => void;\r\n resize: (cols: number, rows: number) => void;\r\n isRunning: () => boolean;\r\n}\r\n\r\nexport interface BackgroundTask {\r\n id: string;\r\n command: string;\r\n cwd: string;\r\n startTime: Date;\r\n output: string;\r\n isRunning: boolean;\r\n exitCode?: number;\r\n error?: string;\r\n ptyProcess?: PtyProcess;\r\n remotePtyProcess?: RemotePtyProcess;\r\n remoteContext?: string; // Display string for remote context (e.g., \"user@host\", \"wsl:Ubuntu\")\r\n}\r\n\r\n\r\nexport interface BackgroundTaskInfo {\r\n id: string;\r\n command: string;\r\n cwd: string;\r\n startTime: Date;\r\n durationMs: number;\r\n isRunning: boolean;\r\n exitCode?: number;\r\n error?: string;\r\n outputPreview: string;\r\n}\r\n\r\nclass BackgroundTaskManagerClass extends EventEmitter {\r\n private tasks: Map<string, BackgroundTask> = new Map();\r\n private taskCounter: number = 0;\r\n\r\n /**\r\n * Start a new background task using PTY\r\n */\r\n startTask(command: string, cwd: string): string {\r\n const id = `bkg-${++this.taskCounter}-${Date.now()}`;\r\n\r\n const task: BackgroundTask = {\r\n id,\r\n command,\r\n cwd,\r\n startTime: new Date(),\r\n output: '',\r\n isRunning: true,\r\n };\r\n\r\n // Determine shell based on platform\r\n const isWindows = os.platform() === 'win32';\r\n const shell = isWindows ? 'powershell.exe' : (process.env.SHELL || '/bin/bash');\r\n const args = isWindows ? ['-Command', command] : ['-c', command];\r\n\r\n // Get initial terminal dimensions\r\n const cols = process.stdout.columns || 80;\r\n const rows = process.stdout.rows || 24;\r\n\r\n try {\r\n // Spawn PTY process for proper terminal emulation\r\n const ptyProcess = nodePty.spawn(shell, args, {\r\n name: 'xterm-256color',\r\n cols,\r\n rows,\r\n cwd,\r\n env: {\r\n ...process.env,\r\n TERM: 'xterm-256color',\r\n COLORTERM: 'truecolor',\r\n FORCE_COLOR: '1',\r\n CLICOLOR: '1',\r\n PYTHONUNBUFFERED: '1',\r\n } as { [key: string]: string },\r\n });\r\n\r\n task.ptyProcess = ptyProcess;\r\n\r\n // Capture output\r\n ptyProcess.onData((data: string) => {\r\n task.output += data;\r\n this.emit('taskOutput', id, data);\r\n });\r\n\r\n // Handle process completion\r\n ptyProcess.onExit(({ exitCode }: { exitCode: number }) => {\r\n task.isRunning = false;\r\n task.exitCode = exitCode;\r\n\r\n // Debug logging\r\n const fs = require('fs');\r\n try {\r\n quickLog(`[${new Date().toISOString()}] [BackgroundTaskManager] taskCompleted event emitted: id=${id}, exitCode=${exitCode}\\n`);\r\n } catch (e) { }\r\n\r\n this.emit('taskCompleted', id, exitCode);\r\n this.emit('countChanged', this.getRunningCount());\r\n });\r\n\r\n this.tasks.set(id, task);\r\n this.emit('taskStarted', id, command);\r\n this.emit('countChanged', this.getRunningCount());\r\n\r\n return id;\r\n } catch (err: any) {\r\n task.isRunning = false;\r\n task.error = err.message;\r\n this.tasks.set(id, task);\r\n this.emit('taskError', id, err.message);\r\n return id;\r\n }\r\n }\r\n\r\n /**\r\n * Start a new remote background task (SSH/WSL/Docker)\r\n * This registers the task and returns callbacks that should be passed to the remote PTY creator\r\n * @param command The command being executed\r\n * @param cwd The working directory on the remote system\r\n * @param remoteContext Display string for the remote context (e.g., \"user@host\", \"wsl:Ubuntu\")\r\n * @returns Object with task ID and callbacks to pass to the remote PTY creator\r\n */\r\n startRemoteTask(\r\n command: string,\r\n cwd: string,\r\n remoteContext: string\r\n ): {\r\n id: string;\r\n onData: (data: string) => void;\r\n onExit: (exitCode: number) => void;\r\n setRemotePty: (remotePty: RemotePtyProcess) => void;\r\n } {\r\n const id = `bkg-${++this.taskCounter}-${Date.now()}`;\r\n\r\n const task: BackgroundTask = {\r\n id,\r\n command,\r\n cwd,\r\n startTime: new Date(),\r\n output: '',\r\n isRunning: true,\r\n remoteContext\r\n };\r\n\r\n this.tasks.set(id, task);\r\n this.emit('taskStarted', id, command);\r\n this.emit('countChanged', this.getRunningCount());\r\n\r\n // Return callbacks that the caller should pass to runSSHCommand/runWSLCommand/runDockerCommand\r\n return {\r\n id,\r\n onData: (data: string) => {\r\n task.output += data;\r\n this.emit('taskOutput', id, data);\r\n },\r\n onExit: (exitCode: number) => {\r\n task.isRunning = false;\r\n task.exitCode = exitCode;\r\n\r\n // Debug logging\r\n const fs = require('fs');\r\n try {\r\n quickLog(`[${new Date().toISOString()}] [BackgroundTaskManager] Remote taskCompleted event emitted: id=${id}, exitCode=${exitCode}\\n`);\r\n } catch (e) { }\r\n\r\n this.emit('taskCompleted', id, exitCode);\r\n this.emit('countChanged', this.getRunningCount());\r\n },\r\n setRemotePty: (remotePty: RemotePtyProcess) => {\r\n task.remotePtyProcess = remotePty;\r\n }\r\n };\r\n }\r\n\r\n\r\n /**\r\n * Get all tasks (running and completed)\r\n */\r\n\r\n getAllTasks(): BackgroundTaskInfo[] {\r\n const now = Date.now();\r\n return Array.from(this.tasks.values()).map(task => ({\r\n id: task.id,\r\n command: task.command,\r\n cwd: task.cwd,\r\n startTime: task.startTime,\r\n durationMs: now - task.startTime.getTime(),\r\n isRunning: task.isRunning,\r\n exitCode: task.exitCode,\r\n error: task.error,\r\n outputPreview: task.output.slice(-200), // Last 200 chars\r\n }));\r\n }\r\n\r\n /**\r\n * Get only running tasks\r\n */\r\n getRunningTasks(): BackgroundTaskInfo[] {\r\n return this.getAllTasks().filter(t => t.isRunning);\r\n }\r\n\r\n /**\r\n * Get the count of running tasks\r\n */\r\n getRunningCount(): number {\r\n let count = 0;\r\n for (const task of this.tasks.values()) {\r\n if (task.isRunning) count++;\r\n }\r\n return count;\r\n }\r\n\r\n /**\r\n * Get a specific task by ID\r\n */\r\n getTask(id: string): BackgroundTask | undefined {\r\n return this.tasks.get(id);\r\n }\r\n\r\n /**\r\n * Get task output (full output for streaming view)\r\n */\r\n getTaskOutput(id: string): string {\r\n return this.tasks.get(id)?.output || '';\r\n }\r\n\r\n /**\r\n * Send input to a running background task (via PTY or remote PTY)\r\n */\r\n sendInput(id: string, input: string): boolean {\r\n const task = this.tasks.get(id);\r\n\r\n // Debug logging\r\n const fs = require('fs');\r\n try {\r\n quickLog(`[${new Date().toISOString()}] [BackgroundTaskManager.sendInput] taskId: ${id}, input: ${JSON.stringify(input)}, taskFound: ${!!task}, isRunning: ${task?.isRunning}, hasPty: ${!!task?.ptyProcess}, hasRemotePty: ${!!task?.remotePtyProcess}\\n`);\r\n } catch (e) { }\r\n\r\n if (!task || !task.isRunning) {\r\n return false;\r\n }\r\n\r\n try {\r\n // Handle local PTY\r\n if (task.ptyProcess) {\r\n task.ptyProcess.write(input);\r\n return true;\r\n }\r\n // Handle remote PTY (SSH/WSL/Docker)\r\n if (task.remotePtyProcess) {\r\n task.remotePtyProcess.write(input);\r\n return true;\r\n }\r\n return false;\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Send a signal to a running background task (via PTY or remote PTY)\r\n * For PTY, we send control characters directly - same as normal shell focus mode\r\n */\r\n sendSignal(id: string, signal: NodeJS.Signals): boolean {\r\n const task = this.tasks.get(id);\r\n if (!task || !task.isRunning) {\r\n return false;\r\n }\r\n\r\n try {\r\n // Handle local PTY\r\n if (task.ptyProcess) {\r\n if (signal === 'SIGINT') {\r\n task.ptyProcess.write('\\x03'); // Ctrl+C\r\n setTimeout(() => {\r\n if (task.isRunning && task.ptyProcess) {\r\n task.ptyProcess.kill();\r\n }\r\n }, 500);\r\n } else {\r\n task.ptyProcess.kill();\r\n }\r\n return true;\r\n }\r\n // Handle remote PTY (SSH/WSL/Docker)\r\n if (task.remotePtyProcess) {\r\n if (signal === 'SIGINT') {\r\n task.remotePtyProcess.write('\\x03'); // Ctrl+C\r\n setTimeout(() => {\r\n if (task.isRunning && task.remotePtyProcess) {\r\n task.remotePtyProcess.kill();\r\n }\r\n }, 500);\r\n } else {\r\n task.remotePtyProcess.kill();\r\n }\r\n return true;\r\n }\r\n return false;\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Cancel a running task (via PTY or remote PTY)\r\n */\r\n cancelTask(id: string): boolean {\r\n const task = this.tasks.get(id);\r\n if (!task || !task.isRunning) {\r\n return false;\r\n }\r\n\r\n try {\r\n // Handle local PTY\r\n if (task.ptyProcess) {\r\n task.ptyProcess.kill();\r\n }\r\n // Handle remote PTY (SSH/WSL/Docker)\r\n if (task.remotePtyProcess) {\r\n task.remotePtyProcess.kill();\r\n }\r\n\r\n task.isRunning = false;\r\n task.error = 'Cancelled by user';\r\n this.emit('taskCancelled', id);\r\n this.emit('countChanged', this.getRunningCount());\r\n return true;\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Clear completed tasks from the list\r\n */\r\n clearCompleted(): void {\r\n for (const [id, task] of this.tasks.entries()) {\r\n if (!task.isRunning) {\r\n this.tasks.delete(id);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check if a task is running\r\n */\r\n isTaskRunning(id: string): boolean {\r\n return this.tasks.get(id)?.isRunning ?? false;\r\n }\r\n}\r\n\r\n// Singleton instance\r\nexport const BackgroundTaskManager = new BackgroundTaskManagerClass();\r\n"],"mappings":"AAQA,SAAS,oBAAoB;AAC7B,YAAY,QAAQ;AAEpB,SAAS,qBAAqB;AAG9B,MAAMA,WAAU,cAAc,YAAY,GAAG;AAC7C,MAAM,UAAUA,SAAQ,yCAAyC;AAEjE,SAAS,gBAAgB;AAgDzB,MAAM,mCAAmC,aAAa;AAAA,EAC1C,QAAqC,oBAAI,IAAI;AAAA,EAC7C,cAAsB;AAAA;AAAA;AAAA;AAAA,EAK9B,UAAU,SAAiB,KAAqB;AAC5C,UAAM,KAAK,OAAO,EAAE,KAAK,WAAW,IAAI,KAAK,IAAI,CAAC;AAElD,UAAM,OAAuB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,oBAAI,KAAK;AAAA,MACpB,QAAQ;AAAA,MACR,WAAW;AAAA,IACf;AAGA,UAAM,YAAY,GAAG,SAAS,MAAM;AACpC,UAAM,QAAQ,YAAY,mBAAoB,QAAQ,IAAI,SAAS;AACnE,UAAM,OAAO,YAAY,CAAC,YAAY,OAAO,IAAI,CAAC,MAAM,OAAO;AAG/D,UAAM,OAAO,QAAQ,OAAO,WAAW;AACvC,UAAM,OAAO,QAAQ,OAAO,QAAQ;AAEpC,QAAI;AAEA,YAAM,aAAa,QAAQ,MAAM,OAAO,MAAM;AAAA,QAC1C,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,UACD,GAAG,QAAQ;AAAA,UACX,MAAM;AAAA,UACN,WAAW;AAAA,UACX,aAAa;AAAA,UACb,UAAU;AAAA,UACV,kBAAkB;AAAA,QACtB;AAAA,MACJ,CAAC;AAED,WAAK,aAAa;AAGlB,iBAAW,OAAO,CAAC,SAAiB;AAChC,aAAK,UAAU;AACf,aAAK,KAAK,cAAc,IAAI,IAAI;AAAA,MACpC,CAAC;AAGD,iBAAW,OAAO,CAAC,EAAE,SAAS,MAA4B;AACtD,aAAK,YAAY;AACjB,aAAK,WAAW;AAGhB,cAAM,KAAKA,SAAQ,IAAI;AACvB,YAAI;AACA,mBAAS,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC,6DAA6D,EAAE,cAAc,QAAQ;AAAA,CAAI;AAAA,QAClI,SAAS,GAAG;AAAA,QAAE;AAEd,aAAK,KAAK,iBAAiB,IAAI,QAAQ;AACvC,aAAK,KAAK,gBAAgB,KAAK,gBAAgB,CAAC;AAAA,MACpD,CAAC;AAED,WAAK,MAAM,IAAI,IAAI,IAAI;AACvB,WAAK,KAAK,eAAe,IAAI,OAAO;AACpC,WAAK,KAAK,gBAAgB,KAAK,gBAAgB,CAAC;AAEhD,aAAO;AAAA,IACX,SAAS,KAAU;AACf,WAAK,YAAY;AACjB,WAAK,QAAQ,IAAI;AACjB,WAAK,MAAM,IAAI,IAAI,IAAI;AACvB,WAAK,KAAK,aAAa,IAAI,IAAI,OAAO;AACtC,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBACI,SACA,KACA,eAMF;AACE,UAAM,KAAK,OAAO,EAAE,KAAK,WAAW,IAAI,KAAK,IAAI,CAAC;AAElD,UAAM,OAAuB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,oBAAI,KAAK;AAAA,MACpB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX;AAAA,IACJ;AAEA,SAAK,MAAM,IAAI,IAAI,IAAI;AACvB,SAAK,KAAK,eAAe,IAAI,OAAO;AACpC,SAAK,KAAK,gBAAgB,KAAK,gBAAgB,CAAC;AAGhD,WAAO;AAAA,MACH;AAAA,MACA,QAAQ,CAAC,SAAiB;AACtB,aAAK,UAAU;AACf,aAAK,KAAK,cAAc,IAAI,IAAI;AAAA,MACpC;AAAA,MACA,QAAQ,CAAC,aAAqB;AAC1B,aAAK,YAAY;AACjB,aAAK,WAAW;AAGhB,cAAM,KAAKA,SAAQ,IAAI;AACvB,YAAI;AACA,mBAAS,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC,oEAAoE,EAAE,cAAc,QAAQ;AAAA,CAAI;AAAA,QACzI,SAAS,GAAG;AAAA,QAAE;AAEd,aAAK,KAAK,iBAAiB,IAAI,QAAQ;AACvC,aAAK,KAAK,gBAAgB,KAAK,gBAAgB,CAAC;AAAA,MACpD;AAAA,MACA,cAAc,CAAC,cAAgC;AAC3C,aAAK,mBAAmB;AAAA,MAC5B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAOA,cAAoC;AAChC,UAAM,MAAM,KAAK,IAAI;AACrB,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,IAAI,WAAS;AAAA,MAChD,IAAI,KAAK;AAAA,MACT,SAAS,KAAK;AAAA,MACd,KAAK,KAAK;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,YAAY,MAAM,KAAK,UAAU,QAAQ;AAAA,MACzC,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,eAAe,KAAK,OAAO,MAAM,IAAI;AAAA;AAAA,IACzC,EAAE;AAAA,EACN;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAwC;AACpC,WAAO,KAAK,YAAY,EAAE,OAAO,OAAK,EAAE,SAAS;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,kBAA0B;AACtB,QAAI,QAAQ;AACZ,eAAW,QAAQ,KAAK,MAAM,OAAO,GAAG;AACpC,UAAI,KAAK,UAAW;AAAA,IACxB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,IAAwC;AAC5C,WAAO,KAAK,MAAM,IAAI,EAAE;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,IAAoB;AAC9B,WAAO,KAAK,MAAM,IAAI,EAAE,GAAG,UAAU;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,IAAY,OAAwB;AAC1C,UAAM,OAAO,KAAK,MAAM,IAAI,EAAE;AAG9B,UAAM,KAAKA,SAAQ,IAAI;AACvB,QAAI;AACA,eAAS,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC,+CAA+C,EAAE,YAAY,KAAK,UAAU,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,gBAAgB,MAAM,SAAS,aAAa,CAAC,CAAC,MAAM,UAAU,mBAAmB,CAAC,CAAC,MAAM,gBAAgB;AAAA,CAAI;AAAA,IAC9P,SAAS,GAAG;AAAA,IAAE;AAEd,QAAI,CAAC,QAAQ,CAAC,KAAK,WAAW;AAC1B,aAAO;AAAA,IACX;AAEA,QAAI;AAEA,UAAI,KAAK,YAAY;AACjB,aAAK,WAAW,MAAM,KAAK;AAC3B,eAAO;AAAA,MACX;AAEA,UAAI,KAAK,kBAAkB;AACvB,aAAK,iBAAiB,MAAM,KAAK;AACjC,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX,SAAS,KAAK;AACV,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,IAAY,QAAiC;AACpD,UAAM,OAAO,KAAK,MAAM,IAAI,EAAE;AAC9B,QAAI,CAAC,QAAQ,CAAC,KAAK,WAAW;AAC1B,aAAO;AAAA,IACX;AAEA,QAAI;AAEA,UAAI,KAAK,YAAY;AACjB,YAAI,WAAW,UAAU;AACrB,eAAK,WAAW,MAAM,GAAM;AAC5B,qBAAW,MAAM;AACb,gBAAI,KAAK,aAAa,KAAK,YAAY;AACnC,mBAAK,WAAW,KAAK;AAAA,YACzB;AAAA,UACJ,GAAG,GAAG;AAAA,QACV,OAAO;AACH,eAAK,WAAW,KAAK;AAAA,QACzB;AACA,eAAO;AAAA,MACX;AAEA,UAAI,KAAK,kBAAkB;AACvB,YAAI,WAAW,UAAU;AACrB,eAAK,iBAAiB,MAAM,GAAM;AAClC,qBAAW,MAAM;AACb,gBAAI,KAAK,aAAa,KAAK,kBAAkB;AACzC,mBAAK,iBAAiB,KAAK;AAAA,YAC/B;AAAA,UACJ,GAAG,GAAG;AAAA,QACV,OAAO;AACH,eAAK,iBAAiB,KAAK;AAAA,QAC/B;AACA,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX,SAAS,KAAK;AACV,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAqB;AAC5B,UAAM,OAAO,KAAK,MAAM,IAAI,EAAE;AAC9B,QAAI,CAAC,QAAQ,CAAC,KAAK,WAAW;AAC1B,aAAO;AAAA,IACX;AAEA,QAAI;AAEA,UAAI,KAAK,YAAY;AACjB,aAAK,WAAW,KAAK;AAAA,MACzB;AAEA,UAAI,KAAK,kBAAkB;AACvB,aAAK,iBAAiB,KAAK;AAAA,MAC/B;AAEA,WAAK,YAAY;AACjB,WAAK,QAAQ;AACb,WAAK,KAAK,iBAAiB,EAAE;AAC7B,WAAK,KAAK,gBAAgB,KAAK,gBAAgB,CAAC;AAChD,aAAO;AAAA,IACX,SAAS,KAAK;AACV,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAuB;AACnB,eAAW,CAAC,IAAI,IAAI,KAAK,KAAK,MAAM,QAAQ,GAAG;AAC3C,UAAI,CAAC,KAAK,WAAW;AACjB,aAAK,MAAM,OAAO,EAAE;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,IAAqB;AAC/B,WAAO,KAAK,MAAM,IAAI,EAAE,GAAG,aAAa;AAAA,EAC5C;AACJ;AAGO,MAAM,wBAAwB,IAAI,2BAA2B;","names":["require"]}