@memberjunction/ng-task-graph-editor 6.1.0-edge.2 → 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 (55) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +197 -0
  3. package/dist/lib/debug-variables.d.ts +27 -0
  4. package/dist/lib/debug-variables.d.ts.map +1 -0
  5. package/dist/lib/debug-variables.js +96 -0
  6. package/dist/lib/debug-variables.js.map +1 -0
  7. package/dist/lib/pane-split.d.ts +11 -0
  8. package/dist/lib/pane-split.d.ts.map +1 -0
  9. package/dist/lib/pane-split.js +36 -0
  10. package/dist/lib/pane-split.js.map +1 -0
  11. package/dist/lib/task-graph-canvas-adapter.d.ts +41 -3
  12. package/dist/lib/task-graph-canvas-adapter.d.ts.map +1 -1
  13. package/dist/lib/task-graph-canvas-adapter.js +175 -36
  14. package/dist/lib/task-graph-canvas-adapter.js.map +1 -1
  15. package/dist/lib/task-graph-debug-toolbar.component.d.ts +27 -0
  16. package/dist/lib/task-graph-debug-toolbar.component.d.ts.map +1 -0
  17. package/dist/lib/task-graph-debug-toolbar.component.js +153 -0
  18. package/dist/lib/task-graph-debug-toolbar.component.js.map +1 -0
  19. package/dist/lib/task-graph-debugger.component.d.ts +96 -0
  20. package/dist/lib/task-graph-debugger.component.d.ts.map +1 -0
  21. package/dist/lib/task-graph-debugger.component.js +371 -0
  22. package/dist/lib/task-graph-debugger.component.js.map +1 -0
  23. package/dist/lib/task-graph-editor.component.d.ts +40 -3
  24. package/dist/lib/task-graph-editor.component.d.ts.map +1 -1
  25. package/dist/lib/task-graph-editor.component.js +83 -10
  26. package/dist/lib/task-graph-editor.component.js.map +1 -1
  27. package/dist/lib/task-graph-editor.module.d.ts +9 -5
  28. package/dist/lib/task-graph-editor.module.d.ts.map +1 -1
  29. package/dist/lib/task-graph-editor.module.js +52 -5
  30. package/dist/lib/task-graph-editor.module.js.map +1 -1
  31. package/dist/lib/task-graph-run-prefs.d.ts +34 -0
  32. package/dist/lib/task-graph-run-prefs.d.ts.map +1 -0
  33. package/dist/lib/task-graph-run-prefs.js +67 -0
  34. package/dist/lib/task-graph-run-prefs.js.map +1 -0
  35. package/dist/lib/task-graph-run-view.component.d.ts +180 -3
  36. package/dist/lib/task-graph-run-view.component.d.ts.map +1 -1
  37. package/dist/lib/task-graph-run-view.component.js +560 -23
  38. package/dist/lib/task-graph-run-view.component.js.map +1 -1
  39. package/dist/lib/task-graph-runtime-source.d.ts +7 -1
  40. package/dist/lib/task-graph-runtime-source.d.ts.map +1 -1
  41. package/dist/lib/task-graph-runtime-source.js +14 -2
  42. package/dist/lib/task-graph-runtime-source.js.map +1 -1
  43. package/dist/lib/task-graph-variables.component.d.ts +23 -0
  44. package/dist/lib/task-graph-variables.component.d.ts.map +1 -0
  45. package/dist/lib/task-graph-variables.component.js +192 -0
  46. package/dist/lib/task-graph-variables.component.js.map +1 -0
  47. package/dist/lib/workflow-debug-host.d.ts +23 -0
  48. package/dist/lib/workflow-debug-host.d.ts.map +1 -0
  49. package/dist/lib/workflow-debug-host.js +101 -0
  50. package/dist/lib/workflow-debug-host.js.map +1 -0
  51. package/dist/public-api.d.ts +7 -0
  52. package/dist/public-api.d.ts.map +1 -1
  53. package/dist/public-api.js +7 -0
  54. package/dist/public-api.js.map +1 -1
  55. package/package.json +11 -10
@@ -0,0 +1,371 @@
1
+ /**
2
+ * Drop-in debugger for a live task graph.
3
+ *
4
+ * This is a wrap of the existing run view + VCR toolbar + the session wiring the harness and
5
+ * Runs console already had (RouteOperation, frame subscribe, `$.debug` bag). The picture and
6
+ * the verbs are unchanged; a host now supplies a parent task id and nothing else.
7
+ *
8
+ * @module @memberjunction/ng-task-graph-editor
9
+ */
10
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
11
+ import { RunView } from '@memberjunction/core';
12
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
13
+ import { UUIDsEqual } from '@memberjunction/global';
14
+ import { ComposeBreakpointSet, ParseWorkflowDebugOverlay, ParseWorkflowInvocation, } from './workflow-debug-host';
15
+ import { TaskGraphRunViewComponent, } from './task-graph-run-view.component';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@memberjunction/ng-ui-components";
18
+ import * as i2 from "./task-graph-debug-toolbar.component";
19
+ import * as i3 from "./task-graph-run-view.component";
20
+ function TaskGraphDebuggerComponent_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelement(0, "mj-alert", 5);
22
+ } if (rf & 2) {
23
+ const ctx_r1 = i0.ɵɵnextContext(2);
24
+ i0.ɵɵproperty("Message", ctx_r1.ControlError);
25
+ } }
26
+ function TaskGraphDebuggerComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
27
+ const _r1 = i0.ɵɵgetCurrentView();
28
+ i0.ɵɵelementStart(0, "div", 1)(1, "mj-task-graph-debug-toolbar", 4);
29
+ i0.ɵɵlistener("Pause", function TaskGraphDebuggerComponent_Conditional_1_Template_mj_task_graph_debug_toolbar_Pause_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Pause()); })("Resume", function TaskGraphDebuggerComponent_Conditional_1_Template_mj_task_graph_debug_toolbar_Resume_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Resume()); })("Step", function TaskGraphDebuggerComponent_Conditional_1_Template_mj_task_graph_debug_toolbar_Step_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Step("one")); })("StepWave", function TaskGraphDebuggerComponent_Conditional_1_Template_mj_task_graph_debug_toolbar_StepWave_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Step("wave")); })("Cancel", function TaskGraphDebuggerComponent_Conditional_1_Template_mj_task_graph_debug_toolbar_Cancel_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Cancel()); });
30
+ i0.ɵɵelementEnd();
31
+ i0.ɵɵconditionalCreate(2, TaskGraphDebuggerComponent_Conditional_1_Conditional_2_Template, 1, 1, "mj-alert", 5);
32
+ i0.ɵɵelementEnd();
33
+ } if (rf & 2) {
34
+ const ctx_r1 = i0.ɵɵnextContext();
35
+ i0.ɵɵadvance();
36
+ i0.ɵɵproperty("Paused", ctx_r1.Paused)("Busy", ctx_r1.Busy)("Settled", ctx_r1.IsSettled)("Enabled", ctx_r1.Enabled && !ctx_r1.Busy);
37
+ i0.ɵɵadvance();
38
+ i0.ɵɵconditional(ctx_r1.ControlError ? 2 : -1);
39
+ } }
40
+ function AsFrameSource(provider) {
41
+ const candidate = provider;
42
+ return typeof candidate.TaskGraphFrames === 'function' ? candidate : null;
43
+ }
44
+ export class TaskGraphDebuggerComponent extends BaseAngularComponent {
45
+ cdr;
46
+ /**
47
+ * The graph to debug — the parent `MJ: Tasks` row. Everything else is optional.
48
+ */
49
+ set ParentTaskID(value) {
50
+ if (value === this.parentTaskID)
51
+ return;
52
+ this.detachFrames();
53
+ this.parentTaskID = value;
54
+ this.IsSettled = false;
55
+ if (value) {
56
+ this.attachFrames(value);
57
+ void this.Refresh();
58
+ }
59
+ else {
60
+ this.clearSession();
61
+ }
62
+ this.cdr.markForCheck();
63
+ }
64
+ get ParentTaskID() {
65
+ return this.parentTaskID;
66
+ }
67
+ WorkflowName = 'Workflow';
68
+ LiveUpdates = true;
69
+ PollIntervalSeconds = 3;
70
+ Height = '100%';
71
+ ShowLegend = false;
72
+ ShowCanvasToolbar = true;
73
+ ToolbarVisibility = 'minimized';
74
+ ToolbarAlign = 'left';
75
+ AllowBreakpointEditing = true;
76
+ ShowVariables = true;
77
+ /** VCR + error line above the canvas. Off if the host already has its own bar. */
78
+ ShowChrome = true;
79
+ Enabled = true;
80
+ ReplayAt = null;
81
+ /** Claim-gated. Public so a host toolbar can bind the same flag. */
82
+ Paused = false;
83
+ IsSettled = false;
84
+ Busy = false;
85
+ ControlError = null;
86
+ Breakpoints = [];
87
+ PausedAtTaskID = null;
88
+ EdgeOverrides = {};
89
+ Invocation = null;
90
+ LatestFrame = null;
91
+ NodeSelected = new EventEmitter();
92
+ ConnectionSelected = new EventEmitter();
93
+ LegendToggled = new EventEmitter();
94
+ SettledChange = new EventEmitter();
95
+ PausedChange = new EventEmitter();
96
+ Frame = new EventEmitter();
97
+ ControlFailed = new EventEmitter();
98
+ Settled = new EventEmitter();
99
+ RunView;
100
+ parentTaskID = null;
101
+ frameSub = null;
102
+ constructor(cdr) {
103
+ super();
104
+ this.cdr = cdr;
105
+ }
106
+ ngOnDestroy() {
107
+ this.detachFrames();
108
+ }
109
+ // ── verbs: same RouteOperation calls the hosts already made ──────────────
110
+ Pause() {
111
+ return this.executeControl('TaskGraph.Pause', { parentTaskID: this.parentTaskID });
112
+ }
113
+ Resume() {
114
+ return this.executeControl('TaskGraph.Resume', { parentTaskID: this.parentTaskID });
115
+ }
116
+ Step(target = 'one') {
117
+ return this.executeControl('TaskGraph.Step', { parentTaskID: this.parentTaskID, target });
118
+ }
119
+ Cancel() {
120
+ return this.executeControl('TaskGraph.Cancel', { parentTaskID: this.parentTaskID });
121
+ }
122
+ async ToggleBreakpoint(taskID, enabled) {
123
+ await this.Refresh();
124
+ return this.executeControl('TaskGraph.SetBreakpoints', {
125
+ parentTaskID: this.parentTaskID,
126
+ taskIDs: ComposeBreakpointSet(this.Breakpoints, taskID, enabled),
127
+ });
128
+ }
129
+ OverrideEdge(edgeID, verdict) {
130
+ return this.executeControl('TaskGraph.OverrideEdge', {
131
+ parentTaskID: this.parentTaskID,
132
+ edgeID,
133
+ verdict,
134
+ });
135
+ }
136
+ SkipTask(taskID) {
137
+ return this.executeControl('TaskGraph.SkipTask', { taskID });
138
+ }
139
+ RetryTask(taskID, inputPayload) {
140
+ return this.executeControl('TaskGraph.RetryTask', { taskID, inputPayload });
141
+ }
142
+ UpdateTaskInput(taskID, payload) {
143
+ return this.executeControl('TaskGraph.UpdateTaskInput', { taskID, payload });
144
+ }
145
+ ForceCompleteTask(taskID, payload) {
146
+ return this.executeControl('TaskGraph.ForceCompleteTask', { taskID, payload });
147
+ }
148
+ HasBreakpoint(taskID) {
149
+ return this.Breakpoints.some((id) => UUIDsEqual(id, taskID));
150
+ }
151
+ GetEdgeOverride(edgeID) {
152
+ if (!edgeID)
153
+ return null;
154
+ for (const [id, verdict] of Object.entries(this.EdgeOverrides)) {
155
+ if (UUIDsEqual(id, edgeID))
156
+ return verdict;
157
+ }
158
+ return null;
159
+ }
160
+ /** Re-read `$.debug` from the parent row. Same query the hosts already used. */
161
+ async Refresh() {
162
+ if (!this.parentTaskID)
163
+ return;
164
+ const parentTaskID = this.parentTaskID;
165
+ const result = await RunView.FromMetadataProvider(this.ProviderToUse).RunView({
166
+ EntityName: 'MJ: Tasks',
167
+ ExtraFilter: `ID='${parentTaskID}'`,
168
+ ResultType: 'entity_object',
169
+ BypassCache: true,
170
+ });
171
+ if (this.parentTaskID !== parentTaskID)
172
+ return;
173
+ const parent = result.Success ? result.Results?.[0] : undefined;
174
+ const overlay = ParseWorkflowDebugOverlay(parent?.InputPayload);
175
+ this.Breakpoints = overlay.breakpoints;
176
+ this.EdgeOverrides = overlay.edgeOverrides;
177
+ this.Invocation = ParseWorkflowInvocation(parent?.InputPayload);
178
+ if (!this.IsSettled) {
179
+ this.Paused = overlay.paused;
180
+ this.PausedAtTaskID = overlay.pausedAtTaskID;
181
+ }
182
+ this.cdr.markForCheck();
183
+ }
184
+ OnRunNodeSelected(event) {
185
+ this.NodeSelected.emit(event);
186
+ }
187
+ OnRunConnectionSelected(event) {
188
+ this.ConnectionSelected.emit(event);
189
+ }
190
+ OnRunSettled() {
191
+ this.markSettled();
192
+ }
193
+ OnRunBreakpointToggled(event) {
194
+ void this.ToggleBreakpoint(event.TaskID, event.Enabled);
195
+ }
196
+ OnRunEdgeOverride(event) {
197
+ void this.OverrideEdge(event.EdgeID, event.Verdict);
198
+ }
199
+ async executeControl(operationKey, input) {
200
+ if (!this.parentTaskID)
201
+ return false;
202
+ const provider = this.ProviderToUse;
203
+ if (typeof provider.RouteOperation !== 'function') {
204
+ this.failControl('This connection cannot send workflow controls.');
205
+ return false;
206
+ }
207
+ this.Busy = true;
208
+ this.ControlError = null;
209
+ this.cdr.markForCheck();
210
+ try {
211
+ const result = await provider.RouteOperation(operationKey, input, {});
212
+ const output = result?.Output;
213
+ if (!result?.Success || output?.success === false) {
214
+ this.failControl(output?.errorMessage ?? result?.ErrorMessage ?? 'The control could not be applied.');
215
+ return false;
216
+ }
217
+ if (operationKey === 'TaskGraph.Pause')
218
+ this.setPaused(true);
219
+ if (operationKey === 'TaskGraph.Resume')
220
+ this.setPaused(false);
221
+ await this.Refresh();
222
+ return true;
223
+ }
224
+ catch (e) {
225
+ this.failControl(e instanceof Error ? e.message : String(e));
226
+ return false;
227
+ }
228
+ finally {
229
+ this.Busy = false;
230
+ this.cdr.markForCheck();
231
+ }
232
+ }
233
+ attachFrames(parentTaskID) {
234
+ this.detachFrames();
235
+ const source = AsFrameSource(this.ProviderToUse);
236
+ if (!source)
237
+ return;
238
+ this.frameSub = source.TaskGraphFrames(parentTaskID).subscribe({
239
+ next: (frame) => this.onFrame(frame),
240
+ error: () => { this.frameSub = null; },
241
+ complete: () => { this.frameSub = null; },
242
+ });
243
+ }
244
+ onFrame(frame) {
245
+ this.LatestFrame = frame;
246
+ this.Frame.emit(frame);
247
+ if (this.IsSettled && (frame.kind === 'GraphPaused' || frame.kind === 'BreakpointHit')) {
248
+ return;
249
+ }
250
+ if (frame.kind === 'GraphPaused' || frame.kind === 'BreakpointHit') {
251
+ this.IsSettled = false;
252
+ this.setPaused(true);
253
+ if (this.parentTaskID)
254
+ void this.Refresh();
255
+ }
256
+ else if (frame.kind === 'GraphResumed' || frame.kind === 'TaskStarted') {
257
+ this.IsSettled = false;
258
+ this.setPaused(false);
259
+ }
260
+ else if (frame.kind === 'GraphSettled') {
261
+ this.markSettled();
262
+ }
263
+ this.cdr.markForCheck();
264
+ }
265
+ detachFrames() {
266
+ this.frameSub?.unsubscribe();
267
+ this.frameSub = null;
268
+ this.LatestFrame = null;
269
+ }
270
+ markSettled() {
271
+ this.IsSettled = true;
272
+ this.setPaused(false);
273
+ this.PausedAtTaskID = null;
274
+ this.SettledChange.emit(true);
275
+ this.Settled.emit();
276
+ if (this.parentTaskID)
277
+ void this.Refresh();
278
+ this.cdr.markForCheck();
279
+ }
280
+ setPaused(paused) {
281
+ this.Paused = paused;
282
+ this.PausedChange.emit(paused);
283
+ }
284
+ failControl(message) {
285
+ this.ControlError = message;
286
+ this.ControlFailed.emit(message);
287
+ this.cdr.markForCheck();
288
+ }
289
+ clearSession() {
290
+ this.Paused = false;
291
+ this.IsSettled = false;
292
+ this.Busy = false;
293
+ this.ControlError = null;
294
+ this.Breakpoints = [];
295
+ this.PausedAtTaskID = null;
296
+ this.EdgeOverrides = {};
297
+ this.Invocation = null;
298
+ this.LatestFrame = null;
299
+ }
300
+ static ɵfac = function TaskGraphDebuggerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TaskGraphDebuggerComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
301
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskGraphDebuggerComponent, selectors: [["mj-task-graph-debugger"]], viewQuery: function TaskGraphDebuggerComponent_Query(rf, ctx) { if (rf & 1) {
302
+ i0.ɵɵviewQuery(TaskGraphRunViewComponent, 5);
303
+ } if (rf & 2) {
304
+ let _t;
305
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.RunView = _t.first);
306
+ } }, inputs: { ParentTaskID: "ParentTaskID", WorkflowName: "WorkflowName", LiveUpdates: "LiveUpdates", PollIntervalSeconds: "PollIntervalSeconds", Height: "Height", ShowLegend: "ShowLegend", ShowCanvasToolbar: "ShowCanvasToolbar", ToolbarVisibility: "ToolbarVisibility", ToolbarAlign: "ToolbarAlign", AllowBreakpointEditing: "AllowBreakpointEditing", ShowVariables: "ShowVariables", ShowChrome: "ShowChrome", Enabled: "Enabled", ReplayAt: "ReplayAt" }, outputs: { NodeSelected: "NodeSelected", ConnectionSelected: "ConnectionSelected", LegendToggled: "LegendToggled", SettledChange: "SettledChange", PausedChange: "PausedChange", Frame: "Frame", ControlFailed: "ControlFailed", Settled: "Settled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 20, consts: [[1, "tgdbg"], [1, "tgdbg-chrome"], [1, "tgdbg-body"], [3, "NodeSelected", "ConnectionSelected", "LegendToggled", "Settled", "BreakpointToggled", "EdgeOverrideRequested", "Provider", "ParentTaskID", "WorkflowName", "LiveUpdates", "PollIntervalSeconds", "Height", "ShowLegend", "ShowToolbar", "ToolbarVisibility", "ToolbarAlign", "LiveFrame", "ReplayAt", "Breakpoints", "PausedAtTaskID", "GraphPaused", "EdgeOverrides", "AllowBreakpointEditing", "ShowVariables", "Invocation"], [3, "Pause", "Resume", "Step", "StepWave", "Cancel", "Paused", "Busy", "Settled", "Enabled"], ["Variant", "error", 3, "Message"]], template: function TaskGraphDebuggerComponent_Template(rf, ctx) { if (rf & 1) {
307
+ i0.ɵɵelementStart(0, "div", 0);
308
+ i0.ɵɵconditionalCreate(1, TaskGraphDebuggerComponent_Conditional_1_Template, 3, 5, "div", 1);
309
+ i0.ɵɵelementStart(2, "div", 2)(3, "mj-task-graph-run-view", 3);
310
+ i0.ɵɵlistener("NodeSelected", function TaskGraphDebuggerComponent_Template_mj_task_graph_run_view_NodeSelected_3_listener($event) { return ctx.OnRunNodeSelected($event); })("ConnectionSelected", function TaskGraphDebuggerComponent_Template_mj_task_graph_run_view_ConnectionSelected_3_listener($event) { return ctx.OnRunConnectionSelected($event); })("LegendToggled", function TaskGraphDebuggerComponent_Template_mj_task_graph_run_view_LegendToggled_3_listener($event) { return ctx.LegendToggled.emit($event); })("Settled", function TaskGraphDebuggerComponent_Template_mj_task_graph_run_view_Settled_3_listener() { return ctx.OnRunSettled(); })("BreakpointToggled", function TaskGraphDebuggerComponent_Template_mj_task_graph_run_view_BreakpointToggled_3_listener($event) { return ctx.OnRunBreakpointToggled($event); })("EdgeOverrideRequested", function TaskGraphDebuggerComponent_Template_mj_task_graph_run_view_EdgeOverrideRequested_3_listener($event) { return ctx.OnRunEdgeOverride($event); });
311
+ i0.ɵɵelementEnd()()();
312
+ } if (rf & 2) {
313
+ i0.ɵɵadvance();
314
+ i0.ɵɵconditional(ctx.ShowChrome ? 1 : -1);
315
+ i0.ɵɵadvance(2);
316
+ i0.ɵɵproperty("Provider", ctx.ProviderToUse)("ParentTaskID", ctx.ParentTaskID)("WorkflowName", ctx.WorkflowName)("LiveUpdates", ctx.LiveUpdates)("PollIntervalSeconds", ctx.PollIntervalSeconds)("Height", "100%")("ShowLegend", ctx.ShowLegend)("ShowToolbar", ctx.ShowCanvasToolbar)("ToolbarVisibility", ctx.ToolbarVisibility)("ToolbarAlign", ctx.ToolbarAlign)("LiveFrame", ctx.LatestFrame)("ReplayAt", ctx.ReplayAt)("Breakpoints", ctx.Breakpoints)("PausedAtTaskID", ctx.PausedAtTaskID)("GraphPaused", ctx.Paused)("EdgeOverrides", ctx.EdgeOverrides)("AllowBreakpointEditing", ctx.AllowBreakpointEditing)("ShowVariables", ctx.ShowVariables)("Invocation", ctx.Invocation);
317
+ } }, dependencies: [i1.MJAlertComponent, i2.TaskGraphDebugToolbarComponent, i3.TaskGraphRunViewComponent], styles: ["[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.tgdbg[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n gap: var(--mj-space-2);\n}\n\n.tgdbg-chrome[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.tgdbg-body[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-height: 0;\n}"], changeDetection: 0 });
318
+ }
319
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaskGraphDebuggerComponent, [{
320
+ type: Component,
321
+ args: [{ standalone: false, selector: 'mj-task-graph-debugger', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tgdbg\">\n @if (ShowChrome) {\n <div class=\"tgdbg-chrome\">\n <mj-task-graph-debug-toolbar\n [Paused]=\"Paused\"\n [Busy]=\"Busy\"\n [Settled]=\"IsSettled\"\n [Enabled]=\"Enabled && !Busy\"\n (Pause)=\"Pause()\"\n (Resume)=\"Resume()\"\n (Step)=\"Step('one')\"\n (StepWave)=\"Step('wave')\"\n (Cancel)=\"Cancel()\">\n </mj-task-graph-debug-toolbar>\n @if (ControlError) {\n <mj-alert Variant=\"error\" [Message]=\"ControlError\"></mj-alert>\n }\n </div>\n }\n <div class=\"tgdbg-body\">\n <mj-task-graph-run-view\n [Provider]=\"ProviderToUse\"\n [ParentTaskID]=\"ParentTaskID\"\n [WorkflowName]=\"WorkflowName\"\n [LiveUpdates]=\"LiveUpdates\"\n [PollIntervalSeconds]=\"PollIntervalSeconds\"\n [Height]=\"'100%'\"\n [ShowLegend]=\"ShowLegend\"\n [ShowToolbar]=\"ShowCanvasToolbar\"\n [ToolbarVisibility]=\"ToolbarVisibility\"\n [ToolbarAlign]=\"ToolbarAlign\"\n [LiveFrame]=\"LatestFrame\"\n [ReplayAt]=\"ReplayAt\"\n [Breakpoints]=\"Breakpoints\"\n [PausedAtTaskID]=\"PausedAtTaskID\"\n [GraphPaused]=\"Paused\"\n [EdgeOverrides]=\"EdgeOverrides\"\n [AllowBreakpointEditing]=\"AllowBreakpointEditing\"\n [ShowVariables]=\"ShowVariables\"\n [Invocation]=\"Invocation\"\n (NodeSelected)=\"OnRunNodeSelected($event)\"\n (ConnectionSelected)=\"OnRunConnectionSelected($event)\"\n (LegendToggled)=\"LegendToggled.emit($event)\"\n (Settled)=\"OnRunSettled()\"\n (BreakpointToggled)=\"OnRunBreakpointToggled($event)\"\n (EdgeOverrideRequested)=\"OnRunEdgeOverride($event)\">\n </mj-task-graph-run-view>\n </div>\n</div>\n", styles: [":host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.tgdbg {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n gap: var(--mj-space-2);\n}\n\n.tgdbg-chrome {\n flex: 0 0 auto;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.tgdbg-body {\n flex: 1 1 auto;\n min-height: 0;\n}\n"] }]
322
+ }], () => [{ type: i0.ChangeDetectorRef }], { ParentTaskID: [{
323
+ type: Input
324
+ }], WorkflowName: [{
325
+ type: Input
326
+ }], LiveUpdates: [{
327
+ type: Input
328
+ }], PollIntervalSeconds: [{
329
+ type: Input
330
+ }], Height: [{
331
+ type: Input
332
+ }], ShowLegend: [{
333
+ type: Input
334
+ }], ShowCanvasToolbar: [{
335
+ type: Input
336
+ }], ToolbarVisibility: [{
337
+ type: Input
338
+ }], ToolbarAlign: [{
339
+ type: Input
340
+ }], AllowBreakpointEditing: [{
341
+ type: Input
342
+ }], ShowVariables: [{
343
+ type: Input
344
+ }], ShowChrome: [{
345
+ type: Input
346
+ }], Enabled: [{
347
+ type: Input
348
+ }], ReplayAt: [{
349
+ type: Input
350
+ }], NodeSelected: [{
351
+ type: Output
352
+ }], ConnectionSelected: [{
353
+ type: Output
354
+ }], LegendToggled: [{
355
+ type: Output
356
+ }], SettledChange: [{
357
+ type: Output
358
+ }], PausedChange: [{
359
+ type: Output
360
+ }], Frame: [{
361
+ type: Output
362
+ }], ControlFailed: [{
363
+ type: Output
364
+ }], Settled: [{
365
+ type: Output
366
+ }], RunView: [{
367
+ type: ViewChild,
368
+ args: [TaskGraphRunViewComponent]
369
+ }] }); })();
370
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TaskGraphDebuggerComponent, { className: "TaskGraphDebuggerComponent", filePath: "src/lib/task-graph-debugger.component.ts", lineNumber: 67 }); })();
371
+ //# sourceMappingURL=task-graph-debugger.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-graph-debugger.component.js","sourceRoot":"","sources":["../../src/lib/task-graph-debugger.component.ts","../../src/lib/task-graph-debugger.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * Drop-in debugger for a live task graph.\n *\n * This is a wrap of the existing run view + VCR toolbar + the session wiring the harness and\n * Runs console already had (RouteOperation, frame subscribe, `$.debug` bag). The picture and\n * the verbs are unchanged; a host now supplies a parent task id and nothing else.\n *\n * @module @memberjunction/ng-task-graph-editor\n */\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { RunView, type IMetadataProvider, type IRemoteOperationProvider } from '@memberjunction/core';\nimport { MJTaskEntity } from '@memberjunction/core-entities';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport type { FlowToolbarAlign, FlowToolbarVisibility } from '@memberjunction/ng-flow-editor';\nimport {\n ComposeBreakpointSet,\n ParseWorkflowDebugOverlay,\n ParseWorkflowInvocation,\n type WorkflowInvocationRoots,\n} from './workflow-debug-host';\nimport {\n TaskGraphRunViewComponent,\n type TaskGraphRunConnectionSelectedEvent,\n type TaskGraphRunFrame,\n type TaskGraphRunNodeSelectedEvent,\n} from './task-graph-run-view.component';\n\n/** A provider that can push dispatcher frames. GraphQL does; others simply do not. */\ntype FrameCapableProvider = IMetadataProvider & {\n TaskGraphFrames(parentTaskId: string): {\n subscribe(observer: {\n next: (frame: TaskGraphRunFrame) => void;\n error: () => void;\n complete: () => void;\n }): Subscription;\n };\n};\n\nfunction AsFrameSource(provider: IMetadataProvider): FrameCapableProvider | null {\n const candidate = provider as FrameCapableProvider;\n return typeof candidate.TaskGraphFrames === 'function' ? candidate : null;\n}\n\ntype ControlOutput = {\n success?: boolean;\n errorMessage?: string;\n};\n\n@Component({\n standalone: false,\n selector: 'mj-task-graph-debugger',\n templateUrl: './task-graph-debugger.component.html',\n styleUrls: ['./task-graph-debugger.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TaskGraphDebuggerComponent extends BaseAngularComponent implements OnDestroy {\n /**\n * The graph to debug — the parent `MJ: Tasks` row. Everything else is optional.\n */\n @Input()\n public set ParentTaskID(value: string | null) {\n if (value === this.parentTaskID) return;\n this.detachFrames();\n this.parentTaskID = value;\n this.IsSettled = false;\n if (value) {\n this.attachFrames(value);\n void this.Refresh();\n } else {\n this.clearSession();\n }\n this.cdr.markForCheck();\n }\n public get ParentTaskID(): string | null {\n return this.parentTaskID;\n }\n\n @Input() public WorkflowName: string = 'Workflow';\n @Input() public LiveUpdates: boolean = true;\n @Input() public PollIntervalSeconds: number = 3;\n @Input() public Height: string = '100%';\n @Input() public ShowLegend: boolean = false;\n @Input() public ShowCanvasToolbar: boolean = true;\n @Input() public ToolbarVisibility: FlowToolbarVisibility = 'minimized';\n @Input() public ToolbarAlign: FlowToolbarAlign = 'left';\n @Input() public AllowBreakpointEditing: boolean = true;\n @Input() public ShowVariables: boolean = true;\n /** VCR + error line above the canvas. Off if the host already has its own bar. */\n @Input() public ShowChrome: boolean = true;\n @Input() public Enabled: boolean = true;\n @Input() public ReplayAt: Date | null = null;\n\n /** Claim-gated. Public so a host toolbar can bind the same flag. */\n public Paused = false;\n public IsSettled = false;\n public Busy = false;\n public ControlError: string | null = null;\n public Breakpoints: readonly string[] = [];\n public PausedAtTaskID: string | null = null;\n public EdgeOverrides: Readonly<Record<string, 'true' | 'false'>> = {};\n public Invocation: WorkflowInvocationRoots | null = null;\n public LatestFrame: TaskGraphRunFrame | null = null;\n\n @Output() public NodeSelected = new EventEmitter<TaskGraphRunNodeSelectedEvent>();\n @Output() public ConnectionSelected = new EventEmitter<TaskGraphRunConnectionSelectedEvent>();\n @Output() public LegendToggled = new EventEmitter<boolean>();\n @Output() public SettledChange = new EventEmitter<boolean>();\n @Output() public PausedChange = new EventEmitter<boolean>();\n @Output() public Frame = new EventEmitter<TaskGraphRunFrame>();\n @Output() public ControlFailed = new EventEmitter<string>();\n @Output() public Settled = new EventEmitter<void>();\n\n @ViewChild(TaskGraphRunViewComponent) public RunView: TaskGraphRunViewComponent | undefined;\n\n private parentTaskID: string | null = null;\n private frameSub: Subscription | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnDestroy(): void {\n this.detachFrames();\n }\n\n // ── verbs: same RouteOperation calls the hosts already made ──────────────\n\n public Pause(): Promise<boolean> {\n return this.executeControl('TaskGraph.Pause', { parentTaskID: this.parentTaskID });\n }\n\n public Resume(): Promise<boolean> {\n return this.executeControl('TaskGraph.Resume', { parentTaskID: this.parentTaskID });\n }\n\n public Step(target: 'one' | 'wave' = 'one'): Promise<boolean> {\n return this.executeControl('TaskGraph.Step', { parentTaskID: this.parentTaskID, target });\n }\n\n public Cancel(): Promise<boolean> {\n return this.executeControl('TaskGraph.Cancel', { parentTaskID: this.parentTaskID });\n }\n\n public async ToggleBreakpoint(taskID: string, enabled: boolean): Promise<boolean> {\n await this.Refresh();\n return this.executeControl('TaskGraph.SetBreakpoints', {\n parentTaskID: this.parentTaskID,\n taskIDs: ComposeBreakpointSet(this.Breakpoints, taskID, enabled),\n });\n }\n\n public OverrideEdge(edgeID: string, verdict: 'true' | 'false' | null): Promise<boolean> {\n return this.executeControl('TaskGraph.OverrideEdge', {\n parentTaskID: this.parentTaskID,\n edgeID,\n verdict,\n });\n }\n\n public SkipTask(taskID: string): Promise<boolean> {\n return this.executeControl('TaskGraph.SkipTask', { taskID });\n }\n\n public RetryTask(taskID: string, inputPayload?: Record<string, unknown> | string): Promise<boolean> {\n return this.executeControl('TaskGraph.RetryTask', { taskID, inputPayload });\n }\n\n public UpdateTaskInput(taskID: string, payload: unknown): Promise<boolean> {\n return this.executeControl('TaskGraph.UpdateTaskInput', { taskID, payload });\n }\n\n public ForceCompleteTask(taskID: string, payload?: unknown): Promise<boolean> {\n return this.executeControl('TaskGraph.ForceCompleteTask', { taskID, payload });\n }\n\n public HasBreakpoint(taskID: string): boolean {\n return this.Breakpoints.some((id) => UUIDsEqual(id, taskID));\n }\n\n public GetEdgeOverride(edgeID: string | null): 'true' | 'false' | null {\n if (!edgeID) return null;\n for (const [id, verdict] of Object.entries(this.EdgeOverrides)) {\n if (UUIDsEqual(id, edgeID)) return verdict;\n }\n return null;\n }\n\n /** Re-read `$.debug` from the parent row. Same query the hosts already used. */\n public async Refresh(): Promise<void> {\n if (!this.parentTaskID) return;\n const parentTaskID = this.parentTaskID;\n const result = await RunView.FromMetadataProvider(this.ProviderToUse).RunView<MJTaskEntity>({\n EntityName: 'MJ: Tasks',\n ExtraFilter: `ID='${parentTaskID}'`,\n ResultType: 'entity_object',\n BypassCache: true,\n });\n if (this.parentTaskID !== parentTaskID) return;\n const parent = result.Success ? result.Results?.[0] : undefined;\n const overlay = ParseWorkflowDebugOverlay(parent?.InputPayload);\n this.Breakpoints = overlay.breakpoints;\n this.EdgeOverrides = overlay.edgeOverrides;\n this.Invocation = ParseWorkflowInvocation(parent?.InputPayload);\n if (!this.IsSettled) {\n this.Paused = overlay.paused;\n this.PausedAtTaskID = overlay.pausedAtTaskID;\n }\n this.cdr.markForCheck();\n }\n\n public OnRunNodeSelected(event: TaskGraphRunNodeSelectedEvent): void {\n this.NodeSelected.emit(event);\n }\n\n public OnRunConnectionSelected(event: TaskGraphRunConnectionSelectedEvent): void {\n this.ConnectionSelected.emit(event);\n }\n\n public OnRunSettled(): void {\n this.markSettled();\n }\n\n public OnRunBreakpointToggled(event: { TaskID: string; Enabled: boolean }): void {\n void this.ToggleBreakpoint(event.TaskID, event.Enabled);\n }\n\n public OnRunEdgeOverride(event: { EdgeID: string; Verdict: 'true' | 'false' | null }): void {\n void this.OverrideEdge(event.EdgeID, event.Verdict);\n }\n\n private async executeControl(operationKey: string, input: Record<string, unknown>): Promise<boolean> {\n if (!this.parentTaskID) return false;\n const provider = this.ProviderToUse as IMetadataProvider & Partial<IRemoteOperationProvider>;\n if (typeof provider.RouteOperation !== 'function') {\n this.failControl('This connection cannot send workflow controls.');\n return false;\n }\n this.Busy = true;\n this.ControlError = null;\n this.cdr.markForCheck();\n try {\n const result = await provider.RouteOperation(operationKey, input, {});\n const output = result?.Output as ControlOutput | undefined;\n if (!result?.Success || output?.success === false) {\n this.failControl(output?.errorMessage ?? result?.ErrorMessage ?? 'The control could not be applied.');\n return false;\n }\n if (operationKey === 'TaskGraph.Pause') this.setPaused(true);\n if (operationKey === 'TaskGraph.Resume') this.setPaused(false);\n await this.Refresh();\n return true;\n } catch (e) {\n this.failControl(e instanceof Error ? e.message : String(e));\n return false;\n } finally {\n this.Busy = false;\n this.cdr.markForCheck();\n }\n }\n\n private attachFrames(parentTaskID: string): void {\n this.detachFrames();\n const source = AsFrameSource(this.ProviderToUse);\n if (!source) return;\n this.frameSub = source.TaskGraphFrames(parentTaskID).subscribe({\n next: (frame) => this.onFrame(frame),\n error: () => { this.frameSub = null; },\n complete: () => { this.frameSub = null; },\n });\n }\n\n private onFrame(frame: TaskGraphRunFrame): void {\n this.LatestFrame = frame;\n this.Frame.emit(frame);\n if (this.IsSettled && (frame.kind === 'GraphPaused' || frame.kind === 'BreakpointHit')) {\n return;\n }\n if (frame.kind === 'GraphPaused' || frame.kind === 'BreakpointHit') {\n this.IsSettled = false;\n this.setPaused(true);\n if (this.parentTaskID) void this.Refresh();\n } else if (frame.kind === 'GraphResumed' || frame.kind === 'TaskStarted') {\n this.IsSettled = false;\n this.setPaused(false);\n } else if (frame.kind === 'GraphSettled') {\n this.markSettled();\n }\n this.cdr.markForCheck();\n }\n\n private detachFrames(): void {\n this.frameSub?.unsubscribe();\n this.frameSub = null;\n this.LatestFrame = null;\n }\n\n private markSettled(): void {\n this.IsSettled = true;\n this.setPaused(false);\n this.PausedAtTaskID = null;\n this.SettledChange.emit(true);\n this.Settled.emit();\n if (this.parentTaskID) void this.Refresh();\n this.cdr.markForCheck();\n }\n\n private setPaused(paused: boolean): void {\n this.Paused = paused;\n this.PausedChange.emit(paused);\n }\n\n private failControl(message: string): void {\n this.ControlError = message;\n this.ControlFailed.emit(message);\n this.cdr.markForCheck();\n }\n\n private clearSession(): void {\n this.Paused = false;\n this.IsSettled = false;\n this.Busy = false;\n this.ControlError = null;\n this.Breakpoints = [];\n this.PausedAtTaskID = null;\n this.EdgeOverrides = {};\n this.Invocation = null;\n this.LatestFrame = null;\n }\n}\n","<div class=\"tgdbg\">\n @if (ShowChrome) {\n <div class=\"tgdbg-chrome\">\n <mj-task-graph-debug-toolbar\n [Paused]=\"Paused\"\n [Busy]=\"Busy\"\n [Settled]=\"IsSettled\"\n [Enabled]=\"Enabled && !Busy\"\n (Pause)=\"Pause()\"\n (Resume)=\"Resume()\"\n (Step)=\"Step('one')\"\n (StepWave)=\"Step('wave')\"\n (Cancel)=\"Cancel()\">\n </mj-task-graph-debug-toolbar>\n @if (ControlError) {\n <mj-alert Variant=\"error\" [Message]=\"ControlError\"></mj-alert>\n }\n </div>\n }\n <div class=\"tgdbg-body\">\n <mj-task-graph-run-view\n [Provider]=\"ProviderToUse\"\n [ParentTaskID]=\"ParentTaskID\"\n [WorkflowName]=\"WorkflowName\"\n [LiveUpdates]=\"LiveUpdates\"\n [PollIntervalSeconds]=\"PollIntervalSeconds\"\n [Height]=\"'100%'\"\n [ShowLegend]=\"ShowLegend\"\n [ShowToolbar]=\"ShowCanvasToolbar\"\n [ToolbarVisibility]=\"ToolbarVisibility\"\n [ToolbarAlign]=\"ToolbarAlign\"\n [LiveFrame]=\"LatestFrame\"\n [ReplayAt]=\"ReplayAt\"\n [Breakpoints]=\"Breakpoints\"\n [PausedAtTaskID]=\"PausedAtTaskID\"\n [GraphPaused]=\"Paused\"\n [EdgeOverrides]=\"EdgeOverrides\"\n [AllowBreakpointEditing]=\"AllowBreakpointEditing\"\n [ShowVariables]=\"ShowVariables\"\n [Invocation]=\"Invocation\"\n (NodeSelected)=\"OnRunNodeSelected($event)\"\n (ConnectionSelected)=\"OnRunConnectionSelected($event)\"\n (LegendToggled)=\"LegendToggled.emit($event)\"\n (Settled)=\"OnRunSettled()\"\n (BreakpointToggled)=\"OnRunBreakpointToggled($event)\"\n (EdgeOverrideRequested)=\"OnRunEdgeOverride($event)\">\n </mj-task-graph-run-view>\n </div>\n</div>\n"]}
@@ -28,8 +28,8 @@ import { EventEmitter, OnDestroy } from '@angular/core';
28
28
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
29
29
  import { type TaskGraphSpec, type TaskGraphSpecNode, type TaskGraphValidationError } from '@memberjunction/ai-core-plus';
30
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';
31
+ import type { FlowAfterContextMenuActionEventArgs, FlowBeforeContextMenuEventArgs, FlowConnection, FlowConnectionCreatedEvent, FlowLayoutDirection, FlowNode, FlowNodeAddedEvent, FlowNodeMovedEvent, FlowNodeTypeConfig, FlowPosition, FlowToolbarAlign, FlowToolbarVisibility } from '@memberjunction/ng-flow-editor';
32
+ import { type TaskGraphDebugOverlay, type TaskGraphRuntimeStatus } from './task-graph-canvas-adapter';
33
33
  import type { DependencyConditionChangeRequestedEventArgs, TaskPropertyChangeRequestedEventArgs } from './task-graph-properties-panel.component';
34
34
  import { AfterDependencyAddedEventArgs, AfterDependencyRemovedEventArgs, AfterTaskAddedEventArgs, AfterTaskRemovedEventArgs, AfterTaskUpdatedEventArgs, AgentOpenRequestedEventArgs, BeforeDependencyAddedEventArgs, BeforeDependencyRemovedEventArgs, BeforeTaskAddedEventArgs, BeforeTaskRemovedEventArgs, BeforeTaskUpdatedEventArgs, RecordOpenRequestedEventArgs, TaskGraphSelectionChangedEventArgs, TaskGraphSpecChangedEventArgs, TaskGraphValidationChangedEventArgs } from './task-graph-editor-events';
35
35
  import * as i0 from "@angular/core";
@@ -67,8 +67,20 @@ export declare class TaskGraphEditorComponent extends BaseAngularComponent imple
67
67
  /** Read-only mode. The same component is the viewer — there is no second, weaker renderer. */
68
68
  ReadOnly: boolean;
69
69
  ShowToolbar: boolean;
70
+ /** Full bar / chip / recover tab. Run views default this to minimized. */
71
+ ToolbarVisibility: FlowToolbarVisibility;
72
+ ToolbarAlign: FlowToolbarAlign;
70
73
  ShowPalette: boolean;
71
74
  ShowMinimap: boolean;
75
+ /**
76
+ * Whether the legend rides on the canvas.
77
+ *
78
+ * On for authoring, off for a run — and the difference is what the legend is FOR. It explains the
79
+ * authoring vocabulary (what a conditional edge means, what a duplicate default looks like),
80
+ * which is what someone drawing a graph needs. A run view is answering a different question —
81
+ * what happened — and the legend answers none of it while occluding a third of the canvas.
82
+ */
83
+ ShowLegend: boolean;
72
84
  ShowStatusBar: boolean;
73
85
  AutoLayoutDirection: FlowLayoutDirection;
74
86
  /**
@@ -89,6 +101,12 @@ export declare class TaskGraphEditorComponent extends BaseAngularComponent imple
89
101
  AvailableActionNames: readonly string[];
90
102
  /** Shown when there is nothing to draw yet. */
91
103
  EmptyStateMessage: string;
104
+ /**
105
+ * Debug overlay for a run. Empty by default so an embed (agent-run timeline, test harness)
106
+ * never grows breakpoint badges or override styling it did not ask for.
107
+ */
108
+ set DebugOverlay(value: TaskGraphDebugOverlay | null);
109
+ get DebugOverlay(): TaskGraphDebugOverlay | null;
92
110
  BeforeTaskAdded: EventEmitter<BeforeTaskAddedEventArgs>;
93
111
  AfterTaskAdded: EventEmitter<AfterTaskAddedEventArgs>;
94
112
  BeforeTaskRemoved: EventEmitter<BeforeTaskRemovedEventArgs>;
@@ -100,12 +118,25 @@ export declare class TaskGraphEditorComponent extends BaseAngularComponent imple
100
118
  BeforeDependencyRemoved: EventEmitter<BeforeDependencyRemovedEventArgs>;
101
119
  AfterDependencyRemoved: EventEmitter<AfterDependencyRemovedEventArgs>;
102
120
  /** Informational — no `Before` pair, because these report what already happened. */
121
+ /**
122
+ * The legend was shown or hidden from the canvas toolbar.
123
+ *
124
+ * Forwarded so a host can PERSIST the choice. Without it the toolbar's toggle mutates the
125
+ * canvas's own flag and nothing else, so the preference dies with the view — and a host that
126
+ * wanted it remembered would have to add a second control beside the one that already exists,
127
+ * which is how a surface ends up with two buttons doing the same thing and disagreeing.
128
+ */
129
+ LegendToggled: EventEmitter<boolean>;
103
130
  SpecChanged: EventEmitter<TaskGraphSpecChangedEventArgs>;
104
131
  SelectionChanged: EventEmitter<TaskGraphSelectionChangedEventArgs>;
105
132
  ValidationChanged: EventEmitter<TaskGraphValidationChangedEventArgs>;
106
133
  /** Intent-only — the host navigates; this widget has no Router and must not acquire one. */
107
134
  AgentOpenRequested: EventEmitter<AgentOpenRequestedEventArgs>;
108
135
  RecordOpenRequested: EventEmitter<RecordOpenRequestedEventArgs>;
136
+ /** A connection was clicked. Payload is the canvas connection, or null when cleared. */
137
+ ConnectionSelected: EventEmitter<FlowConnection | null>;
138
+ BeforeContextMenu: EventEmitter<FlowBeforeContextMenuEventArgs>;
139
+ AfterContextMenuAction: EventEmitter<FlowAfterContextMenuActionEventArgs>;
109
140
  Nodes: FlowNode[];
110
141
  Connections: FlowConnection[];
111
142
  NodeTypes: FlowNodeTypeConfig[];
@@ -115,6 +146,7 @@ export declare class TaskGraphEditorComponent extends BaseAngularComponent imple
115
146
  protected canvas: FlowEditorComponent | undefined;
116
147
  private currentSpec;
117
148
  private currentRuntime;
149
+ private debugOverlay;
118
150
  get IsEmpty(): boolean;
119
151
  /** Re-runs validation and emits the result. Idempotent. */
120
152
  Validate(): TaskGraphValidationChangedEventArgs;
@@ -208,6 +240,9 @@ export declare class TaskGraphEditorComponent extends BaseAngularComponent imple
208
240
  * (and therefore a re-zoom) on each change.
209
241
  */
210
242
  OnNodesChanged(nodes: FlowNode[]): void;
243
+ /** The canvas toolbar showed or hid the legend; tell whoever is remembering that choice. */
244
+ OnLegendToggled(show: boolean): void;
245
+ OnConnectionSelected(connection: FlowConnection | null): void;
211
246
  /** A single node was dragged. Same authority, narrower event. */
212
247
  OnNodeMoved(event: FlowNodeMovedEvent): void;
213
248
  ngOnDestroy(): void;
@@ -223,8 +258,10 @@ export declare class TaskGraphEditorComponent extends BaseAngularComponent imple
223
258
  private readonly knownPositions;
224
259
  /** Whether the one-time Dagre pass has run (or been made unnecessary by a hand-placed node). */
225
260
  private hasLaidOut;
261
+ /** Task-id set we last fitted. Same ids + a new Map must not re-fit. */
262
+ private fittedGeometryKey;
226
263
  private pendingLayout;
227
264
  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>;
265
+ 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; }; "ToolbarVisibility": { "alias": "ToolbarVisibility"; "required": false; }; "ToolbarAlign": { "alias": "ToolbarAlign"; "required": false; }; "ShowPalette": { "alias": "ShowPalette"; "required": false; }; "ShowMinimap": { "alias": "ShowMinimap"; "required": false; }; "ShowLegend": { "alias": "ShowLegend"; "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; }; "DebugOverlay": { "alias": "DebugOverlay"; "required": false; }; }, { "BeforeTaskAdded": "BeforeTaskAdded"; "AfterTaskAdded": "AfterTaskAdded"; "BeforeTaskRemoved": "BeforeTaskRemoved"; "AfterTaskRemoved": "AfterTaskRemoved"; "BeforeTaskUpdated": "BeforeTaskUpdated"; "AfterTaskUpdated": "AfterTaskUpdated"; "BeforeDependencyAdded": "BeforeDependencyAdded"; "AfterDependencyAdded": "AfterDependencyAdded"; "BeforeDependencyRemoved": "BeforeDependencyRemoved"; "AfterDependencyRemoved": "AfterDependencyRemoved"; "LegendToggled": "LegendToggled"; "SpecChanged": "SpecChanged"; "SelectionChanged": "SelectionChanged"; "ValidationChanged": "ValidationChanged"; "AgentOpenRequested": "AgentOpenRequested"; "RecordOpenRequested": "RecordOpenRequested"; "ConnectionSelected": "ConnectionSelected"; "BeforeContextMenu": "BeforeContextMenu"; "AfterContextMenuAction": "AfterContextMenuAction"; }, never, never, false, never>;
229
266
  }
230
267
  //# sourceMappingURL=task-graph-editor.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-graph-editor.component.d.ts","sourceRoot":"","sources":["../../src/lib/task-graph-editor.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAa,YAAY,EAAS,SAAS,EAAqB,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAGH,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAChC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EACR,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAeH,KAAK,sBAAsB,EAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACR,2CAA2C,EAC3C,oCAAoC,EACvC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACH,6BAA6B,EAC7B,+BAA+B,EAC/B,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,EAC9B,gCAAgC,EAChC,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,kCAAkC,EAClC,6BAA6B,EAC7B,mCAAmC,EACtC,MAAM,4BAA4B,CAAC;;AAEpC,qBAMa,wBAAyB,SAAQ,oBAAqB,YAAW,SAAS;IAGnF;;;;OAIG;IACH,IACW,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,EAG1C;IACD,IAAW,IAAI,IAAI,aAAa,GAAG,IAAI,CAEtC;IAED;;;;OAIG;IACH,IACW,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,EAG5D;IACD,IAAW,aAAa,IAAI,sBAAsB,GAAG,IAAI,CAExD;IAED;;;;;;;;;;;;;;OAcG;IACH,IACW,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,EAOvE;IAED,8FAA8F;IAC9E,QAAQ,EAAE,OAAO,CAAS;IAE1B,WAAW,EAAE,OAAO,CAAQ;IAC5B,WAAW,EAAE,OAAO,CAAQ;IAC5B,WAAW,EAAE,OAAO,CAAQ;IAC5B,aAAa,EAAE,OAAO,CAAQ;IAC9B,mBAAmB,EAAE,mBAAmB,CAAc;IAEtE;;;;;;;OAOG;IACa,cAAc,EAAE,OAAO,CAAQ;IAE/C;;;OAGG;IACa,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAM;IAE5D,gGAAgG;IAChF,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAM;IAE7D,+CAA+C;IAC/B,iBAAiB,EAAE,MAAM,CAA4D;IAIpF,eAAe,yCAAgD;IAC/D,cAAc,wCAA+C;IAC7D,iBAAiB,2CAAkD;IACnE,gBAAgB,0CAAiD;IACjE,iBAAiB,2CAAkD;IACnE,gBAAgB,0CAAiD;IACjE,qBAAqB,+CAAsD;IAC3E,oBAAoB,8CAAqD;IACzE,uBAAuB,iDAAwD;IAC/E,sBAAsB,gDAAuD;IAE9F,oFAAoF;IACnE,WAAW,8CAAqD;IAChE,gBAAgB,mDAA0D;IAC1E,iBAAiB,oDAA2D;IAE7F,4FAA4F;IAC3E,kBAAkB,4CAAmD;IACrE,mBAAmB,6CAAoD;IAIjF,KAAK,EAAE,QAAQ,EAAE,CAAM;IACvB,WAAW,EAAE,cAAc,EAAE,CAAM;IACnC,SAAS,EAAE,kBAAkB,EAAE,CAA8B;IAC7D,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAC9C,gBAAgB,EAAE,SAAS,wBAAwB,EAAE,CAAM;IAC3D,OAAO,EAAE,OAAO,CAAQ;IAEC,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAElF,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,cAAc,CAAuC;IAE7D,IAAW,OAAO,IAAI,OAAO,CAE5B;IASD,2DAA2D;IACpD,QAAQ,IAAI,mCAAmC;IAatD,wEAAwE;IACjE,OAAO,CAAC,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,iBAAiB,GAAG,IAAI;IA2BlF,kFAAkF;IAC3E,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAiB1C,yEAAyE;IAClE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO;IAenE;;;;;;;OAOG;IACI,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAavF,sEAAsE;IAC/D,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYtE;;;;;;OAMG;IACI,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAM/F,qDAAqD;IAC9C,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAOtD,2DAA2D;IACpD,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM7D,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAIlD;;;;;;;;;;;;;OAaG;IACI,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAyBnD,0FAA0F;IACnF,6BAA6B,CAAC,IAAI,EAAE,oCAAoC,GAAG,IAAI;IAItF,sDAAsD;IAC/C,oCAAoC,CAAC,IAAI,EAAE,2CAA2C,GAAG,IAAI;IAI7F,mBAAmB,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI;IAI5D,mBAAmB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAIrD,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAM1C,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAKlB,yFAAyF;IACzF,OAAO,CAAC,MAAM;IAMd,6FAA6F;IAC7F,OAAO,CAAC,OAAO;IAgBf;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;;OAMG;IACI,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAI9C,iEAAiE;IAC1D,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAI5C,WAAW,IAAI,IAAI;IAO1B,2FAA2F;IAC3F;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAElE,gGAAgG;IAChG,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAA8C;yCAzc1D,wBAAwB;2CAAxB,wBAAwB;CA0cpC"}
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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"}