jonah-fleet 1.27.1 → 1.28.0

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/CHANGELOG.md CHANGED
@@ -5,8 +5,33 @@ All notable changes to `jonah-fleet` will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [1.27.1](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.27.0...v1.27.1) (2026-09-23)
8
+ ## [1.28.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.27.2...v1.28.0) (2026-09-24)
9
+
10
+
11
+ ### Features
12
+
13
+ * **runner:** preserve uncommitted work on crash and enforce incremental commits ([da58b83](https://github.com/Jonah-Projects/jonah-fleet/commit/da58b83334df971778417142520b321f7b520d5b))
14
+
15
+ ## [1.27.2](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.27.1...v1.27.2) (2026-09-24)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **daemon:** classify draft PRs needing convergence as actionable ([#430](https://github.com/Jonah-Projects/jonah-fleet/issues/430)) ([4d407fb](https://github.com/Jonah-Projects/jonah-fleet/commit/4d407fbb34ac8853b512094b5078bc9b8c1b9f53))
9
21
 
22
+ ## [Unreleased]
23
+
24
+ ### Features
25
+
26
+ * **runner:** preserve uncommitted work by committing modified files to the active routine branch before worktree cleanup on session crashes or interruptions
27
+ * **prompts:** add Incremental Commits protocol to `autowork.md` to commit immediately upon passing tests and prevent work loss during long-running sessions
28
+ * **daemon:** update foreground interface, status commands, hotkey cheat sheet, and status ticker to Fleet brand identity
29
+
30
+ ### Bug Fixes
31
+
32
+ * **daemon:** classify draft PRs needing convergence as actionable instead of in-progress to prevent zero-token preflight bypass from stalling draft PR recovery
33
+
34
+ ## [1.27.1](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.27.0...v1.27.1) (2026-09-23)
10
35
 
11
36
  ### Bug Fixes
12
37
 
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="./assets/brand/banner.jpg" alt="Fleet — Autonomous Repo Command" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/Jonah-Projects/jonah-fleet/main/assets/brand/banner.jpg" alt="Fleet — Autonomous Repo Command" width="100%" />
3
3
  </p>
4
4
 
5
5
  # ⚡ Fleet
@@ -9,7 +9,7 @@
9
9
 
10
10
  [![CI](https://github.com/Jonah-Projects/jonah-fleet/actions/workflows/ci.yml/badge.svg)](https://github.com/Jonah-Projects/jonah-fleet/actions/workflows/ci.yml)
11
11
  [![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](./package.json)
12
- [![Brand: Fleet](https://img.shields.io/badge/Brand-Fleet_Design_System-BBF65D?style=flat)](./assets/brand/README.md)
12
+ [![Brand: Fleet](https://img.shields.io/badge/Brand-Fleet_Design_System-BBF65D?style=flat)](https://github.com/Jonah-Projects/jonah-fleet/blob/main/assets/brand/README.md)
13
13
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
14
14
 
15
15
  ---
@@ -214,15 +214,15 @@ Each target project contains an `agents-manifest.json` at its root:
214
214
 
215
215
  ## 🎨 Brand & Visual Identity
216
216
 
217
- Fleet's visual design system and assets are located in [`assets/brand/`](./assets/brand):
217
+ Fleet's visual design system and assets are located in [`assets/brand/`](https://github.com/Jonah-Projects/jonah-fleet/tree/main/assets/brand):
218
218
 
219
219
  | Asset | Resource | Ratio | Usage |
220
220
  |---|---|---|---|
221
- | **Avatar / App Icon** | [`avatar.jpg`](./assets/brand/avatar.jpg) | 1:1 (1024x1024) | Bot user profile, app icon, social avatar |
222
- | **Logo Lockup** | [`logo.jpg`](./assets/brand/logo.jpg) | 3:2 (1536x1024) | Documentation headers, splash screens, decks |
223
- | **Header Banner** | [`banner.jpg`](./assets/brand/banner.jpg) | 16:9 (1792x1008) | Repository hero, social cards, release cards |
221
+ | **Avatar / App Icon** | [`avatar.jpg`](https://raw.githubusercontent.com/Jonah-Projects/jonah-fleet/main/assets/brand/avatar.jpg) | 1:1 (1024x1024) | Bot user profile, app icon, social avatar |
222
+ | **Logo Lockup** | [`logo.jpg`](https://raw.githubusercontent.com/Jonah-Projects/jonah-fleet/main/assets/brand/logo.jpg) | 3:2 (1536x1024) | Documentation headers, splash screens, decks |
223
+ | **Header Banner** | [`banner.jpg`](https://raw.githubusercontent.com/Jonah-Projects/jonah-fleet/main/assets/brand/banner.jpg) | 16:9 (1792x1008) | Repository hero, social cards, release cards |
224
224
 
225
- See [`assets/brand/README.md`](./assets/brand/README.md) for the complete design system specifications, color codes, and typography guidelines.
225
+ See [`assets/brand/README.md`](https://github.com/Jonah-Projects/jonah-fleet/blob/main/assets/brand/README.md) for the complete design system specifications, color codes, and typography guidelines.
226
226
 
227
227
  ---
228
228
 
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8GzG"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0IzG"}
package/dist/index.js CHANGED
@@ -4519,6 +4519,25 @@ ${sanitizedOutput}
4519
4519
  }
4520
4520
  return reportContent;
4521
4521
  }
4522
+ async function preserveUncommittedWork(worktreePath, routine) {
4523
+ try {
4524
+ if (!fs13.existsSync(worktreePath)) return { preserved: false };
4525
+ const { stdout: statusOut } = await execFileAsync4("git", ["status", "--porcelain"], { cwd: worktreePath });
4526
+ const trimmed = statusOut.trim();
4527
+ if (!trimmed) return { preserved: false };
4528
+ const fileCount = trimmed.split("\n").filter(Boolean).length;
4529
+ await execFileAsync4("git", ["add", "-A"], { cwd: worktreePath });
4530
+ await execFileAsync4(
4531
+ "git",
4532
+ ["commit", "-m", `wip(${routine}): preserve uncommitted work (${fileCount} files) before session termination`],
4533
+ { cwd: worktreePath }
4534
+ );
4535
+ const { stdout: shaOut } = await execFileAsync4("git", ["rev-parse", "--short", "HEAD"], { cwd: worktreePath });
4536
+ return { preserved: true, commitSha: shaOut.trim(), fileCount };
4537
+ } catch {
4538
+ return { preserved: false };
4539
+ }
4540
+ }
4522
4541
  async function runLocalRoutine(options) {
4523
4542
  const targetDir = path13.resolve(options.targetDir);
4524
4543
  const routine = options.routine;
@@ -4626,6 +4645,17 @@ Timeout: ${printTimeout}`,
4626
4645
  const cleanup = async () => {
4627
4646
  spinner?.stop();
4628
4647
  if (worktreePath && !options.keepWorktree) {
4648
+ if (fs13.existsSync(worktreePath)) {
4649
+ const pres = await preserveUncommittedWork(worktreePath, routine);
4650
+ if (pres.preserved) {
4651
+ console.log(
4652
+ pc11.yellow(
4653
+ `
4654
+ [${(/* @__PURE__ */ new Date()).toLocaleTimeString()}] \u{1F4BE} Preserved ${pres.fileCount} uncommitted file(s) to branch '${branchName}' (${pres.commitSha}).`
4655
+ )
4656
+ );
4657
+ }
4658
+ }
4629
4659
  await removeWorktree(targetDir, worktreePath, { deleteBranch: false }).catch(() => {
4630
4660
  });
4631
4661
  }
@@ -5257,9 +5287,9 @@ function printDaemonLogTail(repoRoot, linesCount = 20) {
5257
5287
  const lines = getDaemonLogTail(repoRoot, linesCount);
5258
5288
  const logPath = path14.join(repoRoot, ".jonah-fleet", "daemon.log");
5259
5289
  const relativePath = path14.relative(repoRoot, logPath) || logPath;
5260
- console.log(pc13.cyan(`
5261
- \u{1F4C4} Tail of ${relativePath} (last ${linesCount} lines):
5262
- `));
5290
+ console.log(pc13.bold(pc13.cyan(`
5291
+ \u26A1 Tail of ${relativePath} (last ${linesCount} lines):
5292
+ `)));
5263
5293
  if (lines.length === 0) {
5264
5294
  console.log(pc13.dim(` (Log file is empty or does not exist yet at ${relativePath})
5265
5295
  `));
@@ -5276,9 +5306,9 @@ async function inspectAndCleanWorktrees(repoRoot) {
5276
5306
  return { active, cleaned };
5277
5307
  }
5278
5308
  function printWorktreesInspection(result) {
5279
- console.log(pc13.cyan(`
5280
- \u{1F333} Jonah Fleet Worktree Inspection & Maintenance
5281
- `));
5309
+ console.log(pc13.bold(pc13.cyan(`
5310
+ \u26A1 Jonah Fleet Worktree Inspection & Maintenance
5311
+ `)));
5282
5312
  console.log(` Active Worktrees: ${result.active.length}`);
5283
5313
  if (result.active.length === 0) {
5284
5314
  console.log(pc13.dim(` (No active routine worktrees found)`));
@@ -5293,28 +5323,28 @@ function printWorktreesInspection(result) {
5293
5323
  console.log("");
5294
5324
  }
5295
5325
  function printKeybindingCheatSheet() {
5296
- console.log(pc13.cyan(`
5297
- \u2328\uFE0F Jonah Fleet Daemon Keybindings
5298
- `));
5299
- console.log(` ${pc13.bold("r")} Trigger peer-review scan immediately`);
5300
- console.log(` ${pc13.bold("R")} Prompt for PR # and run targeted peer-review`);
5301
- console.log(` ${pc13.bold("a")} Trigger autowork backlog scan immediately`);
5302
- console.log(` ${pc13.bold("A")} Prompt for Issue # and run targeted autowork`);
5303
- console.log(` ${pc13.bold("p")} Pause / resume automated polling intervals`);
5304
- console.log(` ${pc13.bold("s")} Print current daemon status summary card`);
5305
- console.log(` ${pc13.bold("v")} Toggle verbose streaming logging live`);
5306
- console.log(` ${pc13.bold("l")} Tail recent lines from .jonah-fleet/daemon.log`);
5307
- console.log(` ${pc13.bold("w")} Inspect active worktrees and clean stale ones`);
5308
- console.log(` ${pc13.bold("q")} Graceful shutdown (waits for active routine to finish)`);
5309
- console.log(` ${pc13.bold("Ctrl+C")} Immediate force abort`);
5310
- console.log(` ${pc13.bold("?")} / ${pc13.bold("h")} Show this keybindings cheat-sheet
5326
+ console.log(pc13.bold(pc13.cyan(`
5327
+ \u26A1 Jonah Fleet Daemon Keybindings // Command Reference
5328
+ `)));
5329
+ console.log(` ${pc13.bold(pc13.green("r"))} Trigger peer-review scan immediately`);
5330
+ console.log(` ${pc13.bold(pc13.green("R"))} Prompt for PR # and run targeted peer-review`);
5331
+ console.log(` ${pc13.bold(pc13.green("a"))} Trigger autowork backlog scan immediately`);
5332
+ console.log(` ${pc13.bold(pc13.green("A"))} Prompt for Issue # and run targeted autowork`);
5333
+ console.log(` ${pc13.bold(pc13.green("p"))} Pause / resume automated polling intervals`);
5334
+ console.log(` ${pc13.bold(pc13.green("s"))} Print current daemon status summary card`);
5335
+ console.log(` ${pc13.bold(pc13.green("v"))} Toggle verbose streaming logging live`);
5336
+ console.log(` ${pc13.bold(pc13.green("l"))} Tail recent lines from .jonah-fleet/daemon.log`);
5337
+ console.log(` ${pc13.bold(pc13.green("w"))} Inspect active worktrees and clean stale ones`);
5338
+ console.log(` ${pc13.bold(pc13.green("q"))} Graceful shutdown (waits for active routine to finish)`);
5339
+ console.log(` ${pc13.bold(pc13.red("Ctrl+C"))} Immediate force abort`);
5340
+ console.log(` ${pc13.bold(pc13.green("?"))} / ${pc13.bold(pc13.green("h"))} Show this keybindings cheat-sheet
5311
5341
  `);
5312
5342
  }
5313
5343
  function printDaemonStatusSummary(options) {
5314
5344
  const { state, pendingRoutine, activeWorktrees = [], verbose } = options;
5315
- console.log(pc13.cyan(`
5316
- \u{1F916} Jonah Fleet Local Daemon Status
5317
- `));
5345
+ console.log(pc13.bold(pc13.cyan(`
5346
+ \u26A1 Jonah Fleet Daemon Status Readout
5347
+ `)));
5318
5348
  if (state) {
5319
5349
  let statusText;
5320
5350
  if (state.status === "working") {
@@ -5397,7 +5427,7 @@ function formatDaemonStatusLine(options = {}) {
5397
5427
  let core;
5398
5428
  if (options.isPaused) {
5399
5429
  const queueStr = options.pendingRoutine ? pc13.cyan(` [Queued: ${options.pendingRoutine}]`) : "";
5400
- core = `${pc13.dim("[" + timeString + "]")} \u23F8\uFE0F ${pc13.yellow("PAUSED")}${queueStr}`;
5430
+ core = `${pc13.dim("[" + timeString + "]")} \u23F8 ${pc13.yellow("PAUSED")}${queueStr}`;
5401
5431
  } else {
5402
5432
  const nextCheck = options.nextCheckTime !== void 0 ? options.nextCheckTime : nowMs;
5403
5433
  const diffMs = Math.max(0, nextCheck - nowMs);
@@ -5407,7 +5437,7 @@ function formatDaemonStatusLine(options = {}) {
5407
5437
  const timeStr = `${mins}m ${secs < 10 ? "0" : ""}${secs}s`;
5408
5438
  const prStr = options.lastOpenPRCount !== void 0 ? ` (${options.lastOpenPRCount} ready PRs)` : "";
5409
5439
  const queueStr = options.pendingRoutine ? pc13.cyan(` [Queued: ${options.pendingRoutine}]`) : "";
5410
- core = `${pc13.dim("[" + timeString + "]")} \u{1F4A4} ${pc13.dim("Watchdog Idle \xB7 Next check in " + timeStr + prStr)}${queueStr}`;
5440
+ core = `${pc13.dim("[" + timeString + "]")} \u26A1 ${pc13.dim("Watchdog Idle \xB7 Next check in " + timeStr + prStr)}${queueStr}`;
5411
5441
  }
5412
5442
  if (!includeTip) {
5413
5443
  return truncateAnsi(core, maxCols);
@@ -5493,16 +5523,57 @@ function classifyBacklogIssues(issues, openPRs = []) {
5493
5523
  const awaitingInfo = [];
5494
5524
  const guardrails = [];
5495
5525
  const routineLogs = [];
5496
- const prReferencedIssues = /* @__PURE__ */ new Set();
5526
+ const readyPRReferencedIssues = /* @__PURE__ */ new Set();
5527
+ const draftPRReferencedIssues = /* @__PURE__ */ new Set();
5528
+ const gatedDraftPRReferencedIssues = /* @__PURE__ */ new Set();
5529
+ const humanAssignedDraftPRReferencedIssues = /* @__PURE__ */ new Set();
5530
+ const standaloneActionableDraftPRs = [];
5531
+ const standaloneGatedDraftPRs = [];
5532
+ const standaloneHumanDraftPRs = [];
5533
+ const knownIssueNumbers = new Set(issues.map((i) => i.number));
5497
5534
  for (const pr of openPRs) {
5535
+ if (pr.headRefName?.startsWith("release-please--") || pr.title?.startsWith("chore(main): release")) {
5536
+ continue;
5537
+ }
5498
5538
  const textToScan = `${pr.title || ""} ${pr.body || ""} ${pr.headRefName || ""}`;
5499
5539
  const matches = textToScan.matchAll(/#(\d+)\b/g);
5540
+ const referencedIssues = /* @__PURE__ */ new Set();
5500
5541
  for (const m of matches) {
5501
- prReferencedIssues.add(parseInt(m[1], 10));
5542
+ referencedIssues.add(parseInt(m[1], 10));
5502
5543
  }
5503
5544
  const branchMatch = (pr.headRefName || "").match(/(?:^|[-_/])(\d+)(?:[-_/]|$)/);
5504
5545
  if (branchMatch) {
5505
- prReferencedIssues.add(parseInt(branchMatch[1], 10));
5546
+ referencedIssues.add(parseInt(branchMatch[1], 10));
5547
+ }
5548
+ const isDraft = Boolean(pr.isDraft);
5549
+ const prLabelNames = (pr.labels || []).map(
5550
+ (l) => (typeof l === "string" ? l : l.name).toLowerCase()
5551
+ );
5552
+ const hasNeedsHuman = prLabelNames.includes("needs-human");
5553
+ const hasHumanAssignee = (pr.assignees || []).some((a) => !isBotLogin(a.login));
5554
+ let hasKnownIssue = false;
5555
+ for (const issueNum of referencedIssues) {
5556
+ if (knownIssueNumbers.has(issueNum)) {
5557
+ hasKnownIssue = true;
5558
+ }
5559
+ if (!isDraft) {
5560
+ readyPRReferencedIssues.add(issueNum);
5561
+ } else if (hasNeedsHuman) {
5562
+ gatedDraftPRReferencedIssues.add(issueNum);
5563
+ } else if (hasHumanAssignee) {
5564
+ humanAssignedDraftPRReferencedIssues.add(issueNum);
5565
+ } else {
5566
+ draftPRReferencedIssues.add(issueNum);
5567
+ }
5568
+ }
5569
+ if (isDraft && !hasKnownIssue) {
5570
+ if (hasNeedsHuman) {
5571
+ standaloneGatedDraftPRs.push(pr);
5572
+ } else if (hasHumanAssignee) {
5573
+ standaloneHumanDraftPRs.push(pr);
5574
+ } else {
5575
+ standaloneActionableDraftPRs.push(pr);
5576
+ }
5506
5577
  }
5507
5578
  }
5508
5579
  for (const issue of issues) {
@@ -5513,7 +5584,7 @@ function classifyBacklogIssues(issues, openPRs = []) {
5513
5584
  routineLogs.push(issue);
5514
5585
  continue;
5515
5586
  }
5516
- if (labelNames.includes("needs-human")) {
5587
+ if (labelNames.includes("needs-human") || gatedDraftPRReferencedIssues.has(issue.number)) {
5517
5588
  gatedHuman.push(issue);
5518
5589
  continue;
5519
5590
  }
@@ -5525,14 +5596,42 @@ function classifyBacklogIssues(issues, openPRs = []) {
5525
5596
  guardrails.push(issue);
5526
5597
  continue;
5527
5598
  }
5528
- const hasMatchingPR = prReferencedIssues.has(issue.number);
5529
5599
  const hasHumanAssignee = (issue.assignees || []).some((a) => !isBotLogin(a.login));
5530
- if (hasMatchingPR || hasHumanAssignee) {
5600
+ const hasReadyPR = readyPRReferencedIssues.has(issue.number);
5601
+ const hasHumanDraftPR = humanAssignedDraftPRReferencedIssues.has(issue.number);
5602
+ if (hasReadyPR || hasHumanAssignee || hasHumanDraftPR) {
5531
5603
  inProgress.push(issue);
5532
5604
  continue;
5533
5605
  }
5534
5606
  actionable.push(issue);
5535
5607
  }
5608
+ for (const pr of standaloneActionableDraftPRs) {
5609
+ actionable.push({
5610
+ number: pr.number,
5611
+ title: pr.title || `PR #${pr.number}`,
5612
+ labels: (pr.labels || []).map((l) => typeof l === "string" ? { name: l } : l),
5613
+ assignees: pr.assignees,
5614
+ url: pr.url
5615
+ });
5616
+ }
5617
+ for (const pr of standaloneGatedDraftPRs) {
5618
+ gatedHuman.push({
5619
+ number: pr.number,
5620
+ title: pr.title || `PR #${pr.number}`,
5621
+ labels: (pr.labels || []).map((l) => typeof l === "string" ? { name: l } : l),
5622
+ assignees: pr.assignees,
5623
+ url: pr.url
5624
+ });
5625
+ }
5626
+ for (const pr of standaloneHumanDraftPRs) {
5627
+ inProgress.push({
5628
+ number: pr.number,
5629
+ title: pr.title || `PR #${pr.number}`,
5630
+ labels: (pr.labels || []).map((l) => typeof l === "string" ? { name: l } : l),
5631
+ assignees: pr.assignees,
5632
+ url: pr.url
5633
+ });
5634
+ }
5536
5635
  return {
5537
5636
  actionable,
5538
5637
  inProgress,
@@ -5540,7 +5639,7 @@ function classifyBacklogIssues(issues, openPRs = []) {
5540
5639
  awaitingInfo,
5541
5640
  guardrails,
5542
5641
  routineLogs,
5543
- total: issues.length
5642
+ total: issues.length + standaloneActionableDraftPRs.length + standaloneGatedDraftPRs.length + standaloneHumanDraftPRs.length
5544
5643
  };
5545
5644
  }
5546
5645
  async function getBacklogIssues(repoRoot) {
@@ -5559,7 +5658,7 @@ async function getOpenPRsForBacklog(repoRoot) {
5559
5658
  try {
5560
5659
  const { stdout } = await execFileAsync5(
5561
5660
  "gh",
5562
- ["pr", "list", "--state", "open", "--json", "number,title,body,headRefName", "--limit", "30"],
5661
+ ["pr", "list", "--state", "open", "--json", "number,title,body,headRefName,isDraft,labels,assignees,url", "--limit", "50"],
5563
5662
  { cwd: repoRoot, timeout: 5e3 }
5564
5663
  );
5565
5664
  return JSON.parse(stdout || "[]");
@@ -5935,14 +6034,23 @@ async function runDaemonLoop(repoRoot, options = {}) {
5935
6034
  status: "idle"
5936
6035
  };
5937
6036
  writeDaemonState(repoRoot, state);
5938
- console.log(pc14.cyan(`
5939
- \u{1F916} Jonah Fleet Multi-Cadence Local Agent Daemon Started`));
5940
- console.log(pc14.dim(` PID: ${process.pid}`));
5941
- console.log(pc14.dim(` Peer Review Watchdog: Every ${reviewInterval} minutes (with zero-cost PR preflight)`));
5942
- console.log(pc14.dim(` Autowork Backlog Scan: Every ${autoworkInterval} minutes`));
5943
- console.log(pc14.dim(` Working Directory: ${repoRoot}`));
5944
- console.log(pc14.dim(` Interactive Hotkeys: 'r' (review), 'a' (autowork), 'p' (pause), 's' (status), 'q' (stop), '?' (help)
5945
- `));
6037
+ console.log(
6038
+ renderFleetBanner({
6039
+ command: "DAEMON",
6040
+ subtitle: "LOCAL MULTI-CADENCE RUNNER",
6041
+ details: [
6042
+ { label: "PID", value: String(process.pid) },
6043
+ { label: "Review Watchdog", value: `Every ${reviewInterval}m (zero-token preflight)` },
6044
+ { label: "Autowork Scan", value: `Every ${autoworkInterval}m` },
6045
+ { label: "Routines", value: routines.join(", ") },
6046
+ { label: "Target", value: repoRoot },
6047
+ { label: "Hotkeys", value: "'r' review \xB7 'a' autowork \xB7 'p' pause \xB7 's' status \xB7 '?' help" }
6048
+ ]
6049
+ })
6050
+ );
6051
+ console.log(pc14.bold(pc14.cyan(`
6052
+ \u26A1 Jonah Fleet Local Agent Daemon Active (PID: ${process.pid})
6053
+ `)));
5946
6054
  let isStopping = false;
5947
6055
  let isGracefulStopping = false;
5948
6056
  let isWorking = false;
@@ -6542,14 +6650,23 @@ async function runDaemonCommand(action, options = {}) {
6542
6650
  }
6543
6651
  try {
6544
6652
  const state2 = await startBackgroundDaemon(cwd, daemonOpts);
6653
+ console.log(
6654
+ renderFleetBanner({
6655
+ command: "DAEMON",
6656
+ subtitle: "BACKGROUND RUNNER STARTED",
6657
+ details: [
6658
+ { label: "PID", value: String(state2.pid) },
6659
+ { label: "Review Watchdog", value: `Every ${state2.reviewIntervalMinutes}m (zero-token preflight)` },
6660
+ { label: "Autowork Scan", value: `Every ${state2.autoworkIntervalMinutes}m` },
6661
+ { label: "Routines", value: state2.routines.join(", ") },
6662
+ { label: "Log", value: ".jonah-fleet/daemon.log" }
6663
+ ]
6664
+ })
6665
+ );
6545
6666
  console.log(pc15.green(`
6546
6667
  \u2713 Background agent daemon started successfully.`));
6547
- console.log(pc15.dim(` PID: ${state2.pid}`));
6548
- console.log(pc15.dim(` Peer Review Watchdog: Every ${state2.reviewIntervalMinutes} minutes (zero-cost PR preflight)`));
6549
- console.log(pc15.dim(` Autowork Backlog Scan: Every ${state2.autoworkIntervalMinutes} minutes`));
6550
- console.log(pc15.dim(` Routines: ${state2.routines.join(", ")}`));
6551
- console.log(pc15.dim(` Log file: .jonah-fleet/daemon.log`));
6552
- console.log(pc15.dim(` Run 'jonah-fleet daemon status' or 'jonah-fleet daemon stop' to manage.`));
6668
+ console.log(pc15.dim(` Run 'jonah-fleet daemon status' or 'jonah-fleet daemon stop' to manage.
6669
+ `));
6553
6670
  } catch (err) {
6554
6671
  console.error(pc15.red(`
6555
6672
  \u2717 Failed to start daemon: ${err.message}`));
@@ -6588,9 +6705,21 @@ Stopping background agent daemon (PID ${state2?.pid})...`));
6588
6705
  const running = isDaemonRunning(cwd);
6589
6706
  const state = readDaemonState(cwd);
6590
6707
  const activeWorktrees = await listActiveWorktrees(cwd);
6591
- console.log(pc15.cyan(`
6592
- \u{1F916} Jonah Fleet Local Daemon Status
6593
- `));
6708
+ const statusSubtitle = running && state ? state.status === "working" ? "LOCAL RUNNER WORKING" : state.status === "paused" ? "LOCAL RUNNER PAUSED" : "LOCAL RUNNER IDLE" : "LOCAL RUNNER STOPPED";
6709
+ console.log(
6710
+ renderFleetBanner({
6711
+ command: "DAEMON",
6712
+ subtitle: statusSubtitle,
6713
+ details: [
6714
+ { label: "Status", value: running && state ? state.status.toUpperCase() : "STOPPED" },
6715
+ ...running && state ? [{ label: "PID", value: String(state.pid) }] : [],
6716
+ { label: "Target", value: cwd }
6717
+ ]
6718
+ })
6719
+ );
6720
+ console.log(pc15.bold(pc15.cyan(`
6721
+ \u26A1 Jonah Fleet Local Daemon Status
6722
+ `)));
6594
6723
  if (running && state) {
6595
6724
  console.log(` Status: ${pc15.green(pc15.bold("RUNNING"))}`);
6596
6725
  console.log(` PID: ${state.pid}`);
@@ -58,28 +58,32 @@ export declare function countOpenReadyPRs(repoRoot: string): Promise<number>;
58
58
  * Checks if a GitHub user login corresponds to a bot account or designated agent persona.
59
59
  */
60
60
  export declare function isBotLogin(login?: string | null): boolean;
61
- /**
62
- * Classifies a list of open GitHub issues according to the Autowork backlog taxonomy.
63
- */
64
- export declare function classifyBacklogIssues(issues: BacklogIssue[], openPRs?: Array<{
61
+ export interface BacklogPR {
65
62
  number: number;
66
63
  title?: string;
67
64
  body?: string;
68
65
  headRefName?: string;
69
- }>): BacklogTriageReport;
66
+ isDraft?: boolean;
67
+ labels?: Array<{
68
+ name: string;
69
+ } | string>;
70
+ assignees?: Array<{
71
+ login: string;
72
+ }>;
73
+ url?: string;
74
+ }
75
+ /**
76
+ * Classifies a list of open GitHub issues and pull requests according to the Autowork backlog taxonomy.
77
+ */
78
+ export declare function classifyBacklogIssues(issues: BacklogIssue[], openPRs?: BacklogPR[]): BacklogTriageReport;
70
79
  /**
71
80
  * Fast GitHub CLI query for open issues in ~150ms with 0 token cost.
72
81
  */
73
82
  export declare function getBacklogIssues(repoRoot: string): Promise<BacklogIssue[]>;
74
83
  /**
75
- * Fast GitHub CLI query for open pull requests with titles and bodies.
84
+ * Fast GitHub CLI query for open pull requests with titles, bodies, and draft status.
76
85
  */
77
- export declare function getOpenPRsForBacklog(repoRoot: string): Promise<Array<{
78
- number: number;
79
- title?: string;
80
- body?: string;
81
- headRefName?: string;
82
- }>>;
86
+ export declare function getOpenPRsForBacklog(repoRoot: string): Promise<BacklogPR[]>;
83
87
  /**
84
88
  * Preflight query and classification for the full repository backlog with 0 token cost.
85
89
  */
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"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"}
@@ -203,6 +203,15 @@ export declare function detectPrematureRoutineExit(output: string, routine: stri
203
203
  * Includes sanitized trailing error output from stdout and/or stderr if exitCode is non-zero.
204
204
  */
205
205
  export declare function formatFallbackRunReport(options: FallbackReportOptions): string;
206
+ /**
207
+ * Preserves uncommitted files in a worktree by committing them to the branch
208
+ * before worktree cleanup, preventing work loss on interruptions or crashes.
209
+ */
210
+ export declare function preserveUncommittedWork(worktreePath: string, routine: string): Promise<{
211
+ preserved: boolean;
212
+ commitSha?: string;
213
+ fileCount?: number;
214
+ }>;
206
215
  /**
207
216
  * Runs a routine locally with worktree isolation and Antigravity CLI invocation.
208
217
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jonah-fleet",
3
- "version": "1.27.1",
3
+ "version": "1.28.0",
4
4
  "description": "Standalone autonomous agent fleet with Symphony orchestration, claim protocols, and continuous improvement loops",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -42,6 +42,7 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
42
42
  - **Defect Taxonomy of Bogus Green Checks & Red Gate Verification**: Always establish a failing reproduction check or verifier before modifying code (the Red Gate). Interrogate checks against the 6 bogus green defect classes (Vacuous assertion, Silent no-match, Errored check, Wrong reference, Stale premise, Scope mismatch). Exit codes decide; summaries are intent.
43
43
  - **Anti-Hallucination Disk Read-Back Verification**: Always verify generated code, configs, and artifacts by reading values directly back out of the written artifact on disk, never from in-memory variables or shell command echoes.
44
44
  - **Precision Git Scoping**: Never execute bare `git commit` or blind `git add .` without scoping. Always commit designated paths explicitly (`git commit -m "..." -- <paths>`) or verify `git status --porcelain` to avoid sweeping in uncommitted scratch artifacts or concurrent session files.
45
+ - **Incremental Commits**: Commit early and incrementally. Do NOT accumulate dozens of edits across many files without committing. Once your implementation passes the Red Gate test and local tests, commit your changes immediately (`git commit -m "<type>(<scope>): <subject>" -- <paths>`). Then run formatting and linting as a separate commit. This guarantees your work is persisted in git and immune to mid-session crashes.
45
46
 
46
47
  ## Negative examples (DO NOT do these)
47
48
 
@@ -63,6 +64,7 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
63
64
  - Do not pause or prompt rhetorical questions ("Shall I continue?", "Should I start implementing?")—proceed autonomously.
64
65
  - Do not use bare `git commit` or blind `git add .` without scoping specific paths (`git commit -m "..." -- <paths>`).
65
66
  - Do not verify generated files by checking in-memory strings or shell variables; read values back out of the file on disk.
67
+ - Do not accumulate changes across many files without committing — commit incrementally as soon as tests pass, then format/lint.
66
68
 
67
69
  ## Instructions
68
70
 
@@ -87,7 +89,7 @@ a. **Read the target issue and check eligibility.** Eligible = open, unassigned
87
89
 
88
90
  ### Phase 1: Converge on open work (Scan mode; skipped in Targeted mode)
89
91
 
90
- 1. List all open PRs authored by this routine.
92
+ 1. List all open PRs needing attention (specifically draft PRs bounced back by peer review or open PRs with review comments: `gh pr list --state open --json number,title,isDraft,headRefName,assignees,labels,author`, excluding automated release PRs `release-please--*` / `chore(main): release*`).
91
93
  1a. **PR Claim Protocol (Single-Flight PR Convergence)**:
92
94
  - For each open PR needing attention (bounced to draft with actionable findings, or open with unaddressed review comments):
93
95
  - **Check eligibility**: re-read candidate PR (`gh pr view <PR> --json assignees,comments`). Skip PRs currently assigned to another live runner or carrying an active claim comment posted within the last 2 hours (unless stale claim per `ORCHESTRATION.md`).
@@ -258,6 +260,7 @@ _Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/ru
258
260
  - Branch from freshly fetched `origin/main` with descriptive name (e.g. `feat/...` or `fix/...`).
259
261
  - Drive implementation via `/tdd` (red-green-refactor): execute the Red Gate test first, write minimal code to pass, and refactor cleanly.
260
262
  - **Precision Git Scoping**: Never use bare `git commit` or `git add .` blindly. Stage and commit only designated paths explicitly: `git commit -m "<type>(<scope>): <subject>" -- <paths>`, or verify `git status --porcelain` before committing to avoid sweeping in scratch files or parallel artifacts.
263
+ - **Incremental Commits Protocol**: Commit early and incrementally. Do NOT wait until the very end of the run to commit. As soon as the implementation passes its local tests, commit immediately (`git commit -m "<type>(<scope>): <subject>" -- <paths>`). Then proceed to linting, formatting, and pre-PR checks as a separate commit. If a downstream formatting/linting check or system crash interrupts the session, your core implementation remains safely persisted on the branch.
261
264
  - **Diagnostic Reflex**: On unexpected test/build failure during TDD, grep symptom text in `LESSONS.md` before making speculative code edits.
262
265
  - Run repository tests and verification.
263
266
  - **Disk Read-Back Verification**: Verify written configs, schemas, and generated files by reading values directly back from disk files (`cat`, `jq`, test assertions), never from shell variables or memory.