@adia-ai/mcp 0.8.37 → 0.8.38

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,15 @@
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.38] — 2026-08-15
13
+
14
+ ### Added
15
+ - **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.
16
+ - **`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.
17
+
18
+ ### Changed
19
+ - **Package directory moved `packages/mcp` → `packages/gen-ui/mcp` (ADR-0049, gh#1244).** Directory move only — the npm name, exports, and API are unchanged.
20
+
12
21
  ## [0.8.37] — 2026-08-14
13
22
 
14
23
  ### Added
@@ -896,7 +905,7 @@ Companion to `@adia-ai/a2ui-compose@[Unreleased]` §87 zettel `ensureBooted()` r
896
905
  - **`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
906
  - **`mcp/scripts/smoke-register-engine.mjs`** — engine-registry coverage adjusted; still 11/11.
898
907
 
899
- See root [CHANGELOG.md `[Unreleased]`](../../CHANGELOG.md) for the cross-cutting arc.
908
+ See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting arc.
900
909
  ## [0.4.7] - 2026-05-12
901
910
 
902
911
  ### Changed — smoke + test scripts aligned to post-§72 retrieval surface
@@ -912,14 +921,14 @@ Companion to `@adia-ai/a2ui-compose@[Unreleased]` + `@adia-ai/a2ui-retrieval@[Un
912
921
  - **`mcp/scripts/eval-fix.mjs`** — retired the pattern-surface fix-up logic (no longer reachable; compositions are the canonical retrieval shape).
913
922
  - **`mcp/scripts/test-a2ui.mjs`** — assertions updated to reflect the post-§64 tool inventory.
914
923
 
915
- See root [CHANGELOG.md `[Unreleased]`](../../CHANGELOG.md) for the cross-cutting §64 arc narrative.
924
+ See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting §64 arc narrative.
916
925
  ## [0.4.5] - 2026-05-12
917
926
 
918
927
  ### Ride-along (no source changes)
919
928
 
920
929
  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
930
 
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.
931
+ 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
932
  ## [0.4.4] - 2026-05-12
924
933
 
925
934
  ### Changed — fragment-retirement follow-through (§37, 2026-05-12)
@@ -928,14 +937,14 @@ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4
928
937
  - **`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
938
  - **`mcp/scripts/test-chunks.mjs` — 1-line tweak.** Threshold adjustment for the post-§40 annotated-chunk world.
930
939
 
931
- See root [CHANGELOG.md `[Unreleased]`](../../CHANGELOG.md) for the cross-cutting arc narrative.
940
+ See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) for the cross-cutting arc narrative.
932
941
  ## [0.4.3] - 2026-05-11
933
942
 
934
943
  ### Ride-along (no source changes)
935
944
 
936
945
  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
946
 
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.
947
+ 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
948
  ## [0.4.2] - 2026-05-11
940
949
 
941
950
  ### Added
@@ -946,39 +955,39 @@ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4
946
955
 
947
956
  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
957
 
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.
958
+ 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
959
  ## [0.4.1] - 2026-05-10
951
960
 
952
961
  ### Ride-along (no source changes)
953
962
 
954
963
  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
964
 
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.
965
+ 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
966
  ## [0.4.0] - 2026-05-10
958
967
 
959
968
  ### Ride-along (no source changes)
960
969
 
961
970
  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
971
 
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.
972
+ 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
973
  ## [0.3.6] - 2026-05-10
965
974
 
966
975
  ### Ride-along (no source changes)
967
976
 
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.
977
+ 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
978
  ## [0.3.5] - 2026-05-07
970
979
 
971
980
  ### Ride-along (no source changes)
972
981
 
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.
982
+ 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
983
  ## [0.3.4] - 2026-05-07
975
984
 
976
985
  ### Ride-along (no source changes)
977
986
 
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.
987
+ 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
988
  ## [0.3.3] - 2026-05-07
980
989
 
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`).
990
+ **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
991
 
983
992
  ### Added
984
993
 
@@ -1016,7 +1025,7 @@ Lockstep version bump only — source byte-identical to v0.3.3. Internal `@adia-
1016
1025
  ## [0.3.2] - 2026-05-06
1017
1026
 
1018
1027
  **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).
1028
+ one version per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1020
1029
  Internal `@adia-ai/*` dep ranges unchanged at `^0.3.0`.
1021
1030
 
1022
1031
  ### Added
@@ -1040,7 +1049,7 @@ Internal `@adia-ai/*` dep ranges unchanged at `^0.3.0`.
1040
1049
  - `version`: `0.3.1` → `0.3.2`.
1041
1050
  ## [0.3.1] - 2026-05-06
1042
1051
 
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).
1052
+ **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
1053
 
1045
1054
  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
1055
 
@@ -1050,7 +1059,7 @@ This package itself ships **no source changes** in v0.3.1. The cut bumps version
1050
1059
  - Internal `@adia-ai/*` dep ranges: unchanged at `^0.3.0` (covers `0.3.1` under semver — patch-cut asymmetry).
1051
1060
  ## [0.3.0] - 2026-05-05
1052
1061
 
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`.
1062
+ **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
1063
 
1055
1064
  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
1065
 
@@ -1075,7 +1084,7 @@ If you depend on `@adia-ai/a2ui-mcp` directly (typically as a CLI via `npx adiau
1075
1084
  `@adia-ai/llm` is a transitive dep — npm install handles it.
1076
1085
  ## [0.2.5] - 2026-05-04
1077
1086
 
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).
1087
+ **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
1088
 
1080
1089
  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
1090
 
@@ -1085,7 +1094,7 @@ This is a **patch cut on top of v0.2.4, no BREAKING changes.** Substantive conte
1085
1094
  - Internal `@adia-ai/*` dep ranges: unchanged at `^0.2.0` (covers `0.2.5` under semver — patch-cut asymmetry).
1086
1095
  ## [0.2.4] - 2026-05-04
1087
1096
 
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).
1097
+ **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
1098
 
1090
1099
  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
1100
 
@@ -1105,7 +1114,7 @@ _Nothing yet._
1105
1114
 
1106
1115
  **Lockstep cut.** All 8 published `@adia-ai/*` packages bump
1107
1116
  0.2.2 → 0.2.3 per
1108
- [`.claude/docs/specs/package-architecture.md` § 15](../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1117
+ [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1109
1118
  Patch cut — no breaking changes.
1110
1119
 
1111
1120
  ### Changed
@@ -1120,7 +1129,7 @@ Patch cut — no breaking changes.
1120
1129
  `@adia-ai/a2ui-mcp` source is byte-identical to `0.2.2`. The cut bumps version + the internal dep range entries only.
1121
1130
  ## [0.2.2] - 2026-05-02
1122
1131
 
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.
1132
+ **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
1133
 
1125
1134
  ### Changed
1126
1135
 
@@ -1138,7 +1147,7 @@ Patch cut — no breaking changes.
1138
1147
  ---
1139
1148
  ## [0.2.1] - 2026-05-02
1140
1149
 
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.
1150
+ **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
1151
 
1143
1152
  ### Changed
1144
1153
 
@@ -1170,7 +1179,7 @@ When the composer's scope-drift gate (a2ui-compose) flags `result.scopeDrift.dri
1170
1179
 
1171
1180
  **Lockstep cut + corpus caret-lock fix.** All 8 published `@adia-ai/*`
1172
1181
  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).
1182
+ [`.claude/docs/specs/package-architecture.md` § 15 (Versioning Policy)](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
1174
1183
 
1175
1184
  This release **fixes a live shipping bug** in 0.1.3: the `dependencies`
1176
1185
  range `"@adia-ai/a2ui-corpus": "^0.0.6"` locked to *exactly* `0.0.6`
@@ -1211,7 +1220,7 @@ BREAKING changes.
1211
1220
 
1212
1221
  - **`compose_from_chunks` eval runner + hold-out set**. Closes the
1213
1222
  spec at
1214
- [`.claude/docs/specs/compose-from-chunks-eval.md`](../../.claude/docs/specs/compose-from-chunks-eval.md):
1223
+ [`.claude/docs/specs/compose-from-chunks-eval.md`](../../../.claude/docs/specs/compose-from-chunks-eval.md):
1215
1224
  - `evals/compose-from-chunks-holdout.jsonl` — 20 intents (10
1216
1225
  single-turn compose + 10 multi-turn refine) across 9
1217
1226
  categories (data-display, forms, layout, data, data-viz,
@@ -1241,7 +1250,7 @@ BREAKING changes.
1241
1250
  ---
1242
1251
  ## [0.1.2] - 2026-05-01
1243
1252
 
1244
- Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semantic-validator.md)
1253
+ Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../../.claude/docs/specs/semantic-validator.md)
1245
1254
  **promoted to default**. When `--semantic` is set, `eval-diff.mjs`
1246
1255
  now gates on the combined score at threshold 80 by default, instead
1247
1256
  of running in Phase 1 shadow-mode. **Behavior change** — see § Opt
@@ -1297,7 +1306,7 @@ Pass rate drops from 83 → 79 (4 percentage points), all justified.
1297
1306
 
1298
1307
  ### Updated baseline thresholds
1299
1308
 
1300
- Per [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semantic-validator.md)
1309
+ Per [`.claude/docs/specs/semantic-validator.md`](../../../.claude/docs/specs/semantic-validator.md)
1301
1310
  § Phase 2 status (2026-05-01):
1302
1311
 
1303
1312
  - `avgScore ≥ 88` (structural — unchanged)
@@ -1315,7 +1324,7 @@ Per [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semant
1315
1324
  threshold revalidation passes
1316
1325
  ## [0.1.1] - 2026-05-01
1317
1326
 
1318
- Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../.claude/docs/specs/semantic-validator.md)
1327
+ Phase 2 of [`.claude/docs/specs/semantic-validator.md`](../../../.claude/docs/specs/semantic-validator.md)
1319
1328
  — opt-in combined-gating in `eval-diff.mjs` + new
1320
1329
  `semantic-stats.mjs` companion script. **No breaking changes.**
1321
1330
  Default `eval-diff` behavior unchanged — Phase 1 shadow-mode is
@@ -1386,7 +1395,7 @@ MCP tools that turn the chunk-composition pipeline from single-shot into a
1386
1395
  multi-turn surface, plus extends `compose_from_chunks` to mint a `state_id`
1387
1396
  for refinement chains.
1388
1397
 
1389
- Spec: [`.claude/docs/specs/genui-multiturn-architecture.md`](../../.claude/docs/specs/genui-multiturn-architecture.md) (Active v0.1.0).
1398
+ Spec: [`.claude/docs/specs/genui-multiturn-architecture.md`](../../../.claude/docs/specs/genui-multiturn-architecture.md) (Active v0.1.0).
1390
1399
  Plan: `.claude/docs/plans/genui-multiturn-rollout-2026-04-28.md` (Phase A scoped).
1391
1400
  ADR: `0008-multiturn-genui-architecture.md`.
1392
1401
 
@@ -1624,7 +1633,7 @@ before HTML is materialized.
1624
1633
 
1625
1634
  ### Convention reference
1626
1635
 
1627
- - Spec: [`.claude/docs/specs/genui-chunk-marker.md`](../../.claude/docs/specs/genui-chunk-marker.md).
1636
+ - Spec: [`.claude/docs/specs/genui-chunk-marker.md`](../../../.claude/docs/specs/genui-chunk-marker.md).
1628
1637
  - Plan: `.claude/docs/plans/training-pipeline-chunk-harvest-2026-04-27.md`.
1629
1638
 
1630
1639
  ### 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
 
@@ -147,7 +157,7 @@ session-sweep belong to `gen-ui`): `validate_document` · `get_registry_map` ·
147
157
  `get_wiring_registry` · `protocol_status`.
148
158
 
149
159
  ```bash
150
- node packages/mcp/protocol/server.js # stdio only
160
+ node packages/gen-ui/mcp/protocol/server.js # stdio only
151
161
  npm run mcp:protocol:smoke # boot + exercise all 4 tools + isolation proof
152
162
  ```
153
163
 
@@ -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
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
204
268
  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
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