@integrity-labs/agt-cli 0.28.506 → 0.28.508

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.
@@ -34950,6 +34950,36 @@ var FLAG_REGISTRY = [
34950
34950
  // AGT_RESUME_RECONCILER_ENABLED set keeps that value until the env is retired.
34951
34951
  envVar: "AGT_RESUME_RECONCILER_ENABLED"
34952
34952
  },
34953
+ {
34954
+ key: "auto-resume-enabled",
34955
+ description: "DO NOT ARM YET (ENG-8395): this flag has no `since` set until a follow-up bisects it from the published agt-cli dist, and an unset `since` makes the flip-reach estimate report FULL reach for a reader that is host-side \u2014 it will tell you a flip reached hosts that have no code to honour it. Arm only once that follow-up has landed. Bounded BLIND auto-resume for circuit-breaker pauses (ENG-6088): at most one unattended resume per trip cycle, fired once the trip driver has been quiet for the configured window and only for provisioning-reload trips (the ENG-7577 class gate \u2014 a crash-class trip still needs an operator). Superseded wherever `resume-reconciler` is on: that path proves the dependency recovered instead of assuming it, and the blind timer is its flag-off fallback. Boolean gate; ships dark. ENG-8395 promoted this from a raw host env var because AGT_AUTO_RESUME_ENABLED lives in the host env file, so its grain is per-HOST \u2014 one flip arms every agent that host runs (agt-aws-1 carries 14), which made the canary-then-fleet rollout its own documentation prescribes impossible. As a registry flag it resolves per org/team/host/AGENT, so one agent can genuinely be cut over first. Read host-side by the manager (agt-cli), not centrally.",
34956
+ flagType: "boolean",
34957
+ // Declared safe value is `false` — identical to today's behaviour on a host
34958
+ // that has never set the env var. Fail-safe direction on a flag-DB read
34959
+ // error is "no unattended resume of a paused agent".
34960
+ defaultValue: false,
34961
+ // Migration override (ADR-0022) — KEPT, not swapped (ENG-8395 is an addition).
34962
+ // The pre-flags env gate stays the highest-precedence operator override so a
34963
+ // host already running with AGT_AUTO_RESUME_ENABLED set keeps that value, and
34964
+ // so an operator retains a host-local escape hatch that needs no control-plane
34965
+ // round-trip. Note the host reader accepts a slightly WIDER truthy vocabulary
34966
+ // than coerceEnvValue (it also honours the legacy yes/on/no/off spellings);
34967
+ // both agree on true/1/false/0, and the reader is the authority for this gate.
34968
+ envVar: "AGT_AUTO_RESUME_ENABLED",
34969
+ // An unattended resume is a real availability change — the agent starts
34970
+ // spawning sessions again with no human in the loop — so arming it is a
34971
+ // deliberate, confirmed write (ADR-0022 sensitive-flag confirm).
34972
+ sensitive: true
34973
+ // ENG-8395 AC5: `since` is deliberately UNSET at merge. It must be bisected
34974
+ // from the PUBLISHED agt-cli dist once the artifact carrying the host-side
34975
+ // reader exists, never guessed — auto-resume.ts is host-side, so an
34976
+ // under-`since` host has no consumer for this flag and a guessed value makes
34977
+ // the flip-reach modal promise reach it does not have (the defect caught on
34978
+ // ENG-8344 / PR #4014). Precedent for the bisect method: slack-hot-thread-guard
34979
+ // = 0.28.339, slack-scheduled-channel-guard = 0.28.421. Setting it later is
34980
+ // safe: `since` is excluded from projectDefinition, so it does not roll
34981
+ // FLAGS_SCHEMA_VERSION.
34982
+ },
34953
34983
  {
34954
34984
  key: "memory-extraction",
34955
34985
  description: "Host-side durable-memory extraction (ENG-6200): the manager extracts candidate memories from completed conversations and POSTs them to /host/memories/candidates, which writes dream_log via promoteCandidates. Post persistent-session cutover this is the ONLY live consolidation path. Boolean gate; ships dark \u2014 when off the manager runs no extraction, so 0 dream_log rows fleet-wide is the expected steady state until it is armed.",
@@ -35472,6 +35502,54 @@ var FLAG_REGISTRY = [
35472
35502
  // Turning this on lets agents originate proposals that create customer
35473
35503
  // infrastructure once approved — same posture as augmented-support-writes.
35474
35504
  sensitive: true
35505
+ },
35506
+ {
35507
+ key: "github-broker-credentials",
35508
+ description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
35509
+ flagType: "boolean",
35510
+ // Declared safe value is `false` = today's env delivery. Fail-safe direction:
35511
+ // a flag-DB read error must never strip `git`/`gh` credentials off a live
35512
+ // agent, which is what the ON path does when its host has no helper writer.
35513
+ defaultValue: false,
35514
+ // Flipping ON changes how every GitHub App agent on the scope authenticates
35515
+ // `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
35516
+ // confirmed action (ADR-0022 §4).
35517
+ sensitive: true,
35518
+ // Set even though the flag is evaluated centrally, because `since` is a
35519
+ // REACH threshold ("a host this old has no consumer code for the flag") and
35520
+ // that is exactly the hazard here: the host does not read the flag, but it
35521
+ // does need the claudecode adapter's helper/shim writer and the wrapper PATH
35522
+ // prepend. On a host too old for those, the API would stop shipping the
35523
+ // token and NOTHING would replace it. Without `since` the flip-reach modal
35524
+ // reports FULL reach and hides that.
35525
+ //
35526
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
35527
+ // The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
35528
+ // `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
35529
+ // artifacts, which is only possible AFTER this merges and publishes. A
35530
+ // pre-merge guess cannot be right, and the two directions are not
35531
+ // symmetric:
35532
+ // - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
35533
+ // - too LOW -> hosts classify `honors` while carrying NO helper writer,
35534
+ // the modal promises full reach, and a flip strips `git`/
35535
+ // `gh` credentials with nothing replacing them. Outage.
35536
+ // So this is pinned ABOVE every published release on purpose: it classifies
35537
+ // EVERY host as `stale`, so the modal reports no reach rather than reach it
35538
+ // has no basis for. That is the intended pre-bisect state.
35539
+ //
35540
+ // BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
35541
+ // `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
35542
+ // modal. `evaluate.ts` never reads it and neither does the override write
35543
+ // path. The placeholder therefore changes what an operator is TOLD; it does
35544
+ // not stop a flip on an under-`since` host. What actually holds the line
35545
+ // here is `defaultValue: false` plus `sensitive: true` plus the runbook.
35546
+ //
35547
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
35548
+ // first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
35549
+ // prepends it, then replace this with that exact version. The rollout
35550
+ // runbook gates on it. Leaving the placeholder in place is safe (nothing
35551
+ // flips); shipping a guessed number is not.
35552
+ since: "0.29.0"
35475
35553
  }
35476
35554
  ];
35477
35555
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
@@ -40841,6 +40841,36 @@ var FLAG_REGISTRY = [
40841
40841
  // AGT_RESUME_RECONCILER_ENABLED set keeps that value until the env is retired.
40842
40842
  envVar: "AGT_RESUME_RECONCILER_ENABLED"
40843
40843
  },
40844
+ {
40845
+ key: "auto-resume-enabled",
40846
+ description: "DO NOT ARM YET (ENG-8395): this flag has no `since` set until a follow-up bisects it from the published agt-cli dist, and an unset `since` makes the flip-reach estimate report FULL reach for a reader that is host-side \u2014 it will tell you a flip reached hosts that have no code to honour it. Arm only once that follow-up has landed. Bounded BLIND auto-resume for circuit-breaker pauses (ENG-6088): at most one unattended resume per trip cycle, fired once the trip driver has been quiet for the configured window and only for provisioning-reload trips (the ENG-7577 class gate \u2014 a crash-class trip still needs an operator). Superseded wherever `resume-reconciler` is on: that path proves the dependency recovered instead of assuming it, and the blind timer is its flag-off fallback. Boolean gate; ships dark. ENG-8395 promoted this from a raw host env var because AGT_AUTO_RESUME_ENABLED lives in the host env file, so its grain is per-HOST \u2014 one flip arms every agent that host runs (agt-aws-1 carries 14), which made the canary-then-fleet rollout its own documentation prescribes impossible. As a registry flag it resolves per org/team/host/AGENT, so one agent can genuinely be cut over first. Read host-side by the manager (agt-cli), not centrally.",
40847
+ flagType: "boolean",
40848
+ // Declared safe value is `false` — identical to today's behaviour on a host
40849
+ // that has never set the env var. Fail-safe direction on a flag-DB read
40850
+ // error is "no unattended resume of a paused agent".
40851
+ defaultValue: false,
40852
+ // Migration override (ADR-0022) — KEPT, not swapped (ENG-8395 is an addition).
40853
+ // The pre-flags env gate stays the highest-precedence operator override so a
40854
+ // host already running with AGT_AUTO_RESUME_ENABLED set keeps that value, and
40855
+ // so an operator retains a host-local escape hatch that needs no control-plane
40856
+ // round-trip. Note the host reader accepts a slightly WIDER truthy vocabulary
40857
+ // than coerceEnvValue (it also honours the legacy yes/on/no/off spellings);
40858
+ // both agree on true/1/false/0, and the reader is the authority for this gate.
40859
+ envVar: "AGT_AUTO_RESUME_ENABLED",
40860
+ // An unattended resume is a real availability change — the agent starts
40861
+ // spawning sessions again with no human in the loop — so arming it is a
40862
+ // deliberate, confirmed write (ADR-0022 sensitive-flag confirm).
40863
+ sensitive: true
40864
+ // ENG-8395 AC5: `since` is deliberately UNSET at merge. It must be bisected
40865
+ // from the PUBLISHED agt-cli dist once the artifact carrying the host-side
40866
+ // reader exists, never guessed — auto-resume.ts is host-side, so an
40867
+ // under-`since` host has no consumer for this flag and a guessed value makes
40868
+ // the flip-reach modal promise reach it does not have (the defect caught on
40869
+ // ENG-8344 / PR #4014). Precedent for the bisect method: slack-hot-thread-guard
40870
+ // = 0.28.339, slack-scheduled-channel-guard = 0.28.421. Setting it later is
40871
+ // safe: `since` is excluded from projectDefinition, so it does not roll
40872
+ // FLAGS_SCHEMA_VERSION.
40873
+ },
40844
40874
  {
40845
40875
  key: "memory-extraction",
40846
40876
  description: "Host-side durable-memory extraction (ENG-6200): the manager extracts candidate memories from completed conversations and POSTs them to /host/memories/candidates, which writes dream_log via promoteCandidates. Post persistent-session cutover this is the ONLY live consolidation path. Boolean gate; ships dark \u2014 when off the manager runs no extraction, so 0 dream_log rows fleet-wide is the expected steady state until it is armed.",
@@ -41363,6 +41393,54 @@ var FLAG_REGISTRY = [
41363
41393
  // Turning this on lets agents originate proposals that create customer
41364
41394
  // infrastructure once approved — same posture as augmented-support-writes.
41365
41395
  sensitive: true
41396
+ },
41397
+ {
41398
+ key: "github-broker-credentials",
41399
+ description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
41400
+ flagType: "boolean",
41401
+ // Declared safe value is `false` = today's env delivery. Fail-safe direction:
41402
+ // a flag-DB read error must never strip `git`/`gh` credentials off a live
41403
+ // agent, which is what the ON path does when its host has no helper writer.
41404
+ defaultValue: false,
41405
+ // Flipping ON changes how every GitHub App agent on the scope authenticates
41406
+ // `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
41407
+ // confirmed action (ADR-0022 §4).
41408
+ sensitive: true,
41409
+ // Set even though the flag is evaluated centrally, because `since` is a
41410
+ // REACH threshold ("a host this old has no consumer code for the flag") and
41411
+ // that is exactly the hazard here: the host does not read the flag, but it
41412
+ // does need the claudecode adapter's helper/shim writer and the wrapper PATH
41413
+ // prepend. On a host too old for those, the API would stop shipping the
41414
+ // token and NOTHING would replace it. Without `since` the flip-reach modal
41415
+ // reports FULL reach and hides that.
41416
+ //
41417
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
41418
+ // The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
41419
+ // `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
41420
+ // artifacts, which is only possible AFTER this merges and publishes. A
41421
+ // pre-merge guess cannot be right, and the two directions are not
41422
+ // symmetric:
41423
+ // - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
41424
+ // - too LOW -> hosts classify `honors` while carrying NO helper writer,
41425
+ // the modal promises full reach, and a flip strips `git`/
41426
+ // `gh` credentials with nothing replacing them. Outage.
41427
+ // So this is pinned ABOVE every published release on purpose: it classifies
41428
+ // EVERY host as `stale`, so the modal reports no reach rather than reach it
41429
+ // has no basis for. That is the intended pre-bisect state.
41430
+ //
41431
+ // BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
41432
+ // `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
41433
+ // modal. `evaluate.ts` never reads it and neither does the override write
41434
+ // path. The placeholder therefore changes what an operator is TOLD; it does
41435
+ // not stop a flip on an under-`since` host. What actually holds the line
41436
+ // here is `defaultValue: false` plus `sensitive: true` plus the runbook.
41437
+ //
41438
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
41439
+ // first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
41440
+ // prepends it, then replace this with that exact version. The rollout
41441
+ // runbook gates on it. Leaving the placeholder in place is safe (nothing
41442
+ // flips); shipping a guessed number is not.
41443
+ since: "0.29.0"
41366
41444
  }
41367
41445
  ];
41368
41446
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
@@ -35119,6 +35119,36 @@ var FLAG_REGISTRY = [
35119
35119
  // AGT_RESUME_RECONCILER_ENABLED set keeps that value until the env is retired.
35120
35120
  envVar: "AGT_RESUME_RECONCILER_ENABLED"
35121
35121
  },
35122
+ {
35123
+ key: "auto-resume-enabled",
35124
+ description: "DO NOT ARM YET (ENG-8395): this flag has no `since` set until a follow-up bisects it from the published agt-cli dist, and an unset `since` makes the flip-reach estimate report FULL reach for a reader that is host-side \u2014 it will tell you a flip reached hosts that have no code to honour it. Arm only once that follow-up has landed. Bounded BLIND auto-resume for circuit-breaker pauses (ENG-6088): at most one unattended resume per trip cycle, fired once the trip driver has been quiet for the configured window and only for provisioning-reload trips (the ENG-7577 class gate \u2014 a crash-class trip still needs an operator). Superseded wherever `resume-reconciler` is on: that path proves the dependency recovered instead of assuming it, and the blind timer is its flag-off fallback. Boolean gate; ships dark. ENG-8395 promoted this from a raw host env var because AGT_AUTO_RESUME_ENABLED lives in the host env file, so its grain is per-HOST \u2014 one flip arms every agent that host runs (agt-aws-1 carries 14), which made the canary-then-fleet rollout its own documentation prescribes impossible. As a registry flag it resolves per org/team/host/AGENT, so one agent can genuinely be cut over first. Read host-side by the manager (agt-cli), not centrally.",
35125
+ flagType: "boolean",
35126
+ // Declared safe value is `false` — identical to today's behaviour on a host
35127
+ // that has never set the env var. Fail-safe direction on a flag-DB read
35128
+ // error is "no unattended resume of a paused agent".
35129
+ defaultValue: false,
35130
+ // Migration override (ADR-0022) — KEPT, not swapped (ENG-8395 is an addition).
35131
+ // The pre-flags env gate stays the highest-precedence operator override so a
35132
+ // host already running with AGT_AUTO_RESUME_ENABLED set keeps that value, and
35133
+ // so an operator retains a host-local escape hatch that needs no control-plane
35134
+ // round-trip. Note the host reader accepts a slightly WIDER truthy vocabulary
35135
+ // than coerceEnvValue (it also honours the legacy yes/on/no/off spellings);
35136
+ // both agree on true/1/false/0, and the reader is the authority for this gate.
35137
+ envVar: "AGT_AUTO_RESUME_ENABLED",
35138
+ // An unattended resume is a real availability change — the agent starts
35139
+ // spawning sessions again with no human in the loop — so arming it is a
35140
+ // deliberate, confirmed write (ADR-0022 sensitive-flag confirm).
35141
+ sensitive: true
35142
+ // ENG-8395 AC5: `since` is deliberately UNSET at merge. It must be bisected
35143
+ // from the PUBLISHED agt-cli dist once the artifact carrying the host-side
35144
+ // reader exists, never guessed — auto-resume.ts is host-side, so an
35145
+ // under-`since` host has no consumer for this flag and a guessed value makes
35146
+ // the flip-reach modal promise reach it does not have (the defect caught on
35147
+ // ENG-8344 / PR #4014). Precedent for the bisect method: slack-hot-thread-guard
35148
+ // = 0.28.339, slack-scheduled-channel-guard = 0.28.421. Setting it later is
35149
+ // safe: `since` is excluded from projectDefinition, so it does not roll
35150
+ // FLAGS_SCHEMA_VERSION.
35151
+ },
35122
35152
  {
35123
35153
  key: "memory-extraction",
35124
35154
  description: "Host-side durable-memory extraction (ENG-6200): the manager extracts candidate memories from completed conversations and POSTs them to /host/memories/candidates, which writes dream_log via promoteCandidates. Post persistent-session cutover this is the ONLY live consolidation path. Boolean gate; ships dark \u2014 when off the manager runs no extraction, so 0 dream_log rows fleet-wide is the expected steady state until it is armed.",
@@ -35641,6 +35671,54 @@ var FLAG_REGISTRY = [
35641
35671
  // Turning this on lets agents originate proposals that create customer
35642
35672
  // infrastructure once approved — same posture as augmented-support-writes.
35643
35673
  sensitive: true
35674
+ },
35675
+ {
35676
+ key: "github-broker-credentials",
35677
+ description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
35678
+ flagType: "boolean",
35679
+ // Declared safe value is `false` = today's env delivery. Fail-safe direction:
35680
+ // a flag-DB read error must never strip `git`/`gh` credentials off a live
35681
+ // agent, which is what the ON path does when its host has no helper writer.
35682
+ defaultValue: false,
35683
+ // Flipping ON changes how every GitHub App agent on the scope authenticates
35684
+ // `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
35685
+ // confirmed action (ADR-0022 §4).
35686
+ sensitive: true,
35687
+ // Set even though the flag is evaluated centrally, because `since` is a
35688
+ // REACH threshold ("a host this old has no consumer code for the flag") and
35689
+ // that is exactly the hazard here: the host does not read the flag, but it
35690
+ // does need the claudecode adapter's helper/shim writer and the wrapper PATH
35691
+ // prepend. On a host too old for those, the API would stop shipping the
35692
+ // token and NOTHING would replace it. Without `since` the flip-reach modal
35693
+ // reports FULL reach and hides that.
35694
+ //
35695
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
35696
+ // The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
35697
+ // `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
35698
+ // artifacts, which is only possible AFTER this merges and publishes. A
35699
+ // pre-merge guess cannot be right, and the two directions are not
35700
+ // symmetric:
35701
+ // - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
35702
+ // - too LOW -> hosts classify `honors` while carrying NO helper writer,
35703
+ // the modal promises full reach, and a flip strips `git`/
35704
+ // `gh` credentials with nothing replacing them. Outage.
35705
+ // So this is pinned ABOVE every published release on purpose: it classifies
35706
+ // EVERY host as `stale`, so the modal reports no reach rather than reach it
35707
+ // has no basis for. That is the intended pre-bisect state.
35708
+ //
35709
+ // BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
35710
+ // `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
35711
+ // modal. `evaluate.ts` never reads it and neither does the override write
35712
+ // path. The placeholder therefore changes what an operator is TOLD; it does
35713
+ // not stop a flip on an under-`since` host. What actually holds the line
35714
+ // here is `defaultValue: false` plus `sensitive: true` plus the runbook.
35715
+ //
35716
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
35717
+ // first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
35718
+ // prepends it, then replace this with that exact version. The rollout
35719
+ // runbook gates on it. Leaving the placeholder in place is safe (nothing
35720
+ // flips); shipping a guessed number is not.
35721
+ since: "0.29.0"
35644
35722
  }
35645
35723
  ];
35646
35724
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
@@ -35445,6 +35445,36 @@ var FLAG_REGISTRY = [
35445
35445
  // AGT_RESUME_RECONCILER_ENABLED set keeps that value until the env is retired.
35446
35446
  envVar: "AGT_RESUME_RECONCILER_ENABLED"
35447
35447
  },
35448
+ {
35449
+ key: "auto-resume-enabled",
35450
+ description: "DO NOT ARM YET (ENG-8395): this flag has no `since` set until a follow-up bisects it from the published agt-cli dist, and an unset `since` makes the flip-reach estimate report FULL reach for a reader that is host-side \u2014 it will tell you a flip reached hosts that have no code to honour it. Arm only once that follow-up has landed. Bounded BLIND auto-resume for circuit-breaker pauses (ENG-6088): at most one unattended resume per trip cycle, fired once the trip driver has been quiet for the configured window and only for provisioning-reload trips (the ENG-7577 class gate \u2014 a crash-class trip still needs an operator). Superseded wherever `resume-reconciler` is on: that path proves the dependency recovered instead of assuming it, and the blind timer is its flag-off fallback. Boolean gate; ships dark. ENG-8395 promoted this from a raw host env var because AGT_AUTO_RESUME_ENABLED lives in the host env file, so its grain is per-HOST \u2014 one flip arms every agent that host runs (agt-aws-1 carries 14), which made the canary-then-fleet rollout its own documentation prescribes impossible. As a registry flag it resolves per org/team/host/AGENT, so one agent can genuinely be cut over first. Read host-side by the manager (agt-cli), not centrally.",
35451
+ flagType: "boolean",
35452
+ // Declared safe value is `false` — identical to today's behaviour on a host
35453
+ // that has never set the env var. Fail-safe direction on a flag-DB read
35454
+ // error is "no unattended resume of a paused agent".
35455
+ defaultValue: false,
35456
+ // Migration override (ADR-0022) — KEPT, not swapped (ENG-8395 is an addition).
35457
+ // The pre-flags env gate stays the highest-precedence operator override so a
35458
+ // host already running with AGT_AUTO_RESUME_ENABLED set keeps that value, and
35459
+ // so an operator retains a host-local escape hatch that needs no control-plane
35460
+ // round-trip. Note the host reader accepts a slightly WIDER truthy vocabulary
35461
+ // than coerceEnvValue (it also honours the legacy yes/on/no/off spellings);
35462
+ // both agree on true/1/false/0, and the reader is the authority for this gate.
35463
+ envVar: "AGT_AUTO_RESUME_ENABLED",
35464
+ // An unattended resume is a real availability change — the agent starts
35465
+ // spawning sessions again with no human in the loop — so arming it is a
35466
+ // deliberate, confirmed write (ADR-0022 sensitive-flag confirm).
35467
+ sensitive: true
35468
+ // ENG-8395 AC5: `since` is deliberately UNSET at merge. It must be bisected
35469
+ // from the PUBLISHED agt-cli dist once the artifact carrying the host-side
35470
+ // reader exists, never guessed — auto-resume.ts is host-side, so an
35471
+ // under-`since` host has no consumer for this flag and a guessed value makes
35472
+ // the flip-reach modal promise reach it does not have (the defect caught on
35473
+ // ENG-8344 / PR #4014). Precedent for the bisect method: slack-hot-thread-guard
35474
+ // = 0.28.339, slack-scheduled-channel-guard = 0.28.421. Setting it later is
35475
+ // safe: `since` is excluded from projectDefinition, so it does not roll
35476
+ // FLAGS_SCHEMA_VERSION.
35477
+ },
35448
35478
  {
35449
35479
  key: "memory-extraction",
35450
35480
  description: "Host-side durable-memory extraction (ENG-6200): the manager extracts candidate memories from completed conversations and POSTs them to /host/memories/candidates, which writes dream_log via promoteCandidates. Post persistent-session cutover this is the ONLY live consolidation path. Boolean gate; ships dark \u2014 when off the manager runs no extraction, so 0 dream_log rows fleet-wide is the expected steady state until it is armed.",
@@ -35967,6 +35997,54 @@ var FLAG_REGISTRY = [
35967
35997
  // Turning this on lets agents originate proposals that create customer
35968
35998
  // infrastructure once approved — same posture as augmented-support-writes.
35969
35999
  sensitive: true
36000
+ },
36001
+ {
36002
+ key: "github-broker-credentials",
36003
+ description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
36004
+ flagType: "boolean",
36005
+ // Declared safe value is `false` = today's env delivery. Fail-safe direction:
36006
+ // a flag-DB read error must never strip `git`/`gh` credentials off a live
36007
+ // agent, which is what the ON path does when its host has no helper writer.
36008
+ defaultValue: false,
36009
+ // Flipping ON changes how every GitHub App agent on the scope authenticates
36010
+ // `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
36011
+ // confirmed action (ADR-0022 §4).
36012
+ sensitive: true,
36013
+ // Set even though the flag is evaluated centrally, because `since` is a
36014
+ // REACH threshold ("a host this old has no consumer code for the flag") and
36015
+ // that is exactly the hazard here: the host does not read the flag, but it
36016
+ // does need the claudecode adapter's helper/shim writer and the wrapper PATH
36017
+ // prepend. On a host too old for those, the API would stop shipping the
36018
+ // token and NOTHING would replace it. Without `since` the flip-reach modal
36019
+ // reports FULL reach and hides that.
36020
+ //
36021
+ // DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
36022
+ // The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
36023
+ // `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
36024
+ // artifacts, which is only possible AFTER this merges and publishes. A
36025
+ // pre-merge guess cannot be right, and the two directions are not
36026
+ // symmetric:
36027
+ // - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
36028
+ // - too LOW -> hosts classify `honors` while carrying NO helper writer,
36029
+ // the modal promises full reach, and a flip strips `git`/
36030
+ // `gh` credentials with nothing replacing them. Outage.
36031
+ // So this is pinned ABOVE every published release on purpose: it classifies
36032
+ // EVERY host as `stale`, so the modal reports no reach rather than reach it
36033
+ // has no basis for. That is the intended pre-bisect state.
36034
+ //
36035
+ // BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
36036
+ // `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
36037
+ // modal. `evaluate.ts` never reads it and neither does the override write
36038
+ // path. The placeholder therefore changes what an operator is TOLD; it does
36039
+ // not stop a flip on an under-`since` host. What actually holds the line
36040
+ // here is `defaultValue: false` plus `sensitive: true` plus the runbook.
36041
+ //
36042
+ // BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
36043
+ // first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
36044
+ // prepends it, then replace this with that exact version. The rollout
36045
+ // runbook gates on it. Leaving the placeholder in place is safe (nothing
36046
+ // flips); shipping a guessed number is not.
36047
+ since: "0.29.0"
35970
36048
  }
35971
36049
  ];
35972
36050
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
@@ -37,7 +37,7 @@ import {
37
37
  writeDirectChatSessionState,
38
38
  writeEgressAllowlist,
39
39
  writePersistentClaudeWrapper
40
- } from "./chunk-SMHHGXI5.js";
40
+ } from "./chunk-LNPJI2AE.js";
41
41
  import "./chunk-XWVM4KPK.js";
42
42
  export {
43
43
  EGRESS_BASELINE_DOMAINS,
@@ -79,4 +79,4 @@ export {
79
79
  writeEgressAllowlist,
80
80
  writePersistentClaudeWrapper
81
81
  };
82
- //# sourceMappingURL=persistent-session-RAXQFDPB.js.map
82
+ //# sourceMappingURL=persistent-session-VX37ESOS.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-SMHHGXI5.js";
3
+ } from "./chunk-LNPJI2AE.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -662,4 +662,4 @@ export {
662
662
  readAndResetSlackReplyBindingClassifications,
663
663
  readAndResetSlackReplyTargetClassifications
664
664
  };
665
- //# sourceMappingURL=responsiveness-probe-PBWABVLJ.js.map
665
+ //# sourceMappingURL=responsiveness-probe-5MEW5XNI.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.506",
3
+ "version": "0.28.508",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {