@integrity-labs/agt-cli 0.28.670 → 0.28.672
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/dist/bin/agt.js +6 -6
- package/dist/bin/agt.js.map +1 -1
- package/dist/{chunk-Z4O42VGJ.js → chunk-EX6INJDG.js} +20 -76
- package/dist/chunk-EX6INJDG.js.map +1 -0
- package/dist/{chunk-5GDKWIB3.js → chunk-YAVWYI5S.js} +126 -15
- package/dist/chunk-YAVWYI5S.js.map +1 -0
- package/dist/{chunk-HGVJVYKW.js → chunk-YOID6KOQ.js} +43 -1
- package/dist/chunk-YOID6KOQ.js.map +1 -0
- package/dist/{claude-pair-runtime-W6KBVHK4.js → claude-pair-runtime-UZ2JB2KY.js} +2 -2
- package/dist/lib/manager-worker.js +52 -20
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/direct-chat-channel.js +42 -0
- package/dist/mcp/index.js +42 -0
- package/dist/mcp/origami.js +42 -0
- package/dist/mcp/slack-channel.js +42 -0
- package/dist/mcp/telegram-channel.js +42 -0
- package/dist/{persistent-session-RZH67PNC.js → persistent-session-PYAJ4VJW.js} +3 -3
- package/dist/{responsiveness-probe-NPNMNOFF.js → responsiveness-probe-5I2LIVCA.js} +3 -3
- package/dist/{session-auth-dead-CFAYSZ43.js → session-auth-dead-NUX643UJ.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-5GDKWIB3.js.map +0 -1
- package/dist/chunk-HGVJVYKW.js.map +0 -1
- package/dist/chunk-Z4O42VGJ.js.map +0 -1
- /package/dist/{claude-pair-runtime-W6KBVHK4.js.map → claude-pair-runtime-UZ2JB2KY.js.map} +0 -0
- /package/dist/{persistent-session-RZH67PNC.js.map → persistent-session-PYAJ4VJW.js.map} +0 -0
- /package/dist/{responsiveness-probe-NPNMNOFF.js.map → responsiveness-probe-5I2LIVCA.js.map} +0 -0
- /package/dist/{session-auth-dead-CFAYSZ43.js.map → session-auth-dead-NUX643UJ.js.map} +0 -0
|
@@ -36456,6 +36456,27 @@ var FLAG_REGISTRY = [
|
|
|
36456
36456
|
// consumed by the manager's own logic, not an in-container MCP, so no env materialization.
|
|
36457
36457
|
defaultValue: false
|
|
36458
36458
|
},
|
|
36459
|
+
{
|
|
36460
|
+
key: "spawn-inject-channel-secrets",
|
|
36461
|
+
description: "ENG-9350 (host key-management hardening, epic ENG-9347): deliver a managed agent's channel bot tokens (SLACK_BOT_TOKEN, SLACK_APP_TOKEN, TELEGRAM_BOT_TOKEN, MSTEAMS_CLIENT_SECRET) into the Claude Code spawn env via `tmux new-session -e KEY=VALUE` (the same posture as ANTHROPIC_API_KEY / AGT_API_KEY) instead of writing them as plaintext to the on-disk `.env.integrations` file. ON = the manager injects the four channel secrets at spawn and evicts them from `.env.integrations`; the `.mcp.json` `${VAR}` templates are unchanged and now resolve from the spawn env, so the value never touches persistent EBS (and, under Docker isolation, is name-only forwarded into the container the same way AGT_API_KEY is). OFF (default) = today's behaviour, byte-for-byte: the tokens are written to `.env.integrations` (0600) and the wrapper sources them. Resolved host-side by the manager via hostFlagStore().getBooleanForAgent \u2014 the manager owns the spawn path, so no in-container MCP reads this; it materializes the VALUES, not the flag. A channel- token rotation already forces a session respawn (ENG-6062), so the injected value is bound at the same moment the file value used to be \u2014 the two paths are behaviourally equivalent, this one just keeps the plaintext off disk. Ships dark; flip per-agent/ host to soak before fleet convergence, flip OFF to fall back to the file path instantly without a code rollback. Integration credentials + the OAuth remote-MCP live-read proxy deliberately stay on the file (later slices / a permanent bounded carve-out, ADR-0062 Part 5).",
|
|
36462
|
+
flagType: "boolean",
|
|
36463
|
+
// Declared safe value is `false`: the current on-disk `.env.integrations` delivery,
|
|
36464
|
+
// byte-for-byte. `false` is also the fail-safe direction — a flag-store read error must
|
|
36465
|
+
// never silently move a fleet onto the spawn-env path (a bug there = a channel with no
|
|
36466
|
+
// token = a silently dead channel). Net-new gate consumed by the manager's own spawn
|
|
36467
|
+
// logic, not an in-container MCP, so registry-only with NO envVar materialization
|
|
36468
|
+
// (mirrors scheduled-task-nudge-durable). Turning it ON removes plaintext at rest.
|
|
36469
|
+
defaultValue: false,
|
|
36470
|
+
// ENG-7997 flip-reach estimate: `since` is the first agt-cli build whose
|
|
36471
|
+
// dist carries this host-side reader. That build is the one THIS PR's merge
|
|
36472
|
+
// auto-publishes — unknown until then, and every already-published version
|
|
36473
|
+
// (0.28.x) demonstrably lacks the reader (CodeRabbit npm-pack check). An
|
|
36474
|
+
// UNREACHABLE placeholder is the fail-safe: the reach estimate counts zero
|
|
36475
|
+
// hosts as honoring the flip (rather than over-claiming that 0.28.x hosts do,
|
|
36476
|
+
// while they still write tokens to disk). MUST be updated to the actual
|
|
36477
|
+
// published version once the release lands (tracked on ENG-9350).
|
|
36478
|
+
since: "99.0.0"
|
|
36479
|
+
},
|
|
36459
36480
|
{
|
|
36460
36481
|
key: "scheduled-task-confirmation-card",
|
|
36461
36482
|
description: `Post the \u{1F44D}/\u{1F44E} "Task complete?" kanban confirmation card for completed scheduled_task runs (ENG-4576 / ENG-6048). OFF (default) kills these cards fleet-wide: ENG-8072 found they mis-thread onto the run's captured slack_delivery, which in the persistent-session model is frequently a conversational reply rather than the task's own output - so a routine cron's confirmation card lands in an unrelated human thread (e.g. a half-hourly reconciliation card posted into a "you're back online" DM), and a clean cron emits a human \u{1F44D}/\u{1F44E} prompt on every tick regardless. The card was net-negative, so it is disabled by default. Turn it ON per org to restore scheduled-task ratings for a customer who wants them (e.g. a daily digest delivered to a channel). Evaluated per-org in the API (POST /host/runs/finish + the manager rating-prompt route) via getEvaluatedFlags(); the decision is passed into postScheduledTaskKanbanConfirmation. API-only gate - no host env materialization. Ships dark (cards off).`,
|
|
@@ -36599,6 +36620,27 @@ var FLAG_REGISTRY = [
|
|
|
36599
36620
|
// never auto-attach an integration nobody asked for, and both ENG-8332
|
|
36600
36621
|
// prerequisites above are still open.
|
|
36601
36622
|
defaultValue: false
|
|
36623
|
+
},
|
|
36624
|
+
{
|
|
36625
|
+
key: "host-right-sizing",
|
|
36626
|
+
description: 'ADR-0072. Gates the HostRightSizer cron, which evaluates every managed EC2 host against 7 days of memory and CPU and (at enforce) resizes it one rung inside the host\'s own maintenance window. off = the cron returns immediately: nothing is read, nothing is written. shadow = evaluate, persist a verdict row per host, and post the weekly summary \u2014 NO resize, and no actor code runs. enforce = as shadow, plus enqueue resizes. AS OF PHASE 1 (ENG-9324) THERE IS NO ACTOR, SO `enforce` BEHAVES EXACTLY LIKE `shadow`: selecting it records the mode on each verdict row and changes nothing else, and no host is resized. This note comes out when the Phase 3 actor lands; until then treat enforce as shadow-with-a-label, not as an armed fleet. Ships dark: this mechanism ends in a stop/start of a customer production host, so an unreachable flag store must resolve to NOT acting. TWO BOUNDS WORTH KNOWING BEFORE FLIPPING. (1) off is not a stop button for in-flight work \u2014 HostResizeDispatcher reads only ec2_pending_instance_type and knows nothing about this flag, so flipping to off stops new enqueues and lets every already-enqueued host complete its stop/modify/start; combined with the ~5-minute eval cache the true blast unit is one tick of open windows. A real kill switch has to live inside the dispatcher. (2) BYO hosts (ADR-0028) are EXCLUDED in Phase 1, not merely clamped to shadow: their instances live in the customer AWS account while the cron authenticates only with the platform provisioner role, so their metrics read as empty and every evaluation would land as unknown. ADR-0072 \xA79 intends them to be shadow-only ("we recommend; they resize") and making that real needs the per-host cross_account_role_arn resolved - its own slice. Pool hosts (ADR-0042) are excluded too, while host_kind is unset in prod. Both are eligibility predicates applied by the cron, documented here so the admin page showing enforce for such an org is not read as behaviour.',
|
|
36627
|
+
flagType: "enum",
|
|
36628
|
+
allowedValues: ["off", "shadow", "enforce"],
|
|
36629
|
+
// Ships dark at `off`, NOT `shadow`. Diverging deliberately from
|
|
36630
|
+
// slack-scheduled-channel-guard, whose shadow is a free local log line:
|
|
36631
|
+
// THIS shadow spends a fleet-wide CloudWatch GetMetricData sweep per tick
|
|
36632
|
+
// and writes a row per host, so defaulting to shadow would newly bill and
|
|
36633
|
+
// newly write for every org that never opted in. shadow is the per-canary
|
|
36634
|
+
// opt-in; enforce is the audited flip after the Phase 2 review.
|
|
36635
|
+
defaultValue: "off",
|
|
36636
|
+
// Evaluated centrally, in the API cron — there is no host-side reader, so
|
|
36637
|
+
// no `since` and no dependence on fleet agt-cli convergence.
|
|
36638
|
+
// NOTE: deliberately NO envVar. ADR-0072 §9 wants this gate scoped per
|
|
36639
|
+
// org/host, and an envVar would be highest-precedence (ADR-0022) — a
|
|
36640
|
+
// literal in sst.config.ts would pin every stage and make the admin page a
|
|
36641
|
+
// control that does nothing, which is the ENG-8303 class exactly.
|
|
36642
|
+
// enforce arms automated downtime on a customer's production host.
|
|
36643
|
+
sensitive: true
|
|
36602
36644
|
}
|
|
36603
36645
|
];
|
|
36604
36646
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
package/dist/mcp/index.js
CHANGED
|
@@ -43395,6 +43395,27 @@ var FLAG_REGISTRY = [
|
|
|
43395
43395
|
// consumed by the manager's own logic, not an in-container MCP, so no env materialization.
|
|
43396
43396
|
defaultValue: false
|
|
43397
43397
|
},
|
|
43398
|
+
{
|
|
43399
|
+
key: "spawn-inject-channel-secrets",
|
|
43400
|
+
description: "ENG-9350 (host key-management hardening, epic ENG-9347): deliver a managed agent's channel bot tokens (SLACK_BOT_TOKEN, SLACK_APP_TOKEN, TELEGRAM_BOT_TOKEN, MSTEAMS_CLIENT_SECRET) into the Claude Code spawn env via `tmux new-session -e KEY=VALUE` (the same posture as ANTHROPIC_API_KEY / AGT_API_KEY) instead of writing them as plaintext to the on-disk `.env.integrations` file. ON = the manager injects the four channel secrets at spawn and evicts them from `.env.integrations`; the `.mcp.json` `${VAR}` templates are unchanged and now resolve from the spawn env, so the value never touches persistent EBS (and, under Docker isolation, is name-only forwarded into the container the same way AGT_API_KEY is). OFF (default) = today's behaviour, byte-for-byte: the tokens are written to `.env.integrations` (0600) and the wrapper sources them. Resolved host-side by the manager via hostFlagStore().getBooleanForAgent \u2014 the manager owns the spawn path, so no in-container MCP reads this; it materializes the VALUES, not the flag. A channel- token rotation already forces a session respawn (ENG-6062), so the injected value is bound at the same moment the file value used to be \u2014 the two paths are behaviourally equivalent, this one just keeps the plaintext off disk. Ships dark; flip per-agent/ host to soak before fleet convergence, flip OFF to fall back to the file path instantly without a code rollback. Integration credentials + the OAuth remote-MCP live-read proxy deliberately stay on the file (later slices / a permanent bounded carve-out, ADR-0062 Part 5).",
|
|
43401
|
+
flagType: "boolean",
|
|
43402
|
+
// Declared safe value is `false`: the current on-disk `.env.integrations` delivery,
|
|
43403
|
+
// byte-for-byte. `false` is also the fail-safe direction — a flag-store read error must
|
|
43404
|
+
// never silently move a fleet onto the spawn-env path (a bug there = a channel with no
|
|
43405
|
+
// token = a silently dead channel). Net-new gate consumed by the manager's own spawn
|
|
43406
|
+
// logic, not an in-container MCP, so registry-only with NO envVar materialization
|
|
43407
|
+
// (mirrors scheduled-task-nudge-durable). Turning it ON removes plaintext at rest.
|
|
43408
|
+
defaultValue: false,
|
|
43409
|
+
// ENG-7997 flip-reach estimate: `since` is the first agt-cli build whose
|
|
43410
|
+
// dist carries this host-side reader. That build is the one THIS PR's merge
|
|
43411
|
+
// auto-publishes — unknown until then, and every already-published version
|
|
43412
|
+
// (0.28.x) demonstrably lacks the reader (CodeRabbit npm-pack check). An
|
|
43413
|
+
// UNREACHABLE placeholder is the fail-safe: the reach estimate counts zero
|
|
43414
|
+
// hosts as honoring the flip (rather than over-claiming that 0.28.x hosts do,
|
|
43415
|
+
// while they still write tokens to disk). MUST be updated to the actual
|
|
43416
|
+
// published version once the release lands (tracked on ENG-9350).
|
|
43417
|
+
since: "99.0.0"
|
|
43418
|
+
},
|
|
43398
43419
|
{
|
|
43399
43420
|
key: "scheduled-task-confirmation-card",
|
|
43400
43421
|
description: `Post the \u{1F44D}/\u{1F44E} "Task complete?" kanban confirmation card for completed scheduled_task runs (ENG-4576 / ENG-6048). OFF (default) kills these cards fleet-wide: ENG-8072 found they mis-thread onto the run's captured slack_delivery, which in the persistent-session model is frequently a conversational reply rather than the task's own output - so a routine cron's confirmation card lands in an unrelated human thread (e.g. a half-hourly reconciliation card posted into a "you're back online" DM), and a clean cron emits a human \u{1F44D}/\u{1F44E} prompt on every tick regardless. The card was net-negative, so it is disabled by default. Turn it ON per org to restore scheduled-task ratings for a customer who wants them (e.g. a daily digest delivered to a channel). Evaluated per-org in the API (POST /host/runs/finish + the manager rating-prompt route) via getEvaluatedFlags(); the decision is passed into postScheduledTaskKanbanConfirmation. API-only gate - no host env materialization. Ships dark (cards off).`,
|
|
@@ -43538,6 +43559,27 @@ var FLAG_REGISTRY = [
|
|
|
43538
43559
|
// never auto-attach an integration nobody asked for, and both ENG-8332
|
|
43539
43560
|
// prerequisites above are still open.
|
|
43540
43561
|
defaultValue: false
|
|
43562
|
+
},
|
|
43563
|
+
{
|
|
43564
|
+
key: "host-right-sizing",
|
|
43565
|
+
description: 'ADR-0072. Gates the HostRightSizer cron, which evaluates every managed EC2 host against 7 days of memory and CPU and (at enforce) resizes it one rung inside the host\'s own maintenance window. off = the cron returns immediately: nothing is read, nothing is written. shadow = evaluate, persist a verdict row per host, and post the weekly summary \u2014 NO resize, and no actor code runs. enforce = as shadow, plus enqueue resizes. AS OF PHASE 1 (ENG-9324) THERE IS NO ACTOR, SO `enforce` BEHAVES EXACTLY LIKE `shadow`: selecting it records the mode on each verdict row and changes nothing else, and no host is resized. This note comes out when the Phase 3 actor lands; until then treat enforce as shadow-with-a-label, not as an armed fleet. Ships dark: this mechanism ends in a stop/start of a customer production host, so an unreachable flag store must resolve to NOT acting. TWO BOUNDS WORTH KNOWING BEFORE FLIPPING. (1) off is not a stop button for in-flight work \u2014 HostResizeDispatcher reads only ec2_pending_instance_type and knows nothing about this flag, so flipping to off stops new enqueues and lets every already-enqueued host complete its stop/modify/start; combined with the ~5-minute eval cache the true blast unit is one tick of open windows. A real kill switch has to live inside the dispatcher. (2) BYO hosts (ADR-0028) are EXCLUDED in Phase 1, not merely clamped to shadow: their instances live in the customer AWS account while the cron authenticates only with the platform provisioner role, so their metrics read as empty and every evaluation would land as unknown. ADR-0072 \xA79 intends them to be shadow-only ("we recommend; they resize") and making that real needs the per-host cross_account_role_arn resolved - its own slice. Pool hosts (ADR-0042) are excluded too, while host_kind is unset in prod. Both are eligibility predicates applied by the cron, documented here so the admin page showing enforce for such an org is not read as behaviour.',
|
|
43566
|
+
flagType: "enum",
|
|
43567
|
+
allowedValues: ["off", "shadow", "enforce"],
|
|
43568
|
+
// Ships dark at `off`, NOT `shadow`. Diverging deliberately from
|
|
43569
|
+
// slack-scheduled-channel-guard, whose shadow is a free local log line:
|
|
43570
|
+
// THIS shadow spends a fleet-wide CloudWatch GetMetricData sweep per tick
|
|
43571
|
+
// and writes a row per host, so defaulting to shadow would newly bill and
|
|
43572
|
+
// newly write for every org that never opted in. shadow is the per-canary
|
|
43573
|
+
// opt-in; enforce is the audited flip after the Phase 2 review.
|
|
43574
|
+
defaultValue: "off",
|
|
43575
|
+
// Evaluated centrally, in the API cron — there is no host-side reader, so
|
|
43576
|
+
// no `since` and no dependence on fleet agt-cli convergence.
|
|
43577
|
+
// NOTE: deliberately NO envVar. ADR-0072 §9 wants this gate scoped per
|
|
43578
|
+
// org/host, and an envVar would be highest-precedence (ADR-0022) — a
|
|
43579
|
+
// literal in sst.config.ts would pin every stage and make the admin page a
|
|
43580
|
+
// control that does nothing, which is the ENG-8303 class exactly.
|
|
43581
|
+
// enforce arms automated downtime on a customer's production host.
|
|
43582
|
+
sensitive: true
|
|
43541
43583
|
}
|
|
43542
43584
|
];
|
|
43543
43585
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
package/dist/mcp/origami.js
CHANGED
|
@@ -42206,6 +42206,27 @@ var FLAG_REGISTRY = [
|
|
|
42206
42206
|
// consumed by the manager's own logic, not an in-container MCP, so no env materialization.
|
|
42207
42207
|
defaultValue: false
|
|
42208
42208
|
},
|
|
42209
|
+
{
|
|
42210
|
+
key: "spawn-inject-channel-secrets",
|
|
42211
|
+
description: "ENG-9350 (host key-management hardening, epic ENG-9347): deliver a managed agent's channel bot tokens (SLACK_BOT_TOKEN, SLACK_APP_TOKEN, TELEGRAM_BOT_TOKEN, MSTEAMS_CLIENT_SECRET) into the Claude Code spawn env via `tmux new-session -e KEY=VALUE` (the same posture as ANTHROPIC_API_KEY / AGT_API_KEY) instead of writing them as plaintext to the on-disk `.env.integrations` file. ON = the manager injects the four channel secrets at spawn and evicts them from `.env.integrations`; the `.mcp.json` `${VAR}` templates are unchanged and now resolve from the spawn env, so the value never touches persistent EBS (and, under Docker isolation, is name-only forwarded into the container the same way AGT_API_KEY is). OFF (default) = today's behaviour, byte-for-byte: the tokens are written to `.env.integrations` (0600) and the wrapper sources them. Resolved host-side by the manager via hostFlagStore().getBooleanForAgent \u2014 the manager owns the spawn path, so no in-container MCP reads this; it materializes the VALUES, not the flag. A channel- token rotation already forces a session respawn (ENG-6062), so the injected value is bound at the same moment the file value used to be \u2014 the two paths are behaviourally equivalent, this one just keeps the plaintext off disk. Ships dark; flip per-agent/ host to soak before fleet convergence, flip OFF to fall back to the file path instantly without a code rollback. Integration credentials + the OAuth remote-MCP live-read proxy deliberately stay on the file (later slices / a permanent bounded carve-out, ADR-0062 Part 5).",
|
|
42212
|
+
flagType: "boolean",
|
|
42213
|
+
// Declared safe value is `false`: the current on-disk `.env.integrations` delivery,
|
|
42214
|
+
// byte-for-byte. `false` is also the fail-safe direction — a flag-store read error must
|
|
42215
|
+
// never silently move a fleet onto the spawn-env path (a bug there = a channel with no
|
|
42216
|
+
// token = a silently dead channel). Net-new gate consumed by the manager's own spawn
|
|
42217
|
+
// logic, not an in-container MCP, so registry-only with NO envVar materialization
|
|
42218
|
+
// (mirrors scheduled-task-nudge-durable). Turning it ON removes plaintext at rest.
|
|
42219
|
+
defaultValue: false,
|
|
42220
|
+
// ENG-7997 flip-reach estimate: `since` is the first agt-cli build whose
|
|
42221
|
+
// dist carries this host-side reader. That build is the one THIS PR's merge
|
|
42222
|
+
// auto-publishes — unknown until then, and every already-published version
|
|
42223
|
+
// (0.28.x) demonstrably lacks the reader (CodeRabbit npm-pack check). An
|
|
42224
|
+
// UNREACHABLE placeholder is the fail-safe: the reach estimate counts zero
|
|
42225
|
+
// hosts as honoring the flip (rather than over-claiming that 0.28.x hosts do,
|
|
42226
|
+
// while they still write tokens to disk). MUST be updated to the actual
|
|
42227
|
+
// published version once the release lands (tracked on ENG-9350).
|
|
42228
|
+
since: "99.0.0"
|
|
42229
|
+
},
|
|
42209
42230
|
{
|
|
42210
42231
|
key: "scheduled-task-confirmation-card",
|
|
42211
42232
|
description: `Post the \u{1F44D}/\u{1F44E} "Task complete?" kanban confirmation card for completed scheduled_task runs (ENG-4576 / ENG-6048). OFF (default) kills these cards fleet-wide: ENG-8072 found they mis-thread onto the run's captured slack_delivery, which in the persistent-session model is frequently a conversational reply rather than the task's own output - so a routine cron's confirmation card lands in an unrelated human thread (e.g. a half-hourly reconciliation card posted into a "you're back online" DM), and a clean cron emits a human \u{1F44D}/\u{1F44E} prompt on every tick regardless. The card was net-negative, so it is disabled by default. Turn it ON per org to restore scheduled-task ratings for a customer who wants them (e.g. a daily digest delivered to a channel). Evaluated per-org in the API (POST /host/runs/finish + the manager rating-prompt route) via getEvaluatedFlags(); the decision is passed into postScheduledTaskKanbanConfirmation. API-only gate - no host env materialization. Ships dark (cards off).`,
|
|
@@ -42349,6 +42370,27 @@ var FLAG_REGISTRY = [
|
|
|
42349
42370
|
// never auto-attach an integration nobody asked for, and both ENG-8332
|
|
42350
42371
|
// prerequisites above are still open.
|
|
42351
42372
|
defaultValue: false
|
|
42373
|
+
},
|
|
42374
|
+
{
|
|
42375
|
+
key: "host-right-sizing",
|
|
42376
|
+
description: 'ADR-0072. Gates the HostRightSizer cron, which evaluates every managed EC2 host against 7 days of memory and CPU and (at enforce) resizes it one rung inside the host\'s own maintenance window. off = the cron returns immediately: nothing is read, nothing is written. shadow = evaluate, persist a verdict row per host, and post the weekly summary \u2014 NO resize, and no actor code runs. enforce = as shadow, plus enqueue resizes. AS OF PHASE 1 (ENG-9324) THERE IS NO ACTOR, SO `enforce` BEHAVES EXACTLY LIKE `shadow`: selecting it records the mode on each verdict row and changes nothing else, and no host is resized. This note comes out when the Phase 3 actor lands; until then treat enforce as shadow-with-a-label, not as an armed fleet. Ships dark: this mechanism ends in a stop/start of a customer production host, so an unreachable flag store must resolve to NOT acting. TWO BOUNDS WORTH KNOWING BEFORE FLIPPING. (1) off is not a stop button for in-flight work \u2014 HostResizeDispatcher reads only ec2_pending_instance_type and knows nothing about this flag, so flipping to off stops new enqueues and lets every already-enqueued host complete its stop/modify/start; combined with the ~5-minute eval cache the true blast unit is one tick of open windows. A real kill switch has to live inside the dispatcher. (2) BYO hosts (ADR-0028) are EXCLUDED in Phase 1, not merely clamped to shadow: their instances live in the customer AWS account while the cron authenticates only with the platform provisioner role, so their metrics read as empty and every evaluation would land as unknown. ADR-0072 \xA79 intends them to be shadow-only ("we recommend; they resize") and making that real needs the per-host cross_account_role_arn resolved - its own slice. Pool hosts (ADR-0042) are excluded too, while host_kind is unset in prod. Both are eligibility predicates applied by the cron, documented here so the admin page showing enforce for such an org is not read as behaviour.',
|
|
42377
|
+
flagType: "enum",
|
|
42378
|
+
allowedValues: ["off", "shadow", "enforce"],
|
|
42379
|
+
// Ships dark at `off`, NOT `shadow`. Diverging deliberately from
|
|
42380
|
+
// slack-scheduled-channel-guard, whose shadow is a free local log line:
|
|
42381
|
+
// THIS shadow spends a fleet-wide CloudWatch GetMetricData sweep per tick
|
|
42382
|
+
// and writes a row per host, so defaulting to shadow would newly bill and
|
|
42383
|
+
// newly write for every org that never opted in. shadow is the per-canary
|
|
42384
|
+
// opt-in; enforce is the audited flip after the Phase 2 review.
|
|
42385
|
+
defaultValue: "off",
|
|
42386
|
+
// Evaluated centrally, in the API cron — there is no host-side reader, so
|
|
42387
|
+
// no `since` and no dependence on fleet agt-cli convergence.
|
|
42388
|
+
// NOTE: deliberately NO envVar. ADR-0072 §9 wants this gate scoped per
|
|
42389
|
+
// org/host, and an envVar would be highest-precedence (ADR-0022) — a
|
|
42390
|
+
// literal in sst.config.ts would pin every stage and make the admin page a
|
|
42391
|
+
// control that does nothing, which is the ENG-8303 class exactly.
|
|
42392
|
+
// enforce arms automated downtime on a customer's production host.
|
|
42393
|
+
sensitive: true
|
|
42352
42394
|
}
|
|
42353
42395
|
];
|
|
42354
42396
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -36689,6 +36689,27 @@ var FLAG_REGISTRY = [
|
|
|
36689
36689
|
// consumed by the manager's own logic, not an in-container MCP, so no env materialization.
|
|
36690
36690
|
defaultValue: false
|
|
36691
36691
|
},
|
|
36692
|
+
{
|
|
36693
|
+
key: "spawn-inject-channel-secrets",
|
|
36694
|
+
description: "ENG-9350 (host key-management hardening, epic ENG-9347): deliver a managed agent's channel bot tokens (SLACK_BOT_TOKEN, SLACK_APP_TOKEN, TELEGRAM_BOT_TOKEN, MSTEAMS_CLIENT_SECRET) into the Claude Code spawn env via `tmux new-session -e KEY=VALUE` (the same posture as ANTHROPIC_API_KEY / AGT_API_KEY) instead of writing them as plaintext to the on-disk `.env.integrations` file. ON = the manager injects the four channel secrets at spawn and evicts them from `.env.integrations`; the `.mcp.json` `${VAR}` templates are unchanged and now resolve from the spawn env, so the value never touches persistent EBS (and, under Docker isolation, is name-only forwarded into the container the same way AGT_API_KEY is). OFF (default) = today's behaviour, byte-for-byte: the tokens are written to `.env.integrations` (0600) and the wrapper sources them. Resolved host-side by the manager via hostFlagStore().getBooleanForAgent \u2014 the manager owns the spawn path, so no in-container MCP reads this; it materializes the VALUES, not the flag. A channel- token rotation already forces a session respawn (ENG-6062), so the injected value is bound at the same moment the file value used to be \u2014 the two paths are behaviourally equivalent, this one just keeps the plaintext off disk. Ships dark; flip per-agent/ host to soak before fleet convergence, flip OFF to fall back to the file path instantly without a code rollback. Integration credentials + the OAuth remote-MCP live-read proxy deliberately stay on the file (later slices / a permanent bounded carve-out, ADR-0062 Part 5).",
|
|
36695
|
+
flagType: "boolean",
|
|
36696
|
+
// Declared safe value is `false`: the current on-disk `.env.integrations` delivery,
|
|
36697
|
+
// byte-for-byte. `false` is also the fail-safe direction — a flag-store read error must
|
|
36698
|
+
// never silently move a fleet onto the spawn-env path (a bug there = a channel with no
|
|
36699
|
+
// token = a silently dead channel). Net-new gate consumed by the manager's own spawn
|
|
36700
|
+
// logic, not an in-container MCP, so registry-only with NO envVar materialization
|
|
36701
|
+
// (mirrors scheduled-task-nudge-durable). Turning it ON removes plaintext at rest.
|
|
36702
|
+
defaultValue: false,
|
|
36703
|
+
// ENG-7997 flip-reach estimate: `since` is the first agt-cli build whose
|
|
36704
|
+
// dist carries this host-side reader. That build is the one THIS PR's merge
|
|
36705
|
+
// auto-publishes — unknown until then, and every already-published version
|
|
36706
|
+
// (0.28.x) demonstrably lacks the reader (CodeRabbit npm-pack check). An
|
|
36707
|
+
// UNREACHABLE placeholder is the fail-safe: the reach estimate counts zero
|
|
36708
|
+
// hosts as honoring the flip (rather than over-claiming that 0.28.x hosts do,
|
|
36709
|
+
// while they still write tokens to disk). MUST be updated to the actual
|
|
36710
|
+
// published version once the release lands (tracked on ENG-9350).
|
|
36711
|
+
since: "99.0.0"
|
|
36712
|
+
},
|
|
36692
36713
|
{
|
|
36693
36714
|
key: "scheduled-task-confirmation-card",
|
|
36694
36715
|
description: `Post the \u{1F44D}/\u{1F44E} "Task complete?" kanban confirmation card for completed scheduled_task runs (ENG-4576 / ENG-6048). OFF (default) kills these cards fleet-wide: ENG-8072 found they mis-thread onto the run's captured slack_delivery, which in the persistent-session model is frequently a conversational reply rather than the task's own output - so a routine cron's confirmation card lands in an unrelated human thread (e.g. a half-hourly reconciliation card posted into a "you're back online" DM), and a clean cron emits a human \u{1F44D}/\u{1F44E} prompt on every tick regardless. The card was net-negative, so it is disabled by default. Turn it ON per org to restore scheduled-task ratings for a customer who wants them (e.g. a daily digest delivered to a channel). Evaluated per-org in the API (POST /host/runs/finish + the manager rating-prompt route) via getEvaluatedFlags(); the decision is passed into postScheduledTaskKanbanConfirmation. API-only gate - no host env materialization. Ships dark (cards off).`,
|
|
@@ -36832,6 +36853,27 @@ var FLAG_REGISTRY = [
|
|
|
36832
36853
|
// never auto-attach an integration nobody asked for, and both ENG-8332
|
|
36833
36854
|
// prerequisites above are still open.
|
|
36834
36855
|
defaultValue: false
|
|
36856
|
+
},
|
|
36857
|
+
{
|
|
36858
|
+
key: "host-right-sizing",
|
|
36859
|
+
description: 'ADR-0072. Gates the HostRightSizer cron, which evaluates every managed EC2 host against 7 days of memory and CPU and (at enforce) resizes it one rung inside the host\'s own maintenance window. off = the cron returns immediately: nothing is read, nothing is written. shadow = evaluate, persist a verdict row per host, and post the weekly summary \u2014 NO resize, and no actor code runs. enforce = as shadow, plus enqueue resizes. AS OF PHASE 1 (ENG-9324) THERE IS NO ACTOR, SO `enforce` BEHAVES EXACTLY LIKE `shadow`: selecting it records the mode on each verdict row and changes nothing else, and no host is resized. This note comes out when the Phase 3 actor lands; until then treat enforce as shadow-with-a-label, not as an armed fleet. Ships dark: this mechanism ends in a stop/start of a customer production host, so an unreachable flag store must resolve to NOT acting. TWO BOUNDS WORTH KNOWING BEFORE FLIPPING. (1) off is not a stop button for in-flight work \u2014 HostResizeDispatcher reads only ec2_pending_instance_type and knows nothing about this flag, so flipping to off stops new enqueues and lets every already-enqueued host complete its stop/modify/start; combined with the ~5-minute eval cache the true blast unit is one tick of open windows. A real kill switch has to live inside the dispatcher. (2) BYO hosts (ADR-0028) are EXCLUDED in Phase 1, not merely clamped to shadow: their instances live in the customer AWS account while the cron authenticates only with the platform provisioner role, so their metrics read as empty and every evaluation would land as unknown. ADR-0072 \xA79 intends them to be shadow-only ("we recommend; they resize") and making that real needs the per-host cross_account_role_arn resolved - its own slice. Pool hosts (ADR-0042) are excluded too, while host_kind is unset in prod. Both are eligibility predicates applied by the cron, documented here so the admin page showing enforce for such an org is not read as behaviour.',
|
|
36860
|
+
flagType: "enum",
|
|
36861
|
+
allowedValues: ["off", "shadow", "enforce"],
|
|
36862
|
+
// Ships dark at `off`, NOT `shadow`. Diverging deliberately from
|
|
36863
|
+
// slack-scheduled-channel-guard, whose shadow is a free local log line:
|
|
36864
|
+
// THIS shadow spends a fleet-wide CloudWatch GetMetricData sweep per tick
|
|
36865
|
+
// and writes a row per host, so defaulting to shadow would newly bill and
|
|
36866
|
+
// newly write for every org that never opted in. shadow is the per-canary
|
|
36867
|
+
// opt-in; enforce is the audited flip after the Phase 2 review.
|
|
36868
|
+
defaultValue: "off",
|
|
36869
|
+
// Evaluated centrally, in the API cron — there is no host-side reader, so
|
|
36870
|
+
// no `since` and no dependence on fleet agt-cli convergence.
|
|
36871
|
+
// NOTE: deliberately NO envVar. ADR-0072 §9 wants this gate scoped per
|
|
36872
|
+
// org/host, and an envVar would be highest-precedence (ADR-0022) — a
|
|
36873
|
+
// literal in sst.config.ts would pin every stage and make the admin page a
|
|
36874
|
+
// control that does nothing, which is the ENG-8303 class exactly.
|
|
36875
|
+
// enforce arms automated downtime on a customer's production host.
|
|
36876
|
+
sensitive: true
|
|
36835
36877
|
}
|
|
36836
36878
|
];
|
|
36837
36879
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -36833,6 +36833,27 @@ var FLAG_REGISTRY = [
|
|
|
36833
36833
|
// consumed by the manager's own logic, not an in-container MCP, so no env materialization.
|
|
36834
36834
|
defaultValue: false
|
|
36835
36835
|
},
|
|
36836
|
+
{
|
|
36837
|
+
key: "spawn-inject-channel-secrets",
|
|
36838
|
+
description: "ENG-9350 (host key-management hardening, epic ENG-9347): deliver a managed agent's channel bot tokens (SLACK_BOT_TOKEN, SLACK_APP_TOKEN, TELEGRAM_BOT_TOKEN, MSTEAMS_CLIENT_SECRET) into the Claude Code spawn env via `tmux new-session -e KEY=VALUE` (the same posture as ANTHROPIC_API_KEY / AGT_API_KEY) instead of writing them as plaintext to the on-disk `.env.integrations` file. ON = the manager injects the four channel secrets at spawn and evicts them from `.env.integrations`; the `.mcp.json` `${VAR}` templates are unchanged and now resolve from the spawn env, so the value never touches persistent EBS (and, under Docker isolation, is name-only forwarded into the container the same way AGT_API_KEY is). OFF (default) = today's behaviour, byte-for-byte: the tokens are written to `.env.integrations` (0600) and the wrapper sources them. Resolved host-side by the manager via hostFlagStore().getBooleanForAgent \u2014 the manager owns the spawn path, so no in-container MCP reads this; it materializes the VALUES, not the flag. A channel- token rotation already forces a session respawn (ENG-6062), so the injected value is bound at the same moment the file value used to be \u2014 the two paths are behaviourally equivalent, this one just keeps the plaintext off disk. Ships dark; flip per-agent/ host to soak before fleet convergence, flip OFF to fall back to the file path instantly without a code rollback. Integration credentials + the OAuth remote-MCP live-read proxy deliberately stay on the file (later slices / a permanent bounded carve-out, ADR-0062 Part 5).",
|
|
36839
|
+
flagType: "boolean",
|
|
36840
|
+
// Declared safe value is `false`: the current on-disk `.env.integrations` delivery,
|
|
36841
|
+
// byte-for-byte. `false` is also the fail-safe direction — a flag-store read error must
|
|
36842
|
+
// never silently move a fleet onto the spawn-env path (a bug there = a channel with no
|
|
36843
|
+
// token = a silently dead channel). Net-new gate consumed by the manager's own spawn
|
|
36844
|
+
// logic, not an in-container MCP, so registry-only with NO envVar materialization
|
|
36845
|
+
// (mirrors scheduled-task-nudge-durable). Turning it ON removes plaintext at rest.
|
|
36846
|
+
defaultValue: false,
|
|
36847
|
+
// ENG-7997 flip-reach estimate: `since` is the first agt-cli build whose
|
|
36848
|
+
// dist carries this host-side reader. That build is the one THIS PR's merge
|
|
36849
|
+
// auto-publishes — unknown until then, and every already-published version
|
|
36850
|
+
// (0.28.x) demonstrably lacks the reader (CodeRabbit npm-pack check). An
|
|
36851
|
+
// UNREACHABLE placeholder is the fail-safe: the reach estimate counts zero
|
|
36852
|
+
// hosts as honoring the flip (rather than over-claiming that 0.28.x hosts do,
|
|
36853
|
+
// while they still write tokens to disk). MUST be updated to the actual
|
|
36854
|
+
// published version once the release lands (tracked on ENG-9350).
|
|
36855
|
+
since: "99.0.0"
|
|
36856
|
+
},
|
|
36836
36857
|
{
|
|
36837
36858
|
key: "scheduled-task-confirmation-card",
|
|
36838
36859
|
description: `Post the \u{1F44D}/\u{1F44E} "Task complete?" kanban confirmation card for completed scheduled_task runs (ENG-4576 / ENG-6048). OFF (default) kills these cards fleet-wide: ENG-8072 found they mis-thread onto the run's captured slack_delivery, which in the persistent-session model is frequently a conversational reply rather than the task's own output - so a routine cron's confirmation card lands in an unrelated human thread (e.g. a half-hourly reconciliation card posted into a "you're back online" DM), and a clean cron emits a human \u{1F44D}/\u{1F44E} prompt on every tick regardless. The card was net-negative, so it is disabled by default. Turn it ON per org to restore scheduled-task ratings for a customer who wants them (e.g. a daily digest delivered to a channel). Evaluated per-org in the API (POST /host/runs/finish + the manager rating-prompt route) via getEvaluatedFlags(); the decision is passed into postScheduledTaskKanbanConfirmation. API-only gate - no host env materialization. Ships dark (cards off).`,
|
|
@@ -36976,6 +36997,27 @@ var FLAG_REGISTRY = [
|
|
|
36976
36997
|
// never auto-attach an integration nobody asked for, and both ENG-8332
|
|
36977
36998
|
// prerequisites above are still open.
|
|
36978
36999
|
defaultValue: false
|
|
37000
|
+
},
|
|
37001
|
+
{
|
|
37002
|
+
key: "host-right-sizing",
|
|
37003
|
+
description: 'ADR-0072. Gates the HostRightSizer cron, which evaluates every managed EC2 host against 7 days of memory and CPU and (at enforce) resizes it one rung inside the host\'s own maintenance window. off = the cron returns immediately: nothing is read, nothing is written. shadow = evaluate, persist a verdict row per host, and post the weekly summary \u2014 NO resize, and no actor code runs. enforce = as shadow, plus enqueue resizes. AS OF PHASE 1 (ENG-9324) THERE IS NO ACTOR, SO `enforce` BEHAVES EXACTLY LIKE `shadow`: selecting it records the mode on each verdict row and changes nothing else, and no host is resized. This note comes out when the Phase 3 actor lands; until then treat enforce as shadow-with-a-label, not as an armed fleet. Ships dark: this mechanism ends in a stop/start of a customer production host, so an unreachable flag store must resolve to NOT acting. TWO BOUNDS WORTH KNOWING BEFORE FLIPPING. (1) off is not a stop button for in-flight work \u2014 HostResizeDispatcher reads only ec2_pending_instance_type and knows nothing about this flag, so flipping to off stops new enqueues and lets every already-enqueued host complete its stop/modify/start; combined with the ~5-minute eval cache the true blast unit is one tick of open windows. A real kill switch has to live inside the dispatcher. (2) BYO hosts (ADR-0028) are EXCLUDED in Phase 1, not merely clamped to shadow: their instances live in the customer AWS account while the cron authenticates only with the platform provisioner role, so their metrics read as empty and every evaluation would land as unknown. ADR-0072 \xA79 intends them to be shadow-only ("we recommend; they resize") and making that real needs the per-host cross_account_role_arn resolved - its own slice. Pool hosts (ADR-0042) are excluded too, while host_kind is unset in prod. Both are eligibility predicates applied by the cron, documented here so the admin page showing enforce for such an org is not read as behaviour.',
|
|
37004
|
+
flagType: "enum",
|
|
37005
|
+
allowedValues: ["off", "shadow", "enforce"],
|
|
37006
|
+
// Ships dark at `off`, NOT `shadow`. Diverging deliberately from
|
|
37007
|
+
// slack-scheduled-channel-guard, whose shadow is a free local log line:
|
|
37008
|
+
// THIS shadow spends a fleet-wide CloudWatch GetMetricData sweep per tick
|
|
37009
|
+
// and writes a row per host, so defaulting to shadow would newly bill and
|
|
37010
|
+
// newly write for every org that never opted in. shadow is the per-canary
|
|
37011
|
+
// opt-in; enforce is the audited flip after the Phase 2 review.
|
|
37012
|
+
defaultValue: "off",
|
|
37013
|
+
// Evaluated centrally, in the API cron — there is no host-side reader, so
|
|
37014
|
+
// no `since` and no dependence on fleet agt-cli convergence.
|
|
37015
|
+
// NOTE: deliberately NO envVar. ADR-0072 §9 wants this gate scoped per
|
|
37016
|
+
// org/host, and an envVar would be highest-precedence (ADR-0022) — a
|
|
37017
|
+
// literal in sst.config.ts would pin every stage and make the admin page a
|
|
37018
|
+
// control that does nothing, which is the ENG-8303 class exactly.
|
|
37019
|
+
// enforce arms automated downtime on a customer's production host.
|
|
37020
|
+
sensitive: true
|
|
36979
37021
|
}
|
|
36980
37022
|
];
|
|
36981
37023
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -43,8 +43,8 @@ import {
|
|
|
43
43
|
writeDirectChatSessionState,
|
|
44
44
|
writeEgressAllowlist,
|
|
45
45
|
writePersistentClaudeWrapper
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-YAVWYI5S.js";
|
|
47
|
+
import "./chunk-YOID6KOQ.js";
|
|
48
48
|
import "./chunk-XWVM4KPK.js";
|
|
49
49
|
export {
|
|
50
50
|
EGRESS_BASELINE_DOMAINS,
|
|
@@ -92,4 +92,4 @@ export {
|
|
|
92
92
|
writeEgressAllowlist,
|
|
93
93
|
writePersistentClaudeWrapper
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=persistent-session-
|
|
95
|
+
//# sourceMappingURL=persistent-session-PYAJ4VJW.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-YAVWYI5S.js";
|
|
4
|
+
import "./chunk-YOID6KOQ.js";
|
|
5
5
|
import "./chunk-XWVM4KPK.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/responsiveness-probe.ts
|
|
@@ -727,4 +727,4 @@ export {
|
|
|
727
727
|
readAndResetSlackReplyBindingClassifications,
|
|
728
728
|
readAndResetSlackReplyTargetClassifications
|
|
729
729
|
};
|
|
730
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
730
|
+
//# sourceMappingURL=responsiveness-probe-5I2LIVCA.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YOID6KOQ.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/session-auth-dead.ts
|
|
6
6
|
import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
|
|
@@ -203,4 +203,4 @@ export {
|
|
|
203
203
|
decideSessionAuthState,
|
|
204
204
|
probeSessionAuth
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=session-auth-dead-
|
|
206
|
+
//# sourceMappingURL=session-auth-dead-NUX643UJ.js.map
|