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,449 +1,451 @@
1
- /**
2
- * API Client Service for Centaurus CLI
3
- *
4
- * Handles all communication with the backend REST API including:
5
- * - Authentication and session management
6
- * - Conversation and message operations
7
- * - User settings management
8
- * - API key storage and retrieval
9
- */
10
- import axios from 'axios';
11
- import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync } from 'fs';
12
- import { join } from 'path';
13
- import { homedir } from 'os';
14
- import { IS_DEV_BUILD, DEV_BACKEND_URL, PRODUCTION_BACKEND_URL } from '../config/build-config.js';
15
- import { logError } from '../utils/logger.js';
16
- /**
17
- * API Client class for communicating with the backend service
18
- */
1
+ import axios from "axios";
2
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync } from "fs";
3
+ import { join } from "path";
4
+ import { homedir } from "os";
5
+ import { IS_DEV_BUILD, DEV_BACKEND_URL, PRODUCTION_BACKEND_URL } from "../config/build-config.js";
6
+ import { logError } from "../utils/logger.js";
19
7
  class ApiClient {
20
- client = null;
21
- sessionToken = null;
22
- configPath;
23
- configDir;
24
- constructor() {
25
- // Set up session storage path: ~/.centaurus/session.json
26
- this.configDir = join(homedir(), '.centaurus');
27
- this.configPath = join(this.configDir, 'session.json');
28
- // Load existing session if available
29
- this.loadSession();
30
- // Don't create axios client yet - wait until first use
31
- // This allows environment variables to be loaded first
32
- }
33
- /**
34
- * Helper to extract data from API response safely
35
- */
36
- extractData(response) {
37
- if (response.data.data === undefined || response.data.data === null) {
38
- throw new Error('API response missing expected data payload');
39
- }
40
- return response.data.data;
41
- }
42
- /**
43
- * Get or create the axios client instance
44
- * This is lazy-loaded to ensure environment variables are loaded first
45
- */
46
- getClient() {
47
- if (!this.client) {
48
- // Import build config - values frozen at compile time for security
49
- // SECURITY: This prevents malicious .env files from overriding production URLs
50
- // Use production URL in production builds, localhost only in dev builds
51
- const baseURL = IS_DEV_BUILD ? DEV_BACKEND_URL : PRODUCTION_BACKEND_URL;
52
- this.client = axios.create({
53
- baseURL,
54
- timeout: 30000,
55
- headers: {
56
- 'Content-Type': 'application/json',
57
- },
58
- });
59
- // Request interceptor: Add Authorization header if session token exists
60
- this.getClient().interceptors.request.use((config) => {
61
- if (this.sessionToken) {
62
- config.headers.Authorization = `Bearer ${this.sessionToken}`;
63
- }
64
- return config;
65
- }, (error) => {
66
- return Promise.reject(error);
67
- });
68
- // Response interceptor: Handle 401 errors (expired/invalid session)
69
- this.getClient().interceptors.response.use((response) => response, async (error) => {
70
- if (error.response?.status === 401) {
71
- // Clear invalid session
72
- this.clearSession();
73
- // Create a more user-friendly error
74
- const authError = new Error('Session expired. Please sign in again.');
75
- authError.name = 'AuthenticationError';
76
- throw authError;
77
- }
78
- // For other errors, extract message from API response if available
79
- if (error.response?.data) {
80
- const apiError = error.response.data;
81
- if (apiError.error) {
82
- const customError = new Error(apiError.error.message);
83
- customError.name = apiError.error.code;
84
- throw customError;
85
- }
86
- }
87
- throw error;
88
- });
89
- }
90
- return this.client;
91
- }
92
- /**
93
- * Load session token from local config file
94
- */
95
- loadSession() {
96
- try {
97
- if (existsSync(this.configPath)) {
98
- const data = readFileSync(this.configPath, 'utf-8');
99
- const session = JSON.parse(data);
100
- this.sessionToken = session.sessionToken || null;
101
- }
102
- }
103
- catch (error) {
104
- // If there's any error reading the session, just start fresh
105
- this.sessionToken = null;
106
- }
107
- }
108
- /**
109
- * Save session token to local config file
110
- */
111
- saveSession(token, expiresAt) {
112
- try {
113
- // Ensure config directory exists
114
- if (!existsSync(this.configDir)) {
115
- mkdirSync(this.configDir, { recursive: true, mode: 0o700 });
116
- }
117
- // Save session data
118
- const sessionData = {
119
- sessionToken: token,
120
- expiresAt: expiresAt || null,
121
- savedAt: new Date().toISOString(),
122
- };
123
- writeFileSync(this.configPath, JSON.stringify(sessionData, null, 2), { encoding: 'utf-8', mode: 0o600 });
124
- this.sessionToken = token;
125
- }
126
- catch (error) {
127
- logError('Failed to save session', error);
128
- throw new Error('Failed to save session locally');
129
- }
130
- }
131
- /**
132
- * Clear session token from memory and local storage
133
- */
134
- clearSession() {
135
- this.sessionToken = null;
136
- try {
137
- if (existsSync(this.configPath)) {
138
- unlinkSync(this.configPath);
139
- }
8
+ client = null;
9
+ sessionToken = null;
10
+ configPath;
11
+ configDir;
12
+ cachedUser = null;
13
+ constructor() {
14
+ this.configDir = join(homedir(), ".centaurus");
15
+ this.configPath = join(this.configDir, "session.json");
16
+ this.loadSession();
17
+ }
18
+ /**
19
+ * Helper to extract data from API response safely
20
+ */
21
+ extractData(response) {
22
+ if (response.data.data === void 0 || response.data.data === null) {
23
+ throw new Error("API response missing expected data payload");
24
+ }
25
+ return response.data.data;
26
+ }
27
+ /**
28
+ * Get or create the axios client instance
29
+ * This is lazy-loaded to ensure environment variables are loaded first
30
+ */
31
+ getClient() {
32
+ if (!this.client) {
33
+ const baseURL = IS_DEV_BUILD ? DEV_BACKEND_URL : PRODUCTION_BACKEND_URL;
34
+ this.client = axios.create({
35
+ baseURL,
36
+ timeout: 3e4,
37
+ headers: {
38
+ "Content-Type": "application/json"
140
39
  }
141
- catch (error) {
142
- // Ignore errors when clearing session
40
+ });
41
+ this.getClient().interceptors.request.use(
42
+ (config) => {
43
+ if (this.sessionToken) {
44
+ config.headers.Authorization = `Bearer ${this.sessionToken}`;
45
+ }
46
+ return config;
47
+ },
48
+ (error) => {
49
+ return Promise.reject(error);
143
50
  }
144
- }
145
- /**
146
- * Check if user is authenticated
147
- */
148
- isAuthenticated() {
149
- return this.sessionToken !== null;
150
- }
151
- // ==================== Authentication Methods ====================
152
- /**
153
- * Initialize Google OAuth flow
154
- * @param redirectUri - The URI to redirect to after OAuth
155
- * @returns OAuth URL and state parameter
156
- */
157
- async initGoogleAuth(redirectUri) {
158
- const response = await this.getClient().post('/auth/google/init', { redirectUri });
159
- return this.extractData(response);
160
- }
161
- /**
162
- * Complete Google OAuth authentication
163
- * @param code - Authorization code from Google
164
- * @param state - State parameter for CSRF protection
165
- * @returns Session token and user information
166
- */
167
- async authenticate(code, state) {
168
- const response = await this.getClient().post('/auth/google/callback', { code, state });
169
- const authData = this.extractData(response);
170
- this.saveSession(authData.sessionToken, authData.expiresAt);
171
- return authData;
172
- }
173
- /**
174
- * Set session token directly (used when receiving token from web app)
175
- * @param sessionToken - The session token to save
176
- * @param user - User information
177
- */
178
- setSessionToken(sessionToken, user) {
179
- // Calculate expiration (30 days from now)
180
- const expiresAt = new Date();
181
- expiresAt.setDate(expiresAt.getDate() + 30);
182
- this.saveSession(sessionToken, expiresAt.toISOString());
183
- }
184
- /**
185
- * Refresh the current session token
186
- * @returns New session token and expiration
187
- */
188
- async refreshSession() {
189
- const response = await this.getClient().post('/auth/refresh');
190
- const refreshData = this.extractData(response);
191
- this.saveSession(refreshData.sessionToken, refreshData.expiresAt);
192
- return refreshData;
193
- }
194
- /**
195
- * Logout and invalidate current session
196
- */
197
- async logout() {
198
- try {
199
- await this.getClient().post('/auth/logout');
200
- }
201
- finally {
202
- // Always clear local session, even if API call fails
51
+ );
52
+ this.getClient().interceptors.response.use(
53
+ (response) => response,
54
+ async (error) => {
55
+ if (error.response?.status === 401) {
203
56
  this.clearSession();
204
- }
205
- }
206
- /**
207
- * Get current authenticated user profile
208
- * @returns User profile information
209
- */
210
- async getCurrentUser() {
211
- const response = await this.getClient().get('/auth/me');
212
- return this.extractData(response);
213
- }
214
- // ==================== Conversation Methods ====================
215
- /**
216
- * Create a new conversation
217
- * @param data - Conversation creation parameters
218
- * @returns Created conversation
219
- */
220
- async createConversation(data) {
221
- const response = await this.getClient().post('/conversations', data);
222
- return this.extractData(response);
223
- }
224
- /**
225
- * Get all conversations for the authenticated user
226
- * @param params - Pagination and filter parameters
227
- * @returns List of conversations with pagination metadata
228
- */
229
- async getConversations(params) {
230
- const queryParams = {
231
- page: params?.page || 1,
232
- limit: params?.limit || 20,
233
- };
234
- if (params?.includeArchived !== undefined) {
235
- queryParams.includeArchived = params.includeArchived;
236
- }
237
- if (params?.tags && params.tags.length > 0) {
238
- queryParams.tags = params.tags.join(',');
239
- }
240
- const response = await this.getClient().get('/conversations', { params: queryParams });
241
- return response.data;
242
- }
243
- /**
244
- * Get a specific conversation by ID
245
- * @param conversationId - The conversation ID
246
- * @returns Conversation details
247
- */
248
- async getConversation(conversationId) {
249
- const response = await this.getClient().get(`/conversations/${conversationId}`);
250
- return this.extractData(response);
251
- }
252
- /**
253
- * Update a conversation
254
- * @param conversationId - The conversation ID
255
- * @param data - Fields to update
256
- * @returns Updated conversation
257
- */
258
- async updateConversation(conversationId, data) {
259
- const response = await this.getClient().put(`/conversations/${conversationId}`, data);
260
- return this.extractData(response);
261
- }
262
- /**
263
- * Delete (archive) a conversation
264
- * @param conversationId - The conversation ID
265
- */
266
- async deleteConversation(conversationId) {
267
- await this.getClient().delete(`/conversations/${conversationId}`);
268
- }
269
- // ==================== Message Methods ====================
270
- /**
271
- * Add a message to a conversation
272
- * @param conversationId - The conversation ID
273
- * @param message - Message data
274
- * @returns Created message
275
- */
276
- async addMessage(conversationId, message) {
277
- const response = await this.getClient().post(`/conversations/${conversationId}/messages`, message);
278
- return this.extractData(response);
279
- }
280
- /**
281
- * Get all messages for a conversation
282
- * @param conversationId - The conversation ID
283
- * @param params - Pagination parameters
284
- * @returns List of messages with pagination metadata
285
- */
286
- async getMessages(conversationId, params) {
287
- const queryParams = {
288
- page: params?.page || 1,
289
- limit: params?.limit || 50,
290
- };
291
- const response = await this.getClient().get(`/conversations/${conversationId}/messages`, { params: queryParams });
292
- return response.data;
293
- }
294
- // ==================== Settings Methods ====================
295
- /**
296
- * Get user settings
297
- * @returns User settings object
298
- */
299
- async getSettings() {
300
- const response = await this.getClient().get('/settings');
301
- return this.extractData(response);
302
- }
303
- /**
304
- * Update user settings
305
- * @param settings - Settings to update (partial update supported)
306
- * @returns Updated settings
307
- */
308
- async updateSettings(settings) {
309
- const response = await this.getClient().put('/settings', settings);
310
- return this.extractData(response);
311
- }
312
- // ==================== Models Configuration Methods ====================
313
- /**
314
- * Get available AI models configuration from backend
315
- * This is a public endpoint (no auth required)
316
- * @returns Models configuration including all model variants and default model
317
- */
318
- async getModelsConfig() {
319
- const response = await this.getClient().get('/models/config');
320
- return this.extractData(response);
321
- }
322
- // ==================== Rate Limits Configuration Methods ====================
323
- /**
324
- * Get rate limits configuration from backend
325
- * This is a public endpoint (no auth required)
326
- * @returns Rate limits configuration including session quotas
327
- */
328
- async getRateLimitsConfig() {
329
- const response = await this.getClient().get('/rate-limits/session');
330
- return this.extractData(response);
331
- }
332
- // ==================== Classification Methods ====================
333
- /**
334
- * Classify user input to determine if it's a terminal command or AI message
335
- * @param text - Input text to classify
336
- * @returns Mode prediction: 'terminal' or 'ai'
337
- */
338
- async classifyInput(text) {
339
- try {
340
- const response = await this.getClient().post('/classify', { text });
341
- return response.data.data?.mode || 'ai';
342
- }
343
- catch (error) {
344
- // On error, return default 'ai' mode - silent fallback
345
- return 'ai';
346
- }
347
- }
348
- // ==================== File Upload Methods ====================
349
- /**
350
- * Upload a file to the backend for AI processing
351
- * @param conversationId - The conversation ID
352
- * @param fileName - Original file name
353
- * @param fileType - MIME type
354
- * @param fileData - Base64 encoded file data
355
- * @returns Upload result with gcsUri for Vertex AI
356
- */
357
- async uploadFile(conversationId, fileName, fileType, fileData) {
358
- const response = await this.getClient().post('/files/upload', { conversationId, fileName, fileType, mimeType: fileType, fileData, clientType: 'cli' });
359
- return this.extractData(response);
360
- }
361
- /**
362
- * Delete all files for a conversation from storage (Supabase and GCS)
363
- * Call this when deleting a conversation to clean up associated images
364
- * @param conversationId - The conversation ID
365
- */
366
- async deleteConversationFiles(conversationId) {
367
- try {
368
- await this.getClient().delete(`/files/conversation/${conversationId}`);
369
- }
370
- catch (error) {
371
- // Silently fail - files might not exist or user might not be authenticated
372
- // This is a cleanup operation, so we don't want to block chat deletion
373
- }
374
- }
375
- // ==================== Sync Methods ====================
376
- /**
377
- * Upload sync data (combined chat history and config)
378
- * @param syncData - The combined data to sync
379
- * @returns Upload result with version info
380
- */
381
- async uploadSyncData(syncData) {
382
- const response = await this.getClient().post('/sync', { syncData });
383
- return this.extractData(response);
384
- }
385
- /**
386
- * Get sync data for the current user
387
- * @returns Sync data or null if not found
388
- */
389
- async getSyncData() {
390
- try {
391
- const response = await this.getClient().get('/sync');
392
- return this.extractData(response);
393
- }
394
- catch (error) {
395
- if (error.response?.status === 404) {
396
- return null;
57
+ const authError = new Error("Session expired. Please sign in again.");
58
+ authError.name = "AuthenticationError";
59
+ throw authError;
60
+ }
61
+ if (error.response?.data) {
62
+ const apiError = error.response.data;
63
+ if (apiError.error) {
64
+ const customError = new Error(apiError.error.message);
65
+ customError.name = apiError.error.code;
66
+ throw customError;
397
67
  }
398
- throw error;
68
+ }
69
+ throw error;
399
70
  }
400
- }
401
- /**
402
- * Delete sync data for the current user
403
- */
404
- async deleteSyncData() {
405
- await this.getClient().delete('/sync');
406
- }
407
- // ==================== Token Counting Methods ====================
408
- /**
409
- * Count tokens for a given model and messages
410
- * Uses backend's accurate token counting (Vertex AI countTokens API)
411
- * @param model - Model name (e.g., gemini-2.5-flash)
412
- * @param messages - Array of conversation messages
413
- * @returns Total token count including system prompt
414
- */
415
- async countTokens(model, messages) {
416
- try {
417
- const response = await this.getClient().post('/ai/count-tokens', { model, messages });
418
- return response.data.data?.tokenCount || 0;
419
- }
420
- catch (error) {
421
- logError('Failed to count tokens via API', error);
422
- // Fallback to character-based estimation
423
- const totalCharacters = messages.reduce((sum, msg) => {
424
- const content = typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content);
425
- return sum + content.length;
426
- }, 0);
427
- // Add system prompt estimate (roughly 14000 characters)
428
- // Use 1 token ≈ 4 characters for Gemini models
429
- return Math.ceil((totalCharacters + 14000) / 4);
430
- }
431
- }
432
- // ==================== Health Check ====================
433
- /**
434
- * Check backend service health
435
- * @returns Health status information
436
- */
437
- async healthCheck() {
438
- // Health endpoint is at root level, not under /api
439
- // So we need to construct the full URL manually
440
- // Use build config for URL (frozen at compile time)
441
- const baseURL = IS_DEV_BUILD ? DEV_BACKEND_URL : PRODUCTION_BACKEND_URL;
442
- const healthURL = baseURL.replace('/api', '/health');
443
- const response = await axios.get(healthURL);
444
- return this.extractData(response);
445
- }
71
+ );
72
+ }
73
+ return this.client;
74
+ }
75
+ /**
76
+ * Load session token from local config file
77
+ */
78
+ loadSession() {
79
+ try {
80
+ if (existsSync(this.configPath)) {
81
+ const data = readFileSync(this.configPath, "utf-8");
82
+ const session = JSON.parse(data);
83
+ this.sessionToken = session.sessionToken || null;
84
+ }
85
+ } catch (error) {
86
+ this.sessionToken = null;
87
+ }
88
+ }
89
+ /**
90
+ * Save session token to local config file
91
+ */
92
+ saveSession(token, expiresAt) {
93
+ try {
94
+ if (!existsSync(this.configDir)) {
95
+ mkdirSync(this.configDir, { recursive: true, mode: 448 });
96
+ }
97
+ const sessionData = {
98
+ sessionToken: token,
99
+ expiresAt: expiresAt || null,
100
+ savedAt: (/* @__PURE__ */ new Date()).toISOString()
101
+ };
102
+ writeFileSync(this.configPath, JSON.stringify(sessionData, null, 2), { encoding: "utf-8", mode: 384 });
103
+ this.sessionToken = token;
104
+ } catch (error) {
105
+ logError("Failed to save session", error);
106
+ throw new Error("Failed to save session locally");
107
+ }
108
+ }
109
+ /**
110
+ * Clear session token from memory and local storage
111
+ */
112
+ clearSession() {
113
+ this.sessionToken = null;
114
+ this.cachedUser = null;
115
+ try {
116
+ if (existsSync(this.configPath)) {
117
+ unlinkSync(this.configPath);
118
+ }
119
+ } catch (error) {
120
+ }
121
+ }
122
+ /**
123
+ * Check if user is authenticated
124
+ */
125
+ isAuthenticated() {
126
+ return this.sessionToken !== null;
127
+ }
128
+ // ==================== Authentication Methods ====================
129
+ /**
130
+ * Initialize Google OAuth flow
131
+ * @param redirectUri - The URI to redirect to after OAuth
132
+ * @returns OAuth URL and state parameter
133
+ */
134
+ async initGoogleAuth(redirectUri) {
135
+ const response = await this.getClient().post(
136
+ "/auth/google/init",
137
+ { redirectUri }
138
+ );
139
+ return this.extractData(response);
140
+ }
141
+ /**
142
+ * Complete Google OAuth authentication
143
+ * @param code - Authorization code from Google
144
+ * @param state - State parameter for CSRF protection
145
+ * @returns Session token and user information
146
+ */
147
+ async authenticate(code, state) {
148
+ const response = await this.getClient().post(
149
+ "/auth/google/callback",
150
+ { code, state }
151
+ );
152
+ const authData = this.extractData(response);
153
+ this.saveSession(authData.sessionToken, authData.expiresAt);
154
+ return authData;
155
+ }
156
+ /**
157
+ * Set session token directly (used when receiving token from web app)
158
+ * @param sessionToken - The session token to save
159
+ * @param user - User information
160
+ */
161
+ setSessionToken(sessionToken, user) {
162
+ const expiresAt = /* @__PURE__ */ new Date();
163
+ expiresAt.setDate(expiresAt.getDate() + 30);
164
+ this.saveSession(sessionToken, expiresAt.toISOString());
165
+ }
166
+ /**
167
+ * Refresh the current session token
168
+ * @returns New session token and expiration
169
+ */
170
+ async refreshSession() {
171
+ const response = await this.getClient().post(
172
+ "/auth/refresh"
173
+ );
174
+ const refreshData = this.extractData(response);
175
+ this.saveSession(refreshData.sessionToken, refreshData.expiresAt);
176
+ return refreshData;
177
+ }
178
+ /**
179
+ * Logout and invalidate current session
180
+ */
181
+ async logout() {
182
+ try {
183
+ await this.getClient().post("/auth/logout");
184
+ } finally {
185
+ this.clearSession();
186
+ }
187
+ }
188
+ /**
189
+ * Get current authenticated user profile
190
+ * @returns User profile information
191
+ */
192
+ async getCurrentUser() {
193
+ const response = await this.getClient().get("/auth/me");
194
+ const user = this.extractData(response);
195
+ this.cachedUser = user;
196
+ return user;
197
+ }
198
+ getCachedUser() {
199
+ return this.cachedUser;
200
+ }
201
+ // ==================== Conversation Methods ====================
202
+ /**
203
+ * Create a new conversation
204
+ * @param data - Conversation creation parameters
205
+ * @returns Created conversation
206
+ */
207
+ async createConversation(data) {
208
+ const response = await this.getClient().post(
209
+ "/threads",
210
+ data
211
+ );
212
+ return this.extractData(response);
213
+ }
214
+ /**
215
+ * Get all conversations for the authenticated user
216
+ * @param params - Pagination and filter parameters
217
+ * @returns List of conversations with pagination metadata
218
+ */
219
+ async getConversations(params) {
220
+ const queryParams = {
221
+ page: params?.page || 1,
222
+ limit: params?.limit || 20
223
+ };
224
+ if (params?.includeArchived !== void 0) {
225
+ queryParams.includeArchived = params.includeArchived;
226
+ }
227
+ if (params?.tags && params.tags.length > 0) {
228
+ queryParams.tags = params.tags.join(",");
229
+ }
230
+ const response = await this.getClient().get(
231
+ "/threads",
232
+ { params: queryParams }
233
+ );
234
+ return response.data;
235
+ }
236
+ /**
237
+ * Get a specific conversation by ID
238
+ * @param conversationId - The conversation ID
239
+ * @returns Conversation details
240
+ */
241
+ async getConversation(conversationId) {
242
+ const response = await this.getClient().get(
243
+ `/threads/${conversationId}`
244
+ );
245
+ return this.extractData(response);
246
+ }
247
+ /**
248
+ * Update a conversation
249
+ * @param conversationId - The conversation ID
250
+ * @param data - Fields to update
251
+ * @returns Updated conversation
252
+ */
253
+ async updateConversation(conversationId, data) {
254
+ const response = await this.getClient().put(
255
+ `/threads/${conversationId}`,
256
+ data
257
+ );
258
+ return this.extractData(response);
259
+ }
260
+ /**
261
+ * Delete (archive) a conversation
262
+ * @param conversationId - The conversation ID
263
+ */
264
+ async deleteConversation(conversationId) {
265
+ await this.getClient().delete(`/threads/${conversationId}`);
266
+ }
267
+ // ==================== Message Methods ====================
268
+ /**
269
+ * Add a message to a conversation
270
+ * @param conversationId - The conversation ID
271
+ * @param message - Message data
272
+ * @returns Created message
273
+ */
274
+ async addMessage(conversationId, message) {
275
+ const response = await this.getClient().post(
276
+ `/threads/${conversationId}/messages`,
277
+ message
278
+ );
279
+ return this.extractData(response);
280
+ }
281
+ /**
282
+ * Get all messages for a conversation
283
+ * @param conversationId - The conversation ID
284
+ * @param params - Pagination parameters
285
+ * @returns List of messages with pagination metadata
286
+ */
287
+ async getMessages(conversationId, params) {
288
+ const queryParams = {
289
+ page: params?.page || 1,
290
+ limit: params?.limit || 50
291
+ };
292
+ const response = await this.getClient().get(
293
+ `/threads/${conversationId}/messages`,
294
+ { params: queryParams }
295
+ );
296
+ return response.data;
297
+ }
298
+ // ==================== Settings Methods ====================
299
+ /**
300
+ * Get user settings
301
+ * @returns User settings object
302
+ */
303
+ async getSettings() {
304
+ const response = await this.getClient().get("/settings");
305
+ return this.extractData(response);
306
+ }
307
+ /**
308
+ * Update user settings
309
+ * @param settings - Settings to update (partial update supported)
310
+ * @returns Updated settings
311
+ */
312
+ async updateSettings(settings) {
313
+ const response = await this.getClient().put(
314
+ "/settings",
315
+ settings
316
+ );
317
+ return this.extractData(response);
318
+ }
319
+ // ==================== Models Configuration Methods ====================
320
+ /**
321
+ * Get available AI models configuration from backend
322
+ * This is a public endpoint (no auth required)
323
+ * @returns Models configuration including all model variants and default model
324
+ */
325
+ async getModelsConfig() {
326
+ const response = await this.getClient().get("/models");
327
+ return this.extractData(response);
328
+ }
329
+ // ==================== Rate Limits Configuration Methods ====================
330
+ /**
331
+ * Get rate limits configuration from backend
332
+ * This is a public endpoint (no auth required)
333
+ * @returns Rate limits configuration including session quotas
334
+ */
335
+ async getRateLimitsConfig() {
336
+ const response = await this.getClient().get("/rate-limits/session");
337
+ return this.extractData(response);
338
+ }
339
+ // ==================== Classification Methods ====================
340
+ /**
341
+ * Classify user input to determine if it's a terminal command or AI message
342
+ * @param text - Input text to classify
343
+ * @returns Mode prediction: 'terminal' or 'ai'
344
+ */
345
+ async classifyInput(text) {
346
+ try {
347
+ const response = await this.getClient().post(
348
+ "/classify",
349
+ { text }
350
+ );
351
+ return response.data.data?.mode || "ai";
352
+ } catch (error) {
353
+ return "ai";
354
+ }
355
+ }
356
+ // ==================== File Upload Methods ====================
357
+ /**
358
+ * Upload a file to the backend for AI processing
359
+ * @param conversationId - The conversation ID
360
+ * @param fileName - Original file name
361
+ * @param fileType - MIME type
362
+ * @param fileData - Base64 encoded file data
363
+ * @returns Upload result with gcsUri for Vertex AI
364
+ */
365
+ async uploadFile(conversationId, fileName, fileType, fileData) {
366
+ const response = await this.getClient().post("/files", { conversationId, fileName, fileType, mimeType: fileType, fileData, clientType: "cli" });
367
+ return this.extractData(response);
368
+ }
369
+ /**
370
+ * Delete all files for a conversation from storage (Supabase and GCS)
371
+ * Call this when deleting a conversation to clean up associated images
372
+ * @param conversationId - The conversation ID
373
+ */
374
+ async deleteConversationFiles(conversationId) {
375
+ try {
376
+ await this.getClient().delete(`/files/by-thread/${conversationId}`);
377
+ } catch (error) {
378
+ }
379
+ }
380
+ // ==================== Sync Methods ====================
381
+ /**
382
+ * Upload sync data (combined chat history and config)
383
+ * @param syncData - The combined data to sync
384
+ * @returns Upload result with version info
385
+ */
386
+ async uploadSyncData(syncData) {
387
+ const response = await this.getClient().post("/sync", { syncData });
388
+ return this.extractData(response);
389
+ }
390
+ /**
391
+ * Get sync data for the current user
392
+ * @returns Sync data or null if not found
393
+ */
394
+ async getSyncData() {
395
+ try {
396
+ const response = await this.getClient().get("/sync");
397
+ return this.extractData(response);
398
+ } catch (error) {
399
+ if (error.response?.status === 404) {
400
+ return null;
401
+ }
402
+ throw error;
403
+ }
404
+ }
405
+ /**
406
+ * Delete sync data for the current user
407
+ */
408
+ async deleteSyncData() {
409
+ await this.getClient().delete("/sync");
410
+ }
411
+ // ==================== Token Counting Methods ====================
412
+ /**
413
+ * Count tokens for a given model and messages
414
+ * Uses backend's accurate token counting (Vertex AI countTokens API)
415
+ * @param model - Model name (e.g., gemini-2.5-flash)
416
+ * @param messages - Array of conversation messages
417
+ * @returns Total token count including system prompt
418
+ */
419
+ async countTokens(model, messages) {
420
+ try {
421
+ const response = await this.getClient().post(
422
+ "/chat/token-count",
423
+ { model, messages }
424
+ );
425
+ return response.data.data?.tokenCount || 0;
426
+ } catch (error) {
427
+ logError("Failed to count tokens via API", error);
428
+ const totalCharacters = messages.reduce((sum, msg) => {
429
+ const content = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
430
+ return sum + content.length;
431
+ }, 0);
432
+ return Math.ceil((totalCharacters + 14e3) / 4);
433
+ }
434
+ }
435
+ // ==================== Health Check ====================
436
+ /**
437
+ * Check backend service health
438
+ * @returns Health status information
439
+ */
440
+ async healthCheck() {
441
+ const baseURL = IS_DEV_BUILD ? DEV_BACKEND_URL : PRODUCTION_BACKEND_URL;
442
+ const healthURL = baseURL.replace("/v1", "/health");
443
+ const response = await axios.get(healthURL);
444
+ return this.extractData(response);
445
+ }
446
446
  }
447
- // Export singleton instance
448
- export const apiClient = new ApiClient();
447
+ const apiClient = new ApiClient();
448
+ export {
449
+ apiClient
450
+ };
449
451
  //# sourceMappingURL=api-client.js.map