@integrity-labs/agt-cli 0.28.303 → 0.28.305
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-5WQATS6J.js → chunk-A546IARM.js} +15 -3
- package/dist/chunk-A546IARM.js.map +1 -0
- package/dist/{chunk-7LFB5DAW.js → chunk-XVLVNR33.js} +3 -3
- package/dist/{claude-pair-runtime-FOFN74JS.js → claude-pair-runtime-6MRJ6ZJV.js} +2 -2
- package/dist/lib/manager-worker.js +46 -13
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/origami.js +2 -2
- package/dist/mcp/slack-channel.js +139 -3
- package/dist/mcp/telegram-channel.js +29 -0
- package/dist/{persistent-session-52DPSJGK.js → persistent-session-WYNJBCVB.js} +2 -2
- package/dist/{responsiveness-probe-KXWV4FXD.js → responsiveness-probe-2FQLPFAR.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-5WQATS6J.js.map +0 -1
- /package/dist/{chunk-7LFB5DAW.js.map → chunk-XVLVNR33.js.map} +0 -0
- /package/dist/{claude-pair-runtime-FOFN74JS.js.map → claude-pair-runtime-6MRJ6ZJV.js.map} +0 -0
- /package/dist/{persistent-session-52DPSJGK.js.map → persistent-session-WYNJBCVB.js.map} +0 -0
- /package/dist/{responsiveness-probe-KXWV4FXD.js.map → responsiveness-probe-2FQLPFAR.js.map} +0 -0
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
resolveConnectivityProbe,
|
|
19
19
|
worseConnectivityOutcome,
|
|
20
20
|
wrapScheduledTaskPrompt
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-A546IARM.js";
|
|
22
22
|
import {
|
|
23
23
|
parsePsRows
|
|
24
24
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -5882,7 +5882,7 @@ function requireHost() {
|
|
|
5882
5882
|
}
|
|
5883
5883
|
|
|
5884
5884
|
// src/lib/api-client.ts
|
|
5885
|
-
var agtCliVersion = true ? "0.28.
|
|
5885
|
+
var agtCliVersion = true ? "0.28.305" : "dev";
|
|
5886
5886
|
var lastConfigHash = null;
|
|
5887
5887
|
function setConfigHash(hash) {
|
|
5888
5888
|
lastConfigHash = hash && hash.length > 0 ? hash : null;
|
|
@@ -8181,4 +8181,4 @@ export {
|
|
|
8181
8181
|
managerInstallSystemUnitCommand,
|
|
8182
8182
|
managerUninstallSystemUnitCommand
|
|
8183
8183
|
};
|
|
8184
|
-
//# sourceMappingURL=chunk-
|
|
8184
|
+
//# sourceMappingURL=chunk-XVLVNR33.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-WYNJBCVB.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-6MRJ6ZJV.js.map
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
requireHost,
|
|
40
40
|
safeWriteJsonAtomic,
|
|
41
41
|
setConfigHash
|
|
42
|
-
} from "../chunk-
|
|
42
|
+
} from "../chunk-XVLVNR33.js";
|
|
43
43
|
import {
|
|
44
44
|
getProjectDir as getProjectDir2,
|
|
45
45
|
getReadyTasks,
|
|
@@ -127,7 +127,7 @@ import {
|
|
|
127
127
|
takeZombieDetection,
|
|
128
128
|
transcriptActivityAgeSeconds,
|
|
129
129
|
writeEgressAllowlist
|
|
130
|
-
} from "../chunk-
|
|
130
|
+
} from "../chunk-A546IARM.js";
|
|
131
131
|
import {
|
|
132
132
|
reapOrphanChannelMcps
|
|
133
133
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -3927,6 +3927,14 @@ var HYBRID_ACTIONABLE_STATUSES = new Set(KANBAN_NUDGE_ACTIONABLE_STATUSES);
|
|
|
3927
3927
|
function isHybridActionable(item) {
|
|
3928
3928
|
return HYBRID_ACTIONABLE_STATUSES.has(item.status) && item.source_type !== "scheduled_task";
|
|
3929
3929
|
}
|
|
3930
|
+
function kanbanActionableSignature(allowed) {
|
|
3931
|
+
return allowed.map((i) => `${i.id}:${i.status}`).sort().join("|");
|
|
3932
|
+
}
|
|
3933
|
+
function shouldNudgeUnchangedBoard(signature, state7, now, fullCadenceMs) {
|
|
3934
|
+
if (!state7) return true;
|
|
3935
|
+
if (state7.signature !== signature) return true;
|
|
3936
|
+
return now - state7.nudgedAt >= fullCadenceMs;
|
|
3937
|
+
}
|
|
3930
3938
|
function isSlashCommand(command) {
|
|
3931
3939
|
return command.trimStart().startsWith("/");
|
|
3932
3940
|
}
|
|
@@ -6989,7 +6997,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
6989
6997
|
var lastVersionCheckAt = 0;
|
|
6990
6998
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
6991
6999
|
var lastResponsivenessProbeAt = 0;
|
|
6992
|
-
var agtCliVersion = true ? "0.28.
|
|
7000
|
+
var agtCliVersion = true ? "0.28.305" : "dev";
|
|
6993
7001
|
function resolveBrewPath(execFileSync2) {
|
|
6994
7002
|
try {
|
|
6995
7003
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -7844,7 +7852,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
7844
7852
|
if (codeNames.length === 0) return;
|
|
7845
7853
|
void (async () => {
|
|
7846
7854
|
try {
|
|
7847
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
7855
|
+
const { collectDiagnostics } = await import("../persistent-session-WYNJBCVB.js");
|
|
7848
7856
|
await api.post("/host/heartbeat", {
|
|
7849
7857
|
host_id: hostId,
|
|
7850
7858
|
agent_diagnostics: collectDiagnostics(codeNames)
|
|
@@ -7942,7 +7950,7 @@ async function pollCycle() {
|
|
|
7942
7950
|
}
|
|
7943
7951
|
try {
|
|
7944
7952
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
7945
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
7953
|
+
const { collectDiagnostics } = await import("../persistent-session-WYNJBCVB.js");
|
|
7946
7954
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
7947
7955
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
|
|
7948
7956
|
let tailscaleHostname;
|
|
@@ -8090,7 +8098,7 @@ async function pollCycle() {
|
|
|
8090
8098
|
const {
|
|
8091
8099
|
collectResponsivenessProbes,
|
|
8092
8100
|
getResponsivenessIntervalMs
|
|
8093
|
-
} = await import("../responsiveness-probe-
|
|
8101
|
+
} = await import("../responsiveness-probe-2FQLPFAR.js");
|
|
8094
8102
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
8095
8103
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
8096
8104
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -8122,7 +8130,7 @@ async function pollCycle() {
|
|
|
8122
8130
|
collectResponsivenessProbes,
|
|
8123
8131
|
livePendingInboundOldestAgeSeconds,
|
|
8124
8132
|
parkPendingInbound
|
|
8125
|
-
} = await import("../responsiveness-probe-
|
|
8133
|
+
} = await import("../responsiveness-probe-2FQLPFAR.js");
|
|
8126
8134
|
const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
|
|
8127
8135
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
8128
8136
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -10104,7 +10112,12 @@ async function processAgent(agent, agentStates) {
|
|
|
10104
10112
|
);
|
|
10105
10113
|
}
|
|
10106
10114
|
} else if (allowed.length > 0) {
|
|
10107
|
-
void maybeInjectKanbanCheck(
|
|
10115
|
+
void maybeInjectKanbanCheck(
|
|
10116
|
+
agent.code_name,
|
|
10117
|
+
agent.agent_id,
|
|
10118
|
+
allowed.length,
|
|
10119
|
+
kanbanActionableSignature(allowed)
|
|
10120
|
+
);
|
|
10108
10121
|
} else if (suppressed.length > 0) {
|
|
10109
10122
|
closeInjectedRunIfOpen(
|
|
10110
10123
|
agent.code_name,
|
|
@@ -10114,6 +10127,7 @@ async function processAgent(agent, agentStates) {
|
|
|
10114
10127
|
} else if (openInjectedRunByCode.has(agent.code_name)) {
|
|
10115
10128
|
const openRunId = openInjectedRunByCode.get(agent.code_name);
|
|
10116
10129
|
openInjectedRunByCode.delete(agent.code_name);
|
|
10130
|
+
kanbanNudgeStateByCode.delete(agent.code_name);
|
|
10117
10131
|
void cancelKanbanNoticeOnDrain(agent.code_name, agent.agent_id, openRunId);
|
|
10118
10132
|
}
|
|
10119
10133
|
}
|
|
@@ -11099,7 +11113,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
11099
11113
|
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}`));
|
|
11100
11114
|
void (async () => {
|
|
11101
11115
|
try {
|
|
11102
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11116
|
+
const { collectDiagnostics } = await import("../persistent-session-WYNJBCVB.js");
|
|
11103
11117
|
await api.post("/host/heartbeat", {
|
|
11104
11118
|
host_id: hostId,
|
|
11105
11119
|
agent_diagnostics: collectDiagnostics([codeName])
|
|
@@ -11149,7 +11163,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
11149
11163
|
}
|
|
11150
11164
|
try {
|
|
11151
11165
|
const hostId = await getHostId();
|
|
11152
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11166
|
+
const { collectDiagnostics } = await import("../persistent-session-WYNJBCVB.js");
|
|
11153
11167
|
await api.post("/host/heartbeat", {
|
|
11154
11168
|
host_id: hostId,
|
|
11155
11169
|
agent_diagnostics: collectDiagnostics([codeName])
|
|
@@ -11423,6 +11437,7 @@ ${escapeXml(msg.content)}
|
|
|
11423
11437
|
log(`[direct-chat] No in-session delivery for '${agent.codeName}' (msg=${msg.id}) \u2014 leaving pending for ENG-5927 durable replay`);
|
|
11424
11438
|
}
|
|
11425
11439
|
var lastKanbanInjectAt = /* @__PURE__ */ new Map();
|
|
11440
|
+
var kanbanNudgeStateByCode = /* @__PURE__ */ new Map();
|
|
11426
11441
|
var openInjectedRunByCode = /* @__PURE__ */ new Map();
|
|
11427
11442
|
function closeInjectedRunIfOpen(codeName, outcome, outcomeMessage) {
|
|
11428
11443
|
const runId = openInjectedRunByCode.get(codeName);
|
|
@@ -11449,6 +11464,12 @@ var KANBAN_HYBRID_DEBOUNCE_MS = (() => {
|
|
|
11449
11464
|
if (Number.isFinite(parsed) && parsed > 0) return Math.max(parsed, 10) * 1e3;
|
|
11450
11465
|
return 6e4;
|
|
11451
11466
|
})();
|
|
11467
|
+
var KANBAN_HYBRID_FULL_CADENCE_MS = (() => {
|
|
11468
|
+
const raw = process.env["AGT_KANBAN_HYBRID_FULL_CADENCE_SECONDS"];
|
|
11469
|
+
const parsed = raw ? parseInt(raw, 10) : NaN;
|
|
11470
|
+
if (Number.isFinite(parsed) && parsed > 0) return Math.max(parsed * 1e3, KANBAN_HYBRID_DEBOUNCE_MS);
|
|
11471
|
+
return Math.max(5 * 6e4, KANBAN_HYBRID_DEBOUNCE_MS);
|
|
11472
|
+
})();
|
|
11452
11473
|
async function injectKanbanCheckViaDirectChat(codeName, agentId, actionableCount) {
|
|
11453
11474
|
if (isKanbanHybridDryRun()) {
|
|
11454
11475
|
log(
|
|
@@ -11483,7 +11504,15 @@ ${formatRunMarker(run_id)}` : KANBAN_CHECK_COMMAND;
|
|
|
11483
11504
|
);
|
|
11484
11505
|
return true;
|
|
11485
11506
|
}
|
|
11486
|
-
async function maybeInjectKanbanCheck(codeName, agentId, actionableCount) {
|
|
11507
|
+
async function maybeInjectKanbanCheck(codeName, agentId, actionableCount, signature) {
|
|
11508
|
+
if (!shouldNudgeUnchangedBoard(
|
|
11509
|
+
signature,
|
|
11510
|
+
kanbanNudgeStateByCode.get(codeName),
|
|
11511
|
+
Date.now(),
|
|
11512
|
+
KANBAN_HYBRID_FULL_CADENCE_MS
|
|
11513
|
+
)) {
|
|
11514
|
+
return;
|
|
11515
|
+
}
|
|
11487
11516
|
const lastAt = lastKanbanInjectAt.get(codeName) ?? 0;
|
|
11488
11517
|
if (Date.now() - lastAt < KANBAN_HYBRID_DEBOUNCE_MS) {
|
|
11489
11518
|
return;
|
|
@@ -11491,7 +11520,10 @@ async function maybeInjectKanbanCheck(codeName, agentId, actionableCount) {
|
|
|
11491
11520
|
lastKanbanInjectAt.set(codeName, Date.now());
|
|
11492
11521
|
if (hostFlagStore().getBoolean("kanban-doorbell")) {
|
|
11493
11522
|
const ok = await injectKanbanCheckViaDirectChat(codeName, agentId, actionableCount);
|
|
11494
|
-
if (ok)
|
|
11523
|
+
if (ok) {
|
|
11524
|
+
kanbanNudgeStateByCode.set(codeName, { signature, nudgedAt: Date.now() });
|
|
11525
|
+
return;
|
|
11526
|
+
}
|
|
11495
11527
|
log(`[manager-worker] kanban direct-chat enqueue failed for '${codeName}' \u2014 falling back to send-keys`);
|
|
11496
11528
|
}
|
|
11497
11529
|
const tmuxSession = `agt-${codeName}`;
|
|
@@ -11523,6 +11555,7 @@ ${formatRunMarker(run_id)}` : KANBAN_CHECK_COMMAND;
|
|
|
11523
11555
|
}
|
|
11524
11556
|
if (delivered) {
|
|
11525
11557
|
if (run_id) openInjectedRunByCode.set(codeName, run_id);
|
|
11558
|
+
kanbanNudgeStateByCode.set(codeName, { signature, nudgedAt: Date.now() });
|
|
11526
11559
|
log(
|
|
11527
11560
|
`[manager-worker] Injected kanban check for '${codeName}' (${actionableCount} actionable items)${run_id ? ` run_id=${run_id}` : ""}`
|
|
11528
11561
|
);
|
|
@@ -11554,7 +11587,7 @@ async function processClaudePairSessions(agents) {
|
|
|
11554
11587
|
killPairSession,
|
|
11555
11588
|
pairTmuxSession,
|
|
11556
11589
|
finalizeClaudePairOnboarding
|
|
11557
|
-
} = await import("../claude-pair-runtime-
|
|
11590
|
+
} = await import("../claude-pair-runtime-6MRJ6ZJV.js");
|
|
11558
11591
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
11559
11592
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
11560
11593
|
const killed = await killPairSession(pairTmuxSession(pairId));
|