@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
@@ -1,70 +0,0 @@
1
- import { HubContext } from "../types.js";
2
- import { drawBox } from "../styles/borders.js";
3
- import { colorize, ansiColors } from "../styles/colors.js";
4
-
5
- interface LogEntry {
6
- timestamp: string;
7
- level: "INFO" | "WARN" | "ERROR" | "SUCCESS" | "MUTATE";
8
- agent: string;
9
- message: string;
10
- }
11
-
12
- export async function showLogs(_args: string[], flags: Record<string, string | boolean>, _context: HubContext): Promise<void> {
13
- const width = 85;
14
- const followMode = flags["f"] === true || flags["follow"] === true;
15
- const agentFilter = typeof flags["agent"] === "string" ? flags["agent"] : null;
16
- const levelFilter = typeof flags["level"] === "string" ? flags["level"].toUpperCase() : null;
17
-
18
- // Sample log entries
19
- const logs: LogEntry[] = [
20
- { timestamp: "14:23:07.123", level: "INFO", agent: "IntentClassifier", message: 'detected: "code_generation"' },
21
- { timestamp: "14:23:07.456", level: "INFO", agent: "TaskPlanner", message: "decomposed into 5 tasks" },
22
- { timestamp: "14:23:08.012", level: "SUCCESS", agent: "CodeGenerator", message: "generating auth module" },
23
- { timestamp: "14:23:09.234", level: "SUCCESS", agent: "CodeGenerator", message: "artifacts: 3 files" },
24
- { timestamp: "14:23:09.456", level: "INFO", agent: "TestAgent", message: "running test suite" },
25
- { timestamp: "14:23:12.789", level: "WARN", agent: "TestAgent", message: "2 tests failed, triggering FixAgent" },
26
- { timestamp: "14:23:13.012", level: "INFO", agent: "FixAgent", message: "patching auth/login.ts" },
27
- { timestamp: "14:23:14.345", level: "SUCCESS", agent: "FixAgent", message: "patches applied" },
28
- { timestamp: "14:23:14.567", level: "MUTATE", agent: "MutationAgent", message: "workflow optimized (+2 validation nodes)" },
29
- ];
30
-
31
- // Filter logs
32
- let filteredLogs = logs;
33
- if (agentFilter) {
34
- filteredLogs = filteredLogs.filter(l => l.agent.toLowerCase().includes(agentFilter.toLowerCase()));
35
- }
36
- if (levelFilter) {
37
- filteredLogs = filteredLogs.filter(l => l.level === levelFilter);
38
- }
39
-
40
- const lines: string[] = [];
41
-
42
- // Header
43
- lines.push(` ${colorize("TIME", "bright")} ${colorize("LEVEL", "bright")} ${colorize("AGENT", "bright")} ${colorize("MESSAGE", "bright")}`);
44
- lines.push(" " + "─".repeat(81));
45
-
46
- // Log entries
47
- for (const log of filteredLogs) {
48
- const levelColor: Record<string, keyof typeof ansiColors> = {
49
- "INFO": "cyan",
50
- "WARN": "yellow",
51
- "ERROR": "red",
52
- "SUCCESS": "green",
53
- "MUTATE": "magenta",
54
- };
55
-
56
- lines.push(` ${log.timestamp} ${colorize(log.level.padEnd(8), levelColor[log.level] || "white")} ${log.agent.padEnd(18)} ${log.message}`);
57
- }
58
-
59
- if (followMode) {
60
- lines.push("");
61
- lines.push(colorize(" [Following... Press Ctrl+C to stop]", "gray"));
62
- }
63
-
64
- console.log(drawBox(lines, width, "LOGS"));
65
-
66
- if (followMode) {
67
- // In a real implementation, this would stream new logs
68
- console.log(colorize("\n (Follow mode not yet implemented)", "gray"));
69
- }
70
- }
@@ -1,47 +0,0 @@
1
- import { HubContext } from "../types.js";
2
- import { drawBox } from "../styles/borders.js";
3
- import { colorize, statusIndicators } from "../styles/colors.js";
4
-
5
- export async function showMemory(_args: string[], _flags: Record<string, string | boolean>, _context: HubContext): Promise<void> {
6
- const width = 70;
7
-
8
- const stats = {
9
- graphNodes: 247,
10
- vectorStoreSize: "1.2 MB",
11
- cacheEntries: 47,
12
- lastAccess: "2s ago",
13
- recentMutations: 3,
14
- cacheHitRate: "94%",
15
- };
16
-
17
- const lines: string[] = [];
18
-
19
- // Stats
20
- lines.push(` ${colorize("Graph Memory Nodes:", "bright")} ${colorize(stats.graphNodes.toString(), "cyan")} ${statusIndicators.online}`);
21
- lines.push(` ${colorize("Vector Store Size:", "bright")} ${colorize(stats.vectorStoreSize, "cyan")}`);
22
- lines.push(` ${colorize("Cache Entries:", "bright")} ${colorize(stats.cacheEntries.toString(), "cyan")}`);
23
- lines.push(` ${colorize("Last Access:", "bright")} ${colorize(stats.lastAccess, "gray")}`);
24
- lines.push(` ${colorize("Recent Mutations:", "bright")} ${colorize(`+${stats.recentMutations}`, "yellow")} ${statusIndicators.mutation}`);
25
- lines.push(` ${colorize("Cache Hit Rate:", "bright")} ${colorize(stats.cacheHitRate, "green")}`);
26
-
27
- lines.push("");
28
- lines.push(colorize(" Sample Graph Structure:", "bright"));
29
- lines.push(" " + "─".repeat(66));
30
-
31
- // Visual graph representation
32
- lines.push("");
33
- lines.push(` [action:code_gen]${statusIndicators.online}`);
34
- lines.push(` │`);
35
- lines.push(` ├───▶ [file:auth.ts]${statusIndicators.online}`);
36
- lines.push(` │ │`);
37
- lines.push(` │ ├───▶ [task:login]${statusIndicators.online}`);
38
- lines.push(` │ │`);
39
- lines.push(` │ └───▶ [test:auth]${statusIndicators.online}`);
40
- lines.push(` │ │`);
41
- lines.push(` │ │`);
42
- lines.push(` └───────────────────────┴───▶ [fix:patch_001]${statusIndicators.mutation}`);
43
- lines.push("");
44
- lines.push(colorize(" // QUANTUM_SEMANTIC_GRAPH_MEMORY", "gray"));
45
-
46
- console.log(drawBox(lines, width, "MEMORY"));
47
- }
@@ -1,49 +0,0 @@
1
- import { HubContext } from "../types.js";
2
- import { drawBox, drawProgressBar } from "../styles/borders.js";
3
- import { colorize } from "../styles/colors.js";
4
- import { padRight } from "../styles/typography.js";
5
-
6
- interface MetricInfo {
7
- label: string;
8
- value: string;
9
- trend?: string;
10
- }
11
-
12
- export async function showMetrics(_args: string[], _flags: Record<string, string | boolean>, _context: HubContext): Promise<void> {
13
- const width = 65;
14
-
15
- const metrics: MetricInfo[] = [
16
- { label: "Sessions", value: "12", trend: "↗" },
17
- { label: "Avg Duration", value: "14.2s", trend: "▼ -12%" },
18
- { label: "Success Rate", value: "96%", trend: "▲ +3%" },
19
- { label: "Cost (USD)", value: "$0.002", trend: "→" },
20
- { label: "Cache Savings", value: "67%", trend: "↗" },
21
- ];
22
-
23
- const topAgents = [
24
- { name: "CodeGenerator", usage: 45 },
25
- { name: "TestAgent", usage: 32 },
26
- { name: "FixAgent", usage: 18 },
27
- { name: "IntentClassifier", usage: 5 },
28
- ];
29
-
30
- const lines: string[] = [];
31
-
32
- // General metrics
33
- for (const metric of metrics) {
34
- const trendColor = metric.trend?.includes("▲") ? "green" : metric.trend?.includes("▼") ? "green" : "gray";
35
- lines.push(` ${padRight(metric.label, 15)} ${colorize(metric.value.padEnd(12), "cyan")} ${colorize(metric.trend || "", trendColor)}`);
36
- }
37
-
38
- lines.push("");
39
- lines.push(colorize(" Top Agents:", "bright"));
40
- lines.push(" " + "─".repeat(61));
41
-
42
- // Top agents with progress bars
43
- for (const agent of topAgents) {
44
- const bar = drawProgressBar(agent.usage, 20);
45
- lines.push(` ${padRight(agent.name, 18)} ${bar} ${colorize(`${agent.usage}%`, "yellow")}`);
46
- }
47
-
48
- console.log(drawBox(lines, width, "METRICS"));
49
- }
@@ -1,39 +0,0 @@
1
- import { HubContext } from "../types.js";
2
- import { drawBox } from "../styles/borders.js";
3
- import { colorize, formatStatus } from "../styles/colors.js";
4
- import { padRight } from "../styles/typography.js";
5
-
6
- interface ProviderInfo {
7
- name: string;
8
- key: string;
9
- status: string;
10
- latency: string;
11
- lastCall: string;
12
- }
13
-
14
- export async function listProviders(_args: string[], _flags: Record<string, string | boolean>, _context: HubContext): Promise<void> {
15
- const width = 65;
16
-
17
- const providers: ProviderInfo[] = [
18
- { name: "Host-Native", key: "[H]", status: "online", latency: "12ms", lastCall: "2s ago" },
19
- { name: "Claude Code", key: "[C]", status: "online", latency: "8ms", lastCall: "5s ago" },
20
- { name: "OpenCode", key: "[O]", status: "idle", latency: "--", lastCall: "1h ago" },
21
- { name: "Anthropic API", key: "[A]", status: "online", latency: "45ms", lastCall: "1m ago" },
22
- { name: "Gemini", key: "[G]", status: "idle", latency: "--", lastCall: "2h ago" },
23
- { name: "Mistral", key: "[M]", status: "idle", latency: "--", lastCall: "3h ago" },
24
- { name: "Groq", key: "[Q]", status: "idle", latency: "--", lastCall: "5h ago" },
25
- { name: "OpenAI", key: "[O]", status: "idle", latency: "--", lastCall: "1d ago" },
26
- ];
27
-
28
- const lines: string[] = [];
29
- lines.push(` ${colorize("PROVIDER", "bright")} ${colorize("STATUS", "bright")} ${colorize("LATENCY", "bright")} ${colorize("LAST CALL", "bright")}`);
30
- lines.push(" " + "─".repeat(61));
31
-
32
- for (const provider of providers) {
33
- const indicator = formatStatus(provider.status);
34
- const statusColor = provider.status === "online" ? "green" : "gray";
35
- lines.push(` ${provider.key} ${padRight(provider.name, 14)} ${indicator} ${colorize(provider.status.toUpperCase().padEnd(8), statusColor)} ${padRight(provider.latency, 8)} ${colorize(provider.lastCall, "gray")}`);
36
- }
37
-
38
- console.log(drawBox(lines, width, "PROVIDERS"));
39
- }
@@ -1,37 +0,0 @@
1
- import { HubContext } from "../types.js";
2
- import { runWorkflow as runWorkflowOriginal } from "../../run.js";
3
-
4
- export async function runWorkflow(args: string[], flags: Record<string, string | boolean>, context: HubContext): Promise<void> {
5
- const prompt = args.join(" ");
6
-
7
- if (!prompt) {
8
- console.error("❌ Usage: run <prompt>");
9
- console.log("\nExemples:");
10
- console.log(' run "Crée une API REST"');
11
- console.log(' run "Génère des tests unitaires" --workflow custom.json');
12
- return;
13
- }
14
-
15
- console.log(`▶ Lancement du workflow...`);
16
- console.log(` Prompt: ${prompt}`);
17
- console.log(` Mode: ${flags["workflow"] || "default"}`);
18
- console.log("");
19
-
20
- // Call the original run function
21
- const code = await runWorkflowOriginal({
22
- cwd: context.config.project || process.cwd(),
23
- prompt,
24
- workflowPath: typeof flags["workflow"] === "string" ? flags["workflow"] : undefined,
25
- asJson: flags["json"] === true,
26
- stream: flags["stream"] === true,
27
- maxParallel: typeof flags["max-parallel"] === "string" ? Number(flags["max-parallel"]) : undefined,
28
- noCachePersist: flags["no-cache-persist"] === true,
29
- ui: flags["ui"] === true,
30
- });
31
-
32
- if (code !== 0) {
33
- throw new Error(`Workflow failed with code ${code}`);
34
- }
35
-
36
- console.log("\n✅ Workflow terminé avec succès");
37
- }
@@ -1,69 +0,0 @@
1
- import { HubContext } from "../types.js";
2
- import { drawBox } from "../styles/borders.js";
3
- import { colorize, formatStatus, statusIndicators } from "../styles/colors.js";
4
- import { padRight } from "../styles/typography.js";
5
-
6
- export async function showStatus(_args: string[], _flags: Record<string, string | boolean>, context: HubContext): Promise<void> {
7
- const width = 61;
8
-
9
- // Simulated status data (will be replaced with real data from orchestrator)
10
- const status = {
11
- orchestrator: "ACTIVE",
12
- mode: "HOST-NATIVE",
13
- activeAgents: "3/12",
14
- currentRun: "L2: CodeGen [H] 67%",
15
- fitness: "0.87",
16
- fitnessTrend: "improving",
17
- cacheHit: "94%",
18
- memoryNodes: "247",
19
- latency: "12ms",
20
- providers: [
21
- { name: "Host-Native", status: "online", latency: "12ms" },
22
- { name: "Claude", status: "online", latency: "8ms" },
23
- { name: "OpenAI", status: "idle", latency: "--" },
24
- ],
25
- activeWorkflows: [
26
- { agent: "CodeGenerator", provider: "[H]", status: "running", progress: 67 },
27
- { agent: "TestAgent", provider: "[H]", status: "queued", progress: 0 },
28
- ],
29
- };
30
-
31
- const lines: string[] = [];
32
-
33
- // Orchestrator status
34
- lines.push(` Orchestrator: ${formatStatus("online")} ${colorize(status.orchestrator, "green")}`);
35
- lines.push(` Mode: ${colorize(status.mode, "cyan")}`);
36
- lines.push(` Active Agents: ${colorize(status.activeAgents, "yellow")}`);
37
- lines.push("");
38
-
39
- // Current run
40
- if (status.currentRun) {
41
- lines.push(` Current Run: ${statusIndicators.running} ${colorize(status.currentRun, "yellow")}`);
42
- lines.push(` Fitness: ${colorize(status.fitness, "green")} (${colorize(status.fitnessTrend, "cyan")})`);
43
- lines.push(` Cache Hit: ${colorize(status.cacheHit, "green")}`);
44
- lines.push(` Memory Nodes: ${colorize(status.memoryNodes, "cyan")}`);
45
- lines.push(` Latency: ${colorize(status.latency, "green")}`);
46
- lines.push("");
47
- }
48
-
49
- // Active workflows
50
- if (status.activeWorkflows.length > 0) {
51
- lines.push(colorize(" Active Workflows:", "bright"));
52
- for (const wf of status.activeWorkflows) {
53
- const indicator = statusIndicators[wf.status as keyof typeof statusIndicators] || "○";
54
- const color = wf.status === "running" ? "yellow" : wf.status === "queued" ? "gray" : "white";
55
- lines.push(` ${indicator} ${padRight(wf.agent, 20)} ${wf.provider} ${colorize(wf.status.toUpperCase(), color)}`);
56
- }
57
- lines.push("");
58
- }
59
-
60
- // Providers
61
- lines.push(colorize(" Providers:", "bright"));
62
- for (const provider of status.providers) {
63
- const indicator = formatStatus(provider.status);
64
- const latencyStr = provider.latency !== "--" ? `${provider.latency}` : "--";
65
- lines.push(` ${indicator} ${padRight(provider.name, 18)} ${colorize(latencyStr, "gray")}`);
66
- }
67
-
68
- console.log(drawBox(lines, width, "SYSTEM STATUS"));
69
- }
@@ -1,64 +0,0 @@
1
- import { HubContext } from "../types.js";
2
- import { drawBox } from "../styles/borders.js";
3
- import { colorize } from "../styles/colors.js";
4
- import * as fs from "fs/promises";
5
- import * as path from "path";
6
-
7
- interface WorkflowInfo {
8
- name: string;
9
- description: string;
10
- fitness?: number;
11
- recommended?: boolean;
12
- }
13
-
14
- export async function listWorkflows(_args: string[], _flags: Record<string, string | boolean>, context: HubContext): Promise<void> {
15
- const width = 70;
16
- const lines: string[] = [];
17
-
18
- // Try to find workflow files
19
- const workflowDir = path.join(context.config.project || process.cwd(), ".rax", "workflows");
20
- const workflows: WorkflowInfo[] = [];
21
-
22
- try {
23
- const files = await fs.readdir(workflowDir);
24
- for (const file of files.filter(f => f.endsWith('.json'))) {
25
- const filePath = path.join(workflowDir, file);
26
- const content = await fs.readFile(filePath, 'utf-8');
27
- const workflow = JSON.parse(content);
28
- workflows.push({
29
- name: file.replace('.json', ''),
30
- description: workflow.description || 'No description',
31
- fitness: workflow.fitness,
32
- recommended: workflow.recommended,
33
- });
34
- }
35
- } catch {
36
- // Directory doesn't exist or is empty, use defaults
37
- }
38
-
39
- // Add default workflows
40
- if (workflows.length === 0) {
41
- workflows.push(
42
- { name: "default-routing", description: "Standard workflow with intent classification", fitness: 0.87 },
43
- { name: "secure-api-blueprint", description: "Security-focused API generation", fitness: 0.92 },
44
- { name: "test-heavy-workflow", description: "Prioritizes test generation", fitness: 0.89 },
45
- { name: "mutation-evolved-v3", description: "Optimized with mutations", fitness: 0.96, recommended: true }
46
- );
47
- }
48
-
49
- lines.push(` ${colorize("WORKFLOW", "bright")} ${colorize("DESCRIPTION", "bright")} ${colorize("FITNESS", "bright")}`);
50
- lines.push(" " + "─".repeat(66));
51
-
52
- for (const wf of workflows) {
53
- const name = wf.name.slice(0, 22).padEnd(24);
54
- const desc = wf.description.slice(0, 25).padEnd(27);
55
- const fitness = wf.fitness ? colorize(wf.fitness.toFixed(2), wf.fitness >= 0.9 ? "green" : "yellow") : "--";
56
- const marker = wf.recommended ? colorize(" ★", "yellow") : "";
57
- lines.push(` • ${name} ${desc} ${fitness}${marker}`);
58
- }
59
-
60
- lines.push("");
61
- lines.push(` ${colorize("Usage:", "bright")} run -w <workflow-name> "<prompt>"`);
62
-
63
- console.log(drawBox(lines, width, "WORKFLOWS"));
64
- }
@@ -1,37 +0,0 @@
1
- import * as fs from "fs/promises";
2
- import * as path from "path";
3
- import { HubConfig } from "./types.js";
4
-
5
- interface RaxRcConfig {
6
- project?: string;
7
- providers?: string[];
8
- theme?: 'industrial' | 'minimal' | 'high-contrast';
9
- [key: string]: unknown;
10
- }
11
-
12
- export async function loadConfig(cwd: string): Promise<HubConfig> {
13
- const configPath = path.join(cwd, ".raxrc");
14
-
15
- try {
16
- const content = await fs.readFile(configPath, "utf-8");
17
- const config: RaxRcConfig = JSON.parse(content);
18
-
19
- return {
20
- project: config.project,
21
- providers: config.providers,
22
- theme: config.theme || 'industrial',
23
- };
24
- } catch {
25
- // Return default config if .raxrc doesn't exist or is invalid
26
- return {
27
- project: path.basename(cwd),
28
- providers: [],
29
- theme: 'industrial',
30
- };
31
- }
32
- }
33
-
34
- export async function saveConfig(cwd: string, config: HubConfig): Promise<void> {
35
- const configPath = path.join(cwd, ".raxrc");
36
- await fs.writeFile(configPath, JSON.stringify(config, null, 2));
37
- }
@@ -1,17 +0,0 @@
1
- import { RuntimeEventBus, RuntimeEvent } from "rax-flow-core";
2
-
3
- const globalEventBus = new RuntimeEventBus();
4
-
5
- export type { RuntimeEvent };
6
-
7
- export function getEventBus(): RuntimeEventBus {
8
- return globalEventBus;
9
- }
10
-
11
- export function subscribeToEvents(callback: (event: RuntimeEvent) => void): () => void {
12
- return globalEventBus.onEvent(callback);
13
- }
14
-
15
- export function emitEvent(event: RuntimeEvent): void {
16
- globalEventBus.emit(event);
17
- }
@@ -1,66 +0,0 @@
1
- import * as fs from "fs/promises";
2
- import * as path from "path";
3
-
4
- export class CommandHistory {
5
- private history: string[] = [];
6
- private position = -1;
7
- private readonly historyPath: string;
8
-
9
- constructor(cwd: string) {
10
- this.historyPath = path.join(cwd, ".rax", "history.json");
11
- }
12
-
13
- add(command: string): void {
14
- // Avoid duplicates at the end
15
- if (this.history.length === 0 || this.history[this.history.length - 1] !== command) {
16
- this.history.push(command);
17
- }
18
- this.position = this.history.length;
19
- }
20
-
21
- up(): string | undefined {
22
- if (this.position > 0) {
23
- this.position--;
24
- return this.history[this.position];
25
- }
26
- return undefined;
27
- }
28
-
29
- down(): string | undefined {
30
- if (this.position < this.history.length - 1) {
31
- this.position++;
32
- return this.history[this.position];
33
- }
34
- this.position = this.history.length;
35
- return undefined;
36
- }
37
-
38
- async save(): Promise<void> {
39
- try {
40
- const dir = path.dirname(this.historyPath);
41
- await fs.mkdir(dir, { recursive: true });
42
- await fs.writeFile(
43
- this.historyPath,
44
- JSON.stringify(this.history.slice(-1000), null, 2) // Keep last 1000 commands
45
- );
46
- } catch {
47
- // Silently fail if we can't save history
48
- }
49
- }
50
-
51
- async load(): Promise<void> {
52
- try {
53
- const data = await fs.readFile(this.historyPath, "utf-8");
54
- this.history = JSON.parse(data);
55
- this.position = this.history.length;
56
- } catch {
57
- // No history file yet, start fresh
58
- this.history = [];
59
- this.position = 0;
60
- }
61
- }
62
-
63
- getAll(): string[] {
64
- return [...this.history];
65
- }
66
- }
package/src/hub/index.ts DELETED
@@ -1,132 +0,0 @@
1
- import * as readline from "readline";
2
- import { HubOptions, HubContext, Command } from "./types.js";
3
- import { parseCommand, getCompletions } from "./parser.js";
4
- import { CommandHistory } from "./history.js";
5
- import { subscribeToEvents, RuntimeEvent } from "./event-listener.js";
6
- import { getCommandRegistry } from "./commands/index.js";
7
- import { loadConfig } from "./config-loader.js";
8
-
9
- const WELCOME_MESSAGE = `
10
- ┌─────────────────────────────────────────────────────────────┐
11
- │ ■ RAXFLOW HUB [HOST-NATIVE] ● READY │
12
- │ Project: %PROJECT% Agents: 12/12 Online │
13
- ├─────────────────────────────────────────────────────────────┤
14
- │ // BIENVENUE — Tapez 'help' ou '?' pour commencer │
15
- └─────────────────────────────────────────────────────────────┘
16
- `;
17
-
18
- export async function startHub(options: HubOptions): Promise<void> {
19
- const config = options.config || (await loadConfig(options.cwd));
20
- const context: HubContext = {
21
- config,
22
- };
23
-
24
- const history = new CommandHistory(options.cwd);
25
- await history.load();
26
-
27
- const commands = getCommandRegistry();
28
-
29
- console.log(WELCOME_MESSAGE.replace("%PROJECT%", config.project || "default"));
30
-
31
- let isClosing = false;
32
-
33
- const rl = readline.createInterface({
34
- input: process.stdin,
35
- output: process.stdout,
36
- prompt: "raxflow > ",
37
- completer: (line: string) => {
38
- const completions = getCompletions(line, context);
39
- const hits = completions.filter((c) => c.startsWith(line));
40
- return [hits.length ? hits : completions, line];
41
- },
42
- });
43
-
44
- const unsubscribe = subscribeToEvents((event: RuntimeEvent) => {
45
- const timeStr = new Date().toLocaleTimeString("fr-FR", { hour: "2-digit", minute: "2-digit" });
46
- switch (event.type) {
47
- case "run_start":
48
- console.log(`[${timeStr}] ▶ Task started: ${event.taskId}`);
49
- break;
50
- case "run_end":
51
- console.log(`[${timeStr}] ✓ Task completed: ${event.taskId} (confidence: ${event.metrics.confidence.toFixed(2)})`);
52
- break;
53
- case "node_error":
54
- console.log(`[${timeStr}] ⚠ Node error: ${event.agent} - ${event.message}`);
55
- break;
56
- }
57
- });
58
-
59
- rl.on("line", async (input: string) => {
60
- const trimmed = input.trim();
61
- if (!trimmed) {
62
- rl.prompt();
63
- return;
64
- }
65
-
66
- history.add(trimmed);
67
-
68
- const command = parseCommand(trimmed);
69
-
70
- if (command.name === "exit" || command.name === "quit") {
71
- isClosing = true;
72
- console.log("👋 À bientôt !");
73
- unsubscribe();
74
- rl.close();
75
- return;
76
- }
77
-
78
- const cmdDef = commands.get(command.name) || commands.get("help");
79
- if (cmdDef) {
80
- try {
81
- await cmdDef.handler(command.args, command.flags, context);
82
- } catch (error) {
83
- console.error(`❌ Erreur: ${error instanceof Error ? error.message : String(error)}`);
84
- }
85
- } else {
86
- console.log(`Commande inconnue: ${command.name}. Tapez 'help' pour voir les commandes disponibles.`);
87
- }
88
-
89
- if (!isClosing) {
90
- rl.prompt();
91
- }
92
- });
93
-
94
- rl.on("close", async () => {
95
- if (!isClosing) {
96
- await history.save();
97
- console.log("\n👋 À bientôt !");
98
- unsubscribe();
99
- }
100
- process.exit(0);
101
- });
102
-
103
- process.on("SIGINT", () => {
104
- console.log("\n");
105
- rl.prompt();
106
- });
107
-
108
- rl.prompt();
109
- }
110
-
111
- export async function startHubOneShot(command: string, args: string[]): Promise<void> {
112
- const cwd = process.cwd();
113
- const config = await loadConfig(cwd);
114
- const context: HubContext = { config };
115
- const commands = getCommandRegistry();
116
-
117
- const parsed = parseCommand([command, ...args].join(" "));
118
- const cmdDef = commands.get(parsed.name);
119
-
120
- if (!cmdDef) {
121
- console.error(`Commande inconnue: ${parsed.name}`);
122
- process.exit(1);
123
- }
124
-
125
- try {
126
- await cmdDef.handler(parsed.args, parsed.flags, context);
127
- process.exit(0);
128
- } catch (error) {
129
- console.error(`❌ Erreur: ${error instanceof Error ? error.message : String(error)}`);
130
- process.exit(1);
131
- }
132
- }