@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.
Files changed (65) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +214 -0
  3. package/dist/TaskClaimStore.d.ts +387 -4
  4. package/dist/TaskClaimStore.d.ts.map +1 -1
  5. package/dist/TaskClaimStore.js +605 -20
  6. package/dist/TaskClaimStore.js.map +1 -1
  7. package/dist/TaskGraphDispatcher.d.ts +668 -5
  8. package/dist/TaskGraphDispatcher.d.ts.map +1 -1
  9. package/dist/TaskGraphDispatcher.js +2942 -127
  10. package/dist/TaskGraphDispatcher.js.map +1 -1
  11. package/dist/TaskGraphService.d.ts +364 -5
  12. package/dist/TaskGraphService.d.ts.map +1 -1
  13. package/dist/TaskGraphService.js +1039 -43
  14. package/dist/TaskGraphService.js.map +1 -1
  15. package/dist/TaskGraphSubmitterImpl.d.ts.map +1 -1
  16. package/dist/TaskGraphSubmitterImpl.js +5 -0
  17. package/dist/TaskGraphSubmitterImpl.js.map +1 -1
  18. package/dist/TaskLoopExecutor.d.ts +62 -0
  19. package/dist/TaskLoopExecutor.d.ts.map +1 -0
  20. package/dist/TaskLoopExecutor.js +248 -0
  21. package/dist/TaskLoopExecutor.js.map +1 -0
  22. package/dist/WorkflowSpecSync.d.ts +28 -2
  23. package/dist/WorkflowSpecSync.d.ts.map +1 -1
  24. package/dist/WorkflowSpecSync.js +83 -2
  25. package/dist/WorkflowSpecSync.js.map +1 -1
  26. package/dist/condition-gate.d.ts +128 -0
  27. package/dist/condition-gate.d.ts.map +1 -0
  28. package/dist/condition-gate.js +257 -0
  29. package/dist/condition-gate.js.map +1 -0
  30. package/dist/debug-state.d.ts +102 -0
  31. package/dist/debug-state.d.ts.map +1 -0
  32. package/dist/debug-state.js +135 -0
  33. package/dist/debug-state.js.map +1 -0
  34. package/dist/index.d.ts +7 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/operations/TaskGraphDebugOperations.d.ts +99 -0
  39. package/dist/operations/TaskGraphDebugOperations.d.ts.map +1 -0
  40. package/dist/operations/TaskGraphDebugOperations.js +310 -0
  41. package/dist/operations/TaskGraphDebugOperations.js.map +1 -0
  42. package/dist/operations/TaskGraphOperations.d.ts +20 -2
  43. package/dist/operations/TaskGraphOperations.d.ts.map +1 -1
  44. package/dist/operations/TaskGraphOperations.js +51 -8
  45. package/dist/operations/TaskGraphOperations.js.map +1 -1
  46. package/dist/operations/WorkflowDraftOperation.d.ts +37 -0
  47. package/dist/operations/WorkflowDraftOperation.d.ts.map +1 -0
  48. package/dist/operations/WorkflowDraftOperation.js +141 -0
  49. package/dist/operations/WorkflowDraftOperation.js.map +1 -0
  50. package/dist/settlement-rescue.d.ts +85 -0
  51. package/dist/settlement-rescue.d.ts.map +1 -0
  52. package/dist/settlement-rescue.js +119 -0
  53. package/dist/settlement-rescue.js.map +1 -0
  54. package/dist/task-graph-kick.d.ts +3 -0
  55. package/dist/task-graph-kick.d.ts.map +1 -0
  56. package/dist/task-graph-kick.js +17 -0
  57. package/dist/task-graph-kick.js.map +1 -0
  58. package/dist/task-predicates.d.ts +77 -0
  59. package/dist/task-predicates.d.ts.map +1 -0
  60. package/dist/task-predicates.js +75 -0
  61. package/dist/task-predicates.js.map +1 -0
  62. package/dist/types.d.ts +224 -1
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js.map +1 -1
  65. 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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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":"AA2NA,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"}
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.1",
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": "ISC",
12
+ "license": "BUSL-1.1",
13
13
  "dependencies": {
14
- "@memberjunction/ai-agents": "6.1.0-edge.1",
15
- "@memberjunction/ai-core-plus": "6.1.0-edge.1",
16
- "@memberjunction/core": "6.1.0-edge.1",
17
- "@memberjunction/core-entities": "6.1.0-edge.1",
18
- "@memberjunction/global": "6.1.0-edge.1",
19
- "@memberjunction/notifications": "6.1.0-edge.1"
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",