@integrity-labs/agt-cli 0.28.351 → 0.28.352
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 +4 -4
- package/dist/{chunk-F2TH5XVJ.js → chunk-BERN3B42.js} +89 -88
- package/dist/{chunk-F2TH5XVJ.js.map → chunk-BERN3B42.js.map} +1 -1
- package/dist/{chunk-OEJ35WXL.js → chunk-ZALWFOHO.js} +1 -1
- package/dist/chunk-ZALWFOHO.js.map +1 -0
- package/dist/{claude-pair-runtime-NUGUTMMT.js → claude-pair-runtime-KO2HWC7E.js} +2 -2
- package/dist/lib/manager-worker.js +72 -12
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/{persistent-session-KFR2GLKC.js → persistent-session-WMQO3QKU.js} +2 -2
- package/dist/{responsiveness-probe-PFPXYTL2.js → responsiveness-probe-TCTSHDH3.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-OEJ35WXL.js.map +0 -1
- /package/dist/{claude-pair-runtime-NUGUTMMT.js.map → claude-pair-runtime-KO2HWC7E.js.map} +0 -0
- /package/dist/{persistent-session-KFR2GLKC.js.map → persistent-session-WMQO3QKU.js.map} +0 -0
- /package/dist/{responsiveness-probe-PFPXYTL2.js.map → responsiveness-probe-TCTSHDH3.js.map} +0 -0
|
@@ -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-
|
|
103
|
+
const { resolveClaudeBinary } = await import("./persistent-session-WMQO3QKU.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-
|
|
376
|
+
//# sourceMappingURL=claude-pair-runtime-KO2HWC7E.js.map
|
|
@@ -45,8 +45,9 @@ import {
|
|
|
45
45
|
requireHost,
|
|
46
46
|
resolveEffectivePinRaw,
|
|
47
47
|
safeWriteJsonAtomic,
|
|
48
|
-
setConfigHash
|
|
49
|
-
|
|
48
|
+
setConfigHash,
|
|
49
|
+
toOpencodeModel
|
|
50
|
+
} from "../chunk-BERN3B42.js";
|
|
50
51
|
import {
|
|
51
52
|
getProjectDir as getProjectDir2,
|
|
52
53
|
getReadyTasks,
|
|
@@ -137,7 +138,7 @@ import {
|
|
|
137
138
|
takeZombieDetection,
|
|
138
139
|
transcriptActivityAgeSeconds,
|
|
139
140
|
writeEgressAllowlist
|
|
140
|
-
} from "../chunk-
|
|
141
|
+
} from "../chunk-ZALWFOHO.js";
|
|
141
142
|
import {
|
|
142
143
|
reapOrphanChannelMcps
|
|
143
144
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -1250,12 +1251,25 @@ function parseResumeHealthResponse(raw) {
|
|
|
1250
1251
|
// src/lib/model-change-respawn.ts
|
|
1251
1252
|
function shouldRespawnForModelChange(input) {
|
|
1252
1253
|
const { previousModel, primaryModel, framework, sessionHealthy } = input;
|
|
1253
|
-
if (framework !== "claude-code") return false;
|
|
1254
|
+
if (framework !== "claude-code" && framework !== "opencode") return false;
|
|
1254
1255
|
if (!sessionHealthy) return false;
|
|
1255
1256
|
if (!previousModel) return false;
|
|
1256
1257
|
if (!primaryModel) return false;
|
|
1257
1258
|
return previousModel !== primaryModel;
|
|
1258
1259
|
}
|
|
1260
|
+
function decideOpencodeModelRestart(input) {
|
|
1261
|
+
const { previousModel, primaryModel, provisionedModel, onDiskModel, sessionHealthy } = input;
|
|
1262
|
+
if (onDiskModel !== provisionedModel) {
|
|
1263
|
+
return { restart: false, recordModel: false };
|
|
1264
|
+
}
|
|
1265
|
+
const restart = shouldRespawnForModelChange({
|
|
1266
|
+
previousModel,
|
|
1267
|
+
primaryModel,
|
|
1268
|
+
framework: "opencode",
|
|
1269
|
+
sessionHealthy
|
|
1270
|
+
});
|
|
1271
|
+
return { restart, recordModel: true };
|
|
1272
|
+
}
|
|
1259
1273
|
|
|
1260
1274
|
// src/lib/connectivity-probe-runner.ts
|
|
1261
1275
|
var DEFAULT_INTERVAL_MS = 60 * 60 * 1e3;
|
|
@@ -5577,6 +5591,15 @@ function opencodeTmuxSession(codeName) {
|
|
|
5577
5591
|
function opencodePaneLogPath(codeName) {
|
|
5578
5592
|
return join20(homedir10(), ".augmented", codeName, "opencode-serve.log");
|
|
5579
5593
|
}
|
|
5594
|
+
function readProvisionedOpencodeModel(agentDir) {
|
|
5595
|
+
try {
|
|
5596
|
+
const raw = readFileSync16(join20(agentDir, "provision", "opencode.json"), "utf-8");
|
|
5597
|
+
const parsed = JSON.parse(raw);
|
|
5598
|
+
return typeof parsed.model === "string" ? parsed.model : null;
|
|
5599
|
+
} catch {
|
|
5600
|
+
return null;
|
|
5601
|
+
}
|
|
5602
|
+
}
|
|
5580
5603
|
function baseUrlFor(port) {
|
|
5581
5604
|
return `http://127.0.0.1:${port}`;
|
|
5582
5605
|
}
|
|
@@ -5737,6 +5760,21 @@ function getBridge(codeName, port, password) {
|
|
|
5737
5760
|
bridges.set(codeName, { port, password, bridge });
|
|
5738
5761
|
return bridge;
|
|
5739
5762
|
}
|
|
5763
|
+
function stopOpencodeSession(codeName, log2) {
|
|
5764
|
+
const tmuxSession = opencodeTmuxSession(codeName);
|
|
5765
|
+
try {
|
|
5766
|
+
execSync(`tmux kill-session -t ${tmuxSession} 2>/dev/null`, { stdio: "ignore" });
|
|
5767
|
+
log2(`[opencode-session] stopped '${tmuxSession}' for '${codeName}'`);
|
|
5768
|
+
} catch {
|
|
5769
|
+
}
|
|
5770
|
+
bridges.delete(codeName);
|
|
5771
|
+
const session = sessions.get(codeName);
|
|
5772
|
+
if (session) {
|
|
5773
|
+
session.status = "stopped";
|
|
5774
|
+
session.port = null;
|
|
5775
|
+
session.password = null;
|
|
5776
|
+
}
|
|
5777
|
+
}
|
|
5740
5778
|
function stripUndefined(env) {
|
|
5741
5779
|
const out = {};
|
|
5742
5780
|
for (const [k, v] of Object.entries(env)) if (v !== void 0) out[k] = v;
|
|
@@ -9304,7 +9342,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
9304
9342
|
var lastVersionCheckAt = 0;
|
|
9305
9343
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
9306
9344
|
var lastResponsivenessProbeAt = 0;
|
|
9307
|
-
var agtCliVersion = true ? "0.28.
|
|
9345
|
+
var agtCliVersion = true ? "0.28.352" : "dev";
|
|
9308
9346
|
function resolveBrewPath(execFileSync2) {
|
|
9309
9347
|
try {
|
|
9310
9348
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -10323,7 +10361,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
10323
10361
|
if (codeNames.length === 0) return;
|
|
10324
10362
|
void (async () => {
|
|
10325
10363
|
try {
|
|
10326
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
10364
|
+
const { collectDiagnostics } = await import("../persistent-session-WMQO3QKU.js");
|
|
10327
10365
|
await api.post("/host/heartbeat", {
|
|
10328
10366
|
host_id: hostId,
|
|
10329
10367
|
agent_diagnostics: collectDiagnostics(codeNames)
|
|
@@ -10422,7 +10460,7 @@ async function pollCycle() {
|
|
|
10422
10460
|
}
|
|
10423
10461
|
try {
|
|
10424
10462
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
10425
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
10463
|
+
const { collectDiagnostics } = await import("../persistent-session-WMQO3QKU.js");
|
|
10426
10464
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
10427
10465
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
|
|
10428
10466
|
let tailscaleHostname;
|
|
@@ -10577,7 +10615,7 @@ async function pollCycle() {
|
|
|
10577
10615
|
const {
|
|
10578
10616
|
collectResponsivenessProbes,
|
|
10579
10617
|
getResponsivenessIntervalMs
|
|
10580
|
-
} = await import("../responsiveness-probe-
|
|
10618
|
+
} = await import("../responsiveness-probe-TCTSHDH3.js");
|
|
10581
10619
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
10582
10620
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
10583
10621
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -10609,7 +10647,7 @@ async function pollCycle() {
|
|
|
10609
10647
|
collectResponsivenessProbes,
|
|
10610
10648
|
livePendingInboundOldestAgeSeconds,
|
|
10611
10649
|
parkPendingInbound
|
|
10612
|
-
} = await import("../responsiveness-probe-
|
|
10650
|
+
} = await import("../responsiveness-probe-TCTSHDH3.js");
|
|
10613
10651
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-HYOOQV4A.js");
|
|
10614
10652
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
10615
10653
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -11584,6 +11622,28 @@ async function processAgent(agent, agentStates) {
|
|
|
11584
11622
|
}
|
|
11585
11623
|
}
|
|
11586
11624
|
agentState.knownModels.set(agent.agent_id, primaryModel);
|
|
11625
|
+
} else if (primaryModel && frameworkId === "opencode") {
|
|
11626
|
+
const previousModel = agentState.knownModels.get(agent.agent_id);
|
|
11627
|
+
const provisionedModel = toOpencodeModel(primaryModel);
|
|
11628
|
+
const onDiskModel = readProvisionedOpencodeModel(getFramework("opencode").getAgentDir(agent.code_name));
|
|
11629
|
+
const { restart, recordModel } = decideOpencodeModelRestart({
|
|
11630
|
+
previousModel,
|
|
11631
|
+
primaryModel,
|
|
11632
|
+
provisionedModel,
|
|
11633
|
+
onDiskModel,
|
|
11634
|
+
sessionHealthy: isOpencodeSessionHealthy(agent.code_name)
|
|
11635
|
+
});
|
|
11636
|
+
if (restart) {
|
|
11637
|
+
log(
|
|
11638
|
+
`[hot-reload] opencode model changed for '${agent.code_name}': ${previousModel} -> ${primaryModel} - restarting serve`
|
|
11639
|
+
);
|
|
11640
|
+
stopOpencodeSession(agent.code_name, log);
|
|
11641
|
+
} else if (previousModel && previousModel !== primaryModel && onDiskModel !== provisionedModel) {
|
|
11642
|
+
log(
|
|
11643
|
+
`[hot-reload] opencode model change for '${agent.code_name}' deferred: opencode.json shows '${onDiskModel}' not '${provisionedModel}' (provision not yet applied) - retrying next poll`
|
|
11644
|
+
);
|
|
11645
|
+
}
|
|
11646
|
+
if (recordModel) agentState.knownModels.set(agent.agent_id, primaryModel);
|
|
11587
11647
|
}
|
|
11588
11648
|
let lastDriftCheckAt = now;
|
|
11589
11649
|
const written = agentState.writtenHashes.get(agent.agent_id);
|
|
@@ -13723,7 +13783,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
13723
13783
|
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}`));
|
|
13724
13784
|
void (async () => {
|
|
13725
13785
|
try {
|
|
13726
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13786
|
+
const { collectDiagnostics } = await import("../persistent-session-WMQO3QKU.js");
|
|
13727
13787
|
await api.post("/host/heartbeat", {
|
|
13728
13788
|
host_id: hostId,
|
|
13729
13789
|
agent_diagnostics: collectDiagnostics([codeName])
|
|
@@ -13773,7 +13833,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
13773
13833
|
}
|
|
13774
13834
|
try {
|
|
13775
13835
|
const hostId = await getHostId();
|
|
13776
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13836
|
+
const { collectDiagnostics } = await import("../persistent-session-WMQO3QKU.js");
|
|
13777
13837
|
await api.post("/host/heartbeat", {
|
|
13778
13838
|
host_id: hostId,
|
|
13779
13839
|
agent_diagnostics: collectDiagnostics([codeName])
|
|
@@ -14271,7 +14331,7 @@ async function processClaudePairSessions(agents) {
|
|
|
14271
14331
|
killPairSession,
|
|
14272
14332
|
pairTmuxSession,
|
|
14273
14333
|
finalizeClaudePairOnboarding
|
|
14274
|
-
} = await import("../claude-pair-runtime-
|
|
14334
|
+
} = await import("../claude-pair-runtime-KO2HWC7E.js");
|
|
14275
14335
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
14276
14336
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
14277
14337
|
const killed = await killPairSession(pairTmuxSession(pairId));
|