@ggui-ai/protocol-conformance 0.6.3 → 0.8.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.
Files changed (65) hide show
  1. package/README.md +59 -18
  2. package/dist/binding-conformance/cases/bind-blueprint-no-contract-none.json +6 -0
  3. package/dist/binding-conformance/cases/bind-contract-without-tool-names-none.json +18 -0
  4. package/dist/binding-conformance/cases/bind-declared-gadget.json +13 -0
  5. package/dist/binding-conformance/cases/bind-declared-wins-over-contract.json +23 -0
  6. package/dist/binding-conformance/cases/bind-derived-caps-at-sixteen.json +54 -0
  7. package/dist/binding-conformance/cases/bind-derived-props-and-stream.json +36 -0
  8. package/dist/binding-conformance/cases/bind-derived-skips-invalid-names.json +40 -0
  9. package/dist/binding-conformance/cases/bind-derived-union-dedupes.json +38 -0
  10. package/dist/binding-conformance/cases/bind-gadget-undeclared-none.json +6 -0
  11. package/dist/binding-conformance/cases/bind-reject-charset.json +9 -0
  12. package/dist/binding-conformance/cases/bind-reject-duplicate-pair.json +12 -0
  13. package/dist/binding-conformance/cases/bind-reject-empty-list.json +9 -0
  14. package/dist/binding-conformance/cases/bind-reject-overlong-name.json +13 -0
  15. package/dist/binding-conformance/cases/bind-reject-server-charset.json +9 -0
  16. package/dist/binding-conformance/cases/bind-reject-too-many-entries.json +27 -0
  17. package/dist/binding-conformance/cases/filter-case-sensitive-server.json +7 -0
  18. package/dist/binding-conformance/cases/filter-case-sensitive-tool.json +7 -0
  19. package/dist/binding-conformance/cases/filter-none-passes-bound.json +7 -0
  20. package/dist/binding-conformance/cases/filter-none-passes-unbound.json +6 -0
  21. package/dist/binding-conformance/cases/filter-pair-bare-never-matches.json +7 -0
  22. package/dist/binding-conformance/cases/filter-pair-exact.json +10 -0
  23. package/dist/binding-conformance/cases/filter-pair-not-cross-entry.json +10 -0
  24. package/dist/binding-conformance/cases/filter-server-excludes-bare.json +7 -0
  25. package/dist/binding-conformance/cases/filter-server-match.json +7 -0
  26. package/dist/binding-conformance/cases/filter-tool-cross-server.json +7 -0
  27. package/dist/binding-conformance/cases/filter-tool-excludes-unbound.json +6 -0
  28. package/dist/binding-conformance/cases/filter-tool-matches-bare-entry.json +7 -0
  29. package/dist/binding-conformance/cases/filter-tool-no-match.json +7 -0
  30. package/dist/binding-conformance/index.d.ts +214 -0
  31. package/dist/binding-conformance/index.d.ts.map +1 -0
  32. package/dist/binding-conformance/index.js +153 -0
  33. package/dist/fixtures/consume-buffer/index.d.ts.map +1 -1
  34. package/dist/fixtures/consume-buffer/index.js +4 -1
  35. package/dist/fixtures/index.d.ts +42 -4
  36. package/dist/fixtures/index.d.ts.map +1 -1
  37. package/dist/fixtures/index.js +42 -4
  38. package/dist/fixtures/reserved-channel-authority/index.d.ts.map +1 -1
  39. package/dist/fixtures/reserved-channel-authority/index.js +4 -2
  40. package/dist/index.d.ts +4 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +12 -0
  43. package/dist/match-behavior.d.ts.map +1 -1
  44. package/dist/match-behavior.js +4 -2
  45. package/dist/resolution-conformance/cases/resolve-bundle-host-computed.json +3 -3
  46. package/dist/resolution-conformance/cases/resolve-default-host.json +2 -2
  47. package/dist/resolution-conformance/cases/resolve-loopback-host-http-scheme.json +2 -2
  48. package/dist/resource-read-conformance/cases/all-ephemeral-substrate-fuses-like-none.json +29 -0
  49. package/dist/resource-read-conformance/cases/channel-less-read-mounts-inline.json +24 -0
  50. package/dist/resource-read-conformance/cases/evicted-row-remints-from-the-durable-record.json +26 -0
  51. package/dist/resource-read-conformance/cases/half-wired-blueprints-only-substrate-fuses-like-none.json +29 -0
  52. package/dist/resource-read-conformance/cases/half-wired-identity-only-substrate-fuses-like-none.json +29 -0
  53. package/dist/resource-read-conformance/cases/live-row-read-returns-mount-material.json +18 -0
  54. package/dist/resource-read-conformance/cases/malformed-locator-stays-outside-the-typed-set.json +19 -0
  55. package/dist/resource-read-conformance/cases/read-miss-answers-not-found.json +23 -0
  56. package/dist/resource-read-conformance/cases/read-on-a-substrate-less-server-answers-not-supported.json +22 -0
  57. package/dist/resource-read-conformance/cases/read-record-with-purged-blueprint-answers-blueprint-unresolvable.json +29 -0
  58. package/dist/resource-read-conformance/cases/read-refusal-is-indistinguishable-from-a-miss.json +47 -0
  59. package/dist/resource-read-conformance/cases/read-without-a-delivery-channel-answers-not-mountable.json +33 -0
  60. package/dist/resource-read-conformance/cases/registry-match-fuses-on-not-mountable.json +40 -0
  61. package/dist/resource-read-conformance/cases/substrate-less-fusion-of-refusal-and-miss.json +29 -0
  62. package/dist/resource-read-conformance/index.d.ts +383 -0
  63. package/dist/resource-read-conformance/index.d.ts.map +1 -0
  64. package/dist/resource-read-conformance/index.js +793 -0
  65. package/package.json +13 -3
@@ -0,0 +1,383 @@
1
+ /**
2
+ * The closed classification a typed read failure carries on
3
+ * `error.data.code`.
4
+ *
5
+ * The kit's decoupled copy, per the authoring posture in `../types`:
6
+ * fixtures compile against the kit's frozen vocabulary, never the live
7
+ * protocol types. CLOSED, not extensibly-closed — a fifth code is a kit
8
+ * version bump, because a catalog cannot grade a class it ships no case
9
+ * for.
10
+ */
11
+ export type ResourceReadErrorCodeDecl = 'NOT_FOUND' | 'BLUEPRINT_UNRESOLVABLE' | 'NOT_SUPPORTED' | 'NOT_MOUNTABLE';
12
+ /**
13
+ * How much of the record-keeping substrate a re-mint needs the server
14
+ * to have bound.
15
+ *
16
+ * Restoring an evicted render needs the whole set — the record naming
17
+ * what the render was, the blueprint it names, and the component body
18
+ * behind that blueprint. A server holding only part of it can restore
19
+ * nothing, so `identity-only` and `blueprints-only` are as
20
+ * substrate-less as `none`; they exist as separate arms because they
21
+ * are the shapes an operator actually reaches, by provisioning one
22
+ * store and forgetting the other.
23
+ *
24
+ * `all-ephemeral` (#457): every store bound, every store DECLARING
25
+ * ephemeral durability — binding is not durability, and a server whose
26
+ * records die with the process MUST fuse like one holding nothing.
27
+ * The arm an operator reaches by wiring three in-memory stores.
28
+ */
29
+ export type DurableSubstrateWiring = 'all' | 'none' | 'identity-only' | 'blueprints-only' | 'all-ephemeral';
30
+ /** The deployment shape a case needs the server under test to have. */
31
+ export interface ResourceReadServerShape {
32
+ readonly durableSubstrate: DurableSubstrateWiring;
33
+ /** Bind the blueprint registry a read can fall back to. Default false. */
34
+ readonly blueprintRegistry?: boolean;
35
+ /** Bind static component delivery (a fetchable component URL). Default false. */
36
+ readonly staticDelivery?: boolean;
37
+ /** Bind the live delivery channel. Default false. */
38
+ readonly liveChannel?: boolean;
39
+ }
40
+ /**
41
+ * Whose read this is. `owner` holds the seeded renders; `other` is a
42
+ * caller with valid credentials and no claim to them — the identity
43
+ * every disclosure obligation is stated against.
44
+ */
45
+ export type ResourceReadCaller = 'owner' | 'other';
46
+ /**
47
+ * State the driver installs before the reads. CLOSED vocabulary: an
48
+ * unknown seed kind is a case-authoring error the runner throws on,
49
+ * never a skip and never a verdict on the server.
50
+ *
51
+ * Every seed belongs to the `owner` identity, whichever caller the case
52
+ * then reads as — that is what makes a refused read a read of something
53
+ * that really is there.
54
+ */
55
+ export type ResourceReadSeed = {
56
+ /** A durable record of a render that has since been evicted. */
57
+ readonly kind: 'identity-record';
58
+ readonly session: string;
59
+ /**
60
+ * The contract key the record was stamped with — the
61
+ * `blueprintKey` segment a resume locator carries. Authored
62
+ * explicitly so nothing about which key resolves which record is
63
+ * implicit: a probe reading this record spells the same literal.
64
+ */
65
+ readonly key: string;
66
+ /** Whether the record names a blueprint at all. */
67
+ readonly blueprint: 'named' | 'unnamed';
68
+ } | {
69
+ /** The durable blueprint an `identity-record` names. */
70
+ readonly kind: 'durable-blueprint';
71
+ /** Whether the blueprint stores a reference to a component body. */
72
+ readonly componentRef: 'present' | 'absent';
73
+ /** Whether the body behind that reference is still stored. */
74
+ readonly body: 'stored' | 'purged';
75
+ } | {
76
+ /** A live render row that has committed a component. */
77
+ readonly kind: 'committed-render';
78
+ readonly session: string;
79
+ /**
80
+ * Size class of the committed component relative to the inline
81
+ * `codeB64` cap. `'under-inline-cap'` (the default) seeds a
82
+ * component the server can deliver inline even with no wired
83
+ * channels; `'over-inline-cap'` seeds one it cannot — the shape
84
+ * that still exercises the no-delivery-channel failure arm on a
85
+ * channel-less server.
86
+ */
87
+ readonly size: 'under-inline-cap' | 'over-inline-cap';
88
+ } | {
89
+ /** A live render row whose generation has not committed yet. */
90
+ readonly kind: 'uncommitted-render';
91
+ readonly session: string;
92
+ } | {
93
+ /**
94
+ * A blueprint published to the registry a read falls back to. The
95
+ * SERVER computes its key, so the driver reports the key back
96
+ * through {@link PreparedResourceReadScenario.registeredKeys}
97
+ * under this `as` name, and probes reference it there.
98
+ */
99
+ readonly kind: 'registered-blueprint';
100
+ readonly as: string;
101
+ };
102
+ /**
103
+ * The blueprint-key segment of a locator.
104
+ *
105
+ * `literal` is a value the case authors — the kit builds the URI from
106
+ * it, so the case pins the exact bytes read. `registered` defers to a
107
+ * key the server computed for a `registered-blueprint` seed, which is
108
+ * the one value a case cannot know in advance.
109
+ */
110
+ export type ResourceReadKey = {
111
+ readonly kind: 'literal';
112
+ readonly value: string;
113
+ } | {
114
+ readonly kind: 'registered';
115
+ readonly seed: string;
116
+ };
117
+ /**
118
+ * What gets read.
119
+ *
120
+ * `render` is the protocol's locator grammar and the kit builds the URI
121
+ * — a case never spells a well-formed locator out by hand, so the
122
+ * grammar has one owner. `raw` exists for the probes whose whole point
123
+ * is a URI that does NOT name a locator; there the exact string IS the
124
+ * input under test.
125
+ */
126
+ export type ResourceReadLocator = {
127
+ readonly kind: 'render';
128
+ readonly session: string;
129
+ readonly key?: ResourceReadKey;
130
+ } | {
131
+ readonly kind: 'raw';
132
+ readonly uri: string;
133
+ };
134
+ /**
135
+ * What one probe's read MUST produce. CLOSED vocabulary — see the
136
+ * module docstring for what each arm deliberately leaves ungraded.
137
+ */
138
+ export type ResourceReadExpectation = {
139
+ readonly kind: 'typed-error';
140
+ /**
141
+ * The canonical number. `NOT_FOUND` rides on the resource-missing
142
+ * number; the other three ride on the mount-unavailable one. Both
143
+ * are pinned as literals in the case JSON so a rename that moved
144
+ * the wire fails here rather than passing against a constant.
145
+ */
146
+ readonly jsonRpcCode: number;
147
+ readonly dataCode: ResourceReadErrorCodeDecl;
148
+ /**
149
+ * Assert `error.data` carries NO `detail` key. Normative for
150
+ * `NOT_FOUND`, whose body must not vary; not authored elsewhere,
151
+ * because `detail` is optional context a conformant server may or
152
+ * may not attach.
153
+ */
154
+ readonly detailAbsent?: boolean;
155
+ } | {
156
+ /**
157
+ * An error the resource-read classification does not reach:
158
+ * `data` carries no resource-read code.
159
+ *
160
+ * The NUMBER is deliberately not pinned — not even negatively.
161
+ * MCP assigns the resource-missing number to a `resources/read`
162
+ * of a URI the server does not serve, so a framework that maps
163
+ * every unrecognized URI onto it is correct, and banning that
164
+ * number here would fail it forever. The classification is what
165
+ * separates the two cases, and it is enough: a genuine miss
166
+ * carries one, a malformed URI carries none.
167
+ */
168
+ readonly kind: 'outside-typed-set';
169
+ } | {
170
+ /** A result whose contents declare a delivery channel. */
171
+ readonly kind: 'live-mount';
172
+ };
173
+ /** One read within a case. */
174
+ export interface ResourceReadProbe {
175
+ /** Name, unique within the case. Referenced by `indistinguishable`. */
176
+ readonly as: string;
177
+ readonly locator: ResourceReadLocator;
178
+ readonly expect: ResourceReadExpectation;
179
+ }
180
+ /**
181
+ * One resource-read conformance case. Authored as JSON under
182
+ * `./cases/`, consumed via {@link resourceReadCases}, graded by
183
+ * {@link runResourceReadConformance}.
184
+ *
185
+ * The shape IS the public API — additive changes only.
186
+ */
187
+ export interface ResourceReadConformanceCase {
188
+ /** Unique case name. MUST match the JSON filename without `.json`. */
189
+ readonly name: string;
190
+ /** Which obligation this case proves. */
191
+ readonly description: string;
192
+ /** The deployment shape the driver brings up. */
193
+ readonly server: ResourceReadServerShape;
194
+ /** Whose read this is. */
195
+ readonly caller: ResourceReadCaller;
196
+ /** State installed before the reads. May be empty. */
197
+ readonly seeds: readonly ResourceReadSeed[];
198
+ /** The reads, dispatched in order against the one prepared server. */
199
+ readonly reads: readonly ResourceReadProbe[];
200
+ /**
201
+ * Probe names whose RAW error frames MUST be byte-identical.
202
+ *
203
+ * This is the disclosure obligation stated positively: a read of a
204
+ * locator the caller may not see and a read of one that never existed
205
+ * must be the same bytes, or the read is an existence oracle for
206
+ * other callers' renders. Compared on the serialized frames with only
207
+ * the session segments normalized away — a locator is caller-supplied
208
+ * and a server that echoes it back is caught by `disclosesNothing`,
209
+ * not excused here.
210
+ */
211
+ readonly indistinguishable?: readonly string[];
212
+ /**
213
+ * Literal substrings that MUST NOT appear anywhere in any error frame
214
+ * this case produces. The values a refusal would leak if a diagnostic
215
+ * escaped into `message` or `detail`.
216
+ */
217
+ readonly disclosesNothing?: readonly string[];
218
+ }
219
+ /** What the driver is asked to bring up. */
220
+ export interface ResourceReadScenario {
221
+ /** The case being prepared — for the driver's own diagnostics. */
222
+ readonly caseName: string;
223
+ readonly server: ResourceReadServerShape;
224
+ readonly caller: ResourceReadCaller;
225
+ readonly seeds: readonly ResourceReadSeed[];
226
+ }
227
+ /**
228
+ * The delivery-channel fields of the render meta a successful read
229
+ * projects onto its contents.
230
+ *
231
+ * Narrowed to what the invariant needs: the kit asks "can this be
232
+ * mounted", not "what does it look like". A driver reports these off
233
+ * whatever its shell carries — the projection is protocol surface, the
234
+ * markup that transports it is not.
235
+ */
236
+ export interface ResourceReadRenderMeta {
237
+ /** A fetchable component URL — the fetched static delivery channel. */
238
+ readonly codeUrl?: string;
239
+ /** Base64 component source — the inline static delivery channel. */
240
+ readonly codeB64?: string;
241
+ /** The live channel's endpoint. Only a channel WITH a token. */
242
+ readonly wsUrl?: string;
243
+ /** The live channel's token. Only a channel WITH an endpoint. */
244
+ readonly wsToken?: string;
245
+ /** A server-emitted system card, which carries its own content. */
246
+ readonly kind?: string;
247
+ }
248
+ /** The raw JSON-RPC error body a server put on the wire. */
249
+ export interface JsonRpcErrorFrame {
250
+ readonly code: number;
251
+ readonly message: string;
252
+ readonly data?: unknown;
253
+ }
254
+ /** What one read produced. */
255
+ export type ResourceReadOutcome = {
256
+ readonly kind: 'mount';
257
+ readonly renderMeta: ResourceReadRenderMeta;
258
+ } | {
259
+ readonly kind: 'error';
260
+ readonly error: JsonRpcErrorFrame;
261
+ };
262
+ /** A server brought up in a declared shape, ready to be read. */
263
+ export interface PreparedResourceReadScenario {
264
+ /**
265
+ * Read one locator. MUST resolve — a protocol-level failure is
266
+ * `{kind: 'error'}` carrying the RAW frame, not a throw. A throw is
267
+ * graded as a FAIL, since the read is the thing under test.
268
+ *
269
+ * Honest-grade contract: the reported outcome MUST be what the server
270
+ * really produced. A driver that fabricates a passing outcome is
271
+ * cheating its own conformance audit — the implementer's integrity to
272
+ * keep, exactly as with every other adapter the kit defines.
273
+ */
274
+ read(uri: string): Promise<ResourceReadOutcome>;
275
+ /**
276
+ * Keys the server computed for this case's `registered-blueprint`
277
+ * seeds, by their `as` name. Required whenever a probe references
278
+ * one; a case whose reference is unresolved SKIPS, because the kit
279
+ * cannot construct the locator it was supposed to read.
280
+ */
281
+ readonly registeredKeys?: Readonly<Record<string, string>>;
282
+ /** Tear the scenario down. Invoked after every case, pass or fail. */
283
+ dispose?(): Promise<void>;
284
+ }
285
+ /**
286
+ * Bring up a server in the declared shape. Throwing signals "I cannot
287
+ * express this scenario" and the runner records a SKIP with the
288
+ * message — never a pass.
289
+ */
290
+ export type ResourceReadScenarioDriver = (scenario: ResourceReadScenario) => Promise<PreparedResourceReadScenario>;
291
+ /**
292
+ * Every resource-read case the kit ships, in deterministic order: the
293
+ * four typed classes, then the disclosure fusions, then the boundary of
294
+ * the classification, then the three mount cases.
295
+ */
296
+ export declare const resourceReadCases: readonly ResourceReadConformanceCase[];
297
+ /** The resource URI every render locator hangs off. */
298
+ export declare const GGUI_RENDER_RESOURCE_URI = "ui://ggui/render";
299
+ /**
300
+ * Build the URI a probe reads. The kit owns the grammar so no case
301
+ * spells a well-formed locator out by hand; a `raw` locator passes
302
+ * through verbatim, which is the point of that arm.
303
+ */
304
+ export declare function renderLocatorUri(locator: ResourceReadLocator, registeredKeys?: Readonly<Record<string, string>>): string;
305
+ /**
306
+ * Does this render meta carry enough to paint something? One of the
307
+ * four delivery channels a runtime knows: a fetchable static component
308
+ * URL, inline base64 component source, a live channel, or a
309
+ * server-emitted system card.
310
+ *
311
+ * The live channel needs BOTH halves — an endpoint with no token cannot
312
+ * be opened, and a token with no endpoint has nowhere to go — so a
313
+ * half-declared one is not a channel.
314
+ */
315
+ export declare function declaresDeliveryChannel(meta: ResourceReadRenderMeta): boolean;
316
+ /** One obligation a server under test did not meet. */
317
+ export interface ResourceReadConformanceFailure {
318
+ /** The case that failed. */
319
+ readonly name: string;
320
+ /** The probe whose read produced it, when the failure is probe-scoped. */
321
+ readonly probe?: string;
322
+ /** Which obligation was violated, in the catalog's own words. */
323
+ readonly obligation: string;
324
+ readonly expected: unknown;
325
+ readonly actual: unknown;
326
+ readonly message: string;
327
+ }
328
+ /** One case the kit could not grade, and why. */
329
+ export interface ResourceReadConformanceSkip {
330
+ readonly name: string;
331
+ readonly reason: string;
332
+ }
333
+ /** Outcome of grading a server against the catalog. */
334
+ export interface ResourceReadConformanceResult {
335
+ /** Names of cases the server satisfied. */
336
+ readonly passed: readonly string[];
337
+ /** Cases the server got wrong — at most one entry per case. */
338
+ readonly failed: readonly ResourceReadConformanceFailure[];
339
+ /** Cases the kit could not observe. Never a pass, never a fail. */
340
+ readonly skipped: readonly ResourceReadConformanceSkip[];
341
+ }
342
+ /** Options for {@link runResourceReadConformance}. */
343
+ export interface RunResourceReadConformanceOptions {
344
+ /** Grade only these case names. Useful when debugging one obligation. */
345
+ readonly only?: readonly string[];
346
+ }
347
+ /**
348
+ * Grade a server against the catalog.
349
+ *
350
+ * One scenario is prepared per case, every probe is read against it in
351
+ * order, then the cross-probe obligations are checked. A case
352
+ * contributes at most one failure — the first obligation it broke —
353
+ * so the result reads as one verdict per case.
354
+ *
355
+ * A conformant server produces an empty `failed` array. An empty
356
+ * `passed` array is NOT success: a run where every case skipped proves
357
+ * nothing, and callers should treat it the way the WebSocket runner's
358
+ * consumers already do.
359
+ */
360
+ export declare function runResourceReadConformance(drive: ResourceReadScenarioDriver, options?: RunResourceReadConformanceOptions): Promise<ResourceReadConformanceResult>;
361
+ /**
362
+ * Validating parse of one authored case.
363
+ *
364
+ * The input is `unknown` BY DESIGN — this function IS the trust
365
+ * boundary, so it never leans on the static union it produces evidence
366
+ * for. The catalog's JSON enters the type system through a compile-time
367
+ * cast (tsc widens JSON-module string literals), which means the static
368
+ * type is the claim being checked here, not support for it. Same
369
+ * posture as the WebSocket runner's `parseSetupStep`.
370
+ *
371
+ * An unknown seed kind, locator kind, expectation kind or
372
+ * classification is a CASE-AUTHORING error: the runner throws, aborting
373
+ * the run loudly. It is never a skip and never a fail — those verdicts
374
+ * describe the server under test, not the catalog.
375
+ *
376
+ * Exported for the kit's own meta-tests and reachable from the
377
+ * `./resource-read-conformance` subpath, but NOT re-exported from the
378
+ * package root — the runner calls it for you, and a consumer needing it
379
+ * directly is authoring their own catalog rather than grading against
380
+ * this one.
381
+ */
382
+ export declare function parseCase(input: unknown): ResourceReadConformanceCase;
383
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resource-read-conformance/index.ts"],"names":[],"mappings":"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"}