@defai.digital/automatosx 8.4.0 → 8.4.2
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/README.md +1 -1
- package/dist/index.js +189 -30
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ AutomatosX is a pure CLI orchestration platform for AI agents. It wraps around `
|
|
|
13
13
|
[](https://www.microsoft.com/windows)
|
|
14
14
|
[](https://ubuntu.com)
|
|
15
15
|
|
|
16
|
-
**Status**: ✅ **Production Ready** | v8.
|
|
16
|
+
**Status**: ✅ **Production Ready** | v8.4.2 | 20 Specialized Agents | Pure CLI Orchestration | Simplified Architecture
|
|
17
17
|
|
|
18
18
|
> 🎉 **NEW in v8.3.0**: Major simplification! Removed ~36,000 lines of code including policy routing, free-tier management, and SDK providers. AutomatosX is now a pure CLI orchestration wrapper around `claude`, `gemini`, and `codex` commands. Simpler, faster, easier to maintain. See [Migration Guide](MIGRATION.md) for upgrade details.
|
|
19
19
|
|
package/dist/index.js
CHANGED
|
@@ -1266,13 +1266,13 @@ var init_base_provider = __esm({
|
|
|
1266
1266
|
}
|
|
1267
1267
|
try {
|
|
1268
1268
|
const escapedPrompt = this.escapeShellArg(prompt);
|
|
1269
|
-
const
|
|
1270
|
-
logger.debug(`Executing ${
|
|
1271
|
-
command:
|
|
1269
|
+
const cliCommand2 = this.getCLICommand();
|
|
1270
|
+
logger.debug(`Executing ${cliCommand2} CLI`, {
|
|
1271
|
+
command: cliCommand2,
|
|
1272
1272
|
promptLength: prompt.length
|
|
1273
1273
|
});
|
|
1274
1274
|
const { stdout, stderr } = await execAsync(
|
|
1275
|
-
`${
|
|
1275
|
+
`${cliCommand2} ${escapedPrompt}`,
|
|
1276
1276
|
{
|
|
1277
1277
|
timeout: this.config.timeout || 12e4,
|
|
1278
1278
|
maxBuffer: 10 * 1024 * 1024,
|
|
@@ -1294,12 +1294,12 @@ var init_base_provider = __esm({
|
|
|
1294
1294
|
}
|
|
1295
1295
|
);
|
|
1296
1296
|
if (stderr) {
|
|
1297
|
-
logger.warn(`${
|
|
1297
|
+
logger.warn(`${cliCommand2} CLI stderr output`, { stderr: stderr.trim() });
|
|
1298
1298
|
}
|
|
1299
1299
|
if (!stdout) {
|
|
1300
|
-
throw new Error(`${
|
|
1300
|
+
throw new Error(`${cliCommand2} CLI returned empty output. stderr: ${stderr || "none"}`);
|
|
1301
1301
|
}
|
|
1302
|
-
logger.debug(`${
|
|
1302
|
+
logger.debug(`${cliCommand2} CLI execution successful`, {
|
|
1303
1303
|
responseLength: stdout.trim().length
|
|
1304
1304
|
});
|
|
1305
1305
|
return stdout.trim();
|
|
@@ -1314,10 +1314,10 @@ var init_base_provider = __esm({
|
|
|
1314
1314
|
*/
|
|
1315
1315
|
async checkCLIAvailable() {
|
|
1316
1316
|
try {
|
|
1317
|
-
const
|
|
1318
|
-
const path6 = await findOnPath(
|
|
1317
|
+
const cliCommand2 = this.getCLICommand();
|
|
1318
|
+
const path6 = await findOnPath(cliCommand2);
|
|
1319
1319
|
const available = path6 !== null;
|
|
1320
|
-
logger.debug(`${
|
|
1320
|
+
logger.debug(`${cliCommand2} CLI availability check`, {
|
|
1321
1321
|
available,
|
|
1322
1322
|
path: path6 || "not found"
|
|
1323
1323
|
});
|
|
@@ -4113,6 +4113,9 @@ function validateConfigWithZod(config) {
|
|
|
4113
4113
|
if (result.success) {
|
|
4114
4114
|
return [];
|
|
4115
4115
|
}
|
|
4116
|
+
if (!result.error?.issues || !Array.isArray(result.error.issues)) {
|
|
4117
|
+
return ["Configuration validation failed with unknown error structure"];
|
|
4118
|
+
}
|
|
4116
4119
|
return result.error.issues.map((err) => {
|
|
4117
4120
|
const path6 = err.path.join(".");
|
|
4118
4121
|
return `${path6}: ${err.message}`;
|
|
@@ -5943,9 +5946,9 @@ async function initializeGitRepository(projectDir) {
|
|
|
5943
5946
|
logger.info("Git repository already exists, skipping initialization");
|
|
5944
5947
|
return;
|
|
5945
5948
|
}
|
|
5946
|
-
const { spawn:
|
|
5949
|
+
const { spawn: spawn6 } = await import('child_process');
|
|
5947
5950
|
await new Promise((resolve13, reject) => {
|
|
5948
|
-
const child =
|
|
5951
|
+
const child = spawn6("git", ["init"], {
|
|
5949
5952
|
cwd: projectDir,
|
|
5950
5953
|
stdio: "pipe",
|
|
5951
5954
|
shell: false
|
|
@@ -6831,7 +6834,7 @@ var initCommand = {
|
|
|
6831
6834
|
console.log(chalk5.cyan("\u{1F916} AI-Powered Analysis Mode\n"));
|
|
6832
6835
|
console.log(chalk5.white(" Using backend agent to analyze your project..."));
|
|
6833
6836
|
console.log(chalk5.dim(" This will take 1-2 minutes\n"));
|
|
6834
|
-
const { spawn:
|
|
6837
|
+
const { spawn: spawn6 } = await import('child_process');
|
|
6835
6838
|
const { promisify: promisify5 } = await import('util');
|
|
6836
6839
|
const execFile = promisify5((await import('child_process')).execFile);
|
|
6837
6840
|
try {
|
|
@@ -6858,7 +6861,7 @@ Include sections:
|
|
|
6858
6861
|
Make it comprehensive but scannable, similar to the AutomatosX ax.md example.`;
|
|
6859
6862
|
const axCommand = process.platform === "win32" ? "ax.cmd" : "ax";
|
|
6860
6863
|
console.log(chalk5.dim(' Running: ax run backend "analyze project"\n'));
|
|
6861
|
-
const child =
|
|
6864
|
+
const child = spawn6(axCommand, ["run", "backend", analysisTask], {
|
|
6862
6865
|
stdio: "inherit",
|
|
6863
6866
|
shell: false,
|
|
6864
6867
|
// SECURITY: Prevent command injection via analysis task
|
|
@@ -7271,12 +7274,12 @@ var listCommand = {
|
|
|
7271
7274
|
};
|
|
7272
7275
|
async function listAgents(pathResolver, format) {
|
|
7273
7276
|
const agentsDir = pathResolver.getAgentsDirectory();
|
|
7274
|
-
const { existsSync:
|
|
7277
|
+
const { existsSync: existsSync22 } = await import('fs');
|
|
7275
7278
|
const projectDir = await detectProjectRoot();
|
|
7276
7279
|
const examplesDir = join(projectDir, "examples", "agents");
|
|
7277
7280
|
try {
|
|
7278
7281
|
const agentFiles = [];
|
|
7279
|
-
if (
|
|
7282
|
+
if (existsSync22(agentsDir)) {
|
|
7280
7283
|
const files = await readdir(agentsDir);
|
|
7281
7284
|
for (const file of files) {
|
|
7282
7285
|
if (file.endsWith(".yaml") || file.endsWith(".yml")) {
|
|
@@ -7288,7 +7291,7 @@ async function listAgents(pathResolver, format) {
|
|
|
7288
7291
|
}
|
|
7289
7292
|
}
|
|
7290
7293
|
}
|
|
7291
|
-
if (
|
|
7294
|
+
if (existsSync22(examplesDir)) {
|
|
7292
7295
|
const files = await readdir(examplesDir);
|
|
7293
7296
|
for (const file of files) {
|
|
7294
7297
|
if (file.endsWith(".yaml") || file.endsWith(".yml")) {
|
|
@@ -21285,8 +21288,8 @@ Complexity Score: ${complexity.score}/10
|
|
|
21285
21288
|
rl.close();
|
|
21286
21289
|
if (executeAnswer.toLowerCase() !== "n" && executeAnswer.toLowerCase() !== "no") {
|
|
21287
21290
|
console.log(chalk5.blue("\n\u{1F680} Executing spec-driven workflow...\n"));
|
|
21288
|
-
const { spawn:
|
|
21289
|
-
const child =
|
|
21291
|
+
const { spawn: spawn6 } = await import('child_process');
|
|
21292
|
+
const child = spawn6("ax", ["spec", "run", "--parallel"], {
|
|
21290
21293
|
stdio: "inherit",
|
|
21291
21294
|
shell: false
|
|
21292
21295
|
// FIXED Bug #140: Removed shell:true for security
|
|
@@ -22684,11 +22687,11 @@ async function getCurrentVersion() {
|
|
|
22684
22687
|
return result.dependencies["@defai.digital/automatosx"]?.version || "unknown";
|
|
22685
22688
|
} catch (error) {
|
|
22686
22689
|
const { readFile: readFile14 } = await import('fs/promises');
|
|
22687
|
-
const { dirname: dirname18, join:
|
|
22690
|
+
const { dirname: dirname18, join: join42 } = await import('path');
|
|
22688
22691
|
const { fileURLToPath: fileURLToPath11 } = await import('url');
|
|
22689
22692
|
const __filename8 = fileURLToPath11(import.meta.url);
|
|
22690
22693
|
const __dirname9 = dirname18(__filename8);
|
|
22691
|
-
const pkgPath =
|
|
22694
|
+
const pkgPath = join42(__dirname9, "../../../package.json");
|
|
22692
22695
|
const content = await readFile14(pkgPath, "utf-8");
|
|
22693
22696
|
const pkg = JSON.parse(content);
|
|
22694
22697
|
return pkg.version;
|
|
@@ -41293,10 +41296,10 @@ async function handleReset() {
|
|
|
41293
41296
|
`));
|
|
41294
41297
|
}
|
|
41295
41298
|
async function handleTrace(workspacePath, argv) {
|
|
41296
|
-
const { existsSync:
|
|
41297
|
-
const { join:
|
|
41298
|
-
const traceFile =
|
|
41299
|
-
if (!
|
|
41299
|
+
const { existsSync: existsSync22, readFileSync: readFileSync9, watchFile } = await import('fs');
|
|
41300
|
+
const { join: join42 } = await import('path');
|
|
41301
|
+
const traceFile = join42(workspacePath, ".automatosx/logs/router.trace.jsonl");
|
|
41302
|
+
if (!existsSync22(traceFile)) {
|
|
41300
41303
|
console.log(chalk5.yellow("\n\u26A0\uFE0F No trace log found\n"));
|
|
41301
41304
|
console.log(chalk5.gray(`Expected location: ${traceFile}
|
|
41302
41305
|
`));
|
|
@@ -41313,7 +41316,7 @@ async function handleTrace(workspacePath, argv) {
|
|
|
41313
41316
|
`));
|
|
41314
41317
|
if (argv.follow) {
|
|
41315
41318
|
console.log(chalk5.gray("Following trace log (Ctrl+C to exit)...\n"));
|
|
41316
|
-
const content =
|
|
41319
|
+
const content = readFileSync9(traceFile, "utf-8");
|
|
41317
41320
|
const lines = content.split("\n").filter((l) => l.trim());
|
|
41318
41321
|
const recentLines = lines.slice(-(argv.lines || 20));
|
|
41319
41322
|
for (const line of recentLines) {
|
|
@@ -41323,7 +41326,7 @@ async function handleTrace(workspacePath, argv) {
|
|
|
41323
41326
|
const { unwatchFile } = await import('fs');
|
|
41324
41327
|
watchFile(traceFile, { interval: 500 }, (curr, prev) => {
|
|
41325
41328
|
if (curr.size > lastSize) {
|
|
41326
|
-
const newContent =
|
|
41329
|
+
const newContent = readFileSync9(traceFile, "utf-8");
|
|
41327
41330
|
const newLines = newContent.slice(lastSize).split("\n").filter((l) => l.trim());
|
|
41328
41331
|
for (const line of newLines) {
|
|
41329
41332
|
displayTraceEvent(line);
|
|
@@ -41341,7 +41344,7 @@ async function handleTrace(workspacePath, argv) {
|
|
|
41341
41344
|
await new Promise(() => {
|
|
41342
41345
|
});
|
|
41343
41346
|
} else {
|
|
41344
|
-
const content =
|
|
41347
|
+
const content = readFileSync9(traceFile, "utf-8");
|
|
41345
41348
|
const lines = content.split("\n").filter((l) => l.trim());
|
|
41346
41349
|
const recentLines = lines.slice(-(argv.lines || 20));
|
|
41347
41350
|
if (recentLines.length === 0) {
|
|
@@ -43575,6 +43578,162 @@ async function handleKill(argv) {
|
|
|
43575
43578
|
}
|
|
43576
43579
|
}
|
|
43577
43580
|
|
|
43581
|
+
// src/cli/commands/cli.ts
|
|
43582
|
+
init_esm_shims();
|
|
43583
|
+
init_logger();
|
|
43584
|
+
var cliCommand = {
|
|
43585
|
+
command: "cli [prompt]",
|
|
43586
|
+
describe: "Launch Grok CLI with AutomatosX integration",
|
|
43587
|
+
builder: (yargs2) => {
|
|
43588
|
+
return yargs2.positional("prompt", {
|
|
43589
|
+
type: "string",
|
|
43590
|
+
describe: "Optional initial prompt to send to Grok"
|
|
43591
|
+
}).option("model", {
|
|
43592
|
+
type: "string",
|
|
43593
|
+
alias: "m",
|
|
43594
|
+
describe: "Grok model to use (e.g., grok-2)"
|
|
43595
|
+
}).option("config", {
|
|
43596
|
+
type: "string",
|
|
43597
|
+
alias: "c",
|
|
43598
|
+
describe: "Path to Grok settings file (default: ./.grok/settings.json or ~/.grok/settings.json)"
|
|
43599
|
+
}).example("$0 cli", "Launch Grok CLI interactively").example('$0 cli "Design a REST API"', "Send prompt directly to Grok").example("$0 cli --model grok-2", "Use specific Grok model");
|
|
43600
|
+
},
|
|
43601
|
+
handler: async (argv) => {
|
|
43602
|
+
try {
|
|
43603
|
+
let configPath = argv.config;
|
|
43604
|
+
if (!configPath) {
|
|
43605
|
+
const locations = [
|
|
43606
|
+
// 1. Project-specific .grok directory (current directory)
|
|
43607
|
+
join(process.cwd(), ".grok", "settings.json"),
|
|
43608
|
+
// 2. User home directory .grok
|
|
43609
|
+
join(homedir(), ".grok", "settings.json")
|
|
43610
|
+
];
|
|
43611
|
+
for (const location of locations) {
|
|
43612
|
+
if (existsSync(location)) {
|
|
43613
|
+
configPath = location;
|
|
43614
|
+
break;
|
|
43615
|
+
}
|
|
43616
|
+
}
|
|
43617
|
+
if (!configPath) {
|
|
43618
|
+
configPath = join(homedir(), ".grok", "settings.json");
|
|
43619
|
+
}
|
|
43620
|
+
}
|
|
43621
|
+
const grokCommand = process.platform === "win32" ? "grok.cmd" : "grok";
|
|
43622
|
+
logger.info("Launching Grok CLI", {
|
|
43623
|
+
configPath,
|
|
43624
|
+
hasPrompt: !!argv.prompt,
|
|
43625
|
+
model: argv.model
|
|
43626
|
+
});
|
|
43627
|
+
if (!existsSync(configPath)) {
|
|
43628
|
+
console.log(chalk5.yellow("\n\u26A0\uFE0F Grok settings not found"));
|
|
43629
|
+
console.log(chalk5.gray(" Checked:"));
|
|
43630
|
+
console.log(chalk5.gray(" - ./.grok/settings.json (project)"));
|
|
43631
|
+
console.log(chalk5.gray(" - ~/.grok/settings.json (home)"));
|
|
43632
|
+
console.log(chalk5.blue("\n\u{1F4A1} To set up Grok:"));
|
|
43633
|
+
console.log(chalk5.gray(" 1. Install Grok CLI: npm install -g @grok/cli"));
|
|
43634
|
+
console.log(chalk5.gray(" 2. Configure API key: grok config set api-key YOUR_KEY"));
|
|
43635
|
+
console.log(chalk5.gray(" 3. This will create ~/.grok/settings.json"));
|
|
43636
|
+
console.log(chalk5.gray(" 4. Run ax cli again\n"));
|
|
43637
|
+
process.exit(1);
|
|
43638
|
+
}
|
|
43639
|
+
try {
|
|
43640
|
+
const configContent = readFileSync(configPath, "utf-8");
|
|
43641
|
+
const config = JSON.parse(configContent);
|
|
43642
|
+
const isPlaceholder = config.apiKey && (config.apiKey.includes("YOUR_") || config.apiKey.includes("_KEY_HERE") || config.apiKey === "YOUR_XAI_API_KEY_HERE" || config.apiKey === "YOUR_ZAI_API_KEY_HERE");
|
|
43643
|
+
if (!config.apiKey || isPlaceholder) {
|
|
43644
|
+
if (!process.env.GROK_API_KEY) {
|
|
43645
|
+
console.log(chalk5.yellow("\n\u26A0\uFE0F No valid API key found in Grok config"));
|
|
43646
|
+
console.log(chalk5.gray(" Config path:"), chalk5.white(configPath));
|
|
43647
|
+
if (isPlaceholder) {
|
|
43648
|
+
console.log(chalk5.gray(" Issue: API key is still a placeholder"));
|
|
43649
|
+
}
|
|
43650
|
+
console.log(chalk5.blue("\n\u{1F4A1} To configure your API key:"));
|
|
43651
|
+
console.log(chalk5.gray(" Option 1: Set environment variable:"));
|
|
43652
|
+
console.log(chalk5.gray(' export GROK_API_KEY="your-actual-key"'));
|
|
43653
|
+
console.log(chalk5.gray(" Option 2: Update settings.json with real API key"));
|
|
43654
|
+
console.log(chalk5.gray(" Option 3: Use grok CLI directly:"));
|
|
43655
|
+
console.log(chalk5.gray(" grok config set api-key YOUR_KEY\n"));
|
|
43656
|
+
process.exit(1);
|
|
43657
|
+
}
|
|
43658
|
+
}
|
|
43659
|
+
logger.debug("Grok config loaded", {
|
|
43660
|
+
hasApiKey: !!config.apiKey,
|
|
43661
|
+
model: config.defaultModel || "not set",
|
|
43662
|
+
server: config.server || "default"
|
|
43663
|
+
});
|
|
43664
|
+
} catch (error) {
|
|
43665
|
+
console.log(chalk5.red("\n\u274C Invalid Grok settings file at:"), chalk5.gray(configPath));
|
|
43666
|
+
console.log(chalk5.gray(" Error:"), error instanceof Error ? error.message : String(error));
|
|
43667
|
+
console.log(chalk5.blue("\n\u{1F4A1} Try recreating your settings:"));
|
|
43668
|
+
console.log(chalk5.gray(" grok config set api-key YOUR_KEY"));
|
|
43669
|
+
console.log(chalk5.gray(" This will recreate ~/.grok/settings.json\n"));
|
|
43670
|
+
process.exit(1);
|
|
43671
|
+
}
|
|
43672
|
+
const grokArgs = [];
|
|
43673
|
+
if (argv.model) {
|
|
43674
|
+
grokArgs.push("--model", argv.model);
|
|
43675
|
+
}
|
|
43676
|
+
if (argv.config) {
|
|
43677
|
+
grokArgs.push("--config", argv.config);
|
|
43678
|
+
}
|
|
43679
|
+
if (argv.prompt) {
|
|
43680
|
+
grokArgs.push(argv.prompt);
|
|
43681
|
+
}
|
|
43682
|
+
console.log(chalk5.blue("\n\u{1F680} Launching Grok CLI..."));
|
|
43683
|
+
if (argv.prompt) {
|
|
43684
|
+
console.log(chalk5.gray(" Prompt:"), chalk5.white(argv.prompt));
|
|
43685
|
+
}
|
|
43686
|
+
if (argv.model) {
|
|
43687
|
+
console.log(chalk5.gray(" Model:"), chalk5.white(argv.model));
|
|
43688
|
+
}
|
|
43689
|
+
console.log(chalk5.gray(" Config:"), chalk5.white(configPath));
|
|
43690
|
+
console.log(chalk5.gray("\n Press Ctrl+C to exit\n"));
|
|
43691
|
+
const grokProcess = spawn(grokCommand, grokArgs, {
|
|
43692
|
+
stdio: "inherit",
|
|
43693
|
+
shell: true,
|
|
43694
|
+
env: {
|
|
43695
|
+
...process.env,
|
|
43696
|
+
GROK_CONFIG_PATH: configPath
|
|
43697
|
+
}
|
|
43698
|
+
});
|
|
43699
|
+
grokProcess.on("error", (error) => {
|
|
43700
|
+
if (error.code === "ENOENT") {
|
|
43701
|
+
console.log(chalk5.red("\n\u274C Grok CLI not found"));
|
|
43702
|
+
console.log(chalk5.blue("\n\u{1F4A1} To install Grok CLI:"));
|
|
43703
|
+
console.log(chalk5.gray(" npm install -g @grok/cli"));
|
|
43704
|
+
console.log(chalk5.gray("\n Or visit: https://grok.x.ai/cli\n"));
|
|
43705
|
+
} else {
|
|
43706
|
+
console.log(chalk5.red("\n\u274C Error launching Grok CLI:"), error.message);
|
|
43707
|
+
}
|
|
43708
|
+
process.exit(1);
|
|
43709
|
+
});
|
|
43710
|
+
grokProcess.on("exit", (code) => {
|
|
43711
|
+
if (code !== 0 && code !== null) {
|
|
43712
|
+
logger.debug("Grok CLI exited with code", { code });
|
|
43713
|
+
}
|
|
43714
|
+
process.exit(code || 0);
|
|
43715
|
+
});
|
|
43716
|
+
const cleanup = () => {
|
|
43717
|
+
if (!grokProcess.killed) {
|
|
43718
|
+
grokProcess.kill("SIGTERM");
|
|
43719
|
+
}
|
|
43720
|
+
};
|
|
43721
|
+
process.on("SIGINT", cleanup);
|
|
43722
|
+
process.on("SIGTERM", cleanup);
|
|
43723
|
+
process.on("exit", cleanup);
|
|
43724
|
+
} catch (error) {
|
|
43725
|
+
logger.error("Failed to launch Grok CLI", { error });
|
|
43726
|
+
console.log(chalk5.red("\n\u274C Failed to launch Grok CLI"));
|
|
43727
|
+
if (error instanceof Error) {
|
|
43728
|
+
console.log(chalk5.gray(" Error:"), error.message);
|
|
43729
|
+
}
|
|
43730
|
+
console.log(chalk5.blue("\n\u{1F4A1} Try running Grok directly:"));
|
|
43731
|
+
console.log(chalk5.gray(' grok "your prompt"\n'));
|
|
43732
|
+
process.exit(1);
|
|
43733
|
+
}
|
|
43734
|
+
}
|
|
43735
|
+
};
|
|
43736
|
+
|
|
43578
43737
|
// src/cli/index.ts
|
|
43579
43738
|
installExitHandlers();
|
|
43580
43739
|
var VERSION2 = getVersion();
|
|
@@ -43582,7 +43741,7 @@ globalTracker.mark("cli_start");
|
|
|
43582
43741
|
(async () => {
|
|
43583
43742
|
try {
|
|
43584
43743
|
globalTracker.mark("yargs_parse_start");
|
|
43585
|
-
const argv = await yargs(hideBin(process.argv)).scriptName("automatosx").usage("$0 <command> [options]").usage("\nAI Agent Orchestration Platform").example("$0 setup", "Set up project").example("$0 init", "Initialize ax.md project context").example("$0 agent create backend --template developer", "Create agent from template").example("$0 agent list", "List all agents").example('$0 run assistant "Hello"', "Run assistant agent").example('$0 run backend "task" --interactive', "Run with interactive checkpoints").example("$0 resume <run-id>", "Resume from checkpoint").example("$0 runs list", "List checkpoint runs").example('$0 session create "Build API" backend', "Create multi-agent session").example("$0 session list", "List all sessions").example("$0 workspace stats", "Show workspace statistics").example("$0 list agents", "List available agents").example('$0 memory search "topic"', "Search memory").example("$0 cache status", "View cache statistics").example("$0 config --list", "View configuration").example("$0 provider-limits", "Show provider usage limits").example("$0 mcp", "Start MCP server for Claude Code").example("$0 update", "Update to latest version").example("$0 gemini status", "Show Gemini CLI integration status").example("$0 spec run", "Execute spec-driven tasks").example("$0 spec status", "Show spec task status").example("$0 providers list", "List all providers").example("$0 providers info openai", "Show provider details").example("$0 gen plan workflow.ax.yaml", "Generate execution plan").example("$0 gen dag workflow.ax.yaml", "Generate DAG JSON").example("$0 doctor", "Run diagnostic checks").example("$0 doctor openai", "Check OpenAI provider setup").example("$0 configure", "Configure provider integration mode").example("$0 cleanup", "Clean up orphaned processes").example("$0 cleanup openai --force", "Force cleanup OpenAI processes").example("$0 analytics summary", "Show usage analytics summary").example("$0 analytics optimize", "Show optimization recommendations").example("$0 flags list", "List all feature flags").example("$0 flags rollout gemini_streaming 10", "Increase feature rollout to 10%").example("$0 free-tier status", "Show free tier quota status").example("$0 free-tier history gemini-cli", "Show Gemini free tier history").option("debug", {
|
|
43744
|
+
const argv = await yargs(hideBin(process.argv)).scriptName("automatosx").usage("$0 <command> [options]").usage("\nAI Agent Orchestration Platform").example("$0 setup", "Set up project").example("$0 init", "Initialize ax.md project context").example("$0 agent create backend --template developer", "Create agent from template").example("$0 agent list", "List all agents").example('$0 run assistant "Hello"', "Run assistant agent").example('$0 run backend "task" --interactive', "Run with interactive checkpoints").example("$0 resume <run-id>", "Resume from checkpoint").example("$0 runs list", "List checkpoint runs").example('$0 session create "Build API" backend', "Create multi-agent session").example("$0 session list", "List all sessions").example("$0 workspace stats", "Show workspace statistics").example("$0 list agents", "List available agents").example('$0 memory search "topic"', "Search memory").example("$0 cache status", "View cache statistics").example("$0 config --list", "View configuration").example("$0 provider-limits", "Show provider usage limits").example("$0 mcp", "Start MCP server for Claude Code").example("$0 update", "Update to latest version").example("$0 cli", "Launch Grok CLI with project context").example('$0 cli "Design API"', "Send prompt to Grok CLI").example("$0 gemini status", "Show Gemini CLI integration status").example("$0 spec run", "Execute spec-driven tasks").example("$0 spec status", "Show spec task status").example("$0 providers list", "List all providers").example("$0 providers info openai", "Show provider details").example("$0 gen plan workflow.ax.yaml", "Generate execution plan").example("$0 gen dag workflow.ax.yaml", "Generate DAG JSON").example("$0 doctor", "Run diagnostic checks").example("$0 doctor openai", "Check OpenAI provider setup").example("$0 configure", "Configure provider integration mode").example("$0 cleanup", "Clean up orphaned processes").example("$0 cleanup openai --force", "Force cleanup OpenAI processes").example("$0 analytics summary", "Show usage analytics summary").example("$0 analytics optimize", "Show optimization recommendations").example("$0 flags list", "List all feature flags").example("$0 flags rollout gemini_streaming 10", "Increase feature rollout to 10%").example("$0 free-tier status", "Show free tier quota status").example("$0 free-tier history gemini-cli", "Show Gemini free tier history").option("debug", {
|
|
43586
43745
|
alias: "D",
|
|
43587
43746
|
type: "boolean",
|
|
43588
43747
|
description: "Enable debug mode with verbose output",
|
|
@@ -43597,7 +43756,7 @@ globalTracker.mark("cli_start");
|
|
|
43597
43756
|
type: "string",
|
|
43598
43757
|
description: "Path to custom config file",
|
|
43599
43758
|
global: true
|
|
43600
|
-
}).command(setupCommand).command(initCommand).command(configureCommand).command(agentCommand).command(listCommand).command(runCommand).command(resumeCommand).command(runsCommand).command(sessionCommand).command(workspaceCommand).command(cacheCommand).command(configCommand).command(statusCommand3).command(doctorCommand2).command(cleanupCommand2).command(analyticsCommand).command(memoryCommand).command(mcpCommand).command(geminiCommand).command(providerLimitsCommand).command(providersCommand).command(flagsCommand).command(specCommand).command(genCommand).command(updateCommand).demandCommand(1, "You must provide a command. Run --help for usage.").help().version(VERSION2).alias("h", "help").alias("v", "version").strict().wrap(Math.min(120, yargs().terminalWidth())).parse();
|
|
43759
|
+
}).command(setupCommand).command(initCommand).command(configureCommand).command(cliCommand).command(agentCommand).command(listCommand).command(runCommand).command(resumeCommand).command(runsCommand).command(sessionCommand).command(workspaceCommand).command(cacheCommand).command(configCommand).command(statusCommand3).command(doctorCommand2).command(cleanupCommand2).command(analyticsCommand).command(memoryCommand).command(mcpCommand).command(geminiCommand).command(providerLimitsCommand).command(providersCommand).command(flagsCommand).command(specCommand).command(genCommand).command(updateCommand).demandCommand(1, "You must provide a command. Run --help for usage.").help().version(VERSION2).alias("h", "help").alias("v", "version").strict().wrap(Math.min(120, yargs().terminalWidth())).parse();
|
|
43601
43760
|
globalTracker.mark("yargs_parse_end");
|
|
43602
43761
|
globalTracker.measure("yargs_parsing", "yargs_parse_start", "yargs_parse_end");
|
|
43603
43762
|
globalTracker.mark("options_setup_start");
|