@integrity-labs/agt-cli 0.28.63 → 0.28.65
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-AKOF4VV5.js → chunk-4P7HUXWI.js} +2 -2
- package/dist/{chunk-5H3EMCNV.js → chunk-PZ3TJOW4.js} +3 -3
- package/dist/{chunk-7F2K3RRD.js → chunk-XKAJW4EX.js} +1 -1
- package/dist/{chunk-7F2K3RRD.js.map → chunk-XKAJW4EX.js.map} +1 -1
- package/dist/{claude-pair-runtime-QSRMTD7I.js → claude-pair-runtime-SPP3CUBA.js} +2 -2
- package/dist/lib/manager-worker.js +8 -8
- package/dist/mcp/augmented-admin.js +34 -0
- package/dist/mcp/index.js +164 -0
- package/dist/{persistent-session-5PEPYSMG.js → persistent-session-WJBIN6WM.js} +3 -3
- package/dist/{responsiveness-probe-HG23JDG2.js → responsiveness-probe-XVWLBSSH.js} +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-AKOF4VV5.js.map → chunk-4P7HUXWI.js.map} +0 -0
- /package/dist/{chunk-5H3EMCNV.js.map → chunk-PZ3TJOW4.js.map} +0 -0
- /package/dist/{claude-pair-runtime-QSRMTD7I.js.map → claude-pair-runtime-SPP3CUBA.js.map} +0 -0
- /package/dist/{persistent-session-5PEPYSMG.js.map → persistent-session-WJBIN6WM.js.map} +0 -0
- /package/dist/{responsiveness-probe-HG23JDG2.js.map → responsiveness-probe-XVWLBSSH.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-WJBIN6WM.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-SPP3CUBA.js.map
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
requireHost,
|
|
28
28
|
safeWriteJsonAtomic,
|
|
29
29
|
setConfigHash
|
|
30
|
-
} from "../chunk-
|
|
30
|
+
} from "../chunk-PZ3TJOW4.js";
|
|
31
31
|
import {
|
|
32
32
|
getProjectDir as getProjectDir2,
|
|
33
33
|
getReadyTasks,
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
takeWatchdogGiveUpCount,
|
|
66
66
|
takeZombieDetection,
|
|
67
67
|
transcriptActivityAgeSeconds
|
|
68
|
-
} from "../chunk-
|
|
68
|
+
} from "../chunk-4P7HUXWI.js";
|
|
69
69
|
import {
|
|
70
70
|
FLAGS_SCHEMA_VERSION,
|
|
71
71
|
FLAG_REGISTRY,
|
|
@@ -96,7 +96,7 @@ import {
|
|
|
96
96
|
resolveDmTarget,
|
|
97
97
|
sumTranscriptUsageInWindow,
|
|
98
98
|
wrapScheduledTaskPrompt
|
|
99
|
-
} from "../chunk-
|
|
99
|
+
} from "../chunk-XKAJW4EX.js";
|
|
100
100
|
import {
|
|
101
101
|
parsePsRows,
|
|
102
102
|
reapOrphanChannelMcps
|
|
@@ -6734,7 +6734,7 @@ var cachedMaintenanceWindow = null;
|
|
|
6734
6734
|
var lastVersionCheckAt = 0;
|
|
6735
6735
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
6736
6736
|
var lastResponsivenessProbeAt = 0;
|
|
6737
|
-
var agtCliVersion = true ? "0.28.
|
|
6737
|
+
var agtCliVersion = true ? "0.28.65" : "dev";
|
|
6738
6738
|
function resolveBrewPath(execFileSync4) {
|
|
6739
6739
|
try {
|
|
6740
6740
|
const out = execFileSync4("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -7842,7 +7842,7 @@ async function pollCycle() {
|
|
|
7842
7842
|
}
|
|
7843
7843
|
try {
|
|
7844
7844
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
7845
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
7845
|
+
const { collectDiagnostics } = await import("../persistent-session-WJBIN6WM.js");
|
|
7846
7846
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
7847
7847
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
|
|
7848
7848
|
let tailscaleHostname;
|
|
@@ -7943,7 +7943,7 @@ async function pollCycle() {
|
|
|
7943
7943
|
const {
|
|
7944
7944
|
collectResponsivenessProbes,
|
|
7945
7945
|
getResponsivenessIntervalMs
|
|
7946
|
-
} = await import("../responsiveness-probe-
|
|
7946
|
+
} = await import("../responsiveness-probe-XVWLBSSH.js");
|
|
7947
7947
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
7948
7948
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
7949
7949
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -7975,7 +7975,7 @@ async function pollCycle() {
|
|
|
7975
7975
|
collectResponsivenessProbes,
|
|
7976
7976
|
livePendingInboundOldestAgeSeconds,
|
|
7977
7977
|
parkPendingInbound
|
|
7978
|
-
} = await import("../responsiveness-probe-
|
|
7978
|
+
} = await import("../responsiveness-probe-XVWLBSSH.js");
|
|
7979
7979
|
const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
|
|
7980
7980
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
7981
7981
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -11409,7 +11409,7 @@ async function processClaudePairSessions(agents) {
|
|
|
11409
11409
|
killPairSession,
|
|
11410
11410
|
pairTmuxSession,
|
|
11411
11411
|
finalizeClaudePairOnboarding
|
|
11412
|
-
} = await import("../claude-pair-runtime-
|
|
11412
|
+
} = await import("../claude-pair-runtime-SPP3CUBA.js");
|
|
11413
11413
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
11414
11414
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
11415
11415
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -21107,6 +21107,10 @@ var AdminDebugClient = class _AdminDebugClient {
|
|
|
21107
21107
|
tailLogs(args) {
|
|
21108
21108
|
return this.get("/admin/debug/tail-logs", _AdminDebugClient.cleanQuery(args));
|
|
21109
21109
|
}
|
|
21110
|
+
/** Time-windowed read of ONE allowlisted host log across rotated files (ENG-6515). */
|
|
21111
|
+
queryLogs(args) {
|
|
21112
|
+
return this.get("/admin/debug/query-logs", _AdminDebugClient.cleanQuery(args));
|
|
21113
|
+
}
|
|
21110
21114
|
probeIntegration(args) {
|
|
21111
21115
|
return this.get("/admin/debug/probe-integration", _AdminDebugClient.cleanQuery(args));
|
|
21112
21116
|
}
|
|
@@ -21279,6 +21283,23 @@ var tailLogsSchema = external_exports.object({
|
|
|
21279
21283
|
"Trailing lines to return (default 200, max 2000). Output is also byte-capped (~20 KB, newest kept) to stay within SSM limits \u2014 `truncated` flags when it clipped."
|
|
21280
21284
|
)
|
|
21281
21285
|
});
|
|
21286
|
+
var queryLogsSchema = external_exports.object({
|
|
21287
|
+
agent_id: external_exports.string().min(1).max(64).describe(
|
|
21288
|
+
"UUID of the agent whose host log to query. Fails closed (uniform not-found) if you are not authorized for its org."
|
|
21289
|
+
),
|
|
21290
|
+
log: external_exports.enum(["manager", "pane", "slack-stderr", "telegram-stderr", "manager-state"]).optional().describe(
|
|
21291
|
+
"Which host log to read (default manager). Same allowlist as debug_tail_logs. Time filtering only applies to `manager` (its lines carry an ISO8601 prefix); the others return their byte-capped tail unfiltered (`time_filtered:false`)."
|
|
21292
|
+
),
|
|
21293
|
+
since: external_exports.string().min(1).max(40).optional().describe(
|
|
21294
|
+
"Lower bound (ISO8601 UTC, e.g. `2026-06-14T16:00:00Z`). Omit for unbounded. Only meaningful for `manager`."
|
|
21295
|
+
),
|
|
21296
|
+
until: external_exports.string().min(1).max(40).optional().describe(
|
|
21297
|
+
"Upper bound (ISO8601 UTC, e.g. `2026-06-14T18:00:00Z`). Omit for unbounded (up to now). Only meaningful for `manager`."
|
|
21298
|
+
),
|
|
21299
|
+
lines: external_exports.number().int().min(1).max(5e3).optional().describe(
|
|
21300
|
+
"Max lines to return (default 1000, max 5000; newest kept). Output is also byte-capped (~20 KB, newest kept) to stay within SSM limits \u2014 `truncated` flags when it clipped. Narrow the window if truncated."
|
|
21301
|
+
)
|
|
21302
|
+
});
|
|
21282
21303
|
var probeIntegrationSchema = external_exports.object({
|
|
21283
21304
|
agent_id: external_exports.string().min(1).max(64).describe(
|
|
21284
21305
|
"UUID of the agent whose integration to probe. Fails closed (uniform not-found) if you are not authorized for its org."
|
|
@@ -21525,6 +21546,19 @@ server.tool(
|
|
|
21525
21546
|
}
|
|
21526
21547
|
}
|
|
21527
21548
|
);
|
|
21549
|
+
server.tool(
|
|
21550
|
+
"debug_query_logs",
|
|
21551
|
+
'Read an agent\'s HOST logs OVER A TIME WINDOW, spanning rotated files \u2014 the historical counterpart to debug_tail_logs. Where tail only shows the live tail of the current file (minutes, and gone once it rotates), this reads the active log AND its logrotate siblings (manager.log.1, manager.log.2.gz, \u2026 14 kept) and filters lines to [since, until]. This is the read path for "did it restart at 4pm YESTERDAY?" \u2014 use it when the answer is older than the live tail or spans a rotation. Returns { agent_id, code_name, host, log, since, until, time_filtered, content, log_present, lines_requested, truncated, ssm_status }. Time filtering applies to `manager` (its lines carry an ISO8601 prefix); `pane`/`slack-stderr`/`telegram-stderr`/`manager-state` return their byte-capped tail unfiltered (time_filtered:false). Only operational logs are reachable \u2014 secret files (.mcp.json, .env.integrations) are NOT. Pass { agent_id, log?, since?, until?, lines? } (since/until ISO8601 UTC e.g. 2026-06-14T16:00:00Z, default unbounded; lines default 1000, max 5000; output ~20 KB-capped, newest kept \u2014 narrow the window if truncated). Fails closed for an unauthorized org; every call is audited as a cross-org host access.',
|
|
21552
|
+
queryLogsSchema.shape,
|
|
21553
|
+
async (args) => {
|
|
21554
|
+
try {
|
|
21555
|
+
const result = await client.queryLogs(args);
|
|
21556
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
21557
|
+
} catch (err) {
|
|
21558
|
+
return { content: [{ type: "text", text: formatError2(err) }], isError: true };
|
|
21559
|
+
}
|
|
21560
|
+
}
|
|
21561
|
+
);
|
|
21528
21562
|
server.tool(
|
|
21529
21563
|
"debug_probe_integration",
|
|
21530
21564
|
"Force a FRESH host-side connectivity probe for ONE of an agent's integrations and return the LIVE verdict \u2014 use when a user reports an integration \"isn't working\" but the console shows it connected, or to confirm a fix landed. Unlike the cached status the dashboard shows, this SSH-less SSM-invokes the agent's host to run the probe against its actual wired `.mcp.json` + credentials, so it can't disagree with reality. Returns { agent_id, code_name, slug, host, verdict, message, probed_at, ssm_status }. `verdict` is the live result: `ok` | `degraded` | `transient_error` (retryable) | `down` | `not_probeable` (no probe wired for this kind) \u2014 or a central degrade: `unreachable` (agent has no host), `not_installed` (integration not on this agent), `host_cli_too_old` (the host predates the probe \u2014 update its agt-cli), `probe_error`. Pass { agent_id, slug } where slug is the integration's definition code_name (e.g. `gmail`, `slack`, `here-now`). Fails closed for an unauthorized org; every call is audited as a cross-org host access.",
|
package/dist/mcp/index.js
CHANGED
|
@@ -21078,6 +21078,129 @@ function writeAgentRestartFlag(codeName, reason, nowMs) {
|
|
|
21078
21078
|
return path;
|
|
21079
21079
|
}
|
|
21080
21080
|
|
|
21081
|
+
// src/approval-tools.ts
|
|
21082
|
+
function statusToOutcome(status) {
|
|
21083
|
+
switch (status) {
|
|
21084
|
+
case "active":
|
|
21085
|
+
case "auto_approve":
|
|
21086
|
+
return "approved";
|
|
21087
|
+
case "denied":
|
|
21088
|
+
case "hard_deny":
|
|
21089
|
+
return "denied";
|
|
21090
|
+
case "expired":
|
|
21091
|
+
return "timed_out";
|
|
21092
|
+
case "cancelled":
|
|
21093
|
+
case "revoked":
|
|
21094
|
+
return "cancelled";
|
|
21095
|
+
case "pending":
|
|
21096
|
+
return "pending";
|
|
21097
|
+
default:
|
|
21098
|
+
return "error";
|
|
21099
|
+
}
|
|
21100
|
+
}
|
|
21101
|
+
function render(result) {
|
|
21102
|
+
const lines = [result.note ?? "", JSON.stringify({
|
|
21103
|
+
request_id: result.request_id,
|
|
21104
|
+
outcome: result.outcome,
|
|
21105
|
+
...result.reason ? { reason: result.reason } : {},
|
|
21106
|
+
...result.result_payload != null ? { result_payload: result.result_payload } : {},
|
|
21107
|
+
...result.expires_at ? { expires_at: result.expires_at } : {}
|
|
21108
|
+
})].filter(Boolean);
|
|
21109
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
21110
|
+
}
|
|
21111
|
+
function registerApprovalTools(server2, deps) {
|
|
21112
|
+
const { agentId, apiPost: apiPost2, apiGet: apiGet2 } = deps;
|
|
21113
|
+
server2.tool(
|
|
21114
|
+
"request_approval",
|
|
21115
|
+
"Ask a human (your Manager) to approve an action before you take it, then END YOUR TURN \u2014 this does NOT block your session. You get back a request_id; later call check_approval(request_id) to see the verdict (it survives a restart \u2014 re-attach by the same id). NOTIFY-ONLY: on approval the platform does nothing \u2014 YOU perform the action. Use for actions outside your standing authority where a person must sign off.",
|
|
21116
|
+
{
|
|
21117
|
+
summary: external_exports.string().min(1).max(280).describe('One line describing the action you want approved (shown to the approver). E.g. "Send the Q3 report to the external auditor".'),
|
|
21118
|
+
reason: external_exports.string().min(1).max(280).describe("Why you need it / context for the approver. Keep it specific."),
|
|
21119
|
+
idempotency_key: external_exports.string().min(1).max(200).describe("A stable exactly-once key YOU choose for this ask (e.g. a task id + action). Retrying with the same key + same details re-attaches to the same request instead of filing a duplicate."),
|
|
21120
|
+
detail: external_exports.record(external_exports.unknown()).optional().describe("Optional structured context for the approver (display + audit only; never executed)."),
|
|
21121
|
+
ttl_seconds: external_exports.number().int().optional().describe("How long the request stays open before it times out (default 3600; clamped to [60, 86400]).")
|
|
21122
|
+
},
|
|
21123
|
+
async (params) => {
|
|
21124
|
+
try {
|
|
21125
|
+
const resp = await apiPost2("/approvals", {
|
|
21126
|
+
agent_id: agentId,
|
|
21127
|
+
summary: params.summary,
|
|
21128
|
+
reason: params.reason,
|
|
21129
|
+
idempotency_key: params.idempotency_key,
|
|
21130
|
+
detail: params.detail,
|
|
21131
|
+
ttl_seconds: params.ttl_seconds
|
|
21132
|
+
});
|
|
21133
|
+
const outcome = resp.outcome ?? statusToOutcome(resp.status);
|
|
21134
|
+
const note = resp.duplicate ? `An open request for this idempotency_key already exists \u2014 re-attached to it (request_id ${resp.request_id}). Poll it with check_approval.` : resp.notification_status === "failed" ? `Approval filed (request_id ${resp.request_id}) but the Manager notification failed (${resp.notification_failure_reason ?? "unknown"}) \u2014 tell your operator. Poll with check_approval.` : `Approval requested (request_id ${resp.request_id}). Your Manager was notified. End your turn; poll with check_approval later.`;
|
|
21135
|
+
return render({ request_id: resp.request_id, outcome, expires_at: resp.expires_at ?? null, note });
|
|
21136
|
+
} catch (err) {
|
|
21137
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
21138
|
+
return {
|
|
21139
|
+
content: [
|
|
21140
|
+
{
|
|
21141
|
+
type: "text",
|
|
21142
|
+
text: `Could not file the approval request: ${msg}
|
|
21143
|
+
` + JSON.stringify({ request_id: "", outcome: "error", reason: msg })
|
|
21144
|
+
}
|
|
21145
|
+
],
|
|
21146
|
+
isError: true
|
|
21147
|
+
};
|
|
21148
|
+
}
|
|
21149
|
+
}
|
|
21150
|
+
);
|
|
21151
|
+
server2.tool(
|
|
21152
|
+
"check_approval",
|
|
21153
|
+
"Check the verdict on an approval you requested earlier (by request_id from request_approval). Returns one of: approved | denied | timed_out | cancelled | pending | error. While 'pending', do nothing and check again later. Safe to call after a restart \u2014 the request is durable and you re-attach by id.",
|
|
21154
|
+
{
|
|
21155
|
+
request_id: external_exports.string().min(1).describe("The request_id returned by request_approval.")
|
|
21156
|
+
},
|
|
21157
|
+
async (params) => {
|
|
21158
|
+
try {
|
|
21159
|
+
const resp = await apiGet2(
|
|
21160
|
+
`/approvals/${encodeURIComponent(params.request_id)}?agent_id=${encodeURIComponent(agentId)}`
|
|
21161
|
+
);
|
|
21162
|
+
return render({
|
|
21163
|
+
request_id: resp.request_id,
|
|
21164
|
+
outcome: resp.outcome,
|
|
21165
|
+
reason: resp.reason,
|
|
21166
|
+
result_payload: resp.result_payload,
|
|
21167
|
+
expires_at: resp.expires_at
|
|
21168
|
+
});
|
|
21169
|
+
} catch (err) {
|
|
21170
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
21171
|
+
return {
|
|
21172
|
+
content: [{ type: "text", text: `Could not check approval ${params.request_id}: ${msg}` }],
|
|
21173
|
+
isError: true
|
|
21174
|
+
};
|
|
21175
|
+
}
|
|
21176
|
+
}
|
|
21177
|
+
);
|
|
21178
|
+
server2.tool(
|
|
21179
|
+
"cancel_approval",
|
|
21180
|
+
"Withdraw an approval request you no longer need (only works while it is still pending). The Manager stops being asked. Use when the underlying need went away.",
|
|
21181
|
+
{
|
|
21182
|
+
request_id: external_exports.string().min(1).describe("The request_id to withdraw."),
|
|
21183
|
+
reason: external_exports.string().max(280).optional().describe("Optional short note on why you are withdrawing.")
|
|
21184
|
+
},
|
|
21185
|
+
async (params) => {
|
|
21186
|
+
try {
|
|
21187
|
+
const resp = await apiPost2(
|
|
21188
|
+
`/approvals/${encodeURIComponent(params.request_id)}/cancel`,
|
|
21189
|
+
{ agent_id: agentId, reason: params.reason ?? "" }
|
|
21190
|
+
);
|
|
21191
|
+
const note = resp.outcome === "cancelled" ? `Withdrew approval request ${resp.request_id}.` : `Could not withdraw \u2014 the request is already ${resp.status}.`;
|
|
21192
|
+
return render({ request_id: resp.request_id, outcome: resp.outcome, note });
|
|
21193
|
+
} catch (err) {
|
|
21194
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
21195
|
+
return {
|
|
21196
|
+
content: [{ type: "text", text: `Could not cancel approval ${params.request_id}: ${msg}` }],
|
|
21197
|
+
isError: true
|
|
21198
|
+
};
|
|
21199
|
+
}
|
|
21200
|
+
}
|
|
21201
|
+
);
|
|
21202
|
+
}
|
|
21203
|
+
|
|
21081
21204
|
// src/index.ts
|
|
21082
21205
|
import { spawn } from "child_process";
|
|
21083
21206
|
var DeliveryTargetSchema = external_exports.union([
|
|
@@ -21198,10 +21321,47 @@ async function apiPost(path, body, retried = false, timeoutMs = 15e3) {
|
|
|
21198
21321
|
clearTimeout(timeout);
|
|
21199
21322
|
}
|
|
21200
21323
|
}
|
|
21324
|
+
async function apiGet(path, retried = false, timeoutMs = 15e3) {
|
|
21325
|
+
const token = await getToken();
|
|
21326
|
+
const controller = new AbortController();
|
|
21327
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
21328
|
+
try {
|
|
21329
|
+
const res = await fetch(`${AGT_HOST}${path}`, {
|
|
21330
|
+
method: "GET",
|
|
21331
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
21332
|
+
signal: controller.signal
|
|
21333
|
+
});
|
|
21334
|
+
if (res.status === 401 && AGT_API_KEY && !AGT_AGENT_SESSION_TOKEN && !retried) {
|
|
21335
|
+
clearTimeout(timeout);
|
|
21336
|
+
tokenExpiresAt = 0;
|
|
21337
|
+
return apiGet(path, true, timeoutMs);
|
|
21338
|
+
}
|
|
21339
|
+
if (!res.ok) {
|
|
21340
|
+
const text = await res.text().catch(() => res.statusText);
|
|
21341
|
+
if (res.status === 401 && AGT_AGENT_SESSION_TOKEN) {
|
|
21342
|
+
throw new Error(
|
|
21343
|
+
`API ${path} returned 401: agent-session rejected (expired or revoked). Re-run \`agt impersonate connect\` to mint a fresh session. (${text})`
|
|
21344
|
+
);
|
|
21345
|
+
}
|
|
21346
|
+
throw new Error(`API ${path} returned ${res.status}: ${text}`);
|
|
21347
|
+
}
|
|
21348
|
+
return await res.json();
|
|
21349
|
+
} catch (err) {
|
|
21350
|
+
if (err instanceof DOMException && err.name === "AbortError") {
|
|
21351
|
+
throw new Error(`API ${path} timed out after ${timeoutMs}ms`);
|
|
21352
|
+
}
|
|
21353
|
+
throw err;
|
|
21354
|
+
} finally {
|
|
21355
|
+
clearTimeout(timeout);
|
|
21356
|
+
}
|
|
21357
|
+
}
|
|
21201
21358
|
var server = new McpServer({
|
|
21202
21359
|
name: "augmented",
|
|
21203
21360
|
version: "0.1.0"
|
|
21204
21361
|
});
|
|
21362
|
+
if (AGT_AGENT_ID) {
|
|
21363
|
+
registerApprovalTools(server, { agentId: AGT_AGENT_ID, apiPost, apiGet });
|
|
21364
|
+
}
|
|
21205
21365
|
server.tool(
|
|
21206
21366
|
"kanban_list",
|
|
21207
21367
|
'List kanban board items for this agent. Returns active items plus only the most recently completed work (last 24h). This is a NARROW, recency-windowed view \u2014 older done cards are NOT here (only done cards are windowed; failed and active cards always show). Before telling anyone you have "no record" of past work, use kanban_search, which covers your full history.',
|
|
@@ -22387,6 +22547,10 @@ async function forwardToolCall(toolName, args) {
|
|
|
22387
22547
|
);
|
|
22388
22548
|
}
|
|
22389
22549
|
var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
22550
|
+
// ENG-6452: generic agent-approval seam (always registered locally).
|
|
22551
|
+
"request_approval",
|
|
22552
|
+
"check_approval",
|
|
22553
|
+
"cancel_approval",
|
|
22390
22554
|
"kanban_list",
|
|
22391
22555
|
"kanban_search",
|
|
22392
22556
|
"kanban_add",
|
|
@@ -25,8 +25,8 @@ import {
|
|
|
25
25
|
takeZombieDetection,
|
|
26
26
|
writeDirectChatSessionState,
|
|
27
27
|
writePersistentClaudeWrapper
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import "./chunk-
|
|
28
|
+
} from "./chunk-4P7HUXWI.js";
|
|
29
|
+
import "./chunk-XKAJW4EX.js";
|
|
30
30
|
import "./chunk-XWVM4KPK.js";
|
|
31
31
|
export {
|
|
32
32
|
SEND_KEYS_ENTER_DELAY_MS,
|
|
@@ -56,4 +56,4 @@ export {
|
|
|
56
56
|
writeDirectChatSessionState,
|
|
57
57
|
writePersistentClaudeWrapper
|
|
58
58
|
};
|
|
59
|
-
//# sourceMappingURL=persistent-session-
|
|
59
|
+
//# sourceMappingURL=persistent-session-WJBIN6WM.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-4P7HUXWI.js";
|
|
4
|
+
import "./chunk-XKAJW4EX.js";
|
|
5
5
|
import "./chunk-XWVM4KPK.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/responsiveness-probe.ts
|
|
@@ -250,4 +250,4 @@ export {
|
|
|
250
250
|
parkPendingInbound,
|
|
251
251
|
readAndResetChannelDeflections
|
|
252
252
|
};
|
|
253
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
253
|
+
//# sourceMappingURL=responsiveness-probe-XVWLBSSH.js.map
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|