@locusai/cli 0.23.1 → 0.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/locus.js +55 -13
- package/package.json +2 -2
package/bin/locus.js
CHANGED
|
@@ -900,12 +900,20 @@ __export(exports_sandbox, {
|
|
|
900
900
|
detectContainerWorkdir: () => detectContainerWorkdir,
|
|
901
901
|
checkProviderSandboxMismatch: () => checkProviderSandboxMismatch,
|
|
902
902
|
buildSandboxEnvWrapper: () => buildSandboxEnvWrapper,
|
|
903
|
-
|
|
903
|
+
buildBinaryOverrideSnippet: () => buildBinaryOverrideSnippet,
|
|
904
|
+
SANDBOX_DEPS_DIR: () => SANDBOX_DEPS_DIR,
|
|
905
|
+
SANDBOX_BINARY_OVERRIDES: () => SANDBOX_BINARY_OVERRIDES
|
|
904
906
|
});
|
|
905
907
|
import { execFile, execSync as execSync2 } from "node:child_process";
|
|
906
908
|
import { createInterface } from "node:readline";
|
|
909
|
+
function buildBinaryOverrideSnippet() {
|
|
910
|
+
return SANDBOX_BINARY_OVERRIDES.map(([envVar, candidates]) => {
|
|
911
|
+
const paths = candidates.map((p) => `"${SANDBOX_DEPS_DIR}/${p}"`).join(" ");
|
|
912
|
+
return `for _b in ${paths}; do [ -x "$_b" ] && ${envVar}="$_b" && export ${envVar} && break; done;`;
|
|
913
|
+
}).join(" ");
|
|
914
|
+
}
|
|
907
915
|
function buildSandboxEnvWrapper(workdir) {
|
|
908
|
-
return 'PATH="' + SANDBOX_DEPS_DIR + "/node_modules/.bin:" + workdir + '/node_modules/.bin:$PATH"; export PATH; ' + 'NODE_PATH="' + SANDBOX_DEPS_DIR + '/node_modules${NODE_PATH:+:$NODE_PATH}"; export NODE_PATH; ' + 'exec "$@"';
|
|
916
|
+
return 'PATH="' + SANDBOX_DEPS_DIR + "/node_modules/.bin:" + workdir + '/node_modules/.bin:$PATH"; export PATH; ' + 'NODE_PATH="' + SANDBOX_DEPS_DIR + '/node_modules${NODE_PATH:+:$NODE_PATH}"; export NODE_PATH; ' + buildBinaryOverrideSnippet() + " " + 'exec "$@"';
|
|
909
917
|
}
|
|
910
918
|
function getProviderSandboxName(config, provider) {
|
|
911
919
|
return config.providers[provider];
|
|
@@ -1122,11 +1130,34 @@ function waitForEnter() {
|
|
|
1122
1130
|
});
|
|
1123
1131
|
});
|
|
1124
1132
|
}
|
|
1125
|
-
var SANDBOX_DEPS_DIR = "/tmp/sandbox-deps", TIMEOUT_MS = 5000, cachedStatus = null;
|
|
1133
|
+
var SANDBOX_DEPS_DIR = "/tmp/sandbox-deps", SANDBOX_BINARY_OVERRIDES, TIMEOUT_MS = 5000, cachedStatus = null;
|
|
1126
1134
|
var init_sandbox = __esm(() => {
|
|
1127
1135
|
init_terminal();
|
|
1128
1136
|
init_ai_models();
|
|
1129
1137
|
init_logger();
|
|
1138
|
+
SANDBOX_BINARY_OVERRIDES = [
|
|
1139
|
+
[
|
|
1140
|
+
"BIOME_BINARY",
|
|
1141
|
+
[
|
|
1142
|
+
"node_modules/@biomejs/cli-linux-arm64/biome",
|
|
1143
|
+
"node_modules/@biomejs/cli-linux-x64/biome"
|
|
1144
|
+
]
|
|
1145
|
+
],
|
|
1146
|
+
[
|
|
1147
|
+
"ESBUILD_BINARY_PATH",
|
|
1148
|
+
[
|
|
1149
|
+
"node_modules/@esbuild/linux-arm64/bin/esbuild",
|
|
1150
|
+
"node_modules/@esbuild/linux-x64/bin/esbuild"
|
|
1151
|
+
]
|
|
1152
|
+
],
|
|
1153
|
+
[
|
|
1154
|
+
"TURBO_BINARY_PATH",
|
|
1155
|
+
[
|
|
1156
|
+
"node_modules/turbo-linux-arm64/bin/turbo",
|
|
1157
|
+
"node_modules/turbo-linux-64/bin/turbo"
|
|
1158
|
+
]
|
|
1159
|
+
]
|
|
1160
|
+
];
|
|
1130
1161
|
});
|
|
1131
1162
|
|
|
1132
1163
|
// src/commands/upgrade.ts
|
|
@@ -11368,7 +11399,7 @@ ${bold2("locus plan")} — AI-powered sprint planning
|
|
|
11368
11399
|
|
|
11369
11400
|
${bold2("Usage:")}
|
|
11370
11401
|
locus plan "<directive>" ${dim2("# AI creates a plan file")}
|
|
11371
|
-
locus plan approve <id>
|
|
11402
|
+
locus plan approve <id> <sprintname> ${dim2("# Create GitHub issues from saved plan")}
|
|
11372
11403
|
locus plan list ${dim2("# List saved plans")}
|
|
11373
11404
|
locus plan show <id> ${dim2("# Show a saved plan")}
|
|
11374
11405
|
locus plan --from-issues --sprint <name> ${dim2("# Organize existing issues")}
|
|
@@ -11381,8 +11412,7 @@ ${bold2("Options:")}
|
|
|
11381
11412
|
${bold2("Examples:")}
|
|
11382
11413
|
locus plan "Build user authentication with OAuth"
|
|
11383
11414
|
locus plan "Improve API performance" --sprint "Sprint 3"
|
|
11384
|
-
locus plan approve abc123
|
|
11385
|
-
locus plan approve abc123 --sprint "Sprint 3"
|
|
11415
|
+
locus plan approve abc123 "Sprint 3"
|
|
11386
11416
|
locus plan list
|
|
11387
11417
|
locus plan --from-issues --sprint "Sprint 2"
|
|
11388
11418
|
|
|
@@ -11432,7 +11462,15 @@ async function planCommand(projectRoot, args, flags = {}) {
|
|
|
11432
11462
|
}
|
|
11433
11463
|
if (args[0] === "approve") {
|
|
11434
11464
|
const approveArgs = parsePlanArgs(args.slice(2));
|
|
11435
|
-
|
|
11465
|
+
const sprintName2 = approveArgs.sprintName ?? (approveArgs.directive || undefined);
|
|
11466
|
+
if (!sprintName2) {
|
|
11467
|
+
process.stderr.write(`${red2("✗")} Sprint name is required for plan approval.
|
|
11468
|
+
`);
|
|
11469
|
+
process.stderr.write(` Usage: ${bold2("locus plan approve <id> <sprintname>")}
|
|
11470
|
+
`);
|
|
11471
|
+
return;
|
|
11472
|
+
}
|
|
11473
|
+
return handleApprovePlan(projectRoot, args[1], { ...flags, dryRun: flags.dryRun || approveArgs.dryRun }, sprintName2);
|
|
11436
11474
|
}
|
|
11437
11475
|
const parsedArgs = parsePlanArgs(args);
|
|
11438
11476
|
if (parsedArgs.error) {
|
|
@@ -11490,7 +11528,7 @@ ${bold2("Saved Plans:")}
|
|
|
11490
11528
|
}
|
|
11491
11529
|
process.stderr.write(`
|
|
11492
11530
|
`);
|
|
11493
|
-
process.stderr.write(` Approve a plan: ${bold2("locus plan approve <id>
|
|
11531
|
+
process.stderr.write(` Approve a plan: ${bold2("locus plan approve <id> <sprintname>")}
|
|
11494
11532
|
|
|
11495
11533
|
`);
|
|
11496
11534
|
}
|
|
@@ -11531,7 +11569,7 @@ ${bold2("Plan:")} ${cyan2(plan.directive)}
|
|
|
11531
11569
|
}
|
|
11532
11570
|
process.stderr.write(`
|
|
11533
11571
|
`);
|
|
11534
|
-
process.stderr.write(` Approve: ${bold2(`locus plan approve ${plan.id.slice(0, 8)}
|
|
11572
|
+
process.stderr.write(` Approve: ${bold2(`locus plan approve ${plan.id.slice(0, 8)} <sprintname>`)}
|
|
11535
11573
|
|
|
11536
11574
|
`);
|
|
11537
11575
|
}
|
|
@@ -11539,7 +11577,7 @@ async function handleApprovePlan(projectRoot, id, flags, sprintOverride) {
|
|
|
11539
11577
|
if (!id) {
|
|
11540
11578
|
process.stderr.write(`${red2("✗")} Please provide a plan ID.
|
|
11541
11579
|
`);
|
|
11542
|
-
process.stderr.write(` Usage: ${bold2("locus plan approve <id>")}
|
|
11580
|
+
process.stderr.write(` Usage: ${bold2("locus plan approve <id> <sprintname>")}
|
|
11543
11581
|
`);
|
|
11544
11582
|
process.stderr.write(` List plans with: ${bold2("locus plan list")}
|
|
11545
11583
|
`);
|
|
@@ -11679,12 +11717,12 @@ ${bold2("Plan saved:")} ${cyan2(id)}
|
|
|
11679
11717
|
if (flags.dryRun) {
|
|
11680
11718
|
process.stderr.write(`${yellow2("⚠")} ${bold2("Dry run")} — no issues created.
|
|
11681
11719
|
`);
|
|
11682
|
-
process.stderr.write(` Approve later with: ${bold2(`locus plan approve ${id.slice(0, 8)}
|
|
11720
|
+
process.stderr.write(` Approve later with: ${bold2(`locus plan approve ${id.slice(0, 8)} <sprintname>`)}
|
|
11683
11721
|
|
|
11684
11722
|
`);
|
|
11685
11723
|
return;
|
|
11686
11724
|
}
|
|
11687
|
-
process.stderr.write(` To create these issues: ${bold2(`locus plan approve ${id.slice(0, 8)}
|
|
11725
|
+
process.stderr.write(` To create these issues: ${bold2(`locus plan approve ${id.slice(0, 8)} <sprintname>`)}
|
|
11688
11726
|
|
|
11689
11727
|
`);
|
|
11690
11728
|
}
|
|
@@ -13715,6 +13753,10 @@ async function handleShell(projectRoot, args) {
|
|
|
13715
13753
|
`export PATH`,
|
|
13716
13754
|
'NODE_PATH="' + SANDBOX_DEPS_DIR + '/node_modules${NODE_PATH:+:$NODE_PATH}"',
|
|
13717
13755
|
`export NODE_PATH`,
|
|
13756
|
+
...SANDBOX_BINARY_OVERRIDES.map(([envVar, candidates]) => {
|
|
13757
|
+
const paths = candidates.map((p) => `"${SANDBOX_DEPS_DIR}/${p}"`).join(" ");
|
|
13758
|
+
return `for _b in ${paths}; do [ -x "$_b" ] && export ${envVar}="$_b" && break; done`;
|
|
13759
|
+
}),
|
|
13718
13760
|
`[ -f "${workdir}/.locus/sandbox-profile.sh" ] && . "${workdir}/.locus/sandbox-profile.sh"`,
|
|
13719
13761
|
`exec sh`
|
|
13720
13762
|
].join(`
|
|
@@ -14301,7 +14343,7 @@ ${bold2("Examples:")}
|
|
|
14301
14343
|
locus exec ${dim2("# Start interactive REPL")}
|
|
14302
14344
|
locus issue create "Fix login bug" ${dim2("# Create a new issue")}
|
|
14303
14345
|
locus plan "Build auth system" ${dim2("# AI creates a plan file")}
|
|
14304
|
-
locus plan approve <id>
|
|
14346
|
+
locus plan approve <id> <sprint> ${dim2("# Create issues from saved plan")}
|
|
14305
14347
|
locus run ${dim2("# Execute active sprint")}
|
|
14306
14348
|
locus run 42 43 ${dim2("# Run issues in parallel")}
|
|
14307
14349
|
locus run 42 --no-sandbox ${dim2("# Run without sandbox")}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@locusai/cli",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.3",
|
|
4
4
|
"description": "GitHub-native AI engineering assistant",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"dependencies": {},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@locusai/sdk": "^0.23.
|
|
39
|
+
"@locusai/sdk": "^0.23.3",
|
|
40
40
|
"@types/bun": "latest",
|
|
41
41
|
"typescript": "^5.8.3"
|
|
42
42
|
},
|