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":"mcp-tool-wrapper.js","sourceRoot":"","sources":["../../src/mcp/mcp-tool-wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/mcp/mcp-tool-wrapper.ts"],"sourcesContent":["import { Tool, ToolExecutionContext } from '../tools/types.js';\r\nimport { MCPServerManager, MCPTool } from './mcp-server-manager.js';\r\n\r\n/**\r\n * Sanitize JSON Schema for Gemini compatibility\r\n * Removes properties that Gemini doesn't support\r\n */\r\nfunction sanitizeSchemaForGemini(schema: any): any {\r\n if (!schema || typeof schema !== 'object') {\r\n return schema;\r\n }\r\n\r\n // Create a copy to avoid mutating the original\r\n const sanitized = Array.isArray(schema) ? [...schema] : { ...schema };\r\n\r\n // Remove unsupported properties\r\n const unsupportedProps = [\r\n 'exclusiveMinimum',\r\n 'exclusiveMaximum',\r\n 'const',\r\n 'contentMediaType',\r\n 'contentEncoding',\r\n 'examples',\r\n '$schema',\r\n '$id',\r\n '$ref',\r\n 'definitions',\r\n '$defs'\r\n ];\r\n\r\n for (const prop of unsupportedProps) {\r\n delete sanitized[prop];\r\n }\r\n\r\n // Recursively sanitize nested objects\r\n for (const key in sanitized) {\r\n if (typeof sanitized[key] === 'object' && sanitized[key] !== null) {\r\n sanitized[key] = sanitizeSchemaForGemini(sanitized[key]);\r\n }\r\n }\r\n\r\n return sanitized;\r\n}\r\n\r\n/**\r\n * Create a Tool wrapper for an MCP tool\r\n * This allows MCP tools to be registered in the Centaurus tool registry\r\n */\r\nexport function createMCPToolWrapper(\r\n serverName: string,\r\n mcpTool: MCPTool,\r\n serverManager: MCPServerManager\r\n): Tool {\r\n // Sanitize the input schema to remove Gemini-incompatible properties\r\n const sanitizedSchema = sanitizeSchemaForGemini(mcpTool.inputSchema || {\r\n type: 'object',\r\n properties: {},\r\n required: []\r\n });\r\n\r\n return {\r\n schema: {\r\n name: `mcp_${serverName}_${mcpTool.name}`,\r\n description: mcpTool.description || `${mcpTool.name} from ${serverName} MCP server`,\r\n parameters: sanitizedSchema\r\n },\r\n async execute(args: Record<string, any>, context: ToolExecutionContext): Promise<string> {\r\n try {\r\n // Check if server is still connected\r\n if (!serverManager.isConnected(serverName)) {\r\n throw new Error(`MCP server '${serverName}' is not connected`);\r\n }\r\n\r\n // Request user approval before executing MCP tools\r\n // MCP tools can have side effects so they should be treated as risky operations\r\n const toolDisplayName = `mcp_${serverName}_${mcpTool.name}`;\r\n\r\n const approved = await context.requireApproval(\r\n `Execute MCP tool: ${serverName} ${mcpTool.name}`,\r\n true // MCP tools are considered risky as they can have side effects\r\n );\r\n\r\n if (!approved || (typeof approved === 'object' && !approved.approved)) {\r\n return 'MCP tool execution cancelled by user.';\r\n }\r\n\r\n // Call the MCP tool\r\n const result = await serverManager.callTool(serverName, mcpTool.name, args);\r\n\r\n // Extract content from result\r\n if (result.content && Array.isArray(result.content)) {\r\n // MCP tools return content as an array of content items\r\n return result.content\r\n .map((item: any) => {\r\n if (item.type === 'text') {\r\n return item.text;\r\n } else if (item.type === 'image') {\r\n return `[Image: ${item.data}]`;\r\n } else if (item.type === 'resource') {\r\n return `[Resource: ${item.resource?.uri}]`;\r\n }\r\n return JSON.stringify(item);\r\n })\r\n .join('\\n');\r\n }\r\n\r\n // Fallback: return JSON stringified result\r\n return JSON.stringify(result, null, 2);\r\n } catch (error: any) {\r\n throw new Error(`MCP tool execution failed: ${error.message}`);\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create tool wrappers for all tools from an MCP server\r\n */\r\nexport function createMCPToolWrappers(\r\n serverName: string,\r\n tools: MCPTool[],\r\n serverManager: MCPServerManager\r\n): Tool[] {\r\n return tools.map(tool => createMCPToolWrapper(serverName, tool, serverManager));\r\n}\r\n"],"mappings":"AAOA,SAAS,wBAAwB,QAAkB;AAC/C,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACvC,WAAO;AAAA,EACX;AAGA,QAAM,YAAY,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,OAAO;AAGpE,QAAM,mBAAmB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,aAAW,QAAQ,kBAAkB;AACjC,WAAO,UAAU,IAAI;AAAA,EACzB;AAGA,aAAW,OAAO,WAAW;AACzB,QAAI,OAAO,UAAU,GAAG,MAAM,YAAY,UAAU,GAAG,MAAM,MAAM;AAC/D,gBAAU,GAAG,IAAI,wBAAwB,UAAU,GAAG,CAAC;AAAA,IAC3D;AAAA,EACJ;AAEA,SAAO;AACX;AAMO,SAAS,qBACZ,YACA,SACA,eACI;AAEJ,QAAM,kBAAkB,wBAAwB,QAAQ,eAAe;AAAA,IACnE,MAAM;AAAA,IACN,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,EACf,CAAC;AAED,SAAO;AAAA,IACH,QAAQ;AAAA,MACJ,MAAM,OAAO,UAAU,IAAI,QAAQ,IAAI;AAAA,MACvC,aAAa,QAAQ,eAAe,GAAG,QAAQ,IAAI,SAAS,UAAU;AAAA,MACtE,YAAY;AAAA,IAChB;AAAA,IACA,MAAM,QAAQ,MAA2B,SAAgD;AACrF,UAAI;AAEA,YAAI,CAAC,cAAc,YAAY,UAAU,GAAG;AACxC,gBAAM,IAAI,MAAM,eAAe,UAAU,oBAAoB;AAAA,QACjE;AAIA,cAAM,kBAAkB,OAAO,UAAU,IAAI,QAAQ,IAAI;AAEzD,cAAM,WAAW,MAAM,QAAQ;AAAA,UAC3B,qBAAqB,UAAU,IAAI,QAAQ,IAAI;AAAA,UAC/C;AAAA;AAAA,QACJ;AAEA,YAAI,CAAC,YAAa,OAAO,aAAa,YAAY,CAAC,SAAS,UAAW;AACnE,iBAAO;AAAA,QACX;AAGA,cAAM,SAAS,MAAM,cAAc,SAAS,YAAY,QAAQ,MAAM,IAAI;AAG1E,YAAI,OAAO,WAAW,MAAM,QAAQ,OAAO,OAAO,GAAG;AAEjD,iBAAO,OAAO,QACT,IAAI,CAAC,SAAc;AAChB,gBAAI,KAAK,SAAS,QAAQ;AACtB,qBAAO,KAAK;AAAA,YAChB,WAAW,KAAK,SAAS,SAAS;AAC9B,qBAAO,WAAW,KAAK,IAAI;AAAA,YAC/B,WAAW,KAAK,SAAS,YAAY;AACjC,qBAAO,cAAc,KAAK,UAAU,GAAG;AAAA,YAC3C;AACA,mBAAO,KAAK,UAAU,IAAI;AAAA,UAC9B,CAAC,EACA,KAAK,IAAI;AAAA,QAClB;AAGA,eAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MACzC,SAAS,OAAY;AACjB,cAAM,IAAI,MAAM,8BAA8B,MAAM,OAAO,EAAE;AAAA,MACjE;AAAA,IACJ;AAAA,EACJ;AACJ;AAKO,SAAS,sBACZ,YACA,OACA,eACM;AACN,SAAO,MAAM,IAAI,UAAQ,qBAAqB,YAAY,MAAM,aAAa,CAAC;AAClF;","names":[]}
@@ -1,189 +1,177 @@
1
- /**
2
- * AI Autocomplete Agent Service
3
- *
4
- * A lightweight AI agent using gemini-2.0-flash-lite that predicts commands
5
- * the user is trying to type. Triggered after 5 seconds of input inactivity.
6
- */
7
- import { aiServiceClient } from './ai-service-client.js';
8
- import { quickLog } from '../utils/conversation-logger.js';
9
- // ==================== Constants ====================
10
- const MODEL = 'gemini-2.0-flash-lite'; // Fast, cheap model for prediction
11
- const DEBOUNCE_MS = 5000; // 5 seconds of inactivity before triggering
12
- // ==================== System Prompt ====================
13
- const AUTOCOMPLETE_SYSTEM_PROMPT = `You are a command prediction assistant. Your job is to predict the FULL command the user is trying to type based on their current input and context.
14
-
15
- RULES:
16
- 1. Respond with ONLY the predicted full command - no explanations, no quotes, no markdown
17
- 2. If you cannot confidently predict a command, respond with exactly "NONE"
18
- 3. The prediction should be a complete, valid command that would work in the given OS and directory
19
- 4. Consider the user's command history in this directory and session when making predictions
20
- 5. USE THE FILE LIST: If the user is typing a command that operates on a file (like 'python', 'cat', 'ls'), try to complete the filename from the provided list.
21
- 6. Be conservative - only predict when you have high confidence
22
-
23
- EXAMPLES:
24
- User typing: "git st" → git status
25
- User typing: "npm i" → npm install
26
- User typing: "cd .." → cd ..
27
- User typing: "py te" (files: [test.py, main.py]) → python test.py
28
- User typing: "cat rea" (files: [README.md]) → cat README.md
29
- User typing: "xyz123" → NONE`;
30
- // ==================== AIAutocompleteAgent Class ====================
1
+ import { aiServiceClient } from "./ai-service-client.js";
2
+ import { quickLog } from "../utils/conversation-logger.js";
3
+ const MODEL = "gemini-2.0-flash-lite";
4
+ const DEBOUNCE_MS = 5e3;
5
+ const AUTOCOMPLETE_SYSTEM_PROMPT = `You are a command prediction assistant. Your job is to predict the FULL command the user is trying to type based on their current input and context.
6
+
7
+ RULES:
8
+ 1. Respond with ONLY the predicted full command - no explanations, no quotes, no markdown
9
+ 2. If you cannot confidently predict a command, respond with exactly "NONE"
10
+ 3. The prediction should be a complete, valid command that would work in the given OS and directory
11
+ 4. Consider the user's command history in this directory and session when making predictions
12
+ 5. USE THE FILE LIST: If the user is typing a command that operates on a file (like 'python', 'cat', 'ls'), try to complete the filename from the provided list.
13
+ 6. Be conservative - only predict when you have high confidence
14
+
15
+ EXAMPLES:
16
+ User typing: "git st" \u2192 git status
17
+ User typing: "npm i" \u2192 npm install
18
+ User typing: "cd .." \u2192 cd ..
19
+ User typing: "py te" (files: [test.py, main.py]) \u2192 python test.py
20
+ User typing: "cat rea" (files: [README.md]) \u2192 cat README.md
21
+ User typing: "xyz123" \u2192 NONE`;
31
22
  class AIAutocompleteAgentClass {
32
- pendingRequest = null;
33
- /**
34
- * Predict the full command the user is trying to type
35
- * Returns null if no confident prediction can be made
36
- */
37
- async predictCommand(context, signal) {
38
- // Don't predict for empty or very short inputs
39
- if (!context.currentInput || context.currentInput.trim().length < 2) {
40
- return null;
41
- }
42
- // Don't predict for slash commands
43
- if (context.currentInput.startsWith('/')) {
44
- return null;
45
- }
46
- // Don't predict for file tags
47
- if (context.currentInput.includes('@')) {
48
- return null;
49
- }
50
- // Cancel any pending request
51
- this.abort();
52
- // Create new abort controller
53
- const abortController = new AbortController();
54
- this.pendingRequest = abortController;
55
- // Merge signals if external signal provided
56
- const effectiveSignal = signal
57
- ? this.mergeSignals(signal, abortController.signal)
58
- : abortController.signal;
59
- try {
60
- const prediction = await this.callAI(context, effectiveSignal);
61
- return prediction;
62
- }
63
- catch (error) {
64
- if (error.name === 'AbortError' || error.message === 'AbortError') {
65
- // Request was cancelled, this is expected
66
- return null;
67
- }
68
- quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Prediction error: ${error.message}\n`);
69
- return null;
70
- }
71
- finally {
72
- if (this.pendingRequest === abortController) {
73
- this.pendingRequest = null;
74
- }
75
- }
23
+ pendingRequest = null;
24
+ /**
25
+ * Predict the full command the user is trying to type
26
+ * Returns null if no confident prediction can be made
27
+ */
28
+ async predictCommand(context, signal) {
29
+ if (!context.currentInput || context.currentInput.trim().length < 2) {
30
+ return null;
76
31
  }
77
- /**
78
- * Abort any pending prediction request
79
- */
80
- abort() {
81
- if (this.pendingRequest) {
82
- this.pendingRequest.abort();
83
- this.pendingRequest = null;
84
- }
32
+ if (context.currentInput.startsWith("/")) {
33
+ return null;
85
34
  }
86
- /**
87
- * Call the AI model to get a prediction
88
- */
89
- async callAI(context, signal) {
90
- // Build context string
91
- const contextParts = [
92
- `OS: ${context.os}`,
93
- `Platform: ${context.platform}`,
94
- `Current Directory: ${context.cwd}`,
95
- ];
96
- if (context.files && context.files.length > 0) {
97
- const fileList = context.files.slice(0, 50); // Hard limit just in case
98
- contextParts.push(`Files in current directory:\n${fileList.join('\n')}`);
99
- }
100
- if (context.directoryHistory.length > 0) {
101
- const recentDirHistory = context.directoryHistory.slice(0, 10); // Take top 10 most frequent/recent
102
- contextParts.push(`Recent commands in this directory:\n${recentDirHistory.join('\n')}`);
103
- }
104
- if (context.sessionCommands.length > 0) {
105
- const recentSession = context.sessionCommands.slice(-10);
106
- contextParts.push(`Commands run in this session:\n${recentSession.join('\n')}`);
107
- }
108
- const userPrompt = `${contextParts.join('\n\n')}
109
-
110
- User is currently typing: "${context.currentInput}"
111
-
35
+ if (context.currentInput.includes("@")) {
36
+ return null;
37
+ }
38
+ this.abort();
39
+ const abortController = new AbortController();
40
+ this.pendingRequest = abortController;
41
+ const effectiveSignal = signal ? this.mergeSignals(signal, abortController.signal) : abortController.signal;
42
+ try {
43
+ const prediction = await this.callAI(context, effectiveSignal);
44
+ return prediction;
45
+ } catch (error) {
46
+ if (error.name === "AbortError" || error.message === "AbortError") {
47
+ return null;
48
+ }
49
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [AIAutocompleteAgent] Prediction error: ${error.message}
50
+ `);
51
+ return null;
52
+ } finally {
53
+ if (this.pendingRequest === abortController) {
54
+ this.pendingRequest = null;
55
+ }
56
+ }
57
+ }
58
+ /**
59
+ * Abort any pending prediction request
60
+ */
61
+ abort() {
62
+ if (this.pendingRequest) {
63
+ this.pendingRequest.abort();
64
+ this.pendingRequest = null;
65
+ }
66
+ }
67
+ /**
68
+ * Call the AI model to get a prediction
69
+ */
70
+ async callAI(context, signal) {
71
+ const contextParts = [
72
+ `OS: ${context.os}`,
73
+ `Platform: ${context.platform}`,
74
+ `Current Directory: ${context.cwd}`
75
+ ];
76
+ if (context.files && context.files.length > 0) {
77
+ const fileList = context.files.slice(0, 50);
78
+ contextParts.push(`Files in current directory:
79
+ ${fileList.join("\n")}`);
80
+ }
81
+ if (context.directoryHistory.length > 0) {
82
+ const recentDirHistory = context.directoryHistory.slice(0, 10);
83
+ contextParts.push(`Recent commands in this directory:
84
+ ${recentDirHistory.join("\n")}`);
85
+ }
86
+ if (context.sessionCommands.length > 0) {
87
+ const recentSession = context.sessionCommands.slice(-10);
88
+ contextParts.push(`Commands run in this session:
89
+ ${recentSession.join("\n")}`);
90
+ }
91
+ const userPrompt = `${contextParts.join("\n\n")}
92
+
93
+ User is currently typing: "${context.currentInput}"
94
+
112
95
  What is the full command they are trying to type?`;
113
- // Build messages
114
- const messages = [
115
- { role: 'user', content: AUTOCOMPLETE_SYSTEM_PROMPT + '\n\n' + userPrompt }
116
- ];
117
- // Log detailed context and prompt for debugging
118
- quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Context: ${JSON.stringify(context, null, 2)}\n`);
119
- quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Full Prompt:\n${JSON.stringify(messages, null, 2)}\n`);
120
- // Stream AI response
121
- let responseText = '';
122
- try {
123
- for await (const chunk of aiServiceClient.streamChat(MODEL, messages, [], // No tools needed
124
- {
125
- cwd: context.cwd,
126
- platform: context.platform,
127
- shell: process.platform === 'win32' ? 'powershell' : 'bash',
128
- os: (context.os === 'win32' ? 'windows' : context.os === 'darwin' ? 'macos' : 'linux'),
129
- homeDir: ''
130
- }, undefined, undefined, signal)) {
131
- if (signal.aborted) {
132
- throw new Error('AbortError');
133
- }
134
- if (chunk.type === 'text') {
135
- responseText += chunk.content;
136
- }
137
- // Early exit if response is getting too long (should be a single command)
138
- if (responseText.length > 200) {
139
- break;
140
- }
141
- }
142
- }
143
- catch (error) {
144
- if (error.message === 'AbortError' || error.name === 'AbortError') {
145
- const abortError = new Error('AbortError');
146
- abortError.name = 'AbortError';
147
- throw abortError;
148
- }
149
- throw error;
150
- }
151
- // Parse response
152
- const prediction = responseText.trim();
153
- quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Raw AI Response: "${prediction}"\n`);
154
- // Check for NONE or invalid predictions
155
- if (!prediction || prediction.toUpperCase() === 'NONE' || prediction.length < 2) {
156
- return null;
157
- }
158
- // Don't return the prediction if it's the same as the current input
159
- if (prediction.toLowerCase() === context.currentInput.toLowerCase()) {
160
- return null;
161
- }
162
- // Don't return if prediction doesn't start with the current input (should be a completion)
163
- if (!prediction.toLowerCase().startsWith(context.currentInput.toLowerCase())) {
164
- return null;
165
- }
166
- quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Valid Prediction: "${prediction}" for input "${context.currentInput}"\n`);
167
- return prediction;
96
+ const messages = [
97
+ { role: "user", content: AUTOCOMPLETE_SYSTEM_PROMPT + "\n\n" + userPrompt }
98
+ ];
99
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [AIAutocompleteAgent] Context: ${JSON.stringify(context, null, 2)}
100
+ `);
101
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [AIAutocompleteAgent] Full Prompt:
102
+ ${JSON.stringify(messages, null, 2)}
103
+ `);
104
+ let responseText = "";
105
+ try {
106
+ for await (const chunk of aiServiceClient.streamChat(
107
+ MODEL,
108
+ messages,
109
+ [],
110
+ // No tools needed
111
+ {
112
+ cwd: context.cwd,
113
+ platform: context.platform,
114
+ shell: process.platform === "win32" ? "powershell" : "bash",
115
+ os: context.os === "win32" ? "windows" : context.os === "darwin" ? "macos" : "linux",
116
+ homeDir: ""
117
+ },
118
+ void 0,
119
+ void 0,
120
+ signal
121
+ )) {
122
+ if (signal.aborted) {
123
+ throw new Error("AbortError");
124
+ }
125
+ if (chunk.type === "text") {
126
+ responseText += chunk.content;
127
+ }
128
+ if (responseText.length > 200) {
129
+ break;
130
+ }
131
+ }
132
+ } catch (error) {
133
+ if (error.message === "AbortError" || error.name === "AbortError") {
134
+ const abortError = new Error("AbortError");
135
+ abortError.name = "AbortError";
136
+ throw abortError;
137
+ }
138
+ throw error;
168
139
  }
169
- /**
170
- * Merge two abort signals into one
171
- */
172
- mergeSignals(signal1, signal2) {
173
- const controller = new AbortController();
174
- const abort = () => controller.abort();
175
- if (signal1.aborted || signal2.aborted) {
176
- controller.abort();
177
- }
178
- else {
179
- signal1.addEventListener('abort', abort, { once: true });
180
- signal2.addEventListener('abort', abort, { once: true });
181
- }
182
- return controller.signal;
140
+ const prediction = responseText.trim();
141
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [AIAutocompleteAgent] Raw AI Response: "${prediction}"
142
+ `);
143
+ if (!prediction || prediction.toUpperCase() === "NONE" || prediction.length < 2) {
144
+ return null;
145
+ }
146
+ if (prediction.toLowerCase() === context.currentInput.toLowerCase()) {
147
+ return null;
148
+ }
149
+ if (!prediction.toLowerCase().startsWith(context.currentInput.toLowerCase())) {
150
+ return null;
151
+ }
152
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [AIAutocompleteAgent] Valid Prediction: "${prediction}" for input "${context.currentInput}"
153
+ `);
154
+ return prediction;
155
+ }
156
+ /**
157
+ * Merge two abort signals into one
158
+ */
159
+ mergeSignals(signal1, signal2) {
160
+ const controller = new AbortController();
161
+ const abort = () => controller.abort();
162
+ if (signal1.aborted || signal2.aborted) {
163
+ controller.abort();
164
+ } else {
165
+ signal1.addEventListener("abort", abort, { once: true });
166
+ signal2.addEventListener("abort", abort, { once: true });
183
167
  }
168
+ return controller.signal;
169
+ }
184
170
  }
185
- // Export singleton
186
- export const AIAutocompleteAgent = new AIAutocompleteAgentClass();
187
- // Export debounce constant for use in InputBox
188
- export const AI_AUTOCOMPLETE_DEBOUNCE_MS = DEBOUNCE_MS;
171
+ const AIAutocompleteAgent = new AIAutocompleteAgentClass();
172
+ const AI_AUTOCOMPLETE_DEBOUNCE_MS = DEBOUNCE_MS;
173
+ export {
174
+ AIAutocompleteAgent,
175
+ AI_AUTOCOMPLETE_DEBOUNCE_MS
176
+ };
189
177
  //# sourceMappingURL=ai-autocomplete-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-autocomplete-agent.js","sourceRoot":"","sources":["../../src/services/ai-autocomplete-agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAwB,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,sDAAsD;AAEtD,MAAM,KAAK,GAAG,uBAAuB,CAAC,CAAE,mCAAmC;AAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,CAAe,4CAA4C;AAcpF,0DAA0D;AAE1D,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;6BAgBN,CAAC;AAE9B,sEAAsE;AAEtE,MAAM,wBAAwB;IAClB,cAAc,GAA2B,IAAI,CAAC;IAEtD;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,OAA4B,EAAE,MAAoB;QACnE,+CAA+C;QAC/C,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,mCAAmC;QACnC,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,8BAA8B;QAC9B,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC;QAEtC,4CAA4C;QAC5C,MAAM,eAAe,GAAG,MAAM;YAC1B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;YACnD,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YAC/D,OAAO,UAAU,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;gBAChE,0CAA0C;gBAC1C,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,6CAA6C,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACrG,OAAO,IAAI,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,IAAI,CAAC,cAAc,KAAK,eAAe,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,MAAM,CAAC,OAA4B,EAAE,MAAmB;QAClE,uBAAuB;QACvB,MAAM,YAAY,GAAa;YAC3B,OAAO,OAAO,CAAC,EAAE,EAAE;YACnB,aAAa,OAAO,CAAC,QAAQ,EAAE;YAC/B,sBAAsB,OAAO,CAAC,GAAG,EAAE;SACtC,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B;YACvE,YAAY,CAAC,IAAI,CAAC,gCAAgC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mCAAmC;YACnG,YAAY,CAAC,IAAI,CAAC,uCAAuC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,YAAY,CAAC,IAAI,CAAC,kCAAkC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;6BAE1B,OAAO,CAAC,YAAY;;kDAEC,CAAC;QAE3C,iBAAiB;QACjB,MAAM,QAAQ,GAAgB;YAC1B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,MAAM,GAAG,UAAU,EAAE;SAC9E,CAAC;QAEF,gDAAgD;QAChD,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,oCAAoC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/G,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,yCAAyC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAErH,qBAAqB;QACrB,IAAI,YAAY,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC;YACD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,eAAe,CAAC,UAAU,CAChD,KAAK,EACL,QAAQ,EACR,EAAE,EAAG,kBAAkB;YACvB;gBACI,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;gBAC3D,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAkC;gBACvH,OAAO,EAAE,EAAE;aACd,EACD,SAAS,EACT,SAAS,EACT,MAAM,CACT,EAAE,CAAC;gBACA,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;gBAClC,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACxB,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC;gBAClC,CAAC;gBAED,0EAA0E;gBAC1E,IAAI,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBAC5B,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChE,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC3C,UAAU,CAAC,IAAI,GAAG,YAAY,CAAC;gBAC/B,MAAM,UAAU,CAAC;YACrB,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEvC,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,6CAA6C,UAAU,KAAK,CAAC,CAAC;QAEnG,wCAAwC;QACxC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,oEAAoE;QACpE,IAAI,UAAU,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,2FAA2F;QAC3F,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,8CAA8C,UAAU,gBAAgB,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC;QAExI,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAAoB,EAAE,OAAoB;QAC3D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAEvC,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,UAAU,CAAC,MAAM,CAAC;IAC7B,CAAC;CACJ;AAED,mBAAmB;AACnB,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,wBAAwB,EAAE,CAAC;AAElE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,WAAW,CAAC"}
1
+ {"version":3,"sources":["../../src/services/ai-autocomplete-agent.ts"],"sourcesContent":["/**\r\n * AI Autocomplete Agent Service\r\n * \r\n * A lightweight AI agent using gemini-2.0-flash-lite that predicts commands\r\n * the user is trying to type. Triggered after 5 seconds of input inactivity.\r\n */\r\n\r\nimport { aiServiceClient, Message as AIMessage } from './ai-service-client.js';\r\nimport { quickLog } from '../utils/conversation-logger.js';\r\n\r\n// ==================== Constants ====================\r\n\r\nconst MODEL = 'gemini-2.0-flash-lite'; // Fast, cheap model for prediction\r\nconst DEBOUNCE_MS = 5000; // 5 seconds of inactivity before triggering\r\n\r\n// ==================== Types ====================\r\n\r\nexport interface AutocompleteContext {\r\n os: string;\r\n platform: string;\r\n cwd: string;\r\n directoryHistory: string[]; // Commands previously run in this directory\r\n sessionCommands: string[]; // Commands run in this chat session\r\n files: string[]; // Files/folders in current directory (context)\r\n currentInput: string; // What user is currently typing\r\n}\r\n\r\n// ==================== System Prompt ====================\r\n\r\nconst AUTOCOMPLETE_SYSTEM_PROMPT = `You are a command prediction assistant. Your job is to predict the FULL command the user is trying to type based on their current input and context.\r\n\r\nRULES:\r\n1. Respond with ONLY the predicted full command - no explanations, no quotes, no markdown\r\n2. If you cannot confidently predict a command, respond with exactly \"NONE\"\r\n3. The prediction should be a complete, valid command that would work in the given OS and directory\r\n4. Consider the user's command history in this directory and session when making predictions\r\n5. USE THE FILE LIST: If the user is typing a command that operates on a file (like 'python', 'cat', 'ls'), try to complete the filename from the provided list.\r\n6. Be conservative - only predict when you have high confidence\r\n\r\nEXAMPLES:\r\nUser typing: \"git st\" → git status\r\nUser typing: \"npm i\" → npm install\r\nUser typing: \"cd ..\" → cd ..\r\nUser typing: \"py te\" (files: [test.py, main.py]) → python test.py\r\nUser typing: \"cat rea\" (files: [README.md]) → cat README.md\r\nUser typing: \"xyz123\" → NONE`;\r\n\r\n// ==================== AIAutocompleteAgent Class ====================\r\n\r\nclass AIAutocompleteAgentClass {\r\n private pendingRequest: AbortController | null = null;\r\n\r\n /**\r\n * Predict the full command the user is trying to type\r\n * Returns null if no confident prediction can be made\r\n */\r\n async predictCommand(context: AutocompleteContext, signal?: AbortSignal): Promise<string | null> {\r\n // Don't predict for empty or very short inputs\r\n if (!context.currentInput || context.currentInput.trim().length < 2) {\r\n return null;\r\n }\r\n\r\n // Don't predict for slash commands\r\n if (context.currentInput.startsWith('/')) {\r\n return null;\r\n }\r\n\r\n // Don't predict for file tags\r\n if (context.currentInput.includes('@')) {\r\n return null;\r\n }\r\n\r\n // Cancel any pending request\r\n this.abort();\r\n\r\n // Create new abort controller\r\n const abortController = new AbortController();\r\n this.pendingRequest = abortController;\r\n\r\n // Merge signals if external signal provided\r\n const effectiveSignal = signal\r\n ? this.mergeSignals(signal, abortController.signal)\r\n : abortController.signal;\r\n\r\n try {\r\n const prediction = await this.callAI(context, effectiveSignal);\r\n return prediction;\r\n } catch (error: any) {\r\n if (error.name === 'AbortError' || error.message === 'AbortError') {\r\n // Request was cancelled, this is expected\r\n return null;\r\n }\r\n quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Prediction error: ${error.message}\\n`);\r\n return null;\r\n } finally {\r\n if (this.pendingRequest === abortController) {\r\n this.pendingRequest = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Abort any pending prediction request\r\n */\r\n abort(): void {\r\n if (this.pendingRequest) {\r\n this.pendingRequest.abort();\r\n this.pendingRequest = null;\r\n }\r\n }\r\n\r\n /**\r\n * Call the AI model to get a prediction\r\n */\r\n private async callAI(context: AutocompleteContext, signal: AbortSignal): Promise<string | null> {\r\n // Build context string\r\n const contextParts: string[] = [\r\n `OS: ${context.os}`,\r\n `Platform: ${context.platform}`,\r\n `Current Directory: ${context.cwd}`,\r\n ];\r\n\r\n if (context.files && context.files.length > 0) {\r\n const fileList = context.files.slice(0, 50); // Hard limit just in case\r\n contextParts.push(`Files in current directory:\\n${fileList.join('\\n')}`);\r\n }\r\n\r\n if (context.directoryHistory.length > 0) {\r\n const recentDirHistory = context.directoryHistory.slice(0, 10); // Take top 10 most frequent/recent\r\n contextParts.push(`Recent commands in this directory:\\n${recentDirHistory.join('\\n')}`);\r\n }\r\n\r\n if (context.sessionCommands.length > 0) {\r\n const recentSession = context.sessionCommands.slice(-10);\r\n contextParts.push(`Commands run in this session:\\n${recentSession.join('\\n')}`);\r\n }\r\n\r\n const userPrompt = `${contextParts.join('\\n\\n')}\r\n\r\nUser is currently typing: \"${context.currentInput}\"\r\n\r\nWhat is the full command they are trying to type?`;\r\n\r\n // Build messages\r\n const messages: AIMessage[] = [\r\n { role: 'user', content: AUTOCOMPLETE_SYSTEM_PROMPT + '\\n\\n' + userPrompt }\r\n ];\r\n\r\n // Log detailed context and prompt for debugging\r\n quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Context: ${JSON.stringify(context, null, 2)}\\n`);\r\n quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Full Prompt:\\n${JSON.stringify(messages, null, 2)}\\n`);\r\n\r\n // Stream AI response\r\n let responseText = '';\r\n\r\n try {\r\n for await (const chunk of aiServiceClient.streamChat(\r\n MODEL,\r\n messages,\r\n [], // No tools needed\r\n {\r\n cwd: context.cwd,\r\n platform: context.platform,\r\n shell: process.platform === 'win32' ? 'powershell' : 'bash',\r\n os: (context.os === 'win32' ? 'windows' : context.os === 'darwin' ? 'macos' : 'linux') as 'linux' | 'windows' | 'macos',\r\n homeDir: ''\r\n },\r\n undefined,\r\n undefined,\r\n signal\r\n )) {\r\n if (signal.aborted) {\r\n throw new Error('AbortError');\r\n }\r\n\r\n if (chunk.type === 'text') {\r\n responseText += chunk.content;\r\n }\r\n\r\n // Early exit if response is getting too long (should be a single command)\r\n if (responseText.length > 200) {\r\n break;\r\n }\r\n }\r\n } catch (error: any) {\r\n if (error.message === 'AbortError' || error.name === 'AbortError') {\r\n const abortError = new Error('AbortError');\r\n abortError.name = 'AbortError';\r\n throw abortError;\r\n }\r\n throw error;\r\n }\r\n\r\n // Parse response\r\n const prediction = responseText.trim();\r\n\r\n quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Raw AI Response: \"${prediction}\"\\n`);\r\n\r\n // Check for NONE or invalid predictions\r\n if (!prediction || prediction.toUpperCase() === 'NONE' || prediction.length < 2) {\r\n return null;\r\n }\r\n\r\n // Don't return the prediction if it's the same as the current input\r\n if (prediction.toLowerCase() === context.currentInput.toLowerCase()) {\r\n return null;\r\n }\r\n\r\n // Don't return if prediction doesn't start with the current input (should be a completion)\r\n if (!prediction.toLowerCase().startsWith(context.currentInput.toLowerCase())) {\r\n return null;\r\n }\r\n\r\n quickLog(`[${new Date().toISOString()}] [AIAutocompleteAgent] Valid Prediction: \"${prediction}\" for input \"${context.currentInput}\"\\n`);\r\n\r\n return prediction;\r\n }\r\n\r\n /**\r\n * Merge two abort signals into one\r\n */\r\n private mergeSignals(signal1: AbortSignal, signal2: AbortSignal): AbortSignal {\r\n const controller = new AbortController();\r\n\r\n const abort = () => controller.abort();\r\n\r\n if (signal1.aborted || signal2.aborted) {\r\n controller.abort();\r\n } else {\r\n signal1.addEventListener('abort', abort, { once: true });\r\n signal2.addEventListener('abort', abort, { once: true });\r\n }\r\n\r\n return controller.signal;\r\n }\r\n}\r\n\r\n// Export singleton\r\nexport const AIAutocompleteAgent = new AIAutocompleteAgentClass();\r\n\r\n// Export debounce constant for use in InputBox\r\nexport const AI_AUTOCOMPLETE_DEBOUNCE_MS = DEBOUNCE_MS;\r\n"],"mappings":"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","names":[]}