claude-overnight 1.25.5 → 1.25.6

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.5";
1
+ export declare const VERSION = "1.25.6";
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.5";
2
+ export const VERSION = "1.25.6";
package/dist/index.js CHANGED
@@ -332,7 +332,7 @@ async function main() {
332
332
  if (action === "q")
333
333
  process.exit(0);
334
334
  if (action === "h") {
335
- showRunHistory(allRuns, cwd);
335
+ await showRunHistory(allRuns, cwd);
336
336
  continue;
337
337
  }
338
338
  if (action === "c") {
@@ -385,7 +385,7 @@ async function main() {
385
385
  break;
386
386
  }
387
387
  if (action === "h") {
388
- showRunHistory(allRuns, cwd);
388
+ await showRunHistory(allRuns, cwd);
389
389
  continue;
390
390
  }
391
391
  resuming = true;
@@ -429,7 +429,7 @@ async function main() {
429
429
  break;
430
430
  }
431
431
  if (action === "h") {
432
- showRunHistory(allRuns, cwd);
432
+ await showRunHistory(allRuns, cwd);
433
433
  continue;
434
434
  }
435
435
  const idx = parseInt(action) - 1;
package/dist/state.d.ts CHANGED
@@ -53,7 +53,7 @@ export declare function formatTimeAgo(isoStr: string): string;
53
53
  export declare function showRunHistory(allRuns: {
54
54
  dir: string;
55
55
  state: RunState;
56
- }[], filterCwd: string): void;
56
+ }[], filterCwd: string): Promise<void>;
57
57
  export declare function readPreviousRunKnowledge(rootDir: string): string;
58
58
  export declare function createRunDir(rootDir: string): string;
59
59
  export declare function updateLatestSymlink(rootDir: string, runDir: string): void;
package/dist/state.js CHANGED
@@ -4,6 +4,7 @@ import { join } from "path";
4
4
  import chalk from "chalk";
5
5
  import { forceMergeOverlay } from "./merge.js";
6
6
  import { FALLBACK_MODEL } from "./models.js";
7
+ import { selectKey } from "./cli.js";
7
8
  // ── File I/O helpers ──
8
9
  export function readMdDir(dir) {
9
10
  try {
@@ -304,34 +305,54 @@ export function formatTimeAgo(isoStr) {
304
305
  return `${hours}h ago`;
305
306
  return `${Math.floor(hours / 24)}d ago`;
306
307
  }
307
- export function showRunHistory(allRuns, filterCwd) {
308
- const runs = allRuns.filter(r => r.state.cwd === filterCwd);
308
+ export async function showRunHistory(allRuns, filterCwd) {
309
+ const runs = allRuns.filter(r => r.state.cwd === filterCwd && r.state.phase === "done");
309
310
  if (runs.length === 0) {
310
- console.log(chalk.dim("\n No run history.\n"));
311
+ console.log(chalk.dim("\n No completed runs.\n"));
311
312
  return;
312
313
  }
313
- const w = Math.min((process.stdout.columns ?? 80) - 6, 50);
314
- console.log(chalk.dim(`\n ── Run History ${"─".repeat(Math.max(0, w - 16))}\n`));
315
- let resumeIdx = 0;
316
- for (const run of runs) {
317
- const s = run.state;
318
- const done = s.phase === "done";
319
- const icon = done ? chalk.green("✓") : chalk.yellow("⚠");
320
- const date = s.startedAt?.slice(0, 16).replace("T", " ") || "unknown";
321
- const cost = s.accCost > 0 ? ` · $${s.accCost.toFixed(2)}` : "";
322
- const obj = s.objective?.slice(0, 50) || "";
323
- const num = done ? " " : chalk.cyan(String(++resumeIdx));
324
- const merged = s.branches.filter(b => b.status === "merged").length;
325
- console.log(` ${icon} ${num} ${chalk.dim(date)} · ${s.phase} · ${s.accCompleted}/${s.budget}${cost}${merged ? ` · ${merged} merged` : ""}`);
326
- console.log(` ${obj}${obj.length >= 50 ? "…" : ""}`);
327
- let status = "";
328
- try {
329
- status = readFileSync(join(run.dir, "status.md"), "utf-8").trim().split("\n")[0].slice(0, 70);
314
+ const PAGE = 5;
315
+ const pages = Math.ceil(runs.length / PAGE);
316
+ let page = 0;
317
+ while (true) {
318
+ const w = Math.min((process.stdout.columns ?? 80) - 6, 50);
319
+ const pageLabel = pages > 1 ? ` (${page + 1}/${pages})` : "";
320
+ console.log(chalk.dim(`\n ── Run History${pageLabel} ${"─".repeat(Math.max(0, w - 16 - pageLabel.length))}\n`));
321
+ for (const run of runs.slice(page * PAGE, (page + 1) * PAGE)) {
322
+ const s = run.state;
323
+ const date = s.startedAt?.slice(0, 16).replace("T", " ") || "unknown";
324
+ const cost = s.accCost > 0 ? ` · $${s.accCost.toFixed(2)}` : "";
325
+ const obj = s.objective?.slice(0, 50) || "";
326
+ const merged = s.branches.filter(b => b.status === "merged").length;
327
+ console.log(` ${chalk.green("✓")} ${chalk.dim(date)} · ${s.accCompleted}/${s.budget}${cost}${merged ? ` · ${merged} merged` : ""}`);
328
+ console.log(` ${obj}${obj.length >= 50 ? "" : ""}`);
329
+ let status = "";
330
+ try {
331
+ status = readFileSync(join(run.dir, "status.md"), "utf-8").trim().split("\n")[0].slice(0, 70);
332
+ }
333
+ catch { }
334
+ if (status)
335
+ console.log(chalk.dim(` ${status}`));
336
+ console.log("");
337
+ }
338
+ if (pages === 1)
339
+ break;
340
+ const opts = [];
341
+ if (page < pages - 1)
342
+ opts.push({ key: "n", desc: "ext" });
343
+ if (page > 0)
344
+ opts.push({ key: "p", desc: "rev" });
345
+ opts.push({ key: "b", desc: "ack" });
346
+ const action = await selectKey("", opts);
347
+ if (action === "n") {
348
+ page++;
349
+ continue;
350
+ }
351
+ if (action === "p") {
352
+ page--;
353
+ continue;
330
354
  }
331
- catch { }
332
- if (status)
333
- console.log(chalk.dim(` ${status}`));
334
- console.log("");
355
+ break;
335
356
  }
336
357
  }
337
358
  export function readPreviousRunKnowledge(rootDir) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-overnight",
3
- "version": "1.25.5",
3
+ "version": "1.25.6",
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.5",
3
+ "version": "1.25.6",
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"