@adia-ai/a2ui-mcp 0.1.3 → 0.2.1
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 +74 -4
- package/package.json +5 -6
- package/scripts/dogfood-test.mjs +1 -1
- package/scripts/eval-chunk-synthesis.mjs +1 -1
- package/scripts/eval-compose-from-chunks.mjs +3 -3
- package/scripts/eval-diff.mjs +2 -2
- package/scripts/eval-fix.mjs +1 -1
- package/scripts/eval-refine-synthesis.mjs +4 -4
- package/scripts/generate.mjs +1 -1
- package/scripts/multi-turn-test.mjs +1 -1
- package/scripts/smoke-engine-registry.mjs +2 -2
- package/scripts/smoke-issues.mjs +2 -2
- package/scripts/smoke-refine.mjs +3 -3
- package/scripts/smoke-register-engine.mjs +1 -1
- package/scripts/smoke-state-cache.mjs +1 -1
- package/scripts/smoke-synthesis.mjs +1 -1
- package/scripts/test-a2ui.mjs +5 -5
- package/scripts/test-chunks.mjs +2 -2
- package/scripts/test-evals.mjs +1 -1
- package/scripts/visual-validate.mjs +1 -1
- package/server.js +20 -407
- package/tools/synthesis.js +436 -0
- package/evals/compose-from-chunks-holdout.jsonl +0 -20
package/CHANGELOG.md
CHANGED
|
@@ -9,7 +9,77 @@ zettel strategies.
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
_Nothing yet._
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## [0.2.1] - 2026-05-02
|
|
17
|
+
|
|
18
|
+
**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 [`docs/specs/package-architecture.md` § 15](../../../docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- `version`: `0.2.0` → `0.2.1`.
|
|
23
|
+
- `dependencies["@adia-ai/a2ui-compose"]`: `^0.2.0` (covers `0.2.1`).
|
|
24
|
+
- `dependencies["@adia-ai/a2ui-corpus"]`: `^0.2.0` (covers `0.2.1`).
|
|
25
|
+
- `dependencies["@adia-ai/a2ui-utils"]`: `^0.2.0` (covers `0.2.1`).
|
|
26
|
+
- `dependencies["@adia-ai/a2ui-retrieval"]`: `^0.2.0` (covers `0.2.1`).
|
|
27
|
+
- `dependencies["@adia-ai/a2ui-validator"]`: `^0.2.0` (covers `0.2.1`).
|
|
28
|
+
- `tools/synthesis.js` is the surface that gained the new behavior (auto-fire + trigger phrases below). `scripts/eval-compose-from-chunks.mjs` updated to load the holdout fixture from its new home in `@adia-ai/a2ui-corpus/evals/` (the file moved out of `evals/` here in this cut).
|
|
29
|
+
- `evals/compose-from-chunks-holdout.jsonl` removed from this package; relocated to `packages/a2ui/corpus/evals/holdout-compose-from-chunks.jsonl` to live next to the corpus it tests.
|
|
30
|
+
|
|
31
|
+
### Added — `report_issue` trigger phrases + sibling Markdown ticket (2026-05-02)
|
|
32
|
+
|
|
33
|
+
`report_issue` tool description now lists explicit trigger phrases ("file a ticket", "save the trace", "report this as a bug", "track this regression", "open a ticket for this", and 9 more) so the LLM knows when to fire it without guessing. The default trace depth flipped from `'summary'` to `'full'` when `state_id` is provided — the high-resolution Markdown ticket is now the design intent.
|
|
34
|
+
|
|
35
|
+
Tool return shape extended with `markdown_path` alongside the existing `path` (.json). The tool description instructs the LLM to surface BOTH paths to the user with a marker so a maintainer can navigate to either:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
📋 Logged ticket `{issue_id}` ({severity} · owner: {suggested_owner})
|
|
39
|
+
• Trace report: `{markdown_path}` ← human-readable
|
|
40
|
+
• Raw JSON: `{path}` ← machine-readable
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Added — `compose_from_chunks` auto-fires `scope-drift` on canvas-drift detection (2026-05-02)
|
|
44
|
+
|
|
45
|
+
When the composer's scope-drift gate (a2ui-compose) flags `result.scopeDrift.drift === true`, the MCP handler auto-fires a `scope-drift` issue with `trace: 'full'`, writing both the JSON ticket and the high-res Markdown report. Tool response also echoes `scopeDrift` so the calling agent can read the ratio + decide its next move. Closes the original MCP feedback's "next time canvas-drift happens, a ticket files itself" ask.
|
|
46
|
+
|
|
47
|
+
## [0.2.0] - 2026-05-02
|
|
48
|
+
|
|
49
|
+
**Lockstep cut + corpus caret-lock fix.** All 8 published `@adia-ai/*`
|
|
50
|
+
packages now share one version, governed by
|
|
51
|
+
[`docs/specs/package-architecture.md` § 15 (Versioning Policy)](../../../docs/specs/package-architecture.md#15-versioning-policy).
|
|
52
|
+
|
|
53
|
+
This release **fixes a live shipping bug** in 0.1.3: the `dependencies`
|
|
54
|
+
range `"@adia-ai/a2ui-corpus": "^0.0.6"` locked to *exactly* `0.0.6`
|
|
55
|
+
under npm pre-1.0 semver, so every fresh `npm i @adia-ai/a2ui-mcp`
|
|
56
|
+
since the corpus 0.0.7 cut was installing a stale corpus — missing the
|
|
57
|
+
§§22-25 nav consolidation, the new chunks, and the catalog regen. The
|
|
58
|
+
new range `^0.2.0` works correctly. Same class fixed for the other 4
|
|
59
|
+
internal deps in this package.
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- **`a2ui-mcp@0.1.3 → corpus@0.0.6` install bug.** The new `^0.2.0`
|
|
64
|
+
ranges resolve to the actually-current versions instead of the
|
|
65
|
+
caret-locked old ones. Consumers running `npx adiaui-mcp` from npm
|
|
66
|
+
now see the post-§§22-25 corpus + the post-rename component catalog.
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
|
|
70
|
+
- `version`: `0.1.3` → `0.2.0`.
|
|
71
|
+
- `dependencies["@adia-ai/a2ui-compose"]`: `^0.1.0` → `^0.2.0`.
|
|
72
|
+
- `dependencies["@adia-ai/a2ui-retrieval"]`: `^0.0.1` → `^0.2.0`.
|
|
73
|
+
- `dependencies["@adia-ai/a2ui-validator"]`: `^0.0.1` → `^0.2.0`.
|
|
74
|
+
- `dependencies["@adia-ai/a2ui-corpus"]`: `^0.0.6` → `^0.2.0`.
|
|
75
|
+
|
|
76
|
+
### No source changes
|
|
77
|
+
|
|
78
|
+
`server.js`, tools, scripts, evals, personas — all byte-identical to
|
|
79
|
+
0.1.3. The cut bumps version + the 4 internal dep ranges only.
|
|
80
|
+
Consumers who want the substantive 0.1.3 work (`compose_from_chunks`
|
|
81
|
+
eval runner + 20-intent hold-out set) get it via either 0.1.3 or
|
|
82
|
+
0.2.0 — and 0.2.0 additionally installs the correct corpus version.
|
|
13
83
|
|
|
14
84
|
## [0.1.3] - 2026-05-02
|
|
15
85
|
|
|
@@ -421,12 +491,12 @@ before HTML is materialized.
|
|
|
421
491
|
|
|
422
492
|
### Added (engine internals)
|
|
423
493
|
|
|
424
|
-
- `packages/a2ui/compose/
|
|
494
|
+
- `packages/a2ui/compose/strategies/zettel/chunk-composer.js` —
|
|
425
495
|
HTML-string-level composer that walks a page chunk and substitutes
|
|
426
496
|
each `data-chunk-slot` region with the bound block-level chunks'
|
|
427
497
|
HTML. Companion `validatePlan()` checks slot names + chunk-kind
|
|
428
498
|
contracts before composition.
|
|
429
|
-
- `packages/a2ui/compose/
|
|
499
|
+
- `packages/a2ui/compose/strategies/zettel/chunk-synthesizer.js` —
|
|
430
500
|
LLM-driven mix-and-match composition; pre-searches the catalog,
|
|
431
501
|
builds a prompt with a one-shot in-context example, validates the
|
|
432
502
|
LLM's binding plan against the catalog, retries with feedback on
|
|
@@ -498,7 +568,7 @@ exposes A2UI generation tools over JSON-RPC.
|
|
|
498
568
|
Initial version at the time the monorepo was established. Contains:
|
|
499
569
|
|
|
500
570
|
- MCP server (`server.js`) exposing `generate_ui`, `search_patterns`, `lookup_component`, `resolve_composition`, `validate_schema`, and related tools.
|
|
501
|
-
- Engine plugin API via in-process `registerEngine()` (see `packages/a2ui/compose/
|
|
571
|
+
- Engine plugin API via in-process `registerEngine()` (see `packages/a2ui/compose/strategies/registry.js`).
|
|
502
572
|
- Smoke tests (`scripts/smoke-*.mjs`) for engine registration, merged generation, and end-to-end A2UI tests.
|
|
503
573
|
- Eval harnesses (`scripts/test-evals.mjs`, `scripts/test-a2ui.mjs`, `scripts/eval-fix.mjs`) for corpus regression measurement.
|
|
504
574
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adia-ai/a2ui-mcp",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
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": {
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
"server.js",
|
|
11
11
|
"tools/",
|
|
12
12
|
"scripts/",
|
|
13
|
-
"evals/",
|
|
14
13
|
"personas/",
|
|
15
14
|
"README.md",
|
|
16
15
|
"CHANGELOG.md"
|
|
@@ -27,10 +26,10 @@
|
|
|
27
26
|
},
|
|
28
27
|
"dependencies": {
|
|
29
28
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
30
|
-
"@adia-ai/a2ui-compose": "^0.
|
|
31
|
-
"@adia-ai/a2ui-retrieval": "^0.0
|
|
32
|
-
"@adia-ai/a2ui-validator": "^0.0
|
|
33
|
-
"@adia-ai/a2ui-corpus": "^0.0
|
|
29
|
+
"@adia-ai/a2ui-compose": "^0.2.0",
|
|
30
|
+
"@adia-ai/a2ui-retrieval": "^0.2.0",
|
|
31
|
+
"@adia-ai/a2ui-validator": "^0.2.0",
|
|
32
|
+
"@adia-ai/a2ui-corpus": "^0.2.0",
|
|
34
33
|
"zod": "^3.24.0"
|
|
35
34
|
}
|
|
36
35
|
}
|
package/scripts/dogfood-test.mjs
CHANGED
|
@@ -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/
|
|
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/
|
|
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
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* eval-compose-from-chunks.mjs — Hold-out eval for the chunk-aware
|
|
4
4
|
* synthesizer. Per `docs/specs/compose-from-chunks-eval.md`.
|
|
5
5
|
*
|
|
6
|
-
* Reads `packages/a2ui/
|
|
6
|
+
* Reads `packages/a2ui/corpus/evals/holdout-compose-from-chunks.jsonl`,
|
|
7
7
|
* runs each intent through `composeFromIntent`, and emits a per-intent
|
|
8
8
|
* + aggregate report.
|
|
9
9
|
*
|
|
@@ -48,11 +48,11 @@ 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/
|
|
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)), '../../../..');
|
|
55
|
-
const HOLDOUT = path.join(REPO_ROOT, 'packages/a2ui/
|
|
55
|
+
const HOLDOUT = path.join(REPO_ROOT, 'packages/a2ui/corpus/evals/holdout-compose-from-chunks.jsonl');
|
|
56
56
|
const PASS_THRESHOLD = 80;
|
|
57
57
|
|
|
58
58
|
const args = process.argv.slice(2);
|
package/scripts/eval-diff.mjs
CHANGED
|
@@ -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/
|
|
32
|
-
import { generateZettel } from '../../compose/
|
|
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
|
|
package/scripts/eval-fix.mjs
CHANGED
|
@@ -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/
|
|
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/
|
|
27
|
-
import { mintStateId } from '../../compose/
|
|
28
|
-
import { createIssueAccumulator } from '../../compose/
|
|
29
|
-
import { composeFromPlan } from '../../compose/
|
|
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
|
|
package/scripts/generate.mjs
CHANGED
|
@@ -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/
|
|
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/
|
|
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/
|
|
12
|
-
import { generateUI } from '../../compose/
|
|
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
|
|
package/scripts/smoke-issues.mjs
CHANGED
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
attachTrace,
|
|
9
9
|
createIssueAccumulator,
|
|
10
10
|
AUTO_FIRE_POLICY,
|
|
11
|
-
} from '../../compose/
|
|
12
|
-
import { StateCache } from '../../compose/
|
|
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';
|
package/scripts/smoke-refine.mjs
CHANGED
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
applyOps,
|
|
8
8
|
validateOps,
|
|
9
9
|
opsToA2UI,
|
|
10
|
-
} from '../../compose/
|
|
10
|
+
} from '../../compose/strategies/zettel/chunk-refiner.js';
|
|
11
11
|
import {
|
|
12
12
|
StateCache,
|
|
13
13
|
mintStateId,
|
|
14
14
|
mintNextStateId,
|
|
15
|
-
} from '../../compose/
|
|
16
|
-
import { createIssueAccumulator } from '../../compose/
|
|
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/
|
|
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 = '') => {
|
|
@@ -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/
|
|
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() {
|
package/scripts/test-a2ui.mjs
CHANGED
|
@@ -76,7 +76,7 @@ try {
|
|
|
76
76
|
|
|
77
77
|
console.log('\n2. Pattern library');
|
|
78
78
|
|
|
79
|
-
const { searchBlocks, listPatterns, lookupDomain } = await import('../../compose/
|
|
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/
|
|
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/
|
|
274
|
-
const { createIssueAccumulator } = await import('../../compose/
|
|
275
|
-
const { refineFromIntent, applyOps, opsToA2UI, validateOps } = await import('../../compose/
|
|
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
|
package/scripts/test-chunks.mjs
CHANGED
|
@@ -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/
|
|
98
|
-
import { composeFromIntent } from '../../compose/
|
|
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
|
|
package/scripts/test-evals.mjs
CHANGED
|
@@ -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/
|
|
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/
|
|
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 = [
|