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-tools.js
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { WORKFLOW_GRAPH_RESOURCE_URI } from "./config.js";
|
|
2
|
-
import { ControlWorkflowRunInputSchema, ControlWorkflowRunOutputSchema, DisplayWorkflowGraphInputSchema, DisplayWorkflowGraphOutputSchema, FetchWorkflowGraphUpdatesInputSchema, GetWorkflowGraphInputSchema, GetWorkflowGraphOutputSchema, InspectWorkflowEventsInputSchema, InspectWorkflowEventsOutputSchema, ListWorkflowRunsInputSchema, ListWorkflowRunsOutputSchema, compactOutputSchema, } from "./contract-validation.js";
|
|
3
|
-
import { QYL_MCP_CONTROL_SCOPE } from "./oauth.js";
|
|
4
|
-
import { READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS, toolError } from "./tools.js";
|
|
5
|
-
import { fetchWorkflowGraphUpdates, getMostRecentWorkflowRun, getWorkflowGraph, inspectWorkflowEvents, listWorkflowRuns, submitWorkflowControl, } from "./workflow-data.js";
|
|
6
|
-
export const CONTROL_WORKFLOW_TOOL_ANNOTATIONS = {
|
|
7
|
-
readOnlyHint: false,
|
|
8
|
-
destructiveHint: true,
|
|
9
|
-
idempotentHint: true,
|
|
10
|
-
openWorldHint: false,
|
|
11
|
-
};
|
|
12
|
-
function toolResult(text, output) {
|
|
13
|
-
return {
|
|
14
|
-
content: [{ type: "text", text }],
|
|
15
|
-
structuredContent: output,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function graphSummary(prefix, graph) {
|
|
19
|
-
const { statistics } = graph;
|
|
20
|
-
return (`${prefix} ${graph.run.run_id}: ${graph.total_node_count} nodes, ` +
|
|
21
|
-
`${graph.total_edge_count} edges, ${statistics.wall_time_ms.toFixed(0)} ms wall time, ` +
|
|
22
|
-
`${statistics.t_infinity_ms.toFixed(0)} ms critical path at ` +
|
|
23
|
-
`${statistics.peak_concurrency} peak concurrency.`);
|
|
24
|
-
}
|
|
25
|
-
export function hasWorkflowControlScope(scopes) {
|
|
26
|
-
return scopes?.includes(QYL_MCP_CONTROL_SCOPE) === true;
|
|
27
|
-
}
|
|
28
|
-
/** Register the generated-shape workflow inspection, display, update, and control tools. */
|
|
29
|
-
export function registerWorkflowTools(server) {
|
|
30
|
-
server.registerTool("list_workflow_runs", {
|
|
31
|
-
title: "List Workflow Runs",
|
|
32
|
-
description: "List observed Codex workflow runs from qyl's durable journal. Results are " +
|
|
33
|
-
"cursor-paged and contain run metadata only; use get_workflow_graph or " +
|
|
34
|
-
"display_workflow_graph to inspect execution.",
|
|
35
|
-
inputSchema: ListWorkflowRunsInputSchema,
|
|
36
|
-
outputSchema: compactOutputSchema(ListWorkflowRunsOutputSchema),
|
|
37
|
-
annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
|
|
38
|
-
}, async (input, context) => {
|
|
39
|
-
try {
|
|
40
|
-
const output = await listWorkflowRuns(input, context.mcpReq.signal);
|
|
41
|
-
return toolResult(`Found ${output.runs.length} workflow runs${output.has_more ? " (more available)" : ""}.`, output);
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
return toolError(error);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
server.registerTool("get_workflow_graph", {
|
|
48
|
-
title: "Get Workflow Graph",
|
|
49
|
-
description: "Read a bounded page of the deterministic workflow DAG, including typed edges, " +
|
|
50
|
-
"recorded or derived provenance, attempt-preserving nodes, and weighted timing statistics.",
|
|
51
|
-
inputSchema: GetWorkflowGraphInputSchema,
|
|
52
|
-
outputSchema: compactOutputSchema(GetWorkflowGraphOutputSchema),
|
|
53
|
-
annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
|
|
54
|
-
}, async (input, context) => {
|
|
55
|
-
try {
|
|
56
|
-
const output = {
|
|
57
|
-
graph: await getWorkflowGraph(input, context.mcpReq.signal),
|
|
58
|
-
mode: "live",
|
|
59
|
-
};
|
|
60
|
-
return toolResult(graphSummary("Read workflow", output.graph), output);
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
return toolError(error);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
server.registerTool("display_workflow_graph", {
|
|
67
|
-
title: "Display Workflow Graph",
|
|
68
|
-
description: "Open the fullscreen qyl workflow debugger. Pass a run_id for a known live or " +
|
|
69
|
-
"historical run, or omit it to open the newest journaled run.",
|
|
70
|
-
inputSchema: DisplayWorkflowGraphInputSchema,
|
|
71
|
-
outputSchema: compactOutputSchema(DisplayWorkflowGraphOutputSchema),
|
|
72
|
-
annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
|
|
73
|
-
_meta: { ui: { resourceUri: WORKFLOW_GRAPH_RESOURCE_URI } },
|
|
74
|
-
}, async (input, context) => {
|
|
75
|
-
try {
|
|
76
|
-
const runId = input.run_id
|
|
77
|
-
?? (await getMostRecentWorkflowRun(context.mcpReq.signal)).run_id;
|
|
78
|
-
const graph = await getWorkflowGraph({
|
|
79
|
-
run_id: runId,
|
|
80
|
-
node_cursor: input.node_cursor,
|
|
81
|
-
node_limit: input.node_limit,
|
|
82
|
-
edge_cursor: input.edge_cursor,
|
|
83
|
-
edge_limit: input.edge_limit,
|
|
84
|
-
}, context.mcpReq.signal);
|
|
85
|
-
const output = {
|
|
86
|
-
graph,
|
|
87
|
-
live_controls_available: graph.run.status === "active",
|
|
88
|
-
mode: "live",
|
|
89
|
-
};
|
|
90
|
-
return toolResult(graphSummary("Displaying workflow", graph), output);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
return toolError(error);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
server.registerTool("inspect_workflow_events", {
|
|
97
|
-
title: "Inspect Workflow Events",
|
|
98
|
-
description: "Read immutable workflow journal events after a collector sequence and optionally " +
|
|
99
|
-
"retrieve one protected payload by content_ref. Versioned diagnostics arrive as " +
|
|
100
|
-
"content_captured events: inspect the safe machine-readable summary in data, then " +
|
|
101
|
-
"fetch protected evidence through a listed content_ref when needed. Reads are immediate " +
|
|
102
|
-
"and bounded; graph projection and long-poll controls belong to the app-only update tool.",
|
|
103
|
-
inputSchema: InspectWorkflowEventsInputSchema,
|
|
104
|
-
outputSchema: compactOutputSchema(InspectWorkflowEventsOutputSchema),
|
|
105
|
-
annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
|
|
106
|
-
}, async (input, context) => {
|
|
107
|
-
try {
|
|
108
|
-
const output = await inspectWorkflowEvents(input, context.mcpReq.signal);
|
|
109
|
-
return toolResult(`Inspected ${output.page.events.length} workflow events through sequence ` +
|
|
110
|
-
`${output.page.next_sequence}${output.content === undefined ? "" : " and fetched protected content"}.`, output);
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
return toolError(error);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
server.registerTool("fetch_workflow_graph_updates", {
|
|
117
|
-
title: "Fetch Workflow Graph Updates",
|
|
118
|
-
description: "Long-poll workflow journal updates, refresh a bounded graph page, or lazily " +
|
|
119
|
-
"retrieve one captured content object. The model should NOT call this tool directly.",
|
|
120
|
-
inputSchema: FetchWorkflowGraphUpdatesInputSchema,
|
|
121
|
-
// No outputSchema: this tool is `_meta.ui.visibility: ["app"]`, so its only
|
|
122
|
-
// caller is the bundled viewer, which is compiled against the generated
|
|
123
|
-
// TypeScript types and never reads the advertised schema. Publishing one
|
|
124
|
-
// anyway put the whole telemetry tree into every client's `tools/list`
|
|
125
|
-
// (18 KB of the 232 KB manifest) to describe a shape no model may call.
|
|
126
|
-
// Structured content is still returned and still typed by the generated
|
|
127
|
-
// contract at compile time, and workflow-ui.test.ts still parses these bodies
|
|
128
|
-
// against FetchWorkflowGraphUpdatesOutputSchema, so the shape stays pinned.
|
|
129
|
-
annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
|
|
130
|
-
_meta: { ui: { visibility: ["app"] } },
|
|
131
|
-
}, async (input, context) => {
|
|
132
|
-
try {
|
|
133
|
-
const output = await fetchWorkflowGraphUpdates(input, context.mcpReq.signal);
|
|
134
|
-
return toolResult(`Fetched ${output.page.events.length} workflow events through sequence ` +
|
|
135
|
-
`${output.page.next_sequence}.`, output);
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
return toolError(error);
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
server.registerTool("control_workflow_run", {
|
|
142
|
-
title: "Control Workflow Run",
|
|
143
|
-
description: "Submit an idempotent run-level steer, interrupt, or resume command. This mutates " +
|
|
144
|
-
"the active Codex thread through its outbound observer channel and requires qyl:control.",
|
|
145
|
-
inputSchema: ControlWorkflowRunInputSchema,
|
|
146
|
-
outputSchema: compactOutputSchema(ControlWorkflowRunOutputSchema),
|
|
147
|
-
annotations: CONTROL_WORKFLOW_TOOL_ANNOTATIONS,
|
|
148
|
-
}, async (input, context) => {
|
|
149
|
-
if (!hasWorkflowControlScope(context.http?.authInfo?.scopes)) {
|
|
150
|
-
return {
|
|
151
|
-
content: [{
|
|
152
|
-
type: "text",
|
|
153
|
-
text: `control_workflow_run requires the ${QYL_MCP_CONTROL_SCOPE} OAuth scope.`,
|
|
154
|
-
}],
|
|
155
|
-
isError: true,
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
try {
|
|
159
|
-
const output = {
|
|
160
|
-
command: await submitWorkflowControl(input, context.mcpReq.signal),
|
|
161
|
-
};
|
|
162
|
-
return toolResult(`Workflow ${input.run_id} ${input.action} command accepted as ` +
|
|
163
|
-
`${output.command.command_id} (${output.command.status}).`, output);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
return toolError(error);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
//# sourceMappingURL=workflow-tools.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tools.js","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"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"}
|