@reactive-agents/cli 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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tyler Buell
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,61 @@
1
+ # @reactive-agents/cli — `rax`
2
+
3
+ **The Reactive Agents eXecutable** — CLI for scaffolding, running, and inspecting AI agents.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # Global install
9
+ bun add -g @reactive-agents/cli
10
+
11
+ # Or run without installing
12
+ bunx @reactive-agents/cli --help
13
+ ```
14
+
15
+ ## Commands
16
+
17
+ ```bash
18
+ rax init <name> [--template minimal|standard|full]
19
+ Scaffold a new Reactive Agents project
20
+
21
+ rax create agent <name> [--recipe basic|researcher|coder|orchestrator]
22
+ Generate an agent file in your project
23
+
24
+ rax run <prompt> [--provider anthropic|openai|ollama] [--model <model>] [--name <name>]
25
+ Run an agent with a prompt and print the result
26
+
27
+ rax dev
28
+ Start a development server with hot reload
29
+
30
+ rax eval run --suite <name>
31
+ Run an evaluation suite
32
+
33
+ rax playground
34
+ Launch an interactive REPL
35
+
36
+ rax inspect <agent-id> [--trace last]
37
+ Inspect agent state and execution traces
38
+
39
+ rax version
40
+ Print version
41
+ ```
42
+
43
+ ## Examples
44
+
45
+ ```bash
46
+ # Scaffold a new project with all features
47
+ rax init my-ai-app --template full
48
+ cd my-ai-app
49
+ bun install
50
+
51
+ # Generate a research agent
52
+ rax create agent researcher --recipe researcher
53
+
54
+ # Run a one-off prompt
55
+ export ANTHROPIC_API_KEY=sk-ant-...
56
+ rax run "Summarize the state of fusion energy" --provider anthropic
57
+ ```
58
+
59
+ ## Documentation
60
+
61
+ Full documentation at [tylerjrbuell.github.io/reactive-agents-ts/reference/cli/](https://tylerjrbuell.github.io/reactive-agents-ts/reference/cli/)
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bun
2
+ declare function main(argv?: string[]): void;
3
+
4
+ export { main };
package/dist/index.js ADDED
@@ -0,0 +1,470 @@
1
+ #!/usr/bin/env bun
2
+ #!/usr/bin/env node
3
+
4
+ // src/commands/init.ts
5
+ import { join as join2 } from "path";
6
+
7
+ // src/generators/project-generator.ts
8
+ import { mkdirSync, writeFileSync, existsSync } from "fs";
9
+ import { join } from "path";
10
+ var TEMPLATE_DEPS = {
11
+ minimal: ["@reactive-agents/core", "@reactive-agents/llm-provider", "@reactive-agents/runtime"],
12
+ standard: [
13
+ "@reactive-agents/core",
14
+ "@reactive-agents/llm-provider",
15
+ "@reactive-agents/memory",
16
+ "@reactive-agents/reasoning",
17
+ "@reactive-agents/tools",
18
+ "@reactive-agents/runtime"
19
+ ],
20
+ full: [
21
+ "@reactive-agents/core",
22
+ "@reactive-agents/llm-provider",
23
+ "@reactive-agents/memory",
24
+ "@reactive-agents/reasoning",
25
+ "@reactive-agents/tools",
26
+ "@reactive-agents/verification",
27
+ "@reactive-agents/cost",
28
+ "@reactive-agents/identity",
29
+ "@reactive-agents/orchestration",
30
+ "@reactive-agents/observability",
31
+ "@reactive-agents/interaction",
32
+ "@reactive-agents/guardrails",
33
+ "@reactive-agents/prompts",
34
+ "@reactive-agents/runtime"
35
+ ]
36
+ };
37
+ function generateProject(config) {
38
+ const { name, template, targetDir } = config;
39
+ const files = [];
40
+ const dirs = [targetDir, join(targetDir, "src"), join(targetDir, "src", "agents")];
41
+ for (const dir of dirs) {
42
+ if (!existsSync(dir)) {
43
+ mkdirSync(dir, { recursive: true });
44
+ }
45
+ }
46
+ const deps = Object.fromEntries(TEMPLATE_DEPS[template].map((d) => [d, "latest"]));
47
+ const packageJson = {
48
+ name,
49
+ version: "0.1.0",
50
+ type: "module",
51
+ scripts: {
52
+ dev: "bun run src/index.ts",
53
+ build: "tsc --noEmit",
54
+ test: "bun test"
55
+ },
56
+ dependencies: {
57
+ effect: "^3.10.0",
58
+ ...deps
59
+ },
60
+ devDependencies: {
61
+ typescript: "^5.7.0",
62
+ "bun-types": "latest"
63
+ }
64
+ };
65
+ const pkgPath = join(targetDir, "package.json");
66
+ writeFileSync(pkgPath, JSON.stringify(packageJson, null, 2) + "\n");
67
+ files.push(pkgPath);
68
+ const tsconfig = {
69
+ compilerOptions: {
70
+ target: "ES2022",
71
+ module: "ES2022",
72
+ moduleResolution: "bundler",
73
+ strict: true,
74
+ esModuleInterop: true,
75
+ skipLibCheck: true,
76
+ outDir: "dist",
77
+ types: ["bun-types"]
78
+ },
79
+ include: ["src/**/*"]
80
+ };
81
+ const tscPath = join(targetDir, "tsconfig.json");
82
+ writeFileSync(tscPath, JSON.stringify(tsconfig, null, 2) + "\n");
83
+ files.push(tscPath);
84
+ const agentCode = generateAgentExample(template);
85
+ const agentPath = join(targetDir, "src", "agents", "my-agent.ts");
86
+ writeFileSync(agentPath, agentCode);
87
+ files.push(agentPath);
88
+ const entryCode = `import { ReactiveAgents } from "@reactive-agents/runtime";
89
+
90
+ const agent = await ReactiveAgents.create()
91
+ .withProvider("anthropic")
92
+ .withName("my-agent")
93
+ .build();
94
+
95
+ const result = await agent.run("Hello, what can you help me with?");
96
+ console.log(result);
97
+ `;
98
+ const entryPath = join(targetDir, "src", "index.ts");
99
+ writeFileSync(entryPath, entryCode);
100
+ files.push(entryPath);
101
+ const envExample = `# LLM Provider
102
+ ANTHROPIC_API_KEY=sk-ant-...
103
+ # OPENAI_API_KEY=sk-...
104
+
105
+ # Optional
106
+ LLM_DEFAULT_MODEL=claude-sonnet-4-20250514
107
+ `;
108
+ const envPath = join(targetDir, ".env.example");
109
+ writeFileSync(envPath, envExample);
110
+ files.push(envPath);
111
+ return { files };
112
+ }
113
+ function generateAgentExample(template) {
114
+ switch (template) {
115
+ case "minimal":
116
+ return `import { ReactiveAgents } from "@reactive-agents/runtime";
117
+
118
+ export const createMyAgent = () =>
119
+ ReactiveAgents.create()
120
+ .withProvider("anthropic")
121
+ .withName("my-agent")
122
+ .build();
123
+ `;
124
+ case "standard":
125
+ return `import { ReactiveAgents } from "@reactive-agents/runtime";
126
+
127
+ export const createMyAgent = () =>
128
+ ReactiveAgents.create()
129
+ .withProvider("anthropic")
130
+ .withName("my-agent")
131
+ .withMemory(true)
132
+ .withReasoning("reactive")
133
+ .build();
134
+ `;
135
+ case "full":
136
+ return `import { ReactiveAgents } from "@reactive-agents/runtime";
137
+
138
+ export const createMyAgent = () =>
139
+ ReactiveAgents.create()
140
+ .withProvider("anthropic")
141
+ .withName("my-agent")
142
+ .withMemory(true)
143
+ .withReasoning("reactive")
144
+ .withVerification(true)
145
+ .withGuardrails(true)
146
+ .build();
147
+ `;
148
+ }
149
+ }
150
+
151
+ // src/commands/init.ts
152
+ var VALID_TEMPLATES = ["minimal", "standard", "full"];
153
+ function runInit(args) {
154
+ const name = args[0];
155
+ if (!name) {
156
+ console.error("Usage: reactive-agents init <project-name> [--template minimal|standard|full]");
157
+ process.exit(1);
158
+ }
159
+ let template = "standard";
160
+ const templateIdx = args.indexOf("--template");
161
+ if (templateIdx !== -1 && args[templateIdx + 1]) {
162
+ const t = args[templateIdx + 1];
163
+ if (!VALID_TEMPLATES.includes(t)) {
164
+ console.error(`Invalid template: ${t}. Valid options: ${VALID_TEMPLATES.join(", ")}`);
165
+ process.exit(1);
166
+ }
167
+ template = t;
168
+ }
169
+ const targetDir = join2(process.cwd(), name);
170
+ console.log(`Creating project "${name}" with template "${template}"...`);
171
+ const result = generateProject({ name, template, targetDir });
172
+ console.log(`Created ${result.files.length} files:`);
173
+ for (const file of result.files) {
174
+ console.log(` ${file}`);
175
+ }
176
+ console.log(`
177
+ Next steps:`);
178
+ console.log(` cd ${name}`);
179
+ console.log(` bun install`);
180
+ console.log(` cp .env.example .env # Add your API keys`);
181
+ console.log(` bun run dev`);
182
+ }
183
+
184
+ // src/generators/agent-generator.ts
185
+ import { writeFileSync as writeFileSync2, mkdirSync as mkdirSync2, existsSync as existsSync2 } from "fs";
186
+ import { join as join3, dirname } from "path";
187
+ var RECIPE_TEMPLATES = {
188
+ basic: (name) => `import { ReactiveAgents } from "@reactive-agents/runtime";
189
+
190
+ export const ${toCamelCase(name)} = () =>
191
+ ReactiveAgents.create()
192
+ .withProvider("anthropic")
193
+ .withName("${name}")
194
+ .build();
195
+ `,
196
+ researcher: (name) => `import { ReactiveAgents } from "@reactive-agents/runtime";
197
+
198
+ export const ${toCamelCase(name)} = () =>
199
+ ReactiveAgents.create()
200
+ .withProvider("anthropic")
201
+ .withName("${name}")
202
+ .withSystemPrompt("You are a research assistant. Gather information, synthesize findings, and provide well-sourced answers.")
203
+ .withMemory(true)
204
+ .withReasoning("reactive")
205
+ .build();
206
+ `,
207
+ coder: (name) => `import { ReactiveAgents } from "@reactive-agents/runtime";
208
+
209
+ export const ${toCamelCase(name)} = () =>
210
+ ReactiveAgents.create()
211
+ .withProvider("anthropic")
212
+ .withName("${name}")
213
+ .withSystemPrompt("You are a coding assistant. Write clean, well-tested code and explain your decisions.")
214
+ .withReasoning("reactive")
215
+ .build();
216
+ `,
217
+ orchestrator: (name) => `import { ReactiveAgents } from "@reactive-agents/runtime";
218
+
219
+ export const ${toCamelCase(name)} = () =>
220
+ ReactiveAgents.create()
221
+ .withProvider("anthropic")
222
+ .withName("${name}")
223
+ .withSystemPrompt("You are an orchestrator agent. Decompose complex tasks and coordinate sub-agents.")
224
+ .withMemory(true)
225
+ .withReasoning("reactive")
226
+ .build();
227
+ `
228
+ };
229
+ function generateAgent(config) {
230
+ const { name, recipe, targetDir } = config;
231
+ const fileName = `${toKebabCase(name)}.ts`;
232
+ const filePath = join3(targetDir, "src", "agents", fileName);
233
+ const dir = dirname(filePath);
234
+ if (!existsSync2(dir)) {
235
+ mkdirSync2(dir, { recursive: true });
236
+ }
237
+ const template = RECIPE_TEMPLATES[recipe];
238
+ writeFileSync2(filePath, template(name));
239
+ return { filePath };
240
+ }
241
+ function toCamelCase(str) {
242
+ return str.replace(/[-_]+(.)/g, (_, c) => c.toUpperCase()).replace(/^(.)/, (_, c) => c.toLowerCase());
243
+ }
244
+ function toKebabCase(str) {
245
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[_\s]+/g, "-").toLowerCase();
246
+ }
247
+
248
+ // src/commands/create-agent.ts
249
+ var VALID_RECIPES = ["basic", "researcher", "coder", "orchestrator"];
250
+ function runCreateAgent(args) {
251
+ const name = args[0];
252
+ if (!name) {
253
+ console.error("Usage: reactive-agents create agent <name> [--recipe basic|researcher|coder|orchestrator]");
254
+ process.exit(1);
255
+ }
256
+ let recipe = "basic";
257
+ const recipeIdx = args.indexOf("--recipe");
258
+ if (recipeIdx !== -1 && args[recipeIdx + 1]) {
259
+ const r = args[recipeIdx + 1];
260
+ if (!VALID_RECIPES.includes(r)) {
261
+ console.error(`Invalid recipe: ${r}. Valid options: ${VALID_RECIPES.join(", ")}`);
262
+ process.exit(1);
263
+ }
264
+ recipe = r;
265
+ }
266
+ console.log(`Creating agent "${name}" with recipe "${recipe}"...`);
267
+ const result = generateAgent({
268
+ name,
269
+ recipe,
270
+ targetDir: process.cwd()
271
+ });
272
+ console.log(`Created: ${result.filePath}`);
273
+ }
274
+
275
+ // src/commands/dev.ts
276
+ function runDev(_args) {
277
+ console.log("Starting development server...");
278
+ console.log("Dev server is a placeholder \u2014 Tier 1 implementation.");
279
+ console.log("Use 'bun run src/index.ts' to run your agent directly.");
280
+ }
281
+
282
+ // src/commands/eval.ts
283
+ function runEval(args) {
284
+ const subcommand = args[0];
285
+ if (subcommand !== "run") {
286
+ console.error("Usage: reactive-agents eval run --suite <suite-name>");
287
+ process.exit(1);
288
+ }
289
+ const suiteIdx = args.indexOf("--suite");
290
+ const suite = suiteIdx !== -1 ? args[suiteIdx + 1] : void 0;
291
+ if (!suite) {
292
+ console.error("Usage: reactive-agents eval run --suite <suite-name>");
293
+ process.exit(1);
294
+ }
295
+ console.log(`Running eval suite: ${suite}`);
296
+ console.log("Eval runner is a placeholder \u2014 Tier 1 implementation.");
297
+ console.log("When @reactive-agents/eval is built, this will run EvalService programmatically.");
298
+ }
299
+
300
+ // src/commands/playground.ts
301
+ function runPlayground(_args) {
302
+ console.log("Interactive playground is a placeholder \u2014 Tier 1 implementation.");
303
+ console.log("When ready, this will launch an interactive REPL for agent conversations.");
304
+ }
305
+
306
+ // src/commands/inspect.ts
307
+ function runInspect(args) {
308
+ const agentId = args[0];
309
+ if (!agentId) {
310
+ console.error("Usage: reactive-agents inspect <agent-id> [--trace last]");
311
+ process.exit(1);
312
+ }
313
+ console.log(`Inspecting agent: ${agentId}`);
314
+ console.log("Agent inspection is a placeholder \u2014 Tier 1 implementation.");
315
+ console.log("When @reactive-agents/observability is wired, this will show agent state, traces, and metrics.");
316
+ }
317
+
318
+ // src/commands/run.ts
319
+ import { ReactiveAgents } from "@reactive-agents/runtime";
320
+ async function runAgent(args) {
321
+ const promptParts = [];
322
+ let provider = "anthropic";
323
+ let model;
324
+ let name = "cli-agent";
325
+ for (let i = 0; i < args.length; i++) {
326
+ const arg = args[i];
327
+ if (arg === "--provider" && args[i + 1]) {
328
+ provider = args[++i];
329
+ } else if (arg === "--model" && args[i + 1]) {
330
+ model = args[++i];
331
+ } else if (arg === "--name" && args[i + 1]) {
332
+ name = args[++i];
333
+ } else if (!arg.startsWith("--")) {
334
+ promptParts.push(arg);
335
+ }
336
+ }
337
+ const prompt = promptParts.join(" ");
338
+ if (!prompt) {
339
+ console.error("Usage: reactive-agents run <prompt> [--provider anthropic|openai|ollama|test] [--model <model>] [--name <name>]");
340
+ process.exit(1);
341
+ }
342
+ console.log(`Building agent "${name}" with provider: ${provider}...`);
343
+ const builder = ReactiveAgents.create().withName(name).withProvider(provider);
344
+ if (model) {
345
+ builder.withModel(model);
346
+ }
347
+ try {
348
+ const agent = await builder.build();
349
+ console.log(`Agent ready: ${agent.agentId}`);
350
+ console.log(`Running: "${prompt}"
351
+ `);
352
+ const result = await agent.run(prompt);
353
+ if (result.success) {
354
+ console.log("\u2500\u2500\u2500 Output \u2500\u2500\u2500");
355
+ console.log(result.output || "(no output)");
356
+ console.log("\n\u2500\u2500\u2500 Metadata \u2500\u2500\u2500");
357
+ console.log(` Duration: ${result.metadata.duration}ms`);
358
+ console.log(` Steps: ${result.metadata.stepsCount}`);
359
+ console.log(` Cost: $${result.metadata.cost.toFixed(6)}`);
360
+ } else {
361
+ console.error("Agent execution failed.");
362
+ process.exit(1);
363
+ }
364
+ } catch (err) {
365
+ console.error("Error:", err instanceof Error ? err.message : String(err));
366
+ process.exit(1);
367
+ }
368
+ }
369
+
370
+ // src/banner.ts
371
+ var PURPLE = "\x1B[38;5;99m";
372
+ var INDIGO = "\x1B[38;5;63m";
373
+ var VIOLET = "\x1B[38;5;135m";
374
+ var LAVENDER = "\x1B[38;5;183m";
375
+ var DIM = "\x1B[2m";
376
+ var RESET = "\x1B[0m";
377
+ var BOLD = "\x1B[1m";
378
+ var BANNER = `
379
+ ${PURPLE} \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557${RESET}
380
+ ${PURPLE} \u2551${RESET} ${PURPLE}\u2551${RESET}
381
+ ${PURPLE} \u2551${RESET} ${INDIGO}\u250F\u2501\u2513 ${VIOLET}\u250F\u2501\u2513${RESET} ${LAVENDER}\u250F\u2501\u2513 \u257B${RESET} ${PURPLE}\u2551${RESET}
382
+ ${PURPLE} \u2551${RESET} ${INDIGO}\u2523\u2533\u251B ${VIOLET}\u2523\u2501\u252B${RESET} ${LAVENDER}\u250F\u254B\u251B\u250F\u254B\u251B${RESET} ${PURPLE}\u2551${RESET}
383
+ ${PURPLE} \u2551${RESET} ${INDIGO}\u2579\u2517\u2578 ${VIOLET}\u2579 \u2579${RESET} ${LAVENDER}\u2579 \u2579 ${RESET} ${PURPLE}\u2551${RESET}
384
+ ${PURPLE} \u2551${RESET} ${PURPLE}\u2551${RESET}
385
+ ${PURPLE} \u2551${RESET} ${BOLD}${INDIGO}R${VIOLET}eactive ${INDIGO}A${VIOLET}gents e${INDIGO}X${VIOLET}ecutable${RESET} ${PURPLE}\u2551${RESET}
386
+ ${PURPLE} \u2551${RESET} ${DIM}Type-safe AI agents on Effect-TS${RESET} ${PURPLE}\u2551${RESET}
387
+ ${PURPLE} \u2551${RESET} ${PURPLE}\u2551${RESET}
388
+ ${PURPLE} \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D${RESET}
389
+ `;
390
+ var VERSION = "0.1.0";
391
+ function printBanner() {
392
+ console.log(BANNER);
393
+ }
394
+ function printVersion() {
395
+ console.log(`${INDIGO}rax${RESET} ${DIM}v${VERSION}${RESET}`);
396
+ }
397
+
398
+ // src/index.ts
399
+ var HELP = `
400
+ Usage: rax <command> [options]
401
+
402
+ Commands:
403
+ init <name> [--template minimal|standard|full] Scaffold a new project
404
+ create agent <name> [--recipe basic|...] Generate an agent file
405
+ run <prompt> [--provider ...] [--model ...] Run an agent with a prompt
406
+ dev Start dev server
407
+ eval run --suite <name> Run evaluation suite
408
+ playground Launch interactive REPL
409
+ inspect <agent-id> [--trace last] Inspect agent state
410
+ help Show this help
411
+ version Show version
412
+ `.trimEnd();
413
+ function main(argv = process.argv.slice(2)) {
414
+ const command = argv[0];
415
+ switch (command) {
416
+ case "init":
417
+ runInit(argv.slice(1));
418
+ break;
419
+ case "create": {
420
+ const subcommand = argv[1];
421
+ if (subcommand === "agent") {
422
+ runCreateAgent(argv.slice(2));
423
+ } else {
424
+ console.error(`Unknown create subcommand: ${subcommand}`);
425
+ console.error("Usage: rax create agent <name>");
426
+ process.exit(1);
427
+ }
428
+ break;
429
+ }
430
+ case "run":
431
+ runAgent(argv.slice(1));
432
+ break;
433
+ case "dev":
434
+ runDev(argv.slice(1));
435
+ break;
436
+ case "eval":
437
+ runEval(argv.slice(1));
438
+ break;
439
+ case "playground":
440
+ runPlayground(argv.slice(1));
441
+ break;
442
+ case "inspect":
443
+ runInspect(argv.slice(1));
444
+ break;
445
+ case "version":
446
+ case "--version":
447
+ case "-v":
448
+ printVersion();
449
+ break;
450
+ case "help":
451
+ case "--help":
452
+ case "-h":
453
+ case void 0:
454
+ printBanner();
455
+ console.log(HELP);
456
+ break;
457
+ default:
458
+ console.error(`Unknown command: ${command}`);
459
+ printBanner();
460
+ console.log(HELP);
461
+ process.exit(1);
462
+ }
463
+ }
464
+ if (import.meta.main) {
465
+ main();
466
+ }
467
+ export {
468
+ main
469
+ };
470
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/init.ts","../src/generators/project-generator.ts","../src/generators/agent-generator.ts","../src/commands/create-agent.ts","../src/commands/dev.ts","../src/commands/eval.ts","../src/commands/playground.ts","../src/commands/inspect.ts","../src/commands/run.ts","../src/banner.ts","../src/index.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { generateProject, type ProjectTemplate } from \"../generators/project-generator.js\";\n\nconst VALID_TEMPLATES: ProjectTemplate[] = [\"minimal\", \"standard\", \"full\"];\n\nexport function runInit(args: string[]): void {\n const name = args[0];\n if (!name) {\n console.error(\"Usage: reactive-agents init <project-name> [--template minimal|standard|full]\");\n process.exit(1);\n }\n\n let template: ProjectTemplate = \"standard\";\n const templateIdx = args.indexOf(\"--template\");\n if (templateIdx !== -1 && args[templateIdx + 1]) {\n const t = args[templateIdx + 1] as ProjectTemplate;\n if (!VALID_TEMPLATES.includes(t)) {\n console.error(`Invalid template: ${t}. Valid options: ${VALID_TEMPLATES.join(\", \")}`);\n process.exit(1);\n }\n template = t;\n }\n\n const targetDir = join(process.cwd(), name);\n console.log(`Creating project \"${name}\" with template \"${template}\"...`);\n\n const result = generateProject({ name, template, targetDir });\n\n console.log(`Created ${result.files.length} files:`);\n for (const file of result.files) {\n console.log(` ${file}`);\n }\n console.log(`\\nNext steps:`);\n console.log(` cd ${name}`);\n console.log(` bun install`);\n console.log(` cp .env.example .env # Add your API keys`);\n console.log(` bun run dev`);\n}\n","import { mkdirSync, writeFileSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport type ProjectTemplate = \"minimal\" | \"standard\" | \"full\";\n\ninterface ProjectConfig {\n name: string;\n template: ProjectTemplate;\n targetDir: string;\n}\n\nconst TEMPLATE_DEPS: Record<ProjectTemplate, string[]> = {\n minimal: [\"@reactive-agents/core\", \"@reactive-agents/llm-provider\", \"@reactive-agents/runtime\"],\n standard: [\n \"@reactive-agents/core\",\n \"@reactive-agents/llm-provider\",\n \"@reactive-agents/memory\",\n \"@reactive-agents/reasoning\",\n \"@reactive-agents/tools\",\n \"@reactive-agents/runtime\",\n ],\n full: [\n \"@reactive-agents/core\",\n \"@reactive-agents/llm-provider\",\n \"@reactive-agents/memory\",\n \"@reactive-agents/reasoning\",\n \"@reactive-agents/tools\",\n \"@reactive-agents/verification\",\n \"@reactive-agents/cost\",\n \"@reactive-agents/identity\",\n \"@reactive-agents/orchestration\",\n \"@reactive-agents/observability\",\n \"@reactive-agents/interaction\",\n \"@reactive-agents/guardrails\",\n \"@reactive-agents/prompts\",\n \"@reactive-agents/runtime\",\n ],\n};\n\nexport function generateProject(config: ProjectConfig): { files: string[] } {\n const { name, template, targetDir } = config;\n const files: string[] = [];\n\n // Create directory structure\n const dirs = [targetDir, join(targetDir, \"src\"), join(targetDir, \"src\", \"agents\")];\n for (const dir of dirs) {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n // package.json\n const deps = Object.fromEntries(TEMPLATE_DEPS[template].map((d) => [d, \"latest\"]));\n const packageJson = {\n name,\n version: \"0.1.0\",\n type: \"module\",\n scripts: {\n dev: \"bun run src/index.ts\",\n build: \"tsc --noEmit\",\n test: \"bun test\",\n },\n dependencies: {\n effect: \"^3.10.0\",\n ...deps,\n },\n devDependencies: {\n typescript: \"^5.7.0\",\n \"bun-types\": \"latest\",\n },\n };\n const pkgPath = join(targetDir, \"package.json\");\n writeFileSync(pkgPath, JSON.stringify(packageJson, null, 2) + \"\\n\");\n files.push(pkgPath);\n\n // tsconfig.json\n const tsconfig = {\n compilerOptions: {\n target: \"ES2022\",\n module: \"ES2022\",\n moduleResolution: \"bundler\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n outDir: \"dist\",\n types: [\"bun-types\"],\n },\n include: [\"src/**/*\"],\n };\n const tscPath = join(targetDir, \"tsconfig.json\");\n writeFileSync(tscPath, JSON.stringify(tsconfig, null, 2) + \"\\n\");\n files.push(tscPath);\n\n // Example agent\n const agentCode = generateAgentExample(template);\n const agentPath = join(targetDir, \"src\", \"agents\", \"my-agent.ts\");\n writeFileSync(agentPath, agentCode);\n files.push(agentPath);\n\n // Entry point\n const entryCode = `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nconst agent = await ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"my-agent\")\n .build();\n\nconst result = await agent.run(\"Hello, what can you help me with?\");\nconsole.log(result);\n`;\n const entryPath = join(targetDir, \"src\", \"index.ts\");\n writeFileSync(entryPath, entryCode);\n files.push(entryPath);\n\n // .env.example\n const envExample = `# LLM Provider\nANTHROPIC_API_KEY=sk-ant-...\n# OPENAI_API_KEY=sk-...\n\n# Optional\nLLM_DEFAULT_MODEL=claude-sonnet-4-20250514\n`;\n const envPath = join(targetDir, \".env.example\");\n writeFileSync(envPath, envExample);\n files.push(envPath);\n\n return { files };\n}\n\nfunction generateAgentExample(template: ProjectTemplate): string {\n switch (template) {\n case \"minimal\":\n return `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport const createMyAgent = () =>\n ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"my-agent\")\n .build();\n`;\n case \"standard\":\n return `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport const createMyAgent = () =>\n ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"my-agent\")\n .withMemory(true)\n .withReasoning(\"reactive\")\n .build();\n`;\n case \"full\":\n return `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport const createMyAgent = () =>\n ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"my-agent\")\n .withMemory(true)\n .withReasoning(\"reactive\")\n .withVerification(true)\n .withGuardrails(true)\n .build();\n`;\n }\n}\n","import { writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\n\nexport type AgentRecipe = \"basic\" | \"researcher\" | \"coder\" | \"orchestrator\";\n\ninterface AgentConfig {\n name: string;\n recipe: AgentRecipe;\n targetDir: string;\n}\n\nconst RECIPE_TEMPLATES: Record<AgentRecipe, (name: string) => string> = {\n basic: (name) => `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport const ${toCamelCase(name)} = () =>\n ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"${name}\")\n .build();\n`,\n\n researcher: (name) => `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport const ${toCamelCase(name)} = () =>\n ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"${name}\")\n .withSystemPrompt(\"You are a research assistant. Gather information, synthesize findings, and provide well-sourced answers.\")\n .withMemory(true)\n .withReasoning(\"reactive\")\n .build();\n`,\n\n coder: (name) => `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport const ${toCamelCase(name)} = () =>\n ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"${name}\")\n .withSystemPrompt(\"You are a coding assistant. Write clean, well-tested code and explain your decisions.\")\n .withReasoning(\"reactive\")\n .build();\n`,\n\n orchestrator: (name) => `import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport const ${toCamelCase(name)} = () =>\n ReactiveAgents.create()\n .withProvider(\"anthropic\")\n .withName(\"${name}\")\n .withSystemPrompt(\"You are an orchestrator agent. Decompose complex tasks and coordinate sub-agents.\")\n .withMemory(true)\n .withReasoning(\"reactive\")\n .build();\n`,\n};\n\nexport function generateAgent(config: AgentConfig): { filePath: string } {\n const { name, recipe, targetDir } = config;\n const fileName = `${toKebabCase(name)}.ts`;\n const filePath = join(targetDir, \"src\", \"agents\", fileName);\n\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const template = RECIPE_TEMPLATES[recipe];\n writeFileSync(filePath, template(name));\n\n return { filePath };\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_]+(.)/g, (_, c) => c.toUpperCase())\n .replace(/^(.)/, (_, c) => c.toLowerCase());\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[_\\s]+/g, \"-\")\n .toLowerCase();\n}\n","import { generateAgent, type AgentRecipe } from \"../generators/agent-generator.js\";\n\nconst VALID_RECIPES: AgentRecipe[] = [\"basic\", \"researcher\", \"coder\", \"orchestrator\"];\n\nexport function runCreateAgent(args: string[]): void {\n const name = args[0];\n if (!name) {\n console.error(\"Usage: reactive-agents create agent <name> [--recipe basic|researcher|coder|orchestrator]\");\n process.exit(1);\n }\n\n let recipe: AgentRecipe = \"basic\";\n const recipeIdx = args.indexOf(\"--recipe\");\n if (recipeIdx !== -1 && args[recipeIdx + 1]) {\n const r = args[recipeIdx + 1] as AgentRecipe;\n if (!VALID_RECIPES.includes(r)) {\n console.error(`Invalid recipe: ${r}. Valid options: ${VALID_RECIPES.join(\", \")}`);\n process.exit(1);\n }\n recipe = r;\n }\n\n console.log(`Creating agent \"${name}\" with recipe \"${recipe}\"...`);\n\n const result = generateAgent({\n name,\n recipe,\n targetDir: process.cwd(),\n });\n\n console.log(`Created: ${result.filePath}`);\n}\n","export function runDev(_args: string[]): void {\n console.log(\"Starting development server...\");\n console.log(\"Dev server is a placeholder — Tier 1 implementation.\");\n console.log(\"Use 'bun run src/index.ts' to run your agent directly.\");\n}\n","export function runEval(args: string[]): void {\n const subcommand = args[0];\n if (subcommand !== \"run\") {\n console.error(\"Usage: reactive-agents eval run --suite <suite-name>\");\n process.exit(1);\n }\n\n const suiteIdx = args.indexOf(\"--suite\");\n const suite = suiteIdx !== -1 ? args[suiteIdx + 1] : undefined;\n\n if (!suite) {\n console.error(\"Usage: reactive-agents eval run --suite <suite-name>\");\n process.exit(1);\n }\n\n console.log(`Running eval suite: ${suite}`);\n console.log(\"Eval runner is a placeholder — Tier 1 implementation.\");\n console.log(\"When @reactive-agents/eval is built, this will run EvalService programmatically.\");\n}\n","export function runPlayground(_args: string[]): void {\n console.log(\"Interactive playground is a placeholder — Tier 1 implementation.\");\n console.log(\"When ready, this will launch an interactive REPL for agent conversations.\");\n}\n","export function runInspect(args: string[]): void {\n const agentId = args[0];\n if (!agentId) {\n console.error(\"Usage: reactive-agents inspect <agent-id> [--trace last]\");\n process.exit(1);\n }\n\n console.log(`Inspecting agent: ${agentId}`);\n console.log(\"Agent inspection is a placeholder — Tier 1 implementation.\");\n console.log(\"When @reactive-agents/observability is wired, this will show agent state, traces, and metrics.\");\n}\n","import { ReactiveAgents } from \"@reactive-agents/runtime\";\n\nexport async function runAgent(args: string[]): Promise<void> {\n // Parse arguments\n const promptParts: string[] = [];\n let provider: \"anthropic\" | \"openai\" | \"ollama\" | \"test\" = \"anthropic\";\n let model: string | undefined;\n let name = \"cli-agent\";\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--provider\" && args[i + 1]) {\n provider = args[++i] as typeof provider;\n } else if (arg === \"--model\" && args[i + 1]) {\n model = args[++i];\n } else if (arg === \"--name\" && args[i + 1]) {\n name = args[++i];\n } else if (!arg.startsWith(\"--\")) {\n promptParts.push(arg);\n }\n }\n\n const prompt = promptParts.join(\" \");\n if (!prompt) {\n console.error(\"Usage: reactive-agents run <prompt> [--provider anthropic|openai|ollama|test] [--model <model>] [--name <name>]\");\n process.exit(1);\n }\n\n console.log(`Building agent \"${name}\" with provider: ${provider}...`);\n\n const builder = ReactiveAgents.create()\n .withName(name)\n .withProvider(provider);\n\n if (model) {\n builder.withModel(model);\n }\n\n try {\n const agent = await builder.build();\n console.log(`Agent ready: ${agent.agentId}`);\n console.log(`Running: \"${prompt}\"\\n`);\n\n const result = await agent.run(prompt);\n\n if (result.success) {\n console.log(\"─── Output ───\");\n console.log(result.output || \"(no output)\");\n console.log(\"\\n─── Metadata ───\");\n console.log(` Duration: ${result.metadata.duration}ms`);\n console.log(` Steps: ${result.metadata.stepsCount}`);\n console.log(` Cost: $${result.metadata.cost.toFixed(6)}`);\n } else {\n console.error(\"Agent execution failed.\");\n process.exit(1);\n }\n } catch (err) {\n console.error(\"Error:\", err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n","const PURPLE = \"\\x1b[38;5;99m\";\nconst INDIGO = \"\\x1b[38;5;63m\";\nconst VIOLET = \"\\x1b[38;5;135m\";\nconst LAVENDER = \"\\x1b[38;5;183m\";\nconst DIM = \"\\x1b[2m\";\nconst RESET = \"\\x1b[0m\";\nconst BOLD = \"\\x1b[1m\";\n\nexport const BANNER = `\n${PURPLE} ╔══════════════════════════════════════════╗${RESET}\n${PURPLE} ║${RESET} ${PURPLE}║${RESET}\n${PURPLE} ║${RESET} ${INDIGO}┏━┓ ${VIOLET}┏━┓${RESET} ${LAVENDER}┏━┓ ╻${RESET} ${PURPLE}║${RESET}\n${PURPLE} ║${RESET} ${INDIGO}┣┳┛ ${VIOLET}┣━┫${RESET} ${LAVENDER}┏╋┛┏╋┛${RESET} ${PURPLE}║${RESET}\n${PURPLE} ║${RESET} ${INDIGO}╹┗╸ ${VIOLET}╹ ╹${RESET} ${LAVENDER}╹ ╹ ${RESET} ${PURPLE}║${RESET}\n${PURPLE} ║${RESET} ${PURPLE}║${RESET}\n${PURPLE} ║${RESET} ${BOLD}${INDIGO}R${VIOLET}eactive ${INDIGO}A${VIOLET}gents e${INDIGO}X${VIOLET}ecutable${RESET} ${PURPLE}║${RESET}\n${PURPLE} ║${RESET} ${DIM}Type-safe AI agents on Effect-TS${RESET} ${PURPLE}║${RESET}\n${PURPLE} ║${RESET} ${PURPLE}║${RESET}\n${PURPLE} ╚══════════════════════════════════════════╝${RESET}\n`;\n\nexport const VERSION = \"0.1.0\";\n\nexport function printBanner() {\n console.log(BANNER);\n}\n\nexport function printVersion() {\n console.log(`${INDIGO}rax${RESET} ${DIM}v${VERSION}${RESET}`);\n}\n","#!/usr/bin/env bun\n\nimport { runInit } from \"./commands/init.js\";\nimport { runCreateAgent } from \"./commands/create-agent.js\";\nimport { runDev } from \"./commands/dev.js\";\nimport { runEval } from \"./commands/eval.js\";\nimport { runPlayground } from \"./commands/playground.js\";\nimport { runInspect } from \"./commands/inspect.js\";\nimport { runAgent } from \"./commands/run.js\";\nimport { printBanner, printVersion, VERSION } from \"./banner.js\";\n\nconst HELP = `\n Usage: rax <command> [options]\n\n Commands:\n init <name> [--template minimal|standard|full] Scaffold a new project\n create agent <name> [--recipe basic|...] Generate an agent file\n run <prompt> [--provider ...] [--model ...] Run an agent with a prompt\n dev Start dev server\n eval run --suite <name> Run evaluation suite\n playground Launch interactive REPL\n inspect <agent-id> [--trace last] Inspect agent state\n help Show this help\n version Show version\n`.trimEnd();\n\nexport function main(argv: string[] = process.argv.slice(2)) {\n const command = argv[0];\n\n switch (command) {\n case \"init\":\n runInit(argv.slice(1));\n break;\n\n case \"create\": {\n const subcommand = argv[1];\n if (subcommand === \"agent\") {\n runCreateAgent(argv.slice(2));\n } else {\n console.error(`Unknown create subcommand: ${subcommand}`);\n console.error(\"Usage: rax create agent <name>\");\n process.exit(1);\n }\n break;\n }\n\n case \"run\":\n runAgent(argv.slice(1));\n break;\n\n case \"dev\":\n runDev(argv.slice(1));\n break;\n\n case \"eval\":\n runEval(argv.slice(1));\n break;\n\n case \"playground\":\n runPlayground(argv.slice(1));\n break;\n\n case \"inspect\":\n runInspect(argv.slice(1));\n break;\n\n case \"version\":\n case \"--version\":\n case \"-v\":\n printVersion();\n break;\n\n case \"help\":\n case \"--help\":\n case \"-h\":\n case undefined:\n printBanner();\n console.log(HELP);\n break;\n\n default:\n console.error(`Unknown command: ${command}`);\n printBanner();\n console.log(HELP);\n process.exit(1);\n }\n}\n\n// Run if invoked directly\nif (import.meta.main) {\n main();\n}\n"],"mappings":";;;;AAAA,SAAS,QAAAA,aAAY;;;ACArB,SAAS,WAAW,eAAe,kBAAkB;AACrD,SAAS,YAAY;AAUrB,IAAM,gBAAmD;AAAA,EACvD,SAAS,CAAC,yBAAyB,iCAAiC,0BAA0B;AAAA,EAC9F,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,gBAAgB,QAA4C;AAC1E,QAAM,EAAE,MAAM,UAAU,UAAU,IAAI;AACtC,QAAM,QAAkB,CAAC;AAGzB,QAAM,OAAO,CAAC,WAAW,KAAK,WAAW,KAAK,GAAG,KAAK,WAAW,OAAO,QAAQ,CAAC;AACjF,aAAW,OAAO,MAAM;AACtB,QAAI,CAAC,WAAW,GAAG,GAAG;AACpB,gBAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACpC;AAAA,EACF;AAGA,QAAM,OAAO,OAAO,YAAY,cAAc,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC;AACjF,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,GAAG;AAAA,IACL;AAAA,IACA,iBAAiB;AAAA,MACf,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,EACF;AACA,QAAM,UAAU,KAAK,WAAW,cAAc;AAC9C,gBAAc,SAAS,KAAK,UAAU,aAAa,MAAM,CAAC,IAAI,IAAI;AAClE,QAAM,KAAK,OAAO;AAGlB,QAAM,WAAW;AAAA,IACf,iBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,OAAO,CAAC,WAAW;AAAA,IACrB;AAAA,IACA,SAAS,CAAC,UAAU;AAAA,EACtB;AACA,QAAM,UAAU,KAAK,WAAW,eAAe;AAC/C,gBAAc,SAAS,KAAK,UAAU,UAAU,MAAM,CAAC,IAAI,IAAI;AAC/D,QAAM,KAAK,OAAO;AAGlB,QAAM,YAAY,qBAAqB,QAAQ;AAC/C,QAAM,YAAY,KAAK,WAAW,OAAO,UAAU,aAAa;AAChE,gBAAc,WAAW,SAAS;AAClC,QAAM,KAAK,SAAS;AAGpB,QAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUlB,QAAM,YAAY,KAAK,WAAW,OAAO,UAAU;AACnD,gBAAc,WAAW,SAAS;AAClC,QAAM,KAAK,SAAS;AAGpB,QAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOnB,QAAM,UAAU,KAAK,WAAW,cAAc;AAC9C,gBAAc,SAAS,UAAU;AACjC,QAAM,KAAK,OAAO;AAElB,SAAO,EAAE,MAAM;AACjB;AAEA,SAAS,qBAAqB,UAAmC;AAC/D,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQT,KAAK;AACH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUT,KAAK;AACH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYX;AACF;;;ADlKA,IAAM,kBAAqC,CAAC,WAAW,YAAY,MAAM;AAElE,SAAS,QAAQ,MAAsB;AAC5C,QAAM,OAAO,KAAK,CAAC;AACnB,MAAI,CAAC,MAAM;AACT,YAAQ,MAAM,+EAA+E;AAC7F,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,WAA4B;AAChC,QAAM,cAAc,KAAK,QAAQ,YAAY;AAC7C,MAAI,gBAAgB,MAAM,KAAK,cAAc,CAAC,GAAG;AAC/C,UAAM,IAAI,KAAK,cAAc,CAAC;AAC9B,QAAI,CAAC,gBAAgB,SAAS,CAAC,GAAG;AAChC,cAAQ,MAAM,qBAAqB,CAAC,oBAAoB,gBAAgB,KAAK,IAAI,CAAC,EAAE;AACpF,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,eAAW;AAAA,EACb;AAEA,QAAM,YAAYC,MAAK,QAAQ,IAAI,GAAG,IAAI;AAC1C,UAAQ,IAAI,qBAAqB,IAAI,oBAAoB,QAAQ,MAAM;AAEvE,QAAM,SAAS,gBAAgB,EAAE,MAAM,UAAU,UAAU,CAAC;AAE5D,UAAQ,IAAI,WAAW,OAAO,MAAM,MAAM,SAAS;AACnD,aAAW,QAAQ,OAAO,OAAO;AAC/B,YAAQ,IAAI,KAAK,IAAI,EAAE;AAAA,EACzB;AACA,UAAQ,IAAI;AAAA,YAAe;AAC3B,UAAQ,IAAI,QAAQ,IAAI,EAAE;AAC1B,UAAQ,IAAI,eAAe;AAC3B,UAAQ,IAAI,6CAA6C;AACzD,UAAQ,IAAI,eAAe;AAC7B;;;AErCA,SAAS,iBAAAC,gBAAe,aAAAC,YAAW,cAAAC,mBAAkB;AACrD,SAAS,QAAAC,OAAM,eAAe;AAU9B,IAAM,mBAAkE;AAAA,EACtE,OAAO,CAAC,SAAS;AAAA;AAAA,eAEJ,YAAY,IAAI,CAAC;AAAA;AAAA;AAAA,iBAGf,IAAI;AAAA;AAAA;AAAA,EAInB,YAAY,CAAC,SAAS;AAAA;AAAA,eAET,YAAY,IAAI,CAAC;AAAA;AAAA;AAAA,iBAGf,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnB,OAAO,CAAC,SAAS;AAAA;AAAA,eAEJ,YAAY,IAAI,CAAC;AAAA;AAAA;AAAA,iBAGf,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnB,cAAc,CAAC,SAAS;AAAA;AAAA,eAEX,YAAY,IAAI,CAAC;AAAA;AAAA;AAAA,iBAGf,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAEO,SAAS,cAAc,QAA2C;AACvE,QAAM,EAAE,MAAM,QAAQ,UAAU,IAAI;AACpC,QAAM,WAAW,GAAG,YAAY,IAAI,CAAC;AACrC,QAAM,WAAWA,MAAK,WAAW,OAAO,UAAU,QAAQ;AAE1D,QAAM,MAAM,QAAQ,QAAQ;AAC5B,MAAI,CAACD,YAAW,GAAG,GAAG;AACpB,IAAAD,WAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACpC;AAEA,QAAM,WAAW,iBAAiB,MAAM;AACxC,EAAAD,eAAc,UAAU,SAAS,IAAI,CAAC;AAEtC,SAAO,EAAE,SAAS;AACpB;AAEA,SAAS,YAAY,KAAqB;AACxC,SAAO,IACJ,QAAQ,aAAa,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,EAC9C,QAAQ,QAAQ,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC;AAC9C;AAEA,SAAS,YAAY,KAAqB;AACxC,SAAO,IACJ,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,WAAW,GAAG,EACtB,YAAY;AACjB;;;AClFA,IAAM,gBAA+B,CAAC,SAAS,cAAc,SAAS,cAAc;AAE7E,SAAS,eAAe,MAAsB;AACnD,QAAM,OAAO,KAAK,CAAC;AACnB,MAAI,CAAC,MAAM;AACT,YAAQ,MAAM,2FAA2F;AACzG,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,SAAsB;AAC1B,QAAM,YAAY,KAAK,QAAQ,UAAU;AACzC,MAAI,cAAc,MAAM,KAAK,YAAY,CAAC,GAAG;AAC3C,UAAM,IAAI,KAAK,YAAY,CAAC;AAC5B,QAAI,CAAC,cAAc,SAAS,CAAC,GAAG;AAC9B,cAAQ,MAAM,mBAAmB,CAAC,oBAAoB,cAAc,KAAK,IAAI,CAAC,EAAE;AAChF,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,aAAS;AAAA,EACX;AAEA,UAAQ,IAAI,mBAAmB,IAAI,kBAAkB,MAAM,MAAM;AAEjE,QAAM,SAAS,cAAc;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,WAAW,QAAQ,IAAI;AAAA,EACzB,CAAC;AAED,UAAQ,IAAI,YAAY,OAAO,QAAQ,EAAE;AAC3C;;;AC/BO,SAAS,OAAO,OAAuB;AAC5C,UAAQ,IAAI,gCAAgC;AAC5C,UAAQ,IAAI,2DAAsD;AAClE,UAAQ,IAAI,wDAAwD;AACtE;;;ACJO,SAAS,QAAQ,MAAsB;AAC5C,QAAM,aAAa,KAAK,CAAC;AACzB,MAAI,eAAe,OAAO;AACxB,YAAQ,MAAM,sDAAsD;AACpE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,QAAM,QAAQ,aAAa,KAAK,KAAK,WAAW,CAAC,IAAI;AAErD,MAAI,CAAC,OAAO;AACV,YAAQ,MAAM,sDAAsD;AACpE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,uBAAuB,KAAK,EAAE;AAC1C,UAAQ,IAAI,4DAAuD;AACnE,UAAQ,IAAI,kFAAkF;AAChG;;;AClBO,SAAS,cAAc,OAAuB;AACnD,UAAQ,IAAI,uEAAkE;AAC9E,UAAQ,IAAI,2EAA2E;AACzF;;;ACHO,SAAS,WAAW,MAAsB;AAC/C,QAAM,UAAU,KAAK,CAAC;AACtB,MAAI,CAAC,SAAS;AACZ,YAAQ,MAAM,0DAA0D;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,qBAAqB,OAAO,EAAE;AAC1C,UAAQ,IAAI,iEAA4D;AACxE,UAAQ,IAAI,gGAAgG;AAC9G;;;ACVA,SAAS,sBAAsB;AAE/B,eAAsB,SAAS,MAA+B;AAE5D,QAAM,cAAwB,CAAC;AAC/B,MAAI,WAAuD;AAC3D,MAAI;AACJ,MAAI,OAAO;AAEX,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,QAAQ,gBAAgB,KAAK,IAAI,CAAC,GAAG;AACvC,iBAAW,KAAK,EAAE,CAAC;AAAA,IACrB,WAAW,QAAQ,aAAa,KAAK,IAAI,CAAC,GAAG;AAC3C,cAAQ,KAAK,EAAE,CAAC;AAAA,IAClB,WAAW,QAAQ,YAAY,KAAK,IAAI,CAAC,GAAG;AAC1C,aAAO,KAAK,EAAE,CAAC;AAAA,IACjB,WAAW,CAAC,IAAI,WAAW,IAAI,GAAG;AAChC,kBAAY,KAAK,GAAG;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,SAAS,YAAY,KAAK,GAAG;AACnC,MAAI,CAAC,QAAQ;AACX,YAAQ,MAAM,iHAAiH;AAC/H,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,mBAAmB,IAAI,oBAAoB,QAAQ,KAAK;AAEpE,QAAM,UAAU,eAAe,OAAO,EACnC,SAAS,IAAI,EACb,aAAa,QAAQ;AAExB,MAAI,OAAO;AACT,YAAQ,UAAU,KAAK;AAAA,EACzB;AAEA,MAAI;AACF,UAAM,QAAQ,MAAM,QAAQ,MAAM;AAClC,YAAQ,IAAI,gBAAgB,MAAM,OAAO,EAAE;AAC3C,YAAQ,IAAI,aAAa,MAAM;AAAA,CAAK;AAEpC,UAAM,SAAS,MAAM,MAAM,IAAI,MAAM;AAErC,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,8CAAgB;AAC5B,cAAQ,IAAI,OAAO,UAAU,aAAa;AAC1C,cAAQ,IAAI,kDAAoB;AAChC,cAAQ,IAAI,eAAe,OAAO,SAAS,QAAQ,IAAI;AACvD,cAAQ,IAAI,YAAY,OAAO,SAAS,UAAU,EAAE;AACpD,cAAQ,IAAI,YAAY,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,EAAE;AAAA,IAC3D,OAAO;AACL,cAAQ,MAAM,yBAAyB;AACvC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;AC5DA,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,WAAW;AACjB,IAAM,MAAM;AACZ,IAAM,QAAQ;AACd,IAAM,OAAO;AAEN,IAAM,SAAS;AAAA,EACpB,MAAM,6QAAiD,KAAK;AAAA,EAC5D,MAAM,WAAM,KAAK,6CAA6C,MAAM,SAAI,KAAK;AAAA,EAC7E,MAAM,WAAM,KAAK,UAAU,MAAM,uBAAQ,MAAM,qBAAM,KAAK,MAAM,QAAQ,6BAAS,KAAK,qBAAqB,MAAM,SAAI,KAAK;AAAA,EAC1H,MAAM,WAAM,KAAK,UAAU,MAAM,uBAAQ,MAAM,qBAAM,KAAK,MAAM,QAAQ,uCAAS,KAAK,qBAAqB,MAAM,SAAI,KAAK;AAAA,EAC1H,MAAM,WAAM,KAAK,UAAU,MAAM,uBAAQ,MAAM,gBAAM,KAAK,MAAM,QAAQ,mBAAS,KAAK,qBAAqB,MAAM,SAAI,KAAK;AAAA,EAC1H,MAAM,WAAM,KAAK,6CAA6C,MAAM,SAAI,KAAK;AAAA,EAC7E,MAAM,WAAM,KAAK,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,WAAW,MAAM,IAAI,MAAM,UAAU,MAAM,IAAI,MAAM,WAAW,KAAK,gBAAgB,MAAM,SAAI,KAAK;AAAA,EAClJ,MAAM,WAAM,KAAK,MAAM,GAAG,mCAAmC,KAAK,UAAU,MAAM,SAAI,KAAK;AAAA,EAC3F,MAAM,WAAM,KAAK,6CAA6C,MAAM,SAAI,KAAK;AAAA,EAC7E,MAAM,6QAAiD,KAAK;AAAA;AAGvD,IAAM,UAAU;AAEhB,SAAS,cAAc;AAC5B,UAAQ,IAAI,MAAM;AACpB;AAEO,SAAS,eAAe;AAC7B,UAAQ,IAAI,GAAG,MAAM,MAAM,KAAK,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,EAAE;AAC9D;;;AClBA,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaX,QAAQ;AAEH,SAAS,KAAK,OAAiB,QAAQ,KAAK,MAAM,CAAC,GAAG;AAC3D,QAAM,UAAU,KAAK,CAAC;AAEtB,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,cAAQ,KAAK,MAAM,CAAC,CAAC;AACrB;AAAA,IAEF,KAAK,UAAU;AACb,YAAM,aAAa,KAAK,CAAC;AACzB,UAAI,eAAe,SAAS;AAC1B,uBAAe,KAAK,MAAM,CAAC,CAAC;AAAA,MAC9B,OAAO;AACL,gBAAQ,MAAM,8BAA8B,UAAU,EAAE;AACxD,gBAAQ,MAAM,gCAAgC;AAC9C,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA;AAAA,IACF;AAAA,IAEA,KAAK;AACH,eAAS,KAAK,MAAM,CAAC,CAAC;AACtB;AAAA,IAEF,KAAK;AACH,aAAO,KAAK,MAAM,CAAC,CAAC;AACpB;AAAA,IAEF,KAAK;AACH,cAAQ,KAAK,MAAM,CAAC,CAAC;AACrB;AAAA,IAEF,KAAK;AACH,oBAAc,KAAK,MAAM,CAAC,CAAC;AAC3B;AAAA,IAEF,KAAK;AACH,iBAAW,KAAK,MAAM,CAAC,CAAC;AACxB;AAAA,IAEF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,mBAAa;AACb;AAAA,IAEF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,kBAAY;AACZ,cAAQ,IAAI,IAAI;AAChB;AAAA,IAEF;AACE,cAAQ,MAAM,oBAAoB,OAAO,EAAE;AAC3C,kBAAY;AACZ,cAAQ,IAAI,IAAI;AAChB,cAAQ,KAAK,CAAC;AAAA,EAClB;AACF;AAGA,IAAI,YAAY,MAAM;AACpB,OAAK;AACP;","names":["join","join","writeFileSync","mkdirSync","existsSync","join"]}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@reactive-agents/cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "bin": {
7
+ "rax": "dist/index.js",
8
+ "reactive-agents": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsup --config tsup.config.ts",
12
+ "typecheck": "tsc --noEmit",
13
+ "test": "bun test"
14
+ },
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/tylerjrbuell/reactive-agents-ts.git",
19
+ "directory": "apps/cli"
20
+ },
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "dependencies": {
30
+ "effect": "^3.10.0",
31
+ "@reactive-agents/core": "0.1.0",
32
+ "@reactive-agents/runtime": "0.1.0"
33
+ },
34
+ "devDependencies": {
35
+ "typescript": "^5.7.0",
36
+ "bun-types": "latest"
37
+ },
38
+ "description": "rax — the Reactive Agents CLI for scaffolding, running, and inspecting AI agents",
39
+ "homepage": "https://tylerjrbuell.github.io/reactive-agents-ts/",
40
+ "bugs": {
41
+ "url": "https://github.com/tylerjrbuell/reactive-agents-ts/issues"
42
+ },
43
+ "types": "./dist/index.d.ts"
44
+ }