@adia-ai/a2ui-runtime 0.7.26 → 0.7.27

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/CHANGELOG.md CHANGED
@@ -1,4 +1,9 @@
1
1
  # Changelog — @adia-ai/a2ui-runtime
2
+ ## [0.7.27] — 2026-07-12
3
+
4
+ ### Fixed
5
+ - **Renderer stamps `el.id = comp.id` at all three element-creation sites.** Elements previously carried only `data-a2ui-id`, so authored `[id]`s never reached the live DOM — breaking every setup module that `getElementById`s its targets (the docs migration's dynamic tier surfaced this: pointer-tracking demos, trait wiring). The `id` is set outside the prop-diffing path, so later prop updates can never strip it.
6
+ - **`a2ui.schema.json` — added `updateStyles` / `removeStyles` message schemas.** The renderer has handled the CSS channel since its introduction; the schema (and the generated `.d.ts`) now describe it, so schema validation no longer rejects documents that use it.
2
7
 
3
8
  ## [0.7.26] — 2026-07-04
4
9
 
@@ -597,7 +602,7 @@ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4
597
602
 
598
603
  Project-lifetime category error; same shape as the §47 `<a>` → Button transpiler bug. Both encoded incorrect assumptions about HTML attribute spelling. Fix: new `static #HTML_LOWERCASE_ATTRS` set (38 HTML-spec attrs sourced from MDN reference + DOM specs covering input/form/media/image/anchor/generic/microdata/script categories); `#toAttr()` now consults the set before kebab-casing. Multi-token attrs still kebab correctly.
599
604
 
600
- See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting arc narrative + [.claude/docs/journal/2026/05/2026-05-12.md](../../../.claude/docs/journal/2026/05/2026-05-12.md) §§ 45 / 49 / 51 for per-§ details.
605
+ See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting arc narrative + `.claude/docs/journal/2026/05/2026-05-12.md` §§ 45 / 49 / 51 for per-§ details.
601
606
  ## [0.4.3] - 2026-05-11
602
607
 
603
608
  ### Ride-along (no source changes)
@@ -789,9 +794,9 @@ Five new A2UI type → AdiaUI tag mappings in `registry.js`:
789
794
  - `NavItem` → `nav-item-ui`
790
795
  - `NavGroup` → `nav-group-ui`
791
796
 
792
- All 5 components existed in `@adia-ai/web-components`; the registry hadn't been kept in sync. Closing this gap fixes 28/113 hand-authored patterns that previously rendered as `[unknown: X]` placeholders when imported into `/site/playground/a2ui-editor`, plus the render-preview's `streamed-list` example. The `NavItem` and `NavGroup` additions also align with [ADR-0015](../../../.brain/adrs/0015-three-tier-naming-convention.md)'s nav consolidation (the retired `SectionNav`/`SectionNavItem` types are migrated in `@adia-ai/a2ui-corpus`).
797
+ All 5 components existed in `@adia-ai/web-components`; the registry hadn't been kept in sync. Closing this gap fixes 28/113 hand-authored patterns that previously rendered as `[unknown: X]` placeholders when imported into `/site/playground/a2ui-editor`, plus the render-preview's `streamed-list` example. The `NavItem` and `NavGroup` additions also align with `ADR-0015`'s nav consolidation (the retired `SectionNav`/`SectionNavItem` types are migrated in `@adia-ai/a2ui-corpus`).
793
798
 
794
- Smoke side-effect: zettel score 91 → 92; `smoke:engines` flipped from `valid=false score=98/91` to `valid=true score=100/92` because the unregistered types were tripping validation. Per-finding triage in [`.claude/docs/reports/playground-examples-review-2026-05-02.md`](../../../.claude/docs/reports/playground-examples-review-2026-05-02.md).
799
+ Smoke side-effect: zettel score 91 → 92; `smoke:engines` flipped from `valid=false score=98/91` to `valid=true score=100/92` because the unregistered types were tripping validation. Per-finding triage in `.claude/docs/reports/playground-examples-review-2026-05-02.md`.
795
800
 
796
801
  ---
797
802
  ## [0.2.0] — 2026-05-02
package/a2ui.schema.d.ts CHANGED
@@ -11,6 +11,8 @@ export type A2UIMessage =
11
11
  | UpdateDataModelMessage
12
12
  | WireComponentsMessage
13
13
  | DeleteSurfaceMessage
14
+ | UpdateStylesMessage
15
+ | RemoveStylesMessage
14
16
  | MetaMessage;
15
17
 
16
18
  /**
@@ -160,6 +162,23 @@ export interface DeleteSurfaceMessage {
160
162
  type: 'deleteSurface';
161
163
  surfaceId: string;
162
164
  }
165
+ /**
166
+ * CSS channel: adopts a surface-scoped stylesheet (wrapped in @scope([data-a2ui-surface=<id>]) by the renderer). See specs/genui-css-channel.md.
167
+ */
168
+ export interface UpdateStylesMessage {
169
+ type: 'updateStyles';
170
+ surfaceId: string;
171
+ styleId: string;
172
+ css: string;
173
+ }
174
+ /**
175
+ * CSS channel: removes a previously adopted surface-scoped stylesheet by styleId.
176
+ */
177
+ export interface RemoveStylesMessage {
178
+ type: 'removeStyles';
179
+ surfaceId: string;
180
+ styleId: string;
181
+ }
163
182
  /**
164
183
  * LLM self-critique or metadata. Not rendered; passed through for logging.
165
184
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/a2ui-runtime",
3
- "version": "0.7.26",
3
+ "version": "0.7.27",
4
4
  "description": "A2UI runtime \u2014 renderer, registry, streams, surface manifest, and wiring primitives for the A2UI (Agent-to-UI) protocol. Framework-agnostic; pairs with any A2UI-conformant component set.",
5
5
  "type": "module",
6
6
  "exports": {
package/renderer.js CHANGED
@@ -155,6 +155,7 @@ export class A2UIRenderer {
155
155
  if (!el) {
156
156
  el = document.createElement('div');
157
157
  el.setAttribute('data-a2ui-id', comp.id);
158
+ el.id = comp.id;
158
159
  el.setAttribute('data-a2ui-unknown', comp.component);
159
160
  el.textContent = `[unknown: ${comp.component}]`;
160
161
  surface.elements.set(comp.id, el);
@@ -166,11 +167,13 @@ export class A2UIRenderer {
166
167
  if (!el) {
167
168
  el = document.createElement(tagName);
168
169
  el.setAttribute('data-a2ui-id', comp.id);
170
+ el.id = comp.id;
169
171
  surface.elements.set(comp.id, el);
170
172
  this.#elements.set(comp.id, el);
171
173
  } else if (el.localName !== tagName) {
172
174
  const newEl = document.createElement(tagName);
173
175
  newEl.setAttribute('data-a2ui-id', comp.id);
176
+ newEl.id = comp.id;
174
177
  el.replaceWith(newEl);
175
178
  el = newEl;
176
179
  surface.elements.set(comp.id, el);