@integrity-labs/agt-cli 0.28.1015 → 0.28.1016

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.
@@ -266,7 +266,7 @@ async function spawnPairSession(session) {
266
266
  return { ok: true };
267
267
  } catch {
268
268
  }
269
- const { resolveClaudeBinary } = await import("./persistent-session-YP2UTQGA.js");
269
+ const { resolveClaudeBinary } = await import("./persistent-session-AQGEDGJR.js");
270
270
  const claudeBin = resolveClaudeBinary();
271
271
  const pairEnv = {
272
272
  ...process.env,
@@ -734,4 +734,4 @@ export {
734
734
  startClaudePair,
735
735
  submitClaudePairCode
736
736
  };
737
- //# sourceMappingURL=claude-pair-runtime-GSPFYCG4.js.map
737
+ //# sourceMappingURL=claude-pair-runtime-VE6KUMQY.js.map
@@ -65,7 +65,7 @@ import {
65
65
  safeWriteJsonAtomic,
66
66
  setConfigHash,
67
67
  tripClass
68
- } from "../chunk-GHHDFHKE.js";
68
+ } from "../chunk-DFKQZGM7.js";
69
69
  import {
70
70
  getProjectDir as getProjectDir2,
71
71
  getReadyTasks,
@@ -146,7 +146,7 @@ import {
146
146
  takeZombieDetection,
147
147
  toOpencodeModel,
148
148
  writeEgressAllowlist
149
- } from "../chunk-MHDNKKEO.js";
149
+ } from "../chunk-YPS4AUHN.js";
150
150
  import {
151
151
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
152
152
  AnchorSessionClient,
@@ -187,6 +187,7 @@ import {
187
187
  classifyCursorAdvance,
188
188
  classifyOutput,
189
189
  classifySlackPolicyBlock,
190
+ classifyTelegramPolicyBlock,
190
191
  classifyTranscriptRateLimit,
191
192
  coerceOnboardingState,
192
193
  cursorAdvanceCounterKey,
@@ -250,7 +251,7 @@ import {
250
251
  subagentActivityAgeSeconds,
251
252
  sumTranscriptUsageInWindow,
252
253
  transcriptActivityAgeSeconds
253
- } from "../chunk-RJ3SI5JG.js";
254
+ } from "../chunk-B7XGAC54.js";
254
255
  import "../chunk-DHWNVVX4.js";
255
256
  import {
256
257
  reapOrphanChannelMcps
@@ -305,7 +306,44 @@ var TELEGRAM_RESTART_ON_CHANGE_ENV_KEYS = [
305
306
  /** Peer kill switch. A switch whose purpose is stopping something promptly. */
306
307
  "PEER_DISABLED",
307
308
  /** Derived boolean mirror of the same switch, kept for the rollout. */
308
- "TELEGRAM_PEER_DISABLED"
309
+ "TELEGRAM_PEER_DISABLED",
310
+ // ENG-9665. These are the purest case this list exists for: they ARE the
311
+ // sender policy, so a change to them is an operator changing who may talk to
312
+ // the agent, made in the console and visible there immediately. Waiting for
313
+ // an unrelated respawn would mean the console shows a restriction the running
314
+ // session is not applying - which is the exact ENG-9802 defect, and the same
315
+ // gap this file's header notes for SLACK_SENDER_POLICY.
316
+ //
317
+ // WHICH MECHANISM ACTUALLY RESPAWNS FOR THESE - Obi Wan `1c6a60a29aa5`, and
318
+ // it is `decideSenderPolicyRestart`, NOT this list's hash.
319
+ //
320
+ // Being classified here is a statement that a change is restart-worthy. It is
321
+ // NOT, for these three, the thing that delivers the restart:
322
+ // `telegramPolicyEnvFromInputs` builds the restart basis from the CHANNEL
323
+ // CONFIG, and a sender policy is not in the channel config - it is a column on
324
+ // `agents`. So these keys can never enter that hash, and the earlier comment
325
+ // here (and commit 97868b5a's message) credited a mechanism that does not
326
+ // reach them.
327
+ //
328
+ // The restart does happen, via `decideSenderPolicyRestart`, which reads the
329
+ // policy from where it actually lives and now covers telegram because
330
+ // `senderPolicyIsEnforcedOn('telegram')` is true. Deliberately NOT plumbed
331
+ // into the basis as well: that would mean two mechanisms racing to respawn on
332
+ // one edit, and the config-shaped one would be reading a value that is not in
333
+ // the config.
334
+ //
335
+ // KNOWN CONSEQUENCE, stated rather than left to be found:
336
+ // `isTelegramPolicyRestrictive` reads the basis, so it returns false for an
337
+ // agent whose ONLY Telegram restriction is a sender policy. That feeds the
338
+ // ENG-7771 unknown-baseline branch. Correct today only because
339
+ // `decideSenderPolicyRestart` covers the same agent by a different route; if
340
+ // that ever stops being true, this is where the gap reappears.
341
+ /** The mode itself. Nothing else decides more about who is admitted. */
342
+ "TELEGRAM_SENDER_POLICY",
343
+ /** manager_only's single admitted counterparty. */
344
+ "TELEGRAM_SENDER_POLICY_PRINCIPAL_ID",
345
+ /** team_only's admitted set. An edit here adds or removes people. */
346
+ "TELEGRAM_SENDER_POLICY_TEAM_PRINCIPAL_IDS"
309
347
  ];
310
348
  function telegramPolicyEnvBasis(env) {
311
349
  const parts = [];
@@ -11241,6 +11279,37 @@ function parsePeerAgentModeEnv2(raw) {
11241
11279
  return "off";
11242
11280
  }
11243
11281
 
11282
+ // ../../packages/core/dist/channels/governance/telegram-inbound-filter.js
11283
+ function isBotSender(evt) {
11284
+ return evt.from?.is_bot === true;
11285
+ }
11286
+ function isSameTeamPeer(evt) {
11287
+ const gate = evt.peerGatePath;
11288
+ return gate === "same_team" || gate === void 0;
11289
+ }
11290
+ function decideSenderPolicyForwardTelegram(evt, policy) {
11291
+ if (policy.mode === "all")
11292
+ return { forward: true };
11293
+ const fromId = evt.from?.id;
11294
+ if (fromId === void 0)
11295
+ return { forward: false, reason: "sender_policy" };
11296
+ const fromIdStr = String(fromId);
11297
+ if (policy.mode === "manager_only") {
11298
+ return policy.principalTelegramUserId && fromIdStr === policy.principalTelegramUserId ? { forward: true } : { forward: false, reason: "sender_policy" };
11299
+ }
11300
+ if (policy.mode === "team_only") {
11301
+ const list = policy.teamPrincipalTelegramUserIds;
11302
+ if (list && list.length > 0 && list.includes(fromIdStr)) {
11303
+ return { forward: true };
11304
+ }
11305
+ return isBotSender(evt) && isSameTeamPeer(evt) ? { forward: true } : { forward: false, reason: "sender_policy" };
11306
+ }
11307
+ if (policy.mode === "team_agents_only") {
11308
+ return isBotSender(evt) && isSameTeamPeer(evt) ? { forward: true } : { forward: false, reason: "sender_policy" };
11309
+ }
11310
+ return isBotSender(evt) ? { forward: true } : { forward: false, reason: "sender_policy" };
11311
+ }
11312
+
11244
11313
  // ../../packages/core/dist/channels/governance/telegram-chat-type.js
11245
11314
  function isTelegramPrivateChat(chatType) {
11246
11315
  return chatType === "private";
@@ -11254,6 +11323,7 @@ function evaluateTelegramInboundGate(evt, deps) {
11254
11323
  const content = text.length > 0 ? { forward: true } : { forward: false, reason: "empty" };
11255
11324
  let peerLeaf;
11256
11325
  let isSelf = false;
11326
+ let peerGatePath;
11257
11327
  if (isBot) {
11258
11328
  const classifierMsg = {
11259
11329
  message_id: evt.message_id,
@@ -11271,6 +11341,13 @@ function evaluateTelegramInboundGate(evt, deps) {
11271
11341
  const c = classifyPeerMessage2(classifierMsg, deps.peerConfig, deps.self);
11272
11342
  isSelf = c.kind === "self";
11273
11343
  peerLeaf = { kind: c.kind, reason: c.kind === "drop" ? c.reason : void 0 };
11344
+ peerGatePath = evt.from ? deps.peerConfig.peers.find((pr) => pr.bot_id === evt.from.id)?.gate_path : void 0;
11345
+ }
11346
+ const policy = deps.senderPolicy;
11347
+ let senderPolicyLeaf;
11348
+ if (policy) {
11349
+ const verdict = decideSenderPolicyForwardTelegram({ ...evt, peerGatePath }, policy);
11350
+ senderPolicyLeaf = verdict.forward ? { forward: true } : { forward: false, reason: classifyTelegramPolicyBlock(policy) };
11274
11351
  }
11275
11352
  const decision = decideInboundAccess({
11276
11353
  content,
@@ -11286,7 +11363,27 @@ function evaluateTelegramInboundGate(evt, deps) {
11286
11363
  // this is `{ forward: true }`, which the composer treats identically to the
11287
11364
  // field being absent.
11288
11365
  chatType: deps.privateChatsOnly && !isTelegramPrivateChat(evt.chat.type) ? { forward: false } : { forward: true },
11289
- // No sender-policy mode system and no command dispatch on the injection gate.
11366
+ // ENG-9665: the sender-policy axis, applied to ALL senders (a peer agent is
11367
+ // gated here too, before peer governance) exactly as on Slack and Teams.
11368
+ // Absent policy means `all`, which is a no-op.
11369
+ senderPolicy: senderPolicyLeaf,
11370
+ // Injection gate: no command dispatch, and NO DECLINE IS EVER SENT on this
11371
+ // path - so `sameOrg` has nothing to decide here.
11372
+ //
11373
+ // Obi Wan `2d99e22b7e8d`: this used to compute
11374
+ // `allowedChats.size > 0 && allowedChats.has(chatId)` under a comment
11375
+ // reasoning about decline-vs-silence as if it were live. It is not. This
11376
+ // function returns `{ admit, reason }` and DISCARDS `decision.decline`, and
11377
+ // `dispatchTelegramInbound` only logs and returns 'dropped_gate'. So the
11378
+ // computed value had no observable effect for any allowlist, while the
11379
+ // comment implied an agent WITH one would decline. A reader auditing the
11380
+ // insider-decline posture would have concluded opencode Telegram delivers
11381
+ // declines when it delivers silence in every case.
11382
+ //
11383
+ // `slack-sender-gate.ts` states this honestly with a flat `sameOrg: false`,
11384
+ // so this now matches its sibling. IF a decline is ever wired on this
11385
+ // runtime, this is the line to revisit - and the argument for what to put
11386
+ // here lives in telegram-channel.ts, where declines are actually sent.
11290
11387
  sameOrg: false
11291
11388
  });
11292
11389
  if (decision.kind === "drop")
@@ -11317,6 +11414,32 @@ function buildTelegramPeerClassifierConfigFromEnv(env, opts) {
11317
11414
  peer_disabled_mode: parseTelegramPeerDisabledModeEnv(env, opts?.onWarn)
11318
11415
  };
11319
11416
  }
11417
+ function buildTelegramSenderPolicyFromEnv(env, ctx) {
11418
+ const raw = (env["TELEGRAM_SENDER_POLICY"] ?? "all").trim().toLowerCase();
11419
+ const teamId = ctx.agentTeamId;
11420
+ if (raw === "all")
11421
+ return { mode: "all" };
11422
+ if (raw === "agents_only")
11423
+ return { mode: "agents_only" };
11424
+ if (raw === "team_agents_only") {
11425
+ if (!teamId)
11426
+ throw new Error("TELEGRAM_SENDER_POLICY=team_agents_only requires AGT_TEAM_ID");
11427
+ return { mode: "team_agents_only", teamId };
11428
+ }
11429
+ if (raw === "team_only") {
11430
+ if (!teamId)
11431
+ throw new Error("TELEGRAM_SENDER_POLICY=team_only requires AGT_TEAM_ID");
11432
+ const teamPrincipalTelegramUserIds = (env["TELEGRAM_SENDER_POLICY_TEAM_PRINCIPAL_IDS"] ?? "").split(",").map((s) => s.trim()).filter((s) => s.length > 0);
11433
+ return { mode: "team_only", teamId, teamPrincipalTelegramUserIds };
11434
+ }
11435
+ if (raw === "manager_only") {
11436
+ if (!teamId)
11437
+ throw new Error("TELEGRAM_SENDER_POLICY=manager_only requires AGT_TEAM_ID");
11438
+ const principalTelegramUserId = env["TELEGRAM_SENDER_POLICY_PRINCIPAL_ID"];
11439
+ return principalTelegramUserId ? { mode: "manager_only", teamId, principalTelegramUserId } : { mode: "manager_only", teamId };
11440
+ }
11441
+ throw new Error(`Invalid TELEGRAM_SENDER_POLICY=${JSON.stringify(env["TELEGRAM_SENDER_POLICY"])}`);
11442
+ }
11320
11443
 
11321
11444
  // src/lib/telegram-ingest.ts
11322
11445
  var nodeHttpsTelegramFetch = (url, init) => new Promise((resolve2, reject) => {
@@ -11375,7 +11498,7 @@ function memoryOffsetStore(initial = 0) {
11375
11498
  value = o;
11376
11499
  } };
11377
11500
  }
11378
- function resolveTelegramIngestParamsFromEnv(env) {
11501
+ function resolveTelegramIngestParamsFromEnv(env, ctx) {
11379
11502
  const botToken = env["TELEGRAM_BOT_TOKEN"];
11380
11503
  if (!botToken) return null;
11381
11504
  const ackReaction = (env["TELEGRAM_ACK_REACTION"] ?? "").trim() || "\u{1F440}";
@@ -11384,6 +11507,7 @@ function resolveTelegramIngestParamsFromEnv(env) {
11384
11507
  botToken,
11385
11508
  allowedChats: parseTelegramAllowedChatsEnv(env),
11386
11509
  peerConfig: buildTelegramPeerClassifierConfigFromEnv(env),
11510
+ senderPolicy: buildTelegramSenderPolicyFromEnv(env, ctx),
11387
11511
  ackReaction,
11388
11512
  ...skipReaction ? { skipReaction } : {}
11389
11513
  };
@@ -11441,7 +11565,12 @@ async function dispatchTelegramInbound(update, ctx) {
11441
11565
  const decision = evaluateTelegramInboundGate(msg, {
11442
11566
  allowedChats: ctx.allowedChats,
11443
11567
  peerConfig: ctx.peerConfig,
11444
- self: ctx.self
11568
+ self: ctx.self,
11569
+ // ENG-9665 / Obi Wan `526be87f0cbd`: THE LINE THAT WAS MISSING. Without it
11570
+ // `deps.senderPolicy` is undefined, which the gate treats as `all`, so the
11571
+ // registry's claim that both runtimes supply this leaf was false on this
11572
+ // path. eng-9665-opencode-sender-policy.test.ts fails if it is removed.
11573
+ senderPolicy: ctx.senderPolicy
11445
11574
  });
11446
11575
  if (!decision.admit) {
11447
11576
  ctx.log(`[telegram-ingest:${ctx.codeName}] dropped chat=${redactId(chatId)} reason=${decision.reason}`);
@@ -11548,6 +11677,7 @@ function startTelegramIngest(config2) {
11548
11677
  codeName: config2.codeName,
11549
11678
  allowedChats: config2.allowedChats,
11550
11679
  peerConfig: config2.peerConfig,
11680
+ senderPolicy: config2.senderPolicy,
11551
11681
  self: config2.self,
11552
11682
  inject: config2.inject,
11553
11683
  sendReply,
@@ -11635,6 +11765,10 @@ function fingerprint2(params) {
11635
11765
  botToken: params.botToken,
11636
11766
  allowedChats: [...params.allowedChats].sort(),
11637
11767
  peerConfig: params.peerConfig,
11768
+ // The whole policy: the mode AND the principal identities. A revocation
11769
+ // changes only the ids, so hashing the mode alone would miss exactly the
11770
+ // case `3ff390e32af6` describes.
11771
+ senderPolicy: params.senderPolicy,
11638
11772
  ackReaction: params.ackReaction ?? null,
11639
11773
  skipReaction: params.skipReaction ?? null
11640
11774
  })
@@ -11704,7 +11838,7 @@ async function ensureOpencodeTelegramIngest(opts) {
11704
11838
  stopOpencodeTelegramIngest(codeName, log2);
11705
11839
  return;
11706
11840
  }
11707
- params = resolveTelegramIngestParamsFromEnv(env);
11841
+ params = resolveTelegramIngestParamsFromEnv(env, { agentTeamId: env["AGT_TEAM_ID"] ?? null });
11708
11842
  } catch (err) {
11709
11843
  stopOpencodeTelegramIngest(codeName, log2);
11710
11844
  log2(`[telegram-ingest:${codeName}] not started: ${err instanceof Error ? err.message : String(err)}`);
@@ -11740,6 +11874,7 @@ async function ensureOpencodeTelegramIngest(opts) {
11740
11874
  botToken: params.botToken,
11741
11875
  allowedChats: params.allowedChats,
11742
11876
  peerConfig: params.peerConfig,
11877
+ senderPolicy: params.senderPolicy,
11743
11878
  self,
11744
11879
  inject: (msg) => injectOpencodeMessage(codeName, msg, { awaitReply: true }),
11745
11880
  log: log2,
@@ -13654,7 +13789,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
13654
13789
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
13655
13790
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
13656
13791
  async function channelInboundActivityAgeSecondsFor(codeName) {
13657
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-YTFWHUTQ.js");
13792
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-BDARO76E.js");
13658
13793
  const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
13659
13794
  if (newest === null) return null;
13660
13795
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -14397,7 +14532,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
14397
14532
  var lastVersionCheckAt = 0;
14398
14533
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
14399
14534
  var lastResponsivenessProbeAt = 0;
14400
- var agtCliVersion = true ? "0.28.1015" : "dev";
14535
+ var agtCliVersion = true ? "0.28.1016" : "dev";
14401
14536
  function resolveBrewPath(execFileSync3) {
14402
14537
  try {
14403
14538
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -16032,7 +16167,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
16032
16167
  if (codeNames.length === 0) return;
16033
16168
  void (async () => {
16034
16169
  try {
16035
- const { collectDiagnostics } = await import("../persistent-session-YP2UTQGA.js");
16170
+ const { collectDiagnostics } = await import("../persistent-session-AQGEDGJR.js");
16036
16171
  await api.post("/host/heartbeat", {
16037
16172
  host_id: hostId,
16038
16173
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -16174,7 +16309,7 @@ async function pollCycleInner() {
16174
16309
  }
16175
16310
  try {
16176
16311
  const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
16177
- const { collectDiagnostics } = await import("../persistent-session-YP2UTQGA.js");
16312
+ const { collectDiagnostics } = await import("../persistent-session-AQGEDGJR.js");
16178
16313
  const diagCodeNames = [...agentState.persistentSessionAgents];
16179
16314
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor) : void 0;
16180
16315
  let tailscaleHostname;
@@ -16350,7 +16485,7 @@ async function pollCycleInner() {
16350
16485
  collectPanelessActivityProbes,
16351
16486
  getResponsivenessIntervalMs,
16352
16487
  occupancyQualificationClassifications
16353
- } = await import("../responsiveness-probe-YTFWHUTQ.js");
16488
+ } = await import("../responsiveness-probe-BDARO76E.js");
16354
16489
  const probeIntervalMs = getResponsivenessIntervalMs();
16355
16490
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
16356
16491
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -16467,7 +16602,7 @@ async function pollCycleInner() {
16467
16602
  collectResponsivenessProbes,
16468
16603
  livePendingInboundOldestAgeSeconds,
16469
16604
  parkPendingInbound
16470
- } = await import("../responsiveness-probe-YTFWHUTQ.js");
16605
+ } = await import("../responsiveness-probe-BDARO76E.js");
16471
16606
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
16472
16607
  const wedgeNow = /* @__PURE__ */ new Date();
16473
16608
  const liveAgents = agentState.persistentSessionAgents;
@@ -16623,7 +16758,7 @@ async function pollCycleInner() {
16623
16758
  }
16624
16759
  try {
16625
16760
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
16626
- const { probeSessionAuth } = await import("../session-auth-dead-TX4YQUTJ.js");
16761
+ const { probeSessionAuth } = await import("../session-auth-dead-2CCORXIW.js");
16627
16762
  const observations = [];
16628
16763
  const pendingCacheCommits = [];
16629
16764
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -21007,7 +21142,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21007
21142
  try {
21008
21143
  const freshId = rotateSessionForWedge(codeName);
21009
21144
  consecutiveWedgeCycles.delete(codeName);
21010
- const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-YTFWHUTQ.js");
21145
+ const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-BDARO76E.js");
21011
21146
  const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
21012
21147
  const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
21013
21148
  const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
@@ -21050,7 +21185,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21050
21185
  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}`));
21051
21186
  void (async () => {
21052
21187
  try {
21053
- const { collectDiagnostics } = await import("../persistent-session-YP2UTQGA.js");
21188
+ const { collectDiagnostics } = await import("../persistent-session-AQGEDGJR.js");
21054
21189
  await api.post("/host/heartbeat", {
21055
21190
  host_id: hostId,
21056
21191
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -21101,7 +21236,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
21101
21236
  }
21102
21237
  try {
21103
21238
  const hostId = await getHostId();
21104
- const { collectDiagnostics } = await import("../persistent-session-YP2UTQGA.js");
21239
+ const { collectDiagnostics } = await import("../persistent-session-AQGEDGJR.js");
21105
21240
  await api.post("/host/heartbeat", {
21106
21241
  host_id: hostId,
21107
21242
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -21772,7 +21907,7 @@ async function processClaudePairSessions(agents) {
21772
21907
  // cannot take it for itself — by the time it runs, the write it is looking
21773
21908
  // for may already have happened.
21774
21909
  snapshotPairConfig
21775
- } = await import("../claude-pair-runtime-GSPFYCG4.js");
21910
+ } = await import("../claude-pair-runtime-VE6KUMQY.js");
21776
21911
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
21777
21912
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
21778
21913
  const killed = await killPairSession(pairTmuxSession(pairId));