@integrity-labs/agt-cli 0.28.676 → 0.28.678

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-S6TPCOGW.js → chunk-3PCP5NT2.js} +551 -397
  3. package/dist/chunk-3PCP5NT2.js.map +1 -0
  4. package/dist/{chunk-AJNES24H.js → chunk-5DHJE2G7.js} +49 -1
  5. package/dist/chunk-5DHJE2G7.js.map +1 -0
  6. package/dist/{chunk-7Y54PSMR.js → chunk-LTOGVWUR.js} +2 -2
  7. package/dist/{claude-pair-runtime-VAU7UXE4.js → claude-pair-runtime-X6CWJNW2.js} +2 -2
  8. package/dist/lib/manager-worker.js +15 -13
  9. package/dist/lib/manager-worker.js.map +1 -1
  10. package/dist/mcp/augmented-admin.js +34 -1
  11. package/dist/mcp/direct-chat-channel.js +48 -0
  12. package/dist/mcp/index.js +48 -0
  13. package/dist/mcp/origami.js +48 -0
  14. package/dist/mcp/slack-channel.js +48 -0
  15. package/dist/mcp/telegram-channel.js +48 -0
  16. package/dist/{persistent-session-F7JEOWHQ.js → persistent-session-EZEYH3PM.js} +3 -3
  17. package/dist/{responsiveness-probe-7465YNMN.js → responsiveness-probe-VS6GODYP.js} +3 -3
  18. package/dist/{session-auth-dead-GBC5QPH3.js → session-auth-dead-7U24PZZS.js} +2 -2
  19. package/package.json +1 -1
  20. package/dist/chunk-AJNES24H.js.map +0 -1
  21. package/dist/chunk-S6TPCOGW.js.map +0 -1
  22. /package/dist/{chunk-7Y54PSMR.js.map → chunk-LTOGVWUR.js.map} +0 -0
  23. /package/dist/{claude-pair-runtime-VAU7UXE4.js.map → claude-pair-runtime-X6CWJNW2.js.map} +0 -0
  24. /package/dist/{persistent-session-F7JEOWHQ.js.map → persistent-session-EZEYH3PM.js.map} +0 -0
  25. /package/dist/{responsiveness-probe-7465YNMN.js.map → responsiveness-probe-VS6GODYP.js.map} +0 -0
  26. /package/dist/{session-auth-dead-GBC5QPH3.js.map → session-auth-dead-7U24PZZS.js.map} +0 -0
@@ -21326,6 +21326,18 @@ var AdminDebugClient = class _AdminDebugClient {
21326
21326
  run_id: this.runId
21327
21327
  });
21328
21328
  }
21329
+ /** Request a HITL-gated end to a circuit-breaker pause (ENG-9343). */
21330
+ requestResumeAgent(args) {
21331
+ if (!this.agentId) {
21332
+ throw makeError(400, "AdminDebugClient.requestResumeAgent requires agentId (set AGT_AGENT_ID)");
21333
+ }
21334
+ return this.post("/admin/debug/actions/resume", {
21335
+ target_agent_id: args.target_agent_id,
21336
+ reason: args.reason,
21337
+ agent_id: this.agentId,
21338
+ run_id: this.runId
21339
+ });
21340
+ }
21329
21341
  /** Poll a remedial action's HITL decision. */
21330
21342
  getActionStatus(requestId) {
21331
21343
  return this.get(`/admin/debug/actions/${encodeURIComponent(requestId)}`);
@@ -21457,6 +21469,12 @@ var clearRestartRequestSchema = strictObject({
21457
21469
  target_agent_id: external_exports.string().min(1).max(64).describe("UUID of the customer agent whose stuck restart request to clear (from the inspect result)."),
21458
21470
  reason: external_exports.string().min(1).max(2e3).describe("Why this stuck restart request should be cleared \u2014 shown verbatim to the human approver. Be specific.")
21459
21471
  });
21472
+ var resumeAgentSchema = strictObject({
21473
+ target_agent_id: external_exports.string().min(1).max(64).describe("UUID of the customer agent whose CIRCUIT-BREAKER pause to end (from debug_search_agents status=paused)."),
21474
+ reason: external_exports.string().min(1).max(2e3).describe(
21475
+ 'Why this agent should come back now, and what you know about the condition that tripped the breaker - shown verbatim to the human approver alongside the trip reason and count. Be specific: the approver is deciding "resume DESPITE this driver", not "resume".'
21476
+ )
21477
+ });
21460
21478
  var listAlertsSchema = strictObject({
21461
21479
  severity: external_exports.string().max(16).optional().describe("Filter by severity (critical | warning | info)."),
21462
21480
  open: external_exports.boolean().optional().describe("When true, only currently-open (unclosed) alerts."),
@@ -21869,7 +21887,7 @@ server.registerTool(
21869
21887
  );
21870
21888
  server.registerTool(
21871
21889
  "debug_restart_agent",
21872
- { description: `Request a HITL-gated RESTART of a customer agent \u2014 bounce its session so the manager respawns it on the next poll (reversible; the inbound backlog replays). Use this to recover a wedged agent or to make it pick up a newly-bound integration/config change. A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage; in shadow mode the approval runs but nothing executes. Org-agnostic: keyed on the agent's host assignment, so it works cross-org without an active-org dependency. This is the same path as request_action({ action: "restart" }), exposed as a dedicated tool for discoverability. Returns { request_id, status, write_mode, notification_status }. Surface a brief, jargon-free note to the user (e.g. "I've asked an admin to approve restarting that agent"). Pass { target_agent_id, reason }.`, inputSchema: restartAgentSchema },
21890
+ { description: `Request a HITL-gated RESTART of a customer agent \u2014 bounce its session so the manager respawns it on the next poll (reversible; the inbound backlog replays). Use this to recover a wedged agent or to make it pick up a newly-bound integration/config change. NOT for a PAUSED agent: a paused agent's manager does not respawn it, so a restart against one does nothing at all - use \`debug_resume_agent\`, which is the only tool that ends a pause (ENG-9343). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage; in shadow mode the approval runs but nothing executes. Org-agnostic: keyed on the agent's host assignment, so it works cross-org without an active-org dependency. This is the same path as request_action({ action: "restart" }), exposed as a dedicated tool for discoverability. Returns { request_id, status, write_mode, notification_status }. Surface a brief, jargon-free note to the user (e.g. "I've asked an admin to approve restarting that agent"). Pass { target_agent_id, reason }.`, inputSchema: restartAgentSchema },
21873
21891
  async (args) => {
21874
21892
  try {
21875
21893
  const result = await client.requestAction("restart", {
@@ -21882,6 +21900,21 @@ server.registerTool(
21882
21900
  }
21883
21901
  }
21884
21902
  );
21903
+ server.registerTool(
21904
+ "debug_resume_agent",
21905
+ { description: 'Request a HITL-gated END to a customer agent\'s CIRCUIT-BREAKER pause - flip it back to active so its manager respawns it, close the agent_paused alert, and clear any pending restart request. This is the ONLY tool that ends a pause; debug_restart_agent does NOT, because a paused agent\'s manager never respawns it, so a restart against a paused agent is a no-op. SCOPE: it touches ONLY pauses whose reason is `circuit_breaker`. A "manual" pause (a person clicked Pause) and an "hourly_cost_exceeded" pause (a budget guard) are refused with a 409 - do not retry those, escalate to a human. BEFORE YOU CALL IT: the approval card names the breaker\'s trip reason and count and flags when that condition still appears to hold (e.g. other agents on the same host tripping on the same driver), so write a `reason` that addresses the driver, not just the downtime - the approver is deciding "resume DESPITE day-rollover=3", not "resume". Resuming while the driver is still live just re-trips the breaker and the agent flaps instead of failing cleanly. A HUMAN must approve in Slack, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). Returns { request_id, status, write_mode, trip_driver, trip_count, precondition_verdict, precondition_signals, notification_status }; after approval, poll check_action_status (result_payload carries { resumed, alert_closed, cleared_restart_bindings } or { resumed: false, not_eligible }). Pass { target_agent_id, reason }.', inputSchema: resumeAgentSchema },
21906
+ async (args) => {
21907
+ try {
21908
+ const result = await client.requestResumeAgent({
21909
+ target_agent_id: args.target_agent_id,
21910
+ reason: args.reason
21911
+ });
21912
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
21913
+ } catch (err) {
21914
+ return { content: [{ type: "text", text: formatError2(err) }], isError: true };
21915
+ }
21916
+ }
21917
+ );
21885
21918
  server.registerTool(
21886
21919
  "request_config_update",
21887
21920
  { description: "Request a HITL-gated change to a customer agent's model config (primary/secondary/tertiary_model). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). The change is reversible and applies at the agent's NEXT session launch after /host/refresh \u2014 it does not restart the agent. The new value is validated against the agent before approval is requested: Claude Code (subscription) agents take a family alias (fable/opus/opus[fast]/sonnet/haiku); routed agents take a full stored model id (e.g. openrouter/anthropic/claude-opus-4-6). Use this to fix a misconfigured model (e.g. an agent wedged on a model its auth can't access). Returns { request_id, status, write_mode, notification_status }. Pass { target_agent_id, field, new_value, reason }.", inputSchema: requestConfigUpdateSchema },
@@ -34277,6 +34277,9 @@ var DIRECTIVE_KINDS = [
34277
34277
  ];
34278
34278
  var DIRECTIVE_SET = new Set(DIRECTIVE_KINDS);
34279
34279
 
34280
+ // ../core/dist/admin-debug/resume-precondition.js
34281
+ var DEFAULT_RESUME_LOOKBACK_MS = 14 * 24 * 60 * 60 * 1e3;
34282
+
34280
34283
  // ../core/dist/admin-debug/index.js
34281
34284
  var STUCK_RESTART_THRESHOLD_SECONDS = 15 * 60;
34282
34285
 
@@ -35892,6 +35895,29 @@ var FLAG_REGISTRY = [
35892
35895
  // first the real cut is higher than this and the pin under-reports.
35893
35896
  since: "0.28.570"
35894
35897
  },
35898
+ {
35899
+ key: "secret-files-tmpfs",
35900
+ description: "Host-side RAM-backing of the per-agent .env.integrations secret files (ENG-9348, epic ENG-9347). When on, the manager turns both copies (the agent-dir file and the project/ mirror) into symlinks pointing at a 0700 per-agent directory under tmpfs (/dev/shm, else /run), so plaintext channel/integration tokens live only in RAM: the persistent EBS volume holds a symlink (no token bytes), an EBS snapshot captures nothing, and a host shutdown is a genuine wipe. Every consumer path is unchanged (same file paths). Boolean gate; ships dark. Fail-safe in every direction \u2014 off is byte-for-byte today; a host with no genuine tmpfs root (e.g. macOS dev) silently keeps the persistent files; a symlink-setup error logs and falls back to the persistent path. Reboot clears tmpfs, and the manager re-backs on its next refresh (surviving reboot is not required \u2014 secrets are re-fetched on refresh).",
35901
+ flagType: "boolean",
35902
+ // Declared safe value is `false` (persistent files, today's behaviour).
35903
+ // Fail-safe direction: a flag-DB read error must never, on its own, start
35904
+ // relocating where prod secret files physically live. Flip on per-host for a
35905
+ // canary, verify no plaintext lands on the persistent volume, then fleet-wide
35906
+ // from the admin Feature Flags page.
35907
+ defaultValue: false,
35908
+ // ADR-0022 operator override, read by the host flag store's env layer (not a
35909
+ // hand-written process.env gate) — same posture as memory-extraction /
35910
+ // tool-call-audit above. Gives a per-host canary before the DB flag exists.
35911
+ envVar: "AGT_SECRET_FILES_TMPFS_ENABLED",
35912
+ // Deliberately-unreachable placeholder until this ships: no published CLI
35913
+ // carries the manager reader + core writer yet, so reach must report "no
35914
+ // host honors" rather than the `honors`-for-everyone that omitting `since`
35915
+ // produces. MOVE THIS PIN to the actual auto-published agt-cli version at
35916
+ // merge (auto-publish patch-bumps from main; verify against the tarball, the
35917
+ // ENG-8575/ENG-9350 lesson) — the marker is `setSecretFileTmpfsBacking` in
35918
+ // package/dist/lib/manager-worker.js.
35919
+ since: "99.0.0"
35920
+ },
35895
35921
  {
35896
35922
  key: "memory-file-tombstones",
35897
35923
  description: "Host-side removal of RETIRED agent memory files (ENG-9257). The control plane sends an explicit tombstone list on /host/memories and the manager moves the matching .md out of the agent's memory directory \u2014 but only when its write-time manifest says the manager itself wrote that exact file and the sha256 still matches, so an agent-edited or hand-authored file is retained and reported instead. Boolean gate; ships dark. Scope is retirement only, never expiry: /host/memories has always withheld expired rows, so an expiry-driven list would make months of accumulated backlog deletable on the first armed tick. This is the ONLY thing that makes retirement visible to the agent, which reads its memory directory straight off disk \u2014 every server-side reader already excludes retired rows, so with this off a retired memory is gone everywhere except the one surface that changes the agent's behaviour.",
@@ -36563,6 +36589,28 @@ var FLAG_REGISTRY = [
36563
36589
  // exactly the org whose brand should be shown.
36564
36590
  public: true
36565
36591
  },
36592
+ {
36593
+ key: "ninjafy-logo",
36594
+ description: "Which Ninjafy logo TREATMENT the console chrome renders (ENG-9365). This is a SUB-SELECTION under ninjafy-brand, not a second brand gate: it is consulted only once ninjafy-brand has already resolved ON, so with the brand off the value is inert and the half-branded state that flag's description calls unreachable stays unreachable. ninjafy-brand remains the single kill switch for the rebrand. It exists so candidate logo treatments can be put in front of a human and compared in the running console, rather than judged from a static export. lockup = mark and wordmark together, both in the brand blue \u2014 exactly what ENG-9298 shipped, so an unset flag is a no-op. two-tone = the mark in brand blue with the wordmark in the neutral text colour (the treatment of the blue-icon/black-wordmark artwork). wordmark = the word alone, no mark. Every treatment is composed from the ENG-9298 geometry \u2014 ENG-9312 pins that the lockup's blue path IS the mark subpath followed by the wordmark subpaths, byte for byte \u2014 so a new treatment is a composition, never a fresh trace, and the three drawings cannot drift apart. Surfaces are the dashboard sidebar and the top nav. The top nav shows the WORDMARK portion at every width whatever the treatment, because ENG-9342 decided that deliberately (a full lockup at the header's icon height crowds the team switcher on a phone) \u2014 so a treatment changes the word's colour there, never whether a mark appears. The admin sidebar (ENG-9323) is NOT wired to this key and always renders the mark; widening it is a separate decision. Resolved SERVER-SIDE in (dashboard)/layout.tsx via getPublicEnumFlagServer, beside ninjafy-brand and in the same single GET /flags round trip, then passed down as a required prop. That is not a style preference: the client hook starts at its default and updates after an async fetch, so a client read would paint one logo and swap it after hydration \u2014 the exact flash ENG-9227 removed from the wordmark and ENG-8858 removed from the palette. Org and team are the useful pilot grains, as for ninjafy-brand: the single consumer evaluates in the active-org cookie scope, so a host- or agent-scoped override row is accepted by the table but never reached by the console.",
36595
+ flagType: "enum",
36596
+ allowedValues: ["lockup", "two-tone", "wordmark"],
36597
+ // Declared safe value is `lockup` — what ENG-9298 shipped. This flag has no
36598
+ // "off" direction: it selects among presentations that are all live-safe, so
36599
+ // fail-safe here means "the treatment currently in production", not the
36600
+ // narrowest one. A flag-DB read error, an archived row, or a stored value
36601
+ // outside allowedValues all resolve here (evaluate.ts normalizeFlagValue),
36602
+ // which is what makes an experimental value impossible to strand.
36603
+ defaultValue: "lockup",
36604
+ // Same trap as ninjafy-brand, and it bites harder here because there are no
36605
+ // client readers of this key AT ALL — it is server-resolved by construction.
36606
+ // `public` does NOT mean "read by a browser"; it means "readable through the
36607
+ // public map". getPublicEnumFlagServer resolves against the same GET /flags
36608
+ // endpoint the browser uses, and that route filters to listPublicFlagKeys()
36609
+ // (routes/flags.ts). Drop `public` and the key is simply absent from the map,
36610
+ // so the helper falls through to its default and returns `lockup` FOREVER —
36611
+ // the dropdown appearing to do nothing, with no error raised anywhere.
36612
+ public: true
36613
+ },
36566
36614
  {
36567
36615
  key: "agent-recruit",
36568
36616
  description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
package/dist/mcp/index.js CHANGED
@@ -41597,6 +41597,9 @@ var DIRECTIVE_KINDS = [
41597
41597
  ];
41598
41598
  var DIRECTIVE_SET = new Set(DIRECTIVE_KINDS);
41599
41599
 
41600
+ // ../core/dist/admin-debug/resume-precondition.js
41601
+ var DEFAULT_RESUME_LOOKBACK_MS = 14 * 24 * 60 * 60 * 1e3;
41602
+
41600
41603
  // ../core/dist/admin-debug/index.js
41601
41604
  var STUCK_RESTART_THRESHOLD_SECONDS = 15 * 60;
41602
41605
 
@@ -42819,6 +42822,29 @@ var FLAG_REGISTRY = [
42819
42822
  // first the real cut is higher than this and the pin under-reports.
42820
42823
  since: "0.28.570"
42821
42824
  },
42825
+ {
42826
+ key: "secret-files-tmpfs",
42827
+ description: "Host-side RAM-backing of the per-agent .env.integrations secret files (ENG-9348, epic ENG-9347). When on, the manager turns both copies (the agent-dir file and the project/ mirror) into symlinks pointing at a 0700 per-agent directory under tmpfs (/dev/shm, else /run), so plaintext channel/integration tokens live only in RAM: the persistent EBS volume holds a symlink (no token bytes), an EBS snapshot captures nothing, and a host shutdown is a genuine wipe. Every consumer path is unchanged (same file paths). Boolean gate; ships dark. Fail-safe in every direction \u2014 off is byte-for-byte today; a host with no genuine tmpfs root (e.g. macOS dev) silently keeps the persistent files; a symlink-setup error logs and falls back to the persistent path. Reboot clears tmpfs, and the manager re-backs on its next refresh (surviving reboot is not required \u2014 secrets are re-fetched on refresh).",
42828
+ flagType: "boolean",
42829
+ // Declared safe value is `false` (persistent files, today's behaviour).
42830
+ // Fail-safe direction: a flag-DB read error must never, on its own, start
42831
+ // relocating where prod secret files physically live. Flip on per-host for a
42832
+ // canary, verify no plaintext lands on the persistent volume, then fleet-wide
42833
+ // from the admin Feature Flags page.
42834
+ defaultValue: false,
42835
+ // ADR-0022 operator override, read by the host flag store's env layer (not a
42836
+ // hand-written process.env gate) — same posture as memory-extraction /
42837
+ // tool-call-audit above. Gives a per-host canary before the DB flag exists.
42838
+ envVar: "AGT_SECRET_FILES_TMPFS_ENABLED",
42839
+ // Deliberately-unreachable placeholder until this ships: no published CLI
42840
+ // carries the manager reader + core writer yet, so reach must report "no
42841
+ // host honors" rather than the `honors`-for-everyone that omitting `since`
42842
+ // produces. MOVE THIS PIN to the actual auto-published agt-cli version at
42843
+ // merge (auto-publish patch-bumps from main; verify against the tarball, the
42844
+ // ENG-8575/ENG-9350 lesson) — the marker is `setSecretFileTmpfsBacking` in
42845
+ // package/dist/lib/manager-worker.js.
42846
+ since: "99.0.0"
42847
+ },
42822
42848
  {
42823
42849
  key: "memory-file-tombstones",
42824
42850
  description: "Host-side removal of RETIRED agent memory files (ENG-9257). The control plane sends an explicit tombstone list on /host/memories and the manager moves the matching .md out of the agent's memory directory \u2014 but only when its write-time manifest says the manager itself wrote that exact file and the sha256 still matches, so an agent-edited or hand-authored file is retained and reported instead. Boolean gate; ships dark. Scope is retirement only, never expiry: /host/memories has always withheld expired rows, so an expiry-driven list would make months of accumulated backlog deletable on the first armed tick. This is the ONLY thing that makes retirement visible to the agent, which reads its memory directory straight off disk \u2014 every server-side reader already excludes retired rows, so with this off a retired memory is gone everywhere except the one surface that changes the agent's behaviour.",
@@ -43490,6 +43516,28 @@ var FLAG_REGISTRY = [
43490
43516
  // exactly the org whose brand should be shown.
43491
43517
  public: true
43492
43518
  },
43519
+ {
43520
+ key: "ninjafy-logo",
43521
+ description: "Which Ninjafy logo TREATMENT the console chrome renders (ENG-9365). This is a SUB-SELECTION under ninjafy-brand, not a second brand gate: it is consulted only once ninjafy-brand has already resolved ON, so with the brand off the value is inert and the half-branded state that flag's description calls unreachable stays unreachable. ninjafy-brand remains the single kill switch for the rebrand. It exists so candidate logo treatments can be put in front of a human and compared in the running console, rather than judged from a static export. lockup = mark and wordmark together, both in the brand blue \u2014 exactly what ENG-9298 shipped, so an unset flag is a no-op. two-tone = the mark in brand blue with the wordmark in the neutral text colour (the treatment of the blue-icon/black-wordmark artwork). wordmark = the word alone, no mark. Every treatment is composed from the ENG-9298 geometry \u2014 ENG-9312 pins that the lockup's blue path IS the mark subpath followed by the wordmark subpaths, byte for byte \u2014 so a new treatment is a composition, never a fresh trace, and the three drawings cannot drift apart. Surfaces are the dashboard sidebar and the top nav. The top nav shows the WORDMARK portion at every width whatever the treatment, because ENG-9342 decided that deliberately (a full lockup at the header's icon height crowds the team switcher on a phone) \u2014 so a treatment changes the word's colour there, never whether a mark appears. The admin sidebar (ENG-9323) is NOT wired to this key and always renders the mark; widening it is a separate decision. Resolved SERVER-SIDE in (dashboard)/layout.tsx via getPublicEnumFlagServer, beside ninjafy-brand and in the same single GET /flags round trip, then passed down as a required prop. That is not a style preference: the client hook starts at its default and updates after an async fetch, so a client read would paint one logo and swap it after hydration \u2014 the exact flash ENG-9227 removed from the wordmark and ENG-8858 removed from the palette. Org and team are the useful pilot grains, as for ninjafy-brand: the single consumer evaluates in the active-org cookie scope, so a host- or agent-scoped override row is accepted by the table but never reached by the console.",
43522
+ flagType: "enum",
43523
+ allowedValues: ["lockup", "two-tone", "wordmark"],
43524
+ // Declared safe value is `lockup` — what ENG-9298 shipped. This flag has no
43525
+ // "off" direction: it selects among presentations that are all live-safe, so
43526
+ // fail-safe here means "the treatment currently in production", not the
43527
+ // narrowest one. A flag-DB read error, an archived row, or a stored value
43528
+ // outside allowedValues all resolve here (evaluate.ts normalizeFlagValue),
43529
+ // which is what makes an experimental value impossible to strand.
43530
+ defaultValue: "lockup",
43531
+ // Same trap as ninjafy-brand, and it bites harder here because there are no
43532
+ // client readers of this key AT ALL — it is server-resolved by construction.
43533
+ // `public` does NOT mean "read by a browser"; it means "readable through the
43534
+ // public map". getPublicEnumFlagServer resolves against the same GET /flags
43535
+ // endpoint the browser uses, and that route filters to listPublicFlagKeys()
43536
+ // (routes/flags.ts). Drop `public` and the key is simply absent from the map,
43537
+ // so the helper falls through to its default and returns `lockup` FOREVER —
43538
+ // the dropdown appearing to do nothing, with no error raised anywhere.
43539
+ public: true
43540
+ },
43493
43541
  {
43494
43542
  key: "agent-recruit",
43495
43543
  description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
@@ -40429,6 +40429,9 @@ var DIRECTIVE_KINDS = [
40429
40429
  ];
40430
40430
  var DIRECTIVE_SET = new Set(DIRECTIVE_KINDS);
40431
40431
 
40432
+ // ../core/dist/admin-debug/resume-precondition.js
40433
+ var DEFAULT_RESUME_LOOKBACK_MS = 14 * 24 * 60 * 60 * 1e3;
40434
+
40432
40435
  // ../core/dist/admin-debug/index.js
40433
40436
  var STUCK_RESTART_THRESHOLD_SECONDS = 15 * 60;
40434
40437
 
@@ -41630,6 +41633,29 @@ var FLAG_REGISTRY = [
41630
41633
  // first the real cut is higher than this and the pin under-reports.
41631
41634
  since: "0.28.570"
41632
41635
  },
41636
+ {
41637
+ key: "secret-files-tmpfs",
41638
+ description: "Host-side RAM-backing of the per-agent .env.integrations secret files (ENG-9348, epic ENG-9347). When on, the manager turns both copies (the agent-dir file and the project/ mirror) into symlinks pointing at a 0700 per-agent directory under tmpfs (/dev/shm, else /run), so plaintext channel/integration tokens live only in RAM: the persistent EBS volume holds a symlink (no token bytes), an EBS snapshot captures nothing, and a host shutdown is a genuine wipe. Every consumer path is unchanged (same file paths). Boolean gate; ships dark. Fail-safe in every direction \u2014 off is byte-for-byte today; a host with no genuine tmpfs root (e.g. macOS dev) silently keeps the persistent files; a symlink-setup error logs and falls back to the persistent path. Reboot clears tmpfs, and the manager re-backs on its next refresh (surviving reboot is not required \u2014 secrets are re-fetched on refresh).",
41639
+ flagType: "boolean",
41640
+ // Declared safe value is `false` (persistent files, today's behaviour).
41641
+ // Fail-safe direction: a flag-DB read error must never, on its own, start
41642
+ // relocating where prod secret files physically live. Flip on per-host for a
41643
+ // canary, verify no plaintext lands on the persistent volume, then fleet-wide
41644
+ // from the admin Feature Flags page.
41645
+ defaultValue: false,
41646
+ // ADR-0022 operator override, read by the host flag store's env layer (not a
41647
+ // hand-written process.env gate) — same posture as memory-extraction /
41648
+ // tool-call-audit above. Gives a per-host canary before the DB flag exists.
41649
+ envVar: "AGT_SECRET_FILES_TMPFS_ENABLED",
41650
+ // Deliberately-unreachable placeholder until this ships: no published CLI
41651
+ // carries the manager reader + core writer yet, so reach must report "no
41652
+ // host honors" rather than the `honors`-for-everyone that omitting `since`
41653
+ // produces. MOVE THIS PIN to the actual auto-published agt-cli version at
41654
+ // merge (auto-publish patch-bumps from main; verify against the tarball, the
41655
+ // ENG-8575/ENG-9350 lesson) — the marker is `setSecretFileTmpfsBacking` in
41656
+ // package/dist/lib/manager-worker.js.
41657
+ since: "99.0.0"
41658
+ },
41633
41659
  {
41634
41660
  key: "memory-file-tombstones",
41635
41661
  description: "Host-side removal of RETIRED agent memory files (ENG-9257). The control plane sends an explicit tombstone list on /host/memories and the manager moves the matching .md out of the agent's memory directory \u2014 but only when its write-time manifest says the manager itself wrote that exact file and the sha256 still matches, so an agent-edited or hand-authored file is retained and reported instead. Boolean gate; ships dark. Scope is retirement only, never expiry: /host/memories has always withheld expired rows, so an expiry-driven list would make months of accumulated backlog deletable on the first armed tick. This is the ONLY thing that makes retirement visible to the agent, which reads its memory directory straight off disk \u2014 every server-side reader already excludes retired rows, so with this off a retired memory is gone everywhere except the one surface that changes the agent's behaviour.",
@@ -42301,6 +42327,28 @@ var FLAG_REGISTRY = [
42301
42327
  // exactly the org whose brand should be shown.
42302
42328
  public: true
42303
42329
  },
42330
+ {
42331
+ key: "ninjafy-logo",
42332
+ description: "Which Ninjafy logo TREATMENT the console chrome renders (ENG-9365). This is a SUB-SELECTION under ninjafy-brand, not a second brand gate: it is consulted only once ninjafy-brand has already resolved ON, so with the brand off the value is inert and the half-branded state that flag's description calls unreachable stays unreachable. ninjafy-brand remains the single kill switch for the rebrand. It exists so candidate logo treatments can be put in front of a human and compared in the running console, rather than judged from a static export. lockup = mark and wordmark together, both in the brand blue \u2014 exactly what ENG-9298 shipped, so an unset flag is a no-op. two-tone = the mark in brand blue with the wordmark in the neutral text colour (the treatment of the blue-icon/black-wordmark artwork). wordmark = the word alone, no mark. Every treatment is composed from the ENG-9298 geometry \u2014 ENG-9312 pins that the lockup's blue path IS the mark subpath followed by the wordmark subpaths, byte for byte \u2014 so a new treatment is a composition, never a fresh trace, and the three drawings cannot drift apart. Surfaces are the dashboard sidebar and the top nav. The top nav shows the WORDMARK portion at every width whatever the treatment, because ENG-9342 decided that deliberately (a full lockup at the header's icon height crowds the team switcher on a phone) \u2014 so a treatment changes the word's colour there, never whether a mark appears. The admin sidebar (ENG-9323) is NOT wired to this key and always renders the mark; widening it is a separate decision. Resolved SERVER-SIDE in (dashboard)/layout.tsx via getPublicEnumFlagServer, beside ninjafy-brand and in the same single GET /flags round trip, then passed down as a required prop. That is not a style preference: the client hook starts at its default and updates after an async fetch, so a client read would paint one logo and swap it after hydration \u2014 the exact flash ENG-9227 removed from the wordmark and ENG-8858 removed from the palette. Org and team are the useful pilot grains, as for ninjafy-brand: the single consumer evaluates in the active-org cookie scope, so a host- or agent-scoped override row is accepted by the table but never reached by the console.",
42333
+ flagType: "enum",
42334
+ allowedValues: ["lockup", "two-tone", "wordmark"],
42335
+ // Declared safe value is `lockup` — what ENG-9298 shipped. This flag has no
42336
+ // "off" direction: it selects among presentations that are all live-safe, so
42337
+ // fail-safe here means "the treatment currently in production", not the
42338
+ // narrowest one. A flag-DB read error, an archived row, or a stored value
42339
+ // outside allowedValues all resolve here (evaluate.ts normalizeFlagValue),
42340
+ // which is what makes an experimental value impossible to strand.
42341
+ defaultValue: "lockup",
42342
+ // Same trap as ninjafy-brand, and it bites harder here because there are no
42343
+ // client readers of this key AT ALL — it is server-resolved by construction.
42344
+ // `public` does NOT mean "read by a browser"; it means "readable through the
42345
+ // public map". getPublicEnumFlagServer resolves against the same GET /flags
42346
+ // endpoint the browser uses, and that route filters to listPublicFlagKeys()
42347
+ // (routes/flags.ts). Drop `public` and the key is simply absent from the map,
42348
+ // so the helper falls through to its default and returns `lockup` FOREVER —
42349
+ // the dropdown appearing to do nothing, with no error raised anywhere.
42350
+ public: true
42351
+ },
42304
42352
  {
42305
42353
  key: "agent-recruit",
42306
42354
  description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
@@ -34495,6 +34495,9 @@ var DIRECTIVE_KINDS = [
34495
34495
  ];
34496
34496
  var DIRECTIVE_SET = new Set(DIRECTIVE_KINDS);
34497
34497
 
34498
+ // ../core/dist/admin-debug/resume-precondition.js
34499
+ var DEFAULT_RESUME_LOOKBACK_MS = 14 * 24 * 60 * 60 * 1e3;
34500
+
34498
34501
  // ../core/dist/admin-debug/index.js
34499
34502
  var STUCK_RESTART_THRESHOLD_SECONDS = 15 * 60;
34500
34503
 
@@ -36113,6 +36116,29 @@ var FLAG_REGISTRY = [
36113
36116
  // first the real cut is higher than this and the pin under-reports.
36114
36117
  since: "0.28.570"
36115
36118
  },
36119
+ {
36120
+ key: "secret-files-tmpfs",
36121
+ description: "Host-side RAM-backing of the per-agent .env.integrations secret files (ENG-9348, epic ENG-9347). When on, the manager turns both copies (the agent-dir file and the project/ mirror) into symlinks pointing at a 0700 per-agent directory under tmpfs (/dev/shm, else /run), so plaintext channel/integration tokens live only in RAM: the persistent EBS volume holds a symlink (no token bytes), an EBS snapshot captures nothing, and a host shutdown is a genuine wipe. Every consumer path is unchanged (same file paths). Boolean gate; ships dark. Fail-safe in every direction \u2014 off is byte-for-byte today; a host with no genuine tmpfs root (e.g. macOS dev) silently keeps the persistent files; a symlink-setup error logs and falls back to the persistent path. Reboot clears tmpfs, and the manager re-backs on its next refresh (surviving reboot is not required \u2014 secrets are re-fetched on refresh).",
36122
+ flagType: "boolean",
36123
+ // Declared safe value is `false` (persistent files, today's behaviour).
36124
+ // Fail-safe direction: a flag-DB read error must never, on its own, start
36125
+ // relocating where prod secret files physically live. Flip on per-host for a
36126
+ // canary, verify no plaintext lands on the persistent volume, then fleet-wide
36127
+ // from the admin Feature Flags page.
36128
+ defaultValue: false,
36129
+ // ADR-0022 operator override, read by the host flag store's env layer (not a
36130
+ // hand-written process.env gate) — same posture as memory-extraction /
36131
+ // tool-call-audit above. Gives a per-host canary before the DB flag exists.
36132
+ envVar: "AGT_SECRET_FILES_TMPFS_ENABLED",
36133
+ // Deliberately-unreachable placeholder until this ships: no published CLI
36134
+ // carries the manager reader + core writer yet, so reach must report "no
36135
+ // host honors" rather than the `honors`-for-everyone that omitting `since`
36136
+ // produces. MOVE THIS PIN to the actual auto-published agt-cli version at
36137
+ // merge (auto-publish patch-bumps from main; verify against the tarball, the
36138
+ // ENG-8575/ENG-9350 lesson) — the marker is `setSecretFileTmpfsBacking` in
36139
+ // package/dist/lib/manager-worker.js.
36140
+ since: "99.0.0"
36141
+ },
36116
36142
  {
36117
36143
  key: "memory-file-tombstones",
36118
36144
  description: "Host-side removal of RETIRED agent memory files (ENG-9257). The control plane sends an explicit tombstone list on /host/memories and the manager moves the matching .md out of the agent's memory directory \u2014 but only when its write-time manifest says the manager itself wrote that exact file and the sha256 still matches, so an agent-edited or hand-authored file is retained and reported instead. Boolean gate; ships dark. Scope is retirement only, never expiry: /host/memories has always withheld expired rows, so an expiry-driven list would make months of accumulated backlog deletable on the first armed tick. This is the ONLY thing that makes retirement visible to the agent, which reads its memory directory straight off disk \u2014 every server-side reader already excludes retired rows, so with this off a retired memory is gone everywhere except the one surface that changes the agent's behaviour.",
@@ -36784,6 +36810,28 @@ var FLAG_REGISTRY = [
36784
36810
  // exactly the org whose brand should be shown.
36785
36811
  public: true
36786
36812
  },
36813
+ {
36814
+ key: "ninjafy-logo",
36815
+ description: "Which Ninjafy logo TREATMENT the console chrome renders (ENG-9365). This is a SUB-SELECTION under ninjafy-brand, not a second brand gate: it is consulted only once ninjafy-brand has already resolved ON, so with the brand off the value is inert and the half-branded state that flag's description calls unreachable stays unreachable. ninjafy-brand remains the single kill switch for the rebrand. It exists so candidate logo treatments can be put in front of a human and compared in the running console, rather than judged from a static export. lockup = mark and wordmark together, both in the brand blue \u2014 exactly what ENG-9298 shipped, so an unset flag is a no-op. two-tone = the mark in brand blue with the wordmark in the neutral text colour (the treatment of the blue-icon/black-wordmark artwork). wordmark = the word alone, no mark. Every treatment is composed from the ENG-9298 geometry \u2014 ENG-9312 pins that the lockup's blue path IS the mark subpath followed by the wordmark subpaths, byte for byte \u2014 so a new treatment is a composition, never a fresh trace, and the three drawings cannot drift apart. Surfaces are the dashboard sidebar and the top nav. The top nav shows the WORDMARK portion at every width whatever the treatment, because ENG-9342 decided that deliberately (a full lockup at the header's icon height crowds the team switcher on a phone) \u2014 so a treatment changes the word's colour there, never whether a mark appears. The admin sidebar (ENG-9323) is NOT wired to this key and always renders the mark; widening it is a separate decision. Resolved SERVER-SIDE in (dashboard)/layout.tsx via getPublicEnumFlagServer, beside ninjafy-brand and in the same single GET /flags round trip, then passed down as a required prop. That is not a style preference: the client hook starts at its default and updates after an async fetch, so a client read would paint one logo and swap it after hydration \u2014 the exact flash ENG-9227 removed from the wordmark and ENG-8858 removed from the palette. Org and team are the useful pilot grains, as for ninjafy-brand: the single consumer evaluates in the active-org cookie scope, so a host- or agent-scoped override row is accepted by the table but never reached by the console.",
36816
+ flagType: "enum",
36817
+ allowedValues: ["lockup", "two-tone", "wordmark"],
36818
+ // Declared safe value is `lockup` — what ENG-9298 shipped. This flag has no
36819
+ // "off" direction: it selects among presentations that are all live-safe, so
36820
+ // fail-safe here means "the treatment currently in production", not the
36821
+ // narrowest one. A flag-DB read error, an archived row, or a stored value
36822
+ // outside allowedValues all resolve here (evaluate.ts normalizeFlagValue),
36823
+ // which is what makes an experimental value impossible to strand.
36824
+ defaultValue: "lockup",
36825
+ // Same trap as ninjafy-brand, and it bites harder here because there are no
36826
+ // client readers of this key AT ALL — it is server-resolved by construction.
36827
+ // `public` does NOT mean "read by a browser"; it means "readable through the
36828
+ // public map". getPublicEnumFlagServer resolves against the same GET /flags
36829
+ // endpoint the browser uses, and that route filters to listPublicFlagKeys()
36830
+ // (routes/flags.ts). Drop `public` and the key is simply absent from the map,
36831
+ // so the helper falls through to its default and returns `lockup` FOREVER —
36832
+ // the dropdown appearing to do nothing, with no error raised anywhere.
36833
+ public: true
36834
+ },
36787
36835
  {
36788
36836
  key: "agent-recruit",
36789
36837
  description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
@@ -34639,6 +34639,9 @@ var DIRECTIVE_KINDS = [
34639
34639
  ];
34640
34640
  var DIRECTIVE_SET = new Set(DIRECTIVE_KINDS);
34641
34641
 
34642
+ // ../core/dist/admin-debug/resume-precondition.js
34643
+ var DEFAULT_RESUME_LOOKBACK_MS = 14 * 24 * 60 * 60 * 1e3;
34644
+
34642
34645
  // ../core/dist/admin-debug/index.js
34643
34646
  var STUCK_RESTART_THRESHOLD_SECONDS = 15 * 60;
34644
34647
 
@@ -36257,6 +36260,29 @@ var FLAG_REGISTRY = [
36257
36260
  // first the real cut is higher than this and the pin under-reports.
36258
36261
  since: "0.28.570"
36259
36262
  },
36263
+ {
36264
+ key: "secret-files-tmpfs",
36265
+ description: "Host-side RAM-backing of the per-agent .env.integrations secret files (ENG-9348, epic ENG-9347). When on, the manager turns both copies (the agent-dir file and the project/ mirror) into symlinks pointing at a 0700 per-agent directory under tmpfs (/dev/shm, else /run), so plaintext channel/integration tokens live only in RAM: the persistent EBS volume holds a symlink (no token bytes), an EBS snapshot captures nothing, and a host shutdown is a genuine wipe. Every consumer path is unchanged (same file paths). Boolean gate; ships dark. Fail-safe in every direction \u2014 off is byte-for-byte today; a host with no genuine tmpfs root (e.g. macOS dev) silently keeps the persistent files; a symlink-setup error logs and falls back to the persistent path. Reboot clears tmpfs, and the manager re-backs on its next refresh (surviving reboot is not required \u2014 secrets are re-fetched on refresh).",
36266
+ flagType: "boolean",
36267
+ // Declared safe value is `false` (persistent files, today's behaviour).
36268
+ // Fail-safe direction: a flag-DB read error must never, on its own, start
36269
+ // relocating where prod secret files physically live. Flip on per-host for a
36270
+ // canary, verify no plaintext lands on the persistent volume, then fleet-wide
36271
+ // from the admin Feature Flags page.
36272
+ defaultValue: false,
36273
+ // ADR-0022 operator override, read by the host flag store's env layer (not a
36274
+ // hand-written process.env gate) — same posture as memory-extraction /
36275
+ // tool-call-audit above. Gives a per-host canary before the DB flag exists.
36276
+ envVar: "AGT_SECRET_FILES_TMPFS_ENABLED",
36277
+ // Deliberately-unreachable placeholder until this ships: no published CLI
36278
+ // carries the manager reader + core writer yet, so reach must report "no
36279
+ // host honors" rather than the `honors`-for-everyone that omitting `since`
36280
+ // produces. MOVE THIS PIN to the actual auto-published agt-cli version at
36281
+ // merge (auto-publish patch-bumps from main; verify against the tarball, the
36282
+ // ENG-8575/ENG-9350 lesson) — the marker is `setSecretFileTmpfsBacking` in
36283
+ // package/dist/lib/manager-worker.js.
36284
+ since: "99.0.0"
36285
+ },
36260
36286
  {
36261
36287
  key: "memory-file-tombstones",
36262
36288
  description: "Host-side removal of RETIRED agent memory files (ENG-9257). The control plane sends an explicit tombstone list on /host/memories and the manager moves the matching .md out of the agent's memory directory \u2014 but only when its write-time manifest says the manager itself wrote that exact file and the sha256 still matches, so an agent-edited or hand-authored file is retained and reported instead. Boolean gate; ships dark. Scope is retirement only, never expiry: /host/memories has always withheld expired rows, so an expiry-driven list would make months of accumulated backlog deletable on the first armed tick. This is the ONLY thing that makes retirement visible to the agent, which reads its memory directory straight off disk \u2014 every server-side reader already excludes retired rows, so with this off a retired memory is gone everywhere except the one surface that changes the agent's behaviour.",
@@ -36928,6 +36954,28 @@ var FLAG_REGISTRY = [
36928
36954
  // exactly the org whose brand should be shown.
36929
36955
  public: true
36930
36956
  },
36957
+ {
36958
+ key: "ninjafy-logo",
36959
+ description: "Which Ninjafy logo TREATMENT the console chrome renders (ENG-9365). This is a SUB-SELECTION under ninjafy-brand, not a second brand gate: it is consulted only once ninjafy-brand has already resolved ON, so with the brand off the value is inert and the half-branded state that flag's description calls unreachable stays unreachable. ninjafy-brand remains the single kill switch for the rebrand. It exists so candidate logo treatments can be put in front of a human and compared in the running console, rather than judged from a static export. lockup = mark and wordmark together, both in the brand blue \u2014 exactly what ENG-9298 shipped, so an unset flag is a no-op. two-tone = the mark in brand blue with the wordmark in the neutral text colour (the treatment of the blue-icon/black-wordmark artwork). wordmark = the word alone, no mark. Every treatment is composed from the ENG-9298 geometry \u2014 ENG-9312 pins that the lockup's blue path IS the mark subpath followed by the wordmark subpaths, byte for byte \u2014 so a new treatment is a composition, never a fresh trace, and the three drawings cannot drift apart. Surfaces are the dashboard sidebar and the top nav. The top nav shows the WORDMARK portion at every width whatever the treatment, because ENG-9342 decided that deliberately (a full lockup at the header's icon height crowds the team switcher on a phone) \u2014 so a treatment changes the word's colour there, never whether a mark appears. The admin sidebar (ENG-9323) is NOT wired to this key and always renders the mark; widening it is a separate decision. Resolved SERVER-SIDE in (dashboard)/layout.tsx via getPublicEnumFlagServer, beside ninjafy-brand and in the same single GET /flags round trip, then passed down as a required prop. That is not a style preference: the client hook starts at its default and updates after an async fetch, so a client read would paint one logo and swap it after hydration \u2014 the exact flash ENG-9227 removed from the wordmark and ENG-8858 removed from the palette. Org and team are the useful pilot grains, as for ninjafy-brand: the single consumer evaluates in the active-org cookie scope, so a host- or agent-scoped override row is accepted by the table but never reached by the console.",
36960
+ flagType: "enum",
36961
+ allowedValues: ["lockup", "two-tone", "wordmark"],
36962
+ // Declared safe value is `lockup` — what ENG-9298 shipped. This flag has no
36963
+ // "off" direction: it selects among presentations that are all live-safe, so
36964
+ // fail-safe here means "the treatment currently in production", not the
36965
+ // narrowest one. A flag-DB read error, an archived row, or a stored value
36966
+ // outside allowedValues all resolve here (evaluate.ts normalizeFlagValue),
36967
+ // which is what makes an experimental value impossible to strand.
36968
+ defaultValue: "lockup",
36969
+ // Same trap as ninjafy-brand, and it bites harder here because there are no
36970
+ // client readers of this key AT ALL — it is server-resolved by construction.
36971
+ // `public` does NOT mean "read by a browser"; it means "readable through the
36972
+ // public map". getPublicEnumFlagServer resolves against the same GET /flags
36973
+ // endpoint the browser uses, and that route filters to listPublicFlagKeys()
36974
+ // (routes/flags.ts). Drop `public` and the key is simply absent from the map,
36975
+ // so the helper falls through to its default and returns `lockup` FOREVER —
36976
+ // the dropdown appearing to do nothing, with no error raised anywhere.
36977
+ public: true
36978
+ },
36931
36979
  {
36932
36980
  key: "agent-recruit",
36933
36981
  description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
@@ -43,8 +43,8 @@ import {
43
43
  writeDirectChatSessionState,
44
44
  writeEgressAllowlist,
45
45
  writePersistentClaudeWrapper
46
- } from "./chunk-7Y54PSMR.js";
47
- import "./chunk-AJNES24H.js";
46
+ } from "./chunk-LTOGVWUR.js";
47
+ import "./chunk-5DHJE2G7.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-F7JEOWHQ.js.map
95
+ //# sourceMappingURL=persistent-session-EZEYH3PM.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-7Y54PSMR.js";
4
- import "./chunk-AJNES24H.js";
3
+ } from "./chunk-LTOGVWUR.js";
4
+ import "./chunk-5DHJE2G7.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-7465YNMN.js.map
730
+ //# sourceMappingURL=responsiveness-probe-VS6GODYP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-AJNES24H.js";
3
+ } from "./chunk-5DHJE2G7.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-GBC5QPH3.js.map
206
+ //# sourceMappingURL=session-auth-dead-7U24PZZS.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.676",
3
+ "version": "0.28.678",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {