@ranker/raxflow 0.2.1 → 0.2.3

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 (214) hide show
  1. package/dist/benchmark.d.ts +10 -0
  2. package/dist/bin.d.ts +3 -0
  3. package/dist/bootstrap.d.ts +8 -0
  4. package/dist/bridge-adapter-templates.d.ts +4 -0
  5. package/dist/bridge-test.d.ts +7 -0
  6. package/dist/dashboard.d.ts +4 -0
  7. package/dist/doctor.d.ts +6 -0
  8. package/dist/evolve.d.ts +7 -0
  9. package/dist/host-init-templates.d.ts +16 -0
  10. package/dist/hub/__tests__/commands.test.d.ts +2 -0
  11. package/dist/hub/__tests__/history.test.d.ts +2 -0
  12. package/dist/hub/__tests__/parser.test.d.ts +2 -0
  13. package/dist/hub/commands/agents.d.ts +3 -0
  14. package/dist/hub/commands/index.d.ts +4 -0
  15. package/dist/hub/commands/logs.d.ts +3 -0
  16. package/dist/hub/commands/memory.d.ts +3 -0
  17. package/dist/hub/commands/metrics.d.ts +3 -0
  18. package/dist/hub/commands/providers.d.ts +3 -0
  19. package/dist/hub/commands/run.d.ts +3 -0
  20. package/dist/hub/commands/status.d.ts +3 -0
  21. package/dist/hub/commands/workflows.d.ts +3 -0
  22. package/dist/hub/config-loader.d.ts +4 -0
  23. package/dist/hub/history.d.ts +13 -0
  24. package/dist/hub/index.d.ts +4 -0
  25. package/dist/hub/parser.d.ts +4 -0
  26. package/dist/hub/styles/borders.d.ts +23 -0
  27. package/dist/hub/styles/colors.d.ts +63 -0
  28. package/dist/hub/styles/typography.d.ts +34 -0
  29. package/dist/hub/types.d.ts +27 -0
  30. package/{src/index.ts → dist/index.d.ts} +1 -0
  31. package/dist/init-host.d.ts +10 -0
  32. package/dist/install.d.ts +8 -0
  33. package/dist/run.d.ts +16 -0
  34. package/dist/setup/components/ProviderSelector.d.ts.map +1 -1
  35. package/dist/setup/components/ProviderSelector.js +8 -7
  36. package/dist/setup/components/ProviderSelector.js.map +1 -1
  37. package/dist/styles.d.ts +12 -0
  38. package/dist/tui/App.d.ts.map +1 -1
  39. package/dist/tui/App.js +7 -2
  40. package/dist/tui/App.js.map +1 -1
  41. package/dist/tui/components/ChatPanel.d.ts +1 -0
  42. package/dist/tui/components/ChatPanel.d.ts.map +1 -1
  43. package/dist/tui/components/ChatPanel.js +4 -3
  44. package/dist/tui/components/ChatPanel.js.map +1 -1
  45. package/dist/tui/components/DAGPanel.d.ts +1 -0
  46. package/dist/tui/components/DAGPanel.d.ts.map +1 -1
  47. package/dist/tui/components/DAGPanel.js +4 -3
  48. package/dist/tui/components/DAGPanel.js.map +1 -1
  49. package/dist/tui/components/Header.d.ts.map +1 -1
  50. package/dist/tui/components/Header.js +1 -1
  51. package/dist/tui/components/Header.js.map +1 -1
  52. package/dist/tui/components/InputBar.d.ts.map +1 -1
  53. package/dist/tui/components/InputBar.js +1 -1
  54. package/dist/tui/components/InputBar.js.map +1 -1
  55. package/dist/tui/components/LogsPanel.d.ts +1 -0
  56. package/dist/tui/components/LogsPanel.d.ts.map +1 -1
  57. package/dist/tui/components/LogsPanel.js +4 -3
  58. package/dist/tui/components/LogsPanel.js.map +1 -1
  59. package/dist/tui/components/MemoryPanel.d.ts +1 -0
  60. package/dist/tui/components/MemoryPanel.d.ts.map +1 -1
  61. package/dist/tui/components/MemoryPanel.js +2 -2
  62. package/dist/tui/components/MemoryPanel.js.map +1 -1
  63. package/dist/tui/components/MetricsPanel.d.ts +1 -0
  64. package/dist/tui/components/MetricsPanel.d.ts.map +1 -1
  65. package/dist/tui/components/MetricsPanel.js +2 -2
  66. package/dist/tui/components/MetricsPanel.js.map +1 -1
  67. package/dist/tui/components/StatusPanel.d.ts +1 -0
  68. package/dist/tui/components/StatusPanel.d.ts.map +1 -1
  69. package/dist/tui/components/StatusPanel.js +4 -3
  70. package/dist/tui/components/StatusPanel.js.map +1 -1
  71. package/dist/vendor-manifests.d.ts +22 -0
  72. package/package.json +5 -1
  73. package/dashboard/index.html +0 -420
  74. package/dist/hub/chat/ChatApp.d.ts +0 -2
  75. package/dist/hub/chat/ChatApp.d.ts.map +0 -1
  76. package/dist/hub/chat/ChatApp.js +0 -146
  77. package/dist/hub/chat/ChatApp.js.map +0 -1
  78. package/dist/hub/chat/components/ChatInput.d.ts +0 -9
  79. package/dist/hub/chat/components/ChatInput.d.ts.map +0 -1
  80. package/dist/hub/chat/components/ChatInput.js +0 -19
  81. package/dist/hub/chat/components/ChatInput.js.map +0 -1
  82. package/dist/hub/chat/components/MessageList.d.ts +0 -7
  83. package/dist/hub/chat/components/MessageList.d.ts.map +0 -1
  84. package/dist/hub/chat/components/MessageList.js +0 -6
  85. package/dist/hub/chat/components/MessageList.js.map +0 -1
  86. package/dist/hub/chat/context.d.ts.map +0 -1
  87. package/dist/hub/chat/context.js +0 -42
  88. package/dist/hub/chat/context.js.map +0 -1
  89. package/dist/hub/chat/hooks/useChatHistory.d.ts +0 -7
  90. package/dist/hub/chat/hooks/useChatHistory.d.ts.map +0 -1
  91. package/dist/hub/chat/hooks/useChatHistory.js +0 -31
  92. package/dist/hub/chat/hooks/useChatHistory.js.map +0 -1
  93. package/dist/hub/chat/index.d.ts.map +0 -1
  94. package/dist/hub/chat/index.js +0 -7
  95. package/dist/hub/chat/index.js.map +0 -1
  96. package/dist/hub/chat/intent-parser.d.ts.map +0 -1
  97. package/dist/hub/chat/intent-parser.js +0 -48
  98. package/dist/hub/chat/intent-parser.js.map +0 -1
  99. package/dist/hub/chat/types.d.ts.map +0 -1
  100. package/dist/hub/chat/types.js +0 -2
  101. package/dist/hub/chat/types.js.map +0 -1
  102. package/dist/hub/tui/App.d.ts +0 -2
  103. package/dist/hub/tui/App.d.ts.map +0 -1
  104. package/dist/hub/tui/App.js +0 -53
  105. package/dist/hub/tui/App.js.map +0 -1
  106. package/dist/hub/tui/components/AgentQueue.d.ts +0 -6
  107. package/dist/hub/tui/components/AgentQueue.d.ts.map +0 -1
  108. package/dist/hub/tui/components/AgentQueue.js +0 -20
  109. package/dist/hub/tui/components/AgentQueue.js.map +0 -1
  110. package/dist/hub/tui/components/DAGPanel.d.ts +0 -16
  111. package/dist/hub/tui/components/DAGPanel.d.ts.map +0 -1
  112. package/dist/hub/tui/components/DAGPanel.js +0 -51
  113. package/dist/hub/tui/components/DAGPanel.js.map +0 -1
  114. package/dist/hub/tui/components/Header.d.ts +0 -7
  115. package/dist/hub/tui/components/Header.d.ts.map +0 -1
  116. package/dist/hub/tui/components/Header.js +0 -17
  117. package/dist/hub/tui/components/Header.js.map +0 -1
  118. package/dist/hub/tui/components/LogsPanel.d.ts +0 -6
  119. package/dist/hub/tui/components/LogsPanel.d.ts.map +0 -1
  120. package/dist/hub/tui/components/LogsPanel.js +0 -26
  121. package/dist/hub/tui/components/LogsPanel.js.map +0 -1
  122. package/dist/hub/tui/components/StatusBar.d.ts +0 -8
  123. package/dist/hub/tui/components/StatusBar.d.ts.map +0 -1
  124. package/dist/hub/tui/components/StatusBar.js +0 -7
  125. package/dist/hub/tui/components/StatusBar.js.map +0 -1
  126. package/dist/hub/tui/hooks/useEvents.d.ts +0 -2
  127. package/dist/hub/tui/hooks/useEvents.d.ts.map +0 -1
  128. package/dist/hub/tui/hooks/useEvents.js +0 -13
  129. package/dist/hub/tui/hooks/useEvents.js.map +0 -1
  130. package/dist/hub/tui/index.d.ts.map +0 -1
  131. package/dist/hub/tui/index.js +0 -7
  132. package/dist/hub/tui/index.js.map +0 -1
  133. package/dist/hub/tui/types.d.ts.map +0 -1
  134. package/dist/hub/tui/types.js +0 -2
  135. package/dist/hub/tui/types.js.map +0 -1
  136. package/src/benchmark.ts +0 -156
  137. package/src/bin.ts +0 -156
  138. package/src/bootstrap.ts +0 -36
  139. package/src/bridge-adapter-templates.ts +0 -181
  140. package/src/bridge-test.ts +0 -107
  141. package/src/dashboard.ts +0 -51
  142. package/src/doctor.ts +0 -92
  143. package/src/evolve.ts +0 -74
  144. package/src/host-init-templates.ts +0 -134
  145. package/src/hub/__tests__/commands.test.ts +0 -84
  146. package/src/hub/__tests__/history.test.ts +0 -137
  147. package/src/hub/__tests__/parser.test.ts +0 -105
  148. package/src/hub/commands/agents.ts +0 -53
  149. package/src/hub/commands/index.ts +0 -140
  150. package/src/hub/commands/logs.ts +0 -70
  151. package/src/hub/commands/memory.ts +0 -47
  152. package/src/hub/commands/metrics.ts +0 -49
  153. package/src/hub/commands/providers.ts +0 -39
  154. package/src/hub/commands/run.ts +0 -37
  155. package/src/hub/commands/status.ts +0 -69
  156. package/src/hub/commands/workflows.ts +0 -64
  157. package/src/hub/config-loader.ts +0 -37
  158. package/src/hub/event-listener.ts +0 -17
  159. package/src/hub/history.ts +0 -66
  160. package/src/hub/index.ts +0 -132
  161. package/src/hub/parser.ts +0 -107
  162. package/src/hub/styles/borders.ts +0 -74
  163. package/src/hub/styles/colors.ts +0 -129
  164. package/src/hub/styles/typography.ts +0 -68
  165. package/src/hub/types.ts +0 -31
  166. package/src/init-host.ts +0 -285
  167. package/src/install.ts +0 -118
  168. package/src/run.ts +0 -317
  169. package/src/setup/components/ApiKeyInput.tsx +0 -158
  170. package/src/setup/components/AsciiBanner.tsx +0 -125
  171. package/src/setup/components/CliDetector.tsx +0 -230
  172. package/src/setup/components/ModeSelector.tsx +0 -137
  173. package/src/setup/components/ProviderSelector.tsx +0 -174
  174. package/src/setup/components/SetupWizard.tsx +0 -368
  175. package/src/setup/components/StepIndicator.tsx +0 -74
  176. package/src/setup/components/SuccessScreen.tsx +0 -229
  177. package/src/setup/index.ts +0 -34
  178. package/src/setup/utils/cli-detection.ts +0 -99
  179. package/src/setup/utils/config-writer.ts +0 -249
  180. package/src/styles.ts +0 -12
  181. package/src/tui/App.tsx +0 -177
  182. package/src/tui/components/AgentStateIcon.tsx +0 -84
  183. package/src/tui/components/AnimatedBranch.tsx +0 -134
  184. package/src/tui/components/ChatPanel.tsx +0 -125
  185. package/src/tui/components/DAGPanel.tsx +0 -208
  186. package/src/tui/components/ExecutionTimeline.tsx +0 -225
  187. package/src/tui/components/Header.tsx +0 -109
  188. package/src/tui/components/HelpOverlay.tsx +0 -140
  189. package/src/tui/components/InputBar.tsx +0 -69
  190. package/src/tui/components/LogsPanel.tsx +0 -129
  191. package/src/tui/components/MemoryPanel.tsx +0 -163
  192. package/src/tui/components/MetricsPanel.tsx +0 -149
  193. package/src/tui/components/StatusPanel.tsx +0 -137
  194. package/src/tui/components/TaskTree.tsx +0 -159
  195. package/src/tui/components/animations/ProgressBar.tsx +0 -160
  196. package/src/tui/components/animations/Pulse.tsx +0 -73
  197. package/src/tui/components/animations/Spinner.tsx +0 -54
  198. package/src/tui/components/animations/StatusAnimator.tsx +0 -153
  199. package/src/tui/components/animations/TypingEffect.tsx +0 -119
  200. package/src/tui/components/animations/index.ts +0 -16
  201. package/src/tui/hooks/useAnimation.ts +0 -290
  202. package/src/tui/hooks/useAppState.ts +0 -403
  203. package/src/tui/index.ts +0 -9
  204. package/src/tui/services/orchestrator.ts +0 -195
  205. package/src/tui/styles/borders.ts +0 -51
  206. package/src/tui/styles/colors.ts +0 -19
  207. package/src/tui/styles/index.ts +0 -20
  208. package/src/tui/styles/indicators.ts +0 -54
  209. package/src/tui/styles/layout.ts +0 -44
  210. package/src/tui/styles/providers.ts +0 -32
  211. package/src/tui/utils/animation.ts +0 -124
  212. package/src/vendor-manifests.ts +0 -113
  213. package/src/ws-relay.ts +0 -156
  214. package/tsconfig.json +0 -28
@@ -1,54 +0,0 @@
1
- export const statusIndicators = {
2
- online: { icon: "●", color: "#22c55e" },
3
- offline: { icon: "○", color: "#71717a" },
4
- pending: { icon: "○", color: "#71717a" },
5
- running: { icon: "▶", color: "#f97316" },
6
- loading: { icon: "◐", color: "#f59e0b" },
7
- queued: { icon: "◐", color: "#f59e0b" },
8
- done: { icon: "●", color: "#22c55e" },
9
- success: { icon: "●", color: "#22c55e" },
10
- error: { icon: "✗", color: "#ef4444" },
11
- mutation: { icon: "◆", color: "#f59e0b" },
12
- checkpoint: { icon: "■", color: "#f97316" },
13
- idle: { icon: "○", color: "#71717a" },
14
- };
15
-
16
- export function getStatusIndicator(status: string): { icon: string; color: string } {
17
- const normalized = status.toLowerCase();
18
- return statusIndicators[normalized as keyof typeof statusIndicators] || statusIndicators.pending;
19
- }
20
-
21
- export const spinnerFrames = ["◐", "◓", "◑", "◒"];
22
-
23
- export const dotsSpinnerFrames = ["⠋", "⠙", "⠹", "⠸", "⼸", "⠴", "⠦", "⠧", "⠇", "⠏"];
24
-
25
- export const circleSpinnerFrames = ["◐", "◓", "◑", "◒"];
26
-
27
- export const pulseFrames = ["●", "◐", "○", "◐"];
28
-
29
- export const breathFrames = ["●", "●", "◐", "◐", "○", "○", "◐", "◐"];
30
-
31
- export const progressMarkerFrames = ["▶", "▸", "▶", "▸"];
32
-
33
- export const progressGlowFrames = ["█", "▓", "█", "▓"];
34
-
35
- export function getSpinnerFrame(tick: number, type: "circle" | "dots" | "pulse" = "circle"): string {
36
- const frames = type === "dots" ? dotsSpinnerFrames : type === "pulse" ? pulseFrames : circleSpinnerFrames;
37
- return frames[tick % frames.length];
38
- }
39
-
40
- export function getPulseFrame(tick: number): string {
41
- return pulseFrames[tick % pulseFrames.length];
42
- }
43
-
44
- export function getBreathFrame(tick: number): string {
45
- return breathFrames[tick % breathFrames.length];
46
- }
47
-
48
- export function getProgressMarker(tick: number): string {
49
- return progressMarkerFrames[tick % progressMarkerFrames.length];
50
- }
51
-
52
- export function getProgressGlow(tick: number): string {
53
- return progressGlowFrames[tick % progressGlowFrames.length];
54
- }
@@ -1,44 +0,0 @@
1
- export const layout = {
2
- defaultWidth: 80,
3
- panelWidth: {
4
- chat: 40,
5
- dag: 38,
6
- status: 28,
7
- logs: 32,
8
- metrics: 28,
9
- memory: 30,
10
- },
11
- padding: {
12
- x: 1,
13
- y: 0,
14
- },
15
- progressWidth: 16,
16
- };
17
-
18
- export function formatTimestamp(date: Date): string {
19
- return date.toLocaleTimeString("fr-FR", {
20
- hour: "2-digit",
21
- minute: "2-digit",
22
- second: "2-digit",
23
- });
24
- }
25
-
26
- export function formatTimestampMs(date: Date): string {
27
- const time = date.toLocaleTimeString("fr-FR", {
28
- hour: "2-digit",
29
- minute: "2-digit",
30
- second: "2-digit",
31
- });
32
- const ms = String(date.getMilliseconds()).padStart(3, "0");
33
- return `${time}.${ms}`;
34
- }
35
-
36
- export function padRight(text: string, width: number): string {
37
- const padding = Math.max(0, width - text.length);
38
- return text + " ".repeat(padding);
39
- }
40
-
41
- export function truncate(text: string, maxLength: number): string {
42
- if (text.length <= maxLength) return text;
43
- return text.slice(0, maxLength - 3) + "...";
44
- }
@@ -1,32 +0,0 @@
1
- export const providerTags = {
2
- host: { code: "[H]", name: "Host-Native" },
3
- claude: { code: "[C]", name: "Claude Code" },
4
- opencode: { code: "[O]", name: "OpenCode" },
5
- kilo: { code: "[K]", name: "Kilo" },
6
- anthropic: { code: "[A]", name: "Anthropic API" },
7
- gemini: { code: "[G]", name: "Gemini" },
8
- mistral: { code: "[M]", name: "Mistral" },
9
- groq: { code: "[Q]", name: "Groq" },
10
- openai: { code: "[O]", name: "OpenAI" },
11
- };
12
-
13
- export function getProviderTag(provider: string): { code: string; name: string } {
14
- const normalized = provider.toLowerCase().replace(/[-_\s]/g, "");
15
- for (const [key, value] of Object.entries(providerTags)) {
16
- if (normalized.includes(key)) {
17
- return value;
18
- }
19
- }
20
- return { code: "[?]", name: provider };
21
- }
22
-
23
- export const logStatusTags = {
24
- run: { tag: "[RUN]", color: "#f97316" },
25
- success: { tag: "[SUCCESS]", color: "#22c55e" },
26
- warn: { tag: "[WARN]", color: "#f59e0b" },
27
- error: { tag: "[ERROR]", color: "#ef4444" },
28
- info: { tag: "[INFO]", color: "#a1a1aa" },
29
- mutate: { tag: "[MUTATE]", color: "#f59e0b" },
30
- done: { tag: "[DONE]", color: "#22c55e" },
31
- start: { tag: "[START]", color: "#f97316" },
32
- };
@@ -1,124 +0,0 @@
1
- export const spinnerSequences = {
2
- dots: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
3
- line: ["─", "┐", "│", "┌"],
4
- circle: ["◐", "◓", "◑", "◒"],
5
- pulse: ["●", "◐", "○", "◐"],
6
- bounce: ["⠁", "⠃", "⠇", "⡇", "⣇", "⣧", "⣷", "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣭", "⣩", "⣈", "⡈", "⠈"],
7
- triangle: ["◢", "◣", "◤", "◥"],
8
- square: ["◰", "◳", "◲", "◱"],
9
- };
10
-
11
- export const glowChars = ["░", "▒", "▓", "█"];
12
-
13
- export const progressChars = {
14
- empty: "░",
15
- quarter: "▒",
16
- half: "▓",
17
- full: "█",
18
- head: "▶",
19
- marker: "↑",
20
- };
21
-
22
- export const scanlineChars = ["─", "━", "═", "━"];
23
-
24
- export function getSpinnerFrame(tick: number, type: keyof typeof spinnerSequences = "dots"): string {
25
- const frames = spinnerSequences[type];
26
- return frames[tick % frames.length];
27
- }
28
-
29
- export function getGlowChar(intensity: number): string {
30
- const index = Math.min(3, Math.max(0, Math.floor(intensity * 4)));
31
- return glowChars[index];
32
- }
33
-
34
- export function easeIn(t: number): number {
35
- return t * t;
36
- }
37
-
38
- export function easeOut(t: number): number {
39
- return 1 - (1 - t) * (1 - t);
40
- }
41
-
42
- export function easeInOut(t: number): number {
43
- return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
44
- }
45
-
46
- export function linear(t: number): number {
47
- return t;
48
- }
49
-
50
- export function pingPong(t: number, min: number = 0, max: number = 1): number {
51
- const cycle = t % 2;
52
- return min + (cycle < 1 ? cycle : 2 - cycle) * (max - min);
53
- }
54
-
55
- export function breathe(t: number, min: number = 0.3, max: number = 1): number {
56
- return min + (Math.sin(t * Math.PI * 2) + 1) / 2 * (max - min);
57
- }
58
-
59
- export function clamp(value: number, min: number, max: number): number {
60
- return Math.min(max, Math.max(min, value));
61
- }
62
-
63
- export function lerp(a: number, b: number, t: number): number {
64
- return a + (b - a) * clamp(t, 0, 1);
65
- }
66
-
67
- export const bracketProgress = {
68
- empty: (width: number = 10): string => `[${".".repeat(width)}]`,
69
- progress: (progress: number, width: number = 10): string => {
70
- const filled = Math.round(progress * width);
71
- const empty = width - filled;
72
- return `[${"=".repeat(filled)}${empty > 0 ? ".".repeat(empty) : ""}]`;
73
- },
74
- animated: (progress: number, tick: number, width: number = 10): string => {
75
- const filled = Math.round(progress * width);
76
- const empty = width - filled;
77
- const head = filled < width ? [">", "=", "-"][tick % 3] : "";
78
- return `[${"=".repeat(Math.max(0, filled - 1))}${head}${empty > 0 ? ".".repeat(empty) : ""}]`;
79
- },
80
- };
81
-
82
- export function createTypewriterEffect(text: string, progress: number): string {
83
- const chars = Math.floor(progress * text.length);
84
- return text.slice(0, chars);
85
- }
86
-
87
- export const statusTransitionAnims = {
88
- idle_to_running: ["○", "◐", "◑", "●", "▶"],
89
- running_to_done: ["▶", "●", "✓"],
90
- running_to_error: ["▶", "◐", "✗"],
91
- pending_to_running: ["○", "◐", "▶"],
92
- };
93
-
94
- export function getStatusTransitionFrame(
95
- from: string,
96
- to: string,
97
- progress: number
98
- ): string {
99
- const key = `${from}_to_${to}` as keyof typeof statusTransitionAnims;
100
- const frames = statusTransitionAnims[key];
101
- if (!frames) return "●";
102
- const index = Math.min(frames.length - 1, Math.floor(progress * frames.length));
103
- return frames[index];
104
- }
105
-
106
- export function generateGridOverlay(width: number, height: number, cellSize: number = 10): string[] {
107
- const lines: string[] = [];
108
- for (let y = 0; y < height; y++) {
109
- let line = "";
110
- for (let x = 0; x < width; x++) {
111
- if (y % cellSize === 0 && x % cellSize === 0) {
112
- line += "┼";
113
- } else if (y % cellSize === 0) {
114
- line += "─";
115
- } else if (x % cellSize === 0) {
116
- line += "│";
117
- } else {
118
- line += " ";
119
- }
120
- }
121
- lines.push(line);
122
- }
123
- return lines;
124
- }
@@ -1,113 +0,0 @@
1
- import path from "node:path";
2
- import { HostTarget } from "./host-init-templates.js";
3
-
4
- export interface HostManifestModel {
5
- version: number;
6
- target: HostTarget;
7
- title: string;
8
- autoInjectMode: "native" | "scripted" | "manual";
9
- bridgeCommand: string;
10
- quickCommands: string[];
11
- sessionEntryExamples: string[];
12
- task: string | null;
13
- files: {
14
- bootstrapPrompt: string;
15
- instructions: string;
16
- bridgeAdapter: string;
17
- bridgeRuntimeConfig: string;
18
- bridgeSmokeTest: string;
19
- vendorManifest: string;
20
- };
21
- }
22
-
23
- function toRelative(baseDir: string, file: string): string {
24
- const rel = path.relative(baseDir, file);
25
- return rel.length > 0 ? rel : path.basename(file);
26
- }
27
-
28
- function buildClaudeManifest(baseDir: string, manifest: HostManifestModel) {
29
- return {
30
- schema: "rax.vendor.claude-code.v1",
31
- session: {
32
- initMessageFile: toRelative(baseDir, manifest.files.bootstrapPrompt),
33
- mode: manifest.autoInjectMode,
34
- bridgeCommand: manifest.bridgeCommand
35
- },
36
- orchestrator: {
37
- tool: "rax-flow",
38
- quickCommands: manifest.quickCommands
39
- }
40
- };
41
- }
42
-
43
- function buildCodexManifest(baseDir: string, manifest: HostManifestModel) {
44
- return {
45
- schema: "rax.vendor.codex.v1",
46
- chat: {
47
- bootstrapFile: toRelative(baseDir, manifest.files.bootstrapPrompt),
48
- strategy: manifest.autoInjectMode
49
- },
50
- runtime: {
51
- bridgeCommand: manifest.bridgeCommand,
52
- taskContext: manifest.task
53
- }
54
- };
55
- }
56
-
57
- function buildOpenCodeManifest(baseDir: string, manifest: HostManifestModel) {
58
- return {
59
- schema: "rax.vendor.opencode.v1",
60
- integration: {
61
- startupPromptFile: toRelative(baseDir, manifest.files.bootstrapPrompt),
62
- launchMode: manifest.autoInjectMode
63
- },
64
- orchestration: {
65
- quickCommands: manifest.quickCommands,
66
- bridgeCommand: manifest.bridgeCommand
67
- }
68
- };
69
- }
70
-
71
- function buildKiloManifest(baseDir: string, manifest: HostManifestModel) {
72
- return {
73
- schema: "rax.vendor.kilo.v1",
74
- initializer: {
75
- promptFile: toRelative(baseDir, manifest.files.bootstrapPrompt),
76
- injectMode: manifest.autoInjectMode
77
- },
78
- runtime: {
79
- bridgeCommand: manifest.bridgeCommand,
80
- commandHints: manifest.sessionEntryExamples
81
- }
82
- };
83
- }
84
-
85
- function buildGenericManifest(baseDir: string, manifest: HostManifestModel) {
86
- return {
87
- schema: "rax.vendor.generic.v1",
88
- bootstrap: {
89
- file: toRelative(baseDir, manifest.files.bootstrapPrompt)
90
- },
91
- bridge: {
92
- command: manifest.bridgeCommand,
93
- mode: manifest.autoInjectMode
94
- },
95
- commands: manifest.quickCommands
96
- };
97
- }
98
-
99
- export function generateVendorManifest(target: HostTarget, baseDir: string, manifest: HostManifestModel): Record<string, unknown> {
100
- if (target === "claude-code") return buildClaudeManifest(baseDir, manifest);
101
- if (target === "codex") return buildCodexManifest(baseDir, manifest);
102
- if (target === "opencode") return buildOpenCodeManifest(baseDir, manifest);
103
- if (target === "kilo") return buildKiloManifest(baseDir, manifest);
104
- return buildGenericManifest(baseDir, manifest);
105
- }
106
-
107
- export function vendorManifestFilename(target: HostTarget): string {
108
- if (target === "claude-code") return "vendor-claude-code.json";
109
- if (target === "codex") return "vendor-codex.json";
110
- if (target === "opencode") return "vendor-opencode.json";
111
- if (target === "kilo") return "vendor-kilo.json";
112
- return "vendor-generic.json";
113
- }
package/src/ws-relay.ts DELETED
@@ -1,156 +0,0 @@
1
- import { WebSocketServer, WebSocket } from "ws";
2
- import { RuntimeEventBus } from "rax-flow-core";
3
- import { readdir, readFile, mkdir, writeFile } from "node:fs/promises";
4
- import path from "node:path";
5
-
6
- export class WebSocketRelay {
7
- private wss: WebSocketServer | null = null;
8
- private clients = new Set<WebSocket>();
9
- private bus: RuntimeEventBus | null = null;
10
-
11
- constructor(private port: number = 3002) { }
12
-
13
- public start(eventBus: RuntimeEventBus): void {
14
- this.bus = eventBus;
15
- try {
16
- this.wss = new WebSocketServer({ port: this.port });
17
- console.log(`\n[UI] 📡 WebSocket relay started on ws://localhost:${this.port}`);
18
-
19
- this.wss.on("connection", (ws) => {
20
- this.clients.add(ws);
21
- ws.send(JSON.stringify({ type: "HELLO", timestamp: Date.now() }));
22
-
23
- ws.on("close", () => {
24
- this.clients.delete(ws);
25
- });
26
-
27
- ws.on("message", async (data) => {
28
- try {
29
- const message = JSON.parse(data.toString());
30
- const historyDir = path.join(process.cwd(), ".rax-flow", "history");
31
-
32
- if (message.type === "GET_HISTORY") {
33
- try {
34
- const files = await readdir(historyDir);
35
- const runs = await Promise.all(
36
- files.filter(f => f.endsWith(".json")).map(async f => {
37
- const content = await readFile(path.join(historyDir, f), "utf8");
38
- const parsed = JSON.parse(content);
39
- return {
40
- taskId: parsed.taskId,
41
- timestamp: parsed.timestamp,
42
- prompt: parsed.prompt,
43
- success: parsed.result.success,
44
- costUsd: parsed.metrics.totalCostUsd
45
- };
46
- })
47
- );
48
- ws.send(JSON.stringify({ type: "HISTORY_LIST", runs: runs.sort((a, b) => b.timestamp - a.timestamp) }));
49
- } catch {
50
- ws.send(JSON.stringify({ type: "HISTORY_LIST", runs: [] }));
51
- }
52
- }
53
-
54
- else if (message.type === "LOAD_RUN") {
55
- try {
56
- const file = path.join(historyDir, `${message.taskId}.json`);
57
- const content = await readFile(file, "utf8");
58
- ws.send(JSON.stringify({ type: "RUN_DATA", data: JSON.parse(content) }));
59
- } catch (err) {
60
- ws.send(JSON.stringify({ type: "ERROR", message: "Run not found" }));
61
- }
62
- }
63
-
64
- else if (message.type === "LIST_WORKFLOWS") {
65
- const workflowsDir = path.join(process.cwd(), ".rax-flow", "workflows");
66
- try {
67
- const files = await readdir(workflowsDir);
68
- const list = files.filter(f => f.endsWith(".json")).map(f => ({
69
- id: f.replace(".json", ""),
70
- filename: f
71
- }));
72
- ws.send(JSON.stringify({ type: "WORKFLOW_LIST", workflows: list }));
73
- } catch {
74
- ws.send(JSON.stringify({ type: "WORKFLOW_LIST", workflows: [] }));
75
- }
76
- }
77
-
78
- else if (message.type === "RESOLVE_APPROVAL") {
79
- this.bus?.emit({
80
- type: "INTERNAL_RESOLVE_APPROVAL",
81
- taskId: message.taskId,
82
- nodeId: message.nodeId,
83
- approved: message.approved,
84
- feedback: message.feedback
85
- } as any);
86
- }
87
-
88
- else if (message.type === "SAVE_WORKFLOW") {
89
- try {
90
- const workflowsDir = path.join(process.cwd(), ".rax-flow", "workflows");
91
- await mkdir(workflowsDir, { recursive: true });
92
- const file = path.join(workflowsDir, `${message.id}.json`);
93
- const data = {
94
- id: message.id,
95
- nodes: message.nodes,
96
- edges: message.edges
97
- };
98
- await writeFile(file, JSON.stringify(data, null, 2));
99
- ws.send(JSON.stringify({ type: "INFO", message: `Workflow ${message.id} saved.` }));
100
- this.broadcast({ type: "REFRESH_WORKFLOWS" });
101
- } catch (err) {
102
- ws.send(JSON.stringify({ type: "ERROR", message: "Failed to save workflow" }));
103
- }
104
- }
105
-
106
- else if (message.type === "DELETE_WORKFLOW") {
107
- try {
108
- const url = path.join(process.cwd(), ".rax-flow", "workflows", `${message.id}.json`);
109
- const { unlink } = await import("node:fs/promises");
110
- await unlink(url);
111
- this.broadcast({ type: "REFRESH_WORKFLOWS" });
112
- } catch (err) {
113
- ws.send(JSON.stringify({ type: "ERROR", message: "Failed to delete workflow" }));
114
- }
115
- }
116
- } catch (e) {
117
- console.error("[WS] Message parse error:", e);
118
- }
119
- });
120
-
121
- ws.on("error", () => {
122
- this.clients.delete(ws);
123
- });
124
- });
125
-
126
- this.wss.on("error", (err) => {
127
- console.error(`[UI] WebSocket server error: ${err.message}`);
128
- });
129
-
130
- eventBus.onEvent((event) => {
131
- this.broadcast(event);
132
- });
133
- } catch (err) {
134
- console.error(`[UI] Failed to start WebSocket server: ${err}`);
135
- }
136
- }
137
-
138
- private broadcast(event: unknown): void {
139
- if (!this.wss) return;
140
- const payload = JSON.stringify(event);
141
- for (const client of this.clients) {
142
- if (client.readyState === WebSocket.OPEN) {
143
- client.send(payload);
144
- }
145
- }
146
- }
147
-
148
- public stop(): void {
149
- if (this.wss) {
150
- this.wss.close();
151
- this.wss = null;
152
- this.clients.clear();
153
- console.log("[UI] 📡 WebSocket relay stopped.");
154
- }
155
- }
156
- }
package/tsconfig.json DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "rootDir": "src",
5
- "outDir": "dist",
6
- "composite": true,
7
- "declaration": true,
8
- "declarationMap": true,
9
- "jsx": "react-jsx",
10
- "jsxImportSource": "react",
11
- "esModuleInterop": true
12
- },
13
- "include": [
14
- "src/**/*.ts",
15
- "src/**/*.tsx"
16
- ],
17
- "references": [
18
- {
19
- "path": "../core"
20
- },
21
- {
22
- "path": "../agents"
23
- },
24
- {
25
- "path": "../providers"
26
- }
27
- ]
28
- }