@integrity-labs/agt-cli 0.28.385 → 0.28.387
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-MQHDPJZD.js → chunk-LAO2CUZU.js} +20 -4
- package/dist/chunk-LAO2CUZU.js.map +1 -0
- package/dist/{chunk-P3SY6KTF.js → chunk-ZNFB4AKQ.js} +3 -3
- package/dist/{claude-pair-runtime-OIK6HKPS.js → claude-pair-runtime-NVMVUAGS.js} +2 -2
- package/dist/lib/manager-worker.js +43 -14
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/direct-chat-channel.js +13 -0
- package/dist/mcp/origami.js +13 -0
- package/dist/mcp/slack-channel.js +13 -0
- package/dist/mcp/telegram-channel.js +13 -0
- package/dist/{persistent-session-MDQVHXKX.js → persistent-session-KQHWYEQF.js} +2 -2
- package/dist/{responsiveness-probe-CG7XM7GL.js → responsiveness-probe-5X6WVKUZ.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-MQHDPJZD.js.map +0 -1
- /package/dist/{chunk-P3SY6KTF.js.map → chunk-ZNFB4AKQ.js.map} +0 -0
- /package/dist/{claude-pair-runtime-OIK6HKPS.js.map → claude-pair-runtime-NVMVUAGS.js.map} +0 -0
- /package/dist/{persistent-session-MDQVHXKX.js.map → persistent-session-KQHWYEQF.js.map} +0 -0
- /package/dist/{responsiveness-probe-CG7XM7GL.js.map → responsiveness-probe-5X6WVKUZ.js.map} +0 -0
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
resolveConnectivityProbe,
|
|
26
26
|
worseConnectivityOutcome,
|
|
27
27
|
wrapScheduledTaskPrompt
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-LAO2CUZU.js";
|
|
29
29
|
import {
|
|
30
30
|
parsePsRows
|
|
31
31
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -6184,7 +6184,7 @@ function requireHost() {
|
|
|
6184
6184
|
}
|
|
6185
6185
|
|
|
6186
6186
|
// src/lib/api-client.ts
|
|
6187
|
-
var agtCliVersion = true ? "0.28.
|
|
6187
|
+
var agtCliVersion = true ? "0.28.387" : "dev";
|
|
6188
6188
|
var lastConfigHash = null;
|
|
6189
6189
|
function setConfigHash(hash) {
|
|
6190
6190
|
lastConfigHash = hash && hash.length > 0 ? hash : null;
|
|
@@ -8638,4 +8638,4 @@ export {
|
|
|
8638
8638
|
managerInstallSystemUnitCommand,
|
|
8639
8639
|
managerUninstallSystemUnitCommand
|
|
8640
8640
|
};
|
|
8641
|
-
//# sourceMappingURL=chunk-
|
|
8641
|
+
//# sourceMappingURL=chunk-ZNFB4AKQ.js.map
|
|
@@ -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-KQHWYEQF.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-NVMVUAGS.js.map
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
resolveEffectivePinRaw,
|
|
44
44
|
safeWriteJsonAtomic,
|
|
45
45
|
setConfigHash
|
|
46
|
-
} from "../chunk-
|
|
46
|
+
} from "../chunk-ZNFB4AKQ.js";
|
|
47
47
|
import {
|
|
48
48
|
getProjectDir as getProjectDir2,
|
|
49
49
|
getReadyTasks,
|
|
@@ -145,7 +145,7 @@ import {
|
|
|
145
145
|
toOpencodeModel,
|
|
146
146
|
transcriptActivityAgeSeconds,
|
|
147
147
|
writeEgressAllowlist
|
|
148
|
-
} from "../chunk-
|
|
148
|
+
} from "../chunk-LAO2CUZU.js";
|
|
149
149
|
import {
|
|
150
150
|
reapOrphanChannelMcps
|
|
151
151
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -725,6 +725,24 @@ var ChannelQuarantineStore = class {
|
|
|
725
725
|
const forAgent = this.load()[codeName];
|
|
726
726
|
return new Set(forAgent ? Object.keys(forAgent) : []);
|
|
727
727
|
}
|
|
728
|
+
/**
|
|
729
|
+
* ENG-8018: the full quarantine entries for `codeName` (serverKey → {reason,
|
|
730
|
+
* quarantinedAt}), empty array if none. Unlike {@link getQuarantinedKeys} this
|
|
731
|
+
* carries the reason + timestamp needed to surface the quarantine to the
|
|
732
|
+
* control plane (the manager folds it into the agent heartbeat's diagnostics)
|
|
733
|
+
* and to the agent itself, so an operator sees WHY/WHEN on the webapp badge
|
|
734
|
+
* and the agent reports the real cause instead of confabulating one (ENG-8003).
|
|
735
|
+
* Returns a defensive copy so callers can't mutate the cached store.
|
|
736
|
+
*/
|
|
737
|
+
getQuarantineEntries(codeName) {
|
|
738
|
+
const forAgent = this.load()[codeName];
|
|
739
|
+
if (!forAgent) return [];
|
|
740
|
+
return Object.entries(forAgent).map(([serverKey, entry]) => ({
|
|
741
|
+
serverKey,
|
|
742
|
+
reason: entry.reason,
|
|
743
|
+
quarantinedAt: entry.quarantinedAt
|
|
744
|
+
}));
|
|
745
|
+
}
|
|
728
746
|
/**
|
|
729
747
|
* Mark `serverKey` quarantined for `codeName`. Idempotent — re-quarantining
|
|
730
748
|
* an already-quarantined key preserves the original `quarantinedAt` (so the
|
|
@@ -9095,7 +9113,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
9095
9113
|
var lastVersionCheckAt = 0;
|
|
9096
9114
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
9097
9115
|
var lastResponsivenessProbeAt = 0;
|
|
9098
|
-
var agtCliVersion = true ? "0.28.
|
|
9116
|
+
var agtCliVersion = true ? "0.28.387" : "dev";
|
|
9099
9117
|
function resolveBrewPath(execFileSync2) {
|
|
9100
9118
|
try {
|
|
9101
9119
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -10085,6 +10103,9 @@ function channelQuarantineStore() {
|
|
|
10085
10103
|
}
|
|
10086
10104
|
return _channelQuarantineStore;
|
|
10087
10105
|
}
|
|
10106
|
+
function quarantineEntriesFor(codeName) {
|
|
10107
|
+
return channelQuarantineStore().getQuarantineEntries(codeName);
|
|
10108
|
+
}
|
|
10088
10109
|
var _hostFlagStore = null;
|
|
10089
10110
|
function hostFlagStore() {
|
|
10090
10111
|
if (!_hostFlagStore) {
|
|
@@ -10224,10 +10245,10 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
10224
10245
|
if (codeNames.length === 0) return;
|
|
10225
10246
|
void (async () => {
|
|
10226
10247
|
try {
|
|
10227
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
10248
|
+
const { collectDiagnostics } = await import("../persistent-session-KQHWYEQF.js");
|
|
10228
10249
|
await api.post("/host/heartbeat", {
|
|
10229
10250
|
host_id: hostId,
|
|
10230
|
-
agent_diagnostics: collectDiagnostics(codeNames)
|
|
10251
|
+
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor)
|
|
10231
10252
|
});
|
|
10232
10253
|
} catch (err) {
|
|
10233
10254
|
log(`[restart] post-respawn diagnostics flush failed: ${err.message}`);
|
|
@@ -10323,9 +10344,9 @@ async function pollCycle() {
|
|
|
10323
10344
|
}
|
|
10324
10345
|
try {
|
|
10325
10346
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
10326
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
10347
|
+
const { collectDiagnostics } = await import("../persistent-session-KQHWYEQF.js");
|
|
10327
10348
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
10328
|
-
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
|
|
10349
|
+
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor) : void 0;
|
|
10329
10350
|
let tailscaleHostname;
|
|
10330
10351
|
try {
|
|
10331
10352
|
const { execSync: es } = await import("child_process");
|
|
@@ -10478,7 +10499,7 @@ async function pollCycle() {
|
|
|
10478
10499
|
const {
|
|
10479
10500
|
collectResponsivenessProbes,
|
|
10480
10501
|
getResponsivenessIntervalMs
|
|
10481
|
-
} = await import("../responsiveness-probe-
|
|
10502
|
+
} = await import("../responsiveness-probe-5X6WVKUZ.js");
|
|
10482
10503
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
10483
10504
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
10484
10505
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -10510,7 +10531,7 @@ async function pollCycle() {
|
|
|
10510
10531
|
collectResponsivenessProbes,
|
|
10511
10532
|
livePendingInboundOldestAgeSeconds,
|
|
10512
10533
|
parkPendingInbound
|
|
10513
|
-
} = await import("../responsiveness-probe-
|
|
10534
|
+
} = await import("../responsiveness-probe-5X6WVKUZ.js");
|
|
10514
10535
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-HYOOQV4A.js");
|
|
10515
10536
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
10516
10537
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -12854,6 +12875,14 @@ async function processAgent(agent, agentStates) {
|
|
|
12854
12875
|
"quarantine",
|
|
12855
12876
|
`optional channel '${serverKey}' dead past restart budget + dwell \u2014 quarantined`
|
|
12856
12877
|
);
|
|
12878
|
+
void injectMessage(
|
|
12879
|
+
codeName,
|
|
12880
|
+
"system",
|
|
12881
|
+
`Your "${serverKey}" channel has been quarantined by the host runtime: it repeatedly failed to start (no live MCP process) past the recovery budget, so it has been pulled from your active channel set. You cannot send or receive on ${serverKey} until an operator re-enables it. This is an infrastructure fault, not a policy or allowlist decision. If anyone asks why you are quiet on ${serverKey}, tell them the channel is quarantined and ask them to have an operator re-enable it. Do not guess at other causes.`,
|
|
12882
|
+
{ task_name: "channel-quarantine" },
|
|
12883
|
+
log
|
|
12884
|
+
).catch(() => {
|
|
12885
|
+
});
|
|
12857
12886
|
}
|
|
12858
12887
|
}
|
|
12859
12888
|
});
|
|
@@ -13713,10 +13742,10 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
13713
13742
|
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}`));
|
|
13714
13743
|
void (async () => {
|
|
13715
13744
|
try {
|
|
13716
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13745
|
+
const { collectDiagnostics } = await import("../persistent-session-KQHWYEQF.js");
|
|
13717
13746
|
await api.post("/host/heartbeat", {
|
|
13718
13747
|
host_id: hostId,
|
|
13719
|
-
agent_diagnostics: collectDiagnostics([codeName])
|
|
13748
|
+
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor)
|
|
13720
13749
|
});
|
|
13721
13750
|
} catch (err) {
|
|
13722
13751
|
log(`[restart-lane] post-respawn diagnostics flush failed for '${codeName}': ${err.message}`);
|
|
@@ -13763,10 +13792,10 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
13763
13792
|
}
|
|
13764
13793
|
try {
|
|
13765
13794
|
const hostId = await getHostId();
|
|
13766
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13795
|
+
const { collectDiagnostics } = await import("../persistent-session-KQHWYEQF.js");
|
|
13767
13796
|
await api.post("/host/heartbeat", {
|
|
13768
13797
|
host_id: hostId,
|
|
13769
|
-
agent_diagnostics: collectDiagnostics([codeName])
|
|
13798
|
+
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor)
|
|
13770
13799
|
});
|
|
13771
13800
|
} catch (err) {
|
|
13772
13801
|
log(`[fast-mcp-respawn] post-respawn diagnostics flush failed for '${codeName}': ${err.message}`);
|
|
@@ -14216,7 +14245,7 @@ async function processClaudePairSessions(agents) {
|
|
|
14216
14245
|
killPairSession,
|
|
14217
14246
|
pairTmuxSession,
|
|
14218
14247
|
finalizeClaudePairOnboarding
|
|
14219
|
-
} = await import("../claude-pair-runtime-
|
|
14248
|
+
} = await import("../claude-pair-runtime-NVMVUAGS.js");
|
|
14220
14249
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
14221
14250
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
14222
14251
|
const killed = await killPairSession(pairTmuxSession(pairId));
|