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.
- package/README.md +44 -21
- package/dist/collector.d.ts +15 -2
- package/dist/collector.js +67 -3
- package/dist/collector.js.map +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.js +0 -2
- package/dist/config.js.map +1 -1
- package/dist/contract-operations.d.ts +37 -0
- package/dist/contract-operations.js +124 -0
- package/dist/contract-operations.js.map +1 -0
- package/dist/contract-validation.d.ts +7 -20
- package/dist/contract-validation.js +11 -22
- package/dist/contract-validation.js.map +1 -1
- package/dist/demo.d.ts +18 -0
- package/dist/demo.js +99 -0
- package/dist/demo.js.map +1 -1
- package/dist/mcp-app.html +5 -5
- package/dist/mcp-dashboard.html +4 -4
- package/dist/mcp-home.html +6 -7
- package/dist/metrics-tools.d.ts +23 -0
- package/dist/metrics-tools.js +96 -0
- package/dist/metrics-tools.js.map +1 -0
- package/dist/metrics.d.ts +45 -0
- package/dist/metrics.js +274 -0
- package/dist/metrics.js.map +1 -0
- package/dist/oauth.d.ts +0 -1
- package/dist/oauth.js +1 -2
- package/dist/oauth.js.map +1 -1
- package/dist/server.js +3 -4
- package/dist/server.js.map +1 -1
- package/dist/summaries.d.ts +13 -0
- package/dist/summaries.js +67 -0
- package/dist/summaries.js.map +1 -1
- package/package.json +4 -4
- package/dist/observe-graph.html +0 -214
- package/dist/workflow-data.d.ts +0 -13
- package/dist/workflow-data.js +0 -189
- package/dist/workflow-data.js.map +0 -1
- package/dist/workflow-layout.d.ts +0 -24
- package/dist/workflow-layout.js +0 -165
- package/dist/workflow-layout.js.map +0 -1
- package/dist/workflow-reducer.d.ts +0 -37
- package/dist/workflow-reducer.js +0 -114
- package/dist/workflow-reducer.js.map +0 -1
- package/dist/workflow-tools.d.ts +0 -10
- package/dist/workflow-tools.js +0 -170
- package/dist/workflow-tools.js.map +0 -1
package/dist/workflow-data.d.ts
DELETED
|
@@ -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>;
|
package/dist/workflow-data.js
DELETED
|
@@ -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>;
|
package/dist/workflow-layout.js
DELETED
|
@@ -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;
|
package/dist/workflow-reducer.js
DELETED
|
@@ -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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"}
|
package/dist/workflow-tools.d.ts
DELETED
|
@@ -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;
|