jonah-fleet 1.34.0 → 1.35.1

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,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.35.1](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.35.0...v1.35.1) (2026-10-10)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **workflows:** omit issue_comment triggers and document quota guard ([#672](https://github.com/Jonah-Projects/jonah-fleet/issues/672)) ([2c27bd1](https://github.com/Jonah-Projects/jonah-fleet/commit/2c27bd19e44508e39a6e0bb68951c5fd32beec96))
14
+
15
+ ## [Unreleased] - 2026-10-09
16
+
17
+ ### Changed
18
+
19
+ * **workflows:** omit unfiltered `issue_comment` triggers from `trigger-review-routine.yml` to conserve Actions runner quota and prevent comment-loop thrash
20
+
21
+ ## [1.35.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.34.0...v1.35.0) (2026-10-09)
22
+
23
+
24
+ ### Features
25
+
26
+ * **daemon,telemetry:** halt daemon when plan quota drops below 20% unless full burn enabled ([#663](https://github.com/Jonah-Projects/jonah-fleet/issues/663)) ([33e0dc2](https://github.com/Jonah-Projects/jonah-fleet/commit/33e0dc202585944ce209bf54475b8465e19507d1))
27
+
8
28
  ## [1.34.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.33.0...v1.34.0) (2026-10-03)
9
29
 
10
30
 
@@ -33,6 +53,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
33
53
 
34
54
  * **peer-review,runner:** mention target PR with native GitHub links in run logs ([#599](https://github.com/Jonah-Projects/jonah-fleet/issues/599)) ([e22a1fb](https://github.com/Jonah-Projects/jonah-fleet/commit/e22a1fb42141b3748633289d9ac9582a70ffe631))
35
55
 
56
+ ## [Unreleased] - 2026-10-08
57
+
58
+ ### Features
59
+
60
+ * **daemon,telemetry:** halt daemon execution when plan quota drops below 20% in either 5h or 7-day windows, with `--full-burn` CLI flag, environment variable, manifest configuration, and interactive hotkey override
36
61
  ## [Unreleased] - 2026-10-03
37
62
 
38
63
  ### Features
@@ -6,6 +6,7 @@ export interface DaemonCommandOptions {
6
6
  model?: string;
7
7
  foreground?: boolean;
8
8
  verbose?: boolean;
9
+ fullBurn?: boolean;
9
10
  }
10
11
  export declare function runDaemonCommand(action?: string, options?: DaemonCommandOptions): Promise<void>;
11
12
  //# sourceMappingURL=daemon.d.ts.map
@@ -1 +1 @@
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"}
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;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkJzG"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6IA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8IA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1793,6 +1793,94 @@ async function fetchActualPlanQuota(options = {}) {
1793
1793
  };
1794
1794
  }
1795
1795
  }
1796
+ function checkPlanQuotaDepletion(quota, options = {}) {
1797
+ const threshold = options.thresholdPct ?? 20;
1798
+ if (!quota || !quota.available) {
1799
+ return { depleted: false, thresholdPct: threshold };
1800
+ }
1801
+ const model = options.model?.toLowerCase() || "";
1802
+ const isClaude = model.includes("claude") || model.includes("gpt") || model.includes("openai") || model.includes("anthropic");
1803
+ let groupName = isClaude ? "Claude and GPT models" : "Gemini Models";
1804
+ let weeklyPct = isClaude ? quota.claudeWeeklyRemainingPct : quota.geminiWeeklyRemainingPct;
1805
+ let weeklyReset = isClaude ? quota.claudeWeeklyResetTime : quota.geminiWeeklyResetTime;
1806
+ let window5hPct = isClaude ? quota.claude5hRemainingPct : quota.gemini5hRemainingPct;
1807
+ let window5hReset = isClaude ? quota.claude5hResetTime : quota.gemini5hResetTime;
1808
+ if (quota.groups) {
1809
+ const targetGroup = quota.groups[groupName];
1810
+ if (targetGroup) {
1811
+ if (weeklyPct === void 0) {
1812
+ weeklyPct = targetGroup.weeklyRemainingPct;
1813
+ weeklyReset = targetGroup.weeklyResetTime;
1814
+ }
1815
+ if (window5hPct === void 0) {
1816
+ window5hPct = targetGroup.window5hRemainingPct;
1817
+ window5hReset = targetGroup.window5hResetTime;
1818
+ }
1819
+ if (weeklyPct === void 0 || window5hPct === void 0) {
1820
+ for (const b of targetGroup.buckets || []) {
1821
+ if ((b.window === "5h" || b.id.includes("5h")) && window5hPct === void 0) {
1822
+ window5hPct = b.remainingPercentage;
1823
+ window5hReset = b.resetTime;
1824
+ } else if ((b.window === "weekly" || b.id.includes("weekly")) && weeklyPct === void 0) {
1825
+ weeklyPct = b.remainingPercentage;
1826
+ weeklyReset = b.resetTime;
1827
+ }
1828
+ }
1829
+ }
1830
+ } else if (weeklyPct === void 0 && window5hPct === void 0) {
1831
+ const groupKeys = Object.keys(quota.groups);
1832
+ if (groupKeys.length > 0) {
1833
+ const fallbackGroup = quota.groups[groupKeys[0]];
1834
+ if (fallbackGroup) {
1835
+ groupName = fallbackGroup.name;
1836
+ weeklyPct = fallbackGroup.weeklyRemainingPct;
1837
+ weeklyReset = fallbackGroup.weeklyResetTime;
1838
+ window5hPct = fallbackGroup.window5hRemainingPct;
1839
+ window5hReset = fallbackGroup.window5hResetTime;
1840
+ }
1841
+ }
1842
+ }
1843
+ }
1844
+ const is5hDepleted = window5hPct !== void 0 && window5hPct < threshold;
1845
+ const isWeeklyDepleted = weeklyPct !== void 0 && weeklyPct < threshold;
1846
+ if (is5hDepleted || isWeeklyDepleted) {
1847
+ if (is5hDepleted && isWeeklyDepleted) {
1848
+ const lowerWindow = window5hPct <= weeklyPct ? "5h" : "7days";
1849
+ const remainingPct = Math.min(window5hPct, weeklyPct);
1850
+ const resetTime = lowerWindow === "5h" ? window5hReset : weeklyReset;
1851
+ return {
1852
+ depleted: true,
1853
+ thresholdPct: threshold,
1854
+ window: lowerWindow,
1855
+ remainingPct,
1856
+ resetTime,
1857
+ groupName,
1858
+ message: `${groupName} quota is below ${threshold}% in both 5h (${window5hPct.toFixed(1)}%) and 7days (${weeklyPct.toFixed(1)}%) windows`
1859
+ };
1860
+ }
1861
+ if (is5hDepleted) {
1862
+ return {
1863
+ depleted: true,
1864
+ thresholdPct: threshold,
1865
+ window: "5h",
1866
+ remainingPct: window5hPct,
1867
+ resetTime: window5hReset,
1868
+ groupName,
1869
+ message: `${groupName} 5h quota is at ${window5hPct.toFixed(1)}% remaining (<${threshold}% floor)`
1870
+ };
1871
+ }
1872
+ return {
1873
+ depleted: true,
1874
+ thresholdPct: threshold,
1875
+ window: "7days",
1876
+ remainingPct: weeklyPct,
1877
+ resetTime: weeklyReset,
1878
+ groupName,
1879
+ message: `${groupName} 7days weekly quota is at ${weeklyPct.toFixed(1)}% remaining (<${threshold}% floor)`
1880
+ };
1881
+ }
1882
+ return { depleted: false, thresholdPct: threshold };
1883
+ }
1796
1884
  function formatPlanQuotaSummary(quota, options = {}) {
1797
1885
  if (!quota || !quota.available) {
1798
1886
  return "Plan Quota: Unavailable";
@@ -6398,6 +6486,10 @@ var KeyboardController = class {
6398
6486
  this.options.onToggleVerbose?.();
6399
6487
  return;
6400
6488
  }
6489
+ if (str === "b" || str === "B" || keyName === "b") {
6490
+ this.options.onToggleFullBurn?.();
6491
+ return;
6492
+ }
6401
6493
  if (str === "l" || str === "L" || keyName === "l") {
6402
6494
  this.options.onTailLog?.();
6403
6495
  return;
@@ -6589,6 +6681,7 @@ function printKeybindingCheatSheet() {
6589
6681
  console.log(` ${pc13.bold(pc13.green("p"))} Pause / resume automated polling intervals`);
6590
6682
  console.log(` ${pc13.bold(pc13.green("s"))} Print current daemon status summary card`);
6591
6683
  console.log(` ${pc13.bold(pc13.green("v"))} Toggle verbose streaming logging live`);
6684
+ console.log(` ${pc13.bold(pc13.green("b"))} Toggle full burn mode (override <20% plan quota floor)`);
6592
6685
  console.log(` ${pc13.bold(pc13.green("l"))} Tail recent lines from .jonah-fleet/daemon.log`);
6593
6686
  console.log(` ${pc13.bold(pc13.green("w"))} Inspect active worktrees and clean stale ones`);
6594
6687
  console.log(` ${pc13.bold(pc13.green("q"))} Graceful shutdown (waits for active routine to finish)`);
@@ -6622,6 +6715,11 @@ function printDaemonStatusSummary(options) {
6622
6715
  ` Verbose Mode: ${verbose ? pc13.green("ENABLED (streaming tokens)") : pc13.gray("DISABLED (compact spinner)")}`
6623
6716
  );
6624
6717
  }
6718
+ if (state.fullBurn !== void 0) {
6719
+ console.log(
6720
+ ` Full Burn: ${state.fullBurn ? pc13.red(pc13.bold("ENABLED (quota floor bypassed)")) : pc13.green("DISABLED (stops at <20% quota)")}`
6721
+ );
6722
+ }
6625
6723
  if (pendingRoutine) {
6626
6724
  console.log(` Queued Routine: ${pc13.cyan(pc13.bold(pendingRoutine))}`);
6627
6725
  }
@@ -6680,10 +6778,11 @@ function formatDaemonStatusLine(options = {}) {
6680
6778
  const columns = options.columns !== void 0 ? options.columns : process.stderr.columns || 80;
6681
6779
  const maxCols = Math.max(20, (columns || 80) - 2);
6682
6780
  const includeTip = columns >= 55;
6781
+ const burnBadge = options.fullBurn ? pc13.red(" [FULL BURN]") : "";
6683
6782
  let core;
6684
6783
  if (options.isPaused) {
6685
6784
  const queueStr = options.pendingRoutine ? pc13.cyan(` [Queued: ${options.pendingRoutine}]`) : "";
6686
- core = `${pc13.dim("[" + timeString + "]")} \u23F8 ${pc13.yellow("PAUSED")}${queueStr}`;
6785
+ core = `${pc13.dim("[" + timeString + "]")} \u23F8 ${pc13.yellow("PAUSED")}${burnBadge}${queueStr}`;
6687
6786
  } else {
6688
6787
  const nextCheck = options.nextCheckTime !== void 0 ? options.nextCheckTime : nowMs;
6689
6788
  const diffMs = Math.max(0, nextCheck - nowMs);
@@ -6693,7 +6792,7 @@ function formatDaemonStatusLine(options = {}) {
6693
6792
  const timeStr = `${mins}m ${secs < 10 ? "0" : ""}${secs}s`;
6694
6793
  const prStr = options.lastOpenPRCount !== void 0 ? ` (${options.lastOpenPRCount} ready PRs)` : "";
6695
6794
  const queueStr = options.pendingRoutine ? pc13.cyan(` [Queued: ${options.pendingRoutine}]`) : "";
6696
- core = `${pc13.dim("[" + timeString + "]")} \u26A1 ${pc13.dim("Watchdog Idle \xB7 Next check in " + timeStr + prStr)}${queueStr}`;
6795
+ core = `${pc13.dim("[" + timeString + "]")} \u26A1 ${pc13.dim("Watchdog Idle \xB7 Next check in " + timeStr + prStr)}${burnBadge}${queueStr}`;
6697
6796
  }
6698
6797
  if (!includeTip) {
6699
6798
  return truncateAnsi(core, maxCols);
@@ -6751,6 +6850,46 @@ function isDaemonRunning(repoRoot) {
6751
6850
  return false;
6752
6851
  }
6753
6852
  }
6853
+ function isFullBurnEnabled(options = {}, state, repoRoot) {
6854
+ if (options.fullBurn === true || state?.fullBurn === true) return true;
6855
+ if (process.env.JONAH_FLEET_FULL_BURN === "true" || process.env.JONAH_FLEET_FULL_BURN === "1" || process.env.FULL_BURN === "true" || process.env.FULL_BURN === "1") {
6856
+ return true;
6857
+ }
6858
+ if (repoRoot) {
6859
+ try {
6860
+ const manifest = loadManifest(repoRoot);
6861
+ if (manifest?.budgets?.fullBurn === true || manifest?.daemon?.fullBurn === true) {
6862
+ return true;
6863
+ }
6864
+ } catch {
6865
+ }
6866
+ }
6867
+ return false;
6868
+ }
6869
+ async function checkDaemonQuotaGuard(repoRoot, options = {}, state, cachedQuota) {
6870
+ if (isFullBurnEnabled(options, state, repoRoot)) {
6871
+ return { shouldStop: false };
6872
+ }
6873
+ let quota = cachedQuota;
6874
+ if (!quota) {
6875
+ if (options.getPlanQuota) {
6876
+ quota = await options.getPlanQuota(repoRoot);
6877
+ } else {
6878
+ quota = await fetchActualPlanQuota({ repoRoot });
6879
+ }
6880
+ }
6881
+ if (!quota || !quota.available) {
6882
+ return { shouldStop: false };
6883
+ }
6884
+ const depletion = checkPlanQuotaDepletion(quota, {
6885
+ thresholdPct: options.quotaThresholdPct ?? 20,
6886
+ model: options.model
6887
+ });
6888
+ if (depletion.depleted) {
6889
+ return { shouldStop: true, depletion };
6890
+ }
6891
+ return { shouldStop: false };
6892
+ }
6754
6893
  function isBotLogin(login) {
6755
6894
  if (!login) return false;
6756
6895
  const l = login.toLowerCase().trim();
@@ -7072,9 +7211,16 @@ async function startBackgroundDaemon(repoRoot, options = {}) {
7072
7211
  const existing = readDaemonState(repoRoot);
7073
7212
  throw new Error(`Daemon is already running with PID ${existing?.pid}`);
7074
7213
  }
7214
+ const guard = await checkDaemonQuotaGuard(repoRoot, options);
7215
+ if (guard.shouldStop) {
7216
+ throw new Error(
7217
+ `Plan quota is below 20% (${guard.depletion?.message}). Daemon stopped to protect compute budget. Run with --full-burn to bypass this guard.`
7218
+ );
7219
+ }
7075
7220
  const reviewInterval = options.reviewInterval || 3;
7076
7221
  const autoworkInterval = options.autoworkInterval || options.interval || 30;
7077
7222
  const routines = options.routines || ["peer-review", "autowork"];
7223
+ const fullBurn = isFullBurnEnabled(options, void 0, repoRoot);
7078
7224
  const logFilePath = path15.join(repoRoot, ".jonah-fleet", "daemon.log");
7079
7225
  fs15.mkdirSync(path15.dirname(logFilePath), { recursive: true });
7080
7226
  const logFd = fs15.openSync(logFilePath, "a");
@@ -7095,11 +7241,14 @@ async function startBackgroundDaemon(repoRoot, options = {}) {
7095
7241
  if (options.verbose) {
7096
7242
  args.push("--verbose");
7097
7243
  }
7244
+ if (fullBurn) {
7245
+ args.push("--full-burn");
7246
+ }
7098
7247
  const child = spawn2(process.execPath, [cliPath, ...args], {
7099
7248
  cwd: repoRoot,
7100
7249
  detached: true,
7101
7250
  stdio: ["ignore", logFd, logFd],
7102
- env: { ...process.env, JONAH_FLEET_DAEMON: "true" }
7251
+ env: { ...process.env, JONAH_FLEET_DAEMON: "true", ...fullBurn ? { JONAH_FLEET_FULL_BURN: "true" } : {} }
7103
7252
  });
7104
7253
  child.unref();
7105
7254
  const state = {
@@ -7108,7 +7257,8 @@ async function startBackgroundDaemon(repoRoot, options = {}) {
7108
7257
  reviewIntervalMinutes: reviewInterval,
7109
7258
  autoworkIntervalMinutes: autoworkInterval,
7110
7259
  routines,
7111
- status: "idle"
7260
+ status: "idle",
7261
+ fullBurn
7112
7262
  };
7113
7263
  writeDaemonState(repoRoot, state);
7114
7264
  return state;
@@ -7246,9 +7396,22 @@ async function drainReviewQueue(drainOptions) {
7246
7396
  runRoutine = runLocalRoutine,
7247
7397
  onAttempted,
7248
7398
  failureCooldowns,
7249
- onQuotaExhausted
7399
+ onQuotaExhausted,
7400
+ onQuotaDepleted
7250
7401
  } = drainOptions;
7251
7402
  if (isStopping()) return;
7403
+ const guard = await checkDaemonQuotaGuard(repoRoot, options, state);
7404
+ if (guard.shouldStop) {
7405
+ if (clearTicker) clearTicker();
7406
+ console.warn(
7407
+ pc14.red(
7408
+ `
7409
+ \u{1F6D1} Peer Review Watchdog stopped: Plan quota is below 20% (${guard.depletion?.message}).`
7410
+ )
7411
+ );
7412
+ onQuotaDepleted?.(guard.depletion);
7413
+ return;
7414
+ }
7252
7415
  if (state) {
7253
7416
  state.lastReviewCheckAt = (/* @__PURE__ */ new Date()).toISOString();
7254
7417
  writeDaemonState(repoRoot, state);
@@ -7292,6 +7455,18 @@ async function drainReviewQueue(drainOptions) {
7292
7455
  const currentPR = candidatePRs[0];
7293
7456
  const targetLabel = formatTargetLabel(`PR #${currentPR.number}`, currentPR.title);
7294
7457
  let targetPRStr = targetLabel;
7458
+ const loopGuard = await checkDaemonQuotaGuard(repoRoot, options, state);
7459
+ if (loopGuard.shouldStop) {
7460
+ if (clearTicker) clearTicker();
7461
+ console.warn(
7462
+ pc14.red(
7463
+ `
7464
+ \u{1F6D1} Peer Review Watchdog stopped: Plan quota is below 20% (${loopGuard.depletion?.message}).`
7465
+ )
7466
+ );
7467
+ onQuotaDepleted?.(loopGuard.depletion);
7468
+ break;
7469
+ }
7295
7470
  try {
7296
7471
  if (clearTicker) clearTicker();
7297
7472
  if (state) {
@@ -7325,6 +7500,20 @@ async function drainReviewQueue(drainOptions) {
7325
7500
  }
7326
7501
  }
7327
7502
  });
7503
+ if (result.planQuota) {
7504
+ const postGuard = await checkDaemonQuotaGuard(repoRoot, options, state, result.planQuota);
7505
+ if (postGuard.shouldStop) {
7506
+ if (clearTicker) clearTicker();
7507
+ console.warn(
7508
+ pc14.red(
7509
+ `
7510
+ \u{1F6D1} Peer Review Watchdog stopped: Plan quota dropped below 20% after routine (${postGuard.depletion?.message}).`
7511
+ )
7512
+ );
7513
+ onQuotaDepleted?.(postGuard.depletion);
7514
+ break;
7515
+ }
7516
+ }
7328
7517
  const activeTargetStr = targetPRStr;
7329
7518
  const match = activeTargetStr?.match(/PR\s*#?([0-9]+)/i);
7330
7519
  const prNum = match ? parseInt(match[1], 10) : currentPR.number;
@@ -7437,6 +7626,18 @@ async function performAutoworkScan(scanOptions) {
7437
7626
  onDiagnosticCard
7438
7627
  } = scanOptions;
7439
7628
  if (isStopping()) return { executed: false, reason: "stopping" };
7629
+ const initialGuard = await checkDaemonQuotaGuard(repoRoot, options, state);
7630
+ if (initialGuard.shouldStop) {
7631
+ if (clearTicker) clearTicker();
7632
+ console.warn(
7633
+ pc14.red(
7634
+ `
7635
+ \u{1F6D1} Autowork Backlog Scan stopped: Plan quota depleted (<20% remaining). ${initialGuard.depletion?.message}`
7636
+ )
7637
+ );
7638
+ scanOptions.onQuotaDepleted?.(initialGuard.depletion);
7639
+ return { executed: false, reason: "quota_depleted" };
7640
+ }
7440
7641
  const routines = options.routines || ["peer-review", "autowork"];
7441
7642
  if (routines.includes("peer-review")) {
7442
7643
  const pendingPRs = (await getPRs(repoRoot)).length;
@@ -7457,7 +7658,8 @@ async function performAutoworkScan(scanOptions) {
7457
7658
  runRoutine,
7458
7659
  onAttempted: scanOptions.onAttempted,
7459
7660
  failureCooldowns: scanOptions.failureCooldowns,
7460
- onQuotaExhausted: scanOptions.onQuotaExhausted
7661
+ onQuotaExhausted: scanOptions.onQuotaExhausted,
7662
+ onQuotaDepleted: scanOptions.onQuotaDepleted
7461
7663
  });
7462
7664
  const remainingPRs = (await getPRs(repoRoot)).length;
7463
7665
  if (remainingPRs > 0) {
@@ -7507,6 +7709,20 @@ async function performAutoworkScan(scanOptions) {
7507
7709
  }
7508
7710
  });
7509
7711
  recordDaemonSessionUsage(repoRoot, state, result.usage);
7712
+ if (result.planQuota) {
7713
+ const postRoutineGuard = await checkDaemonQuotaGuard(repoRoot, options, state, result.planQuota);
7714
+ if (postRoutineGuard.shouldStop) {
7715
+ if (clearTicker) clearTicker();
7716
+ console.warn(
7717
+ pc14.red(
7718
+ `
7719
+ \u{1F6D1} Autowork Scan stopped: Plan quota dropped below 20% after routine (${postRoutineGuard.depletion?.message}).`
7720
+ )
7721
+ );
7722
+ scanOptions.onQuotaDepleted?.(postRoutineGuard.depletion);
7723
+ return { executed: true, reason: "quota_depleted" };
7724
+ }
7725
+ }
7510
7726
  const isQuota = result.quotaPaused || !result.success && detectQuotaExceeded(result.output || "", result.stderr || "").isQuota;
7511
7727
  if (isQuota) {
7512
7728
  const resetInfo = result.quotaResetInfo || detectQuotaExceeded(result.output || "", result.stderr || "").resetInfo;
@@ -7552,7 +7768,8 @@ function initializeDaemonState(repoRoot, options = {}) {
7552
7768
  routines,
7553
7769
  status: "idle",
7554
7770
  evaluatedPRs: existingState?.evaluatedPRs,
7555
- failureCooldowns: existingState?.failureCooldowns
7771
+ failureCooldowns: existingState?.failureCooldowns,
7772
+ fullBurn: isFullBurnEnabled(options, existingState, repoRoot)
7556
7773
  };
7557
7774
  writeDaemonState(repoRoot, state);
7558
7775
  const failureCooldowns = /* @__PURE__ */ new Map();
@@ -7568,6 +7785,21 @@ async function runDaemonLoop(repoRoot, options = {}) {
7568
7785
  const autoworkInterval = options.autoworkInterval || options.interval || 30;
7569
7786
  const routines = options.routines || ["peer-review", "autowork"];
7570
7787
  const { state, failureCooldowns } = initializeDaemonState(repoRoot, options);
7788
+ const initialGuard = await checkDaemonQuotaGuard(repoRoot, options, state);
7789
+ if (initialGuard.shouldStop) {
7790
+ console.warn(
7791
+ pc14.red(
7792
+ `
7793
+ \u{1F6D1} Daemon stopped: Plan quota is below 20% (${initialGuard.depletion?.message}).
7794
+ Remaining quota must stay >= 20% for 5h and 7days windows.
7795
+ To bypass this safety limit, start with --full-burn or set FULL_BURN=true.
7796
+ `
7797
+ )
7798
+ );
7799
+ clearDaemonState(repoRoot);
7800
+ return;
7801
+ }
7802
+ const isFullBurn = isFullBurnEnabled(options, state, repoRoot);
7571
7803
  console.log(
7572
7804
  renderFleetBanner({
7573
7805
  command: "DAEMON",
@@ -7577,8 +7809,9 @@ async function runDaemonLoop(repoRoot, options = {}) {
7577
7809
  { label: "Review Watchdog", value: `Every ${reviewInterval}m (zero-token preflight)` },
7578
7810
  { label: "Autowork Scan", value: `Every ${autoworkInterval}m` },
7579
7811
  { label: "Routines", value: routines.join(", ") },
7812
+ { label: "Full Burn", value: isFullBurn ? "ENABLED" : "DISABLED (stops at <20% quota)" },
7580
7813
  { label: "Target", value: repoRoot },
7581
- { label: "Hotkeys", value: "'r' review \xB7 'a' autowork \xB7 'p' pause \xB7 's' status \xB7 '?' help" }
7814
+ { label: "Hotkeys", value: "'r' review \xB7 'a' autowork \xB7 'p' pause \xB7 's' status \xB7 'b' burn \xB7 '?' help" }
7582
7815
  ]
7583
7816
  })
7584
7817
  );
@@ -7667,7 +7900,10 @@ Stopping local agent daemon...`));
7667
7900
  getPRs: getPRsFn,
7668
7901
  runRoutine: runRoutineFn,
7669
7902
  failureCooldowns,
7670
- onQuotaExhausted: handleQuotaPause
7903
+ onQuotaExhausted: handleQuotaPause,
7904
+ onQuotaDepleted: async () => {
7905
+ await handleStop();
7906
+ }
7671
7907
  });
7672
7908
  try {
7673
7909
  const prs = await getPRsFn(repoRoot);
@@ -7725,7 +7961,10 @@ Stopping local agent daemon...`));
7725
7961
  getBacklog: options.getBacklog || getBacklogTriageReport,
7726
7962
  runRoutine: runRoutineFn,
7727
7963
  failureCooldowns,
7728
- onQuotaExhausted: handleQuotaPause
7964
+ onQuotaExhausted: handleQuotaPause,
7965
+ onQuotaDepleted: async () => {
7966
+ await handleStop();
7967
+ }
7729
7968
  });
7730
7969
  try {
7731
7970
  const prs = await getPRsFn(repoRoot);
@@ -7786,6 +8025,19 @@ Stopping local agent daemon...`));
7786
8025
  };
7787
8026
  const runTargetedReview = async (prNumber) => {
7788
8027
  if (isStopping || isWorking) return;
8028
+ const guard = await checkDaemonQuotaGuard(repoRoot, options, state);
8029
+ if (guard.shouldStop) {
8030
+ clearTicker();
8031
+ console.warn(
8032
+ pc14.red(
8033
+ `
8034
+ \u{1F6D1} Cannot start targeted review: Plan quota is below 20% (${guard.depletion?.message}).
8035
+ Press 'b' to toggle full-burn mode if you wish to proceed.`
8036
+ )
8037
+ );
8038
+ updateTicker();
8039
+ return;
8040
+ }
7789
8041
  try {
7790
8042
  isWorking = true;
7791
8043
  clearTicker();
@@ -7810,6 +8062,20 @@ Stopping local agent daemon...`));
7810
8062
  writeDaemonState(repoRoot, state);
7811
8063
  }
7812
8064
  });
8065
+ if (result.planQuota) {
8066
+ const postGuard = await checkDaemonQuotaGuard(repoRoot, options, state, result.planQuota);
8067
+ if (postGuard.shouldStop) {
8068
+ clearTicker();
8069
+ console.warn(
8070
+ pc14.red(
8071
+ `
8072
+ \u{1F6D1} Daemon stopped after targeted review: Plan quota dropped below 20% (${postGuard.depletion?.message}).`
8073
+ )
8074
+ );
8075
+ await handleStop();
8076
+ return;
8077
+ }
8078
+ }
7813
8079
  if (result.success) {
7814
8080
  const outcome = result.outcome || detectPeerReviewOutcome({
7815
8081
  output: result.output,
@@ -7853,6 +8119,19 @@ Stopping local agent daemon...`));
7853
8119
  };
7854
8120
  const runTargetedAutowork = async (issueNumber) => {
7855
8121
  if (isStopping || isWorking) return;
8122
+ const guard = await checkDaemonQuotaGuard(repoRoot, options, state);
8123
+ if (guard.shouldStop) {
8124
+ clearTicker();
8125
+ console.warn(
8126
+ pc14.red(
8127
+ `
8128
+ \u{1F6D1} Cannot start targeted autowork: Plan quota is below 20% (${guard.depletion?.message}).
8129
+ Press 'b' to toggle full-burn mode if you wish to proceed.`
8130
+ )
8131
+ );
8132
+ updateTicker();
8133
+ return;
8134
+ }
7856
8135
  try {
7857
8136
  isWorking = true;
7858
8137
  clearTicker();
@@ -7877,6 +8156,20 @@ Stopping local agent daemon...`));
7877
8156
  writeDaemonState(repoRoot, state);
7878
8157
  }
7879
8158
  });
8159
+ if (result.planQuota) {
8160
+ const postGuard = await checkDaemonQuotaGuard(repoRoot, options, state, result.planQuota);
8161
+ if (postGuard.shouldStop) {
8162
+ clearTicker();
8163
+ console.warn(
8164
+ pc14.red(
8165
+ `
8166
+ \u{1F6D1} Daemon stopped after targeted autowork: Plan quota dropped below 20% (${postGuard.depletion?.message}).`
8167
+ )
8168
+ );
8169
+ await handleStop();
8170
+ return;
8171
+ }
8172
+ }
7880
8173
  if (result.success) {
7881
8174
  console.log(pc14.green(`\u2713 Targeted autowork on Issue #${issueNumber} completed successfully.
7882
8175
  `));
@@ -8071,6 +8364,27 @@ ${pc14.cyan("Enter Issue # to work (Esc/Enter to cancel):")} `, {
8071
8364
  }
8072
8365
  updateTicker();
8073
8366
  },
8367
+ onToggleFullBurn: () => {
8368
+ if (isStopping || isGracefulStopping) return;
8369
+ options.fullBurn = !isFullBurnEnabled(options, state, repoRoot);
8370
+ if (state) {
8371
+ state.fullBurn = options.fullBurn;
8372
+ writeDaemonState(repoRoot, state);
8373
+ }
8374
+ clearTicker();
8375
+ if (options.fullBurn) {
8376
+ console.log(
8377
+ pc14.red(`
8378
+ [${(/* @__PURE__ */ new Date()).toLocaleTimeString()}] \u{1F525} Full burn mode ENABLED (ignoring <20% quota floor).`)
8379
+ );
8380
+ } else {
8381
+ console.log(
8382
+ pc14.green(`
8383
+ [${(/* @__PURE__ */ new Date()).toLocaleTimeString()}] \u{1F6E1}\uFE0F Full burn mode DISABLED (daemon will stop if quota < 20%).`)
8384
+ );
8385
+ }
8386
+ updateTicker();
8387
+ },
8074
8388
  onTailLog: () => {
8075
8389
  if (isStopping || isGracefulStopping) return;
8076
8390
  clearTicker();
@@ -8165,6 +8479,18 @@ ${pc14.cyan("Enter Issue # to work (Esc/Enter to cancel):")} `, {
8165
8479
  isTicking = true;
8166
8480
  try {
8167
8481
  if (!isPaused) {
8482
+ const tickGuard = await checkDaemonQuotaGuard(repoRoot, options, state);
8483
+ if (tickGuard.shouldStop) {
8484
+ clearTicker();
8485
+ console.warn(
8486
+ pc14.red(
8487
+ `
8488
+ \u{1F6D1} Daemon stopped by quota guard: Plan quota is below 20% (${tickGuard.depletion?.message}). Stopping daemon...`
8489
+ )
8490
+ );
8491
+ await handleStop();
8492
+ return;
8493
+ }
8168
8494
  const now = Date.now();
8169
8495
  if (routines.includes("peer-review") && now >= nextReviewCheckTime) {
8170
8496
  await performReviewDrain();
@@ -8200,7 +8526,8 @@ async function runDaemonCommand(action, options = {}) {
8200
8526
  routines: options.routines ? options.routines.split(",").map((r) => r.trim()) : void 0,
8201
8527
  model: options.model,
8202
8528
  foreground: options.foreground,
8203
- verbose: options.verbose
8529
+ verbose: options.verbose,
8530
+ fullBurn: options.fullBurn
8204
8531
  };
8205
8532
  if (act === "start") {
8206
8533
  if (options.foreground) {
@@ -8224,6 +8551,7 @@ async function runDaemonCommand(action, options = {}) {
8224
8551
  { label: "Review Watchdog", value: `Every ${state2.reviewIntervalMinutes}m (zero-token preflight)` },
8225
8552
  { label: "Autowork Scan", value: `Every ${state2.autoworkIntervalMinutes}m` },
8226
8553
  { label: "Routines", value: state2.routines.join(", ") },
8554
+ { label: "Full Burn", value: state2.fullBurn ? "ENABLED" : "DISABLED (stops at <20% quota)" },
8227
8555
  { label: "Log", value: ".jonah-fleet/daemon.log" }
8228
8556
  ]
8229
8557
  })
@@ -8278,6 +8606,7 @@ Stopping background agent daemon (PID ${state2?.pid})...`));
8278
8606
  details: [
8279
8607
  { label: "Status", value: running && state ? state.status.toUpperCase() : "STOPPED" },
8280
8608
  ...running && state ? [{ label: "PID", value: String(state.pid) }] : [],
8609
+ ...running && state && state.fullBurn !== void 0 ? [{ label: "Full Burn", value: state.fullBurn ? "ENABLED" : "DISABLED" }] : [],
8281
8610
  { label: "Target", value: cwd }
8282
8611
  ]
8283
8612
  })
@@ -8292,6 +8621,11 @@ Stopping background agent daemon (PID ${state2?.pid})...`));
8292
8621
  console.log(` Peer Review Cadence: Every ${state.reviewIntervalMinutes} minutes (0-token fast preflight)`);
8293
8622
  console.log(` Autowork Cadence: Every ${state.autoworkIntervalMinutes} minutes`);
8294
8623
  console.log(` Routines: ${state.routines.join(", ")}`);
8624
+ if (state.fullBurn !== void 0) {
8625
+ console.log(
8626
+ ` Full Burn: ${state.fullBurn ? pc15.red(pc15.bold("ENABLED (quota floor bypassed)")) : pc15.green("DISABLED (stops at <20% quota)")}`
8627
+ );
8628
+ }
8295
8629
  let currentStateText = pc15.green("IDLE");
8296
8630
  if (state.status === "working") {
8297
8631
  const workingDesc = state.activeRoutine + (state.activeTarget ? ` (${pc15.bold(state.activeTarget)})` : "");
@@ -8462,7 +8796,7 @@ program.name("jonah-fleet").description("Manage autonomous agent fleet, prompt r
8462
8796
  program.command("run <routine>").description("Run a specific prompt routine locally in an isolated git worktree").option("-i, --issue <number>", "Targeted issue number for autowork").option("-p, --pr <number>", "Targeted pull request number for peer-review").option("-m, --model <model>", "LLM model override (defaults to gemini-3.8-flash-high)").option("--timeout <duration>", "CLI execution print timeout (default: 30m)").option("--no-worktree", "Execute directly in current directory without creating a git worktree").option("--keep-worktree", "Preserve the git worktree after routine execution completes").option("-d, --dry-run", "Preview prompt and execution parameters without launching agent").option("-v, --verbose", "Stream raw agent tokens and logs directly to stdout").action(async (routine, options) => {
8463
8797
  await runRoutineCommand(routine, options);
8464
8798
  });
8465
- program.command("daemon [action]").description("Manage background local worker daemon polling for unclaimed issues and pull requests").option("-i, --interval <minutes>", "Legacy global polling interval in minutes (default: 30)").option("--review-interval <minutes>", "Peer Review watchdog cadence in minutes (default: 3)").option("--autowork-interval <minutes>", "Autowork backlog cadence in minutes (default: 30)").option("-r, --routines <list>", "Comma-separated routines to run (default: peer-review,autowork)").option("-m, --model <model>", "LLM model override").option("--foreground", "Run daemon in foreground with live console logs").option("-v, --verbose", "Stream raw agent tokens and logs directly to stdout").action(async (action, options) => {
8799
+ program.command("daemon [action]").description("Manage background local worker daemon polling for unclaimed issues and pull requests").option("-i, --interval <minutes>", "Legacy global polling interval in minutes (default: 30)").option("--review-interval <minutes>", "Peer Review watchdog cadence in minutes (default: 3)").option("--autowork-interval <minutes>", "Autowork backlog cadence in minutes (default: 30)").option("-r, --routines <list>", "Comma-separated routines to run (default: peer-review,autowork)").option("-m, --model <model>", "LLM model override").option("--foreground", "Run daemon in foreground with live console logs").option("-v, --verbose", "Stream raw agent tokens and logs directly to stdout").option("--full-burn", "Run in full burn mode without stopping on <20% plan quota limit").action(async (action, options) => {
8466
8800
  await runDaemonCommand(action, options);
8467
8801
  });
8468
8802
  program.command("labels [action]").description("Audit, prune, or provision repository labels for autonomous fleet taxonomy (audit | prune | provision)").option("-d, --dry-run", "Preview prunable labels without deleting them", false).option("-y, --yes", "Confirm automatic deletion of prunable labels", false).option("-r, --repo <repo>", "Target GitHub repository (defaults to current)").option("-j, --json", "Output results as JSON", false).action(async (action, options) => {
@@ -13,6 +13,7 @@ export interface KeyboardControllerOptions {
13
13
  onPauseToggle?: () => void;
14
14
  onStatus?: () => void;
15
15
  onToggleVerbose?: () => void;
16
+ onToggleFullBurn?: () => void;
16
17
  onTailLog?: () => Promise<void> | void;
17
18
  onCleanWorktrees?: () => Promise<void> | void;
18
19
  onGracefulStop?: () => void;
@@ -95,6 +96,7 @@ export interface FormatDaemonStatusLineOptions {
95
96
  columns?: number;
96
97
  tipIndex?: number;
97
98
  tips?: readonly string[];
99
+ fullBurn?: boolean;
98
100
  }
99
101
  /**
100
102
  * Formats the single-line daemon idle/paused status ticker with rotating tips and viewport width clamping.
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-keys.d.ts","sourceRoot":"","sources":["../../src/lib/daemon-keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon-keys.d.ts","sourceRoot":"","sources":["../../src/lib/daemon-keys.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type BacklogTriageReport, type BacklogIssueInfo } from './terminal-card.js';
2
- import type { RunUsageMetrics } from './telemetry.js';
2
+ import { type RunUsageMetrics, type ActualPlanQuota, type QuotaDepletionResult } from './telemetry.js';
3
3
  export type BacklogIssue = BacklogIssueInfo;
4
4
  export type { BacklogTriageReport };
5
5
  export type EvaluatedPROutcome = 'approved' | 'approved_pending_ci' | 'bounced' | 'bounced_to_draft' | 'merged' | 'rejected' | 'failed' | string;
@@ -30,6 +30,7 @@ export interface DaemonState {
30
30
  evaluatedPRs?: Record<number, EvaluatedPRRecord>;
31
31
  failureCooldowns?: Record<number, PRFailureRecord>;
32
32
  sessionTokens?: number;
33
+ fullBurn?: boolean;
33
34
  }
34
35
  export interface DaemonOptions {
35
36
  interval?: number;
@@ -41,6 +42,9 @@ export interface DaemonOptions {
41
42
  model?: string;
42
43
  foreground?: boolean;
43
44
  verbose?: boolean;
45
+ fullBurn?: boolean;
46
+ quotaThresholdPct?: number;
47
+ getPlanQuota?: (repoRoot: string) => Promise<ActualPlanQuota> | ActualPlanQuota;
44
48
  stdin?: any;
45
49
  getPRs?: (repoRoot: string) => Promise<ReviewablePR[]>;
46
50
  getBacklog?: (repoRoot: string) => Promise<BacklogTriageReport>;
@@ -53,6 +57,7 @@ export interface DaemonOptions {
53
57
  output?: string;
54
58
  stderr?: string;
55
59
  usage?: RunUsageMetrics;
60
+ planQuota?: ActualPlanQuota;
56
61
  }>;
57
62
  }
58
63
  export declare function getDaemonStatePath(repoRoot: string): string;
@@ -64,6 +69,17 @@ export declare function writeDaemonState(repoRoot: string, state: DaemonState):
64
69
  export declare function recordDaemonSessionUsage(repoRoot: string, state: DaemonState | undefined, usage?: RunUsageMetrics): void;
65
70
  export declare function clearDaemonState(repoRoot: string): void;
66
71
  export declare function isDaemonRunning(repoRoot: string): boolean;
72
+ /**
73
+ * Checks whether full burn mode is enabled across options, daemon state, environment variables, or manifest.
74
+ */
75
+ export declare function isFullBurnEnabled(options?: DaemonOptions, state?: DaemonState | null, repoRoot?: string): boolean;
76
+ /**
77
+ * Checks real-time plan quota against the safety floor (<20% in 5h or 7days window) unless full-burn is enabled.
78
+ */
79
+ export declare function checkDaemonQuotaGuard(repoRoot: string, options?: DaemonOptions, state?: DaemonState | null, cachedQuota?: ActualPlanQuota): Promise<{
80
+ shouldStop: boolean;
81
+ depletion?: QuotaDepletionResult;
82
+ }>;
67
83
  export interface ReviewablePR {
68
84
  number: number;
69
85
  headRefName: string;
@@ -219,10 +235,12 @@ export interface DrainReviewQueueOptions {
219
235
  output?: string;
220
236
  stderr?: string;
221
237
  usage?: RunUsageMetrics;
238
+ planQuota?: ActualPlanQuota;
222
239
  }>;
223
240
  onAttempted?: (prNumber: number) => void;
224
241
  failureCooldowns?: Map<number, PRFailureRecord>;
225
242
  onQuotaExhausted?: (resetInfo?: string) => void;
243
+ onQuotaDepleted?: (depletion: QuotaDepletionResult) => void;
226
244
  }
227
245
  /**
228
246
  * Sequentially drains all open reviewable PRs by executing peer-review in isolated worktrees.
@@ -246,11 +264,13 @@ export interface PerformAutoworkScanOptions {
246
264
  output?: string;
247
265
  stderr?: string;
248
266
  usage?: RunUsageMetrics;
267
+ planQuota?: ActualPlanQuota;
249
268
  }>;
250
269
  onDiagnosticCard?: (card: string) => void;
251
270
  onAttempted?: (prNumber: number) => void;
252
271
  failureCooldowns?: Map<number, PRFailureRecord>;
253
272
  onQuotaExhausted?: (resetInfo?: string) => void;
273
+ onQuotaDepleted?: (depletion: QuotaDepletionResult) => void;
254
274
  }
255
275
  /**
256
276
  * Performs an autowork backlog scan with zero-token preflight check.
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"AA0BA,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,qBAAqB,GACrB,SAAS,GACT,kBAAkB,GAClB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,eAAe,CAAC;KACzB,CAAC,CAAC;CACJ;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQpE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAI3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,GAAG,SAAS,EAC9B,KAAK,CAAC,EAAE,eAAe,GACtB,IAAI,CAKN;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CASvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYzD;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAezD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAavD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAkBrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAetD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CActD;AAcD,MAAM,WAAW,yBAAyB;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,iBAAiB,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3F,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,eAAe,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3F,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CA6ET;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,YAAY,EAAE,EACnB,OAAO,GAAE,yBAA8B,GACtC,YAAY,EAAE,CAUhB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,YAAY,EAAE,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzE;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,GAAE,SAAS,EAAO,GACxB,mBAAmB,CAwKrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAWhF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,EAAE,CAAC,CAWtB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAM3F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsD/G;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAanE;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACzG,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAWtE;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,iBAAiB,EAAE,MAAM,GAAG,4BAA4B,GACvD,OAAO,CAAC,MAAM,CAAC,CA0FjB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,eAAe,CAAC;KACzB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AA2BD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmN3F;AAGD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,eAAe,CAAC;KACzB,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,0BAA0B,GACtC,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmIjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,aAAkB,GAC1B;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAAE,CA0BxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmpBhG"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"AA0BA,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAG1B,MAAM,gBAAgB,CAAC;AAKxB,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,qBAAqB,GACrB,SAAS,GACT,kBAAkB,GAClB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;IAChF,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,eAAe,CAAC;QACxB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B,CAAC,CAAC;CACJ;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQpE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAI3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,GAAG,SAAS,EAC9B,KAAK,CAAC,EAAE,eAAe,GACtB,IAAI,CAKN;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CASvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,aAAkB,EAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAsBT;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,aAAkB,EAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,EAC1B,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,oBAAoB,CAAA;CAAE,CAAC,CA4BpE;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAezD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAavD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAkBrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAetD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CActD;AAcD,MAAM,WAAW,yBAAyB;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,iBAAiB,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3F,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,eAAe,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3F,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CA6ET;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,YAAY,EAAE,EACnB,OAAO,GAAE,yBAA8B,GACtC,YAAY,EAAE,CAUhB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,YAAY,EAAE,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzE;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,GAAE,SAAS,EAAO,GACxB,mBAAmB,CAwKrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAWhF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,EAAE,CAAC,CAWtB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAM3F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkE/G;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAanE;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACzG,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAWtE;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,iBAAiB,EAAE,MAAM,GAAG,4BAA4B,GACvD,OAAO,CAAC,MAAM,CAAC,CA0FjB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,eAAe,CAAC;QACxB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC7D;AA2BD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2P3F;AAGD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,eAAe,CAAC;QACxB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,0BAA0B,GACtC,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8JjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,aAAkB,GAC1B;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAAE,CA2BxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgwBhG"}
@@ -124,6 +124,23 @@ export declare function fetchActualPlanQuota(options?: {
124
124
  cacheTtlMs?: number;
125
125
  executor?: () => Promise<string> | string;
126
126
  }): Promise<ActualPlanQuota>;
127
+ export interface QuotaDepletionOptions {
128
+ thresholdPct?: number;
129
+ model?: string;
130
+ }
131
+ export interface QuotaDepletionResult {
132
+ depleted: boolean;
133
+ thresholdPct: number;
134
+ window?: '5h' | '7days';
135
+ remainingPct?: number;
136
+ resetTime?: string;
137
+ groupName?: string;
138
+ message?: string;
139
+ }
140
+ /**
141
+ * Checks whether real-time plan quota is depleted below the safety threshold (<20% for 5h or 7days window).
142
+ */
143
+ export declare function checkPlanQuotaDepletion(quota: ActualPlanQuota | null | undefined, options?: QuotaDepletionOptions): QuotaDepletionResult;
127
144
  /**
128
145
  * Formats a clean human-readable summary of plan quota for display.
129
146
  */
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry.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.34.0",
3
+ "version": "1.35.1",
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",
@@ -18,7 +18,7 @@ Dispatch is both **scheduled** and **event-driven**. All routines run as ephemer
18
18
 
19
19
  - **Scheduled cron sweeps**: Autowork runs periodically (`autowork-cron.yml`), complemented by prompt optimization (`prompt-optimizer-cron.yml`), issues housekeeping (`issues-housekeeping-cron.yml`), dependency security checks (`dependency-check-cron.yml`), analytics review (`analytics-review-cron.yml`), product planning (`product-planning-cron.yml`), and design review (`design-review-cron.yml`).
20
20
  - **Event-driven & manual triggers**: GitHub Actions workflows fire routines on events and interactive commands so work starts within seconds instead of waiting for scheduled ticks:
21
- - `trigger-review-routine.yml` fires Peer Review automatically when a PR is marked ready for review, updated, or review is requested (`ready_for_review`, `opened`, `reopened`, `synchronize`, `review_requested`). It can also be manually (re)triggered via `workflow_dispatch` (with optional `pr_number` for Targeted mode or blank for Scan mode) or by commenting `/review`, `/peer-review`, `/retrigger`, or `/re-review` on any open pull request.
21
+ - `trigger-review-routine.yml` fires Peer Review automatically when a PR is marked ready for review, updated, or review is requested (`ready_for_review`, `opened`, `reopened`, `synchronize`, `review_requested`). It can also be manually (re)triggered via `workflow_dispatch` (with optional `pr_number` for Targeted mode or blank for Scan mode). Note: Comment-based triggers are omitted to conserve Actions runner quota and prevent comment-loop thrash.
22
22
  - `trigger-autowork-on-merge.yml` fires Autowork in **Targeted mode** when a PR merges to `main` and unblocks the next unit of chained work.
23
23
  - `trigger-autowork-on-bug.yml` fires Autowork when an issue becomes a high-priority bug.
24
24
  - `trigger-autowork-on-assign.yml` fires Autowork in **Targeted mode** when an issue is assigned to a designated bot account or persona (`vars.AGENT_BOT_LOGIN`).
@@ -229,8 +229,8 @@ How the fleet guarantees continuous review throughput, recovers from transient A
229
229
 
230
230
  1. **Failure Trapping & Transparency**: When a peer-review workflow session encounters an execution failure (e.g. LLM API rate limit / quota exhaustion or runner timeout), `trigger-review-routine.yml` traps the failure and posts an informational status notice on the PR. Failures are made immediately visible on the PR timeline rather than silently failing in the background.
231
231
  2. **Periodic Scan Sweep (Watchdog)**: `trigger-review-routine.yml` runs a scheduled 2-hour cron sweep (`cron: '45 */2 * * *'`) in Scan mode. Any open PR in `ready_for_review` state that was orphaned due to a transient API rate limit or missed event trigger is automatically picked up, evaluated, and resolved.
232
- 3. **Interactive Re-triggering**: Any team member or author can immediately re-dispatch review by commenting `/review`, `/peer-review`, `/retrigger`, or `/re-review` on any open pull request, or manually triggering `trigger-review-routine.yml` via `workflow_dispatch`.
233
- 4. **Autowork Phase 1 Watchdog**: During Phase 1 convergence, Autowork actively identifies open ready PRs that have received no review feedback for $>2$ hours, re-triggering review via draft toggle or `/review` comment before picking up new work. Review re-triggering is strictly conditioned on all CI checks having passed (`conclusion: SUCCESS`, `mergeStateStatus: CLEAN`) and is strictly prohibited if checks are in-progress or awaiting approval (`ACTION_REQUIRED`).
232
+ 3. **Interactive Re-triggering**: Any team member or author can immediately re-dispatch review by manually triggering `trigger-review-routine.yml` via `workflow_dispatch` (with optional `pr_number` for Targeted mode or blank for Scan mode) or by re-requesting review on GitHub. Unfiltered comment triggers are omitted to guard runner quota.
233
+ 4. **Autowork Phase 1 Watchdog**: During Phase 1 convergence, Autowork actively identifies open ready PRs that have received no review feedback for $>2$ hours, re-triggering review via draft toggle (`gh pr ready <PR> --undo && gh pr ready <PR>`) before picking up new work. Review re-triggering is strictly conditioned on all CI checks having passed (`conclusion: SUCCESS`, `mergeStateStatus: CLEAN`) and is strictly prohibited if checks are in-progress or awaiting approval (`ACTION_REQUIRED`).
234
234
 
235
235
  ---
236
236
 
@@ -141,9 +141,9 @@ _Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/ru
141
141
  - *Option B*: [Pros / Cons]
142
142
  - **Recommended Path**: [Agent recommendation]
143
143
  ```
144
- 3c. **Orphaned Ready PR Recovery**: If an open PR authored by this routine is `ready_for_review`, has passing CI, no unaddressed review comments, and has received no review activity for over 2 hours (e.g. because peer review crashed or encountered quota limits), kickstart the review routine by posting `/review` comment or toggling draft and ready (`gh pr ready <PR> --undo && gh pr ready <PR>`).
144
+ 3c. **Orphaned Ready PR Recovery**: If an open PR authored by this routine is `ready_for_review`, has passing CI, no unaddressed review comments, and has received no review activity for over 2 hours (e.g. because peer review crashed or encountered quota limits), kickstart the review routine by toggling draft and ready (`gh pr ready <PR> --undo && gh pr ready <PR>`).
145
145
  - **Passing CI Verification Gate**: Verify via `gh pr view <PR> --json statusCheckRollup,mergeStateStatus` that all required and existing checks have completed with `conclusion: "SUCCESS"` and `mergeStateStatus` is `CLEAN` (neither `UNSTABLE`, `BLOCKED`, nor `DIRTY`).
146
- - **Unapproved/Pending Workflow Invariant**: NEVER post `/review` or toggle draft state if checks are in-progress, failing, or awaiting approval (`conclusion: "ACTION_REQUIRED"`). Doing so creates an infinite comment storm while workflows remain paused awaiting human permissions.
146
+ - **Unapproved/Pending Workflow Invariant**: NEVER toggle draft state if checks are in-progress, failing, or awaiting approval (`conclusion: "ACTION_REQUIRED"`). Doing so creates redundant review triggers while workflows remain paused awaiting human permissions.
147
147
  4. **Check open issues with merged PRs / work done — close them**:
148
148
  - For open issues, check if recent git history or merged PRs reference the issue (e.g. `git log -n 50 --grep="#<ISSUE_NUMBER>"` or `gh pr list --state merged --search "<ISSUE_NUMBER>" --limit 5`).
149
149
  - If a merged PR or commit on `main` resolved the issue, close it immediately:
@@ -12,8 +12,6 @@ on:
12
12
  description: 'Optional PR number to review in Targeted mode (leave blank for Scan mode)'
13
13
  required: false
14
14
  type: string
15
- issue_comment:
16
- types: [created]
17
15
 
18
16
  jobs:
19
17
  trigger-routine:
@@ -23,21 +21,9 @@ jobs:
23
21
  github.event.pull_request.head.repo.full_name == github.repository &&
24
22
  !startsWith(github.event.pull_request.head.ref, 'release-please--')) ||
25
23
  (github.event_name == 'schedule') ||
26
- (github.event_name == 'workflow_dispatch') ||
27
- (github.event_name == 'issue_comment' &&
28
- github.event.issue.pull_request != null &&
29
- !endsWith(github.event.comment.user.login, '[bot]') &&
30
- github.event.comment.user.type != 'Bot' &&
31
- (startsWith(github.event.comment.body, '/review') ||
32
- startsWith(github.event.comment.body, '/peer-review') ||
33
- startsWith(github.event.comment.body, '/retrigger') ||
34
- startsWith(github.event.comment.body, '/re-review') ||
35
- contains(github.event.comment.body, '/review') ||
36
- contains(github.event.comment.body, '/peer-review') ||
37
- contains(github.event.comment.body, '/retrigger') ||
38
- contains(github.event.comment.body, '/re-review')))
24
+ (github.event_name == 'workflow_dispatch')
39
25
  concurrency:
40
- group: review-routine-pr-${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number || 'scan' }}
26
+ group: review-routine-pr-${{ github.event.pull_request.number || inputs.pr_number || 'scan' }}
41
27
  cancel-in-progress: true
42
28
  runs-on: ubuntu-latest
43
29
  timeout-minutes: 65
@@ -52,7 +38,7 @@ jobs:
52
38
  id: guard
53
39
  env:
54
40
  GH_TOKEN: ${{ github.token }}
55
- PR_NUM: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
41
+ PR_NUM: ${{ github.event.pull_request.number || inputs.pr_number }}
56
42
  EVENT_NAME: ${{ github.event_name }}
57
43
  REPOSITORY: ${{ github.repository }}
58
44
  run: |
@@ -232,7 +218,7 @@ jobs:
232
218
  id: run-issue
233
219
  env:
234
220
  GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
235
- PR_ARG: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
221
+ PR_ARG: ${{ github.event.pull_request.number || inputs.pr_number }}
236
222
  EVENT_NAME: ${{ github.event_name }}
237
223
  RUN_ID: ${{ github.run_id }}
238
224
  SERVER_URL: ${{ github.server_url }}
@@ -275,8 +261,8 @@ jobs:
275
261
  ANTIGRAVITY_API_KEY: ${{ secrets.GEMINI_API_KEY }}
276
262
  GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
277
263
  ROUTINE: peer-review
278
- PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
279
- PR_URL: ${{ github.event.pull_request.html_url || github.event.issue.html_url }}
264
+ PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}
265
+ PR_URL: ${{ github.event.pull_request.html_url }}
280
266
  ROUTINE_ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
281
267
  MODEL: ${{ steps.routine-config.outputs.model || 'gemini-3.8-flash-high' }}
282
268
  PRINT_TIMEOUT: ${{ steps.routine-config.outputs.print_timeout || '55m' }}
@@ -322,7 +308,7 @@ jobs:
322
308
  if: failure() && steps.guard.outputs.skip != 'true'
323
309
  env:
324
310
  GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
325
- PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
311
+ PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}
326
312
  ROUTINE_ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
327
313
  GITHUB_SERVER_URL: ${{ github.server_url }}
328
314
  GITHUB_REPOSITORY: ${{ github.repository }}
@@ -333,7 +319,7 @@ jobs:
333
319
  if [ -n "$ROUTINE_ISSUE_NUMBER" ]; then
334
320
  LOG_REF=" · [Run Log #${ROUTINE_ISSUE_NUMBER}](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/issues/${ROUTINE_ISSUE_NUMBER})"
335
321
  fi
336
- gh pr comment "$PR_NUMBER" --body "⚠️ **Peer Review Routine Notice**: The automated review session encountered an execution error (e.g., API rate/quota limit or runner interruption)${LOG_REF}. The review will be retried automatically on the next scheduled scan sweep or can be re-triggered immediately by commenting \`/review\` on this PR.
322
+ gh pr comment "$PR_NUMBER" --body "⚠️ **Peer Review Routine Notice**: The automated review session encountered an execution error (e.g., API rate/quota limit or runner interruption)${LOG_REF}. The review will be retried automatically on the next scheduled scan sweep or can be re-triggered manually via workflow dispatch on this PR.
337
323
 
338
324
  _Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_" || true
339
325
  fi
@@ -376,7 +362,7 @@ jobs:
376
362
  RUN_ID: ${{ github.run_id }}
377
363
  SERVER_URL: ${{ github.server_url }}
378
364
  REPOSITORY: ${{ github.repository }}
379
- PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
365
+ PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}
380
366
  QUOTA_PAUSED: ${{ env.QUOTA_PAUSED }}
381
367
  QUOTA_RESET_INFO: ${{ env.QUOTA_RESET_INFO }}
382
368
  run: |