@adhd/agent-mcp 0.0.9 → 1.0.1
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/0004_brief_shocker.sql +4 -0
- package/drizzle/0005_clear_lenny_balinger.sql +25 -0
- package/drizzle/meta/0004_snapshot.json +551 -0
- package/drizzle/meta/0005_snapshot.json +545 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +1 -1
- 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 +401 -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/http-client.d.ts +1 -1
- package/src/clients/http-client.d.ts.map +1 -1
- package/src/clients/http-client.js +4 -2
- package/src/clients/http-client.js.map +1 -1
- package/src/clients/in-process.d.ts +1 -1
- package/src/clients/in-process.d.ts.map +1 -1
- package/src/clients/in-process.js +6 -1
- package/src/clients/in-process.js.map +1 -1
- 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/stdio-client.d.ts +1 -1
- package/src/clients/stdio-client.d.ts.map +1 -1
- package/src/clients/stdio-client.js +9 -3
- package/src/clients/stdio-client.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/clients/types.d.ts +5 -1
- package/src/clients/types.d.ts.map +1 -1
- 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 +206 -58
- 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 +16 -0
- package/src/streaming/sse-server.d.ts.map +1 -0
- package/src/streaming/sse-server.js +118 -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,
|
|
@@ -63,7 +119,7 @@ export class Orchestrator {
|
|
|
63
119
|
executeTool: async (server, tool, args) => {
|
|
64
120
|
const client = await registry.getClient(server);
|
|
65
121
|
try {
|
|
66
|
-
const result = await client.callTool(tool, args);
|
|
122
|
+
const result = await client.callTool(tool, args, composedSignal);
|
|
67
123
|
return { result, isError: false };
|
|
68
124
|
}
|
|
69
125
|
catch (error) {
|
|
@@ -140,83 +196,149 @@ 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
|
-
|
|
312
|
+
const client = await registry.getClient(resolved.server);
|
|
313
|
+
// Thread the composed task-cancel/timeout signal so a
|
|
314
|
+
// cancel mid-batch interrupts this in-flight call
|
|
315
|
+
// instead of waiting for the whole batch (DEBT-003).
|
|
316
|
+
toolResult = await client.callTool(resolved.tool, toolCall.arguments, composedSignal);
|
|
184
317
|
}
|
|
185
318
|
catch (error) {
|
|
319
|
+
// Re-throw fatal ToolError codes — these abort the entire task, not just this call.
|
|
320
|
+
// See [inv:fatal-policy-codes] in _shared.md.
|
|
321
|
+
const FATAL_CODES = ["MAX_DEPTH_EXCEEDED", "MAX_TOOL_LOOPS_EXCEEDED", "DELEGATION_NOT_ALLOWED"];
|
|
322
|
+
if (error instanceof ToolError && FATAL_CODES.includes(error.code)) {
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
186
325
|
isError = true;
|
|
187
326
|
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
|
-
}
|
|
327
|
+
logger.warn({ taskId, tool: qualifiedToolName, error: toolResult }, "TOOL_RESULT error");
|
|
204
328
|
}
|
|
205
|
-
// Emit TOOL_RESULT event
|
|
206
329
|
taskStore.appendEvent({
|
|
207
330
|
taskId,
|
|
208
331
|
type: "TOOL_RESULT",
|
|
209
|
-
payload: {
|
|
210
|
-
callId: toolCall.id,
|
|
211
|
-
tool: qualifiedToolName,
|
|
212
|
-
isError,
|
|
213
|
-
},
|
|
332
|
+
payload: { callId: toolCall.id, tool: qualifiedToolName, isError },
|
|
214
333
|
});
|
|
215
|
-
|
|
334
|
+
// Emit tool_result SSE event after result received
|
|
335
|
+
emitTaskEvent({
|
|
336
|
+
type: "tool_result",
|
|
216
337
|
taskId,
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
338
|
+
toolCallId: toolCall.id,
|
|
339
|
+
content: toolResult,
|
|
340
|
+
});
|
|
341
|
+
logger.debug({ taskId, tool: qualifiedToolName, isError }, "TOOL_RESULT");
|
|
220
342
|
await hooks.emit("post:tool_call", {
|
|
221
343
|
executionContext,
|
|
222
344
|
toolName: qualifiedToolName,
|
|
@@ -225,26 +347,40 @@ export class Orchestrator {
|
|
|
225
347
|
result: toolResult,
|
|
226
348
|
isError,
|
|
227
349
|
});
|
|
228
|
-
|
|
350
|
+
return { toolCall, toolResult, isError };
|
|
351
|
+
}));
|
|
352
|
+
// Phase 3 — serial result append (preserves order per [inv:message-order]).
|
|
353
|
+
// Build a lookup for non-HITL results; then iterate original toolCalls
|
|
354
|
+
// order so HITL and non-HITL results are interleaved correctly.
|
|
355
|
+
const toolResultByCallId = new Map(toolResults.map(r => [r.toolCall.id, r]));
|
|
356
|
+
for (const tc of toolCalls) {
|
|
357
|
+
let toolResult;
|
|
358
|
+
let isError = false;
|
|
359
|
+
if (hitlResults.has(tc.id)) {
|
|
360
|
+
// HITL tool: inject userInput as the result
|
|
361
|
+
toolResult = hitlResults.get(tc.id);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
const r = toolResultByCallId.get(tc.id);
|
|
365
|
+
if (!r)
|
|
366
|
+
continue; // should not happen
|
|
367
|
+
toolResult = r.toolResult;
|
|
368
|
+
isError = r.isError;
|
|
369
|
+
}
|
|
229
370
|
const toolResultMessage = {
|
|
230
371
|
id: generateId(),
|
|
231
372
|
sessionId: executionContext.sessionId,
|
|
232
373
|
role: "tool",
|
|
233
|
-
toolResults: [
|
|
234
|
-
|
|
235
|
-
toolCallId: toolCall.id,
|
|
374
|
+
toolResults: [{
|
|
375
|
+
toolCallId: tc.id, // [inv:call-id-keying]
|
|
236
376
|
result: toolResult,
|
|
237
377
|
isError,
|
|
238
|
-
},
|
|
239
|
-
],
|
|
378
|
+
}],
|
|
240
379
|
createdAt: nowIso(),
|
|
241
380
|
};
|
|
242
381
|
await sessionStore.appendMessage(executionContext.sessionId, toolResultMessage);
|
|
243
382
|
currentMessages.push(toolResultMessage);
|
|
244
383
|
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
384
|
}
|
|
249
385
|
// Guard: provider signalled tool_calls but sent no tool call blocks —
|
|
250
386
|
// prevents infinite spin on a malformed response.
|
|
@@ -259,6 +395,7 @@ export class Orchestrator {
|
|
|
259
395
|
result: finalContent,
|
|
260
396
|
completedAt: nowIso(),
|
|
261
397
|
});
|
|
398
|
+
emitTaskEvent({ type: "status_change", taskId, status: "completed" });
|
|
262
399
|
taskStore.appendEvent({
|
|
263
400
|
taskId,
|
|
264
401
|
type: "TASK_COMPLETED",
|
|
@@ -266,6 +403,8 @@ export class Orchestrator {
|
|
|
266
403
|
});
|
|
267
404
|
logger.info({ taskId, agentName: executionContext.agentName }, "TASK_COMPLETED");
|
|
268
405
|
await hooks.emit("task:completed", { executionContext, result: finalContent });
|
|
406
|
+
// Emit done on the successful completion path
|
|
407
|
+
emitTaskEvent({ type: "done", taskId, result: finalContent, error: null });
|
|
269
408
|
return { result: finalContent };
|
|
270
409
|
}
|
|
271
410
|
catch (error) {
|
|
@@ -277,19 +416,26 @@ export class Orchestrator {
|
|
|
277
416
|
try {
|
|
278
417
|
taskStore.updateStatus(taskId, "cancelled", {
|
|
279
418
|
cancelledAt: nowIso(),
|
|
419
|
+
// Persist the reason so a later SSE terminal-on-connect read
|
|
420
|
+
// surfaces it instead of error:null (matches the live-bus done).
|
|
421
|
+
error: "Task was cancelled",
|
|
280
422
|
});
|
|
281
423
|
}
|
|
282
424
|
catch {
|
|
283
425
|
// already cancelled — ignore
|
|
284
426
|
}
|
|
427
|
+
emitTaskEvent({ type: "status_change", taskId, status: "cancelled" });
|
|
285
428
|
taskStore.appendEvent({ taskId, type: "TASK_CANCELLED" });
|
|
286
429
|
await hooks.emit("task:cancelled", { executionContext });
|
|
430
|
+
// Emit done on the cancellation path — SSE clients must not hang
|
|
431
|
+
emitTaskEvent({ type: "done", taskId, result: null, error: "Task was cancelled" });
|
|
287
432
|
}
|
|
288
433
|
else {
|
|
289
434
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
290
435
|
taskStore.updateStatus(taskId, "failed", {
|
|
291
436
|
error: errorMessage,
|
|
292
437
|
});
|
|
438
|
+
emitTaskEvent({ type: "status_change", taskId, status: "failed" });
|
|
293
439
|
taskStore.appendEvent({
|
|
294
440
|
taskId,
|
|
295
441
|
type: "TASK_FAILED",
|
|
@@ -297,6 +443,8 @@ export class Orchestrator {
|
|
|
297
443
|
});
|
|
298
444
|
logger.error({ taskId, agentName: executionContext.agentName, error }, "TASK_FAILED");
|
|
299
445
|
await hooks.emit("task:failed", { executionContext, error: errorMessage });
|
|
446
|
+
// Emit done on the failure path
|
|
447
|
+
emitTaskEvent({ type: "done", taskId, result: null, error: errorMessage });
|
|
300
448
|
}
|
|
301
449
|
throw error;
|
|
302
450
|
}
|
|
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAM1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,gFAAgF;AAEhF,qEAAqE;AACrE,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,4BAA4B,GAAG;IACjC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACP,yEAAyE;QACzE,+EAA+E;QAC/E,gEAAgE;IACpE,WAAW,EAAE;QACT,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;aAChD;SACJ;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACvB;CACK,CAAC;AAEX;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuC,CAAC;AAErE;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,SAAiB;IACzD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC;AAChB,CAAC;AAyBD,oEAAoE;AACpE,MAAM,SAAS,GAAkB;IAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;IACzB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;CAC9B,CAAC;AAMF,MAAM,OAAO,YAAY;IACrB,KAAK,CAAC,GAAG,CAAC,KAA2B;QACjC,MAAM,EACF,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,MAAM,EACN,MAAM,EACN,KAAK,GAAG,SAAS,EACjB,WAAW,GAAG,KAAK,GACtB,GAAG,KAAK,CAAC;QAEV,sEAAsE;QACtE,MAAM,eAAe,GAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAEjF,IAAI,CAAC;YACD,uBAAuB;YACvB,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1C,aAAa,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACpE,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;YAEzH,IAAI,YAAY,GAAG,EAAE,CAAC;YAEtB,iFAAiF;YACjF,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,OAAO,OAAO,EAAE,CAAC;gBACb,sDAAsD;gBACtD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;gBAChE,CAAC;gBAED,sEAAsE;gBACtE,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC;oBACnC,MAAM;oBACN,WAAW,CAAC,OAAO,CACf,gBAAgB,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAChE;iBACJ,CAAC,CAAC;gBAEH,2CAA2C;gBAC3C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAE5C,+DAA+D;gBAC/D,qEAAqE;gBACrE,IAAI,gBAAgB,CAAC,eAAe,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC5E,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAC7C,CAAC;gBAED,2BAA2B;gBAC3B,SAAS,CAAC,WAAW,CAAC;oBAClB,MAAM;oBACN,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE;iBAC7E,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CACR;oBACI,MAAM;oBACN,SAAS,EAAE,gBAAgB,CAAC,SAAS;oBACrC,SAAS,EAAE,gBAAgB,CAAC,SAAS;oBACrC,YAAY,EAAE,eAAe,CAAC,MAAM;iBACvC,EACD,eAAe,CAClB,CAAC;gBAEF,8BAA8B;gBAC9B,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;gBAE9F,wBAAwB;gBACxB,IAAI,gBAAgB,CAAC;gBACrB,IAAI,CAAC;oBACD,MAAM,cAAc,GAAG,YAAY,GAAG,CAAC;wBACnC,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;wBAC/C,CAAC,CAAC,eAAe,CAAC;oBACtB,gBAAgB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;wBACnC,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;wBAC3C,MAAM,EAAE,cAAc;wBACtB,gEAAgE;wBAChE,+DAA+D;wBAC/D,oEAAoE;wBACpE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;4BACtC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;4BAChD,IAAI,CAAC;gCACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;gCACjE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;4BACtC,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACb,OAAO;oCACH,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oCAC9D,OAAO,EAAE,IAAI;iCAChB,CAAC;4BACN,CAAC;wBACL,CAAC;qBACJ,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,qDAAqD;oBACrD,8EAA8E;oBAC9E,sFAAsF;oBACtF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;oBAChE,CAAC;oBACD,IACI,cAAc,CAAC,OAAO;wBACtB,CAAC,KAAK,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,EAC5F,CAAC;wBACC,MAAM,EAAE,GAAG,gBAAgB,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC;wBACzE,MAAM,IAAI,SAAS,CACf,kBAAkB,EAClB,iCAAiC,EAAE,wDAAwD,CAC9F,CAAC;oBACN,CAAC;oBACD,IACI,KAAK,YAAY,KAAK,IAAI,CACtB,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,qBAAqB;wBAChD,CAAC,QAAQ,IAAI,KAAK,IAAK,KAA6B,CAAC,MAAM,KAAK,GAAG,CAAC,CACvE,EACH,CAAC;wBACC,MAAM,IAAI,SAAS,CACf,qBAAqB,EACrB,mCAAmC,KAAK,CAAC,OAAO,IAAI;4BACpD,kIAAkI,CACrI,CAAC;oBACN,CAAC;oBACD,IACI,KAAK,YAAY,KAAK,IAAI,CACtB,CAAC,QAAQ,IAAI,KAAK,IAAK,KAA6B,CAAC,MAAM,KAAK,GAAG,CAAC;wBACpE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC;wBACrC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CACjC,EACH,CAAC;wBACC,MAAM,IAAI,SAAS,CACf,uBAAuB,EACvB,iCAAiC,KAAK,CAAC,OAAO,EAAE,CACnD,CAAC;oBACN,CAAC;oBACD,IACI,KAAK,YAAY,KAAK,IAAI,CACtB,CAAC,MAAM,IAAI,KAAK,IAAK,KAA2B,CAAC,IAAI,KAAK,yBAAyB,CAAC;wBACpF,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,yBAAyB,CAAC;wBAClD,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAChD,EACH,CAAC;wBACC,MAAM,IAAI,SAAS,CACf,yBAAyB,EACzB,sFAAsF,CACzF,CAAC;oBACN,CAAC;oBACD,MAAM,IAAI,SAAS,CACf,gBAAgB,EAChB,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACpF,CAAC;gBACN,CAAC;gBAED,MAAM,gBAAgB,GAAY;oBAC9B,GAAG,gBAAgB,CAAC,OAAO;oBAC3B,SAAS,EAAE,gBAAgB,CAAC,SAAS;iBACxC,CAAC;gBAEF,2CAA2C;gBAC3C,MAAM,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBAC/E,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACvC,MAAM,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE;oBACpC,gBAAgB;oBAChB,UAAU,EAAE,gBAAgB,CAAC,UAAU;oBACvC,aAAa,EAAE,gBAAgB,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;oBACtD,UAAU,EAAE,gBAAgB,CAAC,KAAK;iBACrC,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAEtF,4BAA4B;gBAC5B,SAAS,CAAC,WAAW,CAAC;oBAClB,MAAM;oBACN,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE;wBACL,UAAU,EAAE,gBAAgB,CAAC,UAAU;wBACvC,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,OAAO;wBACtC,aAAa,EAAE,gBAAgB,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;qBACzD;iBACJ,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CACR;oBACI,MAAM;oBACN,SAAS,EAAE,gBAAgB,CAAC,SAAS;oBACrC,UAAU,EAAE,gBAAgB,CAAC,UAAU;iBAC1C,EACD,gBAAgB,CACnB,CAAC;gBAEF,IAAI,gBAAgB,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;oBAC9C,YAAY,GAAG,gBAAgB,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC9C,OAAO,GAAG,KAAK,CAAC;oBAChB,SAAS;gBACb,CAAC;gBAED,qBAAqB;gBACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,IAAI,EAAE,CAAC;gBAEnD,uDAAuD;gBACvD,mFAAmF;gBACnF,8EAA8E;gBAC9E,EAAE;gBACF,6EAA6E;gBAC7E,wEAAwE;gBACxE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,0BAA0B;gBACzE,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;oBACzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;oBACjF,CAAC;oBAED,2DAA2D;oBAC3D,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;wBAC7B,oEAAoE;wBACpE,kEAAkE;wBAClE,oEAAoE;wBACpE,IAAI,WAAW,EAAE,CAAC;4BACd,MAAM,IAAI,SAAS,CACf,kBAAkB,EAClB,0DAA0D,CAC7D,CAAC;wBACN,CAAC;wBAED,4BAA4B;wBAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;wBAExC,8EAA8E;wBAC9E,iEAAiE;wBACjE,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;wBACxE,aAAa,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;wBAE3E,4CAA4C;wBAC5C,sEAAsE;wBACtE,wEAAwE;wBACxE,iEAAiE;wBACjE,IAAI,YAAsC,CAAC;wBAC3C,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;4BAC5D,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;4BACnC,YAAY,GAAG,GAAG,EAAE;gCAChB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gCAC7B,MAAM,CAAC,IAAI,SAAS,CAAC,gBAAgB,EAAE,2CAA2C,CAAC,CAAC,CAAC;4BACzF,CAAC,CAAC;4BACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;wBACnE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;4BACZ,0DAA0D;4BAC1D,8DAA8D;4BAC9D,8DAA8D;4BAC9D,IAAI,YAAY;gCAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;wBACxE,CAAC,CAAC,CAAC;wBAEH,wBAAwB;wBACxB,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;wBAChD,aAAa,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;wBAEpE,yDAAyD;wBACzD,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;wBAElC,uEAAuE;wBACvE,SAAS,CAAC,WAAW,CAAC;4BAClB,MAAM;4BACN,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE;yBAChE,CAAC,CAAC;wBACH,SAAS;oBACb,CAAC;oBACD,2DAA2D;oBAE3D,iEAAiE;oBACjE,gEAAgE;oBAChE,+DAA+D;oBAC/D,4DAA4D;oBAC5D,kEAAkE;oBAClE,MAAM,QAAQ,GACV,QAAQ,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;wBACtD,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;oBACzC,MAAM,iBAAiB,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACjE,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC9B,gBAAgB;wBAChB,QAAQ,EAAE,iBAAiB;wBAC3B,MAAM,EAAE,EAAE,CAAC,EAAE;wBACb,SAAS,EAAE,EAAE,CAAC,SAAS;qBAC1B,CAAC,CAAC;oBACH,MAAM,CAAC,KAAK,CAAC;wBACT,gBAAgB;wBAChB,UAAU,EAAE,iBAAiB;wBAC7B,eAAe,EACX,iBAAiB,KAAK,kBAAkB;4BACpC,CAAC,CAAE,EAAE,CAAC,SAA+B,EAAE,IAAI;4BAC3C,CAAC,CAAC,SAAS;qBACtB,CAAC,CAAC;oBACH,gFAAgF;oBAChF,0EAA0E;oBAC1E,0EAA0E;oBAC1E,2EAA2E;oBAC3E,2EAA2E;oBAC3E,wEAAwE;oBACxE,oDAAoD;oBACpD,gBAAgB,CAAC,aAAa,EAAE,CAAC;gBACrC,CAAC;gBAED,8CAA8C;gBAC9C,sEAAsE;gBACtE,uDAAuD;gBACvD,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;gBAC5E,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;oBACpC,MAAM,QAAQ,GACV,QAAQ,CAAC,eAAe,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAClE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACrD,MAAM,iBAAiB,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAEjE,2CAA2C;oBAC3C,aAAa,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,MAAM;wBACN,QAAQ,EAAE,iBAAiB;wBAC3B,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,KAAK,EAAE,QAAQ,CAAC,SAAS;qBAC5B,CAAC,CAAC;oBAEH,SAAS,CAAC,WAAW,CAAC;wBAClB,MAAM;wBACN,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE;qBAC5D,CAAC,CAAC;oBAEH,MAAM,CAAC,IAAI,CACP,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,EAC/F,WAAW,CACd,CAAC;oBAEF,IAAI,UAAmB,CAAC;oBACxB,IAAI,OAAO,GAAG,KAAK,CAAC;oBACpB,IAAI,CAAC;wBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACzD,sDAAsD;wBACtD,kDAAkD;wBAClD,qDAAqD;wBACrD,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;oBAC1F,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACb,oFAAoF;wBACpF,8CAA8C;wBAC9C,MAAM,WAAW,GAAG,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,wBAAwB,CAAC,CAAC;wBAChG,IAAI,KAAK,YAAY,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;4BACjE,MAAM,KAAK,CAAC;wBAChB,CAAC;wBACD,OAAO,GAAG,IAAI,CAAC;wBACf,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACpE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,mBAAmB,CAAC,CAAC;oBAC7F,CAAC;oBAED,SAAS,CAAC,WAAW,CAAC;wBAClB,MAAM;wBACN,IAAI,EAAE,aAAa;wBACnB,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE;qBACrE,CAAC,CAAC;oBAEH,mDAAmD;oBACnD,aAAa,CAAC;wBACV,IAAI,EAAE,aAAa;wBACnB,MAAM;wBACN,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,OAAO,EAAE,UAAU;qBACtB,CAAC,CAAC;oBAEH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;oBAE1E,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE;wBAC/B,gBAAgB;wBAChB,QAAQ,EAAE,iBAAiB;wBAC3B,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,MAAM,EAAE,UAAU;wBAClB,OAAO;qBACV,CAAC,CAAC;oBAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;gBAC7C,CAAC,CAAC,CACL,CAAC;gBAEF,4EAA4E;gBAC5E,uEAAuE;gBACvE,gEAAgE;gBAChE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;oBACzB,IAAI,UAAmB,CAAC;oBACxB,IAAI,OAAO,GAAG,KAAK,CAAC;oBAEpB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;wBACzB,4CAA4C;wBAC5C,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACxC,CAAC;yBAAM,CAAC;wBACJ,MAAM,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACxC,IAAI,CAAC,CAAC;4BAAE,SAAS,CAAC,oBAAoB;wBACtC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;wBAC1B,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;oBACxB,CAAC;oBAED,MAAM,iBAAiB,GAAY;wBAC/B,EAAE,EAAE,UAAU,EAAE;wBAChB,SAAS,EAAE,gBAAgB,CAAC,SAAS;wBACrC,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,CAAC;gCACV,UAAU,EAAE,EAAE,CAAC,EAAE,EAAG,uBAAuB;gCAC3C,MAAM,EAAE,UAAU;gCAClB,OAAO;6BACV,CAAC;wBACF,SAAS,EAAE,MAAM,EAAE;qBACtB,CAAC;oBACF,MAAM,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;oBAChF,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACxC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAC3F,CAAC;gBAED,sEAAsE;gBACtE,kDAAkD;gBAClD,IACI,gBAAgB,CAAC,UAAU,KAAK,YAAY;oBAC5C,CAAC,gBAAgB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EACjD,CAAC;oBACC,YAAY,GAAG,gBAAgB,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC9C,OAAO,GAAG,KAAK,CAAC;gBACpB,CAAC;YACL,CAAC;YAED,8BAA8B;YAC9B,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE;gBACxC,MAAM,EAAE,YAAY;gBACpB,WAAW,EAAE,MAAM,EAAE;aACxB,CAAC,CAAC;YACH,aAAa,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YAEtE,SAAS,CAAC,WAAW,CAAC;gBAClB,MAAM;gBACN,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;aACpC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CACP,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,EACjD,gBAAgB,CACnB,CAAC;YAEF,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;YAE/E,8CAA8C;YAC9C,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAE3E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,wDAAwD;YACxD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;YAEnC,IAAI,WAAW,EAAE,CAAC;gBACd,6DAA6D;gBAC7D,4CAA4C;gBAC5C,IAAI,CAAC;oBACD,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE;wBACxC,WAAW,EAAE,MAAM,EAAE;wBACrB,6DAA6D;wBAC7D,iEAAiE;wBACjE,KAAK,EAAE,oBAAoB;qBAC9B,CAAC,CAAC;gBACP,CAAC;gBAAC,MAAM,CAAC;oBACL,6BAA6B;gBACjC,CAAC;gBACD,aAAa,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAEtE,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAEzD,iEAAiE;gBACjE,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACvF,CAAC;iBAAM,CAAC;gBACJ,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAE5E,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACrC,KAAK,EAAE,YAAY;iBACtB,CAAC,CAAC;gBACH,aAAa,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEnE,SAAS,CAAC,WAAW,CAAC;oBAClB,MAAM;oBACN,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;iBACnC,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CACR,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EACxD,aAAa,CAChB,CAAC;gBACF,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;gBAE3E,gCAAgC;gBAChC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,2CAA2C;YAC3C,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1B,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;CACJ"}
|
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"}
|