centaurus-cli 2.0.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 (338) hide show
  1. package/AUTH_FLOW.md +138 -0
  2. package/CONFIG_GUIDE.md +255 -0
  3. package/LICENSE +21 -0
  4. package/README.md +346 -0
  5. package/dist/ai/provider-factory.d.ts +6 -0
  6. package/dist/ai/provider-factory.d.ts.map +1 -0
  7. package/dist/ai/provider-factory.js +27 -0
  8. package/dist/ai/provider-factory.js.map +1 -0
  9. package/dist/ai/providers/base.d.ts +25 -0
  10. package/dist/ai/providers/base.d.ts.map +1 -0
  11. package/dist/ai/providers/base.js +9 -0
  12. package/dist/ai/providers/base.js.map +1 -0
  13. package/dist/ai/providers/gemini.d.ts +34 -0
  14. package/dist/ai/providers/gemini.d.ts.map +1 -0
  15. package/dist/ai/providers/gemini.js +146 -0
  16. package/dist/ai/providers/gemini.js.map +1 -0
  17. package/dist/ai/types.d.ts +20 -0
  18. package/dist/ai/types.d.ts.map +1 -0
  19. package/dist/ai/types.js +2 -0
  20. package/dist/ai/types.js.map +1 -0
  21. package/dist/cli-adapter.d.ts +78 -0
  22. package/dist/cli-adapter.d.ts.map +1 -0
  23. package/dist/cli-adapter.js +605 -0
  24. package/dist/cli-adapter.js.map +1 -0
  25. package/dist/commands/CommandParser.d.ts +27 -0
  26. package/dist/commands/CommandParser.d.ts.map +1 -0
  27. package/dist/commands/CommandParser.js +238 -0
  28. package/dist/commands/CommandParser.js.map +1 -0
  29. package/dist/config/ConfigManager.d.ts +59 -0
  30. package/dist/config/ConfigManager.d.ts.map +1 -0
  31. package/dist/config/ConfigManager.js +332 -0
  32. package/dist/config/ConfigManager.js.map +1 -0
  33. package/dist/config/defaultConfig.d.ts +82 -0
  34. package/dist/config/defaultConfig.d.ts.map +1 -0
  35. package/dist/config/defaultConfig.js +88 -0
  36. package/dist/config/defaultConfig.js.map +1 -0
  37. package/dist/config/manager.d.ts +60 -0
  38. package/dist/config/manager.d.ts.map +1 -0
  39. package/dist/config/manager.js +162 -0
  40. package/dist/config/manager.js.map +1 -0
  41. package/dist/config/types.d.ts +9 -0
  42. package/dist/config/types.d.ts.map +1 -0
  43. package/dist/config/types.js +6 -0
  44. package/dist/config/types.js.map +1 -0
  45. package/dist/index-custom.d.ts +3 -0
  46. package/dist/index-custom.d.ts.map +1 -0
  47. package/dist/index-custom.js +65 -0
  48. package/dist/index-custom.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +102 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/prompts/system-prompt.d.ts +47 -0
  54. package/dist/prompts/system-prompt.d.ts.map +1 -0
  55. package/dist/prompts/system-prompt.js +378 -0
  56. package/dist/prompts/system-prompt.js.map +1 -0
  57. package/dist/providers/GoogleProvider.d.ts +26 -0
  58. package/dist/providers/GoogleProvider.d.ts.map +1 -0
  59. package/dist/providers/GoogleProvider.js +313 -0
  60. package/dist/providers/GoogleProvider.js.map +1 -0
  61. package/dist/providers/Provider.d.ts +114 -0
  62. package/dist/providers/Provider.d.ts.map +1 -0
  63. package/dist/providers/Provider.js +44 -0
  64. package/dist/providers/Provider.js.map +1 -0
  65. package/dist/services/api-client.d.ts +282 -0
  66. package/dist/services/api-client.d.ts.map +1 -0
  67. package/dist/services/api-client.js +339 -0
  68. package/dist/services/api-client.js.map +1 -0
  69. package/dist/services/auth-handler.d.ts +30 -0
  70. package/dist/services/auth-handler.d.ts.map +1 -0
  71. package/dist/services/auth-handler.js +210 -0
  72. package/dist/services/auth-handler.js.map +1 -0
  73. package/dist/services/conversation-manager.d.ts +73 -0
  74. package/dist/services/conversation-manager.d.ts.map +1 -0
  75. package/dist/services/conversation-manager.js +128 -0
  76. package/dist/services/conversation-manager.js.map +1 -0
  77. package/dist/tests/automated-verification.d.ts +27 -0
  78. package/dist/tests/automated-verification.d.ts.map +1 -0
  79. package/dist/tests/automated-verification.js +359 -0
  80. package/dist/tests/automated-verification.js.map +1 -0
  81. package/dist/tests/integration-tests.d.ts +50 -0
  82. package/dist/tests/integration-tests.d.ts.map +1 -0
  83. package/dist/tests/integration-tests.js +648 -0
  84. package/dist/tests/integration-tests.js.map +1 -0
  85. package/dist/tools/ToolRegistry.d.ts +44 -0
  86. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  87. package/dist/tools/ToolRegistry.js +494 -0
  88. package/dist/tools/ToolRegistry.js.map +1 -0
  89. package/dist/tools/command.d.ts +4 -0
  90. package/dist/tools/command.d.ts.map +1 -0
  91. package/dist/tools/command.js +117 -0
  92. package/dist/tools/command.js.map +1 -0
  93. package/dist/tools/file-ops-test.d.ts +6 -0
  94. package/dist/tools/file-ops-test.d.ts.map +1 -0
  95. package/dist/tools/file-ops-test.js +197 -0
  96. package/dist/tools/file-ops-test.js.map +1 -0
  97. package/dist/tools/file-ops.d.ts +6 -0
  98. package/dist/tools/file-ops.d.ts.map +1 -0
  99. package/dist/tools/file-ops.js +189 -0
  100. package/dist/tools/file-ops.js.map +1 -0
  101. package/dist/tools/plan-mode.d.ts +53 -0
  102. package/dist/tools/plan-mode.d.ts.map +1 -0
  103. package/dist/tools/plan-mode.js +202 -0
  104. package/dist/tools/plan-mode.js.map +1 -0
  105. package/dist/tools/registry.d.ts +30 -0
  106. package/dist/tools/registry.d.ts.map +1 -0
  107. package/dist/tools/registry.js +67 -0
  108. package/dist/tools/registry.js.map +1 -0
  109. package/dist/tools/types.d.ts +34 -0
  110. package/dist/tools/types.d.ts.map +1 -0
  111. package/dist/tools/types.js +2 -0
  112. package/dist/tools/types.js.map +1 -0
  113. package/dist/tools/web-search.d.ts +24 -0
  114. package/dist/tools/web-search.d.ts.map +1 -0
  115. package/dist/tools/web-search.js +194 -0
  116. package/dist/tools/web-search.js.map +1 -0
  117. package/dist/types/index.d.ts +32 -0
  118. package/dist/types/index.d.ts.map +1 -0
  119. package/dist/types/index.js +2 -0
  120. package/dist/types/index.js.map +1 -0
  121. package/dist/ui/DisplayHistory.d.ts +53 -0
  122. package/dist/ui/DisplayHistory.d.ts.map +1 -0
  123. package/dist/ui/DisplayHistory.js +82 -0
  124. package/dist/ui/DisplayHistory.js.map +1 -0
  125. package/dist/ui/clack-ui.d.ts +83 -0
  126. package/dist/ui/clack-ui.d.ts.map +1 -0
  127. package/dist/ui/clack-ui.js +304 -0
  128. package/dist/ui/clack-ui.js.map +1 -0
  129. package/dist/ui/components/App.d.ts +47 -0
  130. package/dist/ui/components/App.d.ts.map +1 -0
  131. package/dist/ui/components/App.js +389 -0
  132. package/dist/ui/components/App.js.map +1 -0
  133. package/dist/ui/components/AuthScreen.d.ts +8 -0
  134. package/dist/ui/components/AuthScreen.d.ts.map +1 -0
  135. package/dist/ui/components/AuthScreen.js +37 -0
  136. package/dist/ui/components/AuthScreen.js.map +1 -0
  137. package/dist/ui/components/AuthWelcomeScreen.d.ts +8 -0
  138. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +1 -0
  139. package/dist/ui/components/AuthWelcomeScreen.js +34 -0
  140. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -0
  141. package/dist/ui/components/CodeBlock.d.ts +9 -0
  142. package/dist/ui/components/CodeBlock.d.ts.map +1 -0
  143. package/dist/ui/components/CodeBlock.js +22 -0
  144. package/dist/ui/components/CodeBlock.js.map +1 -0
  145. package/dist/ui/components/ConfigViewer.d.ts +11 -0
  146. package/dist/ui/components/ConfigViewer.d.ts.map +1 -0
  147. package/dist/ui/components/ConfigViewer.js +27 -0
  148. package/dist/ui/components/ConfigViewer.js.map +1 -0
  149. package/dist/ui/components/ConfirmPrompt.d.ts +11 -0
  150. package/dist/ui/components/ConfirmPrompt.d.ts.map +1 -0
  151. package/dist/ui/components/ConfirmPrompt.js +55 -0
  152. package/dist/ui/components/ConfirmPrompt.js.map +1 -0
  153. package/dist/ui/components/DiffViewer.d.ts +8 -0
  154. package/dist/ui/components/DiffViewer.d.ts.map +1 -0
  155. package/dist/ui/components/DiffViewer.js +63 -0
  156. package/dist/ui/components/DiffViewer.js.map +1 -0
  157. package/dist/ui/components/DisplayItemRenderer.d.ts +18 -0
  158. package/dist/ui/components/DisplayItemRenderer.d.ts.map +1 -0
  159. package/dist/ui/components/DisplayItemRenderer.js +53 -0
  160. package/dist/ui/components/DisplayItemRenderer.js.map +1 -0
  161. package/dist/ui/components/DynamicMessage.d.ts +13 -0
  162. package/dist/ui/components/DynamicMessage.d.ts.map +1 -0
  163. package/dist/ui/components/DynamicMessage.js +27 -0
  164. package/dist/ui/components/DynamicMessage.js.map +1 -0
  165. package/dist/ui/components/ErrorBoundary.d.ts +16 -0
  166. package/dist/ui/components/ErrorBoundary.d.ts.map +1 -0
  167. package/dist/ui/components/ErrorBoundary.js +25 -0
  168. package/dist/ui/components/ErrorBoundary.js.map +1 -0
  169. package/dist/ui/components/FileOperation.d.ts +10 -0
  170. package/dist/ui/components/FileOperation.d.ts.map +1 -0
  171. package/dist/ui/components/FileOperation.js +31 -0
  172. package/dist/ui/components/FileOperation.js.map +1 -0
  173. package/dist/ui/components/InputBox.d.ts +12 -0
  174. package/dist/ui/components/InputBox.d.ts.map +1 -0
  175. package/dist/ui/components/InputBox.js +50 -0
  176. package/dist/ui/components/InputBox.js.map +1 -0
  177. package/dist/ui/components/KeyboardHelp.d.ts +7 -0
  178. package/dist/ui/components/KeyboardHelp.d.ts.map +1 -0
  179. package/dist/ui/components/KeyboardHelp.js +25 -0
  180. package/dist/ui/components/KeyboardHelp.js.map +1 -0
  181. package/dist/ui/components/LoadingIndicator.d.ts +3 -0
  182. package/dist/ui/components/LoadingIndicator.d.ts.map +1 -0
  183. package/dist/ui/components/LoadingIndicator.js +25 -0
  184. package/dist/ui/components/LoadingIndicator.js.map +1 -0
  185. package/dist/ui/components/MarkdownRenderer.d.ts +8 -0
  186. package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -0
  187. package/dist/ui/components/MarkdownRenderer.js +96 -0
  188. package/dist/ui/components/MarkdownRenderer.js.map +1 -0
  189. package/dist/ui/components/MessageBox.d.ts +10 -0
  190. package/dist/ui/components/MessageBox.d.ts.map +1 -0
  191. package/dist/ui/components/MessageBox.js +50 -0
  192. package/dist/ui/components/MessageBox.js.map +1 -0
  193. package/dist/ui/components/MessageDisplay.d.ts +8 -0
  194. package/dist/ui/components/MessageDisplay.d.ts.map +1 -0
  195. package/dist/ui/components/MessageDisplay.js +43 -0
  196. package/dist/ui/components/MessageDisplay.js.map +1 -0
  197. package/dist/ui/components/ScrollableContent.d.ts +7 -0
  198. package/dist/ui/components/ScrollableContent.d.ts.map +1 -0
  199. package/dist/ui/components/ScrollableContent.js +6 -0
  200. package/dist/ui/components/ScrollableContent.js.map +1 -0
  201. package/dist/ui/components/ScrollableMessageList.d.ts +10 -0
  202. package/dist/ui/components/ScrollableMessageList.d.ts.map +1 -0
  203. package/dist/ui/components/ScrollableMessageList.js +133 -0
  204. package/dist/ui/components/ScrollableMessageList.js.map +1 -0
  205. package/dist/ui/components/ScrollableScreen.d.ts +9 -0
  206. package/dist/ui/components/ScrollableScreen.d.ts.map +1 -0
  207. package/dist/ui/components/ScrollableScreen.js +22 -0
  208. package/dist/ui/components/ScrollableScreen.js.map +1 -0
  209. package/dist/ui/components/SelectPrompt.d.ts +12 -0
  210. package/dist/ui/components/SelectPrompt.d.ts.map +1 -0
  211. package/dist/ui/components/SelectPrompt.js +10 -0
  212. package/dist/ui/components/SelectPrompt.js.map +1 -0
  213. package/dist/ui/components/StaticMessageHistory.d.ts +14 -0
  214. package/dist/ui/components/StaticMessageHistory.d.ts.map +1 -0
  215. package/dist/ui/components/StaticMessageHistory.js +19 -0
  216. package/dist/ui/components/StaticMessageHistory.js.map +1 -0
  217. package/dist/ui/components/StatusBar.d.ts +10 -0
  218. package/dist/ui/components/StatusBar.d.ts.map +1 -0
  219. package/dist/ui/components/StatusBar.js +20 -0
  220. package/dist/ui/components/StatusBar.js.map +1 -0
  221. package/dist/ui/components/StreamingMessageDisplay.d.ts +13 -0
  222. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -0
  223. package/dist/ui/components/StreamingMessageDisplay.js +26 -0
  224. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -0
  225. package/dist/ui/components/ToolExecutionMessage.d.ts +8 -0
  226. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -0
  227. package/dist/ui/components/ToolExecutionMessage.js +189 -0
  228. package/dist/ui/components/ToolExecutionMessage.js.map +1 -0
  229. package/dist/ui/components/ToolExecutionStatus.d.ts +10 -0
  230. package/dist/ui/components/ToolExecutionStatus.d.ts.map +1 -0
  231. package/dist/ui/components/ToolExecutionStatus.js +65 -0
  232. package/dist/ui/components/ToolExecutionStatus.js.map +1 -0
  233. package/dist/ui/components/ToolResult.d.ts +10 -0
  234. package/dist/ui/components/ToolResult.d.ts.map +1 -0
  235. package/dist/ui/components/ToolResult.js +17 -0
  236. package/dist/ui/components/ToolResult.js.map +1 -0
  237. package/dist/ui/components/WelcomeBanner.d.ts +3 -0
  238. package/dist/ui/components/WelcomeBanner.d.ts.map +1 -0
  239. package/dist/ui/components/WelcomeBanner.js +28 -0
  240. package/dist/ui/components/WelcomeBanner.js.map +1 -0
  241. package/dist/ui/components/code-block.d.ts +10 -0
  242. package/dist/ui/components/code-block.d.ts.map +1 -0
  243. package/dist/ui/components/code-block.js +74 -0
  244. package/dist/ui/components/code-block.js.map +1 -0
  245. package/dist/ui/components/confirm-prompt.d.ts +12 -0
  246. package/dist/ui/components/confirm-prompt.d.ts.map +1 -0
  247. package/dist/ui/components/confirm-prompt.js +104 -0
  248. package/dist/ui/components/confirm-prompt.js.map +1 -0
  249. package/dist/ui/components/diff-viewer.d.ts +9 -0
  250. package/dist/ui/components/diff-viewer.d.ts.map +1 -0
  251. package/dist/ui/components/diff-viewer.js +57 -0
  252. package/dist/ui/components/diff-viewer.js.map +1 -0
  253. package/dist/ui/components/input-box.d.ts +18 -0
  254. package/dist/ui/components/input-box.d.ts.map +1 -0
  255. package/dist/ui/components/input-box.js +157 -0
  256. package/dist/ui/components/input-box.js.map +1 -0
  257. package/dist/ui/components/keyboard-help.d.ts +7 -0
  258. package/dist/ui/components/keyboard-help.d.ts.map +1 -0
  259. package/dist/ui/components/keyboard-help.js +43 -0
  260. package/dist/ui/components/keyboard-help.js.map +1 -0
  261. package/dist/ui/components/loading-indicator.d.ts +3 -0
  262. package/dist/ui/components/loading-indicator.d.ts.map +1 -0
  263. package/dist/ui/components/loading-indicator.js +42 -0
  264. package/dist/ui/components/loading-indicator.js.map +1 -0
  265. package/dist/ui/components/message-display.d.ts +7 -0
  266. package/dist/ui/components/message-display.d.ts.map +1 -0
  267. package/dist/ui/components/message-display.js +104 -0
  268. package/dist/ui/components/message-display.js.map +1 -0
  269. package/dist/ui/components/misc.d.ts +28 -0
  270. package/dist/ui/components/misc.d.ts.map +1 -0
  271. package/dist/ui/components/misc.js +128 -0
  272. package/dist/ui/components/misc.js.map +1 -0
  273. package/dist/ui/components/select-prompt.d.ts +13 -0
  274. package/dist/ui/components/select-prompt.d.ts.map +1 -0
  275. package/dist/ui/components/select-prompt.js +42 -0
  276. package/dist/ui/components/select-prompt.js.map +1 -0
  277. package/dist/ui/components/status-bar.d.ts +11 -0
  278. package/dist/ui/components/status-bar.d.ts.map +1 -0
  279. package/dist/ui/components/status-bar.js +47 -0
  280. package/dist/ui/components/status-bar.js.map +1 -0
  281. package/dist/ui/components/tool-execution.d.ts +3 -0
  282. package/dist/ui/components/tool-execution.d.ts.map +1 -0
  283. package/dist/ui/components/tool-execution.js +374 -0
  284. package/dist/ui/components/tool-execution.js.map +1 -0
  285. package/dist/ui/components/tool-result.d.ts +11 -0
  286. package/dist/ui/components/tool-result.d.ts.map +1 -0
  287. package/dist/ui/components/tool-result.js +58 -0
  288. package/dist/ui/components/tool-result.js.map +1 -0
  289. package/dist/ui/components/welcome-banner.d.ts +3 -0
  290. package/dist/ui/components/welcome-banner.d.ts.map +1 -0
  291. package/dist/ui/components/welcome-banner.js +46 -0
  292. package/dist/ui/components/welcome-banner.js.map +1 -0
  293. package/dist/ui/hooks/useDisplayHistory.d.ts +13 -0
  294. package/dist/ui/hooks/useDisplayHistory.d.ts.map +1 -0
  295. package/dist/ui/hooks/useDisplayHistory.js +45 -0
  296. package/dist/ui/hooks/useDisplayHistory.js.map +1 -0
  297. package/dist/ui/render-engine.d.ts +69 -0
  298. package/dist/ui/render-engine.d.ts.map +1 -0
  299. package/dist/ui/render-engine.js +197 -0
  300. package/dist/ui/render-engine.js.map +1 -0
  301. package/dist/ui/terminal/TerminalRenderer.d.ts +84 -0
  302. package/dist/ui/terminal/TerminalRenderer.d.ts.map +1 -0
  303. package/dist/ui/terminal/TerminalRenderer.js +154 -0
  304. package/dist/ui/terminal/TerminalRenderer.js.map +1 -0
  305. package/dist/ui/terminal/TerminalUI.d.ts +139 -0
  306. package/dist/ui/terminal/TerminalUI.d.ts.map +1 -0
  307. package/dist/ui/terminal/TerminalUI.js +430 -0
  308. package/dist/ui/terminal/TerminalUI.js.map +1 -0
  309. package/dist/ui/terminal/VirtualChatBuffer.d.ts +32 -0
  310. package/dist/ui/terminal/VirtualChatBuffer.d.ts.map +1 -0
  311. package/dist/ui/terminal/VirtualChatBuffer.js +37 -0
  312. package/dist/ui/terminal/VirtualChatBuffer.js.map +1 -0
  313. package/dist/ui/terminal-kit-base.d.ts +117 -0
  314. package/dist/ui/terminal-kit-base.d.ts.map +1 -0
  315. package/dist/ui/terminal-kit-base.js +188 -0
  316. package/dist/ui/terminal-kit-base.js.map +1 -0
  317. package/dist/utils/file.d.ts +21 -0
  318. package/dist/utils/file.d.ts.map +1 -0
  319. package/dist/utils/file.js +68 -0
  320. package/dist/utils/file.js.map +1 -0
  321. package/dist/utils/logger.d.ts +17 -0
  322. package/dist/utils/logger.d.ts.map +1 -0
  323. package/dist/utils/logger.js +57 -0
  324. package/dist/utils/logger.js.map +1 -0
  325. package/dist/utils/markdown-parser.d.ts +56 -0
  326. package/dist/utils/markdown-parser.d.ts.map +1 -0
  327. package/dist/utils/markdown-parser.js +307 -0
  328. package/dist/utils/markdown-parser.js.map +1 -0
  329. package/dist/utils/shell.d.ts +7 -0
  330. package/dist/utils/shell.d.ts.map +1 -0
  331. package/dist/utils/shell.js +62 -0
  332. package/dist/utils/shell.js.map +1 -0
  333. package/dist/utils/state.d.ts +13 -0
  334. package/dist/utils/state.d.ts.map +1 -0
  335. package/dist/utils/state.js +25 -0
  336. package/dist/utils/state.js.map +1 -0
  337. package/package.json +81 -0
  338. package/postinstall.js +46 -0
@@ -0,0 +1,605 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname } from 'path';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+ import { ConfigManager } from './config/manager.js';
8
+ import { ProviderFactory } from './ai/provider-factory.js';
9
+ import { ToolRegistry } from './tools/registry.js';
10
+ import { readFileTool, writeFileTool, editFileTool, listDirectoryTool } from './tools/file-ops.js';
11
+ import { executeCommandTool, grepSearchTool } from './tools/command.js';
12
+ import { webSearchTool, fetchUrlTool } from './tools/web-search.js';
13
+ import { apiClient } from './services/api-client.js';
14
+ import { conversationManager } from './services/conversation-manager.js';
15
+ export class CentaurusCLI {
16
+ configManager;
17
+ toolRegistry;
18
+ conversationHistory = [];
19
+ systemPrompt;
20
+ aiProvider = null;
21
+ cwd;
22
+ planMode = false;
23
+ onResponseCallback;
24
+ onShowPickerCallback;
25
+ onToolExecutionUpdate;
26
+ onToolApprovalRequest;
27
+ onToolStreamingOutput;
28
+ onPlanModeChange;
29
+ onPlanApprovalRequest;
30
+ conversationStarted = false;
31
+ constructor() {
32
+ this.configManager = new ConfigManager();
33
+ this.toolRegistry = new ToolRegistry();
34
+ this.cwd = process.cwd();
35
+ this.systemPrompt = this.loadSystemPrompt();
36
+ }
37
+ setOnResponseCallback(callback) {
38
+ this.onResponseCallback = callback;
39
+ }
40
+ setOnShowPickerCallback(callback) {
41
+ this.onShowPickerCallback = callback;
42
+ }
43
+ setOnToolExecutionUpdate(callback) {
44
+ this.onToolExecutionUpdate = callback;
45
+ }
46
+ setOnToolApprovalRequest(callback) {
47
+ this.onToolApprovalRequest = callback;
48
+ }
49
+ setOnToolStreamingOutput(callback) {
50
+ this.onToolStreamingOutput = callback;
51
+ }
52
+ setOnPlanModeChange(callback) {
53
+ this.onPlanModeChange = callback;
54
+ }
55
+ setOnPlanApprovalRequest(callback) {
56
+ this.onPlanApprovalRequest = callback;
57
+ }
58
+ getPlanMode() {
59
+ return this.planMode;
60
+ }
61
+ async handlePickerSelection(selection, pickerType) {
62
+ let responseMessage = '';
63
+ if (pickerType === 'model') {
64
+ this.configManager.set('model', selection);
65
+ responseMessage = `Model changed to: ${selection}`;
66
+ // Reinitialize AI provider with new model
67
+ const cfg = this.configManager.load();
68
+ if (this.configManager.isComplete()) {
69
+ this.aiProvider = ProviderFactory.createProvider(cfg);
70
+ }
71
+ }
72
+ else if (pickerType === 'provider') {
73
+ this.configManager.set('provider', selection);
74
+ responseMessage = `Provider changed to: ${selection}\n\nNote: Make sure you have configured the API key for this provider.`;
75
+ // Reinitialize AI provider with new provider
76
+ const cfg = this.configManager.load();
77
+ if (this.configManager.isComplete()) {
78
+ try {
79
+ this.aiProvider = ProviderFactory.createProvider(cfg);
80
+ }
81
+ catch (error) {
82
+ responseMessage += `\n\nError: ${error.message}`;
83
+ }
84
+ }
85
+ }
86
+ // Send response back to UI
87
+ if (this.onResponseCallback) {
88
+ this.onResponseCallback(responseMessage);
89
+ }
90
+ }
91
+ async initialize() {
92
+ // Register tools
93
+ this.toolRegistry.register(readFileTool);
94
+ this.toolRegistry.register(writeFileTool);
95
+ this.toolRegistry.register(editFileTool);
96
+ this.toolRegistry.register(listDirectoryTool);
97
+ this.toolRegistry.register(executeCommandTool);
98
+ this.toolRegistry.register(grepSearchTool);
99
+ this.toolRegistry.register(webSearchTool);
100
+ this.toolRegistry.register(fetchUrlTool);
101
+ // Load configuration
102
+ const config = this.configManager.load();
103
+ // Enable backend sync if authenticated
104
+ if (apiClient.isAuthenticated()) {
105
+ this.configManager.enableBackendSync();
106
+ }
107
+ // Initialize AI provider if config is complete
108
+ if (this.configManager.isComplete()) {
109
+ this.aiProvider = ProviderFactory.createProvider(config);
110
+ }
111
+ }
112
+ /**
113
+ * Check if user is authenticated
114
+ */
115
+ isAuthenticated() {
116
+ return apiClient.isAuthenticated();
117
+ }
118
+ /**
119
+ * Start a new conversation in the backend
120
+ */
121
+ async ensureConversationStarted() {
122
+ if (this.conversationStarted || !apiClient.isAuthenticated()) {
123
+ return;
124
+ }
125
+ try {
126
+ const config = this.configManager.load();
127
+ const title = `Conversation ${new Date().toLocaleString()}`;
128
+ await conversationManager.startNewConversation(title, config.model || 'gemini-2.0-flash-exp', config.provider || 'google', this.cwd);
129
+ this.conversationStarted = true;
130
+ }
131
+ catch (error) {
132
+ console.error('Failed to start conversation in backend:', error);
133
+ // Continue without backend persistence
134
+ }
135
+ }
136
+ /**
137
+ * Save a message to the backend
138
+ */
139
+ async saveMessageToBackend(role, content) {
140
+ if (!apiClient.isAuthenticated()) {
141
+ return;
142
+ }
143
+ try {
144
+ await this.ensureConversationStarted();
145
+ await conversationManager.addMessage({
146
+ role,
147
+ content,
148
+ contentType: 'text',
149
+ metadata: {},
150
+ });
151
+ }
152
+ catch (error) {
153
+ console.error('Failed to save message to backend:', error);
154
+ // Continue without backend persistence
155
+ }
156
+ }
157
+ getModel() {
158
+ const config = this.configManager.load();
159
+ return config.model || 'gemini-2.0-flash-exp';
160
+ }
161
+ async handleMessage(message) {
162
+ // Handle slash commands
163
+ if (message.startsWith('/')) {
164
+ await this.handleSlashCommand(message);
165
+ return;
166
+ }
167
+ // Ensure AI provider is initialized
168
+ if (!this.aiProvider) {
169
+ const config = this.configManager.load();
170
+ if (!this.configManager.isComplete()) {
171
+ throw new Error('Configuration incomplete. Please set up your API key.');
172
+ }
173
+ this.aiProvider = ProviderFactory.createProvider(config);
174
+ }
175
+ // Add user message to history
176
+ this.conversationHistory.push({
177
+ role: 'user',
178
+ content: message,
179
+ });
180
+ // Save user message to backend
181
+ await this.saveMessageToBackend('user', message);
182
+ // Create messages array with system prompt
183
+ const systemContent = this.systemPrompt + this.getEnvironmentContext() + (this.planMode ? this.getPlanModeInstructions() : '');
184
+ let messages = [
185
+ { role: 'system', content: systemContent },
186
+ ...this.conversationHistory,
187
+ ];
188
+ try {
189
+ const tools = this.toolRegistry.getSchemas();
190
+ const context = {
191
+ cwd: this.cwd,
192
+ requireApproval: async (message, risky, preview, operationType, operationDetails) => {
193
+ if (this.onToolApprovalRequest) {
194
+ return await this.onToolApprovalRequest({ message, risky, preview, operationType, operationDetails });
195
+ }
196
+ return true; // Auto-approve if no callback registered
197
+ },
198
+ onStreamingOutput: (chunk, type) => {
199
+ // Forward streaming output to UI callback
200
+ if (this.onToolStreamingOutput) {
201
+ this.onToolStreamingOutput({ toolName: 'execute_command', chunk, type });
202
+ }
203
+ },
204
+ };
205
+ let finalAssistantMessage = '';
206
+ const MAX_TURNS = 10; // Prevent infinite loops
207
+ let turnCount = 0;
208
+ // Multi-turn tool execution loop
209
+ while (turnCount < MAX_TURNS) {
210
+ turnCount++;
211
+ let assistantMessage = '';
212
+ let toolCalls = [];
213
+ // Stream AI response
214
+ for await (const chunk of this.aiProvider.stream({ messages, tools })) {
215
+ if (chunk.text) {
216
+ assistantMessage += chunk.text;
217
+ }
218
+ if (chunk.toolCalls) {
219
+ toolCalls.push(...chunk.toolCalls);
220
+ }
221
+ if (chunk.done) {
222
+ break;
223
+ }
224
+ }
225
+ // If there are tool calls, execute them and continue loop
226
+ if (toolCalls.length > 0) {
227
+ const toolResults = [];
228
+ for (const toolCall of toolCalls) {
229
+ try {
230
+ // Notify UI: tool is executing
231
+ if (this.onToolExecutionUpdate) {
232
+ this.onToolExecutionUpdate({
233
+ toolName: toolCall.name,
234
+ status: 'executing',
235
+ arguments: toolCall.arguments
236
+ });
237
+ }
238
+ const result = await this.toolRegistry.execute(toolCall.name, toolCall.arguments, context);
239
+ if (result.success) {
240
+ // Notify UI: tool succeeded
241
+ if (this.onToolExecutionUpdate) {
242
+ this.onToolExecutionUpdate({
243
+ toolName: toolCall.name,
244
+ status: 'completed',
245
+ result: result.result,
246
+ arguments: toolCall.arguments
247
+ });
248
+ }
249
+ toolResults.push({
250
+ tool_call_id: toolCall.id,
251
+ name: toolCall.name,
252
+ content: result.result,
253
+ });
254
+ }
255
+ else {
256
+ // Notify UI: tool failed
257
+ if (this.onToolExecutionUpdate) {
258
+ this.onToolExecutionUpdate({
259
+ toolName: toolCall.name,
260
+ status: 'error',
261
+ error: result.error,
262
+ arguments: toolCall.arguments
263
+ });
264
+ }
265
+ toolResults.push({
266
+ tool_call_id: toolCall.id,
267
+ name: toolCall.name,
268
+ content: `Error: ${result.error}`,
269
+ });
270
+ }
271
+ }
272
+ catch (error) {
273
+ // Notify UI: tool failed
274
+ if (this.onToolExecutionUpdate) {
275
+ this.onToolExecutionUpdate({
276
+ toolName: toolCall.name,
277
+ status: 'error',
278
+ error: error.message,
279
+ arguments: toolCall.arguments
280
+ });
281
+ }
282
+ toolResults.push({
283
+ tool_call_id: toolCall.id,
284
+ name: toolCall.name,
285
+ content: `Error: ${error.message}`,
286
+ });
287
+ }
288
+ }
289
+ // For Gemini, we need to properly format function responses
290
+ // Add assistant message with tool calls to conversation history
291
+ this.conversationHistory.push({
292
+ role: 'assistant',
293
+ content: assistantMessage || '',
294
+ });
295
+ // Add tool results to conversation history as user messages
296
+ const toolResultsText = toolResults.map(tr => `Tool "${tr.name}" returned:\n${tr.content}`).join('\n\n');
297
+ this.conversationHistory.push({
298
+ role: 'user',
299
+ content: toolResultsText,
300
+ });
301
+ // Rebuild messages array with updated history
302
+ messages = [
303
+ { role: 'system', content: systemContent },
304
+ ...this.conversationHistory,
305
+ ];
306
+ // Continue to next turn to let AI process results
307
+ continue;
308
+ }
309
+ // No more tool calls - AI provided final response
310
+ if (assistantMessage) {
311
+ finalAssistantMessage = assistantMessage;
312
+ break;
313
+ }
314
+ // No tool calls and no message - something went wrong
315
+ break;
316
+ }
317
+ // Send final message to user (without tool execution logs)
318
+ const finalMessage = finalAssistantMessage || 'Task completed.';
319
+ // Save to conversation history
320
+ this.conversationHistory.push({
321
+ role: 'assistant',
322
+ content: finalMessage,
323
+ });
324
+ // Save assistant message to backend
325
+ await this.saveMessageToBackend('assistant', finalMessage);
326
+ // Parse response for plan mode
327
+ if (this.planMode) {
328
+ const planData = this.parsePlanResponse(finalMessage);
329
+ if (planData && this.onPlanApprovalRequest) {
330
+ // Ask user for approval
331
+ const approved = await this.onPlanApprovalRequest(planData);
332
+ if (approved) {
333
+ // Switch to execution mode
334
+ this.planMode = false;
335
+ if (this.onPlanModeChange) {
336
+ this.onPlanModeChange(false);
337
+ }
338
+ // Send message to start execution
339
+ await this.handleMessage('Let\'s implement the plan we just discussed. Start with the first task.');
340
+ return;
341
+ }
342
+ }
343
+ }
344
+ // Send response back to UI
345
+ if (this.onResponseCallback) {
346
+ this.onResponseCallback(finalMessage);
347
+ }
348
+ }
349
+ catch (error) {
350
+ throw new Error(`AI Error: ${error.message}`);
351
+ }
352
+ }
353
+ async handleSlashCommand(command) {
354
+ const parts = command.slice(1).split(' ');
355
+ const cmd = parts[0].toLowerCase();
356
+ const args = parts.slice(1);
357
+ let responseMessage = '';
358
+ switch (cmd) {
359
+ case 'help':
360
+ responseMessage = `Available Commands:\n\n` +
361
+ `/help - Show this help message\n` +
362
+ `/clear - Clear conversation history\n` +
363
+ `/config - View current configuration\n` +
364
+ `/config set <key> <value> - Set configuration value\n` +
365
+ `/model - List available models or set model\n` +
366
+ `/provider - List providers or switch provider\n` +
367
+ `/plan - Toggle plan mode for complex implementations\n` +
368
+ `/logout - Sign out, clear session, and exit CLI\n` +
369
+ `/exit - Exit the application\n\n` +
370
+ `Examples:\n` +
371
+ `/config set googleApiKey YOUR_API_KEY\n` +
372
+ `/config set openrouterApiKey YOUR_API_KEY`;
373
+ break;
374
+ case 'logout':
375
+ try {
376
+ await apiClient.logout();
377
+ responseMessage = '✅ Logged out successfully.\n\n' +
378
+ 'Your session has been cleared.\n' +
379
+ 'Exiting CLI...';
380
+ // Send response to UI
381
+ if (this.onResponseCallback) {
382
+ this.onResponseCallback(responseMessage);
383
+ }
384
+ // Wait a moment for the message to display, then exit
385
+ setTimeout(() => {
386
+ process.exit(0);
387
+ }, 1000);
388
+ return; // Don't send response again at the end
389
+ }
390
+ catch (error) {
391
+ responseMessage = `❌ Logout failed: ${error.message}\n\nExiting CLI anyway...`;
392
+ // Send response to UI
393
+ if (this.onResponseCallback) {
394
+ this.onResponseCallback(responseMessage);
395
+ }
396
+ // Exit even if logout failed
397
+ setTimeout(() => {
398
+ process.exit(0);
399
+ }, 1000);
400
+ return; // Don't send response again at the end
401
+ }
402
+ case 'plan':
403
+ this.planMode = !this.planMode;
404
+ responseMessage = `Plan mode ${this.planMode ? 'ENABLED' : 'DISABLED'}.\n\n` +
405
+ (this.planMode
406
+ ? 'In plan mode, I will create detailed implementation plans before executing tasks.'
407
+ : 'Plan mode is now off. I will execute tasks directly.');
408
+ // Notify UI of plan mode change
409
+ if (this.onPlanModeChange) {
410
+ this.onPlanModeChange(this.planMode);
411
+ }
412
+ break;
413
+ case 'clear':
414
+ this.conversationHistory = [];
415
+ this.conversationStarted = false;
416
+ responseMessage = 'Conversation history cleared.';
417
+ break;
418
+ case 'config':
419
+ if (args.length >= 2 && args[0].toLowerCase() === 'set') {
420
+ // Set config value: /config set <key> <value>
421
+ const configKey = args[1];
422
+ const configValue = args.slice(2).join(' ');
423
+ if (!configValue) {
424
+ responseMessage = `Error: No value provided.\nUsage: /config set <key> <value>`;
425
+ }
426
+ else if (configKey === 'googleApiKey' || configKey === 'openrouterApiKey' || configKey === 'model' || configKey === 'provider') {
427
+ this.configManager.set(configKey, configValue);
428
+ // Show appropriate message for API keys
429
+ let displayValue = configValue;
430
+ if (configKey.includes('ApiKey')) {
431
+ const keys = configValue.split(',').map(k => k.trim()).filter(k => k.length > 0);
432
+ if (keys.length > 1) {
433
+ displayValue = `${keys.length} keys (rotation enabled)`;
434
+ }
435
+ else {
436
+ displayValue = '***' + configValue.slice(-4);
437
+ }
438
+ }
439
+ responseMessage = `Configuration updated: ${configKey} = ${displayValue}\n\n`;
440
+ // Reinitialize provider if API key was set
441
+ if (configKey.includes('ApiKey') && this.configManager.isComplete()) {
442
+ try {
443
+ this.aiProvider = ProviderFactory.createProvider(this.configManager.load());
444
+ responseMessage += 'AI provider initialized successfully!';
445
+ }
446
+ catch (error) {
447
+ responseMessage += `Warning: ${error.message}`;
448
+ }
449
+ }
450
+ }
451
+ else {
452
+ responseMessage = `Error: Unknown config key: ${configKey}\nValid keys: googleApiKey, openrouterApiKey, model, provider`;
453
+ }
454
+ }
455
+ else {
456
+ // View config
457
+ const config = this.configManager.load();
458
+ const apiKey = config.provider === 'google' ? config.googleApiKey : config.openrouterApiKey;
459
+ const providerName = config.provider === 'google' ? 'Google' : 'OpenRouter';
460
+ const requiredKeyName = config.provider === 'google' ? 'googleApiKey' : 'openrouterApiKey';
461
+ // Parse keys to show count
462
+ const keys = config.provider === 'google'
463
+ ? this.configManager.getGoogleApiKeys()
464
+ : this.configManager.getOpenRouterApiKeys();
465
+ const keyDisplay = keys.length > 0
466
+ ? `${keys.length} key(s) configured ${keys.length > 1 ? '(rotation enabled)' : ''}`
467
+ : '❌ Not set';
468
+ responseMessage = `Current Configuration:\n\n` +
469
+ `Provider: ${config.provider || 'Not set'}\n` +
470
+ `Model: ${config.model || 'Not set'}\n` +
471
+ `API Keys (${providerName}): ${keyDisplay}\n\n`;
472
+ // Show helpful message if API key is not set
473
+ if (!apiKey) {
474
+ responseMessage += `⚠️ API Key Required!\n\n` +
475
+ `To use ${providerName}, set your API key:\n` +
476
+ `/config set ${requiredKeyName} YOUR_API_KEY\n\n`;
477
+ if (config.provider === 'google') {
478
+ responseMessage += `Get your Google AI Studio API key at:\nhttps://makersuite.google.com/app/apikey`;
479
+ }
480
+ else {
481
+ responseMessage += `Get your OpenRouter API key at:\nhttps://openrouter.ai/keys`;
482
+ }
483
+ }
484
+ }
485
+ break;
486
+ case 'model':
487
+ if (args.length === 0) {
488
+ // Show picker for model selection
489
+ if (this.onShowPickerCallback) {
490
+ const currentModel = this.configManager.load().model;
491
+ this.onShowPickerCallback({
492
+ message: 'Select Model',
493
+ type: 'model',
494
+ choices: [
495
+ { label: `gemini-2.5-flash${currentModel === 'gemini-2.5-flash' ? ' [CURRENT]' : ''}`, value: 'gemini-2.5-flash' },
496
+ { label: `gemini-2.5-pro${currentModel === 'gemini-2.5-pro' ? ' [CURRENT]' : ''}`, value: 'gemini-2.5-pro' },
497
+ { label: `gemini-2.0-flash-exp${currentModel === 'gemini-2.0-flash-exp' ? ' [CURRENT]' : ''}`, value: 'gemini-2.0-flash-exp' },
498
+ { label: `gemini-2.0-flash-thinking-exp${currentModel === 'gemini-2.0-flash-thinking-exp' ? ' [CURRENT]' : ''}`, value: 'gemini-2.0-flash-thinking-exp' },
499
+ { label: `gemini-1.5-pro${currentModel === 'gemini-1.5-pro' ? ' [CURRENT]' : ''}`, value: 'gemini-1.5-pro' },
500
+ { label: `gemini-1.5-flash${currentModel === 'gemini-1.5-flash' ? ' [CURRENT]' : ''}`, value: 'gemini-1.5-flash' },
501
+ ]
502
+ });
503
+ return; // Don't send a text response, picker will handle it
504
+ }
505
+ }
506
+ else {
507
+ // Direct set via command argument
508
+ const newModel = args.join(' ');
509
+ this.configManager.set('model', newModel);
510
+ responseMessage = `Model changed to: ${newModel}`;
511
+ // Reinitialize AI provider with new model
512
+ const cfg = this.configManager.load();
513
+ if (this.configManager.isComplete()) {
514
+ this.aiProvider = ProviderFactory.createProvider(cfg);
515
+ }
516
+ }
517
+ break;
518
+ case 'provider':
519
+ if (args.length === 0) {
520
+ // Show picker for provider selection
521
+ if (this.onShowPickerCallback) {
522
+ const currentProvider = this.configManager.load().provider;
523
+ this.onShowPickerCallback({
524
+ message: 'Select Provider',
525
+ type: 'provider',
526
+ choices: [
527
+ { label: `google (Google Gemini)${currentProvider === 'google' ? ' [CURRENT]' : ''}`, value: 'google' },
528
+ { label: `openrouter (OpenRouter)${currentProvider === 'openrouter' ? ' [CURRENT]' : ''}`, value: 'openrouter' },
529
+ ]
530
+ });
531
+ return; // Don't send a text response, picker will handle it
532
+ }
533
+ }
534
+ else {
535
+ // Direct set via command argument
536
+ const newProvider = args[0].toLowerCase();
537
+ if (newProvider !== 'google' && newProvider !== 'openrouter') {
538
+ responseMessage = `Invalid provider: ${newProvider}\nAvailable: google, openrouter`;
539
+ }
540
+ else {
541
+ this.configManager.set('provider', newProvider);
542
+ responseMessage = `Provider changed to: ${newProvider}\n\nNote: Make sure you have configured the API key for this provider.`;
543
+ // Reinitialize AI provider with new provider
544
+ const cfg = this.configManager.load();
545
+ if (this.configManager.isComplete()) {
546
+ try {
547
+ this.aiProvider = ProviderFactory.createProvider(cfg);
548
+ }
549
+ catch (error) {
550
+ responseMessage += `\n\nError: ${error.message}`;
551
+ }
552
+ }
553
+ }
554
+ }
555
+ break;
556
+ case 'exit':
557
+ process.exit(0);
558
+ break;
559
+ default:
560
+ responseMessage = `Unknown command: /${cmd}\nType /help for available commands.`;
561
+ }
562
+ // Send command response back to UI
563
+ if (responseMessage && this.onResponseCallback) {
564
+ this.onResponseCallback(responseMessage);
565
+ }
566
+ }
567
+ loadSystemPrompt() {
568
+ const promptPath = path.join(__dirname, '../prompts/centaurus-system-prompt.txt');
569
+ try {
570
+ return fs.readFileSync(promptPath, 'utf-8');
571
+ }
572
+ catch (error) {
573
+ return 'You are Centaurus, an AI coding assistant.';
574
+ }
575
+ }
576
+ getEnvironmentContext() {
577
+ const platform = process.platform;
578
+ const isWindows = platform === 'win32';
579
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '~';
580
+ const shell = process.env.SHELL || process.env.ComSpec || (isWindows ? 'cmd' : 'bash');
581
+ return `\n## Environment Context\n\nYou are running in the following environment:\n- **OS**: ${isWindows ? 'Windows' : platform === 'darwin' ? 'macOS' : 'Linux'} (${platform})\n- **Current Directory**: ${this.cwd}\n- **Home Directory**: ${homeDir}\n- **Shell**: ${shell}\n\n${isWindows ? 'Windows Environment: Use commands like dir, type, cd. Downloads folder is at ' + homeDir + '\\Downloads' : 'Unix Environment: Use ls, pwd, cat. Downloads folder is at ' + homeDir + '/Downloads'}`;
582
+ }
583
+ getPlanModeInstructions() {
584
+ return `\n\n## PLAN MODE ACTIVE\n\nYou are currently in PLAN MODE. In this mode, you should:\n\n1. **Explore the current directory** using list_directory and read_file tools to understand the codebase structure\n2. **Research the topic** using the web_search tool to gather best practices and implementation approaches\n3. **Create a detailed implementation plan** with ordered tasks\n\nWhen you've completed your planning, you MUST format your response in this EXACT format:\n\n<tasks>\n1. First task description\n2. Second task description\n3. Third task description\n...\n</tasks>\n\n<question>\nShall I proceed with implementing this plan?\n</question>\n\nIMPORTANT:\n- The <tasks> section must contain a numbered list of tasks in order\n- The <question> section must contain a yes/no question asking if you should proceed\n- Do NOT execute any implementation tasks in plan mode - only create the plan\n- Use tools to explore and research, but do not modify any files`;
585
+ }
586
+ parsePlanResponse(response) {
587
+ // Extract tasks
588
+ const tasksMatch = response.match(/<tasks>([\s\S]*?)<\/tasks>/);
589
+ if (!tasksMatch)
590
+ return null;
591
+ const tasksText = tasksMatch[1].trim();
592
+ const taskLines = tasksText.split('\n').filter(line => line.trim());
593
+ const tasks = taskLines.map(line => {
594
+ // Remove numbering (e.g., "1. ", "2. ")
595
+ return line.replace(/^\d+\.\s*/, '').trim();
596
+ }).filter(task => task);
597
+ // Extract question
598
+ const questionMatch = response.match(/<question>([\s\S]*?)<\/question>/);
599
+ if (!questionMatch)
600
+ return null;
601
+ const question = questionMatch[1].trim();
602
+ return { tasks, question };
603
+ }
604
+ }
605
+ //# sourceMappingURL=cli-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-adapter.js","sourceRoot":"","sources":["../src/cli-adapter.ts"],"names":[],"mappings":"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"}