@agentrq/acp-gateway 0.2.4 → 0.2.6
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/README.md +3 -1
- package/dist/__tests__/acpClient.test.js +635 -106
- package/dist/__tests__/acpClient.test.js.map +1 -1
- package/dist/__tests__/agentInfo.test.js +79 -0
- package/dist/__tests__/agentInfo.test.js.map +1 -0
- package/dist/__tests__/config.test.js +45 -0
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/index.test.js +283 -15
- package/dist/__tests__/index.test.js.map +1 -1
- package/dist/__tests__/mcpClient.test.js +94 -1
- package/dist/__tests__/mcpClient.test.js.map +1 -1
- package/dist/__tests__/telemetry.test.js +151 -0
- package/dist/__tests__/telemetry.test.js.map +1 -0
- package/dist/acpClient.js +380 -59
- package/dist/acpClient.js.map +1 -1
- package/dist/agentInfo.js +69 -0
- package/dist/agentInfo.js.map +1 -0
- package/dist/config.js +50 -16
- package/dist/config.js.map +1 -1
- package/dist/index.js +259 -19
- package/dist/index.js.map +1 -1
- package/dist/mcpClient.js +37 -1
- package/dist/mcpClient.js.map +1 -1
- package/dist/telemetry.js +106 -0
- package/dist/telemetry.js.map +1 -0
- package/package.json +1 -1
package/dist/acpClient.js
CHANGED
|
@@ -4,14 +4,49 @@
|
|
|
4
4
|
* Implements the ACP Client interface for the agentrq workspace.
|
|
5
5
|
* Routes permission requests to the MCP server.
|
|
6
6
|
*/
|
|
7
|
+
import { TELEMETRY_NOTIFICATION_METHOD, formatPlan, formatUsage, planFromEntries, planTelemetryData, usageTelemetryData, } from "./telemetry.js";
|
|
7
8
|
import * as fs from "node:fs/promises";
|
|
8
9
|
import * as path from "node:path";
|
|
9
10
|
/** Identifies a tool call routed through an agentrq MCP server. */
|
|
10
11
|
const AGENTRQ_TOOL_PATTERN = /agentrq-[a-zA-Z0-9]{11}/;
|
|
12
|
+
/** How long to wait for `session/cancel` before settling permissions regardless. */
|
|
13
|
+
const CANCEL_SESSION_TIMEOUT_MS = 5000;
|
|
14
|
+
/**
|
|
15
|
+
* What a turn ending in anything but `end_turn` means, in the human's terms.
|
|
16
|
+
*
|
|
17
|
+
* Without this the workspace sees the agent's partial answer and nothing else,
|
|
18
|
+
* so a refused or truncated turn is indistinguishable from a finished one.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* How long a tool call waits for a human before the turn is given up on.
|
|
22
|
+
*
|
|
23
|
+
* Humans are slow — this is not a network timeout — but it must exist: a wait
|
|
24
|
+
* with no end holds a task-queue slot for the life of the process, and at low
|
|
25
|
+
* concurrency one unanswered approval is enough to stop the workspace.
|
|
26
|
+
*/
|
|
27
|
+
export const DEFAULT_PERMISSION_TIMEOUT_MS = 30 * 60 * 1000;
|
|
28
|
+
const STOP_REASON_NOTES = {
|
|
29
|
+
refusal: "⚠️ The agent refused to continue this turn.",
|
|
30
|
+
max_tokens: "⚠️ The agent stopped mid-turn: it ran out of output tokens.",
|
|
31
|
+
max_turn_requests: "⚠️ The agent stopped mid-turn: it reached its limit on model requests for a single turn.",
|
|
32
|
+
cancelled: "⚠️ The turn was cancelled before the agent finished.",
|
|
33
|
+
};
|
|
11
34
|
export class AgentRQACPClient {
|
|
12
35
|
mcpBridge;
|
|
13
36
|
getTaskIdForSession;
|
|
14
37
|
replyBuffers = new Map();
|
|
38
|
+
// sessionId → reasoning accumulated since the last boundary. Thought tokens
|
|
39
|
+
// stream one at a time and are deliberately kept out of replyBuffers: they
|
|
40
|
+
// are not the answer, and folding them in would both corrupt the reply and
|
|
41
|
+
// break the dedup against the agent's own `reply` tool call.
|
|
42
|
+
thoughtBuffers = new Map();
|
|
43
|
+
// sessionId → the most recent usage snapshot. Only the last one is worth
|
|
44
|
+
// reporting: each supersedes the one before it.
|
|
45
|
+
latestUsage = new Map();
|
|
46
|
+
// Telemetry sends, run one after another so the workspace sees them in the
|
|
47
|
+
// order the agent produced them, and off the ACP stream's critical path so a
|
|
48
|
+
// slow or unreachable workspace never stalls the agent mid-turn.
|
|
49
|
+
telemetryChain = Promise.resolve();
|
|
15
50
|
// chatId → text sent by the agent via the reply MCP tool (for dedup in flushReply)
|
|
16
51
|
agentReplies = new Map();
|
|
17
52
|
// toolCallId → details seen on session updates. A `tool_call` update always
|
|
@@ -19,11 +54,217 @@ export class AgentRQACPClient {
|
|
|
19
54
|
// (ACP marks it optional there, and codex-acp sends it bare), which would
|
|
20
55
|
// otherwise leave us unable to tell an agentrq MCP call from anything else.
|
|
21
56
|
toolCallDetails = new Map();
|
|
22
|
-
|
|
57
|
+
// request_id → the tool call waiting on a human. One shared verdict listener
|
|
58
|
+
// serves them all: a listener per request was only ever removed on a matching
|
|
59
|
+
// verdict, so every unanswered request leaked one for the life of the process.
|
|
60
|
+
pendingPermissions = new Map();
|
|
61
|
+
permissionTimeoutMs;
|
|
62
|
+
cancelSession;
|
|
63
|
+
onModeChanged;
|
|
64
|
+
constructor(mcpBridge, getTaskIdForSession = () => undefined, options = {}) {
|
|
23
65
|
this.mcpBridge = mcpBridge;
|
|
24
66
|
this.getTaskIdForSession = getTaskIdForSession;
|
|
67
|
+
this.permissionTimeoutMs = options.permissionTimeoutMs ?? DEFAULT_PERMISSION_TIMEOUT_MS;
|
|
68
|
+
this.mcpBridge.on("verdict", this.onVerdict);
|
|
69
|
+
this.mcpBridge.on("reconnected", this.onWorkspaceReconnected);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Supplies what to do when the agent changes its own session mode.
|
|
73
|
+
*
|
|
74
|
+
* The gateway pins a mode that routes approvals to the human at session
|
|
75
|
+
* creation, but agents may switch modes on their own — and back into one
|
|
76
|
+
* that approves on the user's behalf.
|
|
77
|
+
*/
|
|
78
|
+
setModeChangeHandler(handler) {
|
|
79
|
+
this.onModeChanged = handler;
|
|
80
|
+
}
|
|
81
|
+
/** How many tool calls are waiting on a human right now. */
|
|
82
|
+
get pendingPermissionCount() {
|
|
83
|
+
return this.pendingPermissions.size;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Supplies the way to stop a turn, which only exists once the agent
|
|
87
|
+
* connection has been built around this client.
|
|
88
|
+
*/
|
|
89
|
+
setSessionCanceller(cancel) {
|
|
90
|
+
this.cancelSession = cancel;
|
|
25
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Answers every waiting tool call with `cancelled`.
|
|
94
|
+
*
|
|
95
|
+
* Used when the agent is gone: nothing will ever act on those answers, but
|
|
96
|
+
* the promises must settle or their task-queue slots are held forever.
|
|
97
|
+
*/
|
|
98
|
+
cancelPendingPermissions(reason, sessionId) {
|
|
99
|
+
if (this.pendingPermissions.size === 0)
|
|
100
|
+
return;
|
|
101
|
+
const toCancel = sessionId
|
|
102
|
+
? [...this.pendingPermissions.values()].filter((p) => p.sessionId === sessionId)
|
|
103
|
+
: [...this.pendingPermissions.values()];
|
|
104
|
+
if (toCancel.length === 0)
|
|
105
|
+
return;
|
|
106
|
+
console.error(`[acp] Cancelling ${toCancel.length} waiting permission request(s): ${reason}`);
|
|
107
|
+
for (const pending of toCancel) {
|
|
108
|
+
pending.settle({ outcome: "cancelled" });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Re-sends everything still waiting, after the workspace connection was
|
|
113
|
+
* re-established on a new session.
|
|
114
|
+
*
|
|
115
|
+
* A verdict is routed back to the session its request arrived on, so a
|
|
116
|
+
* request that was in flight across a reconnect can never be answered. The
|
|
117
|
+
* request id stays the same, which is what lets the workspace recognise this
|
|
118
|
+
* as the same pending decision rather than a new one to ask about again.
|
|
119
|
+
*/
|
|
120
|
+
onWorkspaceReconnected = () => {
|
|
121
|
+
if (this.pendingPermissions.size === 0)
|
|
122
|
+
return;
|
|
123
|
+
console.error(`[acp] Workspace reconnected — re-sending ${this.pendingPermissions.size} ` +
|
|
124
|
+
`permission request(s) that would otherwise never be answered`);
|
|
125
|
+
for (const pending of this.pendingPermissions.values()) {
|
|
126
|
+
void this.mcpBridge
|
|
127
|
+
.sendNotification("notifications/claude/channel/permission_request", pending.payload)
|
|
128
|
+
.catch((err) => {
|
|
129
|
+
console.error(`[acp] Failed to re-send permission request ${pending.payload.request_id}:`, err);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
/** Delivers a verdict to whichever tool call is waiting on it, if any. */
|
|
134
|
+
onVerdict = (data) => {
|
|
135
|
+
const pending = this.pendingPermissions.get(data.requestId);
|
|
136
|
+
if (!pending) {
|
|
137
|
+
console.error(`[acp] Verdict for ${data.requestId} arrived with nothing waiting on it`);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
console.error(`✅ Permission verdict received: ${data.behavior}`);
|
|
141
|
+
pending.settle(this.outcomeForVerdict(pending.options, data.behavior));
|
|
142
|
+
};
|
|
143
|
+
/** Stops the agent's current turn and cancels any pending permissions for the session. */
|
|
144
|
+
async cancelTurn(sessionId) {
|
|
145
|
+
if (!sessionId)
|
|
146
|
+
return;
|
|
147
|
+
try {
|
|
148
|
+
// Cancel before answering: the spec treats `cancelled` as the answer a
|
|
149
|
+
// client gives *because* it cancelled the turn, so settling first would
|
|
150
|
+
// leave the agent free to carry on and ask again. The wait is bounded and
|
|
151
|
+
// the settle happens either way — an agent wedged on its stdin must not
|
|
152
|
+
// hold waiting permissions, and their task-queue slots, open forever.
|
|
153
|
+
if (this.cancelSession) {
|
|
154
|
+
let timer;
|
|
155
|
+
try {
|
|
156
|
+
await Promise.race([
|
|
157
|
+
Promise.resolve(this.cancelSession(sessionId)),
|
|
158
|
+
new Promise((resolve) => {
|
|
159
|
+
timer = setTimeout(() => {
|
|
160
|
+
console.error(`[acp] session/cancel for ${sessionId} did not complete in ` +
|
|
161
|
+
`${CANCEL_SESSION_TIMEOUT_MS}ms — settling permissions anyway`);
|
|
162
|
+
resolve();
|
|
163
|
+
}, CANCEL_SESSION_TIMEOUT_MS);
|
|
164
|
+
}),
|
|
165
|
+
]);
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
if (timer)
|
|
169
|
+
clearTimeout(timer);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
console.error(`[acp] Failed to cancel turn for session ${sessionId}:`, err);
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
this.cancelPendingPermissions("task cancelled", sessionId);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Ends the turn: everything the agent produced besides its answer goes out
|
|
182
|
+
* around the answer itself.
|
|
183
|
+
*
|
|
184
|
+
* The reasoning that led to the answer has to precede it, and the token and
|
|
185
|
+
* cost counters read as a footer, so they follow.
|
|
186
|
+
*/
|
|
26
187
|
async flushReply(sessionId) {
|
|
188
|
+
await this.flushThought(sessionId);
|
|
189
|
+
await this.deliverReply(sessionId);
|
|
190
|
+
await this.flushUsage(sessionId);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Queues whatever reasoning has accumulated for sending, and waits for the
|
|
194
|
+
* telemetry queue to drain.
|
|
195
|
+
*
|
|
196
|
+
* Taking the buffer here rather than inside the queued send is what keeps a
|
|
197
|
+
* reasoning block whole: anything the agent thinks after this point belongs
|
|
198
|
+
* to the next block.
|
|
199
|
+
*/
|
|
200
|
+
async flushThought(sessionId) {
|
|
201
|
+
this.queueThoughtFlush(sessionId);
|
|
202
|
+
await this.telemetryChain;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Closes off the current reasoning block, if there is one.
|
|
206
|
+
*
|
|
207
|
+
* Called wherever the agent stops thinking and does something else — starts
|
|
208
|
+
* answering, calls a tool, revises its plan — so a block of reasoning
|
|
209
|
+
* reaches the human while it still explains what is about to happen, rather
|
|
210
|
+
* than arriving in one lump at the end of the turn.
|
|
211
|
+
*/
|
|
212
|
+
queueThoughtFlush(sessionId) {
|
|
213
|
+
const thought = this.thoughtBuffers.get(sessionId);
|
|
214
|
+
if (!thought?.trim())
|
|
215
|
+
return;
|
|
216
|
+
this.thoughtBuffers.delete(sessionId);
|
|
217
|
+
this.queueTelemetry(() => this.sendTelemetry(sessionId, "thought", thought, {}));
|
|
218
|
+
}
|
|
219
|
+
/** Reports the last usage snapshot of the turn, if the agent sent any. */
|
|
220
|
+
async flushUsage(sessionId) {
|
|
221
|
+
const usage = this.latestUsage.get(sessionId);
|
|
222
|
+
this.latestUsage.delete(sessionId);
|
|
223
|
+
if (!usage)
|
|
224
|
+
return;
|
|
225
|
+
await this.sendTelemetry(sessionId, "usage", formatUsage(usage), usageTelemetryData(usage));
|
|
226
|
+
}
|
|
227
|
+
/** Reports a plan the agent has just published or revised. */
|
|
228
|
+
queuePlan(sessionId, plan) {
|
|
229
|
+
this.queueThoughtFlush(sessionId);
|
|
230
|
+
this.queueTelemetry(() => this.sendTelemetry(sessionId, "plan", formatPlan(plan), planTelemetryData(plan)));
|
|
231
|
+
}
|
|
232
|
+
/** Adds a send to the tail of the telemetry queue. */
|
|
233
|
+
queueTelemetry(send) {
|
|
234
|
+
this.telemetryChain = this.telemetryChain
|
|
235
|
+
.catch(() => { })
|
|
236
|
+
.then(send)
|
|
237
|
+
.catch((err) => {
|
|
238
|
+
console.error(`[acp] Telemetry send failed:`, err);
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Forwards one piece of telemetry to the workspace.
|
|
243
|
+
*
|
|
244
|
+
* Never throws: telemetry is not the answer, so a workspace that cannot take
|
|
245
|
+
* it right now must not cost the agent its turn.
|
|
246
|
+
*/
|
|
247
|
+
async sendTelemetry(sessionId, kind, text, data) {
|
|
248
|
+
const taskId = this.getTaskIdForSession(sessionId);
|
|
249
|
+
if (!taskId) {
|
|
250
|
+
console.error(`[acp] No task ID for session ${sessionId}, dropping ${kind} telemetry`);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
const payload = {
|
|
254
|
+
task_id: taskId,
|
|
255
|
+
session_id: sessionId,
|
|
256
|
+
kind,
|
|
257
|
+
text,
|
|
258
|
+
data,
|
|
259
|
+
};
|
|
260
|
+
try {
|
|
261
|
+
await this.mcpBridge.sendNotification(TELEMETRY_NOTIFICATION_METHOD, payload);
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
console.error(`[acp] Failed to send ${kind} telemetry for session ${sessionId}:`, err);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
async deliverReply(sessionId) {
|
|
27
268
|
const text = this.replyBuffers.get(sessionId) ?? "";
|
|
28
269
|
this.replyBuffers.delete(sessionId);
|
|
29
270
|
if (!text.trim())
|
|
@@ -47,17 +288,40 @@ export class AgentRQACPClient {
|
|
|
47
288
|
console.error(`[acp] Failed to forward reply to task ${taskId}:`, err);
|
|
48
289
|
}
|
|
49
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Tells the workspace when a turn ended for any reason other than the agent
|
|
293
|
+
* finishing what it was asked. Call after flushReply, so the note follows
|
|
294
|
+
* whatever the agent did manage to say.
|
|
295
|
+
*/
|
|
296
|
+
async reportStopReason(sessionId, stopReason) {
|
|
297
|
+
if (stopReason === "end_turn")
|
|
298
|
+
return;
|
|
299
|
+
const taskId = this.getTaskIdForSession(sessionId);
|
|
300
|
+
if (!taskId) {
|
|
301
|
+
console.error(`[acp] No task ID for session ${sessionId}, not reporting "${stopReason}"`);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
const text = STOP_REASON_NOTES[stopReason] ??
|
|
305
|
+
`⚠️ The agent stopped for a reason this gateway does not recognise: ${stopReason}.`;
|
|
306
|
+
try {
|
|
307
|
+
await this.mcpBridge.callTool("reply", { chatId: taskId, text });
|
|
308
|
+
console.error(`[acp] Reported stop reason "${stopReason}" to task ${taskId}`);
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
console.error(`[acp] Failed to report stop reason to task ${taskId}:`, err);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
50
314
|
async requestPermission(params) {
|
|
51
|
-
const
|
|
315
|
+
const toolCallId = params.toolCall.toolCallId;
|
|
52
316
|
// Fall back to what the earlier session update reported for this same tool
|
|
53
317
|
// call: the permission request itself may carry no title or input.
|
|
54
|
-
const remembered = this.toolCallDetails.get(
|
|
55
|
-
this.toolCallDetails.delete(
|
|
318
|
+
const remembered = this.toolCallDetails.get(toolCallId);
|
|
319
|
+
this.toolCallDetails.delete(toolCallId);
|
|
56
320
|
const toolTitle = params.toolCall.title ?? remembered?.title ?? "Unknown Tool";
|
|
57
321
|
const rawInput = params.toolCall.rawInput ?? remembered?.rawInput;
|
|
58
322
|
// Auto-allow tool calls that contain the pattern: agentrq-<11 chars a-zA-Z0-9>
|
|
59
323
|
if (AGENTRQ_TOOL_PATTERN.test(toolTitle)) {
|
|
60
|
-
console.error(`\n🔓 ACP Auto-allowing tool call: ${toolTitle} (ID: ${
|
|
324
|
+
console.error(`\n🔓 ACP Auto-allowing tool call: ${toolTitle} (ID: ${toolCallId})`);
|
|
61
325
|
const option = params.options.find(o => o.kind.startsWith("allow") ||
|
|
62
326
|
o.name.toLowerCase().includes("allow") ||
|
|
63
327
|
o.name.toLowerCase().includes("yes") ||
|
|
@@ -70,8 +334,14 @@ export class AgentRQACPClient {
|
|
|
70
334
|
},
|
|
71
335
|
};
|
|
72
336
|
}
|
|
73
|
-
console.error(`\n🔐 ACP Permission requested: ${toolTitle} (ID: ${
|
|
74
|
-
const
|
|
337
|
+
console.error(`\n🔐 ACP Permission requested: ${toolTitle} (ID: ${toolCallId})`);
|
|
338
|
+
const sessionId = params.sessionId;
|
|
339
|
+
// agentrq keys its own bookkeeping on the request id alone, across the whole
|
|
340
|
+
// workspace. Tool call ids are only unique within a session, and agents
|
|
341
|
+
// commonly number them from one, so two tasks running at once could
|
|
342
|
+
// otherwise have a verdict land on the wrong tool call.
|
|
343
|
+
const requestId = sessionId ? `${sessionId}:${toolCallId}` : toolCallId;
|
|
344
|
+
const taskId = sessionId ? this.getTaskIdForSession(sessionId) : undefined;
|
|
75
345
|
const payload = {
|
|
76
346
|
request_id: requestId,
|
|
77
347
|
task_id: taskId,
|
|
@@ -94,62 +364,81 @@ export class AgentRQACPClient {
|
|
|
94
364
|
console.error(`[acp] Failed to forward permission request ${requestId} (cancelling):`, err);
|
|
95
365
|
return { outcome: { outcome: "cancelled" } };
|
|
96
366
|
}
|
|
97
|
-
// 2. Wait for the verdict from the MCP server
|
|
367
|
+
// 2. Wait for the verdict from the MCP server — but not forever.
|
|
98
368
|
console.error(`⌛ Waiting for human approval in the agentrq dashboard...`);
|
|
99
369
|
return new Promise((resolve) => {
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return isAllow
|
|
122
|
-
? o.kind.startsWith("allow") || name.includes("allow") || name.includes("yes") || name.includes("approve")
|
|
123
|
-
: o.kind.startsWith("reject") || name.includes("deny") || name.includes("reject") || name.includes("no");
|
|
124
|
-
});
|
|
125
|
-
// Falling back to onceOptions[0] unconditionally is unsafe for a
|
|
126
|
-
// deny verdict: ACP conventionally lists allow options first, so an
|
|
127
|
-
// unmatched deny could silently resolve to an allow option and
|
|
128
|
-
// approve a tool call the human explicitly denied. Only ever fall
|
|
129
|
-
// back to a non-persistent option that is not itself an allow-kind;
|
|
130
|
-
// if no safe option exists at all (e.g. only "always" options were
|
|
131
|
-
// offered), cancel instead of guessing.
|
|
132
|
-
let outcome;
|
|
133
|
-
if (option) {
|
|
134
|
-
outcome = { outcome: "selected", optionId: option.optionId };
|
|
135
|
-
}
|
|
136
|
-
else if (isAllow) {
|
|
137
|
-
outcome = onceOptions[0]
|
|
138
|
-
? { outcome: "selected", optionId: onceOptions[0].optionId }
|
|
139
|
-
: { outcome: "cancelled" };
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
const safeFallback = onceOptions.find(o => !o.kind.startsWith("allow"));
|
|
143
|
-
outcome = safeFallback
|
|
144
|
-
? { outcome: "selected", optionId: safeFallback.optionId }
|
|
145
|
-
: { outcome: "cancelled" };
|
|
146
|
-
}
|
|
147
|
-
console.error(`[acp] Selected permission option: ${"optionId" in outcome ? outcome.optionId : "cancelled"} (${option?.name ?? "default"})`);
|
|
148
|
-
resolve({ outcome });
|
|
149
|
-
}
|
|
370
|
+
const timer = this.permissionTimeoutMs > 0
|
|
371
|
+
? setTimeout(() => {
|
|
372
|
+
console.error(`[acp] ⌛ No verdict for ${requestId} after ` +
|
|
373
|
+
`${Math.round(this.permissionTimeoutMs / 60000)} min — cancelling the turn.`);
|
|
374
|
+
// Cancel as well as answering: the spec treats `cancelled` as the
|
|
375
|
+
// answer a client gives *because* it cancelled the turn. Answering
|
|
376
|
+
// alone would leave the agent free to carry on and ask again.
|
|
377
|
+
void this.cancelTurn(sessionId);
|
|
378
|
+
settle({ outcome: "cancelled" });
|
|
379
|
+
}, this.permissionTimeoutMs)
|
|
380
|
+
: undefined;
|
|
381
|
+
let settled = false;
|
|
382
|
+
const settle = (outcome) => {
|
|
383
|
+
if (settled)
|
|
384
|
+
return;
|
|
385
|
+
settled = true;
|
|
386
|
+
if (timer)
|
|
387
|
+
clearTimeout(timer);
|
|
388
|
+
this.pendingPermissions.delete(requestId);
|
|
389
|
+
console.error(`[acp] Selected permission option: ${"optionId" in outcome ? outcome.optionId : "cancelled"}`);
|
|
390
|
+
resolve({ outcome });
|
|
150
391
|
};
|
|
151
|
-
this.
|
|
392
|
+
this.pendingPermissions.set(requestId, {
|
|
393
|
+
payload,
|
|
394
|
+
sessionId,
|
|
395
|
+
options: params.options,
|
|
396
|
+
settle,
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Turns a workspace verdict into one of the options the agent offered.
|
|
402
|
+
*
|
|
403
|
+
* A verdict from agentrq covers exactly one tool call. Never select a
|
|
404
|
+
* "persistent" option (ACP's "allow_always"/"reject_always" kinds, or an
|
|
405
|
+
* equivalent "remember"/"don't ask again" option by name) — picking one would
|
|
406
|
+
* make the *spawned agent* remember the decision and stop sending
|
|
407
|
+
* requestPermission for matching future tool calls, so those calls would
|
|
408
|
+
* never reach agentrq again. Every subsequent call must still be forwarded
|
|
409
|
+
* and re-approved there.
|
|
410
|
+
*/
|
|
411
|
+
outcomeForVerdict(options, behavior) {
|
|
412
|
+
const isPersistent = (o) => /always|remember|don'?t ask/i.test(o.kind) || /always|remember|don'?t ask/i.test(o.name);
|
|
413
|
+
const onceOptions = options.filter(o => !isPersistent(o));
|
|
414
|
+
// Map "allow"/"deny" to the correct ACP option. Per the ACP spec,
|
|
415
|
+
// PermissionOptionKind is one of "allow_once" | "allow_always" |
|
|
416
|
+
// "reject_once" | "reject_always" — there is no "deny_*" kind, so a
|
|
417
|
+
// deny verdict must match on "reject" to find a spec-compliant option.
|
|
418
|
+
const isAllow = behavior === "allow";
|
|
419
|
+
const option = onceOptions.find(o => {
|
|
420
|
+
const name = o.name.toLowerCase();
|
|
421
|
+
return isAllow
|
|
422
|
+
? o.kind.startsWith("allow") || name.includes("allow") || name.includes("yes") || name.includes("approve")
|
|
423
|
+
: o.kind.startsWith("reject") || name.includes("deny") || name.includes("reject") || name.includes("no");
|
|
152
424
|
});
|
|
425
|
+
if (option)
|
|
426
|
+
return { outcome: "selected", optionId: option.optionId };
|
|
427
|
+
// Falling back to onceOptions[0] unconditionally is unsafe for a deny
|
|
428
|
+
// verdict: ACP conventionally lists allow options first, so an unmatched
|
|
429
|
+
// deny could silently resolve to an allow option and approve a tool call
|
|
430
|
+
// the human explicitly denied. Only ever fall back to a non-persistent
|
|
431
|
+
// option that is not itself an allow-kind; if no safe option exists at all
|
|
432
|
+
// (e.g. only "always" options were offered), cancel instead of guessing.
|
|
433
|
+
if (isAllow) {
|
|
434
|
+
return onceOptions[0]
|
|
435
|
+
? { outcome: "selected", optionId: onceOptions[0].optionId }
|
|
436
|
+
: { outcome: "cancelled" };
|
|
437
|
+
}
|
|
438
|
+
const safeFallback = onceOptions.find(o => !o.kind.startsWith("allow"));
|
|
439
|
+
return safeFallback
|
|
440
|
+
? { outcome: "selected", optionId: safeFallback.optionId }
|
|
441
|
+
: { outcome: "cancelled" };
|
|
153
442
|
}
|
|
154
443
|
/**
|
|
155
444
|
* Records what a tool call is, keyed by its id, so that a permission request
|
|
@@ -181,15 +470,47 @@ export class AgentRQACPClient {
|
|
|
181
470
|
switch (update.sessionUpdate) {
|
|
182
471
|
case "agent_message_chunk":
|
|
183
472
|
if (update.content.type === "text") {
|
|
473
|
+
// The agent has stopped thinking and started answering.
|
|
474
|
+
this.queueThoughtFlush(params.sessionId);
|
|
184
475
|
process.stdout.write(update.content.text);
|
|
185
476
|
const sid = params.sessionId;
|
|
186
477
|
this.replyBuffers.set(sid, (this.replyBuffers.get(sid) ?? "") + update.content.text);
|
|
187
478
|
}
|
|
188
479
|
break;
|
|
480
|
+
case "agent_thought_chunk":
|
|
481
|
+
if (update.content.type === "text") {
|
|
482
|
+
const sid = params.sessionId;
|
|
483
|
+
this.thoughtBuffers.set(sid, (this.thoughtBuffers.get(sid) ?? "") + update.content.text);
|
|
484
|
+
}
|
|
485
|
+
break;
|
|
486
|
+
case "plan":
|
|
487
|
+
this.queuePlan(params.sessionId, planFromEntries(update.entries));
|
|
488
|
+
break;
|
|
489
|
+
case "plan_update":
|
|
490
|
+
this.queuePlan(params.sessionId, update.plan);
|
|
491
|
+
break;
|
|
492
|
+
case "plan_removed":
|
|
493
|
+
this.queueThoughtFlush(params.sessionId);
|
|
494
|
+
this.queueTelemetry(() => this.sendTelemetry(params.sessionId, "plan", "Plan withdrawn.", {
|
|
495
|
+
planId: update.planId,
|
|
496
|
+
removed: true,
|
|
497
|
+
}));
|
|
498
|
+
break;
|
|
499
|
+
case "usage_update":
|
|
500
|
+
// Each snapshot supersedes the last; only the final one is reported,
|
|
501
|
+
// at the end of the turn.
|
|
502
|
+
this.latestUsage.set(params.sessionId, update);
|
|
503
|
+
break;
|
|
504
|
+
case "current_mode_update":
|
|
505
|
+
console.error(`[acp] Agent switched session mode to "${update.currentModeId}"`);
|
|
506
|
+
await this.onModeChanged?.(params.sessionId, update.currentModeId);
|
|
507
|
+
break;
|
|
189
508
|
case "tool_call_update":
|
|
190
509
|
this.rememberToolCall(update);
|
|
191
510
|
break;
|
|
192
511
|
case "tool_call": {
|
|
512
|
+
// Reasoning that explains a tool call belongs in front of it.
|
|
513
|
+
this.queueThoughtFlush(params.sessionId);
|
|
193
514
|
this.rememberToolCall(update);
|
|
194
515
|
if (update.title && AGENTRQ_TOOL_PATTERN.test(update.title)) {
|
|
195
516
|
// Track completed reply calls so flushReply can skip exact duplicates
|
package/dist/acpClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acpClient.js","sourceRoot":"","sources":["../src/acpClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acpClient.js","sourceRoot":"","sources":["../src/acpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentInfo.ts
|
|
3
|
+
*
|
|
4
|
+
* Renders what an agent said about itself during `initialize`.
|
|
5
|
+
*
|
|
6
|
+
* An agent's capabilities are only knowable from a live handshake — nothing in
|
|
7
|
+
* the registry lists them — so the answer to "can this agent resume a session?"
|
|
8
|
+
* or "will it accept an HTTP MCP server?" is otherwise a guess.
|
|
9
|
+
*/
|
|
10
|
+
import { describeAuthMethods } from "./auth.js";
|
|
11
|
+
/** ACP marks an optional capability as supported by supplying `{}` for it. */
|
|
12
|
+
function supported(value) {
|
|
13
|
+
return value !== undefined && value !== null && value !== false;
|
|
14
|
+
}
|
|
15
|
+
function yesNo(value) {
|
|
16
|
+
return supported(value) ? "yes" : "no";
|
|
17
|
+
}
|
|
18
|
+
function section(title, rows) {
|
|
19
|
+
const width = Math.max(...rows.map(([label]) => label.length));
|
|
20
|
+
const body = rows.map(([label, value]) => ` ${label.padEnd(width)} ${value}`);
|
|
21
|
+
return [title, ...body].join("\n");
|
|
22
|
+
}
|
|
23
|
+
/** The agent's own name for itself, falling back to how it was launched. */
|
|
24
|
+
function heading(initResult, launchedAs) {
|
|
25
|
+
const info = initResult
|
|
26
|
+
.agentInfo;
|
|
27
|
+
if (!info?.name)
|
|
28
|
+
return launchedAs;
|
|
29
|
+
const title = info.title && info.title !== info.name ? ` — ${info.title}` : "";
|
|
30
|
+
const version = info.version ? ` ${info.version}` : "";
|
|
31
|
+
return `${info.name}${title}${version}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Describes an agent's capabilities as the agent itself reported them.
|
|
35
|
+
*
|
|
36
|
+
* `launchedAs` is only used when the agent supplies no `agentInfo`, so that the
|
|
37
|
+
* output still says which agent is being described.
|
|
38
|
+
*/
|
|
39
|
+
export function describeAgentInfo(initResult, launchedAs) {
|
|
40
|
+
const caps = (initResult.agentCapabilities ?? {});
|
|
41
|
+
const sessions = caps.sessionCapabilities ?? {};
|
|
42
|
+
const prompt = caps.promptCapabilities ?? {};
|
|
43
|
+
const mcp = caps.mcpCapabilities ?? {};
|
|
44
|
+
const blocks = [
|
|
45
|
+
`${heading(initResult, launchedAs)}\nACP protocol version ${initResult.protocolVersion}`,
|
|
46
|
+
section("SESSIONS", [
|
|
47
|
+
["session/load", yesNo(caps.loadSession)],
|
|
48
|
+
["session/list", yesNo(sessions.list)],
|
|
49
|
+
["session/resume", yesNo(sessions.resume)],
|
|
50
|
+
["session/close", yesNo(sessions.close)],
|
|
51
|
+
["session/delete", yesNo(sessions.delete)],
|
|
52
|
+
["session/fork", yesNo(sessions.fork)],
|
|
53
|
+
]),
|
|
54
|
+
section("PROMPT CONTENT", [
|
|
55
|
+
["image", yesNo(prompt.image)],
|
|
56
|
+
["audio", yesNo(prompt.audio)],
|
|
57
|
+
["embedded context", yesNo(prompt.embeddedContext)],
|
|
58
|
+
]),
|
|
59
|
+
section("MCP TRANSPORTS", [
|
|
60
|
+
["http", yesNo(mcp.http)],
|
|
61
|
+
["sse", yesNo(mcp.sse)],
|
|
62
|
+
["acp", yesNo(mcp.acp)],
|
|
63
|
+
]),
|
|
64
|
+
section("AUTHENTICATION", [["logout", yesNo(caps.auth?.logout)]]) +
|
|
65
|
+
`\n\n Login methods:\n${describeAuthMethods(initResult.authMethods)}`,
|
|
66
|
+
];
|
|
67
|
+
return blocks.join("\n\n");
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=agentInfo.js.map
|