@integrity-labs/agt-cli 0.28.1184 → 0.28.1186
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 +6 -6
- package/dist/{chunk-TGHAQABK.js → chunk-2HMIFOZU.js} +2 -2
- package/dist/{chunk-5L2UZW22.js → chunk-B7EHZTCU.js} +2 -2
- package/dist/{chunk-CIZ2UI77.js → chunk-JCTPPI2Q.js} +5 -5
- package/dist/{chunk-2DWMFJEV.js → chunk-KKK3S2RS.js} +4 -3
- package/dist/{chunk-B57YZ2QD.js → chunk-TKFPMB6F.js} +21 -1
- package/dist/chunk-TKFPMB6F.js.map +1 -0
- package/dist/{claude-code-updater-JYVD3MJJ.js → claude-code-updater-F2Q5CM6R.js} +3 -3
- package/dist/{claude-pair-runtime-IJAQHR2V.js → claude-pair-runtime-AAK4N5Z6.js} +3 -3
- package/dist/lib/manager-worker.js +87 -27
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/index.js +21 -9
- package/dist/{persistent-session-C7632TPG.js → persistent-session-KW4SEBXV.js} +4 -4
- package/dist/{responsiveness-probe-NFT3GSDL.js → responsiveness-probe-34V4HLOQ.js} +4 -4
- package/dist/{session-auth-dead-BTGGL4MA.js → session-auth-dead-AGNAALKZ.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-B57YZ2QD.js.map +0 -1
- /package/dist/{chunk-TGHAQABK.js.map → chunk-2HMIFOZU.js.map} +0 -0
- /package/dist/{chunk-5L2UZW22.js.map → chunk-B7EHZTCU.js.map} +0 -0
- /package/dist/{chunk-CIZ2UI77.js.map → chunk-JCTPPI2Q.js.map} +0 -0
- /package/dist/{chunk-2DWMFJEV.js.map → chunk-KKK3S2RS.js.map} +0 -0
- /package/dist/{claude-code-updater-JYVD3MJJ.js.map → claude-code-updater-F2Q5CM6R.js.map} +0 -0
- /package/dist/{claude-pair-runtime-IJAQHR2V.js.map → claude-pair-runtime-AAK4N5Z6.js.map} +0 -0
- /package/dist/{persistent-session-C7632TPG.js.map → persistent-session-KW4SEBXV.js.map} +0 -0
- /package/dist/{responsiveness-probe-NFT3GSDL.js.map → responsiveness-probe-34V4HLOQ.js.map} +0 -0
- /package/dist/{session-auth-dead-BTGGL4MA.js.map → session-auth-dead-AGNAALKZ.js.map} +0 -0
|
@@ -13,9 +13,9 @@ import {
|
|
|
13
13
|
probeClaudeInstalls,
|
|
14
14
|
readsAsNativeInstall,
|
|
15
15
|
shouldRunClaudeCodeUpdater
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-B7EHZTCU.js";
|
|
17
17
|
import "./chunk-XWVM4KPK.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-TKFPMB6F.js";
|
|
19
19
|
import "./chunk-AIUIMEUS.js";
|
|
20
20
|
import "./chunk-DGUM43GV.js";
|
|
21
21
|
export {
|
|
@@ -34,4 +34,4 @@ export {
|
|
|
34
34
|
readsAsNativeInstall,
|
|
35
35
|
shouldRunClaudeCodeUpdater
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=claude-code-updater-
|
|
37
|
+
//# sourceMappingURL=claude-code-updater-F2Q5CM6R.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
redactPaneFrame,
|
|
10
10
|
sanitizeTerminalFrame
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-TKFPMB6F.js";
|
|
12
12
|
import {
|
|
13
13
|
CLAUDE_CONFIG_DIR_ENV,
|
|
14
14
|
claudeConfigDirFor,
|
|
@@ -321,7 +321,7 @@ async function spawnPairSession(session) {
|
|
|
321
321
|
return { ok: true };
|
|
322
322
|
} catch {
|
|
323
323
|
}
|
|
324
|
-
const { resolveClaudeBinary } = await import("./persistent-session-
|
|
324
|
+
const { resolveClaudeBinary } = await import("./persistent-session-KW4SEBXV.js");
|
|
325
325
|
const claudeBin = resolveClaudeBinary();
|
|
326
326
|
const pairEnv = {
|
|
327
327
|
...process.env,
|
|
@@ -836,4 +836,4 @@ export {
|
|
|
836
836
|
startClaudePair,
|
|
837
837
|
submitClaudePairCode
|
|
838
838
|
};
|
|
839
|
-
//# sourceMappingURL=claude-pair-runtime-
|
|
839
|
+
//# sourceMappingURL=claude-pair-runtime-AAK4N5Z6.js.map
|
|
@@ -82,7 +82,7 @@ import {
|
|
|
82
82
|
tripClass,
|
|
83
83
|
writeEtcEnvironment,
|
|
84
84
|
writeProfileDScript
|
|
85
|
-
} from "../chunk-
|
|
85
|
+
} from "../chunk-JCTPPI2Q.js";
|
|
86
86
|
import {
|
|
87
87
|
CLAUDE_CODE_SECURITY_FLOOR,
|
|
88
88
|
SELF_UPDATE_TIMEOUTS,
|
|
@@ -96,7 +96,7 @@ import {
|
|
|
96
96
|
runSafeCleanup,
|
|
97
97
|
tightestDiskStat,
|
|
98
98
|
withPackageCacheLock
|
|
99
|
-
} from "../chunk-
|
|
99
|
+
} from "../chunk-B7EHZTCU.js";
|
|
100
100
|
import {
|
|
101
101
|
rewriteSupervisorApiKey,
|
|
102
102
|
supervisorChannelsRefusing
|
|
@@ -165,6 +165,7 @@ import {
|
|
|
165
165
|
resetRestartCount,
|
|
166
166
|
resolveClaudeBinary,
|
|
167
167
|
resolveContainerMemory,
|
|
168
|
+
resolveModelPolicySpawnEnv,
|
|
168
169
|
resolveWebFetchBaseline,
|
|
169
170
|
restartEgressSidecar,
|
|
170
171
|
rotatePaneLogForDayRollover,
|
|
@@ -188,7 +189,7 @@ import {
|
|
|
188
189
|
webFetchBaselineValue,
|
|
189
190
|
webFetchRestartNeeded,
|
|
190
191
|
writeEgressAllowlist
|
|
191
|
-
} from "../chunk-
|
|
192
|
+
} from "../chunk-KKK3S2RS.js";
|
|
192
193
|
import {
|
|
193
194
|
isAgentIdle,
|
|
194
195
|
isStaleForToday,
|
|
@@ -198,7 +199,7 @@ import {
|
|
|
198
199
|
sessionTranscriptDir,
|
|
199
200
|
subagentActivityAgeSeconds,
|
|
200
201
|
transcriptActivityAgeSeconds
|
|
201
|
-
} from "../chunk-
|
|
202
|
+
} from "../chunk-2HMIFOZU.js";
|
|
202
203
|
import {
|
|
203
204
|
classifyUnanswerablePane,
|
|
204
205
|
focusedConfirmDialogBlock,
|
|
@@ -220,6 +221,7 @@ import {
|
|
|
220
221
|
CLAUDE_MD_CONTEXT_ALARM_CHARS,
|
|
221
222
|
CLAUDE_MD_MANAGER_APPEND_HEADROOM_CHARS,
|
|
222
223
|
CONVERSATION_FAILURE_CATEGORIES,
|
|
224
|
+
DEFAULT_CLAUDE_HOST_MODEL,
|
|
223
225
|
DEFAULT_FRAMEWORK,
|
|
224
226
|
DEFAULT_NEIGHBOURHOOD_MS,
|
|
225
227
|
EXTRACTOR_IDENTIFIER_RULE,
|
|
@@ -261,6 +263,8 @@ import {
|
|
|
261
263
|
classifySlackPolicyBlock,
|
|
262
264
|
classifyTelegramPolicyBlock,
|
|
263
265
|
classifyTranscriptRateLimit,
|
|
266
|
+
claudeHostModelFromCandidate,
|
|
267
|
+
claudeModelOption,
|
|
264
268
|
coerceOnboardingState,
|
|
265
269
|
cursorAdvanceCounterKey,
|
|
266
270
|
decideInboundAccess,
|
|
@@ -321,7 +325,7 @@ import {
|
|
|
321
325
|
stabiliseResetInstant,
|
|
322
326
|
sumTranscriptUsageInWindow,
|
|
323
327
|
summarizeTranscriptActivity
|
|
324
|
-
} from "../chunk-
|
|
328
|
+
} from "../chunk-TKFPMB6F.js";
|
|
325
329
|
import {
|
|
326
330
|
CLAUDE_CONFIG_DIR_ENV,
|
|
327
331
|
claudeConfigDirFor,
|
|
@@ -2769,13 +2773,33 @@ function parseResumeHealthResponse(raw) {
|
|
|
2769
2773
|
}
|
|
2770
2774
|
|
|
2771
2775
|
// src/lib/model-change-respawn.ts
|
|
2776
|
+
function shouldHoldModelChange(input) {
|
|
2777
|
+
return input.framework === "claude-code" && input.hostAuthMode === null && Boolean(input.previousModel);
|
|
2778
|
+
}
|
|
2779
|
+
function heldSpawnModel(input) {
|
|
2780
|
+
return shouldHoldModelChange(input) ? input.previousModel : null;
|
|
2781
|
+
}
|
|
2782
|
+
function noteModelHold(held, agentId, codeName, holding) {
|
|
2783
|
+
if (!holding) {
|
|
2784
|
+
held.delete(agentId);
|
|
2785
|
+
return null;
|
|
2786
|
+
}
|
|
2787
|
+
if (held.has(agentId)) return null;
|
|
2788
|
+
held.add(agentId);
|
|
2789
|
+
return `[model] holding model changes for '${codeName}': host_auth_mode unavailable, keeping the model this session is on`;
|
|
2790
|
+
}
|
|
2772
2791
|
function shouldRespawnForModelChange(input) {
|
|
2773
2792
|
const { previousModel, primaryModel, framework, sessionHealthy } = input;
|
|
2774
2793
|
if (framework !== "claude-code" && framework !== "opencode") return false;
|
|
2775
2794
|
if (!sessionHealthy) return false;
|
|
2776
2795
|
if (!previousModel) return false;
|
|
2777
2796
|
if (!primaryModel) return false;
|
|
2778
|
-
|
|
2797
|
+
if (previousModel === primaryModel) return false;
|
|
2798
|
+
if (input.launchesWithClaudeModelFlag) return launchChanges(previousModel, primaryModel);
|
|
2799
|
+
return true;
|
|
2800
|
+
}
|
|
2801
|
+
function launchChanges(previousModel, primaryModel) {
|
|
2802
|
+
return claudeModelOption(previousModel) !== claudeModelOption(primaryModel);
|
|
2779
2803
|
}
|
|
2780
2804
|
function decideOpencodeModelRestart(input) {
|
|
2781
2805
|
const { previousModel, primaryModel, provisionedModel, onDiskModel, sessionHealthy } = input;
|
|
@@ -8698,6 +8722,8 @@ var agentState = {
|
|
|
8698
8722
|
writtenHashes: /* @__PURE__ */ new Map(),
|
|
8699
8723
|
knownSecretsHashes: /* @__PURE__ */ new Map(),
|
|
8700
8724
|
knownModels: /* @__PURE__ */ new Map(),
|
|
8725
|
+
/** ENG-7546: agents with a logged model-change hold, so it logs once per hold. */
|
|
8726
|
+
modelHoldsLogged: /* @__PURE__ */ new Set(),
|
|
8701
8727
|
knownTasksHashes: /* @__PURE__ */ new Map(),
|
|
8702
8728
|
knownIntegrationHashes: /* @__PURE__ */ new Map(),
|
|
8703
8729
|
/**
|
|
@@ -8824,6 +8850,7 @@ function clearAgentState(agentId, codeName) {
|
|
|
8824
8850
|
agentState.writtenHashes.delete(agentId);
|
|
8825
8851
|
agentState.knownSecretsHashes.delete(agentId);
|
|
8826
8852
|
agentState.knownModels.delete(agentId);
|
|
8853
|
+
agentState.modelHoldsLogged.delete(agentId);
|
|
8827
8854
|
agentState.knownTasksHashes.delete(agentId);
|
|
8828
8855
|
agentState.knownIntegrationHashes.delete(agentId);
|
|
8829
8856
|
agentState.knownCapabilitySurfaceHashes.delete(agentId);
|
|
@@ -9014,24 +9041,44 @@ function clearRestartTiming(codeName) {
|
|
|
9014
9041
|
}
|
|
9015
9042
|
|
|
9016
9043
|
// src/lib/manager/model.ts
|
|
9044
|
+
var DIRECT_CLAUDE_AUTH_MODES = /* @__PURE__ */ new Set(["subscription", "api_key"]);
|
|
9045
|
+
function launchesWithClaudeModelFlag(refreshData) {
|
|
9046
|
+
const agent = refreshData.agent;
|
|
9047
|
+
if (agent?.["framework"] !== "claude-code") return false;
|
|
9048
|
+
if (!DIRECT_CLAUDE_AUTH_MODES.has(refreshData.host_auth_mode)) return false;
|
|
9049
|
+
const { modelEnv } = resolveModelPolicySpawnEnv({
|
|
9050
|
+
policy: parseModelPolicy(refreshData.model_policy),
|
|
9051
|
+
openRouterMode: false,
|
|
9052
|
+
gatewayToken: null,
|
|
9053
|
+
codeName: String(agent["code_name"] ?? "")
|
|
9054
|
+
});
|
|
9055
|
+
return Object.keys(modelEnv).length === 0;
|
|
9056
|
+
}
|
|
9017
9057
|
function resolveModelChain(refreshData) {
|
|
9018
9058
|
const agent = refreshData.agent;
|
|
9019
9059
|
const modelDefaults = refreshData.model_defaults;
|
|
9020
9060
|
const platform4 = modelDefaults?.platform ?? {};
|
|
9021
9061
|
const org = modelDefaults?.org ?? {};
|
|
9062
|
+
const directClaudeHost = launchesWithClaudeModelFlag(refreshData);
|
|
9063
|
+
function eligible(candidate) {
|
|
9064
|
+
if (!candidate || !directClaudeHost) return candidate;
|
|
9065
|
+
return claudeHostModelFromCandidate(candidate) ?? void 0;
|
|
9066
|
+
}
|
|
9022
9067
|
function resolve2(tier) {
|
|
9023
9068
|
const agentField = `${tier}_model`;
|
|
9024
9069
|
const platformField = `default_${tier}_model`;
|
|
9025
|
-
const agentVal = agent?.[agentField];
|
|
9070
|
+
const agentVal = eligible(agent?.[agentField]);
|
|
9026
9071
|
if (agentVal) return agentVal;
|
|
9027
|
-
const orgVal = org?.[platformField];
|
|
9072
|
+
const orgVal = eligible(org?.[platformField]);
|
|
9028
9073
|
if (orgVal) return orgVal;
|
|
9029
|
-
const platformVal = platform4?.[platformField];
|
|
9074
|
+
const platformVal = eligible(platform4?.[platformField]);
|
|
9030
9075
|
if (platformVal) return platformVal;
|
|
9031
9076
|
return void 0;
|
|
9032
9077
|
}
|
|
9033
9078
|
return {
|
|
9034
|
-
|
|
9079
|
+
// Always set on a direct-Claude host: every caller falls back to the raw
|
|
9080
|
+
// agent.primary_model when this is empty, which could be the openrouter id.
|
|
9081
|
+
primary: resolve2("primary") ?? (directClaudeHost ? DEFAULT_CLAUDE_HOST_MODEL : void 0),
|
|
9035
9082
|
secondary: resolve2("secondary"),
|
|
9036
9083
|
tertiary: resolve2("tertiary")
|
|
9037
9084
|
};
|
|
@@ -15434,7 +15481,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
15434
15481
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
15435
15482
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
15436
15483
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
15437
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
15484
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-34V4HLOQ.js");
|
|
15438
15485
|
const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
|
|
15439
15486
|
if (newest === null) return null;
|
|
15440
15487
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -16231,7 +16278,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
16231
16278
|
var lastVersionCheckAt = 0;
|
|
16232
16279
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
16233
16280
|
var lastResponsivenessProbeAt = 0;
|
|
16234
|
-
var agtCliVersion = true ? "0.28.
|
|
16281
|
+
var agtCliVersion = true ? "0.28.1186" : "dev";
|
|
16235
16282
|
function resolveBrewPath(execFileSync3) {
|
|
16236
16283
|
try {
|
|
16237
16284
|
const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -18135,7 +18182,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
18135
18182
|
if (codeNames.length === 0) return;
|
|
18136
18183
|
void (async () => {
|
|
18137
18184
|
try {
|
|
18138
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
18185
|
+
const { collectDiagnostics } = await import("../persistent-session-KW4SEBXV.js");
|
|
18139
18186
|
await api.post("/host/heartbeat", {
|
|
18140
18187
|
host_id: hostId,
|
|
18141
18188
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor)
|
|
@@ -18278,7 +18325,7 @@ async function pollCycleInner() {
|
|
|
18278
18325
|
}
|
|
18279
18326
|
try {
|
|
18280
18327
|
const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
|
|
18281
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
18328
|
+
const { collectDiagnostics } = await import("../persistent-session-KW4SEBXV.js");
|
|
18282
18329
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
18283
18330
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor) : void 0;
|
|
18284
18331
|
let tailscaleHostname;
|
|
@@ -18533,7 +18580,7 @@ async function pollCycleInner() {
|
|
|
18533
18580
|
}
|
|
18534
18581
|
try {
|
|
18535
18582
|
const desiredClaudeCodeVersion = hbResp?.desired_claude_code_version?.trim();
|
|
18536
|
-
const { maybeUpdateClaudeCode, shouldRunClaudeCodeUpdater } = await import("../claude-code-updater-
|
|
18583
|
+
const { maybeUpdateClaudeCode, shouldRunClaudeCodeUpdater } = await import("../claude-code-updater-F2Q5CM6R.js");
|
|
18537
18584
|
const securityFloor = currentSecurityFloor();
|
|
18538
18585
|
claudeUpdaterInFlight = true;
|
|
18539
18586
|
if (desiredClaudeCodeVersion && (claudePairLoop.busy || claudePairingInProgress())) {
|
|
@@ -18568,7 +18615,7 @@ async function pollCycleInner() {
|
|
|
18568
18615
|
collectPanelessActivityProbes,
|
|
18569
18616
|
getResponsivenessIntervalMs,
|
|
18570
18617
|
occupancyQualificationClassifications
|
|
18571
|
-
} = await import("../responsiveness-probe-
|
|
18618
|
+
} = await import("../responsiveness-probe-34V4HLOQ.js");
|
|
18572
18619
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
18573
18620
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
18574
18621
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -18685,7 +18732,7 @@ async function pollCycleInner() {
|
|
|
18685
18732
|
collectResponsivenessProbes,
|
|
18686
18733
|
livePendingInboundOldestAgeSeconds,
|
|
18687
18734
|
parkPendingInbound
|
|
18688
|
-
} = await import("../responsiveness-probe-
|
|
18735
|
+
} = await import("../responsiveness-probe-34V4HLOQ.js");
|
|
18689
18736
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
|
|
18690
18737
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
18691
18738
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -18971,7 +19018,7 @@ async function pollCycleInner() {
|
|
|
18971
19018
|
}
|
|
18972
19019
|
}
|
|
18973
19020
|
);
|
|
18974
|
-
const { parkPendingInbound } = await import("../responsiveness-probe-
|
|
19021
|
+
const { parkPendingInbound } = await import("../responsiveness-probe-34V4HLOQ.js");
|
|
18975
19022
|
const { parked, deadLettered } = parkPendingInbound(codeName, new Date(fatalNowMs));
|
|
18976
19023
|
paneFatalStreak.delete(codeName);
|
|
18977
19024
|
paneFatalRestarts.set(codeName, [...history, fatalNowMs]);
|
|
@@ -19002,7 +19049,7 @@ async function pollCycleInner() {
|
|
|
19002
19049
|
TRANSCRIPT_MOUNT_ESCALATION_REFRESH_MS,
|
|
19003
19050
|
bindSourceEscalations
|
|
19004
19051
|
} = await import("../transcript-mount-health-OHE6IVJV.js");
|
|
19005
|
-
const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-
|
|
19052
|
+
const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-KW4SEBXV.js");
|
|
19006
19053
|
const mountConfig = resolveTranscriptMountConfig();
|
|
19007
19054
|
const liveAgents = agentState.persistentSessionAgents;
|
|
19008
19055
|
for (const tracked of [
|
|
@@ -19167,7 +19214,7 @@ async function pollCycleInner() {
|
|
|
19167
19214
|
}
|
|
19168
19215
|
try {
|
|
19169
19216
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
|
|
19170
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
19217
|
+
const { probeSessionAuth } = await import("../session-auth-dead-AGNAALKZ.js");
|
|
19171
19218
|
const observations = [];
|
|
19172
19219
|
const pendingCacheCommits = [];
|
|
19173
19220
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -20528,7 +20575,15 @@ async function processAgent(agent, agentStates, managedToolkits) {
|
|
|
20528
20575
|
}
|
|
20529
20576
|
const resolvedForModel = resolveModelChain(refreshData);
|
|
20530
20577
|
const primaryModel = resolvedForModel.primary ?? refreshData.agent.primary_model;
|
|
20531
|
-
|
|
20578
|
+
const holdModelChange = shouldHoldModelChange({
|
|
20579
|
+
hostAuthMode: refreshData.host_auth_mode,
|
|
20580
|
+
previousModel: agentState.knownModels.get(agent.agent_id),
|
|
20581
|
+
framework: frameworkId
|
|
20582
|
+
});
|
|
20583
|
+
const modelHoldLine = noteModelHold(agentState.modelHoldsLogged, agent.agent_id, agent.code_name, holdModelChange);
|
|
20584
|
+
if (modelHoldLine) log(modelHoldLine);
|
|
20585
|
+
if (holdModelChange) {
|
|
20586
|
+
} else if (primaryModel && frameworkAdapter.updateAgentModel) {
|
|
20532
20587
|
const previousModel = agentState.knownModels.get(agent.agent_id);
|
|
20533
20588
|
if (previousModel !== primaryModel) {
|
|
20534
20589
|
try {
|
|
@@ -20547,7 +20602,8 @@ async function processAgent(agent, agentStates, managedToolkits) {
|
|
|
20547
20602
|
previousModel,
|
|
20548
20603
|
primaryModel,
|
|
20549
20604
|
framework: frameworkId,
|
|
20550
|
-
sessionHealthy: isSessionHealthy(agent.code_name)
|
|
20605
|
+
sessionHealthy: isSessionHealthy(agent.code_name),
|
|
20606
|
+
launchesWithClaudeModelFlag: launchesWithClaudeModelFlag(refreshData)
|
|
20551
20607
|
})) {
|
|
20552
20608
|
const restartNotice = `Your model was changed to ${primaryModel}. Claude Code applies the model at launch, so your manager will restart your session shortly to switch.`;
|
|
20553
20609
|
const delivered = await injectMessage(
|
|
@@ -23351,7 +23407,11 @@ ${truncateForLog(ctx.tail)}` : `; pane_tail_hash=sha256:${createHash20("sha256")
|
|
|
23351
23407
|
metadata: { type: "persistent_session_boot" }
|
|
23352
23408
|
});
|
|
23353
23409
|
trackSessionRun(codeName, sessionRunResult.run_id);
|
|
23354
|
-
const spawnPrimaryModel =
|
|
23410
|
+
const spawnPrimaryModel = heldSpawnModel({
|
|
23411
|
+
hostAuthMode: refreshData.host_auth_mode,
|
|
23412
|
+
previousModel: agentState.knownModels.get(agent.agent_id),
|
|
23413
|
+
framework: "claude-code"
|
|
23414
|
+
}) ?? resolveModelChain(refreshData).primary ?? refreshData.agent?.["primary_model"] ?? null;
|
|
23355
23415
|
const spawnToolsRaw = refreshData.tools?.raw_content;
|
|
23356
23416
|
const egressAllowlist = deriveEgressAllowlist(spawnToolsRaw, modelPolicy);
|
|
23357
23417
|
const spawnDenyWebFetch = denyWebFetchForToolsContent(spawnToolsRaw);
|
|
@@ -23856,7 +23916,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
23856
23916
|
try {
|
|
23857
23917
|
const freshId = rotateSessionForWedge(codeName);
|
|
23858
23918
|
consecutiveWedgeCycles.delete(codeName);
|
|
23859
|
-
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-
|
|
23919
|
+
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-34V4HLOQ.js");
|
|
23860
23920
|
const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
|
|
23861
23921
|
const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
|
|
23862
23922
|
const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
|
|
@@ -23899,7 +23959,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
23899
23959
|
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}`));
|
|
23900
23960
|
void (async () => {
|
|
23901
23961
|
try {
|
|
23902
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
23962
|
+
const { collectDiagnostics } = await import("../persistent-session-KW4SEBXV.js");
|
|
23903
23963
|
await api.post("/host/heartbeat", {
|
|
23904
23964
|
host_id: hostId,
|
|
23905
23965
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor)
|
|
@@ -23950,7 +24010,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
23950
24010
|
}
|
|
23951
24011
|
try {
|
|
23952
24012
|
const hostId = await getHostId();
|
|
23953
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
24013
|
+
const { collectDiagnostics } = await import("../persistent-session-KW4SEBXV.js");
|
|
23954
24014
|
await api.post("/host/heartbeat", {
|
|
23955
24015
|
host_id: hostId,
|
|
23956
24016
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor)
|
|
@@ -24652,7 +24712,7 @@ async function processClaudePairSessions(agents) {
|
|
|
24652
24712
|
snapshotPairConfig,
|
|
24653
24713
|
// ENG-11659: result -> report body + the manager.log line that records it.
|
|
24654
24714
|
planPairStartReport
|
|
24655
|
-
} = await import("../claude-pair-runtime-
|
|
24715
|
+
} = await import("../claude-pair-runtime-AAK4N5Z6.js");
|
|
24656
24716
|
const { resetClaudeSignin, describeSigninResetForLog, describeSigninResetFailure } = await import("../claude-signin-reset-6IJMMVYG.js");
|
|
24657
24717
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
24658
24718
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|