@ranker/raxflow 0.2.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 (425) hide show
  1. package/dashboard/index.html +420 -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.map +1 -0
  6. package/dist/bin.js +141 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/bootstrap.d.ts.map +1 -0
  9. package/dist/bootstrap.js +22 -0
  10. package/dist/bootstrap.js.map +1 -0
  11. package/dist/bridge-adapter-templates.d.ts.map +1 -0
  12. package/dist/bridge-adapter-templates.js +185 -0
  13. package/dist/bridge-adapter-templates.js.map +1 -0
  14. package/dist/bridge-test.d.ts.map +1 -0
  15. package/dist/bridge-test.js +89 -0
  16. package/dist/bridge-test.js.map +1 -0
  17. package/dist/dashboard.d.ts.map +1 -0
  18. package/dist/dashboard.js +49 -0
  19. package/dist/dashboard.js.map +1 -0
  20. package/dist/doctor.d.ts.map +1 -0
  21. package/dist/doctor.js +70 -0
  22. package/dist/doctor.js.map +1 -0
  23. package/dist/evolve.d.ts.map +1 -0
  24. package/dist/evolve.js +48 -0
  25. package/dist/evolve.js.map +1 -0
  26. package/dist/host-init-templates.d.ts.map +1 -0
  27. package/dist/host-init-templates.js +119 -0
  28. package/dist/host-init-templates.js.map +1 -0
  29. package/dist/hub/__tests__/commands.test.d.ts.map +1 -0
  30. package/dist/hub/__tests__/commands.test.js +72 -0
  31. package/dist/hub/__tests__/commands.test.js.map +1 -0
  32. package/dist/hub/__tests__/history.test.d.ts.map +1 -0
  33. package/dist/hub/__tests__/history.test.js +119 -0
  34. package/dist/hub/__tests__/history.test.js.map +1 -0
  35. package/dist/hub/__tests__/parser.test.d.ts.map +1 -0
  36. package/dist/hub/__tests__/parser.test.js +92 -0
  37. package/dist/hub/__tests__/parser.test.js.map +1 -0
  38. package/dist/hub/chat/ChatApp.d.ts +2 -0
  39. package/dist/hub/chat/ChatApp.d.ts.map +1 -0
  40. package/dist/hub/chat/ChatApp.js +146 -0
  41. package/dist/hub/chat/ChatApp.js.map +1 -0
  42. package/dist/hub/chat/components/ChatInput.d.ts +9 -0
  43. package/dist/hub/chat/components/ChatInput.d.ts.map +1 -0
  44. package/dist/hub/chat/components/ChatInput.js +19 -0
  45. package/dist/hub/chat/components/ChatInput.js.map +1 -0
  46. package/dist/hub/chat/components/MessageList.d.ts +7 -0
  47. package/dist/hub/chat/components/MessageList.d.ts.map +1 -0
  48. package/dist/hub/chat/components/MessageList.js +6 -0
  49. package/dist/hub/chat/components/MessageList.js.map +1 -0
  50. package/dist/hub/chat/context.d.ts.map +1 -0
  51. package/dist/hub/chat/context.js +42 -0
  52. package/dist/hub/chat/context.js.map +1 -0
  53. package/dist/hub/chat/hooks/useChatHistory.d.ts +7 -0
  54. package/dist/hub/chat/hooks/useChatHistory.d.ts.map +1 -0
  55. package/dist/hub/chat/hooks/useChatHistory.js +31 -0
  56. package/dist/hub/chat/hooks/useChatHistory.js.map +1 -0
  57. package/dist/hub/chat/index.d.ts.map +1 -0
  58. package/dist/hub/chat/index.js +7 -0
  59. package/dist/hub/chat/index.js.map +1 -0
  60. package/dist/hub/chat/intent-parser.d.ts.map +1 -0
  61. package/dist/hub/chat/intent-parser.js +48 -0
  62. package/dist/hub/chat/intent-parser.js.map +1 -0
  63. package/dist/hub/chat/types.d.ts.map +1 -0
  64. package/dist/hub/chat/types.js +2 -0
  65. package/dist/hub/chat/types.js.map +1 -0
  66. package/dist/hub/commands/agents.d.ts.map +1 -0
  67. package/dist/hub/commands/agents.js +36 -0
  68. package/dist/hub/commands/agents.js.map +1 -0
  69. package/dist/hub/commands/index.d.ts.map +1 -0
  70. package/dist/hub/commands/index.js +123 -0
  71. package/dist/hub/commands/index.js.map +1 -0
  72. package/dist/hub/commands/logs.d.ts.map +1 -0
  73. package/dist/hub/commands/logs.js +53 -0
  74. package/dist/hub/commands/logs.js.map +1 -0
  75. package/dist/hub/commands/memory.d.ts.map +1 -0
  76. package/dist/hub/commands/memory.js +40 -0
  77. package/dist/hub/commands/memory.js.map +1 -0
  78. package/dist/hub/commands/metrics.d.ts.map +1 -0
  79. package/dist/hub/commands/metrics.js +35 -0
  80. package/dist/hub/commands/metrics.js.map +1 -0
  81. package/dist/hub/commands/providers.d.ts.map +1 -0
  82. package/dist/hub/commands/providers.js +26 -0
  83. package/dist/hub/commands/providers.js.map +1 -0
  84. package/dist/hub/commands/run.d.ts.map +1 -0
  85. package/dist/hub/commands/run.js +31 -0
  86. package/dist/hub/commands/run.js.map +1 -0
  87. package/dist/hub/commands/status.d.ts.map +1 -0
  88. package/dist/hub/commands/status.js +61 -0
  89. package/dist/hub/commands/status.js.map +1 -0
  90. package/dist/hub/commands/workflows.d.ts.map +1 -0
  91. package/dist/hub/commands/workflows.js +45 -0
  92. package/dist/hub/commands/workflows.js.map +1 -0
  93. package/dist/hub/config-loader.d.ts.map +1 -0
  94. package/dist/hub/config-loader.js +27 -0
  95. package/dist/hub/config-loader.js.map +1 -0
  96. package/dist/hub/event-listener.d.ts +6 -0
  97. package/dist/hub/event-listener.d.ts.map +1 -0
  98. package/dist/hub/event-listener.js +12 -0
  99. package/dist/hub/event-listener.js.map +1 -0
  100. package/dist/hub/history.d.ts.map +1 -0
  101. package/dist/hub/history.js +59 -0
  102. package/dist/hub/history.js.map +1 -0
  103. package/dist/hub/index.d.ts.map +1 -0
  104. package/dist/hub/index.js +114 -0
  105. package/dist/hub/index.js.map +1 -0
  106. package/dist/hub/parser.d.ts.map +1 -0
  107. package/dist/hub/parser.js +98 -0
  108. package/dist/hub/parser.js.map +1 -0
  109. package/dist/hub/styles/borders.d.ts.map +1 -0
  110. package/dist/hub/styles/borders.js +64 -0
  111. package/dist/hub/styles/borders.js.map +1 -0
  112. package/dist/hub/styles/colors.d.ts.map +1 -0
  113. package/dist/hub/styles/colors.js +115 -0
  114. package/dist/hub/styles/colors.js.map +1 -0
  115. package/dist/hub/styles/typography.d.ts.map +1 -0
  116. package/dist/hub/styles/typography.js +60 -0
  117. package/dist/hub/styles/typography.js.map +1 -0
  118. package/dist/hub/tui/App.d.ts +2 -0
  119. package/dist/hub/tui/App.d.ts.map +1 -0
  120. package/dist/hub/tui/App.js +53 -0
  121. package/dist/hub/tui/App.js.map +1 -0
  122. package/dist/hub/tui/components/AgentQueue.d.ts +6 -0
  123. package/dist/hub/tui/components/AgentQueue.d.ts.map +1 -0
  124. package/dist/hub/tui/components/AgentQueue.js +20 -0
  125. package/dist/hub/tui/components/AgentQueue.js.map +1 -0
  126. package/dist/hub/tui/components/DAGPanel.d.ts +16 -0
  127. package/dist/hub/tui/components/DAGPanel.d.ts.map +1 -0
  128. package/dist/hub/tui/components/DAGPanel.js +51 -0
  129. package/dist/hub/tui/components/DAGPanel.js.map +1 -0
  130. package/dist/hub/tui/components/Header.d.ts +7 -0
  131. package/dist/hub/tui/components/Header.d.ts.map +1 -0
  132. package/dist/hub/tui/components/Header.js +17 -0
  133. package/dist/hub/tui/components/Header.js.map +1 -0
  134. package/dist/hub/tui/components/LogsPanel.d.ts +6 -0
  135. package/dist/hub/tui/components/LogsPanel.d.ts.map +1 -0
  136. package/dist/hub/tui/components/LogsPanel.js +26 -0
  137. package/dist/hub/tui/components/LogsPanel.js.map +1 -0
  138. package/dist/hub/tui/components/StatusBar.d.ts +8 -0
  139. package/dist/hub/tui/components/StatusBar.d.ts.map +1 -0
  140. package/dist/hub/tui/components/StatusBar.js +7 -0
  141. package/dist/hub/tui/components/StatusBar.js.map +1 -0
  142. package/dist/hub/tui/hooks/useEvents.d.ts +2 -0
  143. package/dist/hub/tui/hooks/useEvents.d.ts.map +1 -0
  144. package/dist/hub/tui/hooks/useEvents.js +13 -0
  145. package/dist/hub/tui/hooks/useEvents.js.map +1 -0
  146. package/dist/hub/tui/index.d.ts.map +1 -0
  147. package/dist/hub/tui/index.js +7 -0
  148. package/dist/hub/tui/index.js.map +1 -0
  149. package/dist/hub/tui/types.d.ts.map +1 -0
  150. package/dist/hub/tui/types.js +2 -0
  151. package/dist/hub/tui/types.js.map +1 -0
  152. package/dist/hub/types.d.ts.map +1 -0
  153. package/dist/hub/types.js +2 -0
  154. package/dist/hub/types.js.map +1 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +11 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/init-host.d.ts.map +1 -0
  159. package/dist/init-host.js +232 -0
  160. package/dist/init-host.js.map +1 -0
  161. package/dist/install.d.ts.map +1 -0
  162. package/dist/install.js +99 -0
  163. package/dist/install.js.map +1 -0
  164. package/dist/run.d.ts.map +1 -0
  165. package/dist/run.js +238 -0
  166. package/dist/run.js.map +1 -0
  167. package/dist/setup/components/ApiKeyInput.d.ts +25 -0
  168. package/dist/setup/components/ApiKeyInput.d.ts.map +1 -0
  169. package/dist/setup/components/ApiKeyInput.js +54 -0
  170. package/dist/setup/components/ApiKeyInput.js.map +1 -0
  171. package/dist/setup/components/AsciiBanner.d.ts +22 -0
  172. package/dist/setup/components/AsciiBanner.d.ts.map +1 -0
  173. package/dist/setup/components/AsciiBanner.js +55 -0
  174. package/dist/setup/components/AsciiBanner.js.map +1 -0
  175. package/dist/setup/components/CliDetector.d.ts +17 -0
  176. package/dist/setup/components/CliDetector.d.ts.map +1 -0
  177. package/dist/setup/components/CliDetector.js +79 -0
  178. package/dist/setup/components/CliDetector.js.map +1 -0
  179. package/dist/setup/components/ModeSelector.d.ts +8 -0
  180. package/dist/setup/components/ModeSelector.d.ts.map +1 -0
  181. package/dist/setup/components/ModeSelector.js +76 -0
  182. package/dist/setup/components/ModeSelector.js.map +1 -0
  183. package/dist/setup/components/ProviderSelector.d.ts +18 -0
  184. package/dist/setup/components/ProviderSelector.d.ts.map +1 -0
  185. package/dist/setup/components/ProviderSelector.js +97 -0
  186. package/dist/setup/components/ProviderSelector.js.map +1 -0
  187. package/dist/setup/components/SetupWizard.d.ts +2 -0
  188. package/dist/setup/components/SetupWizard.d.ts.map +1 -0
  189. package/dist/setup/components/SetupWizard.js +212 -0
  190. package/dist/setup/components/SetupWizard.js.map +1 -0
  191. package/dist/setup/components/StepIndicator.d.ts +13 -0
  192. package/dist/setup/components/StepIndicator.d.ts.map +1 -0
  193. package/dist/setup/components/StepIndicator.js +18 -0
  194. package/dist/setup/components/StepIndicator.js.map +1 -0
  195. package/dist/setup/components/SuccessScreen.d.ts +18 -0
  196. package/dist/setup/components/SuccessScreen.d.ts.map +1 -0
  197. package/dist/setup/components/SuccessScreen.js +38 -0
  198. package/dist/setup/components/SuccessScreen.js.map +1 -0
  199. package/dist/setup/index.d.ts +12 -0
  200. package/dist/setup/index.d.ts.map +1 -0
  201. package/dist/setup/index.js +29 -0
  202. package/dist/setup/index.js.map +1 -0
  203. package/dist/setup/utils/cli-detection.d.ts +12 -0
  204. package/dist/setup/utils/cli-detection.d.ts.map +1 -0
  205. package/dist/setup/utils/cli-detection.js +83 -0
  206. package/dist/setup/utils/cli-detection.js.map +1 -0
  207. package/dist/setup/utils/config-writer.d.ts +43 -0
  208. package/dist/setup/utils/config-writer.d.ts.map +1 -0
  209. package/dist/setup/utils/config-writer.js +180 -0
  210. package/dist/setup/utils/config-writer.js.map +1 -0
  211. package/dist/styles.d.ts.map +1 -0
  212. package/dist/styles.js +12 -0
  213. package/dist/styles.js.map +1 -0
  214. package/dist/tui/App.d.ts +3 -0
  215. package/dist/tui/App.d.ts.map +1 -0
  216. package/dist/tui/App.js +131 -0
  217. package/dist/tui/App.js.map +1 -0
  218. package/dist/tui/components/AgentStateIcon.d.ts +18 -0
  219. package/dist/tui/components/AgentStateIcon.d.ts.map +1 -0
  220. package/dist/tui/components/AgentStateIcon.js +57 -0
  221. package/dist/tui/components/AgentStateIcon.js.map +1 -0
  222. package/dist/tui/components/AnimatedBranch.d.ts +39 -0
  223. package/dist/tui/components/AnimatedBranch.d.ts.map +1 -0
  224. package/dist/tui/components/AnimatedBranch.js +64 -0
  225. package/dist/tui/components/AnimatedBranch.js.map +1 -0
  226. package/dist/tui/components/ChatPanel.d.ts +16 -0
  227. package/dist/tui/components/ChatPanel.d.ts.map +1 -0
  228. package/dist/tui/components/ChatPanel.js +50 -0
  229. package/dist/tui/components/ChatPanel.js.map +1 -0
  230. package/dist/tui/components/DAGPanel.d.ts +36 -0
  231. package/dist/tui/components/DAGPanel.d.ts.map +1 -0
  232. package/dist/tui/components/DAGPanel.js +51 -0
  233. package/dist/tui/components/DAGPanel.js.map +1 -0
  234. package/dist/tui/components/ExecutionTimeline.d.ts +34 -0
  235. package/dist/tui/components/ExecutionTimeline.d.ts.map +1 -0
  236. package/dist/tui/components/ExecutionTimeline.js +67 -0
  237. package/dist/tui/components/ExecutionTimeline.js.map +1 -0
  238. package/dist/tui/components/Header.d.ts +12 -0
  239. package/dist/tui/components/Header.d.ts.map +1 -0
  240. package/dist/tui/components/Header.js +32 -0
  241. package/dist/tui/components/Header.js.map +1 -0
  242. package/dist/tui/components/HelpOverlay.d.ts +7 -0
  243. package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
  244. package/dist/tui/components/HelpOverlay.js +60 -0
  245. package/dist/tui/components/HelpOverlay.js.map +1 -0
  246. package/dist/tui/components/InputBar.d.ts +10 -0
  247. package/dist/tui/components/InputBar.d.ts.map +1 -0
  248. package/dist/tui/components/InputBar.js +21 -0
  249. package/dist/tui/components/InputBar.js.map +1 -0
  250. package/dist/tui/components/LogsPanel.d.ts +9 -0
  251. package/dist/tui/components/LogsPanel.d.ts.map +1 -0
  252. package/dist/tui/components/LogsPanel.js +56 -0
  253. package/dist/tui/components/LogsPanel.js.map +1 -0
  254. package/dist/tui/components/MemoryPanel.d.ts +21 -0
  255. package/dist/tui/components/MemoryPanel.d.ts.map +1 -0
  256. package/dist/tui/components/MemoryPanel.js +51 -0
  257. package/dist/tui/components/MemoryPanel.js.map +1 -0
  258. package/dist/tui/components/MetricsPanel.d.ts +18 -0
  259. package/dist/tui/components/MetricsPanel.d.ts.map +1 -0
  260. package/dist/tui/components/MetricsPanel.js +27 -0
  261. package/dist/tui/components/MetricsPanel.js.map +1 -0
  262. package/dist/tui/components/StatusPanel.d.ts +23 -0
  263. package/dist/tui/components/StatusPanel.d.ts.map +1 -0
  264. package/dist/tui/components/StatusPanel.js +23 -0
  265. package/dist/tui/components/StatusPanel.js.map +1 -0
  266. package/dist/tui/components/TaskTree.d.ts +28 -0
  267. package/dist/tui/components/TaskTree.d.ts.map +1 -0
  268. package/dist/tui/components/TaskTree.js +29 -0
  269. package/dist/tui/components/TaskTree.js.map +1 -0
  270. package/dist/tui/components/animations/ProgressBar.d.ts +39 -0
  271. package/dist/tui/components/animations/ProgressBar.d.ts.map +1 -0
  272. package/dist/tui/components/animations/ProgressBar.js +39 -0
  273. package/dist/tui/components/animations/ProgressBar.js.map +1 -0
  274. package/dist/tui/components/animations/Pulse.d.ts +17 -0
  275. package/dist/tui/components/animations/Pulse.d.ts.map +1 -0
  276. package/dist/tui/components/animations/Pulse.js +47 -0
  277. package/dist/tui/components/animations/Pulse.js.map +1 -0
  278. package/dist/tui/components/animations/Spinner.d.ts +13 -0
  279. package/dist/tui/components/animations/Spinner.d.ts.map +1 -0
  280. package/dist/tui/components/animations/Spinner.js +36 -0
  281. package/dist/tui/components/animations/Spinner.js.map +1 -0
  282. package/dist/tui/components/animations/StatusAnimator.d.ts +27 -0
  283. package/dist/tui/components/animations/StatusAnimator.d.ts.map +1 -0
  284. package/dist/tui/components/animations/StatusAnimator.js +85 -0
  285. package/dist/tui/components/animations/StatusAnimator.js.map +1 -0
  286. package/dist/tui/components/animations/TypingEffect.d.ts +26 -0
  287. package/dist/tui/components/animations/TypingEffect.d.ts.map +1 -0
  288. package/dist/tui/components/animations/TypingEffect.js +59 -0
  289. package/dist/tui/components/animations/TypingEffect.js.map +1 -0
  290. package/dist/tui/components/animations/index.d.ts +8 -0
  291. package/dist/tui/components/animations/index.d.ts.map +1 -0
  292. package/dist/tui/components/animations/index.js +6 -0
  293. package/dist/tui/components/animations/index.js.map +1 -0
  294. package/dist/tui/hooks/useAnimation.d.ts +42 -0
  295. package/dist/tui/hooks/useAnimation.d.ts.map +1 -0
  296. package/dist/tui/hooks/useAnimation.js +212 -0
  297. package/dist/tui/hooks/useAnimation.js.map +1 -0
  298. package/dist/tui/hooks/useAppState.d.ts +65 -0
  299. package/dist/tui/hooks/useAppState.d.ts.map +1 -0
  300. package/dist/tui/hooks/useAppState.js +293 -0
  301. package/dist/tui/hooks/useAppState.js.map +1 -0
  302. package/dist/tui/index.d.ts +3 -0
  303. package/dist/tui/index.d.ts.map +1 -0
  304. package/dist/tui/index.js +8 -0
  305. package/dist/tui/index.js.map +1 -0
  306. package/dist/tui/services/orchestrator.d.ts +16 -0
  307. package/dist/tui/services/orchestrator.d.ts.map +1 -0
  308. package/dist/tui/services/orchestrator.js +152 -0
  309. package/dist/tui/services/orchestrator.js.map +1 -0
  310. package/dist/tui/styles/borders.d.ts +31 -0
  311. package/dist/tui/styles/borders.d.ts.map +1 -0
  312. package/dist/tui/styles/borders.js +47 -0
  313. package/dist/tui/styles/borders.js.map +1 -0
  314. package/dist/tui/styles/colors.d.ts +18 -0
  315. package/dist/tui/styles/colors.d.ts.map +1 -0
  316. package/dist/tui/styles/colors.js +18 -0
  317. package/dist/tui/styles/colors.js.map +1 -0
  318. package/dist/tui/styles/index.d.ts +6 -0
  319. package/dist/tui/styles/index.d.ts.map +1 -0
  320. package/dist/tui/styles/index.js +6 -0
  321. package/dist/tui/styles/index.js.map +1 -0
  322. package/dist/tui/styles/indicators.d.ts +67 -0
  323. package/dist/tui/styles/indicators.d.ts.map +1 -0
  324. package/dist/tui/styles/indicators.js +42 -0
  325. package/dist/tui/styles/indicators.js.map +1 -0
  326. package/dist/tui/styles/layout.d.ts +21 -0
  327. package/dist/tui/styles/layout.d.ts.map +1 -0
  328. package/dist/tui/styles/layout.js +42 -0
  329. package/dist/tui/styles/layout.js.map +1 -0
  330. package/dist/tui/styles/providers.d.ts +77 -0
  331. package/dist/tui/styles/providers.d.ts.map +1 -0
  332. package/dist/tui/styles/providers.js +31 -0
  333. package/dist/tui/styles/providers.js.map +1 -0
  334. package/dist/tui/utils/animation.d.ts +44 -0
  335. package/dist/tui/utils/animation.d.ts.map +1 -0
  336. package/dist/tui/utils/animation.js +107 -0
  337. package/dist/tui/utils/animation.js.map +1 -0
  338. package/dist/vendor-manifests.d.ts.map +1 -0
  339. package/dist/vendor-manifests.js +94 -0
  340. package/dist/vendor-manifests.js.map +1 -0
  341. package/dist/ws-relay.d.ts +12 -0
  342. package/dist/ws-relay.d.ts.map +1 -0
  343. package/dist/ws-relay.js +148 -0
  344. package/dist/ws-relay.js.map +1 -0
  345. package/package.json +34 -0
  346. package/src/benchmark.ts +156 -0
  347. package/src/bin.ts +156 -0
  348. package/src/bootstrap.ts +36 -0
  349. package/src/bridge-adapter-templates.ts +181 -0
  350. package/src/bridge-test.ts +107 -0
  351. package/src/dashboard.ts +51 -0
  352. package/src/doctor.ts +92 -0
  353. package/src/evolve.ts +74 -0
  354. package/src/host-init-templates.ts +134 -0
  355. package/src/hub/__tests__/commands.test.ts +84 -0
  356. package/src/hub/__tests__/history.test.ts +137 -0
  357. package/src/hub/__tests__/parser.test.ts +105 -0
  358. package/src/hub/commands/agents.ts +53 -0
  359. package/src/hub/commands/index.ts +140 -0
  360. package/src/hub/commands/logs.ts +70 -0
  361. package/src/hub/commands/memory.ts +47 -0
  362. package/src/hub/commands/metrics.ts +49 -0
  363. package/src/hub/commands/providers.ts +39 -0
  364. package/src/hub/commands/run.ts +37 -0
  365. package/src/hub/commands/status.ts +69 -0
  366. package/src/hub/commands/workflows.ts +64 -0
  367. package/src/hub/config-loader.ts +37 -0
  368. package/src/hub/event-listener.ts +17 -0
  369. package/src/hub/history.ts +66 -0
  370. package/src/hub/index.ts +132 -0
  371. package/src/hub/parser.ts +107 -0
  372. package/src/hub/styles/borders.ts +74 -0
  373. package/src/hub/styles/colors.ts +129 -0
  374. package/src/hub/styles/typography.ts +68 -0
  375. package/src/hub/types.ts +31 -0
  376. package/src/index.ts +10 -0
  377. package/src/init-host.ts +285 -0
  378. package/src/install.ts +118 -0
  379. package/src/run.ts +317 -0
  380. package/src/setup/components/ApiKeyInput.tsx +158 -0
  381. package/src/setup/components/AsciiBanner.tsx +125 -0
  382. package/src/setup/components/CliDetector.tsx +230 -0
  383. package/src/setup/components/ModeSelector.tsx +137 -0
  384. package/src/setup/components/ProviderSelector.tsx +174 -0
  385. package/src/setup/components/SetupWizard.tsx +368 -0
  386. package/src/setup/components/StepIndicator.tsx +74 -0
  387. package/src/setup/components/SuccessScreen.tsx +229 -0
  388. package/src/setup/index.ts +34 -0
  389. package/src/setup/utils/cli-detection.ts +99 -0
  390. package/src/setup/utils/config-writer.ts +249 -0
  391. package/src/styles.ts +12 -0
  392. package/src/tui/App.tsx +177 -0
  393. package/src/tui/components/AgentStateIcon.tsx +84 -0
  394. package/src/tui/components/AnimatedBranch.tsx +134 -0
  395. package/src/tui/components/ChatPanel.tsx +125 -0
  396. package/src/tui/components/DAGPanel.tsx +208 -0
  397. package/src/tui/components/ExecutionTimeline.tsx +225 -0
  398. package/src/tui/components/Header.tsx +109 -0
  399. package/src/tui/components/HelpOverlay.tsx +140 -0
  400. package/src/tui/components/InputBar.tsx +69 -0
  401. package/src/tui/components/LogsPanel.tsx +129 -0
  402. package/src/tui/components/MemoryPanel.tsx +163 -0
  403. package/src/tui/components/MetricsPanel.tsx +149 -0
  404. package/src/tui/components/StatusPanel.tsx +137 -0
  405. package/src/tui/components/TaskTree.tsx +159 -0
  406. package/src/tui/components/animations/ProgressBar.tsx +160 -0
  407. package/src/tui/components/animations/Pulse.tsx +73 -0
  408. package/src/tui/components/animations/Spinner.tsx +54 -0
  409. package/src/tui/components/animations/StatusAnimator.tsx +153 -0
  410. package/src/tui/components/animations/TypingEffect.tsx +119 -0
  411. package/src/tui/components/animations/index.ts +16 -0
  412. package/src/tui/hooks/useAnimation.ts +290 -0
  413. package/src/tui/hooks/useAppState.ts +403 -0
  414. package/src/tui/index.ts +9 -0
  415. package/src/tui/services/orchestrator.ts +195 -0
  416. package/src/tui/styles/borders.ts +51 -0
  417. package/src/tui/styles/colors.ts +19 -0
  418. package/src/tui/styles/index.ts +20 -0
  419. package/src/tui/styles/indicators.ts +54 -0
  420. package/src/tui/styles/layout.ts +44 -0
  421. package/src/tui/styles/providers.ts +32 -0
  422. package/src/tui/utils/animation.ts +124 -0
  423. package/src/vendor-manifests.ts +113 -0
  424. package/src/ws-relay.ts +156 -0
  425. package/tsconfig.json +28 -0
@@ -0,0 +1,129 @@
1
+ // RAXFLOW Design System - Colors
2
+ // Based on cli-design.md specifications
3
+
4
+ export const colors = {
5
+ // Backgrounds
6
+ background: "#050505",
7
+ surface: "#0a0a0a",
8
+ surfaceElev: "#0d0d0d",
9
+
10
+ // Primary
11
+ primary: "#f97316", // Orange vif
12
+ primaryGlow: "rgba(249, 115, 22, 0.3)",
13
+ primaryGlowHover: "rgba(249, 115, 22, 0.5)",
14
+
15
+ // Text
16
+ textPrimary: "#ffffff",
17
+ textSecondary: "#a1a1aa",
18
+ textTertiary: "#71717a",
19
+ textQuaternary: "#3f3f46",
20
+
21
+ // Status
22
+ success: "#22c55e",
23
+ warning: "#f59e0b",
24
+ error: "#ef4444",
25
+
26
+ // Borders
27
+ border: "#27272a",
28
+
29
+ // Mutations
30
+ mutation: "#f59e0b",
31
+ mutationGlow: "rgba(245, 158, 11, 0.4)",
32
+ };
33
+
34
+ // ANSI color codes for terminal
35
+ export const ansiColors = {
36
+ reset: "\x1b[0m",
37
+ bright: "\x1b[1m",
38
+ dim: "\x1b[2m",
39
+
40
+ // Foreground colors
41
+ black: "\x1b[30m",
42
+ red: "\x1b[31m",
43
+ green: "\x1b[32m",
44
+ yellow: "\x1b[33m",
45
+ blue: "\x1b[34m",
46
+ magenta: "\x1b[35m",
47
+ cyan: "\x1b[36m",
48
+ white: "\x1b[37m",
49
+ gray: "\x1b[90m",
50
+
51
+ // Bright colors
52
+ brightRed: "\x1b[91m",
53
+ brightGreen: "\x1b[92m",
54
+ brightYellow: "\x1b[93m",
55
+ brightBlue: "\x1b[94m",
56
+ brightMagenta: "\x1b[95m",
57
+ brightCyan: "\x1b[96m",
58
+ brightWhite: "\x1b[97m",
59
+
60
+ // Background colors
61
+ bgBlack: "\x1b[40m",
62
+ bgRed: "\x1b[41m",
63
+ bgGreen: "\x1b[42m",
64
+ bgYellow: "\x1b[43m",
65
+ bgBlue: "\x1b[44m",
66
+ bgMagenta: "\x1b[45m",
67
+ bgCyan: "\x1b[46m",
68
+ bgWhite: "\x1b[47m",
69
+ bgGray: "\x1b[100m",
70
+ };
71
+
72
+ // Status indicators
73
+ export const statusIndicators = {
74
+ online: "●",
75
+ offline: "○",
76
+ running: "▶",
77
+ loading: "◐",
78
+ mutation: "◆",
79
+ checkpoint: "■",
80
+ pending: "○",
81
+ done: "✓",
82
+ };
83
+
84
+ // Provider indicators
85
+ export const providerIndicators: Record<string, string> = {
86
+ host: "[H]",
87
+ claude: "[C]",
88
+ opencode: "[O]",
89
+ kilo: "[K]",
90
+ anthropic: "[A]",
91
+ gemini: "[G]",
92
+ mistral: "[M]",
93
+ groq: "[Q]",
94
+ openai: "[O]",
95
+ };
96
+
97
+ // Utility functions
98
+ export function colorize(text: string, color: keyof typeof ansiColors): string {
99
+ return `${ansiColors[color]}${text}${ansiColors.reset}`;
100
+ }
101
+
102
+ export function statusColor(status: string): string {
103
+ switch (status.toLowerCase()) {
104
+ case "online":
105
+ case "ready":
106
+ case "active":
107
+ case "done":
108
+ case "success":
109
+ return ansiColors.green;
110
+ case "running":
111
+ case "busy":
112
+ return ansiColors.yellow;
113
+ case "error":
114
+ case "failed":
115
+ return ansiColors.red;
116
+ case "queued":
117
+ case "pending":
118
+ case "idle":
119
+ return ansiColors.gray;
120
+ default:
121
+ return ansiColors.reset;
122
+ }
123
+ }
124
+
125
+ export function formatStatus(status: string): string {
126
+ const indicator = statusIndicators[status.toLowerCase() as keyof typeof statusIndicators] || "○";
127
+ const color = statusColor(status);
128
+ return `${color}${indicator}${ansiColors.reset}`;
129
+ }
@@ -0,0 +1,68 @@
1
+ // RAXFLOW Design System - Typography
2
+ // Space Grotesk for titles, Space Mono for system text
3
+
4
+ export const typography = {
5
+ // Font families
6
+ primary: "Space Grotesk",
7
+ monospace: "Space Mono",
8
+
9
+ // Font weights
10
+ weights: {
11
+ light: 300,
12
+ regular: 400,
13
+ medium: 500,
14
+ bold: 700,
15
+ },
16
+
17
+ // Sizes (in terminal columns roughly)
18
+ sizes: {
19
+ hero: 4, // text-4xl
20
+ section: 2, // text-2xl
21
+ label: 0, // text-[10px]
22
+ body: 1, // text-sm
23
+ code: 0, // text-xs
24
+ status: -1, // text-[9px]
25
+ agent: 0, // text-xs
26
+ provider: -1, // text-[9px]
27
+ },
28
+
29
+ // Tracking (letter-spacing)
30
+ tracking: {
31
+ none: "",
32
+ tight: "",
33
+ normal: "",
34
+ wide: " ",
35
+ label: " ", // 0.15em equivalent in monospace
36
+ },
37
+ };
38
+
39
+ // Text formatting utilities for terminal
40
+ export function upperCase(text: string): string {
41
+ return text.toUpperCase();
42
+ }
43
+
44
+ export function padCenter(text: string, width: number): string {
45
+ const padding = Math.max(0, width - text.length);
46
+ const leftPad = Math.floor(padding / 2);
47
+ const rightPad = padding - leftPad;
48
+ return " ".repeat(leftPad) + text + " ".repeat(rightPad);
49
+ }
50
+
51
+ export function padRight(text: string, width: number): string {
52
+ const padding = Math.max(0, width - text.length);
53
+ return text + " ".repeat(padding);
54
+ }
55
+
56
+ export function padLeft(text: string, width: number): string {
57
+ const padding = Math.max(0, width - text.length);
58
+ return " ".repeat(padding) + text;
59
+ }
60
+
61
+ export function truncate(text: string, maxLength: number): string {
62
+ if (text.length <= maxLength) return text;
63
+ return text.slice(0, maxLength - 3) + "...";
64
+ }
65
+
66
+ export function formatLabel(text: string): string {
67
+ return upperCase(text).split("").join(" ");
68
+ }
@@ -0,0 +1,31 @@
1
+ export interface HubOptions {
2
+ cwd: string;
3
+ config?: HubConfig;
4
+ }
5
+
6
+ export interface HubConfig {
7
+ project?: string;
8
+ providers?: string[];
9
+ theme?: 'industrial' | 'minimal' | 'high-contrast';
10
+ }
11
+
12
+ export interface Command {
13
+ name: string;
14
+ args: string[];
15
+ flags: Record<string, string | boolean>;
16
+ }
17
+
18
+ export interface HubContext {
19
+ currentWorkflow?: string;
20
+ currentRun?: string;
21
+ config: HubConfig;
22
+ }
23
+
24
+ export type CommandHandler = (args: string[], flags: Record<string, string | boolean>, context: HubContext) => Promise<void>;
25
+
26
+ export interface CommandDefinition {
27
+ name: string;
28
+ description: string;
29
+ handler: CommandHandler;
30
+ aliases?: string[];
31
+ }
package/src/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ export * from "./install.js";
2
+ export * from "./run.js";
3
+ export * from "./benchmark.js";
4
+ export * from "./doctor.js";
5
+ export * from "./bridge-test.js";
6
+ export * from "./init-host.js";
7
+ export * from "./bootstrap.js";
8
+ export * from "./host-init-templates.js";
9
+ export * from "./bridge-adapter-templates.js";
10
+ export * from "./vendor-manifests.js";
@@ -0,0 +1,285 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { c } from "./styles.js";
4
+ import { HOST_TEMPLATES, HostTarget, buildBootstrapPrompt, listHostTargets, parseHostTarget } from "./host-init-templates.js";
5
+ import { generateVendorManifest, vendorManifestFilename, type HostManifestModel } from "./vendor-manifests.js";
6
+ import { bridgeAdapterFilename, renderBridgeAdapter } from "./bridge-adapter-templates.js";
7
+
8
+ interface InitHostOptions {
9
+ cwd: string;
10
+ target?: string;
11
+ printOnly?: boolean;
12
+ all?: boolean;
13
+ task?: string;
14
+ }
15
+
16
+ function bridgeCommand(adapterFile: string): string {
17
+ return `node ${adapterFile}`;
18
+ }
19
+
20
+ function renderSetupScript(command: string): string {
21
+ return [
22
+ "#!/usr/bin/env bash",
23
+ "set -e",
24
+ `export RAX_HOST_BRIDGE_COMMAND=\"${command}\"`,
25
+ 'echo "RAX_HOST_BRIDGE_COMMAND configured"',
26
+ "echo \"Run: npx raxflow doctor\"",
27
+ "echo \"Run: npx raxflow run --prompt 'Build feature X' --stream\""
28
+ ].join("\n");
29
+ }
30
+
31
+ function renderInstructions(params: {
32
+ title: string;
33
+ envHint: string;
34
+ chatHint: string;
35
+ command: string;
36
+ adapterFile: string;
37
+ quickCommands: string[];
38
+ sessionEntryExamples: string[];
39
+ autoInjectMode: "native" | "scripted" | "manual";
40
+ task?: string;
41
+ }): string {
42
+ const taskSection = params.task?.trim()
43
+ ? ["", "## Task context", `- ${params.task.trim()}`, "- Embedded into BOOTSTRAP_PROMPT.txt"]
44
+ : [];
45
+
46
+ return [
47
+ `# ${params.title} - Non-UI Initialization`,
48
+ "",
49
+ "## 1) Configure bridge command",
50
+ `- ${params.envHint}`,
51
+ `- Command: \`${params.command}\``,
52
+ `- Bridge adapter scaffold: \`${params.adapterFile}\``,
53
+ "- Replace callHostModel() with your editor runtime model call implementation.",
54
+ "- Configure bridge runtime values in `bridge-runtime-config.json`.",
55
+ "- Use `bridge-smoke-test.json` to validate structured response mapping.",
56
+ "",
57
+ "## 2) Chat bootstrap",
58
+ `- ${params.chatHint}`,
59
+ "- Use BOOTSTRAP_PROMPT.txt content.",
60
+ ...taskSection,
61
+ "",
62
+ "## 3) Session launch patterns",
63
+ `- Auto inject mode: \`${params.autoInjectMode}\``,
64
+ ...params.sessionEntryExamples.map((line) => `- \`${line}\``),
65
+ "",
66
+ "## 4) Validate",
67
+ ...params.quickCommands.map((cmd) => `- \`${cmd}\``)
68
+ ].join("\n");
69
+ }
70
+
71
+ function renderSessionStartScript(target: HostTarget, sessionEntryExamples: string[]): string {
72
+ const lines = [
73
+ "#!/usr/bin/env bash",
74
+ "set -e",
75
+ `echo \"RAXFLOW session starter (${target})\"`,
76
+ "echo \"Use one of these commands (adapt to your local CLI):\""
77
+ ];
78
+
79
+ for (const entry of sessionEntryExamples) {
80
+ lines.push(`echo \"- ${entry}\"`);
81
+ }
82
+
83
+ lines.push("echo \"If unsupported, copy/paste BOOTSTRAP_PROMPT.txt manually.\"");
84
+ return lines.join("\n");
85
+ }
86
+
87
+ function renderRuntimeConfig(target: HostTarget, task?: string): string {
88
+ const payload = {
89
+ version: 1,
90
+ vendor: target,
91
+ model: "host-managed",
92
+ endpoint: null,
93
+ authEnv: null,
94
+ structuredMode: "json",
95
+ timeoutMs: 20000,
96
+ taskContext: task?.trim() || null,
97
+ notes: [
98
+ "Fill endpoint/auth fields if your host runtime requires external transport.",
99
+ "If host runtime is in-process, keep endpoint null and call runtime SDK directly in bridge adapter."
100
+ ]
101
+ };
102
+ return JSON.stringify(payload, null, 2);
103
+ }
104
+
105
+ function renderBridgeSmokeTest(target: HostTarget): string {
106
+ const payload = {
107
+ version: 1,
108
+ action: "callStructured",
109
+ prompt: "Smoke test structured output",
110
+ schema: {
111
+ type: "object",
112
+ required: ["agent", "success", "confidence", "risks", "logs", "data"],
113
+ properties: {
114
+ agent: { type: "string" },
115
+ success: { type: "boolean" },
116
+ confidence: { type: "number" },
117
+ risks: { type: "array" },
118
+ logs: { type: "array" },
119
+ data: { type: "object" }
120
+ }
121
+ },
122
+ options: { model: "host-managed", temperature: 0, maxTokens: 256 },
123
+ meta: { target }
124
+ };
125
+ return JSON.stringify(payload, null, 2);
126
+ }
127
+
128
+ function renderManifest(params: {
129
+ target: HostTarget;
130
+ title: string;
131
+ autoInjectMode: "native" | "scripted" | "manual";
132
+ bridgeCommand: string;
133
+ quickCommands: string[];
134
+ sessionEntryExamples: string[];
135
+ bootstrapPromptFile: string;
136
+ instructionsFile: string;
137
+ adapterFile: string;
138
+ runtimeConfigFile: string;
139
+ smokeTestFile: string;
140
+ vendorFile: string;
141
+ task?: string;
142
+ }): HostManifestModel {
143
+ return {
144
+ version: 2,
145
+ target: params.target,
146
+ title: params.title,
147
+ autoInjectMode: params.autoInjectMode,
148
+ bridgeCommand: params.bridgeCommand,
149
+ quickCommands: params.quickCommands,
150
+ sessionEntryExamples: params.sessionEntryExamples,
151
+ task: params.task ?? null,
152
+ files: {
153
+ bootstrapPrompt: params.bootstrapPromptFile,
154
+ instructions: params.instructionsFile,
155
+ bridgeAdapter: params.adapterFile,
156
+ bridgeRuntimeConfig: params.runtimeConfigFile,
157
+ bridgeSmokeTest: params.smokeTestFile,
158
+ vendorManifest: params.vendorFile
159
+ }
160
+ };
161
+ }
162
+
163
+ async function generateForTarget(cwd: string, target: HostTarget, task?: string): Promise<{ dir: string; bootstrapPrompt: string; quickCommands: string[] }> {
164
+ const template = HOST_TEMPLATES[target];
165
+ const baseDir = path.join(cwd, ".raxflow", "host-init", target);
166
+ const adapterFile = path.join(baseDir, bridgeAdapterFilename(target));
167
+ const command = bridgeCommand(adapterFile);
168
+
169
+ await mkdir(baseDir, { recursive: true });
170
+
171
+ const setupSh = renderSetupScript(command);
172
+ const sessionStartSh = renderSessionStartScript(target, template.sessionEntryExamples);
173
+ const bootstrapPrompt = buildBootstrapPrompt(target, task);
174
+ const bridgeAdapter = renderBridgeAdapter(target);
175
+ const instructions = renderInstructions({
176
+ title: template.title,
177
+ envHint: template.envHint,
178
+ chatHint: template.chatHint,
179
+ command,
180
+ adapterFile,
181
+ quickCommands: template.quickCommands,
182
+ sessionEntryExamples: template.sessionEntryExamples,
183
+ autoInjectMode: template.autoInjectMode,
184
+ task
185
+ });
186
+
187
+ const bootstrapPromptFile = path.join(baseDir, "BOOTSTRAP_PROMPT.txt");
188
+ const instructionsFile = path.join(baseDir, "INSTRUCTIONS.md");
189
+ const runtimeConfigFile = path.join(baseDir, "bridge-runtime-config.json");
190
+ const smokeTestFile = path.join(baseDir, "bridge-smoke-test.json");
191
+ const vendorFile = vendorManifestFilename(target);
192
+ const manifestObj = renderManifest({
193
+ target,
194
+ title: template.title,
195
+ autoInjectMode: template.autoInjectMode,
196
+ bridgeCommand: command,
197
+ quickCommands: template.quickCommands,
198
+ sessionEntryExamples: template.sessionEntryExamples,
199
+ bootstrapPromptFile,
200
+ instructionsFile,
201
+ adapterFile,
202
+ runtimeConfigFile,
203
+ smokeTestFile,
204
+ vendorFile: path.join(baseDir, vendorFile),
205
+ task
206
+ });
207
+ const manifest = JSON.stringify(manifestObj, null, 2);
208
+ const vendorManifest = generateVendorManifest(target, baseDir, manifestObj);
209
+
210
+ await writeFile(path.join(baseDir, "setup-bridge.sh"), `${setupSh}\n`, "utf8");
211
+ await writeFile(path.join(baseDir, "start-session.sh"), `${sessionStartSh}\n`, "utf8");
212
+ await writeFile(adapterFile, `${bridgeAdapter}\n`, "utf8");
213
+ await writeFile(runtimeConfigFile, `${renderRuntimeConfig(target, task)}\n`, "utf8");
214
+ await writeFile(smokeTestFile, `${renderBridgeSmokeTest(target)}\n`, "utf8");
215
+ await writeFile(bootstrapPromptFile, `${bootstrapPrompt}\n`, "utf8");
216
+ await writeFile(instructionsFile, `${instructions}\n`, "utf8");
217
+ await writeFile(path.join(baseDir, "host-manifest.json"), `${manifest}\n`, "utf8");
218
+ await writeFile(path.join(baseDir, vendorFile), `${JSON.stringify(vendorManifest, null, 2)}\n`, "utf8");
219
+
220
+ return { dir: baseDir, bootstrapPrompt, quickCommands: template.quickCommands };
221
+ }
222
+
223
+ async function generateSummary(cwd: string, generated: Array<{ target: HostTarget; dir: string }>, task?: string): Promise<string> {
224
+ const summaryFile = path.join(cwd, ".raxflow", "host-init", "INIT_SUMMARY.md");
225
+ const body = [
226
+ "# RAXFLOW Host Init Summary",
227
+ "",
228
+ ...(task?.trim() ? ["Task context:", `- ${task.trim()}`, ""] : []),
229
+ "Generated targets:",
230
+ ...generated.map((item) => `- ${item.target}: \`${item.dir}\``),
231
+ "",
232
+ "Recommended sequence:",
233
+ "1. Review bridge-adapter-*.mjs and wire host runtime in callHostModel",
234
+ "2. Source setup-bridge.sh for your target",
235
+ "3. Run start-session.sh for launch hints",
236
+ "4. Paste BOOTSTRAP_PROMPT.txt into chat start",
237
+ "5. Run `npx raxflow doctor`",
238
+ "6. Run `npx raxflow run --prompt \"Build feature X\" --stream`"
239
+ ].join("\n");
240
+ await writeFile(summaryFile, `${body}\n`, "utf8");
241
+ return summaryFile;
242
+ }
243
+
244
+ export async function runInitHost(options: InitHostOptions): Promise<number> {
245
+ const targets = options.all ? listHostTargets() : [parseHostTarget(options.target)];
246
+
247
+ if (options.printOnly) {
248
+ for (const target of targets) {
249
+ const template = HOST_TEMPLATES[target];
250
+ const bootstrapPrompt = buildBootstrapPrompt(target, options.task);
251
+ console.log(c.blue(`RAXFLOW Host Init (print) - ${target}`));
252
+ console.log(bootstrapPrompt);
253
+ console.log("quick commands:");
254
+ template.quickCommands.forEach((cmd) => console.log(`- ${cmd}`));
255
+ console.log("session launch patterns:");
256
+ template.sessionEntryExamples.forEach((line) => console.log(`- ${line}`));
257
+ }
258
+ return 0;
259
+ }
260
+
261
+ const generated: Array<{ target: HostTarget; dir: string }> = [];
262
+
263
+ for (const target of targets) {
264
+ const out = await generateForTarget(options.cwd, target, options.task);
265
+ generated.push({ target, dir: out.dir });
266
+ console.log(c.blue("RAXFLOW Host Init"));
267
+ console.log(`target: ${target}`);
268
+ if (options.task?.trim()) {
269
+ console.log(`task context: ${options.task.trim()}`);
270
+ }
271
+ console.log(c.green(`Generated ${path.join(out.dir, "INSTRUCTIONS.md")}`));
272
+ console.log(c.green(`Generated ${path.join(out.dir, "BOOTSTRAP_PROMPT.txt")}`));
273
+ console.log(c.green(`Generated ${path.join(out.dir, "setup-bridge.sh")}`));
274
+ console.log(c.green(`Generated ${path.join(out.dir, "start-session.sh")}`));
275
+ console.log(c.green(`Generated ${path.join(out.dir, bridgeAdapterFilename(target))}`));
276
+ console.log(c.green(`Generated ${path.join(out.dir, "bridge-runtime-config.json")}`));
277
+ console.log(c.green(`Generated ${path.join(out.dir, "bridge-smoke-test.json")}`));
278
+ console.log(c.green(`Generated ${path.join(out.dir, "host-manifest.json")}`));
279
+ console.log(c.green(`Generated ${path.join(out.dir, vendorManifestFilename(target))}`));
280
+ }
281
+
282
+ const summary = await generateSummary(options.cwd, generated, options.task);
283
+ console.log(c.green(`Generated ${summary}`));
284
+ return 0;
285
+ }
package/src/install.ts ADDED
@@ -0,0 +1,118 @@
1
+ import { mkdir, writeFile, access, copyFile } from "node:fs/promises";
2
+ import { constants } from "node:fs";
3
+ import { execSync } from "node:child_process";
4
+ import path from "node:path";
5
+ import os from "node:os";
6
+ import { c } from "./styles.js";
7
+
8
+ interface InstallOptions {
9
+ cwd: string;
10
+ openUi: boolean;
11
+ autoConfirm?: boolean;
12
+ }
13
+
14
+ async function detectBridges(): Promise<string[]> {
15
+ const candidates = [
16
+ { id: "claude-code", cmd: "claude-code --version" },
17
+ { id: "codex", cmd: "codex --version" },
18
+ { id: "opencode", cmd: "opencode --version" },
19
+ { id: "kilo", cmd: "kilo --version" }
20
+ ];
21
+
22
+ const detected: string[] = [];
23
+ for (const tool of candidates) {
24
+ try {
25
+ execSync(tool.cmd, { stdio: "ignore" });
26
+ detected.push(tool.id);
27
+ } catch {
28
+ // Not in path
29
+ }
30
+ }
31
+ return detected;
32
+ }
33
+
34
+ async function ensureRaxrc(targetDir: string, detectedBridge?: string): Promise<string> {
35
+ const file = path.join(targetDir, ".raxrc");
36
+ const body = {
37
+ version: 1,
38
+ defaultProvider: detectedBridge ? "host" : "openai",
39
+ strongProvider: "openai",
40
+ providers: {
41
+ host: {
42
+ model: detectedBridge ?? "host-managed",
43
+ mode: "auto",
44
+ bridgeCommand: detectedBridge ?? "claude-code", // Store direct command if found
45
+ bridgeCommandEnv: "RAX_HOST_BRIDGE_COMMAND"
46
+ },
47
+ openai: { model: "gpt-4o", apiKeyEnv: "OPENAI_API_KEY" },
48
+ claude: { model: "claude-3-5-sonnet-latest", apiKeyEnv: "ANTHROPIC_API_KEY" }
49
+ },
50
+ privacyMode: true,
51
+ verifyFixLoops: 3
52
+ };
53
+ await writeFile(file, `${JSON.stringify(body, null, 2)}\n`, "utf8");
54
+ return file;
55
+ }
56
+
57
+ async function ensureExampleWorkflow(targetDir: string): Promise<string> {
58
+ const workflowsDir = path.join(targetDir, ".raxflow", "workflows");
59
+ await mkdir(workflowsDir, { recursive: true });
60
+ const file = path.join(workflowsDir, "fullstack-feature.json");
61
+ const sample = {
62
+ id: "fullstack-feature",
63
+ nodes: [
64
+ { id: "analyze", agent: "IntentClassifierAgent", dependsOn: [] },
65
+ { id: "spec", agent: "SpecAgent", dependsOn: ["analyze"] },
66
+ { id: "implement", agent: "CodeGeneratorAgent", dependsOn: ["spec"] },
67
+ { id: "verify", agent: "ValidatorAgent", dependsOn: ["implement"] }
68
+ ]
69
+ };
70
+ await writeFile(file, `${JSON.stringify(sample, null, 2)}\n`, "utf8");
71
+ return file;
72
+ }
73
+
74
+ async function validateEnvironment(): Promise<{ ok: boolean; missing: string[] }> {
75
+ const optional = ["OPENAI_API_KEY", "RAX_HOST_BRIDGE_COMMAND"];
76
+ const missing = optional.filter((k) => !process.env[k]);
77
+ return { ok: true, missing };
78
+ }
79
+
80
+ export async function runInstall(options: InstallOptions): Promise<number> {
81
+ console.log(c.blue("RAXFLOW Installer - Professional Setup"));
82
+
83
+ console.log("- Scanning for local coding tools...");
84
+ const detected = await detectBridges();
85
+ if (detected.length > 0) {
86
+ console.log(c.green(` [OK] Detected: ${detected.join(", ")}`));
87
+ } else {
88
+ console.log(c.yellow(" [!] No local coding tools (Claude Code/Codex) detected in PATH."));
89
+ }
90
+
91
+ const primaryBridge = detected[0];
92
+ const raxrc = await ensureRaxrc(options.cwd, primaryBridge);
93
+ const workflow = await ensureExampleWorkflow(options.cwd);
94
+
95
+ console.log(c.green(`- Project Initialized: ${raxrc}`));
96
+ console.log(c.green(`- Default Blueprint Created: ${workflow}`));
97
+
98
+ const env = await validateEnvironment();
99
+ if (env.missing.length > 0) {
100
+ console.log(c.yellow(`- Note: Optional env vars missing: ${env.missing.join(", ")}`));
101
+ }
102
+
103
+ const localHome = path.join(os.homedir(), ".raxflow");
104
+ await mkdir(localHome, { recursive: true });
105
+
106
+ console.log("\n" + c.blue("--- Zero-Error Compliance Checklist ---"));
107
+ console.log(c.green("✓ Host Bridge Architecture: Scalable & Compliant"));
108
+ console.log(c.green("✓ Dynamic Planner: Enabled (Self-Optimizing)"));
109
+ console.log(c.green("✓ Long-term Memory: Configured"));
110
+
111
+ console.log("\n" + c.yellow("Next Logical Steps:"));
112
+ console.log("1. Run `raxflow doctor` to verify bridge connectivity.");
113
+ console.log("2. Launch a task: `raxflow run --prompt \"Implement feature Y\" --stream`.");
114
+
115
+ console.log("\n" + c.green("RAXFLOW is now the operational backbone of your CLI workflow."));
116
+ return 0;
117
+ }
118
+