@memberjunction/task-graph 0.0.0 → 6.1.0-edge.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/LICENSE +7 -0
- package/dist/DispatcherConditionEvaluator.d.ts +10 -0
- package/dist/DispatcherConditionEvaluator.d.ts.map +1 -0
- package/dist/DispatcherConditionEvaluator.js +27 -0
- package/dist/DispatcherConditionEvaluator.js.map +1 -0
- package/dist/TaskClaimStore.d.ts +114 -0
- package/dist/TaskClaimStore.d.ts.map +1 -0
- package/dist/TaskClaimStore.js +218 -0
- package/dist/TaskClaimStore.js.map +1 -0
- package/dist/TaskGraphDispatcher.d.ts +186 -0
- package/dist/TaskGraphDispatcher.d.ts.map +1 -0
- package/dist/TaskGraphDispatcher.js +735 -0
- package/dist/TaskGraphDispatcher.js.map +1 -0
- package/dist/TaskGraphService.d.ts +138 -0
- package/dist/TaskGraphService.d.ts.map +1 -0
- package/dist/TaskGraphService.js +314 -0
- package/dist/TaskGraphService.js.map +1 -0
- package/dist/TaskGraphSubmitterImpl.d.ts +7 -0
- package/dist/TaskGraphSubmitterImpl.d.ts.map +1 -0
- package/dist/TaskGraphSubmitterImpl.js +52 -0
- package/dist/TaskGraphSubmitterImpl.js.map +1 -0
- package/dist/WorkflowSpecSync.d.ts +171 -0
- package/dist/WorkflowSpecSync.d.ts.map +1 -0
- package/dist/WorkflowSpecSync.js +393 -0
- package/dist/WorkflowSpecSync.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/operations/TaskGraphOperations.d.ts +39 -0
- package/dist/operations/TaskGraphOperations.d.ts.map +1 -0
- package/dist/operations/TaskGraphOperations.js +164 -0
- package/dist/operations/TaskGraphOperations.js.map +1 -0
- package/dist/operations/WorkflowOperations.d.ts +22 -0
- package/dist/operations/WorkflowOperations.d.ts.map +1 -0
- package/dist/operations/WorkflowOperations.js +99 -0
- package/dist/operations/WorkflowOperations.js.map +1 -0
- package/dist/types.d.ts +214 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +33 -8
- package/README.md +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskGraphDispatcher.js","sourceRoot":"","sources":["../src/TaskGraphDispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Producer-agnostic submission of task graphs.
|
|
3
|
+
*
|
|
4
|
+
* Per D2, submission (validate + persist) is split from execution (the durable dispatcher). This
|
|
5
|
+
* class does the first half only: it validates a spec, resolves agent names, writes the parent +
|
|
6
|
+
* children + dependency edges, and returns immediately. Nothing here executes anything.
|
|
7
|
+
*
|
|
8
|
+
* That split is what makes the engine invocation-agnostic (D1): an agent emitting a graph, a
|
|
9
|
+
* scheduled job, a Slack message, and a future manual workflow UI all call the same `Submit`, and
|
|
10
|
+
* whichever dispatcher instance is running picks the work up. Callers never wait for execution, so
|
|
11
|
+
* no channel needs to hold a long-lived request open the way the old `ExecuteTaskGraph` mutation did.
|
|
12
|
+
*
|
|
13
|
+
* Per D11 the API is deliberately not AI-flavored — an LLM, deterministic code, or a human UI can
|
|
14
|
+
* all construct and submit a DAG.
|
|
15
|
+
*
|
|
16
|
+
* @module @memberjunction/task-graph
|
|
17
|
+
*/
|
|
18
|
+
import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
19
|
+
import { type TaskGraphSpec } from '@memberjunction/ai-core-plus';
|
|
20
|
+
/** Context a submission carries beyond the graph itself. */
|
|
21
|
+
export type TaskGraphSubmitContext = {
|
|
22
|
+
/** Environment the tasks belong to. */
|
|
23
|
+
EnvironmentID: string;
|
|
24
|
+
/** Conversation this graph answers, when submitted from a conversational channel. */
|
|
25
|
+
ConversationDetailID?: string | null;
|
|
26
|
+
/** User the work runs as and is attributed to. */
|
|
27
|
+
ContextUser: UserInfo;
|
|
28
|
+
/** Provider to persist through. */
|
|
29
|
+
Provider: IMetadataProvider;
|
|
30
|
+
/** The agent run that emitted this graph, for provenance and `reinvoke` routing. */
|
|
31
|
+
AgentRunID?: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* How many continuation hops produced this graph. A graph submitted by an agent that was itself
|
|
34
|
+
* re-invoked by a finished graph carries its parent's depth + 1.
|
|
35
|
+
*/
|
|
36
|
+
ReinvokeDepth?: number;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* What the parent Task row remembers about the graph beyond its tasks.
|
|
40
|
+
*
|
|
41
|
+
* Persisted rather than held in memory because the dispatcher instance that *finishes* a graph is
|
|
42
|
+
* routinely not the one that accepted it — a restart, a peer instance, or simply a graph that
|
|
43
|
+
* outlives a deploy all break that assumption.
|
|
44
|
+
*/
|
|
45
|
+
export type TaskGraphParentMetadata = {
|
|
46
|
+
continuation: 'message' | 'reinvoke' | 'none';
|
|
47
|
+
reinvokeDepth: number;
|
|
48
|
+
submittedByAgentRunID: string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Who the graph belongs to.
|
|
51
|
+
*
|
|
52
|
+
* Stored here rather than on a Task column because `Task.UserID` already means something else —
|
|
53
|
+
* it designates a *human* task, the assignee the graph waits on — so setting it on a parent
|
|
54
|
+
* would make every graph look like work waiting on a person. It is durable for the same reason
|
|
55
|
+
* everything else in this bag is: the instance that needs it is routinely not the one that wrote
|
|
56
|
+
* it. Consumed by the live-frame layer, which cannot authorize a viewer without knowing whose
|
|
57
|
+
* run they are watching.
|
|
58
|
+
*/
|
|
59
|
+
submittedByUserID?: string | null;
|
|
60
|
+
/**
|
|
61
|
+
* Set once the completion handler has delivered. Written with a compare-and-swap guard, which is
|
|
62
|
+
* what turns at-least-once delivery into effectively-once: a crash between "graph complete" and
|
|
63
|
+
* "continuation delivered" leaves this unset, so the next sweep retries, and two instances
|
|
64
|
+
* racing the same completion produce one winner rather than two notifications.
|
|
65
|
+
*/
|
|
66
|
+
continuationDeliveredAt?: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Continuation chains are bounded separately from graph nesting.
|
|
70
|
+
*
|
|
71
|
+
* The spawn-depth cap governs graphs nested *by tasks*; this one governs graphs chained *by
|
|
72
|
+
* continuations* — an agent re-invoked with a finished graph's results can emit another graph, which
|
|
73
|
+
* re-invokes it again. Both loops exist and neither cap constrains the other, so both are needed. At
|
|
74
|
+
* the cap the dispatcher forces `continuation: 'message'`, which ends the chain without losing the
|
|
75
|
+
* results.
|
|
76
|
+
*/
|
|
77
|
+
export declare const MAX_REINVOKE_DEPTH = 5;
|
|
78
|
+
/**
|
|
79
|
+
* Parses a parent Task's continuation metadata.
|
|
80
|
+
*
|
|
81
|
+
* Shared by the writer (`TaskGraphService`) and the reader (`TaskGraphDispatcher`) so the two cannot
|
|
82
|
+
* drift — the failure that shape invites is a graph that completes and then does nothing, because
|
|
83
|
+
* one side wrote a field the other never looked for.
|
|
84
|
+
*
|
|
85
|
+
* Unparseable input defaults to `message` rather than throwing. A row predating this metadata, or
|
|
86
|
+
* one a user hand-edited, is a legitimate state, and the right response to "I don't know what this
|
|
87
|
+
* graph wanted" is still to tell the user their work finished.
|
|
88
|
+
*/
|
|
89
|
+
export declare function ParseTaskGraphParentMetadata(raw: string | null | undefined): TaskGraphParentMetadata;
|
|
90
|
+
/** True when a continuation chain has gone as far as it may. */
|
|
91
|
+
export declare function IsReinvokeCapReached(meta: TaskGraphParentMetadata): boolean;
|
|
92
|
+
export type TaskGraphSubmitResult = {
|
|
93
|
+
Success: boolean;
|
|
94
|
+
/** The parent task representing the whole graph — the handle for status, cancel and retry. */
|
|
95
|
+
ParentTaskID?: string;
|
|
96
|
+
/** tempId -> persisted Task.ID, for callers that need to correlate back to their spec. */
|
|
97
|
+
TaskIDMap?: Map<string, string>;
|
|
98
|
+
ErrorMessage?: string;
|
|
99
|
+
};
|
|
100
|
+
export declare class TaskGraphService {
|
|
101
|
+
/**
|
|
102
|
+
* Validates and persists a task graph, returning as soon as it is durable.
|
|
103
|
+
*
|
|
104
|
+
* Deliberately does NOT start execution: the dispatcher discovers `Pending` work by polling
|
|
105
|
+
* claimable tasks, so submission and execution are decoupled even within a single process.
|
|
106
|
+
* A submitted graph therefore survives the submitting request, the submitting agent run, and
|
|
107
|
+
* the submitting server — which is the entire point of Task rows over in-run state (D8).
|
|
108
|
+
*/
|
|
109
|
+
Submit(spec: TaskGraphSpec, context: TaskGraphSubmitContext): Promise<TaskGraphSubmitResult>;
|
|
110
|
+
/**
|
|
111
|
+
* Cancels a graph and everything in it that has not already settled.
|
|
112
|
+
*
|
|
113
|
+
* Cancels children first: a parent marked `Cancelled` while children are still `Pending` would
|
|
114
|
+
* leave the dispatcher free to pick those children up, which is the opposite of what the caller
|
|
115
|
+
* asked for.
|
|
116
|
+
*/
|
|
117
|
+
Cancel(parentTaskID: string, context: TaskGraphSubmitContext): Promise<boolean>;
|
|
118
|
+
/**
|
|
119
|
+
* Returns a failed task to `Pending` so the dispatcher can run it again.
|
|
120
|
+
*
|
|
121
|
+
* Also clears any `Blocked` dependents, since they were only blocked because this task failed —
|
|
122
|
+
* leaving them blocked would make the retry pointless, as the graph still could not progress
|
|
123
|
+
* past this node.
|
|
124
|
+
*/
|
|
125
|
+
Retry(taskID: string, context: TaskGraphSubmitContext): Promise<boolean>;
|
|
126
|
+
/** Maps every referenced agent name to its ID, or reports all unresolvable names at once. */
|
|
127
|
+
private resolveAgents;
|
|
128
|
+
/** Finds or creates the task type used for orchestrated graphs. */
|
|
129
|
+
private ensureTaskType;
|
|
130
|
+
/** Writes the parent task that represents the graph as a whole. */
|
|
131
|
+
private persistParent;
|
|
132
|
+
/** Writes each child task, returning the tempId -> real ID mapping edges will need. */
|
|
133
|
+
private persistChildren;
|
|
134
|
+
/** Writes the dependency edges, translating tempIds to persisted IDs. */
|
|
135
|
+
private persistDependencies;
|
|
136
|
+
private loadChildren;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=TaskGraphService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskGraphService.d.ts","sourceRoot":"","sources":["../src/TaskGraphService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACH,iBAAiB,EAIjB,QAAQ,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAIH,KAAK,aAAa,EACrB,MAAM,8BAA8B,CAAC;AAEtC,4DAA4D;AAC5D,MAAM,MAAM,sBAAsB,GAAG;IACjC,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,kDAAkD;IAClD,WAAW,EAAE,QAAQ,CAAC;IACtB,mCAAmC;IACnC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,YAAY,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAUpC;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,uBAAuB,CAmBpG;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAE3E;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAKF,qBAAa,gBAAgB;IACzB;;;;;;;OAOG;IACU,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuCzG;;;;;;OAMG;IACU,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB5F;;;;;;OAMG;IACU,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsCrF,6FAA6F;YAC/E,aAAa;IA0B3B,mEAAmE;YACrD,cAAc;IAkB5B,mEAAmE;YACrD,aAAa;IA0B3B,uFAAuF;YACzE,eAAe;IAuC7B,yEAAyE;YAC3D,mBAAmB;YA8BnB,YAAY;CAO7B"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Producer-agnostic submission of task graphs.
|
|
3
|
+
*
|
|
4
|
+
* Per D2, submission (validate + persist) is split from execution (the durable dispatcher). This
|
|
5
|
+
* class does the first half only: it validates a spec, resolves agent names, writes the parent +
|
|
6
|
+
* children + dependency edges, and returns immediately. Nothing here executes anything.
|
|
7
|
+
*
|
|
8
|
+
* That split is what makes the engine invocation-agnostic (D1): an agent emitting a graph, a
|
|
9
|
+
* scheduled job, a Slack message, and a future manual workflow UI all call the same `Submit`, and
|
|
10
|
+
* whichever dispatcher instance is running picks the work up. Callers never wait for execution, so
|
|
11
|
+
* no channel needs to hold a long-lived request open the way the old `ExecuteTaskGraph` mutation did.
|
|
12
|
+
*
|
|
13
|
+
* Per D11 the API is deliberately not AI-flavored — an LLM, deterministic code, or a human UI can
|
|
14
|
+
* all construct and submit a DAG.
|
|
15
|
+
*
|
|
16
|
+
* @module @memberjunction/task-graph
|
|
17
|
+
*/
|
|
18
|
+
import { LogError, LogStatus, RunView, } from '@memberjunction/core';
|
|
19
|
+
import { FormatValidationErrors, NormalizeDependency, ValidateTaskGraphSpec, } from '@memberjunction/ai-core-plus';
|
|
20
|
+
/**
|
|
21
|
+
* Continuation chains are bounded separately from graph nesting.
|
|
22
|
+
*
|
|
23
|
+
* The spawn-depth cap governs graphs nested *by tasks*; this one governs graphs chained *by
|
|
24
|
+
* continuations* — an agent re-invoked with a finished graph's results can emit another graph, which
|
|
25
|
+
* re-invokes it again. Both loops exist and neither cap constrains the other, so both are needed. At
|
|
26
|
+
* the cap the dispatcher forces `continuation: 'message'`, which ends the chain without losing the
|
|
27
|
+
* results.
|
|
28
|
+
*/
|
|
29
|
+
export const MAX_REINVOKE_DEPTH = 5;
|
|
30
|
+
/** What a parent row means when it carries no metadata, or metadata we cannot read. */
|
|
31
|
+
const DEFAULT_PARENT_METADATA = {
|
|
32
|
+
continuation: 'message',
|
|
33
|
+
reinvokeDepth: 0,
|
|
34
|
+
submittedByAgentRunID: null,
|
|
35
|
+
submittedByUserID: null,
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Parses a parent Task's continuation metadata.
|
|
39
|
+
*
|
|
40
|
+
* Shared by the writer (`TaskGraphService`) and the reader (`TaskGraphDispatcher`) so the two cannot
|
|
41
|
+
* drift — the failure that shape invites is a graph that completes and then does nothing, because
|
|
42
|
+
* one side wrote a field the other never looked for.
|
|
43
|
+
*
|
|
44
|
+
* Unparseable input defaults to `message` rather than throwing. A row predating this metadata, or
|
|
45
|
+
* one a user hand-edited, is a legitimate state, and the right response to "I don't know what this
|
|
46
|
+
* graph wanted" is still to tell the user their work finished.
|
|
47
|
+
*/
|
|
48
|
+
export function ParseTaskGraphParentMetadata(raw) {
|
|
49
|
+
if (!raw)
|
|
50
|
+
return { ...DEFAULT_PARENT_METADATA };
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(raw);
|
|
53
|
+
if (!parsed || typeof parsed !== 'object')
|
|
54
|
+
return { ...DEFAULT_PARENT_METADATA };
|
|
55
|
+
return {
|
|
56
|
+
...DEFAULT_PARENT_METADATA,
|
|
57
|
+
...parsed,
|
|
58
|
+
// Guard the two fields the dispatcher branches on. A JSON round-trip, a hand edit, or a
|
|
59
|
+
// future producer can all supply the wrong type here, and a bad `reinvokeDepth` would
|
|
60
|
+
// either disable the cap (NaN comparisons are always false) or trip it immediately.
|
|
61
|
+
continuation: parsed.continuation === 'reinvoke' || parsed.continuation === 'none'
|
|
62
|
+
? parsed.continuation
|
|
63
|
+
: 'message',
|
|
64
|
+
reinvokeDepth: Number.isFinite(parsed.reinvokeDepth) ? Number(parsed.reinvokeDepth) : 0,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return { ...DEFAULT_PARENT_METADATA };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** True when a continuation chain has gone as far as it may. */
|
|
72
|
+
export function IsReinvokeCapReached(meta) {
|
|
73
|
+
return meta.reinvokeDepth >= MAX_REINVOKE_DEPTH;
|
|
74
|
+
}
|
|
75
|
+
/** Name of the task type used for agent-orchestrated graphs. */
|
|
76
|
+
const TASK_TYPE_NAME = 'AI Workflow';
|
|
77
|
+
export class TaskGraphService {
|
|
78
|
+
/**
|
|
79
|
+
* Validates and persists a task graph, returning as soon as it is durable.
|
|
80
|
+
*
|
|
81
|
+
* Deliberately does NOT start execution: the dispatcher discovers `Pending` work by polling
|
|
82
|
+
* claimable tasks, so submission and execution are decoupled even within a single process.
|
|
83
|
+
* A submitted graph therefore survives the submitting request, the submitting agent run, and
|
|
84
|
+
* the submitting server — which is the entire point of Task rows over in-run state (D8).
|
|
85
|
+
*/
|
|
86
|
+
async Submit(spec, context) {
|
|
87
|
+
// 1. Structural validation. Server-side is the source of truth even when a producer already
|
|
88
|
+
// validated client-side — the same function runs in both places, so they cannot disagree.
|
|
89
|
+
const validation = ValidateTaskGraphSpec(spec);
|
|
90
|
+
if (!validation.Valid) {
|
|
91
|
+
const message = `Task graph "${spec.workflowName}" is invalid:\n${FormatValidationErrors(validation.Errors)}`;
|
|
92
|
+
LogError(`[TaskGraphService] ${message}`);
|
|
93
|
+
return { Success: false, ErrorMessage: message };
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
// 2. Resolve every agent BEFORE writing anything. An unresolvable agent is a hard
|
|
97
|
+
// error, not a skipped node: silently dropping a task executes the graph with holes
|
|
98
|
+
// where the caller's work should have been.
|
|
99
|
+
const agentIDsByName = await this.resolveAgents(spec, context);
|
|
100
|
+
if (!agentIDsByName.Success) {
|
|
101
|
+
return { Success: false, ErrorMessage: agentIDsByName.ErrorMessage };
|
|
102
|
+
}
|
|
103
|
+
const taskTypeID = await this.ensureTaskType(context);
|
|
104
|
+
// 3. Persist. Parent first so children have a ParentID, then children, then edges —
|
|
105
|
+
// edges last because they reference two child IDs that must both exist.
|
|
106
|
+
const parentTaskID = await this.persistParent(spec, taskTypeID, context);
|
|
107
|
+
const taskIDMap = await this.persistChildren(spec, parentTaskID, taskTypeID, agentIDsByName.Map, context);
|
|
108
|
+
await this.persistDependencies(spec, taskIDMap, context);
|
|
109
|
+
LogStatus(`[TaskGraphService] Submitted "${spec.workflowName}": parent ${parentTaskID}, ${taskIDMap.size} task(s). ` +
|
|
110
|
+
`Awaiting dispatcher pickup.`);
|
|
111
|
+
return { Success: true, ParentTaskID: parentTaskID, TaskIDMap: taskIDMap };
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
115
|
+
LogError(`[TaskGraphService] Submit failed for "${spec.workflowName}": ${message}`);
|
|
116
|
+
return { Success: false, ErrorMessage: message };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Cancels a graph and everything in it that has not already settled.
|
|
121
|
+
*
|
|
122
|
+
* Cancels children first: a parent marked `Cancelled` while children are still `Pending` would
|
|
123
|
+
* leave the dispatcher free to pick those children up, which is the opposite of what the caller
|
|
124
|
+
* asked for.
|
|
125
|
+
*/
|
|
126
|
+
async Cancel(parentTaskID, context) {
|
|
127
|
+
try {
|
|
128
|
+
const children = await this.loadChildren(parentTaskID, context);
|
|
129
|
+
for (const child of children) {
|
|
130
|
+
// Terminal work is left alone — cancelling a completed task would rewrite history.
|
|
131
|
+
if (['Complete', 'Failed', 'Cancelled'].includes(child.Status))
|
|
132
|
+
continue;
|
|
133
|
+
child.Status = 'Cancelled';
|
|
134
|
+
if (!(await child.Save())) {
|
|
135
|
+
LogError(`[TaskGraphService] Failed to cancel task ${child.ID}: ${child.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const parent = await context.Provider.GetEntityObject('MJ: Tasks', context.ContextUser);
|
|
139
|
+
if (!(await parent.Load(parentTaskID)))
|
|
140
|
+
return false;
|
|
141
|
+
parent.Status = 'Cancelled';
|
|
142
|
+
parent.CompletedAt = new Date();
|
|
143
|
+
return await parent.Save();
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
LogError(`[TaskGraphService] Cancel failed for ${parentTaskID}: ${e instanceof Error ? e.message : String(e)}`);
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Returns a failed task to `Pending` so the dispatcher can run it again.
|
|
152
|
+
*
|
|
153
|
+
* Also clears any `Blocked` dependents, since they were only blocked because this task failed —
|
|
154
|
+
* leaving them blocked would make the retry pointless, as the graph still could not progress
|
|
155
|
+
* past this node.
|
|
156
|
+
*/
|
|
157
|
+
async Retry(taskID, context) {
|
|
158
|
+
try {
|
|
159
|
+
const task = await context.Provider.GetEntityObject('MJ: Tasks', context.ContextUser);
|
|
160
|
+
if (!(await task.Load(taskID)))
|
|
161
|
+
return false;
|
|
162
|
+
if (task.Status !== 'Failed') {
|
|
163
|
+
LogError(`[TaskGraphService] Cannot retry task ${taskID}: status is ${task.Status}, expected Failed.`);
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
task.Status = 'Pending';
|
|
167
|
+
task.ErrorMessage = null;
|
|
168
|
+
task.StartedAt = null;
|
|
169
|
+
task.CompletedAt = null;
|
|
170
|
+
task.PercentComplete = 0;
|
|
171
|
+
// Clear any stale claim so the task is immediately claimable.
|
|
172
|
+
task.ClaimedBy = null;
|
|
173
|
+
task.ClaimExpiresAt = null;
|
|
174
|
+
if (!(await task.Save()))
|
|
175
|
+
return false;
|
|
176
|
+
if (task.ParentID) {
|
|
177
|
+
for (const sibling of await this.loadChildren(task.ParentID, context)) {
|
|
178
|
+
if (sibling.Status === 'Blocked') {
|
|
179
|
+
sibling.Status = 'Pending';
|
|
180
|
+
await sibling.Save();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
LogError(`[TaskGraphService] Retry failed for ${taskID}: ${e instanceof Error ? e.message : String(e)}`);
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
192
|
+
// internals
|
|
193
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
194
|
+
/** Maps every referenced agent name to its ID, or reports all unresolvable names at once. */
|
|
195
|
+
async resolveAgents(spec, context) {
|
|
196
|
+
const names = [...new Set(spec.tasks.filter((t) => !!t.agentName).map((t) => t.agentName))];
|
|
197
|
+
if (names.length === 0)
|
|
198
|
+
return { Success: true, Map: new Map() };
|
|
199
|
+
const quoted = names.map((n) => `'${n.replace(/'/g, "''")}'`).join(',');
|
|
200
|
+
const result = await RunView.FromMetadataProvider(context.Provider).RunView({ EntityName: 'MJ: AI Agents', ExtraFilter: `Name IN (${quoted})`, Fields: ['ID', 'Name'], ResultType: 'simple' }, context.ContextUser);
|
|
201
|
+
const found = new Map((result.Results ?? []).map((r) => [r.Name, r.ID]));
|
|
202
|
+
const missing = names.filter((n) => !found.has(n));
|
|
203
|
+
if (missing.length > 0) {
|
|
204
|
+
return {
|
|
205
|
+
Success: false,
|
|
206
|
+
ErrorMessage: `Task graph "${spec.workflowName}" references ${missing.length} unknown agent(s): ${missing.join(', ')}. ` +
|
|
207
|
+
`Submitting would execute the graph with holes where those tasks should be.`,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
return { Success: true, Map: found };
|
|
211
|
+
}
|
|
212
|
+
/** Finds or creates the task type used for orchestrated graphs. */
|
|
213
|
+
async ensureTaskType(context) {
|
|
214
|
+
const existing = await RunView.FromMetadataProvider(context.Provider).RunView({ EntityName: 'MJ: Task Types', ExtraFilter: `Name='${TASK_TYPE_NAME}'`, Fields: ['ID'], ResultType: 'simple', MaxRows: 1 }, context.ContextUser);
|
|
215
|
+
const found = existing.Results?.[0]?.ID;
|
|
216
|
+
if (found)
|
|
217
|
+
return found;
|
|
218
|
+
const tt = await context.Provider.GetEntityObject('MJ: Task Types', context.ContextUser);
|
|
219
|
+
tt.NewRecord();
|
|
220
|
+
tt.Name = TASK_TYPE_NAME;
|
|
221
|
+
tt.Description = 'Tasks created by agent-orchestrated workflows.';
|
|
222
|
+
if (!(await tt.Save())) {
|
|
223
|
+
throw new Error(`Could not create task type: ${tt.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
224
|
+
}
|
|
225
|
+
return tt.ID;
|
|
226
|
+
}
|
|
227
|
+
/** Writes the parent task that represents the graph as a whole. */
|
|
228
|
+
async persistParent(spec, taskTypeID, context) {
|
|
229
|
+
const parent = await context.Provider.GetEntityObject('MJ: Tasks', context.ContextUser);
|
|
230
|
+
parent.NewRecord();
|
|
231
|
+
parent.Name = spec.workflowName;
|
|
232
|
+
parent.Description = spec.reasoning || 'Orchestrated workflow';
|
|
233
|
+
parent.TypeID = taskTypeID;
|
|
234
|
+
parent.EnvironmentID = context.EnvironmentID;
|
|
235
|
+
parent.ConversationDetailID = context.ConversationDetailID ?? null;
|
|
236
|
+
parent.Status = 'In Progress';
|
|
237
|
+
parent.PercentComplete = 0;
|
|
238
|
+
// The parent row carries what happens AFTER the graph settles. It lives here rather than in
|
|
239
|
+
// dispatcher memory because the dispatcher that finishes a graph is frequently not the
|
|
240
|
+
// process that accepted it — a restart, a second instance, or simply a long-running graph
|
|
241
|
+
// all break that assumption. Anything the completion path needs has to be durable too.
|
|
242
|
+
parent.InputPayload = JSON.stringify({
|
|
243
|
+
continuation: spec.continuation ?? 'message',
|
|
244
|
+
reinvokeDepth: context.ReinvokeDepth ?? 0,
|
|
245
|
+
submittedByAgentRunID: context.AgentRunID ?? null,
|
|
246
|
+
submittedByUserID: context.ContextUser?.ID ?? null,
|
|
247
|
+
});
|
|
248
|
+
if (!(await parent.Save())) {
|
|
249
|
+
throw new Error(`Could not create parent task: ${parent.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
250
|
+
}
|
|
251
|
+
return parent.ID;
|
|
252
|
+
}
|
|
253
|
+
/** Writes each child task, returning the tempId -> real ID mapping edges will need. */
|
|
254
|
+
async persistChildren(spec, parentTaskID, taskTypeID, agentIDsByName, context) {
|
|
255
|
+
const map = new Map();
|
|
256
|
+
for (const node of spec.tasks) {
|
|
257
|
+
const task = await context.Provider.GetEntityObject('MJ: Tasks', context.ContextUser);
|
|
258
|
+
task.NewRecord();
|
|
259
|
+
task.Name = node.name;
|
|
260
|
+
task.Description = node.description;
|
|
261
|
+
task.TypeID = taskTypeID;
|
|
262
|
+
task.EnvironmentID = context.EnvironmentID;
|
|
263
|
+
task.ParentID = parentTaskID;
|
|
264
|
+
task.ConversationDetailID = context.ConversationDetailID ?? null;
|
|
265
|
+
task.Status = 'Pending';
|
|
266
|
+
task.PercentComplete = 0;
|
|
267
|
+
if (node.agentName) {
|
|
268
|
+
task.AgentID = agentIDsByName.get(node.agentName);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
// Human task. Assigned to the submitting user only — cross-user assignment stays
|
|
272
|
+
// rejected until the authorization model in #3524 lands.
|
|
273
|
+
task.UserID = context.ContextUser.ID;
|
|
274
|
+
}
|
|
275
|
+
// Input rides in its own column; Description stays human-readable.
|
|
276
|
+
task.InputPayload = node.inputPayload ? JSON.stringify(node.inputPayload) : null;
|
|
277
|
+
if (!(await task.Save())) {
|
|
278
|
+
throw new Error(`Could not create task "${node.name}": ${task.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
279
|
+
}
|
|
280
|
+
map.set(node.tempId, task.ID);
|
|
281
|
+
}
|
|
282
|
+
return map;
|
|
283
|
+
}
|
|
284
|
+
/** Writes the dependency edges, translating tempIds to persisted IDs. */
|
|
285
|
+
async persistDependencies(spec, taskIDMap, context) {
|
|
286
|
+
for (const node of spec.tasks) {
|
|
287
|
+
const taskID = taskIDMap.get(node.tempId);
|
|
288
|
+
if (!taskID)
|
|
289
|
+
continue;
|
|
290
|
+
for (const raw of node.dependsOn ?? []) {
|
|
291
|
+
const edge = NormalizeDependency(raw);
|
|
292
|
+
const dependsOnTaskID = taskIDMap.get(edge.tempId);
|
|
293
|
+
if (!dependsOnTaskID)
|
|
294
|
+
continue; // validation already rejected unknown refs
|
|
295
|
+
const dep = await context.Provider.GetEntityObject('MJ: Task Dependencies', context.ContextUser);
|
|
296
|
+
dep.NewRecord();
|
|
297
|
+
dep.TaskID = taskID;
|
|
298
|
+
dep.DependsOnTaskID = dependsOnTaskID;
|
|
299
|
+
dep.DependencyType = edge.dependencyType ?? 'Prerequisite';
|
|
300
|
+
// NULL for an unconditional edge, matching AIAgentStepPath — so a graph authored in
|
|
301
|
+
// the flow editor and one emitted by an agent store the same thing.
|
|
302
|
+
dep.Condition = edge.condition ?? null;
|
|
303
|
+
if (!(await dep.Save())) {
|
|
304
|
+
throw new Error(`Could not create dependency ${node.tempId} -> ${edge.tempId}: ${dep.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
async loadChildren(parentTaskID, context) {
|
|
310
|
+
const result = await RunView.FromMetadataProvider(context.Provider).RunView({ EntityName: 'MJ: Tasks', ExtraFilter: `ParentID='${parentTaskID}'`, ResultType: 'entity_object' }, context.ContextUser);
|
|
311
|
+
return (result.Success ? result.Results : []) ?? [];
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=TaskGraphService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskGraphService.js","sourceRoot":"","sources":["../src/TaskGraphService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TaskGraphSubmitter, type TaskGraphSubmitRequest, type TaskGraphSubmitOutcome } from '@memberjunction/ai-core-plus';
|
|
2
|
+
export declare class DurableTaskGraphSubmitter extends TaskGraphSubmitter {
|
|
3
|
+
Submit(request: TaskGraphSubmitRequest): Promise<TaskGraphSubmitOutcome>;
|
|
4
|
+
}
|
|
5
|
+
/** Prevents tree-shaking of the registered submitter. */
|
|
6
|
+
export declare function LoadTaskGraphSubmitter(): void;
|
|
7
|
+
//# sourceMappingURL=TaskGraphSubmitterImpl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskGraphSubmitterImpl.d.ts","sourceRoot":"","sources":["../src/TaskGraphSubmitterImpl.ts"],"names":[],"mappings":"AAgBA,OAAO,EACH,kBAAkB,EAElB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC9B,MAAM,8BAA8B,CAAC;AAGtC,qBACa,yBAA0B,SAAQ,kBAAkB;IAChD,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAiBxF;AAED,yDAAyD;AACzD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* @fileoverview The durable implementation of the `TaskGraphSubmitter` seam.
|
|
9
|
+
*
|
|
10
|
+
* `@memberjunction/ai-core-plus` declares the capability the agent loop needs — "persist this graph
|
|
11
|
+
* and hand me its handle" — without knowing who fulfils it. This is the fulfilment, and it lives
|
|
12
|
+
* here because this is the package that owns durable execution. Registering rather than importing
|
|
13
|
+
* keeps the dependency running task-graph → ai-core-plus, so an agent run in a context with no
|
|
14
|
+
* dispatcher (a CLI, a browser bundle, a unit test) does not drag the entity layer along with it.
|
|
15
|
+
*
|
|
16
|
+
* The body is deliberately trivial: all real work stays in `TaskGraphService`, which is the same
|
|
17
|
+
* code path the Remote Operation and the messaging/scheduling seams use. One submission path means
|
|
18
|
+
* a graph cannot be validated differently depending on who produced it (D16).
|
|
19
|
+
*
|
|
20
|
+
* @module @memberjunction/task-graph
|
|
21
|
+
*/
|
|
22
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
23
|
+
import { TaskGraphSubmitter, TASK_GRAPH_SUBMITTER_KEY, } from '@memberjunction/ai-core-plus';
|
|
24
|
+
import { TaskGraphService } from './TaskGraphService.js';
|
|
25
|
+
let DurableTaskGraphSubmitter = class DurableTaskGraphSubmitter extends TaskGraphSubmitter {
|
|
26
|
+
async Submit(request) {
|
|
27
|
+
const result = await new TaskGraphService().Submit(request.Spec, {
|
|
28
|
+
EnvironmentID: request.EnvironmentID,
|
|
29
|
+
ConversationDetailID: request.ConversationDetailID ?? null,
|
|
30
|
+
ContextUser: request.ContextUser,
|
|
31
|
+
Provider: request.Provider,
|
|
32
|
+
AgentRunID: request.AgentRunID ?? null,
|
|
33
|
+
// Carried through so MAX_REINVOKE_DEPTH bounds a real chain. Without it every
|
|
34
|
+
// submission was depth 0 and the cap could never trip.
|
|
35
|
+
ReinvokeDepth: request.ReinvokeDepth ?? 0,
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
Success: result.Success,
|
|
39
|
+
ParentTaskID: result.ParentTaskID,
|
|
40
|
+
ErrorMessage: result.ErrorMessage,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
DurableTaskGraphSubmitter = __decorate([
|
|
45
|
+
RegisterClass(TaskGraphSubmitter, TASK_GRAPH_SUBMITTER_KEY)
|
|
46
|
+
], DurableTaskGraphSubmitter);
|
|
47
|
+
export { DurableTaskGraphSubmitter };
|
|
48
|
+
/** Prevents tree-shaking of the registered submitter. */
|
|
49
|
+
export function LoadTaskGraphSubmitter() {
|
|
50
|
+
void DurableTaskGraphSubmitter;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=TaskGraphSubmitterImpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskGraphSubmitterImpl.js","sourceRoot":"","sources":["../src/TaskGraphSubmitterImpl.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,GAG3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG/C,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,kBAAkB;IACtD,KAAK,CAAC,MAAM,CAAC,OAA+B;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,gBAAgB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;YAC7D,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,IAAI;YAC1D,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,8EAA8E;YAC9E,uDAAuD;YACvD,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,YAAY,EAAE,MAAM,CAAC,YAAY;SACpC,CAAC;IACN,CAAC;CACJ,CAAA;AAlBY,yBAAyB;IADrC,aAAa,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;GAC/C,yBAAyB,CAkBrC;;AAED,yDAAyD;AACzD,MAAM,UAAU,sBAAsB;IAClC,KAAK,yBAAyB,CAAC;AACnC,CAAC"}
|