claude-overnight 1.25.0 → 1.25.1

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.
@@ -1 +1 @@
1
- export declare const VERSION = "1.25.0";
1
+ export declare const VERSION = "1.25.1";
package/dist/_version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by build — do not edit manually.
2
- export const VERSION = "1.25.0";
2
+ export const VERSION = "1.25.1";
package/dist/bin.js CHANGED
@@ -7,8 +7,9 @@
7
7
  // Cursor agent: never inherit a shell that disabled keychain skip (`CI=0`,
8
8
  // empty `CURSOR_SKIP_KEYCHAIN`) — the Cursor CLI may prompt for "cursor-user"
9
9
  // and block preflight. Force like cursor-composer-in-claude/dist/cli.js (not ??=).
10
+ // NOTE: CI=true is only set in child process envs (proxy spawn, agent spawn) —
11
+ // setting it here kills chalk color detection (supports-color returns level 0).
10
12
  process.env.CURSOR_SKIP_KEYCHAIN = "1";
11
- process.env.CI = "true";
12
13
  const argv = process.argv.slice(2);
13
14
  const quiet = argv.includes("-h") || argv.includes("--help") || argv.includes("-v") || argv.includes("--version");
14
15
  if (!quiet && process.stdout.isTTY) {
package/dist/index.js CHANGED
@@ -158,9 +158,10 @@ async function promptResumeOverrides(state, cliFlags, argv, noTTY, runDir) {
158
158
  console.log();
159
159
  }
160
160
  async function main() {
161
- // Same as bin.ts: do not use ??= — parent shell can set CI=0 / CURSOR_SKIP_KEYCHAIN=0.
161
+ // Do not use ??= — parent shell can set CURSOR_SKIP_KEYCHAIN=0.
162
+ // CI=true is only set in child process envs (proxy, agents) — setting it here
163
+ // kills chalk color detection (supports-color sees CI → returns level 0).
162
164
  process.env.CURSOR_SKIP_KEYCHAIN = "1";
163
- process.env.CI = "true";
164
165
  const argv = process.argv.slice(2);
165
166
  if (argv.includes("-v") || argv.includes("--version")) {
166
167
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -312,11 +313,31 @@ async function main() {
312
313
  console.log(chalk.dim(` ${status}`));
313
314
  }
314
315
  }
315
- // ── Resume detection ──
316
+ // ── Resume / continue detection ──
316
317
  let resuming = false;
317
318
  let resumeState = null;
318
319
  let resumeRunDir;
320
+ let continueObjective;
319
321
  const incompleteRuns = findIncompleteRuns(rootDir, cwd);
322
+ // When only completed runs exist, offer to continue from the last one
323
+ if (incompleteRuns.length === 0 && completedRuns.length > 0 && !noTTY && tasks.length === 0) {
324
+ let picked = false;
325
+ while (!picked) {
326
+ const action = await selectKey("", [
327
+ { key: "c", desc: "ontinue last" }, { key: "h", desc: "istory" }, { key: "n", desc: "ew" }, { key: "q", desc: "uit" },
328
+ ]);
329
+ if (action === "q")
330
+ process.exit(0);
331
+ if (action === "h") {
332
+ showRunHistory(allRuns, cwd);
333
+ continue;
334
+ }
335
+ if (action === "c") {
336
+ continueObjective = completedRuns[0].state.objective;
337
+ }
338
+ picked = true;
339
+ }
340
+ }
320
341
  if (incompleteRuns.length > 0 && !noTTY && tasks.length === 0) {
321
342
  let decided = false;
322
343
  while (!decided) {
@@ -515,7 +536,13 @@ async function main() {
515
536
  mergeStrategy = resumeState.mergeStrategy;
516
537
  }
517
538
  else if (!nonInteractive) {
518
- objective = (await ask(`\n ${chalk.cyan("①")} ${chalk.bold("What should the agents do?")}\n ${chalk.cyan(">")} `)).trim();
539
+ if (continueObjective) {
540
+ console.log(`\n ${chalk.cyan("①")} ${chalk.bold("What should the agents do?")} ${chalk.dim("(Enter to continue last)")}\n ${chalk.dim(continueObjective.slice(0, 80))}${continueObjective.length > 80 ? "…" : ""}`);
541
+ }
542
+ const objInput = (await ask(continueObjective
543
+ ? ` ${chalk.cyan(">")} `
544
+ : `\n ${chalk.cyan("①")} ${chalk.bold("What should the agents do?")}\n ${chalk.cyan(">")} `)).trim();
545
+ objective = objInput || continueObjective;
519
546
  if (!objective) {
520
547
  console.error(chalk.red("\n No objective provided."));
521
548
  process.exit(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-overnight",
3
- "version": "1.25.0",
3
+ "version": "1.25.1",
4
4
  "description": "Parallel Claude agents in git worktrees with a usage cap that reserves headroom for your interactive Claude Code. Crash-safe resume. Provider-agnostic model catalog (Anthropic, Cursor, OpenAI, Gemini, DeepSeek, Llama, Qwen) with capability-based task scoping.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-overnight",
3
- "version": "1.25.0",
3
+ "version": "1.25.1",
4
4
  "description": "Claude Code skill for understanding, installing, and inspecting claude-overnight runs -- parallel Claude agents in git worktrees with thinking waves, multi-wave steering, and crash-safe resume. Supports Cursor API Proxy, Qwen, OpenRouter.",
5
5
  "author": {
6
6
  "name": "Francesco Fornace"