qyl-mcp-server 7.1.1 → 7.2.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 +71 -11
- package/dist/ci.d.ts +5 -5
- package/dist/ci.js +23 -18
- package/dist/ci.js.map +1 -1
- package/dist/collector-access.d.ts +17 -0
- package/dist/collector-access.js +61 -0
- package/dist/collector-access.js.map +1 -0
- package/dist/collector.d.ts +4 -1
- package/dist/collector.js +6 -2
- package/dist/collector.js.map +1 -1
- package/dist/config.d.ts +4 -3
- package/dist/config.js +5 -5
- package/dist/config.js.map +1 -1
- package/dist/contract-operations.d.ts +1 -1
- package/dist/contract-operations.js +1 -1
- package/dist/contract-operations.js.map +1 -1
- package/dist/contract-validation.d.ts +1 -1
- package/dist/contract-validation.js +45 -1
- package/dist/contract-validation.js.map +1 -1
- package/dist/events-authorization.js +1 -1
- package/dist/events-authorization.js.map +1 -1
- package/dist/events.d.ts +5 -4
- package/dist/events.js +88 -37
- package/dist/events.js.map +1 -1
- package/dist/main.d.ts +3 -6
- package/dist/main.js +18 -8
- package/dist/main.js.map +1 -1
- package/dist/mcp-app.html +1 -1
- package/dist/mcp-dashboard.html +1 -1
- package/dist/mcp-home.html +3 -3
- package/dist/metrics-tools.js +12 -12
- package/dist/metrics-tools.js.map +1 -1
- package/dist/native-execution.d.ts +8 -52
- package/dist/native-execution.js +51 -222
- package/dist/native-execution.js.map +1 -1
- package/dist/request-scope.d.ts +4 -12
- package/dist/request-scope.js +9 -22
- package/dist/request-scope.js.map +1 -1
- package/dist/server.d.ts +4 -3
- package/dist/server.js +36 -25
- package/dist/server.js.map +1 -1
- package/dist/summaries.d.ts +1 -1
- package/dist/summaries.js +2 -2
- package/dist/summaries.js.map +1 -1
- package/dist/telemetry-redaction.js +13 -0
- package/dist/telemetry-redaction.js.map +1 -1
- package/dist/tools.js +65 -18
- package/dist/tools.js.map +1 -1
- package/dist/trace-query.d.ts +5 -0
- package/dist/trace-query.js +8 -0
- package/dist/trace-query.js.map +1 -0
- package/dist/ui-domain.d.ts +4 -0
- package/dist/ui-domain.js +28 -0
- package/dist/ui-domain.js.map +1 -0
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -63,6 +63,14 @@ an enabled module proves a client has been provisioned.
|
|
|
63
63
|
**Telemetry** — `list_traces`, `get_trace`, `list_sessions`, `search_logs`,
|
|
64
64
|
`ci_log`, `display_traces`, `display_mcp_dashboard`.
|
|
65
65
|
|
|
66
|
+
`get_trace` returns every span by default. `errors_only` selects error spans;
|
|
67
|
+
`max_spans` (1–1000) caps the result after filtering in Collector order.
|
|
68
|
+
`include_attributes=false` omits span, resource, event, link and instrumentation
|
|
69
|
+
scope attribute collections, including any returned root-span copy. Trace
|
|
70
|
+
totals remain the Collector's totals; the text reports matching and returned
|
|
71
|
+
counts. `ci_log.service_prefix` is case-sensitive, defaults to `qyl-ci`, and
|
|
72
|
+
filters both recent runs and individual phase spans.
|
|
73
|
+
|
|
66
74
|
**Metrics** — `list_metrics`, `get_metric_series`, `query_metric`. Read in that
|
|
67
75
|
order: the catalog gives you an exact instrument name and how many attribute
|
|
68
76
|
streams it has, series discovery tells you which attribute keys are worth
|
|
@@ -86,18 +94,20 @@ in-flight collector fetch instead of waiting out its timeout. Progress: a
|
|
|
86
94
|
request that carries a `progressToken` gets `notifications/progress` per
|
|
87
95
|
completed step, one per collector round trip plus a final "Result ready"
|
|
88
96
|
(`ci_log` with a `run_id` reports the flatten into legs as a step of its own).
|
|
89
|
-
Logging: the server declares
|
|
90
|
-
`notifications/message
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
the deprecation window beside stderr and OpenTelemetry.
|
|
97
|
+
Logging: the server declares no `logging` capability and sends no
|
|
98
|
+
`notifications/message`, including when a client supplies a log level.
|
|
99
|
+
Operational error diagnostics go to stderr; native tool timing/status telemetry
|
|
100
|
+
uses OpenTelemetry. Requested progress and cancellation remain available.
|
|
101
|
+
[Source and test commands/output, 2026-10-08](https://github.com/ANcpLua/qyl.mcp/blob/main/docs/evidence/2026-10-08-followup-01.md).
|
|
102
|
+
|
|
96
103
|
|
|
97
104
|
Every inbound `tools/call` on a local server — `--stdio`, or HTTP without
|
|
98
|
-
`MCP_PUBLIC_URL` —
|
|
99
|
-
|
|
100
|
-
`~/.qyl/mcp-native-executions.json`.
|
|
105
|
+
`MCP_PUBLIC_URL` — records only its tool name, timing, status and error type,
|
|
106
|
+
plus a server-generated execution ID, atomically in
|
|
107
|
+
`~/.qyl/mcp-native-executions.json`. Arguments, request metadata, result bodies
|
|
108
|
+
and error messages are not retained. Known version-1/2 files are reduced to
|
|
109
|
+
this format on load; unreadable files still use the existing archive recovery
|
|
110
|
+
path, and pre-existing archives are not purged. A public deployment (`MCP_PUBLIC_URL` set)
|
|
101
111
|
records nothing to disk; that evidence file is a local developer artifact, not a
|
|
102
112
|
multi-tenant audit log.
|
|
103
113
|
|
|
@@ -108,10 +118,11 @@ multi-tenant audit log.
|
|
|
108
118
|
| `QYL_COLLECTOR_URL` | Collector read API base; default `http://127.0.0.1:5100`. Also the OTLP base when set. |
|
|
109
119
|
| `QYL_API_KEY` | Collector read and OTLP credential. Outgoing only. |
|
|
110
120
|
| `QYL_PROJECT` | Server-owned collector project scope; defaults to `default`. Never accepted as tool input. |
|
|
121
|
+
| `MCP_COLLECTOR_PROJECTS` | Optional secret JSON mapping validated Auth0 subjects to project-bound Collector keys; see account isolation below. |
|
|
111
122
|
| `QYL_OTLP_ENDPOINT` | Optional OTLP base for self-telemetry. |
|
|
112
123
|
| `QYL_DEMO=1` | Explicit, visibly labelled demo telemetry. A collector failure never silently substitutes demo data. |
|
|
113
124
|
| `QYL_MCP_TELEMETRY=0` | Disable MCP spans, metrics, and operation logs. |
|
|
114
|
-
| `QYL_MCP_CAPTURE_CONTENT=1` |
|
|
125
|
+
| `QYL_MCP_CAPTURE_CONTENT=1` | Workbench content capture; native incoming tool-call telemetry never supplies request or response bodies. |
|
|
115
126
|
| `QYL_MCP_NATIVE_STATE_PATH` | Override the native execution-evidence path. |
|
|
116
127
|
| `MCP_EVENTS_STORE` | Persistent Events subscription file; requires Auth0 and the access-check credentials below. |
|
|
117
128
|
| `MCP_EVENTS_AUTH0_CLIENT_ID` / `MCP_EVENTS_AUTH0_CLIENT_SECRET` | Dedicated Management API application with `read:users`, `read:clients`, `read:client_grants`, `read:grants`; resolves CIMD identities and keeps access checks current without storing subscriber tokens. |
|
|
@@ -125,8 +136,57 @@ durable evidence.
|
|
|
125
136
|
The HTTP entry is a web-standard fetch handler served by its default export,
|
|
126
137
|
so serving it requires Bun.
|
|
127
138
|
|
|
139
|
+
### Account isolation for hosted Auth0
|
|
140
|
+
|
|
141
|
+
To give a reviewer access to sample data, provision a separate Collector
|
|
142
|
+
project/key through the Collector's `QYL_OTLP_PROJECT_KEYS` configuration and
|
|
143
|
+
assign that key to the reviewer's validated Auth0 subject. Configure the MCP
|
|
144
|
+
service's secret `MCP_COLLECTOR_PROJECTS` with this shape (placeholder values):
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
[
|
|
148
|
+
{ "project": "default", "apiKey": "OWNER_COLLECTOR_KEY", "subjects": ["auth0|owner-example"] },
|
|
149
|
+
{ "project": "review", "apiKey": "REVIEW_COLLECTOR_KEY", "subjects": ["auth0|reviewer-example"] }
|
|
150
|
+
]
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Include every account that should retain access, including the owner. An
|
|
154
|
+
enabled map rejects unmapped callers and never falls back to `QYL_API_KEY`.
|
|
155
|
+
Missing, malformed, duplicate or conflicting entries fail validation. The
|
|
156
|
+
feature requires the hosted Auth0 configuration; local stdio and Cloudflare
|
|
157
|
+
Access deployments cannot enable this map. When the variable is absent, the
|
|
158
|
+
existing deployment-wide credential behavior is retained.
|
|
159
|
+
|
|
160
|
+
Only the verified SDK `AuthInfo.extra.subject` selects the project. Tool inputs
|
|
161
|
+
and request metadata cannot override it. All telemetry tools, viewer refreshes
|
|
162
|
+
and Events queries use that account's project credential. Removing the account
|
|
163
|
+
assignment revokes its Events subscription on the next access check. Project
|
|
164
|
+
keys are redacted from text and structured results, including keys nested in
|
|
165
|
+
this JSON configuration. Keep the map in host secrets and out of the plugin ZIP.
|
|
166
|
+
|
|
167
|
+
`bun run smoke:projects` from the repository root checks all eleven tools,
|
|
168
|
+
viewer query paths, both protocol eras and Events against a real local
|
|
169
|
+
Collector with two temporary projects. Set `QYL_COLLECTOR_PROJECT` to its
|
|
170
|
+
`.csproj` when using a different checkout. The script uses local test identities
|
|
171
|
+
and an in-process signed webhook receiver; the hosted reviewer OAuth login and
|
|
172
|
+
real ChatGPT demonstration are separate checks before upload.
|
|
173
|
+
|
|
128
174
|
## Release notes
|
|
129
175
|
|
|
176
|
+
### 7.2.0
|
|
177
|
+
|
|
178
|
+
- Removed deprecated MCP logging capability and per-call log notifications;
|
|
179
|
+
retained requested progress, cancellation and native operation telemetry.
|
|
180
|
+
[Dated verification, 2026-10-08](https://github.com/ANcpLua/qyl.mcp/blob/main/docs/evidence/2026-10-08-followup-01.md).
|
|
181
|
+
|
|
182
|
+
- Optional Auth0-account-to-Collector project isolation, also applied to Events.
|
|
183
|
+
- Events share polling for accounts assigned to the same project; independent
|
|
184
|
+
projects are polled concurrently. Invalid stdio project configuration fails
|
|
185
|
+
before accepting a connection.
|
|
186
|
+
- Workbench telemetry recognizes the SDK's per-request server factory so native
|
|
187
|
+
tool spans are not duplicated by the surrounding protocol journal, while
|
|
188
|
+
failed server construction still produces a correlated failure span.
|
|
189
|
+
|
|
130
190
|
### 7.1.1
|
|
131
191
|
|
|
132
192
|
- SDK v2.3.1 serving defaults accept modern and 2025-era tool clients over HTTP
|
package/dist/ci.d.ts
CHANGED
|
@@ -15,11 +15,11 @@ import type { McpServer } from "@modelcontextprotocol/server";
|
|
|
15
15
|
import type { Mode, QylSession, QylTrace } from "./wire.js";
|
|
16
16
|
/** Resource service-name prefix that marks telemetry as CI-emitted. */
|
|
17
17
|
export declare const CI_SERVICE_PREFIX = "qyl-ci";
|
|
18
|
-
/** CI sessions
|
|
19
|
-
export declare function filterCiSessions(sessions: QylSession[]): QylSession[];
|
|
18
|
+
/** CI sessions carry at least one service matching the requested prefix. */
|
|
19
|
+
export declare function filterCiSessions(sessions: QylSession[], servicePrefix?: string): QylSession[];
|
|
20
20
|
/** Flatten a run's traces into per-leg phases, failures first. */
|
|
21
|
-
export declare function collectCiPhases(traces: QylTrace[]): CiPhase[];
|
|
22
|
-
export declare function summarizeCiRuns(runs: CiRunSummary[], mode: Mode): string;
|
|
23
|
-
export declare function summarizeCiRun(runId: string, phases: CiPhase[], mode: Mode): string;
|
|
21
|
+
export declare function collectCiPhases(traces: QylTrace[], servicePrefix?: string): CiPhase[];
|
|
22
|
+
export declare function summarizeCiRuns(runs: CiRunSummary[], mode: Mode, servicePrefix?: string): string;
|
|
23
|
+
export declare function summarizeCiRun(runId: string, phases: CiPhase[], mode: Mode, servicePrefix?: string): string;
|
|
24
24
|
/** Register the CI dogfooding block. */
|
|
25
25
|
export declare function registerCiTools(server: McpServer): void;
|
package/dist/ci.js
CHANGED
|
@@ -5,9 +5,9 @@ import { telemetryToolResult } from "./telemetry-redaction.js";
|
|
|
5
5
|
import { READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS, TELEMETRY_TOOL_AUTH_META } from "./tools.js";
|
|
6
6
|
/** Resource service-name prefix that marks telemetry as CI-emitted. */
|
|
7
7
|
export const CI_SERVICE_PREFIX = "qyl-ci";
|
|
8
|
-
/** CI sessions
|
|
9
|
-
export function filterCiSessions(sessions) {
|
|
10
|
-
return sessions.filter((session) => session.services.some((service) => service.startsWith(
|
|
8
|
+
/** CI sessions carry at least one service matching the requested prefix. */
|
|
9
|
+
export function filterCiSessions(sessions, servicePrefix = CI_SERVICE_PREFIX) {
|
|
10
|
+
return sessions.filter((session) => session.services.some((service) => service.startsWith(servicePrefix)));
|
|
11
11
|
}
|
|
12
12
|
function spanLeg(span) {
|
|
13
13
|
const attribute = span.attributes?.find((entry) => entry.key === "ci.leg");
|
|
@@ -16,8 +16,8 @@ function spanLeg(span) {
|
|
|
16
16
|
: span.resource.service_name;
|
|
17
17
|
}
|
|
18
18
|
/** Flatten a run's traces into per-leg phases, failures first. */
|
|
19
|
-
export function collectCiPhases(traces) {
|
|
20
|
-
const phases = traces.flatMap((trace) => trace.spans.map((span) => ({
|
|
19
|
+
export function collectCiPhases(traces, servicePrefix = CI_SERVICE_PREFIX) {
|
|
20
|
+
const phases = traces.flatMap((trace) => trace.spans.filter((span) => span.resource.service_name.startsWith(servicePrefix)).map((span) => ({
|
|
21
21
|
leg: spanLeg(span),
|
|
22
22
|
phase: span.name,
|
|
23
23
|
status: span.status.code === 2 ? "error" : span.status.code === 1 ? "ok" : "unset",
|
|
@@ -32,10 +32,10 @@ export function collectCiPhases(traces) {
|
|
|
32
32
|
? 1
|
|
33
33
|
: 0);
|
|
34
34
|
}
|
|
35
|
-
export function summarizeCiRuns(runs, mode) {
|
|
35
|
+
export function summarizeCiRuns(runs, mode, servicePrefix = CI_SERVICE_PREFIX) {
|
|
36
36
|
if (runs.length === 0) {
|
|
37
37
|
return `No CI runs found (${mode} mode). CI telemetry appears once runs emit ` +
|
|
38
|
-
`spans with a '${
|
|
38
|
+
`spans with a '${servicePrefix}*' service.name.`;
|
|
39
39
|
}
|
|
40
40
|
const lines = runs.map((run) => {
|
|
41
41
|
const failure = run.error_count > 0 ? `${run.error_count} error(s)` : "clean";
|
|
@@ -44,9 +44,9 @@ export function summarizeCiRuns(runs, mode) {
|
|
|
44
44
|
});
|
|
45
45
|
return `${runs.length} CI run(s) (${mode} mode), pass a run_id for the per-leg breakdown:\n${lines.join("\n")}`;
|
|
46
46
|
}
|
|
47
|
-
export function summarizeCiRun(runId, phases, mode) {
|
|
47
|
+
export function summarizeCiRun(runId, phases, mode, servicePrefix = CI_SERVICE_PREFIX) {
|
|
48
48
|
if (phases.length === 0) {
|
|
49
|
-
return `CI run ${runId} has no phase spans (${mode} mode).`;
|
|
49
|
+
return `CI run ${runId} has no phase spans matching '${servicePrefix}*' (${mode} mode).`;
|
|
50
50
|
}
|
|
51
51
|
const legs = new Map();
|
|
52
52
|
for (const phase of phases) {
|
|
@@ -71,10 +71,14 @@ export function summarizeCiRun(runId, phases, mode) {
|
|
|
71
71
|
export function registerCiTools(server) {
|
|
72
72
|
server.registerTool("ci_log", {
|
|
73
73
|
title: "CI Log",
|
|
74
|
-
description: "Read
|
|
75
|
-
"
|
|
76
|
-
`'${CI_SERVICE_PREFIX}')
|
|
77
|
-
"
|
|
74
|
+
description: "Read CI telemetry from qyl when the user wants recent runs or a per-leg " +
|
|
75
|
+
"phase breakdown with failures first. Any CI can emit this convention: " +
|
|
76
|
+
`resource service.name starts with service_prefix (default '${CI_SERVICE_PREFIX}'), session.id identifies ` +
|
|
77
|
+
"the run, and one span per phase carries a ci.leg attribute; failed phases " +
|
|
78
|
+
"set span status to error. Without run_id, filters the 50 most recent " +
|
|
79
|
+
"sessions and returns up to limit matching runs (default 10). With run_id, " +
|
|
80
|
+
"reads up to 100 traces for that session and returns only phases matching " +
|
|
81
|
+
"the same case-sensitive service prefix; phase output can be large.",
|
|
78
82
|
inputSchema: CiLogInputSchema,
|
|
79
83
|
outputSchema: compactOutputSchema(CiLogOutputSchema),
|
|
80
84
|
annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
|
|
@@ -83,18 +87,19 @@ export function registerCiTools(server) {
|
|
|
83
87
|
// A run breakdown is two units a client can watch: the collector round
|
|
84
88
|
// trip for the run's traces, then the flatten into per-leg phases. The
|
|
85
89
|
// run list is one round trip.
|
|
86
|
-
runTool(ctx,
|
|
90
|
+
runTool(ctx, args.run_id ? 2 : 1, async (scope) => {
|
|
91
|
+
const servicePrefix = args.service_prefix ?? CI_SERVICE_PREFIX;
|
|
87
92
|
if (args.run_id) {
|
|
88
93
|
const { traces, mode } = await fetchSessionTraces(args.run_id, 100, scope.collector);
|
|
89
94
|
await scope.step(`Fetched ${traces.length} trace(s) of CI run ${args.run_id}`);
|
|
90
|
-
const phases = collectCiPhases(traces);
|
|
95
|
+
const phases = collectCiPhases(traces, servicePrefix);
|
|
91
96
|
const legs = new Set(phases.map((phase) => phase.leg)).size;
|
|
92
97
|
await scope.step(`Collected ${phases.length} phase(s) across ${legs} leg(s)`);
|
|
93
98
|
const output = { run_id: args.run_id, phases, mode };
|
|
94
|
-
return telemetryToolResult(summarizeCiRun(args.run_id, phases, mode), output);
|
|
99
|
+
return telemetryToolResult(summarizeCiRun(args.run_id, phases, mode, servicePrefix), output);
|
|
95
100
|
}
|
|
96
101
|
const { sessions, mode } = await fetchSessions(50, undefined, scope.collector);
|
|
97
|
-
const runs = filterCiSessions(sessions)
|
|
102
|
+
const runs = filterCiSessions(sessions, servicePrefix)
|
|
98
103
|
.slice(0, args.limit ?? 10)
|
|
99
104
|
.map((session) => ({
|
|
100
105
|
run_id: session["session_id"],
|
|
@@ -106,7 +111,7 @@ export function registerCiTools(server) {
|
|
|
106
111
|
}));
|
|
107
112
|
await scope.step(`Found ${runs.length} CI run(s) among ${sessions.length} session(s)`);
|
|
108
113
|
const output = { runs, mode };
|
|
109
|
-
return telemetryToolResult(summarizeCiRuns(runs, mode), output);
|
|
114
|
+
return telemetryToolResult(summarizeCiRuns(runs, mode, servicePrefix), output);
|
|
110
115
|
}));
|
|
111
116
|
}
|
|
112
117
|
//# sourceMappingURL=ci.js.map
|
package/dist/ci.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG5F,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,
|
|
1
|
+
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG5F,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAC9B,QAAsB,EACtB,aAAa,GAAG,iBAAiB;IAEjC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAa;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC3E,OAAO,OAAO,SAAS,EAAE,KAAK,KAAK,QAAQ;QACzC,CAAC,CAAC,SAAS,CAAC,KAAK;QACjB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACjC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,MAAkB,EAAE,aAAa,GAAG,iBAAiB;IACnF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACtC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAW,EAAE,CAAC,CAAC;QACzG,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;QAClB,KAAK,EAAE,IAAI,CAAC,IAAI;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QAClF,WAAW,EAAE,IAAI,CAAC,GAAG,CACnB,CAAC,EACD,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,GAAG,SAAS,CACxF,CACF;QACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC,CAAC,CACJ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1B,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QACnB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9D,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO;YACpB,CAAC,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO;gBACpB,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,CAAC,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAoB,EAAE,IAAU,EAAE,aAAa,GAAG,iBAAiB;IACjG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,qBAAqB,IAAI,8CAA8C;YAC5E,iBAAiB,aAAa,kBAAkB,CAAC;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9E,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC;QAChG,OAAO,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,UAAU,IAAI,QAAQ,MAAM,OAAO,EAAE,CAAC;IACrF,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,IAAI,CAAC,MAAM,eAAe,IAAI,qDAAqD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClH,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,MAAiB,EACjB,IAAU,EACV,aAAa,GAAG,iBAAiB;IAEjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,UAAU,KAAK,iCAAiC,aAAa,OAAO,IAAI,SAAS,CAAC;IAC3F,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,MAAM,MAAM,EAAE,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IACD,OAAO,UAAU,KAAK,KAAK,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,0EAA0E;YAC1E,wEAAwE;YACxE,8DAA8D,iBAAiB,4BAA4B;YAC3G,4EAA4E;YAC5E,uEAAuE;YACvE,4EAA4E;YAC5E,2EAA2E;YAC3E,oEAAoE;QACtE,WAAW,EAAE,gBAAgB;QAC7B,YAAY,EAAE,mBAAmB,CAAC,iBAAiB,CAAC;QACpD,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,wBAAwB;KAChC,EACD,CAAC,IAAgB,EAAE,GAAkB,EAA2B,EAAE;IAChE,uEAAuE;IACvE,uEAAuE;IACvE,8BAA8B;IAC9B,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,iBAAiB,CAAC;QAC/D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACrF,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,uBAAuB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,oBAAoB,IAAI,SAAS,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClE,OAAO,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;aACnD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;aAC1B,GAAG,CAAC,CAAC,OAAO,EAAgB,EAAE,CAAC,CAAC;YAC/B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;YAClF,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC,CAAC;QACN,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,oBAAoB,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC;QACvF,MAAM,MAAM,GAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC3C,OAAO,mBAAmB,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC,CAAC,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** A project-bound Collector credential, supplied only by host configuration. */
|
|
2
|
+
export interface CollectorAccess {
|
|
3
|
+
readonly project: string;
|
|
4
|
+
readonly apiKey: string;
|
|
5
|
+
}
|
|
6
|
+
/** Safe to return to a caller; never includes subjects, projects or credentials. */
|
|
7
|
+
export declare class CollectorAccessError extends Error {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Opt-in subject-to-project access. Absence retains the single-project setup;
|
|
12
|
+
* present-but-invalid configuration and unassigned callers never fall back.
|
|
13
|
+
* Values stay in the host's secret configuration, not in tool arguments.
|
|
14
|
+
*/
|
|
15
|
+
export declare function readCollectorProjects(environment?: Readonly<Record<string, string | undefined>>): ReadonlyMap<string, CollectorAccess> | undefined;
|
|
16
|
+
/** Pass only the subject from verified SDK AuthInfo, never request metadata. */
|
|
17
|
+
export declare function collectorAccessForSubject(subject: unknown, environment?: Readonly<Record<string, string | undefined>>): CollectorAccess | undefined;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
const headerValue = z.string().min(1).regex(/^[\x20-\x7e]+$/u)
|
|
3
|
+
.refine((value) => value === value.trim());
|
|
4
|
+
const ProjectsSchema = z.array(z.strictObject({
|
|
5
|
+
project: headerValue,
|
|
6
|
+
apiKey: headerValue,
|
|
7
|
+
subjects: z.array(z.string().min(1).refine((value) => value === value.trim())).min(1),
|
|
8
|
+
})).min(1);
|
|
9
|
+
/** Safe to return to a caller; never includes subjects, projects or credentials. */
|
|
10
|
+
export class CollectorAccessError extends Error {
|
|
11
|
+
constructor() {
|
|
12
|
+
super("No Collector project is assigned to this account. Contact the qyl operator.");
|
|
13
|
+
this.name = "CollectorAccessError";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Opt-in subject-to-project access. Absence retains the single-project setup;
|
|
18
|
+
* present-but-invalid configuration and unassigned callers never fall back.
|
|
19
|
+
* Values stay in the host's secret configuration, not in tool arguments.
|
|
20
|
+
*/
|
|
21
|
+
export function readCollectorProjects(environment = process.env) {
|
|
22
|
+
const raw = environment["MCP_COLLECTOR_PROJECTS"];
|
|
23
|
+
if (raw === undefined)
|
|
24
|
+
return undefined;
|
|
25
|
+
let parsed;
|
|
26
|
+
try {
|
|
27
|
+
parsed = ProjectsSchema.parse(JSON.parse(raw));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new Error("MCP_COLLECTOR_PROJECTS must be a valid nonempty project access configuration");
|
|
31
|
+
}
|
|
32
|
+
const accessBySubject = new Map();
|
|
33
|
+
const projects = new Set();
|
|
34
|
+
const credentials = new Set();
|
|
35
|
+
for (const entry of parsed) {
|
|
36
|
+
if (projects.has(entry.project) || credentials.has(entry.apiKey)) {
|
|
37
|
+
throw new Error("MCP_COLLECTOR_PROJECTS contains a duplicate project or credential");
|
|
38
|
+
}
|
|
39
|
+
projects.add(entry.project);
|
|
40
|
+
credentials.add(entry.apiKey);
|
|
41
|
+
const access = Object.freeze({ project: entry.project, apiKey: entry.apiKey });
|
|
42
|
+
for (const subject of entry.subjects) {
|
|
43
|
+
if (accessBySubject.has(subject)) {
|
|
44
|
+
throw new Error("MCP_COLLECTOR_PROJECTS assigns a subject more than once");
|
|
45
|
+
}
|
|
46
|
+
accessBySubject.set(subject, access);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return accessBySubject;
|
|
50
|
+
}
|
|
51
|
+
/** Pass only the subject from verified SDK AuthInfo, never request metadata. */
|
|
52
|
+
export function collectorAccessForSubject(subject, environment = process.env) {
|
|
53
|
+
const projects = readCollectorProjects(environment);
|
|
54
|
+
if (projects === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
const access = typeof subject === "string" ? projects.get(subject) : undefined;
|
|
57
|
+
if (access === undefined)
|
|
58
|
+
throw new CollectorAccessError();
|
|
59
|
+
return access;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=collector-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector-access.js","sourceRoot":"","sources":["../src/collector-access.ts"],"names":[],"mappings":"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"}
|
package/dist/collector.d.ts
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* than silently substituting generated telemetry or invented defaults.
|
|
7
7
|
*/
|
|
8
8
|
import type { LogRecord, MetricDescriptor, MetricQueryResult, MetricSeries, SessionEntity, Trace } from "@ancplua/qyl-api-schema/types";
|
|
9
|
-
import
|
|
9
|
+
import * as z from "zod/v4";
|
|
10
|
+
import { type CollectorAccess } from "./collector-access.js";
|
|
10
11
|
import type { Mode } from "./wire.js";
|
|
11
12
|
/** Error with a message already suitable for showing to the model/user. */
|
|
12
13
|
export declare class CollectorError extends Error {
|
|
@@ -38,6 +39,8 @@ interface ParsedCollectorPage<T> {
|
|
|
38
39
|
export interface CollectorRequestOptions {
|
|
39
40
|
timeoutMs?: number;
|
|
40
41
|
signal?: AbortSignal;
|
|
42
|
+
/** Host-selected access for the verified caller; never a tool input. */
|
|
43
|
+
access?: CollectorAccess;
|
|
41
44
|
}
|
|
42
45
|
/**
|
|
43
46
|
* Normalize endpoint items, then validate the complete operation-specific
|
package/dist/collector.js
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* connection, HTTP, JSON, and contract failures surface to the caller rather
|
|
6
6
|
* than silently substituting generated telemetry or invented defaults.
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
8
|
+
import * as z from "zod/v4";
|
|
9
9
|
import { collectorHeaders, collectorUrl } from "./config.js";
|
|
10
|
+
import { CollectorAccessError, readCollectorProjects } from "./collector-access.js";
|
|
10
11
|
import { LogRecordSchema, MetricDescriptorSchema, MetricQueryResultSchema, MetricSeriesSchema, ProblemDetailsSchema, SessionSchema, TraceSchema, } from "./contract-validation.js";
|
|
11
12
|
/** Error with a message already suitable for showing to the model/user. */
|
|
12
13
|
export class CollectorError extends Error {
|
|
@@ -183,6 +184,9 @@ function parseProblemDetails(value) {
|
|
|
183
184
|
* endpoint-specific generated contract parser accepts it.
|
|
184
185
|
*/
|
|
185
186
|
async function collectorRequest(pathname, method, params, body, options) {
|
|
187
|
+
if (readCollectorProjects() !== undefined && options.access === undefined) {
|
|
188
|
+
throw new CollectorAccessError();
|
|
189
|
+
}
|
|
186
190
|
const url = new URL(pathname, collectorUrl());
|
|
187
191
|
for (const [key, value] of Object.entries(params)) {
|
|
188
192
|
if (value === undefined)
|
|
@@ -203,7 +207,7 @@ async function collectorRequest(pathname, method, params, body, options) {
|
|
|
203
207
|
: timeout;
|
|
204
208
|
const headers = {
|
|
205
209
|
accept: "application/json",
|
|
206
|
-
...collectorHeaders(),
|
|
210
|
+
...collectorHeaders(options.access),
|
|
207
211
|
...(body === undefined ? {} : { "content-type": "application/json" }),
|
|
208
212
|
};
|
|
209
213
|
let response;
|
package/dist/collector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../src/collector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../src/collector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAwB,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,2EAA2E;AAC3E,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG5B,eAAe;IACf,MAAM;IAHjB,YACE,OAAe,EACN,eAAe,GAAG,KAAK,EACvB,MAAe;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;+BAHN,eAAe;sBACf,MAAM;QAGf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,OAAe;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,cAAc,CAAC,mCAAmC,OAAO,sBAAsB,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,KAAiB;IAC1D,OAAO,IAAI,cAAc,CACvB,mCAAmC,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CACxE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjD,SAAS,iBAAiB,CAAC,KAAc,EAAE,OAAe;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,OAAO,GAAG,OAAO;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,UAAU,GAA4B;QAC1C,GAAG,KAAK;QACR,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,OAAO,aAAa,CAAC;QACxE,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,WAAW,CAAC;KACnE,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,OAAO,GAAG,SAAS;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,UAAU,GAA4B;QAC1C,GAAG,OAAO;QACV,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,OAAO,aAAa,CAAC;KAC3E,CAAC;IACF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,UAAU,CAAC,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,WAAW,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,8BAA8B,CAC5C,KAAc,EACd,OAAO,GAAG,QAAQ;IAElB,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC;QAC9C,GAAG,UAAU;QACb,SAAS,EAAE,iBAAiB,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,OAAO,YAAY,CAAC;KAC3E,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,0BAA0B,CAAC,KAAc,EAAE,OAAO,GAAG,QAAQ;IAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAC1C,GAAG,MAAM;QACT,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,aAAa,CAAC;QACzE,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,OAAO,YAAY,CAAC;KACvE,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAAc,EACd,OAAO,GAAG,cAAc;IAExB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC;QAC/C,GAAG,MAAM;QACT,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,aAAa,CAAC;QACzE,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,OAAO,WAAW,CAAC;QACnE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,OAAO,WAAW,WAAW,GAAG,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;oBAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,OAAO,WAAW,WAAW,aAAa,WAAW,GAAG,CAAC,CAAC;oBAC5F,OAAO;wBACL,GAAG,KAAK;wBACR,YAAY,EAAE,iBAAiB,CAC7B,KAAK,CAAC,YAAY,EAClB,GAAG,OAAO,WAAW,WAAW,aAAa,WAAW,gBAAgB,CACzE;qBACF,CAAC;gBACJ,CAAC,CAAC;aACH,CAAC;QACJ,CAAC,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,OAAO,GAAG,KAAK;IAC/D,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAcD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,OAAe,EACf,UAA4B,EAC5B,SAAgD;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,MAAM,gBAAgB,CAAC,GAAG,OAAO,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;YAC5B,GAAG,MAAM;YACT,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC1C,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,UAAU,KAAK,GAAG,CAAC,CAAC;SACjD,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc;YAAE,MAAM,KAAK,CAAC;QACjD,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ;YAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACpD,OAAO;QACL,GAAG,OAAO;QACV,SAAS,EAAE,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,0BAA0B,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAC7B,QAAgB,EAChB,MAAsB,EACtB,MAA4B,EAC5B,IAAa,EACb,OAAgC;IAEhC,IAAI,qBAAqB,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1E,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,yEAAyE;QACzE,kEAAkE;QAClE,yDAAyD;QACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,SAAS;QACX,CAAC;QACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;QAC3B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC;IACZ,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,kBAAkB;QAC1B,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;KACtE,CAAC;IAEF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC1B,MAAM;YACN,OAAO;YACP,MAAM;YACN,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,cAAc,CAAC,mCAAmC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,cAAc,CAAC,2BAA2B,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,IAAI,cAAc,CACtB,4BAA4B,YAAY,EAAE,mBAAmB;YAC3D,iEAAiE,EACnE,IAAI,CACL,CAAC;IACJ,CAAC;IAED,IAAI,YAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CACtB,oCAAoC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,SAAS,QAAQ,EAAE,EAC7F,KAAK,EACL,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9F,IAAI,SAAS,KAAK,0BAA0B,EAAE,CAAC;YAC7C,MAAM,IAAI,cAAc,CACtB,mCAAmC,QAAQ,4CAA4C,SAAS,IAAI,iBAAiB,EAAE,EACvH,KAAK,EACL,QAAQ,CAAC,MAAM,CAChB,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,cAAc,CACtB,mCAAmC,QAAQ,gCAAgC,EAC3E,KAAK,EACL,QAAQ,CAAC,MAAM,CAChB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,cAAc,CACtB,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,SAAS,QAAQ,EAAE,EACtF,KAAK,EACL,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAQD,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,MAAM,GAAyB,EAAE,EACjC,OAAO,GAA4B,EAAE;IAErC,OAAO,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,IAAa,EACb,OAAO,GAA4B,EAAE;IAErC,OAAO,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzE,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* embedding host — the qyl.mcp workbench hosting this server in-process — controls
|
|
6
6
|
* it through its own environment.
|
|
7
7
|
*/
|
|
8
|
+
import type { CollectorAccess } from "./collector-access.js";
|
|
8
9
|
/** URI of the trace explorer UI resource. */
|
|
9
|
-
export declare const RESOURCE_URI = "ui://qyl-explorer/mcp-app-
|
|
10
|
+
export declare const RESOURCE_URI = "ui://qyl-explorer/mcp-app-v5.html";
|
|
10
11
|
/** URI of the MCP dashboard UI resource. */
|
|
11
|
-
export declare const DASHBOARD_RESOURCE_URI = "ui://qyl-explorer/mcp-dashboard-
|
|
12
|
+
export declare const DASHBOARD_RESOURCE_URI = "ui://qyl-explorer/mcp-dashboard-v3.html";
|
|
12
13
|
export declare function collectorUrl(): string;
|
|
13
14
|
/** Optional collector credential and project scope, under the contract's headers. */
|
|
14
|
-
export declare function collectorHeaders(): Record<string, string>;
|
|
15
|
+
export declare function collectorHeaders(access?: CollectorAccess): Record<string, string>;
|
package/dist/config.js
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { API_KEY_HEADER, PROJECT_HEADER } from "./contract-headers.js";
|
|
9
9
|
/** URI of the trace explorer UI resource. */
|
|
10
|
-
export const RESOURCE_URI = "ui://qyl-explorer/mcp-app-
|
|
10
|
+
export const RESOURCE_URI = "ui://qyl-explorer/mcp-app-v5.html";
|
|
11
11
|
/** URI of the MCP dashboard UI resource. */
|
|
12
|
-
export const DASHBOARD_RESOURCE_URI = "ui://qyl-explorer/mcp-dashboard-
|
|
12
|
+
export const DASHBOARD_RESOURCE_URI = "ui://qyl-explorer/mcp-dashboard-v3.html";
|
|
13
13
|
export function collectorUrl() {
|
|
14
14
|
const configured = process.env.QYL_COLLECTOR_URL ?? "http://127.0.0.1:5100";
|
|
15
15
|
let url;
|
|
@@ -28,9 +28,9 @@ export function collectorUrl() {
|
|
|
28
28
|
return url.toString();
|
|
29
29
|
}
|
|
30
30
|
/** Optional collector credential and project scope, under the contract's headers. */
|
|
31
|
-
export function collectorHeaders() {
|
|
32
|
-
const apiKey = process.env.QYL_API_KEY?.trim();
|
|
33
|
-
const project = process.env.QYL_PROJECT?.trim();
|
|
31
|
+
export function collectorHeaders(access) {
|
|
32
|
+
const apiKey = access?.apiKey ?? process.env.QYL_API_KEY?.trim();
|
|
33
|
+
const project = access?.project ?? process.env.QYL_PROJECT?.trim();
|
|
34
34
|
return {
|
|
35
35
|
...(apiKey ? { [API_KEY_HEADER]: apiKey } : {}),
|
|
36
36
|
...(project ? { [PROJECT_HEADER]: project } : {}),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,mCAAmC,CAAC;AAEhE,4CAA4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,yCAAyC,CAAC;AAEhF,MAAM,UAAU,YAAY;IAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,uBAAuB,CAAC;IAC5E,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACnE,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* When the contract publishes `Mcp.Tools.ListMetricsInput` and friends, delete
|
|
27
27
|
* this file and bind them in contract-validation.ts like every other tool.
|
|
28
28
|
*/
|
|
29
|
-
import
|
|
29
|
+
import * as z from "zod/v4";
|
|
30
30
|
/**
|
|
31
31
|
* The tool-input schema for one published GET operation.
|
|
32
32
|
*
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* this file and bind them in contract-validation.ts like every other tool.
|
|
28
28
|
*/
|
|
29
29
|
import { createRequire } from "node:module";
|
|
30
|
-
import
|
|
30
|
+
import * as z from "zod/v4";
|
|
31
31
|
const COMPONENT_SCHEMA_PREFIX = "#/components/schemas/";
|
|
32
32
|
// require() rather than an import attribute: the package's "./openapi" export
|
|
33
33
|
// declares no "types" condition, so a static JSON import has no type to resolve
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-operations.js","sourceRoot":"","sources":["../src/contract-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"contract-operations.js","sourceRoot":"","sources":["../src/contract-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { contractSchema, publishedContractSchema, type ContractInput } from "@ancplua/qyl-api-schema/zod";
|
|
2
2
|
import type { StandardSchemaWithJSON } from "@modelcontextprotocol/server";
|
|
3
|
-
import
|
|
3
|
+
import * as z from "zod/v4";
|
|
4
4
|
export { contractSchema, publishedContractSchema, type ContractInput };
|
|
5
5
|
/**
|
|
6
6
|
* Emits a tool's output JSON Schema with repeated subschemas hoisted into
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { contractSchema, publishedContractSchema } from "@ancplua/qyl-api-schema/zod";
|
|
2
|
-
import
|
|
2
|
+
import * as z from "zod/v4";
|
|
3
3
|
// The JSON-Schema-to-Zod adapter that produced these validators is published by
|
|
4
4
|
// the contract package itself, so this module is now only the named bindings.
|
|
5
5
|
// Both names are re-exported rather than imported directly by their users:
|
|
@@ -9,6 +9,46 @@ import { z } from "zod";
|
|
|
9
9
|
export { contractSchema, publishedContractSchema };
|
|
10
10
|
const JSON_SCHEMA_TARGET = "draft-2020-12";
|
|
11
11
|
const compacted = new WeakMap();
|
|
12
|
+
/** Normalize schema nodes only; defaults, examples and enum/const values are data. */
|
|
13
|
+
function normalizeOutputSpelling(value) {
|
|
14
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
15
|
+
return;
|
|
16
|
+
const schema = value;
|
|
17
|
+
const additional = schema.additionalProperties;
|
|
18
|
+
if (additional !== null && typeof additional === "object" &&
|
|
19
|
+
!Array.isArray(additional) && Object.keys(additional).length === 0) {
|
|
20
|
+
schema.additionalProperties = true;
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(schema.type)) {
|
|
23
|
+
const anyOf = schema.type.map((type) => ({ type }));
|
|
24
|
+
delete schema.type;
|
|
25
|
+
if (schema.anyOf === undefined) {
|
|
26
|
+
schema.anyOf = anyOf;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// A type constraint and an existing anyOf both apply; keep that conjunction.
|
|
30
|
+
schema.allOf = [...(Array.isArray(schema.allOf) ? schema.allOf : []), { anyOf }];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const key of ["$defs", "definitions", "properties", "patternProperties", "dependentSchemas", "dependencies"]) {
|
|
34
|
+
const children = schema[key];
|
|
35
|
+
if (children !== null && typeof children === "object" && !Array.isArray(children)) {
|
|
36
|
+
for (const child of Object.values(children))
|
|
37
|
+
normalizeOutputSpelling(child);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
for (const key of [
|
|
41
|
+
"additionalProperties", "unevaluatedProperties", "propertyNames", "items", "additionalItems",
|
|
42
|
+
"unevaluatedItems", "contains", "contentSchema", "not", "if", "then", "else",
|
|
43
|
+
"allOf", "anyOf", "oneOf", "prefixItems",
|
|
44
|
+
]) {
|
|
45
|
+
const child = schema[key];
|
|
46
|
+
if (Array.isArray(child))
|
|
47
|
+
child.forEach(normalizeOutputSpelling);
|
|
48
|
+
else
|
|
49
|
+
normalizeOutputSpelling(child);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
12
52
|
/**
|
|
13
53
|
* Emits a tool's output JSON Schema with repeated subschemas hoisted into
|
|
14
54
|
* `$defs`, when that spelling is actually smaller than the inlined one.
|
|
@@ -49,6 +89,10 @@ export function compactOutputSchema(schema) {
|
|
|
49
89
|
io: "output",
|
|
50
90
|
reused: "ref",
|
|
51
91
|
});
|
|
92
|
+
// Zod compacts unions after its override hook. Normalize its finished,
|
|
93
|
+
// independent JSON objects, then compare the actual advertised sizes.
|
|
94
|
+
normalizeOutputSpelling(inlined);
|
|
95
|
+
normalizeOutputSpelling(hoisted);
|
|
52
96
|
emitted = JSON.stringify(hoisted).length < JSON.stringify(inlined).length ? hoisted : inlined;
|
|
53
97
|
}
|
|
54
98
|
return emitted;
|