jonah-fleet 1.11.0 → 1.13.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,6 +5,40 @@ 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.13.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.12.0...v1.13.0) (2026-09-19)
9
+
10
+
11
+ ### Features
12
+
13
+ * **guard:** implement CLI runner loop-guard and circuit-breaker wrapper ([#222](https://github.com/juliendurandeu/jonah-fleet/issues/222)) ([bedacc0](https://github.com/juliendurandeu/jonah-fleet/commit/bedacc0d9bc2a36276f58901ffa2f2b06e797016))
14
+ * **memory:** introduce opt-in LESSONS.md operational memory tier ([#207](https://github.com/juliendurandeu/jonah-fleet/issues/207)) ([#219](https://github.com/juliendurandeu/jonah-fleet/issues/219)) ([13f74fa](https://github.com/juliendurandeu/jonah-fleet/commit/13f74fa2acc78554bba486b2bf77521106265f03))
15
+ * **orchestration:** standardize 'Why I believe this' structured human escalation card ([#229](https://github.com/juliendurandeu/jonah-fleet/issues/229)) ([997e1d2](https://github.com/juliendurandeu/jonah-fleet/commit/997e1d20d7d0a3970ecca9f209841db745f99979))
16
+
17
+ ## [1.12.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.11.0...v1.12.0) (2026-09-18)
18
+
19
+
20
+ ### Features
21
+
22
+ * **radar:** add zqiren/Orbital to ecosystem radar and evaluation matrix ([#212](https://github.com/juliendurandeu/jonah-fleet/issues/212)) ([910febb](https://github.com/juliendurandeu/jonah-fleet/commit/910febbbc8196d53c20f05730770aae231a6b8ea)), closes [#206](https://github.com/juliendurandeu/jonah-fleet/issues/206)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * **runner:** prevent premature routine termination on async background tasks in headless mode ([6641b2b](https://github.com/juliendurandeu/jonah-fleet/commit/6641b2b2e46ab363b73d490aac1144a33a1c69f9))
28
+
29
+ ## [Unreleased] - 2026-09-19
30
+
31
+ ### Features
32
+
33
+ * **orchestration:** standardize 'Why I believe this' structured human escalation card across autowork, triage, and housekeeping routines ([#209](https://github.com/juliendurandeu/jonah-fleet/issues/209))
34
+ * **guard:** implement CLI runner loop-guard and circuit-breaker wrapper ([#208](https://github.com/juliendurandeu/jonah-fleet/issues/208))
35
+ * **memory:** introduce opt-in LESSONS.md operational memory tier with 25-entry hard cap, schema configuration, and routine prompt gates ([#207](https://github.com/juliendurandeu/jonah-fleet/issues/207)).
36
+
37
+ ### Bug Fixes
38
+
39
+ * **runner:** detect premature routine termination caused by async background task turn yielding in headless CLI mode (`agy -p`), preventing false-positive success logging on uncompleted runs.
40
+ * **prompts:** add Headless Execution & Asynchronous Non-Yielding Guardrail across `peer-review.md`, `autowork.md`, and `ORCHESTRATION.md` with explicit remote CI trust bar to eliminate redundant verification stalling.
41
+
8
42
  ## [1.11.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.10.0...v1.11.0) (2026-09-17)
9
43
 
10
44
 
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export {};
1
+ export * from './lib/loop-guard.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6IA,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -608,6 +608,22 @@ function installFleet(targetDir, manifest, options = {}) {
608
608
  }
609
609
  }
610
610
  }
611
+ const targetScriptsDir = path3.join(targetDir, ".github/scripts");
612
+ fs3.mkdirSync(targetScriptsDir, { recursive: true });
613
+ const baseScripts = ["run-with-loop-guard.js"];
614
+ for (const file of baseScripts) {
615
+ const src = path3.join(templatesDir, "scripts", file);
616
+ const dest = path3.join(targetScriptsDir, file);
617
+ if (fs3.existsSync(src)) {
618
+ if (!fs3.existsSync(dest) || options.force) {
619
+ fs3.copyFileSync(src, dest);
620
+ try {
621
+ fs3.chmodSync(dest, 493);
622
+ } catch {
623
+ }
624
+ }
625
+ }
626
+ }
611
627
  for (const [routineName, isEnabled] of Object.entries(manifest.routines)) {
612
628
  if (!isEnabled) continue;
613
629
  const promptFile = `${routineName}.md`;
@@ -672,6 +688,17 @@ function installFleet(targetDir, manifest, options = {}) {
672
688
  result.docsInstalled.push("AGENTS.md");
673
689
  }
674
690
  }
691
+ const lessonsEnabled = manifest.lessons === true || typeof manifest.lessons === "object" && manifest.lessons?.enabled;
692
+ if (lessonsEnabled) {
693
+ const lessonsPath = path3.join(targetDir, "LESSONS.md");
694
+ if (!fs3.existsSync(lessonsPath) || options.force) {
695
+ const lessonsSrc = path3.join(templatesDir, "docs/LESSONS.template.md");
696
+ if (fs3.existsSync(lessonsSrc)) {
697
+ fs3.copyFileSync(lessonsSrc, lessonsPath);
698
+ result.docsInstalled.push("LESSONS.md");
699
+ }
700
+ }
701
+ }
675
702
  return result;
676
703
  }
677
704
 
@@ -3495,6 +3522,223 @@ var TerminalSpinner = class {
3495
3522
  }
3496
3523
  };
3497
3524
 
3525
+ // src/lib/loop-guard.ts
3526
+ import crypto from "crypto";
3527
+ function canonicalStringify(value) {
3528
+ if (value === null || value === void 0) {
3529
+ return "";
3530
+ }
3531
+ if (typeof value !== "object") {
3532
+ return JSON.stringify(value);
3533
+ }
3534
+ if (Array.isArray(value)) {
3535
+ return "[" + value.map(canonicalStringify).join(",") + "]";
3536
+ }
3537
+ const keys = Object.keys(value).sort();
3538
+ const entries = keys.map((k) => `${JSON.stringify(k)}:${canonicalStringify(value[k])}`);
3539
+ return "{" + entries.join(",") + "}";
3540
+ }
3541
+ function computeActionHash(toolName, args) {
3542
+ const canonicalArgs = canonicalStringify(args);
3543
+ return crypto.createHash("sha256").update(`${toolName}:${canonicalArgs}`).digest("hex");
3544
+ }
3545
+ var LoopGuard = class {
3546
+ repetitionThreshold;
3547
+ pingPongThreshold;
3548
+ consecutiveErrorThreshold;
3549
+ slidingWindowSize;
3550
+ onTrip;
3551
+ history = [];
3552
+ lastErrorHash = null;
3553
+ consecutiveErrorCount = 0;
3554
+ trippedResult = null;
3555
+ constructor(options = {}) {
3556
+ this.repetitionThreshold = options.repetitionThreshold ?? 5;
3557
+ this.pingPongThreshold = options.pingPongThreshold ?? 3;
3558
+ this.consecutiveErrorThreshold = options.consecutiveErrorThreshold ?? 2;
3559
+ this.slidingWindowSize = options.slidingWindowSize ?? 20;
3560
+ this.onTrip = options.onTrip;
3561
+ }
3562
+ setOnTrip(callback) {
3563
+ this.onTrip = callback;
3564
+ }
3565
+ isTripped() {
3566
+ return this.trippedResult !== null;
3567
+ }
3568
+ getTrip() {
3569
+ return this.trippedResult;
3570
+ }
3571
+ getHistory() {
3572
+ return [...this.history];
3573
+ }
3574
+ reset() {
3575
+ this.history = [];
3576
+ this.lastErrorHash = null;
3577
+ this.consecutiveErrorCount = 0;
3578
+ this.trippedResult = null;
3579
+ }
3580
+ /**
3581
+ * Records an action occurrence and evaluates repetition, ping-pong, and error guards.
3582
+ */
3583
+ recordAction(toolName, args, isError = false) {
3584
+ if (this.trippedResult) {
3585
+ return this.trippedResult;
3586
+ }
3587
+ const hash = computeActionHash(toolName, args);
3588
+ const record = {
3589
+ toolName,
3590
+ args,
3591
+ hash,
3592
+ isError,
3593
+ timestamp: Date.now()
3594
+ };
3595
+ if (isError) {
3596
+ if (this.lastErrorHash === hash) {
3597
+ this.consecutiveErrorCount++;
3598
+ } else {
3599
+ this.lastErrorHash = hash;
3600
+ this.consecutiveErrorCount = 1;
3601
+ }
3602
+ if (this.consecutiveErrorCount >= this.consecutiveErrorThreshold) {
3603
+ return this.triggerTrip({
3604
+ reason: "consecutive_errors",
3605
+ message: `Tool circuit breaker tripped: ${this.consecutiveErrorCount} consecutive identical tool errors for '${toolName}' with unchanged arguments.`,
3606
+ toolName,
3607
+ actionHash: hash,
3608
+ count: this.consecutiveErrorCount
3609
+ });
3610
+ }
3611
+ } else {
3612
+ this.lastErrorHash = null;
3613
+ this.consecutiveErrorCount = 0;
3614
+ }
3615
+ this.history.push(record);
3616
+ const windowStart = Math.max(0, this.history.length - this.slidingWindowSize);
3617
+ const currentWindow = this.history.slice(windowStart);
3618
+ let repetitionCount = 0;
3619
+ for (const item of currentWindow) {
3620
+ if (item.hash === hash) {
3621
+ repetitionCount++;
3622
+ }
3623
+ }
3624
+ if (repetitionCount >= this.repetitionThreshold) {
3625
+ return this.triggerTrip({
3626
+ reason: "repetition",
3627
+ message: `Action repetition loop detected: tool '${toolName}' called ${repetitionCount} times with identical parameters within sliding window of ${this.slidingWindowSize}.`,
3628
+ toolName,
3629
+ actionHash: hash,
3630
+ count: repetitionCount
3631
+ });
3632
+ }
3633
+ const requiredPingPongLength = this.pingPongThreshold * 2;
3634
+ if (this.history.length >= requiredPingPongLength) {
3635
+ const pingPongSlice = this.history.slice(-requiredPingPongLength);
3636
+ const hashA = pingPongSlice[0].hash;
3637
+ const hashB = pingPongSlice[1].hash;
3638
+ if (hashA !== hashB) {
3639
+ let isPingPong = true;
3640
+ for (let i = 0; i < requiredPingPongLength; i++) {
3641
+ const expectedHash = i % 2 === 0 ? hashA : hashB;
3642
+ if (pingPongSlice[i].hash !== expectedHash) {
3643
+ isPingPong = false;
3644
+ break;
3645
+ }
3646
+ }
3647
+ if (isPingPong) {
3648
+ return this.triggerTrip({
3649
+ reason: "ping_pong",
3650
+ message: `Alternating ping-pong action loop detected: ${this.pingPongThreshold} consecutive alternating cycles between tools (A-B-A-B-A-B).`,
3651
+ toolName,
3652
+ actionHash: hash,
3653
+ count: this.pingPongThreshold
3654
+ });
3655
+ }
3656
+ }
3657
+ }
3658
+ return null;
3659
+ }
3660
+ /**
3661
+ * Feeds a single line of output (stream-json or raw text) into the guard.
3662
+ */
3663
+ feedLine(line) {
3664
+ if (!line || !line.trim()) return null;
3665
+ try {
3666
+ const parsed = JSON.parse(line.trim());
3667
+ if (parsed && typeof parsed === "object" && parsed.event === "step_update") {
3668
+ const su = parsed.step_update;
3669
+ if (su && su.step_type === "tool") {
3670
+ const toolName = su.tool_name || su.tool_info?.name || "unknown";
3671
+ const params = su.tool_info?.parameters;
3672
+ if (su.state === "ACTIVE") {
3673
+ return this.recordAction(toolName, params, false);
3674
+ }
3675
+ if (su.state === "ERROR") {
3676
+ return this.recordAction(toolName, params, true);
3677
+ }
3678
+ }
3679
+ }
3680
+ } catch {
3681
+ }
3682
+ return null;
3683
+ }
3684
+ triggerTrip(trip) {
3685
+ this.trippedResult = trip;
3686
+ if (this.onTrip) {
3687
+ try {
3688
+ this.onTrip(trip);
3689
+ } catch {
3690
+ }
3691
+ }
3692
+ return trip;
3693
+ }
3694
+ };
3695
+ function formatLoopGuardFailureCard(options) {
3696
+ const serverUrl = options.serverUrl || process.env.GITHUB_SERVER_URL || "https://github.com";
3697
+ const repository = options.repository || process.env.GITHUB_REPOSITORY || "";
3698
+ const runId = options.runId || process.env.GITHUB_RUN_ID || "";
3699
+ const logUrl = runId && repository ? `${serverUrl}/${repository}/actions/runs/${runId}` : "";
3700
+ const lines = [
3701
+ `### \u274C Milestone: Run Interrupted / Failed`,
3702
+ `- **Routine**: \`${options.routine}\``,
3703
+ `- **Status**: Loop guard circuit breaker tripped (\`loop_circuit_breaker\`)`,
3704
+ `- **Root Cause Category**: \`loop_circuit_breaker\``,
3705
+ `- **Trigger**: \`${options.trip.reason}\``,
3706
+ `- **Reason**: ${options.trip.message}`,
3707
+ `- **Action**: Process terminated to prevent runaway token burn`
3708
+ ];
3709
+ if (logUrl) {
3710
+ lines.push(`- **Action Log**: [View Run Logs](${logUrl})`);
3711
+ }
3712
+ return lines.join("\n");
3713
+ }
3714
+ function formatLoopGuardReport(options) {
3715
+ return [
3716
+ `# Run Report`,
3717
+ ``,
3718
+ `## Result`,
3719
+ `FAILURE`,
3720
+ ``,
3721
+ `## Summary`,
3722
+ `| Metric | Value |`,
3723
+ `|---|---|`,
3724
+ `| Routine | \`${options.routine}\` |`,
3725
+ `| Timestamp | \`${options.timestamp}\` |`,
3726
+ `| Result | \`FAILURE\` |`,
3727
+ `| Category | \`loop_circuit_breaker\` |`,
3728
+ `| Trigger | \`${options.trip.reason}\` |`,
3729
+ `| Tool | \`${options.trip.toolName}\` |`,
3730
+ `| Action Hash | \`${options.trip.actionHash}\` |`,
3731
+ ``,
3732
+ `### Failure Details`,
3733
+ `The autonomous execution was halted by the deterministic loop-guard wrapper.`,
3734
+ `- **Category**: \`loop_circuit_breaker\``,
3735
+ `- **Trigger**: \`${options.trip.reason}\``,
3736
+ `- **Tool**: \`${options.trip.toolName}\``,
3737
+ `- **Action Hash**: \`${options.trip.actionHash}\``,
3738
+ `- **Message**: ${options.trip.message}`
3739
+ ].join("\n");
3740
+ }
3741
+
3498
3742
  // src/lib/runner.ts
3499
3743
  import pc10 from "picocolors";
3500
3744
  var execFileAsync4 = promisify4(execFile4);
@@ -3612,19 +3856,20 @@ function buildRoutinePrompt(targetDir, routine, options = {}) {
3612
3856
  const promptFile = `.github/prompts/${routine}.md`;
3613
3857
  const repoContext = `Working repository is located at ${targetDir}. All git, gh, and workspace commands must execute strictly within this repository.`;
3614
3858
  const logPrompt = options.routineIssueNumber ? ` Tracking run log issue: #${options.routineIssueNumber}.` : "";
3859
+ const headlessGuardrail = ` Execution Guardrail: You are executing in a headless autonomous session. You MUST NEVER call schedule or yield your turn with plain text to wait on background tasks or verification checks. If a verification command (tests, type-check, lint) runs in the background, actively inspect its completion with manage_task or execute commands with sufficient WaitMsBeforeAsync. Never stop calling tools or yield your turn until the routine's terminal Definition of Done is fully reached.`;
3615
3860
  if (routine === "autowork") {
3616
3861
  if (options.issue) {
3617
- return `You are the Autowork routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}Your target is issue #${options.issue}. You are in Targeted mode: work issue #${options.issue} directly, ahead of Phase 1 convergence and priority scan.${logPrompt}`;
3862
+ return `You are the Autowork routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}Your target is issue #${options.issue}. You are in Targeted mode: work issue #${options.issue} directly, ahead of Phase 1 convergence and priority scan.${logPrompt}${headlessGuardrail}`;
3618
3863
  }
3619
- return `You are the Autowork routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}You are in Scan mode: check open PRs for review comments to fix, close merged issues, then pick the highest-priority unclaimed issue.${logPrompt}`;
3864
+ return `You are the Autowork routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}You are in Scan mode: check open PRs for review comments to fix, close merged issues, then pick the highest-priority unclaimed issue.${logPrompt}${headlessGuardrail}`;
3620
3865
  }
3621
3866
  if (routine === "peer-review") {
3622
3867
  if (options.pr) {
3623
- return `You are the Peer Review routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}Your target is pull request #${options.pr}. You are in Targeted mode: review PR #${options.pr} directly.${logPrompt}`;
3868
+ return `You are the Peer Review routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}Your target is pull request #${options.pr}. You are in Targeted mode: review PR #${options.pr} directly.${logPrompt}${headlessGuardrail}`;
3624
3869
  }
3625
- return `You are the Peer Review routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}You are in Scan mode: check open PRs and select the highest-priority PR to review.${logPrompt}`;
3870
+ return `You are the Peer Review routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}You are in Scan mode: check open PRs and select the highest-priority PR to review.${logPrompt}${headlessGuardrail}`;
3626
3871
  }
3627
- return `You are the ${routine} routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}${logPrompt}`;
3872
+ return `You are the ${routine} routine for this repository. ${repoContext} Read and follow the instructions in ${promptFile} exactly. ${skillsPrompt}${logPrompt}${headlessGuardrail}`;
3628
3873
  }
3629
3874
  function tryCreateLocalRunIssue(cwd, routine, timestamp, targetLabel, hostname) {
3630
3875
  try {
@@ -3836,6 +4081,43 @@ function extractFreshRunReport(executionReportPath, targetReportPath, startTime)
3836
4081
  function resolveExitCode(code, signal) {
3837
4082
  return code ?? (signal ? 1 : 0);
3838
4083
  }
4084
+ function detectPrematureRoutineExit(output, routine) {
4085
+ if (!output) return null;
4086
+ const prematureYieldPatterns = [
4087
+ /verification is in progress/i,
4088
+ /waiting for .* to (?:finish|complete)/i,
4089
+ /waiting for (?:test|type-check|check|task)/i,
4090
+ /check if .* finished/i,
4091
+ /task-.* is running/i
4092
+ ];
4093
+ for (const pattern of prematureYieldPatterns) {
4094
+ if (pattern.test(output)) {
4095
+ const terminalSuccessPatterns = [
4096
+ /## (?:Run Summary|Execution Report)/i,
4097
+ /Milestone: Run Completed/i,
4098
+ /Squash-merged/i,
4099
+ /Merged PR/i,
4100
+ /converted .* to draft/i,
4101
+ /bounced .* to draft/i,
4102
+ /No PRs to review/i
4103
+ ];
4104
+ const hasTerminalSuccess = terminalSuccessPatterns.some((p) => p.test(output));
4105
+ if (!hasTerminalSuccess) {
4106
+ return "Premature session termination: Agent yielded turn on background task before reaching Definition of Done.";
4107
+ }
4108
+ }
4109
+ }
4110
+ if (routine === "peer-review") {
4111
+ const startedReview = /Starting review/i.test(output);
4112
+ if (startedReview) {
4113
+ const terminalActionTaken = /Squash-merged/i.test(output) || /Merged PR/i.test(output) || /--undo/i.test(output) || /converted .* to draft/i.test(output) || /bounced .* to draft/i.test(output) || /needs-human/i.test(output) || /escalat/i.test(output) || /Milestone: Run Completed/i.test(output) || /Review completed with decision/i.test(output) || /No PRs to review/i.test(output);
4114
+ if (!terminalActionTaken) {
4115
+ return "Premature peer-review termination: Review was started but agent exited without executing terminal action (merge, draft bounce, or escalation).";
4116
+ }
4117
+ }
4118
+ }
4119
+ return null;
4120
+ }
3839
4121
  function formatFallbackRunReport(options) {
3840
4122
  const result = options.exitCode === 0 ? "SUCCESS" : "FAILURE";
3841
4123
  let reportContent = `## Run Summary
@@ -4006,6 +4288,33 @@ Timeout: ${printTimeout}`,
4006
4288
  });
4007
4289
  }
4008
4290
  };
4291
+ let loopGuardTrip = null;
4292
+ let activeChild = null;
4293
+ const loopGuard = new LoopGuard({
4294
+ repetitionThreshold: 5,
4295
+ pingPongThreshold: 3,
4296
+ consecutiveErrorThreshold: 2,
4297
+ slidingWindowSize: 20,
4298
+ onTrip: (trip) => {
4299
+ loopGuardTrip = trip;
4300
+ spinner?.stop();
4301
+ if (activeChild && !activeChild.killed) {
4302
+ try {
4303
+ activeChild.kill("SIGTERM");
4304
+ } catch {
4305
+ }
4306
+ const killTimer = setTimeout(() => {
4307
+ try {
4308
+ if (activeChild && !activeChild.killed) {
4309
+ activeChild.kill("SIGKILL");
4310
+ }
4311
+ } catch {
4312
+ }
4313
+ }, 3e3);
4314
+ killTimer.unref();
4315
+ }
4316
+ }
4317
+ });
4009
4318
  const stdoutParser = new LineBufferedStreamParser((line) => {
4010
4319
  const event = parseStreamJsonEvent(line);
4011
4320
  if (event) {
@@ -4015,6 +4324,7 @@ Timeout: ${printTimeout}`,
4015
4324
  const toolName = su.tool_name || su.tool_info?.name || "unknown";
4016
4325
  const toolParams = su.tool_info?.parameters;
4017
4326
  if (su.state === "ACTIVE") {
4327
+ loopGuard.recordAction(toolName, toolParams, false);
4018
4328
  const actionDesc = formatActionDescription(toolName, toolParams);
4019
4329
  lastActionDesc = actionDesc;
4020
4330
  if (spinner) {
@@ -4027,6 +4337,9 @@ Timeout: ${printTimeout}`,
4027
4337
  const formatted = formatVerboseEvent(event);
4028
4338
  if (formatted) console.log(formatted);
4029
4339
  }
4340
+ } else if (su.state === "ERROR") {
4341
+ loopGuard.recordAction(toolName, toolParams, true);
4342
+ lastActionDesc = null;
4030
4343
  } else if (su.state === "DONE") {
4031
4344
  lastActionDesc = null;
4032
4345
  if (su.tool_info?.output) {
@@ -4130,6 +4443,7 @@ Timeout: ${printTimeout}`,
4130
4443
  env: childEnv,
4131
4444
  stdio: ["inherit", "pipe", "pipe"]
4132
4445
  });
4446
+ activeChild = child;
4133
4447
  child.stdout?.on("data", (data) => {
4134
4448
  processChunk(data.toString(), false);
4135
4449
  });
@@ -4159,7 +4473,33 @@ Timeout: ${printTimeout}`,
4159
4473
  const durationMs = Date.now() - startTime;
4160
4474
  const durationSec = Math.round(durationMs / 1e3);
4161
4475
  let reportContent = extractFreshRunReport(executionReportPath, targetReportPath, startTime) || "";
4162
- if (!reportContent) {
4476
+ let prematureError = null;
4477
+ if (exitCode === 0 && !reportContent) {
4478
+ prematureError = detectPrematureRoutineExit(output, routine);
4479
+ if (prematureError) {
4480
+ exitCode = 1;
4481
+ }
4482
+ }
4483
+ if (loopGuardTrip) {
4484
+ exitCode = 1;
4485
+ reportContent = formatLoopGuardReport({
4486
+ routine,
4487
+ timestamp,
4488
+ trip: loopGuardTrip
4489
+ });
4490
+ try {
4491
+ fs12.writeFileSync(executionReportPath, reportContent, "utf8");
4492
+ fs12.writeFileSync(targetReportPath, reportContent, "utf8");
4493
+ } catch {
4494
+ }
4495
+ if (routineIssueNumber) {
4496
+ const failureCard = formatLoopGuardFailureCard({
4497
+ routine,
4498
+ trip: loopGuardTrip
4499
+ });
4500
+ tryPostLocalRunMilestone(targetDir, routineIssueNumber, failureCard);
4501
+ }
4502
+ } else if (!reportContent) {
4163
4503
  reportContent = formatFallbackRunReport({
4164
4504
  routine,
4165
4505
  timestamp,
@@ -4168,7 +4508,7 @@ Timeout: ${printTimeout}`,
4168
4508
  targetLabel,
4169
4509
  durationSec,
4170
4510
  output,
4171
- stderr: accumulatedStderr
4511
+ stderr: [accumulatedStderr, prematureError].filter(Boolean).join("\n")
4172
4512
  });
4173
4513
  }
4174
4514
  try {
@@ -5874,3 +6214,10 @@ program.command("telemetry [repos...]").description("Aggregate and report fleet-
5874
6214
  await runTelemetry({ ...options, repos, action });
5875
6215
  });
5876
6216
  program.parse(process.argv);
6217
+ export {
6218
+ LoopGuard,
6219
+ canonicalStringify,
6220
+ computeActionHash,
6221
+ formatLoopGuardFailureCard,
6222
+ formatLoopGuardReport
6223
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/lib/installer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAA2B,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAyC,MAAM,eAAe,CAAC;AAKrF,wBAAgB,eAAe,IAAI,MAAM,CAOxC;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,aAAa,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAqBpB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CA2GpH"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/lib/installer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAA2B,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAyC,MAAM,eAAe,CAAC;AAKrF,wBAAgB,eAAe,IAAI,MAAM,CAOxC;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,aAAa,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAqBpB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CAyIpH"}
@@ -0,0 +1,80 @@
1
+ export type LoopGuardTripReason = 'repetition' | 'ping_pong' | 'consecutive_errors';
2
+ export interface LoopGuardTrip {
3
+ reason: LoopGuardTripReason;
4
+ message: string;
5
+ toolName: string;
6
+ actionHash: string;
7
+ count: number;
8
+ }
9
+ export interface ActionRecord {
10
+ toolName: string;
11
+ args: any;
12
+ hash: string;
13
+ isError: boolean;
14
+ timestamp: number;
15
+ }
16
+ export interface LoopGuardOptions {
17
+ repetitionThreshold?: number;
18
+ pingPongThreshold?: number;
19
+ consecutiveErrorThreshold?: number;
20
+ slidingWindowSize?: number;
21
+ onTrip?: (trip: LoopGuardTrip) => void;
22
+ }
23
+ /**
24
+ * Deterministically stringifies an object by recursively sorting its keys.
25
+ */
26
+ export declare function canonicalStringify(value: any): string;
27
+ /**
28
+ * Computes a deterministic SHA-256 action hash: SHA-256(tool_name + canonicalString(args))
29
+ */
30
+ export declare function computeActionHash(toolName: string, args: any): string;
31
+ /**
32
+ * Deterministic Loop Guard & Circuit Breaker monitoring tool calls and execution events.
33
+ */
34
+ export declare class LoopGuard {
35
+ private repetitionThreshold;
36
+ private pingPongThreshold;
37
+ private consecutiveErrorThreshold;
38
+ private slidingWindowSize;
39
+ private onTrip?;
40
+ private history;
41
+ private lastErrorHash;
42
+ private consecutiveErrorCount;
43
+ private trippedResult;
44
+ constructor(options?: LoopGuardOptions);
45
+ setOnTrip(callback: (trip: LoopGuardTrip) => void): void;
46
+ isTripped(): boolean;
47
+ getTrip(): LoopGuardTrip | null;
48
+ getHistory(): ActionRecord[];
49
+ reset(): void;
50
+ /**
51
+ * Records an action occurrence and evaluates repetition, ping-pong, and error guards.
52
+ */
53
+ recordAction(toolName: string, args: any, isError?: boolean): LoopGuardTrip | null;
54
+ /**
55
+ * Feeds a single line of output (stream-json or raw text) into the guard.
56
+ */
57
+ feedLine(line: string): LoopGuardTrip | null;
58
+ private triggerTrip;
59
+ }
60
+ export interface LoopGuardFailureCardOptions {
61
+ routine: string;
62
+ trip: LoopGuardTrip;
63
+ runId?: string;
64
+ serverUrl?: string;
65
+ repository?: string;
66
+ }
67
+ /**
68
+ * Formats a structured 5-point milestone interruption card on circuit breaker trip.
69
+ */
70
+ export declare function formatLoopGuardFailureCard(options: LoopGuardFailureCardOptions): string;
71
+ export interface LoopGuardReportOptions {
72
+ routine: string;
73
+ timestamp: string;
74
+ trip: LoopGuardTrip;
75
+ }
76
+ /**
77
+ * Formats a markdown run report for .jonah-fleet/run-report.md when loop guard terminates a run.
78
+ */
79
+ export declare function formatLoopGuardReport(options: LoopGuardReportOptions): string;
80
+ //# sourceMappingURL=loop-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-guard.d.ts","sourceRoot":"","sources":["../../src/lib/loop-guard.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,WAAW,GAAG,oBAAoB,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAarD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAGrE;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,MAAM,CAAC,CAAgC;IAE/C,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,aAAa,CAA8B;IAEnD,YAAY,OAAO,GAAE,gBAAqB,EAMzC;IAEM,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAE9D;IAEM,SAAS,IAAI,OAAO,CAE1B;IAEM,OAAO,IAAI,aAAa,GAAG,IAAI,CAErC;IAEM,UAAU,IAAI,YAAY,EAAE,CAElC;IAEM,KAAK,IAAI,IAAI,CAKnB;IAED;;OAEG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,OAAe,GAAG,aAAa,GAAG,IAAI,CA6F/F;IAED;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAwBlD;IAED,OAAO,CAAC,WAAW;CAWpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CAqBvF;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA0B7E"}
@@ -80,6 +80,11 @@ export interface FleetManifest {
80
80
  labels?: {
81
81
  protected?: string[];
82
82
  };
83
+ lessons?: boolean | LessonsConfig;
84
+ }
85
+ export interface LessonsConfig {
86
+ enabled?: boolean;
87
+ maxEntries?: number;
83
88
  }
84
89
  export declare const DEFAULT_ROUTINE_MODELS: Record<string, string>;
85
90
  export declare const DEFAULT_ROUTINE_TIMEOUTS: Record<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/lib/presets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/lib/presets.ts"],"names":[],"mappings":"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"}
@@ -183,6 +183,12 @@ export interface FallbackReportOptions {
183
183
  * resolve to a non-zero exit code instead of defaulting to 0.
184
184
  */
185
185
  export declare function resolveExitCode(code: number | null, signal: NodeJS.Signals | string | null): number;
186
+ /**
187
+ * Detects whether an autonomous routine exited prematurely (e.g. agent yielded its
188
+ * turn to "wait" on background tasks or timers, which causes headless agy -p to terminate
189
+ * with exit code 0 before reaching the routine's Definition of Done).
190
+ */
191
+ export declare function detectPrematureRoutineExit(output: string, routine: string): string | null;
186
192
  /**
187
193
  * Formats a fallback summary markdown report when no fresh run-report.md was generated.
188
194
  * Includes sanitized trailing error output from stdout and/or stderr if exitCode is non-zero.
@@ -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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"}