@adhd/agent-mcp 0.0.9 → 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/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 +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
package/src/db/schema.js
CHANGED
|
@@ -55,15 +55,19 @@ export const messagesTable = sqliteTable("messages", {
|
|
|
55
55
|
// ──────────────────────────────────────────────
|
|
56
56
|
export const tasksTable = sqliteTable("tasks", {
|
|
57
57
|
id: text("id").primaryKey(),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
// Nullable: ephemeral tasks (agent_name one-shot mode) have no session row.
|
|
59
|
+
// No FK reference: the session may not exist (ephemeral) or may have been
|
|
60
|
+
// deleted; we never want a cascade-delete triggered by session cleanup to
|
|
61
|
+
// destroy task history.
|
|
62
|
+
sessionId: text("session_id"),
|
|
63
63
|
parentTaskId: text("parent_task_id"),
|
|
64
|
+
// SQLite boolean: 0 = session-backed task, 1 = ephemeral one-shot task.
|
|
65
|
+
// Ephemeral tasks persist a tasks row + task_events + task_usage but
|
|
66
|
+
// have no sessions row and no messages rows.
|
|
67
|
+
isEphemeral: integer("is_ephemeral").notNull().default(0),
|
|
64
68
|
recursionDepth: integer("recursion_depth").notNull().default(0),
|
|
65
69
|
status: text("status", {
|
|
66
|
-
enum: ["pending", "running", "completed", "failed", "cancelled"]
|
|
70
|
+
enum: ["pending", "running", "completed", "failed", "cancelled", "waiting", "awaiting_input"]
|
|
67
71
|
}).notNull().default("pending"),
|
|
68
72
|
prompt: text("prompt").notNull(),
|
|
69
73
|
result: text("result"),
|
|
@@ -72,6 +76,12 @@ export const tasksTable = sqliteTable("tasks", {
|
|
|
72
76
|
updatedAt: text("updated_at").notNull(),
|
|
73
77
|
completedAt: text("completed_at"),
|
|
74
78
|
cancelledAt: text("cancelled_at"),
|
|
79
|
+
// Dependency DAG fields (consumed by task-dependency-dag plan)
|
|
80
|
+
depends_on: text("depends_on"), // nullable JSON array of upstream task IDs
|
|
81
|
+
on_upstream_failure: text("on_upstream_failure"), // nullable: 'fail'|'skip' (default: 'fail')
|
|
82
|
+
inputs: text("inputs"), // nullable JSON blob: upstream taskId→result map
|
|
83
|
+
// HITL suspension field (consumed by hitl-interrupts plan)
|
|
84
|
+
resume_token: text("resume_token"), // nullable UUID written before await
|
|
75
85
|
});
|
|
76
86
|
// ──────────────────────────────────────────────
|
|
77
87
|
// task_events
|
package/src/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EACL,OAAO,EACP,WAAW,EACX,IAAI,EACP,MAAM,yBAAyB,CAAC;AAEjC,iDAAiD;AACjD,SAAS;AACT,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE;IAC7C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;IAC/B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,6BAA6B;IAC3D,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACvC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC1C,CAAC,CAAC;AAEH,iDAAiD;AACjD,WAAW;AACX,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,EAAE;IACjD,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAC3B,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;SACxB,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;QAChC,QAAQ,EAAE,SAAS;KACtB,CAAC;IACN,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;IAChD,kEAAkE;IAClE,6DAA6D;IAC7D,8CAA8C;IAC9C,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE;QACnB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC7B,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACvC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACvC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;CAC9B,CAAC,CAAC;AAEH,iDAAiD;AACjD,WAAW;AACX,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,EAAE;IACjD,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAC3B,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;SACxB,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE;QAChC,QAAQ,EAAE,SAAS;KACtB,CAAC;IACN,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACf,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;KAChD,CAAC,CAAC,OAAO,EAAE;IACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;IACxB,6CAA6C;IAC7C,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;IAC7B,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IACjC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC1C,CAAC,CAAC;AAEH,iDAAiD;AACjD,QAAQ;AACR,iDAAiD;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE;IAC3C,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAC3B,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3";
|
|
2
|
+
import type { TaskStore } from "../store/task-store.js";
|
|
3
|
+
import type { BackgroundQueue } from "./queue.js";
|
|
4
|
+
/**
|
|
5
|
+
* DagEngine manages task dependency resolution.
|
|
6
|
+
*
|
|
7
|
+
* Two public methods:
|
|
8
|
+
* - `validateNoCycle()` — synchronous BFS cycle check; called BEFORE row insert.
|
|
9
|
+
* - `dispatchReady()` — post-terminal fan-in dispatch; called in the queue runFn
|
|
10
|
+
* `finally` block so it fires on every terminal event (completed/failed/cancelled).
|
|
11
|
+
*
|
|
12
|
+
* The `dispatchFn` is injected at server startup (built in src/index.ts) to avoid
|
|
13
|
+
* circular imports: DagEngine must NOT import from tools/task.ts.
|
|
14
|
+
*/
|
|
15
|
+
export declare class DagEngine {
|
|
16
|
+
private readonly db;
|
|
17
|
+
private readonly queue;
|
|
18
|
+
private readonly taskStore;
|
|
19
|
+
/**
|
|
20
|
+
* Injected at server startup to avoid circular imports with tools/task.ts.
|
|
21
|
+
* Signature: (taskId: string) => Promise<void>
|
|
22
|
+
* Built in index.ts by closing over the TaskDeps.
|
|
23
|
+
*/
|
|
24
|
+
private readonly dispatchFn;
|
|
25
|
+
constructor(db: BetterSQLite3Database<Record<string, never>>, queue: BackgroundQueue, taskStore: TaskStore,
|
|
26
|
+
/**
|
|
27
|
+
* Injected at server startup to avoid circular imports with tools/task.ts.
|
|
28
|
+
* Signature: (taskId: string) => Promise<void>
|
|
29
|
+
* Built in index.ts by closing over the TaskDeps.
|
|
30
|
+
*/
|
|
31
|
+
dispatchFn: (taskId: string) => Promise<void>);
|
|
32
|
+
/**
|
|
33
|
+
* BFS cycle detection. Call BEFORE inserting the new task row.
|
|
34
|
+
*
|
|
35
|
+
* Walks the existing dependency graph upward from each member of `dependsOn`.
|
|
36
|
+
* If `newTaskId` appears as an ancestor, adding it would create a cycle.
|
|
37
|
+
*
|
|
38
|
+
* Throws ToolError("VALIDATION_ERROR") if a cycle is detected.
|
|
39
|
+
* Does NOT write any rows — purely a read operation.
|
|
40
|
+
*
|
|
41
|
+
* Invariant: [inv:cycle-check-synchronous]
|
|
42
|
+
*/
|
|
43
|
+
validateNoCycle(newTaskId: string, dependsOn: string[]): void;
|
|
44
|
+
/**
|
|
45
|
+
* Called after a task reaches a terminal state (completed/failed/cancelled).
|
|
46
|
+
*
|
|
47
|
+
* Scans all `waiting` tasks for those that include `completedTaskId` in their
|
|
48
|
+
* `depends_on`. For each:
|
|
49
|
+
* - If all deps are in a terminal state, evaluate `on_upstream_failure`:
|
|
50
|
+
* - "fail" (default): mark the downstream as failed immediately.
|
|
51
|
+
* - "skip": dispatch anyway; only include completed upstreams in `inputs`.
|
|
52
|
+
*
|
|
53
|
+
* Uses optimistic locking (`AND status='waiting'` on the UPDATE) to prevent
|
|
54
|
+
* double-enqueue when two concurrent terminal events race for the same fan-in
|
|
55
|
+
* task.
|
|
56
|
+
*
|
|
57
|
+
* Invariants: [inv:waiting-no-queue], [inv:dispatch-on-completion],
|
|
58
|
+
* [inv:inputs-populated-at-dispatch]
|
|
59
|
+
*/
|
|
60
|
+
dispatchReady(completedTaskId: string): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=dag-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-engine.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/dag-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD;;;;;;;;;;GAUG;AACH,qBAAa,SAAS;IAEd,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU;gBARV,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAChD,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,SAAS;IACrC;;;;OAIG;IACc,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAGlE;;;;;;;;;;OAUG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAgC7D;;;;;;;;;;;;;;;OAeG;IACG,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkG9D"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { and, eq, inArray } from "drizzle-orm";
|
|
2
|
+
import { tasksTable } from "../db/schema.js";
|
|
3
|
+
import { logger } from "../logger.js";
|
|
4
|
+
import { ToolError } from "../validation/errors.js";
|
|
5
|
+
import { nowIso } from "../utils/timestamps.js";
|
|
6
|
+
/**
|
|
7
|
+
* DagEngine manages task dependency resolution.
|
|
8
|
+
*
|
|
9
|
+
* Two public methods:
|
|
10
|
+
* - `validateNoCycle()` — synchronous BFS cycle check; called BEFORE row insert.
|
|
11
|
+
* - `dispatchReady()` — post-terminal fan-in dispatch; called in the queue runFn
|
|
12
|
+
* `finally` block so it fires on every terminal event (completed/failed/cancelled).
|
|
13
|
+
*
|
|
14
|
+
* The `dispatchFn` is injected at server startup (built in src/index.ts) to avoid
|
|
15
|
+
* circular imports: DagEngine must NOT import from tools/task.ts.
|
|
16
|
+
*/
|
|
17
|
+
export class DagEngine {
|
|
18
|
+
db;
|
|
19
|
+
queue;
|
|
20
|
+
taskStore;
|
|
21
|
+
dispatchFn;
|
|
22
|
+
constructor(db, queue, taskStore,
|
|
23
|
+
/**
|
|
24
|
+
* Injected at server startup to avoid circular imports with tools/task.ts.
|
|
25
|
+
* Signature: (taskId: string) => Promise<void>
|
|
26
|
+
* Built in index.ts by closing over the TaskDeps.
|
|
27
|
+
*/
|
|
28
|
+
dispatchFn) {
|
|
29
|
+
this.db = db;
|
|
30
|
+
this.queue = queue;
|
|
31
|
+
this.taskStore = taskStore;
|
|
32
|
+
this.dispatchFn = dispatchFn;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* BFS cycle detection. Call BEFORE inserting the new task row.
|
|
36
|
+
*
|
|
37
|
+
* Walks the existing dependency graph upward from each member of `dependsOn`.
|
|
38
|
+
* If `newTaskId` appears as an ancestor, adding it would create a cycle.
|
|
39
|
+
*
|
|
40
|
+
* Throws ToolError("VALIDATION_ERROR") if a cycle is detected.
|
|
41
|
+
* Does NOT write any rows — purely a read operation.
|
|
42
|
+
*
|
|
43
|
+
* Invariant: [inv:cycle-check-synchronous]
|
|
44
|
+
*/
|
|
45
|
+
validateNoCycle(newTaskId, dependsOn) {
|
|
46
|
+
const visited = new Set();
|
|
47
|
+
const queue = [...dependsOn];
|
|
48
|
+
while (queue.length > 0) {
|
|
49
|
+
const id = queue.shift();
|
|
50
|
+
if (id === newTaskId) {
|
|
51
|
+
throw new ToolError("VALIDATION_ERROR", `Dependency cycle detected: task ${newTaskId} would depend on itself via its dependency chain`);
|
|
52
|
+
}
|
|
53
|
+
if (!visited.has(id)) {
|
|
54
|
+
visited.add(id);
|
|
55
|
+
const row = this.db
|
|
56
|
+
.select({ dependsOn: tasksTable.depends_on })
|
|
57
|
+
.from(tasksTable)
|
|
58
|
+
.where(eq(tasksTable.id, id))
|
|
59
|
+
.get();
|
|
60
|
+
const upstreamDeps = row?.dependsOn
|
|
61
|
+
? JSON.parse(row.dependsOn)
|
|
62
|
+
: [];
|
|
63
|
+
queue.push(...upstreamDeps);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Called after a task reaches a terminal state (completed/failed/cancelled).
|
|
69
|
+
*
|
|
70
|
+
* Scans all `waiting` tasks for those that include `completedTaskId` in their
|
|
71
|
+
* `depends_on`. For each:
|
|
72
|
+
* - If all deps are in a terminal state, evaluate `on_upstream_failure`:
|
|
73
|
+
* - "fail" (default): mark the downstream as failed immediately.
|
|
74
|
+
* - "skip": dispatch anyway; only include completed upstreams in `inputs`.
|
|
75
|
+
*
|
|
76
|
+
* Uses optimistic locking (`AND status='waiting'` on the UPDATE) to prevent
|
|
77
|
+
* double-enqueue when two concurrent terminal events race for the same fan-in
|
|
78
|
+
* task.
|
|
79
|
+
*
|
|
80
|
+
* Invariants: [inv:waiting-no-queue], [inv:dispatch-on-completion],
|
|
81
|
+
* [inv:inputs-populated-at-dispatch]
|
|
82
|
+
*/
|
|
83
|
+
async dispatchReady(completedTaskId) {
|
|
84
|
+
// Fetch all waiting tasks in a single query
|
|
85
|
+
const waitingTasks = this.db
|
|
86
|
+
.select()
|
|
87
|
+
.from(tasksTable)
|
|
88
|
+
.where(eq(tasksTable.status, "waiting"))
|
|
89
|
+
.all();
|
|
90
|
+
for (const task of waitingTasks) {
|
|
91
|
+
const deps = task.depends_on
|
|
92
|
+
? JSON.parse(task.depends_on)
|
|
93
|
+
: [];
|
|
94
|
+
// Skip if this task doesn't depend on the just-completed task
|
|
95
|
+
if (!deps.includes(completedTaskId))
|
|
96
|
+
continue;
|
|
97
|
+
// Nothing to dispatch if there are no deps (should not happen for
|
|
98
|
+
// waiting tasks, but guard defensively)
|
|
99
|
+
if (deps.length === 0)
|
|
100
|
+
continue;
|
|
101
|
+
// Check all deps for terminal status
|
|
102
|
+
const depRows = this.db
|
|
103
|
+
.select({
|
|
104
|
+
id: tasksTable.id,
|
|
105
|
+
status: tasksTable.status,
|
|
106
|
+
result: tasksTable.result,
|
|
107
|
+
})
|
|
108
|
+
.from(tasksTable)
|
|
109
|
+
.where(inArray(tasksTable.id, deps))
|
|
110
|
+
.all();
|
|
111
|
+
const terminalStatuses = new Set(["completed", "failed", "cancelled"]);
|
|
112
|
+
const allTerminal = depRows.every(r => terminalStatuses.has(r.status));
|
|
113
|
+
if (!allTerminal)
|
|
114
|
+
continue;
|
|
115
|
+
const policy = (task.on_upstream_failure ?? "fail");
|
|
116
|
+
const failedDep = depRows.find(r => r.status === "failed" || r.status === "cancelled");
|
|
117
|
+
if (failedDep && policy === "fail") {
|
|
118
|
+
// Mark downstream as failed — no enqueue
|
|
119
|
+
logger.info({ taskId: task.id, failedDepId: failedDep.id, status: failedDep.status }, "Propagating upstream failure to waiting task");
|
|
120
|
+
this.taskStore.updateStatus(task.id, "failed", {
|
|
121
|
+
error: `Upstream task ${failedDep.id} ${failedDep.status}`,
|
|
122
|
+
});
|
|
123
|
+
// Recursively dispatch tasks that depend on this now-failed task
|
|
124
|
+
await this.dispatchReady(task.id);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
// policy === "skip" or all deps completed:
|
|
128
|
+
// Build inputs from completed upstream results only.
|
|
129
|
+
// Skip-case: omit failed/cancelled upstreams (no result to inject).
|
|
130
|
+
const inputs = {};
|
|
131
|
+
for (const dep of depRows) {
|
|
132
|
+
if (dep.status === "completed" && dep.result != null) {
|
|
133
|
+
inputs[dep.id] = dep.result;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Optimistic lock: transition waiting → pending atomically.
|
|
137
|
+
// If another concurrent dispatchReady call already transitioned this
|
|
138
|
+
// row, changes === 0 and we skip enqueue to avoid double-dispatch.
|
|
139
|
+
const updated = this.db
|
|
140
|
+
.update(tasksTable)
|
|
141
|
+
.set({
|
|
142
|
+
status: "pending",
|
|
143
|
+
inputs: JSON.stringify(inputs),
|
|
144
|
+
updatedAt: nowIso(),
|
|
145
|
+
})
|
|
146
|
+
.where(and(eq(tasksTable.id, task.id), eq(tasksTable.status, "waiting")))
|
|
147
|
+
.run();
|
|
148
|
+
if (updated.changes === 0) {
|
|
149
|
+
// Lost the race — another worker already transitioned this task
|
|
150
|
+
logger.debug({ taskId: task.id }, "DagEngine: lost optimistic lock, skipping enqueue");
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
logger.info({ taskId: task.id, deps, inputs: Object.keys(inputs) }, "DagEngine: dispatching ready task");
|
|
154
|
+
await this.dispatchFn(task.id);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=dag-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-engine.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/dag-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,SAAS;IAEG;IACA;IACA;IAMA;IATrB,YACqB,EAAgD,EAChD,KAAsB,EACtB,SAAoB;IACrC;;;;OAIG;IACc,UAA6C;QAR7C,OAAE,GAAF,EAAE,CAA8C;QAChD,UAAK,GAAL,KAAK,CAAiB;QACtB,cAAS,GAAT,SAAS,CAAW;QAMpB,eAAU,GAAV,UAAU,CAAmC;IAC/D,CAAC;IAEJ;;;;;;;;;;OAUG;IACH,eAAe,CAAC,SAAiB,EAAE,SAAmB;QAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;QAE7B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAE1B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACnB,MAAM,IAAI,SAAS,CACf,kBAAkB,EAClB,mCAAmC,SAAS,kDAAkD,CACjG,CAAC;YACN,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;qBACd,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC;qBAC5C,IAAI,CAAC,UAAU,CAAC;qBAChB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;qBAC5B,GAAG,EAAE,CAAC;gBAEX,MAAM,YAAY,GAAa,GAAG,EAAE,SAAS;oBACzC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAc;oBACzC,CAAC,CAAC,EAAE,CAAC;gBAET,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,aAAa,CAAC,eAAuB;QACvC,4CAA4C;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE;aACvB,MAAM,EAAE;aACR,IAAI,CAAC,UAAU,CAAC;aAChB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;aACvC,GAAG,EAAE,CAAC;QAEX,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAa,IAAI,CAAC,UAAU;gBAClC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAc;gBAC3C,CAAC,CAAC,EAAE,CAAC;YAET,8DAA8D;YAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAAE,SAAS;YAE9C,kEAAkE;YAClE,wCAAwC;YACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEhC,qCAAqC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE;iBAClB,MAAM,CAAC;gBACJ,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC5B,CAAC;iBACD,IAAI,CAAC,UAAU,CAAC;iBAChB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBACnC,GAAG,EAAE,CAAC;YAEX,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,WAAW;gBAAE,SAAS;YAE3B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,mBAAmB,IAAI,MAAM,CAAoB,CAAC;YACvE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CACzD,CAAC;YAEF,IAAI,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACjC,yCAAyC;gBACzC,MAAM,CAAC,IAAI,CACP,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,EACxE,8CAA8C,CACjD,CAAC;gBAEF,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE;oBAC3C,KAAK,EAAE,iBAAiB,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE;iBAC7D,CAAC,CAAC;gBAEH,iEAAiE;gBACjE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClC,SAAS;YACb,CAAC;YAED,2CAA2C;YAC3C,qDAAqD;YACrD,oEAAoE;YACpE,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;gBAChC,CAAC;YACL,CAAC;YAED,4DAA4D;YAC5D,qEAAqE;YACrE,mEAAmE;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE;iBAClB,MAAM,CAAC,UAAU,CAAC;iBAClB,GAAG,CAAC;gBACD,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC9B,SAAS,EAAE,MAAM,EAAE;aACtB,CAAC;iBACD,KAAK,CACF,GAAG,CACC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAC1B,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CACnC,CACJ;iBACA,GAAG,EAAE,CAAC;YAEX,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACxB,gEAAgE;gBAChE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,mDAAmD,CAAC,CAAC;gBACvF,SAAS;YACb,CAAC;YAED,MAAM,CAAC,IAAI,CACP,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EACtD,mCAAmC,CACtC,CAAC;YAEF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -5,6 +5,12 @@ import type { McpClientRegistry } from "../clients/registry.js";
|
|
|
5
5
|
import type { PolicyEngine } from "./policy.js";
|
|
6
6
|
import type { TaskStore } from "../store/task-store.js";
|
|
7
7
|
import type { SessionStore } from "../store/session-store.js";
|
|
8
|
+
/**
|
|
9
|
+
* Resolve a suspended HITL task with the provided user input.
|
|
10
|
+
* Returns `true` if the resolver was found and called; `false` if the
|
|
11
|
+
* process restarted and the in-memory resolver no longer exists.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveHitl(taskId: string, userInput: string): boolean;
|
|
8
14
|
export interface OrchestratorRunInput {
|
|
9
15
|
executionContext: ExecutionContext;
|
|
10
16
|
messages: Message[];
|
|
@@ -16,6 +22,14 @@ export interface OrchestratorRunInput {
|
|
|
16
22
|
signal: AbortSignal;
|
|
17
23
|
taskId: string;
|
|
18
24
|
hooks?: IHookRegistry;
|
|
25
|
+
/**
|
|
26
|
+
* Set to `true` for ephemeral (one-shot) tasks (agent_name mode).
|
|
27
|
+
* Ephemeral tasks DO persist a tasks row + task_events + task_usage, but
|
|
28
|
+
* have no sessions row and no messages rows. When `true`,
|
|
29
|
+
* `request_human_input` is forbidden because HITL cannot be resumed across
|
|
30
|
+
* a process restart without a durable session context.
|
|
31
|
+
*/
|
|
32
|
+
isEphemeral?: boolean;
|
|
19
33
|
}
|
|
20
34
|
export interface OrchestratorRunResult {
|
|
21
35
|
result: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/engine/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAM3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AA4C9D;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAMtE;AAID,MAAM,WAAW,oBAAoB;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAQD,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACf,GAAG,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAufzE"}
|