@adia-ai/a2ui-mcp 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -11,6 +11,43 @@ zettel strategies.
11
11
 
12
12
  _No pending changes._
13
13
 
14
+ ## [0.2.0] - 2026-05-02
15
+
16
+ **Lockstep cut + corpus caret-lock fix.** All 8 published `@adia-ai/*`
17
+ packages now share one version, governed by
18
+ [`docs/specs/package-architecture.md` § 15 (Versioning Policy)](../../../docs/specs/package-architecture.md#15-versioning-policy).
19
+
20
+ This release **fixes a live shipping bug** in 0.1.3: the `dependencies`
21
+ range `"@adia-ai/a2ui-corpus": "^0.0.6"` locked to *exactly* `0.0.6`
22
+ under npm pre-1.0 semver, so every fresh `npm i @adia-ai/a2ui-mcp`
23
+ since the corpus 0.0.7 cut was installing a stale corpus — missing the
24
+ §§22-25 nav consolidation, the new chunks, and the catalog regen. The
25
+ new range `^0.2.0` works correctly. Same class fixed for the other 4
26
+ internal deps in this package.
27
+
28
+ ### Fixed
29
+
30
+ - **`a2ui-mcp@0.1.3 → corpus@0.0.6` install bug.** The new `^0.2.0`
31
+ ranges resolve to the actually-current versions instead of the
32
+ caret-locked old ones. Consumers running `npx adiaui-mcp` from npm
33
+ now see the post-§§22-25 corpus + the post-rename component catalog.
34
+
35
+ ### Changed
36
+
37
+ - `version`: `0.1.3` → `0.2.0`.
38
+ - `dependencies["@adia-ai/a2ui-compose"]`: `^0.1.0` → `^0.2.0`.
39
+ - `dependencies["@adia-ai/a2ui-retrieval"]`: `^0.0.1` → `^0.2.0`.
40
+ - `dependencies["@adia-ai/a2ui-validator"]`: `^0.0.1` → `^0.2.0`.
41
+ - `dependencies["@adia-ai/a2ui-corpus"]`: `^0.0.6` → `^0.2.0`.
42
+
43
+ ### No source changes
44
+
45
+ `server.js`, tools, scripts, evals, personas — all byte-identical to
46
+ 0.1.3. The cut bumps version + the 4 internal dep ranges only.
47
+ Consumers who want the substantive 0.1.3 work (`compose_from_chunks`
48
+ eval runner + 20-intent hold-out set) get it via either 0.1.3 or
49
+ 0.2.0 — and 0.2.0 additionally installs the correct corpus version.
50
+
14
51
  ## [0.1.3] - 2026-05-02
15
52
 
16
53
  Additive — `compose_from_chunks` eval runner + hold-out set. No
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/a2ui-mcp",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "AdiaUI A2UI MCP server. Exposes the compose engine over MCP with an engine selector for monolithic + zettel strategies.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@modelcontextprotocol/sdk": "^1.29.0",
30
- "@adia-ai/a2ui-compose": "^0.1.0",
31
- "@adia-ai/a2ui-retrieval": "^0.0.1",
32
- "@adia-ai/a2ui-validator": "^0.0.1",
33
- "@adia-ai/a2ui-corpus": "^0.0.6",
30
+ "@adia-ai/a2ui-compose": "^0.2.0",
31
+ "@adia-ai/a2ui-retrieval": "^0.2.0",
32
+ "@adia-ai/a2ui-validator": "^0.2.0",
33
+ "@adia-ai/a2ui-corpus": "^0.2.0",
34
34
  "zod": "^3.24.0"
35
35
  }
36
36
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Dogfood test: Run 20 diverse intents through A2UI instant mode.
3
3
  */
4
- const { generateUI } = await import('../../compose/engine/generator.js');
4
+ const { generateUI } = await import('../../compose/core/generator.js');
5
5
 
6
6
  const intents = [
7
7
  'user registration form with name, email, password',
@@ -19,7 +19,7 @@
19
19
  */
20
20
 
21
21
  import '../../../../scripts/load-env.mjs';
22
- import { composeFromIntent } from '../../compose/engines/zettel/chunk-synthesizer.js';
22
+ import { composeFromIntent } from '../../compose/strategies/zettel/chunk-synthesizer.js';
23
23
  import { createAdapter } from '../../compose/llm/llm-bridge.js';
24
24
 
25
25
  // Hold-out intents — chosen to NOT have a 1:1 chunk match (so synthesis path
@@ -48,7 +48,7 @@ import fs from 'node:fs';
48
48
  import path from 'node:path';
49
49
  import { fileURLToPath } from 'node:url';
50
50
 
51
- import { composeFromIntent } from '../../compose/engines/zettel/chunk-synthesizer.js';
51
+ import { composeFromIntent } from '../../compose/strategies/zettel/chunk-synthesizer.js';
52
52
  import { searchChunksAsync } from '../../corpus/scripts/chunk-library.js';
53
53
 
54
54
  const REPO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../..');
@@ -28,8 +28,8 @@ import { mkdir, writeFile } from 'node:fs/promises';
28
28
  import { join, dirname } from 'node:path';
29
29
  import { fileURLToPath } from 'node:url';
30
30
 
31
- import { generateUI } from '../../compose/engine/generator.js';
32
- import { generateZettel } from '../../compose/engines/zettel/generator-adapter.js';
31
+ import { generateUI } from '../../compose/core/generator.js';
32
+ import { generateZettel } from '../../compose/strategies/zettel/generator-adapter.js';
33
33
  import { runHarnessV2 } from '../../compose/evals/harness.mjs';
34
34
  import { validateSemantics } from '../../validator/semantic/index.js';
35
35
 
@@ -50,7 +50,7 @@ const MAX_ITER = parseInt([...args].find(a => a.startsWith('--max-iter='))?.spli
50
50
 
51
51
  // ── Load modules ──
52
52
 
53
- const { generateUI } = await import('../../compose/engine/generator.js');
53
+ const { generateUI } = await import('../../compose/core/generator.js');
54
54
  const { validateSchema } = await import('../../validator/validator.js');
55
55
  const { getPattern, searchPatterns } = await import('../../retrieval/pattern-library.js');
56
56
  const { createTicket, formatTicket, formatTicketList } = await import('../../../../.tickets/tickets.js');
@@ -23,10 +23,10 @@ import '../../../../scripts/load-env.mjs';
23
23
  import {
24
24
  refineFromIntent,
25
25
  applyOps,
26
- } from '../../compose/engines/zettel/chunk-refiner.js';
27
- import { mintStateId } from '../../compose/engines/zettel/state-cache.js';
28
- import { createIssueAccumulator } from '../../compose/engines/zettel/issue-reporter.js';
29
- import { composeFromPlan } from '../../compose/engines/zettel/chunk-composer.js';
26
+ } from '../../compose/strategies/zettel/chunk-refiner.js';
27
+ import { mintStateId } from '../../compose/strategies/zettel/state-cache.js';
28
+ import { createIssueAccumulator } from '../../compose/strategies/zettel/issue-reporter.js';
29
+ import { composeFromPlan } from '../../compose/strategies/zettel/chunk-composer.js';
30
30
  import { listChunksByKind, getChunk } from '../../corpus/scripts/chunk-library.js';
31
31
  import { createAdapter } from '../../compose/llm/llm-bridge.js';
32
32
 
@@ -34,7 +34,7 @@ const mode = flags.has('--thinking') ? 'thinking' : flags.has('--pro') ? 'pro' :
34
34
  const JSON_OUT = flags.has('--json');
35
35
  const HTML_OUT = flags.has('--html');
36
36
 
37
- const { generateUI, generateUIStream } = await import('../../compose/engine/generator.js');
37
+ const { generateUI, generateUIStream } = await import('../../compose/core/generator.js');
38
38
 
39
39
  console.error(`Mode: ${mode} | Intent: "${intent}"`);
40
40
  console.error('─'.repeat(50));
@@ -13,7 +13,7 @@
13
13
  */
14
14
 
15
15
  import '../../../../scripts/load-env.mjs';
16
- import { generateUI } from '../../compose/engine/generator.js';
16
+ import { generateUI } from '../../compose/core/generator.js';
17
17
  import { validateSchema } from '../../validator/validator.js';
18
18
 
19
19
  // ── Test scenarios ──────────────────────────────────────────────────
@@ -8,8 +8,8 @@
8
8
  * - shape invariants hold on both paths
9
9
  */
10
10
  import '../../../../scripts/load-env.mjs';
11
- import { pick, listEngines, ENGINES } from '../../compose/engines/registry.js';
12
- import { generateUI } from '../../compose/engine/generator.js';
11
+ import { pick, listEngines, ENGINES } from '../../compose/strategies/registry.js';
12
+ import { generateUI } from '../../compose/core/generator.js';
13
13
 
14
14
  console.log('[smoke] engines registered:', listEngines().join(', '));
15
15
 
@@ -8,8 +8,8 @@ import {
8
8
  attachTrace,
9
9
  createIssueAccumulator,
10
10
  AUTO_FIRE_POLICY,
11
- } from '../../compose/engines/zettel/issue-reporter.js';
12
- import { StateCache } from '../../compose/engines/zettel/state-cache.js';
11
+ } from '../../compose/strategies/zettel/issue-reporter.js';
12
+ import { StateCache } from '../../compose/strategies/zettel/state-cache.js';
13
13
  import { mkdtemp, readFile, rm, stat } from 'node:fs/promises';
14
14
  import { tmpdir } from 'node:os';
15
15
  import { join } from 'node:path';
@@ -7,13 +7,13 @@ import {
7
7
  applyOps,
8
8
  validateOps,
9
9
  opsToA2UI,
10
- } from '../../compose/engines/zettel/chunk-refiner.js';
10
+ } from '../../compose/strategies/zettel/chunk-refiner.js';
11
11
  import {
12
12
  StateCache,
13
13
  mintStateId,
14
14
  mintNextStateId,
15
- } from '../../compose/engines/zettel/state-cache.js';
16
- import { createIssueAccumulator } from '../../compose/engines/zettel/issue-reporter.js';
15
+ } from '../../compose/strategies/zettel/state-cache.js';
16
+ import { createIssueAccumulator } from '../../compose/strategies/zettel/issue-reporter.js';
17
17
  import {
18
18
  getChunk,
19
19
  listChunksByKind,
@@ -1,5 +1,5 @@
1
1
  // Smoke test for OD-5 plugin engine registry.
2
- import { registerEngine, unregisterEngine, pick, listEngines, ENGINES } from '../../compose/engines/registry.js';
2
+ import { registerEngine, unregisterEngine, pick, listEngines, ENGINES } from '../../compose/strategies/registry.js';
3
3
 
4
4
  let pass = 0, fail = 0;
5
5
  const t = (label, ok, detail = '') => {
@@ -7,7 +7,7 @@ import {
7
7
  mintNextStateId,
8
8
  getStateCache,
9
9
  resetStateCache,
10
- } from '../../compose/engines/zettel/state-cache.js';
10
+ } from '../../compose/strategies/zettel/state-cache.js';
11
11
 
12
12
  let pass = 0, fail = 0;
13
13
  const t = (label, ok, detail = '') => {
@@ -1,6 +1,6 @@
1
1
  // Direct test of zettel generator with LLM adapter — no HTTP server needed.
2
2
  import '../../../../scripts/load-env.mjs';
3
- import { generateZettel, clearSession, getTurns } from '../../compose/engines/zettel/generator-adapter.js';
3
+ import { generateZettel, clearSession, getTurns } from '../../compose/strategies/zettel/generator-adapter.js';
4
4
 
5
5
  // Minimal Anthropic adapter inline (mirrors what server.js makes).
6
6
  function makeAdapter() {
@@ -76,7 +76,7 @@ try {
76
76
 
77
77
  console.log('\n2. Pattern library');
78
78
 
79
- const { searchBlocks, listPatterns, lookupDomain } = await import('../../compose/engine/reference.js');
79
+ const { searchBlocks, listPatterns, lookupDomain } = await import('../../compose/core/reference.js');
80
80
 
81
81
  const allPatterns = listPatterns();
82
82
  const withTemplates = allPatterns.filter(p => p.template && Array.isArray(p.template));
@@ -176,7 +176,7 @@ for (const intent of passTests) {
176
176
 
177
177
  console.log('\n4. Instant mode generation');
178
178
 
179
- const { generateUI } = await import('../../compose/engine/generator.js');
179
+ const { generateUI } = await import('../../compose/core/generator.js');
180
180
 
181
181
  const instantTests = [
182
182
  { intent: 'login form', minComponents: 3 },
@@ -270,9 +270,9 @@ try {
270
270
  console.log('\n7. Multi-turn refinement (Phase A)');
271
271
 
272
272
  try {
273
- const { StateCache, mintStateId, mintNextStateId } = await import('../../compose/engines/zettel/state-cache.js');
274
- const { createIssueAccumulator } = await import('../../compose/engines/zettel/issue-reporter.js');
275
- const { refineFromIntent, applyOps, opsToA2UI, validateOps } = await import('../../compose/engines/zettel/chunk-refiner.js');
273
+ const { StateCache, mintStateId, mintNextStateId } = await import('../../compose/strategies/zettel/state-cache.js');
274
+ const { createIssueAccumulator } = await import('../../compose/strategies/zettel/issue-reporter.js');
275
+ const { refineFromIntent, applyOps, opsToA2UI, validateOps } = await import('../../compose/strategies/zettel/chunk-refiner.js');
276
276
  const { listChunksByKind } = await import('../../corpus/scripts/chunk-library.js');
277
277
 
278
278
  // 7a. State cache + state-id chain
@@ -94,8 +94,8 @@ assert('lookup_chunk(article) finds dashboard-admin-page',
94
94
  articleChunks.some((c) => c.name === 'dashboard-admin-page'));
95
95
 
96
96
  // ── chunk-composer + chunk-synthesizer ──
97
- import { composeFromPlan, validatePlan } from '../../compose/engines/zettel/chunk-composer.js';
98
- import { composeFromIntent } from '../../compose/engines/zettel/chunk-synthesizer.js';
97
+ import { composeFromPlan, validatePlan } from '../../compose/strategies/zettel/chunk-composer.js';
98
+ import { composeFromIntent } from '../../compose/strategies/zettel/chunk-synthesizer.js';
99
99
 
100
100
  console.log('\n── validatePlan ──');
101
101
 
@@ -42,7 +42,7 @@ if (ONLY) evalCases = evalCases.filter(e => String(e.id) === ONLY);
42
42
 
43
43
  // ── Load generator ──
44
44
 
45
- const { generateUI } = await import('../../compose/engine/generator.js');
45
+ const { generateUI } = await import('../../compose/core/generator.js');
46
46
  const { validateSchema } = await import('../../validator/validator.js');
47
47
 
48
48
  // ── Scoring functions ──
@@ -22,7 +22,7 @@ const PRO = args.has('--pro');
22
22
  const OPEN = args.has('--open');
23
23
  const OUTPUT = join(__dirname, '..', 'visual-validation.html');
24
24
 
25
- const { generateUI } = await import('../../compose/engine/generator.js');
25
+ const { generateUI } = await import('../../compose/core/generator.js');
26
26
  const { validateSchema } = await import('../../validator/validator.js');
27
27
 
28
28
  const TEST_INTENTS = [
package/server.js CHANGED
@@ -26,7 +26,7 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
26
26
  import { z } from 'zod';
27
27
 
28
28
  // ── Import from a2ui ──
29
- import { generateUI } from '../compose/engine/generator.js';
29
+ import { generateUI } from '../compose/core/generator.js';
30
30
  import { validateSchema } from '../validator/validator.js';
31
31
  import { validateMessages as validateCatalogMessages } from '../validator/catalog-validator.js';
32
32
  import {
@@ -52,11 +52,11 @@ import {
52
52
  getAllCompositions as getAllZettelCompositions,
53
53
  searchAll as searchZettelAll,
54
54
  getGraph as getZettelGraph,
55
- } from '../compose/engines/zettel/fragment-library.js';
55
+ } from '../compose/strategies/zettel/fragment-library.js';
56
56
  import {
57
57
  resolveComposition as resolveZettelComposition,
58
58
  templateToMessages as zettelTemplateToMessages,
59
- } from '../compose/engines/zettel/composer.js';
59
+ } from '../compose/strategies/zettel/composer.js';
60
60
  // Zettel bootstrap is still needed for get_fragment/resolve_composition tools;
61
61
  // the generate_ui tool now dispatches through the unified registry in gen-ui.
62
62
 
@@ -312,7 +312,7 @@ server.tool(
312
312
  // ── Pattern & Feedback Tools ──
313
313
 
314
314
  import { registerPattern } from '../retrieval/pattern-library.js';
315
- import { FeedbackCollector } from '../retrieval/feedback.js';
315
+ import { FeedbackCollector } from '../retrieval/feedback/feedback.js';
316
316
 
317
317
  const feedbackCollector = new FeedbackCollector();
318
318
 
@@ -378,7 +378,7 @@ server.tool(
378
378
 
379
379
  // ── Quality metrics tool ──
380
380
 
381
- import { feedbackStore } from '../retrieval/feedback-store.js';
381
+ import { feedbackStore } from '../retrieval/feedback/feedback-store.js';
382
382
 
383
383
  server.tool(
384
384
  'get_quality_metrics',
@@ -664,8 +664,8 @@ Pair with \`get_chunk\` to fetch full records for any of the returned names.`,
664
664
  // Spec: docs/specs/genui-chunk-marker.md (§ "Harvester contract", future:
665
665
  // composition reasoning). Plan: docs/plans/training-pipeline-chunk-harvest-2026-04-27.md.
666
666
 
667
- import { composeFromIntent as composeFromChunksImpl } from '../compose/engines/zettel/chunk-synthesizer.js';
668
- import { composeFromPlan, validatePlan } from '../compose/engines/zettel/chunk-composer.js';
667
+ import { composeFromIntent as composeFromChunksImpl } from '../compose/strategies/zettel/chunk-synthesizer.js';
668
+ import { composeFromPlan, validatePlan } from '../compose/strategies/zettel/chunk-composer.js';
669
669
  import { createAdapter as createLLMAdapter } from '../compose/llm/llm-bridge.js';
670
670
 
671
671
  // ── Multi-turn architecture (Phase A) ────────────────────────────────
@@ -676,18 +676,18 @@ import {
676
676
  getStateCache,
677
677
  mintStateId,
678
678
  mintNextStateId,
679
- } from '../compose/engines/zettel/state-cache.js';
679
+ } from '../compose/strategies/zettel/state-cache.js';
680
680
  import {
681
681
  reportIssue as reportIssueImpl,
682
682
  autoReport,
683
683
  createIssueAccumulator,
684
- } from '../compose/engines/zettel/issue-reporter.js';
684
+ } from '../compose/strategies/zettel/issue-reporter.js';
685
685
  import {
686
686
  refineFromIntent,
687
687
  applyOps,
688
688
  opsToA2UI,
689
689
  validateOps,
690
- } from '../compose/engines/zettel/chunk-refiner.js';
690
+ } from '../compose/strategies/zettel/chunk-refiner.js';
691
691
 
692
692
  const stateCache = getStateCache();
693
693