@memberjunction/task-graph 6.1.0-edge.1 → 6.1.0-edge.3
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 +180 -4
- package/README.md +214 -0
- package/dist/TaskClaimStore.d.ts +387 -4
- package/dist/TaskClaimStore.d.ts.map +1 -1
- package/dist/TaskClaimStore.js +605 -20
- package/dist/TaskClaimStore.js.map +1 -1
- package/dist/TaskGraphDispatcher.d.ts +668 -5
- package/dist/TaskGraphDispatcher.d.ts.map +1 -1
- package/dist/TaskGraphDispatcher.js +2942 -127
- package/dist/TaskGraphDispatcher.js.map +1 -1
- package/dist/TaskGraphService.d.ts +364 -5
- package/dist/TaskGraphService.d.ts.map +1 -1
- package/dist/TaskGraphService.js +1039 -43
- package/dist/TaskGraphService.js.map +1 -1
- package/dist/TaskGraphSubmitterImpl.d.ts.map +1 -1
- package/dist/TaskGraphSubmitterImpl.js +5 -0
- package/dist/TaskGraphSubmitterImpl.js.map +1 -1
- package/dist/TaskLoopExecutor.d.ts +62 -0
- package/dist/TaskLoopExecutor.d.ts.map +1 -0
- package/dist/TaskLoopExecutor.js +248 -0
- package/dist/TaskLoopExecutor.js.map +1 -0
- package/dist/WorkflowSpecSync.d.ts +28 -2
- package/dist/WorkflowSpecSync.d.ts.map +1 -1
- package/dist/WorkflowSpecSync.js +83 -2
- package/dist/WorkflowSpecSync.js.map +1 -1
- package/dist/condition-gate.d.ts +128 -0
- package/dist/condition-gate.d.ts.map +1 -0
- package/dist/condition-gate.js +257 -0
- package/dist/condition-gate.js.map +1 -0
- package/dist/debug-state.d.ts +102 -0
- package/dist/debug-state.d.ts.map +1 -0
- package/dist/debug-state.js +135 -0
- package/dist/debug-state.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/operations/TaskGraphDebugOperations.d.ts +99 -0
- package/dist/operations/TaskGraphDebugOperations.d.ts.map +1 -0
- package/dist/operations/TaskGraphDebugOperations.js +310 -0
- package/dist/operations/TaskGraphDebugOperations.js.map +1 -0
- package/dist/operations/TaskGraphOperations.d.ts +20 -2
- package/dist/operations/TaskGraphOperations.d.ts.map +1 -1
- package/dist/operations/TaskGraphOperations.js +51 -8
- package/dist/operations/TaskGraphOperations.js.map +1 -1
- package/dist/operations/WorkflowDraftOperation.d.ts +37 -0
- package/dist/operations/WorkflowDraftOperation.d.ts.map +1 -0
- package/dist/operations/WorkflowDraftOperation.js +141 -0
- package/dist/operations/WorkflowDraftOperation.js.map +1 -0
- package/dist/settlement-rescue.d.ts +85 -0
- package/dist/settlement-rescue.d.ts.map +1 -0
- package/dist/settlement-rescue.js +119 -0
- package/dist/settlement-rescue.js.map +1 -0
- package/dist/task-graph-kick.d.ts +3 -0
- package/dist/task-graph-kick.d.ts.map +1 -0
- package/dist/task-graph-kick.js +17 -0
- package/dist/task-graph-kick.js.map +1 -0
- package/dist/task-predicates.d.ts +77 -0
- package/dist/task-predicates.d.ts.map +1 -0
- package/dist/task-predicates.js +75 -0
- package/dist/task-predicates.js.map +1 -0
- package/dist/types.d.ts +224 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +12 -8
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who completes a task — a dispatcher, or a person.
|
|
3
|
+
*
|
|
4
|
+
* **Why this is a module and not three inline predicates.** The distinction is asked in SQL (claim
|
|
5
|
+
* reclamation, the human settle/expiry sweeps) and in TypeScript (claim routing), by code in two
|
|
6
|
+
* files, and it has been written down four different ways:
|
|
7
|
+
*
|
|
8
|
+
* `AgentID IS NOT NULL OR ActionID IS NOT NULL` — claim reclamation
|
|
9
|
+
* `StepType='Human'` — human settle, human expiry
|
|
10
|
+
* `StepType='Human' OR (StepType IS NULL AND UserID IS NOT NULL)` — human reopen
|
|
11
|
+
* `if (ActionID) … else if (PromptID) … else if (!AgentID) human` — claim routing
|
|
12
|
+
*
|
|
13
|
+
* Those were co-extensive when they were written and are not any more, and the way that surfaced is
|
|
14
|
+
* the reason this file exists. The first form predates the `PromptID` column: a Prompt step (and a
|
|
15
|
+
* ForEach/While with a prompt body) carries `PromptID` with both `AgentID` and `ActionID` null, so a
|
|
16
|
+
* prompt task whose owner crashed is claimed normally, expires normally, and is then **invisible to
|
|
17
|
+
* both reclamation statements** — `TryClaim` cannot retake it because it is no longer `Pending`, and
|
|
18
|
+
* `FindOrphanedInProgress` will not even report it. The graph sits `In Progress` forever with its
|
|
19
|
+
* submitting run `Paused` forever, and `IsGraphStalled` reports it healthy because an `In Progress`
|
|
20
|
+
* node counts as active. Zero diagnostics, anywhere.
|
|
21
|
+
*
|
|
22
|
+
* The fix is not "add `PromptID` to the OR" — that restores the coincidence and hands the same
|
|
23
|
+
* failure to whoever adds the next runner column. It is to say the thing once, here, in the terms
|
|
24
|
+
* the engine actually means, and have every site ask this module.
|
|
25
|
+
*
|
|
26
|
+
* @module @memberjunction/task-graph
|
|
27
|
+
*/
|
|
28
|
+
/** Renders a column reference for the dialect the caller is building. */
|
|
29
|
+
export type ColumnQuoter = (column: string) => string;
|
|
30
|
+
/** For `RunView.ExtraFilter`, which takes bare column names. */
|
|
31
|
+
export declare const BARE_COLUMNS: ColumnQuoter;
|
|
32
|
+
/**
|
|
33
|
+
* The columns that assign a task to an executor, in the order claim routing tries them.
|
|
34
|
+
*
|
|
35
|
+
* Adding a runner means adding its column here and nowhere else — which is the whole point. If a
|
|
36
|
+
* future runner is assigned by something other than a column on the task, this list stops being
|
|
37
|
+
* sufficient and the predicate below must change shape rather than grow.
|
|
38
|
+
*/
|
|
39
|
+
export declare const EXECUTOR_COLUMNS: readonly ["AgentID", "ActionID", "PromptID"];
|
|
40
|
+
/** The shape both predicates need. Structural, so `MJTaskEntity` satisfies it as-is. */
|
|
41
|
+
export type TaskAssignment = {
|
|
42
|
+
AgentID: string | null;
|
|
43
|
+
ActionID: string | null;
|
|
44
|
+
PromptID: string | null;
|
|
45
|
+
StepType: string | null;
|
|
46
|
+
UserID: string | null;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* SQL for "a dispatcher completes this task".
|
|
50
|
+
*
|
|
51
|
+
* Used to SCOPE reclamation: only a task something was supposed to be executing can have been
|
|
52
|
+
* abandoned by a crash. A human task's `In Progress` — if it ever reaches it — is a person's state
|
|
53
|
+
* to own, not a claim to reclaim.
|
|
54
|
+
*/
|
|
55
|
+
export declare function MachineTaskSQL(quote?: ColumnQuoter): string;
|
|
56
|
+
/**
|
|
57
|
+
* SQL for "a person completes this task".
|
|
58
|
+
*
|
|
59
|
+
* The `StepType IS NULL` arm is not defensive clutter: `StepType` is nullable and rows predating the
|
|
60
|
+
* column exist in real databases. A human task written before it would be invisible to a bare
|
|
61
|
+
* `StepType='Human'` filter — asked, never settled, never expired, dead forever. This is the wide
|
|
62
|
+
* form the reopen path already used; the settle and expiry paths were narrower, which is B4.
|
|
63
|
+
*/
|
|
64
|
+
export declare function HumanTaskSQL(quote?: ColumnQuoter): string;
|
|
65
|
+
/** True when some runner owns this task. The TypeScript twin of {@link MachineTaskSQL}. */
|
|
66
|
+
export declare function IsMachineTask(task: Pick<TaskAssignment, 'AgentID' | 'ActionID' | 'PromptID'>): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* True when a person completes this task.
|
|
69
|
+
*
|
|
70
|
+
* Deliberately NOT `!IsMachineTask(task)`. A task carrying both an executor column and a `UserID` is
|
|
71
|
+
* malformed, and the two questions should not silently answer each other for it: routing asks
|
|
72
|
+
* "is there a runner for this?" and the human lifecycle asks "is somebody expected to act?". A row
|
|
73
|
+
* that says yes to both is a bug worth seeing rather than a coin flip resolved by operator
|
|
74
|
+
* precedence.
|
|
75
|
+
*/
|
|
76
|
+
export declare function IsHumanTask(task: Pick<TaskAssignment, 'StepType' | 'UserID'>): boolean;
|
|
77
|
+
//# sourceMappingURL=task-predicates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-predicates.d.ts","sourceRoot":"","sources":["../src/task-predicates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAEtD,gEAAgE;AAChE,eAAO,MAAM,YAAY,EAAE,YAAiC,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,8CAA+C,CAAC;AAE7E,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,GAAE,YAA2B,GAAG,MAAM,CAEzE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,YAA2B,GAAG,MAAM,CAEvE;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC,GAAG,OAAO,CAEtG;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,QAAQ,CAAC,GAAG,OAAO,CAEtF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who completes a task — a dispatcher, or a person.
|
|
3
|
+
*
|
|
4
|
+
* **Why this is a module and not three inline predicates.** The distinction is asked in SQL (claim
|
|
5
|
+
* reclamation, the human settle/expiry sweeps) and in TypeScript (claim routing), by code in two
|
|
6
|
+
* files, and it has been written down four different ways:
|
|
7
|
+
*
|
|
8
|
+
* `AgentID IS NOT NULL OR ActionID IS NOT NULL` — claim reclamation
|
|
9
|
+
* `StepType='Human'` — human settle, human expiry
|
|
10
|
+
* `StepType='Human' OR (StepType IS NULL AND UserID IS NOT NULL)` — human reopen
|
|
11
|
+
* `if (ActionID) … else if (PromptID) … else if (!AgentID) human` — claim routing
|
|
12
|
+
*
|
|
13
|
+
* Those were co-extensive when they were written and are not any more, and the way that surfaced is
|
|
14
|
+
* the reason this file exists. The first form predates the `PromptID` column: a Prompt step (and a
|
|
15
|
+
* ForEach/While with a prompt body) carries `PromptID` with both `AgentID` and `ActionID` null, so a
|
|
16
|
+
* prompt task whose owner crashed is claimed normally, expires normally, and is then **invisible to
|
|
17
|
+
* both reclamation statements** — `TryClaim` cannot retake it because it is no longer `Pending`, and
|
|
18
|
+
* `FindOrphanedInProgress` will not even report it. The graph sits `In Progress` forever with its
|
|
19
|
+
* submitting run `Paused` forever, and `IsGraphStalled` reports it healthy because an `In Progress`
|
|
20
|
+
* node counts as active. Zero diagnostics, anywhere.
|
|
21
|
+
*
|
|
22
|
+
* The fix is not "add `PromptID` to the OR" — that restores the coincidence and hands the same
|
|
23
|
+
* failure to whoever adds the next runner column. It is to say the thing once, here, in the terms
|
|
24
|
+
* the engine actually means, and have every site ask this module.
|
|
25
|
+
*
|
|
26
|
+
* @module @memberjunction/task-graph
|
|
27
|
+
*/
|
|
28
|
+
/** For `RunView.ExtraFilter`, which takes bare column names. */
|
|
29
|
+
export const BARE_COLUMNS = (column) => column;
|
|
30
|
+
/**
|
|
31
|
+
* The columns that assign a task to an executor, in the order claim routing tries them.
|
|
32
|
+
*
|
|
33
|
+
* Adding a runner means adding its column here and nowhere else — which is the whole point. If a
|
|
34
|
+
* future runner is assigned by something other than a column on the task, this list stops being
|
|
35
|
+
* sufficient and the predicate below must change shape rather than grow.
|
|
36
|
+
*/
|
|
37
|
+
export const EXECUTOR_COLUMNS = ['AgentID', 'ActionID', 'PromptID'];
|
|
38
|
+
/**
|
|
39
|
+
* SQL for "a dispatcher completes this task".
|
|
40
|
+
*
|
|
41
|
+
* Used to SCOPE reclamation: only a task something was supposed to be executing can have been
|
|
42
|
+
* abandoned by a crash. A human task's `In Progress` — if it ever reaches it — is a person's state
|
|
43
|
+
* to own, not a claim to reclaim.
|
|
44
|
+
*/
|
|
45
|
+
export function MachineTaskSQL(quote = BARE_COLUMNS) {
|
|
46
|
+
return `(${EXECUTOR_COLUMNS.map((c) => `${quote(c)} IS NOT NULL`).join(' OR ')})`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* SQL for "a person completes this task".
|
|
50
|
+
*
|
|
51
|
+
* The `StepType IS NULL` arm is not defensive clutter: `StepType` is nullable and rows predating the
|
|
52
|
+
* column exist in real databases. A human task written before it would be invisible to a bare
|
|
53
|
+
* `StepType='Human'` filter — asked, never settled, never expired, dead forever. This is the wide
|
|
54
|
+
* form the reopen path already used; the settle and expiry paths were narrower, which is B4.
|
|
55
|
+
*/
|
|
56
|
+
export function HumanTaskSQL(quote = BARE_COLUMNS) {
|
|
57
|
+
return `(${quote('StepType')} = 'Human' OR (${quote('StepType')} IS NULL AND ${quote('UserID')} IS NOT NULL))`;
|
|
58
|
+
}
|
|
59
|
+
/** True when some runner owns this task. The TypeScript twin of {@link MachineTaskSQL}. */
|
|
60
|
+
export function IsMachineTask(task) {
|
|
61
|
+
return !!(task.AgentID || task.ActionID || task.PromptID);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* True when a person completes this task.
|
|
65
|
+
*
|
|
66
|
+
* Deliberately NOT `!IsMachineTask(task)`. A task carrying both an executor column and a `UserID` is
|
|
67
|
+
* malformed, and the two questions should not silently answer each other for it: routing asks
|
|
68
|
+
* "is there a runner for this?" and the human lifecycle asks "is somebody expected to act?". A row
|
|
69
|
+
* that says yes to both is a bug worth seeing rather than a coin flip resolved by operator
|
|
70
|
+
* precedence.
|
|
71
|
+
*/
|
|
72
|
+
export function IsHumanTask(task) {
|
|
73
|
+
return task.StepType === 'Human' || (task.StepType == null && task.UserID != null);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=task-predicates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-predicates.js","sourceRoot":"","sources":["../src/task-predicates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAW7E;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAsB,YAAY;IAC7D,OAAO,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACtF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,QAAsB,YAAY;IAC3D,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,kBAAkB,KAAK,CAAC,UAAU,CAAC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACnH,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAC,IAA+D;IACzF,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAiD;IACzE,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AACvF,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -19,6 +19,15 @@ import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
|
19
19
|
export type ProviderFactory = {
|
|
20
20
|
CreateProvider(): Promise<IMetadataProvider>;
|
|
21
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* How a runner reports progress inside one task body.
|
|
24
|
+
*
|
|
25
|
+
* A plain callback rather than an observer object because a runner should not need to know frames
|
|
26
|
+
* exist: it says what it is doing, and the dispatcher decides whether anyone is listening, how often
|
|
27
|
+
* to announce it, and in what shape. MUST NOT throw or block — the dispatcher wraps it, but a
|
|
28
|
+
* runner's own use should treat it as commentary, never a step of the work.
|
|
29
|
+
*/
|
|
30
|
+
export type TaskRunProgressCallback = (message: string, percent?: number) => void;
|
|
22
31
|
/**
|
|
23
32
|
* Runs one agent for one task node.
|
|
24
33
|
*
|
|
@@ -29,6 +38,95 @@ export type ProviderFactory = {
|
|
|
29
38
|
export type TaskAgentRunner = {
|
|
30
39
|
RunAgentForTask(params: TaskAgentRunParams): Promise<TaskAgentRunResult>;
|
|
31
40
|
};
|
|
41
|
+
/** Everything running one action for one task node needs. */
|
|
42
|
+
export type TaskActionRunParams = {
|
|
43
|
+
TaskID: string;
|
|
44
|
+
ActionID: string;
|
|
45
|
+
/** Structured input from `Task.InputPayload` — for durable entity-action dispatch, the redacted params. */
|
|
46
|
+
InputPayload: unknown;
|
|
47
|
+
/** Outputs of this node's satisfied prerequisites, in the same shape agent nodes receive. */
|
|
48
|
+
DependencyOutputs: Map<string, unknown>;
|
|
49
|
+
Provider: IMetadataProvider;
|
|
50
|
+
ContextUser: UserInfo;
|
|
51
|
+
/** Optional progress sink; the dispatcher turns calls into rate-limited `NodeProgress` frames. */
|
|
52
|
+
OnProgress?: TaskRunProgressCallback;
|
|
53
|
+
};
|
|
54
|
+
/** The outcome of one action node. */
|
|
55
|
+
export type TaskActionRunResult = {
|
|
56
|
+
Success: boolean;
|
|
57
|
+
Output?: unknown;
|
|
58
|
+
ErrorMessage?: string;
|
|
59
|
+
/**
|
|
60
|
+
* The `MJ: Action Execution Logs` row this run produced.
|
|
61
|
+
*
|
|
62
|
+
* Carried so the step can record it, which is what lets a workflow's action offer "view the
|
|
63
|
+
* execution log" the way an ordinary agent run step does. Optional because a runner that
|
|
64
|
+
* cannot produce one is limited, not broken.
|
|
65
|
+
*/
|
|
66
|
+
ActionLogID?: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Runs one action for one task node.
|
|
70
|
+
*
|
|
71
|
+
* The third execution shape, beside agents and people. Abstracted for the same reason
|
|
72
|
+
* {@link TaskAgentRunner} is: the dispatcher must stay unit-testable without standing up the action
|
|
73
|
+
* engine, and this package must not import it — `@memberjunction/actions` depends on the entity
|
|
74
|
+
* layer this one also builds on, and reaching for it here would make every consumer of durable
|
|
75
|
+
* execution load the action engine too.
|
|
76
|
+
*
|
|
77
|
+
* **A host with no action runner is not broken, it is limited.** Action nodes stay Pending on it,
|
|
78
|
+
* which is visible in the Tasks UI, rather than being marked failed — a task nobody in this
|
|
79
|
+
* deployment can run is not the same as a task that ran and did not work.
|
|
80
|
+
*/
|
|
81
|
+
export type TaskActionRunner = {
|
|
82
|
+
RunActionForTask(params: TaskActionRunParams): Promise<TaskActionRunResult>;
|
|
83
|
+
};
|
|
84
|
+
/** Everything running one prompt for one task node needs. */
|
|
85
|
+
export type TaskPromptRunParams = {
|
|
86
|
+
TaskID: string;
|
|
87
|
+
PromptID: string;
|
|
88
|
+
/** Structured input from `Task.InputPayload`, after the node's input mapping. */
|
|
89
|
+
InputPayload: unknown;
|
|
90
|
+
/** Outputs of this node's satisfied prerequisites, in the same shape agent nodes receive. */
|
|
91
|
+
DependencyOutputs: Map<string, unknown>;
|
|
92
|
+
/** Template parameters declared on the node's configuration. */
|
|
93
|
+
TemplateParameters?: Record<string, string>;
|
|
94
|
+
Provider: IMetadataProvider;
|
|
95
|
+
ContextUser: UserInfo;
|
|
96
|
+
/** Optional progress sink; the dispatcher turns calls into rate-limited `NodeProgress` frames. */
|
|
97
|
+
OnProgress?: TaskRunProgressCallback;
|
|
98
|
+
};
|
|
99
|
+
/** The outcome of one prompt node. */
|
|
100
|
+
export type TaskPromptRunResult = {
|
|
101
|
+
Success: boolean;
|
|
102
|
+
/** The parsed JSON response, deep-merged into the payload by the dispatcher. */
|
|
103
|
+
Output?: unknown;
|
|
104
|
+
ErrorMessage?: string;
|
|
105
|
+
/** The `MJ: AI Prompt Runs` row, for provenance. */
|
|
106
|
+
PromptRunID?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Set when the prompt asked to end the workflow and say something to a person.
|
|
109
|
+
*
|
|
110
|
+
* A prompt is the one node kind that can decide the workflow is *done* — it is the only one
|
|
111
|
+
* doing open-ended reasoning. The dispatcher honours it by skipping the remaining tasks and
|
|
112
|
+
* settling the parent Complete with this message, rather than treating an early finish as an
|
|
113
|
+
* abandoned graph.
|
|
114
|
+
*/
|
|
115
|
+
ChatMessage?: string;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Runs one prompt for one task node.
|
|
119
|
+
*
|
|
120
|
+
* The fourth execution shape, and abstracted for the same reason as the others: this package must
|
|
121
|
+
* stay unit-testable without standing up the AI engine, and must not import it — the prompt runner
|
|
122
|
+
* lives in MJServer where the engine already does.
|
|
123
|
+
*
|
|
124
|
+
* **A host with no prompt runner is limited, not broken.** Prompt nodes stay Pending and visible,
|
|
125
|
+
* exactly like action nodes without an action runner.
|
|
126
|
+
*/
|
|
127
|
+
export type TaskPromptRunner = {
|
|
128
|
+
RunPromptForTask(params: TaskPromptRunParams): Promise<TaskPromptRunResult>;
|
|
129
|
+
};
|
|
32
130
|
/** What happened to a task or a graph, as a closed set a consumer can branch on. */
|
|
33
131
|
export type TaskGraphFrameKind =
|
|
34
132
|
/** A task was claimed by an instance and is about to run. */
|
|
@@ -39,10 +137,68 @@ export type TaskGraphFrameKind =
|
|
|
39
137
|
| 'TaskFailed'
|
|
40
138
|
/** A task was blocked because a prerequisite failed or became unreachable. */
|
|
41
139
|
| 'TaskBlocked'
|
|
140
|
+
/**
|
|
141
|
+
* A task was NOT TAKEN because another branch of an exclusive fan-out won.
|
|
142
|
+
*
|
|
143
|
+
* Distinct from `TaskBlocked` on purpose: blocked means something went wrong upstream and the
|
|
144
|
+
* viewer should look for a cause; skipped means the workflow chose a different route and there
|
|
145
|
+
* is nothing to investigate. Rendering them the same would send people hunting for bugs that do
|
|
146
|
+
* not exist.
|
|
147
|
+
*/
|
|
148
|
+
| 'TaskSkipped'
|
|
42
149
|
/** A human task became actionable and is waiting on its assignee. */
|
|
43
150
|
| 'TaskAwaitingHuman'
|
|
44
151
|
/** Every node has reached a terminal state; `Status` is the graph's rolled-up outcome. */
|
|
45
|
-
| 'GraphSettled'
|
|
152
|
+
| 'GraphSettled'
|
|
153
|
+
/**
|
|
154
|
+
* A gating edge's verdict changed — satisfied, not taken, or held.
|
|
155
|
+
*
|
|
156
|
+
* Emitted on CHANGE, not on every poll (the dispatcher re-resolves edges each pass, and an
|
|
157
|
+
* unqualified emission would repeat every few seconds for as long as the graph is live, exactly
|
|
158
|
+
* the flood `logUnevaluableConditionOnce` exists to prevent in the log). This frame is what lets
|
|
159
|
+
* a viewer answer "why did this branch run?" — and what makes a permanent hold visible the
|
|
160
|
+
* moment it happens instead of after a forensic query.
|
|
161
|
+
*/
|
|
162
|
+
| 'GateDecision'
|
|
163
|
+
/**
|
|
164
|
+
* A task's claim changed hands or state — claimed, heartbeat lost, reclaimed.
|
|
165
|
+
*
|
|
166
|
+
* The R2-1 defect class ("a crashed worker's task wedges the graph forever with zero
|
|
167
|
+
* diagnostics") becomes a red badge instead of an invisible fact precisely because this frame
|
|
168
|
+
* exists.
|
|
169
|
+
*/
|
|
170
|
+
| 'ClaimChanged'
|
|
171
|
+
/**
|
|
172
|
+
* One dispatch pass finished for this graph — the engine's heartbeat.
|
|
173
|
+
*
|
|
174
|
+
* Carries the pass's counts (eligible / held / claimed / in flight). A run that is stuck is a
|
|
175
|
+
* strip of these ticking with nothing moving, which is the honest visual of a stall.
|
|
176
|
+
*/
|
|
177
|
+
| 'PassCompleted'
|
|
178
|
+
/** The graph was paused — by a person or by a breakpoint. Nothing new will be claimed. */
|
|
179
|
+
| 'GraphPaused'
|
|
180
|
+
/** The graph was resumed; claiming continues normally. */
|
|
181
|
+
| 'GraphResumed'
|
|
182
|
+
/**
|
|
183
|
+
* An eligible task carried a breakpoint, so the graph paused BEFORE the task was claimed.
|
|
184
|
+
* `TaskID` names the task the run is now parked in front of.
|
|
185
|
+
*/
|
|
186
|
+
| 'BreakpointHit'
|
|
187
|
+
/**
|
|
188
|
+
* A step allowance could not release anything on this pass — the named work is already running,
|
|
189
|
+
* or this host has no runner for it. The allowance is NOT spent, and `Reason` says so.
|
|
190
|
+
*
|
|
191
|
+
* Exists because the alternative is the worst shape a control can have: the button reports
|
|
192
|
+
* nothing, the allowance is gone, and the run does not move.
|
|
193
|
+
*/
|
|
194
|
+
| 'StepRefused'
|
|
195
|
+
/**
|
|
196
|
+
* A runner reported progress inside one task — message and optional percentage.
|
|
197
|
+
*
|
|
198
|
+
* The bridge from node-level execution (an agent run's own progress stream) up to graph-level
|
|
199
|
+
* observers, rate-limited by the dispatcher so a chatty runner cannot flood the topic.
|
|
200
|
+
*/
|
|
201
|
+
| 'NodeProgress';
|
|
46
202
|
/**
|
|
47
203
|
* One thing that happened, addressed by the graph it happened in.
|
|
48
204
|
*
|
|
@@ -80,6 +236,44 @@ export type TaskGraphFrame = {
|
|
|
80
236
|
/** How many nodes have reached a terminal state, and out of how many. */
|
|
81
237
|
CompletedCount?: number;
|
|
82
238
|
TotalCount?: number;
|
|
239
|
+
/** The `MJ: Task Dependencies` row the verdict is about. */
|
|
240
|
+
EdgeID?: string;
|
|
241
|
+
/** The edge's origin task. `TaskID` above is the edge's target. */
|
|
242
|
+
DependsOnTaskID?: string;
|
|
243
|
+
/** What the gate decided: the edge is open, the branch was not taken, or it cannot be answered yet. */
|
|
244
|
+
Verdict?: 'satisfied' | 'notTaken' | 'held';
|
|
245
|
+
/** The condition text, so a viewer can show WHY without loading the row. */
|
|
246
|
+
ConditionText?: string;
|
|
247
|
+
/** Human-readable detail: the hold reason, the override applied, or who paused the graph. */
|
|
248
|
+
Reason?: string;
|
|
249
|
+
/** What happened to the claim. */
|
|
250
|
+
ClaimEvent?: 'claimed' | 'heartbeat-lost' | 'reclaimed';
|
|
251
|
+
/** The dispatcher instance holding (or losing) the claim. */
|
|
252
|
+
ClaimedBy?: string;
|
|
253
|
+
/** When the claim lapses unless extended, ISO 8601. */
|
|
254
|
+
ClaimExpiresAt?: string;
|
|
255
|
+
/** Monotonic per-instance pass counter, so a viewer can order and gap-detect ticks. */
|
|
256
|
+
PassNumber?: number;
|
|
257
|
+
/** Tasks whose prerequisites were satisfied this pass. */
|
|
258
|
+
EligibleCount?: number;
|
|
259
|
+
/** Tasks held by an unanswerable condition or undecided fork. */
|
|
260
|
+
HeldCount?: number;
|
|
261
|
+
/** Tasks this instance claimed on this pass, for THIS graph. */
|
|
262
|
+
ClaimedCount?: number;
|
|
263
|
+
/**
|
|
264
|
+
* Tasks this INSTANCE is executing right now, across every graph it is working — not this
|
|
265
|
+
* graph's in-flight count.
|
|
266
|
+
*
|
|
267
|
+
* Named for what it measures because the two readings differ and a viewer cannot tell them
|
|
268
|
+
* apart: it is the dispatcher's own load against `MaxConcurrentTasks`, which is what explains a
|
|
269
|
+
* graph whose steps are ready but not starting. A per-graph count would answer a different
|
|
270
|
+
* question (and is visible anyway as the steps rendered running on the canvas).
|
|
271
|
+
*/
|
|
272
|
+
InstanceInFlightCount?: number;
|
|
273
|
+
/** What the runner says it is doing. */
|
|
274
|
+
ProgressMessage?: string;
|
|
275
|
+
/** 0–100 when the runner can quantify it. */
|
|
276
|
+
ProgressPercent?: number;
|
|
83
277
|
};
|
|
84
278
|
/**
|
|
85
279
|
* Receives dispatcher lifecycle frames.
|
|
@@ -99,6 +293,26 @@ export type TaskGraphObserver = {
|
|
|
99
293
|
export type TaskAgentRunParams = {
|
|
100
294
|
/** The task row being executed. */
|
|
101
295
|
TaskID: string;
|
|
296
|
+
/**
|
|
297
|
+
* The agent run that submitted this graph, when there was one.
|
|
298
|
+
*
|
|
299
|
+
* Becomes the spawned run's `ParentRunID`, which is what makes a workflow's total cost a single
|
|
300
|
+
* indexed sum over `RootParentRunID` instead of a walk. Null for a graph nobody's run submitted
|
|
301
|
+
* — a schedule, MCP, or a person — and that is a real case, not a missing value.
|
|
302
|
+
*
|
|
303
|
+
* Note this is a run→run link: the task graph sits BETWEEN the two conceptually but cannot be
|
|
304
|
+
* the parent, because the column points at a run. The graph is recovered through
|
|
305
|
+
* `Task.AgentRunID` and `Task.ParentID`.
|
|
306
|
+
*/
|
|
307
|
+
SubmittingAgentRunID?: string | null;
|
|
308
|
+
/**
|
|
309
|
+
* How many continuation hops led to this run, from the graph's own metadata.
|
|
310
|
+
*
|
|
311
|
+
* Carried so the chain is BOUNDED. A flow that dispatches a graph containing itself recurses
|
|
312
|
+
* forever otherwise: each spawned run starts at depth zero, so `MAX_REINVOKE_DEPTH` compares
|
|
313
|
+
* against a permanent zero and never fires. The cap exists; this is what feeds it.
|
|
314
|
+
*/
|
|
315
|
+
ContinuationDepth?: number;
|
|
102
316
|
/** Agent assigned to the task. */
|
|
103
317
|
AgentID: string;
|
|
104
318
|
/** Parsed `Task.InputPayload`, if any. */
|
|
@@ -109,6 +323,8 @@ export type TaskAgentRunParams = {
|
|
|
109
323
|
Provider: IMetadataProvider;
|
|
110
324
|
/** User the work runs as. */
|
|
111
325
|
ContextUser: UserInfo;
|
|
326
|
+
/** Optional progress sink; the dispatcher turns calls into rate-limited `NodeProgress` frames. */
|
|
327
|
+
OnProgress?: TaskRunProgressCallback;
|
|
112
328
|
};
|
|
113
329
|
/** Outcome of running one task node. */
|
|
114
330
|
export type TaskAgentRunResult = {
|
|
@@ -173,6 +389,13 @@ export type TaskGraphDispatcherConfig = {
|
|
|
173
389
|
* Identifies this dispatcher instance in `Task.ClaimedBy`. Must be stable for the process
|
|
174
390
|
* lifetime and distinct per instance — it is what lets reconciliation tell "my orphaned work"
|
|
175
391
|
* from "another instance's live work".
|
|
392
|
+
*
|
|
393
|
+
* **Distinctness is a correctness requirement, not a nicety** (C2). Every ownership guard in the
|
|
394
|
+
* claim protocol compares against this value, so two instances sharing one defeats all of them
|
|
395
|
+
* at once: A's heartbeat renews B's lease, and A's stale terminal write lands over B's live
|
|
396
|
+
* execution. Host+pid is NOT sufficient — `HOSTNAME` is unexported to child processes under
|
|
397
|
+
* systemd and pm2, and a containerised process is routinely pid 1 — which is why the server's
|
|
398
|
+
* default appends real entropy.
|
|
176
399
|
*/
|
|
177
400
|
InstanceID: string;
|
|
178
401
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC5E,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,kBAAkB;AAC1B,6DAA6D;AAC3D,aAAa;AACf,oCAAoC;GAClC,eAAe;AACjB,8CAA8C;GAC5C,YAAY;AACd,8EAA8E;GAC5E,aAAa;AACf,qEAAqE;GACnE,mBAAmB;AACrB,0FAA0F;GACxF,cAAc,CAAC;AAErB;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAycA,wFAAwF;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAkD;IACpF,eAAe,EAAE,GAAG;IACpB,wBAAwB,EAAE,EAAE;IAC5B,kBAAkB,EAAE,CAAC;IACrB,mBAAmB,EAAE,CAAC;IACtB,6BAA6B,EAAE,GAAG;CACrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/task-graph",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.1.0-edge.
|
|
4
|
+
"version": "6.1.0-edge.3",
|
|
5
5
|
"description": "MemberJunction: Task Graph - producer-agnostic submission and durable execution of dependency-ordered task graphs",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -9,14 +9,18 @@
|
|
|
9
9
|
"/dist"
|
|
10
10
|
],
|
|
11
11
|
"author": "MemberJunction.com",
|
|
12
|
-
"license": "
|
|
12
|
+
"license": "BUSL-1.1",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@memberjunction/
|
|
15
|
-
"@memberjunction/ai-
|
|
16
|
-
"@memberjunction/core": "6.1.0-edge.
|
|
17
|
-
"@memberjunction/
|
|
18
|
-
"@memberjunction/
|
|
19
|
-
"@memberjunction/
|
|
14
|
+
"@memberjunction/actions-base": "6.1.0-edge.3",
|
|
15
|
+
"@memberjunction/ai-agents": "6.1.0-edge.3",
|
|
16
|
+
"@memberjunction/ai-core-plus": "6.1.0-edge.3",
|
|
17
|
+
"@memberjunction/ai-prompts": "6.1.0-edge.3",
|
|
18
|
+
"@memberjunction/aiengine": "6.1.0-edge.3",
|
|
19
|
+
"@memberjunction/core": "6.1.0-edge.3",
|
|
20
|
+
"@memberjunction/core-entities": "6.1.0-edge.3",
|
|
21
|
+
"@memberjunction/global": "6.1.0-edge.3",
|
|
22
|
+
"@memberjunction/notifications": "6.1.0-edge.3",
|
|
23
|
+
"@memberjunction/sql-dialect": "6.1.0-edge.3"
|
|
20
24
|
},
|
|
21
25
|
"devDependencies": {
|
|
22
26
|
"@types/node": "24.10.11",
|