@ranker/raxflow 0.2.2 → 0.2.4

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 (378) hide show
  1. package/dist/benchmark.d.ts +10 -0
  2. package/dist/benchmark.d.ts.map +1 -0
  3. package/dist/benchmark.js +123 -0
  4. package/dist/benchmark.js.map +1 -0
  5. package/dist/bin.d.ts +3 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +141 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/bootstrap.d.ts +8 -0
  10. package/dist/bootstrap.d.ts.map +1 -0
  11. package/dist/bootstrap.js +22 -0
  12. package/dist/bootstrap.js.map +1 -0
  13. package/dist/bridge-adapter-templates.d.ts +4 -0
  14. package/dist/bridge-adapter-templates.d.ts.map +1 -0
  15. package/dist/bridge-adapter-templates.js +185 -0
  16. package/dist/bridge-adapter-templates.js.map +1 -0
  17. package/dist/bridge-test.d.ts +7 -0
  18. package/dist/bridge-test.d.ts.map +1 -0
  19. package/dist/bridge-test.js +89 -0
  20. package/dist/bridge-test.js.map +1 -0
  21. package/dist/dashboard.d.ts +4 -0
  22. package/dist/dashboard.d.ts.map +1 -0
  23. package/{src/dashboard.ts → dist/dashboard.js} +8 -10
  24. package/dist/dashboard.js.map +1 -0
  25. package/dist/doctor.d.ts +6 -0
  26. package/dist/doctor.d.ts.map +1 -0
  27. package/dist/doctor.js +70 -0
  28. package/dist/doctor.js.map +1 -0
  29. package/dist/evolve.d.ts +7 -0
  30. package/dist/evolve.d.ts.map +1 -0
  31. package/{src/evolve.ts → dist/evolve.js} +7 -33
  32. package/dist/evolve.js.map +1 -0
  33. package/dist/host-init-templates.d.ts +16 -0
  34. package/dist/host-init-templates.d.ts.map +1 -0
  35. package/dist/host-init-templates.js +119 -0
  36. package/dist/host-init-templates.js.map +1 -0
  37. package/dist/hub/__tests__/commands.test.d.ts +2 -0
  38. package/dist/hub/__tests__/commands.test.d.ts.map +1 -0
  39. package/dist/hub/__tests__/commands.test.js +72 -0
  40. package/dist/hub/__tests__/commands.test.js.map +1 -0
  41. package/dist/hub/__tests__/history.test.d.ts +2 -0
  42. package/dist/hub/__tests__/history.test.d.ts.map +1 -0
  43. package/dist/hub/__tests__/history.test.js +119 -0
  44. package/dist/hub/__tests__/history.test.js.map +1 -0
  45. package/dist/hub/__tests__/parser.test.d.ts +2 -0
  46. package/dist/hub/__tests__/parser.test.d.ts.map +1 -0
  47. package/dist/hub/__tests__/parser.test.js +92 -0
  48. package/dist/hub/__tests__/parser.test.js.map +1 -0
  49. package/dist/hub/commands/agents.d.ts +3 -0
  50. package/dist/hub/commands/agents.d.ts.map +1 -0
  51. package/dist/hub/commands/agents.js +36 -0
  52. package/dist/hub/commands/agents.js.map +1 -0
  53. package/dist/hub/commands/index.d.ts +4 -0
  54. package/dist/hub/commands/index.d.ts.map +1 -0
  55. package/dist/hub/commands/index.js +123 -0
  56. package/dist/hub/commands/index.js.map +1 -0
  57. package/dist/hub/commands/logs.d.ts +3 -0
  58. package/dist/hub/commands/logs.d.ts.map +1 -0
  59. package/dist/hub/commands/logs.js +53 -0
  60. package/dist/hub/commands/logs.js.map +1 -0
  61. package/dist/hub/commands/memory.d.ts +3 -0
  62. package/dist/hub/commands/memory.d.ts.map +1 -0
  63. package/dist/hub/commands/memory.js +40 -0
  64. package/dist/hub/commands/memory.js.map +1 -0
  65. package/dist/hub/commands/metrics.d.ts +3 -0
  66. package/dist/hub/commands/metrics.d.ts.map +1 -0
  67. package/dist/hub/commands/metrics.js +35 -0
  68. package/dist/hub/commands/metrics.js.map +1 -0
  69. package/dist/hub/commands/providers.d.ts +3 -0
  70. package/dist/hub/commands/providers.d.ts.map +1 -0
  71. package/dist/hub/commands/providers.js +26 -0
  72. package/dist/hub/commands/providers.js.map +1 -0
  73. package/dist/hub/commands/run.d.ts +3 -0
  74. package/dist/hub/commands/run.d.ts.map +1 -0
  75. package/dist/hub/commands/run.js +31 -0
  76. package/dist/hub/commands/run.js.map +1 -0
  77. package/dist/hub/commands/status.d.ts +3 -0
  78. package/dist/hub/commands/status.d.ts.map +1 -0
  79. package/dist/hub/commands/status.js +61 -0
  80. package/dist/hub/commands/status.js.map +1 -0
  81. package/dist/hub/commands/workflows.d.ts +3 -0
  82. package/dist/hub/commands/workflows.d.ts.map +1 -0
  83. package/dist/hub/commands/workflows.js +45 -0
  84. package/dist/hub/commands/workflows.js.map +1 -0
  85. package/dist/hub/config-loader.d.ts +4 -0
  86. package/dist/hub/config-loader.d.ts.map +1 -0
  87. package/dist/hub/config-loader.js +27 -0
  88. package/dist/hub/config-loader.js.map +1 -0
  89. package/dist/hub/event-listener.d.ts +6 -0
  90. package/dist/hub/event-listener.d.ts.map +1 -0
  91. package/dist/hub/event-listener.js +12 -0
  92. package/dist/hub/event-listener.js.map +1 -0
  93. package/dist/hub/history.d.ts +13 -0
  94. package/dist/hub/history.d.ts.map +1 -0
  95. package/dist/hub/history.js +59 -0
  96. package/dist/hub/history.js.map +1 -0
  97. package/dist/hub/index.d.ts +4 -0
  98. package/dist/hub/index.d.ts.map +1 -0
  99. package/dist/hub/index.js +114 -0
  100. package/dist/hub/index.js.map +1 -0
  101. package/dist/hub/parser.d.ts +4 -0
  102. package/dist/hub/parser.d.ts.map +1 -0
  103. package/dist/hub/parser.js +98 -0
  104. package/dist/hub/parser.js.map +1 -0
  105. package/dist/hub/styles/borders.d.ts +23 -0
  106. package/dist/hub/styles/borders.d.ts.map +1 -0
  107. package/dist/hub/styles/borders.js +64 -0
  108. package/dist/hub/styles/borders.js.map +1 -0
  109. package/dist/hub/styles/colors.d.ts +63 -0
  110. package/dist/hub/styles/colors.d.ts.map +1 -0
  111. package/dist/hub/styles/colors.js +115 -0
  112. package/dist/hub/styles/colors.js.map +1 -0
  113. package/dist/hub/styles/typography.d.ts +34 -0
  114. package/dist/hub/styles/typography.d.ts.map +1 -0
  115. package/dist/hub/styles/typography.js +60 -0
  116. package/dist/hub/styles/typography.js.map +1 -0
  117. package/dist/hub/types.d.ts +27 -0
  118. package/dist/hub/types.d.ts.map +1 -0
  119. package/dist/hub/types.js +2 -0
  120. package/dist/hub/types.js.map +1 -0
  121. package/dist/index.d.ts +11 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/{src/index.ts → dist/index.js} +1 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/init-host.d.ts +10 -0
  126. package/dist/init-host.d.ts.map +1 -0
  127. package/dist/init-host.js +232 -0
  128. package/dist/init-host.js.map +1 -0
  129. package/dist/install.d.ts +8 -0
  130. package/dist/install.d.ts.map +1 -0
  131. package/dist/install.js +99 -0
  132. package/dist/install.js.map +1 -0
  133. package/dist/run.d.ts +16 -0
  134. package/dist/run.d.ts.map +1 -0
  135. package/dist/run.js +238 -0
  136. package/dist/run.js.map +1 -0
  137. package/dist/setup/components/ApiKeyInput.d.ts +25 -0
  138. package/dist/setup/components/ApiKeyInput.d.ts.map +1 -0
  139. package/dist/setup/components/ApiKeyInput.js +54 -0
  140. package/dist/setup/components/ApiKeyInput.js.map +1 -0
  141. package/dist/setup/components/AsciiBanner.d.ts +22 -0
  142. package/dist/setup/components/AsciiBanner.d.ts.map +1 -0
  143. package/{src/setup/components/AsciiBanner.tsx → dist/setup/components/AsciiBanner.js} +24 -94
  144. package/dist/setup/components/AsciiBanner.js.map +1 -0
  145. package/dist/setup/components/CliDetector.d.ts +17 -0
  146. package/dist/setup/components/CliDetector.d.ts.map +1 -0
  147. package/dist/setup/components/CliDetector.js +81 -0
  148. package/dist/setup/components/CliDetector.js.map +1 -0
  149. package/dist/setup/components/ModeSelector.d.ts +8 -0
  150. package/dist/setup/components/ModeSelector.d.ts.map +1 -0
  151. package/dist/setup/components/ModeSelector.js +76 -0
  152. package/dist/setup/components/ModeSelector.js.map +1 -0
  153. package/dist/setup/components/ProviderSelector.d.ts +18 -0
  154. package/dist/setup/components/ProviderSelector.d.ts.map +1 -0
  155. package/dist/setup/components/ProviderSelector.js +98 -0
  156. package/dist/setup/components/ProviderSelector.js.map +1 -0
  157. package/dist/setup/components/SetupWizard.d.ts +2 -0
  158. package/dist/setup/components/SetupWizard.d.ts.map +1 -0
  159. package/dist/setup/components/SetupWizard.js +212 -0
  160. package/dist/setup/components/SetupWizard.js.map +1 -0
  161. package/dist/setup/components/StepIndicator.d.ts +13 -0
  162. package/dist/setup/components/StepIndicator.d.ts.map +1 -0
  163. package/dist/setup/components/StepIndicator.js +18 -0
  164. package/dist/setup/components/StepIndicator.js.map +1 -0
  165. package/dist/setup/components/SuccessScreen.d.ts +18 -0
  166. package/dist/setup/components/SuccessScreen.d.ts.map +1 -0
  167. package/dist/setup/components/SuccessScreen.js +38 -0
  168. package/dist/setup/components/SuccessScreen.js.map +1 -0
  169. package/dist/setup/index.d.ts +12 -0
  170. package/dist/setup/index.d.ts.map +1 -0
  171. package/{src/setup/index.ts → dist/setup/index.js} +14 -19
  172. package/dist/setup/index.js.map +1 -0
  173. package/dist/setup/utils/cli-detection.d.ts +12 -0
  174. package/dist/setup/utils/cli-detection.d.ts.map +1 -0
  175. package/dist/setup/utils/cli-detection.js +83 -0
  176. package/dist/setup/utils/cli-detection.js.map +1 -0
  177. package/dist/setup/utils/config-writer.d.ts +43 -0
  178. package/dist/setup/utils/config-writer.d.ts.map +1 -0
  179. package/dist/setup/utils/config-writer.js +180 -0
  180. package/dist/setup/utils/config-writer.js.map +1 -0
  181. package/dist/styles.d.ts +12 -0
  182. package/dist/styles.d.ts.map +1 -0
  183. package/dist/styles.js +12 -0
  184. package/dist/styles.js.map +1 -0
  185. package/dist/tui/App.d.ts +3 -0
  186. package/dist/tui/App.d.ts.map +1 -0
  187. package/dist/tui/App.js +136 -0
  188. package/dist/tui/App.js.map +1 -0
  189. package/dist/tui/components/AgentStateIcon.d.ts +18 -0
  190. package/dist/tui/components/AgentStateIcon.d.ts.map +1 -0
  191. package/dist/tui/components/AgentStateIcon.js +57 -0
  192. package/dist/tui/components/AgentStateIcon.js.map +1 -0
  193. package/dist/tui/components/AnimatedBranch.d.ts +39 -0
  194. package/dist/tui/components/AnimatedBranch.d.ts.map +1 -0
  195. package/dist/tui/components/AnimatedBranch.js +64 -0
  196. package/dist/tui/components/AnimatedBranch.js.map +1 -0
  197. package/dist/tui/components/ChatPanel.d.ts +17 -0
  198. package/dist/tui/components/ChatPanel.d.ts.map +1 -0
  199. package/dist/tui/components/ChatPanel.js +51 -0
  200. package/dist/tui/components/ChatPanel.js.map +1 -0
  201. package/dist/tui/components/DAGPanel.d.ts +37 -0
  202. package/dist/tui/components/DAGPanel.d.ts.map +1 -0
  203. package/dist/tui/components/DAGPanel.js +52 -0
  204. package/dist/tui/components/DAGPanel.js.map +1 -0
  205. package/dist/tui/components/ExecutionTimeline.d.ts +34 -0
  206. package/dist/tui/components/ExecutionTimeline.d.ts.map +1 -0
  207. package/dist/tui/components/ExecutionTimeline.js +67 -0
  208. package/dist/tui/components/ExecutionTimeline.js.map +1 -0
  209. package/dist/tui/components/Header.d.ts +12 -0
  210. package/dist/tui/components/Header.d.ts.map +1 -0
  211. package/dist/tui/components/Header.js +32 -0
  212. package/dist/tui/components/Header.js.map +1 -0
  213. package/dist/tui/components/HelpOverlay.d.ts +7 -0
  214. package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
  215. package/dist/tui/components/HelpOverlay.js +60 -0
  216. package/dist/tui/components/HelpOverlay.js.map +1 -0
  217. package/dist/tui/components/InputBar.d.ts +10 -0
  218. package/dist/tui/components/InputBar.d.ts.map +1 -0
  219. package/dist/tui/components/InputBar.js +21 -0
  220. package/dist/tui/components/InputBar.js.map +1 -0
  221. package/dist/tui/components/LogsPanel.d.ts +10 -0
  222. package/dist/tui/components/MemoryPanel.d.ts +22 -0
  223. package/dist/tui/components/MetricsPanel.d.ts +19 -0
  224. package/dist/tui/components/StatusPanel.d.ts +24 -0
  225. package/dist/tui/components/TaskTree.d.ts +28 -0
  226. package/dist/tui/components/TaskTree.d.ts.map +1 -0
  227. package/dist/tui/components/TaskTree.js +29 -0
  228. package/dist/tui/components/TaskTree.js.map +1 -0
  229. package/dist/tui/components/animations/ProgressBar.d.ts +39 -0
  230. package/dist/tui/components/animations/ProgressBar.d.ts.map +1 -0
  231. package/dist/tui/components/animations/ProgressBar.js +39 -0
  232. package/dist/tui/components/animations/ProgressBar.js.map +1 -0
  233. package/dist/tui/components/animations/Pulse.d.ts +17 -0
  234. package/dist/tui/components/animations/Pulse.d.ts.map +1 -0
  235. package/dist/tui/components/animations/Pulse.js +47 -0
  236. package/dist/tui/components/animations/Pulse.js.map +1 -0
  237. package/dist/tui/components/animations/Spinner.d.ts +13 -0
  238. package/dist/tui/components/animations/Spinner.d.ts.map +1 -0
  239. package/dist/tui/components/animations/Spinner.js +36 -0
  240. package/dist/tui/components/animations/Spinner.js.map +1 -0
  241. package/dist/tui/components/animations/StatusAnimator.d.ts +27 -0
  242. package/dist/tui/components/animations/StatusAnimator.d.ts.map +1 -0
  243. package/dist/tui/components/animations/StatusAnimator.js +85 -0
  244. package/dist/tui/components/animations/StatusAnimator.js.map +1 -0
  245. package/dist/tui/components/animations/TypingEffect.d.ts +26 -0
  246. package/dist/tui/components/animations/TypingEffect.d.ts.map +1 -0
  247. package/dist/tui/components/animations/TypingEffect.js +59 -0
  248. package/dist/tui/components/animations/TypingEffect.js.map +1 -0
  249. package/{src/tui/components/animations/index.ts → dist/tui/components/animations/index.d.ts} +2 -10
  250. package/dist/tui/components/animations/index.d.ts.map +1 -0
  251. package/dist/tui/components/animations/index.js +6 -0
  252. package/dist/tui/components/animations/index.js.map +1 -0
  253. package/dist/tui/hooks/useAnimation.d.ts +42 -0
  254. package/dist/tui/hooks/useAnimation.d.ts.map +1 -0
  255. package/dist/tui/hooks/useAnimation.js +212 -0
  256. package/dist/tui/hooks/useAnimation.js.map +1 -0
  257. package/dist/tui/hooks/useAppState.d.ts +65 -0
  258. package/dist/tui/hooks/useAppState.d.ts.map +1 -0
  259. package/dist/tui/hooks/useAppState.js +293 -0
  260. package/dist/tui/hooks/useAppState.js.map +1 -0
  261. package/dist/tui/index.d.ts +3 -0
  262. package/dist/tui/index.d.ts.map +1 -0
  263. package/{src/tui/index.ts → dist/tui/index.js} +2 -3
  264. package/dist/tui/index.js.map +1 -0
  265. package/dist/tui/services/orchestrator.d.ts +16 -0
  266. package/dist/tui/services/orchestrator.d.ts.map +1 -0
  267. package/dist/tui/services/orchestrator.js +152 -0
  268. package/dist/tui/services/orchestrator.js.map +1 -0
  269. package/dist/tui/styles/borders.d.ts +31 -0
  270. package/dist/tui/styles/borders.d.ts.map +1 -0
  271. package/dist/tui/styles/borders.js +47 -0
  272. package/dist/tui/styles/borders.js.map +1 -0
  273. package/dist/tui/styles/colors.d.ts +18 -0
  274. package/dist/tui/styles/colors.d.ts.map +1 -0
  275. package/dist/tui/styles/colors.js +18 -0
  276. package/dist/tui/styles/colors.js.map +1 -0
  277. package/dist/tui/styles/index.d.ts +6 -0
  278. package/dist/tui/styles/index.d.ts.map +1 -0
  279. package/dist/tui/styles/index.js +6 -0
  280. package/dist/tui/styles/index.js.map +1 -0
  281. package/dist/tui/styles/indicators.d.ts +67 -0
  282. package/dist/tui/styles/indicators.d.ts.map +1 -0
  283. package/dist/tui/styles/indicators.js +42 -0
  284. package/dist/tui/styles/indicators.js.map +1 -0
  285. package/dist/tui/styles/layout.d.ts +21 -0
  286. package/dist/tui/styles/layout.d.ts.map +1 -0
  287. package/dist/tui/styles/layout.js +42 -0
  288. package/dist/tui/styles/layout.js.map +1 -0
  289. package/dist/tui/styles/providers.d.ts +77 -0
  290. package/dist/tui/styles/providers.d.ts.map +1 -0
  291. package/dist/tui/styles/providers.js +31 -0
  292. package/dist/tui/styles/providers.js.map +1 -0
  293. package/dist/tui/utils/animation.d.ts +44 -0
  294. package/dist/tui/utils/animation.d.ts.map +1 -0
  295. package/dist/tui/utils/animation.js +107 -0
  296. package/dist/tui/utils/animation.js.map +1 -0
  297. package/dist/vendor-manifests.d.ts +22 -0
  298. package/dist/vendor-manifests.d.ts.map +1 -0
  299. package/dist/vendor-manifests.js +94 -0
  300. package/dist/vendor-manifests.js.map +1 -0
  301. package/dist/ws-relay.d.ts +12 -0
  302. package/dist/ws-relay.d.ts.map +1 -0
  303. package/{src/ws-relay.ts → dist/ws-relay.js} +39 -47
  304. package/dist/ws-relay.js.map +1 -0
  305. package/package.json +5 -1
  306. package/dashboard/index.html +0 -420
  307. package/src/benchmark.ts +0 -156
  308. package/src/bin.ts +0 -156
  309. package/src/bootstrap.ts +0 -36
  310. package/src/bridge-adapter-templates.ts +0 -181
  311. package/src/bridge-test.ts +0 -107
  312. package/src/doctor.ts +0 -92
  313. package/src/host-init-templates.ts +0 -134
  314. package/src/hub/__tests__/commands.test.ts +0 -84
  315. package/src/hub/__tests__/history.test.ts +0 -137
  316. package/src/hub/__tests__/parser.test.ts +0 -105
  317. package/src/hub/commands/agents.ts +0 -53
  318. package/src/hub/commands/index.ts +0 -140
  319. package/src/hub/commands/logs.ts +0 -70
  320. package/src/hub/commands/memory.ts +0 -47
  321. package/src/hub/commands/metrics.ts +0 -49
  322. package/src/hub/commands/providers.ts +0 -39
  323. package/src/hub/commands/run.ts +0 -37
  324. package/src/hub/commands/status.ts +0 -69
  325. package/src/hub/commands/workflows.ts +0 -64
  326. package/src/hub/config-loader.ts +0 -37
  327. package/src/hub/event-listener.ts +0 -17
  328. package/src/hub/history.ts +0 -66
  329. package/src/hub/index.ts +0 -132
  330. package/src/hub/parser.ts +0 -107
  331. package/src/hub/styles/borders.ts +0 -74
  332. package/src/hub/styles/colors.ts +0 -129
  333. package/src/hub/styles/typography.ts +0 -68
  334. package/src/hub/types.ts +0 -31
  335. package/src/init-host.ts +0 -285
  336. package/src/install.ts +0 -118
  337. package/src/run.ts +0 -317
  338. package/src/setup/components/ApiKeyInput.tsx +0 -158
  339. package/src/setup/components/CliDetector.tsx +0 -230
  340. package/src/setup/components/ModeSelector.tsx +0 -137
  341. package/src/setup/components/ProviderSelector.tsx +0 -175
  342. package/src/setup/components/SetupWizard.tsx +0 -368
  343. package/src/setup/components/StepIndicator.tsx +0 -74
  344. package/src/setup/components/SuccessScreen.tsx +0 -229
  345. package/src/setup/utils/cli-detection.ts +0 -99
  346. package/src/setup/utils/config-writer.ts +0 -249
  347. package/src/styles.ts +0 -12
  348. package/src/tui/App.tsx +0 -183
  349. package/src/tui/components/AgentStateIcon.tsx +0 -84
  350. package/src/tui/components/AnimatedBranch.tsx +0 -134
  351. package/src/tui/components/ChatPanel.tsx +0 -128
  352. package/src/tui/components/DAGPanel.tsx +0 -212
  353. package/src/tui/components/ExecutionTimeline.tsx +0 -225
  354. package/src/tui/components/Header.tsx +0 -109
  355. package/src/tui/components/HelpOverlay.tsx +0 -140
  356. package/src/tui/components/InputBar.tsx +0 -69
  357. package/src/tui/components/LogsPanel.tsx +0 -132
  358. package/src/tui/components/MemoryPanel.tsx +0 -166
  359. package/src/tui/components/MetricsPanel.tsx +0 -152
  360. package/src/tui/components/StatusPanel.tsx +0 -140
  361. package/src/tui/components/TaskTree.tsx +0 -159
  362. package/src/tui/components/animations/ProgressBar.tsx +0 -160
  363. package/src/tui/components/animations/Pulse.tsx +0 -73
  364. package/src/tui/components/animations/Spinner.tsx +0 -54
  365. package/src/tui/components/animations/StatusAnimator.tsx +0 -153
  366. package/src/tui/components/animations/TypingEffect.tsx +0 -119
  367. package/src/tui/hooks/useAnimation.ts +0 -290
  368. package/src/tui/hooks/useAppState.ts +0 -403
  369. package/src/tui/services/orchestrator.ts +0 -195
  370. package/src/tui/styles/borders.ts +0 -51
  371. package/src/tui/styles/colors.ts +0 -19
  372. package/src/tui/styles/index.ts +0 -20
  373. package/src/tui/styles/indicators.ts +0 -54
  374. package/src/tui/styles/layout.ts +0 -44
  375. package/src/tui/styles/providers.ts +0 -32
  376. package/src/tui/utils/animation.ts +0 -124
  377. package/src/vendor-manifests.ts +0 -113
  378. package/tsconfig.json +0 -28
@@ -0,0 +1,25 @@
1
+ interface ApiKeyInputProps {
2
+ providerId: string;
3
+ providerName: string;
4
+ currentKey?: string;
5
+ envVar?: string;
6
+ onSetKey: (key: string) => void;
7
+ onSkip: () => void;
8
+ onBack: () => void;
9
+ }
10
+ export declare function ApiKeyInput({ providerId, providerName, currentKey, envVar, onSetKey, onSkip, onBack, }: ApiKeyInputProps): import("react/jsx-runtime").JSX.Element;
11
+ interface ApiKeyCollectorProps {
12
+ providers: Array<{
13
+ id: string;
14
+ name: string;
15
+ requiresApiKey: boolean;
16
+ }>;
17
+ currentIndex: number;
18
+ keys: Record<string, string>;
19
+ onSetKey: (providerId: string, key: string) => void;
20
+ onSkip: () => void;
21
+ onBack: () => void;
22
+ }
23
+ export declare function ApiKeyCollector({ providers, currentIndex, keys, onSetKey, onSkip, onBack, }: ApiKeyCollectorProps): import("react/jsx-runtime").JSX.Element | null;
24
+ export {};
25
+ //# sourceMappingURL=ApiKeyInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiKeyInput.d.ts","sourceRoot":"","sources":["../../../src/setup/components/ApiKeyInput.tsx"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EACV,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE,gBAAgB,2CA0FlB;AAED,UAAU,oBAAoB;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAUD,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE,oBAAoB,kDAmBtB"}
@@ -0,0 +1,54 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import TextInput from "ink-text-input";
5
+ export function ApiKeyInput({ providerId, providerName, currentKey, envVar, onSetKey, onSkip, onBack, }) {
6
+ const [inputValue, setInputValue] = useState(currentKey || "");
7
+ const [isEditing, setIsEditing] = useState(true);
8
+ const [showKey, setShowKey] = useState(false);
9
+ const PRIMARY = "#f97316";
10
+ const envValue = process.env[envVar || ""];
11
+ useInput((input, key) => {
12
+ if (!isEditing) {
13
+ if (key.return || input === "s") {
14
+ onSkip();
15
+ }
16
+ else if (input === "b") {
17
+ onBack();
18
+ }
19
+ else if (input === "e") {
20
+ setIsEditing(true);
21
+ }
22
+ }
23
+ });
24
+ const handleSubmit = (value) => {
25
+ if (value.trim()) {
26
+ onSetKey(value.trim());
27
+ }
28
+ else {
29
+ setIsEditing(false);
30
+ }
31
+ };
32
+ const maskedValue = (key) => {
33
+ if (key.length <= 8)
34
+ return "••••••••";
35
+ return key.slice(0, 4) + "•".repeat(8) + key.slice(-4);
36
+ };
37
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: PRIMARY, bold: true, children: ["CONFIGURE ", providerName.toUpperCase()] }) }), envValue && (_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: "#22c55e", children: "\u2713" }), _jsx(Text, { color: "#a1a1aa", children: " Found key in " }), _jsx(Text, { color: "#f59e0b", children: envVar })] })), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#a1a1aa", children: "Enter your API key (or leave empty to skip):" }) }), isEditing ? (_jsxs(Box, { children: [_jsx(Text, { color: "#27272a", children: "> " }), _jsx(TextInput, { value: inputValue, onChange: setInputValue, onSubmit: handleSubmit, placeholder: envValue ? "Press Enter to use env variable" : "sk-...", showCursor: true })] })) : (_jsx(Box, { flexDirection: "column", children: inputValue && (_jsxs(Box, { children: [_jsx(Text, { color: "#22c55e", children: "\u2713 Key set: " }), _jsx(Text, { color: "#a1a1aa", children: showKey ? inputValue : maskedValue(inputValue) })] })) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#27272a", children: "─".repeat(50) }) }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "#71717a", children: "[E] Edit" }), _jsx(Text, { color: "#71717a", children: " [S] Skip" }), _jsx(Text, { color: "#71717a", children: " [B] Back" })] })] }));
38
+ }
39
+ const ENV_VAR_MAP = {
40
+ anthropic: "ANTHROPIC_API_KEY",
41
+ openai: "OPENAI_API_KEY",
42
+ gemini: "GOOGLE_API_KEY",
43
+ mistral: "MISTRAL_API_KEY",
44
+ groq: "GROQ_API_KEY",
45
+ };
46
+ export function ApiKeyCollector({ providers, currentIndex, keys, onSetKey, onSkip, onBack, }) {
47
+ const providersNeedingKeys = providers.filter((p) => p.requiresApiKey);
48
+ const currentProvider = providersNeedingKeys[currentIndex];
49
+ if (!currentProvider) {
50
+ return null;
51
+ }
52
+ return (_jsx(ApiKeyInput, { providerId: currentProvider.id, providerName: currentProvider.name, currentKey: keys[currentProvider.id], envVar: ENV_VAR_MAP[currentProvider.id], onSetKey: (key) => onSetKey(currentProvider.id, key), onSkip: onSkip, onBack: onBack }));
53
+ }
54
+ //# sourceMappingURL=ApiKeyInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiKeyInput.js","sourceRoot":"","sources":["../../../src/setup/components/ApiKeyInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ interface AsciiBannerProps {
3
+ compact?: boolean;
4
+ showTagline?: boolean;
5
+ }
6
+ export declare function AsciiBanner({ compact, showTagline }: AsciiBannerProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function IndustrialDivider({ width }: {
8
+ width?: number;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ export declare function IndustrialBox({ children, title, width, active, }: {
11
+ children: React.ReactNode;
12
+ title?: string;
13
+ width?: number;
14
+ active?: boolean;
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ export declare function StatusIndicator({ status, label, active }: {
17
+ status: "online" | "offline" | "running" | "pending" | "done" | "error";
18
+ label: string;
19
+ active?: boolean;
20
+ }): import("react/jsx-runtime").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=AsciiBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsciiBanner.d.ts","sourceRoot":"","sources":["../../../src/setup/components/AsciiBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAiC1B,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAe,EAAE,WAAkB,EAAE,EAAE,gBAAgB,2CAmBpF;AAED,wBAAgB,iBAAiB,CAAC,EAAE,KAAU,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CASnE;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,KAAK,EACL,KAAU,EACV,MAAc,GACf,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAeA;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,KAAK,EACL,MAAc,EACf,EAAE;IACD,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAmBA"}
@@ -1,9 +1,7 @@
1
- import React from "react";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
-
4
3
  const PRIMARY = "#f97316";
5
4
  const SECONDARY = "#a1a1aa";
6
-
7
5
  const RAX_FLOW_ASCII = `
8
6
  ╔══════════════════════════════════════════════════════════════════════════╗
9
7
  ║ ██████╗ █████╗ ██████╗ ██╗ ██╗ █████╗ ███╗ ██╗ ██████╗███████╗ ║
@@ -15,7 +13,6 @@ const RAX_FLOW_ASCII = `
15
13
  ╠══════════════════════════════════════════════════════════════════════════╣
16
14
  ║ [■■■■■■■■■■] ORCHESTRATOR THAT EVOLVES WITH YOUR HOST TOOLS [■■■■■■] ║
17
15
  ╚══════════════════════════════════════════════════════════════════════════╝`;
18
-
19
16
  const RAX_FLOW_ASCII_COMPACT = `
20
17
  ╔═══════════════════════════════════════════════════════╗
21
18
  ║ ██████╗ █████╗ ██████╗ ██╗ ██╗███████╗ ║
@@ -27,99 +24,32 @@ const RAX_FLOW_ASCII_COMPACT = `
27
24
  ╠═══════════════════════════════════════════════════════╣
28
25
  ║ [■■■■■] ORCHESTRATOR [■■■■■] ║
29
26
  ╚═══════════════════════════════════════════════════════╝`;
30
-
31
27
  const GEAR_PATTERN = " ⚙ ";
32
28
  const CIRCUIT_PATTERN = " │├┤│ ";
33
-
34
- interface AsciiBannerProps {
35
- compact?: boolean;
36
- showTagline?: boolean;
29
+ export function AsciiBanner({ compact = false, showTagline = true }) {
30
+ const ascii = compact ? RAX_FLOW_ASCII_COMPACT : RAX_FLOW_ASCII;
31
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Box, { children: _jsx(Text, { color: PRIMARY, bold: true, children: ascii }) }), showTagline && (_jsx(Box, { marginTop: 1, justifyContent: "center", children: _jsx(Text, { color: SECONDARY, dimColor: true, children: compact ? "Setup Wizard v1.0" : "Multi-Agent Orchestration Framework • Setup Wizard v1.0" }) }))] }));
37
32
  }
38
-
39
- export function AsciiBanner({ compact = false, showTagline = true }: AsciiBannerProps) {
40
- const ascii = compact ? RAX_FLOW_ASCII_COMPACT : RAX_FLOW_ASCII;
41
-
42
- return (
43
- <Box flexDirection="column" paddingX={1}>
44
- <Box>
45
- <Text color={PRIMARY} bold>
46
- {ascii}
47
- </Text>
48
- </Box>
49
- {showTagline && (
50
- <Box marginTop={1} justifyContent="center">
51
- <Text color={SECONDARY} dimColor>
52
- {compact ? "Setup Wizard v1.0" : "Multi-Agent Orchestration Framework • Setup Wizard v1.0"}
53
- </Text>
54
- </Box>
55
- )}
56
- </Box>
57
- );
33
+ export function IndustrialDivider({ width = 60 }) {
34
+ const segment = "─".repeat(Math.floor(width / 3));
35
+ const full = `╟${segment}╂${segment}╂${segment}╢`;
36
+ return (_jsx(Box, { children: _jsx(Text, { color: "#27272a", children: full }) }));
58
37
  }
59
-
60
- export function IndustrialDivider({ width = 60 }: { width?: number }) {
61
- const segment = "─".repeat(Math.floor(width / 3));
62
- const full = `╟${segment}╂${segment}╂${segment}╢`;
63
-
64
- return (
65
- <Box>
66
- <Text color="#27272a">{full}</Text>
67
- </Box>
68
- );
38
+ export function IndustrialBox({ children, title, width = 60, active = false, }) {
39
+ const borderColor = active ? PRIMARY : "#27272a";
40
+ const innerWidth = width - 4;
41
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: borderColor, children: `┌${title ? `─ ${title} ` : ""}${"─".repeat(innerWidth - (title?.length || 0) - 2)}┐` }), _jsx(Box, { flexDirection: "column", borderStyle: "single", borderColor: borderColor, children: children }), _jsx(Text, { color: borderColor, children: `└${"─".repeat(innerWidth)}┘` })] }));
69
42
  }
70
-
71
- export function IndustrialBox({
72
- children,
73
- title,
74
- width = 60,
75
- active = false,
76
- }: {
77
- children: React.ReactNode;
78
- title?: string;
79
- width?: number;
80
- active?: boolean;
81
- }) {
82
- const borderColor = active ? PRIMARY : "#27272a";
83
- const innerWidth = width - 4;
84
-
85
- return (
86
- <Box flexDirection="column">
87
- <Text color={borderColor}>
88
- {`┌${title ? `─ ${title} ` : ""}${"─".repeat(innerWidth - (title?.length || 0) - 2)}┐`}
89
- </Text>
90
- <Box flexDirection="column" borderStyle="single" borderColor={borderColor}>
91
- {children}
92
- </Box>
93
- <Text color={borderColor}>{`└${"─".repeat(innerWidth)}┘`}</Text>
94
- </Box>
95
- );
96
- }
97
-
98
- export function StatusIndicator({
99
- status,
100
- label,
101
- active = false
102
- }: {
103
- status: "online" | "offline" | "running" | "pending" | "done" | "error";
104
- label: string;
105
- active?: boolean;
106
- }) {
107
- const indicators: Record<string, { char: string; color: string }> = {
108
- online: { char: "●", color: "#22c55e" },
109
- offline: { char: "○", color: "#71717a" },
110
- running: { char: "▶", color: "#f59e0b" },
111
- pending: { char: "◐", color: "#a1a1aa" },
112
- done: { char: "✓", color: "#22c55e" },
113
- error: { char: "✗", color: "#ef4444" },
114
- };
115
-
116
- const { char, color } = indicators[status];
117
-
118
- return (
119
- <Box>
120
- <Text color={active ? PRIMARY : color}>{char}</Text>
121
- <Text> </Text>
122
- <Text color={active ? PRIMARY : "#ffffff"}>{label}</Text>
123
- </Box>
124
- );
43
+ export function StatusIndicator({ status, label, active = false }) {
44
+ const indicators = {
45
+ online: { char: "●", color: "#22c55e" },
46
+ offline: { char: "○", color: "#71717a" },
47
+ running: { char: "▶", color: "#f59e0b" },
48
+ pending: { char: "◐", color: "#a1a1aa" },
49
+ done: { char: "✓", color: "#22c55e" },
50
+ error: { char: "✗", color: "#ef4444" },
51
+ };
52
+ const { char, color } = indicators[status];
53
+ return (_jsxs(Box, { children: [_jsx(Text, { color: active ? PRIMARY : color, children: char }), _jsx(Text, { children: " " }), _jsx(Text, { color: active ? PRIMARY : "#ffffff", children: label })] }));
125
54
  }
55
+ //# sourceMappingURL=AsciiBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsciiBanner.js","sourceRoot":"","sources":["../../../src/setup/components/AsciiBanner.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { DetectedCli } from "../utils/cli-detection.js";
2
+ export type { DetectedCli };
3
+ interface CliDetectorProps {
4
+ onDetected: (clis: DetectedCli[]) => void;
5
+ onContinue: () => void;
6
+ onBack: () => void;
7
+ }
8
+ export declare function CliDetector({ onDetected, onContinue, onBack }: CliDetectorProps): import("react/jsx-runtime").JSX.Element;
9
+ interface CliSelectorProps {
10
+ detectedClis: DetectedCli[];
11
+ selectedClis: string[];
12
+ onToggle: (cliId: string) => void;
13
+ onContinue: () => void;
14
+ onBack: () => void;
15
+ }
16
+ export declare function CliSelector({ detectedClis, selectedClis, onToggle, onContinue, onBack, }: CliSelectorProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=CliDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CliDetector.d.ts","sourceRoot":"","sources":["../../../src/setup/components/CliDetector.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAuB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7E,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,UAAU,gBAAgB;IACxB,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC1C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,gBAAgB,2CA6G/E;AAED,UAAU,gBAAgB;IACxB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,MAAM,GACP,EAAE,gBAAgB,2CA6FlB"}
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import Spinner from "ink-spinner";
5
+ import { detectInstalledClis } from "../utils/cli-detection.js";
6
+ export function CliDetector({ onDetected, onContinue, onBack }) {
7
+ const [detecting, setDetecting] = useState(true);
8
+ const [detectedClis, setDetectedClis] = useState([]);
9
+ const [error, setError] = useState(null);
10
+ const PRIMARY = "#f97316";
11
+ useEffect(() => {
12
+ detectInstalledClis()
13
+ .then((clis) => {
14
+ setDetectedClis(clis);
15
+ onDetected(clis);
16
+ setDetecting(false);
17
+ })
18
+ .catch((err) => {
19
+ setError(err.message);
20
+ setDetecting(false);
21
+ });
22
+ }, [onDetected]);
23
+ useInput((input, key) => {
24
+ if (!detecting) {
25
+ if (key.return || input === "c") {
26
+ onContinue();
27
+ }
28
+ else if (input === "b") {
29
+ onBack();
30
+ }
31
+ }
32
+ });
33
+ if (detecting) {
34
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: PRIMARY, bold: true, children: "DETECTING INSTALLED TOOLS" }) }), _jsxs(Box, { children: [_jsx(Text, { color: "#f59e0b", children: _jsx(Spinner, { type: "dots" }) }), _jsx(Text, { color: "#a1a1aa", children: " Scanning for compatible CLI tools..." })] })] }));
35
+ }
36
+ if (error) {
37
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "#ef4444", children: ["Error detecting CLIs: ", error] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#71717a", children: "[B] Back" }) })] }));
38
+ }
39
+ const availableClis = detectedClis.filter((c) => c.detected);
40
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: PRIMARY, bold: true, children: "DETECTED TOOLS" }) }), _jsx(Box, { flexDirection: "column", marginBottom: 1, children: detectedClis.map((cli) => (_jsxs(Box, { children: [_jsx(Text, { color: cli.detected ? "#22c55e" : "#71717a", children: cli.detected ? "●" : "○" }), _jsx(Text, { children: " " }), _jsx(Text, { color: cli.detected ? "#ffffff" : "#71717a", children: cli.name }), cli.version && (_jsxs(Text, { color: "#a1a1aa", children: [" v", cli.version.split(" ")[0]] })), cli.configPath && (_jsxs(Text, { color: "#71717a", dimColor: true, children: [" ", "(", cli.configPath, ")"] }))] }, cli.id))) }), availableClis.length === 0 && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#f59e0b", children: "\u26A0 No compatible CLI tools detected. You can still use cloud providers." }) })), _jsx(Box, { children: _jsx(Text, { color: "#27272a", children: "─".repeat(50) }) }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "#22c55e", children: "[C] Continue" }), _jsx(Text, { color: "#71717a", children: " [B] Back" })] })] }));
41
+ }
42
+ export function CliSelector({ detectedClis, selectedClis, onToggle, onContinue, onBack, }) {
43
+ const [focusedIndex, setFocusedIndex] = useState(0);
44
+ const availableClis = detectedClis.filter((c) => c.detected);
45
+ const PRIMARY = "#f97316";
46
+ useInput((input, key) => {
47
+ if (key.upArrow) {
48
+ setFocusedIndex((prev) => prev === 0 ? availableClis.length : prev - 1);
49
+ }
50
+ else if (key.downArrow) {
51
+ setFocusedIndex((prev) => prev === availableClis.length ? 0 : prev + 1);
52
+ }
53
+ else if (key.return) {
54
+ // If at least one CLI is selected, ENTER should continue
55
+ if (selectedClis.length > 0) {
56
+ onContinue();
57
+ }
58
+ else if (focusedIndex < availableClis.length) {
59
+ // No CLIs selected yet: toggle the focused CLI
60
+ onToggle(availableClis[focusedIndex].id);
61
+ }
62
+ }
63
+ else if (input === " ") {
64
+ if (focusedIndex < availableClis.length) {
65
+ onToggle(availableClis[focusedIndex].id);
66
+ }
67
+ }
68
+ else if (input === "b") {
69
+ onBack();
70
+ }
71
+ });
72
+ if (availableClis.length === 0) {
73
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "#f59e0b", children: "No CLI tools detected. Skipping hub setup..." }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#22c55e", children: "[C] Continue" }) })] }));
74
+ }
75
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: PRIMARY, bold: true, children: "SELECT TOOLS TO INTEGRATE" }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#a1a1aa", dimColor: true, children: "Use \u2191/\u2193 to navigate, SPACE to toggle, ENTER to continue" }) }), _jsx(Box, { flexDirection: "column", children: availableClis.map((cli, index) => {
76
+ const isSelected = selectedClis.includes(cli.id);
77
+ const isFocused = index === focusedIndex;
78
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isFocused ? PRIMARY : "#27272a", children: isFocused ? "▶ " : " " }), _jsxs(Text, { color: isSelected ? "#22c55e" : "#a1a1aa", children: ["[", isSelected ? "■" : " ", "]"] }), _jsx(Text, { children: " " }), _jsx(Text, { color: isFocused ? "#ffffff" : "#a1a1aa", bold: isFocused, children: cli.name }), cli.version && (_jsxs(Text, { color: "#71717a", children: [" ", cli.version.split(" ")[0]] }))] }, cli.id));
79
+ }) }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: focusedIndex === availableClis.length ? PRIMARY : "#a1a1aa", children: focusedIndex === availableClis.length ? "▶ " : " " }), _jsx(Text, { color: "#22c55e", children: "[CONTINUE]" })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#71717a", children: "[B] Back" }) })] }));
80
+ }
81
+ //# sourceMappingURL=CliDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CliDetector.js","sourceRoot":"","sources":["../../../src/setup/components/CliDetector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface ModeSelectorProps {
2
+ selectedMode: "hub" | "standalone" | "both" | null;
3
+ onSelect: (mode: "hub" | "standalone" | "both") => void;
4
+ onContinue: () => void;
5
+ }
6
+ export declare function ModeSelector({ selectedMode, onSelect, onContinue }: ModeSelectorProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=ModeSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModeSelector.d.ts","sourceRoot":"","sources":["../../../src/setup/components/ModeSelector.tsx"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACzB,YAAY,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC;IACnD,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAsCD,wBAAgB,YAAY,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,iBAAiB,2CA2FrF"}
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ const MODES = [
5
+ {
6
+ id: "hub",
7
+ key: "1",
8
+ name: "HUB MODE",
9
+ description: "Use raxflow within your existing CLI",
10
+ features: [
11
+ "Integrates with claude-code, codex, opencode, kilo",
12
+ "Orchestrates agents inside your preferred tool",
13
+ "Minimal setup, maximum compatibility",
14
+ ],
15
+ },
16
+ {
17
+ id: "standalone",
18
+ key: "2",
19
+ name: "STANDALONE MODE",
20
+ description: "Use raxflow as your main CLI",
21
+ features: [
22
+ "Full interactive TUI with panels and visualization",
23
+ "Complete orchestration from terminal",
24
+ "Advanced workflow management",
25
+ ],
26
+ },
27
+ {
28
+ id: "both",
29
+ key: "3",
30
+ name: "BOTH",
31
+ description: "Setup both modes for maximum flexibility",
32
+ features: [
33
+ "Full hub integration with your CLIs",
34
+ "Standalone TUI when you need it",
35
+ "Best of both worlds",
36
+ ],
37
+ },
38
+ ];
39
+ export function ModeSelector({ selectedMode, onSelect, onContinue }) {
40
+ const [focusedIndex, setFocusedIndex] = useState(0);
41
+ const PRIMARY = "#f97316";
42
+ useInput((input, key) => {
43
+ if (key.upArrow) {
44
+ setFocusedIndex((prev) => (prev === 0 ? MODES.length : prev - 1));
45
+ }
46
+ else if (key.downArrow) {
47
+ setFocusedIndex((prev) => (prev === MODES.length ? 0 : prev + 1));
48
+ }
49
+ else if (key.return) {
50
+ if (focusedIndex === MODES.length && selectedMode) {
51
+ onContinue();
52
+ }
53
+ else if (focusedIndex < MODES.length) {
54
+ onSelect(MODES[focusedIndex].id);
55
+ }
56
+ }
57
+ else if (input === "1" || input === "2" || input === "3") {
58
+ const index = parseInt(input) - 1;
59
+ if (index < MODES.length) {
60
+ onSelect(MODES[index].id);
61
+ setFocusedIndex(index);
62
+ }
63
+ }
64
+ else if (input === " ") {
65
+ if (focusedIndex < MODES.length) {
66
+ onSelect(MODES[focusedIndex].id);
67
+ }
68
+ }
69
+ });
70
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: PRIMARY, bold: true, children: "SELECT USAGE MODE" }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#a1a1aa", dimColor: true, children: "Press 1, 2, or 3 to select, ENTER to continue" }) }), _jsx(Box, { flexDirection: "column", children: MODES.map((mode, index) => {
71
+ const isSelected = selectedMode === mode.id;
72
+ const isFocused = index === focusedIndex;
73
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, borderStyle: isSelected ? "bold" : "single", borderColor: isSelected ? PRIMARY : "#27272a", paddingX: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: isFocused ? PRIMARY : "#27272a", children: isFocused ? "▶ " : " " }), _jsxs(Text, { color: "#f59e0b", children: ["[", mode.key, "]"] }), _jsx(Text, { children: " " }), _jsx(Text, { color: isSelected ? PRIMARY : "#ffffff", bold: true, children: mode.name }), _jsxs(Text, { color: "#a1a1aa", children: [" - ", mode.description] })] }), isSelected && (_jsx(Box, { flexDirection: "column", marginLeft: 4, marginTop: 0, children: mode.features.map((feature, i) => (_jsxs(Box, { children: [_jsx(Text, { color: "#71717a", children: "\u25C6" }), _jsxs(Text, { color: "#a1a1aa", children: [" ", feature] })] }, i))) }))] }, mode.id));
74
+ }) }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: focusedIndex === MODES.length ? PRIMARY : "#a1a1aa", children: focusedIndex === MODES.length ? "▶ " : " " }), _jsx(Text, { color: selectedMode ? "#22c55e" : "#71717a", children: "[CONTINUE]" })] })] }));
75
+ }
76
+ //# sourceMappingURL=ModeSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModeSelector.js","sourceRoot":"","sources":["../../../src/setup/components/ModeSelector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ interface Provider {
2
+ id: string;
3
+ name: string;
4
+ description: string;
5
+ key: string;
6
+ requiresApiKey: boolean;
7
+ }
8
+ declare const PROVIDERS: Provider[];
9
+ interface ProviderSelectorProps {
10
+ selectedProviders: string[];
11
+ onToggle: (providerId: string) => void;
12
+ onContinue: () => void;
13
+ onBack: () => void;
14
+ }
15
+ export declare function ProviderSelector({ selectedProviders, onToggle, onContinue, onBack, }: ProviderSelectorProps): import("react/jsx-runtime").JSX.Element;
16
+ export { PROVIDERS };
17
+ export type { Provider };
18
+ //# sourceMappingURL=ProviderSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderSelector.d.ts","sourceRoot":"","sources":["../../../src/setup/components/ProviderSelector.tsx"],"names":[],"mappings":"AAGA,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,QAAA,MAAM,SAAS,EAAE,QAAQ,EA2CxB,CAAC;AAEF,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,2CAuGvB;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ const PROVIDERS = [
5
+ {
6
+ id: "host",
7
+ name: "Host-Native",
8
+ description: "Use your local AI CLI tool (Claude Code, Codex, etc.)",
9
+ key: "H",
10
+ requiresApiKey: false,
11
+ },
12
+ {
13
+ id: "anthropic",
14
+ name: "Anthropic API",
15
+ description: "Direct Claude API access",
16
+ key: "A",
17
+ requiresApiKey: true,
18
+ },
19
+ {
20
+ id: "openai",
21
+ name: "OpenAI",
22
+ description: "GPT-4 and other OpenAI models",
23
+ key: "O",
24
+ requiresApiKey: true,
25
+ },
26
+ {
27
+ id: "gemini",
28
+ name: "Gemini",
29
+ description: "Google's Gemini models",
30
+ key: "G",
31
+ requiresApiKey: true,
32
+ },
33
+ {
34
+ id: "mistral",
35
+ name: "Mistral",
36
+ description: "Mistral AI models",
37
+ key: "M",
38
+ requiresApiKey: true,
39
+ },
40
+ {
41
+ id: "groq",
42
+ name: "Groq",
43
+ description: "Fast inference with Groq",
44
+ key: "Q",
45
+ requiresApiKey: true,
46
+ },
47
+ ];
48
+ export function ProviderSelector({ selectedProviders, onToggle, onContinue, onBack, }) {
49
+ const [focusedIndex, setFocusedIndex] = useState(0);
50
+ const PRIMARY = "#f97316";
51
+ useInput((input, key) => {
52
+ if (key.upArrow) {
53
+ setFocusedIndex((prev) => (prev === 0 ? PROVIDERS.length - 1 : prev - 1));
54
+ }
55
+ else if (key.downArrow) {
56
+ setFocusedIndex((prev) => (prev === PROVIDERS.length - 1 ? 0 : prev + 1));
57
+ }
58
+ else if (key.return) {
59
+ // If BACK is focused, go back
60
+ if (focusedIndex === PROVIDERS.length + 1) {
61
+ onBack();
62
+ }
63
+ else if (selectedProviders.length > 0) {
64
+ // If at least one provider is selected, ENTER should continue
65
+ onContinue();
66
+ }
67
+ else if (focusedIndex < PROVIDERS.length) {
68
+ // No providers selected yet: toggle the focused provider
69
+ onToggle(PROVIDERS[focusedIndex].id);
70
+ }
71
+ }
72
+ else if (input === " ") {
73
+ if (focusedIndex < PROVIDERS.length) {
74
+ onToggle(PROVIDERS[focusedIndex].id);
75
+ }
76
+ }
77
+ else if (key.leftArrow || input === "b") {
78
+ onBack();
79
+ }
80
+ else {
81
+ // Check for key shortcuts
82
+ const provider = PROVIDERS.find((p) => p.key.toLowerCase() === input.toLowerCase());
83
+ if (provider) {
84
+ onToggle(provider.id);
85
+ }
86
+ }
87
+ });
88
+ useEffect(() => {
89
+ // Add extra navigation items
90
+ }, []);
91
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#f97316", bold: true, children: "SELECT PROVIDERS" }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#a1a1aa", dimColor: true, children: "Use \u2191/\u2193 to navigate, SPACE to toggle, ENTER to continue" }) }), _jsx(Box, { flexDirection: "column", children: PROVIDERS.map((provider, index) => {
92
+ const isSelected = selectedProviders.includes(provider.id);
93
+ const isFocused = index === focusedIndex;
94
+ return (_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: isFocused ? PRIMARY : "#27272a", children: isFocused ? "▶ " : " " }), _jsxs(Text, { color: isSelected ? "#22c55e" : "#a1a1aa", children: ["[", isSelected ? "■" : " ", "]"] }), _jsx(Text, { children: " " }), _jsxs(Text, { color: "#f59e0b", children: ["[", provider.key, "]"] }), _jsx(Text, { children: " " }), _jsx(Text, { color: isFocused ? "#ffffff" : "#a1a1aa", bold: isFocused, children: provider.name }), _jsxs(Text, { color: "#71717a", children: [" - ", provider.description] })] }, provider.id));
95
+ }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#27272a", children: "─".repeat(50) }) }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: focusedIndex === PROVIDERS.length ? PRIMARY : "#a1a1aa", children: focusedIndex === PROVIDERS.length ? "▶ " : " " }), _jsx(Text, { color: selectedProviders.length > 0 ? "#22c55e" : "#71717a", children: "[CONTINUE]" }), _jsx(Text, { children: " " }), _jsx(Text, { color: focusedIndex === PROVIDERS.length + 1 ? PRIMARY : "#a1a1aa", children: focusedIndex === PROVIDERS.length + 1 ? "▶ " : " " }), _jsx(Text, { color: "#a1a1aa", children: "[BACK]" })] }), selectedProviders.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#f59e0b", children: "\u26A0 Select at least one provider to continue" }) }))] }));
96
+ }
97
+ export { PROVIDERS };
98
+ //# sourceMappingURL=ProviderSelector.js.map