@memberjunction/ng-task-graph-editor 0.0.0 → 6.1.0-edge.2
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/lib/task-graph-canvas-adapter.d.ts +195 -0
- package/dist/lib/task-graph-canvas-adapter.d.ts.map +1 -0
- package/dist/lib/task-graph-canvas-adapter.js +380 -0
- package/dist/lib/task-graph-canvas-adapter.js.map +1 -0
- package/dist/lib/task-graph-editor-events.d.ts +137 -0
- package/dist/lib/task-graph-editor-events.d.ts.map +1 -0
- package/dist/lib/task-graph-editor-events.js +180 -0
- package/dist/lib/task-graph-editor-events.js.map +1 -0
- package/dist/lib/task-graph-editor.component.d.ts +230 -0
- package/dist/lib/task-graph-editor.component.d.ts.map +1 -0
- package/dist/lib/task-graph-editor.component.js +597 -0
- package/dist/lib/task-graph-editor.component.js.map +1 -0
- package/dist/lib/task-graph-editor.module.d.ts +14 -0
- package/dist/lib/task-graph-editor.module.d.ts.map +1 -0
- package/dist/lib/task-graph-editor.module.js +24 -0
- package/dist/lib/task-graph-editor.module.js.map +1 -0
- package/dist/lib/task-graph-properties-panel.component.d.ts +97 -0
- package/dist/lib/task-graph-properties-panel.component.d.ts.map +1 -0
- package/dist/lib/task-graph-properties-panel.component.js +357 -0
- package/dist/lib/task-graph-properties-panel.component.js.map +1 -0
- package/dist/lib/task-graph-run-view.component.d.ts +113 -0
- package/dist/lib/task-graph-run-view.component.d.ts.map +1 -0
- package/dist/lib/task-graph-run-view.component.js +289 -0
- package/dist/lib/task-graph-run-view.component.js.map +1 -0
- package/dist/lib/task-graph-runtime-source.d.ts +55 -0
- package/dist/lib/task-graph-runtime-source.d.ts.map +1 -0
- package/dist/lib/task-graph-runtime-source.js +66 -0
- package/dist/lib/task-graph-runtime-source.js.map +1 -0
- package/dist/public-api.d.ts +8 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +16 -0
- package/dist/public-api.js.map +1 -0
- package/package.json +53 -7
- package/README.md +0 -45
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview View and edit a `TaskGraphSpec` on a canvas.
|
|
3
|
+
*
|
|
4
|
+
* **What makes this reusable is its subject.** It edits `TaskGraphSpec` — the one fully-qualified
|
|
5
|
+
* graph contract every producer in the program already authors against (D16) — rather than any
|
|
6
|
+
* particular persistence. A design-time flow, a graph an agent emitted at runtime, a stored workflow
|
|
7
|
+
* definition and a graph a person is drawing from scratch are all the same type here, so one
|
|
8
|
+
* component serves the Flow Agent editor, the Agent Run admin view, conversation plan cards, the
|
|
9
|
+
* Tasks view, and anything downstream.
|
|
10
|
+
*
|
|
11
|
+
* The alternative — teaching the existing agent editor a second dialect — is precisely how the two
|
|
12
|
+
* graph models drifted apart before Phase 4 pulled them onto one traversal engine.
|
|
13
|
+
*
|
|
14
|
+
* **Layer: `widgets` (L1/L2).** No `@angular/router`, no `@memberjunction/ng-shared`, no
|
|
15
|
+
* `NavigationService`. Route-derived state arrives as `@Input()`; navigation *intent* leaves as an
|
|
16
|
+
* `@Output()` the host acts on, because a widget cannot know whether it is inside Explorer, a
|
|
17
|
+
* downstream app, or an embedded panel. See `guides/UI_LAYERING_GUIDE.md`.
|
|
18
|
+
*
|
|
19
|
+
* **Validation is the engine's.** Cycles, unknown dependency refs and assignment conflicts are
|
|
20
|
+
* reported by calling `ValidateTaskGraphSpec` from `@memberjunction/ai-core-plus` — the same
|
|
21
|
+
* function `LoopAgentType` and `TaskGraphService.Submit` call. A second implementation here would be
|
|
22
|
+
* a second definition of "valid", and the graph that passes on the canvas would be free to fail at
|
|
23
|
+
* submission.
|
|
24
|
+
*
|
|
25
|
+
* @module @memberjunction/ng-task-graph-editor
|
|
26
|
+
*/
|
|
27
|
+
import { EventEmitter, OnDestroy } from '@angular/core';
|
|
28
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
29
|
+
import { type TaskGraphSpec, type TaskGraphSpecNode, type TaskGraphValidationError } from '@memberjunction/ai-core-plus';
|
|
30
|
+
import { FlowEditorComponent } from '@memberjunction/ng-flow-editor';
|
|
31
|
+
import type { FlowConnection, FlowConnectionCreatedEvent, FlowLayoutDirection, FlowNode, FlowNodeAddedEvent, FlowNodeMovedEvent, FlowNodeTypeConfig, FlowPosition } from '@memberjunction/ng-flow-editor';
|
|
32
|
+
import { type TaskGraphRuntimeStatus } from './task-graph-canvas-adapter';
|
|
33
|
+
import type { DependencyConditionChangeRequestedEventArgs, TaskPropertyChangeRequestedEventArgs } from './task-graph-properties-panel.component';
|
|
34
|
+
import { AfterDependencyAddedEventArgs, AfterDependencyRemovedEventArgs, AfterTaskAddedEventArgs, AfterTaskRemovedEventArgs, AfterTaskUpdatedEventArgs, AgentOpenRequestedEventArgs, BeforeDependencyAddedEventArgs, BeforeDependencyRemovedEventArgs, BeforeTaskAddedEventArgs, BeforeTaskRemovedEventArgs, BeforeTaskUpdatedEventArgs, RecordOpenRequestedEventArgs, TaskGraphSelectionChangedEventArgs, TaskGraphSpecChangedEventArgs, TaskGraphValidationChangedEventArgs } from './task-graph-editor-events';
|
|
35
|
+
import * as i0 from "@angular/core";
|
|
36
|
+
export declare class TaskGraphEditorComponent extends BaseAngularComponent implements OnDestroy {
|
|
37
|
+
/**
|
|
38
|
+
* The graph to show. Setter-based rather than `ngOnChanges` (repo convention): the reaction is
|
|
39
|
+
* explicit, runs only when this property changes, and costs nothing on other change-detection
|
|
40
|
+
* passes.
|
|
41
|
+
*/
|
|
42
|
+
set Spec(value: TaskGraphSpec | null);
|
|
43
|
+
get Spec(): TaskGraphSpec | null;
|
|
44
|
+
/**
|
|
45
|
+
* Live per-task state, keyed by `tempId`. Supplying it turns the canvas into a runtime view of
|
|
46
|
+
* the same graph — the convergence point the program was aiming at: one renderer for design time
|
|
47
|
+
* and run time, rather than an editor and a separate Gantt that can disagree.
|
|
48
|
+
*/
|
|
49
|
+
set RuntimeStatus(value: TaskGraphRuntimeStatus | null);
|
|
50
|
+
get RuntimeStatus(): TaskGraphRuntimeStatus | null;
|
|
51
|
+
/**
|
|
52
|
+
* Geometry for the nodes, keyed by `tempId`. Supplying it places the graph instead of laying it
|
|
53
|
+
* out.
|
|
54
|
+
*
|
|
55
|
+
* **Why a host must be able to supply this.** The spec has no layout field, so without it every
|
|
56
|
+
* node projects to the origin — all of them, stacked in one place — and the canvas is left to
|
|
57
|
+
* rescue the situation with a deferred Dagre pass. That pass is fine in the editor, where the
|
|
58
|
+
* author is present and can rearrange. It was not fine in the RUN views, which held the real
|
|
59
|
+
* geometry (a workflow's authored positions, or a computed layout) and had no way to hand it
|
|
60
|
+
* over: every run rendered its steps piled on the origin, and the zoom-to-fit that followed
|
|
61
|
+
* fitted a bounding box one node wide and blew the viewport up past 250%.
|
|
62
|
+
*
|
|
63
|
+
* Applied as the starting geometry only. Once the canvas reports positions of its own — a drag,
|
|
64
|
+
* an arrange — those win, because the person moving a node is the authority on where it goes.
|
|
65
|
+
*/
|
|
66
|
+
set NodePositions(value: ReadonlyMap<string, FlowPosition> | null);
|
|
67
|
+
/** Read-only mode. The same component is the viewer — there is no second, weaker renderer. */
|
|
68
|
+
ReadOnly: boolean;
|
|
69
|
+
ShowToolbar: boolean;
|
|
70
|
+
ShowPalette: boolean;
|
|
71
|
+
ShowMinimap: boolean;
|
|
72
|
+
ShowStatusBar: boolean;
|
|
73
|
+
AutoLayoutDirection: FlowLayoutDirection;
|
|
74
|
+
/**
|
|
75
|
+
* Whether the properties panel rides alongside the canvas.
|
|
76
|
+
*
|
|
77
|
+
* On by default, because without it a step added from the palette can never be named or
|
|
78
|
+
* assigned — the canvas draws structure, the panel supplies content, and one without the other
|
|
79
|
+
* is a graph the author can build but not finish. Hosts embedding the read-only viewer in a chat
|
|
80
|
+
* card turn it off.
|
|
81
|
+
*/
|
|
82
|
+
ShowProperties: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Agent names offered when assigning a step. Supplied by the host, which owns data access —
|
|
85
|
+
* this is a widgets-layer component and does not query.
|
|
86
|
+
*/
|
|
87
|
+
AvailableAgentNames: readonly string[];
|
|
88
|
+
/** Action names offered when assigning a step. Same ownership rule as `AvailableAgentNames`. */
|
|
89
|
+
AvailableActionNames: readonly string[];
|
|
90
|
+
/** Shown when there is nothing to draw yet. */
|
|
91
|
+
EmptyStateMessage: string;
|
|
92
|
+
BeforeTaskAdded: EventEmitter<BeforeTaskAddedEventArgs>;
|
|
93
|
+
AfterTaskAdded: EventEmitter<AfterTaskAddedEventArgs>;
|
|
94
|
+
BeforeTaskRemoved: EventEmitter<BeforeTaskRemovedEventArgs>;
|
|
95
|
+
AfterTaskRemoved: EventEmitter<AfterTaskRemovedEventArgs>;
|
|
96
|
+
BeforeTaskUpdated: EventEmitter<BeforeTaskUpdatedEventArgs>;
|
|
97
|
+
AfterTaskUpdated: EventEmitter<AfterTaskUpdatedEventArgs>;
|
|
98
|
+
BeforeDependencyAdded: EventEmitter<BeforeDependencyAddedEventArgs>;
|
|
99
|
+
AfterDependencyAdded: EventEmitter<AfterDependencyAddedEventArgs>;
|
|
100
|
+
BeforeDependencyRemoved: EventEmitter<BeforeDependencyRemovedEventArgs>;
|
|
101
|
+
AfterDependencyRemoved: EventEmitter<AfterDependencyRemovedEventArgs>;
|
|
102
|
+
/** Informational — no `Before` pair, because these report what already happened. */
|
|
103
|
+
SpecChanged: EventEmitter<TaskGraphSpecChangedEventArgs>;
|
|
104
|
+
SelectionChanged: EventEmitter<TaskGraphSelectionChangedEventArgs>;
|
|
105
|
+
ValidationChanged: EventEmitter<TaskGraphValidationChangedEventArgs>;
|
|
106
|
+
/** Intent-only — the host navigates; this widget has no Router and must not acquire one. */
|
|
107
|
+
AgentOpenRequested: EventEmitter<AgentOpenRequestedEventArgs>;
|
|
108
|
+
RecordOpenRequested: EventEmitter<RecordOpenRequestedEventArgs>;
|
|
109
|
+
Nodes: FlowNode[];
|
|
110
|
+
Connections: FlowConnection[];
|
|
111
|
+
NodeTypes: FlowNodeTypeConfig[];
|
|
112
|
+
SelectedTask: TaskGraphSpecNode | null;
|
|
113
|
+
ValidationErrors: readonly TaskGraphValidationError[];
|
|
114
|
+
IsValid: boolean;
|
|
115
|
+
protected canvas: FlowEditorComponent | undefined;
|
|
116
|
+
private currentSpec;
|
|
117
|
+
private currentRuntime;
|
|
118
|
+
get IsEmpty(): boolean;
|
|
119
|
+
/** Re-runs validation and emits the result. Idempotent. */
|
|
120
|
+
Validate(): TaskGraphValidationChangedEventArgs;
|
|
121
|
+
/** Adds a task. Returns the new task, or null when a host vetoed it. */
|
|
122
|
+
AddTask(partial?: Partial<TaskGraphSpecNode>): TaskGraphSpecNode | null;
|
|
123
|
+
/** Removes a task and every edge into it. Returns false when a host vetoed it. */
|
|
124
|
+
RemoveTask(tempId: string): boolean;
|
|
125
|
+
/** Replaces a task's properties. Returns false when a host vetoed it. */
|
|
126
|
+
UpdateTask(tempId: string, next: TaskGraphSpecNode): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Adds a dependency edge. Returns false when it was vetoed **or would create a cycle**.
|
|
129
|
+
*
|
|
130
|
+
* The cycle is refused unconditionally, not merely reported: a cyclic graph can never execute —
|
|
131
|
+
* nothing would ever become eligible — so allowing the canvas to draw one would let a user build
|
|
132
|
+
* something the engine must then reject. Better to refuse the stroke than to accept a graph that
|
|
133
|
+
* cannot run.
|
|
134
|
+
*/
|
|
135
|
+
AddDependency(fromTempId: string, toTempId: string, condition?: string): boolean;
|
|
136
|
+
/** Removes a dependency edge. Returns false when a host vetoed it. */
|
|
137
|
+
RemoveDependency(fromTempId: string, toTempId: string): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Sets — or with an empty string, clears — a dependency edge's condition.
|
|
140
|
+
*
|
|
141
|
+
* Implemented as remove-then-add so it travels the same `Before*`/`After*` path as any other
|
|
142
|
+
* edge change. A separate silent mutation would be a second write path into the spec, and the
|
|
143
|
+
* veto contract would then be right in one place and wrong in the other.
|
|
144
|
+
*/
|
|
145
|
+
SetDependencyCondition(fromTempId: string, toTempId: string, condition: string): boolean;
|
|
146
|
+
/** Asks the host to open the agent behind a task. */
|
|
147
|
+
RequestAgentOpen(task: TaskGraphSpecNode): void;
|
|
148
|
+
/** Asks the host to open a record the graph references. */
|
|
149
|
+
RequestRecordOpen(entityName: string, recordID: string): void;
|
|
150
|
+
OnNodeSelected(node: FlowNode | null): void;
|
|
151
|
+
/**
|
|
152
|
+
* A palette entry was clicked or dragged onto the canvas.
|
|
153
|
+
*
|
|
154
|
+
* **This binding is the bug.** The canvas has always emitted `NodeAdded` for a palette drop, and
|
|
155
|
+
* this component simply never listened — so the node the canvas announced was thrown away, the
|
|
156
|
+
* spec never gained a task, and the author was told "a task graph must contain at least one
|
|
157
|
+
* task" no matter how many times they tried to add one. The canvas does not mutate its own
|
|
158
|
+
* `Nodes` on purpose (the host owns the model); an unheard event is therefore a silent no-op
|
|
159
|
+
* rather than a visible failure, which is why it survived.
|
|
160
|
+
*
|
|
161
|
+
* The new step is selected immediately: it lands unnamed and, for an agent or action step with
|
|
162
|
+
* nothing available to default to, unassigned — so the properties panel is where the author has
|
|
163
|
+
* to go next, and putting them there beats making them find it.
|
|
164
|
+
*/
|
|
165
|
+
OnNodeAdded(event: FlowNodeAddedEvent): void;
|
|
166
|
+
/** Applies a properties-panel edit through the same vetoable path a canvas edit takes. */
|
|
167
|
+
OnTaskPropertyChangeRequested(args: TaskPropertyChangeRequestedEventArgs): void;
|
|
168
|
+
/** Applies a properties-panel edge-condition edit. */
|
|
169
|
+
OnDependencyConditionChangeRequested(args: DependencyConditionChangeRequestedEventArgs): void;
|
|
170
|
+
OnConnectionCreated(event: FlowConnectionCreatedEvent): void;
|
|
171
|
+
OnConnectionRemoved(connection: FlowConnection): void;
|
|
172
|
+
OnNodeRemoved(node: FlowNode): void;
|
|
173
|
+
private findTask;
|
|
174
|
+
private selectTask;
|
|
175
|
+
/** Applies a new spec, re-projects, re-validates, and tells the host — in that order. */
|
|
176
|
+
private commit;
|
|
177
|
+
/** Re-derives the canvas from the spec. Validation rides along so the two never disagree. */
|
|
178
|
+
private project;
|
|
179
|
+
/**
|
|
180
|
+
* Lays the graph out ONCE — when it arrives with no geometry of its own.
|
|
181
|
+
*
|
|
182
|
+
* A `TaskGraphSpec` carries no positions, so a spec opened for the first time projects with
|
|
183
|
+
* every node at the origin and needs Dagre to make it readable. After that the author's layout
|
|
184
|
+
* is the layout: `knownPositions` carries it across re-projections, and re-arranging again would
|
|
185
|
+
* throw away the arrangement they just made.
|
|
186
|
+
*
|
|
187
|
+
* It must also not run on every edit, because `AutoArrange` ends in `ZoomToFit` — so arranging
|
|
188
|
+
* per change meant the viewport snapped to fit after every added step and every drawn
|
|
189
|
+
* connection, which on a one-node graph zooms to maximum. That is the behaviour being fixed
|
|
190
|
+
* here; the rule mirrors the Flow Agent editor's (`flow-agent-editor.component.ts`), which has
|
|
191
|
+
* always arranged only when every node sits at the origin.
|
|
192
|
+
*/
|
|
193
|
+
private arrangeIfNeverLaidOut;
|
|
194
|
+
/**
|
|
195
|
+
* Fits the viewport to the graph, once the canvas has drawn it.
|
|
196
|
+
*
|
|
197
|
+
* Deferred for the same reason the layout pass is: `fitToScreen` measures the rendered nodes, so
|
|
198
|
+
* calling it in the same turn as the projection fits whatever was on screen a moment ago. With
|
|
199
|
+
* every node still at the origin that bounding box is a single node wide, and "fit" means zoom
|
|
200
|
+
* to ~265% — the symptom that made a four-step workflow look like one enormous box.
|
|
201
|
+
*/
|
|
202
|
+
private zoomToFitSoon;
|
|
203
|
+
/**
|
|
204
|
+
* The canvas is the authority on geometry, so remember what it reports.
|
|
205
|
+
*
|
|
206
|
+
* Without this the spec — which has no geometry field — is the only survivor of a re-projection,
|
|
207
|
+
* and every edit silently moved every node back to the origin. That is what forced a re-arrange
|
|
208
|
+
* (and therefore a re-zoom) on each change.
|
|
209
|
+
*/
|
|
210
|
+
OnNodesChanged(nodes: FlowNode[]): void;
|
|
211
|
+
/** A single node was dragged. Same authority, narrower event. */
|
|
212
|
+
OnNodeMoved(event: FlowNodeMovedEvent): void;
|
|
213
|
+
ngOnDestroy(): void;
|
|
214
|
+
/** The topology the current layout was computed for; '' when nothing has been laid out. */
|
|
215
|
+
/**
|
|
216
|
+
* Node geometry, which the spec cannot hold.
|
|
217
|
+
*
|
|
218
|
+
* `TaskGraphSpec` is an execution contract with no layout field, so a re-projection would
|
|
219
|
+
* otherwise return every node to the origin. Keyed by `tempId`; written from the canvas
|
|
220
|
+
* (`NodesChanged` / `NodeMoved`) and from the drop position of a newly added node, and read back
|
|
221
|
+
* by `SpecToNodes` on every projection.
|
|
222
|
+
*/
|
|
223
|
+
private readonly knownPositions;
|
|
224
|
+
/** Whether the one-time Dagre pass has run (or been made unnecessary by a hand-placed node). */
|
|
225
|
+
private hasLaidOut;
|
|
226
|
+
private pendingLayout;
|
|
227
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskGraphEditorComponent, never>;
|
|
228
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TaskGraphEditorComponent, "mj-task-graph-editor", never, { "Spec": { "alias": "Spec"; "required": false; }; "RuntimeStatus": { "alias": "RuntimeStatus"; "required": false; }; "NodePositions": { "alias": "NodePositions"; "required": false; }; "ReadOnly": { "alias": "ReadOnly"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "ShowPalette": { "alias": "ShowPalette"; "required": false; }; "ShowMinimap": { "alias": "ShowMinimap"; "required": false; }; "ShowStatusBar": { "alias": "ShowStatusBar"; "required": false; }; "AutoLayoutDirection": { "alias": "AutoLayoutDirection"; "required": false; }; "ShowProperties": { "alias": "ShowProperties"; "required": false; }; "AvailableAgentNames": { "alias": "AvailableAgentNames"; "required": false; }; "AvailableActionNames": { "alias": "AvailableActionNames"; "required": false; }; "EmptyStateMessage": { "alias": "EmptyStateMessage"; "required": false; }; }, { "BeforeTaskAdded": "BeforeTaskAdded"; "AfterTaskAdded": "AfterTaskAdded"; "BeforeTaskRemoved": "BeforeTaskRemoved"; "AfterTaskRemoved": "AfterTaskRemoved"; "BeforeTaskUpdated": "BeforeTaskUpdated"; "AfterTaskUpdated": "AfterTaskUpdated"; "BeforeDependencyAdded": "BeforeDependencyAdded"; "AfterDependencyAdded": "AfterDependencyAdded"; "BeforeDependencyRemoved": "BeforeDependencyRemoved"; "AfterDependencyRemoved": "AfterDependencyRemoved"; "SpecChanged": "SpecChanged"; "SelectionChanged": "SelectionChanged"; "ValidationChanged": "ValidationChanged"; "AgentOpenRequested": "AgentOpenRequested"; "RecordOpenRequested": "RecordOpenRequested"; }, never, never, false, never>;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=task-graph-editor.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-graph-editor.component.d.ts","sourceRoot":"","sources":["../../src/lib/task-graph-editor.component.ts"],"names":[],"mappings":"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"}
|