@ggui-ai/protocol 0.17.0 → 0.19.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/dist/gadgets/stdlib-gadgets.d.ts +1 -1
- package/dist/gadgets/stdlib-gadgets.js +1 -1
- package/dist/integrations/mcp-apps.d.ts +69 -0
- package/dist/integrations/mcp-apps.d.ts.map +1 -1
- package/dist/integrations/mcp-apps.js +44 -0
- package/dist/schemas/app-generation-profile.d.ts +61 -0
- package/dist/schemas/app-generation-profile.d.ts.map +1 -1
- package/dist/schemas/app-generation-profile.js +47 -0
- package/dist/schemas/app-theme.d.ts +228 -0
- package/dist/schemas/app-theme.d.ts.map +1 -1
- package/dist/schemas/app-theme.js +151 -0
- package/dist/schemas/data-contract.d.ts +46 -0
- package/dist/schemas/data-contract.d.ts.map +1 -1
- package/dist/schemas/data-contract.js +176 -0
- package/dist/schemas/mcp.d.ts +9 -3
- package/dist/schemas/mcp.d.ts.map +1 -1
- package/dist/schemas/mcp.js +10 -4
- package/dist/types/data-contract.d.ts +17 -1
- package/dist/types/data-contract.d.ts.map +1 -1
- package/dist/version.d.ts +24 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +24 -1
- package/package.json +1 -1
|
@@ -240,6 +240,22 @@ export const appThemeReadSchema = z.object(appThemeSchema.shape);
|
|
|
240
240
|
* the top-level members that were stripped (payload order, `[]` when none),
|
|
241
241
|
* or the issues in `path: message` form when the theme is refused for a
|
|
242
242
|
* reason the write door would also refuse.
|
|
243
|
+
*
|
|
244
|
+
* TWO READ PATHS, OPPOSITE OBLIGATIONS — they sit next to each other and
|
|
245
|
+
* they are NOT the same door (ggui#1124; do not "tidy" them into one):
|
|
246
|
+
*
|
|
247
|
+
* **a read whose purpose is to INTERPRET state strips unknown members
|
|
248
|
+
* and names what it stripped; a read whose purpose is to REPRODUCE
|
|
249
|
+
* state must not strip at all.**
|
|
250
|
+
*
|
|
251
|
+
* This function is the INTERPRET side — a server painting a theme, an
|
|
252
|
+
* operator surface rendering one — and a reader must not be handed data it
|
|
253
|
+
* cannot validate.
|
|
254
|
+
* The REPRODUCE side is a writer's CARRY path, which receives the stored
|
|
255
|
+
* document VERBATIM, including members this release does not name: its job
|
|
256
|
+
* is fidelity, not interpretation. Applying THIS strip to a carry path is
|
|
257
|
+
* the ggui#1124 defect exactly — the writer carries a stripped document,
|
|
258
|
+
* writes it back, and destroys the members the belt exists to protect.
|
|
243
259
|
*/
|
|
244
260
|
export function parseAppThemeAtReadDoor(input) {
|
|
245
261
|
const r = appThemeReadSchema.safeParse(input);
|
|
@@ -258,9 +274,144 @@ export function parseAppThemeAtReadDoor(input) {
|
|
|
258
274
|
* `errorInfo`, the MCP ops door's `{ ok: false }` structured content. A
|
|
259
275
|
* discriminated union by key — exactly one of the four.
|
|
260
276
|
*/
|
|
277
|
+
/**
|
|
278
|
+
* The CARRY read — the REPRODUCE side of the two-read-paths rule stated on
|
|
279
|
+
* {@link parseAppThemeAtReadDoor} (ggui#1155).
|
|
280
|
+
*
|
|
281
|
+
* A theme READ exists so that a writer can carry the stored document forward
|
|
282
|
+
* and write it back. That reader's job is fidelity: it MUST return the stored
|
|
283
|
+
* document VERBATIM — every top-level member, including members this release
|
|
284
|
+
* does not name, plus the stored attestation. Routing it through the
|
|
285
|
+
* INTERPRET door instead would strip exactly the members the writer is
|
|
286
|
+
* obliged to carry, and the very next write would be refused by the
|
|
287
|
+
* ggui#1124 guard as `wouldDrop` — the door built to protect those members
|
|
288
|
+
* catching the door that dropped them. That is the defect this schema
|
|
289
|
+
* exists to make impossible rather than merely noticed.
|
|
290
|
+
*
|
|
291
|
+
* So this is a SHAPE check, not a strip: the members this release names are
|
|
292
|
+
* validated exactly as the write door validates them (a bad token is still
|
|
293
|
+
* invalid, not carried), and everything else passes through untouched.
|
|
294
|
+
* Never `.strict()`, never the stripping read door.
|
|
295
|
+
*/
|
|
296
|
+
export const appThemeCarrySchema = z.object(appThemeSchema.shape).passthrough();
|
|
297
|
+
/**
|
|
298
|
+
* What a theme GET promises (ggui#1155) — the DOOR's emit-side contract.
|
|
299
|
+
*
|
|
300
|
+
* `theme` is the stored document verbatim ({@link appThemeCarrySchema}) or
|
|
301
|
+
* `null` when the app has no theme. `interpreted.stripped`, when present,
|
|
302
|
+
* names the top-level members an INTERPRET reader on THIS release would have
|
|
303
|
+
* dropped — computed beside the document, never applied to it — so a carrier
|
|
304
|
+
* can see the gap without the document being altered.
|
|
305
|
+
*
|
|
306
|
+
* Presence ⇔ at least one name: `stripped` is `.min(1)`, so
|
|
307
|
+
* `{ interpreted: { stripped: [] } }` is INVALID rather than a second way to
|
|
308
|
+
* say "nothing was stripped". Two representations of nothing is exactly the
|
|
309
|
+
* ambiguity a reader keying on presence cannot be asked to resolve. The
|
|
310
|
+
* response is `.strict()` because this is what the DOOR emits — a reader on
|
|
311
|
+
* an older release parses it with its own tolerant read, per §3.6; this
|
|
312
|
+
* schema states the promise, not the reader's demand.
|
|
313
|
+
*
|
|
314
|
+
* Observable violation: a response whose `theme` carries fewer top-level
|
|
315
|
+
* members than the stored row holds; or `interpreted` present with nothing
|
|
316
|
+
* in it. The conformance kit's `app-theme-carry` forward case grades both.
|
|
317
|
+
*/
|
|
318
|
+
export const appThemeGetResponseSchema = z
|
|
319
|
+
.object({
|
|
320
|
+
theme: appThemeCarrySchema.nullable(),
|
|
321
|
+
interpreted: z
|
|
322
|
+
.object({ stripped: z.array(z.string().min(1)).min(1) })
|
|
323
|
+
.strict()
|
|
324
|
+
.optional(),
|
|
325
|
+
})
|
|
326
|
+
.strict();
|
|
327
|
+
/**
|
|
328
|
+
* The top-level members the STORED theme holds that an incoming write does
|
|
329
|
+
* not carry — i.e. exactly what the write would destroy (ggui#1124).
|
|
330
|
+
*
|
|
331
|
+
* `putAppTheme` REPLACES the whole `theme` attribute (the shared writer's
|
|
332
|
+
* `SET theme = :theme`), so a writer that composes fewer members than the
|
|
333
|
+
* stored document silently deletes the rest. On 2026-09-10, 26 rows lost
|
|
334
|
+
* their theme outright and ~20 more lost members nobody can now name,
|
|
335
|
+
* because a writer believed the door merged. **The rule lives here because
|
|
336
|
+
* what makes a write destructive is a fact about the wire shape, not about
|
|
337
|
+
* a storage engine** — the shared writer enforces it at the choke point, so
|
|
338
|
+
* safety does not depend on each door remembering.
|
|
339
|
+
*
|
|
340
|
+
* Deliberately total and deliberately dumb: it compares TOP-LEVEL keys and
|
|
341
|
+
* nothing else. A changed VALUE is not a drop. An explicit `undefined` IS a
|
|
342
|
+
* drop, because absent and undefined are the same wire fact. A member this
|
|
343
|
+
* release does not name still counts — that is the whole point, since a
|
|
344
|
+
* strict schema cannot see the member a later release wrote, and a
|
|
345
|
+
* whole-column write is exactly what destroys it. Given anything that is not
|
|
346
|
+
* a plain object on either side it reports nothing rather than inventing a
|
|
347
|
+
* drop: a guard that guesses is worse than one that abstains.
|
|
348
|
+
*
|
|
349
|
+
* Parties: the SHARED WRITER calls this before writing and refuses a
|
|
350
|
+
* non-empty result with {@link appThemeRefusalBodySchema}'s `wouldDrop` arm,
|
|
351
|
+
* naming the members; the WRITER retries carrying them (read the stored
|
|
352
|
+
* document, carry what it does not own by REST OMISSION — never by
|
|
353
|
+
* enumerating what it knows — and hash after the carry). Observable
|
|
354
|
+
* violation: a stored member absent after a write that did not name it.
|
|
355
|
+
*/
|
|
356
|
+
export function appThemeDroppedMembers(stored, incoming) {
|
|
357
|
+
if (!isPlainObject(stored) || !isPlainObject(incoming))
|
|
358
|
+
return [];
|
|
359
|
+
return Object.keys(stored).filter((key) => incoming[key] === undefined);
|
|
360
|
+
}
|
|
361
|
+
function isPlainObject(value) {
|
|
362
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* The ONE wording for a `wouldDrop` refusal (ggui#1124, founder's ruling
|
|
366
|
+
* 2026-09-16: *"the refusal names the clear-then-set path"*). Exported so
|
|
367
|
+
* every door that refuses a destructive theme write carries the SAME words
|
|
368
|
+
* rather than paraphrasing them — a writer meeting two different
|
|
369
|
+
* explanations of one rule learns neither.
|
|
370
|
+
*
|
|
371
|
+
* Why the wording is part of the contract and not decoration: **a refusal
|
|
372
|
+
* with no compliance path converts "we protected your data" into "we broke
|
|
373
|
+
* your write", and the writer cannot tell which happened to them.** Naming
|
|
374
|
+
* the path collapses that ambiguity — it turns the refusal from a VERDICT
|
|
375
|
+
* into an INSTRUCTION. So the text MUST do three things, and the tests pin
|
|
376
|
+
* each: name the members that would have been dropped (so a writer can see
|
|
377
|
+
* whether they meant it), give the carry path for a writer who did not, and
|
|
378
|
+
* give the clear-then-set path for a writer who did — stating plainly that
|
|
379
|
+
* the app has no theme between those two writes, because that is the kind
|
|
380
|
+
* of fact a caller must not discover in production.
|
|
381
|
+
*
|
|
382
|
+
* The CLEAR half names the mechanism outright — `theme: null` — because it
|
|
383
|
+
* is true on EVERY door that writes a theme (ggui#1145): the shared writer
|
|
384
|
+
* routes an explicit `null` to one named removal before validation, on the
|
|
385
|
+
* PUT, the PATCH, the ops tool and the replace-mode push alike. For one
|
|
386
|
+
* release this sentence hedged by door (ggui#1124's `cb87cf0bc`), because
|
|
387
|
+
* `null` cleared on one door of four and a writer following a universal
|
|
388
|
+
* instruction got a second refusal on the other three; that hedge was a
|
|
389
|
+
* workaround for the asymmetry, never the contract, and it left with the
|
|
390
|
+
* asymmetry. The CARRY half needs no such history: it is implementable on
|
|
391
|
+
* every door, which is why it is stated first and unconditionally.
|
|
392
|
+
*/
|
|
393
|
+
export function appThemeWouldDropRefusalText(wouldDrop) {
|
|
394
|
+
if (wouldDrop.length === 0) {
|
|
395
|
+
throw new Error('appThemeWouldDropRefusalText: a refusal must name at least one dropped member');
|
|
396
|
+
}
|
|
397
|
+
const members = wouldDrop.join(', ');
|
|
398
|
+
return (`this write would drop stored theme members it does not carry — [${members}]. ` +
|
|
399
|
+
`If you did not mean to drop them: read the stored theme and carry every member this write does not own, ` +
|
|
400
|
+
`then recompute the attestation over the result. ` +
|
|
401
|
+
`If you DID mean to drop them: send \`theme: null\` to clear the theme, then write the theme you want — ` +
|
|
402
|
+
`the app has NO theme between those two writes.`);
|
|
403
|
+
}
|
|
261
404
|
export const appThemeRefusalBodySchema = z.union([
|
|
262
405
|
z.object({ uncovered: z.object({ light: z.array(z.string()), dark: z.array(z.string()) }).strict() }).strict(),
|
|
263
406
|
z.object({ unknown: z.object({ light: z.array(z.string()), dark: z.array(z.string()) }).strict() }).strict(),
|
|
264
407
|
z.object({ overlayHash: z.literal('mismatch') }).strict(),
|
|
265
408
|
z.object({ refused: z.literal('v1 shape') }).strict(),
|
|
409
|
+
/**
|
|
410
|
+
* The write would have DESTROYED stored members it did not carry
|
|
411
|
+
* (ggui#1124) — the refusal names them so the writer can carry them on
|
|
412
|
+
* the retry. A refusal that named nothing would be an error message
|
|
413
|
+
* instead of a teaching one, which is why the list may not be empty:
|
|
414
|
+
* naming the members is how the console got fixed.
|
|
415
|
+
*/
|
|
416
|
+
z.object({ wouldDrop: z.array(z.string().min(1)).min(1) }).strict(),
|
|
266
417
|
]);
|
|
@@ -107,6 +107,7 @@ export declare const actionEntrySchema: z.ZodObject<{
|
|
|
107
107
|
example: z.ZodOptional<z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>;
|
|
108
108
|
icon: z.ZodOptional<z.ZodString>;
|
|
109
109
|
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
110
|
+
oneShot: z.ZodOptional<z.ZodBoolean>;
|
|
110
111
|
nextStep: z.ZodOptional<z.ZodString>;
|
|
111
112
|
}, z.core.$strict>;
|
|
112
113
|
/** {@link ActionSpec} — flat `Record<name, ActionEntry>`. */
|
|
@@ -117,6 +118,7 @@ export declare const actionSpecSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
|
117
118
|
example: z.ZodOptional<z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>;
|
|
118
119
|
icon: z.ZodOptional<z.ZodString>;
|
|
119
120
|
confirm: z.ZodOptional<z.ZodBoolean>;
|
|
121
|
+
oneShot: z.ZodOptional<z.ZodBoolean>;
|
|
120
122
|
nextStep: z.ZodOptional<z.ZodString>;
|
|
121
123
|
}, z.core.$strict>>;
|
|
122
124
|
/** {@link StreamChannelEntry} — per-channel metadata in a {@link StreamSpec}. */
|
|
@@ -789,5 +791,49 @@ export declare const DATA_CONTRACT_MINIMAL_EXAMPLE: {
|
|
|
789
791
|
};
|
|
790
792
|
};
|
|
791
793
|
};
|
|
794
|
+
/**
|
|
795
|
+
* The contract READ-door result (ggui#1115): the contract as this release
|
|
796
|
+
* can read it, plus the entry members it had to strip to get there.
|
|
797
|
+
*/
|
|
798
|
+
export type DataContractReadDoorResult = {
|
|
799
|
+
readonly ok: true;
|
|
800
|
+
readonly contract: DataContract;
|
|
801
|
+
readonly stripped: readonly string[];
|
|
802
|
+
} | {
|
|
803
|
+
readonly ok: false;
|
|
804
|
+
readonly issues: readonly string[];
|
|
805
|
+
};
|
|
806
|
+
/**
|
|
807
|
+
* Parse a STORED contract at a READ door (ggui#1115).
|
|
808
|
+
*
|
|
809
|
+
* `dataContractSchema`'s outer object is `.passthrough()`, so a whole new
|
|
810
|
+
* top-level spec was never the hazard — but its ENTRY schemas are
|
|
811
|
+
* `.strict()`, and contracts are STORED (blueprint rows, artifact
|
|
812
|
+
* manifests). So a release that adds a member to an action / prop / stream /
|
|
813
|
+
* context / tool ENTRY makes every older reader fail the parse, and a reader
|
|
814
|
+
* that turns a failed parse into "no candidate" drops the row from the match
|
|
815
|
+
* set: the generator runs again, a different card is produced, and nothing
|
|
816
|
+
* anywhere says a stored blueprint was skipped. A silent cache miss, not a
|
|
817
|
+
* failure — which is why this door exists and why it NAMES what it stripped.
|
|
818
|
+
*
|
|
819
|
+
* WRITE doors keep entry strictness and MUST: it is what catches a typo in a
|
|
820
|
+
* generated contract before it is stored, and relaxing it globally would
|
|
821
|
+
* trade a silent cache miss for silently stored garbage. The asymmetry is by
|
|
822
|
+
* DOOR, exactly as for `AppTheme` (`schemas/app-theme.ts`, VERSION-POLICY
|
|
823
|
+
* §3.6): this is the INTERPRET side, so it strips and reports; a read whose
|
|
824
|
+
* purpose is to REPRODUCE state (a writer's carry path) must not strip at
|
|
825
|
+
* all.
|
|
826
|
+
*
|
|
827
|
+
* Everything the write door refuses is still refused — a missing required
|
|
828
|
+
* field, a wrong type, a malformed spec. Only members this release does not
|
|
829
|
+
* NAME are stripped, never members it finds INVALID.
|
|
830
|
+
*
|
|
831
|
+
* NOT COVERED, deliberately and named rather than discovered: the gadget
|
|
832
|
+
* family under `clientCapabilities`. Its descriptors are validated per row
|
|
833
|
+
* with their own salvage posture (`strictGadgetDescriptorSchema`), evolve on
|
|
834
|
+
* their own surface, and folding them in here would put two different
|
|
835
|
+
* evolution stories behind one door.
|
|
836
|
+
*/
|
|
837
|
+
export declare function parseDataContractAtReadDoor(input: unknown): DataContractReadDoorResult;
|
|
792
838
|
export declare const dataContractSchema: z.ZodType<DataContract>;
|
|
793
839
|
//# sourceMappingURL=data-contract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-contract.d.ts","sourceRoot":"","sources":["../../src/schemas/data-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACX,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAYhD,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAyC,CAAC;AAmB7F,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CA2BlD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;;;kBASjB,CAAC;AAEZ,sFAAsF;AACtF,eAAO,MAAM,eAAe;;;;;;;;;;kBAKjB,CAAC;AAEZ;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"data-contract.d.ts","sourceRoot":"","sources":["../../src/schemas/data-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -158,7 +158,83 @@ export const actionEntrySchema = z
|
|
|
158
158
|
schema: jsonSchemaSchema.optional(),
|
|
159
159
|
example: jsonValueSchema.optional(),
|
|
160
160
|
icon: z.string().optional(),
|
|
161
|
+
/**
|
|
162
|
+
* The author marks this action GRAVE (ggui#1112).
|
|
163
|
+
*
|
|
164
|
+
* ADVISORY, and honoured by exactly one party: `@ggui-ai/ui-gen`'s
|
|
165
|
+
* contract context renders it to the composing model as INFORMATION —
|
|
166
|
+
* *"the author marked this action grave enough to confirm before it
|
|
167
|
+
* fires"* — alongside `label`, `description`, `example` and `nextStep`.
|
|
168
|
+
* The model decides what to do with it. That is the same standing
|
|
169
|
+
* `nextStep` has: a declared field with a named consumer and no
|
|
170
|
+
* mechanical enforcer, which is legitimate as long as it says so.
|
|
171
|
+
*
|
|
172
|
+
* DO NOT promote it to a rule without re-measuring. Citing `confirm` in
|
|
173
|
+
* the generator's terminal-actions section MEASURED ZERO — two wordings,
|
|
174
|
+
* n = 4 each, a `save` action carrying `confirm: true` came back armed
|
|
175
|
+
* 0/4 and 0/4 (rnd, ggui#1108 narrowing). The finding that explains it:
|
|
176
|
+
* the field says GRAVITY, not at-most-once, and the model reads it that
|
|
177
|
+
* way. `confirm` asks BEFORE firing; {@link ActionEntry.oneShot} bounds
|
|
178
|
+
* HOW OFTEN it may fire. Siblings in intent, different questions, and an
|
|
179
|
+
* action may declare either, both or neither.
|
|
180
|
+
*
|
|
181
|
+
* Emitted today by the shipped system blueprints on destructive ops
|
|
182
|
+
* (`ggui_ops_revoke_connector_key`), so it is a live author signal and
|
|
183
|
+
* not a vestigial field.
|
|
184
|
+
*
|
|
185
|
+
* Observable violation: a contract declaring `confirm: true` whose
|
|
186
|
+
* rendered contract context omits the flag. (The pin for that belongs
|
|
187
|
+
* in `@ggui-ai/ui-gen` beside the renderer; this docblock names the
|
|
188
|
+
* criterion, not a test — a test name in a docblock is a claim about
|
|
189
|
+
* another package's tree, and this one once named a test that did
|
|
190
|
+
* not exist.)
|
|
191
|
+
*/
|
|
161
192
|
confirm: z.boolean().optional(),
|
|
193
|
+
/**
|
|
194
|
+
* This action may fire AT MOST ONCE per render (ggui#1108).
|
|
195
|
+
*
|
|
196
|
+
* DECLARED, never inferred — that is the whole design. The runtime
|
|
197
|
+
* cannot infer terminality; the server cannot tell a double-fire from a
|
|
198
|
+
* legitimate second "add item"; and the component cannot GUARANTEE it,
|
|
199
|
+
* because whether a generated control disables itself is decided afresh
|
|
200
|
+
* by a model on every generation. Only the contract's author knows, so
|
|
201
|
+
* the contract is where it is said.
|
|
202
|
+
*
|
|
203
|
+
* Obligations: the RUNTIME suppresses a second dispatch of a declared
|
|
204
|
+
* one-shot action for the render's lifetime — AND the suppression is
|
|
205
|
+
* NEVER SILENT: a suppressed dispatch leaves a named trace an operator
|
|
206
|
+
* can find (at minimum the runtime's diagnostic channel, carrying the
|
|
207
|
+
* `actionId` and `oneShot` as the reason), and it does NOT reach the
|
|
208
|
+
* agent as a dispatch. This is the rule `@ggui-ai/wire`'s dispatch
|
|
209
|
+
* dedup already holds for its own suppression, inherited here on
|
|
210
|
+
* purpose: a second gesture the runtime refuses to forward is an
|
|
211
|
+
* EVENT, not silence — otherwise a silent double-fire is replaced by a
|
|
212
|
+
* silent swallow, the same unobservable violation facing the other
|
|
213
|
+
* way. The RELAY never collapses distinct `actionId`s — two gestures
|
|
214
|
+
* are two facts and the relay stays honest about them; the AGENT
|
|
215
|
+
* treats `actionId` as an idempotency key for EVERY action, which buys
|
|
216
|
+
* at-most-once per DISPATCH (a replay, a re-delivered buffer) and
|
|
217
|
+
* explicitly NOT per intent, since a second gesture mints a new
|
|
218
|
+
* `actionId`.
|
|
219
|
+
*
|
|
220
|
+
* THE WINDOW, stated because "the render's lifetime" is ambiguous
|
|
221
|
+
* otherwise: a fresh `ggui_render` RE-ARMS the action; a `ggui_update`
|
|
222
|
+
* or props amend of the SAME render does NOT. So an agent re-sending
|
|
223
|
+
* props after a submit ("confirmed, here is your receipt") cannot
|
|
224
|
+
* silently re-arm a terminal action. A flow that legitimately
|
|
225
|
+
* re-submits either does not declare the action one-shot, or renders a
|
|
226
|
+
* new card — the declarer's choice, which is the point of declaring.
|
|
227
|
+
*
|
|
228
|
+
* Sibling, not a pair: `confirm` asks BEFORE firing; `oneShot` bounds
|
|
229
|
+
* how often it may fire. An action may be either, both or neither.
|
|
230
|
+
*
|
|
231
|
+
* Failure mode: a duplicated side effect — a confirm card that writes
|
|
232
|
+
* twice. Observable violation: two consume entries with distinct
|
|
233
|
+
* `actionId`s for the same declared one-shot action inside one render;
|
|
234
|
+
* or a second gesture on such an action that produced neither a consume
|
|
235
|
+
* entry NOR a named suppression trace.
|
|
236
|
+
*/
|
|
237
|
+
oneShot: z.boolean().optional(),
|
|
162
238
|
nextStep: z.string().min(1).optional(),
|
|
163
239
|
})
|
|
164
240
|
.strict();
|
|
@@ -687,6 +763,106 @@ export const DATA_CONTRACT_MINIMAL_EXAMPLE = {
|
|
|
687
763
|
filter: { schema: { type: 'string' }, default: 'all' },
|
|
688
764
|
},
|
|
689
765
|
};
|
|
766
|
+
function isEntryObject(value) {
|
|
767
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* Strip the keys of one ENTRY that this release does not name, recording the
|
|
771
|
+
* path of each. Returns the entry unchanged when there is nothing to strip,
|
|
772
|
+
* so an untouched contract keeps object identity where it can.
|
|
773
|
+
*/
|
|
774
|
+
function stripEntry(entry, known, path, stripped) {
|
|
775
|
+
if (!isEntryObject(entry))
|
|
776
|
+
return entry;
|
|
777
|
+
const extra = Object.keys(entry).filter((k) => !known.has(k));
|
|
778
|
+
if (extra.length === 0)
|
|
779
|
+
return entry;
|
|
780
|
+
const out = {};
|
|
781
|
+
for (const [k, v] of Object.entries(entry)) {
|
|
782
|
+
if (known.has(k))
|
|
783
|
+
out[k] = v;
|
|
784
|
+
else
|
|
785
|
+
stripped.push(`${path}.${k}`);
|
|
786
|
+
}
|
|
787
|
+
return out;
|
|
788
|
+
}
|
|
789
|
+
/** Strip every entry of a `Record<name, Entry>` map. */
|
|
790
|
+
function stripEntryMap(map, known, path, stripped) {
|
|
791
|
+
if (!isEntryObject(map))
|
|
792
|
+
return map;
|
|
793
|
+
const out = {};
|
|
794
|
+
for (const [name, entry] of Object.entries(map)) {
|
|
795
|
+
out[name] = stripEntry(entry, known, `${path}.${name}`, stripped);
|
|
796
|
+
}
|
|
797
|
+
return out;
|
|
798
|
+
}
|
|
799
|
+
/**
|
|
800
|
+
* Parse a STORED contract at a READ door (ggui#1115).
|
|
801
|
+
*
|
|
802
|
+
* `dataContractSchema`'s outer object is `.passthrough()`, so a whole new
|
|
803
|
+
* top-level spec was never the hazard — but its ENTRY schemas are
|
|
804
|
+
* `.strict()`, and contracts are STORED (blueprint rows, artifact
|
|
805
|
+
* manifests). So a release that adds a member to an action / prop / stream /
|
|
806
|
+
* context / tool ENTRY makes every older reader fail the parse, and a reader
|
|
807
|
+
* that turns a failed parse into "no candidate" drops the row from the match
|
|
808
|
+
* set: the generator runs again, a different card is produced, and nothing
|
|
809
|
+
* anywhere says a stored blueprint was skipped. A silent cache miss, not a
|
|
810
|
+
* failure — which is why this door exists and why it NAMES what it stripped.
|
|
811
|
+
*
|
|
812
|
+
* WRITE doors keep entry strictness and MUST: it is what catches a typo in a
|
|
813
|
+
* generated contract before it is stored, and relaxing it globally would
|
|
814
|
+
* trade a silent cache miss for silently stored garbage. The asymmetry is by
|
|
815
|
+
* DOOR, exactly as for `AppTheme` (`schemas/app-theme.ts`, VERSION-POLICY
|
|
816
|
+
* §3.6): this is the INTERPRET side, so it strips and reports; a read whose
|
|
817
|
+
* purpose is to REPRODUCE state (a writer's carry path) must not strip at
|
|
818
|
+
* all.
|
|
819
|
+
*
|
|
820
|
+
* Everything the write door refuses is still refused — a missing required
|
|
821
|
+
* field, a wrong type, a malformed spec. Only members this release does not
|
|
822
|
+
* NAME are stripped, never members it finds INVALID.
|
|
823
|
+
*
|
|
824
|
+
* NOT COVERED, deliberately and named rather than discovered: the gadget
|
|
825
|
+
* family under `clientCapabilities`. Its descriptors are validated per row
|
|
826
|
+
* with their own salvage posture (`strictGadgetDescriptorSchema`), evolve on
|
|
827
|
+
* their own surface, and folding them in here would put two different
|
|
828
|
+
* evolution stories behind one door.
|
|
829
|
+
*/
|
|
830
|
+
export function parseDataContractAtReadDoor(input) {
|
|
831
|
+
const issuesOf = (error) => error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
|
|
832
|
+
if (!isEntryObject(input)) {
|
|
833
|
+
const direct = dataContractSchema.safeParse(input);
|
|
834
|
+
return direct.success
|
|
835
|
+
? { ok: true, contract: direct.data, stripped: [] }
|
|
836
|
+
: { ok: false, issues: issuesOf(direct.error) };
|
|
837
|
+
}
|
|
838
|
+
const stripped = [];
|
|
839
|
+
const cleaned = { ...input };
|
|
840
|
+
const propsSpec = cleaned['propsSpec'];
|
|
841
|
+
if (isEntryObject(propsSpec)) {
|
|
842
|
+
cleaned['propsSpec'] = {
|
|
843
|
+
...propsSpec,
|
|
844
|
+
properties: stripEntryMap(propsSpec['properties'], new Set(Object.keys(propEntrySchema.shape)), 'propsSpec.properties', stripped),
|
|
845
|
+
};
|
|
846
|
+
}
|
|
847
|
+
cleaned['actionSpec'] = stripEntryMap(cleaned['actionSpec'], new Set(Object.keys(actionEntrySchema.shape)), 'actionSpec', stripped);
|
|
848
|
+
cleaned['streamSpec'] = stripEntryMap(cleaned['streamSpec'], new Set(Object.keys(streamChannelEntrySchema.shape)), 'streamSpec', stripped);
|
|
849
|
+
cleaned['contextSpec'] = stripEntryMap(cleaned['contextSpec'], new Set(Object.keys(contextEntrySchema.shape)), 'contextSpec', stripped);
|
|
850
|
+
const agentCapabilities = cleaned['agentCapabilities'];
|
|
851
|
+
if (isEntryObject(agentCapabilities)) {
|
|
852
|
+
cleaned['agentCapabilities'] = {
|
|
853
|
+
...agentCapabilities,
|
|
854
|
+
tools: stripEntryMap(agentCapabilities['tools'], new Set(Object.keys(agentToolEntrySchema.shape)), 'agentCapabilities.tools', stripped),
|
|
855
|
+
};
|
|
856
|
+
}
|
|
857
|
+
for (const key of ['actionSpec', 'streamSpec', 'contextSpec']) {
|
|
858
|
+
if (cleaned[key] === undefined)
|
|
859
|
+
delete cleaned[key];
|
|
860
|
+
}
|
|
861
|
+
const parsed = dataContractSchema.safeParse(cleaned);
|
|
862
|
+
return parsed.success
|
|
863
|
+
? { ok: true, contract: parsed.data, stripped }
|
|
864
|
+
: { ok: false, issues: issuesOf(parsed.error) };
|
|
865
|
+
}
|
|
690
866
|
export const dataContractSchema = z
|
|
691
867
|
.object({
|
|
692
868
|
propsSpec: propsSpecSchema
|
package/dist/schemas/mcp.d.ts
CHANGED
|
@@ -145,8 +145,9 @@ export declare const handshakeInputSchema: z.ZodObject<{
|
|
|
145
145
|
* - `synth` → render `{handshakeId, props}` (omit `override`) to gen against the amended contract.
|
|
146
146
|
*
|
|
147
147
|
* Any origin → render `{handshakeId, props, override: {contract?, variance?}}`
|
|
148
|
-
* to re-aim the suggestion — `override.contract`
|
|
149
|
-
* contract; `override.variance` re-aims the
|
|
148
|
+
* to re-aim the suggestion — `override.contract` re-aims to a fresh
|
|
149
|
+
* contract (resolved at its own key); `override.variance` re-aims the
|
|
150
|
+
* variant axis.
|
|
150
151
|
*
|
|
151
152
|
* Wire-output is intentionally lean. The handler carries `target`,
|
|
152
153
|
* `alternatives`, `contractHash`, `serverCapabilities` on its internal
|
|
@@ -192,7 +193,12 @@ export declare const handshakeOutputSchema: z.ZodObject<{
|
|
|
192
193
|
* - ACCEPT (omit `override`) reuses the agreed contract + the proposed
|
|
193
194
|
* variance, resolving the proposed `(contractKey, variantKey)`.
|
|
194
195
|
* - `override.contract` re-drafts the contract (STRICT — must already
|
|
195
|
-
* conform; the server does not repair it) and
|
|
196
|
+
* conform; the server does not repair it) and re-resolves the
|
|
197
|
+
* effective `(blueprintKey(newContract), variantKey)` — reuse if a
|
|
198
|
+
* blueprint exists there, else cold-gen registered under that key.
|
|
199
|
+
* An override is a RE-AIM, never a request for a fresh generation
|
|
200
|
+
* (ggui#1131); `forceCreate` on the handshake is the only lever
|
|
201
|
+
* that forces one.
|
|
196
202
|
* - `override.variance` re-aims the variant axis while keeping the
|
|
197
203
|
* agreed contract, re-resolving the effective
|
|
198
204
|
* `(contractKey, variantKey(newVariance))`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/schemas/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;CAgBpB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;iBAA8B,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,eAAO,MAAM,eAAe;;;;;iBAA2B,CAAC;AAExD,eAAO,MAAM,oBAAoB;;CAKvB,CAAC;AAEX,eAAO,MAAM,qBAAqB;;iBAAiC,CAAC;AAEpE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB;;CAK5B,CAAC;AAEX,eAAO,MAAM,0BAA0B;;iBAAsC,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,IAAc,CAAC;AAE5D,eAAO,MAAM,iCAAiC,gCAE7C,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;CAwB7B,CAAC;AAEX,eAAO,MAAM,2BAA2B;;;;;iBAAuC,CAAC;AAEhF,eAAO,MAAM,yBAAyB;;CAO5B,CAAC;AAEX,eAAO,MAAM,0BAA0B;;iBAAsC,CAAC;AAE9E,eAAO,MAAM,kBAAkB,IAAc,CAAC;AAE9C,eAAO,MAAM,mBAAmB,gCAA+B,CAAC;AAahE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,oBAAoB;;;;kBA0BtB,CAAC;AAEZ
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/schemas/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/mcp.js
CHANGED
|
@@ -203,8 +203,9 @@ export const handshakeInputSchema = z.object({
|
|
|
203
203
|
* - `synth` → render `{handshakeId, props}` (omit `override`) to gen against the amended contract.
|
|
204
204
|
*
|
|
205
205
|
* Any origin → render `{handshakeId, props, override: {contract?, variance?}}`
|
|
206
|
-
* to re-aim the suggestion — `override.contract`
|
|
207
|
-
* contract; `override.variance` re-aims the
|
|
206
|
+
* to re-aim the suggestion — `override.contract` re-aims to a fresh
|
|
207
|
+
* contract (resolved at its own key); `override.variance` re-aims the
|
|
208
|
+
* variant axis.
|
|
208
209
|
*
|
|
209
210
|
* Wire-output is intentionally lean. The handler carries `target`,
|
|
210
211
|
* `alternatives`, `contractHash`, `serverCapabilities` on its internal
|
|
@@ -262,7 +263,12 @@ export const handshakeOutputSchema = z.object({
|
|
|
262
263
|
* - ACCEPT (omit `override`) reuses the agreed contract + the proposed
|
|
263
264
|
* variance, resolving the proposed `(contractKey, variantKey)`.
|
|
264
265
|
* - `override.contract` re-drafts the contract (STRICT — must already
|
|
265
|
-
* conform; the server does not repair it) and
|
|
266
|
+
* conform; the server does not repair it) and re-resolves the
|
|
267
|
+
* effective `(blueprintKey(newContract), variantKey)` — reuse if a
|
|
268
|
+
* blueprint exists there, else cold-gen registered under that key.
|
|
269
|
+
* An override is a RE-AIM, never a request for a fresh generation
|
|
270
|
+
* (ggui#1131); `forceCreate` on the handshake is the only lever
|
|
271
|
+
* that forces one.
|
|
266
272
|
* - `override.variance` re-aims the variant axis while keeping the
|
|
267
273
|
* agreed contract, re-resolving the effective
|
|
268
274
|
* `(contractKey, variantKey(newVariance))`.
|
|
@@ -745,7 +751,7 @@ export const renderOutputSchema = z.object({
|
|
|
745
751
|
blueprintId: z
|
|
746
752
|
.string()
|
|
747
753
|
.optional()
|
|
748
|
-
.describe('Opaque id of the materialised component for this render. On
|
|
754
|
+
.describe('Opaque id of the materialised component for this render. On every reuse path (accept a cache-origin proposal, or an override — contract and/or variance — that resolves to an existing blueprint at its key) it is the stored id; equal ids across renders mean the same stored component. A fresh id is minted only when nothing is stored at the resolved key, or when the handshake carried forceCreate.'),
|
|
749
755
|
variantKey: z
|
|
750
756
|
.string()
|
|
751
757
|
.optional()
|
|
@@ -266,6 +266,16 @@ export interface ActionEntry {
|
|
|
266
266
|
description?: string;
|
|
267
267
|
/** Label shown on the UI element */
|
|
268
268
|
label: string;
|
|
269
|
+
/**
|
|
270
|
+
* This action may fire AT MOST ONCE per render (ggui#1108) — declared by
|
|
271
|
+
* the contract's author, never inferred, because only the author knows.
|
|
272
|
+
* The runtime suppresses a second dispatch for the render's lifetime — and
|
|
273
|
+
* names the suppression (never silent; it does not reach the agent as a
|
|
274
|
+
* dispatch): a fresh `ggui_render` re-arms it, a `ggui_update` of the same
|
|
275
|
+
* render does not. Sibling of `confirm` (which asks before firing), not a
|
|
276
|
+
* pair.
|
|
277
|
+
*/
|
|
278
|
+
oneShot?: boolean;
|
|
269
279
|
/**
|
|
270
280
|
* JSON Schema for the callback payload. Optional — actions without a
|
|
271
281
|
* `schema` have void payload (fire-and-forget).
|
|
@@ -298,7 +308,13 @@ export interface ActionEntry {
|
|
|
298
308
|
example?: JsonValue;
|
|
299
309
|
/** Icon hint (emoji or icon name) */
|
|
300
310
|
icon?: string;
|
|
301
|
-
/**
|
|
311
|
+
/**
|
|
312
|
+
* The author marks this action GRAVE (ggui#1112) — ADVISORY, not a rule.
|
|
313
|
+
* `@ggui-ai/ui-gen`'s contract context renders it to the composing model
|
|
314
|
+
* as information and the model decides; nothing enforces it mechanically,
|
|
315
|
+
* which is the same standing `nextStep` has. It asks BEFORE firing, where
|
|
316
|
+
* {@link ActionEntry.oneShot} bounds how OFTEN it may fire.
|
|
317
|
+
*/
|
|
302
318
|
confirm?: boolean;
|
|
303
319
|
/**
|
|
304
320
|
* OPTIONAL. Author-declared hint for the agent's next turn — the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-contract.d.ts","sourceRoot":"","sources":["../../src/types/data-contract.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"data-contract.d.ts","sourceRoot":"","sources":["../../src/types/data-contract.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -6,6 +6,29 @@
|
|
|
6
6
|
* schema change; the most recent change anchors {@link PROTOCOL_VERSION}.
|
|
7
7
|
*
|
|
8
8
|
* --------------------------------------------------------------------
|
|
9
|
+
* Theme CARRY read (2026-09-17, additive, ggui#1155 — MINOR, same draft
|
|
10
|
+
* stamp): `appThemeCarrySchema` / `AppThemeCarry` and
|
|
11
|
+
* `appThemeGetResponseSchema` / `AppThemeGetResponse` — the REPRODUCE side
|
|
12
|
+
* of the two-read-paths rule. A theme GET returns the stored document
|
|
13
|
+
* VERBATIM (unknown members kept; a shape check over the named members,
|
|
14
|
+
* never a strip) or `null`, with an optional `interpreted.stripped`
|
|
15
|
+
* (`.min(1)`: present ⇔ at least one name) naming what an INTERPRET
|
|
16
|
+
* reader would drop. Exists so a writer's carry cannot be turned into the
|
|
17
|
+
* ggui#1124 defect by the reader it carries from. New exports only; no
|
|
18
|
+
* existing shape changes. Kit: wire `app-theme-carry`, forward case.
|
|
19
|
+
* --------------------------------------------------------------------
|
|
20
|
+
* `ggui:dismiss` (2026-09-16, additive, ggui#1109 — MINOR, same draft
|
|
21
|
+
* stamp): a user dismiss GESTURE forwarded from the card to its host as
|
|
22
|
+
* an INTENT, on a new protocol-owned tag in the `ggui:` postMessage
|
|
23
|
+
* family beside `ggui:lifecycle`. The card MUST NOT act on it (the host
|
|
24
|
+
* owns what dismissal means) and emits at most one intent per gesture;
|
|
25
|
+
* the host decides, and ignoring is CONFORMANT — so adoption breaks no
|
|
26
|
+
* host. `reason` is extensibly-closed ('escape' today), and the type
|
|
27
|
+
* guard validates SHAPE only: checking today's reason set would make a
|
|
28
|
+
* release-N host silently drop a release-N+1 intent (§3.6). Not on
|
|
29
|
+
* `ggui:observe` (a host may ignore telemetry by contract) and not a
|
|
30
|
+
* `ui/notifications/*` name (a frozen external namespace).
|
|
31
|
+
* --------------------------------------------------------------------
|
|
9
32
|
* Motion tempo override (2026-09-16, additive, ggui#1093 P1c — MINOR,
|
|
10
33
|
* same draft stamp; no WIRE change). The theming spec's §2.3 retirement
|
|
11
34
|
* of per-app motion is AMENDED (protocol + rnd): layer-1 keeps the motion
|
|
@@ -3725,7 +3748,7 @@ export declare const PROTOCOL_VERSION = "draft-2026-09-10";
|
|
|
3725
3748
|
* PATCH under §1.3); it cannot be cut from main, whose delta since
|
|
3726
3749
|
* 0.14.0 is minor-class.
|
|
3727
3750
|
*/
|
|
3728
|
-
export declare const GGUI_WAVE_VERSION = "0.
|
|
3751
|
+
export declare const GGUI_WAVE_VERSION = "0.19.0";
|
|
3729
3752
|
/**
|
|
3730
3753
|
* Schema version stamped onto wire envelopes that opt into the
|
|
3731
3754
|
* `schemaVersion` forward-compat field (see {@link ActionEnvelope},
|