@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.
- package/dist/bin/agt.js +5 -5
- package/dist/{chunk-RJ3SI5JG.js → chunk-B7XGAC54.js} +20 -2
- package/dist/chunk-B7XGAC54.js.map +1 -0
- package/dist/{chunk-GHHDFHKE.js → chunk-DFKQZGM7.js} +18 -4
- package/dist/chunk-DFKQZGM7.js.map +1 -0
- package/dist/{chunk-MHDNKKEO.js → chunk-YPS4AUHN.js} +10 -2
- package/dist/{chunk-MHDNKKEO.js.map → chunk-YPS4AUHN.js.map} +1 -1
- package/dist/{claude-pair-runtime-GSPFYCG4.js → claude-pair-runtime-VE6KUMQY.js} +2 -2
- package/dist/lib/manager-worker.js +154 -19
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/telegram-channel.js +194 -3
- package/dist/{persistent-session-YP2UTQGA.js → persistent-session-AQGEDGJR.js} +3 -3
- package/dist/{responsiveness-probe-YTFWHUTQ.js → responsiveness-probe-BDARO76E.js} +3 -3
- package/dist/{session-auth-dead-TX4YQUTJ.js → session-auth-dead-2CCORXIW.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-GHHDFHKE.js.map +0 -1
- package/dist/chunk-RJ3SI5JG.js.map +0 -1
- /package/dist/{claude-pair-runtime-GSPFYCG4.js.map → claude-pair-runtime-VE6KUMQY.js.map} +0 -0
- /package/dist/{persistent-session-YP2UTQGA.js.map → persistent-session-AQGEDGJR.js.map} +0 -0
- /package/dist/{responsiveness-probe-YTFWHUTQ.js.map → responsiveness-probe-BDARO76E.js.map} +0 -0
- /package/dist/{session-auth-dead-TX4YQUTJ.js.map → session-auth-dead-2CCORXIW.js.map} +0 -0
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
//
|
|
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-
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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));
|