jonah-fleet 1.10.0 → 1.11.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 +8 -0
- package/dist/index.js +192 -5
- package/dist/lib/daemon.d.ts +20 -0
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/runner.d.ts +17 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ 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.11.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.10.0...v1.11.0) (2026-09-17)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **daemon:** auto-reconcile orphaned local routine runs on startup ([#188](https://github.com/juliendurandeu/jonah-fleet/issues/188)) ([dcc7746](https://github.com/juliendurandeu/jonah-fleet/commit/dcc7746268cd1921dbfb8e23c57ac46cf9217b83))
|
|
14
|
+
|
|
8
15
|
## [1.10.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.9.2...v1.10.0) (2026-09-17)
|
|
9
16
|
|
|
10
17
|
|
|
@@ -58,6 +65,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
58
65
|
|
|
59
66
|
### Features
|
|
60
67
|
|
|
68
|
+
* **daemon:** auto-reconcile orphaned local routine run issues on daemon startup after host reboots or process crashes.
|
|
61
69
|
* **radar:** expand Category A heuristics in `fetch-symphony-radar.js` to detect prompt engineering optimizations and release `tag_name` fallbacks, prioritize Category A invariants over runtime keywords, and refine empty lookback checklist phrasing ([#184](https://github.com/juliendurandeu/jonah-fleet/issues/184)).
|
|
62
70
|
* **radar:** deterministically classify upstream changes across Symphony and Funes into Category A/B/C and surface architectural opportunities with callout summaries, breakdown matrices, and dynamic triage checklists ([#152](https://github.com/juliendurandeu/jonah-fleet/issues/152)).
|
|
63
71
|
* **telemetry:** introduce live progress reporting in routine run tracking issues (`routine-log`) using bounded Compact Milestone Cards (3–5 bullet points for Intake & Strategy, Verification & Tests, Autonomous Handoff, and Run Completed) across `autowork`, `peer-review`, `optimizer`, and `ORCHESTRATION.md`.
|
package/dist/index.js
CHANGED
|
@@ -2656,7 +2656,8 @@ import pc11 from "picocolors";
|
|
|
2656
2656
|
import fs12 from "fs";
|
|
2657
2657
|
import path12 from "path";
|
|
2658
2658
|
import os2 from "os";
|
|
2659
|
-
import { spawn, execSync as execSync2 } from "child_process";
|
|
2659
|
+
import { spawn, execSync as execSync2, execFile as execFile4 } from "child_process";
|
|
2660
|
+
import { promisify as promisify4 } from "util";
|
|
2660
2661
|
|
|
2661
2662
|
// src/lib/worktree.ts
|
|
2662
2663
|
import fs10 from "fs";
|
|
@@ -3496,6 +3497,7 @@ var TerminalSpinner = class {
|
|
|
3496
3497
|
|
|
3497
3498
|
// src/lib/runner.ts
|
|
3498
3499
|
import pc10 from "picocolors";
|
|
3500
|
+
var execFileAsync4 = promisify4(execFile4);
|
|
3499
3501
|
var LineBufferedStreamParser = class {
|
|
3500
3502
|
buffer = "";
|
|
3501
3503
|
onLine;
|
|
@@ -3677,6 +3679,25 @@ function tryPostLocalRunMilestone(cwd, issueNumber, cardContent) {
|
|
|
3677
3679
|
} catch {
|
|
3678
3680
|
}
|
|
3679
3681
|
}
|
|
3682
|
+
async function tryPostLocalRunMilestoneAsync(cwd, issueNumber, cardContent) {
|
|
3683
|
+
const tmpFile = path12.join(os2.tmpdir(), `jonah-fleet-milestone-${issueNumber}-${Date.now()}.md`);
|
|
3684
|
+
try {
|
|
3685
|
+
await fs12.promises.writeFile(tmpFile, cardContent, "utf8");
|
|
3686
|
+
await execFileAsync4("gh", ["issue", "comment", String(issueNumber), "--body-file", tmpFile], {
|
|
3687
|
+
cwd
|
|
3688
|
+
});
|
|
3689
|
+
return true;
|
|
3690
|
+
} catch {
|
|
3691
|
+
return false;
|
|
3692
|
+
} finally {
|
|
3693
|
+
try {
|
|
3694
|
+
if (fs12.existsSync(tmpFile)) {
|
|
3695
|
+
await fs12.promises.unlink(tmpFile);
|
|
3696
|
+
}
|
|
3697
|
+
} catch {
|
|
3698
|
+
}
|
|
3699
|
+
}
|
|
3700
|
+
}
|
|
3680
3701
|
function tryReconcileLocalRunIssue(cwd, issueNumber, reportContent, exitCode, hostname, routine) {
|
|
3681
3702
|
try {
|
|
3682
3703
|
if (exitCode !== 0) {
|
|
@@ -3721,6 +3742,76 @@ _Generated by Jonah Fleet local runner on ${hostname}._`;
|
|
|
3721
3742
|
} catch {
|
|
3722
3743
|
}
|
|
3723
3744
|
}
|
|
3745
|
+
async function tryMarkLocalRunInterruptedAsync(cwd, issueNumber, hostname, reason = "Host machine process terminated mid-execution (machine reboot or SIGKILL)", routine = "local-routine") {
|
|
3746
|
+
try {
|
|
3747
|
+
const interruptionCard = formatInterruptionCard({
|
|
3748
|
+
routine,
|
|
3749
|
+
status: reason,
|
|
3750
|
+
runner: `local (${hostname})`,
|
|
3751
|
+
step: "Local execution interrupted before completion"
|
|
3752
|
+
});
|
|
3753
|
+
await tryPostLocalRunMilestoneAsync(cwd, issueNumber, interruptionCard);
|
|
3754
|
+
await execFileAsync4(
|
|
3755
|
+
"gh",
|
|
3756
|
+
["issue", "edit", String(issueNumber), "--add-label", "status:failure,needs-attention", "--remove-label", "status:running"],
|
|
3757
|
+
{ cwd }
|
|
3758
|
+
);
|
|
3759
|
+
return true;
|
|
3760
|
+
} catch {
|
|
3761
|
+
return false;
|
|
3762
|
+
}
|
|
3763
|
+
}
|
|
3764
|
+
async function tryReconcileLocalRunIssueAsync(cwd, issueNumber, reportContent, exitCode, hostname, routine) {
|
|
3765
|
+
try {
|
|
3766
|
+
if (exitCode !== 0) {
|
|
3767
|
+
const interruptionCard = formatInterruptionCard({
|
|
3768
|
+
routine: routine || "local-routine",
|
|
3769
|
+
status: `exit code ${exitCode}`,
|
|
3770
|
+
runner: `local (${hostname})`
|
|
3771
|
+
});
|
|
3772
|
+
await tryPostLocalRunMilestoneAsync(cwd, issueNumber, interruptionCard);
|
|
3773
|
+
}
|
|
3774
|
+
const finalBody = `${reportContent}
|
|
3775
|
+
|
|
3776
|
+
---
|
|
3777
|
+
_Generated by Jonah Fleet local runner on ${hostname}._`;
|
|
3778
|
+
const tmpFile = path12.join(os2.tmpdir(), `jonah-fleet-run-${issueNumber}-${Date.now()}.md`);
|
|
3779
|
+
await fs12.promises.writeFile(tmpFile, finalBody, "utf8");
|
|
3780
|
+
try {
|
|
3781
|
+
await execFileAsync4("gh", ["issue", "edit", String(issueNumber), "--body-file", tmpFile], {
|
|
3782
|
+
cwd
|
|
3783
|
+
});
|
|
3784
|
+
if (exitCode === 0) {
|
|
3785
|
+
await execFileAsync4(
|
|
3786
|
+
"gh",
|
|
3787
|
+
["issue", "edit", String(issueNumber), "--add-label", "status:success", "--remove-label", "status:running"],
|
|
3788
|
+
{ cwd }
|
|
3789
|
+
);
|
|
3790
|
+
await execFileAsync4(
|
|
3791
|
+
"gh",
|
|
3792
|
+
["issue", "close", String(issueNumber), "--reason", "completed"],
|
|
3793
|
+
{ cwd }
|
|
3794
|
+
);
|
|
3795
|
+
} else {
|
|
3796
|
+
await execFileAsync4(
|
|
3797
|
+
"gh",
|
|
3798
|
+
["issue", "edit", String(issueNumber), "--add-label", "status:failure,needs-attention", "--remove-label", "status:running"],
|
|
3799
|
+
{ cwd }
|
|
3800
|
+
);
|
|
3801
|
+
}
|
|
3802
|
+
return true;
|
|
3803
|
+
} finally {
|
|
3804
|
+
try {
|
|
3805
|
+
if (fs12.existsSync(tmpFile)) {
|
|
3806
|
+
await fs12.promises.unlink(tmpFile);
|
|
3807
|
+
}
|
|
3808
|
+
} catch {
|
|
3809
|
+
}
|
|
3810
|
+
}
|
|
3811
|
+
} catch {
|
|
3812
|
+
return false;
|
|
3813
|
+
}
|
|
3814
|
+
}
|
|
3724
3815
|
function extractFreshRunReport(executionReportPath, targetReportPath, startTime) {
|
|
3725
3816
|
try {
|
|
3726
3817
|
if (fs12.existsSync(executionReportPath)) {
|
|
@@ -4222,8 +4313,9 @@ import pc14 from "picocolors";
|
|
|
4222
4313
|
// src/lib/daemon.ts
|
|
4223
4314
|
import fs14 from "fs";
|
|
4224
4315
|
import path14 from "path";
|
|
4225
|
-
import
|
|
4226
|
-
import {
|
|
4316
|
+
import os3 from "os";
|
|
4317
|
+
import { spawn as spawn2, execFile as execFile5 } from "child_process";
|
|
4318
|
+
import { promisify as promisify5 } from "util";
|
|
4227
4319
|
|
|
4228
4320
|
// src/lib/daemon-keys.ts
|
|
4229
4321
|
import readline2 from "readline";
|
|
@@ -4612,7 +4704,7 @@ function formatDaemonStatusLine(options = {}) {
|
|
|
4612
4704
|
|
|
4613
4705
|
// src/lib/daemon.ts
|
|
4614
4706
|
import pc13 from "picocolors";
|
|
4615
|
-
var
|
|
4707
|
+
var execFileAsync5 = promisify5(execFile5);
|
|
4616
4708
|
function getDaemonStatePath(repoRoot) {
|
|
4617
4709
|
return path14.join(repoRoot, ".jonah-fleet", "daemon.json");
|
|
4618
4710
|
}
|
|
@@ -4657,7 +4749,7 @@ function filterReviewablePRs(prs) {
|
|
|
4657
4749
|
}
|
|
4658
4750
|
async function getOpenReviewablePRs(repoRoot) {
|
|
4659
4751
|
try {
|
|
4660
|
-
const { stdout } = await
|
|
4752
|
+
const { stdout } = await execFileAsync5(
|
|
4661
4753
|
"gh",
|
|
4662
4754
|
["pr", "list", "--state", "open", "--draft=false", "--json", "number,headRefName,title"],
|
|
4663
4755
|
{ cwd: repoRoot }
|
|
@@ -4727,6 +4819,99 @@ async function stopDaemon(repoRoot) {
|
|
|
4727
4819
|
return false;
|
|
4728
4820
|
}
|
|
4729
4821
|
}
|
|
4822
|
+
async function queryOrphanedLocalRunIssues(repoRoot) {
|
|
4823
|
+
try {
|
|
4824
|
+
const { stdout } = await execFileAsync5(
|
|
4825
|
+
"gh",
|
|
4826
|
+
["issue", "list", "--state", "open", "--label", "runner:local,status:running", "--json", "number,title,createdAt", "--limit", "20"],
|
|
4827
|
+
{ cwd: repoRoot }
|
|
4828
|
+
);
|
|
4829
|
+
return JSON.parse(stdout || "[]");
|
|
4830
|
+
} catch {
|
|
4831
|
+
return [];
|
|
4832
|
+
}
|
|
4833
|
+
}
|
|
4834
|
+
async function reconcileOrphanedLocalRuns(optionsOrRepoRoot) {
|
|
4835
|
+
const options = typeof optionsOrRepoRoot === "string" ? { repoRoot: optionsOrRepoRoot } : optionsOrRepoRoot;
|
|
4836
|
+
const { repoRoot } = options;
|
|
4837
|
+
const queryFn = options.queryIssues || queryOrphanedLocalRunIssues;
|
|
4838
|
+
try {
|
|
4839
|
+
const issues = await queryFn(repoRoot);
|
|
4840
|
+
if (!issues || issues.length === 0) return 0;
|
|
4841
|
+
const runsDir = path14.join(repoRoot, ".jonah-fleet", "runs");
|
|
4842
|
+
let reconciledCount = 0;
|
|
4843
|
+
const hostname = os3.hostname();
|
|
4844
|
+
for (const issue of issues) {
|
|
4845
|
+
try {
|
|
4846
|
+
let completedReport;
|
|
4847
|
+
let isSuccess = false;
|
|
4848
|
+
let metaRoutine;
|
|
4849
|
+
if (fs14.existsSync(runsDir)) {
|
|
4850
|
+
const files = fs14.readdirSync(runsDir);
|
|
4851
|
+
for (const file of files) {
|
|
4852
|
+
if (file.endsWith(".json")) {
|
|
4853
|
+
try {
|
|
4854
|
+
const meta = JSON.parse(fs14.readFileSync(path14.join(runsDir, file), "utf8"));
|
|
4855
|
+
if (meta.issueNumber === issue.number) {
|
|
4856
|
+
metaRoutine = meta.routine;
|
|
4857
|
+
const mdFile = file.replace(/\.json$/, ".md");
|
|
4858
|
+
const mdPath = path14.join(runsDir, mdFile);
|
|
4859
|
+
if (fs14.existsSync(mdPath)) {
|
|
4860
|
+
completedReport = fs14.readFileSync(mdPath, "utf8");
|
|
4861
|
+
isSuccess = meta.success === true || meta.exitCode === 0;
|
|
4862
|
+
break;
|
|
4863
|
+
}
|
|
4864
|
+
}
|
|
4865
|
+
} catch {
|
|
4866
|
+
}
|
|
4867
|
+
}
|
|
4868
|
+
}
|
|
4869
|
+
}
|
|
4870
|
+
if (options.reconcileRun) {
|
|
4871
|
+
const ok = await options.reconcileRun(
|
|
4872
|
+
repoRoot,
|
|
4873
|
+
issue.number,
|
|
4874
|
+
completedReport,
|
|
4875
|
+
isSuccess,
|
|
4876
|
+
metaRoutine
|
|
4877
|
+
);
|
|
4878
|
+
if (ok) reconciledCount++;
|
|
4879
|
+
} else if (completedReport) {
|
|
4880
|
+
const ok = await tryReconcileLocalRunIssueAsync(
|
|
4881
|
+
repoRoot,
|
|
4882
|
+
issue.number,
|
|
4883
|
+
completedReport,
|
|
4884
|
+
isSuccess ? 0 : 1,
|
|
4885
|
+
hostname,
|
|
4886
|
+
metaRoutine
|
|
4887
|
+
);
|
|
4888
|
+
if (ok) reconciledCount++;
|
|
4889
|
+
} else {
|
|
4890
|
+
const ok = await tryMarkLocalRunInterruptedAsync(
|
|
4891
|
+
repoRoot,
|
|
4892
|
+
issue.number,
|
|
4893
|
+
hostname,
|
|
4894
|
+
"Host machine daemon process was terminated before completion (e.g. machine reboot or SIGKILL).",
|
|
4895
|
+
metaRoutine || "local-routine"
|
|
4896
|
+
);
|
|
4897
|
+
if (ok) reconciledCount++;
|
|
4898
|
+
}
|
|
4899
|
+
} catch {
|
|
4900
|
+
}
|
|
4901
|
+
}
|
|
4902
|
+
if (reconciledCount > 0) {
|
|
4903
|
+
console.log(
|
|
4904
|
+
pc13.yellow(
|
|
4905
|
+
`
|
|
4906
|
+
\u26A0\uFE0F Reconciled ${reconciledCount} orphaned local routine run issue(s) from previous session.`
|
|
4907
|
+
)
|
|
4908
|
+
);
|
|
4909
|
+
}
|
|
4910
|
+
return reconciledCount;
|
|
4911
|
+
} catch {
|
|
4912
|
+
return 0;
|
|
4913
|
+
}
|
|
4914
|
+
}
|
|
4730
4915
|
async function drainReviewQueue(drainOptions) {
|
|
4731
4916
|
const {
|
|
4732
4917
|
repoRoot,
|
|
@@ -5386,6 +5571,8 @@ ${pc13.cyan("Enter Issue # to work (Esc/Enter to cancel):")} `, {
|
|
|
5386
5571
|
}
|
|
5387
5572
|
});
|
|
5388
5573
|
keyboard?.start();
|
|
5574
|
+
void reconcileOrphanedLocalRuns(repoRoot).catch(() => {
|
|
5575
|
+
});
|
|
5389
5576
|
if (routines.includes("peer-review")) {
|
|
5390
5577
|
await performReviewDrain();
|
|
5391
5578
|
}
|
package/dist/lib/daemon.d.ts
CHANGED
|
@@ -58,6 +58,26 @@ export declare function startBackgroundDaemon(repoRoot: string, options?: Daemon
|
|
|
58
58
|
* Stops a running daemon process.
|
|
59
59
|
*/
|
|
60
60
|
export declare function stopDaemon(repoRoot: string): Promise<boolean>;
|
|
61
|
+
export interface ReconcileOrphanedRunsOptions {
|
|
62
|
+
repoRoot: string;
|
|
63
|
+
queryIssues?: (repoRoot: string) => Promise<Array<{
|
|
64
|
+
number: number;
|
|
65
|
+
title: string;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
}>>;
|
|
68
|
+
reconcileRun?: (repoRoot: string, issueNumber: number, report: string | undefined, isSuccess: boolean, routine?: string) => Promise<boolean>;
|
|
69
|
+
}
|
|
70
|
+
export declare function queryOrphanedLocalRunIssues(repoRoot: string): Promise<Array<{
|
|
71
|
+
number: number;
|
|
72
|
+
title: string;
|
|
73
|
+
createdAt: string;
|
|
74
|
+
}>>;
|
|
75
|
+
/**
|
|
76
|
+
* Scans for open routine run issues labeled `runner:local,status:running` that were abandoned
|
|
77
|
+
* by a process crash, SIGKILL, or host machine reboot, and reconciles them.
|
|
78
|
+
* Operates asynchronously and fails gracefully on network / CLI errors without preventing daemon startup.
|
|
79
|
+
*/
|
|
80
|
+
export declare function reconcileOrphanedLocalRuns(optionsOrRepoRoot: string | ReconcileOrphanedRunsOptions): Promise<number>;
|
|
61
81
|
export interface DrainReviewQueueOptions {
|
|
62
82
|
repoRoot: string;
|
|
63
83
|
state?: DaemonState;
|
package/dist/lib/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/runner.d.ts
CHANGED
|
@@ -140,12 +140,29 @@ export declare function formatInterruptionCard(options: InterruptionCardOptions)
|
|
|
140
140
|
* Fails gracefully if offline or unauthenticated.
|
|
141
141
|
*/
|
|
142
142
|
export declare function tryPostLocalRunMilestone(cwd: string, issueNumber: number, cardContent: string): void;
|
|
143
|
+
/**
|
|
144
|
+
* Posts a milestone comment to a local routine tracking issue asynchronously.
|
|
145
|
+
* Fails gracefully if offline or unauthenticated.
|
|
146
|
+
*/
|
|
147
|
+
export declare function tryPostLocalRunMilestoneAsync(cwd: string, issueNumber: number, cardContent: string): Promise<boolean>;
|
|
143
148
|
/**
|
|
144
149
|
* Reconciles a GitHub issue for local routine execution.
|
|
145
150
|
* Closes the issue if success, leaves it open with needs-attention if failure.
|
|
146
151
|
* Fails gracefully if offline or unauthenticated.
|
|
147
152
|
*/
|
|
148
153
|
export declare function tryReconcileLocalRunIssue(cwd: string, issueNumber: number, reportContent: string, exitCode: number, hostname: string, routine?: string): void;
|
|
154
|
+
/**
|
|
155
|
+
* Asynchronously marks an interrupted local routine run as failed and posts an interruption card.
|
|
156
|
+
* Leaves the issue open with status:failure,needs-attention for maintainer triage.
|
|
157
|
+
* Fails gracefully if offline or unauthenticated.
|
|
158
|
+
*/
|
|
159
|
+
export declare function tryMarkLocalRunInterruptedAsync(cwd: string, issueNumber: number, hostname: string, reason?: string, routine?: string): Promise<boolean>;
|
|
160
|
+
/**
|
|
161
|
+
* Asynchronously reconciles a GitHub issue for local routine execution.
|
|
162
|
+
* Closes the issue if success, leaves it open with needs-attention if failure.
|
|
163
|
+
* Fails gracefully if offline or unauthenticated.
|
|
164
|
+
*/
|
|
165
|
+
export declare function tryReconcileLocalRunIssueAsync(cwd: string, issueNumber: number, reportContent: string, exitCode: number, hostname: string, routine?: string): Promise<boolean>;
|
|
149
166
|
/**
|
|
150
167
|
* Reads a freshly generated run report from execution or target directory.
|
|
151
168
|
* Returns null if no fresh report exists (e.g. file missing or older than run start).
|
package/dist/lib/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED