@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.
Files changed (2) hide show
  1. package/bin/locus.js +55 -13
  2. 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
- SANDBOX_DEPS_DIR: () => SANDBOX_DEPS_DIR
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> [--sprint <name>] ${dim2("# Create GitHub issues from saved plan")}
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
- return handleApprovePlan(projectRoot, args[1], { ...flags, dryRun: flags.dryRun || approveArgs.dryRun }, approveArgs.sprintName);
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> --sprint <name>")}
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)}`)} ${dim2("(--sprint <name> to assign to a sprint)")}
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)} --sprint <sprint name>`)}
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> ${dim2("# Create issues from saved plan")}
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.1",
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.1",
39
+ "@locusai/sdk": "^0.23.3",
40
40
  "@types/bun": "latest",
41
41
  "typescript": "^5.8.3"
42
42
  },