qyl-mcp-server 2.1.0 → 4.0.0

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 (47) hide show
  1. package/README.md +44 -21
  2. package/dist/collector.d.ts +15 -2
  3. package/dist/collector.js +67 -3
  4. package/dist/collector.js.map +1 -1
  5. package/dist/config.d.ts +0 -2
  6. package/dist/config.js +0 -2
  7. package/dist/config.js.map +1 -1
  8. package/dist/contract-operations.d.ts +37 -0
  9. package/dist/contract-operations.js +124 -0
  10. package/dist/contract-operations.js.map +1 -0
  11. package/dist/contract-validation.d.ts +7 -20
  12. package/dist/contract-validation.js +11 -22
  13. package/dist/contract-validation.js.map +1 -1
  14. package/dist/demo.d.ts +18 -0
  15. package/dist/demo.js +99 -0
  16. package/dist/demo.js.map +1 -1
  17. package/dist/mcp-app.html +5 -5
  18. package/dist/mcp-dashboard.html +4 -4
  19. package/dist/mcp-home.html +6 -7
  20. package/dist/metrics-tools.d.ts +23 -0
  21. package/dist/metrics-tools.js +96 -0
  22. package/dist/metrics-tools.js.map +1 -0
  23. package/dist/metrics.d.ts +45 -0
  24. package/dist/metrics.js +274 -0
  25. package/dist/metrics.js.map +1 -0
  26. package/dist/oauth.d.ts +0 -1
  27. package/dist/oauth.js +1 -2
  28. package/dist/oauth.js.map +1 -1
  29. package/dist/server.js +3 -4
  30. package/dist/server.js.map +1 -1
  31. package/dist/summaries.d.ts +13 -0
  32. package/dist/summaries.js +67 -0
  33. package/dist/summaries.js.map +1 -1
  34. package/package.json +4 -4
  35. package/dist/observe-graph.html +0 -214
  36. package/dist/workflow-data.d.ts +0 -13
  37. package/dist/workflow-data.js +0 -189
  38. package/dist/workflow-data.js.map +0 -1
  39. package/dist/workflow-layout.d.ts +0 -24
  40. package/dist/workflow-layout.js +0 -165
  41. package/dist/workflow-layout.js.map +0 -1
  42. package/dist/workflow-reducer.d.ts +0 -37
  43. package/dist/workflow-reducer.js +0 -114
  44. package/dist/workflow-reducer.js.map +0 -1
  45. package/dist/workflow-tools.d.ts +0 -10
  46. package/dist/workflow-tools.js +0 -170
  47. package/dist/workflow-tools.js.map +0 -1
@@ -1,13 +0,0 @@
1
- import type { ControlWorkflowRunInput, FetchWorkflowGraphUpdatesInput, FetchWorkflowGraphUpdatesOutput, GetWorkflowGraphInput, InspectWorkflowEventsInput, InspectWorkflowEventsOutput, ListWorkflowRunsInput, ListWorkflowRunsOutput, WorkflowContent, WorkflowControlCommand, WorkflowEventPage, WorkflowGraphSnapshot, WorkflowRun, WorkflowRunPage } from "@ancplua/qyl-api-schema/types";
2
- export declare function parseWorkflowRun(value: unknown, context?: string): WorkflowRun;
3
- export declare function parseWorkflowRunPage(value: unknown, context?: string): WorkflowRunPage;
4
- export declare function parseWorkflowGraph(value: unknown, context?: string): WorkflowGraphSnapshot;
5
- export declare function parseWorkflowEvents(value: unknown, context?: string): WorkflowEventPage;
6
- export declare function parseWorkflowContent(value: unknown, context?: string): WorkflowContent;
7
- export declare function parseWorkflowControlCommand(value: unknown, context?: string): WorkflowControlCommand;
8
- export declare function listWorkflowRuns(input: ListWorkflowRunsInput, signal?: AbortSignal): Promise<ListWorkflowRunsOutput>;
9
- export declare function getWorkflowGraph(input: GetWorkflowGraphInput, signal?: AbortSignal): Promise<WorkflowGraphSnapshot>;
10
- export declare function getMostRecentWorkflowRun(signal?: AbortSignal): Promise<WorkflowRun>;
11
- export declare function fetchWorkflowGraphUpdates(input: FetchWorkflowGraphUpdatesInput, signal?: AbortSignal): Promise<FetchWorkflowGraphUpdatesOutput>;
12
- export declare function inspectWorkflowEvents(input: InspectWorkflowEventsInput, signal?: AbortSignal): Promise<InspectWorkflowEventsOutput>;
13
- export declare function submitWorkflowControl(input: ControlWorkflowRunInput, signal?: AbortSignal): Promise<WorkflowControlCommand>;
@@ -1,189 +0,0 @@
1
- import { z } from "zod";
2
- import { CollectorError, collectorGet, collectorPost, } from "./collector.js";
3
- import { WorkflowContentSchema, WorkflowControlCommandSchema, WorkflowEventPageSchema, WorkflowGraphSnapshotSchema, WorkflowRunPageSchema, WorkflowRunSchema, } from "./contract-validation.js";
4
- const rfc3339 = z.iso.datetime({ offset: true });
5
- const DEFAULT_REQUEST_TIMEOUT_MS = 10_000;
6
- function asRecord(value, context) {
7
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
8
- throw new CollectorError(`collector contract mismatch for ${context}: expected an object`);
9
- }
10
- return value;
11
- }
12
- function canonicalDateTime(value, context) {
13
- const parsed = rfc3339.safeParse(value);
14
- if (!parsed.success) {
15
- throw new CollectorError(`collector contract mismatch for ${context}: ${z.prettifyError(parsed.error)}`);
16
- }
17
- return new Date(parsed.data).toISOString();
18
- }
19
- function parseContract(schema, value, context) {
20
- const parsed = schema.safeParse(value);
21
- if (!parsed.success) {
22
- throw new CollectorError(`collector contract mismatch for ${context}: ${z.prettifyError(parsed.error)}`);
23
- }
24
- return parsed.data;
25
- }
26
- function normalizeRun(value, context) {
27
- const run = asRecord(value, context);
28
- return {
29
- ...run,
30
- started_at: canonicalDateTime(run.started_at, `${context}.started_at`),
31
- ...(run.ended_at === undefined
32
- ? {}
33
- : { ended_at: canonicalDateTime(run.ended_at, `${context}.ended_at`) }),
34
- };
35
- }
36
- export function parseWorkflowRun(value, context = "workflow run") {
37
- return parseContract(WorkflowRunSchema, normalizeRun(value, context), context);
38
- }
39
- export function parseWorkflowRunPage(value, context = "workflow run page") {
40
- const page = asRecord(value, context);
41
- const items = z.array(z.unknown()).safeParse(page.items);
42
- if (!items.success) {
43
- throw new CollectorError(`collector contract mismatch for ${context}.items: ${z.prettifyError(items.error)}`);
44
- }
45
- return parseContract(WorkflowRunPageSchema, {
46
- ...page,
47
- items: items.data.map((item, index) => normalizeRun(item, `${context}.items[${index}]`)),
48
- }, context);
49
- }
50
- export function parseWorkflowGraph(value, context = "workflow graph") {
51
- const graph = asRecord(value, context);
52
- const nodes = z.array(z.unknown()).safeParse(graph.nodes);
53
- if (!nodes.success) {
54
- throw new CollectorError(`collector contract mismatch for ${context}.nodes: ${z.prettifyError(nodes.error)}`);
55
- }
56
- return parseContract(WorkflowGraphSnapshotSchema, {
57
- ...graph,
58
- run: normalizeRun(graph.run, `${context}.run`),
59
- nodes: nodes.data.map((value, index) => {
60
- const node = asRecord(value, `${context}.nodes[${index}]`);
61
- return {
62
- ...node,
63
- ...(node.started_at === undefined
64
- ? {}
65
- : {
66
- started_at: canonicalDateTime(node.started_at, `${context}.nodes[${index}].started_at`),
67
- }),
68
- ...(node.ended_at === undefined
69
- ? {}
70
- : {
71
- ended_at: canonicalDateTime(node.ended_at, `${context}.nodes[${index}].ended_at`),
72
- }),
73
- };
74
- }),
75
- }, context);
76
- }
77
- export function parseWorkflowEvents(value, context = "workflow event page") {
78
- const page = asRecord(value, context);
79
- const events = z.array(z.unknown()).safeParse(page.events);
80
- if (!events.success) {
81
- throw new CollectorError(`collector contract mismatch for ${context}.events: ${z.prettifyError(events.error)}`);
82
- }
83
- return parseContract(WorkflowEventPageSchema, {
84
- ...page,
85
- events: events.data.map((value, index) => {
86
- const event = asRecord(value, `${context}.events[${index}]`);
87
- return {
88
- ...event,
89
- timestamp: canonicalDateTime(event.timestamp, `${context}.events[${index}].timestamp`),
90
- };
91
- }),
92
- }, context);
93
- }
94
- export function parseWorkflowContent(value, context = "workflow content") {
95
- return parseContract(WorkflowContentSchema, value, context);
96
- }
97
- export function parseWorkflowControlCommand(value, context = "workflow control command") {
98
- const command = asRecord(value, context);
99
- return parseContract(WorkflowControlCommandSchema, {
100
- ...command,
101
- requested_at: canonicalDateTime(command.requested_at, `${context}.requested_at`),
102
- updated_at: canonicalDateTime(command.updated_at, `${context}.updated_at`),
103
- }, context);
104
- }
105
- export async function listWorkflowRuns(input, signal) {
106
- const page = parseWorkflowRunPage(await collectorGet("/api/v1/workflow-runs", {
107
- status: input.status,
108
- cursor: input.cursor,
109
- limit: input.limit ?? 50,
110
- }, { signal, timeoutMs: DEFAULT_REQUEST_TIMEOUT_MS }), "/api/v1/workflow-runs");
111
- return {
112
- runs: page.items,
113
- ...(page.next_cursor === undefined ? {} : { next_cursor: page.next_cursor }),
114
- has_more: page.has_more,
115
- mode: "live",
116
- };
117
- }
118
- export async function getWorkflowGraph(input, signal) {
119
- return parseWorkflowGraph(await collectorGet(`/api/v1/workflow-runs/${encodeURIComponent(input.run_id)}/graph`, {
120
- node_cursor: input.node_cursor,
121
- node_limit: input.node_limit ?? 250,
122
- edge_cursor: input.edge_cursor,
123
- edge_limit: input.edge_limit ?? 500,
124
- }, { signal, timeoutMs: DEFAULT_REQUEST_TIMEOUT_MS }), `/api/v1/workflow-runs/${input.run_id}/graph`);
125
- }
126
- export async function getMostRecentWorkflowRun(signal) {
127
- const page = await listWorkflowRuns({ limit: 1 }, signal);
128
- const run = page.runs[0];
129
- if (!run)
130
- throw new CollectorError("no workflow runs are available");
131
- return run;
132
- }
133
- export async function fetchWorkflowGraphUpdates(input, signal) {
134
- const waitMs = input.content_ref === undefined ? input.wait_ms ?? 20_000 : 0;
135
- const page = await readWorkflowEvents(input.run_id, input.after_sequence, input.limit, waitMs, signal);
136
- const graphRequested = page.events.length > 0
137
- || page.cursor_gap
138
- || input.node_cursor !== undefined
139
- || input.edge_cursor !== undefined
140
- || (input.node_limit !== undefined && input.node_limit !== 250)
141
- || (input.edge_limit !== undefined && input.edge_limit !== 500);
142
- const graph = graphRequested
143
- ? await getWorkflowGraph({
144
- run_id: input.run_id,
145
- node_cursor: input.node_cursor,
146
- node_limit: input.node_limit,
147
- edge_cursor: input.edge_cursor,
148
- edge_limit: input.edge_limit,
149
- }, signal)
150
- : undefined;
151
- const content = input.content_ref === undefined
152
- ? undefined
153
- : await readWorkflowContent(input.run_id, input.content_ref, signal);
154
- return {
155
- page,
156
- ...(graph === undefined ? {} : { graph }),
157
- ...(content === undefined ? {} : { content }),
158
- mode: "live",
159
- };
160
- }
161
- export async function inspectWorkflowEvents(input, signal) {
162
- const page = await readWorkflowEvents(input.run_id, input.after_sequence, input.limit, 0, signal);
163
- const content = input.content_ref === undefined
164
- ? undefined
165
- : await readWorkflowContent(input.run_id, input.content_ref, signal);
166
- return {
167
- page,
168
- ...(content === undefined ? {} : { content }),
169
- mode: "live",
170
- };
171
- }
172
- async function readWorkflowEvents(runId, afterSequence, limit, waitMs, signal) {
173
- return parseWorkflowEvents(await collectorGet(`/api/v1/workflow-runs/${encodeURIComponent(runId)}/events`, {
174
- after_sequence: afterSequence,
175
- limit: limit ?? 250,
176
- wait_ms: waitMs,
177
- }, { signal, timeoutMs: waitMs + 5_000 }), `/api/v1/workflow-runs/${runId}/events`);
178
- }
179
- async function readWorkflowContent(runId, contentRef, signal) {
180
- return parseWorkflowContent(await collectorGet(`/api/v1/workflow-runs/${encodeURIComponent(runId)}/content/${encodeURIComponent(contentRef)}`, {}, { signal, timeoutMs: DEFAULT_REQUEST_TIMEOUT_MS }), `/api/v1/workflow-runs/${runId}/content/${contentRef}`);
181
- }
182
- export async function submitWorkflowControl(input, signal) {
183
- return parseWorkflowControlCommand(await collectorPost(`/api/v1/workflow-runs/${encodeURIComponent(input.run_id)}/commands`, {
184
- action: input.action,
185
- idempotency_key: input.idempotency_key,
186
- ...(input.input === undefined ? {} : { input: input.input }),
187
- }, { signal, timeoutMs: DEFAULT_REQUEST_TIMEOUT_MS }), `/api/v1/workflow-runs/${input.run_id}/commands`);
188
- }
189
- //# sourceMappingURL=workflow-data.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-data.js","sourceRoot":"","sources":["../src/workflow-data.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import type { WorkflowGraphNode, WorkflowGraphSnapshot } from "@ancplua/qyl-api-schema/types";
2
- export type WorkflowLayoutMode = "layered" | "radial";
3
- export interface WorkflowNodePosition {
4
- node: WorkflowGraphNode;
5
- x: number;
6
- y: number;
7
- width: number;
8
- height: number;
9
- rank: number;
10
- }
11
- export interface WorkflowLayout {
12
- mode: WorkflowLayoutMode;
13
- width: number;
14
- height: number;
15
- positions: Map<string, WorkflowNodePosition>;
16
- }
17
- export interface ViewTransform {
18
- x: number;
19
- y: number;
20
- scale: number;
21
- }
22
- export declare function layoutWorkflowGraph(graph: WorkflowGraphSnapshot, requestedMode: WorkflowLayoutMode): WorkflowLayout;
23
- export declare function isRadialEligible(graph: WorkflowGraphSnapshot): boolean;
24
- export declare function visibleWorkflowNodeIds(layout: WorkflowLayout, transform: ViewTransform, viewportWidth: number, viewportHeight: number, overscan?: number): Set<string>;
@@ -1,165 +0,0 @@
1
- const NODE_WIDTH = 184;
2
- const NODE_HEIGHT = 62;
3
- export function layoutWorkflowGraph(graph, requestedMode) {
4
- const mode = requestedMode === "radial" && isRadialEligible(graph)
5
- ? "radial"
6
- : "layered";
7
- return mode === "radial" ? radialLayout(graph.nodes) : layeredLayout(graph.nodes, graph.edges);
8
- }
9
- export function isRadialEligible(graph) {
10
- if (graph.nodes.length < 4 || graph.nodes.length > 24)
11
- return false;
12
- const indegree = degreeMap(graph.nodes);
13
- const outdegree = degreeMap(graph.nodes);
14
- for (const edge of graph.edges) {
15
- indegree.set(edge.target_node_id, (indegree.get(edge.target_node_id) ?? 0) + 1);
16
- outdegree.set(edge.source_node_id, (outdegree.get(edge.source_node_id) ?? 0) + 1);
17
- }
18
- const roots = graph.nodes.filter((node) => (indegree.get(node.node_id) ?? 0) === 0);
19
- const sinks = graph.nodes.filter((node) => (outdegree.get(node.node_id) ?? 0) === 0);
20
- return (roots.length === 1
21
- && sinks.length === 1
22
- && graph.nodes.some((node) => (outdegree.get(node.node_id) ?? 0) >= 2)
23
- && graph.nodes.some((node) => (indegree.get(node.node_id) ?? 0) >= 2));
24
- }
25
- export function visibleWorkflowNodeIds(layout, transform, viewportWidth, viewportHeight, overscan = 160) {
26
- const visible = new Set();
27
- for (const [nodeId, position] of layout.positions) {
28
- const left = position.x * transform.scale + transform.x;
29
- const top = position.y * transform.scale + transform.y;
30
- const right = left + position.width * transform.scale;
31
- const bottom = top + position.height * transform.scale;
32
- if (right >= -overscan
33
- && bottom >= -overscan
34
- && left <= viewportWidth + overscan
35
- && top <= viewportHeight + overscan) {
36
- visible.add(nodeId);
37
- }
38
- }
39
- return visible;
40
- }
41
- function layeredLayout(nodes, edges) {
42
- const byId = new Map(nodes.map((node) => [node.node_id, node]));
43
- const indegree = degreeMap(nodes);
44
- const outgoing = new Map();
45
- for (const edge of edges) {
46
- if (!byId.has(edge.source_node_id) || !byId.has(edge.target_node_id))
47
- continue;
48
- indegree.set(edge.target_node_id, (indegree.get(edge.target_node_id) ?? 0) + 1);
49
- const targets = outgoing.get(edge.source_node_id) ?? [];
50
- targets.push(edge.target_node_id);
51
- outgoing.set(edge.source_node_id, targets);
52
- }
53
- const ranks = new Map();
54
- const queue = nodes
55
- .filter((node) => (indegree.get(node.node_id) ?? 0) === 0)
56
- .sort(compareNodes)
57
- .map((node) => node.node_id);
58
- const visited = new Set();
59
- while (queue.length > 0) {
60
- const nodeId = queue.shift();
61
- if (visited.has(nodeId))
62
- continue;
63
- visited.add(nodeId);
64
- const rank = ranks.get(nodeId) ?? 0;
65
- for (const targetId of [...(outgoing.get(nodeId) ?? [])].sort()) {
66
- ranks.set(targetId, Math.max(ranks.get(targetId) ?? 0, rank + 1));
67
- const nextDegree = (indegree.get(targetId) ?? 1) - 1;
68
- indegree.set(targetId, nextDegree);
69
- if (nextDegree === 0)
70
- queue.push(targetId);
71
- }
72
- queue.sort();
73
- }
74
- let fallbackRank = Math.max(0, ...ranks.values());
75
- for (const node of [...nodes].sort(compareNodes)) {
76
- if (visited.has(node.node_id))
77
- continue;
78
- ranks.set(node.node_id, fallbackRank++);
79
- }
80
- const layers = new Map();
81
- for (const node of nodes) {
82
- const rank = ranks.get(node.node_id) ?? 0;
83
- const layer = layers.get(rank) ?? [];
84
- layer.push(node);
85
- layers.set(rank, layer);
86
- }
87
- for (const layer of layers.values())
88
- layer.sort(compareNodes);
89
- const positions = new Map();
90
- const padding = 54;
91
- const columnGap = 104;
92
- const rowGap = 28;
93
- let maximumRows = 1;
94
- for (const [rank, layer] of [...layers].sort(([left], [right]) => left - right)) {
95
- maximumRows = Math.max(maximumRows, layer.length);
96
- layer.forEach((node, index) => {
97
- positions.set(node.node_id, {
98
- node,
99
- x: padding + rank * (NODE_WIDTH + columnGap),
100
- y: padding + index * (NODE_HEIGHT + rowGap),
101
- width: NODE_WIDTH,
102
- height: NODE_HEIGHT,
103
- rank,
104
- });
105
- });
106
- }
107
- const maximumRank = Math.max(0, ...ranks.values());
108
- return {
109
- mode: "layered",
110
- width: padding * 2 + (maximumRank + 1) * NODE_WIDTH + maximumRank * columnGap,
111
- height: padding * 2 + maximumRows * NODE_HEIGHT + (maximumRows - 1) * rowGap,
112
- positions,
113
- };
114
- }
115
- function radialLayout(nodes) {
116
- const sorted = [...nodes].sort(compareNodes);
117
- const width = 920;
118
- const height = 680;
119
- const centerX = width / 2 - NODE_WIDTH / 2;
120
- const centerY = height / 2 - NODE_HEIGHT / 2;
121
- const positions = new Map();
122
- const root = sorted[0];
123
- const sink = sorted.at(-1);
124
- if (root) {
125
- positions.set(root.node_id, {
126
- node: root,
127
- x: centerX,
128
- y: 44,
129
- width: NODE_WIDTH,
130
- height: NODE_HEIGHT,
131
- rank: 0,
132
- });
133
- }
134
- const ring = sorted.slice(1, -1);
135
- ring.forEach((node, index) => {
136
- const angle = (index / Math.max(1, ring.length)) * Math.PI * 2 - Math.PI / 2;
137
- positions.set(node.node_id, {
138
- node,
139
- x: centerX + Math.cos(angle) * 300,
140
- y: centerY + Math.sin(angle) * 220,
141
- width: NODE_WIDTH,
142
- height: NODE_HEIGHT,
143
- rank: 1,
144
- });
145
- });
146
- if (sink && sink !== root) {
147
- positions.set(sink.node_id, {
148
- node: sink,
149
- x: centerX,
150
- y: height - NODE_HEIGHT - 44,
151
- width: NODE_WIDTH,
152
- height: NODE_HEIGHT,
153
- rank: 2,
154
- });
155
- }
156
- return { mode: "radial", width, height, positions };
157
- }
158
- function degreeMap(nodes) {
159
- return new Map(nodes.map((node) => [node.node_id, 0]));
160
- }
161
- function compareNodes(left, right) {
162
- const time = (left.started_at ?? "").localeCompare(right.started_at ?? "");
163
- return time || left.node_id.localeCompare(right.node_id);
164
- }
165
- //# sourceMappingURL=workflow-layout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-layout.js","sourceRoot":"","sources":["../src/workflow-layout.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import type { DisplayWorkflowGraphOutput, FetchWorkflowGraphUpdatesOutput, WorkflowContent, WorkflowGraphEdge, WorkflowGraphNode, WorkflowGraphSnapshot, WorkflowJournalEvent } from "@ancplua/qyl-api-schema/types";
2
- export declare const MAX_EVENT_ROWS = 1000;
3
- export type WorkflowConnectionState = "connecting" | "live" | "retrying" | "stopped";
4
- export interface WorkflowDebuggerState {
5
- graph: WorkflowGraphSnapshot | undefined;
6
- events: WorkflowJournalEvent[];
7
- journalCursor: string;
8
- selectedNodeId: string | undefined;
9
- selectedEdgeId: string | undefined;
10
- content: Record<string, WorkflowContent>;
11
- liveControlsAvailable: boolean;
12
- connection: WorkflowConnectionState;
13
- reconnectAttempt: number;
14
- cursorGapCount: number;
15
- }
16
- export type WorkflowDebuggerAction = {
17
- type: "bootstrap";
18
- payload: DisplayWorkflowGraphOutput;
19
- } | {
20
- type: "updates";
21
- payload: FetchWorkflowGraphUpdatesOutput;
22
- } | {
23
- type: "select-node";
24
- nodeId: string | undefined;
25
- } | {
26
- type: "select-edge";
27
- edgeId: string | undefined;
28
- } | {
29
- type: "connection";
30
- connection: WorkflowConnectionState;
31
- reconnectAttempt?: number;
32
- };
33
- export declare function createWorkflowDebuggerState(): WorkflowDebuggerState;
34
- export declare function reduceWorkflowDebugger(state: WorkflowDebuggerState, action: WorkflowDebuggerAction): WorkflowDebuggerState;
35
- export declare function selectedWorkflowNode(state: WorkflowDebuggerState): WorkflowGraphNode | undefined;
36
- export declare function selectedWorkflowEdge(state: WorkflowDebuggerState): WorkflowGraphEdge | undefined;
37
- export declare function reconnectDelayMs(attempt: number): number;
@@ -1,114 +0,0 @@
1
- export const MAX_EVENT_ROWS = 1_000;
2
- export function createWorkflowDebuggerState() {
3
- return {
4
- graph: undefined,
5
- events: [],
6
- journalCursor: "0",
7
- selectedNodeId: undefined,
8
- selectedEdgeId: undefined,
9
- content: {},
10
- liveControlsAvailable: false,
11
- connection: "connecting",
12
- reconnectAttempt: 0,
13
- cursorGapCount: 0,
14
- };
15
- }
16
- export function reduceWorkflowDebugger(state, action) {
17
- if (action.type === "bootstrap") {
18
- return {
19
- ...createWorkflowDebuggerState(),
20
- graph: action.payload.graph,
21
- journalCursor: "0",
22
- liveControlsAvailable: action.payload.live_controls_available,
23
- connection: "live",
24
- };
25
- }
26
- if (action.type === "connection") {
27
- return {
28
- ...state,
29
- connection: action.connection,
30
- reconnectAttempt: action.reconnectAttempt ?? state.reconnectAttempt,
31
- };
32
- }
33
- if (action.type === "select-node") {
34
- return {
35
- ...state,
36
- selectedNodeId: action.nodeId,
37
- selectedEdgeId: undefined,
38
- };
39
- }
40
- if (action.type === "select-edge") {
41
- return {
42
- ...state,
43
- selectedNodeId: undefined,
44
- selectedEdgeId: action.edgeId,
45
- };
46
- }
47
- const incomingGraph = action.payload.graph;
48
- const replacingRun = incomingGraph !== undefined
49
- && state.graph !== undefined
50
- && incomingGraph.run.run_id !== state.graph.run.run_id;
51
- const graph = incomingGraph === undefined
52
- ? state.graph
53
- : replacingRun || state.graph === undefined
54
- ? incomingGraph
55
- : mergeGraph(state.graph, incomingGraph);
56
- const page = action.payload.page;
57
- const events = page.cursor_gap || replacingRun
58
- ? sortedUniqueEvents(page.events).slice(-MAX_EVENT_ROWS)
59
- : sortedUniqueEvents([...state.events, ...page.events]).slice(-MAX_EVENT_ROWS);
60
- const content = action.payload.content === undefined
61
- ? state.content
62
- : {
63
- ...state.content,
64
- [action.payload.content.content_ref]: action.payload.content,
65
- };
66
- return {
67
- ...state,
68
- graph,
69
- events,
70
- journalCursor: page.next_sequence,
71
- content,
72
- liveControlsAvailable: graph?.run.status === "active" && state.liveControlsAvailable,
73
- connection: "live",
74
- reconnectAttempt: 0,
75
- cursorGapCount: state.cursorGapCount + (page.cursor_gap ? 1 : 0),
76
- ...(replacingRun
77
- ? { selectedNodeId: undefined, selectedEdgeId: undefined }
78
- : {}),
79
- };
80
- }
81
- function mergeGraph(current, incoming) {
82
- return {
83
- ...incoming,
84
- nodes: mergeById(current.nodes, incoming.nodes, (node) => node.node_id),
85
- edges: mergeById(current.edges, incoming.edges, (edge) => edge.edge_id),
86
- };
87
- }
88
- function mergeById(current, incoming, id) {
89
- const values = new Map(current.map((value) => [id(value), value]));
90
- for (const value of incoming)
91
- values.set(id(value), value);
92
- return [...values.values()].sort((left, right) => id(left).localeCompare(id(right)));
93
- }
94
- function sortedUniqueEvents(events) {
95
- const values = new Map(events.map((event) => [event.event_id, event]));
96
- return [...values.values()].sort((left, right) => {
97
- const sequenceOrder = BigInt(left.journal_sequence) < BigInt(right.journal_sequence)
98
- ? -1
99
- : BigInt(left.journal_sequence) > BigInt(right.journal_sequence)
100
- ? 1
101
- : 0;
102
- return sequenceOrder || left.event_id.localeCompare(right.event_id);
103
- });
104
- }
105
- export function selectedWorkflowNode(state) {
106
- return state.graph?.nodes.find((node) => node.node_id === state.selectedNodeId);
107
- }
108
- export function selectedWorkflowEdge(state) {
109
- return state.graph?.edges.find((edge) => edge.edge_id === state.selectedEdgeId);
110
- }
111
- export function reconnectDelayMs(attempt) {
112
- return Math.min(15_000, 500 * 2 ** Math.max(0, attempt));
113
- }
114
- //# sourceMappingURL=workflow-reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-reducer.js","sourceRoot":"","sources":["../src/workflow-reducer.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/server";
2
- export declare const CONTROL_WORKFLOW_TOOL_ANNOTATIONS: {
3
- readonly readOnlyHint: false;
4
- readonly destructiveHint: true;
5
- readonly idempotentHint: true;
6
- readonly openWorldHint: false;
7
- };
8
- export declare function hasWorkflowControlScope(scopes: readonly string[] | undefined): boolean;
9
- /** Register the generated-shape workflow inspection, display, update, and control tools. */
10
- export declare function registerWorkflowTools(server: McpServer): void;