@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.
@@ -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":"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"}
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
@@ -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` gens against a fresh
149
- * contract; `override.variance` re-aims the variant axis.
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 cold-gens against it.
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":"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"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/schemas/mcp.ts"],"names":[],"mappings":"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"}
@@ -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` gens against a fresh
207
- * contract; `override.variance` re-aims the variant axis.
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 cold-gens against it.
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 the handshake-decided reuse paths (accept a cache-origin proposal, or a variance re-aim that resolves to an existing variant) it is the stored id — equal ids across renders mean the same stored component. override.contract always generates cold and mints a fresh id, even for an identical contract.'),
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
- /** Whether to show confirmation before triggering */
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.17.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},