@adia-ai/mcp 0.8.37 → 0.8.39

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
@@ -9,6 +9,23 @@
9
9
  > entire changelog was still `[Unreleased]` at fold time (minted at ADR-0048 P4,
10
10
  > never released under its own name) and is merged into the section below.
11
11
 
12
+ ## [0.8.39] — 2026-08-15
13
+
14
+ ### Added
15
+ - **`get_catalog_ladder` on the `protocol` server (ADR-0050, gh#1291 phase 3) — 4 → 5 tools there (all-server total 43: gen-ui 31 · protocol 5 · factory 7).** ADR-0050's serving map gives the protocol server L0+L1; phase 1 held it at four tools because an L0-only enumerate tool duplicates `get_registry_map`. With L1 populated (44 curated widgets) the tool earns its place: an L1 entry carries its A2UI `template`, so a chat agent can enumerate a widget and emit it with no generation system and no corpus. No arguments returns the ladder summary — all five rungs with unit/composesTier/status/count plus a `servedHere` flag and the serving map in prose, so a client learns where L2–L4 live; `tier` (a two-value enum, `L0`|`L1`, so an unserved rung is refused at the schema rather than answered emptily) lists that rung's entry names; `tier` + `name` returns one entry's full record. **Isolation is unchanged by construction** — the tier index is data inside the zero-dependency `@adia-ai/a2ui` (`./catalog/tiers`), so the P4 module-graph walk still proves zero reach into `@adia-ai/gen-ui`/`@adia-ai/llm`/`@adia-ai/agent`. Zero tool-name overlap across the three servers (the factory smoke's ADR-0051 §4 assertion). **Purely additive** — no existing tool's input or output shape changed, so no versioning event; `protocol_status` deliberately did not grow catalog counters, which would have been an output-contract change for cosmetic value. gen-ui's `get_catalog_tiers` (all five rungs, for retrieval) is unchanged.
16
+
17
+ ### Maintenance
18
+ - **`bin/` touched in this release window** (1 file(s), e.g. `bin/adia-mcp`) — carried by the entries above.
19
+
20
+ ## [0.8.38] — 2026-08-15
21
+
22
+ ### Added
23
+ - **Third server: `adia-mcp factory` (ADR-0051, gh#1241).** The adia-factory MCP server — the developer toolbox for building adia-ui apps from any MCP-speaking harness — joins `gen-ui` and `protocol` as the third subcommand of the one bin, per gh#1240's one-package ruling. MCP config key: `adia-factory` (reserved). Seven tools over stdio, each wrapping an existing gated factory-plugin script (ADR-0051 §2 — no new business logic): `orient_app` (adia-info + record-lint), `scaffold_app`/`scaffold_page`/`scaffold_component` (adia-scaffold), `audit_structure` (adia-lint / adia-contract-check / record-lint / adia-scaffold inventory), `verify_surface` (adia-probe; Playwright lazy-loads from the target project per §6 — never a dependency of this package), and `factory_status`. Four doctrine resources (`adia://factory/{shell-selection,data-wiring,token-pairing-laws,pattern-index}`) are GENERATED from the plugin's skill files at build time (§3, `npm run build:factory-mcp-assets`); the wrapped scripts are vendored verbatim into `factory/vendor/` with a sha256 manifest, same single-source rule. New smoke gate `mcp:factory:smoke` (rides `npm run check` and the publish workflow) proves: asset freshness, the 7-tool/4-resource surface with live round-trips, every wrapped script's own selftest, zero tool-name overlap across all three servers (§4), tool/resource parity against `factory/public-surface.json` (the `adia-factory-public` reconciliation target — the assertion ADR-0051 deferred to this build), and the entrypoint-boundary isolation walk (§5: `factory/server.js`'s runtime module graph reaches no `@adia-ai/gen-ui`, no `@adia-ai/llm`, no `@adia-ai/agent`). `exports` gains `./factory/server.js`; TOOLS.md gains the third generated section.
24
+ - **`get_catalog_tiers` on the `gen-ui` server (ADR-0050, gh#1243) — 30 → 31 tools on that server (all-server total 42: gen-ui 31 · protocol 4 · factory 7).** Enumerates the catalog's L0–L4 ladder from `@adia-ai/a2ui/catalog/tiers`: the summary by default (per rung: entry unit, the rung it composes, populated/reserved, count), one tier's entry names with `tier`, one entry's full record with `tier` + `name`. `composes` is the ladder edge a client follows to expand an entry into the rung below. ADR-0050's serving map puts retrieval across ALL tiers on this server; the protocol server keeps its four tools until L1 is curated (that is the tier a chat agent enumerates, and an L0-only tool there would duplicate `get_registry_map`). **Purely additive** — no existing tool's input or output shape changed.
25
+
26
+ ### Changed
27
+ - **Package directory moved `packages/mcp` → `packages/gen-ui/mcp` (ADR-0049, gh#1244).** Directory move only — the npm name, exports, and API are unchanged.
28
+
12
29
  ## [0.8.37] — 2026-08-14
13
30
 
14
31
  ### Added
@@ -896,7 +913,7 @@ Companion to `@adia-ai/a2ui-compose@[Unreleased]` §87 zettel `ensureBooted()` r
896
913
  - **`mcp/scripts/smoke-engine-registry.mjs`** — retrieval-quality probes updated to match the post-§72 + §88 retrieval surface (composition-match strategy on canonical intents).
897
914
  - **`mcp/scripts/smoke-register-engine.mjs`** — engine-registry coverage adjusted; still 11/11.
898
915
 
899
- See root [CHANGELOG.md `[Unreleased]`](../../CHANGELOG.md) for the cross-cutting arc.
916
+ See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting arc.
900
917
  ## [0.4.7] - 2026-05-12
901
918
 
902
919
  ### Changed — smoke + test scripts aligned to post-§72 retrieval surface
@@ -912,14 +929,14 @@ Companion to `@adia-ai/a2ui-compose@[Unreleased]` + `@adia-ai/a2ui-retrieval@[Un
912
929
  - **`mcp/scripts/eval-fix.mjs`** — retired the pattern-surface fix-up logic (no longer reachable; compositions are the canonical retrieval shape).
913
930
  - **`mcp/scripts/test-a2ui.mjs`** — assertions updated to reflect the post-§64 tool inventory.
914
931
 
915
- See root [CHANGELOG.md `[Unreleased]`](../../CHANGELOG.md) for the cross-cutting §64 arc narrative.
932
+ See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting §64 arc narrative.
916
933
  ## [0.4.5] - 2026-05-12
917
934
 
918
935
  ### Ride-along (no source changes)
919
936
 
920
937
  Lockstep PATCH cut alongside `@adia-ai/web-components@0.4.5` (§61 CSS subpath exports + CustomEvent.detail sweep across 17 form-bearing primitives + slider reactivity test lock-in + §52 design-tokens export module + UI), `@adia-ai/web-modules@0.4.5` (§61 CSS subpath exports — six cluster `*.css` exports), `@adia-ai/a2ui-compose@0.4.5` (§56 system-prompt CORPUS CONTEXT block in monolithic strategies), `@adia-ai/llm@0.4.5` (§54 doc-comment path refresh). Source byte-identical to v0.4.4.
921
938
 
922
- Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.5]`](../../CHANGELOG.md) for the cut narrative.
939
+ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.5]`](../../../CHANGELOG.md) for the cut narrative.
923
940
  ## [0.4.4] - 2026-05-12
924
941
 
925
942
  ### Changed — fragment-retirement follow-through (§37, 2026-05-12)
@@ -928,14 +945,14 @@ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4
928
945
  - **`mcp/scripts/smoke-zettel.mjs` — retired (37 lines).** Smoke depended on the removed fragment library; replaced functionally by `mcp/scripts/smoke-engine-registry.mjs` (engine path) and `scripts/test-chunks.mjs` (zettel composition path).
929
946
  - **`mcp/scripts/test-chunks.mjs` — 1-line tweak.** Threshold adjustment for the post-§40 annotated-chunk world.
930
947
 
931
- See root [CHANGELOG.md `[Unreleased]`](../../CHANGELOG.md) for the cross-cutting arc narrative.
948
+ See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting arc narrative.
932
949
  ## [0.4.3] - 2026-05-11
933
950
 
934
951
  ### Ride-along (no source changes)
935
952
 
936
953
  Lockstep PATCH cut alongside `@adia-ai/web-components@0.4.3` (input-ui type=number locale + thousands grouping + hold-to-repeat) + `@adia-ai/a2ui-compose@0.4.3` + `@adia-ai/a2ui-retrieval@0.4.3` (process.env browser-compat fix) + `@adia-ai/a2ui-corpus@0.4.3` (catalog regen + chunks re-harvest with new settings-appearance pattern). Source byte-identical to v0.4.2.
937
954
 
938
- Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.3]`](../../CHANGELOG.md) for the cut narrative.
955
+ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.3]`](../../../CHANGELOG.md) for the cut narrative.
939
956
  ## [0.4.2] - 2026-05-11
940
957
 
941
958
  ### Added
@@ -946,39 +963,39 @@ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4
946
963
 
947
964
  Lockstep PATCH cut alongside `@adia-ai/web-components@0.4.2` (`<input-ui type="number">` rewrite drops native `<input type=number>` wrapping) + `@adia-ai/web-modules@0.4.2` (`<editor-sidebar>` grid-track width-mirror fix + new `<theme-panel>` module). Apart from the script above, source byte-identical to v0.4.1.
948
965
 
949
- Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.2]`](../../CHANGELOG.md) for the cut narrative.
966
+ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.2]`](../../../CHANGELOG.md) for the cut narrative.
950
967
  ## [0.4.1] - 2026-05-10
951
968
 
952
969
  ### Ride-along (no source changes)
953
970
 
954
971
  Lockstep PATCH cut alongside `@adia-ai/web-modules@0.4.1` (simple cluster) + `@adia-ai/a2ui-validator@0.4.1` (Phase 3 foundation) + `@adia-ai/a2ui-corpus@0.4.1` (fragment metrics reconciliation). Source byte-identical to v0.4.0.
955
972
 
956
- Internal `@adia-ai/*` dep ranges bumped from `^0.4.0` to `^0.4.1`. See root [CHANGELOG.md `## [0.4.1]`](../../CHANGELOG.md) for the cut narrative.
973
+ Internal `@adia-ai/*` dep ranges bumped from `^0.4.0` to `^0.4.1`. See root [CHANGELOG.md `## [0.4.1]`](../../../CHANGELOG.md) for the cut narrative.
957
974
  ## [0.4.0] - 2026-05-10
958
975
 
959
976
  ### Ride-along (no source changes)
960
977
 
961
978
  Lockstep MINOR cut alongside `@adia-ai/web-modules@0.4.0` (ADR-0024 legacy shell shapes retired). Source byte-identical to v0.3.6.
962
979
 
963
- Internal `@adia-ai/*` dep ranges bumped from `^0.3.0` to `^0.4.0`. See root [CHANGELOG.md `## [0.4.0]`](../../CHANGELOG.md) for the cut narrative.
980
+ Internal `@adia-ai/*` dep ranges bumped from `^0.3.0` to `^0.4.0`. See root [CHANGELOG.md `## [0.4.0]`](../../../CHANGELOG.md) for the cut narrative.
964
981
  ## [0.3.6] - 2026-05-10
965
982
 
966
983
  ### Ride-along (no source changes)
967
984
 
968
- Lockstep version bump only — source byte-identical to v0.3.5. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.6]`](../../CHANGELOG.md) for the cut narrative.
985
+ Lockstep version bump only — source byte-identical to v0.3.5. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.6]`](../../../CHANGELOG.md) for the cut narrative.
969
986
  ## [0.3.5] - 2026-05-07
970
987
 
971
988
  ### Ride-along (no source changes)
972
989
 
973
- Lockstep version bump only — source byte-identical to v0.3.4. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.5]`](../../CHANGELOG.md) for the cut narrative.
990
+ Lockstep version bump only — source byte-identical to v0.3.4. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.5]`](../../../CHANGELOG.md) for the cut narrative.
974
991
  ## [0.3.4] - 2026-05-07
975
992
 
976
993
  ### Ride-along (no source changes)
977
994
 
978
- Lockstep version bump only — source byte-identical to v0.3.3. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.4]`](../../CHANGELOG.md) for the cut narrative.
995
+ Lockstep version bump only — source byte-identical to v0.3.3. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.4]`](../../../CHANGELOG.md) for the cut narrative.
979
996
  ## [0.3.3] - 2026-05-07
980
997
 
981
- **Lockstep cut.** All 9 published `@adia-ai/*` packages now share version `0.3.3`, governed by [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` ranges stay at `^0.3.0` (patch-cut asymmetry — caret floats `0.3.x`).
998
+ **Lockstep cut.** All 9 published `@adia-ai/*` packages now share version `0.3.3`, governed by [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` ranges stay at `^0.3.0` (patch-cut asymmetry — caret floats `0.3.x`).
982
999
 
983
1000
  ### Added
984
1001
 
@@ -1016,7 +1033,7 @@ Lockstep version bump only — source byte-identical to v0.3.3. Internal `@adia-
1016
1033
  ## [0.3.2] - 2026-05-06
1017
1034
 
1018
1035
  **9-package lockstep patch cut to v0.3.2.** All lockstep members share
1019
- one version per [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1036
+ one version per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1020
1037
  Internal `@adia-ai/*` dep ranges unchanged at `^0.3.0`.
1021
1038
 
1022
1039
  ### Added
@@ -1040,7 +1057,7 @@ Internal `@adia-ai/*` dep ranges unchanged at `^0.3.0`.
1040
1057
  - `version`: `0.3.1` → `0.3.2`.
1041
1058
  ## [0.3.1] - 2026-05-06
1042
1059
 
1043
- **9-package lockstep patch cut.** All 9 published `@adia-ai/*` packages bump 0.3.0 → 0.3.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.3.0` (covers `0.3.1` under semver — patch-cut asymmetry).
1060
+ **9-package lockstep patch cut.** All 9 published `@adia-ai/*` packages bump 0.3.0 → 0.3.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.3.0` (covers `0.3.1` under semver — patch-cut asymmetry).
1044
1061
 
1045
1062
  This package itself ships **no source changes** in v0.3.1. The cut bumps version only — substantive content lives in [`@adia-ai/web-components`](https://github.com/adiahealth/gen-ui-kit/releases/tag/web-components-v0.3.1) (folder-per-trait restructure; barrel API unchanged).
1046
1063
 
@@ -1050,7 +1067,7 @@ This package itself ships **no source changes** in v0.3.1. The cut bumps version
1050
1067
  - Internal `@adia-ai/*` dep ranges: unchanged at `^0.3.0` (covers `0.3.1` under semver — patch-cut asymmetry).
1051
1068
  ## [0.3.0] - 2026-05-05
1052
1069
 
1053
- **9-package lockstep cut + new `@adia-ai/llm` dep.** All 9 published `@adia-ai/*` packages bump 0.2.5 → 0.3.0 per [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges bump `^0.2.0` → `^0.3.0`.
1070
+ **9-package lockstep cut + new `@adia-ai/llm` dep.** All 9 published `@adia-ai/*` packages bump 0.2.5 → 0.3.0 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges bump `^0.2.0` → `^0.3.0`.
1054
1071
 
1055
1072
  The MCP synthesis tool now resolves `createLLMAdapter` from `@adia-ai/llm` (9th lockstep package, first publish in this cut) rather than `@adia-ai/a2ui-compose/llm` (subpath dropped). Behavior unchanged.
1056
1073
 
@@ -1075,7 +1092,7 @@ If you depend on `@adia-ai/a2ui-mcp` directly (typically as a CLI via `npx adiau
1075
1092
  `@adia-ai/llm` is a transitive dep — npm install handles it.
1076
1093
  ## [0.2.5] - 2026-05-04
1077
1094
 
1078
- **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.4 → 0.2.5 per [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.5 under semver — patch-cut asymmetry).
1095
+ **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.4 → 0.2.5 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.5 under semver — patch-cut asymmetry).
1079
1096
 
1080
1097
  This is a **patch cut on top of v0.2.4, no BREAKING changes.** Substantive content lives in `web-components` (new `<fields-ui>` form-grid primitive + `draggable-list-item` last-item drop-zone fix, both surfaced by the Tasks UI Playground at `.claude/docs/projects/tasks-playground/`); `a2ui-corpus` ships a catalog regen for the new `<fields-ui>` yaml. `a2ui-mcp` rides along at version bump only — no source change.
1081
1098
 
@@ -1085,7 +1102,7 @@ This is a **patch cut on top of v0.2.4, no BREAKING changes.** Substantive conte
1085
1102
  - Internal `@adia-ai/*` dep ranges: unchanged at `^0.2.0` (covers `0.2.5` under semver — patch-cut asymmetry).
1086
1103
  ## [0.2.4] - 2026-05-04
1087
1104
 
1088
- **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.3 → 0.2.4 per [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.4 under semver — patch-cut asymmetry).
1105
+ **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.3 → 0.2.4 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.4 under semver — patch-cut asymmetry).
1089
1106
 
1090
1107
  This is a **patch cut on top of v0.2.3, no BREAKING changes.** Substantive content lives in `web-components` (Tier 4 trait library lift, 11 new traits + 2 architectural rewrites, plus accumulated bug fixes); `a2ui-corpus` ships a catalog regen for the new `<demo-toggle-ui>` primitive. Six packages ride along at version + dep-range bump.
1091
1108
 
@@ -1105,7 +1122,7 @@ _Nothing yet._
1105
1122
 
1106
1123
  **Lockstep cut.** All 8 published `@adia-ai/*` packages bump
1107
1124
  0.2.2 → 0.2.3 per
1108
- [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1125
+ [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1109
1126
  Patch cut — no breaking changes.
1110
1127
 
1111
1128
  ### Changed
@@ -1120,7 +1137,7 @@ Patch cut — no breaking changes.
1120
1137
  `@adia-ai/a2ui-mcp` source is byte-identical to `0.2.2`. The cut bumps version + the internal dep range entries only.
1121
1138
  ## [0.2.2] - 2026-05-02
1122
1139
 
1123
- **Lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.1 → 0.2.2 per [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
1140
+ **Lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.1 → 0.2.2 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
1124
1141
 
1125
1142
  ### Changed
1126
1143
 
@@ -1138,7 +1155,7 @@ Patch cut — no breaking changes.
1138
1155
  ---
1139
1156
  ## [0.2.1] - 2026-05-02
1140
1157
 
1141
- **Lockstep cut + `report_issue` trigger phrases + scope-drift auto-fire on canvas-drift detection.** All 8 published `@adia-ai/*` packages bump 0.2.0 → 0.2.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
1158
+ **Lockstep cut + `report_issue` trigger phrases + scope-drift auto-fire on canvas-drift detection.** All 8 published `@adia-ai/*` packages bump 0.2.0 → 0.2.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
1142
1159
 
1143
1160
  ### Changed
1144
1161
 
@@ -1170,7 +1187,7 @@ When the composer's scope-drift gate (a2ui-compose) flags `result.scopeDrift.dri
1170
1187
 
1171
1188
  **Lockstep cut + corpus caret-lock fix.** All 8 published `@adia-ai/*`
1172
1189
  packages now share one version, governed by
1173
- [`.claude/docs/specs/package-architecture.md` § 15 (Versioning Policy)](../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1190
+ [`.claude/docs/specs/package-architecture.md` § 15 (Versioning Policy)](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1174
1191
 
1175
1192
  This release **fixes a live shipping bug** in 0.1.3: the `dependencies`
1176
1193
  range `"@adia-ai/a2ui-corpus": "^0.0.6"` locked to *exactly* `0.0.6`
@@ -1211,7 +1228,7 @@ BREAKING changes.
1211
1228
 
1212
1229
  - **`compose_from_chunks` eval runner + hold-out set**. Closes the
1213
1230
  spec at
1214
- [`.claude/docs/specs/compose-from-chunks-eval.md`](../../.claude/docs/specs/compose-from-chunks-eval.md):
1231
+ [`.claude/docs/specs/compose-from-chunks-eval.md`](../../../.claude/docs/specs/compose-from-chunks-eval.md):
1215
1232
  - `evals/compose-from-chunks-holdout.jsonl` — 20 intents (10
1216
1233
  single-turn compose + 10 multi-turn refine) across 9
1217
1234
  categories (data-display, forms, layout, data, data-viz,
@@ -1241,7 +1258,7 @@ BREAKING changes.
1241
1258
  ---
1242
1259
  ## [0.1.2] - 2026-05-01
1243
1260
 
1244
- Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semantic-validator.md)
1261
+ Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../../.claude/docs/specs/semantic-validator.md)
1245
1262
  **promoted to default**. When `--semantic` is set, `eval-diff.mjs`
1246
1263
  now gates on the combined score at threshold 80 by default, instead
1247
1264
  of running in Phase 1 shadow-mode. **Behavior change** — see § Opt
@@ -1297,7 +1314,7 @@ Pass rate drops from 83 → 79 (4 percentage points), all justified.
1297
1314
 
1298
1315
  ### Updated baseline thresholds
1299
1316
 
1300
- Per [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semantic-validator.md)
1317
+ Per [`.claude/docs/specs/semantic-validator.md`](../../../.claude/docs/specs/semantic-validator.md)
1301
1318
  § Phase 2 status (2026-05-01):
1302
1319
 
1303
1320
  - `avgScore ≥ 88` (structural — unchanged)
@@ -1315,7 +1332,7 @@ Per [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semant
1315
1332
  threshold revalidation passes
1316
1333
  ## [0.1.1] - 2026-05-01
1317
1334
 
1318
- Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semantic-validator.md)
1335
+ Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../../.claude/docs/specs/semantic-validator.md)
1319
1336
  — opt-in combined-gating in `eval-diff.mjs` + new
1320
1337
  `semantic-stats.mjs` companion script. **No breaking changes.**
1321
1338
  Default `eval-diff` behavior unchanged — Phase 1 shadow-mode is
@@ -1386,7 +1403,7 @@ MCP tools that turn the chunk-composition pipeline from single-shot into a
1386
1403
  multi-turn surface, plus extends `compose_from_chunks` to mint a `state_id`
1387
1404
  for refinement chains.
1388
1405
 
1389
- Spec: [`.claude/docs/specs/genui-multiturn-architecture.md`](../../.claude/docs/specs/genui-multiturn-architecture.md) (Active v0.1.0).
1406
+ Spec: [`.claude/docs/specs/genui-multiturn-architecture.md`](../../../.claude/docs/specs/genui-multiturn-architecture.md) (Active v0.1.0).
1390
1407
  Plan: `.claude/docs/plans/genui-multiturn-rollout-2026-04-28.md` (Phase A scoped).
1391
1408
  ADR: `0008-multiturn-genui-architecture.md`.
1392
1409
 
@@ -1624,7 +1641,7 @@ before HTML is materialized.
1624
1641
 
1625
1642
  ### Convention reference
1626
1643
 
1627
- - Spec: [`.claude/docs/specs/genui-chunk-marker.md`](../../.claude/docs/specs/genui-chunk-marker.md).
1644
+ - Spec: [`.claude/docs/specs/genui-chunk-marker.md`](../../../.claude/docs/specs/genui-chunk-marker.md).
1628
1645
  - Plan: `.claude/docs/plans/training-pipeline-chunk-harvest-2026-04-27.md`.
1629
1646
 
1630
1647
  ### Other
package/README.md CHANGED
@@ -1,16 +1,18 @@
1
1
  # @adia-ai/mcp
2
2
 
3
- **Two MCP servers, one npm package, one bin.** ADR-0048 §3 ruled two distinct
3
+ **Three MCP servers, one npm package, one bin.** ADR-0048 §3 ruled distinct
4
4
  servers ("they do different things"); gh#1240 (operator ruling 2026-08-14)
5
5
  unified only the *distribution* — before either predecessor name
6
6
  (`@adia-ai/gen-ui-mcp`, `@adia-ai/a2ui-protocol-mcp`) ever published a 0.8.x —
7
- into this one package.
7
+ into this one package. ADR-0051 (gh#1241) added the third server, `factory`,
8
+ as a third subcommand under the same one-package ruling.
8
9
 
9
10
  | You want to… | Run |
10
11
  |---|---|
11
12
  | Generate UI from an intent, search the training corpus, run evals, catalog-aware validation + anti-pattern scoring | `adia-mcp gen-ui` |
12
13
  | Check that an A2UI document is well-formed, whoever produced it; see which component types/wiring exist with no corpus and no model | `adia-mcp protocol` |
13
- | See the two-server menu | `adia-mcp` (bare) |
14
+ | Build adia-ui APPS from any MCP harness — orient, scaffold, structural audit, the surface-qa browser gate, doctrine resources | `adia-mcp factory` |
15
+ | See the three-server menu | `adia-mcp` (bare) |
14
16
 
15
17
  **The protocol server's four tool names are distinct from the gen-ui
16
18
  server's** (gh#1248 renamed them off their original same-named forms before
@@ -39,30 +41,38 @@ Claude Desktop / Cursor / any MCP host, `mcpServers` block:
39
41
  "a2ui-protocol": {
40
42
  "command": "npx",
41
43
  "args": ["-y", "@adia-ai/mcp", "protocol"]
44
+ },
45
+ "adia-factory": {
46
+ "command": "npx",
47
+ "args": ["-y", "@adia-ai/mcp", "factory"]
42
48
  }
43
49
  }
44
50
  }
45
51
  ```
46
52
 
53
+ (`adia-factory` is the reserved config key for the factory server —
54
+ ADR-0051's config-key ruling, 2026-08-14.)
55
+
47
56
  From a local checkout:
48
57
 
49
58
  ```bash
50
- node packages/mcp/bin/adia-mcp gen-ui # stdio, local IDE
51
- node packages/mcp/bin/adia-mcp protocol # stdio, protocol-only
52
- MCP_HTTP_PORT=3460 node packages/mcp/bin/adia-mcp gen-ui # HTTP transport (gen-ui only)
59
+ node packages/gen-ui/mcp/bin/adia-mcp gen-ui # stdio, local IDE
60
+ node packages/gen-ui/mcp/bin/adia-mcp protocol # stdio, protocol-only
61
+ node packages/gen-ui/mcp/bin/adia-mcp factory # stdio, factory toolbox
62
+ MCP_HTTP_PORT=3460 node packages/gen-ui/mcp/bin/adia-mcp gen-ui # HTTP transport (gen-ui only)
53
63
  ```
54
64
 
55
65
  ## `gen-ui` — the generation server
56
66
 
57
- Wraps [`@adia-ai/gen-ui`](../gen-ui/compose). Exposes the generation engine,
67
+ Wraps [`@adia-ai/gen-ui`](../engine/compose). Exposes the generation engine,
58
68
  component catalog, pattern library, validator, and training feedback loop as
59
69
  **30 MCP tools** for Claude Desktop, Claude Code, Cursor, Windsurf, and any
60
70
  deployed MCP-capable host.
61
71
 
62
72
  > Runtime only. Generation logic lives in `@adia-ai/gen-ui`; UI atoms in
63
- > [`@adia-ai/web-components`](../web-components); the A2UI protocol runtime
73
+ > [`@adia-ai/web-components`](../../web-components); the A2UI protocol runtime
64
74
  > (renderer, registry, streams, wiring) in [`@adia-ai/a2ui`](../a2ui); corpus
65
- > in [`@adia-ai/gen-ui/corpus`](../gen-ui/corpus).
75
+ > in [`@adia-ai/gen-ui/corpus`](../engine/corpus).
66
76
 
67
77
  ### Two transports, one tool surface
68
78
 
@@ -93,13 +103,13 @@ re-`initialize` to continue. stdio has no sessions and is unaffected.
93
103
  export ANTHROPIC_API_KEY=sk-ant-… # at least one provider key, for generate_ui
94
104
  adia-mcp gen-ui # global install, stdio
95
105
  npx @adia-ai/mcp gen-ui # via npx
96
- node packages/mcp/gen-ui/server.js # from local checkout
97
- MCP_HTTP_PORT=3460 node packages/mcp/gen-ui/server.js # HTTP → 0.0.0.0:3460/mcp
106
+ node packages/gen-ui/mcp/gen-ui/server.js # from local checkout
107
+ MCP_HTTP_PORT=3460 node packages/gen-ui/mcp/gen-ui/server.js # HTTP → 0.0.0.0:3460/mcp
98
108
  ```
99
109
 
100
110
  ### Tools
101
111
 
102
- **See [`TOOLS.md`](./TOOLS.md) for the full reference** (both servers,
112
+ **See [`TOOLS.md`](./TOOLS.md) for the full reference** (all three servers,
103
113
  sectioned) — tool names, descriptions, grouping, argument schemas. Quick map
104
114
  for `gen-ui`:
105
115
 
@@ -142,13 +152,13 @@ Wraps [`@adia-ai/a2ui`](../a2ui) and nothing else. `@adia-ai/gen-ui` and
142
152
  `@adia-ai/llm` are deliberate **non**-dependencies of this surface — see
143
153
  [Why a separate server](#why-a-separate-server-not-just-a-shared-one).
144
154
 
145
- Four tools, no API key, no `.env`, **stdio only** (no HTTP mode — express and
155
+ Five tools, no API key, no `.env`, **stdio only** (no HTTP mode — express and
146
156
  session-sweep belong to `gen-ui`): `validate_document` · `get_registry_map` ·
147
- `get_wiring_registry` · `protocol_status`.
157
+ `get_wiring_registry` · `get_catalog_ladder` · `protocol_status`.
148
158
 
149
159
  ```bash
150
- node packages/mcp/protocol/server.js # stdio only
151
- npm run mcp:protocol:smoke # boot + exercise all 4 tools + isolation proof
160
+ node packages/gen-ui/mcp/protocol/server.js # stdio only
161
+ npm run mcp:protocol:smoke # boot + exercise all 5 tools + isolation proof
152
162
  ```
153
163
 
154
164
  ### Tool name disambiguation
@@ -172,6 +182,56 @@ itself (any producer's document), `gen-ui` answers questions about this
172
182
  producer's catalog. The rename only changed how a client asks; it changed
173
183
  neither shape.
174
184
 
185
+ ## `factory` — the adia-factory server
186
+
187
+ The developer toolbox (ADR-0051, gh#1241): build adia-ui **apps** from any
188
+ MCP-speaking harness (Claude Code, Hermes, Pi, …) — the adia-ui-factory
189
+ plugin's capabilities without Claude-Code-specific skills/commands/agents.
190
+ MCP config key: **`adia-factory`** (reserved).
191
+
192
+ Seven tools, no API key, no `.env`, **stdio only**: `orient_app` ·
193
+ `scaffold_app` · `scaffold_page` · `scaffold_component` · `audit_structure` ·
194
+ `verify_surface` · `factory_status`. See [`TOOLS.md`](./TOOLS.md) for the
195
+ full reference.
196
+
197
+ **Every tool wraps an existing gated script** (ADR-0051 §2 — the server adds
198
+ no business logic): the factory plugin's `adia-info`, `record-lint`,
199
+ `adia-lint`, `adia-scaffold`, `adia-contract-check`, and `adia-probe`,
200
+ vendored verbatim into `factory/vendor/` by
201
+ `npm run build:factory-mcp-assets` (the plugin's own files stay the single
202
+ source; the vendor manifest + `mcp:factory:smoke` keep the copies honest).
203
+
204
+ **Doctrine ships as MCP resources generated from the skill files at build
205
+ time** (ADR-0051 §3), never hand-copied:
206
+ `adia://factory/{shell-selection,data-wiring,token-pairing-laws,pattern-index}`.
207
+
208
+ Runtime needs:
209
+
210
+ - **python3** — four of the wrapped scripts are stdlib-only Python 3.8+.
211
+ Absent, the affected tools return an actionable install message.
212
+ - **Playwright is NOT a dependency** (ADR-0051 §6): `verify_surface`
213
+ lazy-loads it from the target project (`npm i -D playwright` there); every
214
+ other tool works without it. Keeps `npx -y @adia-ai/mcp` installs light.
215
+
216
+ Deliberate **non**-dependencies, same posture as `protocol` (ADR-0051 §5):
217
+ `@adia-ai/gen-ui` and `@adia-ai/llm` never appear in this server's runtime
218
+ module graph — a developer wanting generation talks to `adia-mcp gen-ui`.
219
+ `mcp:factory:smoke` walks the module graph from `factory/server.js` and
220
+ fails on any reach, proves zero tool-name overlap with both sibling servers
221
+ (ADR-0051 §4), and asserts tool-name/resource-URI conformance against
222
+ [`factory/public-surface.json`](./factory/public-surface.json) — the
223
+ checked-in surface definition minted for the `adia-factory-public` (remote
224
+ claude.ai connector) reconciliation. Scope, honestly: this is
225
+ **local-surface conformance** — the remote publishes no machine-readable
226
+ manifest yet, so remote divergence is not detectable until that export
227
+ exists (the file's `$comment` rules that its rosters then become an import
228
+ of it, never a fork).
229
+
230
+ ```bash
231
+ node packages/gen-ui/mcp/factory/server.js # stdio only
232
+ npm run mcp:factory:smoke # boot + exercise tools + freshness, zero-overlap, parity, isolation proofs
233
+ ```
234
+
175
235
  ### Why a separate server (not just a shared one)
176
236
 
177
237
  ADR-0048 Decision §3 and `.claude/docs/specs/a2ui-gen-ui-split.md` ## Interfaces
@@ -184,25 +244,30 @@ manifest live, not that boundary.
184
244
 
185
245
  ## Package exports
186
246
 
187
- `package.json`'s `exports` map declares exactly two subpaths — `./gen-ui/server.js`
188
- and `./protocol/server.js` the two entry points the `packages/shims/a2ui-mcp`
189
- bin forwarder and the packed-boot probe reach by deep import
190
- (`@adia-ai/mcp/gen-ui/server.js`). This is an explicit **invariant**, not an
191
- accident of omission: without a declared `exports` map every file in `files`
192
- is deep-importable by default, which is what let that resolution work before
193
- this map existed. Adding ANY future subpath key here is fine; removing or
194
- renarrowing either of the two above breaks the shim silently for anyone still
195
- on the retired `@adia-ai/a2ui-mcp` name. Re-run `npm run probe:packed-boot`
196
- and `node scripts/verify/check-shim-bridges.mjs` after touching this map.
247
+ `package.json`'s `exports` map declares three subpaths — `./gen-ui/server.js`,
248
+ `./protocol/server.js`, and `./factory/server.js` (added by ADR-0051/gh#1241;
249
+ adding a subpath is the safe direction). The first two are the entry points the packed-boot probe (and
250
+ the published `@adia-ai/a2ui-mcp@0.8.37` bridge shim, frozen on the registry)
251
+ reach by deep import (`@adia-ai/mcp/gen-ui/server.js`). This is an explicit
252
+ **invariant**, not an accident of omission: without a declared `exports` map
253
+ every file in `files` is deep-importable by default, which is what let that
254
+ resolution work before this map existed. Adding ANY future subpath key here is
255
+ fine; removing or renarrowing either of the first two silently breaks the
256
+ published shim for anyone still on the retired, deprecated
257
+ `@adia-ai/a2ui-mcp` name. Re-run `npm run probe:packed-boot` after touching
258
+ this map.
197
259
 
198
260
  ## Local development
199
261
 
200
262
  ```bash
201
263
  npm run build:mcp-server # gen-ui: server.ts + tools/*.ts -> .js (esbuild)
202
264
  npm run build:protocol-mcp-server # protocol: server.ts + tools/*.ts -> .js (esbuild)
203
- npm run mcp:smoke # gen-ui: boot over stdio, exercise all 30 tools
204
- npm run mcp:protocol:smoke # protocol: boot over stdio, exercise all 4 tools + isolation proof
205
- npm run build:mcp-tools-md # regenerate TOOLS.md (both servers, sectioned) from the live tool lists
265
+ npm run build:factory-mcp-server # factory: server.ts + tools/*.ts -> .js (esbuild)
266
+ npm run build:factory-mcp-assets # factory: re-vendor scripts + re-derive doctrine resources from the plugin
267
+ npm run mcp:smoke # gen-ui: boot over stdio, exercise all 31 tools
268
+ npm run mcp:protocol:smoke # protocol: boot over stdio, exercise all 5 tools + isolation proof
269
+ npm run mcp:factory:smoke # factory: asset freshness + boot + tools + zero-overlap/parity/isolation proofs
270
+ npm run build:mcp-tools-md # regenerate TOOLS.md (all three servers, sectioned) from the live tool lists
206
271
  ```
207
272
 
208
273
  ## License