qyl-mcp-server 7.4.0 → 7.6.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.
@@ -0,0 +1,214 @@
1
+ /**
2
+ * The tools that change something: annotations, saved queries and the one
3
+ * delete tool, plus the two saved-query reads that belong with them.
4
+ *
5
+ * What they change is limited to objects users create in qyl, inside the
6
+ * verified caller's Collector project: a note on a trace, span or session, and
7
+ * a named filter. No tool here edits or deletes a trace, log or metric;
8
+ * retention alone removes telemetry. Reading and writing stay separate tools,
9
+ * so a host can approve them separately, and each write is its own tool:
10
+ * create, update and delete are never one generic executor.
11
+ *
12
+ * Annotations follow the contract's tool table: create is not idempotent (each
13
+ * call adds a note), update and delete are destructive and idempotent (they
14
+ * replace or remove a version named by its etag, and repeating them changes
15
+ * nothing more). The create and update tools need `qyl:write`, delete needs
16
+ * `qyl:delete`, and the saved-query reads keep `qyl:read` (tool-scopes.ts).
17
+ */
18
+ import { compactOutputSchema, contractSchema } from "./contract-validation.js";
19
+ import { annotationLine, createAnnotation, createSavedQuery, deleteResource, describeTarget, listSavedQueries, runSavedQuery, updateAnnotation, updateSavedQuery, } from "./collector-resources.js";
20
+ import { QYL_MCP_DELETE_SCOPE, QYL_MCP_SCOPE, QYL_MCP_WRITE_SCOPE } from "./oauth.js";
21
+ import { runTool } from "./request-scope.js";
22
+ import { humanizeNs, pageNote, shortId } from "./summaries.js";
23
+ import { telemetryToolResult } from "./telemetry-redaction.js";
24
+ import { assertToolScopes, toolScopeChallenge } from "./tool-scopes.js";
25
+ import { READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS, TELEMETRY_TOOL_AUTH_META } from "./tools.js";
26
+ /** Adds an object; a repeated call adds another. */
27
+ export const CREATE_TOOL_ANNOTATIONS = {
28
+ readOnlyHint: false,
29
+ destructiveHint: false,
30
+ idempotentHint: false,
31
+ openWorldHint: false,
32
+ };
33
+ /** Replaces the version an etag names; repeating it changes nothing more. */
34
+ export const UPDATE_TOOL_ANNOTATIONS = {
35
+ readOnlyHint: false,
36
+ destructiveHint: true,
37
+ idempotentHint: true,
38
+ openWorldHint: false,
39
+ };
40
+ /** Removes the version an etag names; repeating it removes nothing more. */
41
+ export const DELETE_TOOL_ANNOTATIONS = {
42
+ readOnlyHint: false,
43
+ destructiveHint: true,
44
+ idempotentHint: true,
45
+ openWorldHint: false,
46
+ };
47
+ const WRITE_SCOPES = [QYL_MCP_SCOPE, QYL_MCP_WRITE_SCOPE];
48
+ const DELETE_SCOPES = [QYL_MCP_SCOPE, QYL_MCP_DELETE_SCOPE];
49
+ /** OpenAI's per-tool `securitySchemes`, in the `_meta` form the read tools use. */
50
+ function securityMeta(scopes) {
51
+ return { securitySchemes: [{ type: "oauth2", scopes: [...scopes] }] };
52
+ }
53
+ const CreateAnnotationInputSchema = contractSchema("Mcp.Tools.CreateAnnotationInput");
54
+ const UpdateAnnotationInputSchema = contractSchema("Mcp.Tools.UpdateAnnotationInput");
55
+ const AnnotationOutputSchema = contractSchema("Mcp.Tools.AnnotationOutput");
56
+ const CreateSavedQueryInputSchema = contractSchema("Mcp.Tools.CreateSavedQueryInput");
57
+ const UpdateSavedQueryInputSchema = contractSchema("Mcp.Tools.UpdateSavedQueryInput");
58
+ const SavedQueryOutputSchema = contractSchema("Mcp.Tools.SavedQueryOutput");
59
+ const ListSavedQueriesInputSchema = contractSchema("Mcp.Tools.ListSavedQueriesInput");
60
+ const ListSavedQueriesOutputSchema = contractSchema("Mcp.Tools.ListSavedQueriesOutput");
61
+ const RunSavedQueryInputSchema = contractSchema("Mcp.Tools.RunSavedQueryInput");
62
+ const RunSavedQueryOutputSchema = contractSchema("Mcp.Tools.RunSavedQueryOutput");
63
+ const DeleteInputSchema = contractSchema("Mcp.Tools.DeleteInput");
64
+ const DeleteOutputSchema = contractSchema("Mcp.Tools.DeleteOutput");
65
+ function savedQueryLine(query) {
66
+ const description = query.description ? ` — ${query.description.replace(/\s+/gu, " ").slice(0, 120)}` : "";
67
+ return `- ${query.name} (${query.filter.signal}) · id ${query.id} · etag ${query.etag}${description}`;
68
+ }
69
+ function summarizeRun(id, result) {
70
+ switch (result.signal) {
71
+ case "traces": {
72
+ const rows = result.items.map((trace) => `- ${shortId(trace.trace_id)} ${trace.root_span?.name ?? "unknown root"} · ${humanizeNs(trace.duration_ns)} · ` +
73
+ `${trace.span_count} spans · ${trace.has_error ? "ERROR" : "OK"} · ${trace.services.slice(0, 3).join(", ")}`);
74
+ return `Saved query ${id}: ${result.items.length} trace(s)` +
75
+ (rows.length === 0 ? "." : `\n${rows.join("\n")}`) + pageNote({ hasMore: result.has_more });
76
+ }
77
+ case "logs":
78
+ return `Saved query ${id}: ${result.items.length} log record(s); the records are in the structured result.` +
79
+ pageNote({ hasMore: result.has_more });
80
+ case "metrics":
81
+ return `Saved query ${id}: ${result.result.name} ${result.result.aggregation} over ` +
82
+ `${result.result.start_time}..${result.result.end_time}, ${result.result.series.length} series` +
83
+ (result.result.truncated ? " (truncated at the series limit)" : "") + ".";
84
+ }
85
+ }
86
+ /** Registers the seven tools; every handler runs inside runTool. */
87
+ export function registerWriteTools(server) {
88
+ server.registerTool("create_annotation", {
89
+ title: "Create Annotation",
90
+ description: "Attach a plain-text note of at most 2000 characters to a trace, a span or a session " +
91
+ "in the user's qyl project when the user wants to record a finding next to the telemetry. " +
92
+ "The note leaves the telemetry it points at unchanged; get_trace and list_sessions return " +
93
+ "it with its id and etag. Each call adds a new annotation.",
94
+ inputSchema: CreateAnnotationInputSchema,
95
+ outputSchema: compactOutputSchema(AnnotationOutputSchema),
96
+ annotations: CREATE_TOOL_ANNOTATIONS,
97
+ scopeChallenge: toolScopeChallenge("create_annotation", WRITE_SCOPES),
98
+ _meta: securityMeta(WRITE_SCOPES),
99
+ }, (args, ctx) => runTool(ctx, 1, async (scope) => {
100
+ assertToolScopes("create_annotation", WRITE_SCOPES, ctx.http?.authInfo);
101
+ const annotation = await createAnnotation(args, scope.collector);
102
+ await scope.step(`Created annotation ${annotation.id}`);
103
+ const output = { annotation };
104
+ return telemetryToolResult(`Created annotation ${annotation.id} on ${describeTarget(annotation.target)} (etag ${annotation.etag}).`, output);
105
+ }));
106
+ server.registerTool("update_annotation", {
107
+ title: "Update Annotation",
108
+ description: "Replace the text of one annotation when the user wants to correct or extend a note. " +
109
+ "Pass its id and current etag from get_trace, list_sessions or create_annotation; a stale " +
110
+ "etag is refused instead of overwriting a newer version. What the note is attached to stays fixed.",
111
+ inputSchema: UpdateAnnotationInputSchema,
112
+ outputSchema: compactOutputSchema(AnnotationOutputSchema),
113
+ annotations: UPDATE_TOOL_ANNOTATIONS,
114
+ scopeChallenge: toolScopeChallenge("update_annotation", WRITE_SCOPES),
115
+ _meta: securityMeta(WRITE_SCOPES),
116
+ }, (args, ctx) => runTool(ctx, 1, async (scope) => {
117
+ assertToolScopes("update_annotation", WRITE_SCOPES, ctx.http?.authInfo);
118
+ const annotation = await updateAnnotation(args, scope.collector);
119
+ await scope.step(`Updated annotation ${annotation.id}`);
120
+ const output = { annotation };
121
+ return telemetryToolResult(`Updated annotation ${annotation.id}; its etag is now ${annotation.etag}.\n${annotationLine(annotation)}`, output);
122
+ }));
123
+ server.registerTool("create_saved_query", {
124
+ title: "Create Saved Query",
125
+ description: "Save a named filter for traces, logs or metrics in the user's qyl project when the user " +
126
+ "wants to ask the same question again later. Names are unique per project. Only the filter " +
127
+ "is stored, never results; run_saved_query evaluates it against the telemetry of that moment.",
128
+ inputSchema: CreateSavedQueryInputSchema,
129
+ outputSchema: compactOutputSchema(SavedQueryOutputSchema),
130
+ annotations: CREATE_TOOL_ANNOTATIONS,
131
+ scopeChallenge: toolScopeChallenge("create_saved_query", WRITE_SCOPES),
132
+ _meta: securityMeta(WRITE_SCOPES),
133
+ }, (args, ctx) => runTool(ctx, 1, async (scope) => {
134
+ assertToolScopes("create_saved_query", WRITE_SCOPES, ctx.http?.authInfo);
135
+ const savedQuery = await createSavedQuery(args, scope.collector);
136
+ await scope.step(`Created saved query ${savedQuery.id}`);
137
+ const output = { saved_query: savedQuery };
138
+ return telemetryToolResult(`Created saved query ${savedQuery.name} (${savedQuery.filter.signal}), id ${savedQuery.id}, ` +
139
+ `etag ${savedQuery.etag}.`, output);
140
+ }));
141
+ server.registerTool("update_saved_query", {
142
+ title: "Update Saved Query",
143
+ description: "Rename a saved query or change its description or filter when the user wants to adjust a " +
144
+ "stored question. Pass its id and current etag from list_saved_queries or create_saved_query; " +
145
+ "omitted fields keep their value, and a stale etag is refused instead of overwriting a newer version.",
146
+ inputSchema: UpdateSavedQueryInputSchema,
147
+ outputSchema: compactOutputSchema(SavedQueryOutputSchema),
148
+ annotations: UPDATE_TOOL_ANNOTATIONS,
149
+ scopeChallenge: toolScopeChallenge("update_saved_query", WRITE_SCOPES),
150
+ _meta: securityMeta(WRITE_SCOPES),
151
+ }, (args, ctx) => runTool(ctx, 1, async (scope) => {
152
+ assertToolScopes("update_saved_query", WRITE_SCOPES, ctx.http?.authInfo);
153
+ const savedQuery = await updateSavedQuery(args, scope.collector);
154
+ await scope.step(`Updated saved query ${savedQuery.id}`);
155
+ const output = { saved_query: savedQuery };
156
+ return telemetryToolResult(`Updated saved query ${savedQuery.id}; its etag is now ${savedQuery.etag}.\n${savedQueryLine(savedQuery)}`, output);
157
+ }));
158
+ server.registerTool("list_saved_queries", {
159
+ title: "List Saved Queries",
160
+ description: "List the saved queries in the user's qyl project by name when the user wants to find a " +
161
+ "stored question to run, change or delete, optionally only those for traces, logs or metrics. " +
162
+ "Each entry carries its id, etag and filter; pass next_cursor as cursor for the next page.",
163
+ inputSchema: ListSavedQueriesInputSchema,
164
+ outputSchema: compactOutputSchema(ListSavedQueriesOutputSchema),
165
+ annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
166
+ _meta: TELEMETRY_TOOL_AUTH_META,
167
+ }, (args, ctx) => runTool(ctx, 1, async (scope) => {
168
+ const page = await listSavedQueries(args, scope.collector);
169
+ await scope.step(`Fetched ${page.savedQueries.length} saved query(s)`);
170
+ const output = {
171
+ saved_queries: page.savedQueries,
172
+ has_more: page.hasMore,
173
+ ...(page.nextCursor === undefined ? {} : { next_cursor: page.nextCursor }),
174
+ };
175
+ const text = page.savedQueries.length === 0
176
+ ? `No saved queries${args.signal === undefined ? "" : ` for ${args.signal}`} in this project.`
177
+ : `Saved queries (${page.savedQueries.length}):\n${page.savedQueries.map(savedQueryLine).join("\n")}`;
178
+ return telemetryToolResult(text + pageNote(page), output);
179
+ }));
180
+ server.registerTool("run_saved_query", {
181
+ title: "Run Saved Query",
182
+ description: "Run one saved query against the current telemetry when the user wants the stored question's " +
183
+ "answer now: trace summaries, log records or a metric range result, depending on its signal. " +
184
+ "It only reads. start_time and end_time replace the saved look-back window, and next_cursor " +
185
+ "pages trace and log results.",
186
+ inputSchema: RunSavedQueryInputSchema,
187
+ outputSchema: compactOutputSchema(RunSavedQueryOutputSchema),
188
+ annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
189
+ _meta: TELEMETRY_TOOL_AUTH_META,
190
+ }, (args, ctx) => runTool(ctx, 1, async (scope) => {
191
+ const result = await runSavedQuery(args, scope.collector);
192
+ await scope.step(`Ran saved query ${args.id}`);
193
+ const output = { result, mode: "live" };
194
+ return telemetryToolResult(summarizeRun(args.id, result), output);
195
+ }));
196
+ server.registerTool("delete", {
197
+ title: "Delete Annotation or Saved Query",
198
+ description: "Delete one annotation or saved query by id when the user asks to remove it. Pass its current " +
199
+ "etag; a stale etag is refused instead of deleting a newer version. It deletes only objects users " +
200
+ "created in qyl, never traces, logs or metrics: retention removes telemetry.",
201
+ inputSchema: DeleteInputSchema,
202
+ outputSchema: compactOutputSchema(DeleteOutputSchema),
203
+ annotations: DELETE_TOOL_ANNOTATIONS,
204
+ scopeChallenge: toolScopeChallenge("delete", DELETE_SCOPES),
205
+ _meta: securityMeta(DELETE_SCOPES),
206
+ }, (args, ctx) => runTool(ctx, 1, async (scope) => {
207
+ assertToolScopes("delete", DELETE_SCOPES, ctx.http?.authInfo);
208
+ await deleteResource(args.kind, args.id, args.etag, scope.collector);
209
+ await scope.step(`Deleted ${args.kind} ${args.id}`);
210
+ const output = { deleted: true };
211
+ return telemetryToolResult(`Deleted ${args.kind === "annotation" ? "annotation" : "saved query"} ${args.id}.`, output);
212
+ }));
213
+ }
214
+ //# sourceMappingURL=write-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-tools.js","sourceRoot":"","sources":["../src/write-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAwBH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE5F,oDAAoD;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,KAAK;CACc,CAAC;AAErC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,KAAK;CACc,CAAC;AAErC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,KAAK;CACc,CAAC;AAErC,MAAM,YAAY,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAU,CAAC;AACnE,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,oBAAoB,CAAU,CAAC;AAErE,mFAAmF;AACnF,SAAS,YAAY,CAAC,MAAyB;IAC7C,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,2BAA2B,GAAG,cAAc,CAAC,iCAAiC,CAAC,CAAC;AACtF,MAAM,2BAA2B,GAAG,cAAc,CAAC,iCAAiC,CAAC,CAAC;AACtF,MAAM,sBAAsB,GAAG,cAAc,CAAC,4BAA4B,CAAC,CAAC;AAC5E,MAAM,2BAA2B,GAAG,cAAc,CAAC,iCAAiC,CAAC,CAAC;AACtF,MAAM,2BAA2B,GAAG,cAAc,CAAC,iCAAiC,CAAC,CAAC;AACtF,MAAM,sBAAsB,GAAG,cAAc,CAAC,4BAA4B,CAAC,CAAC;AAC5E,MAAM,2BAA2B,GAAG,cAAc,CAAC,iCAAiC,CAAC,CAAC;AACtF,MAAM,4BAA4B,GAAG,cAAc,CAAC,kCAAkC,CAAC,CAAC;AACxF,MAAM,wBAAwB,GAAG,cAAc,CAAC,8BAA8B,CAAC,CAAC;AAChF,MAAM,yBAAyB,GAAG,cAAc,CAAC,+BAA+B,CAAC,CAAC;AAClF,MAAM,iBAAiB,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;AAClE,MAAM,kBAAkB,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAEpE,SAAS,cAAc,CAAC,KAAiB;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3G,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,UAAU,KAAK,CAAC,EAAE,WAAW,KAAK,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;AACxG,CAAC;AAED,SAAS,YAAY,CAAC,EAAU,EAAE,MAA2B;IAC3D,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACtC,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK;gBAC7G,GAAG,KAAK,CAAC,UAAU,YAAY,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClH,OAAO,eAAe,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW;gBACzD,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,KAAK,MAAM;YACT,OAAO,eAAe,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,2DAA2D;gBACzG,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,KAAK,SAAS;YACZ,OAAO,eAAe,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,QAAQ;gBAClF,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,SAAS;gBAC/F,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAChF,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,sFAAsF;YACtF,2FAA2F;YAC3F,2FAA2F;YAC3F,2DAA2D;QAC7D,WAAW,EAAE,2BAA2B;QACxC,YAAY,EAAE,mBAAmB,CAAC,sBAAsB,CAAC;QACzD,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,kBAAkB,CAAC,mBAAmB,EAAE,YAAY,CAAC;QACrE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC;KAClC,EACD,CAAC,IAA2B,EAAE,GAAkB,EAA2B,EAAE,CAC3E,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,gBAAgB,CAAC,mBAAmB,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAqB,EAAE,UAAU,EAAE,CAAC;QAChD,OAAO,mBAAmB,CACxB,sBAAsB,UAAU,CAAC,EAAE,OAAO,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,UAAU,CAAC,IAAI,IAAI,EACxG,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,sFAAsF;YACtF,2FAA2F;YAC3F,mGAAmG;QACrG,WAAW,EAAE,2BAA2B;QACxC,YAAY,EAAE,mBAAmB,CAAC,sBAAsB,CAAC;QACzD,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,kBAAkB,CAAC,mBAAmB,EAAE,YAAY,CAAC;QACrE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC;KAClC,EACD,CAAC,IAA2B,EAAE,GAAkB,EAA2B,EAAE,CAC3E,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,gBAAgB,CAAC,mBAAmB,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAqB,EAAE,UAAU,EAAE,CAAC;QAChD,OAAO,mBAAmB,CACxB,sBAAsB,UAAU,CAAC,EAAE,qBAAqB,UAAU,CAAC,IAAI,MAAM,cAAc,CAAC,UAAU,CAAC,EAAE,EACzG,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,0FAA0F;YAC1F,4FAA4F;YAC5F,8FAA8F;QAChG,WAAW,EAAE,2BAA2B;QACxC,YAAY,EAAE,mBAAmB,CAAC,sBAAsB,CAAC;QACzD,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,kBAAkB,CAAC,oBAAoB,EAAE,YAAY,CAAC;QACtE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC;KAClC,EACD,CAAC,IAA2B,EAAE,GAAkB,EAA2B,EAAE,CAC3E,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,gBAAgB,CAAC,oBAAoB,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,KAAK,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAqB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;QAC7D,OAAO,mBAAmB,CACxB,uBAAuB,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC,MAAM,SAAS,UAAU,CAAC,EAAE,IAAI;YAC3F,QAAQ,UAAU,CAAC,IAAI,GAAG,EAC5B,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,2FAA2F;YAC3F,+FAA+F;YAC/F,sGAAsG;QACxG,WAAW,EAAE,2BAA2B;QACxC,YAAY,EAAE,mBAAmB,CAAC,sBAAsB,CAAC;QACzD,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,kBAAkB,CAAC,oBAAoB,EAAE,YAAY,CAAC;QACtE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC;KAClC,EACD,CAAC,IAA2B,EAAE,GAAkB,EAA2B,EAAE,CAC3E,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,gBAAgB,CAAC,oBAAoB,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,KAAK,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAqB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;QAC7D,OAAO,mBAAmB,CACxB,uBAAuB,UAAU,CAAC,EAAE,qBAAqB,UAAU,CAAC,IAAI,MAAM,cAAc,CAAC,UAAU,CAAC,EAAE,EAC1G,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,yFAAyF;YACzF,+FAA+F;YAC/F,2FAA2F;QAC7F,WAAW,EAAE,2BAA2B;QACxC,YAAY,EAAE,mBAAmB,CAAC,4BAA4B,CAAC;QAC/D,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,wBAAwB;KAChC,EACD,CAAC,IAA2B,EAAE,GAAkB,EAA2B,EAAE,CAC3E,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,MAAM,iBAAiB,CAAC,CAAC;QACvE,MAAM,MAAM,GAA2B;YACrC,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;SAC3E,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YACzC,CAAC,CAAC,mBAAmB,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,mBAAmB;YAC9F,CAAC,CAAC,kBAAkB,IAAI,CAAC,YAAY,CAAC,MAAM,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxG,OAAO,mBAAmB,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,8FAA8F;YAC9F,8FAA8F;YAC9F,6FAA6F;YAC7F,8BAA8B;QAChC,WAAW,EAAE,wBAAwB;QACrC,YAAY,EAAE,mBAAmB,CAAC,yBAAyB,CAAC;QAC5D,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,wBAAwB;KAChC,EACD,CAAC,IAAwB,EAAE,GAAkB,EAA2B,EAAE,CACxE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAwB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7D,OAAO,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,+FAA+F;YAC/F,mGAAmG;YACnG,6EAA6E;QAC/E,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,mBAAmB,CAAC,kBAAkB,CAAC;QACrD,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,kBAAkB,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC3D,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC;KACnC,EACD,CAAC,IAAiB,EAAE,GAAkB,EAA2B,EAAE,CACjE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/C,OAAO,mBAAmB,CACxB,WAAW,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,GAAG,EAClF,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qyl-mcp-server",
3
- "version": "7.4.0",
3
+ "version": "7.6.0",
4
4
  "type": "module",
5
5
  "description": "qyl telemetry MCP Apps server: trace explorer and MCP dashboard for a live collector or explicit demo mode",
6
6
  "repository": {
@@ -78,7 +78,7 @@
78
78
  "smoke:projects": "node project-access-smoke.mjs"
79
79
  },
80
80
  "dependencies": {
81
- "@ancplua/qyl-api-schema": "11.6.0",
81
+ "@ancplua/qyl-api-schema": "12.0.0",
82
82
  "@modelcontextprotocol/core": "2.3.1",
83
83
  "@modelcontextprotocol/server": "2.3.1",
84
84
  "@opentelemetry/api": "1.9.1",