@integrity-labs/agt-cli 0.24.6 → 0.24.7
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-PNTLQKLO.js → chunk-3A2PMQM4.js} +2 -2
- package/dist/{chunk-ECDTRQLA.js → chunk-53TCAGCM.js} +90 -1
- package/dist/chunk-53TCAGCM.js.map +1 -0
- package/dist/{chunk-VMHT2DM7.js → chunk-FK6BJWEC.js} +2 -2
- package/dist/{claude-pair-runtime-ZQAJOQPN.js → claude-pair-runtime-4F53C7RB.js} +2 -2
- package/dist/lib/manager-worker.js +71 -13
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/slack-channel.js +14 -7
- package/dist/{persistent-session-JUJY46HW.js → persistent-session-XJYOPFIP.js} +3 -3
- package/dist/{responsiveness-probe-XOEC7J5D.js → responsiveness-probe-EWZNGMTX.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-ECDTRQLA.js.map +0 -1
- /package/dist/{chunk-PNTLQKLO.js.map → chunk-3A2PMQM4.js.map} +0 -0
- /package/dist/{chunk-VMHT2DM7.js.map → chunk-FK6BJWEC.js.map} +0 -0
- /package/dist/{claude-pair-runtime-ZQAJOQPN.js.map → claude-pair-runtime-4F53C7RB.js.map} +0 -0
- /package/dist/{persistent-session-JUJY46HW.js.map → persistent-session-XJYOPFIP.js.map} +0 -0
- /package/dist/{responsiveness-probe-XOEC7J5D.js.map → responsiveness-probe-EWZNGMTX.js.map} +0 -0
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
parseDeliveryTarget,
|
|
9
9
|
registerFramework,
|
|
10
10
|
wrapScheduledTaskPrompt
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-53TCAGCM.js";
|
|
12
12
|
|
|
13
13
|
// ../../packages/core/dist/integrations/registry.js
|
|
14
14
|
var INTEGRATION_REGISTRY = [
|
|
@@ -6710,4 +6710,4 @@ export {
|
|
|
6710
6710
|
managerInstallSystemUnitCommand,
|
|
6711
6711
|
managerUninstallSystemUnitCommand
|
|
6712
6712
|
};
|
|
6713
|
-
//# sourceMappingURL=chunk-
|
|
6713
|
+
//# sourceMappingURL=chunk-FK6BJWEC.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-XJYOPFIP.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-4F53C7RB.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
provisionOrientHook,
|
|
13
13
|
provisionStopHook,
|
|
14
14
|
requireHost
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-FK6BJWEC.js";
|
|
16
16
|
import {
|
|
17
17
|
findTaskByTemplate,
|
|
18
18
|
getProjectDir as getProjectDir2,
|
|
@@ -48,13 +48,15 @@ import {
|
|
|
48
48
|
stopAllSessionsAndWait,
|
|
49
49
|
stopPersistentSession,
|
|
50
50
|
takeZombieDetection
|
|
51
|
-
} from "../chunk-
|
|
51
|
+
} from "../chunk-3A2PMQM4.js";
|
|
52
52
|
import {
|
|
53
53
|
KANBAN_CHECK_COMMAND,
|
|
54
54
|
appendDmFooter,
|
|
55
|
+
attributeTranscriptUsageByRun,
|
|
55
56
|
classifyOutput,
|
|
56
57
|
extractFrontmatter,
|
|
57
58
|
formatActorId,
|
|
59
|
+
formatRunMarker,
|
|
58
60
|
getFramework,
|
|
59
61
|
isEmptyTotals,
|
|
60
62
|
isParseError,
|
|
@@ -66,7 +68,7 @@ import {
|
|
|
66
68
|
resolveChannels,
|
|
67
69
|
resolveDmTarget,
|
|
68
70
|
wrapScheduledTaskPrompt
|
|
69
|
-
} from "../chunk-
|
|
71
|
+
} from "../chunk-53TCAGCM.js";
|
|
70
72
|
|
|
71
73
|
// src/lib/manager-worker.ts
|
|
72
74
|
import { createHash as createHash3 } from "crypto";
|
|
@@ -757,6 +759,7 @@ async function maybeReportTokenUsage(args) {
|
|
|
757
759
|
return;
|
|
758
760
|
}
|
|
759
761
|
const pending = [];
|
|
762
|
+
const pendingRuns = [];
|
|
760
763
|
for (const name of dirEntries) {
|
|
761
764
|
if (!name.endsWith(".jsonl")) continue;
|
|
762
765
|
const sessionId = name.slice(0, -".jsonl".length);
|
|
@@ -800,6 +803,18 @@ async function maybeReportTokenUsage(args) {
|
|
|
800
803
|
}
|
|
801
804
|
});
|
|
802
805
|
}
|
|
806
|
+
for (const r of attributeTranscriptUsageByRun(content).perRunModel) {
|
|
807
|
+
if (r.runId === null || isEmptyTotals(r.totals)) continue;
|
|
808
|
+
pendingRuns.push({
|
|
809
|
+
run_id: r.runId,
|
|
810
|
+
model: r.model,
|
|
811
|
+
input_tokens: r.totals.inputTokens,
|
|
812
|
+
output_tokens: r.totals.outputTokens,
|
|
813
|
+
cache_creation_tokens: r.totals.cacheCreationTokens,
|
|
814
|
+
cache_read_tokens: r.totals.cacheReadTokens,
|
|
815
|
+
last_observed_at: parsed.lastObservedAt
|
|
816
|
+
});
|
|
817
|
+
}
|
|
803
818
|
if (![...parsed.byModel.values()].some((t) => !isEmptyTotals(t))) {
|
|
804
819
|
files.set(sessionId, fp);
|
|
805
820
|
}
|
|
@@ -826,6 +841,19 @@ async function maybeReportTokenUsage(args) {
|
|
|
826
841
|
log2(`[token-usage] POST failed for '${codeName}': ${err.message}`);
|
|
827
842
|
}
|
|
828
843
|
}
|
|
844
|
+
for (let i = 0; i < pendingRuns.length; i += MAX_ENTRIES_PER_POST) {
|
|
845
|
+
const batch = pendingRuns.slice(i, i + MAX_ENTRIES_PER_POST);
|
|
846
|
+
try {
|
|
847
|
+
await api2.post("/host/run-token-usage", {
|
|
848
|
+
agent_id: agentId,
|
|
849
|
+
framework: "claude-code",
|
|
850
|
+
source: "transcript_jsonl",
|
|
851
|
+
entries: batch
|
|
852
|
+
});
|
|
853
|
+
} catch (err) {
|
|
854
|
+
log2(`[token-usage] run-usage POST failed for '${codeName}': ${err.message}`);
|
|
855
|
+
}
|
|
856
|
+
}
|
|
829
857
|
if (reported > 0) {
|
|
830
858
|
log2(`[token-usage] reported ${reported} entr${reported === 1 ? "y" : "ies"} for '${codeName}'`);
|
|
831
859
|
}
|
|
@@ -2666,6 +2694,7 @@ function stopPersistentSessionAndForgetMcpBaseline(codeName, breakerReason) {
|
|
|
2666
2694
|
stopPersistentSession(codeName, log);
|
|
2667
2695
|
runningMcpHashes.delete(codeName);
|
|
2668
2696
|
runningMcpServerKeys.delete(codeName);
|
|
2697
|
+
closeInjectedRunIfOpen(codeName, "cancelled", `session stopped (${breakerReason ?? "deprovision"})`);
|
|
2669
2698
|
if (breakerReason) {
|
|
2670
2699
|
recordRestartForBreaker(codeName, breakerReason);
|
|
2671
2700
|
}
|
|
@@ -2809,7 +2838,7 @@ var cachedFrameworkVersion = null;
|
|
|
2809
2838
|
var lastVersionCheckAt = 0;
|
|
2810
2839
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
2811
2840
|
var lastResponsivenessProbeAt = 0;
|
|
2812
|
-
var agtCliVersion = true ? "0.24.
|
|
2841
|
+
var agtCliVersion = true ? "0.24.7" : "dev";
|
|
2813
2842
|
function resolveBrewPath(execFileSync4) {
|
|
2814
2843
|
try {
|
|
2815
2844
|
const out = execFileSync4("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -3768,7 +3797,7 @@ async function pollCycle() {
|
|
|
3768
3797
|
}
|
|
3769
3798
|
try {
|
|
3770
3799
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
3771
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
3800
|
+
const { collectDiagnostics } = await import("../persistent-session-XJYOPFIP.js");
|
|
3772
3801
|
const diagCodeNames = [...persistentSessionAgents];
|
|
3773
3802
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
|
|
3774
3803
|
let tailscaleHostname;
|
|
@@ -3819,7 +3848,7 @@ async function pollCycle() {
|
|
|
3819
3848
|
const {
|
|
3820
3849
|
collectResponsivenessProbes,
|
|
3821
3850
|
getResponsivenessIntervalMs
|
|
3822
|
-
} = await import("../responsiveness-probe-
|
|
3851
|
+
} = await import("../responsiveness-probe-EWZNGMTX.js");
|
|
3823
3852
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
3824
3853
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
3825
3854
|
const probeCodeNames = [...persistentSessionAgents];
|
|
@@ -5095,7 +5124,9 @@ async function processAgent(agent, agentStates) {
|
|
|
5095
5124
|
const actionableCount = hybridBoard.filter(
|
|
5096
5125
|
(i) => HYBRID_ACTIONABLE_STATUSES.has(i.status)
|
|
5097
5126
|
).length;
|
|
5098
|
-
void maybeInjectKanbanCheck(agent.code_name, actionableCount);
|
|
5127
|
+
void maybeInjectKanbanCheck(agent.code_name, agent.agent_id, actionableCount);
|
|
5128
|
+
} else {
|
|
5129
|
+
closeInjectedRunIfOpen(agent.code_name, "completed", "kanban board drained");
|
|
5099
5130
|
}
|
|
5100
5131
|
}
|
|
5101
5132
|
if (agentFw === "claude-code" && sessionMode === "persistent") {
|
|
@@ -6678,13 +6709,23 @@ function hasHybridActionableItems(items) {
|
|
|
6678
6709
|
return items.some((item) => HYBRID_ACTIONABLE_STATUSES.has(item.status));
|
|
6679
6710
|
}
|
|
6680
6711
|
var lastKanbanInjectAt = /* @__PURE__ */ new Map();
|
|
6712
|
+
var openInjectedRunByCode = /* @__PURE__ */ new Map();
|
|
6713
|
+
function isSlashCommand(command) {
|
|
6714
|
+
return command.trimStart().startsWith("/");
|
|
6715
|
+
}
|
|
6716
|
+
function closeInjectedRunIfOpen(codeName, outcome, outcomeMessage) {
|
|
6717
|
+
const runId = openInjectedRunByCode.get(codeName);
|
|
6718
|
+
if (!runId) return;
|
|
6719
|
+
openInjectedRunByCode.delete(codeName);
|
|
6720
|
+
void finishRun(runId, outcome, { outcomeMessage });
|
|
6721
|
+
}
|
|
6681
6722
|
var KANBAN_HYBRID_DEBOUNCE_MS = (() => {
|
|
6682
6723
|
const raw = process.env["AGT_KANBAN_HYBRID_DEBOUNCE_SECONDS"];
|
|
6683
6724
|
const parsed = raw ? parseInt(raw, 10) : NaN;
|
|
6684
6725
|
if (Number.isFinite(parsed) && parsed > 0) return Math.max(parsed, 10) * 1e3;
|
|
6685
6726
|
return 6e4;
|
|
6686
6727
|
})();
|
|
6687
|
-
async function maybeInjectKanbanCheck(codeName, actionableCount) {
|
|
6728
|
+
async function maybeInjectKanbanCheck(codeName, agentId, actionableCount) {
|
|
6688
6729
|
const lastAt = lastKanbanInjectAt.get(codeName) ?? 0;
|
|
6689
6730
|
if (Date.now() - lastAt < KANBAN_HYBRID_DEBOUNCE_MS) {
|
|
6690
6731
|
return;
|
|
@@ -6703,13 +6744,30 @@ async function maybeInjectKanbanCheck(codeName, actionableCount) {
|
|
|
6703
6744
|
lastKanbanInjectAt.delete(codeName);
|
|
6704
6745
|
return;
|
|
6705
6746
|
}
|
|
6706
|
-
|
|
6707
|
-
|
|
6747
|
+
closeInjectedRunIfOpen(codeName, "completed", "kanban inject superseded by next inject");
|
|
6748
|
+
const { run_id } = await startRun({
|
|
6749
|
+
agent_id: agentId,
|
|
6750
|
+
source_type: "kanban",
|
|
6751
|
+
metadata: { injected: "kanban-check", actionable_count: actionableCount }
|
|
6752
|
+
});
|
|
6753
|
+
let delivered;
|
|
6754
|
+
if (isSlashCommand(KANBAN_CHECK_COMMAND)) {
|
|
6755
|
+
delivered = sendToAgent(tmuxSession, KANBAN_CHECK_COMMAND);
|
|
6756
|
+
} else {
|
|
6757
|
+
const content = run_id ? `${KANBAN_CHECK_COMMAND}
|
|
6758
|
+
${formatRunMarker(run_id)}` : KANBAN_CHECK_COMMAND;
|
|
6759
|
+
delivered = await injectMessage(codeName, "system", content, void 0, log);
|
|
6760
|
+
}
|
|
6761
|
+
if (delivered) {
|
|
6762
|
+
if (run_id) openInjectedRunByCode.set(codeName, run_id);
|
|
6708
6763
|
log(
|
|
6709
|
-
`[manager-worker] Injected kanban check for '${codeName}' (${actionableCount} actionable items)`
|
|
6764
|
+
`[manager-worker] Injected kanban check for '${codeName}' (${actionableCount} actionable items)${run_id ? ` run_id=${run_id}` : ""}`
|
|
6710
6765
|
);
|
|
6711
6766
|
} else {
|
|
6712
|
-
|
|
6767
|
+
if (run_id) {
|
|
6768
|
+
void finishRun(run_id, "failed", { outcomeMessage: "kanban inject delivery failed" });
|
|
6769
|
+
}
|
|
6770
|
+
log(`[manager-worker] kanban inject failed for '${codeName}'`);
|
|
6713
6771
|
}
|
|
6714
6772
|
}
|
|
6715
6773
|
function warnOnConflictingKanbanModes() {
|
|
@@ -7561,7 +7619,7 @@ async function processClaudePairSessions(agents) {
|
|
|
7561
7619
|
killPairSession,
|
|
7562
7620
|
pairTmuxSession,
|
|
7563
7621
|
finalizeClaudePairOnboarding
|
|
7564
|
-
} = await import("../claude-pair-runtime-
|
|
7622
|
+
} = await import("../claude-pair-runtime-4F53C7RB.js");
|
|
7565
7623
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
7566
7624
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
7567
7625
|
const killed = await killPairSession(pairTmuxSession(pairId));
|