jonah-fleet 1.9.2 → 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 +24 -1
- package/dist/index.js +240 -29
- package/dist/lib/daemon.d.ts +20 -0
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/runner.d.ts +38 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@ 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
|
+
|
|
15
|
+
## [1.10.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.9.2...v1.10.0) (2026-09-17)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* **radar:** expand Category A heuristics to include prompt engineering optimizations and release tag_name ([#186](https://github.com/juliendurandeu/jonah-fleet/issues/186)) ([37fb3fc](https://github.com/juliendurandeu/jonah-fleet/commit/37fb3fca85b2f880de90df6a4baf9ec50f624003))
|
|
21
|
+
* **radar:** surface actionable opportunities with deterministic A/B/C classification ([#181](https://github.com/juliendurandeu/jonah-fleet/issues/181)) ([b9809c0](https://github.com/juliendurandeu/jonah-fleet/commit/b9809c0c1b54cb690c878d574cecbe1a4ce33480))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
* **runner:** capture stderr and handle signal exit codes in fallback error diagnostics ([#176](https://github.com/juliendurandeu/jonah-fleet/issues/176)) ([9bbe8eb](https://github.com/juliendurandeu/jonah-fleet/commit/9bbe8eb7cd52deab74c0bc9d503011511502a98f))
|
|
27
|
+
|
|
8
28
|
## [1.9.2](https://github.com/juliendurandeu/jonah-fleet/compare/v1.9.1...v1.9.2) (2026-09-16)
|
|
9
29
|
|
|
10
30
|
|
|
@@ -41,10 +61,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
41
61
|
* **runner,daemon:** prevent stale report ghosting and fix keyboard lockup in targeted prompts ([#166](https://github.com/juliendurandeu/jonah-fleet/issues/166)) ([0de89e2](https://github.com/juliendurandeu/jonah-fleet/commit/0de89e24427f9e575f08cd721434ab5156fdcb94))
|
|
42
62
|
* **workflows:** harden workflow templates against shell injection, credential persistence, and timeouts ([04a0dd3](https://github.com/juliendurandeu/jonah-fleet/commit/04a0dd3a0457fd4d6db74fcd4709fcef0d28d84e))
|
|
43
63
|
|
|
44
|
-
## [Unreleased] - 2026-09-
|
|
64
|
+
## [Unreleased] - 2026-09-17
|
|
45
65
|
|
|
46
66
|
### Features
|
|
47
67
|
|
|
68
|
+
* **daemon:** auto-reconcile orphaned local routine run issues on daemon startup after host reboots or process crashes.
|
|
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)).
|
|
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)).
|
|
48
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`.
|
|
49
72
|
* **workflows:** automatically post Interruption Cards to routine run issue comment streams upon failure, timeout, or cancellation, linking directly to the Actions run logs before applying `status:failure,needs-attention`.
|
|
50
73
|
* **runner:** add `formatMilestoneCard`, `formatInterruptionCard`, and `tryPostLocalRunMilestone` helpers to local runner `runner.ts` to post interruption cards on non-zero exit codes with offline fallback.
|
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)) {
|
|
@@ -3742,6 +3833,39 @@ function extractFreshRunReport(executionReportPath, targetReportPath, startTime)
|
|
|
3742
3833
|
}
|
|
3743
3834
|
return null;
|
|
3744
3835
|
}
|
|
3836
|
+
function resolveExitCode(code, signal) {
|
|
3837
|
+
return code ?? (signal ? 1 : 0);
|
|
3838
|
+
}
|
|
3839
|
+
function formatFallbackRunReport(options) {
|
|
3840
|
+
const result = options.exitCode === 0 ? "SUCCESS" : "FAILURE";
|
|
3841
|
+
let reportContent = `## Run Summary
|
|
3842
|
+
|
|
3843
|
+
| Metric | Value |
|
|
3844
|
+
|---|---|
|
|
3845
|
+
| Routine | \`${options.routine}\` |
|
|
3846
|
+
| Timestamp | \`${options.timestamp}\` |
|
|
3847
|
+
| Result | \`${result}\` |
|
|
3848
|
+
| Exit Code | \`${options.exitCode}\` |
|
|
3849
|
+
| Host | \`${options.hostname}\` |
|
|
3850
|
+
| Target | \`${options.targetLabel}\` |
|
|
3851
|
+
| Duration | \`${options.durationSec}s\` |
|
|
3852
|
+
`;
|
|
3853
|
+
if (options.exitCode !== 0) {
|
|
3854
|
+
const errorChunks = [options.output?.trim(), options.stderr?.trim()].filter(Boolean);
|
|
3855
|
+
const combinedError = errorChunks.join("\n");
|
|
3856
|
+
if (combinedError.trim()) {
|
|
3857
|
+
const sanitizedOutput = stripAnsi(combinedError.trim()).split("\n").slice(-15).join("\n");
|
|
3858
|
+
reportContent += `
|
|
3859
|
+
### Error Output
|
|
3860
|
+
|
|
3861
|
+
\`\`\`
|
|
3862
|
+
${sanitizedOutput}
|
|
3863
|
+
\`\`\`
|
|
3864
|
+
`;
|
|
3865
|
+
}
|
|
3866
|
+
}
|
|
3867
|
+
return reportContent;
|
|
3868
|
+
}
|
|
3745
3869
|
async function runLocalRoutine(options) {
|
|
3746
3870
|
const targetDir = path12.resolve(options.targetDir);
|
|
3747
3871
|
const routine = options.routine;
|
|
@@ -3970,7 +4094,9 @@ Timeout: ${printTimeout}`,
|
|
|
3970
4094
|
}
|
|
3971
4095
|
}
|
|
3972
4096
|
});
|
|
4097
|
+
let accumulatedStderr = "";
|
|
3973
4098
|
const stderrParser = new LineBufferedStreamParser((line) => {
|
|
4099
|
+
accumulatedStderr += line + "\n";
|
|
3974
4100
|
checkTargetDetection(line);
|
|
3975
4101
|
if (options.verbose) {
|
|
3976
4102
|
console.error(pc10.dim(`[stderr] ${line}`));
|
|
@@ -4014,9 +4140,9 @@ Timeout: ${printTimeout}`,
|
|
|
4014
4140
|
spinner?.stop();
|
|
4015
4141
|
reject(err);
|
|
4016
4142
|
});
|
|
4017
|
-
child.on("close", (code) => {
|
|
4143
|
+
child.on("close", (code, signal) => {
|
|
4018
4144
|
spinner?.stop();
|
|
4019
|
-
resolve(code
|
|
4145
|
+
resolve(resolveExitCode(code, signal));
|
|
4020
4146
|
});
|
|
4021
4147
|
});
|
|
4022
4148
|
} finally {
|
|
@@ -4034,28 +4160,16 @@ Timeout: ${printTimeout}`,
|
|
|
4034
4160
|
const durationSec = Math.round(durationMs / 1e3);
|
|
4035
4161
|
let reportContent = extractFreshRunReport(executionReportPath, targetReportPath, startTime) || "";
|
|
4036
4162
|
if (!reportContent) {
|
|
4037
|
-
reportContent =
|
|
4038
|
-
|
|
4039
|
-
|
|
4040
|
-
|
|
4041
|
-
|
|
4042
|
-
|
|
4043
|
-
|
|
4044
|
-
|
|
4045
|
-
|
|
4046
|
-
|
|
4047
|
-
| Duration | \`${durationSec}s\` |
|
|
4048
|
-
`;
|
|
4049
|
-
if (exitCode !== 0 && output.trim()) {
|
|
4050
|
-
const sanitizedOutput = stripAnsi(output.trim()).split("\n").slice(-15).join("\n");
|
|
4051
|
-
reportContent += `
|
|
4052
|
-
### Error Output
|
|
4053
|
-
|
|
4054
|
-
\`\`\`
|
|
4055
|
-
${sanitizedOutput}
|
|
4056
|
-
\`\`\`
|
|
4057
|
-
`;
|
|
4058
|
-
}
|
|
4163
|
+
reportContent = formatFallbackRunReport({
|
|
4164
|
+
routine,
|
|
4165
|
+
timestamp,
|
|
4166
|
+
exitCode,
|
|
4167
|
+
hostname,
|
|
4168
|
+
targetLabel,
|
|
4169
|
+
durationSec,
|
|
4170
|
+
output,
|
|
4171
|
+
stderr: accumulatedStderr
|
|
4172
|
+
});
|
|
4059
4173
|
}
|
|
4060
4174
|
try {
|
|
4061
4175
|
fs12.writeFileSync(targetReportPath, reportContent, "utf8");
|
|
@@ -4121,6 +4235,7 @@ ${sanitizedOutput}
|
|
|
4121
4235
|
success: exitCode === 0,
|
|
4122
4236
|
exitCode,
|
|
4123
4237
|
output,
|
|
4238
|
+
stderr: accumulatedStderr,
|
|
4124
4239
|
worktreePath,
|
|
4125
4240
|
branchName,
|
|
4126
4241
|
issueNumber: routineIssueNumber
|
|
@@ -4198,8 +4313,9 @@ import pc14 from "picocolors";
|
|
|
4198
4313
|
// src/lib/daemon.ts
|
|
4199
4314
|
import fs14 from "fs";
|
|
4200
4315
|
import path14 from "path";
|
|
4201
|
-
import
|
|
4202
|
-
import {
|
|
4316
|
+
import os3 from "os";
|
|
4317
|
+
import { spawn as spawn2, execFile as execFile5 } from "child_process";
|
|
4318
|
+
import { promisify as promisify5 } from "util";
|
|
4203
4319
|
|
|
4204
4320
|
// src/lib/daemon-keys.ts
|
|
4205
4321
|
import readline2 from "readline";
|
|
@@ -4588,7 +4704,7 @@ function formatDaemonStatusLine(options = {}) {
|
|
|
4588
4704
|
|
|
4589
4705
|
// src/lib/daemon.ts
|
|
4590
4706
|
import pc13 from "picocolors";
|
|
4591
|
-
var
|
|
4707
|
+
var execFileAsync5 = promisify5(execFile5);
|
|
4592
4708
|
function getDaemonStatePath(repoRoot) {
|
|
4593
4709
|
return path14.join(repoRoot, ".jonah-fleet", "daemon.json");
|
|
4594
4710
|
}
|
|
@@ -4633,7 +4749,7 @@ function filterReviewablePRs(prs) {
|
|
|
4633
4749
|
}
|
|
4634
4750
|
async function getOpenReviewablePRs(repoRoot) {
|
|
4635
4751
|
try {
|
|
4636
|
-
const { stdout } = await
|
|
4752
|
+
const { stdout } = await execFileAsync5(
|
|
4637
4753
|
"gh",
|
|
4638
4754
|
["pr", "list", "--state", "open", "--draft=false", "--json", "number,headRefName,title"],
|
|
4639
4755
|
{ cwd: repoRoot }
|
|
@@ -4703,6 +4819,99 @@ async function stopDaemon(repoRoot) {
|
|
|
4703
4819
|
return false;
|
|
4704
4820
|
}
|
|
4705
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
|
+
}
|
|
4706
4915
|
async function drainReviewQueue(drainOptions) {
|
|
4707
4916
|
const {
|
|
4708
4917
|
repoRoot,
|
|
@@ -5362,6 +5571,8 @@ ${pc13.cyan("Enter Issue # to work (Esc/Enter to cancel):")} `, {
|
|
|
5362
5571
|
}
|
|
5363
5572
|
});
|
|
5364
5573
|
keyboard?.start();
|
|
5574
|
+
void reconcileOrphanedLocalRuns(repoRoot).catch(() => {
|
|
5575
|
+
});
|
|
5365
5576
|
if (routines.includes("peer-review")) {
|
|
5366
5577
|
await performReviewDrain();
|
|
5367
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
|
@@ -19,6 +19,7 @@ export interface RunLocalRoutineResult {
|
|
|
19
19
|
success: boolean;
|
|
20
20
|
exitCode: number;
|
|
21
21
|
output: string;
|
|
22
|
+
stderr?: string;
|
|
22
23
|
worktreePath?: string;
|
|
23
24
|
branchName?: string;
|
|
24
25
|
issueNumber?: number;
|
|
@@ -139,17 +140,54 @@ export declare function formatInterruptionCard(options: InterruptionCardOptions)
|
|
|
139
140
|
* Fails gracefully if offline or unauthenticated.
|
|
140
141
|
*/
|
|
141
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>;
|
|
142
148
|
/**
|
|
143
149
|
* Reconciles a GitHub issue for local routine execution.
|
|
144
150
|
* Closes the issue if success, leaves it open with needs-attention if failure.
|
|
145
151
|
* Fails gracefully if offline or unauthenticated.
|
|
146
152
|
*/
|
|
147
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>;
|
|
148
166
|
/**
|
|
149
167
|
* Reads a freshly generated run report from execution or target directory.
|
|
150
168
|
* Returns null if no fresh report exists (e.g. file missing or older than run start).
|
|
151
169
|
*/
|
|
152
170
|
export declare function extractFreshRunReport(executionReportPath: string, targetReportPath: string, startTime: number): string | null;
|
|
171
|
+
export interface FallbackReportOptions {
|
|
172
|
+
routine: string;
|
|
173
|
+
timestamp: string;
|
|
174
|
+
exitCode: number;
|
|
175
|
+
hostname: string;
|
|
176
|
+
targetLabel: string;
|
|
177
|
+
durationSec: number;
|
|
178
|
+
output?: string;
|
|
179
|
+
stderr?: string;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Resolves child process exit code, ensuring signals (e.g. SIGTERM, SIGINT)
|
|
183
|
+
* resolve to a non-zero exit code instead of defaulting to 0.
|
|
184
|
+
*/
|
|
185
|
+
export declare function resolveExitCode(code: number | null, signal: NodeJS.Signals | string | null): number;
|
|
186
|
+
/**
|
|
187
|
+
* Formats a fallback summary markdown report when no fresh run-report.md was generated.
|
|
188
|
+
* Includes sanitized trailing error output from stdout and/or stderr if exitCode is non-zero.
|
|
189
|
+
*/
|
|
190
|
+
export declare function formatFallbackRunReport(options: FallbackReportOptions): string;
|
|
153
191
|
/**
|
|
154
192
|
* Runs a routine locally with worktree isolation and Antigravity CLI invocation.
|
|
155
193
|
*/
|
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