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,210 @@
1
+ /**
2
+ * Authentication Handler
3
+ *
4
+ * Handles OAuth authentication flow with a temporary local server
5
+ * to receive the callback from the backend
6
+ */
7
+ import * as http from 'http';
8
+ import { URL } from 'url';
9
+ import { apiClient } from './api-client.js';
10
+ import open from 'open';
11
+ /**
12
+ * Start a temporary HTTP server to handle callback from web app
13
+ */
14
+ function startCallbackServer(port = 8888) {
15
+ return new Promise((resolve, reject) => {
16
+ const server = http.createServer((req, res) => {
17
+ const url = new URL(req.url || '', `http://localhost:${port}`);
18
+ // Handle POST request from web app
19
+ if (req.method === 'POST' && url.pathname === '/callback') {
20
+ let body = '';
21
+ req.on('data', (chunk) => {
22
+ body += chunk.toString();
23
+ });
24
+ req.on('end', () => {
25
+ try {
26
+ const data = JSON.parse(body);
27
+ // Web app sends: { sessionToken, user }
28
+ if (data.sessionToken) {
29
+ // Send success response
30
+ res.writeHead(200, {
31
+ 'Content-Type': 'application/json',
32
+ 'Access-Control-Allow-Origin': '*'
33
+ });
34
+ res.end(JSON.stringify({ success: true }));
35
+ // Close server and resolve
36
+ server.close();
37
+ resolve({
38
+ code: data.sessionToken, // Session token as 'code'
39
+ state: data.user?.id || 'success'
40
+ });
41
+ }
42
+ else {
43
+ res.writeHead(400, { 'Content-Type': 'application/json' });
44
+ res.end(JSON.stringify({ success: false, error: 'Missing session token' }));
45
+ }
46
+ }
47
+ catch (error) {
48
+ res.writeHead(400, { 'Content-Type': 'application/json' });
49
+ res.end(JSON.stringify({ success: false, error: 'Invalid JSON' }));
50
+ }
51
+ });
52
+ }
53
+ // Handle OPTIONS for CORS preflight
54
+ else if (req.method === 'OPTIONS') {
55
+ res.writeHead(200, {
56
+ 'Access-Control-Allow-Origin': '*',
57
+ 'Access-Control-Allow-Methods': 'POST, OPTIONS',
58
+ 'Access-Control-Allow-Headers': 'Content-Type',
59
+ });
60
+ res.end();
61
+ }
62
+ // Handle GET requests (legacy support)
63
+ else if (req.method === 'GET' && url.pathname === '/callback') {
64
+ const code = url.searchParams.get('code');
65
+ const state = url.searchParams.get('state');
66
+ const error = url.searchParams.get('error');
67
+ if (error) {
68
+ res.writeHead(200, { 'Content-Type': 'text/html' });
69
+ res.end(`
70
+ <!DOCTYPE html>
71
+ <html>
72
+ <head>
73
+ <title>Authentication Failed</title>
74
+ <style>
75
+ body { font-family: Arial, sans-serif; text-align: center; padding: 50px; background: #0f172a; color: white; }
76
+ .container { background: #1e293b; padding: 40px; border-radius: 10px; max-width: 500px; margin: 0 auto; border: 1px solid #7c3aed; }
77
+ .error { color: #ef4444; font-size: 24px; margin-bottom: 20px; }
78
+ </style>
79
+ </head>
80
+ <body>
81
+ <div class="container">
82
+ <div class="error">❌ Authentication Failed</div>
83
+ <div>Error: ${error}</div>
84
+ <div style="margin-top: 20px;">Please return to the CLI and try again.</div>
85
+ </div>
86
+ </body>
87
+ </html>
88
+ `);
89
+ server.close();
90
+ reject(new Error(`OAuth error: ${error}`));
91
+ return;
92
+ }
93
+ if (code && state) {
94
+ res.writeHead(200, { 'Content-Type': 'text/html' });
95
+ res.end(`
96
+ <!DOCTYPE html>
97
+ <html>
98
+ <head>
99
+ <title>Authentication Successful</title>
100
+ <style>
101
+ body { font-family: Arial, sans-serif; text-align: center; padding: 50px; background: #0f172a; color: white; }
102
+ .container { background: #1e293b; padding: 40px; border-radius: 10px; max-width: 500px; margin: 0 auto; border: 1px solid #7c3aed; }
103
+ .success { color: #10b981; font-size: 24px; margin-bottom: 20px; }
104
+ </style>
105
+ </head>
106
+ <body>
107
+ <div class="container">
108
+ <div class="success">✅ Authentication Successful!</div>
109
+ <div>You can now close this window and return to the CLI.</div>
110
+ </div>
111
+ <script>
112
+ setTimeout(() => window.close(), 3000);
113
+ </script>
114
+ </body>
115
+ </html>
116
+ `);
117
+ server.close();
118
+ resolve({ code, state });
119
+ }
120
+ }
121
+ else {
122
+ res.writeHead(404);
123
+ res.end('Not Found');
124
+ }
125
+ });
126
+ server.on('error', (err) => {
127
+ reject(err);
128
+ });
129
+ server.listen(port, () => {
130
+ // Server started successfully
131
+ });
132
+ // Timeout after 5 minutes
133
+ setTimeout(() => {
134
+ server.close();
135
+ reject(new Error('Authentication timeout - no callback received'));
136
+ }, 5 * 60 * 1000);
137
+ });
138
+ }
139
+ /**
140
+ * Handle complete OAuth authentication flow via web app
141
+ */
142
+ export async function authenticateWithGoogle() {
143
+ const callbackPort = 8888;
144
+ // Use production web app by default, allow override with env var for development
145
+ const webAppUrl = process.env.WEB_APP_URL || 'https://centaurus-web.vercel.app/auth';
146
+ try {
147
+ console.log('🔐 Opening browser for authentication...\n');
148
+ // Start local callback server (silently)
149
+ const callbackPromise = startCallbackServer(callbackPort);
150
+ // Open web app for user to authenticate
151
+ await open(webAppUrl);
152
+ // Wait for callback from web app (silently)
153
+ const { code, state } = await callbackPromise;
154
+ // The web app already exchanged the code for a session token
155
+ // and sent it to us via the callback
156
+ const sessionToken = code;
157
+ // Save the session token to local storage
158
+ apiClient.setSessionToken(sessionToken);
159
+ // Get user profile from backend
160
+ let user;
161
+ try {
162
+ user = await apiClient.getCurrentUser();
163
+ }
164
+ catch (error) {
165
+ // If we can't get user profile, use placeholder
166
+ user = {
167
+ id: state,
168
+ email: 'user@example.com',
169
+ fullName: 'User',
170
+ createdAt: new Date().toISOString(),
171
+ };
172
+ }
173
+ console.log(`✅ You are signed in as ${user.fullName}\n`);
174
+ return {
175
+ success: true,
176
+ sessionToken,
177
+ user: {
178
+ id: user.id,
179
+ email: user.email,
180
+ fullName: user.fullName,
181
+ },
182
+ };
183
+ }
184
+ catch (error) {
185
+ console.error('❌ Authentication failed:', error.message);
186
+ return {
187
+ success: false,
188
+ error: error.message,
189
+ };
190
+ }
191
+ }
192
+ /**
193
+ * Check if user is already authenticated
194
+ */
195
+ export function isAuthenticated() {
196
+ return apiClient.isAuthenticated();
197
+ }
198
+ /**
199
+ * Logout and clear session
200
+ */
201
+ export async function logout() {
202
+ try {
203
+ await apiClient.logout();
204
+ console.log('✅ Logged out successfully');
205
+ }
206
+ catch (error) {
207
+ console.error('❌ Logout failed:', error.message);
208
+ }
209
+ }
210
+ //# sourceMappingURL=auth-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-handler.js","sourceRoot":"","sources":["../../src/services/auth-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Conversation Manager Service
3
+ *
4
+ * Handles conversation and message persistence through the backend API
5
+ */
6
+ import { Conversation, Message, CreateConversationRequest, CreateMessageRequest } from './api-client.js';
7
+ export declare class ConversationManager {
8
+ private static instance;
9
+ private currentConversationId;
10
+ private conversationCache;
11
+ private constructor();
12
+ static getInstance(): ConversationManager;
13
+ /**
14
+ * Create a new conversation
15
+ */
16
+ createConversation(data: CreateConversationRequest): Promise<Conversation>;
17
+ /**
18
+ * Get the current conversation ID
19
+ */
20
+ getCurrentConversationId(): string | null;
21
+ /**
22
+ * Set the current conversation ID
23
+ */
24
+ setCurrentConversationId(id: string | null): void;
25
+ /**
26
+ * Get a conversation by ID
27
+ */
28
+ getConversation(id: string): Promise<Conversation>;
29
+ /**
30
+ * Get all conversations
31
+ */
32
+ getConversations(params?: {
33
+ page?: number;
34
+ limit?: number;
35
+ includeArchived?: boolean;
36
+ tags?: string[];
37
+ }): Promise<Conversation[]>;
38
+ /**
39
+ * Update a conversation
40
+ */
41
+ updateConversation(id: string, data: {
42
+ title?: string;
43
+ tags?: string[];
44
+ isPinned?: boolean;
45
+ metadata?: Record<string, any>;
46
+ }): Promise<Conversation>;
47
+ /**
48
+ * Delete (archive) a conversation
49
+ */
50
+ deleteConversation(id: string): Promise<void>;
51
+ /**
52
+ * Add a message to the current conversation
53
+ */
54
+ addMessage(message: CreateMessageRequest): Promise<Message>;
55
+ /**
56
+ * Get messages for a conversation
57
+ */
58
+ getMessages(conversationId?: string, params?: {
59
+ page?: number;
60
+ limit?: number;
61
+ }): Promise<Message[]>;
62
+ /**
63
+ * Clear the conversation cache
64
+ */
65
+ clearCache(): void;
66
+ /**
67
+ * Start a new conversation session
68
+ * Creates a conversation with default settings
69
+ */
70
+ startNewConversation(title: string, model: string, provider: string, workingDirectory?: string): Promise<Conversation>;
71
+ }
72
+ export declare const conversationManager: ConversationManager;
73
+ //# sourceMappingURL=conversation-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-manager.d.ts","sourceRoot":"","sources":["../../src/services/conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAa,YAAY,EAAE,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC;;OAEG;IACG,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC;IAOhF;;OAEG;IACH,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD;;OAEG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAYxD;;OAEG;IACG,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAa3B;;OAEG;IACG,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAC5F,OAAO,CAAC,YAAY,CAAC;IAMxB;;OAEG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQjE;;OAEG;IACG,WAAW,CACf,cAAc,CAAC,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC,OAAO,EAAE,CAAC;IAWrB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;OAGG;IACG,oBAAoB,CACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC;CAczB;AAED,eAAO,MAAM,mBAAmB,qBAAoC,CAAC"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Conversation Manager Service
3
+ *
4
+ * Handles conversation and message persistence through the backend API
5
+ */
6
+ import { apiClient } from './api-client.js';
7
+ export class ConversationManager {
8
+ static instance;
9
+ currentConversationId = null;
10
+ conversationCache = new Map();
11
+ constructor() { }
12
+ static getInstance() {
13
+ if (!ConversationManager.instance) {
14
+ ConversationManager.instance = new ConversationManager();
15
+ }
16
+ return ConversationManager.instance;
17
+ }
18
+ /**
19
+ * Create a new conversation
20
+ */
21
+ async createConversation(data) {
22
+ const conversation = await apiClient.createConversation(data);
23
+ this.currentConversationId = conversation.id;
24
+ this.conversationCache.set(conversation.id, conversation);
25
+ return conversation;
26
+ }
27
+ /**
28
+ * Get the current conversation ID
29
+ */
30
+ getCurrentConversationId() {
31
+ return this.currentConversationId;
32
+ }
33
+ /**
34
+ * Set the current conversation ID
35
+ */
36
+ setCurrentConversationId(id) {
37
+ this.currentConversationId = id;
38
+ }
39
+ /**
40
+ * Get a conversation by ID
41
+ */
42
+ async getConversation(id) {
43
+ // Check cache first
44
+ if (this.conversationCache.has(id)) {
45
+ return this.conversationCache.get(id);
46
+ }
47
+ // Fetch from API
48
+ const conversation = await apiClient.getConversation(id);
49
+ this.conversationCache.set(id, conversation);
50
+ return conversation;
51
+ }
52
+ /**
53
+ * Get all conversations
54
+ */
55
+ async getConversations(params) {
56
+ const response = await apiClient.getConversations(params);
57
+ // Update cache
58
+ if (response.data) {
59
+ response.data.forEach(conv => {
60
+ this.conversationCache.set(conv.id, conv);
61
+ });
62
+ }
63
+ return response.data || [];
64
+ }
65
+ /**
66
+ * Update a conversation
67
+ */
68
+ async updateConversation(id, data) {
69
+ const conversation = await apiClient.updateConversation(id, data);
70
+ this.conversationCache.set(id, conversation);
71
+ return conversation;
72
+ }
73
+ /**
74
+ * Delete (archive) a conversation
75
+ */
76
+ async deleteConversation(id) {
77
+ await apiClient.deleteConversation(id);
78
+ this.conversationCache.delete(id);
79
+ if (this.currentConversationId === id) {
80
+ this.currentConversationId = null;
81
+ }
82
+ }
83
+ /**
84
+ * Add a message to the current conversation
85
+ */
86
+ async addMessage(message) {
87
+ if (!this.currentConversationId) {
88
+ throw new Error('No active conversation. Create a conversation first.');
89
+ }
90
+ return await apiClient.addMessage(this.currentConversationId, message);
91
+ }
92
+ /**
93
+ * Get messages for a conversation
94
+ */
95
+ async getMessages(conversationId, params) {
96
+ const id = conversationId || this.currentConversationId;
97
+ if (!id) {
98
+ throw new Error('No conversation ID provided');
99
+ }
100
+ const response = await apiClient.getMessages(id, params);
101
+ return response.data || [];
102
+ }
103
+ /**
104
+ * Clear the conversation cache
105
+ */
106
+ clearCache() {
107
+ this.conversationCache.clear();
108
+ }
109
+ /**
110
+ * Start a new conversation session
111
+ * Creates a conversation with default settings
112
+ */
113
+ async startNewConversation(title, model, provider, workingDirectory) {
114
+ const conversation = await this.createConversation({
115
+ title,
116
+ modelUsed: model,
117
+ provider,
118
+ workingDirectory: workingDirectory || process.cwd(),
119
+ tags: [],
120
+ metadata: {
121
+ startedAt: new Date().toISOString(),
122
+ },
123
+ });
124
+ return conversation;
125
+ }
126
+ }
127
+ export const conversationManager = ConversationManager.getInstance();
128
+ //# sourceMappingURL=conversation-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../../src/services/conversation-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Automated Functionality Verification Tests
3
+ *
4
+ * This script tests core functionality of Centaurus CLI to ensure
5
+ * all features work correctly after the UI rendering refactor.
6
+ */
7
+ declare class TestRunner {
8
+ private results;
9
+ private cli;
10
+ private testDir;
11
+ constructor();
12
+ setup(): Promise<void>;
13
+ cleanup(): Promise<void>;
14
+ runTest(name: string, testFn: () => Promise<void>): Promise<void>;
15
+ printSummary(): void;
16
+ testSlashCommands(): Promise<void>;
17
+ testToolRegistry(): Promise<void>;
18
+ testStreamingCallbacks(): Promise<void>;
19
+ testToolExecutionCallbacks(): Promise<void>;
20
+ testConfiguration(): Promise<void>;
21
+ testPickerCallbacks(): Promise<void>;
22
+ testPlanModeCallbacks(): Promise<void>;
23
+ testFileOperations(): Promise<void>;
24
+ runAllTests(): Promise<void>;
25
+ }
26
+ export { TestRunner };
27
+ //# sourceMappingURL=automated-verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automated-verification.d.ts","sourceRoot":"","sources":["../../src/tests/automated-verification.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,cAAM,UAAU;IACd,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;;IAOlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvE,YAAY,IAAI,IAAI;IA6Bd,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuGlC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCjC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBvC,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB3C,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwDpC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCtC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BnC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CA0BnC;AASD,OAAO,EAAE,UAAU,EAAE,CAAC"}