@adhd/agent-mcp 0.0.8 → 1.0.0
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/drizzle/0000_nifty_sasquatch.sql +55 -0
- package/drizzle/0001_task_usage.sql +16 -0
- package/drizzle/0002_lumpy_silver_centurion.sql +2 -0
- package/drizzle/0003_nifty_shriek.sql +2 -0
- package/drizzle/0004_brief_shocker.sql +4 -0
- package/drizzle/0005_clear_lenny_balinger.sql +25 -0
- package/drizzle/meta/0000_snapshot.json +387 -0
- package/drizzle/meta/0001_snapshot.json +495 -0
- package/drizzle/meta/0002_snapshot.json +509 -0
- package/drizzle/meta/0003_snapshot.json +523 -0
- package/drizzle/meta/0004_snapshot.json +551 -0
- package/drizzle/meta/0005_snapshot.json +545 -0
- package/drizzle/meta/_journal.json +48 -0
- package/package.json +4 -2
- package/src/__tests__/integration/harness.d.ts +195 -0
- package/src/__tests__/integration/harness.d.ts.map +1 -0
- package/src/__tests__/integration/harness.js +396 -0
- package/src/__tests__/integration/harness.js.map +1 -0
- package/src/__tests__/integration/scripted-provider.d.ts +44 -0
- package/src/__tests__/integration/scripted-provider.d.ts.map +1 -0
- package/src/__tests__/integration/scripted-provider.js +82 -0
- package/src/__tests__/integration/scripted-provider.js.map +1 -0
- package/src/clients/registry.d.ts +17 -0
- package/src/clients/registry.d.ts.map +1 -1
- package/src/clients/registry.js +45 -6
- package/src/clients/registry.js.map +1 -1
- package/src/clients/tool-naming.d.ts +20 -0
- package/src/clients/tool-naming.d.ts.map +1 -0
- package/src/clients/tool-naming.js +22 -0
- package/src/clients/tool-naming.js.map +1 -0
- package/src/db/client.d.ts +1 -0
- package/src/db/client.d.ts.map +1 -1
- package/src/db/client.js +1 -1
- package/src/db/client.js.map +1 -1
- package/src/db/migrate-runner.d.ts +38 -0
- package/src/db/migrate-runner.d.ts.map +1 -0
- package/src/db/migrate-runner.js +41 -0
- package/src/db/migrate-runner.js.map +1 -0
- package/src/db/migrate.d.ts +3 -0
- package/src/db/migrate.d.ts.map +1 -1
- package/src/db/migrate.js +6 -5
- package/src/db/migrate.js.map +1 -1
- package/src/db/schema.d.ts +96 -3
- package/src/db/schema.d.ts.map +1 -1
- package/src/db/schema.js +16 -6
- package/src/db/schema.js.map +1 -1
- package/src/engine/dag-engine.d.ts +62 -0
- package/src/engine/dag-engine.d.ts.map +1 -0
- package/src/engine/dag-engine.js +158 -0
- package/src/engine/dag-engine.js.map +1 -0
- package/src/engine/orchestrator.d.ts +14 -0
- package/src/engine/orchestrator.d.ts.map +1 -1
- package/src/engine/orchestrator.js +202 -57
- package/src/engine/orchestrator.js.map +1 -1
- package/src/engine/queue.d.ts +6 -0
- package/src/engine/queue.d.ts.map +1 -1
- package/src/engine/queue.js +8 -0
- package/src/engine/queue.js.map +1 -1
- package/src/index.js +75 -0
- package/src/index.js.map +1 -1
- package/src/providers/anthropic.d.ts.map +1 -1
- package/src/providers/anthropic.js +22 -3
- package/src/providers/anthropic.js.map +1 -1
- package/src/server.d.ts +18 -0
- package/src/server.d.ts.map +1 -1
- package/src/server.js +25 -2
- package/src/server.js.map +1 -1
- package/src/store/task-store.d.ts +7 -1
- package/src/store/task-store.d.ts.map +1 -1
- package/src/store/task-store.js +37 -5
- package/src/store/task-store.js.map +1 -1
- package/src/streaming/event-bus.d.ts +28 -0
- package/src/streaming/event-bus.d.ts.map +1 -0
- package/src/streaming/event-bus.js +12 -0
- package/src/streaming/event-bus.js.map +1 -0
- package/src/streaming/sse-server.d.ts +4 -0
- package/src/streaming/sse-server.d.ts.map +1 -0
- package/src/streaming/sse-server.js +95 -0
- package/src/streaming/sse-server.js.map +1 -0
- package/src/tools/task.d.ts +35 -0
- package/src/tools/task.d.ts.map +1 -1
- package/src/tools/task.js +200 -36
- package/src/tools/task.js.map +1 -1
- package/src/validation/agent.d.ts +3 -0
- package/src/validation/agent.d.ts.map +1 -1
- package/src/validation/agent.js +7 -0
- package/src/validation/agent.js.map +1 -1
- package/src/validation/errors.d.ts +1 -0
- package/src/validation/errors.d.ts.map +1 -1
- package/src/validation/errors.js +1 -0
- package/src/validation/errors.js.map +1 -1
- package/src/validation/execution.d.ts +2 -0
- package/src/validation/execution.d.ts.map +1 -1
- package/src/validation/execution.js +5 -0
- package/src/validation/execution.js.map +1 -1
- package/src/validation/task.d.ts +31 -1
- package/src/validation/task.d.ts.map +1 -1
- package/src/validation/task.js +24 -1
- package/src/validation/task.js.map +1 -1
|
@@ -2,7 +2,57 @@ import { logger } from "../logger.js";
|
|
|
2
2
|
import { ToolError } from "../validation/errors.js";
|
|
3
3
|
import { generateId } from "../utils/ids.js";
|
|
4
4
|
import { nowIso } from "../utils/timestamps.js";
|
|
5
|
+
import { emitTaskEvent } from "../streaming/event-bus.js";
|
|
5
6
|
import { windowMessages } from "../store/session-store.js";
|
|
7
|
+
// ── HITL (Human-in-the-Loop) support ─────────────────────────────────────────
|
|
8
|
+
/** Built-in tool name intercepted before any MCP client dispatch. */
|
|
9
|
+
const HITL_TOOL_NAME = "request_human_input";
|
|
10
|
+
/**
|
|
11
|
+
* Tool definition advertised to the model when `allowHumanInput === true` on
|
|
12
|
+
* the agent and the task is non-ephemeral.
|
|
13
|
+
*
|
|
14
|
+
* Name encodes as `builtin__request_human_input`:
|
|
15
|
+
* - server = "builtin" (both OpenAI and Anthropic split on first "__")
|
|
16
|
+
* - tool = "request_human_input" ← matches HITL_TOOL_NAME
|
|
17
|
+
*
|
|
18
|
+
* The existing Phase-1 intercept (`tc.tool === HITL_TOOL_NAME`) catches it
|
|
19
|
+
* before Phase-2 dispatch, so it is never forwarded to any MCP client.
|
|
20
|
+
*/
|
|
21
|
+
const HITL_BUILTIN_TOOL_DEFINITION = {
|
|
22
|
+
name: "builtin__request_human_input",
|
|
23
|
+
description: "Pause the task to ask the human operator a question. The task suspends " +
|
|
24
|
+
"until a human answers via task_resume. Use when you need human confirmation, " +
|
|
25
|
+
"a decision, or missing information you cannot obtain yourself.",
|
|
26
|
+
inputSchema: {
|
|
27
|
+
type: "object",
|
|
28
|
+
properties: {
|
|
29
|
+
prompt: {
|
|
30
|
+
type: "string",
|
|
31
|
+
description: "The question to ask the human.",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
required: ["prompt"],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Module-scoped resolver map: taskId → resolver function.
|
|
39
|
+
* Populated when an orchestrator suspends awaiting human input.
|
|
40
|
+
* Entries are cleared when resolved or when the task is cancelled.
|
|
41
|
+
*/
|
|
42
|
+
const hitlResolvers = new Map();
|
|
43
|
+
/**
|
|
44
|
+
* Resolve a suspended HITL task with the provided user input.
|
|
45
|
+
* Returns `true` if the resolver was found and called; `false` if the
|
|
46
|
+
* process restarted and the in-memory resolver no longer exists.
|
|
47
|
+
*/
|
|
48
|
+
export function resolveHitl(taskId, userInput) {
|
|
49
|
+
const resolve = hitlResolvers.get(taskId);
|
|
50
|
+
if (!resolve)
|
|
51
|
+
return false;
|
|
52
|
+
hitlResolvers.delete(taskId);
|
|
53
|
+
resolve(userInput);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
6
56
|
/** No-op IHookRegistry used as a fallback when none is provided. */
|
|
7
57
|
const noopHooks = {
|
|
8
58
|
register: () => undefined,
|
|
@@ -10,13 +60,14 @@ const noopHooks = {
|
|
|
10
60
|
};
|
|
11
61
|
export class Orchestrator {
|
|
12
62
|
async run(input) {
|
|
13
|
-
const { executionContext, registry, provider, policy, taskStore, sessionStore, signal, taskId, hooks = noopHooks, } = input;
|
|
63
|
+
const { executionContext, registry, provider, policy, taskStore, sessionStore, signal, taskId, hooks = noopHooks, isEphemeral = false, } = input;
|
|
14
64
|
// Working copy of messages — we append to this as the loop progresses
|
|
15
65
|
const currentMessages = [...input.messages];
|
|
16
66
|
const contextLimit = parseInt(process.env["AGENT_MCP_CONTEXT_LIMIT"] ?? "0", 10);
|
|
17
67
|
try {
|
|
18
68
|
// Mark task as running
|
|
19
69
|
taskStore.updateStatus(taskId, "running");
|
|
70
|
+
emitTaskEvent({ type: "status_change", taskId, status: "running" });
|
|
20
71
|
await hooks.emit("task:start", { executionContext, messages: currentMessages, rootTaskId: executionContext.rootTaskId });
|
|
21
72
|
let finalContent = "";
|
|
22
73
|
// Tool-use loop — break on "completed" stop reason, throw on cancellation/policy
|
|
@@ -33,6 +84,11 @@ export class Orchestrator {
|
|
|
33
84
|
]);
|
|
34
85
|
// Gather available tools from the registry
|
|
35
86
|
const tools = await registry.listAllTools();
|
|
87
|
+
// Append the built-in HITL tool when the agent opts in AND the
|
|
88
|
+
// task is durable (non-ephemeral has a DB row for the resume token).
|
|
89
|
+
if (executionContext.agentDefinition.allowHumanInput === true && !isEphemeral) {
|
|
90
|
+
tools.push(HITL_BUILTIN_TOOL_DEFINITION);
|
|
91
|
+
}
|
|
36
92
|
// Emit MODEL_REQUEST event
|
|
37
93
|
taskStore.appendEvent({
|
|
38
94
|
taskId,
|
|
@@ -140,83 +196,146 @@ export class Orchestrator {
|
|
|
140
196
|
}
|
|
141
197
|
// Process tool calls
|
|
142
198
|
const toolCalls = assistantMessage.toolCalls ?? [];
|
|
143
|
-
|
|
144
|
-
|
|
199
|
+
// Phase 1 — serial pre-dispatch loop (policy + count).
|
|
200
|
+
// Uses variable name `tc` to distinguish from the old sequential per-tool dispatch
|
|
201
|
+
// that has been replaced by Phase 2 (Promise.all concurrent execution below).
|
|
202
|
+
//
|
|
203
|
+
// HITL intercept: `request_human_input` is intercepted here (before Phase 2)
|
|
204
|
+
// and never reaches the MCP client. [inv:request-human-input-intercept]
|
|
205
|
+
const hitlResults = new Map(); // toolCall.id → userInput
|
|
206
|
+
for (const tc of toolCalls) {
|
|
145
207
|
if (signal.aborted) {
|
|
146
208
|
throw new ToolError("PROVIDER_ERROR", "Task was cancelled before tool call");
|
|
147
209
|
}
|
|
148
|
-
|
|
149
|
-
|
|
210
|
+
// ── HITL intercept ──────────────────────────────────────
|
|
211
|
+
if (tc.tool === HITL_TOOL_NAME) {
|
|
212
|
+
// Ephemeral tasks have no session row — cannot persist resume_token
|
|
213
|
+
// (no DB row means task_resume cannot validate it and HITL cannot
|
|
214
|
+
// be resumed after a process restart). Reject via isEphemeral flag.
|
|
215
|
+
if (isEphemeral) {
|
|
216
|
+
throw new ToolError("VALIDATION_ERROR", "request_human_input is not supported for ephemeral tasks");
|
|
217
|
+
}
|
|
218
|
+
// 1. Generate a resumeToken
|
|
219
|
+
const resumeToken = crypto.randomUUID();
|
|
220
|
+
// 2. Persist suspension to DB BEFORE awaiting [inv:resume-token-db-persisted]
|
|
221
|
+
// This ordering ensures the token survives a process restart.
|
|
222
|
+
await taskStore.updateStatus(taskId, "awaiting_input", { resumeToken });
|
|
223
|
+
emitTaskEvent({ type: "status_change", taskId, status: "awaiting_input" });
|
|
224
|
+
// 3. Register resolver and await userInput.
|
|
225
|
+
// Wire into the AbortSignal so task_cancel unblocks this promise —
|
|
226
|
+
// without this, cancelling an awaiting_input task leaves the promise
|
|
227
|
+
// pending forever and the orchestrator's async context leaks.
|
|
228
|
+
let abortHandler;
|
|
229
|
+
const userInput = await new Promise((resolve, reject) => {
|
|
230
|
+
hitlResolvers.set(taskId, resolve);
|
|
231
|
+
abortHandler = () => {
|
|
232
|
+
hitlResolvers.delete(taskId);
|
|
233
|
+
reject(new ToolError("PROVIDER_ERROR", "Task cancelled while awaiting human input"));
|
|
234
|
+
};
|
|
235
|
+
signal.addEventListener("abort", abortHandler, { once: true });
|
|
236
|
+
}).finally(() => {
|
|
237
|
+
// Remove the abort listener once the promise settles so a
|
|
238
|
+
// later cancellation of this (now-resumed) task does not fire
|
|
239
|
+
// a stale handler / leak a listener on the long-lived signal.
|
|
240
|
+
if (abortHandler)
|
|
241
|
+
signal.removeEventListener("abort", abortHandler);
|
|
242
|
+
});
|
|
243
|
+
// 4. Mark running again
|
|
244
|
+
await taskStore.updateStatus(taskId, "running");
|
|
245
|
+
emitTaskEvent({ type: "status_change", taskId, status: "running" });
|
|
246
|
+
// 5. Store userInput to inject as tool result in Phase 3
|
|
247
|
+
hitlResults.set(tc.id, userInput);
|
|
248
|
+
// Return resume token to the caller via event log; continue to next tc
|
|
249
|
+
taskStore.appendEvent({
|
|
250
|
+
taskId,
|
|
251
|
+
type: "TOOL_CALL",
|
|
252
|
+
payload: { tool: HITL_TOOL_NAME, callId: tc.id, resumeToken },
|
|
253
|
+
});
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
// ── end HITL intercept ──────────────────────────────────
|
|
257
|
+
// Resolve the REAL {server,tool}: OpenAI-compatible/local models
|
|
258
|
+
// rewrite '-' → '_' in tool names, so the returned name may not
|
|
259
|
+
// match what we advertised. Resolving here keeps the qualified
|
|
260
|
+
// name correct for the policy delegation check (otherwise a
|
|
261
|
+
// mangled name would bypass the allowedAgents gate) and dispatch.
|
|
262
|
+
const resolved = registry.resolveToolName?.(`${tc.server}__${tc.tool}`) ??
|
|
263
|
+
{ server: tc.server, tool: tc.tool };
|
|
264
|
+
const qualifiedToolName = `${resolved.server}__${resolved.tool}`;
|
|
150
265
|
await hooks.emit("pre:tool_call", {
|
|
151
266
|
executionContext,
|
|
152
267
|
toolName: qualifiedToolName,
|
|
153
|
-
callId:
|
|
154
|
-
toolInput:
|
|
268
|
+
callId: tc.id,
|
|
269
|
+
toolInput: tc.arguments,
|
|
155
270
|
});
|
|
156
|
-
// Policy check before executing the tool
|
|
157
271
|
policy.check({
|
|
158
272
|
executionContext,
|
|
159
273
|
targetTool: qualifiedToolName,
|
|
160
274
|
targetAgentName: qualifiedToolName === "agent-mcp__agent"
|
|
161
|
-
?
|
|
275
|
+
? tc.arguments?.name
|
|
162
276
|
: undefined,
|
|
163
277
|
});
|
|
164
|
-
//
|
|
278
|
+
// Increment AFTER policy.check — see [inv:toolCallCount-increment-after-check].
|
|
279
|
+
// policy.check enforces "allow while toolCallCount < max" (it expects the
|
|
280
|
+
// count of calls already accounted for), so incrementing BEFORE the check
|
|
281
|
+
// fired the cap one call early (effective max-1). Counting per tool here —
|
|
282
|
+
// still inside the serial pre-dispatch loop, not Phase 3 — keeps the limit
|
|
283
|
+
// enforced WITHIN a single concurrent batch: each tool's check sees the
|
|
284
|
+
// running count from prior tools in this same loop.
|
|
285
|
+
executionContext.toolCallCount++;
|
|
286
|
+
}
|
|
287
|
+
// Phase 2 — Promise.all concurrent execution.
|
|
288
|
+
// HITL calls are excluded (already handled in Phase 1 — their results
|
|
289
|
+
// are in hitlResults and will be injected in Phase 3).
|
|
290
|
+
const nonHitlToolCalls = toolCalls.filter(tc => tc.tool !== HITL_TOOL_NAME);
|
|
291
|
+
const toolResults = await Promise.all(nonHitlToolCalls.map(async (toolCall) => {
|
|
292
|
+
const resolved = registry.resolveToolName?.(`${toolCall.server}__${toolCall.tool}`) ??
|
|
293
|
+
{ server: toolCall.server, tool: toolCall.tool };
|
|
294
|
+
const qualifiedToolName = `${resolved.server}__${resolved.tool}`;
|
|
295
|
+
// Emit tool_call SSE event before dispatch
|
|
296
|
+
emitTaskEvent({
|
|
297
|
+
type: "tool_call",
|
|
298
|
+
taskId,
|
|
299
|
+
toolName: qualifiedToolName,
|
|
300
|
+
toolCallId: toolCall.id,
|
|
301
|
+
input: toolCall.arguments,
|
|
302
|
+
});
|
|
165
303
|
taskStore.appendEvent({
|
|
166
304
|
taskId,
|
|
167
305
|
type: "TOOL_CALL",
|
|
168
|
-
payload: {
|
|
169
|
-
tool: qualifiedToolName,
|
|
170
|
-
callId: toolCall.id,
|
|
171
|
-
},
|
|
306
|
+
payload: { tool: qualifiedToolName, callId: toolCall.id },
|
|
172
307
|
});
|
|
173
|
-
logger.info({
|
|
174
|
-
taskId,
|
|
175
|
-
agentName: executionContext.agentName,
|
|
176
|
-
tool: qualifiedToolName,
|
|
177
|
-
callId: toolCall.id,
|
|
178
|
-
}, "TOOL_CALL");
|
|
308
|
+
logger.info({ taskId, agentName: executionContext.agentName, tool: qualifiedToolName, callId: toolCall.id }, "TOOL_CALL");
|
|
179
309
|
let toolResult;
|
|
180
310
|
let isError = false;
|
|
181
311
|
try {
|
|
182
|
-
const client = await registry.getClient(
|
|
183
|
-
toolResult = await client.callTool(
|
|
312
|
+
const client = await registry.getClient(resolved.server);
|
|
313
|
+
toolResult = await client.callTool(resolved.tool, toolCall.arguments);
|
|
184
314
|
}
|
|
185
315
|
catch (error) {
|
|
316
|
+
// Re-throw fatal ToolError codes — these abort the entire task, not just this call.
|
|
317
|
+
// See [inv:fatal-policy-codes] in _shared.md.
|
|
318
|
+
const FATAL_CODES = ["MAX_DEPTH_EXCEEDED", "MAX_TOOL_LOOPS_EXCEEDED", "DELEGATION_NOT_ALLOWED"];
|
|
319
|
+
if (error instanceof ToolError && FATAL_CODES.includes(error.code)) {
|
|
320
|
+
throw error;
|
|
321
|
+
}
|
|
186
322
|
isError = true;
|
|
187
323
|
toolResult = error instanceof Error ? error.message : String(error);
|
|
188
|
-
logger.warn({
|
|
189
|
-
taskId,
|
|
190
|
-
tool: qualifiedToolName,
|
|
191
|
-
error: toolResult,
|
|
192
|
-
}, "TOOL_RESULT error");
|
|
193
|
-
// Re-throw policy violations and cancellation — these are fatal
|
|
194
|
-
if (error instanceof ToolError) {
|
|
195
|
-
const fatalCodes = [
|
|
196
|
-
"MAX_DEPTH_EXCEEDED",
|
|
197
|
-
"MAX_TOOL_LOOPS_EXCEEDED",
|
|
198
|
-
"DELEGATION_NOT_ALLOWED",
|
|
199
|
-
];
|
|
200
|
-
if (fatalCodes.includes(error.code)) {
|
|
201
|
-
throw error;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
324
|
+
logger.warn({ taskId, tool: qualifiedToolName, error: toolResult }, "TOOL_RESULT error");
|
|
204
325
|
}
|
|
205
|
-
// Emit TOOL_RESULT event
|
|
206
326
|
taskStore.appendEvent({
|
|
207
327
|
taskId,
|
|
208
328
|
type: "TOOL_RESULT",
|
|
209
|
-
payload: {
|
|
210
|
-
callId: toolCall.id,
|
|
211
|
-
tool: qualifiedToolName,
|
|
212
|
-
isError,
|
|
213
|
-
},
|
|
329
|
+
payload: { callId: toolCall.id, tool: qualifiedToolName, isError },
|
|
214
330
|
});
|
|
215
|
-
|
|
331
|
+
// Emit tool_result SSE event after result received
|
|
332
|
+
emitTaskEvent({
|
|
333
|
+
type: "tool_result",
|
|
216
334
|
taskId,
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
335
|
+
toolCallId: toolCall.id,
|
|
336
|
+
content: toolResult,
|
|
337
|
+
});
|
|
338
|
+
logger.debug({ taskId, tool: qualifiedToolName, isError }, "TOOL_RESULT");
|
|
220
339
|
await hooks.emit("post:tool_call", {
|
|
221
340
|
executionContext,
|
|
222
341
|
toolName: qualifiedToolName,
|
|
@@ -225,26 +344,40 @@ export class Orchestrator {
|
|
|
225
344
|
result: toolResult,
|
|
226
345
|
isError,
|
|
227
346
|
});
|
|
228
|
-
|
|
347
|
+
return { toolCall, toolResult, isError };
|
|
348
|
+
}));
|
|
349
|
+
// Phase 3 — serial result append (preserves order per [inv:message-order]).
|
|
350
|
+
// Build a lookup for non-HITL results; then iterate original toolCalls
|
|
351
|
+
// order so HITL and non-HITL results are interleaved correctly.
|
|
352
|
+
const toolResultByCallId = new Map(toolResults.map(r => [r.toolCall.id, r]));
|
|
353
|
+
for (const tc of toolCalls) {
|
|
354
|
+
let toolResult;
|
|
355
|
+
let isError = false;
|
|
356
|
+
if (hitlResults.has(tc.id)) {
|
|
357
|
+
// HITL tool: inject userInput as the result
|
|
358
|
+
toolResult = hitlResults.get(tc.id);
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
const r = toolResultByCallId.get(tc.id);
|
|
362
|
+
if (!r)
|
|
363
|
+
continue; // should not happen
|
|
364
|
+
toolResult = r.toolResult;
|
|
365
|
+
isError = r.isError;
|
|
366
|
+
}
|
|
229
367
|
const toolResultMessage = {
|
|
230
368
|
id: generateId(),
|
|
231
369
|
sessionId: executionContext.sessionId,
|
|
232
370
|
role: "tool",
|
|
233
|
-
toolResults: [
|
|
234
|
-
|
|
235
|
-
toolCallId: toolCall.id,
|
|
371
|
+
toolResults: [{
|
|
372
|
+
toolCallId: tc.id, // [inv:call-id-keying]
|
|
236
373
|
result: toolResult,
|
|
237
374
|
isError,
|
|
238
|
-
},
|
|
239
|
-
],
|
|
375
|
+
}],
|
|
240
376
|
createdAt: nowIso(),
|
|
241
377
|
};
|
|
242
378
|
await sessionStore.appendMessage(executionContext.sessionId, toolResultMessage);
|
|
243
379
|
currentMessages.push(toolResultMessage);
|
|
244
380
|
await hooks.emit("message:appended", { executionContext, message: toolResultMessage });
|
|
245
|
-
// Increment toolCallCount AFTER the result is appended
|
|
246
|
-
// so the next policy check sees the updated value
|
|
247
|
-
executionContext.toolCallCount++;
|
|
248
381
|
}
|
|
249
382
|
// Guard: provider signalled tool_calls but sent no tool call blocks —
|
|
250
383
|
// prevents infinite spin on a malformed response.
|
|
@@ -259,6 +392,7 @@ export class Orchestrator {
|
|
|
259
392
|
result: finalContent,
|
|
260
393
|
completedAt: nowIso(),
|
|
261
394
|
});
|
|
395
|
+
emitTaskEvent({ type: "status_change", taskId, status: "completed" });
|
|
262
396
|
taskStore.appendEvent({
|
|
263
397
|
taskId,
|
|
264
398
|
type: "TASK_COMPLETED",
|
|
@@ -266,6 +400,8 @@ export class Orchestrator {
|
|
|
266
400
|
});
|
|
267
401
|
logger.info({ taskId, agentName: executionContext.agentName }, "TASK_COMPLETED");
|
|
268
402
|
await hooks.emit("task:completed", { executionContext, result: finalContent });
|
|
403
|
+
// Emit done on the successful completion path
|
|
404
|
+
emitTaskEvent({ type: "done", taskId, result: finalContent, error: null });
|
|
269
405
|
return { result: finalContent };
|
|
270
406
|
}
|
|
271
407
|
catch (error) {
|
|
@@ -277,19 +413,26 @@ export class Orchestrator {
|
|
|
277
413
|
try {
|
|
278
414
|
taskStore.updateStatus(taskId, "cancelled", {
|
|
279
415
|
cancelledAt: nowIso(),
|
|
416
|
+
// Persist the reason so a later SSE terminal-on-connect read
|
|
417
|
+
// surfaces it instead of error:null (matches the live-bus done).
|
|
418
|
+
error: "Task was cancelled",
|
|
280
419
|
});
|
|
281
420
|
}
|
|
282
421
|
catch {
|
|
283
422
|
// already cancelled — ignore
|
|
284
423
|
}
|
|
424
|
+
emitTaskEvent({ type: "status_change", taskId, status: "cancelled" });
|
|
285
425
|
taskStore.appendEvent({ taskId, type: "TASK_CANCELLED" });
|
|
286
426
|
await hooks.emit("task:cancelled", { executionContext });
|
|
427
|
+
// Emit done on the cancellation path — SSE clients must not hang
|
|
428
|
+
emitTaskEvent({ type: "done", taskId, result: null, error: "Task was cancelled" });
|
|
287
429
|
}
|
|
288
430
|
else {
|
|
289
431
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
290
432
|
taskStore.updateStatus(taskId, "failed", {
|
|
291
433
|
error: errorMessage,
|
|
292
434
|
});
|
|
435
|
+
emitTaskEvent({ type: "status_change", taskId, status: "failed" });
|
|
293
436
|
taskStore.appendEvent({
|
|
294
437
|
taskId,
|
|
295
438
|
type: "TASK_FAILED",
|
|
@@ -297,6 +440,8 @@ export class Orchestrator {
|
|
|
297
440
|
});
|
|
298
441
|
logger.error({ taskId, agentName: executionContext.agentName, error }, "TASK_FAILED");
|
|
299
442
|
await hooks.emit("task:failed", { executionContext, error: errorMessage });
|
|
443
|
+
// Emit done on the failure path
|
|
444
|
+
emitTaskEvent({ type: "done", taskId, result: null, error: errorMessage });
|
|
300
445
|
}
|
|
301
446
|
throw error;
|
|
302
447
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/src/engine/queue.d.ts
CHANGED
|
@@ -19,5 +19,11 @@ export declare class BackgroundQueue {
|
|
|
19
19
|
enqueue(taskId: string, runFn: BackgroundTaskFn): void;
|
|
20
20
|
get pending(): number;
|
|
21
21
|
get size(): number;
|
|
22
|
+
/**
|
|
23
|
+
* Returns a Promise that resolves when the queue has drained to idle
|
|
24
|
+
* (all currently enqueued and running tasks have finished).
|
|
25
|
+
* Delegates to p-queue's own `onIdle()`.
|
|
26
|
+
*/
|
|
27
|
+
onIdle(): Promise<void>;
|
|
22
28
|
}
|
|
23
29
|
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/queue.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,WAAW,CAAC,EAAE,MAAM;IAQhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAetD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/queue.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,WAAW,CAAC,EAAE,MAAM;IAQhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAetD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG1B"}
|
package/src/engine/queue.js
CHANGED
|
@@ -41,5 +41,13 @@ export class BackgroundQueue {
|
|
|
41
41
|
get size() {
|
|
42
42
|
return this.queue.size;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Returns a Promise that resolves when the queue has drained to idle
|
|
46
|
+
* (all currently enqueued and running tasks have finished).
|
|
47
|
+
* Delegates to p-queue's own `onIdle()`.
|
|
48
|
+
*/
|
|
49
|
+
onIdle() {
|
|
50
|
+
return this.queue.onIdle();
|
|
51
|
+
}
|
|
44
52
|
}
|
|
45
53
|
//# sourceMappingURL=queue.js.map
|
package/src/engine/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/queue.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IACP,KAAK,CAAS;IAE/B,YAAY,WAAoB;QAC5B,MAAM,mBAAmB,GACrB,WAAW;YACX,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,MAAc,EAAE,KAAuB;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACrD,IAAI,CAAC;gBACD,MAAM,KAAK,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,gEAAgE;gBAChE,yEAAyE;gBACzE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/queue.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IACP,KAAK,CAAS;IAE/B,YAAY,WAAoB;QAC5B,MAAM,mBAAmB,GACrB,WAAW;YACX,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,MAAc,EAAE,KAAuB;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACrD,IAAI,CAAC;gBACD,MAAM,KAAK,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,gEAAgE;gBAChE,yEAAyE;gBACzE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;CACJ"}
|
package/src/index.js
CHANGED
|
@@ -7,11 +7,17 @@ import { runMigrations } from "./db/migrate.js";
|
|
|
7
7
|
import { logger } from "./logger.js";
|
|
8
8
|
import { AgentStore, SessionStore, TaskStore } from "./store/index.js";
|
|
9
9
|
import { BackgroundQueue } from "./engine/queue.js";
|
|
10
|
+
import { DagEngine } from "./engine/dag-engine.js";
|
|
10
11
|
import { Orchestrator } from "./engine/orchestrator.js";
|
|
11
12
|
import { HookRegistry } from "./engine/hooks.js";
|
|
12
13
|
import { PolicyEngine } from "./engine/policy.js";
|
|
13
14
|
import { UsagePlugin } from "./plugins/index.js";
|
|
14
15
|
import { startServer } from "./server.js";
|
|
16
|
+
import { startSseServer } from "./streaming/sse-server.js";
|
|
17
|
+
import { enqueueExistingTask } from "./tools/task.js";
|
|
18
|
+
import { tasksTable } from "./db/schema.js";
|
|
19
|
+
import { eq } from "drizzle-orm";
|
|
20
|
+
import { ToolError } from "./validation/errors.js";
|
|
15
21
|
async function main() {
|
|
16
22
|
// Run DB migrations synchronously before advertising tools
|
|
17
23
|
runMigrations();
|
|
@@ -39,6 +45,26 @@ async function main() {
|
|
|
39
45
|
.map(s => s.trim())
|
|
40
46
|
.filter(Boolean),
|
|
41
47
|
});
|
|
48
|
+
// Build DagEngine with an injected dispatchFn closure.
|
|
49
|
+
//
|
|
50
|
+
// The closure avoids a circular import between dag-engine.ts and tools/task.ts:
|
|
51
|
+
// DagEngine dispatches waiting→pending tasks by calling dispatchFn(taskId) rather
|
|
52
|
+
// than importing enqueueExistingTask directly. The closure captures `taskDeps`
|
|
53
|
+
// which is populated after startServer resolves (below).
|
|
54
|
+
//
|
|
55
|
+
// dispatchFn is only invoked when DagEngine.dispatchReady() finds a ready task,
|
|
56
|
+
// which always happens AFTER server startup, so `taskDeps` is guaranteed to be
|
|
57
|
+
// set by the time the closure executes.
|
|
58
|
+
let taskDeps;
|
|
59
|
+
const dispatchFn = async (taskId) => {
|
|
60
|
+
if (!taskDeps) {
|
|
61
|
+
throw new Error(`DagEngine.dispatchFn called before server initialised (taskId=${taskId})`);
|
|
62
|
+
}
|
|
63
|
+
await enqueueExistingTask(taskId, taskDeps);
|
|
64
|
+
};
|
|
65
|
+
const dagEngine = new DagEngine(dbAny, queue, taskStore, dispatchFn);
|
|
66
|
+
// Start SSE server alongside MCP server — shares taskStore for terminal-on-connect checks.
|
|
67
|
+
const sseServer = startSseServer(taskStore);
|
|
42
68
|
const { close } = await startServer({
|
|
43
69
|
agentStore,
|
|
44
70
|
sessionStore,
|
|
@@ -48,10 +74,59 @@ async function main() {
|
|
|
48
74
|
policy,
|
|
49
75
|
hooks,
|
|
50
76
|
db: dbAny,
|
|
77
|
+
dagEngine,
|
|
51
78
|
});
|
|
79
|
+
// Startup re-enqueue scan: recover tasks that were transitioned to "pending"
|
|
80
|
+
// by DagEngine.dispatchReady() but lost their queue slot due to a process
|
|
81
|
+
// crash between the DB UPDATE and queue.enqueue(). Safe to run every startup
|
|
82
|
+
// because the queue is idempotent — already-running tasks are just re-queued.
|
|
83
|
+
//
|
|
84
|
+
// taskDeps must be set before the orphan scan so dispatchFn can call
|
|
85
|
+
// enqueueExistingTask.
|
|
86
|
+
//
|
|
87
|
+
// NOTE: inProcessDescriptors and inProcessHandler are not available here
|
|
88
|
+
// (they are local to server.ts). Dag-dispatched tasks do NOT support
|
|
89
|
+
// in-process recursive calls at the dispatch level — they can use in-process
|
|
90
|
+
// tools once running via the normal orchestrator path through server.ts.
|
|
91
|
+
// Pass empty stubs: the orchestrator builds its own registry per task.
|
|
92
|
+
taskDeps = {
|
|
93
|
+
agentStore,
|
|
94
|
+
sessionStore,
|
|
95
|
+
taskStore,
|
|
96
|
+
orchestrator,
|
|
97
|
+
queue,
|
|
98
|
+
policy,
|
|
99
|
+
hooks,
|
|
100
|
+
selfUrl: undefined,
|
|
101
|
+
inProcessDescriptors: [],
|
|
102
|
+
inProcessHandler: async () => {
|
|
103
|
+
throw new ToolError("VALIDATION_ERROR", "in-process tools unavailable during dag dispatch");
|
|
104
|
+
},
|
|
105
|
+
db: dbAny,
|
|
106
|
+
dagEngine,
|
|
107
|
+
};
|
|
108
|
+
const orphanedPending = dbAny
|
|
109
|
+
.select()
|
|
110
|
+
.from(tasksTable)
|
|
111
|
+
.where(eq(tasksTable.status, "pending"))
|
|
112
|
+
.all();
|
|
113
|
+
if (orphanedPending.length > 0) {
|
|
114
|
+
logger.info({ count: orphanedPending.length }, "Re-enqueueing orphaned pending tasks");
|
|
115
|
+
for (const row of orphanedPending) {
|
|
116
|
+
try {
|
|
117
|
+
await enqueueExistingTask(row.id, taskDeps);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
logger.warn({ taskId: row.id, err }, "Failed to re-enqueue orphaned task");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
52
124
|
const shutdown = async (signal) => {
|
|
53
125
|
logger.info({ signal }, "Server shutdown");
|
|
54
126
|
await close();
|
|
127
|
+
// Await SSE drain before exiting — close() is callback-based, so calling
|
|
128
|
+
// process.exit on the next line would race the drain.
|
|
129
|
+
await new Promise(resolve => sseServer.close(() => resolve()));
|
|
55
130
|
process.exit(0);
|
|
56
131
|
};
|
|
57
132
|
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ai/agent-mcp/src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAEvB,kFAAkF;AAClF,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAQ,CAChD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,MAAM,EACrD,EAAE,CACL,CAAC;AAEF,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ai/agent-mcp/src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/providers/anthropic.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,wBAAwB,CAAC;AAIhF,OAAO,KAAK,EACR,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EAEvB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/providers/anthropic.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,wBAAwB,CAAC;AAIhF,OAAO,KAAK,EACR,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EAEvB,MAAM,YAAY,CAAC;AA+PpB,qBAAa,iBAAkB,YAAW,WAAW;IACjD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,2EAA2E;IAC3E,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IAmC5D,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAwJ1E"}
|