@integrity-labs/agt-cli 0.28.905 → 0.28.907
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 +31 -7
- package/dist/bin/agt.js.map +1 -1
- package/dist/{chunk-YA7AXSKP.js → chunk-GBQRH5RE.js} +4 -4
- package/dist/{chunk-2LV6SJ7W.js → chunk-I2PUWPUR.js} +2 -2
- package/dist/{chunk-Q2GQY64J.js → chunk-N47GH7MJ.js} +1 -1
- package/dist/{chunk-Q2GQY64J.js.map → chunk-N47GH7MJ.js.map} +1 -1
- package/dist/{claude-pair-runtime-UZPPOEIB.js → claude-pair-runtime-A36CKF54.js} +2 -2
- package/dist/lib/manager-worker.js +14 -14
- package/dist/mcp/augmented-admin.js +1 -1
- package/dist/{persistent-session-TPADZX4C.js → persistent-session-ZOEBA7KM.js} +3 -3
- package/dist/{responsiveness-probe-P2L74AKB.js → responsiveness-probe-BNQIJAFF.js} +3 -3
- package/dist/{session-auth-dead-YKD22CHZ.js → session-auth-dead-TAAZTRTD.js} +2 -2
- package/package.json +1 -1
- /package/dist/{chunk-YA7AXSKP.js.map → chunk-GBQRH5RE.js.map} +0 -0
- /package/dist/{chunk-2LV6SJ7W.js.map → chunk-I2PUWPUR.js.map} +0 -0
- /package/dist/{claude-pair-runtime-UZPPOEIB.js.map → claude-pair-runtime-A36CKF54.js.map} +0 -0
- /package/dist/{persistent-session-TPADZX4C.js.map → persistent-session-ZOEBA7KM.js.map} +0 -0
- /package/dist/{responsiveness-probe-P2L74AKB.js.map → responsiveness-probe-BNQIJAFF.js.map} +0 -0
- /package/dist/{session-auth-dead-YKD22CHZ.js.map → session-auth-dead-TAAZTRTD.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-ZOEBA7KM.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-A36CKF54.js.map
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
safeWriteJsonAtomic,
|
|
64
64
|
setConfigHash,
|
|
65
65
|
tripClass
|
|
66
|
-
} from "../chunk-
|
|
66
|
+
} from "../chunk-GBQRH5RE.js";
|
|
67
67
|
import {
|
|
68
68
|
getProjectDir as getProjectDir2,
|
|
69
69
|
getReadyTasks,
|
|
@@ -136,7 +136,7 @@ import {
|
|
|
136
136
|
takeZombieDetection,
|
|
137
137
|
toOpencodeModel,
|
|
138
138
|
writeEgressAllowlist
|
|
139
|
-
} from "../chunk-
|
|
139
|
+
} from "../chunk-I2PUWPUR.js";
|
|
140
140
|
import {
|
|
141
141
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
142
142
|
AnchorSessionClient,
|
|
@@ -231,7 +231,7 @@ import {
|
|
|
231
231
|
subagentActivityAgeSeconds,
|
|
232
232
|
sumTranscriptUsageInWindow,
|
|
233
233
|
transcriptActivityAgeSeconds
|
|
234
|
-
} from "../chunk-
|
|
234
|
+
} from "../chunk-N47GH7MJ.js";
|
|
235
235
|
import {
|
|
236
236
|
reapOrphanChannelMcps
|
|
237
237
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -13053,7 +13053,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
13053
13053
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
13054
13054
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
13055
13055
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
13056
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
13056
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-BNQIJAFF.js");
|
|
13057
13057
|
const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
|
|
13058
13058
|
if (newest === null) return null;
|
|
13059
13059
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -13721,7 +13721,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
13721
13721
|
var lastVersionCheckAt = 0;
|
|
13722
13722
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
13723
13723
|
var lastResponsivenessProbeAt = 0;
|
|
13724
|
-
var agtCliVersion = true ? "0.28.
|
|
13724
|
+
var agtCliVersion = true ? "0.28.907" : "dev";
|
|
13725
13725
|
function resolveBrewPath(execFileSync2) {
|
|
13726
13726
|
try {
|
|
13727
13727
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -15311,7 +15311,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
15311
15311
|
if (codeNames.length === 0) return;
|
|
15312
15312
|
void (async () => {
|
|
15313
15313
|
try {
|
|
15314
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15314
|
+
const { collectDiagnostics } = await import("../persistent-session-ZOEBA7KM.js");
|
|
15315
15315
|
await api.post("/host/heartbeat", {
|
|
15316
15316
|
host_id: hostId,
|
|
15317
15317
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -15453,7 +15453,7 @@ async function pollCycleInner() {
|
|
|
15453
15453
|
}
|
|
15454
15454
|
try {
|
|
15455
15455
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
15456
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15456
|
+
const { collectDiagnostics } = await import("../persistent-session-ZOEBA7KM.js");
|
|
15457
15457
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
15458
15458
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
|
|
15459
15459
|
let tailscaleHostname;
|
|
@@ -15622,7 +15622,7 @@ async function pollCycleInner() {
|
|
|
15622
15622
|
collectPanelessActivityProbes,
|
|
15623
15623
|
getResponsivenessIntervalMs,
|
|
15624
15624
|
occupancyQualificationClassifications
|
|
15625
|
-
} = await import("../responsiveness-probe-
|
|
15625
|
+
} = await import("../responsiveness-probe-BNQIJAFF.js");
|
|
15626
15626
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
15627
15627
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
15628
15628
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -15739,7 +15739,7 @@ async function pollCycleInner() {
|
|
|
15739
15739
|
collectResponsivenessProbes,
|
|
15740
15740
|
livePendingInboundOldestAgeSeconds,
|
|
15741
15741
|
parkPendingInbound
|
|
15742
|
-
} = await import("../responsiveness-probe-
|
|
15742
|
+
} = await import("../responsiveness-probe-BNQIJAFF.js");
|
|
15743
15743
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
15744
15744
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
15745
15745
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -15895,7 +15895,7 @@ async function pollCycleInner() {
|
|
|
15895
15895
|
}
|
|
15896
15896
|
try {
|
|
15897
15897
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
|
|
15898
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
15898
|
+
const { probeSessionAuth } = await import("../session-auth-dead-TAAZTRTD.js");
|
|
15899
15899
|
const observations = [];
|
|
15900
15900
|
const pendingCacheCommits = [];
|
|
15901
15901
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -20153,7 +20153,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20153
20153
|
try {
|
|
20154
20154
|
const freshId = rotateSessionForWedge(codeName);
|
|
20155
20155
|
consecutiveWedgeCycles.delete(codeName);
|
|
20156
|
-
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-
|
|
20156
|
+
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-BNQIJAFF.js");
|
|
20157
20157
|
const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
|
|
20158
20158
|
const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
|
|
20159
20159
|
const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
|
|
@@ -20196,7 +20196,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20196
20196
|
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}`));
|
|
20197
20197
|
void (async () => {
|
|
20198
20198
|
try {
|
|
20199
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20199
|
+
const { collectDiagnostics } = await import("../persistent-session-ZOEBA7KM.js");
|
|
20200
20200
|
await api.post("/host/heartbeat", {
|
|
20201
20201
|
host_id: hostId,
|
|
20202
20202
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -20247,7 +20247,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
20247
20247
|
}
|
|
20248
20248
|
try {
|
|
20249
20249
|
const hostId = await getHostId();
|
|
20250
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20250
|
+
const { collectDiagnostics } = await import("../persistent-session-ZOEBA7KM.js");
|
|
20251
20251
|
await api.post("/host/heartbeat", {
|
|
20252
20252
|
host_id: hostId,
|
|
20253
20253
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -20889,7 +20889,7 @@ async function processClaudePairSessions(agents) {
|
|
|
20889
20889
|
killPairSession,
|
|
20890
20890
|
pairTmuxSession,
|
|
20891
20891
|
finalizeClaudePairOnboarding
|
|
20892
|
-
} = await import("../claude-pair-runtime-
|
|
20892
|
+
} = await import("../claude-pair-runtime-A36CKF54.js");
|
|
20893
20893
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
20894
20894
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
20895
20895
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -21877,7 +21877,7 @@ server.registerTool(
|
|
|
21877
21877
|
);
|
|
21878
21878
|
server.registerTool(
|
|
21879
21879
|
"debug_query_audit_log",
|
|
21880
|
-
{ description: 'Read recent audit events to troubleshoot why/when agents bounced \u2014 primarily restart events. Defaults to the "agent.restart" action: each event returns { id, created_at, action, actor_kind, user_id, agent_id, organization_id, source, reason, detail, code_name, impersonated, impersonated_by_user_id, impersonated_agent_id, impersonation_session_id } \u2014 `user_id` is the identity the action was performed AS, `agent_id` the agent it was performed ON, `impersonated_by_user_id` the operator who was actually driving a user-impersonation session, and `impersonated_agent_id` the agent identity an operator was driving in the agent-impersonation flow (the two flows are distinct and a row carries at most one). `source` is the restart trigger (agent-self-request, channel-command, maintenance-window, stale-mcp, hot-reload-mcp, mcp-presence-reaper, day-rollover, auth-tuple-change, \u2026) and `reason` is the free-text rationale when one was given (e.g. the agent\'s own words for a request_restart). `detail` (ENG-8293) is the structured "what changed?" payload, null for sources that don\'t emit one. For `auth-tuple-change` it is { auth_tuple: { changed[], unchanged[], components[] } } naming WHICH credential/identity component moved and its before/after fingerprint \u2014 the auth tuple is deliberately NOT keyed on the rotating access token, so an auth-tuple-change is always a genuine credential or identity change, and `detail.auth_tuple.changed` is how you tell which one. Comparing `components[].to` across agents answers whether a restart WAVE was one control-plane push (same new value everywhere) or coincidental per-agent rotations. Two modes: (1) pass { agent_id } to scope to ONE agent (fails closed if you\'re not authorized for its org) \u2014 use when a specific agent went quiet. (2) OMIT agent_id for a CROSS-AGENT sweep across every org you\'re authorized for (optionally narrow with { org_id }) \u2014 use to spot fleet-wide restart storms or compare agents. Filter the action with `action` (pass "all" to drop the action filter and read every event type), and bound with { since_hours?, limit? }. Cross-agent results are org-walled in SQL; unauthorized orgs are invisible. ENG-9079 \u2014 IMPERSONATION: `user_id` is the identity an action was performed AS, which is not always who performed it. When `impersonated` is true an Integrity Labs operator was driving: `impersonated_by_user_id` is that operator and `impersonation_session_id` joins every action in the same session. `actor_kind` does NOT distinguish these \u2014 an impersonated user action still reads `user`, so read `impersonated`, not `actor_kind`, to answer "was this really the customer?".
|
|
21880
|
+
{ description: 'Read recent audit events to troubleshoot why/when agents bounced \u2014 primarily restart events. Defaults to the "agent.restart" action: each event returns { id, created_at, action, actor_kind, user_id, agent_id, organization_id, source, reason, detail, code_name, impersonated, impersonated_by_user_id, impersonated_agent_id, impersonation_session_id } \u2014 `user_id` is the identity the action was performed AS, `agent_id` the agent it was performed ON, `impersonated_by_user_id` the operator who was actually driving a user-impersonation session, and `impersonated_agent_id` the agent identity an operator was driving in the agent-impersonation flow (the two flows are distinct and a row carries at most one). `source` is the restart trigger (agent-self-request, channel-command, maintenance-window, stale-mcp, hot-reload-mcp, mcp-presence-reaper, day-rollover, auth-tuple-change, \u2026) and `reason` is the free-text rationale when one was given (e.g. the agent\'s own words for a request_restart). `detail` (ENG-8293) is the structured "what changed?" payload, null for sources that don\'t emit one. For `auth-tuple-change` it is { auth_tuple: { changed[], unchanged[], components[] } } naming WHICH credential/identity component moved and its before/after fingerprint \u2014 the auth tuple is deliberately NOT keyed on the rotating access token, so an auth-tuple-change is always a genuine credential or identity change, and `detail.auth_tuple.changed` is how you tell which one. Comparing `components[].to` across agents answers whether a restart WAVE was one control-plane push (same new value everywhere) or coincidental per-agent rotations. Two modes: (1) pass { agent_id } to scope to ONE agent (fails closed if you\'re not authorized for its org) \u2014 use when a specific agent went quiet. (2) OMIT agent_id for a CROSS-AGENT sweep across every org you\'re authorized for (optionally narrow with { org_id }) \u2014 use to spot fleet-wide restart storms or compare agents. Filter the action with `action` (pass "all" to drop the action filter and read every event type), and bound with { since_hours?, limit? }. Cross-agent results are org-walled in SQL; unauthorized orgs are invisible. ENG-9079 \u2014 IMPERSONATION: `user_id` is the identity an action was performed AS, which is not always who performed it. When `impersonated` is true an Integrity Labs operator was driving: `impersonated_by_user_id` is that operator and `impersonation_session_id` joins every action in the same session. `actor_kind` does NOT distinguish these \u2014 an impersonated user action still reads `user`, so read `impersonated`, not `actor_kind`, to answer "was this really the customer?". One caveat an investigator must hold: rows written before ENG-9018 shipped (17 Aug 06:04Z) carry NULL because the information was never captured, so absence there is not evidence of a genuine customer action. From ENG-9210 (13 Sep) every audit writer REACHABLE during an impersonation session is threaded, so on a row written after that, `impersonated: false` means the action was genuinely not impersonated. Writers that remain unthreaded are all classified `unreachable` \u2014 they cannot execute during an impersonation session at all (host-JWT and agent-MCP paths), so a NULL from them is correct rather than merely unrecorded.', inputSchema: queryAuditLogSchema },
|
|
21881
21881
|
async (args) => {
|
|
21882
21882
|
try {
|
|
21883
21883
|
const result = await client.queryAuditLog(args);
|
|
@@ -62,8 +62,8 @@ import {
|
|
|
62
62
|
writeDirectChatSessionState,
|
|
63
63
|
writeEgressAllowlist,
|
|
64
64
|
writePersistentClaudeWrapper
|
|
65
|
-
} from "./chunk-
|
|
66
|
-
import "./chunk-
|
|
65
|
+
} from "./chunk-I2PUWPUR.js";
|
|
66
|
+
import "./chunk-N47GH7MJ.js";
|
|
67
67
|
import "./chunk-XWVM4KPK.js";
|
|
68
68
|
export {
|
|
69
69
|
CLAUDE_HOST_WIDE,
|
|
@@ -130,4 +130,4 @@ export {
|
|
|
130
130
|
writeEgressAllowlist,
|
|
131
131
|
writePersistentClaudeWrapper
|
|
132
132
|
};
|
|
133
|
-
//# sourceMappingURL=persistent-session-
|
|
133
|
+
//# sourceMappingURL=persistent-session-ZOEBA7KM.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-I2PUWPUR.js";
|
|
4
|
+
import "./chunk-N47GH7MJ.js";
|
|
5
5
|
import "./chunk-XWVM4KPK.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/responsiveness-probe.ts
|
|
@@ -799,4 +799,4 @@ export {
|
|
|
799
799
|
readAndResetSlackReplyBindingClassifications,
|
|
800
800
|
readAndResetSlackReplyTargetClassifications
|
|
801
801
|
};
|
|
802
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
802
|
+
//# sourceMappingURL=responsiveness-probe-BNQIJAFF.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-N47GH7MJ.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/session-auth-dead.ts
|
|
6
6
|
import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
|
|
@@ -203,4 +203,4 @@ export {
|
|
|
203
203
|
decideSessionAuthState,
|
|
204
204
|
probeSessionAuth
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=session-auth-dead-
|
|
206
|
+
//# sourceMappingURL=session-auth-dead-TAAZTRTD.js.map
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|