rax-flow 0.1.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 (83) hide show
  1. package/dashboard/index.html +420 -0
  2. package/dist/benchmark.d.ts +10 -0
  3. package/dist/benchmark.d.ts.map +1 -0
  4. package/dist/benchmark.js +123 -0
  5. package/dist/benchmark.js.map +1 -0
  6. package/dist/bin.d.ts +3 -0
  7. package/dist/bin.d.ts.map +1 -0
  8. package/dist/bin.js +115 -0
  9. package/dist/bin.js.map +1 -0
  10. package/dist/bootstrap.d.ts +8 -0
  11. package/dist/bootstrap.d.ts.map +1 -0
  12. package/dist/bootstrap.js +22 -0
  13. package/dist/bootstrap.js.map +1 -0
  14. package/dist/bridge-adapter-templates.d.ts +4 -0
  15. package/dist/bridge-adapter-templates.d.ts.map +1 -0
  16. package/dist/bridge-adapter-templates.js +185 -0
  17. package/dist/bridge-adapter-templates.js.map +1 -0
  18. package/dist/bridge-test.d.ts +7 -0
  19. package/dist/bridge-test.d.ts.map +1 -0
  20. package/dist/bridge-test.js +89 -0
  21. package/dist/bridge-test.js.map +1 -0
  22. package/dist/dashboard.d.ts +4 -0
  23. package/dist/dashboard.d.ts.map +1 -0
  24. package/dist/dashboard.js +49 -0
  25. package/dist/dashboard.js.map +1 -0
  26. package/dist/doctor.d.ts +6 -0
  27. package/dist/doctor.d.ts.map +1 -0
  28. package/dist/doctor.js +70 -0
  29. package/dist/doctor.js.map +1 -0
  30. package/dist/evolve.d.ts +7 -0
  31. package/dist/evolve.d.ts.map +1 -0
  32. package/dist/evolve.js +48 -0
  33. package/dist/evolve.js.map +1 -0
  34. package/dist/host-init-templates.d.ts +16 -0
  35. package/dist/host-init-templates.d.ts.map +1 -0
  36. package/dist/host-init-templates.js +119 -0
  37. package/dist/host-init-templates.js.map +1 -0
  38. package/dist/index.d.ts +11 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +11 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/init-host.d.ts +10 -0
  43. package/dist/init-host.d.ts.map +1 -0
  44. package/dist/init-host.js +232 -0
  45. package/dist/init-host.js.map +1 -0
  46. package/dist/install.d.ts +8 -0
  47. package/dist/install.d.ts.map +1 -0
  48. package/dist/install.js +99 -0
  49. package/dist/install.js.map +1 -0
  50. package/dist/run.d.ts +16 -0
  51. package/dist/run.d.ts.map +1 -0
  52. package/dist/run.js +238 -0
  53. package/dist/run.js.map +1 -0
  54. package/dist/styles.d.ts +12 -0
  55. package/dist/styles.d.ts.map +1 -0
  56. package/dist/styles.js +12 -0
  57. package/dist/styles.js.map +1 -0
  58. package/dist/vendor-manifests.d.ts +22 -0
  59. package/dist/vendor-manifests.d.ts.map +1 -0
  60. package/dist/vendor-manifests.js +94 -0
  61. package/dist/vendor-manifests.js.map +1 -0
  62. package/dist/ws-relay.d.ts +12 -0
  63. package/dist/ws-relay.d.ts.map +1 -0
  64. package/dist/ws-relay.js +148 -0
  65. package/dist/ws-relay.js.map +1 -0
  66. package/package.json +28 -0
  67. package/src/benchmark.ts +156 -0
  68. package/src/bin.ts +127 -0
  69. package/src/bootstrap.ts +36 -0
  70. package/src/bridge-adapter-templates.ts +181 -0
  71. package/src/bridge-test.ts +107 -0
  72. package/src/dashboard.ts +51 -0
  73. package/src/doctor.ts +92 -0
  74. package/src/evolve.ts +74 -0
  75. package/src/host-init-templates.ts +134 -0
  76. package/src/index.ts +10 -0
  77. package/src/init-host.ts +285 -0
  78. package/src/install.ts +118 -0
  79. package/src/run.ts +317 -0
  80. package/src/styles.ts +12 -0
  81. package/src/vendor-manifests.ts +113 -0
  82. package/src/ws-relay.ts +156 -0
  83. package/tsconfig.json +12 -0
package/dist/bin.js ADDED
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env node
2
+ import { runInstall } from "./install.js";
3
+ import { runBenchmark } from "./benchmark.js";
4
+ import { runBootstrap } from "./bootstrap.js";
5
+ import { runBridgeTest } from "./bridge-test.js";
6
+ import { runDoctor } from "./doctor.js";
7
+ import { runInitHost } from "./init-host.js";
8
+ import { runWorkflow } from "./run.js";
9
+ import { runDashboard } from "./dashboard.js";
10
+ function getFlag(args, flag) {
11
+ const index = args.indexOf(flag);
12
+ if (index === -1)
13
+ return undefined;
14
+ return args[index + 1];
15
+ }
16
+ async function main() {
17
+ const args = process.argv.slice(2);
18
+ const command = args[0];
19
+ if (!command || command === "--help" || command === "-h") {
20
+ console.log("Usage: rax-flow <command>");
21
+ console.log("Commands:");
22
+ console.log(" install [--ui] Setup project, providers and .raxrc");
23
+ console.log(" run --prompt <text> [--workflow path] [--json] [--stream] [--max-parallel N] [--no-cache-persist]");
24
+ console.log(" Execute workflow");
25
+ console.log(" Optional: [--provider host|openai|claude|rest] [--bridge-command \"node bridge.mjs\"]");
26
+ console.log(" benchmark --prompt <text> [--output path] Compare baseline vs orchestrated");
27
+ console.log(" Optional: [--provider host|openai|claude|rest] [--bridge-command \"node bridge.mjs\"]");
28
+ console.log(" doctor Validate host-native bridge setup");
29
+ console.log(" bridge-test [--target claude-code|codex|opencode|kilo|generic] Run bridge smoke payload");
30
+ console.log(" bootstrap [--target claude-code|codex|opencode|kilo|generic] [--task \"...\"] [--json]");
31
+ console.log(" Print chat bootstrap prompt");
32
+ console.log(" dashboard [--port N] Start the visual insights dashboard");
33
+ process.exit(0);
34
+ }
35
+ if (command === "install") {
36
+ const openUi = args.includes("--ui");
37
+ const code = await runInstall({ cwd: process.cwd(), openUi });
38
+ process.exit(code);
39
+ }
40
+ if (command === "run") {
41
+ const prompt = getFlag(args, "--prompt");
42
+ if (!prompt) {
43
+ console.error("Missing --prompt");
44
+ process.exit(1);
45
+ }
46
+ const workflowPath = getFlag(args, "--workflow");
47
+ const provider = getFlag(args, "--provider");
48
+ const bridgeCommand = getFlag(args, "--bridge-command");
49
+ const maxParallelRaw = getFlag(args, "--max-parallel");
50
+ const maxParallel = maxParallelRaw ? Number(maxParallelRaw) : undefined;
51
+ const code = await runWorkflow({
52
+ cwd: process.cwd(),
53
+ prompt,
54
+ workflowPath,
55
+ asJson: args.includes("--json"),
56
+ stream: args.includes("--stream"),
57
+ maxParallel: Number.isFinite(maxParallel) ? maxParallel : undefined,
58
+ noCachePersist: args.includes("--no-cache-persist"),
59
+ providerOverride: provider,
60
+ bridgeCommandOverride: bridgeCommand,
61
+ ui: args.includes("--ui")
62
+ });
63
+ process.exit(code);
64
+ }
65
+ if (command === "benchmark") {
66
+ const prompt = getFlag(args, "--prompt");
67
+ if (!prompt) {
68
+ console.error("Missing --prompt");
69
+ process.exit(1);
70
+ }
71
+ const output = getFlag(args, "--output");
72
+ const provider = getFlag(args, "--provider");
73
+ const bridgeCommand = getFlag(args, "--bridge-command");
74
+ const code = await runBenchmark({ cwd: process.cwd(), prompt, output, providerOverride: provider, bridgeCommandOverride: bridgeCommand });
75
+ process.exit(code);
76
+ }
77
+ if (command === "doctor") {
78
+ const code = await runDoctor({ cwd: process.cwd() });
79
+ process.exit(code);
80
+ }
81
+ if (command === "bridge-test") {
82
+ const target = getFlag(args, "--target");
83
+ const code = await runBridgeTest({ cwd: process.cwd(), target });
84
+ process.exit(code);
85
+ }
86
+ if (command === "init-host") {
87
+ const target = getFlag(args, "--target");
88
+ const task = getFlag(args, "--task");
89
+ const code = await runInitHost({ cwd: process.cwd(), target, printOnly: args.includes("--print"), all: args.includes("--all"), task });
90
+ process.exit(code);
91
+ }
92
+ if (command === "bootstrap") {
93
+ const target = getFlag(args, "--target");
94
+ const task = getFlag(args, "--task");
95
+ const code = await runBootstrap({ target, task, asJson: args.includes("--json") });
96
+ process.exit(code);
97
+ }
98
+ if (command === "dashboard") {
99
+ const port = getFlag(args, "--port");
100
+ const code = await runDashboard({ port: port ? Number(port) : 3003 });
101
+ process.exit(code);
102
+ }
103
+ if (command === "evolve") {
104
+ const { showEvolution } = await import("./evolve.js");
105
+ const code = await showEvolution({ cwd: process.cwd(), history: args.includes("--history") });
106
+ process.exit(code);
107
+ }
108
+ console.error(`Unknown command: ${command}`);
109
+ process.exit(1);
110
+ }
111
+ main().catch((error) => {
112
+ console.error(error);
113
+ process.exit(1);
114
+ });
115
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface BootstrapOptions {
2
+ target?: string;
3
+ asJson?: boolean;
4
+ task?: string;
5
+ }
6
+ export declare function runBootstrap(options: BootstrapOptions): Promise<number>;
7
+ export {};
8
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B7E"}
@@ -0,0 +1,22 @@
1
+ import { c } from "./styles.js";
2
+ import { HOST_TEMPLATES, buildBootstrapPrompt, parseHostTarget } from "./host-init-templates.js";
3
+ export async function runBootstrap(options) {
4
+ const target = parseHostTarget(options.target);
5
+ const template = HOST_TEMPLATES[target];
6
+ const prompt = buildBootstrapPrompt(target, options.task);
7
+ if (options.asJson) {
8
+ console.log(JSON.stringify({
9
+ target,
10
+ title: template.title,
11
+ autoInjectMode: template.autoInjectMode,
12
+ prompt,
13
+ quickCommands: template.quickCommands,
14
+ sessionEntryExamples: template.sessionEntryExamples
15
+ }, null, 2));
16
+ return 0;
17
+ }
18
+ console.log(c.blue(`RAX-FLOW Bootstrap Prompt (${target})`));
19
+ console.log(prompt);
20
+ return 0;
21
+ }
22
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQjG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,MAAM;YACN,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,MAAM;YACN,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;SACpD,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { HostTarget } from "./host-init-templates.js";
2
+ export declare function renderBridgeAdapter(target: HostTarget): string;
3
+ export declare function bridgeAdapterFilename(target: HostTarget): string;
4
+ //# sourceMappingURL=bridge-adapter-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-adapter-templates.d.ts","sourceRoot":"","sources":["../src/bridge-adapter-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAmDtD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAyH9D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAMhE"}
@@ -0,0 +1,185 @@
1
+ function vendorCallFunction(target) {
2
+ if (target === "claude-code")
3
+ return "callClaudeCodeRuntime";
4
+ if (target === "codex")
5
+ return "callCodexRuntime";
6
+ if (target === "opencode")
7
+ return "callOpenCodeRuntime";
8
+ if (target === "kilo")
9
+ return "callKiloRuntime";
10
+ return "callGenericHostRuntime";
11
+ }
12
+ function vendorNotes(target) {
13
+ if (target === "claude-code") {
14
+ return [
15
+ "// Claude Code integration notes:",
16
+ "// - Map `payload.action` to Claude Code message/runtime API.",
17
+ "// - Ensure structured mode returns strict JSON object, not markdown.",
18
+ ""
19
+ ].join("\n");
20
+ }
21
+ if (target === "codex") {
22
+ return [
23
+ "// Codex integration notes:",
24
+ "// - Map payload.options.model to your Codex runtime model selector.",
25
+ "// - For callStructured, return parsed JSON object only.",
26
+ ""
27
+ ].join("\n");
28
+ }
29
+ if (target === "opencode") {
30
+ return [
31
+ "// OpenCode integration notes:",
32
+ "// - Connect to OpenCode model invocation API/SDK.",
33
+ "// - Preserve latency and model name in response when possible.",
34
+ ""
35
+ ].join("\n");
36
+ }
37
+ if (target === "kilo") {
38
+ return [
39
+ "// Kilo integration notes:",
40
+ "// - Route both actions through Kilo's model runtime.",
41
+ "// - Handle model fallback inside runtime wrapper if supported.",
42
+ ""
43
+ ].join("\n");
44
+ }
45
+ return [
46
+ "// Generic host integration notes:",
47
+ "// - Replace runtime call with your environment-specific function.",
48
+ "// - Keep response aligned with HostBridgeResponse schema.",
49
+ ""
50
+ ].join("\n");
51
+ }
52
+ export function renderBridgeAdapter(target) {
53
+ const runtimeFn = vendorCallFunction(target);
54
+ return [
55
+ "#!/usr/bin/env node",
56
+ "",
57
+ "/**",
58
+ ` * RAX-FLOW bridge adapter scaffold for ${target}.`,
59
+ " *",
60
+ " * Input : HostBridgeRequest JSON on stdin",
61
+ " * Output: HostBridgeResponse JSON on stdout",
62
+ " */",
63
+ "",
64
+ "import { readFileSync } from \"node:fs\";",
65
+ "import path from \"node:path\";",
66
+ "",
67
+ "function readStdin() {",
68
+ " return new Promise((resolve) => {",
69
+ " let data = \"\";",
70
+ " process.stdin.setEncoding(\"utf8\");",
71
+ " process.stdin.on(\"data\", (chunk) => { data += chunk; });",
72
+ " process.stdin.on(\"end\", () => resolve(data));",
73
+ " });",
74
+ "}",
75
+ "",
76
+ "function safeJsonParse(text) {",
77
+ " try { return JSON.parse(text); } catch { return null; }",
78
+ "}",
79
+ "",
80
+ "function normalizeError(error) {",
81
+ " if (!error) return \"unknown_error\";",
82
+ " if (typeof error === \"string\") return error;",
83
+ " return error.message || String(error);",
84
+ "}",
85
+ "",
86
+ "function isStructuredPayload(obj) {",
87
+ " return obj && typeof obj === \"object\" &&",
88
+ " typeof obj.agent === \"string\" &&",
89
+ " typeof obj.success === \"boolean\" &&",
90
+ " typeof obj.confidence === \"number\" &&",
91
+ " Array.isArray(obj.risks) &&",
92
+ " Array.isArray(obj.logs) &&",
93
+ " obj.data && typeof obj.data === \"object\";",
94
+ "}",
95
+ "",
96
+ "function loadRuntimeConfig() {",
97
+ " const file = path.join(process.cwd(), '.rax-flow', 'host-init', '" + target + "', 'bridge-runtime-config.json');",
98
+ " try {",
99
+ " return JSON.parse(readFileSync(file, 'utf8'));",
100
+ " } catch {",
101
+ " return {",
102
+ " vendor: '" + target + "',",
103
+ " model: 'host-managed',",
104
+ " endpoint: null,",
105
+ " authEnv: null,",
106
+ " structuredMode: 'json',",
107
+ " responseStrict: true,",
108
+ " timeoutMs: 20000",
109
+ " };",
110
+ " }",
111
+ "}",
112
+ "",
113
+ vendorNotes(target),
114
+ "// callHostModel is the bridge interface for runtime calls",
115
+ `async function ${runtimeFn}(payload, runtimeConfig) {`,
116
+ " // TODO: implement real runtime call for this vendor.",
117
+ " // payload.action = callModel | callStructured",
118
+ " // runtimeConfig can provide endpoint/auth/model/runtime settings.",
119
+ " if (payload.action === 'callStructured') {",
120
+ " return {",
121
+ " ok: true,",
122
+ " model: runtimeConfig.model || payload.options?.model || 'host-managed',",
123
+ " latencyMs: 8,",
124
+ " output: {",
125
+ " agent: 'VendorBridgeTemplate',",
126
+ " success: true,",
127
+ " confidence: 0.73,",
128
+ " risks: [],",
129
+ " logs: ['replace with real vendor runtime response'],",
130
+ " data: { summary: 'template structured output', nextAction: 'continue' }",
131
+ " }",
132
+ " };",
133
+ " }",
134
+ " return {",
135
+ " ok: true,",
136
+ " model: runtimeConfig.model || payload.options?.model || 'host-managed',",
137
+ " latencyMs: 8,",
138
+ " output: `template-text:${String(payload.prompt || '').slice(0, 220)}`",
139
+ " };",
140
+ "}",
141
+ "",
142
+ "async function main() {",
143
+ " const input = await readStdin();",
144
+ " const payload = safeJsonParse(input);",
145
+ " if (!payload || payload.version !== 1 || !payload.action) {",
146
+ " process.stdout.write(JSON.stringify({ ok: false, error: 'invalid_payload' }));",
147
+ " return;",
148
+ " }",
149
+ "",
150
+ " const runtimeConfig = loadRuntimeConfig();",
151
+ "",
152
+ " try {",
153
+ ` const response = await ${runtimeFn}(payload, runtimeConfig);`,
154
+ " if (payload.action === 'callStructured' && runtimeConfig.responseStrict) {",
155
+ " if (!response || !isStructuredPayload(response.output)) {",
156
+ " process.stdout.write(JSON.stringify({",
157
+ " ok: false,",
158
+ " error: 'structured_output_invalid',",
159
+ " details: 'Ensure output contains agent/success/confidence/risks/logs/data',",
160
+ " }));",
161
+ " return;",
162
+ " }",
163
+ " }",
164
+ " process.stdout.write(JSON.stringify(response));",
165
+ " } catch (error) {",
166
+ " process.stdout.write(JSON.stringify({ ok: false, error: `bridge_exception:${normalizeError(error)}` }));",
167
+ " }",
168
+ "}",
169
+ "",
170
+ "main();",
171
+ ""
172
+ ].join("\n");
173
+ }
174
+ export function bridgeAdapterFilename(target) {
175
+ if (target === "claude-code")
176
+ return "bridge-adapter-claude-code.mjs";
177
+ if (target === "codex")
178
+ return "bridge-adapter-codex.mjs";
179
+ if (target === "opencode")
180
+ return "bridge-adapter-opencode.mjs";
181
+ if (target === "kilo")
182
+ return "bridge-adapter-kilo.mjs";
183
+ return "bridge-adapter-generic.mjs";
184
+ }
185
+ //# sourceMappingURL=bridge-adapter-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-adapter-templates.js","sourceRoot":"","sources":["../src/bridge-adapter-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface BridgeTestOptions {
2
+ cwd: string;
3
+ target?: string;
4
+ }
5
+ export declare function runBridgeTest(options: BridgeTestOptions): Promise<number>;
6
+ export {};
7
+ //# sourceMappingURL=bridge-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-test.d.ts","sourceRoot":"","sources":["../src/bridge-test.ts"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmCD,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8D/E"}
@@ -0,0 +1,89 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { spawn } from "node:child_process";
4
+ import { c } from "./styles.js";
5
+ import { parseHostTarget } from "./host-init-templates.js";
6
+ function parseShellCommand(input) {
7
+ const parts = input.match(/(?:[^\s"]+|"[^"]*")+/g) ?? [];
8
+ if (parts.length === 0) {
9
+ throw new Error("invalid_bridge_command");
10
+ }
11
+ const [command, ...rawArgs] = parts;
12
+ const args = rawArgs.map((arg) => arg.replace(/^"|"$/g, ""));
13
+ return { command: command, args };
14
+ }
15
+ async function runCommand(commandSpec, payload) {
16
+ const { command, args } = parseShellCommand(commandSpec);
17
+ return await new Promise((resolve, reject) => {
18
+ const child = spawn(command, args, { stdio: ["pipe", "pipe", "pipe"] });
19
+ let stdout = "";
20
+ let stderr = "";
21
+ child.stdout.on("data", (chunk) => {
22
+ stdout += String(chunk);
23
+ });
24
+ child.stderr.on("data", (chunk) => {
25
+ stderr += String(chunk);
26
+ });
27
+ child.on("error", (error) => reject(error));
28
+ child.on("close", (code) => resolve({ code: code ?? 1, stdout, stderr }));
29
+ child.stdin.write(JSON.stringify(payload));
30
+ child.stdin.end();
31
+ });
32
+ }
33
+ export async function runBridgeTest(options) {
34
+ const target = parseHostTarget(options.target);
35
+ const baseDir = path.join(options.cwd, ".rax-flow", "host-init", target);
36
+ const manifestFile = path.join(baseDir, "host-manifest.json");
37
+ const smokeFile = path.join(baseDir, "bridge-smoke-test.json");
38
+ let manifest;
39
+ let smokePayload;
40
+ try {
41
+ manifest = JSON.parse(await readFile(manifestFile, "utf8"));
42
+ }
43
+ catch {
44
+ console.error(c.red(`Missing host manifest: ${manifestFile}`));
45
+ return 1;
46
+ }
47
+ try {
48
+ smokePayload = JSON.parse(await readFile(smokeFile, "utf8"));
49
+ }
50
+ catch {
51
+ console.error(c.red(`Missing bridge smoke test payload: ${smokeFile}`));
52
+ return 1;
53
+ }
54
+ if (!manifest.bridgeCommand) {
55
+ console.error(c.red("host-manifest.json missing bridgeCommand"));
56
+ return 1;
57
+ }
58
+ const result = await runCommand(manifest.bridgeCommand, smokePayload);
59
+ console.log(c.blue(`RAX-FLOW Bridge Test (${target})`));
60
+ console.log(`command: ${manifest.bridgeCommand}`);
61
+ console.log(`exitCode: ${result.code}`);
62
+ if (result.stdout.trim()) {
63
+ console.log("stdout:");
64
+ console.log(result.stdout.trim());
65
+ }
66
+ if (result.stderr.trim()) {
67
+ console.log("stderr:");
68
+ console.log(result.stderr.trim());
69
+ }
70
+ if (result.code !== 0) {
71
+ console.log(c.red("Bridge smoke test failed."));
72
+ return 1;
73
+ }
74
+ try {
75
+ const parsed = JSON.parse(result.stdout);
76
+ const ok = Boolean(parsed?.ok);
77
+ if (!ok) {
78
+ console.log(c.red(`Bridge responded with ok=false: ${parsed?.error ?? "unknown"}`));
79
+ return 1;
80
+ }
81
+ }
82
+ catch {
83
+ console.log(c.red("Bridge output is not valid JSON."));
84
+ return 1;
85
+ }
86
+ console.log(c.green("Bridge smoke test passed."));
87
+ return 0;
88
+ }
89
+ //# sourceMappingURL=bridge-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-test.js","sourceRoot":"","sources":["../src/bridge-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function runDashboard({ port }?: {
2
+ port?: number;
3
+ }): Promise<number>;
4
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,CAAC,EAAE,IAAW,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C3F"}
@@ -0,0 +1,49 @@
1
+ import http from "node:http";
2
+ import { readFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+ export async function runDashboard({ port = 3003 } = {}) {
7
+ const server = http.createServer(async (req, res) => {
8
+ // Simple static server for the dashboard
9
+ if (req.url === "/" || req.url === "/index.html") {
10
+ try {
11
+ // Try to find the dashboard file
12
+ // In the monorepo, it's in packages/cli/dashboard/index.html
13
+ // When installed as a package, it will be relative to this file
14
+ let htmlPath = path.join(process.cwd(), "packages/cli/dashboard/index.html");
15
+ // Fallback for when running from dist or installed package
16
+ try {
17
+ await readFile(htmlPath);
18
+ }
19
+ catch {
20
+ htmlPath = path.join(__dirname, "..", "dashboard", "index.html");
21
+ }
22
+ const content = await readFile(htmlPath, "utf8");
23
+ res.writeHead(200, { "Content-Type": "text/html" });
24
+ res.end(content);
25
+ }
26
+ catch (err) {
27
+ console.error("[UI] Error loading dashboard:", err);
28
+ res.writeHead(500);
29
+ res.end("Error loading dashboard. Please ensure you are running from the project root.");
30
+ }
31
+ }
32
+ else {
33
+ res.writeHead(404);
34
+ res.end("Not Found");
35
+ }
36
+ });
37
+ return new Promise((resolve) => {
38
+ server.listen(port, () => {
39
+ console.log(`\n[UI] 🚀 RAX Dashboard started on http://localhost:${port}`);
40
+ console.log(`[UI] Monitoring kernel evolution and workflow health.`);
41
+ console.log(`[UI] Press Ctrl+C to stop.`);
42
+ });
43
+ process.on("SIGINT", () => {
44
+ server.close();
45
+ resolve(0);
46
+ });
47
+ });
48
+ }
49
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,KAAwB,EAAE;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAChD,yCAAyC;QACzC,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,aAAa,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACD,iCAAiC;gBACjC,6DAA6D;gBAC7D,gEAAgE;gBAChE,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mCAAmC,CAAC,CAAC;gBAE7E,2DAA2D;gBAC3D,IAAI,CAAC;oBACD,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACL,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBACrE,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;gBACpD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;YAC7F,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,uDAAuD,IAAI,EAAE,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface DoctorOptions {
2
+ cwd: string;
3
+ }
4
+ export declare function runDoctor(options: DoctorOptions): Promise<number>;
5
+ export {};
6
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAyBD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA2DvE"}
package/dist/doctor.js ADDED
@@ -0,0 +1,70 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { HostBridgeAdapter } from "@rax-flow/providers";
4
+ import { c } from "./styles.js";
5
+ async function loadConfig(cwd) {
6
+ const file = path.join(cwd, ".raxrc");
7
+ try {
8
+ const raw = await readFile(file, "utf8");
9
+ return JSON.parse(raw);
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ function printLine(ok, label, details) {
16
+ const icon = ok ? c.green("[ok]") : c.red("[fail]");
17
+ console.log(`${icon} ${label}${details ? ` - ${details}` : ""}`);
18
+ }
19
+ export async function runDoctor(options) {
20
+ console.log(c.blue("RAX-FLOW Doctor"));
21
+ const config = await loadConfig(options.cwd);
22
+ if (!config) {
23
+ printLine(false, "Missing .raxrc", "run `rax-flow install` first");
24
+ return 1;
25
+ }
26
+ printLine(true, "Found .raxrc");
27
+ const hostCfg = config.providers?.host;
28
+ const bridgeCommandEnv = hostCfg?.bridgeCommandEnv ?? "RAX_HOST_BRIDGE_COMMAND";
29
+ const bridgeCommand = process.env[bridgeCommandEnv];
30
+ const provider = new HostBridgeAdapter({
31
+ model: hostCfg?.model ?? "host-managed",
32
+ mode: hostCfg?.mode ?? "auto",
33
+ command: bridgeCommand,
34
+ timeoutMs: hostCfg?.timeoutMs ?? 10000
35
+ });
36
+ const health = await provider.healthCheck();
37
+ printLine(health, "Host provider health", `mode=${hostCfg?.mode ?? "auto"}`);
38
+ const hasBridgeFn = typeof globalThis.__RAX_HOST_BRIDGE__ === "function";
39
+ printLine(hasBridgeFn || Boolean(bridgeCommand), "Bridge source", hasBridgeFn ? "global bridge function" : bridgeCommand ? `command via ${bridgeCommandEnv}` : "auto/mock fallback");
40
+ try {
41
+ const ping = await provider.callModel("doctor ping", { model: hostCfg?.model ?? "host-managed", maxTokens: 32, temperature: 0 });
42
+ printLine(true, "callModel test", `provider=${ping.provider} model=${ping.model}`);
43
+ }
44
+ catch (error) {
45
+ printLine(false, "callModel test", String(error));
46
+ return 1;
47
+ }
48
+ try {
49
+ const structured = await provider.callStructured("doctor structured ping", {
50
+ type: "object",
51
+ required: ["agent", "success", "confidence", "risks", "logs", "data"],
52
+ properties: {
53
+ agent: { type: "string" },
54
+ success: { type: "boolean" },
55
+ confidence: { type: "number" },
56
+ risks: { type: "array" },
57
+ logs: { type: "array" },
58
+ data: { type: "object" }
59
+ }
60
+ }, { model: hostCfg?.model ?? "host-managed", maxTokens: 128, temperature: 0 });
61
+ printLine(true, "callStructured test", `model=${structured.model}`);
62
+ }
63
+ catch (error) {
64
+ printLine(false, "callStructured test", String(error));
65
+ return 1;
66
+ }
67
+ console.log(c.green("Doctor checks passed."));
68
+ return 0;
69
+ }
70
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface EvolveOptions {
2
+ cwd: string;
3
+ history?: boolean;
4
+ }
5
+ export declare function showEvolution(options: EvolveOptions): Promise<number>;
6
+ export {};
7
+ //# sourceMappingURL=evolve.d.ts.map