@integrity-labs/agt-cli 0.28.787 → 0.28.789

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-5OCP47I3.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-EU44RQZN.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-ML7KET4B.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-AFLT3FOT.js.map
@@ -58,7 +58,7 @@ import {
58
58
  safeWriteJsonAtomic,
59
59
  setConfigHash,
60
60
  tripClass
61
- } from "../chunk-IEBDDVAG.js";
61
+ } from "../chunk-HV5D3USK.js";
62
62
  import {
63
63
  getProjectDir as getProjectDir2,
64
64
  getReadyTasks,
@@ -120,7 +120,7 @@ import {
120
120
  takeZombieDetection,
121
121
  toOpencodeModel,
122
122
  writeEgressAllowlist
123
- } from "../chunk-EXCWZPDJ.js";
123
+ } from "../chunk-2GZ7EG7V.js";
124
124
  import {
125
125
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
126
126
  AnchorSessionClient,
@@ -212,7 +212,7 @@ import {
212
212
  subagentActivityAgeSeconds,
213
213
  sumTranscriptUsageInWindow,
214
214
  transcriptActivityAgeSeconds
215
- } from "../chunk-LLDK74IY.js";
215
+ } from "../chunk-PUEQQOJI.js";
216
216
  import {
217
217
  reapOrphanChannelMcps
218
218
  } from "../chunk-XWVM4KPK.js";
@@ -12915,7 +12915,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
12915
12915
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
12916
12916
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
12917
12917
  async function channelInboundActivityAgeSecondsFor(codeName) {
12918
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-QYSMGG5E.js");
12918
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-ENOEURQY.js");
12919
12919
  const newest = newestPendingInboundActivityMtimeMs(dirname10(paneLogPath(codeName)));
12920
12920
  if (newest === null) return null;
12921
12921
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -13575,7 +13575,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
13575
13575
  var lastVersionCheckAt = 0;
13576
13576
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
13577
13577
  var lastResponsivenessProbeAt = 0;
13578
- var agtCliVersion = true ? "0.28.787" : "dev";
13578
+ var agtCliVersion = true ? "0.28.789" : "dev";
13579
13579
  function resolveBrewPath(execFileSync2) {
13580
13580
  try {
13581
13581
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -15122,7 +15122,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
15122
15122
  if (codeNames.length === 0) return;
15123
15123
  void (async () => {
15124
15124
  try {
15125
- const { collectDiagnostics } = await import("../persistent-session-5OCP47I3.js");
15125
+ const { collectDiagnostics } = await import("../persistent-session-EU44RQZN.js");
15126
15126
  await api.post("/host/heartbeat", {
15127
15127
  host_id: hostId,
15128
15128
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -15263,7 +15263,7 @@ async function pollCycleInner() {
15263
15263
  }
15264
15264
  try {
15265
15265
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
15266
- const { collectDiagnostics } = await import("../persistent-session-5OCP47I3.js");
15266
+ const { collectDiagnostics } = await import("../persistent-session-EU44RQZN.js");
15267
15267
  const diagCodeNames = [...agentState.persistentSessionAgents];
15268
15268
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
15269
15269
  let tailscaleHostname;
@@ -15432,7 +15432,7 @@ async function pollCycleInner() {
15432
15432
  collectPanelessActivityProbes,
15433
15433
  getResponsivenessIntervalMs,
15434
15434
  occupancyQualificationClassifications
15435
- } = await import("../responsiveness-probe-QYSMGG5E.js");
15435
+ } = await import("../responsiveness-probe-ENOEURQY.js");
15436
15436
  const probeIntervalMs = getResponsivenessIntervalMs();
15437
15437
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
15438
15438
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -15542,7 +15542,7 @@ async function pollCycleInner() {
15542
15542
  collectResponsivenessProbes,
15543
15543
  livePendingInboundOldestAgeSeconds,
15544
15544
  parkPendingInbound
15545
- } = await import("../responsiveness-probe-QYSMGG5E.js");
15545
+ } = await import("../responsiveness-probe-ENOEURQY.js");
15546
15546
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
15547
15547
  const wedgeNow = /* @__PURE__ */ new Date();
15548
15548
  const liveAgents = agentState.persistentSessionAgents;
@@ -15698,7 +15698,7 @@ async function pollCycleInner() {
15698
15698
  }
15699
15699
  try {
15700
15700
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
15701
- const { probeSessionAuth } = await import("../session-auth-dead-WFXDJQ5L.js");
15701
+ const { probeSessionAuth } = await import("../session-auth-dead-TWWJAF7O.js");
15702
15702
  const observations = [];
15703
15703
  const pendingCacheCommits = [];
15704
15704
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -19799,7 +19799,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
19799
19799
  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}`));
19800
19800
  void (async () => {
19801
19801
  try {
19802
- const { collectDiagnostics } = await import("../persistent-session-5OCP47I3.js");
19802
+ const { collectDiagnostics } = await import("../persistent-session-EU44RQZN.js");
19803
19803
  await api.post("/host/heartbeat", {
19804
19804
  host_id: hostId,
19805
19805
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -19845,7 +19845,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
19845
19845
  }
19846
19846
  try {
19847
19847
  const hostId = await getHostId();
19848
- const { collectDiagnostics } = await import("../persistent-session-5OCP47I3.js");
19848
+ const { collectDiagnostics } = await import("../persistent-session-EU44RQZN.js");
19849
19849
  await api.post("/host/heartbeat", {
19850
19850
  host_id: hostId,
19851
19851
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -20481,7 +20481,7 @@ async function processClaudePairSessions(agents) {
20481
20481
  killPairSession,
20482
20482
  pairTmuxSession,
20483
20483
  finalizeClaudePairOnboarding
20484
- } = await import("../claude-pair-runtime-ML7KET4B.js");
20484
+ } = await import("../claude-pair-runtime-AFLT3FOT.js");
20485
20485
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
20486
20486
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
20487
20487
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -37635,31 +37635,31 @@ var FLAG_REGISTRY = [
37635
37635
  // survive it). The dependency is real; it is on the CLI's ability to SURVIVE
37636
37636
  // the flag, not to READ it, and the modal cannot tell those apart.
37637
37637
  //
37638
- // Pinned ABOVE every published release on purpose, the `agt-bin-path`
37639
- // precedent: it classifies EVERY host as `stale`, so the modal reports no
37640
- // reach rather than reach it has no basis for. A guessed number would be
37641
- // worse than a placeholder, and the two directions are not symmetric —
37642
- // too HIGH over-warns (annoying), too LOW promises reach to a build that
37643
- // answers a job id with a TypeError inside file-write logic (a broken export
37644
- // reported to the agent as "download failed").
37638
+ // VERIFIED AGAINST THE PUBLISHED TARBALL, NOT THE MERGE (2026-09-03).
37639
+ // `npm pack @integrity-labs/agt-cli@<version>`, then grep the extracted
37640
+ // `package/dist/mcp/index.js`. That file is present in BOTH builds and both
37641
+ // carry `exportArtefactToFile`, so the absences below are an absence of the
37642
+ // CODE rather than of the file:
37645
37643
  //
37646
- // The exact version cannot be known here: the CLI auto-publishes ON MERGE of
37647
- // this change, patch-bumping from whatever is current, so any pre-merge
37648
- // value is a guess. Do NOT read it off `apps/cli/package.json`, and do NOT
37649
- // trust a version produced by re-running a failed publish job (ENG-9647: a
37650
- // re-run rebuilds the ORIGINAL tree under a HIGHER number, so the version
37651
- // string would claim a capability the bytes do not carry).
37644
+ // 0.28.773 — `classifyExportResponse`, `pendingExportText` and
37645
+ // `artefact-export-response` all ABSENT.
37646
+ // 0.28.774 — all three PRESENT.
37647
+ //
37648
+ // Hence the pin. Do NOT read a replacement off `apps/cli/package.json`, and
37649
+ // do NOT trust a version produced by re-running a failed publish job
37650
+ // (ENG-9647: a re-run rebuilds the ORIGINAL tree under a HIGHER number, so
37651
+ // the version string would claim a capability the bytes do not carry). The
37652
+ // publish workflow's output only identifies a CANDIDATE; the tarball is what
37653
+ // proves it, so re-run the same two greps if this pin ever has to move.
37652
37654
  //
37653
37655
  // AND `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place —
37654
37656
  // the flip-reach modal. Nothing in the evaluation or override-write path
37655
37657
  // consults it, so this changes what an operator is TOLD and does not stop a
37656
37658
  // flip on an under-`since` host. What holds the line is `defaultValue:
37657
- // false` + `sensitive: true` + the runbook.
37658
- //
37659
- // REPLACING IT IS STEP 1 OF THE ARMING PROCEDURE in
37660
- // docs/runbooks/async-export-rollout.md, so the placeholder has a named
37661
- // owner and a named moment rather than being a deferral nobody holds.
37662
- since: "0.29.0"
37659
+ // false` + `sensitive: true` + the runbook. It is likewise excluded from
37660
+ // `projectDefinition` in schema-version.ts, so moving it does not roll
37661
+ // FLAGS_SCHEMA_VERSION for a fleet that cannot read it anyway.
37662
+ since: "0.28.774"
37663
37663
  },
37664
37664
  {
37665
37665
  key: "artefact-export-public-jobs",
package/dist/mcp/index.js CHANGED
@@ -44695,31 +44695,31 @@ var FLAG_REGISTRY = [
44695
44695
  // survive it). The dependency is real; it is on the CLI's ability to SURVIVE
44696
44696
  // the flag, not to READ it, and the modal cannot tell those apart.
44697
44697
  //
44698
- // Pinned ABOVE every published release on purpose, the `agt-bin-path`
44699
- // precedent: it classifies EVERY host as `stale`, so the modal reports no
44700
- // reach rather than reach it has no basis for. A guessed number would be
44701
- // worse than a placeholder, and the two directions are not symmetric —
44702
- // too HIGH over-warns (annoying), too LOW promises reach to a build that
44703
- // answers a job id with a TypeError inside file-write logic (a broken export
44704
- // reported to the agent as "download failed").
44698
+ // VERIFIED AGAINST THE PUBLISHED TARBALL, NOT THE MERGE (2026-09-03).
44699
+ // `npm pack @integrity-labs/agt-cli@<version>`, then grep the extracted
44700
+ // `package/dist/mcp/index.js`. That file is present in BOTH builds and both
44701
+ // carry `exportArtefactToFile`, so the absences below are an absence of the
44702
+ // CODE rather than of the file:
44705
44703
  //
44706
- // The exact version cannot be known here: the CLI auto-publishes ON MERGE of
44707
- // this change, patch-bumping from whatever is current, so any pre-merge
44708
- // value is a guess. Do NOT read it off `apps/cli/package.json`, and do NOT
44709
- // trust a version produced by re-running a failed publish job (ENG-9647: a
44710
- // re-run rebuilds the ORIGINAL tree under a HIGHER number, so the version
44711
- // string would claim a capability the bytes do not carry).
44704
+ // 0.28.773 — `classifyExportResponse`, `pendingExportText` and
44705
+ // `artefact-export-response` all ABSENT.
44706
+ // 0.28.774 — all three PRESENT.
44707
+ //
44708
+ // Hence the pin. Do NOT read a replacement off `apps/cli/package.json`, and
44709
+ // do NOT trust a version produced by re-running a failed publish job
44710
+ // (ENG-9647: a re-run rebuilds the ORIGINAL tree under a HIGHER number, so
44711
+ // the version string would claim a capability the bytes do not carry). The
44712
+ // publish workflow's output only identifies a CANDIDATE; the tarball is what
44713
+ // proves it, so re-run the same two greps if this pin ever has to move.
44712
44714
  //
44713
44715
  // AND `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place —
44714
44716
  // the flip-reach modal. Nothing in the evaluation or override-write path
44715
44717
  // consults it, so this changes what an operator is TOLD and does not stop a
44716
44718
  // flip on an under-`since` host. What holds the line is `defaultValue:
44717
- // false` + `sensitive: true` + the runbook.
44718
- //
44719
- // REPLACING IT IS STEP 1 OF THE ARMING PROCEDURE in
44720
- // docs/runbooks/async-export-rollout.md, so the placeholder has a named
44721
- // owner and a named moment rather than being a deferral nobody holds.
44722
- since: "0.29.0"
44719
+ // false` + `sensitive: true` + the runbook. It is likewise excluded from
44720
+ // `projectDefinition` in schema-version.ts, so moving it does not roll
44721
+ // FLAGS_SCHEMA_VERSION for a fleet that cannot read it anyway.
44722
+ since: "0.28.774"
44723
44723
  },
44724
44724
  {
44725
44725
  key: "artefact-export-public-jobs",
@@ -43359,31 +43359,31 @@ var FLAG_REGISTRY = [
43359
43359
  // survive it). The dependency is real; it is on the CLI's ability to SURVIVE
43360
43360
  // the flag, not to READ it, and the modal cannot tell those apart.
43361
43361
  //
43362
- // Pinned ABOVE every published release on purpose, the `agt-bin-path`
43363
- // precedent: it classifies EVERY host as `stale`, so the modal reports no
43364
- // reach rather than reach it has no basis for. A guessed number would be
43365
- // worse than a placeholder, and the two directions are not symmetric —
43366
- // too HIGH over-warns (annoying), too LOW promises reach to a build that
43367
- // answers a job id with a TypeError inside file-write logic (a broken export
43368
- // reported to the agent as "download failed").
43362
+ // VERIFIED AGAINST THE PUBLISHED TARBALL, NOT THE MERGE (2026-09-03).
43363
+ // `npm pack @integrity-labs/agt-cli@<version>`, then grep the extracted
43364
+ // `package/dist/mcp/index.js`. That file is present in BOTH builds and both
43365
+ // carry `exportArtefactToFile`, so the absences below are an absence of the
43366
+ // CODE rather than of the file:
43369
43367
  //
43370
- // The exact version cannot be known here: the CLI auto-publishes ON MERGE of
43371
- // this change, patch-bumping from whatever is current, so any pre-merge
43372
- // value is a guess. Do NOT read it off `apps/cli/package.json`, and do NOT
43373
- // trust a version produced by re-running a failed publish job (ENG-9647: a
43374
- // re-run rebuilds the ORIGINAL tree under a HIGHER number, so the version
43375
- // string would claim a capability the bytes do not carry).
43368
+ // 0.28.773 — `classifyExportResponse`, `pendingExportText` and
43369
+ // `artefact-export-response` all ABSENT.
43370
+ // 0.28.774 — all three PRESENT.
43371
+ //
43372
+ // Hence the pin. Do NOT read a replacement off `apps/cli/package.json`, and
43373
+ // do NOT trust a version produced by re-running a failed publish job
43374
+ // (ENG-9647: a re-run rebuilds the ORIGINAL tree under a HIGHER number, so
43375
+ // the version string would claim a capability the bytes do not carry). The
43376
+ // publish workflow's output only identifies a CANDIDATE; the tarball is what
43377
+ // proves it, so re-run the same two greps if this pin ever has to move.
43376
43378
  //
43377
43379
  // AND `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place —
43378
43380
  // the flip-reach modal. Nothing in the evaluation or override-write path
43379
43381
  // consults it, so this changes what an operator is TOLD and does not stop a
43380
43382
  // flip on an under-`since` host. What holds the line is `defaultValue:
43381
- // false` + `sensitive: true` + the runbook.
43382
- //
43383
- // REPLACING IT IS STEP 1 OF THE ARMING PROCEDURE in
43384
- // docs/runbooks/async-export-rollout.md, so the placeholder has a named
43385
- // owner and a named moment rather than being a deferral nobody holds.
43386
- since: "0.29.0"
43383
+ // false` + `sensitive: true` + the runbook. It is likewise excluded from
43384
+ // `projectDefinition` in schema-version.ts, so moving it does not roll
43385
+ // FLAGS_SCHEMA_VERSION for a fleet that cannot read it anyway.
43386
+ since: "0.28.774"
43387
43387
  },
43388
43388
  {
43389
43389
  key: "artefact-export-public-jobs",
@@ -37882,31 +37882,31 @@ var FLAG_REGISTRY = [
37882
37882
  // survive it). The dependency is real; it is on the CLI's ability to SURVIVE
37883
37883
  // the flag, not to READ it, and the modal cannot tell those apart.
37884
37884
  //
37885
- // Pinned ABOVE every published release on purpose, the `agt-bin-path`
37886
- // precedent: it classifies EVERY host as `stale`, so the modal reports no
37887
- // reach rather than reach it has no basis for. A guessed number would be
37888
- // worse than a placeholder, and the two directions are not symmetric —
37889
- // too HIGH over-warns (annoying), too LOW promises reach to a build that
37890
- // answers a job id with a TypeError inside file-write logic (a broken export
37891
- // reported to the agent as "download failed").
37885
+ // VERIFIED AGAINST THE PUBLISHED TARBALL, NOT THE MERGE (2026-09-03).
37886
+ // `npm pack @integrity-labs/agt-cli@<version>`, then grep the extracted
37887
+ // `package/dist/mcp/index.js`. That file is present in BOTH builds and both
37888
+ // carry `exportArtefactToFile`, so the absences below are an absence of the
37889
+ // CODE rather than of the file:
37892
37890
  //
37893
- // The exact version cannot be known here: the CLI auto-publishes ON MERGE of
37894
- // this change, patch-bumping from whatever is current, so any pre-merge
37895
- // value is a guess. Do NOT read it off `apps/cli/package.json`, and do NOT
37896
- // trust a version produced by re-running a failed publish job (ENG-9647: a
37897
- // re-run rebuilds the ORIGINAL tree under a HIGHER number, so the version
37898
- // string would claim a capability the bytes do not carry).
37891
+ // 0.28.773 — `classifyExportResponse`, `pendingExportText` and
37892
+ // `artefact-export-response` all ABSENT.
37893
+ // 0.28.774 — all three PRESENT.
37894
+ //
37895
+ // Hence the pin. Do NOT read a replacement off `apps/cli/package.json`, and
37896
+ // do NOT trust a version produced by re-running a failed publish job
37897
+ // (ENG-9647: a re-run rebuilds the ORIGINAL tree under a HIGHER number, so
37898
+ // the version string would claim a capability the bytes do not carry). The
37899
+ // publish workflow's output only identifies a CANDIDATE; the tarball is what
37900
+ // proves it, so re-run the same two greps if this pin ever has to move.
37899
37901
  //
37900
37902
  // AND `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place —
37901
37903
  // the flip-reach modal. Nothing in the evaluation or override-write path
37902
37904
  // consults it, so this changes what an operator is TOLD and does not stop a
37903
37905
  // flip on an under-`since` host. What holds the line is `defaultValue:
37904
- // false` + `sensitive: true` + the runbook.
37905
- //
37906
- // REPLACING IT IS STEP 1 OF THE ARMING PROCEDURE in
37907
- // docs/runbooks/async-export-rollout.md, so the placeholder has a named
37908
- // owner and a named moment rather than being a deferral nobody holds.
37909
- since: "0.29.0"
37906
+ // false` + `sensitive: true` + the runbook. It is likewise excluded from
37907
+ // `projectDefinition` in schema-version.ts, so moving it does not roll
37908
+ // FLAGS_SCHEMA_VERSION for a fleet that cannot read it anyway.
37909
+ since: "0.28.774"
37910
37910
  },
37911
37911
  {
37912
37912
  key: "artefact-export-public-jobs",
@@ -42790,6 +42790,20 @@ async function actuateHostRestart(opts) {
42790
42790
  }
42791
42791
  }
42792
42792
 
42793
+ // src/slack-thread-drop-line.ts
42794
+ function formatThreadDropLine(input) {
42795
+ return `slack-channel(${input.agentCodeName}): thread-reply drop reason=${input.reason} follow_mode=${input.followMode} mentions_bot=${input.mentionsBot} channel=${input.channelHash} ts=${normaliseTs(input.ts)}
42796
+ `;
42797
+ }
42798
+ function normaliseTs(ts) {
42799
+ if (ts === null || ts === void 0 || ts === "" || ts === "<none>") return "none";
42800
+ return ts;
42801
+ }
42802
+ function textMentionsBot(text, botId) {
42803
+ if (!botId || typeof text !== "string") return false;
42804
+ return text.includes(`<@${botId}>`);
42805
+ }
42806
+
42793
42807
  // src/mcp-spawn-lock.ts
42794
42808
  import {
42795
42809
  existsSync as existsSync9,
@@ -48158,11 +48172,18 @@ async function connectSocketMode() {
48158
48172
  }
48159
48173
  if (evt.type === "message" && evt.channel && !isDirectMessage) {
48160
48174
  if (isThreadReply) {
48175
+ const mentionsBot = textMentionsBot(evt.text, botUserId);
48161
48176
  const logThreadDrop = (reason) => {
48162
48177
  const channelHash = createHash3("sha256").update(evt.channel ?? "").digest("hex").slice(0, 8);
48163
48178
  process.stderr.write(
48164
- `slack-channel(${AGENT_CODE_NAME}): thread-reply drop reason=${reason} auto_follow=${THREAD_AUTO_FOLLOW} channel=${channelHash} ts=${redactSlackId(evt.ts)}
48165
- `
48179
+ formatThreadDropLine({
48180
+ agentCodeName: AGENT_CODE_NAME,
48181
+ reason,
48182
+ followMode: THREAD_AUTO_FOLLOW,
48183
+ mentionsBot,
48184
+ channelHash,
48185
+ ts: redactSlackId(evt.ts)
48186
+ })
48166
48187
  );
48167
48188
  };
48168
48189
  if (THREAD_AUTO_FOLLOW === "off") {
@@ -38040,31 +38040,31 @@ var FLAG_REGISTRY = [
38040
38040
  // survive it). The dependency is real; it is on the CLI's ability to SURVIVE
38041
38041
  // the flag, not to READ it, and the modal cannot tell those apart.
38042
38042
  //
38043
- // Pinned ABOVE every published release on purpose, the `agt-bin-path`
38044
- // precedent: it classifies EVERY host as `stale`, so the modal reports no
38045
- // reach rather than reach it has no basis for. A guessed number would be
38046
- // worse than a placeholder, and the two directions are not symmetric —
38047
- // too HIGH over-warns (annoying), too LOW promises reach to a build that
38048
- // answers a job id with a TypeError inside file-write logic (a broken export
38049
- // reported to the agent as "download failed").
38043
+ // VERIFIED AGAINST THE PUBLISHED TARBALL, NOT THE MERGE (2026-09-03).
38044
+ // `npm pack @integrity-labs/agt-cli@<version>`, then grep the extracted
38045
+ // `package/dist/mcp/index.js`. That file is present in BOTH builds and both
38046
+ // carry `exportArtefactToFile`, so the absences below are an absence of the
38047
+ // CODE rather than of the file:
38050
38048
  //
38051
- // The exact version cannot be known here: the CLI auto-publishes ON MERGE of
38052
- // this change, patch-bumping from whatever is current, so any pre-merge
38053
- // value is a guess. Do NOT read it off `apps/cli/package.json`, and do NOT
38054
- // trust a version produced by re-running a failed publish job (ENG-9647: a
38055
- // re-run rebuilds the ORIGINAL tree under a HIGHER number, so the version
38056
- // string would claim a capability the bytes do not carry).
38049
+ // 0.28.773 — `classifyExportResponse`, `pendingExportText` and
38050
+ // `artefact-export-response` all ABSENT.
38051
+ // 0.28.774 — all three PRESENT.
38052
+ //
38053
+ // Hence the pin. Do NOT read a replacement off `apps/cli/package.json`, and
38054
+ // do NOT trust a version produced by re-running a failed publish job
38055
+ // (ENG-9647: a re-run rebuilds the ORIGINAL tree under a HIGHER number, so
38056
+ // the version string would claim a capability the bytes do not carry). The
38057
+ // publish workflow's output only identifies a CANDIDATE; the tarball is what
38058
+ // proves it, so re-run the same two greps if this pin ever has to move.
38057
38059
  //
38058
38060
  // AND `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place —
38059
38061
  // the flip-reach modal. Nothing in the evaluation or override-write path
38060
38062
  // consults it, so this changes what an operator is TOLD and does not stop a
38061
38063
  // flip on an under-`since` host. What holds the line is `defaultValue:
38062
- // false` + `sensitive: true` + the runbook.
38063
- //
38064
- // REPLACING IT IS STEP 1 OF THE ARMING PROCEDURE in
38065
- // docs/runbooks/async-export-rollout.md, so the placeholder has a named
38066
- // owner and a named moment rather than being a deferral nobody holds.
38067
- since: "0.29.0"
38064
+ // false` + `sensitive: true` + the runbook. It is likewise excluded from
38065
+ // `projectDefinition` in schema-version.ts, so moving it does not roll
38066
+ // FLAGS_SCHEMA_VERSION for a fleet that cannot read it anyway.
38067
+ since: "0.28.774"
38068
38068
  },
38069
38069
  {
38070
38070
  key: "artefact-export-public-jobs",
@@ -49,8 +49,8 @@ import {
49
49
  writeDirectChatSessionState,
50
50
  writeEgressAllowlist,
51
51
  writePersistentClaudeWrapper
52
- } from "./chunk-EXCWZPDJ.js";
53
- import "./chunk-LLDK74IY.js";
52
+ } from "./chunk-2GZ7EG7V.js";
53
+ import "./chunk-PUEQQOJI.js";
54
54
  import "./chunk-XWVM4KPK.js";
55
55
  export {
56
56
  EGRESS_BASELINE_DOMAINS,
@@ -104,4 +104,4 @@ export {
104
104
  writeEgressAllowlist,
105
105
  writePersistentClaudeWrapper
106
106
  };
107
- //# sourceMappingURL=persistent-session-5OCP47I3.js.map
107
+ //# sourceMappingURL=persistent-session-EU44RQZN.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-EXCWZPDJ.js";
4
- import "./chunk-LLDK74IY.js";
3
+ } from "./chunk-2GZ7EG7V.js";
4
+ import "./chunk-PUEQQOJI.js";
5
5
  import "./chunk-XWVM4KPK.js";
6
6
 
7
7
  // src/lib/responsiveness-probe.ts
@@ -745,4 +745,4 @@ export {
745
745
  readAndResetSlackReplyBindingClassifications,
746
746
  readAndResetSlackReplyTargetClassifications
747
747
  };
748
- //# sourceMappingURL=responsiveness-probe-QYSMGG5E.js.map
748
+ //# sourceMappingURL=responsiveness-probe-ENOEURQY.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-LLDK74IY.js";
3
+ } from "./chunk-PUEQQOJI.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-WFXDJQ5L.js.map
206
+ //# sourceMappingURL=session-auth-dead-TWWJAF7O.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.787",
3
+ "version": "0.28.789",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {