@integrity-labs/agt-cli 0.28.943 → 0.28.944
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 +5 -5
- package/dist/{chunk-44X625BP.js → chunk-6J4R5MJQ.js} +4 -4
- package/dist/{chunk-HF2GMFMJ.js → chunk-CO3QPWIB.js} +1 -1
- package/dist/{chunk-HF2GMFMJ.js.map → chunk-CO3QPWIB.js.map} +1 -1
- package/dist/{chunk-NB7WT7MA.js → chunk-UHW6YFL2.js} +2 -2
- package/dist/{claude-pair-runtime-7ZXVEOXN.js → claude-pair-runtime-MH55KUOA.js} +2 -2
- package/dist/lib/manager-worker.js +14 -14
- package/dist/mcp/augmented-admin.js +9 -8
- package/dist/{persistent-session-VS57VBUF.js → persistent-session-6OAQAAWH.js} +3 -3
- package/dist/{responsiveness-probe-ZCNVWA6X.js → responsiveness-probe-DKYZBD3Y.js} +3 -3
- package/dist/{session-auth-dead-YDAYAWNL.js → session-auth-dead-IQ3WUFLF.js} +2 -2
- package/package.json +1 -1
- /package/dist/{chunk-44X625BP.js.map → chunk-6J4R5MJQ.js.map} +0 -0
- /package/dist/{chunk-NB7WT7MA.js.map → chunk-UHW6YFL2.js.map} +0 -0
- /package/dist/{claude-pair-runtime-7ZXVEOXN.js.map → claude-pair-runtime-MH55KUOA.js.map} +0 -0
- /package/dist/{persistent-session-VS57VBUF.js.map → persistent-session-6OAQAAWH.js.map} +0 -0
- /package/dist/{responsiveness-probe-ZCNVWA6X.js.map → responsiveness-probe-DKYZBD3Y.js.map} +0 -0
- /package/dist/{session-auth-dead-YDAYAWNL.js.map → session-auth-dead-IQ3WUFLF.js.map} +0 -0
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
rotateDailySession,
|
|
20
20
|
sessionFileExists,
|
|
21
21
|
todayLocalIso
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-CO3QPWIB.js";
|
|
23
23
|
import {
|
|
24
24
|
reapOrphanChannelMcps
|
|
25
25
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -5730,4 +5730,4 @@ export {
|
|
|
5730
5730
|
stopAllSessionsAndWait,
|
|
5731
5731
|
getProjectDir
|
|
5732
5732
|
};
|
|
5733
|
-
//# sourceMappingURL=chunk-
|
|
5733
|
+
//# sourceMappingURL=chunk-UHW6YFL2.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-6OAQAAWH.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-MH55KUOA.js.map
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
safeWriteJsonAtomic,
|
|
64
64
|
setConfigHash,
|
|
65
65
|
tripClass
|
|
66
|
-
} from "../chunk-
|
|
66
|
+
} from "../chunk-6J4R5MJQ.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-UHW6YFL2.js";
|
|
140
140
|
import {
|
|
141
141
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
142
142
|
AnchorSessionClient,
|
|
@@ -232,7 +232,7 @@ import {
|
|
|
232
232
|
subagentActivityAgeSeconds,
|
|
233
233
|
sumTranscriptUsageInWindow,
|
|
234
234
|
transcriptActivityAgeSeconds
|
|
235
|
-
} from "../chunk-
|
|
235
|
+
} from "../chunk-CO3QPWIB.js";
|
|
236
236
|
import {
|
|
237
237
|
reapOrphanChannelMcps
|
|
238
238
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -13257,7 +13257,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
13257
13257
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
13258
13258
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
13259
13259
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
13260
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
13260
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-DKYZBD3Y.js");
|
|
13261
13261
|
const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
|
|
13262
13262
|
if (newest === null) return null;
|
|
13263
13263
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -13942,7 +13942,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
13942
13942
|
var lastVersionCheckAt = 0;
|
|
13943
13943
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
13944
13944
|
var lastResponsivenessProbeAt = 0;
|
|
13945
|
-
var agtCliVersion = true ? "0.28.
|
|
13945
|
+
var agtCliVersion = true ? "0.28.944" : "dev";
|
|
13946
13946
|
function resolveBrewPath(execFileSync2) {
|
|
13947
13947
|
try {
|
|
13948
13948
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -15532,7 +15532,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
15532
15532
|
if (codeNames.length === 0) return;
|
|
15533
15533
|
void (async () => {
|
|
15534
15534
|
try {
|
|
15535
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15535
|
+
const { collectDiagnostics } = await import("../persistent-session-6OAQAAWH.js");
|
|
15536
15536
|
await api.post("/host/heartbeat", {
|
|
15537
15537
|
host_id: hostId,
|
|
15538
15538
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -15674,7 +15674,7 @@ async function pollCycleInner() {
|
|
|
15674
15674
|
}
|
|
15675
15675
|
try {
|
|
15676
15676
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
15677
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15677
|
+
const { collectDiagnostics } = await import("../persistent-session-6OAQAAWH.js");
|
|
15678
15678
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
15679
15679
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
|
|
15680
15680
|
let tailscaleHostname;
|
|
@@ -15849,7 +15849,7 @@ async function pollCycleInner() {
|
|
|
15849
15849
|
collectPanelessActivityProbes,
|
|
15850
15850
|
getResponsivenessIntervalMs,
|
|
15851
15851
|
occupancyQualificationClassifications
|
|
15852
|
-
} = await import("../responsiveness-probe-
|
|
15852
|
+
} = await import("../responsiveness-probe-DKYZBD3Y.js");
|
|
15853
15853
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
15854
15854
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
15855
15855
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -15966,7 +15966,7 @@ async function pollCycleInner() {
|
|
|
15966
15966
|
collectResponsivenessProbes,
|
|
15967
15967
|
livePendingInboundOldestAgeSeconds,
|
|
15968
15968
|
parkPendingInbound
|
|
15969
|
-
} = await import("../responsiveness-probe-
|
|
15969
|
+
} = await import("../responsiveness-probe-DKYZBD3Y.js");
|
|
15970
15970
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
15971
15971
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
15972
15972
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -16122,7 +16122,7 @@ async function pollCycleInner() {
|
|
|
16122
16122
|
}
|
|
16123
16123
|
try {
|
|
16124
16124
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
|
|
16125
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
16125
|
+
const { probeSessionAuth } = await import("../session-auth-dead-IQ3WUFLF.js");
|
|
16126
16126
|
const observations = [];
|
|
16127
16127
|
const pendingCacheCommits = [];
|
|
16128
16128
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -20386,7 +20386,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20386
20386
|
try {
|
|
20387
20387
|
const freshId = rotateSessionForWedge(codeName);
|
|
20388
20388
|
consecutiveWedgeCycles.delete(codeName);
|
|
20389
|
-
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-
|
|
20389
|
+
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-DKYZBD3Y.js");
|
|
20390
20390
|
const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
|
|
20391
20391
|
const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
|
|
20392
20392
|
const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
|
|
@@ -20429,7 +20429,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20429
20429
|
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}`));
|
|
20430
20430
|
void (async () => {
|
|
20431
20431
|
try {
|
|
20432
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20432
|
+
const { collectDiagnostics } = await import("../persistent-session-6OAQAAWH.js");
|
|
20433
20433
|
await api.post("/host/heartbeat", {
|
|
20434
20434
|
host_id: hostId,
|
|
20435
20435
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -20480,7 +20480,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
20480
20480
|
}
|
|
20481
20481
|
try {
|
|
20482
20482
|
const hostId = await getHostId();
|
|
20483
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20483
|
+
const { collectDiagnostics } = await import("../persistent-session-6OAQAAWH.js");
|
|
20484
20484
|
await api.post("/host/heartbeat", {
|
|
20485
20485
|
host_id: hostId,
|
|
20486
20486
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -21122,7 +21122,7 @@ async function processClaudePairSessions(agents) {
|
|
|
21122
21122
|
killPairSession,
|
|
21123
21123
|
pairTmuxSession,
|
|
21124
21124
|
finalizeClaudePairOnboarding
|
|
21125
|
-
} = await import("../claude-pair-runtime-
|
|
21125
|
+
} = await import("../claude-pair-runtime-MH55KUOA.js");
|
|
21126
21126
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
21127
21127
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
21128
21128
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -21564,6 +21564,7 @@ var queryAuditLogSchema = strictObject({
|
|
|
21564
21564
|
since_hours: external_exports.number().int().min(1).max(720).optional().describe("Only events newer than this many hours. Omit for no time bound."),
|
|
21565
21565
|
limit: limitSchema
|
|
21566
21566
|
});
|
|
21567
|
+
var REMEDIAL_WRITE_BOUNDARY = 'REACHABILITY (ENG-10145): the approval path above exists only for an agent whose org you hold WRITE authorization on (Integrity-Labs-internal orgs, or an org a human has issued a write grant for). Against any other customer org this is refused BEFORE any approval card is created (403 when you can read the org, the uniform 404 "target agent not found" when you cannot): no request_id, nobody is paged, and debug_request_access cannot change it (it mints read grants only). Check `org_write_authorized` on debug_get_agent first. When it is false, do not call this tool and do not report a pending approval; escalate to an Integrity Labs operator with the agent id, the action you need and why. When it is null the check itself failed: that is indeterminate, not a refusal and not an authorization. This tool re-checks and may return 500 "failed to verify write authorization"; relay that error as it is, do not infer a 403/404 or claim a pending approval from it, and escalate.';
|
|
21567
21568
|
|
|
21568
21569
|
// package.json
|
|
21569
21570
|
var package_default = {
|
|
@@ -21654,7 +21655,7 @@ server.registerTool(
|
|
|
21654
21655
|
);
|
|
21655
21656
|
server.registerTool(
|
|
21656
21657
|
"debug_get_agent",
|
|
21657
|
-
{ description: 'Fetch a composite diagnostic for ONE agent: the agent projection plus its host (heartbeat verdict, framework, EC2/auth status), its integrations, and recent alerts. The primary "why is this agent unhealthy?" read. Never returns credentials. Pass { agent_id }.\n\nThe payload carries TWO integration reads, and confusing them produces wrong root-cause (ENG-8271):\n \u2022 `effective_integrations` \u2014 the COMPLETE set the agent runs with: agent + team + ORG scope, each entry carrying `scope` ("agent" | "team" | "org") and `source_id`. Read THIS to answer "does this agent have integration X?". `effective_count` equals the manager\'s `Integrations provisioned for \'<code_name>\' (N)`, so the two reconcile; `by_scope`, `inherited_definition_ids`, `scopes_skipped`, `excluded_control_plane_only`, `shadowed_by_more_specific` and `duplicate_merge_keys` attribute any row that did not make the count.\n \u2022 `agent_integrations` \u2014 PER-AGENT rows only, kept for compatibility. Team- and org-scoped installs are ABSENT. Do NOT infer "not installed" from an absence here: an org-level install is genuinely missing from this array while being fully present on the agent. Same warning ships in-payload as `agent_integrations_note
|
|
21658
|
+
{ description: 'Fetch a composite diagnostic for ONE agent: the agent projection plus its host (heartbeat verdict, framework, EC2/auth status), its integrations, and recent alerts. The primary "why is this agent unhealthy?" read. Never returns credentials. Pass { agent_id }.\n\nThe payload carries TWO integration reads, and confusing them produces wrong root-cause (ENG-8271):\n \u2022 `effective_integrations` \u2014 the COMPLETE set the agent runs with: agent + team + ORG scope, each entry carrying `scope` ("agent" | "team" | "org") and `source_id`. Read THIS to answer "does this agent have integration X?". `effective_count` equals the manager\'s `Integrations provisioned for \'<code_name>\' (N)`, so the two reconcile; `by_scope`, `inherited_definition_ids`, `scopes_skipped`, `excluded_control_plane_only`, `shadowed_by_more_specific` and `duplicate_merge_keys` attribute any row that did not make the count.\n \u2022 `agent_integrations` \u2014 PER-AGENT rows only, kept for compatibility. Team- and org-scoped installs are ABSENT. Do NOT infer "not installed" from an absence here: an org-level install is genuinely missing from this array while being fully present on the agent. Same warning ships in-payload as `agent_integrations_note`.\n\n`org_write_authorized` (ENG-10145) says whether this agent\'s org passes the write-authorization check that every HITL-gated remedial tool (debug_resume_agent, debug_restart_agent, request_action, request_config_update, request_ssm_run, debug_replay_dead_letter, request_clear_restart_request) runs first: false means every one of them is refused with a 403 before an approval card exists (404 only if your read access lapsed in between), so escalate to an Integrity Labs operator instead. true means only that this check passes; write mode, token capability and approval routing are still checked at call time. null means the check itself failed: indeterminate, not a refusal, and a remedial call may then return 500 "failed to verify write authorization" - relay that, never report a pending approval, and escalate. `org_write_authorized_note` explains it in-payload.', inputSchema: getAgentSchema },
|
|
21658
21659
|
async (args) => {
|
|
21659
21660
|
try {
|
|
21660
21661
|
const result = await client.getAgent(args.agent_id);
|
|
@@ -21866,7 +21867,7 @@ server.registerTool(
|
|
|
21866
21867
|
);
|
|
21867
21868
|
server.registerTool(
|
|
21868
21869
|
"request_clear_restart_request",
|
|
21869
|
-
{ description: "Request a HITL-gated CLEAR of a STUCK restart request \u2014 cancel a restart the manager never acked (listed by debug_inspect_restart_requests) and resolve its agent_restart_stuck alert. Use it to clear a restart signal wedged open for hours/days/weeks. This is NOT a restart and NOT a host action: it nulls the agent's `restart_requested_at` signal in the central DB and closes the alert/incident; the agent keeps running as-is, no in-flight work is destroyed. Reversible \u2014 request a fresh restart afterwards if one is still needed. A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). Async: returns { request_id, status, write_mode, notification_status }; after approval, poll check_action_status (result_payload carries { cleared_bindings, alert_closed }). Pass { target_agent_id, reason }.", inputSchema: clearRestartRequestSchema },
|
|
21870
|
+
{ description: "Request a HITL-gated CLEAR of a STUCK restart request \u2014 cancel a restart the manager never acked (listed by debug_inspect_restart_requests) and resolve its agent_restart_stuck alert. Use it to clear a restart signal wedged open for hours/days/weeks. This is NOT a restart and NOT a host action: it nulls the agent's `restart_requested_at` signal in the central DB and closes the alert/incident; the agent keeps running as-is, no in-flight work is destroyed. Reversible \u2014 request a fresh restart afterwards if one is still needed. A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). Async: returns { request_id, status, write_mode, notification_status }; after approval, poll check_action_status (result_payload carries { cleared_bindings, alert_closed }). Pass { target_agent_id, reason }. " + REMEDIAL_WRITE_BOUNDARY, inputSchema: clearRestartRequestSchema },
|
|
21870
21871
|
async (args) => {
|
|
21871
21872
|
try {
|
|
21872
21873
|
const result = await client.requestClearRestartRequest({
|
|
@@ -21908,7 +21909,7 @@ server.registerTool(
|
|
|
21908
21909
|
);
|
|
21909
21910
|
server.registerTool(
|
|
21910
21911
|
"request_action",
|
|
21911
|
-
{ description: `Request a HITL-gated remedial action on a customer agent: "restart" (bounce the agent \u2014 reversible, backlog replays) or "clear_pending_inbound" (move stuck pending-inbound markers aside \u2014 drops queued inbound messages, NOT reprocessed). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage; in shadow mode the approval runs but nothing executes. Returns { request_id, status, write_mode, notification_status }.
|
|
21912
|
+
{ description: `Request a HITL-gated remedial action on a customer agent: "restart" (bounce the agent \u2014 reversible, backlog replays) or "clear_pending_inbound" (move stuck pending-inbound markers aside \u2014 drops queued inbound messages, NOT reprocessed). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage; in shadow mode the approval runs but nothing executes. Returns { request_id, status, write_mode, notification_status }. Only when the response is status "pending" with a request_id, surface a brief, jargon-free note to the user (e.g. "I've asked an admin to approve restarting that agent"); on a refusal (403/404/409/503) or any other result nothing was filed, so relay that outcome instead and never say an approval was requested. Pass { action, target_agent_id, reason }. ` + REMEDIAL_WRITE_BOUNDARY, inputSchema: requestActionSchema },
|
|
21912
21913
|
async (args) => {
|
|
21913
21914
|
try {
|
|
21914
21915
|
const result = await client.requestAction(args.action, {
|
|
@@ -21923,7 +21924,7 @@ server.registerTool(
|
|
|
21923
21924
|
);
|
|
21924
21925
|
server.registerTool(
|
|
21925
21926
|
"debug_restart_agent",
|
|
21926
|
-
{ description: `Request a HITL-gated RESTART of a customer agent \u2014 bounce its session so the manager respawns it on the next poll (reversible; the inbound backlog replays). Use this to recover a wedged agent or to make it pick up a newly-bound integration/config change. NOT for a PAUSED agent: a paused agent's manager does not respawn it, so a restart against one does nothing at all - use \`debug_resume_agent\`, which is the only tool that ends a pause (ENG-9343). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage; in shadow mode the approval runs but nothing executes. Org-agnostic: keyed on the agent's host assignment, so it works cross-org without an active-org dependency. This is the same path as request_action({ action: "restart" }), exposed as a dedicated tool for discoverability. Returns { request_id, status, write_mode, notification_status }.
|
|
21927
|
+
{ description: `Request a HITL-gated RESTART of a customer agent \u2014 bounce its session so the manager respawns it on the next poll (reversible; the inbound backlog replays). Use this to recover a wedged agent or to make it pick up a newly-bound integration/config change. NOT for a PAUSED agent: a paused agent's manager does not respawn it, so a restart against one does nothing at all - use \`debug_resume_agent\`, which is the only tool that ends a pause (ENG-9343). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage; in shadow mode the approval runs but nothing executes. Org-agnostic: keyed on the agent's host assignment, so it works cross-org without an active-org dependency. This is the same path as request_action({ action: "restart" }), exposed as a dedicated tool for discoverability. Returns { request_id, status, write_mode, notification_status }. Only when the response is status "pending" with a request_id, surface a brief, jargon-free note to the user (e.g. "I've asked an admin to approve restarting that agent"); on a refusal (403/404/409/503) or any other result nothing was filed, so relay that outcome instead and never say an approval was requested. Pass { target_agent_id, reason }. ` + REMEDIAL_WRITE_BOUNDARY, inputSchema: restartAgentSchema },
|
|
21927
21928
|
async (args) => {
|
|
21928
21929
|
try {
|
|
21929
21930
|
const result = await client.requestAction("restart", {
|
|
@@ -21938,7 +21939,7 @@ server.registerTool(
|
|
|
21938
21939
|
);
|
|
21939
21940
|
server.registerTool(
|
|
21940
21941
|
"debug_resume_agent",
|
|
21941
|
-
{ description: 'Request a HITL-gated END to a customer agent\'s CIRCUIT-BREAKER pause - flip it back to active so its manager respawns it, close the agent_paused alert, and clear any pending restart request. This is the ONLY tool that ends a pause; debug_restart_agent does NOT, because a paused agent\'s manager never respawns it, so a restart against a paused agent is a no-op. SCOPE: it touches ONLY pauses whose reason is `circuit_breaker`. A "manual" pause (a person clicked Pause) and an "hourly_cost_exceeded" pause (a budget guard) are refused with a 409 - do not retry those, escalate to a human. BEFORE YOU CALL IT: the approval card names the breaker\'s trip reason and count and flags when that condition still appears to hold (e.g. other agents on the same host tripping on the same driver), so write a `reason` that addresses the driver, not just the downtime - the approver is deciding "resume DESPITE day-rollover=3", not "resume". Resuming while the driver is still live just re-trips the breaker and the agent flaps instead of failing cleanly. A HUMAN must approve in Slack, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). Returns { request_id, status, write_mode, trip_driver, trip_count, precondition_verdict, precondition_signals, notification_status }; after approval, poll check_action_status (result_payload carries { resumed, alert_closed, cleared_restart_bindings } or { resumed: false, not_eligible }). Pass { target_agent_id, reason }.', inputSchema: resumeAgentSchema },
|
|
21942
|
+
{ description: 'Request a HITL-gated END to a customer agent\'s CIRCUIT-BREAKER pause - flip it back to active so its manager respawns it, close the agent_paused alert, and clear any pending restart request. This is the ONLY tool that ends a pause; debug_restart_agent does NOT, because a paused agent\'s manager never respawns it, so a restart against a paused agent is a no-op. SCOPE: it touches ONLY pauses whose reason is `circuit_breaker`. A "manual" pause (a person clicked Pause) and an "hourly_cost_exceeded" pause (a budget guard) are refused with a 409 - do not retry those, escalate to a human. BEFORE YOU CALL IT: the approval card names the breaker\'s trip reason and count and flags when that condition still appears to hold (e.g. other agents on the same host tripping on the same driver), so write a `reason` that addresses the driver, not just the downtime - the approver is deciding "resume DESPITE day-rollover=3", not "resume". Resuming while the driver is still live just re-trips the breaker and the agent flaps instead of failing cleanly. A HUMAN must approve in Slack, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). Returns { request_id, status, write_mode, trip_driver, trip_count, precondition_verdict, precondition_signals, notification_status }; after approval, poll check_action_status (result_payload carries { resumed, alert_closed, cleared_restart_bindings } or { resumed: false, not_eligible }). Pass { target_agent_id, reason }. ' + REMEDIAL_WRITE_BOUNDARY, inputSchema: resumeAgentSchema },
|
|
21942
21943
|
async (args) => {
|
|
21943
21944
|
try {
|
|
21944
21945
|
const result = await client.requestResumeAgent({
|
|
@@ -21953,7 +21954,7 @@ server.registerTool(
|
|
|
21953
21954
|
);
|
|
21954
21955
|
server.registerTool(
|
|
21955
21956
|
"request_config_update",
|
|
21956
|
-
{ description: "Request a HITL-gated change to a customer agent's model config (primary/secondary/tertiary_model). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). The change is reversible and applies at the agent's NEXT session launch after /host/refresh \u2014 it does not restart the agent. The new value is validated against the agent before approval is requested: Claude Code (subscription) agents take a family alias (fable/opus/opus[fast]/sonnet/haiku); routed agents take a full stored model id (e.g. openrouter/anthropic/claude-opus-4-6). Use this to fix a misconfigured model (e.g. an agent wedged on a model its auth can't access). Returns { request_id, status, write_mode, notification_status }. Pass { target_agent_id, field, new_value, reason }.", inputSchema: requestConfigUpdateSchema },
|
|
21957
|
+
{ description: "Request a HITL-gated change to a customer agent's model config (primary/secondary/tertiary_model). A HUMAN must approve in Slack before anything happens, and only if writes are armed for this stage (shadow mode runs the approval but executes nothing). The change is reversible and applies at the agent's NEXT session launch after /host/refresh \u2014 it does not restart the agent. The new value is validated against the agent before approval is requested: Claude Code (subscription) agents take a family alias (fable/opus/opus[fast]/sonnet/haiku); routed agents take a full stored model id (e.g. openrouter/anthropic/claude-opus-4-6). Use this to fix a misconfigured model (e.g. an agent wedged on a model its auth can't access). Returns { request_id, status, write_mode, notification_status }. Pass { target_agent_id, field, new_value, reason }. " + REMEDIAL_WRITE_BOUNDARY, inputSchema: requestConfigUpdateSchema },
|
|
21957
21958
|
async (args) => {
|
|
21958
21959
|
try {
|
|
21959
21960
|
const result = await client.requestConfigUpdate({
|
|
@@ -21970,7 +21971,7 @@ server.registerTool(
|
|
|
21970
21971
|
);
|
|
21971
21972
|
server.registerTool(
|
|
21972
21973
|
"request_ssm_run",
|
|
21973
|
-
{ description: "Request a HITL-gated, ALLOWLISTED read-only DIAGNOSTIC command on a customer agent's host over SSM \u2014 the escape hatch for host/process/service facts the typed read tools (debug_get_agent, debug_tail_logs, debug_host_versions) don't cover. A HUMAN must approve the EXACT command in Slack before it runs, and only if writes are armed (shadow mode runs the approval but executes nothing). This is NOT a shell: `command` is a CLOSED enum \u2014 host_health (uptime/df/free), manager_status (systemctl status agt-manager), manager_journal (journalctl -n 200), process_list (ps comm-only, no argv/env), agent_dir (ls -la ~/.augmented/<code_name>/, names only). No free-form commands, no file-content reads (use debug_tail_logs for log contents). Async: returns { request_id, status, write_mode, command_key, resolved_command, notification_status }; after approval, poll check_action_status to read the command OUTPUT in result_payload. Pass { target_agent_id, command, reason }.", inputSchema: requestSsmRunSchema },
|
|
21974
|
+
{ description: "Request a HITL-gated, ALLOWLISTED read-only DIAGNOSTIC command on a customer agent's host over SSM \u2014 the escape hatch for host/process/service facts the typed read tools (debug_get_agent, debug_tail_logs, debug_host_versions) don't cover. A HUMAN must approve the EXACT command in Slack before it runs, and only if writes are armed (shadow mode runs the approval but executes nothing). This is NOT a shell: `command` is a CLOSED enum \u2014 host_health (uptime/df/free), manager_status (systemctl status agt-manager), manager_journal (journalctl -n 200), process_list (ps comm-only, no argv/env), agent_dir (ls -la ~/.augmented/<code_name>/, names only). No free-form commands, no file-content reads (use debug_tail_logs for log contents). Async: returns { request_id, status, write_mode, command_key, resolved_command, notification_status }; after approval, poll check_action_status to read the command OUTPUT in result_payload. Pass { target_agent_id, command, reason }. " + REMEDIAL_WRITE_BOUNDARY, inputSchema: requestSsmRunSchema },
|
|
21974
21975
|
async (args) => {
|
|
21975
21976
|
try {
|
|
21976
21977
|
const result = await client.requestSsmRun({
|
|
@@ -21986,7 +21987,7 @@ server.registerTool(
|
|
|
21986
21987
|
);
|
|
21987
21988
|
server.registerTool(
|
|
21988
21989
|
"debug_replay_dead_letter",
|
|
21989
|
-
{ description: "Request a HITL-gated REPLAY of ONE dead-lettered inbound \u2014 re-inject a customer message that was parked on the host (listed by debug_inspect_dead_letters) back into the agent's live inbound so it is reprocessed. This is the inverse of clear_pending_inbound: use it to recover a message a wedged agent missed. A HUMAN must approve in Slack before anything happens, and only if writes are armed (shadow mode runs the approval but executes nothing). The marker is matched on the host by the exact (channel, store, marker_name) you pass \u2014 copy them verbatim from the inspect result \u2014 so a stale or wrong selector safely no-ops (`replayed:false, reason:not_found`) rather than moving the wrong message. Async: returns { request_id, status, write_mode, notification_status }; after approval, poll check_action_status (result_payload carries { replayed, moved_to }). Pass { target_agent_id, channel, store, marker_name, reason }.", inputSchema: replayDeadLetterSchema },
|
|
21990
|
+
{ description: "Request a HITL-gated REPLAY of ONE dead-lettered inbound \u2014 re-inject a customer message that was parked on the host (listed by debug_inspect_dead_letters) back into the agent's live inbound so it is reprocessed. This is the inverse of clear_pending_inbound: use it to recover a message a wedged agent missed. A HUMAN must approve in Slack before anything happens, and only if writes are armed (shadow mode runs the approval but executes nothing). The marker is matched on the host by the exact (channel, store, marker_name) you pass \u2014 copy them verbatim from the inspect result \u2014 so a stale or wrong selector safely no-ops (`replayed:false, reason:not_found`) rather than moving the wrong message. Async: returns { request_id, status, write_mode, notification_status }; after approval, poll check_action_status (result_payload carries { replayed, moved_to }). Pass { target_agent_id, channel, store, marker_name, reason }. " + REMEDIAL_WRITE_BOUNDARY, inputSchema: replayDeadLetterSchema },
|
|
21990
21991
|
async (args) => {
|
|
21991
21992
|
try {
|
|
21992
21993
|
const result = await client.requestReplayDeadLetter({
|
|
@@ -62,8 +62,8 @@ import {
|
|
|
62
62
|
writeDirectChatSessionState,
|
|
63
63
|
writeEgressAllowlist,
|
|
64
64
|
writePersistentClaudeWrapper
|
|
65
|
-
} from "./chunk-
|
|
66
|
-
import "./chunk-
|
|
65
|
+
} from "./chunk-UHW6YFL2.js";
|
|
66
|
+
import "./chunk-CO3QPWIB.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-6OAQAAWH.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-UHW6YFL2.js";
|
|
4
|
+
import "./chunk-CO3QPWIB.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-DKYZBD3Y.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CO3QPWIB.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-IQ3WUFLF.js.map
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|