@integrity-labs/agt-cli 0.28.453 → 0.28.455

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.
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
100
100
  return { ok: true };
101
101
  } catch {
102
102
  }
103
- const { resolveClaudeBinary } = await import("./persistent-session-X5N7UFEF.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-Z2UQ4VVF.js");
104
104
  const claudeBin = resolveClaudeBinary();
105
105
  const pairEnv = {
106
106
  ...process.env,
@@ -373,4 +373,4 @@ export {
373
373
  startClaudePair,
374
374
  submitClaudePairCode
375
375
  };
376
- //# sourceMappingURL=claude-pair-runtime-NRKOKQYR.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-PHAR4IF4.js.map
@@ -42,7 +42,7 @@ import {
42
42
  resolveEffectivePinRaw,
43
43
  safeWriteJsonAtomic,
44
44
  setConfigHash
45
- } from "../chunk-HYKSLRTJ.js";
45
+ } from "../chunk-4X4JXF4D.js";
46
46
  import {
47
47
  getProjectDir as getProjectDir2,
48
48
  getReadyTasks,
@@ -164,7 +164,7 @@ import {
164
164
  toOpencodeModel,
165
165
  transcriptActivityAgeSeconds,
166
166
  writeEgressAllowlist
167
- } from "../chunk-3NJHNIO3.js";
167
+ } from "../chunk-UIUYOGPK.js";
168
168
  import {
169
169
  reapOrphanChannelMcps
170
170
  } from "../chunk-XWVM4KPK.js";
@@ -9949,7 +9949,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
9949
9949
  var lastVersionCheckAt = 0;
9950
9950
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
9951
9951
  var lastResponsivenessProbeAt = 0;
9952
- var agtCliVersion = true ? "0.28.453" : "dev";
9952
+ var agtCliVersion = true ? "0.28.455" : "dev";
9953
9953
  function resolveBrewPath(execFileSync2) {
9954
9954
  try {
9955
9955
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -11110,7 +11110,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
11110
11110
  if (codeNames.length === 0) return;
11111
11111
  void (async () => {
11112
11112
  try {
11113
- const { collectDiagnostics } = await import("../persistent-session-X5N7UFEF.js");
11113
+ const { collectDiagnostics } = await import("../persistent-session-Z2UQ4VVF.js");
11114
11114
  await api.post("/host/heartbeat", {
11115
11115
  host_id: hostId,
11116
11116
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor)
@@ -11217,7 +11217,7 @@ async function pollCycle() {
11217
11217
  }
11218
11218
  try {
11219
11219
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
11220
- const { collectDiagnostics } = await import("../persistent-session-X5N7UFEF.js");
11220
+ const { collectDiagnostics } = await import("../persistent-session-Z2UQ4VVF.js");
11221
11221
  const diagCodeNames = [...agentState.persistentSessionAgents];
11222
11222
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor) : void 0;
11223
11223
  let tailscaleHostname;
@@ -11331,7 +11331,7 @@ async function pollCycle() {
11331
11331
  collectResponsivenessProbes,
11332
11332
  collectPanelessActivityProbes,
11333
11333
  getResponsivenessIntervalMs
11334
- } = await import("../responsiveness-probe-OAZ55KPC.js");
11334
+ } = await import("../responsiveness-probe-WCF2QEVT.js");
11335
11335
  const probeIntervalMs = getResponsivenessIntervalMs();
11336
11336
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
11337
11337
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -11395,7 +11395,7 @@ async function pollCycle() {
11395
11395
  collectResponsivenessProbes,
11396
11396
  livePendingInboundOldestAgeSeconds,
11397
11397
  parkPendingInbound
11398
- } = await import("../responsiveness-probe-OAZ55KPC.js");
11398
+ } = await import("../responsiveness-probe-WCF2QEVT.js");
11399
11399
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
11400
11400
  const wedgeNow = /* @__PURE__ */ new Date();
11401
11401
  const liveAgents = agentState.persistentSessionAgents;
@@ -14767,7 +14767,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
14767
14767
  void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
14768
14768
  void (async () => {
14769
14769
  try {
14770
- const { collectDiagnostics } = await import("../persistent-session-X5N7UFEF.js");
14770
+ const { collectDiagnostics } = await import("../persistent-session-Z2UQ4VVF.js");
14771
14771
  await api.post("/host/heartbeat", {
14772
14772
  host_id: hostId,
14773
14773
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
@@ -14817,7 +14817,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
14817
14817
  }
14818
14818
  try {
14819
14819
  const hostId = await getHostId();
14820
- const { collectDiagnostics } = await import("../persistent-session-X5N7UFEF.js");
14820
+ const { collectDiagnostics } = await import("../persistent-session-Z2UQ4VVF.js");
14821
14821
  await api.post("/host/heartbeat", {
14822
14822
  host_id: hostId,
14823
14823
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
@@ -15270,7 +15270,7 @@ async function processClaudePairSessions(agents) {
15270
15270
  killPairSession,
15271
15271
  pairTmuxSession,
15272
15272
  finalizeClaudePairOnboarding
15273
- } = await import("../claude-pair-runtime-NRKOKQYR.js");
15273
+ } = await import("../claude-pair-runtime-PHAR4IF4.js");
15274
15274
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
15275
15275
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
15276
15276
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -35154,7 +35154,22 @@ var FLAG_REGISTRY = [
35154
35154
  // enforce reroutes a message the agent asked to send to channel root into a
35155
35155
  // thread - a visible destination change, so flipping toward it is deliberate
35156
35156
  // (ADR-0022 sensitive-flag confirm).
35157
- sensitive: true
35157
+ sensitive: true,
35158
+ // ENG-8235: the agt-cli whose bundle first carries resolveSlackHotThreadMode.
35159
+ // Without this the flip-reach modal reports FULL reach (an undefined `since`
35160
+ // means "every host can honour it"), which is wrong for a host-read flag that
35161
+ // older hosts have no reader for - and this flag's pending action IS a flip,
35162
+ // once the ENG-7855 soak has data.
35163
+ //
35164
+ // BISECTED from the published npm artifacts rather than inferred from the
35165
+ // merge commit: 0.28.338 lacks the reader; 0.28.339 (2026-07-18T02:48Z) carries
35166
+ // both AGT_SLACK_HOT_THREAD_GUARD_MODE and to_channel_root in
35167
+ // dist/mcp/slack-channel.js. ENG-7462 is usually cited as 0.28.340, but two
35168
+ // publishes fired 8 minutes apart and .339 is the one that shipped the reader;
35169
+ // `since` is a reach THRESHOLD, so .340 would wrongly mark hosts on exactly
35170
+ // .339 as un-reached. Excluded from projectDefinition, so setting it does not
35171
+ // roll FLAGS_SCHEMA_VERSION.
35172
+ since: "0.28.339"
35158
35173
  },
35159
35174
  {
35160
35175
  key: "compaction-notice",
@@ -40499,7 +40499,22 @@ var FLAG_REGISTRY = [
40499
40499
  // enforce reroutes a message the agent asked to send to channel root into a
40500
40500
  // thread - a visible destination change, so flipping toward it is deliberate
40501
40501
  // (ADR-0022 sensitive-flag confirm).
40502
- sensitive: true
40502
+ sensitive: true,
40503
+ // ENG-8235: the agt-cli whose bundle first carries resolveSlackHotThreadMode.
40504
+ // Without this the flip-reach modal reports FULL reach (an undefined `since`
40505
+ // means "every host can honour it"), which is wrong for a host-read flag that
40506
+ // older hosts have no reader for - and this flag's pending action IS a flip,
40507
+ // once the ENG-7855 soak has data.
40508
+ //
40509
+ // BISECTED from the published npm artifacts rather than inferred from the
40510
+ // merge commit: 0.28.338 lacks the reader; 0.28.339 (2026-07-18T02:48Z) carries
40511
+ // both AGT_SLACK_HOT_THREAD_GUARD_MODE and to_channel_root in
40512
+ // dist/mcp/slack-channel.js. ENG-7462 is usually cited as 0.28.340, but two
40513
+ // publishes fired 8 minutes apart and .339 is the one that shipped the reader;
40514
+ // `since` is a reach THRESHOLD, so .340 would wrongly mark hosts on exactly
40515
+ // .339 as un-reached. Excluded from projectDefinition, so setting it does not
40516
+ // roll FLAGS_SCHEMA_VERSION.
40517
+ since: "0.28.339"
40503
40518
  },
40504
40519
  {
40505
40520
  key: "compaction-notice",
@@ -41231,7 +41246,8 @@ var IdentityResolver = class {
41231
41246
  );
41232
41247
  }
41233
41248
  if (res.status >= 400) {
41234
- throw new IdentityError(res.status, `Credential fetch failed: ${res.status} ${data.error ?? ""}`.trim());
41249
+ const explanation = data.detail?.trim() || data.error?.trim() || "";
41250
+ throw new IdentityError(res.status, `Credential fetch failed: ${res.status} ${explanation}`.trim());
41235
41251
  }
41236
41252
  if (!data.access_token) {
41237
41253
  throw new IdentityError(502, "Broker returned 200 but no access_token - API contract mismatch");
@@ -7633,6 +7633,42 @@ var require__ = __commonJS({
7633
7633
  }
7634
7634
  });
7635
7635
 
7636
+ // ../core/dist/alerts/snooze.js
7637
+ var FIXED_SECONDS;
7638
+ var init_snooze = __esm({
7639
+ "../core/dist/alerts/snooze.js"() {
7640
+ "use strict";
7641
+ FIXED_SECONDS = {
7642
+ "15m": 15 * 60,
7643
+ "1h": 60 * 60,
7644
+ "4h": 4 * 60 * 60
7645
+ };
7646
+ }
7647
+ });
7648
+
7649
+ // ../core/dist/channels/slack-block-kit.js
7650
+ function decodeActionId(actionId) {
7651
+ const m = ACTION_ID_RE.exec(actionId);
7652
+ if (!m)
7653
+ return null;
7654
+ return { callbackId: m[1], token: m[2] };
7655
+ }
7656
+ function isRoutableActionId(actionId) {
7657
+ return decodeActionId(actionId) !== null;
7658
+ }
7659
+ function isLinkButton(element) {
7660
+ return typeof element.url === "string" && element.url.length > 0;
7661
+ }
7662
+ var ACTION_ID_RE, UNROUTABLE_ACTION_ID_MESSAGE;
7663
+ var init_slack_block_kit = __esm({
7664
+ "../core/dist/channels/slack-block-kit.js"() {
7665
+ "use strict";
7666
+ init_snooze();
7667
+ ACTION_ID_RE = /^aug:([0-9a-f-]{36}):([A-Za-z0-9_-]{1,200})$/;
7668
+ UNROUTABLE_ACTION_ID_MESSAGE = "interactive buttons must be created with the `request_buttons` tool \u2014 it mints the `aug:<callback-id>:<token>` action_id that makes a tap routable. A hand-written action_id renders fine but its click is silently dropped: the agent is never notified and the buttons are never swapped for the chosen value. For a non-interactive button, set `url` to make it a link button.";
7669
+ }
7670
+ });
7671
+
7636
7672
  // ../../node_modules/.pnpm/yaml@2.8.4/node_modules/yaml/dist/nodes/identity.js
7637
7673
  var require_identity = __commonJS({
7638
7674
  "../../node_modules/.pnpm/yaml@2.8.4/node_modules/yaml/dist/nodes/identity.js"(exports) {
@@ -22561,7 +22597,7 @@ __export(slack_block_kit_runtime_exports, {
22561
22597
  apiCall: () => apiCall,
22562
22598
  buildAskUserBlocks: () => buildAskUserBlocks,
22563
22599
  createPendingInteraction: () => createPendingInteraction,
22564
- decodeActionId: () => decodeActionId,
22600
+ decodeActionId: () => decodeActionId2,
22565
22601
  encodeActionId: () => encodeActionId2,
22566
22602
  generateOptionToken: () => generateOptionToken,
22567
22603
  getMutedNotifyChannels: () => getMutedNotifyChannels,
@@ -22682,6 +22718,8 @@ function validateActionsBlock(b, path, push) {
22682
22718
  push(`${path}.elements[${i}].action_id`, "button requires a non-empty `action_id`");
22683
22719
  } else if (actionId.length > SLACK_LIMITS.identifierChars) {
22684
22720
  push(`${path}.elements[${i}].action_id`, `max ${SLACK_LIMITS.identifierChars} chars`);
22721
+ } else if (!isRoutableActionId(actionId) && !isLinkButton(el)) {
22722
+ push(`${path}.elements[${i}].action_id`, UNROUTABLE_ACTION_ID_MESSAGE);
22685
22723
  }
22686
22724
  const value = el.value;
22687
22725
  if (value !== void 0) {
@@ -22712,8 +22750,8 @@ function validateTextObject(text, path, maxChars, allowedTypes, push) {
22712
22750
  function encodeActionId2(callbackId, token) {
22713
22751
  return `aug:${callbackId}:${token}`;
22714
22752
  }
22715
- function decodeActionId(actionId) {
22716
- const m = ACTION_ID_RE.exec(actionId);
22753
+ function decodeActionId2(actionId) {
22754
+ const m = ACTION_ID_RE2.exec(actionId);
22717
22755
  if (!m) return null;
22718
22756
  return { callbackId: m[1], token: m[2] };
22719
22757
  }
@@ -22806,11 +22844,12 @@ async function getMutedNotifyChannels(cfg) {
22806
22844
  return [];
22807
22845
  }
22808
22846
  }
22809
- var SLACK_LIMITS, SUPPORTED_BLOCK_TYPES, SUPPORTED_ACTION_ELEMENTS, ACTION_ID_RE;
22847
+ var SLACK_LIMITS, SUPPORTED_BLOCK_TYPES, SUPPORTED_ACTION_ELEMENTS, ACTION_ID_RE2;
22810
22848
  var init_slack_block_kit_runtime = __esm({
22811
22849
  "src/slack-block-kit-runtime.ts"() {
22812
22850
  "use strict";
22813
22851
  init_ask_user_runtime();
22852
+ init_slack_block_kit();
22814
22853
  init_ask_user_runtime();
22815
22854
  SLACK_LIMITS = {
22816
22855
  blocksPerMessage: 50,
@@ -22825,7 +22864,7 @@ var init_slack_block_kit_runtime = __esm({
22825
22864
  };
22826
22865
  SUPPORTED_BLOCK_TYPES = ["header", "section", "divider", "context", "actions"];
22827
22866
  SUPPORTED_ACTION_ELEMENTS = ["button"];
22828
- ACTION_ID_RE = /^aug:([0-9a-f-]{36}):([A-Za-z0-9_-]{1,200})$/;
22867
+ ACTION_ID_RE2 = /^aug:([0-9a-f-]{36}):([A-Za-z0-9_-]{1,200})$/;
22829
22868
  }
22830
22869
  });
22831
22870
 
@@ -31308,12 +31347,8 @@ var compiledCharter = ajv.compile(charterSchema);
31308
31347
  var compiledTools = ajv.compile(toolsSchema);
31309
31348
  var compiledIntegrationMetadata = ajv.compile(integrationMetadataSchema);
31310
31349
 
31311
- // ../core/dist/alerts/snooze.js
31312
- var FIXED_SECONDS = {
31313
- "15m": 15 * 60,
31314
- "1h": 60 * 60,
31315
- "4h": 4 * 60 * 60
31316
- };
31350
+ // ../core/dist/integrations/integration-broker/card-renderer.js
31351
+ init_slack_block_kit();
31317
31352
 
31318
31353
  // ../core/dist/channels/registry.js
31319
31354
  var CHANNEL_REGISTRY = [
@@ -31779,6 +31814,7 @@ var MSTEAMS_SCOPE_PRESETS = {
31779
31814
  };
31780
31815
 
31781
31816
  // ../core/dist/channels/kanban-card-state.js
31817
+ init_slack_block_kit();
31782
31818
  var KANBAN_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
31783
31819
  "done",
31784
31820
  "failed",
@@ -34061,6 +34097,9 @@ var WAITING_KINDS = [
34061
34097
  ];
34062
34098
  var WAITING_KIND_SET = new Set(WAITING_KINDS);
34063
34099
 
34100
+ // ../core/dist/alerts/index.js
34101
+ init_snooze();
34102
+
34064
34103
  // ../core/dist/conversations/metrics.js
34065
34104
  var PERIOD_CONFIG = {
34066
34105
  "24h": { windowMs: 24 * 60 * 60 * 1e3, bucket: "hour" },
@@ -34723,7 +34762,22 @@ var FLAG_REGISTRY = [
34723
34762
  // enforce reroutes a message the agent asked to send to channel root into a
34724
34763
  // thread - a visible destination change, so flipping toward it is deliberate
34725
34764
  // (ADR-0022 sensitive-flag confirm).
34726
- sensitive: true
34765
+ sensitive: true,
34766
+ // ENG-8235: the agt-cli whose bundle first carries resolveSlackHotThreadMode.
34767
+ // Without this the flip-reach modal reports FULL reach (an undefined `since`
34768
+ // means "every host can honour it"), which is wrong for a host-read flag that
34769
+ // older hosts have no reader for - and this flag's pending action IS a flip,
34770
+ // once the ENG-7855 soak has data.
34771
+ //
34772
+ // BISECTED from the published npm artifacts rather than inferred from the
34773
+ // merge commit: 0.28.338 lacks the reader; 0.28.339 (2026-07-18T02:48Z) carries
34774
+ // both AGT_SLACK_HOT_THREAD_GUARD_MODE and to_channel_root in
34775
+ // dist/mcp/slack-channel.js. ENG-7462 is usually cited as 0.28.340, but two
34776
+ // publishes fired 8 minutes apart and .339 is the one that shipped the reader;
34777
+ // `since` is a reach THRESHOLD, so .340 would wrongly mark hosts on exactly
34778
+ // .339 as un-reached. Excluded from projectDefinition, so setting it does not
34779
+ // roll FLAGS_SCHEMA_VERSION.
34780
+ since: "0.28.339"
34727
34781
  },
34728
34782
  {
34729
34783
  key: "compaction-notice",
@@ -7633,6 +7633,42 @@ var require__ = __commonJS({
7633
7633
  }
7634
7634
  });
7635
7635
 
7636
+ // ../core/dist/alerts/snooze.js
7637
+ var FIXED_SECONDS;
7638
+ var init_snooze = __esm({
7639
+ "../core/dist/alerts/snooze.js"() {
7640
+ "use strict";
7641
+ FIXED_SECONDS = {
7642
+ "15m": 15 * 60,
7643
+ "1h": 60 * 60,
7644
+ "4h": 4 * 60 * 60
7645
+ };
7646
+ }
7647
+ });
7648
+
7649
+ // ../core/dist/channels/slack-block-kit.js
7650
+ function decodeActionId(actionId) {
7651
+ const m = ACTION_ID_RE.exec(actionId);
7652
+ if (!m)
7653
+ return null;
7654
+ return { callbackId: m[1], token: m[2] };
7655
+ }
7656
+ function isRoutableActionId(actionId) {
7657
+ return decodeActionId(actionId) !== null;
7658
+ }
7659
+ function isLinkButton(element) {
7660
+ return typeof element.url === "string" && element.url.length > 0;
7661
+ }
7662
+ var ACTION_ID_RE, UNROUTABLE_ACTION_ID_MESSAGE;
7663
+ var init_slack_block_kit = __esm({
7664
+ "../core/dist/channels/slack-block-kit.js"() {
7665
+ "use strict";
7666
+ init_snooze();
7667
+ ACTION_ID_RE = /^aug:([0-9a-f-]{36}):([A-Za-z0-9_-]{1,200})$/;
7668
+ UNROUTABLE_ACTION_ID_MESSAGE = "interactive buttons must be created with the `request_buttons` tool \u2014 it mints the `aug:<callback-id>:<token>` action_id that makes a tap routable. A hand-written action_id renders fine but its click is silently dropped: the agent is never notified and the buttons are never swapped for the chosen value. For a non-interactive button, set `url` to make it a link button.";
7669
+ }
7670
+ });
7671
+
7636
7672
  // ../../node_modules/.pnpm/yaml@2.8.4/node_modules/yaml/dist/nodes/identity.js
7637
7673
  var require_identity = __commonJS({
7638
7674
  "../../node_modules/.pnpm/yaml@2.8.4/node_modules/yaml/dist/nodes/identity.js"(exports) {
@@ -22561,7 +22597,7 @@ __export(slack_block_kit_runtime_exports, {
22561
22597
  apiCall: () => apiCall,
22562
22598
  buildAskUserBlocks: () => buildAskUserBlocks,
22563
22599
  createPendingInteraction: () => createPendingInteraction,
22564
- decodeActionId: () => decodeActionId,
22600
+ decodeActionId: () => decodeActionId2,
22565
22601
  encodeActionId: () => encodeActionId2,
22566
22602
  generateOptionToken: () => generateOptionToken,
22567
22603
  getMutedNotifyChannels: () => getMutedNotifyChannels,
@@ -22682,6 +22718,8 @@ function validateActionsBlock(b, path, push) {
22682
22718
  push(`${path}.elements[${i}].action_id`, "button requires a non-empty `action_id`");
22683
22719
  } else if (actionId.length > SLACK_LIMITS.identifierChars) {
22684
22720
  push(`${path}.elements[${i}].action_id`, `max ${SLACK_LIMITS.identifierChars} chars`);
22721
+ } else if (!isRoutableActionId(actionId) && !isLinkButton(el)) {
22722
+ push(`${path}.elements[${i}].action_id`, UNROUTABLE_ACTION_ID_MESSAGE);
22685
22723
  }
22686
22724
  const value = el.value;
22687
22725
  if (value !== void 0) {
@@ -22712,8 +22750,8 @@ function validateTextObject(text, path, maxChars, allowedTypes, push) {
22712
22750
  function encodeActionId2(callbackId, token) {
22713
22751
  return `aug:${callbackId}:${token}`;
22714
22752
  }
22715
- function decodeActionId(actionId) {
22716
- const m = ACTION_ID_RE.exec(actionId);
22753
+ function decodeActionId2(actionId) {
22754
+ const m = ACTION_ID_RE2.exec(actionId);
22717
22755
  if (!m) return null;
22718
22756
  return { callbackId: m[1], token: m[2] };
22719
22757
  }
@@ -22806,11 +22844,12 @@ async function getMutedNotifyChannels(cfg) {
22806
22844
  return [];
22807
22845
  }
22808
22846
  }
22809
- var SLACK_LIMITS, SUPPORTED_BLOCK_TYPES, SUPPORTED_ACTION_ELEMENTS, ACTION_ID_RE;
22847
+ var SLACK_LIMITS, SUPPORTED_BLOCK_TYPES, SUPPORTED_ACTION_ELEMENTS, ACTION_ID_RE2;
22810
22848
  var init_slack_block_kit_runtime = __esm({
22811
22849
  "src/slack-block-kit-runtime.ts"() {
22812
22850
  "use strict";
22813
22851
  init_ask_user_runtime();
22852
+ init_slack_block_kit();
22814
22853
  init_ask_user_runtime();
22815
22854
  SLACK_LIMITS = {
22816
22855
  blocksPerMessage: 50,
@@ -22825,7 +22864,7 @@ var init_slack_block_kit_runtime = __esm({
22825
22864
  };
22826
22865
  SUPPORTED_BLOCK_TYPES = ["header", "section", "divider", "context", "actions"];
22827
22866
  SUPPORTED_ACTION_ELEMENTS = ["button"];
22828
- ACTION_ID_RE = /^aug:([0-9a-f-]{36}):([A-Za-z0-9_-]{1,200})$/;
22867
+ ACTION_ID_RE2 = /^aug:([0-9a-f-]{36}):([A-Za-z0-9_-]{1,200})$/;
22829
22868
  }
22830
22869
  });
22831
22870
 
@@ -31610,12 +31649,8 @@ var compiledCharter = ajv.compile(charterSchema);
31610
31649
  var compiledTools = ajv.compile(toolsSchema);
31611
31650
  var compiledIntegrationMetadata = ajv.compile(integrationMetadataSchema);
31612
31651
 
31613
- // ../core/dist/alerts/snooze.js
31614
- var FIXED_SECONDS = {
31615
- "15m": 15 * 60,
31616
- "1h": 60 * 60,
31617
- "4h": 4 * 60 * 60
31618
- };
31652
+ // ../core/dist/integrations/integration-broker/card-renderer.js
31653
+ init_slack_block_kit();
31619
31654
 
31620
31655
  // ../core/dist/channels/registry.js
31621
31656
  var CHANNEL_REGISTRY = [
@@ -32081,6 +32116,7 @@ var MSTEAMS_SCOPE_PRESETS = {
32081
32116
  };
32082
32117
 
32083
32118
  // ../core/dist/channels/kanban-card-state.js
32119
+ init_slack_block_kit();
32084
32120
  var KANBAN_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
32085
32121
  "done",
32086
32122
  "failed",
@@ -34363,6 +34399,9 @@ var WAITING_KINDS = [
34363
34399
  ];
34364
34400
  var WAITING_KIND_SET = new Set(WAITING_KINDS);
34365
34401
 
34402
+ // ../core/dist/alerts/index.js
34403
+ init_snooze();
34404
+
34366
34405
  // ../core/dist/conversations/metrics.js
34367
34406
  var PERIOD_CONFIG = {
34368
34407
  "24h": { windowMs: 24 * 60 * 60 * 1e3, bucket: "hour" },
@@ -35025,7 +35064,22 @@ var FLAG_REGISTRY = [
35025
35064
  // enforce reroutes a message the agent asked to send to channel root into a
35026
35065
  // thread - a visible destination change, so flipping toward it is deliberate
35027
35066
  // (ADR-0022 sensitive-flag confirm).
35028
- sensitive: true
35067
+ sensitive: true,
35068
+ // ENG-8235: the agt-cli whose bundle first carries resolveSlackHotThreadMode.
35069
+ // Without this the flip-reach modal reports FULL reach (an undefined `since`
35070
+ // means "every host can honour it"), which is wrong for a host-read flag that
35071
+ // older hosts have no reader for - and this flag's pending action IS a flip,
35072
+ // once the ENG-7855 soak has data.
35073
+ //
35074
+ // BISECTED from the published npm artifacts rather than inferred from the
35075
+ // merge commit: 0.28.338 lacks the reader; 0.28.339 (2026-07-18T02:48Z) carries
35076
+ // both AGT_SLACK_HOT_THREAD_GUARD_MODE and to_channel_root in
35077
+ // dist/mcp/slack-channel.js. ENG-7462 is usually cited as 0.28.340, but two
35078
+ // publishes fired 8 minutes apart and .339 is the one that shipped the reader;
35079
+ // `since` is a reach THRESHOLD, so .340 would wrongly mark hosts on exactly
35080
+ // .339 as un-reached. Excluded from projectDefinition, so setting it does not
35081
+ // roll FLAGS_SCHEMA_VERSION.
35082
+ since: "0.28.339"
35029
35083
  },
35030
35084
  {
35031
35085
  key: "compaction-notice",
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-3NJHNIO3.js";
39
+ } from "./chunk-UIUYOGPK.js";
40
40
  import "./chunk-XWVM4KPK.js";
41
41
  export {
42
42
  EGRESS_BASELINE_DOMAINS,
@@ -77,4 +77,4 @@ export {
77
77
  writeEgressAllowlist,
78
78
  writePersistentClaudeWrapper
79
79
  };
80
- //# sourceMappingURL=persistent-session-X5N7UFEF.js.map
80
+ //# sourceMappingURL=persistent-session-Z2UQ4VVF.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-3NJHNIO3.js";
3
+ } from "./chunk-UIUYOGPK.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -528,4 +528,4 @@ export {
528
528
  readAndResetSlackReplyBindingClassifications,
529
529
  readAndResetSlackReplyTargetClassifications
530
530
  };
531
- //# sourceMappingURL=responsiveness-probe-OAZ55KPC.js.map
531
+ //# sourceMappingURL=responsiveness-probe-WCF2QEVT.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.453",
3
+ "version": "0.28.455",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {