qyl-mcp-server 8.1.1 → 8.1.2
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 +2 -361
- package/dist/mcp-app.html +1 -1
- package/dist/mcp-dashboard.html +1 -1
- package/dist/mcp-home.html +17 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -182,8 +182,7 @@ this JSON configuration. Keep the map in host secrets and out of the plugin ZIP.
|
|
|
182
182
|
writes included, viewer query paths and both protocol eras against a
|
|
183
183
|
real local Collector with two temporary projects. It reuses the completed Release
|
|
184
184
|
build; set `QYL_COLLECTOR_DLL` for another build. The script uses local test identities
|
|
185
|
-
and an in-process signed webhook receiver
|
|
186
|
-
real ChatGPT demonstration are separate checks before upload.
|
|
185
|
+
and an in-process signed webhook receiver.
|
|
187
186
|
|
|
188
187
|
### Seeded analysis verification
|
|
189
188
|
|
|
@@ -198,362 +197,4 @@ all 32 tools against an isolated collector started by the published CLI.
|
|
|
198
197
|
|
|
199
198
|
## Release notes
|
|
200
199
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
- Package the corrected qyl-investigate skill: `verify_fix` needs `since` or `release` beside the `failure_id`.
|
|
204
|
-
- Documentation only otherwise: the plugin bundle README, the Anthropic listing draft and both plugin manifests describe the 32-tool surface; the release contract records the OpenAI plugin draft and the verified domain; the threat model states the single scope check. No code change since 8.1.0.
|
|
205
|
-
|
|
206
|
-
### 8.1.0
|
|
207
|
-
|
|
208
|
-
- Serve the qyl-investigate skill from the server through the MCP skills extension (`io.modelcontextprotocol/skills`: `skills/list`, `skills/get` and `resources/read` under `skill://qyl/`), so the OpenAI plugin portal imports it at Scan Tools and the npm package carries it in `dist/skills`. The skill now names the tool to start with for each question, the defaults every tool applies, the accepted `aggregate_telemetry` measures, and the one-call connection rule: no fan-out before one call has returned telemetry, one retry after sign-in, then stop.
|
|
209
|
-
- Advertise output schemas inlined rather than hoisted into `$defs`: ChatGPT does not resolve `$ref`, so `verify_fix.verdict` and most of `get_failure_context` reached the model as `unknown`. The redundant date-time regex is dropped from advertised schemas.
|
|
210
|
-
- Use collector contract 12.1.2, whose tool descriptions state the default window, baseline, page sizes, span selection and the accepted measure and ordering values.
|
|
211
|
-
|
|
212
|
-
### 8.0.0
|
|
213
|
-
|
|
214
|
-
- The executable now requires Bun 1.4 or later, including stdio. Library subpaths remain usable on Node 24; TypeScript 7 continues to emit the package.
|
|
215
|
-
- Start HTTP explicitly with a 60-second idle timeout so quiet SSE responses survive the SDK keep-alive. Stop the HTTP server during shutdown.
|
|
216
|
-
- Request read, write and delete scopes at initial sign-in; step-up challenges name only missing scopes.
|
|
217
|
-
- Return useful text summaries, bounded evidence and continuations; validate failure updates and make create retries idempotent by default.
|
|
218
|
-
- Use collector contract 12.1.1 for corrected analysis paging, coverage and failure timestamps. Remove the obsolete demo runtime and duplicate read implementations.
|
|
219
|
-
- Pin SemanticConventions 9.9.1, including the canonical `qyl.gen_ai.tool.call.arguments_hash` definition used by collector 12.1.1 for repeated-call analysis.
|
|
220
|
-
- Preserve note drafts, render trace drill-down results and use consistent dashboard filters. Gate the real OTLP answer-key and Bun quiet-stream regressions.
|
|
221
|
-
|
|
222
|
-
### 7.7.0
|
|
223
|
-
|
|
224
|
-
- Expand to 32 tools: failure triage and lifecycle, trace/group comparisons, fix verification, telemetry aggregation and discovery, agent runs, releases, service maps, telemetry health and MCP statistics.
|
|
225
|
-
- Use the collector's shared typed analysis contracts for filtering, pagination, coverage and saved-query execution; retain official SDKs/exporters and project-scoped authorization.
|
|
226
|
-
- Add responsive trace comparison, explicit note/bookmark controls, dashboard filters and drill-downs, with denominator counts behind rates.
|
|
227
|
-
- Preserve numeric agent token usage during secret redaction, and verify the new surface against real OTLP fixtures plus both protocol eras.
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
### 7.6.1
|
|
231
|
-
|
|
232
|
-
- Manage existing Auth0 API permissions, client grants and mapped-user permissions with scoped tenant configuration and a drift check.
|
|
233
|
-
|
|
234
|
-
- Use the qyl-owned semantic conventions package generated from the same registry as C#. MCP attribute names, values, operation events, duration metrics and seconds remain consistent across both languages. The official OpenTelemetry SDKs and exporters and the shared API contracts remain in use.
|
|
235
|
-
|
|
236
|
-
### 7.6.0
|
|
237
|
-
|
|
238
|
-
- Contract 12.0.0 (`@ancplua/qyl-api-schema` 12.0.0, revision
|
|
239
|
-
`sha256:b29439eba28e752b`): the server is generated from it and refuses a
|
|
240
|
-
Collector on another revision, so it deploys only after the Collector serves
|
|
241
|
-
12.0.0.
|
|
242
|
-
- Every problem the Collector or the workbench reports is RFC 9457 with a
|
|
243
|
-
`type` URI (`https://qyl.at/problems/<name>`) and a stable `code`. A tool
|
|
244
|
-
error's code now follows the problem's `code` (`not_found`, `conflict`,
|
|
245
|
-
`precondition_failed`, `precondition_required`, `collector_unauthorized`,
|
|
246
|
-
`collector_error`) and falls back to the HTTP status only for a body
|
|
247
|
-
without one.
|
|
248
|
-
- One page limit on every list: 1 to 1000, 100 when omitted. The workbench
|
|
249
|
-
reads Collector logs in pages of 1000 following `next_cursor` (up to ten
|
|
250
|
-
pages, the same bound as before), and its protocol-event page defaults to
|
|
251
|
-
100. `next_cursor` is absent on the last page.
|
|
252
|
-
- The workbench's HTTP errors no longer carry `X-Request-Id`; no server sent
|
|
253
|
-
it.
|
|
254
|
-
|
|
255
|
-
### 7.5.0
|
|
256
|
-
|
|
257
|
-
- Write tools, each a separate tool so a host can approve it on its own:
|
|
258
|
-
`create_annotation` and `update_annotation` (notes on a trace, span or
|
|
259
|
-
session), `create_saved_query` and `update_saved_query` (named filters), and
|
|
260
|
-
one `delete` for either kind. They change only those objects, in the
|
|
261
|
-
caller's Collector project; no tool deletes or edits telemetry.
|
|
262
|
-
`list_saved_queries` and `run_saved_query` read saved queries, and
|
|
263
|
-
`get_trace` and `list_sessions` return annotations.
|
|
264
|
-
- Scopes: `qyl:write` for create and update, `qyl:delete` for `delete`;
|
|
265
|
-
`qyl:read` alone keeps the read tools. The protected-resource metadata lists
|
|
266
|
-
all three, and a call without the scope it needs gets a `403`
|
|
267
|
-
`insufficient_scope` challenge. The Collector key needs the `write` and
|
|
268
|
-
`delete` roles.
|
|
269
|
-
|
|
270
|
-
### 7.4.0
|
|
271
|
-
|
|
272
|
-
- Contract package `@ancplua/qyl-api-schema` 11.6.0 (revision
|
|
273
|
-
`sha256:d926c3c6ab829cbf`). The hosted server starts only against a
|
|
274
|
-
Collector built from `Qyl.Api.Contracts` 11.6.0, so the Collector deploys
|
|
275
|
-
first.
|
|
276
|
-
- Paging on every list tool: `list_traces`, `list_sessions`, `search_logs`,
|
|
277
|
-
`list_metrics` and `get_metric_series` return `has_more` and `next_cursor`
|
|
278
|
-
and take `cursor`. Demo mode pages too, with its own opaque cursor.
|
|
279
|
-
- `list_traces` filters: `start_time`, `end_time`, `service_name`,
|
|
280
|
-
`errors_only`. `list_sessions` and `search_logs` take the window;
|
|
281
|
-
`search_logs` also takes `session_id`.
|
|
282
|
-
- Metric matchers are structured: `matchers: [{ key, op: "eq" | "prefix",
|
|
283
|
-
value }]` replaces the `attr` / `attr_prefix` strings on `get_metric_series`
|
|
284
|
-
and `query_metric`; `step_ms` and `hours` are integers.
|
|
285
|
-
- `fetch_telemetry` input is a discriminated union over `view`, published with
|
|
286
|
-
an object root, and the tool now advertises its output schema. The `traces`
|
|
287
|
-
view accepts a `trace_id` to return that one trace selected.
|
|
288
|
-
- Every tool output model admits `error`; the server's error codes are the
|
|
289
|
-
contract's `ToolErrorCode` enum.
|
|
290
|
-
|
|
291
|
-
### 7.3.1
|
|
292
|
-
|
|
293
|
-
- Transient answers without a contract body keep their status code: an HTML
|
|
294
|
-
`502`/`503` from the edge during a deploy window, or an empty `429`, now
|
|
295
|
-
yield `collector_error` or `collector_rate_limited` with `retryable: true`
|
|
296
|
-
instead of `contract_mismatch`. Any other unexpected body stays
|
|
297
|
-
`contract_mismatch`.
|
|
298
|
-
|
|
299
|
-
### 7.3.0
|
|
300
|
-
|
|
301
|
-
- Every failed tool call now carries `structuredContent.error` with a stable
|
|
302
|
-
`code`, the `message` and `retryable`, next to the unchanged text content and
|
|
303
|
-
`isError: true`. Codes: `invalid_argument`, `not_found`, `no_project_access`,
|
|
304
|
-
`collector_unreachable`, `collector_timeout`, `cancelled`,
|
|
305
|
-
`collector_unauthorized`, `collector_rate_limited`, `collector_rejected`,
|
|
306
|
-
`collector_error`, `contract_mismatch`, `internal`. Additive: clients that read
|
|
307
|
-
only the text see no change.
|
|
308
|
-
- `list_metrics` and `get_metric_series` report the page's own `has_more`
|
|
309
|
-
instead of a hardcoded `false`, so a catalog truncated by `limit` no longer
|
|
310
|
-
reads as complete.
|
|
311
|
-
- Contract package `@ancplua/qyl-api-schema` stays 11.5.0 (revision
|
|
312
|
-
`sha256:3605ae27d2edf632`); no Collector change is needed.
|
|
313
|
-
|
|
314
|
-
### 7.2.3
|
|
315
|
-
|
|
316
|
-
- Contract package `@ancplua/qyl-api-schema` 11.5.0. The release changes only
|
|
317
|
-
qyl-api-schema's toolchain: the contract revision stays
|
|
318
|
-
`sha256:3605ae27d2edf632`, so a Collector built from `Qyl.Api.Contracts`
|
|
319
|
-
11.4.0 or 11.5.0 passes the startup handshake.
|
|
320
|
-
|
|
321
|
-
### 7.2.2
|
|
322
|
-
|
|
323
|
-
- MCP Apps viewers check both the SDK client name and the `User-Agent` when
|
|
324
|
-
choosing their domain. A recognized client name wins over a conflicting
|
|
325
|
-
User-Agent, and an unknown name no longer hides a recognized one; 7.2.0 and
|
|
326
|
-
7.2.1 read the User-Agent only when no client name was sent. When neither is
|
|
327
|
-
recognized, `ui.domain` and `openai/widgetDomain` are both omitted and the
|
|
328
|
-
host uses its default sandbox.
|
|
329
|
-
- The viewers are now `ui://qyl-explorer/mcp-app-v6.html` and
|
|
330
|
-
`ui://qyl-explorer/mcp-dashboard-v4.html`, so hosts drop metadata cached for
|
|
331
|
-
the previous versions.
|
|
332
|
-
|
|
333
|
-
### 7.2.1
|
|
334
|
-
|
|
335
|
-
- Contract package `@ancplua/qyl-api-schema` 11.4.0 (TypeSpec 1.17). The
|
|
336
|
-
contract revision is now `sha256:3605ae27d2edf632`. The server refuses to
|
|
337
|
-
start against a Collector that advertises another revision, so run it with a
|
|
338
|
-
Collector built from `Qyl.Api.Contracts` 11.4.0.
|
|
339
|
-
- OpenTelemetry 0.223.0 / 2.12.0 and the remaining dependencies at their latest
|
|
340
|
-
releases.
|
|
341
|
-
|
|
342
|
-
### 7.2.0
|
|
343
|
-
|
|
344
|
-
- Removed deprecated MCP logging capability and per-call log notifications;
|
|
345
|
-
retained requested progress, cancellation and native operation telemetry.
|
|
346
|
-
[Dated verification, 2026-10-08](https://github.com/ANcpLua/qyl.mcp/blob/main/docs/evidence/2026-10-08-followup-01.md).
|
|
347
|
-
|
|
348
|
-
- Optional Auth0-account-to-Collector project isolation, also applied to Events.
|
|
349
|
-
- Events share polling for accounts assigned to the same project; independent
|
|
350
|
-
projects are polled concurrently. Invalid stdio project configuration fails
|
|
351
|
-
before accepting a connection.
|
|
352
|
-
- Workbench telemetry recognizes the SDK's per-request server factory so native
|
|
353
|
-
tool spans are not duplicated by the surrounding protocol journal, while
|
|
354
|
-
failed server construction still produces a correlated failure span.
|
|
355
|
-
- `get_trace` accepts optional `errors_only`, `max_spans` and
|
|
356
|
-
`include_attributes`; `ci_log` accepts an optional `service_prefix` (default
|
|
357
|
-
`qyl-ci`).
|
|
358
|
-
- Advertised output schemas use portable spelling (`additionalProperties: true`,
|
|
359
|
-
`anyOf` instead of type arrays); validation is unchanged.
|
|
360
|
-
- MCP Apps viewers declare the UI domain Claude and ChatGPT each expect, and
|
|
361
|
-
none for other hosts.
|
|
362
|
-
|
|
363
|
-
### 7.1.1
|
|
364
|
-
|
|
365
|
-
- SDK v2.3.1 serving defaults accept modern and 2025-era tool clients over HTTP
|
|
366
|
-
and stdio. The workbench negotiates automatically. The strict policy described
|
|
367
|
-
under 6.0.0 below has been removed.
|
|
368
|
-
- Events recheck account status, explicit client access, user permissions and
|
|
369
|
-
consent through Auth0. Unsubscribe aborts outstanding deliveries; restart
|
|
370
|
-
cleanup removes expired subscriptions and obsolete signing keys.
|
|
371
|
-
- Public viewers declare their deployment origin and keep the requested trace
|
|
372
|
-
limit on refresh. Release verification exercises a fresh npm consumer with
|
|
373
|
-
modern and 2025-era discovery and a real demo-tool call.
|
|
374
|
-
|
|
375
|
-
### 7.1.0
|
|
376
|
-
|
|
377
|
-
- The hosted server can sit behind Cloudflare Access Managed OAuth:
|
|
378
|
-
`MCP_AUTH_PROVIDER=cloudflare-access` with `MCP_ACCESS_TEAM_DOMAIN` and
|
|
379
|
-
`MCP_ACCESS_AUD`. Access performs the client OAuth flow and owns discovery;
|
|
380
|
-
the origin serves `/mcp` only for a `Cf-Access-Jwt-Assertion` it has verified
|
|
381
|
-
against the team's signing keys for RS256, issuer, application audience,
|
|
382
|
-
expiry and subject, so a direct request to the origin without one is
|
|
383
|
-
rejected. The default stays the pinned Auth0 issuer; unknown modes, partial
|
|
384
|
-
Access settings and non-Cloudflare team URLs fail closed.
|
|
385
|
-
- The assertion header is redacted from diagnostic objects and text, like the
|
|
386
|
-
other credentials.
|
|
387
|
-
|
|
388
|
-
### 7.0.0
|
|
389
|
-
|
|
390
|
-
- Contract `@ancplua/qyl-api-schema` 11.1.0 -> 11.2.0. Demo series ids are
|
|
391
|
-
computed with the contract's `attributeIdentity`, the same string the
|
|
392
|
-
collector computes in C#, so a demo series id and a live one are comparable;
|
|
393
|
-
every demo series id changes, which is why this is a major. A contract major
|
|
394
|
-
moves this package's major from now on.
|
|
395
|
-
|
|
396
|
-
### 6.2.1
|
|
397
|
-
|
|
398
|
-
- Contract `@ancplua/qyl-api-schema` 11.0.1 -> 11.1.0. Every tool shape is
|
|
399
|
-
`contractSchema("<definition>")`, typed by the contract at compile time, so
|
|
400
|
-
the textual shape gate is gone; trace, span and session ids are parsed
|
|
401
|
-
through the contract's generated parsers instead of cast; the nanosecond
|
|
402
|
-
helpers come from the contract's `/runtime`.
|
|
403
|
-
|
|
404
|
-
### 6.2.0
|
|
405
|
-
|
|
406
|
-
- Contract `@ancplua/qyl-api-schema` 10.0.1 -> 11.0.1, revision
|
|
407
|
-
`sha256:cd69d9c37a41916c` -> `sha256:5c1aa27ccdf48067`. Attribute values are
|
|
408
|
-
decoded through the contract's own `/runtime` subpath instead of a local
|
|
409
|
-
copy of the dashboard's decoder; bytes and key-value lists render as their
|
|
410
|
-
values, never as `[object Object]`. A log body is an `AttributeValue`: a plain
|
|
411
|
-
string body is a bare string, and the three body shapes the collector never
|
|
412
|
-
produced are gone from the contract and from this server.
|
|
413
|
-
|
|
414
|
-
### 6.1.2
|
|
415
|
-
|
|
416
|
-
- The landing page at `mcp.qyl.at` states what 6.1.0 added: a request-scope
|
|
417
|
-
section for cancellation, progress and the per-call log line, the full
|
|
418
|
-
eleven-tool surface, and a hero fact for it. Surfaces take the ink of the
|
|
419
|
-
original qyl site (`#050706`) and its family; the cyan accent is unchanged.
|
|
420
|
-
- The page no longer embeds the whole `package.json`: a default JSON import
|
|
421
|
-
inlined the dependency and export tables into every visitor's download; a
|
|
422
|
-
named import of `version` ships the one field the footer shows.
|
|
423
|
-
|
|
424
|
-
### 6.1.1
|
|
425
|
-
|
|
426
|
-
- The bundled viewers no longer ask for progress they never read: the MCP
|
|
427
|
-
Apps client passed a no-op `onprogress` on every `tools/call`, which put a
|
|
428
|
-
`progressToken` on each request and, since 6.1.0, had the server answer
|
|
429
|
-
with notifications nobody consumed. A viewer that wants progress passes its
|
|
430
|
-
own callback.
|
|
431
|
-
- `verify:frame` runs as a step of `bun run test`: every tool in the manifest
|
|
432
|
-
must be registered inside `runTool` under its own name, so a tool cannot
|
|
433
|
-
ship without cancellation, progress and its log line.
|
|
434
|
-
|
|
435
|
-
### 6.1.0
|
|
436
|
-
|
|
437
|
-
- Every tool handler runs inside `runTool`, which resolves the SDK request
|
|
438
|
-
context once and hands the work a plain scope. Cancellation: the request's
|
|
439
|
-
signal reaches every collector fetch, which already raced a signal against
|
|
440
|
-
its timeout but had no caller passing one, so a client's
|
|
441
|
-
`notifications/cancelled` or a dropped connection now aborts the fetch at
|
|
442
|
-
once. Data-layer functions (`fetchTraces`, `fetchLogs`, `listMetrics`, …)
|
|
443
|
-
gained a trailing `CollectorRequestOptions` argument; existing callers are
|
|
444
|
-
unaffected.
|
|
445
|
-
- Progress on every tool: a request with a `progressToken` gets one
|
|
446
|
-
`notifications/progress` per completed collector round trip and a final
|
|
447
|
-
"Result ready"; `ci_log` with a `run_id` reports its per-leg flatten as a
|
|
448
|
-
step of its own. Progress increases per token by construction. A request
|
|
449
|
-
without a token gets nothing.
|
|
450
|
-
- The `logging` capability is declared and every call sends one
|
|
451
|
-
`notifications/message` (`info` on success, `warning` on failure, logger
|
|
452
|
-
`qyl.mcp`) to a request that carries a log level in its `_meta` envelope.
|
|
453
|
-
Deprecated as of `2026-07-28` (SEP-2577), kept through the deprecation
|
|
454
|
-
window beside stderr and OpenTelemetry. Tool surface, manifest snapshot and
|
|
455
|
-
contract handshake are unchanged.
|
|
456
|
-
|
|
457
|
-
### 6.0.0
|
|
458
|
-
|
|
459
|
-
- Revision `2026-07-28` only, again, on both transports: `createMcpHandler`
|
|
460
|
-
and `serveStdio` run with `legacy: "reject"`, so a 2025-era `initialize` is
|
|
461
|
-
answered with `-32022` naming the served revision. 5.2.0 served the 2025 era
|
|
462
|
-
for one release; that serving mode is withdrawn. Breaking for any host that
|
|
463
|
-
opens with `initialize`, Claude Code's stdio client included: such a host
|
|
464
|
-
needs a client that opens with `server/discover`. On the SDK's own client that
|
|
465
|
-
is `versionNegotiation: { mode: "auto" }` (or a pin on `2026-07-28`); the
|
|
466
|
-
default `mode: "legacy"` cannot reach this server.
|
|
467
|
-
- Gate for the flip: three independent agents, given only the endpoint and the
|
|
468
|
-
stdio command and forbidden to read the source, each connected over both
|
|
469
|
-
transports on their own and listed the eleven tools; each also confirmed that
|
|
470
|
-
the SDK default is refused. The tool surface, manifest snapshot and contract
|
|
471
|
-
handshake are unchanged from 5.2.0.
|
|
472
|
-
|
|
473
|
-
### 5.2.0
|
|
474
|
-
|
|
475
|
-
- 2025-era MCP clients are served again. Since 4.0.0 both transports rejected
|
|
476
|
-
any client that did not speak revision `2026-07-28` with `-32022`, which
|
|
477
|
-
refused every shipping host of the day, including Claude Code's stdio
|
|
478
|
-
client on `2025-11-25`. The hosted handler now serves those clients
|
|
479
|
-
statelessly (`legacy: "stateless"`, the SDK default) and the stdio server
|
|
480
|
-
takes `serveStdio`'s default legacy serving. Modern clients are unchanged;
|
|
481
|
-
the manifest, the contract handshake and the tool surface are the same at
|
|
482
|
-
either revision.
|
|
483
|
-
- The README no longer points at `qyl/ARCHITECTURE-1.0.0.md`, which was
|
|
484
|
-
deleted on 2026-09-07; the qyl README states the architecture in place.
|
|
485
|
-
|
|
486
|
-
### 5.1.0
|
|
487
|
-
|
|
488
|
-
- Contract `@ancplua/qyl-api-schema` 10.0.0 -> 10.0.1, revision
|
|
489
|
-
`sha256:264a9e4f1d70289a` -> `sha256:cd69d9c37a41916c`. The contract's
|
|
490
|
-
operations and shapes are unchanged; the revision moved because the
|
|
491
|
-
TypeSpec toolchain that emits the canonical OpenAPI projection did. The
|
|
492
|
-
startup handshake refuses a collector on the old revision, so this server
|
|
493
|
-
pairs with `qyl` 5.1.0 and later; `server/tool-manifest.snapshot.json`
|
|
494
|
-
differs only in its `contract_revision`.
|
|
495
|
-
- The workspace root package no longer pins its own members, and the matrix
|
|
496
|
-
no longer compares itself to a tool inventory that no longer exists.
|
|
497
|
-
|
|
498
|
-
### 5.0.0
|
|
499
|
-
|
|
500
|
-
- **Breaking.** Contract major: `@ancplua/qyl-api-schema` 9.0.0 -> 10.0.0,
|
|
501
|
-
revision `sha256:d1c859393b628164` -> `sha256:264a9e4f1d70289a`. The
|
|
502
|
-
startup handshake refuses a collector that advertises anything else, so
|
|
503
|
-
this server and the collector move together.
|
|
504
|
-
- The contract's revision scheme moved to `qyl-contract-revision-v3`; the
|
|
505
|
-
revision string is read from the package at build time, so nothing in this
|
|
506
|
-
server encodes it by hand.
|
|
507
|
-
- The contract's `./generated/otel-keys` TypeSpec keys projection was
|
|
508
|
-
removed upstream. This server never imported it — the tool surface,
|
|
509
|
-
schemas, and protocol are unchanged, and
|
|
510
|
-
`server/tool-manifest.snapshot.json` differs only in its
|
|
511
|
-
`contract_revision`.
|
|
512
|
-
|
|
513
|
-
### 4.0.1
|
|
514
|
-
|
|
515
|
-
- Dependencies only; no tool, schema, or protocol change. The published
|
|
516
|
-
package's runtime dependencies move to their latest stable versions, so
|
|
517
|
-
the tarball no longer describes a tree that has since moved on.
|
|
518
|
-
- OpenTelemetry: `@opentelemetry/api-logs`, `exporter-logs-otlp-proto`,
|
|
519
|
-
`exporter-metrics-otlp-proto`, `exporter-trace-otlp-proto` and `sdk-logs`
|
|
520
|
-
`^0.221.0` -> `^0.222.0`; `core`, `resources`, `sdk-metrics`,
|
|
521
|
-
`sdk-trace-base` and `sdk-trace-node` `^2.10.0` -> `^2.11.0`.
|
|
522
|
-
- `jose` `^6.2.3` -> `^6.2.10`, `zod` `^4.5.0` -> `^4.5.4`.
|
|
523
|
-
- `@ancplua/qyl-api-schema` stays 9.0.0, revision
|
|
524
|
-
`sha256:d1c859393b628164`, and `@opentelemetry/semantic-conventions`
|
|
525
|
-
stays `^1.43.0` — the contract and the startup handshake are unchanged,
|
|
526
|
-
so this server and the collector do not have to move together.
|
|
527
|
-
|
|
528
|
-
### 4.0.0
|
|
529
|
-
|
|
530
|
-
- **Breaking.** The Codex workflow tools are gone: `list_workflow_runs`,
|
|
531
|
-
`get_workflow_graph`, `display_workflow_graph`, `inspect_workflow_events`,
|
|
532
|
-
`fetch_workflow_graph_updates`, and `control_workflow_run`. The tool surface is
|
|
533
|
-
11 read-only tools; `tools/list` shrank about 31%.
|
|
534
|
-
- The `ui://qyl-explorer/observe-graph.html` MCP App resource and its viewer
|
|
535
|
-
bundle are gone with them, as is the `qyl:control` OAuth scope — no tool
|
|
536
|
-
required it any more, so the hosted server advertises `qyl:read` alone.
|
|
537
|
-
- These existed only to observe and control Codex runs, and were removed in one
|
|
538
|
-
wave with the qyl observer and the qyl-api-schema contract.
|
|
539
|
-
- Contract major: `@ancplua/qyl-api-schema` 9.0.0, revision
|
|
540
|
-
`sha256:d1c859393b628164`. The startup handshake refuses a collector that
|
|
541
|
-
advertises anything else, so this server and the collector move together.
|
|
542
|
-
|
|
543
|
-
### 3.0.0
|
|
544
|
-
|
|
545
|
-
- Metrics reading: `list_metrics`, `get_metric_series`, and `query_metric` over
|
|
546
|
-
the collector's metrics API. Each carries the read-only safety annotations.
|
|
547
|
-
- Contract major: `@ancplua/qyl-api-schema` 8.0.0, revision
|
|
548
|
-
`sha256:64c464569005a485`. The startup handshake refuses a collector that
|
|
549
|
-
advertises anything else, so this server and the collector move together.
|
|
550
|
-
|
|
551
|
-
### 2.1.0
|
|
552
|
-
|
|
553
|
-
- `tools/list` shrank 44.6%: shared models in the output schemas are emitted as
|
|
554
|
-
`$defs`/`$ref` where that is smaller, and the app-only tools no longer publish
|
|
555
|
-
an output schema at all.
|
|
556
|
-
- Native execution evidence is written only by a local server; see above.
|
|
557
|
-
|
|
558
|
-
Full documentation, the workbench, and self-hosting:
|
|
559
|
-
[github.com/ANcpLua/qyl.mcp](https://github.com/ANcpLua/qyl.mcp)
|
|
200
|
+
In the repository's [CHANGELOG.md](https://github.com/ANcpLua/qyl.mcp/blob/main/CHANGELOG.md).
|