@integrity-labs/agt-cli 0.28.1004 → 0.28.1006

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.
Files changed (26) hide show
  1. package/dist/bin/agt.js +5 -5
  2. package/dist/{chunk-HHBAQ6ZV.js → chunk-O6R6HS2Z.js} +2 -2
  3. package/dist/{chunk-532V7ZSC.js → chunk-XWMUQR65.js} +63 -7
  4. package/dist/chunk-XWMUQR65.js.map +1 -0
  5. package/dist/{chunk-N4PG4TAD.js → chunk-Z5UDL4AB.js} +35 -5
  6. package/dist/chunk-Z5UDL4AB.js.map +1 -0
  7. package/dist/{claude-pair-runtime-EUYI3B4I.js → claude-pair-runtime-AW4N6NEE.js} +157 -18
  8. package/dist/claude-pair-runtime-AW4N6NEE.js.map +1 -0
  9. package/dist/lib/manager-worker.js +609 -304
  10. package/dist/lib/manager-worker.js.map +1 -1
  11. package/dist/mcp/direct-chat-channel.js +57 -2
  12. package/dist/mcp/index.js +51 -0
  13. package/dist/mcp/origami.js +51 -0
  14. package/dist/mcp/slack-channel.js +57 -2
  15. package/dist/mcp/telegram-channel.js +57 -2
  16. package/dist/{persistent-session-JUGGNJSB.js → persistent-session-K4DLZ7KF.js} +3 -3
  17. package/dist/{responsiveness-probe-QLOVCTVA.js → responsiveness-probe-DXPEIUH6.js} +3 -3
  18. package/dist/{session-auth-dead-7F2QBEAZ.js → session-auth-dead-4SE5Q7MU.js} +2 -2
  19. package/package.json +1 -1
  20. package/dist/chunk-532V7ZSC.js.map +0 -1
  21. package/dist/chunk-N4PG4TAD.js.map +0 -1
  22. package/dist/claude-pair-runtime-EUYI3B4I.js.map +0 -1
  23. /package/dist/{chunk-HHBAQ6ZV.js.map → chunk-O6R6HS2Z.js.map} +0 -0
  24. /package/dist/{persistent-session-JUGGNJSB.js.map → persistent-session-K4DLZ7KF.js.map} +0 -0
  25. /package/dist/{responsiveness-probe-QLOVCTVA.js.map → responsiveness-probe-DXPEIUH6.js.map} +0 -0
  26. /package/dist/{session-auth-dead-7F2QBEAZ.js.map → session-auth-dead-4SE5Q7MU.js.map} +0 -0
@@ -37519,6 +37519,57 @@ var FLAG_REGISTRY = [
37519
37519
  sensitive: true
37520
37520
  // No envVar - net-new API-side control with no pre-flags env gate to migrate (ADR-0022).
37521
37521
  },
37522
+ {
37523
+ key: "channel-quarantine-auto-resume",
37524
+ description: "Time-based auto-resume of an ENG-5932 channel quarantine (ENG-10510): off = disabled, shadow = log the would-resume without acting, enforce = clear the local quarantine marker and re-add the channel for a TRIAL run, letting the reaper re-quarantine it if it is still dead. Backoff 2h doubling to a 24h cap, giving up after 5 attempts and leaving it for an operator; the manual Re-enable is unaffected and clears the strike count. DELIBERATELY NOT health-based: a quarantined channel is dropped from .mcp.json and the launch flags, so its process never spawns and its liveness is unobservable - unlike an ENG-7916 integration, which stays probeable via a reconstructed inline_server_entry, which is why mcp-auto-resume-mode can wait for healthy cycles and this cannot. A SEPARATE FLAG FROM channel-quarantine-mode ON PURPOSE: that one defaults to shadow, so giving it a resume meaning would arm auto-resume fleet-wide on the existing default. Declared safe value is off (fully dark): a flag-DB read error must never re-add a channel on its own, because a trial costs restarts against the breaker budget.",
37525
+ flagType: "enum",
37526
+ allowedValues: ["off", "shadow", "enforce"],
37527
+ // off = fully dark. See the description's fail-safe reasoning.
37528
+ defaultValue: "off",
37529
+ // Enforcement-mode control like its siblings channel-quarantine-mode and
37530
+ // mcp-auto-resume-mode: masked on public surfaces, mutations confirmed.
37531
+ sensitive: true,
37532
+ // ENG-10036: the reader lives in apps/cli (manager-worker), so an older
37533
+ // host has no code to honour a flip. Without `since`, classifyHostReach
37534
+ // reports 'honors' - full reach - which is the most confident thing the
37535
+ // field can say and would be a lie here.
37536
+ //
37537
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
37538
+ // Obi-Wan on #6313: the previous value here was '0.28.990', written before
37539
+ // merge and stated as though it were the reader's shipping version. It is
37540
+ // not knowable pre-merge. `since` is documented (types.ts) as "the agt-cli
37541
+ // version its reader lands in", and the bisected siblings in this registry
37542
+ // were all read off published dists AFTER their merge. The published line
37543
+ // is around 0.28.916-0.28.918, so that guess sat ~70 patch releases above
37544
+ // the build that will actually carry this reader - every host running the
37545
+ // release that DOES honour the flag would have classified `stale` until the
37546
+ // fleet passed a version that does not exist yet.
37547
+ //
37548
+ // So this follows the convention this registry already established for
37549
+ // exactly this situation - see `github-broker-credentials` below, whose
37550
+ // identical DELIBERATE UNREACHABLE PLACEHOLDER block and `since: '0.29.0'`
37551
+ // are the precedent: pinned ABOVE every published release ON PURPOSE,
37552
+ // labelled as a placeholder, and gated on a post-publish bisect.
37553
+ //
37554
+ // (This cited `claudecode-agt-bin-credential-helpers` until obi-wan
37555
+ // `8f9d3c43076c` pointed out no such key exists anywhere in the repo - the
37556
+ // only occurrence in the tree was this citation. The precedent was real and
37557
+ // the reasoning held, but the pointer could not be followed, so a reader
37558
+ // looking it up found nothing and had no way to tell whether the convention
37559
+ // was inherited or invented here. That is the one question a citation
37560
+ // exists to answer, and it is asked at exactly the moment someone is about
37561
+ // to do the post-publish bisect.) It classifies every host
37562
+ // as `stale`, which reports no reach rather than reach there is no basis
37563
+ // for - and unlike a plausible-looking number, it says out loud that it
37564
+ // must be re-bisected.
37565
+ //
37566
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
37567
+ // first agt-cli whose manager-worker carries the auto-resume poll block,
37568
+ // and replace this with that exact version. Leaving the placeholder is safe
37569
+ // (defaultValue 'off', sensitive: true, nothing flips); shipping a guessed
37570
+ // number is not.
37571
+ since: "0.29.0"
37572
+ },
37522
37573
  {
37523
37574
  key: "mcp-auto-resume-mode",
37524
37575
  description: "MCP auto-resume of a bind-failure quarantine (ENG-8036, follow-up to ENG-7916): off = disabled, shadow = log only (would-resume without acting), enforce = flip an ENG-7916-quarantined integration (status=unhealthy) back to status=active after DEFAULT_AUTO_RESUME_OK_CYCLES consecutive healthy connectivity-probe cycles. Recovery is observed via the connectivity-probe path, not the session-tool-bind probe (a quarantined row is excluded from the bind probe by the ENG-5292 writer). Only rows this quarantine system marked are auto-resumed - the reaper/oauth-refresh error/unhealthy states are never stomped. Declared safe value is off (fully dark): a flag-DB read error must never auto-un-quarantine on its own. Flip to shadow to observe, then enforce once the cycle threshold is tuned.",
@@ -39466,6 +39517,7 @@ function turnFailureNoticeEnabled(env2) {
39466
39517
  });
39467
39518
  }
39468
39519
  var DEFAULT_FAILURE_WATCH_MS = 5 * 6e4;
39520
+ var MAX_FAILURE_WATCH_MS = 30 * 6e4;
39469
39521
  var FAST_POLL_MS = 500;
39470
39522
  var SLOW_POLL_MS = 3e3;
39471
39523
  var FAST_PHASE_MS = 1e4;
@@ -39540,8 +39592,9 @@ async function watchForTurnFailure(opts) {
39540
39592
  const slowPollMs = opts.slowPollMs ?? SLOW_POLL_MS;
39541
39593
  const fastPhaseMs = opts.fastPhaseMs ?? FAST_PHASE_MS;
39542
39594
  const retryingAfterMs = opts.retryingNoticeAfterMs ?? RETRYING_NOTICE_AFTER_MS;
39595
+ const maxWatchMs = opts.maxWatchMs ?? MAX_FAILURE_WATCH_MS;
39543
39596
  const startedAt = now();
39544
- const deadline = startedAt + timeoutMs;
39597
+ let lastAliveAt = startedAt;
39545
39598
  let longRetryFired = false;
39546
39599
  let driftEmitted = false;
39547
39600
  const cache = /* @__PURE__ */ new Map();
@@ -39581,6 +39634,7 @@ async function watchForTurnFailure(opts) {
39581
39634
  const { result } = scan;
39582
39635
  if (result.outcome === "failed") return result;
39583
39636
  if (result.outcome === "served") return null;
39637
+ if (result.outcome === "retrying") lastAliveAt = now();
39584
39638
  if (result.outcome === "retrying" && !longRetryFired && opts.onLongRetry && now() - startedAt >= retryingAfterMs) {
39585
39639
  longRetryFired = true;
39586
39640
  try {
@@ -39588,7 +39642,8 @@ async function watchForTurnFailure(opts) {
39588
39642
  } catch {
39589
39643
  }
39590
39644
  }
39591
- if (now() >= deadline) return null;
39645
+ if (now() - lastAliveAt >= timeoutMs) return null;
39646
+ if (now() - startedAt >= maxWatchMs) return null;
39592
39647
  await wait(now() - startedAt < fastPhaseMs ? fastPollMs : slowPollMs);
39593
39648
  }
39594
39649
  }
package/dist/mcp/index.js CHANGED
@@ -29816,6 +29816,57 @@ var FLAG_REGISTRY = [
29816
29816
  sensitive: true
29817
29817
  // No envVar - net-new API-side control with no pre-flags env gate to migrate (ADR-0022).
29818
29818
  },
29819
+ {
29820
+ key: "channel-quarantine-auto-resume",
29821
+ description: "Time-based auto-resume of an ENG-5932 channel quarantine (ENG-10510): off = disabled, shadow = log the would-resume without acting, enforce = clear the local quarantine marker and re-add the channel for a TRIAL run, letting the reaper re-quarantine it if it is still dead. Backoff 2h doubling to a 24h cap, giving up after 5 attempts and leaving it for an operator; the manual Re-enable is unaffected and clears the strike count. DELIBERATELY NOT health-based: a quarantined channel is dropped from .mcp.json and the launch flags, so its process never spawns and its liveness is unobservable - unlike an ENG-7916 integration, which stays probeable via a reconstructed inline_server_entry, which is why mcp-auto-resume-mode can wait for healthy cycles and this cannot. A SEPARATE FLAG FROM channel-quarantine-mode ON PURPOSE: that one defaults to shadow, so giving it a resume meaning would arm auto-resume fleet-wide on the existing default. Declared safe value is off (fully dark): a flag-DB read error must never re-add a channel on its own, because a trial costs restarts against the breaker budget.",
29822
+ flagType: "enum",
29823
+ allowedValues: ["off", "shadow", "enforce"],
29824
+ // off = fully dark. See the description's fail-safe reasoning.
29825
+ defaultValue: "off",
29826
+ // Enforcement-mode control like its siblings channel-quarantine-mode and
29827
+ // mcp-auto-resume-mode: masked on public surfaces, mutations confirmed.
29828
+ sensitive: true,
29829
+ // ENG-10036: the reader lives in apps/cli (manager-worker), so an older
29830
+ // host has no code to honour a flip. Without `since`, classifyHostReach
29831
+ // reports 'honors' - full reach - which is the most confident thing the
29832
+ // field can say and would be a lie here.
29833
+ //
29834
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
29835
+ // Obi-Wan on #6313: the previous value here was '0.28.990', written before
29836
+ // merge and stated as though it were the reader's shipping version. It is
29837
+ // not knowable pre-merge. `since` is documented (types.ts) as "the agt-cli
29838
+ // version its reader lands in", and the bisected siblings in this registry
29839
+ // were all read off published dists AFTER their merge. The published line
29840
+ // is around 0.28.916-0.28.918, so that guess sat ~70 patch releases above
29841
+ // the build that will actually carry this reader - every host running the
29842
+ // release that DOES honour the flag would have classified `stale` until the
29843
+ // fleet passed a version that does not exist yet.
29844
+ //
29845
+ // So this follows the convention this registry already established for
29846
+ // exactly this situation - see `github-broker-credentials` below, whose
29847
+ // identical DELIBERATE UNREACHABLE PLACEHOLDER block and `since: '0.29.0'`
29848
+ // are the precedent: pinned ABOVE every published release ON PURPOSE,
29849
+ // labelled as a placeholder, and gated on a post-publish bisect.
29850
+ //
29851
+ // (This cited `claudecode-agt-bin-credential-helpers` until obi-wan
29852
+ // `8f9d3c43076c` pointed out no such key exists anywhere in the repo - the
29853
+ // only occurrence in the tree was this citation. The precedent was real and
29854
+ // the reasoning held, but the pointer could not be followed, so a reader
29855
+ // looking it up found nothing and had no way to tell whether the convention
29856
+ // was inherited or invented here. That is the one question a citation
29857
+ // exists to answer, and it is asked at exactly the moment someone is about
29858
+ // to do the post-publish bisect.) It classifies every host
29859
+ // as `stale`, which reports no reach rather than reach there is no basis
29860
+ // for - and unlike a plausible-looking number, it says out loud that it
29861
+ // must be re-bisected.
29862
+ //
29863
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
29864
+ // first agt-cli whose manager-worker carries the auto-resume poll block,
29865
+ // and replace this with that exact version. Leaving the placeholder is safe
29866
+ // (defaultValue 'off', sensitive: true, nothing flips); shipping a guessed
29867
+ // number is not.
29868
+ since: "0.29.0"
29869
+ },
29819
29870
  {
29820
29871
  key: "mcp-auto-resume-mode",
29821
29872
  description: "MCP auto-resume of a bind-failure quarantine (ENG-8036, follow-up to ENG-7916): off = disabled, shadow = log only (would-resume without acting), enforce = flip an ENG-7916-quarantined integration (status=unhealthy) back to status=active after DEFAULT_AUTO_RESUME_OK_CYCLES consecutive healthy connectivity-probe cycles. Recovery is observed via the connectivity-probe path, not the session-tool-bind probe (a quarantined row is excluded from the bind probe by the ENG-5292 writer). Only rows this quarantine system marked are auto-resumed - the reaper/oauth-refresh error/unhealthy states are never stomped. Declared safe value is off (fully dark): a flag-DB read error must never auto-un-quarantine on its own. Flip to shadow to observe, then enforce once the cycle threshold is tuned.",
@@ -43764,6 +43764,57 @@ var FLAG_REGISTRY = [
43764
43764
  sensitive: true
43765
43765
  // No envVar - net-new API-side control with no pre-flags env gate to migrate (ADR-0022).
43766
43766
  },
43767
+ {
43768
+ key: "channel-quarantine-auto-resume",
43769
+ description: "Time-based auto-resume of an ENG-5932 channel quarantine (ENG-10510): off = disabled, shadow = log the would-resume without acting, enforce = clear the local quarantine marker and re-add the channel for a TRIAL run, letting the reaper re-quarantine it if it is still dead. Backoff 2h doubling to a 24h cap, giving up after 5 attempts and leaving it for an operator; the manual Re-enable is unaffected and clears the strike count. DELIBERATELY NOT health-based: a quarantined channel is dropped from .mcp.json and the launch flags, so its process never spawns and its liveness is unobservable - unlike an ENG-7916 integration, which stays probeable via a reconstructed inline_server_entry, which is why mcp-auto-resume-mode can wait for healthy cycles and this cannot. A SEPARATE FLAG FROM channel-quarantine-mode ON PURPOSE: that one defaults to shadow, so giving it a resume meaning would arm auto-resume fleet-wide on the existing default. Declared safe value is off (fully dark): a flag-DB read error must never re-add a channel on its own, because a trial costs restarts against the breaker budget.",
43770
+ flagType: "enum",
43771
+ allowedValues: ["off", "shadow", "enforce"],
43772
+ // off = fully dark. See the description's fail-safe reasoning.
43773
+ defaultValue: "off",
43774
+ // Enforcement-mode control like its siblings channel-quarantine-mode and
43775
+ // mcp-auto-resume-mode: masked on public surfaces, mutations confirmed.
43776
+ sensitive: true,
43777
+ // ENG-10036: the reader lives in apps/cli (manager-worker), so an older
43778
+ // host has no code to honour a flip. Without `since`, classifyHostReach
43779
+ // reports 'honors' - full reach - which is the most confident thing the
43780
+ // field can say and would be a lie here.
43781
+ //
43782
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
43783
+ // Obi-Wan on #6313: the previous value here was '0.28.990', written before
43784
+ // merge and stated as though it were the reader's shipping version. It is
43785
+ // not knowable pre-merge. `since` is documented (types.ts) as "the agt-cli
43786
+ // version its reader lands in", and the bisected siblings in this registry
43787
+ // were all read off published dists AFTER their merge. The published line
43788
+ // is around 0.28.916-0.28.918, so that guess sat ~70 patch releases above
43789
+ // the build that will actually carry this reader - every host running the
43790
+ // release that DOES honour the flag would have classified `stale` until the
43791
+ // fleet passed a version that does not exist yet.
43792
+ //
43793
+ // So this follows the convention this registry already established for
43794
+ // exactly this situation - see `github-broker-credentials` below, whose
43795
+ // identical DELIBERATE UNREACHABLE PLACEHOLDER block and `since: '0.29.0'`
43796
+ // are the precedent: pinned ABOVE every published release ON PURPOSE,
43797
+ // labelled as a placeholder, and gated on a post-publish bisect.
43798
+ //
43799
+ // (This cited `claudecode-agt-bin-credential-helpers` until obi-wan
43800
+ // `8f9d3c43076c` pointed out no such key exists anywhere in the repo - the
43801
+ // only occurrence in the tree was this citation. The precedent was real and
43802
+ // the reasoning held, but the pointer could not be followed, so a reader
43803
+ // looking it up found nothing and had no way to tell whether the convention
43804
+ // was inherited or invented here. That is the one question a citation
43805
+ // exists to answer, and it is asked at exactly the moment someone is about
43806
+ // to do the post-publish bisect.) It classifies every host
43807
+ // as `stale`, which reports no reach rather than reach there is no basis
43808
+ // for - and unlike a plausible-looking number, it says out loud that it
43809
+ // must be re-bisected.
43810
+ //
43811
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
43812
+ // first agt-cli whose manager-worker carries the auto-resume poll block,
43813
+ // and replace this with that exact version. Leaving the placeholder is safe
43814
+ // (defaultValue 'off', sensitive: true, nothing flips); shipping a guessed
43815
+ // number is not.
43816
+ since: "0.29.0"
43817
+ },
43767
43818
  {
43768
43819
  key: "mcp-auto-resume-mode",
43769
43820
  description: "MCP auto-resume of a bind-failure quarantine (ENG-8036, follow-up to ENG-7916): off = disabled, shadow = log only (would-resume without acting), enforce = flip an ENG-7916-quarantined integration (status=unhealthy) back to status=active after DEFAULT_AUTO_RESUME_OK_CYCLES consecutive healthy connectivity-probe cycles. Recovery is observed via the connectivity-probe path, not the session-tool-bind probe (a quarantined row is excluded from the bind probe by the ENG-5292 writer). Only rows this quarantine system marked are auto-resumed - the reaper/oauth-refresh error/unhealthy states are never stomped. Declared safe value is off (fully dark): a flag-DB read error must never auto-un-quarantine on its own. Flip to shadow to observe, then enforce once the cycle threshold is tuned.",
@@ -38403,6 +38403,57 @@ var FLAG_REGISTRY = [
38403
38403
  sensitive: true
38404
38404
  // No envVar - net-new API-side control with no pre-flags env gate to migrate (ADR-0022).
38405
38405
  },
38406
+ {
38407
+ key: "channel-quarantine-auto-resume",
38408
+ description: "Time-based auto-resume of an ENG-5932 channel quarantine (ENG-10510): off = disabled, shadow = log the would-resume without acting, enforce = clear the local quarantine marker and re-add the channel for a TRIAL run, letting the reaper re-quarantine it if it is still dead. Backoff 2h doubling to a 24h cap, giving up after 5 attempts and leaving it for an operator; the manual Re-enable is unaffected and clears the strike count. DELIBERATELY NOT health-based: a quarantined channel is dropped from .mcp.json and the launch flags, so its process never spawns and its liveness is unobservable - unlike an ENG-7916 integration, which stays probeable via a reconstructed inline_server_entry, which is why mcp-auto-resume-mode can wait for healthy cycles and this cannot. A SEPARATE FLAG FROM channel-quarantine-mode ON PURPOSE: that one defaults to shadow, so giving it a resume meaning would arm auto-resume fleet-wide on the existing default. Declared safe value is off (fully dark): a flag-DB read error must never re-add a channel on its own, because a trial costs restarts against the breaker budget.",
38409
+ flagType: "enum",
38410
+ allowedValues: ["off", "shadow", "enforce"],
38411
+ // off = fully dark. See the description's fail-safe reasoning.
38412
+ defaultValue: "off",
38413
+ // Enforcement-mode control like its siblings channel-quarantine-mode and
38414
+ // mcp-auto-resume-mode: masked on public surfaces, mutations confirmed.
38415
+ sensitive: true,
38416
+ // ENG-10036: the reader lives in apps/cli (manager-worker), so an older
38417
+ // host has no code to honour a flip. Without `since`, classifyHostReach
38418
+ // reports 'honors' - full reach - which is the most confident thing the
38419
+ // field can say and would be a lie here.
38420
+ //
38421
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
38422
+ // Obi-Wan on #6313: the previous value here was '0.28.990', written before
38423
+ // merge and stated as though it were the reader's shipping version. It is
38424
+ // not knowable pre-merge. `since` is documented (types.ts) as "the agt-cli
38425
+ // version its reader lands in", and the bisected siblings in this registry
38426
+ // were all read off published dists AFTER their merge. The published line
38427
+ // is around 0.28.916-0.28.918, so that guess sat ~70 patch releases above
38428
+ // the build that will actually carry this reader - every host running the
38429
+ // release that DOES honour the flag would have classified `stale` until the
38430
+ // fleet passed a version that does not exist yet.
38431
+ //
38432
+ // So this follows the convention this registry already established for
38433
+ // exactly this situation - see `github-broker-credentials` below, whose
38434
+ // identical DELIBERATE UNREACHABLE PLACEHOLDER block and `since: '0.29.0'`
38435
+ // are the precedent: pinned ABOVE every published release ON PURPOSE,
38436
+ // labelled as a placeholder, and gated on a post-publish bisect.
38437
+ //
38438
+ // (This cited `claudecode-agt-bin-credential-helpers` until obi-wan
38439
+ // `8f9d3c43076c` pointed out no such key exists anywhere in the repo - the
38440
+ // only occurrence in the tree was this citation. The precedent was real and
38441
+ // the reasoning held, but the pointer could not be followed, so a reader
38442
+ // looking it up found nothing and had no way to tell whether the convention
38443
+ // was inherited or invented here. That is the one question a citation
38444
+ // exists to answer, and it is asked at exactly the moment someone is about
38445
+ // to do the post-publish bisect.) It classifies every host
38446
+ // as `stale`, which reports no reach rather than reach there is no basis
38447
+ // for - and unlike a plausible-looking number, it says out loud that it
38448
+ // must be re-bisected.
38449
+ //
38450
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
38451
+ // first agt-cli whose manager-worker carries the auto-resume poll block,
38452
+ // and replace this with that exact version. Leaving the placeholder is safe
38453
+ // (defaultValue 'off', sensitive: true, nothing flips); shipping a guessed
38454
+ // number is not.
38455
+ since: "0.29.0"
38456
+ },
38406
38457
  {
38407
38458
  key: "mcp-auto-resume-mode",
38408
38459
  description: "MCP auto-resume of a bind-failure quarantine (ENG-8036, follow-up to ENG-7916): off = disabled, shadow = log only (would-resume without acting), enforce = flip an ENG-7916-quarantined integration (status=unhealthy) back to status=active after DEFAULT_AUTO_RESUME_OK_CYCLES consecutive healthy connectivity-probe cycles. Recovery is observed via the connectivity-probe path, not the session-tool-bind probe (a quarantined row is excluded from the bind probe by the ENG-5292 writer). Only rows this quarantine system marked are auto-resumed - the reaper/oauth-refresh error/unhealthy states are never stomped. Declared safe value is off (fully dark): a flag-DB read error must never auto-un-quarantine on its own. Flip to shadow to observe, then enforce once the cycle threshold is tuned.",
@@ -41215,6 +41266,7 @@ function turnFailureNoticeEnabled(env2) {
41215
41266
  });
41216
41267
  }
41217
41268
  var DEFAULT_FAILURE_WATCH_MS = 5 * 6e4;
41269
+ var MAX_FAILURE_WATCH_MS = 30 * 6e4;
41218
41270
  var FAST_POLL_MS = 500;
41219
41271
  var SLOW_POLL_MS = 3e3;
41220
41272
  var FAST_PHASE_MS = 1e4;
@@ -41289,8 +41341,9 @@ async function watchForTurnFailure(opts) {
41289
41341
  const slowPollMs = opts.slowPollMs ?? SLOW_POLL_MS;
41290
41342
  const fastPhaseMs = opts.fastPhaseMs ?? FAST_PHASE_MS;
41291
41343
  const retryingAfterMs = opts.retryingNoticeAfterMs ?? RETRYING_NOTICE_AFTER_MS;
41344
+ const maxWatchMs = opts.maxWatchMs ?? MAX_FAILURE_WATCH_MS;
41292
41345
  const startedAt = now();
41293
- const deadline = startedAt + timeoutMs;
41346
+ let lastAliveAt = startedAt;
41294
41347
  let longRetryFired = false;
41295
41348
  let driftEmitted = false;
41296
41349
  const cache = /* @__PURE__ */ new Map();
@@ -41330,6 +41383,7 @@ async function watchForTurnFailure(opts) {
41330
41383
  const { result } = scan;
41331
41384
  if (result.outcome === "failed") return result;
41332
41385
  if (result.outcome === "served") return null;
41386
+ if (result.outcome === "retrying") lastAliveAt = now();
41333
41387
  if (result.outcome === "retrying" && !longRetryFired && opts.onLongRetry && now() - startedAt >= retryingAfterMs) {
41334
41388
  longRetryFired = true;
41335
41389
  try {
@@ -41337,7 +41391,8 @@ async function watchForTurnFailure(opts) {
41337
41391
  } catch {
41338
41392
  }
41339
41393
  }
41340
- if (now() >= deadline) return null;
41394
+ if (now() - lastAliveAt >= timeoutMs) return null;
41395
+ if (now() - startedAt >= maxWatchMs) return null;
41341
41396
  await wait(now() - startedAt < fastPhaseMs ? fastPollMs : slowPollMs);
41342
41397
  }
41343
41398
  }
@@ -38417,6 +38417,57 @@ var FLAG_REGISTRY = [
38417
38417
  sensitive: true
38418
38418
  // No envVar - net-new API-side control with no pre-flags env gate to migrate (ADR-0022).
38419
38419
  },
38420
+ {
38421
+ key: "channel-quarantine-auto-resume",
38422
+ description: "Time-based auto-resume of an ENG-5932 channel quarantine (ENG-10510): off = disabled, shadow = log the would-resume without acting, enforce = clear the local quarantine marker and re-add the channel for a TRIAL run, letting the reaper re-quarantine it if it is still dead. Backoff 2h doubling to a 24h cap, giving up after 5 attempts and leaving it for an operator; the manual Re-enable is unaffected and clears the strike count. DELIBERATELY NOT health-based: a quarantined channel is dropped from .mcp.json and the launch flags, so its process never spawns and its liveness is unobservable - unlike an ENG-7916 integration, which stays probeable via a reconstructed inline_server_entry, which is why mcp-auto-resume-mode can wait for healthy cycles and this cannot. A SEPARATE FLAG FROM channel-quarantine-mode ON PURPOSE: that one defaults to shadow, so giving it a resume meaning would arm auto-resume fleet-wide on the existing default. Declared safe value is off (fully dark): a flag-DB read error must never re-add a channel on its own, because a trial costs restarts against the breaker budget.",
38423
+ flagType: "enum",
38424
+ allowedValues: ["off", "shadow", "enforce"],
38425
+ // off = fully dark. See the description's fail-safe reasoning.
38426
+ defaultValue: "off",
38427
+ // Enforcement-mode control like its siblings channel-quarantine-mode and
38428
+ // mcp-auto-resume-mode: masked on public surfaces, mutations confirmed.
38429
+ sensitive: true,
38430
+ // ENG-10036: the reader lives in apps/cli (manager-worker), so an older
38431
+ // host has no code to honour a flip. Without `since`, classifyHostReach
38432
+ // reports 'honors' - full reach - which is the most confident thing the
38433
+ // field can say and would be a lie here.
38434
+ //
38435
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
38436
+ // Obi-Wan on #6313: the previous value here was '0.28.990', written before
38437
+ // merge and stated as though it were the reader's shipping version. It is
38438
+ // not knowable pre-merge. `since` is documented (types.ts) as "the agt-cli
38439
+ // version its reader lands in", and the bisected siblings in this registry
38440
+ // were all read off published dists AFTER their merge. The published line
38441
+ // is around 0.28.916-0.28.918, so that guess sat ~70 patch releases above
38442
+ // the build that will actually carry this reader - every host running the
38443
+ // release that DOES honour the flag would have classified `stale` until the
38444
+ // fleet passed a version that does not exist yet.
38445
+ //
38446
+ // So this follows the convention this registry already established for
38447
+ // exactly this situation - see `github-broker-credentials` below, whose
38448
+ // identical DELIBERATE UNREACHABLE PLACEHOLDER block and `since: '0.29.0'`
38449
+ // are the precedent: pinned ABOVE every published release ON PURPOSE,
38450
+ // labelled as a placeholder, and gated on a post-publish bisect.
38451
+ //
38452
+ // (This cited `claudecode-agt-bin-credential-helpers` until obi-wan
38453
+ // `8f9d3c43076c` pointed out no such key exists anywhere in the repo - the
38454
+ // only occurrence in the tree was this citation. The precedent was real and
38455
+ // the reasoning held, but the pointer could not be followed, so a reader
38456
+ // looking it up found nothing and had no way to tell whether the convention
38457
+ // was inherited or invented here. That is the one question a citation
38458
+ // exists to answer, and it is asked at exactly the moment someone is about
38459
+ // to do the post-publish bisect.) It classifies every host
38460
+ // as `stale`, which reports no reach rather than reach there is no basis
38461
+ // for - and unlike a plausible-looking number, it says out loud that it
38462
+ // must be re-bisected.
38463
+ //
38464
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
38465
+ // first agt-cli whose manager-worker carries the auto-resume poll block,
38466
+ // and replace this with that exact version. Leaving the placeholder is safe
38467
+ // (defaultValue 'off', sensitive: true, nothing flips); shipping a guessed
38468
+ // number is not.
38469
+ since: "0.29.0"
38470
+ },
38420
38471
  {
38421
38472
  key: "mcp-auto-resume-mode",
38422
38473
  description: "MCP auto-resume of a bind-failure quarantine (ENG-8036, follow-up to ENG-7916): off = disabled, shadow = log only (would-resume without acting), enforce = flip an ENG-7916-quarantined integration (status=unhealthy) back to status=active after DEFAULT_AUTO_RESUME_OK_CYCLES consecutive healthy connectivity-probe cycles. Recovery is observed via the connectivity-probe path, not the session-tool-bind probe (a quarantined row is excluded from the bind probe by the ENG-5292 writer). Only rows this quarantine system marked are auto-resumed - the reaper/oauth-refresh error/unhealthy states are never stomped. Declared safe value is off (fully dark): a flag-DB read error must never auto-un-quarantine on its own. Flip to shadow to observe, then enforce once the cycle threshold is tuned.",
@@ -41409,6 +41460,7 @@ function turnFailureNoticeEnabled(env2) {
41409
41460
  });
41410
41461
  }
41411
41462
  var DEFAULT_FAILURE_WATCH_MS = 5 * 6e4;
41463
+ var MAX_FAILURE_WATCH_MS = 30 * 6e4;
41412
41464
  var FAST_POLL_MS = 500;
41413
41465
  var SLOW_POLL_MS = 3e3;
41414
41466
  var FAST_PHASE_MS = 1e4;
@@ -41483,8 +41535,9 @@ async function watchForTurnFailure(opts) {
41483
41535
  const slowPollMs = opts.slowPollMs ?? SLOW_POLL_MS;
41484
41536
  const fastPhaseMs = opts.fastPhaseMs ?? FAST_PHASE_MS;
41485
41537
  const retryingAfterMs = opts.retryingNoticeAfterMs ?? RETRYING_NOTICE_AFTER_MS;
41538
+ const maxWatchMs = opts.maxWatchMs ?? MAX_FAILURE_WATCH_MS;
41486
41539
  const startedAt = now();
41487
- const deadline = startedAt + timeoutMs;
41540
+ let lastAliveAt = startedAt;
41488
41541
  let longRetryFired = false;
41489
41542
  let driftEmitted = false;
41490
41543
  const cache = /* @__PURE__ */ new Map();
@@ -41524,6 +41577,7 @@ async function watchForTurnFailure(opts) {
41524
41577
  const { result } = scan;
41525
41578
  if (result.outcome === "failed") return result;
41526
41579
  if (result.outcome === "served") return null;
41580
+ if (result.outcome === "retrying") lastAliveAt = now();
41527
41581
  if (result.outcome === "retrying" && !longRetryFired && opts.onLongRetry && now() - startedAt >= retryingAfterMs) {
41528
41582
  longRetryFired = true;
41529
41583
  try {
@@ -41531,7 +41585,8 @@ async function watchForTurnFailure(opts) {
41531
41585
  } catch {
41532
41586
  }
41533
41587
  }
41534
- if (now() >= deadline) return null;
41588
+ if (now() - lastAliveAt >= timeoutMs) return null;
41589
+ if (now() - startedAt >= maxWatchMs) return null;
41535
41590
  await wait(now() - startedAt < fastPhaseMs ? fastPollMs : slowPollMs);
41536
41591
  }
41537
41592
  }
@@ -64,8 +64,8 @@ import {
64
64
  writeDirectChatSessionState,
65
65
  writeEgressAllowlist,
66
66
  writePersistentClaudeWrapper
67
- } from "./chunk-HHBAQ6ZV.js";
68
- import "./chunk-532V7ZSC.js";
67
+ } from "./chunk-O6R6HS2Z.js";
68
+ import "./chunk-XWMUQR65.js";
69
69
  import "./chunk-DHWNVVX4.js";
70
70
  import "./chunk-XWVM4KPK.js";
71
71
  import "./chunk-DGUM43GV.js";
@@ -136,4 +136,4 @@ export {
136
136
  writeEgressAllowlist,
137
137
  writePersistentClaudeWrapper
138
138
  };
139
- //# sourceMappingURL=persistent-session-JUGGNJSB.js.map
139
+ //# sourceMappingURL=persistent-session-K4DLZ7KF.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-HHBAQ6ZV.js";
4
- import "./chunk-532V7ZSC.js";
3
+ } from "./chunk-O6R6HS2Z.js";
4
+ import "./chunk-XWMUQR65.js";
5
5
  import "./chunk-DHWNVVX4.js";
6
6
  import "./chunk-XWVM4KPK.js";
7
7
  import "./chunk-DGUM43GV.js";
@@ -801,4 +801,4 @@ export {
801
801
  readAndResetSlackReplyBindingClassifications,
802
802
  readAndResetSlackReplyTargetClassifications
803
803
  };
804
- //# sourceMappingURL=responsiveness-probe-QLOVCTVA.js.map
804
+ //# sourceMappingURL=responsiveness-probe-DXPEIUH6.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-532V7ZSC.js";
3
+ } from "./chunk-XWMUQR65.js";
4
4
  import "./chunk-DGUM43GV.js";
5
5
 
6
6
  // src/lib/session-auth-dead.ts
@@ -204,4 +204,4 @@ export {
204
204
  decideSessionAuthState,
205
205
  probeSessionAuth
206
206
  };
207
- //# sourceMappingURL=session-auth-dead-7F2QBEAZ.js.map
207
+ //# sourceMappingURL=session-auth-dead-4SE5Q7MU.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.1004",
3
+ "version": "0.28.1006",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {