@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,84 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import { registerCommand, getCommandRegistry } from "../commands/index.js";
3
+ import { CommandDefinition } from "../types.js";
4
+
5
+ describe("Command Registry", () => {
6
+ beforeEach(() => {
7
+ // Clear the registry before each test
8
+ const registry = getCommandRegistry();
9
+ registry.clear();
10
+ });
11
+
12
+ describe("registerCommand", () => {
13
+ it("should register a command", () => {
14
+ const cmd: CommandDefinition = {
15
+ name: "test",
16
+ description: "Test command",
17
+ handler: async () => {},
18
+ };
19
+
20
+ registerCommand(cmd);
21
+ const registry = getCommandRegistry();
22
+ expect(registry.has("test")).toBe(true);
23
+ });
24
+
25
+ it("should register command with aliases", () => {
26
+ const cmd: CommandDefinition = {
27
+ name: "status",
28
+ description: "Show status",
29
+ handler: async () => {},
30
+ aliases: ["st", "s"],
31
+ };
32
+
33
+ registerCommand(cmd);
34
+ const registry = getCommandRegistry();
35
+ expect(registry.has("status")).toBe(true);
36
+ expect(registry.has("st")).toBe(true);
37
+ expect(registry.has("s")).toBe(true);
38
+ });
39
+
40
+ it("should allow multiple commands to be registered", () => {
41
+ registerCommand({
42
+ name: "cmd1",
43
+ description: "Command 1",
44
+ handler: async () => {},
45
+ });
46
+
47
+ registerCommand({
48
+ name: "cmd2",
49
+ description: "Command 2",
50
+ handler: async () => {},
51
+ });
52
+
53
+ const registry = getCommandRegistry();
54
+ expect(registry.size).toBe(2);
55
+ });
56
+ });
57
+
58
+ describe("getCommandRegistry", () => {
59
+ it("should return the same registry instance", () => {
60
+ const registry1 = getCommandRegistry();
61
+ const registry2 = getCommandRegistry();
62
+ expect(registry1).toBe(registry2);
63
+ });
64
+
65
+ it("should allow retrieving registered commands", async () => {
66
+ const mockHandler = async () => {
67
+ // Mock handler that does nothing
68
+ };
69
+
70
+ registerCommand({
71
+ name: "mock",
72
+ description: "Mock command",
73
+ handler: mockHandler,
74
+ });
75
+
76
+ const registry = getCommandRegistry();
77
+ const cmd = registry.get("mock");
78
+ expect(cmd).toBeDefined();
79
+ expect(cmd?.name).toBe("mock");
80
+ expect(cmd?.description).toBe("Mock command");
81
+ expect(cmd?.handler).toBe(mockHandler);
82
+ });
83
+ });
84
+ });
@@ -0,0 +1,137 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { CommandHistory } from "../history.js";
3
+ import * as fs from "fs/promises";
4
+ import * as path from "path";
5
+ import { tmpdir } from "os";
6
+
7
+ describe("CommandHistory", () => {
8
+ let tempDir: string;
9
+ let history: CommandHistory;
10
+
11
+ beforeEach(async () => {
12
+ // Create a temporary directory for testing
13
+ tempDir = path.join(tmpdir(), `raxflow-test-${Date.now()}`);
14
+ await fs.mkdir(tempDir, { recursive: true });
15
+ history = new CommandHistory(tempDir);
16
+ });
17
+
18
+ afterEach(async () => {
19
+ // Clean up temporary directory
20
+ try {
21
+ await fs.rm(tempDir, { recursive: true });
22
+ } catch {
23
+ // Ignore cleanup errors
24
+ }
25
+ });
26
+
27
+ describe("add", () => {
28
+ it("should add a command to history", () => {
29
+ history.add("status");
30
+ expect(history.getAll()).toContain("status");
31
+ });
32
+
33
+ it("should not add duplicate consecutive commands", () => {
34
+ history.add("status");
35
+ history.add("status");
36
+ expect(history.getAll().filter(c => c === "status").length).toBe(1);
37
+ });
38
+
39
+ it("should allow same command if not consecutive", () => {
40
+ history.add("status");
41
+ history.add("agents");
42
+ history.add("status");
43
+ expect(history.getAll()).toEqual(["status", "agents", "status"]);
44
+ });
45
+ });
46
+
47
+ describe("up/down navigation", () => {
48
+ it("should return undefined when navigating up on empty history", () => {
49
+ expect(history.up()).toBeUndefined();
50
+ });
51
+
52
+ it("should return commands when navigating up", () => {
53
+ history.add("status");
54
+ history.add("agents");
55
+ history.add("run test");
56
+
57
+ expect(history.up()).toBe("run test");
58
+ expect(history.up()).toBe("agents");
59
+ expect(history.up()).toBe("status");
60
+ });
61
+
62
+ it("should stop at the beginning when navigating up", () => {
63
+ history.add("status");
64
+ history.up();
65
+ expect(history.up()).toBeUndefined();
66
+ });
67
+
68
+ it("should navigate down after navigating up", () => {
69
+ history.add("status");
70
+ history.add("agents");
71
+ history.up();
72
+ history.up();
73
+ expect(history.down()).toBe("agents");
74
+ });
75
+
76
+ it("should return undefined when navigating down past the end", () => {
77
+ history.add("status");
78
+ history.down();
79
+ expect(history.down()).toBeUndefined();
80
+ });
81
+ });
82
+
83
+ describe("save and load", () => {
84
+ it("should save history to file", async () => {
85
+ history.add("status");
86
+ history.add("agents");
87
+ await history.save();
88
+
89
+ const historyPath = path.join(tempDir, ".rax", "history.json");
90
+ const content = await fs.readFile(historyPath, "utf-8");
91
+ const saved = JSON.parse(content);
92
+ expect(saved).toEqual(["status", "agents"]);
93
+ });
94
+
95
+ it("should load history from file", async () => {
96
+ // Setup: Create history file
97
+ const raxDir = path.join(tempDir, ".rax");
98
+ await fs.mkdir(raxDir, { recursive: true });
99
+ const historyPath = path.join(raxDir, "history.json");
100
+ await fs.writeFile(historyPath, JSON.stringify(["status", "agents"]));
101
+
102
+ // Load and verify
103
+ const newHistory = new CommandHistory(tempDir);
104
+ await newHistory.load();
105
+ expect(newHistory.getAll()).toEqual(["status", "agents"]);
106
+ });
107
+
108
+ it("should handle missing history file gracefully", async () => {
109
+ await history.load();
110
+ expect(history.getAll()).toEqual([]);
111
+ });
112
+
113
+ it("should limit history to last 1000 commands", async () => {
114
+ // Add 1005 commands
115
+ for (let i = 0; i < 1005; i++) {
116
+ history.add(`command-${i}`);
117
+ }
118
+ await history.save();
119
+
120
+ const historyPath = path.join(tempDir, ".rax", "history.json");
121
+ const content = await fs.readFile(historyPath, "utf-8");
122
+ const saved = JSON.parse(content);
123
+ expect(saved.length).toBe(1000);
124
+ expect(saved[0]).toBe("command-5"); // First 5 should be removed
125
+ expect(saved[saved.length - 1]).toBe("command-1004");
126
+ });
127
+ });
128
+
129
+ describe("getAll", () => {
130
+ it("should return copy of history array", () => {
131
+ history.add("status");
132
+ const all = history.getAll();
133
+ all.push("modified");
134
+ expect(history.getAll()).not.toContain("modified");
135
+ });
136
+ });
137
+ });
@@ -0,0 +1,105 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { parseCommand, getCompletions } from "../parser.js";
3
+ import { HubContext } from "../types.js";
4
+
5
+ describe("parseCommand", () => {
6
+ it("should parse a simple command", () => {
7
+ const result = parseCommand("status");
8
+ expect(result.name).toBe("status");
9
+ expect(result.args).toEqual([]);
10
+ expect(result.flags).toEqual({});
11
+ });
12
+
13
+ it("should parse a command with arguments", () => {
14
+ const result = parseCommand("run Create an API");
15
+ expect(result.name).toBe("run");
16
+ expect(result.args).toEqual(["Create", "an", "API"]);
17
+ expect(result.flags).toEqual({});
18
+ });
19
+
20
+ it("should parse a command with long flags", () => {
21
+ const result = parseCommand("run --workflow test.json --stream Create API");
22
+ expect(result.name).toBe("run");
23
+ expect(result.args).toEqual(["Create", "API"]);
24
+ expect(result.flags).toEqual({
25
+ workflow: "test.json",
26
+ stream: true,
27
+ });
28
+ });
29
+
30
+ it("should parse a command with short flags", () => {
31
+ const result = parseCommand("logs -f --agent CodeGenerator");
32
+ expect(result.name).toBe("logs");
33
+ expect(result.args).toEqual([]);
34
+ expect(result.flags).toEqual({
35
+ f: true,
36
+ agent: "CodeGenerator",
37
+ });
38
+ });
39
+
40
+ it("should parse mixed flags and arguments", () => {
41
+ const result = parseCommand("run --json --max-parallel 6 Create API");
42
+ expect(result.name).toBe("run");
43
+ expect(result.args).toEqual(["Create", "API"]);
44
+ expect(result.flags).toEqual({
45
+ json: true,
46
+ "max-parallel": "6",
47
+ });
48
+ });
49
+
50
+ it("should handle empty input", () => {
51
+ const result = parseCommand("");
52
+ expect(result.name).toBe("");
53
+ expect(result.args).toEqual([]);
54
+ expect(result.flags).toEqual({});
55
+ });
56
+
57
+ it("should handle whitespace-only input", () => {
58
+ const result = parseCommand(" ");
59
+ expect(result.name).toBe("");
60
+ expect(result.args).toEqual([]);
61
+ expect(result.flags).toEqual({});
62
+ });
63
+ });
64
+
65
+ describe("getCompletions", () => {
66
+ it("should return all commands for empty input", () => {
67
+ const completions = getCompletions("");
68
+ expect(completions).toContain("run");
69
+ expect(completions).toContain("status");
70
+ expect(completions).toContain("agents");
71
+ expect(completions).toContain("exit");
72
+ expect(completions.length).toBeGreaterThan(10);
73
+ });
74
+
75
+ it("should filter commands by prefix", () => {
76
+ const completions = getCompletions("sta");
77
+ expect(completions).toContain("status");
78
+ expect(completions.every(c => c.startsWith("sta"))).toBe(true);
79
+ });
80
+
81
+ it("should suggest run flags after 'run' command", () => {
82
+ const completions = getCompletions("run ");
83
+ expect(completions).toContain("--workflow");
84
+ expect(completions).toContain("--max-parallel");
85
+ expect(completions).toContain("--stream");
86
+ expect(completions).toContain("--json");
87
+ });
88
+
89
+ it("should suggest log flags after 'logs' command", () => {
90
+ const completions = getCompletions("logs ");
91
+ expect(completions).toContain("-f");
92
+ expect(completions).toContain("--agent");
93
+ expect(completions).toContain("--level");
94
+ });
95
+
96
+ it("should return empty array for unknown command context", () => {
97
+ const completions = getCompletions("unknowncommand ");
98
+ expect(completions).toEqual([]);
99
+ });
100
+
101
+ it("should handle partial flag completion", () => {
102
+ const completions = getCompletions("run --work");
103
+ expect(completions).toContain("--workflow");
104
+ });
105
+ });
@@ -0,0 +1,53 @@
1
+ import { HubContext } from "../types.js";
2
+ import { drawBox } from "../styles/borders.js";
3
+ import { colorize, formatStatus, providerIndicators } from "../styles/colors.js";
4
+ import { padRight } from "../styles/typography.js";
5
+
6
+ interface AgentInfo {
7
+ name: string;
8
+ role: string;
9
+ status: string;
10
+ provider: string;
11
+ lastExecution: string;
12
+ avgResponseTime: string;
13
+ }
14
+
15
+ export async function listAgents(_args: string[], _flags: Record<string, string | boolean>, _context: HubContext): Promise<void> {
16
+ const width = 75;
17
+
18
+ // Agent definitions from official-agents
19
+ const agents: AgentInfo[] = [
20
+ { name: "IntentClassifier", role: "Classify user intent", status: "online", provider: "host", lastExecution: "2s ago", avgResponseTime: "45ms" },
21
+ { name: "Brainstorm", role: "Generate ideas", status: "online", provider: "host", lastExecution: "5m ago", avgResponseTime: "120ms" },
22
+ { name: "Spec", role: "Write specifications", status: "online", provider: "host", lastExecution: "1m ago", avgResponseTime: "89ms" },
23
+ { name: "Architecture", role: "Design architecture", status: "online", provider: "host", lastExecution: "3m ago", avgResponseTime: "156ms" },
24
+ { name: "TaskPlanner", role: "Decompose to DAG", status: "online", provider: "host", lastExecution: "2s ago", avgResponseTime: "34ms" },
25
+ { name: "CodeGenerator", role: "Generate code", status: "running", provider: "host", lastExecution: "running", avgResponseTime: "234ms" },
26
+ { name: "Test", role: "Run tests", status: "queued", provider: "host", lastExecution: "--", avgResponseTime: "--" },
27
+ { name: "Validator", role: "Validate outputs", status: "online", provider: "host", lastExecution: "1m ago", avgResponseTime: "67ms" },
28
+ { name: "Fix", role: "Patch defects", status: "online", provider: "host", lastExecution: "2m ago", avgResponseTime: "89ms" },
29
+ { name: "Optimizer", role: "Optimize performance", status: "idle", provider: "anthropic", lastExecution: "1h ago", avgResponseTime: "178ms" },
30
+ { name: "Documentation", role: "Generate docs", status: "online", provider: "host", lastExecution: "5m ago", avgResponseTime: "145ms" },
31
+ { name: "Benchmark", role: "Run benchmarks", status: "idle", provider: "host", lastExecution: "2h ago", avgResponseTime: "567ms" },
32
+ ];
33
+
34
+ const lines: string[] = [];
35
+
36
+ // Header
37
+ lines.push(` ${colorize("AGENT", "bright")} ${colorize("ROLE", "bright")} ${colorize("STATUS", "bright")} ${colorize("PROVIDER", "bright")} ${colorize("LAST RUN", "bright")}`);
38
+ lines.push(" " + "─".repeat(71));
39
+
40
+ // Agent list
41
+ for (const agent of agents) {
42
+ const indicator = formatStatus(agent.status);
43
+ const providerTag = providerIndicators[agent.provider] || "[?]";
44
+ const statusColor = agent.status === "running" ? "yellow" : agent.status === "queued" ? "gray" : "green";
45
+
46
+ lines.push(` ${padRight(agent.name, 16)} ${padRight(agent.role.slice(0, 17), 18)} ${indicator} ${colorize(agent.status.toUpperCase().padEnd(8), statusColor)} ${providerTag} ${colorize(agent.lastExecution, "gray")}`);
47
+ }
48
+
49
+ lines.push("");
50
+ lines.push(` ${colorize("Legend:", "bright")} ● online ○ idle ▶ running ◐ queued`);
51
+
52
+ console.log(drawBox(lines, width, "AGENTS"));
53
+ }
@@ -0,0 +1,140 @@
1
+ import { CommandDefinition } from "../types.js";
2
+ import { showStatus } from "./status.js";
3
+ import { listAgents } from "./agents.js";
4
+ import { runWorkflow } from "./run.js";
5
+ import { listProviders } from "./providers.js";
6
+ import { listWorkflows } from "./workflows.js";
7
+ import { showLogs } from "./logs.js";
8
+ import { showMetrics } from "./metrics.js";
9
+ import { showMemory } from "./memory.js";
10
+ import { startTUI } from "../../tui/index.js";
11
+
12
+ const commands = new Map<string, CommandDefinition>();
13
+
14
+ export function registerCommand(def: CommandDefinition): void {
15
+ commands.set(def.name, def);
16
+ if (def.aliases) {
17
+ for (const alias of def.aliases) {
18
+ commands.set(alias, def);
19
+ }
20
+ }
21
+ }
22
+
23
+ export function getCommandRegistry(): Map<string, CommandDefinition> {
24
+ return commands;
25
+ }
26
+
27
+ registerCommand({
28
+ name: "help",
29
+ aliases: ["?"],
30
+ description: "Affiche l'aide",
31
+ handler: async () => {
32
+ console.log(`
33
+ Commandes disponibles:
34
+ • run <prompt> : Exécuter un workflow
35
+ • status : Voir l'état du système
36
+ • agents : Liste des agents
37
+ • providers : État des providers
38
+ • workflows : Blueprints disponibles
39
+ • logs : Logs en temps réel
40
+ • metrics : Métriques de performance
41
+ • memory : Graph QSGM
42
+ • dashboard : Ouvrir dashboard web
43
+ • ui : Mode TUI plein écran
44
+ • chat : Mode conversationnel
45
+ • help : Cette aide
46
+ • exit : Quitter
47
+ `);
48
+ },
49
+ });
50
+
51
+ registerCommand({
52
+ name: "exit",
53
+ aliases: ["quit"],
54
+ description: "Quitte le hub",
55
+ handler: async () => {
56
+ },
57
+ });
58
+
59
+ registerCommand({
60
+ name: "status",
61
+ description: "Affiche le statut du système",
62
+ handler: showStatus,
63
+ });
64
+
65
+ registerCommand({
66
+ name: "agents",
67
+ description: "Liste les agents disponibles",
68
+ handler: listAgents,
69
+ });
70
+
71
+ registerCommand({
72
+ name: "providers",
73
+ description: "Liste les providers configurés",
74
+ handler: listProviders,
75
+ });
76
+
77
+ registerCommand({
78
+ name: "workflows",
79
+ description: "Liste les workflows disponibles",
80
+ handler: listWorkflows,
81
+ });
82
+
83
+ registerCommand({
84
+ name: "logs",
85
+ description: "Affiche les logs en temps réel",
86
+ handler: showLogs,
87
+ });
88
+
89
+ registerCommand({
90
+ name: "metrics",
91
+ description: "Affiche les métriques de performance",
92
+ handler: showMetrics,
93
+ });
94
+
95
+ registerCommand({
96
+ name: "memory",
97
+ description: "Affiche le statut de la mémoire",
98
+ handler: showMemory,
99
+ });
100
+
101
+ registerCommand({
102
+ name: "run",
103
+ description: "Exécute un workflow avec le prompt spécifié",
104
+ handler: runWorkflow,
105
+ });
106
+
107
+ registerCommand({
108
+ name: "ui",
109
+ description: "Lance le mode TUI plein écran",
110
+ handler: async () => {
111
+ console.log("\n🎬 Lancement du mode TUI...\n");
112
+ const { waitUntilExit } = startTUI();
113
+ await waitUntilExit();
114
+ },
115
+ });
116
+
117
+ registerCommand({
118
+ name: "chat",
119
+ description: "Lance le mode conversationnel",
120
+ handler: async () => {
121
+ console.log("\n💬 Lancement du mode Chat (TUI)...\n");
122
+ const { waitUntilExit } = startTUI();
123
+ await waitUntilExit();
124
+ },
125
+ });
126
+
127
+ const placeholderCommands = [
128
+ "install", "config", "doctor", "bridge-test", "benchmark",
129
+ "evolve", "dashboard"
130
+ ];
131
+
132
+ for (const cmd of placeholderCommands) {
133
+ registerCommand({
134
+ name: cmd,
135
+ description: `Commande ${cmd}`,
136
+ handler: async () => {
137
+ console.log(`⚠️ Commande '${cmd}' sera implémentée dans une phase ultérieure`);
138
+ },
139
+ });
140
+ }
@@ -0,0 +1,70 @@
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
+ }
@@ -0,0 +1,47 @@
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
+ }
@@ -0,0 +1,49 @@
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
+ }