@decantr/core 1.0.3 → 1.0.5

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/dist/index.d.ts CHANGED
@@ -90,6 +90,7 @@ interface IRRoute {
90
90
  path: string;
91
91
  pageId: string;
92
92
  shell: string;
93
+ sectionId?: string;
93
94
  }
94
95
  /** Which v3 essence layer sourced this node */
95
96
  type IRLayer = 'dna' | 'blueprint' | 'meta';
@@ -118,6 +119,7 @@ interface IRShellNode extends IRNode {
118
119
  interface IRPageNode extends IRNode {
119
120
  type: 'page';
120
121
  pageId: string;
122
+ sectionId?: string;
121
123
  surface: string;
122
124
  wiring: IRWiring | null;
123
125
  }
@@ -153,7 +155,9 @@ interface ResolvedPatternEntry {
153
155
  preset: ResolvedPreset;
154
156
  }
155
157
  /** Build IR tree for a single page from its resolved structure + patterns */
156
- declare function buildPageIR(page: StructurePage, resolvedPatterns: Map<string, ResolvedPatternEntry>, wiring: IRWiring | null, theme: Theme | null, density: {
158
+ declare function buildPageIR(page: StructurePage & {
159
+ sectionId?: string;
160
+ }, resolvedPatterns: Map<string, ResolvedPatternEntry>, wiring: IRWiring | null, theme: Theme | null, density: {
157
161
  gap: string;
158
162
  }, layer?: IRLayer): IRPageNode;
159
163
 
@@ -253,6 +257,7 @@ interface ExecutionPackManifest {
253
257
  }
254
258
  interface ScaffoldPackRoute {
255
259
  pageId: string;
260
+ sectionId?: string;
256
261
  path: string;
257
262
  patternIds: string[];
258
263
  shell?: string;
@@ -283,6 +288,16 @@ interface ScaffoldPackData {
283
288
  hotkeySemantics?: HotkeySemantics;
284
289
  };
285
290
  routes: ScaffoldPackRoute[];
291
+ /**
292
+ * Required theme decorator contract — surfaced ONCE at the project level
293
+ * here, then referenced (not duplicated) in each section pack. Cold-LLM
294
+ * runs reported the table was duplicated 7-10× across context files
295
+ * (~270-540 redundant lines per scaffold) when each section pack carried
296
+ * its own copy. Centralizing in scaffold-pack — which the cold prompt
297
+ * tells AI to read first — keeps the contract authoritative without the
298
+ * per-section repetition.
299
+ */
300
+ themeDecorators?: ThemeDecoratorEntry[];
286
301
  }
287
302
  interface CommandPaletteContract {
288
303
  trigger?: string;
@@ -329,6 +344,7 @@ interface SectionNavigationItemPack {
329
344
  }
330
345
  interface SectionPackRoute {
331
346
  pageId: string;
347
+ sectionId?: string;
332
348
  path: string;
333
349
  patternIds: string[];
334
350
  shell?: string;
@@ -500,16 +516,16 @@ interface ScaffoldPackBuilderOptions {
500
516
  }>;
501
517
  hotkeySemantics?: HotkeySemantics;
502
518
  };
503
- }
504
- interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {
505
519
  /**
506
- * Required theme decorator contract for the section pack contract.
507
- * When present, the renderer emits a "Required Theme Decorators" table
508
- * with class + intent + apply-to slots same shape as the long-form
509
- * section-context renderer in CLI scaffold.ts.
520
+ * Required theme decorator contract surfaced into the scaffold pack.
521
+ * The scaffold pack is read first per cold-prompt rules, so the canonical
522
+ * decorator contract belongs here. Section packs reference this without
523
+ * duplicating to avoid the 7-10× repetition cold-LLM runs reported.
510
524
  */
511
525
  themeDecorators?: ThemeDecoratorEntry[];
512
526
  }
527
+ interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {
528
+ }
513
529
  interface PagePackBuilderOptions extends ScaffoldPackBuilderOptions {
514
530
  }
515
531
  interface MutationPackBuilderOptions extends ScaffoldPackBuilderOptions {
@@ -570,13 +586,17 @@ interface PipelineResult {
570
586
  declare function runPipeline(essence: EssenceFile, options: PipelineOptions): Promise<PipelineResult>;
571
587
 
572
588
  interface ResolvedPage {
573
- page: StructurePage;
589
+ page: ResolvedStructurePage;
574
590
  patterns: Map<string, {
575
591
  pattern: Pattern;
576
592
  preset: ResolvedPreset;
577
593
  }>;
578
594
  wiring: IRWiring | null;
579
595
  }
596
+ type ResolvedStructurePage = StructurePage & {
597
+ sectionId?: string;
598
+ route?: string;
599
+ };
580
600
  interface ResolvedEssence {
581
601
  essence: EssenceFile;
582
602
  pages: ResolvedPage[];
package/dist/index.js CHANGED
@@ -91,10 +91,10 @@ function capitalize(str) {
91
91
  }
92
92
  function buildNavItems(pages, routes) {
93
93
  const routeLookup = new Map(
94
- (routes ?? []).map((route) => [route.pageId, route.path])
94
+ (routes ?? []).map((route) => [routeIdentity(route.pageId, route.sectionId), route.path])
95
95
  );
96
96
  return pages.map((page, i) => ({
97
- href: routeLookup.get(page.id) ?? routePath(page.id, i),
97
+ href: routeLookup.get(routeIdentity(page.id, page.sectionId)) ?? routePath(page.id, i),
98
98
  icon: NAV_ICONS[page.id] || "circle",
99
99
  label: capitalize(page.id.replace(/-/g, " "))
100
100
  }));
@@ -132,36 +132,52 @@ function buildThemeFromV3(essence, isAddon) {
132
132
  isAddon
133
133
  };
134
134
  }
135
- function blueprintPageToStructurePage(page, defaultShell) {
135
+ function blueprintPageToStructurePage(page, defaultShell, sectionId) {
136
136
  return {
137
137
  id: page.id,
138
138
  shell: page.shell_override ?? defaultShell,
139
139
  layout: page.layout,
140
+ ...sectionId ? { sectionId } : {},
141
+ ...page.route ? { route: page.route } : {},
140
142
  ...page.surface ? { surface: page.surface } : {}
141
143
  };
142
144
  }
143
- function buildV3Routes(essence, blueprintPages, structurePages) {
145
+ function routeIdentity(pageId, sectionId) {
146
+ return sectionId ? `${sectionId}:${pageId}` : pageId;
147
+ }
148
+ function buildV3Routes(essence, structurePages) {
144
149
  const explicitRoutes = /* @__PURE__ */ new Map();
145
150
  for (const [path, entry] of Object.entries(essence.blueprint.routes ?? {})) {
146
- if (entry?.page && !explicitRoutes.has(entry.page)) {
147
- explicitRoutes.set(entry.page, path);
151
+ if (!entry?.page) continue;
152
+ const key = routeIdentity(entry.page, entry.section);
153
+ if (!explicitRoutes.has(key)) {
154
+ explicitRoutes.set(key, path);
148
155
  }
149
156
  }
150
- for (const page of blueprintPages) {
151
- if (page.route && !explicitRoutes.has(page.id)) {
152
- explicitRoutes.set(page.id, page.route);
157
+ for (const page of structurePages) {
158
+ const key = routeIdentity(page.id, page.sectionId);
159
+ if (page.route && !explicitRoutes.has(key)) {
160
+ explicitRoutes.set(key, page.route);
153
161
  }
154
162
  }
155
163
  if (explicitRoutes.size > 0) {
156
164
  return structurePages.flatMap((page) => {
157
- const path = explicitRoutes.get(page.id);
158
- return path ? [{ path, pageId: page.id, shell: page.shell }] : [];
165
+ const path = explicitRoutes.get(routeIdentity(page.id, page.sectionId));
166
+ return path ? [
167
+ {
168
+ path,
169
+ pageId: page.id,
170
+ shell: page.shell,
171
+ ...page.sectionId ? { sectionId: page.sectionId } : {}
172
+ }
173
+ ] : [];
159
174
  });
160
175
  }
161
176
  return structurePages.map((page, i) => ({
162
177
  path: routePath(page.id, i),
163
178
  pageId: page.id,
164
- shell: page.shell
179
+ shell: page.shell,
180
+ ...page.sectionId ? { sectionId: page.sectionId } : {}
165
181
  }));
166
182
  }
167
183
  function convertWiring(wiringResults) {
@@ -310,11 +326,10 @@ async function resolveV3Essence(essence, resolver) {
310
326
  const themeId = dna.theme.id;
311
327
  const isAddon = themeId.startsWith("custom:") || !CORE_STYLES.has(themeId);
312
328
  const theme = buildThemeFromV3(essence, isAddon);
313
- const blueprintPages = blueprint.pages ?? (blueprint.sections ? blueprint.sections.flatMap((s) => s.pages) : [{ id: "home", layout: ["hero"] }]);
314
329
  const defaultShell = blueprint.shell ?? blueprint.sections?.[0]?.shell ?? "sidebar-main";
315
330
  const structurePages = blueprint.pages ? blueprint.pages.map((page) => blueprintPageToStructurePage(page, defaultShell)) : blueprint.sections ? blueprint.sections.flatMap(
316
331
  (section) => section.pages.map(
317
- (page) => blueprintPageToStructurePage(page, section.shell ?? defaultShell)
332
+ (page) => blueprintPageToStructurePage(page, section.shell ?? defaultShell, section.id)
318
333
  )
319
334
  ) : [
320
335
  blueprintPageToStructurePage(
@@ -325,7 +340,7 @@ async function resolveV3Essence(essence, resolver) {
325
340
  const resolvedPages = await resolvePages(structurePages, resolver, registryTheme);
326
341
  const shellType = defaultShell;
327
342
  const brand = pascalCase(meta.archetype);
328
- const routes = buildV3Routes(essence, blueprintPages, structurePages);
343
+ const routes = buildV3Routes(essence, structurePages);
329
344
  const nav = buildNavItems(structurePages, routes);
330
345
  const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;
331
346
  const shell = {
@@ -486,9 +501,10 @@ function buildPageIR(page, resolvedPatterns, wiring, theme, density, layer) {
486
501
  const surface = page.surface || `_flex _col ${gapAtom}`;
487
502
  return {
488
503
  type: "page",
489
- id: page.id,
504
+ id: page.sectionId ? `${page.sectionId}:${page.id}` : page.id,
490
505
  children,
491
506
  pageId: page.id,
507
+ ...page.sectionId ? { sectionId: page.sectionId } : {},
492
508
  surface,
493
509
  wiring,
494
510
  ...layer ? { layer } : {}
@@ -771,13 +787,23 @@ function collectPatternIds(page) {
771
787
  });
772
788
  return [...new Set(patternIds)];
773
789
  }
790
+ function pageIdentity(pageId, sectionId) {
791
+ return sectionId ? `${sectionId}/${pageId}` : pageId;
792
+ }
793
+ function pageFileId(pageId, sectionId) {
794
+ return pageIdentity(pageId, sectionId).replace(/[^a-zA-Z0-9._-]+/g, "-");
795
+ }
796
+ function routePageLabel(route) {
797
+ return route.sectionId ? `${route.sectionId}/${route.pageId}` : route.pageId;
798
+ }
774
799
  function summarizeRoutes(appNode) {
775
800
  return appNode.routes.flatMap((route) => {
776
- const pageNode = findPageNode(appNode, route.pageId);
801
+ const pageNode = findPageNode(appNode, route.pageId, route.sectionId);
777
802
  if (!pageNode) return [];
778
803
  return [
779
804
  {
780
805
  pageId: pageNode.pageId,
806
+ ...route.sectionId ? { sectionId: route.sectionId } : {},
781
807
  path: route.path,
782
808
  patternIds: collectPatternIds(pageNode),
783
809
  shell: route.shell
@@ -786,13 +812,20 @@ function summarizeRoutes(appNode) {
786
812
  });
787
813
  }
788
814
  function summarizeSectionRoutes(appNode, input) {
789
- return summarizeRoutes(appNode).filter((route) => input.pageIds.includes(route.pageId));
815
+ return summarizeRoutes(appNode).filter(
816
+ (route) => input.pageIds.includes(route.pageId) && (!route.sectionId || route.sectionId === input.id)
817
+ );
790
818
  }
791
- function summarizePageRoute(appNode, pageId) {
792
- return summarizeRoutes(appNode).find((route) => route.pageId === pageId) ?? null;
819
+ function summarizePageRoute(appNode, pageId, sectionId) {
820
+ return summarizeRoutes(appNode).find(
821
+ (route) => route.pageId === pageId && (!sectionId || !route.sectionId || route.sectionId === sectionId)
822
+ ) ?? null;
793
823
  }
794
- function findPageNode(appNode, pageId) {
795
- const page = appNode.children.find((node) => node.pageId === pageId);
824
+ function findPageNode(appNode, pageId, sectionId) {
825
+ const page = appNode.children.find((node) => {
826
+ const pageNode = node;
827
+ return pageNode.pageId === pageId && (!sectionId || !pageNode.sectionId || pageNode.sectionId === sectionId);
828
+ });
796
829
  return page ? page : null;
797
830
  }
798
831
  function collectPagePatterns(page) {
@@ -922,10 +955,27 @@ function renderExecutionPackMarkdown(pack) {
922
955
  for (const route of scaffoldPack.data.routes) {
923
956
  const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
924
957
  lines.push(
925
- `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
958
+ `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
926
959
  );
927
960
  }
928
961
  lines.push("");
962
+ if (scaffoldPack.data.themeDecorators && scaffoldPack.data.themeDecorators.length > 0) {
963
+ const escScaffoldCell = (s) => s.replace(/\|/g, "\\|");
964
+ lines.push(`## Required Theme Decorators (${scaffoldPack.data.theme.id})`);
965
+ lines.push("");
966
+ lines.push(
967
+ `These classes carry the active theme's visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these across all sections \u2014 without them, every page reads as "themed colors only" with no theme character. Section packs reference this table; the contract is project-wide.`
968
+ );
969
+ lines.push("");
970
+ lines.push("| Class | Intent | Apply to |");
971
+ lines.push("|-------|--------|----------|");
972
+ for (const entry of scaffoldPack.data.themeDecorators) {
973
+ lines.push(
974
+ `| \`.${entry.class}\` | ${escScaffoldCell(entry.intent)} | ${escScaffoldCell(entry.applyTo)} |`
975
+ );
976
+ }
977
+ lines.push("");
978
+ }
929
979
  }
930
980
  if (pack.packType === "section") {
931
981
  const sectionPack = pack;
@@ -945,7 +995,7 @@ function renderExecutionPackMarkdown(pack) {
945
995
  for (const route of sectionPack.data.routes) {
946
996
  const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
947
997
  lines.push(
948
- `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
998
+ `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
949
999
  );
950
1000
  }
951
1001
  lines.push("");
@@ -994,6 +1044,13 @@ function renderExecutionPackMarkdown(pack) {
994
1044
  );
995
1045
  }
996
1046
  lines.push("");
1047
+ } else {
1048
+ lines.push("## Theme Decorators");
1049
+ lines.push("");
1050
+ lines.push(
1051
+ `Theme \`${sectionPack.data.theme.id}\` decorators are documented ONCE in \`scaffold-pack.md\` under "Required Theme Decorators". Apply them across this section's pages \u2014 the contract is the same project-wide. See also DECANTR.md "Decorator Quick Reference" for the same table.`
1052
+ );
1053
+ lines.push("");
997
1054
  }
998
1055
  }
999
1056
  if (pack.packType === "page") {
@@ -1065,7 +1122,7 @@ function renderExecutionPackMarkdown(pack) {
1065
1122
  for (const route of mutationPack.data.routes) {
1066
1123
  const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
1067
1124
  lines.push(
1068
- `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
1125
+ `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
1069
1126
  );
1070
1127
  }
1071
1128
  lines.push("");
@@ -1092,7 +1149,7 @@ function renderExecutionPackMarkdown(pack) {
1092
1149
  for (const route of reviewPack.data.routes) {
1093
1150
  const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
1094
1151
  lines.push(
1095
- `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
1152
+ `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
1096
1153
  );
1097
1154
  }
1098
1155
  lines.push("");
@@ -1233,6 +1290,24 @@ function listPackPages(essence) {
1233
1290
  features: essence.blueprint.features || []
1234
1291
  }));
1235
1292
  }
1293
+ function buildPageManifestEntries(pages) {
1294
+ const counts = /* @__PURE__ */ new Map();
1295
+ for (const page of pages) {
1296
+ counts.set(page.pageId, (counts.get(page.pageId) ?? 0) + 1);
1297
+ }
1298
+ return pages.map((page) => {
1299
+ const hasDuplicatePageId = (counts.get(page.pageId) ?? 0) > 1;
1300
+ const id = hasDuplicatePageId ? pageIdentity(page.pageId, page.sectionId) : page.pageId;
1301
+ const fileId = hasDuplicatePageId ? pageFileId(page.pageId, page.sectionId) : page.pageId;
1302
+ return {
1303
+ id,
1304
+ markdown: `page-${fileId}-pack.md`,
1305
+ json: `page-${fileId}-pack.json`,
1306
+ sectionId: page.sectionId,
1307
+ sectionRole: page.sectionRole
1308
+ };
1309
+ });
1310
+ }
1236
1311
  function buildScaffoldPack(appNode, options = {}) {
1237
1312
  const routes = summarizeRoutes(appNode);
1238
1313
  const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];
@@ -1278,7 +1353,8 @@ function buildScaffoldPack(appNode, options = {}) {
1278
1353
  routing: appNode.routing,
1279
1354
  features: appNode.features,
1280
1355
  navigation: options.navigation,
1281
- routes
1356
+ routes,
1357
+ ...options.themeDecorators && options.themeDecorators.length > 0 ? { themeDecorators: options.themeDecorators } : {}
1282
1358
  },
1283
1359
  renderedMarkdown: ""
1284
1360
  };
@@ -1344,8 +1420,8 @@ function buildSectionPack(appNode, input, options = {}) {
1344
1420
  return pack;
1345
1421
  }
1346
1422
  function buildPagePack(appNode, input, options = {}) {
1347
- const pageNode = findPageNode(appNode, input.pageId);
1348
- const route = summarizePageRoute(appNode, input.pageId);
1423
+ const pageNode = findPageNode(appNode, input.pageId, input.sectionId);
1424
+ const route = summarizePageRoute(appNode, input.pageId, input.sectionId);
1349
1425
  if (!pageNode || !route) {
1350
1426
  throw new Error(`Unknown page for page pack: ${input.pageId}`);
1351
1427
  }
@@ -1556,6 +1632,18 @@ async function compileExecutionPackBundle(essence, options = {}) {
1556
1632
  });
1557
1633
  const navMeta = effectiveEssence.meta.navigation;
1558
1634
  const commandPaletteValue = typeof navMeta?.command_palette === "object" && navMeta.command_palette !== null ? navMeta.command_palette : Boolean(navMeta?.command_palette);
1635
+ const themeDecorators = (() => {
1636
+ const defs = pipeline.registryTheme?.decorator_definitions;
1637
+ if (!defs) return void 0;
1638
+ const entries = [];
1639
+ for (const [name, def] of Object.entries(defs)) {
1640
+ const intent = def.intent || def.description || "";
1641
+ const applyTo = (def.usage || []).join(", ");
1642
+ if (!intent && !applyTo) continue;
1643
+ entries.push({ class: name, intent, applyTo });
1644
+ }
1645
+ return entries.length > 0 ? entries : void 0;
1646
+ })();
1559
1647
  const scaffold = buildScaffoldPack(pipeline.ir, {
1560
1648
  target: sharedTarget,
1561
1649
  navigation: {
@@ -1571,30 +1659,26 @@ async function compileExecutionPackBundle(essence, options = {}) {
1571
1659
  ...hotkey.semantics ? { semantics: hotkey.semantics } : {}
1572
1660
  })) : [],
1573
1661
  ...navMeta?.hotkey_semantics ? { hotkeySemantics: navMeta.hotkey_semantics } : {}
1574
- }
1662
+ },
1663
+ ...themeDecorators ? { themeDecorators } : {}
1575
1664
  });
1576
1665
  const review = buildReviewPack(pipeline.ir, {
1577
1666
  target: sharedTarget
1578
1667
  });
1579
- const themeDecorators = (() => {
1580
- const defs = pipeline.registryTheme?.decorator_definitions;
1581
- if (!defs) return void 0;
1582
- const entries = [];
1583
- for (const [name, def] of Object.entries(defs)) {
1584
- const intent = def.intent || def.description || "";
1585
- const applyTo = (def.usage || []).join(", ");
1586
- if (!intent && !applyTo) continue;
1587
- entries.push({ class: name, intent, applyTo });
1588
- }
1589
- return entries.length > 0 ? entries : void 0;
1590
- })();
1591
- const sections = listPackSections(effectiveEssence).map(
1668
+ const sectionInputs = listPackSections(effectiveEssence);
1669
+ const pageInputs = listPackPages(effectiveEssence);
1670
+ const sections = sectionInputs.map(
1592
1671
  (section) => buildSectionPack(pipeline.ir, section, {
1593
- target: sharedTarget,
1594
- ...themeDecorators ? { themeDecorators } : {}
1672
+ target: sharedTarget
1673
+ // themeDecorators intentionally NOT passed to section packs as of 1.7.22.
1674
+ // Section packs render a one-line pointer to scaffold-pack instead of
1675
+ // duplicating the full decorator table — F2 Phase 1 reports flagged
1676
+ // 7-10× duplication across context files. The decorators are still
1677
+ // available on each section pack as section-pack.theme.id allows the
1678
+ // renderer to compose the pointer with the correct theme name.
1595
1679
  })
1596
1680
  );
1597
- const pages = listPackPages(effectiveEssence).map(
1681
+ const pages = pageInputs.map(
1598
1682
  (page) => buildPagePack(pipeline.ir, page, {
1599
1683
  target: sharedTarget
1600
1684
  })
@@ -1619,19 +1703,13 @@ async function compileExecutionPackBundle(essence, options = {}) {
1619
1703
  markdown: "review-pack.md",
1620
1704
  json: "review-pack.json"
1621
1705
  },
1622
- sections: listPackSections(effectiveEssence).map((section) => ({
1706
+ sections: sectionInputs.map((section) => ({
1623
1707
  id: section.id,
1624
1708
  markdown: `section-${section.id}-pack.md`,
1625
1709
  json: `section-${section.id}-pack.json`,
1626
1710
  pageIds: section.pageIds
1627
1711
  })),
1628
- pages: listPackPages(effectiveEssence).map((page) => ({
1629
- id: page.pageId,
1630
- markdown: `page-${page.pageId}-pack.md`,
1631
- json: `page-${page.pageId}-pack.json`,
1632
- sectionId: page.sectionId,
1633
- sectionRole: page.sectionRole
1634
- })),
1712
+ pages: buildPageManifestEntries(pageInputs),
1635
1713
  mutations: ["add-page", "modify"].map((mutationType) => ({
1636
1714
  id: mutationType,
1637
1715
  markdown: `mutation-${mutationType}-pack.md`,
@@ -1665,7 +1743,9 @@ function selectExecutionPackFromBundle(bundle, selector) {
1665
1743
  pack = id ? bundle.sections.find((entry) => entry.data.sectionId === id) ?? null : null;
1666
1744
  break;
1667
1745
  case "page":
1668
- pack = id ? bundle.pages.find((entry) => entry.data.pageId === id) ?? null : null;
1746
+ pack = id ? bundle.pages.find(
1747
+ (entry) => entry.data.pageId === id || pageIdentity(entry.data.pageId, entry.data.sectionId) === id || pageFileId(entry.data.pageId, entry.data.sectionId) === id
1748
+ ) ?? null : null;
1669
1749
  break;
1670
1750
  case "mutation":
1671
1751
  pack = id ? bundle.mutations.find((entry) => entry.data.mutationType === id) ?? null : null;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resolve.ts","../src/utils.ts","../src/ir.ts","../src/ir-helpers.ts","../src/packs.ts","../src/pipeline.ts"],"sourcesContent":["import type {\n BlueprintPage,\n ColumnLayout,\n Essence,\n EssenceFile,\n EssenceV3,\n LayoutItem,\n PatternRef,\n SectionedEssence,\n StructurePage,\n} from '@decantr/essence-spec';\nimport { computeDensity, isSectioned, isSimple, isV3 } from '@decantr/essence-spec';\nimport type {\n ContentResolver,\n Pattern,\n Theme as RegistryTheme,\n ResolvedPreset,\n} from '@decantr/registry';\nimport { detectWirings, resolvePatternPreset } from '@decantr/registry';\nimport type {\n IRNavItem,\n IRRoute,\n IRShellConfig,\n IRTheme,\n IRThemeDecoration,\n IRVisualEffect,\n IRWiring,\n IRWiringSignal,\n} from './types.js';\nimport { pascalCase } from './utils.js';\n\nexport interface ResolvedPage {\n page: StructurePage;\n patterns: Map<string, { pattern: Pattern; preset: ResolvedPreset }>;\n wiring: IRWiring | null;\n}\n\nexport interface ResolvedEssence {\n essence: EssenceFile;\n pages: ResolvedPage[];\n registryTheme: RegistryTheme | null;\n density: { gap: string; level: string };\n theme: IRTheme;\n shell: IRShellConfig;\n routes: IRRoute[];\n features: string[];\n /** True when the source essence was v3 (DNA/Blueprint/Meta) */\n isV3Source: boolean;\n}\n\n// ─── Icon Mapping ─────────────────────────────────────────────\n\nconst NAV_ICONS: Record<string, string> = {\n overview: 'layout-dashboard',\n dashboard: 'layout-dashboard',\n home: 'home',\n analytics: 'bar-chart-3',\n settings: 'settings',\n users: 'users',\n billing: 'credit-card',\n reports: 'file-text',\n catalog: 'grid',\n products: 'package',\n orders: 'shopping-cart',\n messages: 'message-square',\n notifications: 'bell',\n activity: 'activity',\n search: 'search',\n profile: 'user',\n team: 'users',\n integrations: 'puzzle',\n api: 'code',\n docs: 'book-open',\n help: 'help-circle',\n projects: 'folder',\n workflows: 'git-branch',\n monitoring: 'monitor',\n security: 'shield',\n storage: 'database',\n deployments: 'rocket',\n logs: 'scroll-text',\n};\n\n// ─── Core styles that don't need explicit addon registration ──\n\nconst CORE_STYLES = new Set(['auradecantism']);\n\n// ─── Helpers ──────────────────────────────────────────────────\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction extractLayoutRefs(\n layout: LayoutItem[],\n): { id: string; explicitPreset?: string; alias?: string }[] {\n const refs: { id: string; explicitPreset?: string; alias?: string }[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n refs.push({ id: item });\n } else if (isPatternRef(item)) {\n refs.push({ id: item.pattern, explicitPreset: item.preset, alias: item.as });\n } else if (isColumnLayout(item)) {\n // cols can mix string ids and PatternRef objects per the schema.\n // Normalize each entry so downstream resolvers always see a string id.\n for (const col of item.cols) {\n if (typeof col === 'string') {\n refs.push({ id: col });\n } else {\n refs.push({ id: col.pattern, explicitPreset: col.preset, alias: col.as });\n }\n }\n }\n }\n return refs;\n}\n\n/** Flatten a layout array so column children are promoted to top-level for wiring detection */\nfunction flattenLayoutForWiring(layout: LayoutItem[]): LayoutItem[] {\n const flat: LayoutItem[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n flat.push(item);\n } else if (isPatternRef(item)) {\n flat.push(item);\n } else if (isColumnLayout(item)) {\n // Promote column children as string refs\n for (const col of item.cols) {\n flat.push(col);\n }\n }\n }\n return flat;\n}\n\nfunction routePath(pageId: string, index: number): string {\n if (index === 0) return '/';\n // AUTO: Pages ending in \"-detail\" get a dynamic :id route parameter\n if (pageId.endsWith('-detail')) {\n return `/${pageId}/:id`;\n }\n return `/${pageId}`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction buildNavItems(pages: StructurePage[], routes?: IRRoute[]): IRNavItem[] {\n const routeLookup = new Map<string, string>(\n (routes ?? []).map((route) => [route.pageId, route.path]),\n );\n return pages.map((page, i) => ({\n href: routeLookup.get(page.id) ?? routePath(page.id, i),\n icon: NAV_ICONS[page.id] || 'circle',\n label: capitalize(page.id.replace(/-/g, ' ')),\n }));\n}\n\nfunction buildThemeDecoration(theme: RegistryTheme): IRThemeDecoration | null {\n const shell = theme.shell;\n if (!shell) return null;\n // The JSON may have additional fields not in the strict type\n const shellAny = shell as unknown as Record<string, unknown>;\n return {\n root: shell.root || '',\n nav: shell.nav || '',\n header: shell.header || '',\n brand: (shellAny['brand'] as string) || '',\n navLabel: (shellAny['navLabel'] as string) || '',\n // AUTO: default nav style is 'pill' when the theme does not declare one\n navStyle: shell.nav_style || 'pill',\n defaultNavState: (shellAny['default_nav_state'] as string) || 'expanded',\n dimensions: shell.dimensions || null,\n };\n}\n\nfunction buildTheme(essence: Essence, isAddon: boolean): IRTheme {\n return {\n id: essence.theme.id,\n mode: essence.theme.mode,\n shape: essence.theme.shape || null,\n isAddon,\n };\n}\n\nfunction buildThemeFromV3(essence: EssenceV3, isAddon: boolean): IRTheme {\n const dna = essence.dna;\n return {\n id: dna.theme.id,\n mode: dna.theme.mode,\n shape: dna.radius.philosophy || dna.theme.shape || null,\n isAddon,\n };\n}\n\n/** Convert v3 BlueprintPage to the StructurePage shape used by the resolver pipeline */\nfunction blueprintPageToStructurePage(page: BlueprintPage, defaultShell: string): StructurePage {\n return {\n id: page.id,\n shell: page.shell_override ?? defaultShell,\n layout: page.layout,\n ...(page.surface ? { surface: page.surface } : {}),\n };\n}\n\nfunction buildV3Routes(\n essence: EssenceV3,\n blueprintPages: BlueprintPage[],\n structurePages: StructurePage[],\n): IRRoute[] {\n const explicitRoutes = new Map<string, string>();\n\n for (const [path, entry] of Object.entries(essence.blueprint.routes ?? {})) {\n if (entry?.page && !explicitRoutes.has(entry.page)) {\n explicitRoutes.set(entry.page, path);\n }\n }\n\n for (const page of blueprintPages) {\n if (page.route && !explicitRoutes.has(page.id)) {\n explicitRoutes.set(page.id, page.route);\n }\n }\n\n if (explicitRoutes.size > 0) {\n return structurePages.flatMap((page) => {\n const path = explicitRoutes.get(page.id);\n return path ? [{ path, pageId: page.id, shell: page.shell }] : [];\n });\n }\n\n return structurePages.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n }));\n}\n\nfunction convertWiring(wiringResults: ReturnType<typeof detectWirings>): IRWiring | null {\n if (wiringResults.length === 0) return null;\n\n const signals: IRWiringSignal[] = [];\n const props: Record<string, Record<string, string>> = {};\n const hookProps: Record<string, Record<string, string>> = {};\n const hookSet = new Set<IRWiringSignal['hookType']>();\n\n for (const result of wiringResults) {\n for (const signal of result.signals) {\n // Avoid duplicate signals\n if (!signals.some((s) => s.name === signal.name)) {\n const setter = 'set' + signal.name.charAt(0).toUpperCase() + signal.name.slice(1);\n signals.push({\n name: signal.name,\n setter,\n init: signal.init,\n hookType: signal.hookType,\n });\n hookSet.add(signal.hookType);\n }\n }\n for (const [alias, aliasProps] of Object.entries(result.props)) {\n props[alias] = { ...props[alias], ...aliasProps };\n }\n // AUTO: Merge hook-based prop mappings\n for (const [alias, aliasHookProps] of Object.entries(result.hookProps)) {\n hookProps[alias] = { ...hookProps[alias], ...aliasHookProps };\n }\n }\n\n return { signals, props, hooks: [...hookSet], hookProps };\n}\n\n// ─── Visual Effects Resolution ────────────────────────────────\n\nexport function resolveVisualEffects(\n theme: RegistryTheme,\n pattern: Pattern,\n _slot?: string,\n): IRVisualEffect | null {\n const effects = theme.effects;\n if (!effects?.enabled) return null;\n\n const typeMapping = effects.type_mapping || {};\n const componentFallback = effects.component_fallback || {};\n const intensity = effects.intensity || 'medium';\n const intensityValues = effects.intensity_values || {};\n\n // Check pattern tags / components against type_mapping\n let decorators: string[] = [];\n\n // Check if any pattern components match the component_fallback\n for (const comp of pattern.components || []) {\n const effectType = componentFallback[comp];\n if (effectType && typeMapping[effectType]) {\n decorators = [...decorators, ...typeMapping[effectType]];\n }\n }\n\n if (decorators.length === 0) return null;\n\n // Deduplicate\n decorators = [...new Set(decorators)];\n\n return {\n decorators,\n intensity: intensityValues[intensity] || {},\n };\n}\n\n// ─── Main Resolution ─────────────────────────────────────────\n\n/** Resolve all external references in an Essence file */\nexport async function resolveEssence(\n essence: EssenceFile,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n // ─── V3 path: read from dna + blueprint layers ───────────\n if (isV3(essence)) {\n return resolveV3Essence(essence, resolver);\n }\n\n // ─── V2 path: simple or sectioned ────────────────────────\n let simpleEssence: Essence;\n if (isSimple(essence)) {\n simpleEssence = essence;\n } else if (isSectioned(essence)) {\n const sectioned = essence as SectionedEssence;\n if (sectioned.sections.length > 1) {\n throw new Error(\n `Sectioned essences with ${sectioned.sections.length} sections are not yet supported. ` +\n `Only single-section sectioned essences can be processed. ` +\n `Consider migrating to v3 format using migrateV2ToV3().`,\n );\n }\n const firstSection = sectioned.sections[0];\n simpleEssence = {\n version: sectioned.version,\n archetype: firstSection.archetype,\n theme: firstSection.theme,\n personality: sectioned.personality,\n platform: sectioned.platform,\n structure: firstSection.structure,\n features: firstSection.features || [],\n density: sectioned.density,\n guard: sectioned.guard,\n target: sectioned.target,\n };\n } else {\n throw new Error('Invalid essence format');\n }\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', simpleEssence.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density computation\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n simpleEssence.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n\n // 3. Theme\n const themeId = simpleEssence.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildTheme(simpleEssence, isAddon);\n\n // 4. Resolve each page\n const resolvedPages = await resolvePages(simpleEssence.structure, resolver, registryTheme);\n\n // 5. Shell config\n const shellType = simpleEssence.structure[0]?.shell || 'sidebar-main';\n const brand = pascalCase(simpleEssence.archetype);\n const nav = buildNavItems(simpleEssence.structure);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n // 6. Routes\n const routes: IRRoute[] = simpleEssence.structure.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n }));\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: { gap: density.content_gap, level: density.level },\n theme,\n shell,\n routes,\n features: simpleEssence.features ?? [],\n isV3Source: false,\n };\n}\n\n// ─── V3 Resolution ──────────────────────────────────────────\n\nasync function resolveV3Essence(\n essence: EssenceV3,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n const { dna, blueprint, meta } = essence;\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', dna.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density — v3 carries density directly in dna.spacing\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n dna.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n // V3 dna.spacing is authoritative; override computed density with DNA values\n const densityResult = {\n gap: dna.spacing.content_gap || density.content_gap,\n level: dna.spacing.density || density.level,\n };\n\n // 3. Theme from DNA layer\n const themeId = dna.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildThemeFromV3(essence, isAddon);\n\n // 4. Convert blueprint pages to StructurePage and resolve\n // V3.1 essences may use sections instead of pages; flatten sections into pages\n const blueprintPages =\n blueprint.pages ??\n (blueprint.sections\n ? blueprint.sections.flatMap((s) => s.pages)\n : [{ id: 'home', layout: ['hero'] as LayoutItem[] }]);\n const defaultShell = blueprint.shell ?? blueprint.sections?.[0]?.shell ?? 'sidebar-main';\n const structurePages: StructurePage[] = blueprint.pages\n ? blueprint.pages.map((page) => blueprintPageToStructurePage(page, defaultShell))\n : blueprint.sections\n ? blueprint.sections.flatMap((section) =>\n section.pages.map((page) =>\n blueprintPageToStructurePage(page, section.shell ?? defaultShell),\n ),\n )\n : [\n blueprintPageToStructurePage(\n { id: 'home', layout: ['hero'] as LayoutItem[] },\n defaultShell,\n ),\n ];\n const resolvedPages = await resolvePages(structurePages, resolver, registryTheme);\n\n // 5. Shell config from blueprint\n const shellType = defaultShell;\n const brand = pascalCase(meta.archetype);\n const routes = buildV3Routes(essence, blueprintPages, structurePages);\n const nav = buildNavItems(structurePages, routes);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: densityResult,\n theme,\n shell,\n routes,\n features: blueprint.features ?? [],\n isV3Source: true,\n };\n}\n\n// ─── Shared page resolution ────────────────────────────────\n\nasync function resolvePages(\n pages: StructurePage[],\n resolver: ContentResolver,\n registryTheme: RegistryTheme | null,\n): Promise<ResolvedPage[]> {\n const resolvedPages: ResolvedPage[] = [];\n for (const page of pages) {\n const refs = extractLayoutRefs(page.layout);\n const patterns = new Map<string, { pattern: Pattern; preset: ResolvedPreset }>();\n\n for (const ref of refs) {\n const patternResult = await resolver.resolve('pattern', ref.id);\n if (patternResult) {\n const preset = resolvePatternPreset(\n patternResult.item,\n ref.explicitPreset,\n registryTheme?.pattern_preferences?.default_presets,\n );\n const key = ref.alias || ref.id;\n patterns.set(key, { pattern: patternResult.item, preset });\n }\n }\n\n // Detect wiring (flatten cols so column children are visible)\n const wiringResults = detectWirings(flattenLayoutForWiring(page.layout));\n const wiring = convertWiring(wiringResults);\n\n resolvedPages.push({ page, patterns, wiring });\n }\n return resolvedPages;\n}\n","/** Convert a kebab-case or snake_case string to PascalCase */\nexport function pascalCase(str: string): string {\n return str\n .split(/[-_]/)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n}\n","import type { ColumnLayout, LayoutItem, PatternRef, StructurePage } from '@decantr/essence-spec';\nimport type { Pattern, Theme as RegistryTheme, ResolvedPreset } from '@decantr/registry';\nimport { resolveVisualEffects } from './resolve.js';\nimport type {\n IRCardWrapping,\n IRGridNode,\n IRLayer,\n IRNode,\n IRPageNode,\n IRPatternMeta,\n IRPatternNode,\n IRVisualEffect,\n IRWiring,\n} from './types.js';\n\nexport interface ResolvedPatternEntry {\n pattern: Pattern;\n preset: ResolvedPreset;\n}\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction getPatternAlias(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.as || item.pattern;\n return '';\n}\n\nfunction getPatternId(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.pattern;\n return '';\n}\n\nfunction shouldWrapInCard(\n pattern: Pattern,\n preset: ResolvedPreset,\n theme: RegistryTheme | null,\n): boolean {\n // Hero/row/stack layouts are standalone\n const layout = preset.layout.layout;\n if (layout === 'hero' || layout === 'row') return false;\n\n // Pattern explicitly opts out\n if (pattern.contained === false) return false;\n\n // Theme spatial says no cards\n const cardWrapping = theme?.spatial?.card_wrapping;\n if (cardWrapping === 'none') return false;\n\n // Minimal: only wrap if pattern has presets (complex pattern)\n if (cardWrapping === 'minimal') {\n return Object.keys(pattern.presets).length > 0;\n }\n\n // Default: wrap\n return true;\n}\n\nfunction buildCardWrapping(pattern: Pattern, theme: RegistryTheme | null): IRCardWrapping {\n const mode = theme?.spatial?.card_wrapping || 'always';\n return {\n mode: mode as IRCardWrapping['mode'],\n headerLabel: pattern.name,\n };\n}\n\nfunction buildPatternNode(\n patternId: string,\n alias: string,\n resolved: ResolvedPatternEntry | undefined,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPatternNode {\n const pattern = resolved?.pattern;\n const preset = resolved?.preset;\n\n const layout = preset?.layout.layout || 'column';\n const isStandalone = layout === 'hero' || layout === 'row';\n const contained = pattern && preset ? shouldWrapInCard(pattern, preset, theme) : false;\n const components = pattern?.components || [];\n\n const presetName = preset?.preset || 'default';\n const presetDescription = pattern?.presets?.[presetName]?.description;\n // v2.1 C1: thread interactions[] from the pattern through to PagePackPattern\n // so the page-pack renderer can surface them as a checkbox checklist.\n const interactions = Array.isArray((pattern as { interactions?: unknown })?.interactions)\n ? ((pattern as { interactions?: unknown }).interactions as string[])\n : undefined;\n\n const patternMeta: IRPatternMeta = {\n patternId,\n preset: presetName,\n alias,\n layout,\n contained,\n standalone: isStandalone,\n code: preset?.code ? { imports: preset.code.imports, example: preset.code.example } : null,\n components,\n ...(presetDescription ? { presetDescription } : {}),\n ...(interactions && interactions.length > 0 ? { interactions } : {}),\n };\n\n const card = contained && !isStandalone && pattern ? buildCardWrapping(pattern, theme) : null;\n\n const wireProps = wiring?.props[alias] || wiring?.props[patternId] || null;\n\n // Resolve visual effects from theme + pattern when available\n const visualEffects = theme && pattern ? resolveVisualEffects(theme, pattern) : null;\n\n return {\n type: 'pattern',\n id: alias,\n children: [],\n pattern: patternMeta,\n card,\n visualEffects,\n wireProps,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n}\n\n/** Build IR tree for a single page from its resolved structure + patterns */\nexport function buildPageIR(\n page: StructurePage,\n resolvedPatterns: Map<string, ResolvedPatternEntry>,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPageNode {\n const children: IRNode[] = [];\n\n for (const item of page.layout) {\n if (typeof item === 'string') {\n // Simple string → full-width pattern\n const resolved = resolvedPatterns.get(item);\n children.push(buildPatternNode(item, item, resolved, wiring, theme, density, layer));\n } else if (isPatternRef(item)) {\n // PatternRef → pattern with optional preset/alias\n const alias = item.as || item.pattern;\n const resolved = resolvedPatterns.get(alias) || resolvedPatterns.get(item.pattern);\n children.push(buildPatternNode(item.pattern, alias, resolved, wiring, theme, density, layer));\n } else if (isColumnLayout(item)) {\n // ColumnLayout → grid with pattern children\n // cols can mix `string` ids and `PatternRef` objects per the schema.\n // Normalize FIRST so all downstream operations (Map keys, Record\n // keys, joined ids) see strings — otherwise PatternRef objects\n // serialize as `[object Object]` (cold-LLM harness flagged this\n // exact bug in cloud-platform's scaffold-pack).\n const colEntries = item.cols.map((col) => ({\n id: typeof col === 'string' ? col : col.pattern,\n alias:\n typeof col === 'string'\n ? col\n : (col.as ?? col.pattern),\n }));\n const breakpoint = item.at || null;\n const spans = item.span || null;\n\n // Normalize spans: fill in missing columns with weight 1.\n // Span keys reference column ids (the schema's span object uses\n // the column's effective id as the key).\n let normalizedSpans: Record<string, number> | null = null;\n if (spans) {\n normalizedSpans = {};\n for (const entry of colEntries) {\n normalizedSpans[entry.id] = spans[entry.id] || spans[entry.alias] || 1;\n }\n }\n\n const gridChildren: IRNode[] = [];\n for (const entry of colEntries) {\n const resolved =\n resolvedPatterns.get(entry.alias) || resolvedPatterns.get(entry.id);\n gridChildren.push(\n buildPatternNode(entry.id, entry.alias, resolved, wiring, theme, density, layer),\n );\n }\n\n const totalCols = normalizedSpans\n ? Object.values(normalizedSpans).reduce((a, b) => a + b, 0)\n : colEntries.length;\n\n // AUTO: Pass through multi-breakpoint and container query config from ColumnLayout\n const breakpoints = item.breakpoints?.map((bp) => ({ at: bp.at, cols: bp.cols })) || null;\n const responsive = item.responsive || null;\n\n const gridNode: IRGridNode = {\n type: 'grid',\n id: `grid-${colEntries.map((e) => e.id).join('-')}`,\n children: gridChildren,\n cols: totalCols,\n spans: normalizedSpans,\n breakpoint,\n breakpoints,\n responsive,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n children.push(gridNode);\n }\n }\n\n const gapAtom = density.gap.startsWith('_')\n ? density.gap\n : density.gap.startsWith('gap')\n ? `_${density.gap}`\n : `_gap${density.gap}`;\n // Page surface declares layout direction + content gap ONLY. Padding, scroll\n // containment, and flex-grow belong to the shell per the \"Layout Rules\"\n // directive in DECANTR.md (\"One scroll container per region\", \"Let shells\n // own spacing, centering, and scroll containers\", \"Pages should not\n // duplicate shell responsibilities\"). Previous default (`_p4 _overauto\n // _flex1`) contradicted that directive and the v3 harness flagged it as\n // the single most expensive contract-ambiguity friction point. Pages that\n // genuinely need to claim scroll/padding can still declare it explicitly\n // via `page.surface` — the fallback just stops prescribing it.\n const surface = page.surface || `_flex _col ${gapAtom}`;\n\n return {\n type: 'page',\n id: page.id,\n children,\n pageId: page.id,\n surface,\n wiring,\n ...(layer ? { layer } : {}),\n };\n}\n","import type { IRGridNode, IRNode, IRPatternNode } from './types.js';\n\n/** Depth-first walk of IR tree, calling visitor on each node */\nexport function walkIR(\n node: IRNode,\n visitor: (node: IRNode, parent: IRNode | null) => void,\n parent: IRNode | null = null,\n): void {\n visitor(node, parent);\n for (const child of node.children) {\n walkIR(child, visitor, node);\n }\n}\n\n/** Find all nodes of a specific type */\nexport function findNodes<T extends IRNode>(root: IRNode, type: string): T[] {\n const results: T[] = [];\n walkIR(root, (node) => {\n if (node.type === type) {\n results.push(node as T);\n }\n });\n return results;\n}\n\n/** Count total patterns in an IR tree */\nexport function countPatterns(root: IRNode): number {\n return findNodes(root, 'pattern').length;\n}\n\n/** Validate IR tree structure (no orphaned grids, patterns have meta, etc.) */\nexport function validateIR(root: IRNode): string[] {\n const errors: string[] = [];\n\n walkIR(root, (node, parent) => {\n if (node.type === 'grid') {\n const grid = node as IRGridNode;\n if (grid.children.length === 0) {\n errors.push(`Grid node \"${grid.id}\" has no children`);\n }\n }\n\n if (node.type === 'pattern') {\n const pattern = node as IRPatternNode;\n if (!pattern.pattern) {\n errors.push(`Pattern node \"${pattern.id}\" is missing pattern meta`);\n }\n if (!pattern.pattern.patternId) {\n errors.push(`Pattern node \"${pattern.id}\" has no patternId`);\n }\n }\n\n if (node.type === 'page') {\n if (!node.id) {\n errors.push('Page node is missing id');\n }\n }\n });\n\n return errors;\n}\n","import type { EssenceFile, EssenceV3 } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3 } from '@decantr/essence-spec';\nimport type { ContentResolver } from '@decantr/registry';\nimport { walkIR } from './ir-helpers.js';\nimport { runPipeline } from './pipeline.js';\nimport type { IRAppNode, IRNode, IRPageNode, IRPatternNode } from './types.js';\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport const EXECUTION_PACK_SCHEMA_URLS = {\n scaffold: 'https://decantr.ai/schemas/scaffold-pack.v1.json',\n section: 'https://decantr.ai/schemas/section-pack.v1.json',\n page: 'https://decantr.ai/schemas/page-pack.v1.json',\n mutation: 'https://decantr.ai/schemas/mutation-pack.v1.json',\n review: 'https://decantr.ai/schemas/review-pack.v1.json',\n} as const;\n\nexport const PACK_MANIFEST_SCHEMA_URL = 'https://decantr.ai/schemas/pack-manifest.v1.json';\nexport const EXECUTION_PACK_BUNDLE_SCHEMA_URL =\n 'https://decantr.ai/schemas/execution-pack-bundle.v1.json';\nexport const SELECTED_EXECUTION_PACK_SCHEMA_URL =\n 'https://decantr.ai/schemas/selected-execution-pack.v1.json';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: MutationPackKind;\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldPackRoute {\n pageId: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface ScaffoldPackData {\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n navigation?: {\n /**\n * true = palette enabled with implicit defaults.\n * false = not enabled.\n * object = explicit structured contract (see CommandPaletteContract).\n */\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n /** Default hotkey semantics applied unless per-hotkey semantics override. */\n hotkeySemantics?: HotkeySemantics;\n };\n routes: ScaffoldPackRoute[];\n}\n\nexport interface CommandPaletteContract {\n trigger?: string;\n placeholder?: string;\n width?: string;\n styling?: 'modal' | 'sheet' | 'inline' | 'fullscreen';\n commands?: Array<{\n id: string;\n label: string;\n section?: string;\n hotkey?: string;\n action?: string;\n route?: string;\n }>;\n}\n\nexport interface HotkeySemantics {\n chord_window_ms?: number;\n input_guard?: boolean;\n modifier_suppression?: boolean;\n match_case?: boolean;\n}\n\nexport interface ScaffoldExecutionPack extends ExecutionPackBase<ScaffoldPackData> {\n packType: 'scaffold';\n}\n\nexport interface SectionPackInput {\n id: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n pageIds: string[];\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives — short imperative rules for this section. */\n directives?: string[];\n}\n\n/** Navigation item contract for a section's primary navigation. */\nexport interface SectionNavigationItemPack {\n label: string;\n route: string;\n icon?: string;\n hotkey?: string;\n active_match?: string;\n badge?: string;\n}\n\nexport interface SectionPackRoute {\n pageId: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface SectionPackData {\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: SectionPackRoute[];\n /** Contract for items rendered in this section's primary navigation. */\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives emitted into the section-pack rendering. */\n directives?: string[];\n /**\n * Required theme decorator contract surfaced into the compact pack.\n * Mirrors the long-form section-context \"Required Theme Decorators\" table.\n * Cold prompts instruct AI assistants to read packs first, so the strong\n * decorator contract has to live HERE, not just in the long-form file.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\n/** Compact, render-ready decorator entry for pack contracts. */\nexport interface ThemeDecoratorEntry {\n /** Decorator class name without leading dot, e.g. \"lum-glass\". */\n class: string;\n /** Authored intent describing what the decorator does. */\n intent: string;\n /** Authored slot hints listing where to apply it (joined from usage[]). */\n applyTo: string;\n}\n\nexport interface SectionExecutionPack extends ExecutionPackBase<SectionPackData> {\n packType: 'section';\n}\n\nexport interface PagePackInput {\n pageId: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n /** Execution-level directives — short imperative rules for this page. */\n directives?: string[];\n}\n\nexport interface PagePackPattern {\n id: string;\n alias: string;\n preset: string;\n layout: string;\n /**\n * Per-preset prose from the pattern's preset.description. When present,\n * the page-pack renderer emits it as a short description line so cold\n * LLMs read preset-specific guidance instead of having to look up the\n * pattern's root description.\n */\n presetDescription?: string;\n /**\n * v2.1 Tier C1. Declared interactions from the pattern JSON. Rendered\n * as a checkbox checklist so cold LLMs in generation mode see a\n * hard-edged list they can't categorize as \"philosophy\". Enforced by\n * decantr check --strict (C5 guard rule).\n */\n interactions?: string[];\n}\n\nexport interface PagePackData {\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: PagePackPattern[];\n /** Execution-level directives emitted into the page-pack rendering. */\n directives?: string[];\n}\n\nexport interface PageExecutionPack extends ExecutionPackBase<PagePackData> {\n packType: 'page';\n}\n\nexport type MutationPackKind = 'add-page' | 'modify';\n\nexport interface MutationPackData {\n mutationType: MutationPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n workflow: string[];\n}\n\nexport interface MutationExecutionPack extends ExecutionPackBase<MutationPackData> {\n packType: 'mutation';\n}\n\nexport type ReviewPackKind = 'app';\n\nexport interface ReviewPackData {\n reviewType: ReviewPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n focusAreas: string[];\n workflow: string[];\n}\n\nexport interface ReviewExecutionPack extends ExecutionPackBase<ReviewPackData> {\n packType: 'review';\n}\n\nexport interface ExecutionPackBundle {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport type SelectedExecutionPack =\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n\nexport interface ExecutionPackSelector {\n packType: ExecutionPackType;\n id?: string | null;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack: SelectedExecutionPack;\n}\n\nexport interface ScaffoldPackBuilderOptions {\n objective?: string;\n target?: Partial<ExecutionPackTarget>;\n preset?: string | null;\n requiredSetup?: string[];\n examples?: ExecutionPackExample[];\n antiPatterns?: ExecutionPackAntiPattern[];\n successChecks?: ExecutionPackSuccessCheck[];\n tokenBudget?: Partial<ExecutionPackTokenBudget>;\n navigation?: {\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n hotkeySemantics?: HotkeySemantics;\n };\n}\n\nexport interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {\n /**\n * Required theme decorator contract for the section pack contract.\n * When present, the renderer emits a \"Required Theme Decorators\" table\n * with class + intent + apply-to slots — same shape as the long-form\n * section-context renderer in CLI scaffold.ts.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\nexport interface PagePackBuilderOptions extends ScaffoldPackBuilderOptions {}\nexport interface MutationPackBuilderOptions extends ScaffoldPackBuilderOptions {\n mutationType: MutationPackKind;\n workflow?: string[];\n}\nexport interface ReviewPackBuilderOptions extends ScaffoldPackBuilderOptions {\n reviewType?: ReviewPackKind;\n focusAreas?: string[];\n workflow?: string[];\n}\n\nexport interface CompileExecutionPackBundleOptions {\n contentRoot?: string;\n overridePaths?: string[];\n resolver?: ContentResolver;\n}\n\nconst DEFAULT_TARGET: ExecutionPackTarget = {\n platform: 'web',\n framework: null,\n runtime: null,\n adapter: 'generic-web',\n};\n\nconst DEFAULT_TOKEN_BUDGET: ExecutionPackTokenBudget = {\n target: 1400,\n max: 2200,\n strategy: [\n 'Prefer route summaries over repeated prose.',\n 'Use compact vocabulary lists instead of large reference tables.',\n 'Include only task-relevant examples and checks.',\n ],\n};\n\nconst DEFAULT_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'route-topology',\n label: 'Routes and page IDs match the compiled topology.',\n severity: 'error',\n },\n {\n id: 'shell-consistency',\n label: 'The declared shell contract is preserved unless the task explicitly mutates it.',\n severity: 'error',\n },\n {\n id: 'theme-consistency',\n label: 'Theme identity and mode remain consistent across scaffolded routes.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_SECTION_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'section-route-coherence',\n label: 'Section pages and routes remain coherent with the compiled topology.',\n severity: 'error',\n },\n {\n id: 'section-shell-consistency',\n label: 'The section shell contract stays consistent across its routes.',\n severity: 'error',\n },\n {\n id: 'section-pattern-coverage',\n label: 'Primary section patterns are represented without adding off-contract filler sections.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_PAGE_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'page-route-contract',\n label: 'The page keeps the compiled route, shell, and section contract intact.',\n severity: 'error',\n },\n {\n id: 'page-pattern-contract',\n label:\n 'The page preserves its primary compiled patterns instead of drifting into unrelated layouts.',\n severity: 'error',\n },\n {\n id: 'page-state-contract',\n label: 'Any declared wiring signals remain coherent with the rendered page structure.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_MUTATION_SUCCESS_CHECKS: Record<MutationPackKind, ExecutionPackSuccessCheck[]> = {\n 'add-page': [\n {\n id: 'mutation-essence-first',\n label: 'New pages are declared in the essence before any code generation begins.',\n severity: 'error',\n },\n {\n id: 'mutation-shell-contract',\n label:\n 'New routes inherit an existing shell and section contract unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-refresh',\n label: 'Refresh compiled packs after the mutation so downstream tasks read current topology.',\n severity: 'warn',\n },\n ],\n modify: [\n {\n id: 'mutation-existing-topology',\n label:\n 'Modified routes remain coherent with the compiled topology unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-theme-contract',\n label: 'Theme, shell, and page identity stay aligned with the current contract during edits.',\n severity: 'error',\n },\n {\n id: 'mutation-page-pack-first',\n label:\n 'Route-local edits should start from the compiled page pack rather than improvised structure.',\n severity: 'warn',\n },\n ],\n};\n\nconst DEFAULT_REVIEW_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'review-contract-baseline',\n label:\n 'Review findings should use the compiled route, shell, and theme contract as the baseline.',\n severity: 'error',\n },\n {\n id: 'review-evidence',\n label: 'Each critique finding should cite concrete evidence from the generated workspace.',\n severity: 'error',\n },\n {\n id: 'review-remediation',\n label:\n 'Suggested fixes should point back to code changes or essence updates when contract drift exists.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_REVIEW_ANTI_PATTERNS: ExecutionPackAntiPattern[] = [\n {\n id: 'inline-styles',\n summary: 'Avoid inline style literals as the primary styling path.',\n guidance:\n 'Move visual styling into tokens.css and treatments.css instead of component-local style objects.',\n },\n {\n id: 'hardcoded-colors',\n summary: 'Avoid hardcoded color literals.',\n guidance: 'Use CSS variables and theme decorators instead of hex, rgb, or hsl values.',\n },\n {\n id: 'utility-framework-leakage',\n summary: 'Avoid utility-framework leakage as the primary design language.',\n guidance:\n 'Prefer compiled Decantr treatments and contract vocabulary over ad hoc utility class stacks.',\n },\n];\n\nfunction collectPatternIds(page: IRPageNode): string[] {\n const patternIds: string[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patternIds.push(patternNode.pattern.patternId);\n });\n return [...new Set(patternIds)];\n}\n\nfunction summarizeRoutes(appNode: IRAppNode): ScaffoldPackRoute[] {\n return appNode.routes.flatMap((route) => {\n const pageNode = findPageNode(appNode, route.pageId);\n if (!pageNode) return [];\n return [\n {\n pageId: pageNode.pageId,\n path: route.path,\n patternIds: collectPatternIds(pageNode),\n shell: route.shell,\n },\n ];\n });\n}\n\nfunction summarizeSectionRoutes(appNode: IRAppNode, input: SectionPackInput): SectionPackRoute[] {\n return summarizeRoutes(appNode).filter((route) => input.pageIds.includes(route.pageId));\n}\n\nfunction summarizePageRoute(appNode: IRAppNode, pageId: string): ScaffoldPackRoute | null {\n return summarizeRoutes(appNode).find((route) => route.pageId === pageId) ?? null;\n}\n\nfunction findPageNode(appNode: IRAppNode, pageId: string): IRPageNode | null {\n const page = appNode.children.find((node) => (node as IRPageNode).pageId === pageId);\n return page ? (page as IRPageNode) : null;\n}\n\nfunction collectPagePatterns(page: IRPageNode): PagePackPattern[] {\n const patterns: PagePackPattern[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patterns.push({\n id: patternNode.pattern.patternId,\n alias: patternNode.pattern.alias,\n preset: patternNode.pattern.preset,\n layout: patternNode.pattern.layout,\n ...(patternNode.pattern.presetDescription\n ? { presetDescription: patternNode.pattern.presetDescription }\n : {}),\n ...(patternNode.pattern.interactions && patternNode.pattern.interactions.length > 0\n ? { interactions: patternNode.pattern.interactions }\n : {}),\n });\n });\n return patterns;\n}\n\nfunction mergeTokenBudget(overrides?: Partial<ExecutionPackTokenBudget>): ExecutionPackTokenBudget {\n return {\n target: overrides?.target ?? DEFAULT_TOKEN_BUDGET.target,\n max: overrides?.max ?? DEFAULT_TOKEN_BUDGET.max,\n strategy: overrides?.strategy ?? DEFAULT_TOKEN_BUDGET.strategy,\n };\n}\n\nfunction renderList(title: string, entries: string[]): string[] {\n if (entries.length === 0) return [];\n return [title, ...entries.map((entry) => `- ${entry}`), ''];\n}\n\n// Compact description of hotkey semantics for pack markdown. Returns empty\n// string when no semantics are declared so the line can be omitted entirely.\nfunction formatHotkeySemantics(semantics: HotkeySemantics | undefined): string {\n if (!semantics) return '';\n const parts: string[] = [];\n if (typeof semantics.chord_window_ms === 'number') {\n parts.push(`chord window ${semantics.chord_window_ms}ms`);\n }\n if (semantics.input_guard === true) parts.push('suppress during text-input focus');\n if (semantics.input_guard === false) parts.push('fire even while typing (explicit)');\n if (semantics.modifier_suppression === true) parts.push('ignore when modifier held');\n if (semantics.modifier_suppression === false) parts.push('allow modifier passthrough (explicit)');\n if (semantics.match_case === true) parts.push('case-sensitive');\n return parts.join('; ');\n}\n\n// Short, mechanical router-implementation hint so the LLM picks the right\n// imports without having to consult a separate narrative file. Keyed off the\n// same string enum as the schema.\nfunction routingImplementationHint(routing: 'hash' | 'history' | 'pathname'): string {\n switch (routing) {\n case 'hash':\n return 'HashRouter from react-router-dom; URLs prefixed with /# (e.g. /#/login). Only for static-only hosts without SPA fallback.';\n case 'history':\n return 'BrowserRouter from react-router-dom; regular URLs (e.g. /login). Works on Vite dev, Vercel, Netlify, Cloudflare Pages.';\n case 'pathname':\n return 'pathname-based routing (Next.js App Router file conventions).';\n default:\n return String(routing);\n }\n}\n\nexport function renderExecutionPackMarkdown(pack: ExecutionPackBase<unknown>): string {\n const lines: string[] = [];\n\n lines.push(`# ${pack.packType.charAt(0).toUpperCase()}${pack.packType.slice(1)} Pack`);\n lines.push('');\n lines.push(`**Objective:** ${pack.objective}`);\n lines.push(\n `**Target:** ${pack.target.adapter}${pack.target.framework ? ` (${pack.target.framework})` : ''}`,\n );\n lines.push(\n `**Scope:** pages=${pack.scope.pageIds.join(', ') || 'none'} | patterns=${pack.scope.patternIds.join(', ') || 'none'}`,\n );\n lines.push('');\n\n if (pack.packType === 'scaffold') {\n const scaffoldPack = pack as ScaffoldExecutionPack;\n const scaffoldShells = [\n ...new Set(scaffoldPack.data.routes.map((route) => route.shell).filter(Boolean)),\n ];\n lines.push('## Scaffold Contract');\n lines.push(`- Shell: ${scaffoldPack.data.shell}`);\n if (scaffoldShells.length > 1) {\n const secondaryShells = scaffoldShells.filter((shell) => shell !== scaffoldPack.data.shell);\n lines.push(\n `- Shells: ${[`${scaffoldPack.data.shell} (primary)`, ...secondaryShells].join(', ')}`,\n );\n }\n lines.push(`- Theme: ${scaffoldPack.data.theme.id} (${scaffoldPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${scaffoldPack.data.routing} → ${routingImplementationHint(scaffoldPack.data.routing)}`,\n );\n if (scaffoldPack.data.features.length > 0) {\n lines.push(`- Features: ${scaffoldPack.data.features.join(', ')}`);\n }\n if (\n scaffoldPack.data.navigation?.commandPalette ||\n scaffoldPack.data.navigation?.hotkeys.length\n ) {\n lines.push('- Navigation:');\n const cp = scaffoldPack.data.navigation.commandPalette;\n if (cp) {\n if (typeof cp === 'object') {\n lines.push(' - Command palette:');\n if (cp.trigger) lines.push(` - Trigger: ${cp.trigger}`);\n if (cp.styling)\n lines.push(` - Styling: ${cp.styling}${cp.width ? ` (width ${cp.width})` : ''}`);\n else if (cp.width) lines.push(` - Width: ${cp.width}`);\n if (cp.placeholder) lines.push(` - Placeholder: \"${cp.placeholder}\"`);\n if (cp.commands && cp.commands.length > 0) {\n lines.push(` - Commands (${cp.commands.length}):`);\n for (const command of cp.commands) {\n const parts: string[] = [];\n if (command.section) parts.push(command.section);\n parts.push(command.label);\n if (command.hotkey) parts.push(`[${command.hotkey}]`);\n if (command.route) parts.push(`→ ${command.route}`);\n lines.push(` - ${command.id}: ${parts.join(' · ')}`);\n }\n }\n } else {\n lines.push(' - command palette required');\n }\n }\n const globalSemantics = scaffoldPack.data.navigation.hotkeySemantics;\n if (scaffoldPack.data.navigation.hotkeys.length > 0) {\n const semanticsSummary = formatHotkeySemantics(globalSemantics);\n lines.push(` - Hotkeys${semanticsSummary ? ` (${semanticsSummary})` : ''}:`);\n for (const hotkey of scaffoldPack.data.navigation.hotkeys) {\n const target = [hotkey.label, hotkey.route].filter(Boolean).join(' — ');\n const perKeySemantics = formatHotkeySemantics(hotkey.semantics);\n const suffix = perKeySemantics ? ` _(${perKeySemantics})_` : '';\n lines.push(` - ${hotkey.key}${target ? `: ${target}` : ''}${suffix}`);\n }\n }\n }\n lines.push('');\n\n lines.push('## Route Plan');\n for (const route of scaffoldPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n }\n\n if (pack.packType === 'section') {\n const sectionPack = pack as SectionExecutionPack;\n lines.push('## Section Contract');\n lines.push(`- Section: ${sectionPack.data.sectionId}`);\n lines.push(`- Role: ${sectionPack.data.role}`);\n lines.push(`- Shell: ${sectionPack.data.shell}`);\n lines.push(`- Theme: ${sectionPack.data.theme.id} (${sectionPack.data.theme.mode})`);\n if (sectionPack.data.features.length > 0) {\n lines.push(`- Features: ${sectionPack.data.features.join(', ')}`);\n }\n if (sectionPack.data.description) {\n lines.push(`- Description: ${sectionPack.data.description}`);\n }\n lines.push('');\n\n lines.push('## Section Routes');\n for (const route of sectionPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (sectionPack.data.navigationItems && sectionPack.data.navigationItems.length > 0) {\n lines.push('## Section Navigation');\n lines.push('');\n lines.push(\n \"Render these items in the shell's primary navigation. Exact match on label, route, and icon.\",\n );\n lines.push('');\n for (const item of sectionPack.data.navigationItems) {\n const parts: string[] = [`${item.label} → ${item.route}`];\n if (item.icon) parts.push(`icon: ${item.icon}`);\n if (item.hotkey) parts.push(`hotkey: ${item.hotkey}`);\n if (item.badge) parts.push(`badge: ${item.badge}`);\n if (item.active_match) parts.push(`active match: \\`${item.active_match}\\``);\n lines.push(`- ${parts.join(' · ')}`);\n }\n lines.push('');\n }\n\n if (sectionPack.data.directives && sectionPack.data.directives.length > 0) {\n lines.push('## Section Directives');\n lines.push('');\n lines.push(\n 'Execution-level rules every page in this section must obey. Follow exactly — these live in the pack contract, not narrative prose.',\n );\n lines.push('');\n for (const directive of sectionPack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n\n // Required Theme Decorators — strong contract surfaced in the compact pack.\n // Cold prompts instruct AI to read packs first, so the decorator contract\n // has to be present here, not just in the long-form section-{id}.md file.\n // Mirrors the renderer in CLI scaffold.ts:generateSectionContext.\n if (sectionPack.data.themeDecorators && sectionPack.data.themeDecorators.length > 0) {\n const escCell = (s: string): string => s.replace(/\\|/g, '\\\\|');\n lines.push(`## Required Theme Decorators (${sectionPack.data.theme.id})`);\n lines.push('');\n lines.push(\n 'These classes carry the active theme\\'s visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these — without them, the page reads as \"themed colors only\" with no theme character.',\n );\n lines.push('');\n lines.push('| Class | Intent | Apply to |');\n lines.push('|-------|--------|----------|');\n for (const entry of sectionPack.data.themeDecorators) {\n lines.push(\n `| \\`.${entry.class}\\` | ${escCell(entry.intent)} | ${escCell(entry.applyTo)} |`,\n );\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'page') {\n const pagePack = pack as PageExecutionPack;\n lines.push('## Page Contract');\n lines.push(`- Page: ${pagePack.data.pageId}`);\n lines.push(`- Path: ${pagePack.data.path}`);\n lines.push(`- Shell: ${pagePack.data.shell}`);\n if (pagePack.data.sectionId) {\n const role = pagePack.data.sectionRole ? ` (${pagePack.data.sectionRole})` : '';\n lines.push(`- Section: ${pagePack.data.sectionId}${role}`);\n }\n lines.push(`- Theme: ${pagePack.data.theme.id} (${pagePack.data.theme.mode})`);\n if (pagePack.data.features.length > 0) {\n lines.push(`- Features: ${pagePack.data.features.join(', ')}`);\n }\n if (pagePack.data.surface) {\n lines.push(`- Surface: ${pagePack.data.surface}`);\n }\n lines.push('');\n\n lines.push('## Page Patterns');\n for (const pattern of pagePack.data.patterns) {\n lines.push(\n `- ${pattern.alias} -> ${pattern.id} [${pattern.layout}${pattern.preset ? ` | ${pattern.preset}` : ''}]`,\n );\n // Emit preset-specific description on the next line (indented) when\n // the pattern's preset carries its own prose. This stops cold LLMs\n // from falling back to the blueprint-generic root description.\n if (pattern.presetDescription) {\n lines.push(` > ${pattern.presetDescription}`);\n }\n // v2.1 C1: surface declared interactions[] as a checkbox checklist.\n // Hard-edged format — LLMs in generation mode cannot categorize a\n // checkbox as philosophy. Enforced by decantr check --strict (C5).\n if (pattern.interactions && pattern.interactions.length > 0) {\n lines.push(` **Interactions (MUST implement each — see DECANTR.md \"Interaction Requirements\"):**`);\n for (const interaction of pattern.interactions) {\n lines.push(` - [ ] ${interaction}`);\n }\n }\n }\n lines.push('');\n\n if (pagePack.data.wiringSignals.length > 0) {\n lines.push('## Wiring Signals');\n for (const signal of pagePack.data.wiringSignals) {\n lines.push(`- ${signal}`);\n }\n lines.push('');\n }\n\n if (pagePack.data.directives && pagePack.data.directives.length > 0) {\n lines.push('## Page Directives');\n lines.push('');\n lines.push('Execution-level rules for this route. Follow exactly.');\n lines.push('');\n for (const directive of pagePack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'mutation') {\n const mutationPack = pack as MutationExecutionPack;\n lines.push('## Mutation Contract');\n lines.push(`- Operation: ${mutationPack.data.mutationType}`);\n lines.push(`- Shell: ${mutationPack.data.shell}`);\n lines.push(`- Theme: ${mutationPack.data.theme.id} (${mutationPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${mutationPack.data.routing} → ${routingImplementationHint(mutationPack.data.routing)}`,\n );\n if (mutationPack.data.features.length > 0) {\n lines.push(`- Features: ${mutationPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Route Topology');\n for (const route of mutationPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (mutationPack.data.workflow.length > 0) {\n lines.push('## Workflow');\n for (const step of mutationPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'review') {\n const reviewPack = pack as ReviewExecutionPack;\n lines.push('## Review Contract');\n lines.push(`- Review Type: ${reviewPack.data.reviewType}`);\n lines.push(`- Shell: ${reviewPack.data.shell}`);\n lines.push(`- Theme: ${reviewPack.data.theme.id} (${reviewPack.data.theme.mode})`);\n lines.push(`- Routing: ${reviewPack.data.routing}`);\n if (reviewPack.data.features.length > 0) {\n lines.push(`- Features: ${reviewPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Review Topology');\n for (const route of reviewPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (reviewPack.data.focusAreas.length > 0) {\n lines.push('## Focus Areas');\n for (const focusArea of reviewPack.data.focusAreas) {\n lines.push(`- ${focusArea}`);\n }\n lines.push('');\n }\n\n if (reviewPack.data.workflow.length > 0) {\n lines.push('## Review Workflow');\n for (const step of reviewPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n // P1-1 — Page packs skip the universal footer (required setup, allowed\n // vocabulary, success checks, anti-patterns, examples, token budget).\n // These blocks are identical across every page in a 16-page scaffold\n // (~35 lines × N pages of pure boilerplate) and their JSON still carries\n // all fields for any consumer that needs the raw data. Non-page packs\n // keep the full footer — each one (scaffold, section, mutation, review)\n // is a singleton per scaffold so there's no duplication problem.\n if (pack.packType === 'page') {\n lines.push('## Shared Contract');\n lines.push(\n 'Required setup, allowed vocabulary, success checks, anti-patterns, and token budget are shared across every page pack. The full list lives in the pack JSON sidecar (`page-<id>-pack.json`) and in the pack-manifest. Refer there instead of re-reading the same boilerplate 16 times.',\n );\n lines.push('');\n return lines.join('\\n').trimEnd() + '\\n';\n }\n\n lines.push('## Required Setup');\n if (pack.requiredSetup.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.requiredSetup.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push('## Allowed Vocabulary');\n if (pack.allowedVocabulary.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.allowedVocabulary.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push(\n ...renderList(\n '## Success Checks',\n pack.successChecks.map((entry) => `${entry.label} [${entry.severity}]`),\n ),\n );\n lines.push(\n ...renderList(\n '## Anti-Patterns',\n pack.antiPatterns.map((entry) => `${entry.summary}: ${entry.guidance}`),\n ),\n );\n lines.push(\n ...renderList(\n '## Examples',\n pack.examples.map((entry) => `${entry.label} (${entry.language})`),\n ),\n );\n\n lines.push('## Token Budget');\n lines.push(`- Target: ${pack.tokenBudget.target}`);\n lines.push(`- Max: ${pack.tokenBudget.max}`);\n lines.push(...pack.tokenBudget.strategy.map((entry) => `- ${entry}`));\n lines.push('');\n\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nexport function resolvePackAdapter(\n target: string | undefined,\n platformType: string | undefined,\n): string {\n if (target === 'react' && platformType === 'spa') return 'react-vite';\n if (target === 'react') return 'react-web';\n if (target === 'vue' && platformType === 'spa') return 'vue-vite';\n if (target === 'svelte' && platformType === 'spa') return 'sveltekit';\n if (target) return target;\n return 'generic-web';\n}\n\nexport function listPackSections(essence: EssenceV3): SectionPackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections\n .map((section) => {\n const pageIds = section.pages\n .filter(\n (page) =>\n routedSectionPages.size === 0 || routedSectionPages.has(`${section.id}:${page.id}`),\n )\n .map((page) => page.id);\n\n return {\n id: section.id,\n role: section.role,\n shell: section.shell as string,\n description: section.description,\n features: section.features,\n pageIds,\n ...(Array.isArray(section.navigation_items) && section.navigation_items.length > 0\n ? { navigationItems: section.navigation_items as SectionNavigationItemPack[] }\n : {}),\n ...(Array.isArray(section.directives) && section.directives.length > 0\n ? { directives: section.directives }\n : {}),\n };\n })\n .filter((section) => section.pageIds.length > 0);\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n return [\n {\n id: essence.meta.archetype || 'default',\n role: 'primary',\n shell: (essence.blueprint.shell ?? 'sidebar-main') as string,\n description: `${essence.meta.archetype || 'Application'} section`,\n features: essence.blueprint.features || [],\n pageIds: pages.map((page) => page.id),\n },\n ];\n}\n\nexport function listPackPages(essence: EssenceV3): PagePackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections.flatMap((section) =>\n section.pages\n .map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? section.shell) as string,\n sectionId: section.id,\n sectionRole: section.role,\n features: section.features,\n ...(Array.isArray(page.directives) && page.directives.length > 0\n ? { directives: page.directives }\n : {}),\n }))\n .filter(\n (page) =>\n routedSectionPages.size === 0 ||\n routedSectionPages.has(`${page.sectionId}:${page.pageId}`),\n ),\n );\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n const defaultShell = (essence.blueprint.shell ?? 'sidebar-main') as string;\n return pages.map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? defaultShell) as string,\n sectionId: essence.meta.archetype || 'default',\n sectionRole: 'primary',\n features: essence.blueprint.features || [],\n }));\n}\n\nexport function buildScaffoldPack(\n appNode: IRAppNode,\n options: ScaffoldPackBuilderOptions = {},\n): ScaffoldExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: ScaffoldExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.scaffold,\n packVersion: '1.0.0',\n packType: 'scaffold',\n objective:\n options.objective ?? `Scaffold the ${appNode.theme.id} app shell and declared routes.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the declared routes as the topology source of truth.',\n 'Preserve the resolved theme and shell contract unless the task explicitly mutates them.',\n ],\n allowedVocabulary: [\n ...new Set([\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n navigation: options.navigation,\n routes,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildSectionPack(\n appNode: IRAppNode,\n input: SectionPackInput,\n options: SectionPackBuilderOptions = {},\n): SectionExecutionPack {\n const routes = summarizeSectionRoutes(appNode, input);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: SectionExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.section,\n packVersion: '1.0.0',\n packType: 'section',\n objective:\n options.objective ??\n `Implement the ${input.id} section using the compiled ${input.shell} shell contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Use the declared section routes as the source of truth for this slice of the app.',\n 'Keep the section shell consistent unless the task explicitly changes the shell contract.',\n ],\n allowedVocabulary: [\n ...new Set([\n input.id,\n input.role,\n input.shell,\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SECTION_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n sectionId: input.id,\n role: input.role,\n shell: input.shell,\n description: input.description,\n features: input.features,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routes,\n ...(input.navigationItems && input.navigationItems.length > 0\n ? { navigationItems: input.navigationItems }\n : {}),\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n ...(options.themeDecorators && options.themeDecorators.length > 0\n ? { themeDecorators: options.themeDecorators }\n : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildPagePack(\n appNode: IRAppNode,\n input: PagePackInput,\n options: PagePackBuilderOptions = {},\n): PageExecutionPack {\n const pageNode = findPageNode(appNode, input.pageId);\n const route = summarizePageRoute(appNode, input.pageId);\n\n if (!pageNode || !route) {\n throw new Error(`Unknown page for page pack: ${input.pageId}`);\n }\n\n const patterns = collectPagePatterns(pageNode);\n\n const pack: PageExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.page,\n packVersion: '1.0.0',\n packType: 'page',\n objective:\n options.objective ?? `Implement the ${input.pageId} route using the compiled page contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: [route.pageId],\n patternIds: [...new Set(patterns.map((pattern) => pattern.id))],\n },\n requiredSetup: options.requiredSetup ?? [\n 'Keep the compiled route and shell contract stable for this page.',\n 'Treat the listed page patterns as the primary structure for this route.',\n ],\n allowedVocabulary: [\n ...new Set(\n [\n input.pageId,\n input.shell,\n input.sectionId ?? '',\n input.sectionRole ?? '',\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...patterns.flatMap((pattern) => [pattern.id, pattern.alias, pattern.layout]),\n ].filter(Boolean),\n ),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_PAGE_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n pageId: route.pageId,\n path: route.path,\n shell: input.shell,\n sectionId: input.sectionId,\n sectionRole: input.sectionRole,\n features: input.features,\n surface: pageNode.surface,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n wiringSignals: pageNode.wiring?.signals.map((signal) => signal.name) ?? [],\n patterns,\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildMutationPack(\n appNode: IRAppNode,\n options: MutationPackBuilderOptions,\n): MutationExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const defaultWorkflow =\n options.mutationType === 'add-page'\n ? [\n 'Declare the new page in the essence before generating code.',\n 'Refresh Decantr context so section and page packs include the new route.',\n 'Read the relevant section pack and new page pack before implementation.',\n ]\n : [\n 'Read the page pack for the route you are modifying first.',\n 'Stop and update the essence before changing route, shell, or pattern contracts.',\n 'Validate and check drift after code changes complete.',\n ];\n\n const pack: MutationExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.mutation,\n packVersion: '1.0.0',\n packType: 'mutation',\n objective:\n options.objective ??\n `Execute the ${options.mutationType} workflow against the compiled app contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the compiled topology as the source of truth until the essence changes.',\n 'Refresh Decantr context after structural mutations so downstream tasks read current packs.',\n ],\n allowedVocabulary: [\n ...new Set([\n options.mutationType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_MUTATION_SUCCESS_CHECKS[options.mutationType],\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n mutationType: options.mutationType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n workflow: options.workflow ?? defaultWorkflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildReviewPack(\n appNode: IRAppNode,\n options: ReviewPackBuilderOptions = {},\n): ReviewExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const reviewType = options.reviewType ?? 'app';\n const focusAreas = options.focusAreas ?? [\n 'route-topology',\n 'theme-consistency',\n 'treatment-usage',\n 'accessibility',\n 'responsive-design',\n ];\n const workflow = options.workflow ?? [\n 'Read the scaffold pack and page packs before evaluating generated code.',\n 'Compare findings against the compiled route, shell, and theme contract first.',\n 'Escalate contract drift into essence updates when the requested output intentionally changes topology or theme identity.',\n ];\n\n const pack: ReviewExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.review,\n packVersion: '1.0.0',\n packType: 'review',\n objective:\n options.objective ?? 'Review generated output against the compiled Decantr contract.',\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Read the compiled scaffold and route packs before reviewing code.',\n 'Use concrete evidence from the workspace instead of purely stylistic intuition.',\n ],\n allowedVocabulary: [\n ...new Set([\n reviewType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ...focusAreas,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? DEFAULT_REVIEW_ANTI_PATTERNS,\n successChecks: options.successChecks ?? DEFAULT_REVIEW_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n reviewType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n focusAreas,\n workflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport async function compileExecutionPackBundle(\n essence: EssenceFile,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<ExecutionPackBundle> {\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n const generatedAt = new Date().toISOString();\n const sharedTarget = {\n framework: effectiveEssence.meta.target || null,\n runtime: effectiveEssence.meta.platform.type || null,\n adapter: resolvePackAdapter(effectiveEssence.meta.target, effectiveEssence.meta.platform.type),\n };\n\n const pipeline = await runPipeline(essence, {\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n resolver: options.resolver,\n });\n\n const navMeta = effectiveEssence.meta.navigation;\n // Preserve the full command_palette value when it's a structured contract;\n // coerce to boolean only when it's the legacy flag form.\n const commandPaletteValue: boolean | CommandPaletteContract =\n typeof navMeta?.command_palette === 'object' && navMeta.command_palette !== null\n ? (navMeta.command_palette as CommandPaletteContract)\n : Boolean(navMeta?.command_palette);\n\n const scaffold = buildScaffoldPack(pipeline.ir, {\n target: sharedTarget,\n navigation: {\n commandPalette: commandPaletteValue,\n hotkeys: Array.isArray(navMeta?.hotkeys)\n ? navMeta.hotkeys\n .filter(\n (\n hotkey,\n ): hotkey is {\n key: string;\n route?: string;\n action?: string;\n label: string;\n semantics?: HotkeySemantics;\n } =>\n Boolean(\n hotkey && typeof hotkey.key === 'string' && typeof hotkey.label === 'string',\n ),\n )\n .map((hotkey) => ({\n key: hotkey.key,\n route: hotkey.route,\n label: hotkey.label,\n ...(hotkey.semantics ? { semantics: hotkey.semantics as HotkeySemantics } : {}),\n }))\n : [],\n ...(navMeta?.hotkey_semantics\n ? { hotkeySemantics: navMeta.hotkey_semantics as HotkeySemantics }\n : {}),\n },\n });\n const review = buildReviewPack(pipeline.ir, {\n target: sharedTarget,\n });\n // Compose theme decorator contract from registry data once and reuse for\n // every section pack. Filter to entries that have the minimum data needed\n // to render a useful row (intent OR description, plus at least one usage\n // hint). Themes without decorator_definitions resolve to undefined here\n // and the renderer skips the table entirely.\n const themeDecorators: ThemeDecoratorEntry[] | undefined = (() => {\n const defs = pipeline.registryTheme?.decorator_definitions;\n if (!defs) return undefined;\n const entries: ThemeDecoratorEntry[] = [];\n for (const [name, def] of Object.entries(defs)) {\n const intent = def.intent || def.description || '';\n const applyTo = (def.usage || []).join(', ');\n if (!intent && !applyTo) continue;\n entries.push({ class: name, intent, applyTo });\n }\n return entries.length > 0 ? entries : undefined;\n })();\n\n const sections = listPackSections(effectiveEssence).map((section) =>\n buildSectionPack(pipeline.ir, section, {\n target: sharedTarget,\n ...(themeDecorators ? { themeDecorators } : {}),\n }),\n );\n const pages = listPackPages(effectiveEssence).map((page) =>\n buildPagePack(pipeline.ir, page, {\n target: sharedTarget,\n }),\n );\n const mutations = (['add-page', 'modify'] as const).map((mutationType) =>\n buildMutationPack(pipeline.ir, {\n mutationType,\n target: sharedTarget,\n }),\n );\n\n const manifest: ExecutionPackManifest = {\n $schema: PACK_MANIFEST_SCHEMA_URL,\n version: '1.0.0',\n generatedAt,\n scaffold: {\n id: 'scaffold',\n markdown: 'scaffold-pack.md',\n json: 'scaffold-pack.json',\n },\n review: {\n id: 'review',\n markdown: 'review-pack.md',\n json: 'review-pack.json',\n },\n sections: listPackSections(effectiveEssence).map((section) => ({\n id: section.id,\n markdown: `section-${section.id}-pack.md`,\n json: `section-${section.id}-pack.json`,\n pageIds: section.pageIds,\n })),\n pages: listPackPages(effectiveEssence).map((page) => ({\n id: page.pageId,\n markdown: `page-${page.pageId}-pack.md`,\n json: `page-${page.pageId}-pack.json`,\n sectionId: page.sectionId,\n sectionRole: page.sectionRole,\n })),\n mutations: (['add-page', 'modify'] as const).map((mutationType) => ({\n id: mutationType,\n markdown: `mutation-${mutationType}-pack.md`,\n json: `mutation-${mutationType}-pack.json`,\n mutationType,\n })),\n };\n\n return {\n $schema: EXECUTION_PACK_BUNDLE_SCHEMA_URL,\n generatedAt,\n sourceEssenceVersion: essence.version,\n manifest,\n scaffold,\n review,\n sections,\n pages,\n mutations,\n };\n}\n\nexport function selectExecutionPackFromBundle(\n bundle: ExecutionPackBundle,\n selector: ExecutionPackSelector,\n): SelectedExecutionPackResponse | null {\n const id = selector.id ?? null;\n let pack: SelectedExecutionPack | null = null;\n\n switch (selector.packType) {\n case 'scaffold':\n pack = bundle.scaffold;\n break;\n case 'review':\n pack = bundle.review;\n break;\n case 'section':\n pack = id ? (bundle.sections.find((entry) => entry.data.sectionId === id) ?? null) : null;\n break;\n case 'page':\n pack = id ? (bundle.pages.find((entry) => entry.data.pageId === id) ?? null) : null;\n break;\n case 'mutation':\n pack = id ? (bundle.mutations.find((entry) => entry.data.mutationType === id) ?? null) : null;\n break;\n default:\n pack = null;\n break;\n }\n\n if (!pack) {\n return null;\n }\n\n return {\n $schema: SELECTED_EXECUTION_PACK_SCHEMA_URL,\n generatedAt: bundle.generatedAt,\n sourceEssenceVersion: bundle.sourceEssenceVersion,\n manifest: bundle.manifest,\n selector: {\n packType: selector.packType,\n id,\n },\n pack,\n };\n}\n\nexport async function compileSelectedExecutionPack(\n essence: EssenceFile,\n selector: ExecutionPackSelector,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<SelectedExecutionPackResponse | null> {\n const bundle = await compileExecutionPackBundle(essence, options);\n return selectExecutionPackFromBundle(bundle, selector);\n}\n","import type { EssenceFile } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3, validateEssence } from '@decantr/essence-spec';\nimport type { ContentResolver, Theme as RegistryTheme } from '@decantr/registry';\nimport { createResolver } from '@decantr/registry';\nimport { buildPageIR } from './ir.js';\nimport { resolveEssence } from './resolve.js';\nimport type { IRAppNode, IRLayer, IRPageNode, IRShellNode, IRStoreNode } from './types.js';\nimport { pascalCase } from './utils.js';\n\nfunction extractRouting(essence: EssenceFile): 'hash' | 'history' | 'pathname' {\n // Modern-SPA default. See packages/cli/src/scaffold.ts getPlatformMeta for rationale.\n if (isV3(essence)) {\n return essence.meta.platform.routing || 'history';\n }\n return (\n ((essence as { platform?: { routing?: string } }).platform?.routing as\n | 'hash'\n | 'history'\n | 'pathname') || 'history'\n );\n}\n\nexport interface PipelineOptions {\n /** Path to content directory (patterns, archetypes, themes) */\n contentRoot?: string;\n\n /** Override paths for local content resolution */\n overridePaths?: string[];\n\n /** Only resolve specific page(s) */\n pageFilter?: string;\n\n /** Optional custom resolver for hosted or in-memory execution */\n resolver?: ContentResolver;\n}\n\nexport interface PipelineResult {\n /** The framework-agnostic intermediate representation */\n ir: IRAppNode;\n /**\n * The fully-resolved registry theme record, including `decorator_definitions`\n * and other rich theme data not carried in the lite IR `theme` node.\n * Consumers (e.g. pack builders) need this to render decorator contracts\n * into compiled artifacts.\n */\n registryTheme: RegistryTheme | null;\n}\n\n/**\n * Run the Design Pipeline:\n * 1. Validate Essence against schema + guard rules\n * 2. Resolve all references (patterns, theme, wiring) from registry\n * 3. Build framework-agnostic IR tree\n * 4. Return IR (no code generation — that's the consumer's job)\n */\nexport async function runPipeline(\n essence: EssenceFile,\n options: PipelineOptions,\n): Promise<PipelineResult> {\n // 1. Validate\n const validation = validateEssence(essence);\n if (!validation.valid) {\n throw new Error(`Invalid essence: ${validation.errors.join(', ')}`);\n }\n\n // 2. Auto-migrate v2 → v3 before processing\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n\n // 3. Create resolver and resolve\n const resolver =\n options.resolver ??\n (() => {\n if (!options.contentRoot) {\n throw new Error('Pipeline options must include either a contentRoot or a resolver.');\n }\n\n return createResolver({\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n });\n })();\n\n const resolved = await resolveEssence(effectiveEssence, resolver);\n\n // 4. Build IR pages (v3 sources get layer metadata)\n const layer: IRLayer | undefined = resolved.isV3Source ? 'blueprint' : undefined;\n const pageNodes: IRPageNode[] = [];\n for (const rp of resolved.pages) {\n const pageIR = buildPageIR(\n rp.page,\n rp.patterns,\n rp.wiring,\n resolved.registryTheme,\n { gap: resolved.density.gap },\n layer,\n );\n pageNodes.push(pageIR);\n }\n\n // Apply page filter\n let filteredPages = pageNodes;\n if (options.pageFilter) {\n filteredPages = pageNodes.filter((p) => p.pageId === options.pageFilter);\n }\n\n // 4. Build shell node\n const shellNode: IRShellNode = {\n type: 'shell',\n id: 'shell',\n children: [],\n config: resolved.shell,\n };\n\n // 5. Build store node\n const storeNode: IRStoreNode = {\n type: 'store',\n id: 'store',\n children: [],\n pageSignals: pageNodes.map((p) => ({\n name: p.pageId,\n pascalName: pascalCase(p.pageId),\n })),\n };\n\n // 6. Assemble app node\n const appNode: IRAppNode = {\n type: 'app',\n id: 'app',\n children: filteredPages,\n theme: resolved.theme,\n routes: resolved.routes,\n routing: extractRouting(resolved.essence),\n shell: shellNode,\n store: storeNode,\n features: resolved.features,\n };\n\n return { ir: appNode, registryTheme: resolved.registryTheme };\n}\n"],"mappings":";AAWA,SAAS,gBAAgB,aAAa,UAAU,YAAY;AAO5D,SAAS,eAAe,4BAA4B;;;ACjB7C,SAAS,WAAW,KAAqB;AAC9C,SAAO,IACJ,MAAM,MAAM,EACZ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC,CAAC,EACjD,KAAK,EAAE;AACZ;;;AD8CA,IAAM,YAAoC;AAAA,EACxC,UAAU;AAAA,EACV,WAAW;AAAA,EACX,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,eAAe;AAAA,EACf,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,cAAc;AAAA,EACd,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AACR;AAIA,IAAM,cAAc,oBAAI,IAAI,CAAC,eAAe,CAAC;AAI7C,SAAS,aAAa,MAAsC;AAC1D,SAAO,OAAO,SAAS,YAAY,aAAa;AAClD;AAEA,SAAS,eAAe,MAAwC;AAC9D,SAAO,OAAO,SAAS,YAAY,UAAU;AAC/C;AAEA,SAAS,kBACP,QAC2D;AAC3D,QAAM,OAAkE,CAAC;AACzE,aAAW,QAAQ,QAAQ;AACzB,QAAI,OAAO,SAAS,UAAU;AAC5B,WAAK,KAAK,EAAE,IAAI,KAAK,CAAC;AAAA,IACxB,WAAW,aAAa,IAAI,GAAG;AAC7B,WAAK,KAAK,EAAE,IAAI,KAAK,SAAS,gBAAgB,KAAK,QAAQ,OAAO,KAAK,GAAG,CAAC;AAAA,IAC7E,WAAW,eAAe,IAAI,GAAG;AAG/B,iBAAW,OAAO,KAAK,MAAM;AAC3B,YAAI,OAAO,QAAQ,UAAU;AAC3B,eAAK,KAAK,EAAE,IAAI,IAAI,CAAC;AAAA,QACvB,OAAO;AACL,eAAK,KAAK,EAAE,IAAI,IAAI,SAAS,gBAAgB,IAAI,QAAQ,OAAO,IAAI,GAAG,CAAC;AAAA,QAC1E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,uBAAuB,QAAoC;AAClE,QAAM,OAAqB,CAAC;AAC5B,aAAW,QAAQ,QAAQ;AACzB,QAAI,OAAO,SAAS,UAAU;AAC5B,WAAK,KAAK,IAAI;AAAA,IAChB,WAAW,aAAa,IAAI,GAAG;AAC7B,WAAK,KAAK,IAAI;AAAA,IAChB,WAAW,eAAe,IAAI,GAAG;AAE/B,iBAAW,OAAO,KAAK,MAAM;AAC3B,aAAK,KAAK,GAAG;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,UAAU,QAAgB,OAAuB;AACxD,MAAI,UAAU,EAAG,QAAO;AAExB,MAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,WAAO,IAAI,MAAM;AAAA,EACnB;AACA,SAAO,IAAI,MAAM;AACnB;AAEA,SAAS,WAAW,KAAqB;AACvC,SAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAClD;AAEA,SAAS,cAAc,OAAwB,QAAiC;AAC9E,QAAM,cAAc,IAAI;AAAA,KACrB,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,MAAM,IAAI,CAAC;AAAA,EAC1D;AACA,SAAO,MAAM,IAAI,CAAC,MAAM,OAAO;AAAA,IAC7B,MAAM,YAAY,IAAI,KAAK,EAAE,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,IACtD,MAAM,UAAU,KAAK,EAAE,KAAK;AAAA,IAC5B,OAAO,WAAW,KAAK,GAAG,QAAQ,MAAM,GAAG,CAAC;AAAA,EAC9C,EAAE;AACJ;AAEA,SAAS,qBAAqB,OAAgD;AAC5E,QAAM,QAAQ,MAAM;AACpB,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,WAAW;AACjB,SAAO;AAAA,IACL,MAAM,MAAM,QAAQ;AAAA,IACpB,KAAK,MAAM,OAAO;AAAA,IAClB,QAAQ,MAAM,UAAU;AAAA,IACxB,OAAQ,SAAS,OAAO,KAAgB;AAAA,IACxC,UAAW,SAAS,UAAU,KAAgB;AAAA;AAAA,IAE9C,UAAU,MAAM,aAAa;AAAA,IAC7B,iBAAkB,SAAS,mBAAmB,KAAgB;AAAA,IAC9D,YAAY,MAAM,cAAc;AAAA,EAClC;AACF;AAEA,SAAS,WAAW,SAAkB,SAA2B;AAC/D,SAAO;AAAA,IACL,IAAI,QAAQ,MAAM;AAAA,IAClB,MAAM,QAAQ,MAAM;AAAA,IACpB,OAAO,QAAQ,MAAM,SAAS;AAAA,IAC9B;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAAoB,SAA2B;AACvE,QAAM,MAAM,QAAQ;AACpB,SAAO;AAAA,IACL,IAAI,IAAI,MAAM;AAAA,IACd,MAAM,IAAI,MAAM;AAAA,IAChB,OAAO,IAAI,OAAO,cAAc,IAAI,MAAM,SAAS;AAAA,IACnD;AAAA,EACF;AACF;AAGA,SAAS,6BAA6B,MAAqB,cAAqC;AAC9F,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,OAAO,KAAK,kBAAkB;AAAA,IAC9B,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,EAClD;AACF;AAEA,SAAS,cACP,SACA,gBACA,gBACW;AACX,QAAM,iBAAiB,oBAAI,IAAoB;AAE/C,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,QAAQ,UAAU,UAAU,CAAC,CAAC,GAAG;AAC1E,QAAI,OAAO,QAAQ,CAAC,eAAe,IAAI,MAAM,IAAI,GAAG;AAClD,qBAAe,IAAI,MAAM,MAAM,IAAI;AAAA,IACrC;AAAA,EACF;AAEA,aAAW,QAAQ,gBAAgB;AACjC,QAAI,KAAK,SAAS,CAAC,eAAe,IAAI,KAAK,EAAE,GAAG;AAC9C,qBAAe,IAAI,KAAK,IAAI,KAAK,KAAK;AAAA,IACxC;AAAA,EACF;AAEA,MAAI,eAAe,OAAO,GAAG;AAC3B,WAAO,eAAe,QAAQ,CAAC,SAAS;AACtC,YAAM,OAAO,eAAe,IAAI,KAAK,EAAE;AACvC,aAAO,OAAO,CAAC,EAAE,MAAM,QAAQ,KAAK,IAAI,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,IAClE,CAAC;AAAA,EACH;AAEA,SAAO,eAAe,IAAI,CAAC,MAAM,OAAO;AAAA,IACtC,MAAM,UAAU,KAAK,IAAI,CAAC;AAAA,IAC1B,QAAQ,KAAK;AAAA,IACb,OAAO,KAAK;AAAA,EACd,EAAE;AACJ;AAEA,SAAS,cAAc,eAAkE;AACvF,MAAI,cAAc,WAAW,EAAG,QAAO;AAEvC,QAAM,UAA4B,CAAC;AACnC,QAAM,QAAgD,CAAC;AACvD,QAAM,YAAoD,CAAC;AAC3D,QAAM,UAAU,oBAAI,IAAgC;AAEpD,aAAW,UAAU,eAAe;AAClC,eAAW,UAAU,OAAO,SAAS;AAEnC,UAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,IAAI,GAAG;AAChD,cAAM,SAAS,QAAQ,OAAO,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,KAAK,MAAM,CAAC;AAChF,gBAAQ,KAAK;AAAA,UACX,MAAM,OAAO;AAAA,UACb;AAAA,UACA,MAAM,OAAO;AAAA,UACb,UAAU,OAAO;AAAA,QACnB,CAAC;AACD,gBAAQ,IAAI,OAAO,QAAQ;AAAA,MAC7B;AAAA,IACF;AACA,eAAW,CAAC,OAAO,UAAU,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AAC9D,YAAM,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,GAAG,GAAG,WAAW;AAAA,IAClD;AAEA,eAAW,CAAC,OAAO,cAAc,KAAK,OAAO,QAAQ,OAAO,SAAS,GAAG;AACtE,gBAAU,KAAK,IAAI,EAAE,GAAG,UAAU,KAAK,GAAG,GAAG,eAAe;AAAA,IAC9D;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,UAAU;AAC1D;AAIO,SAAS,qBACd,OACA,SACA,OACuB;AACvB,QAAM,UAAU,MAAM;AACtB,MAAI,CAAC,SAAS,QAAS,QAAO;AAE9B,QAAM,cAAc,QAAQ,gBAAgB,CAAC;AAC7C,QAAM,oBAAoB,QAAQ,sBAAsB,CAAC;AACzD,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,kBAAkB,QAAQ,oBAAoB,CAAC;AAGrD,MAAI,aAAuB,CAAC;AAG5B,aAAW,QAAQ,QAAQ,cAAc,CAAC,GAAG;AAC3C,UAAM,aAAa,kBAAkB,IAAI;AACzC,QAAI,cAAc,YAAY,UAAU,GAAG;AACzC,mBAAa,CAAC,GAAG,YAAY,GAAG,YAAY,UAAU,CAAC;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,EAAG,QAAO;AAGpC,eAAa,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC;AAEpC,SAAO;AAAA,IACL;AAAA,IACA,WAAW,gBAAgB,SAAS,KAAK,CAAC;AAAA,EAC5C;AACF;AAKA,eAAsB,eACpB,SACA,UAC0B;AAE1B,MAAI,KAAK,OAAO,GAAG;AACjB,WAAO,iBAAiB,SAAS,QAAQ;AAAA,EAC3C;AAGA,MAAI;AACJ,MAAI,SAAS,OAAO,GAAG;AACrB,oBAAgB;AAAA,EAClB,WAAW,YAAY,OAAO,GAAG;AAC/B,UAAM,YAAY;AAClB,QAAI,UAAU,SAAS,SAAS,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,2BAA2B,UAAU,SAAS,MAAM;AAAA,MAGtD;AAAA,IACF;AACA,UAAM,eAAe,UAAU,SAAS,CAAC;AACzC,oBAAgB;AAAA,MACd,SAAS,UAAU;AAAA,MACnB,WAAW,aAAa;AAAA,MACxB,OAAO,aAAa;AAAA,MACpB,aAAa,UAAU;AAAA,MACvB,UAAU,UAAU;AAAA,MACpB,WAAW,aAAa;AAAA,MACxB,UAAU,aAAa,YAAY,CAAC;AAAA,MACpC,SAAS,UAAU;AAAA,MACnB,OAAO,UAAU;AAAA,MACjB,QAAQ,UAAU;AAAA,IACpB;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAGA,MAAI,gBAAsC;AAC1C,QAAM,cAAc,MAAM,SAAS,QAAQ,SAAS,cAAc,MAAM,EAAE;AAC1E,MAAI,aAAa;AACf,oBAAgB,YAAY;AAAA,EAC9B;AAGA,QAAM,eAAe,eAAe;AACpC,QAAM,UAAU;AAAA,IACd,cAAc;AAAA,IACd,eACI;AAAA,MACE,cAAc,aAAa;AAAA,MAC3B,mBAAmB,aAAa;AAAA,IAClC,IACA;AAAA,EACN;AAGA,QAAM,UAAU,cAAc,MAAM;AACpC,QAAM,UAAU,QAAQ,WAAW,SAAS,KAAK,CAAC,YAAY,IAAI,OAAO;AACzE,QAAM,QAAQ,WAAW,eAAe,OAAO;AAG/C,QAAM,gBAAgB,MAAM,aAAa,cAAc,WAAW,UAAU,aAAa;AAGzF,QAAM,YAAY,cAAc,UAAU,CAAC,GAAG,SAAS;AACvD,QAAM,QAAQ,WAAW,cAAc,SAAS;AAChD,QAAM,MAAM,cAAc,cAAc,SAAS;AACjD,QAAM,aAAa,gBAAgB,qBAAqB,aAAa,IAAI;AAEzE,QAAM,QAAuB;AAAA,IAC3B,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,EACF;AAGA,QAAM,SAAoB,cAAc,UAAU,IAAI,CAAC,MAAM,OAAO;AAAA,IAClE,MAAM,UAAU,KAAK,IAAI,CAAC;AAAA,IAC1B,QAAQ,KAAK;AAAA,IACb,OAAO,KAAK;AAAA,EACd,EAAE;AAEF,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,SAAS,EAAE,KAAK,QAAQ,aAAa,OAAO,QAAQ,MAAM;AAAA,IAC1D;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,cAAc,YAAY,CAAC;AAAA,IACrC,YAAY;AAAA,EACd;AACF;AAIA,eAAe,iBACb,SACA,UAC0B;AAC1B,QAAM,EAAE,KAAK,WAAW,KAAK,IAAI;AAGjC,MAAI,gBAAsC;AAC1C,QAAM,cAAc,MAAM,SAAS,QAAQ,SAAS,IAAI,MAAM,EAAE;AAChE,MAAI,aAAa;AACf,oBAAgB,YAAY;AAAA,EAC9B;AAGA,QAAM,eAAe,eAAe;AACpC,QAAM,UAAU;AAAA,IACd,IAAI;AAAA,IACJ,eACI;AAAA,MACE,cAAc,aAAa;AAAA,MAC3B,mBAAmB,aAAa;AAAA,IAClC,IACA;AAAA,EACN;AAEA,QAAM,gBAAgB;AAAA,IACpB,KAAK,IAAI,QAAQ,eAAe,QAAQ;AAAA,IACxC,OAAO,IAAI,QAAQ,WAAW,QAAQ;AAAA,EACxC;AAGA,QAAM,UAAU,IAAI,MAAM;AAC1B,QAAM,UAAU,QAAQ,WAAW,SAAS,KAAK,CAAC,YAAY,IAAI,OAAO;AACzE,QAAM,QAAQ,iBAAiB,SAAS,OAAO;AAI/C,QAAM,iBACJ,UAAU,UACT,UAAU,WACP,UAAU,SAAS,QAAQ,CAAC,MAAM,EAAE,KAAK,IACzC,CAAC,EAAE,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAkB,CAAC;AACvD,QAAM,eAAe,UAAU,SAAS,UAAU,WAAW,CAAC,GAAG,SAAS;AAC1E,QAAM,iBAAkC,UAAU,QAC9C,UAAU,MAAM,IAAI,CAAC,SAAS,6BAA6B,MAAM,YAAY,CAAC,IAC9E,UAAU,WACR,UAAU,SAAS;AAAA,IAAQ,CAAC,YAC1B,QAAQ,MAAM;AAAA,MAAI,CAAC,SACjB,6BAA6B,MAAM,QAAQ,SAAS,YAAY;AAAA,IAClE;AAAA,EACF,IACA;AAAA,IACE;AAAA,MACE,EAAE,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAkB;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACN,QAAM,gBAAgB,MAAM,aAAa,gBAAgB,UAAU,aAAa;AAGhF,QAAM,YAAY;AAClB,QAAM,QAAQ,WAAW,KAAK,SAAS;AACvC,QAAM,SAAS,cAAc,SAAS,gBAAgB,cAAc;AACpE,QAAM,MAAM,cAAc,gBAAgB,MAAM;AAChD,QAAM,aAAa,gBAAgB,qBAAqB,aAAa,IAAI;AAEzE,QAAM,QAAuB;AAAA,IAC3B,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,UAAU,YAAY,CAAC;AAAA,IACjC,YAAY;AAAA,EACd;AACF;AAIA,eAAe,aACb,OACA,UACA,eACyB;AACzB,QAAM,gBAAgC,CAAC;AACvC,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,kBAAkB,KAAK,MAAM;AAC1C,UAAM,WAAW,oBAAI,IAA0D;AAE/E,eAAW,OAAO,MAAM;AACtB,YAAM,gBAAgB,MAAM,SAAS,QAAQ,WAAW,IAAI,EAAE;AAC9D,UAAI,eAAe;AACjB,cAAM,SAAS;AAAA,UACb,cAAc;AAAA,UACd,IAAI;AAAA,UACJ,eAAe,qBAAqB;AAAA,QACtC;AACA,cAAM,MAAM,IAAI,SAAS,IAAI;AAC7B,iBAAS,IAAI,KAAK,EAAE,SAAS,cAAc,MAAM,OAAO,CAAC;AAAA,MAC3D;AAAA,IACF;AAGA,UAAM,gBAAgB,cAAc,uBAAuB,KAAK,MAAM,CAAC;AACvE,UAAM,SAAS,cAAc,aAAa;AAE1C,kBAAc,KAAK,EAAE,MAAM,UAAU,OAAO,CAAC;AAAA,EAC/C;AACA,SAAO;AACT;;;AEtgBA,SAASA,cAAa,MAAsC;AAC1D,SAAO,OAAO,SAAS,YAAY,aAAa;AAClD;AAEA,SAASC,gBAAe,MAAwC;AAC9D,SAAO,OAAO,SAAS,YAAY,UAAU;AAC/C;AAcA,SAAS,iBACP,SACA,QACA,OACS;AAET,QAAM,SAAS,OAAO,OAAO;AAC7B,MAAI,WAAW,UAAU,WAAW,MAAO,QAAO;AAGlD,MAAI,QAAQ,cAAc,MAAO,QAAO;AAGxC,QAAM,eAAe,OAAO,SAAS;AACrC,MAAI,iBAAiB,OAAQ,QAAO;AAGpC,MAAI,iBAAiB,WAAW;AAC9B,WAAO,OAAO,KAAK,QAAQ,OAAO,EAAE,SAAS;AAAA,EAC/C;AAGA,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAkB,OAA6C;AACxF,QAAM,OAAO,OAAO,SAAS,iBAAiB;AAC9C,SAAO;AAAA,IACL;AAAA,IACA,aAAa,QAAQ;AAAA,EACvB;AACF;AAEA,SAAS,iBACP,WACA,OACA,UACA,QACA,OACA,SACA,OACe;AACf,QAAM,UAAU,UAAU;AAC1B,QAAM,SAAS,UAAU;AAEzB,QAAM,SAAS,QAAQ,OAAO,UAAU;AACxC,QAAM,eAAe,WAAW,UAAU,WAAW;AACrD,QAAM,YAAY,WAAW,SAAS,iBAAiB,SAAS,QAAQ,KAAK,IAAI;AACjF,QAAM,aAAa,SAAS,cAAc,CAAC;AAE3C,QAAM,aAAa,QAAQ,UAAU;AACrC,QAAM,oBAAoB,SAAS,UAAU,UAAU,GAAG;AAG1D,QAAM,eAAe,MAAM,QAAS,SAAwC,YAAY,IAClF,QAAuC,eACzC;AAEJ,QAAM,cAA6B;AAAA,IACjC;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,MAAM,QAAQ,OAAO,EAAE,SAAS,OAAO,KAAK,SAAS,SAAS,OAAO,KAAK,QAAQ,IAAI;AAAA,IACtF;AAAA,IACA,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,IACjD,GAAI,gBAAgB,aAAa,SAAS,IAAI,EAAE,aAAa,IAAI,CAAC;AAAA,EACpE;AAEA,QAAM,OAAO,aAAa,CAAC,gBAAgB,UAAU,kBAAkB,SAAS,KAAK,IAAI;AAEzF,QAAM,YAAY,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,SAAS,KAAK;AAGtE,QAAM,gBAAgB,SAAS,UAAU,qBAAqB,OAAO,OAAO,IAAI;AAEhF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU,CAAC;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,EAAE,KAAK,QAAQ,IAAI;AAAA,IAC5B,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EAC3B;AACF;AAGO,SAAS,YACd,MACA,kBACA,QACA,OACA,SACA,OACY;AACZ,QAAM,WAAqB,CAAC;AAE5B,aAAW,QAAQ,KAAK,QAAQ;AAC9B,QAAI,OAAO,SAAS,UAAU;AAE5B,YAAM,WAAW,iBAAiB,IAAI,IAAI;AAC1C,eAAS,KAAK,iBAAiB,MAAM,MAAM,UAAU,QAAQ,OAAO,SAAS,KAAK,CAAC;AAAA,IACrF,WAAWC,cAAa,IAAI,GAAG;AAE7B,YAAM,QAAQ,KAAK,MAAM,KAAK;AAC9B,YAAM,WAAW,iBAAiB,IAAI,KAAK,KAAK,iBAAiB,IAAI,KAAK,OAAO;AACjF,eAAS,KAAK,iBAAiB,KAAK,SAAS,OAAO,UAAU,QAAQ,OAAO,SAAS,KAAK,CAAC;AAAA,IAC9F,WAAWC,gBAAe,IAAI,GAAG;AAO/B,YAAM,aAAa,KAAK,KAAK,IAAI,CAAC,SAAS;AAAA,QACzC,IAAI,OAAO,QAAQ,WAAW,MAAM,IAAI;AAAA,QACxC,OACE,OAAO,QAAQ,WACX,MACC,IAAI,MAAM,IAAI;AAAA,MACvB,EAAE;AACF,YAAM,aAAa,KAAK,MAAM;AAC9B,YAAM,QAAQ,KAAK,QAAQ;AAK3B,UAAI,kBAAiD;AACrD,UAAI,OAAO;AACT,0BAAkB,CAAC;AACnB,mBAAW,SAAS,YAAY;AAC9B,0BAAgB,MAAM,EAAE,IAAI,MAAM,MAAM,EAAE,KAAK,MAAM,MAAM,KAAK,KAAK;AAAA,QACvE;AAAA,MACF;AAEA,YAAM,eAAyB,CAAC;AAChC,iBAAW,SAAS,YAAY;AAC9B,cAAM,WACJ,iBAAiB,IAAI,MAAM,KAAK,KAAK,iBAAiB,IAAI,MAAM,EAAE;AACpE,qBAAa;AAAA,UACX,iBAAiB,MAAM,IAAI,MAAM,OAAO,UAAU,QAAQ,OAAO,SAAS,KAAK;AAAA,QACjF;AAAA,MACF;AAEA,YAAM,YAAY,kBACd,OAAO,OAAO,eAAe,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IACxD,WAAW;AAGf,YAAM,cAAc,KAAK,aAAa,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,MAAM,GAAG,KAAK,EAAE,KAAK;AACrF,YAAM,aAAa,KAAK,cAAc;AAEtC,YAAM,WAAuB;AAAA,QAC3B,MAAM;AAAA,QACN,IAAI,QAAQ,WAAW,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA,QACjD,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,EAAE,KAAK,QAAQ,IAAI;AAAA,QAC5B,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,MAC3B;AACA,eAAS,KAAK,QAAQ;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,UAAU,QAAQ,IAAI,WAAW,GAAG,IACtC,QAAQ,MACR,QAAQ,IAAI,WAAW,KAAK,IAC1B,IAAI,QAAQ,GAAG,KACf,OAAO,QAAQ,GAAG;AAUxB,QAAM,UAAU,KAAK,WAAW,cAAc,OAAO;AAErD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT;AAAA,IACA,QAAQ,KAAK;AAAA,IACb;AAAA,IACA;AAAA,IACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EAC3B;AACF;;;AC3OO,SAAS,OACd,MACA,SACA,SAAwB,MAClB;AACN,UAAQ,MAAM,MAAM;AACpB,aAAW,SAAS,KAAK,UAAU;AACjC,WAAO,OAAO,SAAS,IAAI;AAAA,EAC7B;AACF;AAGO,SAAS,UAA4B,MAAc,MAAmB;AAC3E,QAAM,UAAe,CAAC;AACtB,SAAO,MAAM,CAAC,SAAS;AACrB,QAAI,KAAK,SAAS,MAAM;AACtB,cAAQ,KAAK,IAAS;AAAA,IACxB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAGO,SAAS,cAAc,MAAsB;AAClD,SAAO,UAAU,MAAM,SAAS,EAAE;AACpC;AAGO,SAAS,WAAW,MAAwB;AACjD,QAAM,SAAmB,CAAC;AAE1B,SAAO,MAAM,CAAC,MAAM,WAAW;AAC7B,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAM,OAAO;AACb,UAAI,KAAK,SAAS,WAAW,GAAG;AAC9B,eAAO,KAAK,cAAc,KAAK,EAAE,mBAAmB;AAAA,MACtD;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,WAAW;AAC3B,YAAM,UAAU;AAChB,UAAI,CAAC,QAAQ,SAAS;AACpB,eAAO,KAAK,iBAAiB,QAAQ,EAAE,2BAA2B;AAAA,MACpE;AACA,UAAI,CAAC,QAAQ,QAAQ,WAAW;AAC9B,eAAO,KAAK,iBAAiB,QAAQ,EAAE,oBAAoB;AAAA,MAC7D;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,QAAQ;AACxB,UAAI,CAAC,KAAK,IAAI;AACZ,eAAO,KAAK,yBAAyB;AAAA,MACvC;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AC3DA,SAAS,QAAAC,OAAM,iBAAAC,sBAAqB;;;ACApC,SAAS,QAAAC,OAAM,eAAe,uBAAuB;AAErD,SAAS,sBAAsB;AAM/B,SAAS,eAAe,SAAuD;AAE7E,MAAIC,MAAK,OAAO,GAAG;AACjB,WAAO,QAAQ,KAAK,SAAS,WAAW;AAAA,EAC1C;AACA,SACI,QAAgD,UAAU,WAGzC;AAEvB;AAmCA,eAAsB,YACpB,SACA,SACyB;AAEzB,QAAM,aAAa,gBAAgB,OAAO;AAC1C,MAAI,CAAC,WAAW,OAAO;AACrB,UAAM,IAAI,MAAM,oBAAoB,WAAW,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,EACpE;AAGA,QAAM,mBAAmBA,MAAK,OAAO,IAAI,UAAU,cAAc,OAAO;AAGxE,QAAM,WACJ,QAAQ,aACP,MAAM;AACL,QAAI,CAAC,QAAQ,aAAa;AACxB,YAAM,IAAI,MAAM,mEAAmE;AAAA,IACrF;AAEA,WAAO,eAAe;AAAA,MACpB,aAAa,QAAQ;AAAA,MACrB,eAAe,QAAQ;AAAA,IACzB,CAAC;AAAA,EACH,GAAG;AAEL,QAAM,WAAW,MAAM,eAAe,kBAAkB,QAAQ;AAGhE,QAAM,QAA6B,SAAS,aAAa,cAAc;AACvE,QAAM,YAA0B,CAAC;AACjC,aAAW,MAAM,SAAS,OAAO;AAC/B,UAAM,SAAS;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,SAAS;AAAA,MACT,EAAE,KAAK,SAAS,QAAQ,IAAI;AAAA,MAC5B;AAAA,IACF;AACA,cAAU,KAAK,MAAM;AAAA,EACvB;AAGA,MAAI,gBAAgB;AACpB,MAAI,QAAQ,YAAY;AACtB,oBAAgB,UAAU,OAAO,CAAC,MAAM,EAAE,WAAW,QAAQ,UAAU;AAAA,EACzE;AAGA,QAAM,YAAyB;AAAA,IAC7B,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU,CAAC;AAAA,IACX,QAAQ,SAAS;AAAA,EACnB;AAGA,QAAM,YAAyB;AAAA,IAC7B,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU,CAAC;AAAA,IACX,aAAa,UAAU,IAAI,CAAC,OAAO;AAAA,MACjC,MAAM,EAAE;AAAA,MACR,YAAY,WAAW,EAAE,MAAM;AAAA,IACjC,EAAE;AAAA,EACJ;AAGA,QAAM,UAAqB;AAAA,IACzB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,SAAS,eAAe,SAAS,OAAO;AAAA,IACxC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU,SAAS;AAAA,EACrB;AAEA,SAAO,EAAE,IAAI,SAAS,eAAe,SAAS,cAAc;AAC9D;;;ADjIO,IAAM,6BAA6B;AAAA,EACxC,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AACV;AAEO,IAAM,2BAA2B;AACjC,IAAM,mCACX;AACK,IAAM,qCACX;AA2YF,IAAM,iBAAsC;AAAA,EAC1C,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AACX;AAEA,IAAM,uBAAiD;AAAA,EACrD,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,yBAAsD;AAAA,EAC1D;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAEA,IAAM,iCAA8D;AAAA,EAClE;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAEA,IAAM,8BAA2D;AAAA,EAC/D;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAEA,IAAM,kCAAyF;AAAA,EAC7F,YAAY;AAAA,IACV;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN;AAAA,MACE,IAAI;AAAA,MACJ,OACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAEA,IAAM,gCAA6D;AAAA,EACjE;AAAA,IACE,IAAI;AAAA,IACJ,OACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OACE;AAAA,IACF,UAAU;AAAA,EACZ;AACF;AAEA,IAAM,+BAA2D;AAAA,EAC/D;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UACE;AAAA,EACJ;AACF;AAEA,SAAS,kBAAkB,MAA4B;AACrD,QAAM,aAAuB,CAAC;AAC9B,SAAO,MAAM,CAAC,SAAiB;AAC7B,QAAI,KAAK,SAAS,UAAW;AAC7B,UAAM,cAAc;AACpB,eAAW,KAAK,YAAY,QAAQ,SAAS;AAAA,EAC/C,CAAC;AACD,SAAO,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC;AAChC;AAEA,SAAS,gBAAgB,SAAyC;AAChE,SAAO,QAAQ,OAAO,QAAQ,CAAC,UAAU;AACvC,UAAM,WAAW,aAAa,SAAS,MAAM,MAAM;AACnD,QAAI,CAAC,SAAU,QAAO,CAAC;AACvB,WAAO;AAAA,MACL;AAAA,QACE,QAAQ,SAAS;AAAA,QACjB,MAAM,MAAM;AAAA,QACZ,YAAY,kBAAkB,QAAQ;AAAA,QACtC,OAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,uBAAuB,SAAoB,OAA6C;AAC/F,SAAO,gBAAgB,OAAO,EAAE,OAAO,CAAC,UAAU,MAAM,QAAQ,SAAS,MAAM,MAAM,CAAC;AACxF;AAEA,SAAS,mBAAmB,SAAoB,QAA0C;AACxF,SAAO,gBAAgB,OAAO,EAAE,KAAK,CAAC,UAAU,MAAM,WAAW,MAAM,KAAK;AAC9E;AAEA,SAAS,aAAa,SAAoB,QAAmC;AAC3E,QAAM,OAAO,QAAQ,SAAS,KAAK,CAAC,SAAU,KAAoB,WAAW,MAAM;AACnF,SAAO,OAAQ,OAAsB;AACvC;AAEA,SAAS,oBAAoB,MAAqC;AAChE,QAAM,WAA8B,CAAC;AACrC,SAAO,MAAM,CAAC,SAAiB;AAC7B,QAAI,KAAK,SAAS,UAAW;AAC7B,UAAM,cAAc;AACpB,aAAS,KAAK;AAAA,MACZ,IAAI,YAAY,QAAQ;AAAA,MACxB,OAAO,YAAY,QAAQ;AAAA,MAC3B,QAAQ,YAAY,QAAQ;AAAA,MAC5B,QAAQ,YAAY,QAAQ;AAAA,MAC5B,GAAI,YAAY,QAAQ,oBACpB,EAAE,mBAAmB,YAAY,QAAQ,kBAAkB,IAC3D,CAAC;AAAA,MACL,GAAI,YAAY,QAAQ,gBAAgB,YAAY,QAAQ,aAAa,SAAS,IAC9E,EAAE,cAAc,YAAY,QAAQ,aAAa,IACjD,CAAC;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT;AAEA,SAAS,iBAAiB,WAAyE;AACjG,SAAO;AAAA,IACL,QAAQ,WAAW,UAAU,qBAAqB;AAAA,IAClD,KAAK,WAAW,OAAO,qBAAqB;AAAA,IAC5C,UAAU,WAAW,YAAY,qBAAqB;AAAA,EACxD;AACF;AAEA,SAAS,WAAW,OAAe,SAA6B;AAC9D,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAClC,SAAO,CAAC,OAAO,GAAG,QAAQ,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,GAAG,EAAE;AAC5D;AAIA,SAAS,sBAAsB,WAAgD;AAC7E,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,QAAkB,CAAC;AACzB,MAAI,OAAO,UAAU,oBAAoB,UAAU;AACjD,UAAM,KAAK,gBAAgB,UAAU,eAAe,IAAI;AAAA,EAC1D;AACA,MAAI,UAAU,gBAAgB,KAAM,OAAM,KAAK,kCAAkC;AACjF,MAAI,UAAU,gBAAgB,MAAO,OAAM,KAAK,mCAAmC;AACnF,MAAI,UAAU,yBAAyB,KAAM,OAAM,KAAK,2BAA2B;AACnF,MAAI,UAAU,yBAAyB,MAAO,OAAM,KAAK,uCAAuC;AAChG,MAAI,UAAU,eAAe,KAAM,OAAM,KAAK,gBAAgB;AAC9D,SAAO,MAAM,KAAK,IAAI;AACxB;AAKA,SAAS,0BAA0B,SAAkD;AACnF,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,OAAO,OAAO;AAAA,EACzB;AACF;AAEO,SAAS,4BAA4B,MAA0C;AACpF,QAAM,QAAkB,CAAC;AAEzB,QAAM,KAAK,KAAK,KAAK,SAAS,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,KAAK,SAAS,MAAM,CAAC,CAAC,OAAO;AACrF,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,kBAAkB,KAAK,SAAS,EAAE;AAC7C,QAAM;AAAA,IACJ,eAAe,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,YAAY,KAAK,KAAK,OAAO,SAAS,MAAM,EAAE;AAAA,EACjG;AACA,QAAM;AAAA,IACJ,oBAAoB,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAK,MAAM,eAAe,KAAK,MAAM,WAAW,KAAK,IAAI,KAAK,MAAM;AAAA,EACtH;AACA,QAAM,KAAK,EAAE;AAEb,MAAI,KAAK,aAAa,YAAY;AAChC,UAAM,eAAe;AACrB,UAAM,iBAAiB;AAAA,MACrB,GAAG,IAAI,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,UAAU,MAAM,KAAK,EAAE,OAAO,OAAO,CAAC;AAAA,IACjF;AACA,UAAM,KAAK,sBAAsB;AACjC,UAAM,KAAK,YAAY,aAAa,KAAK,KAAK,EAAE;AAChD,QAAI,eAAe,SAAS,GAAG;AAC7B,YAAM,kBAAkB,eAAe,OAAO,CAAC,UAAU,UAAU,aAAa,KAAK,KAAK;AAC1F,YAAM;AAAA,QACJ,aAAa,CAAC,GAAG,aAAa,KAAK,KAAK,cAAc,GAAG,eAAe,EAAE,KAAK,IAAI,CAAC;AAAA,MACtF;AAAA,IACF;AACA,UAAM,KAAK,YAAY,aAAa,KAAK,MAAM,EAAE,KAAK,aAAa,KAAK,MAAM,IAAI,GAAG;AACrF,UAAM;AAAA,MACJ,cAAc,aAAa,KAAK,OAAO,WAAM,0BAA0B,aAAa,KAAK,OAAO,CAAC;AAAA,IACnG;AACA,QAAI,aAAa,KAAK,SAAS,SAAS,GAAG;AACzC,YAAM,KAAK,eAAe,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACnE;AACA,QACE,aAAa,KAAK,YAAY,kBAC9B,aAAa,KAAK,YAAY,QAAQ,QACtC;AACA,YAAM,KAAK,eAAe;AAC1B,YAAM,KAAK,aAAa,KAAK,WAAW;AACxC,UAAI,IAAI;AACN,YAAI,OAAO,OAAO,UAAU;AAC1B,gBAAM,KAAK,sBAAsB;AACjC,cAAI,GAAG,QAAS,OAAM,KAAK,kBAAkB,GAAG,OAAO,EAAE;AACzD,cAAI,GAAG;AACL,kBAAM,KAAK,kBAAkB,GAAG,OAAO,GAAG,GAAG,QAAQ,WAAW,GAAG,KAAK,MAAM,EAAE,EAAE;AAAA,mBAC3E,GAAG,MAAO,OAAM,KAAK,gBAAgB,GAAG,KAAK,EAAE;AACxD,cAAI,GAAG,YAAa,OAAM,KAAK,uBAAuB,GAAG,WAAW,GAAG;AACvE,cAAI,GAAG,YAAY,GAAG,SAAS,SAAS,GAAG;AACzC,kBAAM,KAAK,mBAAmB,GAAG,SAAS,MAAM,IAAI;AACpD,uBAAW,WAAW,GAAG,UAAU;AACjC,oBAAM,QAAkB,CAAC;AACzB,kBAAI,QAAQ,QAAS,OAAM,KAAK,QAAQ,OAAO;AAC/C,oBAAM,KAAK,QAAQ,KAAK;AACxB,kBAAI,QAAQ,OAAQ,OAAM,KAAK,IAAI,QAAQ,MAAM,GAAG;AACpD,kBAAI,QAAQ,MAAO,OAAM,KAAK,UAAK,QAAQ,KAAK,EAAE;AAClD,oBAAM,KAAK,WAAW,QAAQ,EAAE,KAAK,MAAM,KAAK,QAAK,CAAC,EAAE;AAAA,YAC1D;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM,KAAK,8BAA8B;AAAA,QAC3C;AAAA,MACF;AACA,YAAM,kBAAkB,aAAa,KAAK,WAAW;AACrD,UAAI,aAAa,KAAK,WAAW,QAAQ,SAAS,GAAG;AACnD,cAAM,mBAAmB,sBAAsB,eAAe;AAC9D,cAAM,KAAK,cAAc,mBAAmB,KAAK,gBAAgB,MAAM,EAAE,GAAG;AAC5E,mBAAW,UAAU,aAAa,KAAK,WAAW,SAAS;AACzD,gBAAM,SAAS,CAAC,OAAO,OAAO,OAAO,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,UAAK;AACtE,gBAAM,kBAAkB,sBAAsB,OAAO,SAAS;AAC9D,gBAAM,SAAS,kBAAkB,MAAM,eAAe,OAAO;AAC7D,gBAAM,KAAK,SAAS,OAAO,GAAG,GAAG,SAAS,KAAK,MAAM,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAEb,UAAM,KAAK,eAAe;AAC1B,eAAW,SAAS,aAAa,KAAK,QAAQ;AAC5C,YAAM,WAAW,MAAM,WAAW,SAAS,IAAI,MAAM,WAAW,KAAK,IAAI,IAAI;AAC7E,YAAM;AAAA,QACJ,KAAK,MAAM,IAAI,OAAO,MAAM,MAAM,GAAG,MAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,EAAE,KAAK,QAAQ;AAAA,MAC1F;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,KAAK,aAAa,WAAW;AAC/B,UAAM,cAAc;AACpB,UAAM,KAAK,qBAAqB;AAChC,UAAM,KAAK,cAAc,YAAY,KAAK,SAAS,EAAE;AACrD,UAAM,KAAK,WAAW,YAAY,KAAK,IAAI,EAAE;AAC7C,UAAM,KAAK,YAAY,YAAY,KAAK,KAAK,EAAE;AAC/C,UAAM,KAAK,YAAY,YAAY,KAAK,MAAM,EAAE,KAAK,YAAY,KAAK,MAAM,IAAI,GAAG;AACnF,QAAI,YAAY,KAAK,SAAS,SAAS,GAAG;AACxC,YAAM,KAAK,eAAe,YAAY,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IAClE;AACA,QAAI,YAAY,KAAK,aAAa;AAChC,YAAM,KAAK,kBAAkB,YAAY,KAAK,WAAW,EAAE;AAAA,IAC7D;AACA,UAAM,KAAK,EAAE;AAEb,UAAM,KAAK,mBAAmB;AAC9B,eAAW,SAAS,YAAY,KAAK,QAAQ;AAC3C,YAAM,WAAW,MAAM,WAAW,SAAS,IAAI,MAAM,WAAW,KAAK,IAAI,IAAI;AAC7E,YAAM;AAAA,QACJ,KAAK,MAAM,IAAI,OAAO,MAAM,MAAM,GAAG,MAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,EAAE,KAAK,QAAQ;AAAA,MAC1F;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAEb,QAAI,YAAY,KAAK,mBAAmB,YAAY,KAAK,gBAAgB,SAAS,GAAG;AACnF,YAAM,KAAK,uBAAuB;AAClC,YAAM,KAAK,EAAE;AACb,YAAM;AAAA,QACJ;AAAA,MACF;AACA,YAAM,KAAK,EAAE;AACb,iBAAW,QAAQ,YAAY,KAAK,iBAAiB;AACnD,cAAM,QAAkB,CAAC,GAAG,KAAK,KAAK,WAAM,KAAK,KAAK,EAAE;AACxD,YAAI,KAAK,KAAM,OAAM,KAAK,SAAS,KAAK,IAAI,EAAE;AAC9C,YAAI,KAAK,OAAQ,OAAM,KAAK,WAAW,KAAK,MAAM,EAAE;AACpD,YAAI,KAAK,MAAO,OAAM,KAAK,UAAU,KAAK,KAAK,EAAE;AACjD,YAAI,KAAK,aAAc,OAAM,KAAK,mBAAmB,KAAK,YAAY,IAAI;AAC1E,cAAM,KAAK,KAAK,MAAM,KAAK,QAAK,CAAC,EAAE;AAAA,MACrC;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAEA,QAAI,YAAY,KAAK,cAAc,YAAY,KAAK,WAAW,SAAS,GAAG;AACzE,YAAM,KAAK,uBAAuB;AAClC,YAAM,KAAK,EAAE;AACb,YAAM;AAAA,QACJ;AAAA,MACF;AACA,YAAM,KAAK,EAAE;AACb,iBAAW,aAAa,YAAY,KAAK,YAAY;AACnD,cAAM,KAAK,KAAK,SAAS,EAAE;AAAA,MAC7B;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAMA,QAAI,YAAY,KAAK,mBAAmB,YAAY,KAAK,gBAAgB,SAAS,GAAG;AACnF,YAAM,UAAU,CAAC,MAAsB,EAAE,QAAQ,OAAO,KAAK;AAC7D,YAAM,KAAK,iCAAiC,YAAY,KAAK,MAAM,EAAE,GAAG;AACxE,YAAM,KAAK,EAAE;AACb,YAAM;AAAA,QACJ;AAAA,MACF;AACA,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,+BAA+B;AAC1C,YAAM,KAAK,+BAA+B;AAC1C,iBAAW,SAAS,YAAY,KAAK,iBAAiB;AACpD,cAAM;AAAA,UACJ,QAAQ,MAAM,KAAK,QAAQ,QAAQ,MAAM,MAAM,CAAC,MAAM,QAAQ,MAAM,OAAO,CAAC;AAAA,QAC9E;AAAA,MACF;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAAA,EACF;AAEA,MAAI,KAAK,aAAa,QAAQ;AAC5B,UAAM,WAAW;AACjB,UAAM,KAAK,kBAAkB;AAC7B,UAAM,KAAK,WAAW,SAAS,KAAK,MAAM,EAAE;AAC5C,UAAM,KAAK,WAAW,SAAS,KAAK,IAAI,EAAE;AAC1C,UAAM,KAAK,YAAY,SAAS,KAAK,KAAK,EAAE;AAC5C,QAAI,SAAS,KAAK,WAAW;AAC3B,YAAM,OAAO,SAAS,KAAK,cAAc,KAAK,SAAS,KAAK,WAAW,MAAM;AAC7E,YAAM,KAAK,cAAc,SAAS,KAAK,SAAS,GAAG,IAAI,EAAE;AAAA,IAC3D;AACA,UAAM,KAAK,YAAY,SAAS,KAAK,MAAM,EAAE,KAAK,SAAS,KAAK,MAAM,IAAI,GAAG;AAC7E,QAAI,SAAS,KAAK,SAAS,SAAS,GAAG;AACrC,YAAM,KAAK,eAAe,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IAC/D;AACA,QAAI,SAAS,KAAK,SAAS;AACzB,YAAM,KAAK,cAAc,SAAS,KAAK,OAAO,EAAE;AAAA,IAClD;AACA,UAAM,KAAK,EAAE;AAEb,UAAM,KAAK,kBAAkB;AAC7B,eAAW,WAAW,SAAS,KAAK,UAAU;AAC5C,YAAM;AAAA,QACJ,KAAK,QAAQ,KAAK,OAAO,QAAQ,EAAE,KAAK,QAAQ,MAAM,GAAG,QAAQ,SAAS,MAAM,QAAQ,MAAM,KAAK,EAAE;AAAA,MACvG;AAIA,UAAI,QAAQ,mBAAmB;AAC7B,cAAM,KAAK,OAAO,QAAQ,iBAAiB,EAAE;AAAA,MAC/C;AAIA,UAAI,QAAQ,gBAAgB,QAAQ,aAAa,SAAS,GAAG;AAC3D,cAAM,KAAK,4FAAuF;AAClG,mBAAW,eAAe,QAAQ,cAAc;AAC9C,gBAAM,KAAK,WAAW,WAAW,EAAE;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAEb,QAAI,SAAS,KAAK,cAAc,SAAS,GAAG;AAC1C,YAAM,KAAK,mBAAmB;AAC9B,iBAAW,UAAU,SAAS,KAAK,eAAe;AAChD,cAAM,KAAK,KAAK,MAAM,EAAE;AAAA,MAC1B;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAEA,QAAI,SAAS,KAAK,cAAc,SAAS,KAAK,WAAW,SAAS,GAAG;AACnE,YAAM,KAAK,oBAAoB;AAC/B,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,uDAAuD;AAClE,YAAM,KAAK,EAAE;AACb,iBAAW,aAAa,SAAS,KAAK,YAAY;AAChD,cAAM,KAAK,KAAK,SAAS,EAAE;AAAA,MAC7B;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAAA,EACF;AAEA,MAAI,KAAK,aAAa,YAAY;AAChC,UAAM,eAAe;AACrB,UAAM,KAAK,sBAAsB;AACjC,UAAM,KAAK,gBAAgB,aAAa,KAAK,YAAY,EAAE;AAC3D,UAAM,KAAK,YAAY,aAAa,KAAK,KAAK,EAAE;AAChD,UAAM,KAAK,YAAY,aAAa,KAAK,MAAM,EAAE,KAAK,aAAa,KAAK,MAAM,IAAI,GAAG;AACrF,UAAM;AAAA,MACJ,cAAc,aAAa,KAAK,OAAO,WAAM,0BAA0B,aAAa,KAAK,OAAO,CAAC;AAAA,IACnG;AACA,QAAI,aAAa,KAAK,SAAS,SAAS,GAAG;AACzC,YAAM,KAAK,eAAe,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACnE;AACA,UAAM,KAAK,EAAE;AAEb,UAAM,KAAK,mBAAmB;AAC9B,eAAW,SAAS,aAAa,KAAK,QAAQ;AAC5C,YAAM,WAAW,MAAM,WAAW,SAAS,IAAI,MAAM,WAAW,KAAK,IAAI,IAAI;AAC7E,YAAM;AAAA,QACJ,KAAK,MAAM,IAAI,OAAO,MAAM,MAAM,GAAG,MAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,EAAE,KAAK,QAAQ;AAAA,MAC1F;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAEb,QAAI,aAAa,KAAK,SAAS,SAAS,GAAG;AACzC,YAAM,KAAK,aAAa;AACxB,iBAAW,QAAQ,aAAa,KAAK,UAAU;AAC7C,cAAM,KAAK,KAAK,IAAI,EAAE;AAAA,MACxB;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAAA,EACF;AAEA,MAAI,KAAK,aAAa,UAAU;AAC9B,UAAM,aAAa;AACnB,UAAM,KAAK,oBAAoB;AAC/B,UAAM,KAAK,kBAAkB,WAAW,KAAK,UAAU,EAAE;AACzD,UAAM,KAAK,YAAY,WAAW,KAAK,KAAK,EAAE;AAC9C,UAAM,KAAK,YAAY,WAAW,KAAK,MAAM,EAAE,KAAK,WAAW,KAAK,MAAM,IAAI,GAAG;AACjF,UAAM,KAAK,cAAc,WAAW,KAAK,OAAO,EAAE;AAClD,QAAI,WAAW,KAAK,SAAS,SAAS,GAAG;AACvC,YAAM,KAAK,eAAe,WAAW,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACjE;AACA,UAAM,KAAK,EAAE;AAEb,UAAM,KAAK,oBAAoB;AAC/B,eAAW,SAAS,WAAW,KAAK,QAAQ;AAC1C,YAAM,WAAW,MAAM,WAAW,SAAS,IAAI,MAAM,WAAW,KAAK,IAAI,IAAI;AAC7E,YAAM;AAAA,QACJ,KAAK,MAAM,IAAI,OAAO,MAAM,MAAM,GAAG,MAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,EAAE,KAAK,QAAQ;AAAA,MAC1F;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAEb,QAAI,WAAW,KAAK,WAAW,SAAS,GAAG;AACzC,YAAM,KAAK,gBAAgB;AAC3B,iBAAW,aAAa,WAAW,KAAK,YAAY;AAClD,cAAM,KAAK,KAAK,SAAS,EAAE;AAAA,MAC7B;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAEA,QAAI,WAAW,KAAK,SAAS,SAAS,GAAG;AACvC,YAAM,KAAK,oBAAoB;AAC/B,iBAAW,QAAQ,WAAW,KAAK,UAAU;AAC3C,cAAM,KAAK,KAAK,IAAI,EAAE;AAAA,MACxB;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAAA,EACF;AASA,MAAI,KAAK,aAAa,QAAQ;AAC5B,UAAM,KAAK,oBAAoB;AAC/B,UAAM;AAAA,MACJ;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AACb,WAAO,MAAM,KAAK,IAAI,EAAE,QAAQ,IAAI;AAAA,EACtC;AAEA,QAAM,KAAK,mBAAmB;AAC9B,MAAI,KAAK,cAAc,WAAW,GAAG;AACnC,UAAM,KAAK,kBAAkB;AAAA,EAC/B,OAAO;AACL,UAAM,KAAK,GAAG,KAAK,cAAc,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;AAAA,EAC/D;AACA,QAAM,KAAK,EAAE;AAEb,QAAM,KAAK,uBAAuB;AAClC,MAAI,KAAK,kBAAkB,WAAW,GAAG;AACvC,UAAM,KAAK,kBAAkB;AAAA,EAC/B,OAAO;AACL,UAAM,KAAK,GAAG,KAAK,kBAAkB,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;AAAA,EACnE;AACA,QAAM,KAAK,EAAE;AAEb,QAAM;AAAA,IACJ,GAAG;AAAA,MACD;AAAA,MACA,KAAK,cAAc,IAAI,CAAC,UAAU,GAAG,MAAM,KAAK,KAAK,MAAM,QAAQ,GAAG;AAAA,IACxE;AAAA,EACF;AACA,QAAM;AAAA,IACJ,GAAG;AAAA,MACD;AAAA,MACA,KAAK,aAAa,IAAI,CAAC,UAAU,GAAG,MAAM,OAAO,KAAK,MAAM,QAAQ,EAAE;AAAA,IACxE;AAAA,EACF;AACA,QAAM;AAAA,IACJ,GAAG;AAAA,MACD;AAAA,MACA,KAAK,SAAS,IAAI,CAAC,UAAU,GAAG,MAAM,KAAK,KAAK,MAAM,QAAQ,GAAG;AAAA,IACnE;AAAA,EACF;AAEA,QAAM,KAAK,iBAAiB;AAC5B,QAAM,KAAK,aAAa,KAAK,YAAY,MAAM,EAAE;AACjD,QAAM,KAAK,UAAU,KAAK,YAAY,GAAG,EAAE;AAC3C,QAAM,KAAK,GAAG,KAAK,YAAY,SAAS,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;AACpE,QAAM,KAAK,EAAE;AAEb,SAAO,MAAM,KAAK,IAAI,EAAE,QAAQ,IAAI;AACtC;AAEO,SAAS,mBACd,QACA,cACQ;AACR,MAAI,WAAW,WAAW,iBAAiB,MAAO,QAAO;AACzD,MAAI,WAAW,QAAS,QAAO;AAC/B,MAAI,WAAW,SAAS,iBAAiB,MAAO,QAAO;AACvD,MAAI,WAAW,YAAY,iBAAiB,MAAO,QAAO;AAC1D,MAAI,OAAQ,QAAO;AACnB,SAAO;AACT;AAEO,SAAS,iBAAiB,SAAwC;AACvE,QAAM,mBAAmB,QAAQ,UAAU;AAC3C,MAAI,oBAAoB,iBAAiB,SAAS,GAAG;AACnD,UAAM,qBAAqB,IAAI;AAAA,MAC7B,OAAO,OAAO,QAAQ,UAAU,UAAU,CAAC,CAAC,EAAE;AAAA,QAC5C,CAAC,UAAU,GAAG,MAAM,OAAO,IAAI,MAAM,IAAI;AAAA,MAC3C;AAAA,IACF;AACA,WAAO,iBACJ,IAAI,CAAC,YAAY;AAChB,YAAM,UAAU,QAAQ,MACrB;AAAA,QACC,CAAC,SACC,mBAAmB,SAAS,KAAK,mBAAmB,IAAI,GAAG,QAAQ,EAAE,IAAI,KAAK,EAAE,EAAE;AAAA,MACtF,EACC,IAAI,CAAC,SAAS,KAAK,EAAE;AAExB,aAAO;AAAA,QACL,IAAI,QAAQ;AAAA,QACZ,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ;AAAA,QACf,aAAa,QAAQ;AAAA,QACrB,UAAU,QAAQ;AAAA,QAClB;AAAA,QACA,GAAI,MAAM,QAAQ,QAAQ,gBAAgB,KAAK,QAAQ,iBAAiB,SAAS,IAC7E,EAAE,iBAAiB,QAAQ,iBAAgD,IAC3E,CAAC;AAAA,QACL,GAAI,MAAM,QAAQ,QAAQ,UAAU,KAAK,QAAQ,WAAW,SAAS,IACjE,EAAE,YAAY,QAAQ,WAAW,IACjC,CAAC;AAAA,MACP;AAAA,IACF,CAAC,EACA,OAAO,CAAC,YAAY,QAAQ,QAAQ,SAAS,CAAC;AAAA,EACnD;AAEA,QAAM,QAAQ,QAAQ,UAAU,SAAS,CAAC,EAAE,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC1E,SAAO;AAAA,IACL;AAAA,MACE,IAAI,QAAQ,KAAK,aAAa;AAAA,MAC9B,MAAM;AAAA,MACN,OAAQ,QAAQ,UAAU,SAAS;AAAA,MACnC,aAAa,GAAG,QAAQ,KAAK,aAAa,aAAa;AAAA,MACvD,UAAU,QAAQ,UAAU,YAAY,CAAC;AAAA,MACzC,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE;AAAA,IACtC;AAAA,EACF;AACF;AAEO,SAAS,cAAc,SAAqC;AACjE,QAAM,mBAAmB,QAAQ,UAAU;AAC3C,MAAI,oBAAoB,iBAAiB,SAAS,GAAG;AACnD,UAAM,qBAAqB,IAAI;AAAA,MAC7B,OAAO,OAAO,QAAQ,UAAU,UAAU,CAAC,CAAC,EAAE;AAAA,QAC5C,CAAC,UAAU,GAAG,MAAM,OAAO,IAAI,MAAM,IAAI;AAAA,MAC3C;AAAA,IACF;AACA,WAAO,iBAAiB;AAAA,MAAQ,CAAC,YAC/B,QAAQ,MACL,IAAI,CAAC,UAAU;AAAA,QACd,QAAQ,KAAK;AAAA,QACb,OAAQ,KAAK,kBAAkB,QAAQ;AAAA,QACvC,WAAW,QAAQ;AAAA,QACnB,aAAa,QAAQ;AAAA,QACrB,UAAU,QAAQ;AAAA,QAClB,GAAI,MAAM,QAAQ,KAAK,UAAU,KAAK,KAAK,WAAW,SAAS,IAC3D,EAAE,YAAY,KAAK,WAAW,IAC9B,CAAC;AAAA,MACP,EAAE,EACD;AAAA,QACC,CAAC,SACC,mBAAmB,SAAS,KAC5B,mBAAmB,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,MAAM,EAAE;AAAA,MAC7D;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,QAAQ,QAAQ,UAAU,SAAS,CAAC,EAAE,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC1E,QAAM,eAAgB,QAAQ,UAAU,SAAS;AACjD,SAAO,MAAM,IAAI,CAAC,UAAU;AAAA,IAC1B,QAAQ,KAAK;AAAA,IACb,OAAQ,KAAK,kBAAkB;AAAA,IAC/B,WAAW,QAAQ,KAAK,aAAa;AAAA,IACrC,aAAa;AAAA,IACb,UAAU,QAAQ,UAAU,YAAY,CAAC;AAAA,EAC3C,EAAE;AACJ;AAEO,SAAS,kBACd,SACA,UAAsC,CAAC,GAChB;AACvB,QAAM,SAAS,gBAAgB,OAAO;AACtC,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,OAAO,QAAQ,CAAC,UAAU,MAAM,UAAU,CAAC,CAAC;AAEhF,QAAM,OAA8B;AAAA,IAClC,SAAS,2BAA2B;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,IACV,WACE,QAAQ,aAAa,gBAAgB,QAAQ,MAAM,EAAE;AAAA,IACvD,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,OAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,SAAS,OAAO,IAAI,CAAC,UAAU,MAAM,MAAM;AAAA,MAC3C,YAAY;AAAA,IACd;AAAA,IACA,eAAe,QAAQ,iBAAiB;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAG,oBAAI,IAAI;AAAA,QACT,QAAQ,MAAM,OAAO;AAAA,QACrB,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,GAAG,QAAQ;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IACA,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,cAAc,QAAQ,gBAAgB,CAAC;AAAA,IACvC,eAAe,QAAQ,iBAAiB;AAAA,IACxC,aAAa,iBAAiB,QAAQ,WAAW;AAAA,IACjD,MAAM;AAAA,MACJ,OAAO,QAAQ,MAAM,OAAO;AAAA,MAC5B,OAAO;AAAA,QACL,IAAI,QAAQ,MAAM;AAAA,QAClB,MAAM,QAAQ,MAAM;AAAA,QACpB,OAAO,QAAQ,MAAM;AAAA,MACvB;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,YAAY,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,EACpB;AAEA,OAAK,mBAAmB,4BAA4B,IAAI;AACxD,SAAO;AACT;AAEO,SAAS,iBACd,SACA,OACA,UAAqC,CAAC,GAChB;AACtB,QAAM,SAAS,uBAAuB,SAAS,KAAK;AACpD,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,OAAO,QAAQ,CAAC,UAAU,MAAM,UAAU,CAAC,CAAC;AAEhF,QAAM,OAA6B;AAAA,IACjC,SAAS,2BAA2B;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,IACV,WACE,QAAQ,aACR,iBAAiB,MAAM,EAAE,+BAA+B,MAAM,KAAK;AAAA,IACrE,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,OAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,SAAS,OAAO,IAAI,CAAC,UAAU,MAAM,MAAM;AAAA,MAC3C,YAAY;AAAA,IACd;AAAA,IACA,eAAe,QAAQ,iBAAiB;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAG,oBAAI,IAAI;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,GAAG,MAAM;AAAA,QACT,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IACA,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,cAAc,QAAQ,gBAAgB,CAAC;AAAA,IACvC,eAAe,QAAQ,iBAAiB;AAAA,IACxC,aAAa,iBAAiB,QAAQ,WAAW;AAAA,IACjD,MAAM;AAAA,MACJ,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,aAAa,MAAM;AAAA,MACnB,UAAU,MAAM;AAAA,MAChB,OAAO;AAAA,QACL,IAAI,QAAQ,MAAM;AAAA,QAClB,MAAM,QAAQ,MAAM;AAAA,QACpB,OAAO,QAAQ,MAAM;AAAA,MACvB;AAAA,MACA;AAAA,MACA,GAAI,MAAM,mBAAmB,MAAM,gBAAgB,SAAS,IACxD,EAAE,iBAAiB,MAAM,gBAAgB,IACzC,CAAC;AAAA,MACL,GAAI,MAAM,cAAc,MAAM,WAAW,SAAS,IAAI,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;AAAA,MAC1F,GAAI,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS,IAC5D,EAAE,iBAAiB,QAAQ,gBAAgB,IAC3C,CAAC;AAAA,IACP;AAAA,IACA,kBAAkB;AAAA,EACpB;AAEA,OAAK,mBAAmB,4BAA4B,IAAI;AACxD,SAAO;AACT;AAEO,SAAS,cACd,SACA,OACA,UAAkC,CAAC,GAChB;AACnB,QAAM,WAAW,aAAa,SAAS,MAAM,MAAM;AACnD,QAAM,QAAQ,mBAAmB,SAAS,MAAM,MAAM;AAEtD,MAAI,CAAC,YAAY,CAAC,OAAO;AACvB,UAAM,IAAI,MAAM,+BAA+B,MAAM,MAAM,EAAE;AAAA,EAC/D;AAEA,QAAM,WAAW,oBAAoB,QAAQ;AAE7C,QAAM,OAA0B;AAAA,IAC9B,SAAS,2BAA2B;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,IACV,WACE,QAAQ,aAAa,iBAAiB,MAAM,MAAM;AAAA,IACpD,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,OAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,SAAS,CAAC,MAAM,MAAM;AAAA,MACtB,YAAY,CAAC,GAAG,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;AAAA,IAChE;AAAA,IACA,eAAe,QAAQ,iBAAiB;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAG,IAAI;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,aAAa;AAAA,UACnB,MAAM,eAAe;AAAA,UACrB,QAAQ,MAAM;AAAA,UACd,QAAQ,MAAM;AAAA,UACd,GAAG,MAAM;AAAA,UACT,GAAG,SAAS,QAAQ,CAAC,YAAY,CAAC,QAAQ,IAAI,QAAQ,OAAO,QAAQ,MAAM,CAAC;AAAA,QAC9E,EAAE,OAAO,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,IACA,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,cAAc,QAAQ,gBAAgB,CAAC;AAAA,IACvC,eAAe,QAAQ,iBAAiB;AAAA,IACxC,aAAa,iBAAiB,QAAQ,WAAW;AAAA,IACjD,MAAM;AAAA,MACJ,QAAQ,MAAM;AAAA,MACd,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,UAAU,MAAM;AAAA,MAChB,SAAS,SAAS;AAAA,MAClB,OAAO;AAAA,QACL,IAAI,QAAQ,MAAM;AAAA,QAClB,MAAM,QAAQ,MAAM;AAAA,QACpB,OAAO,QAAQ,MAAM;AAAA,MACvB;AAAA,MACA,eAAe,SAAS,QAAQ,QAAQ,IAAI,CAAC,WAAW,OAAO,IAAI,KAAK,CAAC;AAAA,MACzE;AAAA,MACA,GAAI,MAAM,cAAc,MAAM,WAAW,SAAS,IAAI,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;AAAA,IAC5F;AAAA,IACA,kBAAkB;AAAA,EACpB;AAEA,OAAK,mBAAmB,4BAA4B,IAAI;AACxD,SAAO;AACT;AAEO,SAAS,kBACd,SACA,SACuB;AACvB,QAAM,SAAS,gBAAgB,OAAO;AACtC,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,OAAO,QAAQ,CAAC,UAAU,MAAM,UAAU,CAAC,CAAC;AAChF,QAAM,kBACJ,QAAQ,iBAAiB,aACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,IACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEN,QAAM,OAA8B;AAAA,IAClC,SAAS,2BAA2B;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,IACV,WACE,QAAQ,aACR,eAAe,QAAQ,YAAY;AAAA,IACrC,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,OAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,SAAS,OAAO,IAAI,CAAC,UAAU,MAAM,MAAM;AAAA,MAC3C,YAAY;AAAA,IACd;AAAA,IACA,eAAe,QAAQ,iBAAiB;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAG,oBAAI,IAAI;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ,MAAM,OAAO;AAAA,QACrB,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,GAAG,QAAQ;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IACA,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,cAAc,QAAQ,gBAAgB,CAAC;AAAA,IACvC,eAAe,QAAQ,iBAAiB,gCAAgC,QAAQ,YAAY;AAAA,IAC5F,aAAa,iBAAiB,QAAQ,WAAW;AAAA,IACjD,MAAM;AAAA,MACJ,cAAc,QAAQ;AAAA,MACtB,OAAO,QAAQ,MAAM,OAAO;AAAA,MAC5B,OAAO;AAAA,QACL,IAAI,QAAQ,MAAM;AAAA,QAClB,MAAM,QAAQ,MAAM;AAAA,QACpB,OAAO,QAAQ,MAAM;AAAA,MACvB;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA,UAAU,QAAQ,YAAY;AAAA,IAChC;AAAA,IACA,kBAAkB;AAAA,EACpB;AAEA,OAAK,mBAAmB,4BAA4B,IAAI;AACxD,SAAO;AACT;AAEO,SAAS,gBACd,SACA,UAAoC,CAAC,GAChB;AACrB,QAAM,SAAS,gBAAgB,OAAO;AACtC,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,OAAO,QAAQ,CAAC,UAAU,MAAM,UAAU,CAAC,CAAC;AAChF,QAAM,aAAa,QAAQ,cAAc;AACzC,QAAM,aAAa,QAAQ,cAAc;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,WAAW,QAAQ,YAAY;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,OAA4B;AAAA,IAChC,SAAS,2BAA2B;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,IACV,WACE,QAAQ,aAAa;AAAA,IACvB,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,OAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,SAAS,OAAO,IAAI,CAAC,UAAU,MAAM,MAAM;AAAA,MAC3C,YAAY;AAAA,IACd;AAAA,IACA,eAAe,QAAQ,iBAAiB;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAG,oBAAI,IAAI;AAAA,QACT;AAAA,QACA,QAAQ,MAAM,OAAO;AAAA,QACrB,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,GAAG,QAAQ;AAAA,QACX,GAAG;AAAA,QACH,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IACA,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,cAAc,QAAQ,gBAAgB;AAAA,IACtC,eAAe,QAAQ,iBAAiB;AAAA,IACxC,aAAa,iBAAiB,QAAQ,WAAW;AAAA,IACjD,MAAM;AAAA,MACJ;AAAA,MACA,OAAO,QAAQ,MAAM,OAAO;AAAA,MAC5B,OAAO;AAAA,QACL,IAAI,QAAQ,MAAM;AAAA,QAClB,MAAM,QAAQ,MAAM;AAAA,QACpB,OAAO,QAAQ,MAAM;AAAA,MACvB;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,EACpB;AAEA,OAAK,mBAAmB,4BAA4B,IAAI;AACxD,SAAO;AACT;AAEA,eAAsB,2BACpB,SACA,UAA6C,CAAC,GAChB;AAC9B,QAAM,mBAAmBC,MAAK,OAAO,IAAI,UAAUC,eAAc,OAAO;AACxE,QAAM,eAAc,oBAAI,KAAK,GAAE,YAAY;AAC3C,QAAM,eAAe;AAAA,IACnB,WAAW,iBAAiB,KAAK,UAAU;AAAA,IAC3C,SAAS,iBAAiB,KAAK,SAAS,QAAQ;AAAA,IAChD,SAAS,mBAAmB,iBAAiB,KAAK,QAAQ,iBAAiB,KAAK,SAAS,IAAI;AAAA,EAC/F;AAEA,QAAM,WAAW,MAAM,YAAY,SAAS;AAAA,IAC1C,aAAa,QAAQ;AAAA,IACrB,eAAe,QAAQ;AAAA,IACvB,UAAU,QAAQ;AAAA,EACpB,CAAC;AAED,QAAM,UAAU,iBAAiB,KAAK;AAGtC,QAAM,sBACJ,OAAO,SAAS,oBAAoB,YAAY,QAAQ,oBAAoB,OACvE,QAAQ,kBACT,QAAQ,SAAS,eAAe;AAEtC,QAAM,WAAW,kBAAkB,SAAS,IAAI;AAAA,IAC9C,QAAQ;AAAA,IACR,YAAY;AAAA,MACV,gBAAgB;AAAA,MAChB,SAAS,MAAM,QAAQ,SAAS,OAAO,IACnC,QAAQ,QACL;AAAA,QACC,CACE,WAQA;AAAA,UACE,UAAU,OAAO,OAAO,QAAQ,YAAY,OAAO,OAAO,UAAU;AAAA,QACtE;AAAA,MACJ,EACC,IAAI,CAAC,YAAY;AAAA,QAChB,KAAK,OAAO;AAAA,QACZ,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,QACd,GAAI,OAAO,YAAY,EAAE,WAAW,OAAO,UAA6B,IAAI,CAAC;AAAA,MAC/E,EAAE,IACJ,CAAC;AAAA,MACL,GAAI,SAAS,mBACT,EAAE,iBAAiB,QAAQ,iBAAoC,IAC/D,CAAC;AAAA,IACP;AAAA,EACF,CAAC;AACD,QAAM,SAAS,gBAAgB,SAAS,IAAI;AAAA,IAC1C,QAAQ;AAAA,EACV,CAAC;AAMD,QAAM,mBAAsD,MAAM;AAChE,UAAM,OAAO,SAAS,eAAe;AACrC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,UAAiC,CAAC;AACxC,eAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC9C,YAAM,SAAS,IAAI,UAAU,IAAI,eAAe;AAChD,YAAM,WAAW,IAAI,SAAS,CAAC,GAAG,KAAK,IAAI;AAC3C,UAAI,CAAC,UAAU,CAAC,QAAS;AACzB,cAAQ,KAAK,EAAE,OAAO,MAAM,QAAQ,QAAQ,CAAC;AAAA,IAC/C;AACA,WAAO,QAAQ,SAAS,IAAI,UAAU;AAAA,EACxC,GAAG;AAEH,QAAM,WAAW,iBAAiB,gBAAgB,EAAE;AAAA,IAAI,CAAC,YACvD,iBAAiB,SAAS,IAAI,SAAS;AAAA,MACrC,QAAQ;AAAA,MACR,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AACA,QAAM,QAAQ,cAAc,gBAAgB,EAAE;AAAA,IAAI,CAAC,SACjD,cAAc,SAAS,IAAI,MAAM;AAAA,MAC/B,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACA,QAAM,YAAa,CAAC,YAAY,QAAQ,EAAY;AAAA,IAAI,CAAC,iBACvD,kBAAkB,SAAS,IAAI;AAAA,MAC7B;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAEA,QAAM,WAAkC;AAAA,IACtC,SAAS;AAAA,IACT,SAAS;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,IACR;AAAA,IACA,UAAU,iBAAiB,gBAAgB,EAAE,IAAI,CAAC,aAAa;AAAA,MAC7D,IAAI,QAAQ;AAAA,MACZ,UAAU,WAAW,QAAQ,EAAE;AAAA,MAC/B,MAAM,WAAW,QAAQ,EAAE;AAAA,MAC3B,SAAS,QAAQ;AAAA,IACnB,EAAE;AAAA,IACF,OAAO,cAAc,gBAAgB,EAAE,IAAI,CAAC,UAAU;AAAA,MACpD,IAAI,KAAK;AAAA,MACT,UAAU,QAAQ,KAAK,MAAM;AAAA,MAC7B,MAAM,QAAQ,KAAK,MAAM;AAAA,MACzB,WAAW,KAAK;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB,EAAE;AAAA,IACF,WAAY,CAAC,YAAY,QAAQ,EAAY,IAAI,CAAC,kBAAkB;AAAA,MAClE,IAAI;AAAA,MACJ,UAAU,YAAY,YAAY;AAAA,MAClC,MAAM,YAAY,YAAY;AAAA,MAC9B;AAAA,IACF,EAAE;AAAA,EACJ;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,sBAAsB,QAAQ;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,8BACd,QACA,UACsC;AACtC,QAAM,KAAK,SAAS,MAAM;AAC1B,MAAI,OAAqC;AAEzC,UAAQ,SAAS,UAAU;AAAA,IACzB,KAAK;AACH,aAAO,OAAO;AACd;AAAA,IACF,KAAK;AACH,aAAO,OAAO;AACd;AAAA,IACF,KAAK;AACH,aAAO,KAAM,OAAO,SAAS,KAAK,CAAC,UAAU,MAAM,KAAK,cAAc,EAAE,KAAK,OAAQ;AACrF;AAAA,IACF,KAAK;AACH,aAAO,KAAM,OAAO,MAAM,KAAK,CAAC,UAAU,MAAM,KAAK,WAAW,EAAE,KAAK,OAAQ;AAC/E;AAAA,IACF,KAAK;AACH,aAAO,KAAM,OAAO,UAAU,KAAK,CAAC,UAAU,MAAM,KAAK,iBAAiB,EAAE,KAAK,OAAQ;AACzF;AAAA,IACF;AACE,aAAO;AACP;AAAA,EACJ;AAEA,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa,OAAO;AAAA,IACpB,sBAAsB,OAAO;AAAA,IAC7B,UAAU,OAAO;AAAA,IACjB,UAAU;AAAA,MACR,UAAU,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,6BACpB,SACA,UACA,UAA6C,CAAC,GACC;AAC/C,QAAM,SAAS,MAAM,2BAA2B,SAAS,OAAO;AAChE,SAAO,8BAA8B,QAAQ,QAAQ;AACvD;","names":["isPatternRef","isColumnLayout","isPatternRef","isColumnLayout","isV3","migrateV2ToV3","isV3","isV3","isV3","migrateV2ToV3"]}
1
+ {"version":3,"sources":["../src/resolve.ts","../src/utils.ts","../src/ir.ts","../src/ir-helpers.ts","../src/packs.ts","../src/pipeline.ts"],"sourcesContent":["import type {\n BlueprintPage,\n ColumnLayout,\n Essence,\n EssenceFile,\n EssenceV3,\n LayoutItem,\n PatternRef,\n SectionedEssence,\n StructurePage,\n} from '@decantr/essence-spec';\nimport { computeDensity, isSectioned, isSimple, isV3 } from '@decantr/essence-spec';\nimport type {\n ContentResolver,\n Pattern,\n Theme as RegistryTheme,\n ResolvedPreset,\n} from '@decantr/registry';\nimport { detectWirings, resolvePatternPreset } from '@decantr/registry';\nimport type {\n IRNavItem,\n IRRoute,\n IRShellConfig,\n IRTheme,\n IRThemeDecoration,\n IRVisualEffect,\n IRWiring,\n IRWiringSignal,\n} from './types.js';\nimport { pascalCase } from './utils.js';\n\nexport interface ResolvedPage {\n page: ResolvedStructurePage;\n patterns: Map<string, { pattern: Pattern; preset: ResolvedPreset }>;\n wiring: IRWiring | null;\n}\n\ntype ResolvedStructurePage = StructurePage & {\n sectionId?: string;\n route?: string;\n};\n\nexport interface ResolvedEssence {\n essence: EssenceFile;\n pages: ResolvedPage[];\n registryTheme: RegistryTheme | null;\n density: { gap: string; level: string };\n theme: IRTheme;\n shell: IRShellConfig;\n routes: IRRoute[];\n features: string[];\n /** True when the source essence was v3 (DNA/Blueprint/Meta) */\n isV3Source: boolean;\n}\n\n// ─── Icon Mapping ─────────────────────────────────────────────\n\nconst NAV_ICONS: Record<string, string> = {\n overview: 'layout-dashboard',\n dashboard: 'layout-dashboard',\n home: 'home',\n analytics: 'bar-chart-3',\n settings: 'settings',\n users: 'users',\n billing: 'credit-card',\n reports: 'file-text',\n catalog: 'grid',\n products: 'package',\n orders: 'shopping-cart',\n messages: 'message-square',\n notifications: 'bell',\n activity: 'activity',\n search: 'search',\n profile: 'user',\n team: 'users',\n integrations: 'puzzle',\n api: 'code',\n docs: 'book-open',\n help: 'help-circle',\n projects: 'folder',\n workflows: 'git-branch',\n monitoring: 'monitor',\n security: 'shield',\n storage: 'database',\n deployments: 'rocket',\n logs: 'scroll-text',\n};\n\n// ─── Core styles that don't need explicit addon registration ──\n\nconst CORE_STYLES = new Set(['auradecantism']);\n\n// ─── Helpers ──────────────────────────────────────────────────\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction extractLayoutRefs(\n layout: LayoutItem[],\n): { id: string; explicitPreset?: string; alias?: string }[] {\n const refs: { id: string; explicitPreset?: string; alias?: string }[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n refs.push({ id: item });\n } else if (isPatternRef(item)) {\n refs.push({ id: item.pattern, explicitPreset: item.preset, alias: item.as });\n } else if (isColumnLayout(item)) {\n // cols can mix string ids and PatternRef objects per the schema.\n // Normalize each entry so downstream resolvers always see a string id.\n for (const col of item.cols) {\n if (typeof col === 'string') {\n refs.push({ id: col });\n } else {\n refs.push({ id: col.pattern, explicitPreset: col.preset, alias: col.as });\n }\n }\n }\n }\n return refs;\n}\n\n/** Flatten a layout array so column children are promoted to top-level for wiring detection */\nfunction flattenLayoutForWiring(layout: LayoutItem[]): LayoutItem[] {\n const flat: LayoutItem[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n flat.push(item);\n } else if (isPatternRef(item)) {\n flat.push(item);\n } else if (isColumnLayout(item)) {\n // Promote column children as string refs\n for (const col of item.cols) {\n flat.push(col);\n }\n }\n }\n return flat;\n}\n\nfunction routePath(pageId: string, index: number): string {\n if (index === 0) return '/';\n // AUTO: Pages ending in \"-detail\" get a dynamic :id route parameter\n if (pageId.endsWith('-detail')) {\n return `/${pageId}/:id`;\n }\n return `/${pageId}`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction buildNavItems(pages: ResolvedStructurePage[], routes?: IRRoute[]): IRNavItem[] {\n const routeLookup = new Map<string, string>(\n (routes ?? []).map((route) => [routeIdentity(route.pageId, route.sectionId), route.path]),\n );\n return pages.map((page, i) => ({\n href: routeLookup.get(routeIdentity(page.id, page.sectionId)) ?? routePath(page.id, i),\n icon: NAV_ICONS[page.id] || 'circle',\n label: capitalize(page.id.replace(/-/g, ' ')),\n }));\n}\n\nfunction buildThemeDecoration(theme: RegistryTheme): IRThemeDecoration | null {\n const shell = theme.shell;\n if (!shell) return null;\n // The JSON may have additional fields not in the strict type\n const shellAny = shell as unknown as Record<string, unknown>;\n return {\n root: shell.root || '',\n nav: shell.nav || '',\n header: shell.header || '',\n brand: (shellAny['brand'] as string) || '',\n navLabel: (shellAny['navLabel'] as string) || '',\n // AUTO: default nav style is 'pill' when the theme does not declare one\n navStyle: shell.nav_style || 'pill',\n defaultNavState: (shellAny['default_nav_state'] as string) || 'expanded',\n dimensions: shell.dimensions || null,\n };\n}\n\nfunction buildTheme(essence: Essence, isAddon: boolean): IRTheme {\n return {\n id: essence.theme.id,\n mode: essence.theme.mode,\n shape: essence.theme.shape || null,\n isAddon,\n };\n}\n\nfunction buildThemeFromV3(essence: EssenceV3, isAddon: boolean): IRTheme {\n const dna = essence.dna;\n return {\n id: dna.theme.id,\n mode: dna.theme.mode,\n shape: dna.radius.philosophy || dna.theme.shape || null,\n isAddon,\n };\n}\n\n/** Convert v3 BlueprintPage to the StructurePage shape used by the resolver pipeline */\nfunction blueprintPageToStructurePage(\n page: BlueprintPage,\n defaultShell: string,\n sectionId?: string,\n): ResolvedStructurePage {\n return {\n id: page.id,\n shell: page.shell_override ?? defaultShell,\n layout: page.layout,\n ...(sectionId ? { sectionId } : {}),\n ...(page.route ? { route: page.route } : {}),\n ...(page.surface ? { surface: page.surface } : {}),\n };\n}\n\nfunction routeIdentity(pageId: string, sectionId?: string): string {\n return sectionId ? `${sectionId}:${pageId}` : pageId;\n}\n\nfunction buildV3Routes(essence: EssenceV3, structurePages: ResolvedStructurePage[]): IRRoute[] {\n const explicitRoutes = new Map<string, string>();\n\n for (const [path, entry] of Object.entries(essence.blueprint.routes ?? {})) {\n if (!entry?.page) continue;\n const key = routeIdentity(entry.page, entry.section);\n if (!explicitRoutes.has(key)) {\n explicitRoutes.set(key, path);\n }\n }\n\n for (const page of structurePages) {\n const key = routeIdentity(page.id, page.sectionId);\n if (page.route && !explicitRoutes.has(key)) {\n explicitRoutes.set(key, page.route);\n }\n }\n\n if (explicitRoutes.size > 0) {\n return structurePages.flatMap((page) => {\n const path = explicitRoutes.get(routeIdentity(page.id, page.sectionId));\n return path\n ? [\n {\n path,\n pageId: page.id,\n shell: page.shell,\n ...(page.sectionId ? { sectionId: page.sectionId } : {}),\n },\n ]\n : [];\n });\n }\n\n return structurePages.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n ...(page.sectionId ? { sectionId: page.sectionId } : {}),\n }));\n}\n\nfunction convertWiring(wiringResults: ReturnType<typeof detectWirings>): IRWiring | null {\n if (wiringResults.length === 0) return null;\n\n const signals: IRWiringSignal[] = [];\n const props: Record<string, Record<string, string>> = {};\n const hookProps: Record<string, Record<string, string>> = {};\n const hookSet = new Set<IRWiringSignal['hookType']>();\n\n for (const result of wiringResults) {\n for (const signal of result.signals) {\n // Avoid duplicate signals\n if (!signals.some((s) => s.name === signal.name)) {\n const setter = 'set' + signal.name.charAt(0).toUpperCase() + signal.name.slice(1);\n signals.push({\n name: signal.name,\n setter,\n init: signal.init,\n hookType: signal.hookType,\n });\n hookSet.add(signal.hookType);\n }\n }\n for (const [alias, aliasProps] of Object.entries(result.props)) {\n props[alias] = { ...props[alias], ...aliasProps };\n }\n // AUTO: Merge hook-based prop mappings\n for (const [alias, aliasHookProps] of Object.entries(result.hookProps)) {\n hookProps[alias] = { ...hookProps[alias], ...aliasHookProps };\n }\n }\n\n return { signals, props, hooks: [...hookSet], hookProps };\n}\n\n// ─── Visual Effects Resolution ────────────────────────────────\n\nexport function resolveVisualEffects(\n theme: RegistryTheme,\n pattern: Pattern,\n _slot?: string,\n): IRVisualEffect | null {\n const effects = theme.effects;\n if (!effects?.enabled) return null;\n\n const typeMapping = effects.type_mapping || {};\n const componentFallback = effects.component_fallback || {};\n const intensity = effects.intensity || 'medium';\n const intensityValues = effects.intensity_values || {};\n\n // Check pattern tags / components against type_mapping\n let decorators: string[] = [];\n\n // Check if any pattern components match the component_fallback\n for (const comp of pattern.components || []) {\n const effectType = componentFallback[comp];\n if (effectType && typeMapping[effectType]) {\n decorators = [...decorators, ...typeMapping[effectType]];\n }\n }\n\n if (decorators.length === 0) return null;\n\n // Deduplicate\n decorators = [...new Set(decorators)];\n\n return {\n decorators,\n intensity: intensityValues[intensity] || {},\n };\n}\n\n// ─── Main Resolution ─────────────────────────────────────────\n\n/** Resolve all external references in an Essence file */\nexport async function resolveEssence(\n essence: EssenceFile,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n // ─── V3 path: read from dna + blueprint layers ───────────\n if (isV3(essence)) {\n return resolveV3Essence(essence, resolver);\n }\n\n // ─── V2 path: simple or sectioned ────────────────────────\n let simpleEssence: Essence;\n if (isSimple(essence)) {\n simpleEssence = essence;\n } else if (isSectioned(essence)) {\n const sectioned = essence as SectionedEssence;\n if (sectioned.sections.length > 1) {\n throw new Error(\n `Sectioned essences with ${sectioned.sections.length} sections are not yet supported. ` +\n `Only single-section sectioned essences can be processed. ` +\n `Consider migrating to v3 format using migrateV2ToV3().`,\n );\n }\n const firstSection = sectioned.sections[0];\n simpleEssence = {\n version: sectioned.version,\n archetype: firstSection.archetype,\n theme: firstSection.theme,\n personality: sectioned.personality,\n platform: sectioned.platform,\n structure: firstSection.structure,\n features: firstSection.features || [],\n density: sectioned.density,\n guard: sectioned.guard,\n target: sectioned.target,\n };\n } else {\n throw new Error('Invalid essence format');\n }\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', simpleEssence.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density computation\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n simpleEssence.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n\n // 3. Theme\n const themeId = simpleEssence.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildTheme(simpleEssence, isAddon);\n\n // 4. Resolve each page\n const resolvedPages = await resolvePages(simpleEssence.structure, resolver, registryTheme);\n\n // 5. Shell config\n const shellType = simpleEssence.structure[0]?.shell || 'sidebar-main';\n const brand = pascalCase(simpleEssence.archetype);\n const nav = buildNavItems(simpleEssence.structure);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n // 6. Routes\n const routes: IRRoute[] = simpleEssence.structure.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n }));\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: { gap: density.content_gap, level: density.level },\n theme,\n shell,\n routes,\n features: simpleEssence.features ?? [],\n isV3Source: false,\n };\n}\n\n// ─── V3 Resolution ──────────────────────────────────────────\n\nasync function resolveV3Essence(\n essence: EssenceV3,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n const { dna, blueprint, meta } = essence;\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', dna.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density — v3 carries density directly in dna.spacing\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n dna.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n // V3 dna.spacing is authoritative; override computed density with DNA values\n const densityResult = {\n gap: dna.spacing.content_gap || density.content_gap,\n level: dna.spacing.density || density.level,\n };\n\n // 3. Theme from DNA layer\n const themeId = dna.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildThemeFromV3(essence, isAddon);\n\n // 4. Convert blueprint pages to StructurePage and resolve\n // V3.1 essences may use sections instead of pages; flatten sections into pages\n const defaultShell = blueprint.shell ?? blueprint.sections?.[0]?.shell ?? 'sidebar-main';\n const structurePages: ResolvedStructurePage[] = blueprint.pages\n ? blueprint.pages.map((page) => blueprintPageToStructurePage(page, defaultShell))\n : blueprint.sections\n ? blueprint.sections.flatMap((section) =>\n section.pages.map((page) =>\n blueprintPageToStructurePage(page, section.shell ?? defaultShell, section.id),\n ),\n )\n : [\n blueprintPageToStructurePage(\n { id: 'home', layout: ['hero'] as LayoutItem[] },\n defaultShell,\n ),\n ];\n const resolvedPages = await resolvePages(structurePages, resolver, registryTheme);\n\n // 5. Shell config from blueprint\n const shellType = defaultShell;\n const brand = pascalCase(meta.archetype);\n const routes = buildV3Routes(essence, structurePages);\n const nav = buildNavItems(structurePages, routes);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: densityResult,\n theme,\n shell,\n routes,\n features: blueprint.features ?? [],\n isV3Source: true,\n };\n}\n\n// ─── Shared page resolution ────────────────────────────────\n\nasync function resolvePages(\n pages: ResolvedStructurePage[],\n resolver: ContentResolver,\n registryTheme: RegistryTheme | null,\n): Promise<ResolvedPage[]> {\n const resolvedPages: ResolvedPage[] = [];\n for (const page of pages) {\n const refs = extractLayoutRefs(page.layout);\n const patterns = new Map<string, { pattern: Pattern; preset: ResolvedPreset }>();\n\n for (const ref of refs) {\n const patternResult = await resolver.resolve('pattern', ref.id);\n if (patternResult) {\n const preset = resolvePatternPreset(\n patternResult.item,\n ref.explicitPreset,\n registryTheme?.pattern_preferences?.default_presets,\n );\n const key = ref.alias || ref.id;\n patterns.set(key, { pattern: patternResult.item, preset });\n }\n }\n\n // Detect wiring (flatten cols so column children are visible)\n const wiringResults = detectWirings(flattenLayoutForWiring(page.layout));\n const wiring = convertWiring(wiringResults);\n\n resolvedPages.push({ page, patterns, wiring });\n }\n return resolvedPages;\n}\n","/** Convert a kebab-case or snake_case string to PascalCase */\nexport function pascalCase(str: string): string {\n return str\n .split(/[-_]/)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n}\n","import type { ColumnLayout, LayoutItem, PatternRef, StructurePage } from '@decantr/essence-spec';\nimport type { Pattern, Theme as RegistryTheme, ResolvedPreset } from '@decantr/registry';\nimport { resolveVisualEffects } from './resolve.js';\nimport type {\n IRCardWrapping,\n IRGridNode,\n IRLayer,\n IRNode,\n IRPageNode,\n IRPatternMeta,\n IRPatternNode,\n IRVisualEffect,\n IRWiring,\n} from './types.js';\n\nexport interface ResolvedPatternEntry {\n pattern: Pattern;\n preset: ResolvedPreset;\n}\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction getPatternAlias(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.as || item.pattern;\n return '';\n}\n\nfunction getPatternId(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.pattern;\n return '';\n}\n\nfunction shouldWrapInCard(\n pattern: Pattern,\n preset: ResolvedPreset,\n theme: RegistryTheme | null,\n): boolean {\n // Hero/row/stack layouts are standalone\n const layout = preset.layout.layout;\n if (layout === 'hero' || layout === 'row') return false;\n\n // Pattern explicitly opts out\n if (pattern.contained === false) return false;\n\n // Theme spatial says no cards\n const cardWrapping = theme?.spatial?.card_wrapping;\n if (cardWrapping === 'none') return false;\n\n // Minimal: only wrap if pattern has presets (complex pattern)\n if (cardWrapping === 'minimal') {\n return Object.keys(pattern.presets).length > 0;\n }\n\n // Default: wrap\n return true;\n}\n\nfunction buildCardWrapping(pattern: Pattern, theme: RegistryTheme | null): IRCardWrapping {\n const mode = theme?.spatial?.card_wrapping || 'always';\n return {\n mode: mode as IRCardWrapping['mode'],\n headerLabel: pattern.name,\n };\n}\n\nfunction buildPatternNode(\n patternId: string,\n alias: string,\n resolved: ResolvedPatternEntry | undefined,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPatternNode {\n const pattern = resolved?.pattern;\n const preset = resolved?.preset;\n\n const layout = preset?.layout.layout || 'column';\n const isStandalone = layout === 'hero' || layout === 'row';\n const contained = pattern && preset ? shouldWrapInCard(pattern, preset, theme) : false;\n const components = pattern?.components || [];\n\n const presetName = preset?.preset || 'default';\n const presetDescription = pattern?.presets?.[presetName]?.description;\n // v2.1 C1: thread interactions[] from the pattern through to PagePackPattern\n // so the page-pack renderer can surface them as a checkbox checklist.\n const interactions = Array.isArray((pattern as { interactions?: unknown })?.interactions)\n ? ((pattern as { interactions?: unknown }).interactions as string[])\n : undefined;\n\n const patternMeta: IRPatternMeta = {\n patternId,\n preset: presetName,\n alias,\n layout,\n contained,\n standalone: isStandalone,\n code: preset?.code ? { imports: preset.code.imports, example: preset.code.example } : null,\n components,\n ...(presetDescription ? { presetDescription } : {}),\n ...(interactions && interactions.length > 0 ? { interactions } : {}),\n };\n\n const card = contained && !isStandalone && pattern ? buildCardWrapping(pattern, theme) : null;\n\n const wireProps = wiring?.props[alias] || wiring?.props[patternId] || null;\n\n // Resolve visual effects from theme + pattern when available\n const visualEffects = theme && pattern ? resolveVisualEffects(theme, pattern) : null;\n\n return {\n type: 'pattern',\n id: alias,\n children: [],\n pattern: patternMeta,\n card,\n visualEffects,\n wireProps,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n}\n\n/** Build IR tree for a single page from its resolved structure + patterns */\nexport function buildPageIR(\n page: StructurePage & { sectionId?: string },\n resolvedPatterns: Map<string, ResolvedPatternEntry>,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPageNode {\n const children: IRNode[] = [];\n\n for (const item of page.layout) {\n if (typeof item === 'string') {\n // Simple string → full-width pattern\n const resolved = resolvedPatterns.get(item);\n children.push(buildPatternNode(item, item, resolved, wiring, theme, density, layer));\n } else if (isPatternRef(item)) {\n // PatternRef → pattern with optional preset/alias\n const alias = item.as || item.pattern;\n const resolved = resolvedPatterns.get(alias) || resolvedPatterns.get(item.pattern);\n children.push(buildPatternNode(item.pattern, alias, resolved, wiring, theme, density, layer));\n } else if (isColumnLayout(item)) {\n // ColumnLayout → grid with pattern children\n // cols can mix `string` ids and `PatternRef` objects per the schema.\n // Normalize FIRST so all downstream operations (Map keys, Record\n // keys, joined ids) see strings — otherwise PatternRef objects\n // serialize as `[object Object]` (cold-LLM harness flagged this\n // exact bug in cloud-platform's scaffold-pack).\n const colEntries = item.cols.map((col) => ({\n id: typeof col === 'string' ? col : col.pattern,\n alias:\n typeof col === 'string'\n ? col\n : (col.as ?? col.pattern),\n }));\n const breakpoint = item.at || null;\n const spans = item.span || null;\n\n // Normalize spans: fill in missing columns with weight 1.\n // Span keys reference column ids (the schema's span object uses\n // the column's effective id as the key).\n let normalizedSpans: Record<string, number> | null = null;\n if (spans) {\n normalizedSpans = {};\n for (const entry of colEntries) {\n normalizedSpans[entry.id] = spans[entry.id] || spans[entry.alias] || 1;\n }\n }\n\n const gridChildren: IRNode[] = [];\n for (const entry of colEntries) {\n const resolved =\n resolvedPatterns.get(entry.alias) || resolvedPatterns.get(entry.id);\n gridChildren.push(\n buildPatternNode(entry.id, entry.alias, resolved, wiring, theme, density, layer),\n );\n }\n\n const totalCols = normalizedSpans\n ? Object.values(normalizedSpans).reduce((a, b) => a + b, 0)\n : colEntries.length;\n\n // AUTO: Pass through multi-breakpoint and container query config from ColumnLayout\n const breakpoints = item.breakpoints?.map((bp) => ({ at: bp.at, cols: bp.cols })) || null;\n const responsive = item.responsive || null;\n\n const gridNode: IRGridNode = {\n type: 'grid',\n id: `grid-${colEntries.map((e) => e.id).join('-')}`,\n children: gridChildren,\n cols: totalCols,\n spans: normalizedSpans,\n breakpoint,\n breakpoints,\n responsive,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n children.push(gridNode);\n }\n }\n\n const gapAtom = density.gap.startsWith('_')\n ? density.gap\n : density.gap.startsWith('gap')\n ? `_${density.gap}`\n : `_gap${density.gap}`;\n // Page surface declares layout direction + content gap ONLY. Padding, scroll\n // containment, and flex-grow belong to the shell per the \"Layout Rules\"\n // directive in DECANTR.md (\"One scroll container per region\", \"Let shells\n // own spacing, centering, and scroll containers\", \"Pages should not\n // duplicate shell responsibilities\"). Previous default (`_p4 _overauto\n // _flex1`) contradicted that directive and the v3 harness flagged it as\n // the single most expensive contract-ambiguity friction point. Pages that\n // genuinely need to claim scroll/padding can still declare it explicitly\n // via `page.surface` — the fallback just stops prescribing it.\n const surface = page.surface || `_flex _col ${gapAtom}`;\n\n return {\n type: 'page',\n id: page.sectionId ? `${page.sectionId}:${page.id}` : page.id,\n children,\n pageId: page.id,\n ...(page.sectionId ? { sectionId: page.sectionId } : {}),\n surface,\n wiring,\n ...(layer ? { layer } : {}),\n };\n}\n","import type { IRGridNode, IRNode, IRPatternNode } from './types.js';\n\n/** Depth-first walk of IR tree, calling visitor on each node */\nexport function walkIR(\n node: IRNode,\n visitor: (node: IRNode, parent: IRNode | null) => void,\n parent: IRNode | null = null,\n): void {\n visitor(node, parent);\n for (const child of node.children) {\n walkIR(child, visitor, node);\n }\n}\n\n/** Find all nodes of a specific type */\nexport function findNodes<T extends IRNode>(root: IRNode, type: string): T[] {\n const results: T[] = [];\n walkIR(root, (node) => {\n if (node.type === type) {\n results.push(node as T);\n }\n });\n return results;\n}\n\n/** Count total patterns in an IR tree */\nexport function countPatterns(root: IRNode): number {\n return findNodes(root, 'pattern').length;\n}\n\n/** Validate IR tree structure (no orphaned grids, patterns have meta, etc.) */\nexport function validateIR(root: IRNode): string[] {\n const errors: string[] = [];\n\n walkIR(root, (node, parent) => {\n if (node.type === 'grid') {\n const grid = node as IRGridNode;\n if (grid.children.length === 0) {\n errors.push(`Grid node \"${grid.id}\" has no children`);\n }\n }\n\n if (node.type === 'pattern') {\n const pattern = node as IRPatternNode;\n if (!pattern.pattern) {\n errors.push(`Pattern node \"${pattern.id}\" is missing pattern meta`);\n }\n if (!pattern.pattern.patternId) {\n errors.push(`Pattern node \"${pattern.id}\" has no patternId`);\n }\n }\n\n if (node.type === 'page') {\n if (!node.id) {\n errors.push('Page node is missing id');\n }\n }\n });\n\n return errors;\n}\n","import type { EssenceFile, EssenceV3 } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3 } from '@decantr/essence-spec';\nimport type { ContentResolver } from '@decantr/registry';\nimport { walkIR } from './ir-helpers.js';\nimport { runPipeline } from './pipeline.js';\nimport type { IRAppNode, IRNode, IRPageNode, IRPatternNode } from './types.js';\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport const EXECUTION_PACK_SCHEMA_URLS = {\n scaffold: 'https://decantr.ai/schemas/scaffold-pack.v1.json',\n section: 'https://decantr.ai/schemas/section-pack.v1.json',\n page: 'https://decantr.ai/schemas/page-pack.v1.json',\n mutation: 'https://decantr.ai/schemas/mutation-pack.v1.json',\n review: 'https://decantr.ai/schemas/review-pack.v1.json',\n} as const;\n\nexport const PACK_MANIFEST_SCHEMA_URL = 'https://decantr.ai/schemas/pack-manifest.v1.json';\nexport const EXECUTION_PACK_BUNDLE_SCHEMA_URL =\n 'https://decantr.ai/schemas/execution-pack-bundle.v1.json';\nexport const SELECTED_EXECUTION_PACK_SCHEMA_URL =\n 'https://decantr.ai/schemas/selected-execution-pack.v1.json';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: MutationPackKind;\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldPackRoute {\n pageId: string;\n sectionId?: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface ScaffoldPackData {\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n navigation?: {\n /**\n * true = palette enabled with implicit defaults.\n * false = not enabled.\n * object = explicit structured contract (see CommandPaletteContract).\n */\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n /** Default hotkey semantics applied unless per-hotkey semantics override. */\n hotkeySemantics?: HotkeySemantics;\n };\n routes: ScaffoldPackRoute[];\n /**\n * Required theme decorator contract — surfaced ONCE at the project level\n * here, then referenced (not duplicated) in each section pack. Cold-LLM\n * runs reported the table was duplicated 7-10× across context files\n * (~270-540 redundant lines per scaffold) when each section pack carried\n * its own copy. Centralizing in scaffold-pack — which the cold prompt\n * tells AI to read first — keeps the contract authoritative without the\n * per-section repetition.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\nexport interface CommandPaletteContract {\n trigger?: string;\n placeholder?: string;\n width?: string;\n styling?: 'modal' | 'sheet' | 'inline' | 'fullscreen';\n commands?: Array<{\n id: string;\n label: string;\n section?: string;\n hotkey?: string;\n action?: string;\n route?: string;\n }>;\n}\n\nexport interface HotkeySemantics {\n chord_window_ms?: number;\n input_guard?: boolean;\n modifier_suppression?: boolean;\n match_case?: boolean;\n}\n\nexport interface ScaffoldExecutionPack extends ExecutionPackBase<ScaffoldPackData> {\n packType: 'scaffold';\n}\n\nexport interface SectionPackInput {\n id: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n pageIds: string[];\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives — short imperative rules for this section. */\n directives?: string[];\n}\n\n/** Navigation item contract for a section's primary navigation. */\nexport interface SectionNavigationItemPack {\n label: string;\n route: string;\n icon?: string;\n hotkey?: string;\n active_match?: string;\n badge?: string;\n}\n\nexport interface SectionPackRoute {\n pageId: string;\n sectionId?: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface SectionPackData {\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: SectionPackRoute[];\n /** Contract for items rendered in this section's primary navigation. */\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives emitted into the section-pack rendering. */\n directives?: string[];\n /**\n * Required theme decorator contract surfaced into the compact pack.\n * Mirrors the long-form section-context \"Required Theme Decorators\" table.\n * Cold prompts instruct AI assistants to read packs first, so the strong\n * decorator contract has to live HERE, not just in the long-form file.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\n/** Compact, render-ready decorator entry for pack contracts. */\nexport interface ThemeDecoratorEntry {\n /** Decorator class name without leading dot, e.g. \"lum-glass\". */\n class: string;\n /** Authored intent describing what the decorator does. */\n intent: string;\n /** Authored slot hints listing where to apply it (joined from usage[]). */\n applyTo: string;\n}\n\nexport interface SectionExecutionPack extends ExecutionPackBase<SectionPackData> {\n packType: 'section';\n}\n\nexport interface PagePackInput {\n pageId: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n /** Execution-level directives — short imperative rules for this page. */\n directives?: string[];\n}\n\nexport interface PagePackPattern {\n id: string;\n alias: string;\n preset: string;\n layout: string;\n /**\n * Per-preset prose from the pattern's preset.description. When present,\n * the page-pack renderer emits it as a short description line so cold\n * LLMs read preset-specific guidance instead of having to look up the\n * pattern's root description.\n */\n presetDescription?: string;\n /**\n * v2.1 Tier C1. Declared interactions from the pattern JSON. Rendered\n * as a checkbox checklist so cold LLMs in generation mode see a\n * hard-edged list they can't categorize as \"philosophy\". Enforced by\n * decantr check --strict (C5 guard rule).\n */\n interactions?: string[];\n}\n\nexport interface PagePackData {\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: PagePackPattern[];\n /** Execution-level directives emitted into the page-pack rendering. */\n directives?: string[];\n}\n\nexport interface PageExecutionPack extends ExecutionPackBase<PagePackData> {\n packType: 'page';\n}\n\nexport type MutationPackKind = 'add-page' | 'modify';\n\nexport interface MutationPackData {\n mutationType: MutationPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n workflow: string[];\n}\n\nexport interface MutationExecutionPack extends ExecutionPackBase<MutationPackData> {\n packType: 'mutation';\n}\n\nexport type ReviewPackKind = 'app';\n\nexport interface ReviewPackData {\n reviewType: ReviewPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n focusAreas: string[];\n workflow: string[];\n}\n\nexport interface ReviewExecutionPack extends ExecutionPackBase<ReviewPackData> {\n packType: 'review';\n}\n\nexport interface ExecutionPackBundle {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport type SelectedExecutionPack =\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n\nexport interface ExecutionPackSelector {\n packType: ExecutionPackType;\n id?: string | null;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack: SelectedExecutionPack;\n}\n\nexport interface ScaffoldPackBuilderOptions {\n objective?: string;\n target?: Partial<ExecutionPackTarget>;\n preset?: string | null;\n requiredSetup?: string[];\n examples?: ExecutionPackExample[];\n antiPatterns?: ExecutionPackAntiPattern[];\n successChecks?: ExecutionPackSuccessCheck[];\n tokenBudget?: Partial<ExecutionPackTokenBudget>;\n navigation?: {\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n hotkeySemantics?: HotkeySemantics;\n };\n /**\n * Required theme decorator contract surfaced into the scaffold pack.\n * The scaffold pack is read first per cold-prompt rules, so the canonical\n * decorator contract belongs here. Section packs reference this without\n * duplicating to avoid the 7-10× repetition cold-LLM runs reported.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\nexport interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {\n // themeDecorators inherited from base — section packs render a pointer\n // to scaffold-pack rather than re-emitting the full table (1.7.22 dedup).\n}\nexport interface PagePackBuilderOptions extends ScaffoldPackBuilderOptions {}\nexport interface MutationPackBuilderOptions extends ScaffoldPackBuilderOptions {\n mutationType: MutationPackKind;\n workflow?: string[];\n}\nexport interface ReviewPackBuilderOptions extends ScaffoldPackBuilderOptions {\n reviewType?: ReviewPackKind;\n focusAreas?: string[];\n workflow?: string[];\n}\n\nexport interface CompileExecutionPackBundleOptions {\n contentRoot?: string;\n overridePaths?: string[];\n resolver?: ContentResolver;\n}\n\nconst DEFAULT_TARGET: ExecutionPackTarget = {\n platform: 'web',\n framework: null,\n runtime: null,\n adapter: 'generic-web',\n};\n\nconst DEFAULT_TOKEN_BUDGET: ExecutionPackTokenBudget = {\n target: 1400,\n max: 2200,\n strategy: [\n 'Prefer route summaries over repeated prose.',\n 'Use compact vocabulary lists instead of large reference tables.',\n 'Include only task-relevant examples and checks.',\n ],\n};\n\nconst DEFAULT_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'route-topology',\n label: 'Routes and page IDs match the compiled topology.',\n severity: 'error',\n },\n {\n id: 'shell-consistency',\n label: 'The declared shell contract is preserved unless the task explicitly mutates it.',\n severity: 'error',\n },\n {\n id: 'theme-consistency',\n label: 'Theme identity and mode remain consistent across scaffolded routes.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_SECTION_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'section-route-coherence',\n label: 'Section pages and routes remain coherent with the compiled topology.',\n severity: 'error',\n },\n {\n id: 'section-shell-consistency',\n label: 'The section shell contract stays consistent across its routes.',\n severity: 'error',\n },\n {\n id: 'section-pattern-coverage',\n label: 'Primary section patterns are represented without adding off-contract filler sections.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_PAGE_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'page-route-contract',\n label: 'The page keeps the compiled route, shell, and section contract intact.',\n severity: 'error',\n },\n {\n id: 'page-pattern-contract',\n label:\n 'The page preserves its primary compiled patterns instead of drifting into unrelated layouts.',\n severity: 'error',\n },\n {\n id: 'page-state-contract',\n label: 'Any declared wiring signals remain coherent with the rendered page structure.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_MUTATION_SUCCESS_CHECKS: Record<MutationPackKind, ExecutionPackSuccessCheck[]> = {\n 'add-page': [\n {\n id: 'mutation-essence-first',\n label: 'New pages are declared in the essence before any code generation begins.',\n severity: 'error',\n },\n {\n id: 'mutation-shell-contract',\n label:\n 'New routes inherit an existing shell and section contract unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-refresh',\n label: 'Refresh compiled packs after the mutation so downstream tasks read current topology.',\n severity: 'warn',\n },\n ],\n modify: [\n {\n id: 'mutation-existing-topology',\n label:\n 'Modified routes remain coherent with the compiled topology unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-theme-contract',\n label: 'Theme, shell, and page identity stay aligned with the current contract during edits.',\n severity: 'error',\n },\n {\n id: 'mutation-page-pack-first',\n label:\n 'Route-local edits should start from the compiled page pack rather than improvised structure.',\n severity: 'warn',\n },\n ],\n};\n\nconst DEFAULT_REVIEW_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'review-contract-baseline',\n label:\n 'Review findings should use the compiled route, shell, and theme contract as the baseline.',\n severity: 'error',\n },\n {\n id: 'review-evidence',\n label: 'Each critique finding should cite concrete evidence from the generated workspace.',\n severity: 'error',\n },\n {\n id: 'review-remediation',\n label:\n 'Suggested fixes should point back to code changes or essence updates when contract drift exists.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_REVIEW_ANTI_PATTERNS: ExecutionPackAntiPattern[] = [\n {\n id: 'inline-styles',\n summary: 'Avoid inline style literals as the primary styling path.',\n guidance:\n 'Move visual styling into tokens.css and treatments.css instead of component-local style objects.',\n },\n {\n id: 'hardcoded-colors',\n summary: 'Avoid hardcoded color literals.',\n guidance: 'Use CSS variables and theme decorators instead of hex, rgb, or hsl values.',\n },\n {\n id: 'utility-framework-leakage',\n summary: 'Avoid utility-framework leakage as the primary design language.',\n guidance:\n 'Prefer compiled Decantr treatments and contract vocabulary over ad hoc utility class stacks.',\n },\n];\n\nfunction collectPatternIds(page: IRPageNode): string[] {\n const patternIds: string[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patternIds.push(patternNode.pattern.patternId);\n });\n return [...new Set(patternIds)];\n}\n\nfunction pageIdentity(pageId: string, sectionId?: string | null): string {\n return sectionId ? `${sectionId}/${pageId}` : pageId;\n}\n\nfunction pageFileId(pageId: string, sectionId?: string | null): string {\n return pageIdentity(pageId, sectionId).replace(/[^a-zA-Z0-9._-]+/g, '-');\n}\n\nfunction routePageLabel(route: Pick<ScaffoldPackRoute, 'pageId' | 'sectionId'>): string {\n return route.sectionId ? `${route.sectionId}/${route.pageId}` : route.pageId;\n}\n\nfunction summarizeRoutes(appNode: IRAppNode): ScaffoldPackRoute[] {\n return appNode.routes.flatMap((route) => {\n const pageNode = findPageNode(appNode, route.pageId, route.sectionId);\n if (!pageNode) return [];\n return [\n {\n pageId: pageNode.pageId,\n ...(route.sectionId ? { sectionId: route.sectionId } : {}),\n path: route.path,\n patternIds: collectPatternIds(pageNode),\n shell: route.shell,\n },\n ];\n });\n}\n\nfunction summarizeSectionRoutes(appNode: IRAppNode, input: SectionPackInput): SectionPackRoute[] {\n return summarizeRoutes(appNode).filter(\n (route) =>\n input.pageIds.includes(route.pageId) && (!route.sectionId || route.sectionId === input.id),\n );\n}\n\nfunction summarizePageRoute(\n appNode: IRAppNode,\n pageId: string,\n sectionId?: string | null,\n): ScaffoldPackRoute | null {\n return (\n summarizeRoutes(appNode).find(\n (route) =>\n route.pageId === pageId && (!sectionId || !route.sectionId || route.sectionId === sectionId),\n ) ?? null\n );\n}\n\nfunction findPageNode(\n appNode: IRAppNode,\n pageId: string,\n sectionId?: string | null,\n): IRPageNode | null {\n const page = appNode.children.find((node) => {\n const pageNode = node as IRPageNode;\n return (\n pageNode.pageId === pageId && (!sectionId || !pageNode.sectionId || pageNode.sectionId === sectionId)\n );\n });\n return page ? (page as IRPageNode) : null;\n}\n\nfunction collectPagePatterns(page: IRPageNode): PagePackPattern[] {\n const patterns: PagePackPattern[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patterns.push({\n id: patternNode.pattern.patternId,\n alias: patternNode.pattern.alias,\n preset: patternNode.pattern.preset,\n layout: patternNode.pattern.layout,\n ...(patternNode.pattern.presetDescription\n ? { presetDescription: patternNode.pattern.presetDescription }\n : {}),\n ...(patternNode.pattern.interactions && patternNode.pattern.interactions.length > 0\n ? { interactions: patternNode.pattern.interactions }\n : {}),\n });\n });\n return patterns;\n}\n\nfunction mergeTokenBudget(overrides?: Partial<ExecutionPackTokenBudget>): ExecutionPackTokenBudget {\n return {\n target: overrides?.target ?? DEFAULT_TOKEN_BUDGET.target,\n max: overrides?.max ?? DEFAULT_TOKEN_BUDGET.max,\n strategy: overrides?.strategy ?? DEFAULT_TOKEN_BUDGET.strategy,\n };\n}\n\nfunction renderList(title: string, entries: string[]): string[] {\n if (entries.length === 0) return [];\n return [title, ...entries.map((entry) => `- ${entry}`), ''];\n}\n\n// Compact description of hotkey semantics for pack markdown. Returns empty\n// string when no semantics are declared so the line can be omitted entirely.\nfunction formatHotkeySemantics(semantics: HotkeySemantics | undefined): string {\n if (!semantics) return '';\n const parts: string[] = [];\n if (typeof semantics.chord_window_ms === 'number') {\n parts.push(`chord window ${semantics.chord_window_ms}ms`);\n }\n if (semantics.input_guard === true) parts.push('suppress during text-input focus');\n if (semantics.input_guard === false) parts.push('fire even while typing (explicit)');\n if (semantics.modifier_suppression === true) parts.push('ignore when modifier held');\n if (semantics.modifier_suppression === false) parts.push('allow modifier passthrough (explicit)');\n if (semantics.match_case === true) parts.push('case-sensitive');\n return parts.join('; ');\n}\n\n// Short, mechanical router-implementation hint so the LLM picks the right\n// imports without having to consult a separate narrative file. Keyed off the\n// same string enum as the schema.\nfunction routingImplementationHint(routing: 'hash' | 'history' | 'pathname'): string {\n switch (routing) {\n case 'hash':\n return 'HashRouter from react-router-dom; URLs prefixed with /# (e.g. /#/login). Only for static-only hosts without SPA fallback.';\n case 'history':\n return 'BrowserRouter from react-router-dom; regular URLs (e.g. /login). Works on Vite dev, Vercel, Netlify, Cloudflare Pages.';\n case 'pathname':\n return 'pathname-based routing (Next.js App Router file conventions).';\n default:\n return String(routing);\n }\n}\n\nexport function renderExecutionPackMarkdown(pack: ExecutionPackBase<unknown>): string {\n const lines: string[] = [];\n\n lines.push(`# ${pack.packType.charAt(0).toUpperCase()}${pack.packType.slice(1)} Pack`);\n lines.push('');\n lines.push(`**Objective:** ${pack.objective}`);\n lines.push(\n `**Target:** ${pack.target.adapter}${pack.target.framework ? ` (${pack.target.framework})` : ''}`,\n );\n lines.push(\n `**Scope:** pages=${pack.scope.pageIds.join(', ') || 'none'} | patterns=${pack.scope.patternIds.join(', ') || 'none'}`,\n );\n lines.push('');\n\n if (pack.packType === 'scaffold') {\n const scaffoldPack = pack as ScaffoldExecutionPack;\n const scaffoldShells = [\n ...new Set(scaffoldPack.data.routes.map((route) => route.shell).filter(Boolean)),\n ];\n lines.push('## Scaffold Contract');\n lines.push(`- Shell: ${scaffoldPack.data.shell}`);\n if (scaffoldShells.length > 1) {\n const secondaryShells = scaffoldShells.filter((shell) => shell !== scaffoldPack.data.shell);\n lines.push(\n `- Shells: ${[`${scaffoldPack.data.shell} (primary)`, ...secondaryShells].join(', ')}`,\n );\n }\n lines.push(`- Theme: ${scaffoldPack.data.theme.id} (${scaffoldPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${scaffoldPack.data.routing} → ${routingImplementationHint(scaffoldPack.data.routing)}`,\n );\n if (scaffoldPack.data.features.length > 0) {\n lines.push(`- Features: ${scaffoldPack.data.features.join(', ')}`);\n }\n if (\n scaffoldPack.data.navigation?.commandPalette ||\n scaffoldPack.data.navigation?.hotkeys.length\n ) {\n lines.push('- Navigation:');\n const cp = scaffoldPack.data.navigation.commandPalette;\n if (cp) {\n if (typeof cp === 'object') {\n lines.push(' - Command palette:');\n if (cp.trigger) lines.push(` - Trigger: ${cp.trigger}`);\n if (cp.styling)\n lines.push(` - Styling: ${cp.styling}${cp.width ? ` (width ${cp.width})` : ''}`);\n else if (cp.width) lines.push(` - Width: ${cp.width}`);\n if (cp.placeholder) lines.push(` - Placeholder: \"${cp.placeholder}\"`);\n if (cp.commands && cp.commands.length > 0) {\n lines.push(` - Commands (${cp.commands.length}):`);\n for (const command of cp.commands) {\n const parts: string[] = [];\n if (command.section) parts.push(command.section);\n parts.push(command.label);\n if (command.hotkey) parts.push(`[${command.hotkey}]`);\n if (command.route) parts.push(`→ ${command.route}`);\n lines.push(` - ${command.id}: ${parts.join(' · ')}`);\n }\n }\n } else {\n lines.push(' - command palette required');\n }\n }\n const globalSemantics = scaffoldPack.data.navigation.hotkeySemantics;\n if (scaffoldPack.data.navigation.hotkeys.length > 0) {\n const semanticsSummary = formatHotkeySemantics(globalSemantics);\n lines.push(` - Hotkeys${semanticsSummary ? ` (${semanticsSummary})` : ''}:`);\n for (const hotkey of scaffoldPack.data.navigation.hotkeys) {\n const target = [hotkey.label, hotkey.route].filter(Boolean).join(' — ');\n const perKeySemantics = formatHotkeySemantics(hotkey.semantics);\n const suffix = perKeySemantics ? ` _(${perKeySemantics})_` : '';\n lines.push(` - ${hotkey.key}${target ? `: ${target}` : ''}${suffix}`);\n }\n }\n }\n lines.push('');\n\n lines.push('## Route Plan');\n for (const route of scaffoldPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n // Required Theme Decorators — canonical project-level decorator contract\n // (1.7.22). Lives ONCE here in scaffold-pack rather than duplicated across\n // section packs. Cold prompts read scaffold-pack first, so this is the\n // earliest authoritative read of the theme's visual identity contract.\n if (scaffoldPack.data.themeDecorators && scaffoldPack.data.themeDecorators.length > 0) {\n const escScaffoldCell = (s: string): string => s.replace(/\\|/g, '\\\\|');\n lines.push(`## Required Theme Decorators (${scaffoldPack.data.theme.id})`);\n lines.push('');\n lines.push(\n 'These classes carry the active theme\\'s visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these across all sections — without them, every page reads as \"themed colors only\" with no theme character. Section packs reference this table; the contract is project-wide.',\n );\n lines.push('');\n lines.push('| Class | Intent | Apply to |');\n lines.push('|-------|--------|----------|');\n for (const entry of scaffoldPack.data.themeDecorators) {\n lines.push(\n `| \\`.${entry.class}\\` | ${escScaffoldCell(entry.intent)} | ${escScaffoldCell(entry.applyTo)} |`,\n );\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'section') {\n const sectionPack = pack as SectionExecutionPack;\n lines.push('## Section Contract');\n lines.push(`- Section: ${sectionPack.data.sectionId}`);\n lines.push(`- Role: ${sectionPack.data.role}`);\n lines.push(`- Shell: ${sectionPack.data.shell}`);\n lines.push(`- Theme: ${sectionPack.data.theme.id} (${sectionPack.data.theme.mode})`);\n if (sectionPack.data.features.length > 0) {\n lines.push(`- Features: ${sectionPack.data.features.join(', ')}`);\n }\n if (sectionPack.data.description) {\n lines.push(`- Description: ${sectionPack.data.description}`);\n }\n lines.push('');\n\n lines.push('## Section Routes');\n for (const route of sectionPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (sectionPack.data.navigationItems && sectionPack.data.navigationItems.length > 0) {\n lines.push('## Section Navigation');\n lines.push('');\n lines.push(\n \"Render these items in the shell's primary navigation. Exact match on label, route, and icon.\",\n );\n lines.push('');\n for (const item of sectionPack.data.navigationItems) {\n const parts: string[] = [`${item.label} → ${item.route}`];\n if (item.icon) parts.push(`icon: ${item.icon}`);\n if (item.hotkey) parts.push(`hotkey: ${item.hotkey}`);\n if (item.badge) parts.push(`badge: ${item.badge}`);\n if (item.active_match) parts.push(`active match: \\`${item.active_match}\\``);\n lines.push(`- ${parts.join(' · ')}`);\n }\n lines.push('');\n }\n\n if (sectionPack.data.directives && sectionPack.data.directives.length > 0) {\n lines.push('## Section Directives');\n lines.push('');\n lines.push(\n 'Execution-level rules every page in this section must obey. Follow exactly — these live in the pack contract, not narrative prose.',\n );\n lines.push('');\n for (const directive of sectionPack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n\n // Theme decorators pointer — full table lives in scaffold-pack.md (1.7.22\n // dedup). F2 Phase 1 cold-LLM runs flagged 7-10× duplication of the same\n // table across section packs (~270-540 redundant lines per scaffold). The\n // canonical contract now lives ONCE in scaffold-pack; section packs cite\n // the theme id and point readers there. Section-pack data still carries\n // themeDecorators if explicitly set (legacy support), but the renderer\n // prefers the pointer form unless a section-specific override is needed.\n if (sectionPack.data.themeDecorators && sectionPack.data.themeDecorators.length > 0) {\n // Legacy/override path — render the full table. Kept for back-compat\n // with consumers that still pass themeDecorators directly.\n const escCell = (s: string): string => s.replace(/\\|/g, '\\\\|');\n lines.push(`## Required Theme Decorators (${sectionPack.data.theme.id})`);\n lines.push('');\n lines.push(\n 'These classes carry the active theme\\'s visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these — without them, the page reads as \"themed colors only\" with no theme character.',\n );\n lines.push('');\n lines.push('| Class | Intent | Apply to |');\n lines.push('|-------|--------|----------|');\n for (const entry of sectionPack.data.themeDecorators) {\n lines.push(\n `| \\`.${entry.class}\\` | ${escCell(entry.intent)} | ${escCell(entry.applyTo)} |`,\n );\n }\n lines.push('');\n } else {\n // Default path (1.7.22+) — pointer to scaffold-pack's canonical table.\n lines.push('## Theme Decorators');\n lines.push('');\n lines.push(\n `Theme \\`${sectionPack.data.theme.id}\\` decorators are documented ONCE in \\`scaffold-pack.md\\` under \"Required Theme Decorators\". Apply them across this section's pages — the contract is the same project-wide. See also DECANTR.md \"Decorator Quick Reference\" for the same table.`,\n );\n lines.push('');\n }\n }\n\n if (pack.packType === 'page') {\n const pagePack = pack as PageExecutionPack;\n lines.push('## Page Contract');\n lines.push(`- Page: ${pagePack.data.pageId}`);\n lines.push(`- Path: ${pagePack.data.path}`);\n lines.push(`- Shell: ${pagePack.data.shell}`);\n if (pagePack.data.sectionId) {\n const role = pagePack.data.sectionRole ? ` (${pagePack.data.sectionRole})` : '';\n lines.push(`- Section: ${pagePack.data.sectionId}${role}`);\n }\n lines.push(`- Theme: ${pagePack.data.theme.id} (${pagePack.data.theme.mode})`);\n if (pagePack.data.features.length > 0) {\n lines.push(`- Features: ${pagePack.data.features.join(', ')}`);\n }\n if (pagePack.data.surface) {\n lines.push(`- Surface: ${pagePack.data.surface}`);\n }\n lines.push('');\n\n lines.push('## Page Patterns');\n for (const pattern of pagePack.data.patterns) {\n lines.push(\n `- ${pattern.alias} -> ${pattern.id} [${pattern.layout}${pattern.preset ? ` | ${pattern.preset}` : ''}]`,\n );\n // Emit preset-specific description on the next line (indented) when\n // the pattern's preset carries its own prose. This stops cold LLMs\n // from falling back to the blueprint-generic root description.\n if (pattern.presetDescription) {\n lines.push(` > ${pattern.presetDescription}`);\n }\n // v2.1 C1: surface declared interactions[] as a checkbox checklist.\n // Hard-edged format — LLMs in generation mode cannot categorize a\n // checkbox as philosophy. Enforced by decantr check --strict (C5).\n if (pattern.interactions && pattern.interactions.length > 0) {\n lines.push(` **Interactions (MUST implement each — see DECANTR.md \"Interaction Requirements\"):**`);\n for (const interaction of pattern.interactions) {\n lines.push(` - [ ] ${interaction}`);\n }\n }\n }\n lines.push('');\n\n if (pagePack.data.wiringSignals.length > 0) {\n lines.push('## Wiring Signals');\n for (const signal of pagePack.data.wiringSignals) {\n lines.push(`- ${signal}`);\n }\n lines.push('');\n }\n\n if (pagePack.data.directives && pagePack.data.directives.length > 0) {\n lines.push('## Page Directives');\n lines.push('');\n lines.push('Execution-level rules for this route. Follow exactly.');\n lines.push('');\n for (const directive of pagePack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'mutation') {\n const mutationPack = pack as MutationExecutionPack;\n lines.push('## Mutation Contract');\n lines.push(`- Operation: ${mutationPack.data.mutationType}`);\n lines.push(`- Shell: ${mutationPack.data.shell}`);\n lines.push(`- Theme: ${mutationPack.data.theme.id} (${mutationPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${mutationPack.data.routing} → ${routingImplementationHint(mutationPack.data.routing)}`,\n );\n if (mutationPack.data.features.length > 0) {\n lines.push(`- Features: ${mutationPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Route Topology');\n for (const route of mutationPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (mutationPack.data.workflow.length > 0) {\n lines.push('## Workflow');\n for (const step of mutationPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'review') {\n const reviewPack = pack as ReviewExecutionPack;\n lines.push('## Review Contract');\n lines.push(`- Review Type: ${reviewPack.data.reviewType}`);\n lines.push(`- Shell: ${reviewPack.data.shell}`);\n lines.push(`- Theme: ${reviewPack.data.theme.id} (${reviewPack.data.theme.mode})`);\n lines.push(`- Routing: ${reviewPack.data.routing}`);\n if (reviewPack.data.features.length > 0) {\n lines.push(`- Features: ${reviewPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Review Topology');\n for (const route of reviewPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (reviewPack.data.focusAreas.length > 0) {\n lines.push('## Focus Areas');\n for (const focusArea of reviewPack.data.focusAreas) {\n lines.push(`- ${focusArea}`);\n }\n lines.push('');\n }\n\n if (reviewPack.data.workflow.length > 0) {\n lines.push('## Review Workflow');\n for (const step of reviewPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n // P1-1 — Page packs skip the universal footer (required setup, allowed\n // vocabulary, success checks, anti-patterns, examples, token budget).\n // These blocks are identical across every page in a 16-page scaffold\n // (~35 lines × N pages of pure boilerplate) and their JSON still carries\n // all fields for any consumer that needs the raw data. Non-page packs\n // keep the full footer — each one (scaffold, section, mutation, review)\n // is a singleton per scaffold so there's no duplication problem.\n if (pack.packType === 'page') {\n lines.push('## Shared Contract');\n lines.push(\n 'Required setup, allowed vocabulary, success checks, anti-patterns, and token budget are shared across every page pack. The full list lives in the pack JSON sidecar (`page-<id>-pack.json`) and in the pack-manifest. Refer there instead of re-reading the same boilerplate 16 times.',\n );\n lines.push('');\n return lines.join('\\n').trimEnd() + '\\n';\n }\n\n lines.push('## Required Setup');\n if (pack.requiredSetup.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.requiredSetup.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push('## Allowed Vocabulary');\n if (pack.allowedVocabulary.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.allowedVocabulary.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push(\n ...renderList(\n '## Success Checks',\n pack.successChecks.map((entry) => `${entry.label} [${entry.severity}]`),\n ),\n );\n lines.push(\n ...renderList(\n '## Anti-Patterns',\n pack.antiPatterns.map((entry) => `${entry.summary}: ${entry.guidance}`),\n ),\n );\n lines.push(\n ...renderList(\n '## Examples',\n pack.examples.map((entry) => `${entry.label} (${entry.language})`),\n ),\n );\n\n lines.push('## Token Budget');\n lines.push(`- Target: ${pack.tokenBudget.target}`);\n lines.push(`- Max: ${pack.tokenBudget.max}`);\n lines.push(...pack.tokenBudget.strategy.map((entry) => `- ${entry}`));\n lines.push('');\n\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nexport function resolvePackAdapter(\n target: string | undefined,\n platformType: string | undefined,\n): string {\n if (target === 'react' && platformType === 'spa') return 'react-vite';\n if (target === 'react') return 'react-web';\n if (target === 'vue' && platformType === 'spa') return 'vue-vite';\n if (target === 'svelte' && platformType === 'spa') return 'sveltekit';\n if (target) return target;\n return 'generic-web';\n}\n\nexport function listPackSections(essence: EssenceV3): SectionPackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections\n .map((section) => {\n const pageIds = section.pages\n .filter(\n (page) =>\n routedSectionPages.size === 0 || routedSectionPages.has(`${section.id}:${page.id}`),\n )\n .map((page) => page.id);\n\n return {\n id: section.id,\n role: section.role,\n shell: section.shell as string,\n description: section.description,\n features: section.features,\n pageIds,\n ...(Array.isArray(section.navigation_items) && section.navigation_items.length > 0\n ? { navigationItems: section.navigation_items as SectionNavigationItemPack[] }\n : {}),\n ...(Array.isArray(section.directives) && section.directives.length > 0\n ? { directives: section.directives }\n : {}),\n };\n })\n .filter((section) => section.pageIds.length > 0);\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n return [\n {\n id: essence.meta.archetype || 'default',\n role: 'primary',\n shell: (essence.blueprint.shell ?? 'sidebar-main') as string,\n description: `${essence.meta.archetype || 'Application'} section`,\n features: essence.blueprint.features || [],\n pageIds: pages.map((page) => page.id),\n },\n ];\n}\n\nexport function listPackPages(essence: EssenceV3): PagePackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections.flatMap((section) =>\n section.pages\n .map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? section.shell) as string,\n sectionId: section.id,\n sectionRole: section.role,\n features: section.features,\n ...(Array.isArray(page.directives) && page.directives.length > 0\n ? { directives: page.directives }\n : {}),\n }))\n .filter(\n (page) =>\n routedSectionPages.size === 0 ||\n routedSectionPages.has(`${page.sectionId}:${page.pageId}`),\n ),\n );\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n const defaultShell = (essence.blueprint.shell ?? 'sidebar-main') as string;\n return pages.map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? defaultShell) as string,\n sectionId: essence.meta.archetype || 'default',\n sectionRole: 'primary',\n features: essence.blueprint.features || [],\n }));\n}\n\nfunction buildPageManifestEntries(pages: PagePackInput[]): PackManifestPageEntry[] {\n const counts = new Map<string, number>();\n for (const page of pages) {\n counts.set(page.pageId, (counts.get(page.pageId) ?? 0) + 1);\n }\n\n return pages.map((page) => {\n const hasDuplicatePageId = (counts.get(page.pageId) ?? 0) > 1;\n const id = hasDuplicatePageId ? pageIdentity(page.pageId, page.sectionId) : page.pageId;\n const fileId = hasDuplicatePageId ? pageFileId(page.pageId, page.sectionId) : page.pageId;\n return {\n id,\n markdown: `page-${fileId}-pack.md`,\n json: `page-${fileId}-pack.json`,\n sectionId: page.sectionId,\n sectionRole: page.sectionRole,\n };\n });\n}\n\nexport function buildScaffoldPack(\n appNode: IRAppNode,\n options: ScaffoldPackBuilderOptions = {},\n): ScaffoldExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: ScaffoldExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.scaffold,\n packVersion: '1.0.0',\n packType: 'scaffold',\n objective:\n options.objective ?? `Scaffold the ${appNode.theme.id} app shell and declared routes.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the declared routes as the topology source of truth.',\n 'Preserve the resolved theme and shell contract unless the task explicitly mutates them.',\n ],\n allowedVocabulary: [\n ...new Set([\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n navigation: options.navigation,\n routes,\n ...(options.themeDecorators && options.themeDecorators.length > 0\n ? { themeDecorators: options.themeDecorators }\n : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildSectionPack(\n appNode: IRAppNode,\n input: SectionPackInput,\n options: SectionPackBuilderOptions = {},\n): SectionExecutionPack {\n const routes = summarizeSectionRoutes(appNode, input);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: SectionExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.section,\n packVersion: '1.0.0',\n packType: 'section',\n objective:\n options.objective ??\n `Implement the ${input.id} section using the compiled ${input.shell} shell contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Use the declared section routes as the source of truth for this slice of the app.',\n 'Keep the section shell consistent unless the task explicitly changes the shell contract.',\n ],\n allowedVocabulary: [\n ...new Set([\n input.id,\n input.role,\n input.shell,\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SECTION_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n sectionId: input.id,\n role: input.role,\n shell: input.shell,\n description: input.description,\n features: input.features,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routes,\n ...(input.navigationItems && input.navigationItems.length > 0\n ? { navigationItems: input.navigationItems }\n : {}),\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n ...(options.themeDecorators && options.themeDecorators.length > 0\n ? { themeDecorators: options.themeDecorators }\n : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildPagePack(\n appNode: IRAppNode,\n input: PagePackInput,\n options: PagePackBuilderOptions = {},\n): PageExecutionPack {\n const pageNode = findPageNode(appNode, input.pageId, input.sectionId);\n const route = summarizePageRoute(appNode, input.pageId, input.sectionId);\n\n if (!pageNode || !route) {\n throw new Error(`Unknown page for page pack: ${input.pageId}`);\n }\n\n const patterns = collectPagePatterns(pageNode);\n\n const pack: PageExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.page,\n packVersion: '1.0.0',\n packType: 'page',\n objective:\n options.objective ?? `Implement the ${input.pageId} route using the compiled page contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: [route.pageId],\n patternIds: [...new Set(patterns.map((pattern) => pattern.id))],\n },\n requiredSetup: options.requiredSetup ?? [\n 'Keep the compiled route and shell contract stable for this page.',\n 'Treat the listed page patterns as the primary structure for this route.',\n ],\n allowedVocabulary: [\n ...new Set(\n [\n input.pageId,\n input.shell,\n input.sectionId ?? '',\n input.sectionRole ?? '',\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...patterns.flatMap((pattern) => [pattern.id, pattern.alias, pattern.layout]),\n ].filter(Boolean),\n ),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_PAGE_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n pageId: route.pageId,\n path: route.path,\n shell: input.shell,\n sectionId: input.sectionId,\n sectionRole: input.sectionRole,\n features: input.features,\n surface: pageNode.surface,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n wiringSignals: pageNode.wiring?.signals.map((signal) => signal.name) ?? [],\n patterns,\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildMutationPack(\n appNode: IRAppNode,\n options: MutationPackBuilderOptions,\n): MutationExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const defaultWorkflow =\n options.mutationType === 'add-page'\n ? [\n 'Declare the new page in the essence before generating code.',\n 'Refresh Decantr context so section and page packs include the new route.',\n 'Read the relevant section pack and new page pack before implementation.',\n ]\n : [\n 'Read the page pack for the route you are modifying first.',\n 'Stop and update the essence before changing route, shell, or pattern contracts.',\n 'Validate and check drift after code changes complete.',\n ];\n\n const pack: MutationExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.mutation,\n packVersion: '1.0.0',\n packType: 'mutation',\n objective:\n options.objective ??\n `Execute the ${options.mutationType} workflow against the compiled app contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the compiled topology as the source of truth until the essence changes.',\n 'Refresh Decantr context after structural mutations so downstream tasks read current packs.',\n ],\n allowedVocabulary: [\n ...new Set([\n options.mutationType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_MUTATION_SUCCESS_CHECKS[options.mutationType],\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n mutationType: options.mutationType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n workflow: options.workflow ?? defaultWorkflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildReviewPack(\n appNode: IRAppNode,\n options: ReviewPackBuilderOptions = {},\n): ReviewExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const reviewType = options.reviewType ?? 'app';\n const focusAreas = options.focusAreas ?? [\n 'route-topology',\n 'theme-consistency',\n 'treatment-usage',\n 'accessibility',\n 'responsive-design',\n ];\n const workflow = options.workflow ?? [\n 'Read the scaffold pack and page packs before evaluating generated code.',\n 'Compare findings against the compiled route, shell, and theme contract first.',\n 'Escalate contract drift into essence updates when the requested output intentionally changes topology or theme identity.',\n ];\n\n const pack: ReviewExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.review,\n packVersion: '1.0.0',\n packType: 'review',\n objective:\n options.objective ?? 'Review generated output against the compiled Decantr contract.',\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Read the compiled scaffold and route packs before reviewing code.',\n 'Use concrete evidence from the workspace instead of purely stylistic intuition.',\n ],\n allowedVocabulary: [\n ...new Set([\n reviewType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ...focusAreas,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? DEFAULT_REVIEW_ANTI_PATTERNS,\n successChecks: options.successChecks ?? DEFAULT_REVIEW_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n reviewType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n focusAreas,\n workflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport async function compileExecutionPackBundle(\n essence: EssenceFile,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<ExecutionPackBundle> {\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n const generatedAt = new Date().toISOString();\n const sharedTarget = {\n framework: effectiveEssence.meta.target || null,\n runtime: effectiveEssence.meta.platform.type || null,\n adapter: resolvePackAdapter(effectiveEssence.meta.target, effectiveEssence.meta.platform.type),\n };\n\n const pipeline = await runPipeline(essence, {\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n resolver: options.resolver,\n });\n\n const navMeta = effectiveEssence.meta.navigation;\n // Preserve the full command_palette value when it's a structured contract;\n // coerce to boolean only when it's the legacy flag form.\n const commandPaletteValue: boolean | CommandPaletteContract =\n typeof navMeta?.command_palette === 'object' && navMeta.command_palette !== null\n ? (navMeta.command_palette as CommandPaletteContract)\n : Boolean(navMeta?.command_palette);\n\n // Compose theme decorator contract from registry data once and reuse for\n // both scaffold pack (canonical) and section packs (reference). Filter to\n // entries with the minimum data needed to render a useful row.\n const themeDecorators: ThemeDecoratorEntry[] | undefined = (() => {\n const defs = pipeline.registryTheme?.decorator_definitions;\n if (!defs) return undefined;\n const entries: ThemeDecoratorEntry[] = [];\n for (const [name, def] of Object.entries(defs)) {\n const intent = def.intent || def.description || '';\n const applyTo = (def.usage || []).join(', ');\n if (!intent && !applyTo) continue;\n entries.push({ class: name, intent, applyTo });\n }\n return entries.length > 0 ? entries : undefined;\n })();\n\n const scaffold = buildScaffoldPack(pipeline.ir, {\n target: sharedTarget,\n navigation: {\n commandPalette: commandPaletteValue,\n hotkeys: Array.isArray(navMeta?.hotkeys)\n ? navMeta.hotkeys\n .filter(\n (\n hotkey,\n ): hotkey is {\n key: string;\n route?: string;\n action?: string;\n label: string;\n semantics?: HotkeySemantics;\n } =>\n Boolean(\n hotkey && typeof hotkey.key === 'string' && typeof hotkey.label === 'string',\n ),\n )\n .map((hotkey) => ({\n key: hotkey.key,\n route: hotkey.route,\n label: hotkey.label,\n ...(hotkey.semantics ? { semantics: hotkey.semantics as HotkeySemantics } : {}),\n }))\n : [],\n ...(navMeta?.hotkey_semantics\n ? { hotkeySemantics: navMeta.hotkey_semantics as HotkeySemantics }\n : {}),\n },\n ...(themeDecorators ? { themeDecorators } : {}),\n });\n const review = buildReviewPack(pipeline.ir, {\n target: sharedTarget,\n });\n const sectionInputs = listPackSections(effectiveEssence);\n const pageInputs = listPackPages(effectiveEssence);\n\n const sections = sectionInputs.map((section) =>\n buildSectionPack(pipeline.ir, section, {\n target: sharedTarget,\n // themeDecorators intentionally NOT passed to section packs as of 1.7.22.\n // Section packs render a one-line pointer to scaffold-pack instead of\n // duplicating the full decorator table — F2 Phase 1 reports flagged\n // 7-10× duplication across context files. The decorators are still\n // available on each section pack as section-pack.theme.id allows the\n // renderer to compose the pointer with the correct theme name.\n }),\n );\n const pages = pageInputs.map((page) =>\n buildPagePack(pipeline.ir, page, {\n target: sharedTarget,\n }),\n );\n const mutations = (['add-page', 'modify'] as const).map((mutationType) =>\n buildMutationPack(pipeline.ir, {\n mutationType,\n target: sharedTarget,\n }),\n );\n\n const manifest: ExecutionPackManifest = {\n $schema: PACK_MANIFEST_SCHEMA_URL,\n version: '1.0.0',\n generatedAt,\n scaffold: {\n id: 'scaffold',\n markdown: 'scaffold-pack.md',\n json: 'scaffold-pack.json',\n },\n review: {\n id: 'review',\n markdown: 'review-pack.md',\n json: 'review-pack.json',\n },\n sections: sectionInputs.map((section) => ({\n id: section.id,\n markdown: `section-${section.id}-pack.md`,\n json: `section-${section.id}-pack.json`,\n pageIds: section.pageIds,\n })),\n pages: buildPageManifestEntries(pageInputs),\n mutations: (['add-page', 'modify'] as const).map((mutationType) => ({\n id: mutationType,\n markdown: `mutation-${mutationType}-pack.md`,\n json: `mutation-${mutationType}-pack.json`,\n mutationType,\n })),\n };\n\n return {\n $schema: EXECUTION_PACK_BUNDLE_SCHEMA_URL,\n generatedAt,\n sourceEssenceVersion: essence.version,\n manifest,\n scaffold,\n review,\n sections,\n pages,\n mutations,\n };\n}\n\nexport function selectExecutionPackFromBundle(\n bundle: ExecutionPackBundle,\n selector: ExecutionPackSelector,\n): SelectedExecutionPackResponse | null {\n const id = selector.id ?? null;\n let pack: SelectedExecutionPack | null = null;\n\n switch (selector.packType) {\n case 'scaffold':\n pack = bundle.scaffold;\n break;\n case 'review':\n pack = bundle.review;\n break;\n case 'section':\n pack = id ? (bundle.sections.find((entry) => entry.data.sectionId === id) ?? null) : null;\n break;\n case 'page':\n pack = id\n ? (bundle.pages.find(\n (entry) =>\n entry.data.pageId === id ||\n pageIdentity(entry.data.pageId, entry.data.sectionId) === id ||\n pageFileId(entry.data.pageId, entry.data.sectionId) === id,\n ) ?? null)\n : null;\n break;\n case 'mutation':\n pack = id ? (bundle.mutations.find((entry) => entry.data.mutationType === id) ?? null) : null;\n break;\n default:\n pack = null;\n break;\n }\n\n if (!pack) {\n return null;\n }\n\n return {\n $schema: SELECTED_EXECUTION_PACK_SCHEMA_URL,\n generatedAt: bundle.generatedAt,\n sourceEssenceVersion: bundle.sourceEssenceVersion,\n manifest: bundle.manifest,\n selector: {\n packType: selector.packType,\n id,\n },\n pack,\n };\n}\n\nexport async function compileSelectedExecutionPack(\n essence: EssenceFile,\n selector: ExecutionPackSelector,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<SelectedExecutionPackResponse | null> {\n const bundle = await compileExecutionPackBundle(essence, options);\n return selectExecutionPackFromBundle(bundle, selector);\n}\n","import type { EssenceFile } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3, validateEssence } from '@decantr/essence-spec';\nimport type { ContentResolver, Theme as RegistryTheme } from '@decantr/registry';\nimport { createResolver } from '@decantr/registry';\nimport { buildPageIR } from './ir.js';\nimport { resolveEssence } from './resolve.js';\nimport type { IRAppNode, IRLayer, IRPageNode, IRShellNode, IRStoreNode } from './types.js';\nimport { pascalCase } from './utils.js';\n\nfunction extractRouting(essence: EssenceFile): 'hash' | 'history' | 'pathname' {\n // Modern-SPA default. See packages/cli/src/scaffold.ts getPlatformMeta for rationale.\n if (isV3(essence)) {\n return essence.meta.platform.routing || 'history';\n }\n return (\n ((essence as { platform?: { routing?: string } }).platform?.routing as\n | 'hash'\n | 'history'\n | 'pathname') || 'history'\n );\n}\n\nexport interface PipelineOptions {\n /** Path to content directory (patterns, archetypes, themes) */\n contentRoot?: string;\n\n /** Override paths for local content resolution */\n overridePaths?: string[];\n\n /** Only resolve specific page(s) */\n pageFilter?: string;\n\n /** Optional custom resolver for hosted or in-memory execution */\n resolver?: ContentResolver;\n}\n\nexport interface PipelineResult {\n /** The framework-agnostic intermediate representation */\n ir: IRAppNode;\n /**\n * The fully-resolved registry theme record, including `decorator_definitions`\n * and other rich theme data not carried in the lite IR `theme` node.\n * Consumers (e.g. pack builders) need this to render decorator contracts\n * into compiled artifacts.\n */\n registryTheme: RegistryTheme | null;\n}\n\n/**\n * Run the Design Pipeline:\n * 1. Validate Essence against schema + guard rules\n * 2. Resolve all references (patterns, theme, wiring) from registry\n * 3. Build framework-agnostic IR tree\n * 4. Return IR (no code generation — that's the consumer's job)\n */\nexport async function runPipeline(\n essence: EssenceFile,\n options: PipelineOptions,\n): Promise<PipelineResult> {\n // 1. Validate\n const validation = validateEssence(essence);\n if (!validation.valid) {\n throw new Error(`Invalid essence: ${validation.errors.join(', ')}`);\n }\n\n // 2. Auto-migrate v2 → v3 before processing\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n\n // 3. Create resolver and resolve\n const resolver =\n options.resolver ??\n (() => {\n if (!options.contentRoot) {\n throw new Error('Pipeline options must include either a contentRoot or a resolver.');\n }\n\n return createResolver({\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n });\n })();\n\n const resolved = await resolveEssence(effectiveEssence, resolver);\n\n // 4. Build IR pages (v3 sources get layer metadata)\n const layer: IRLayer | undefined = resolved.isV3Source ? 'blueprint' : undefined;\n const pageNodes: IRPageNode[] = [];\n for (const rp of resolved.pages) {\n const pageIR = buildPageIR(\n rp.page,\n rp.patterns,\n rp.wiring,\n resolved.registryTheme,\n { gap: resolved.density.gap },\n layer,\n );\n pageNodes.push(pageIR);\n }\n\n // Apply page filter\n let filteredPages = pageNodes;\n if (options.pageFilter) {\n filteredPages = pageNodes.filter((p) => p.pageId === options.pageFilter);\n }\n\n // 4. Build shell node\n const shellNode: IRShellNode = {\n type: 'shell',\n id: 'shell',\n children: [],\n config: resolved.shell,\n };\n\n // 5. Build store node\n const storeNode: IRStoreNode = {\n type: 'store',\n id: 'store',\n children: [],\n pageSignals: pageNodes.map((p) => ({\n name: p.pageId,\n pascalName: pascalCase(p.pageId),\n })),\n };\n\n // 6. Assemble app node\n const appNode: IRAppNode = {\n type: 'app',\n id: 'app',\n children: filteredPages,\n theme: resolved.theme,\n routes: resolved.routes,\n routing: extractRouting(resolved.essence),\n shell: shellNode,\n store: storeNode,\n features: resolved.features,\n };\n\n return { ir: appNode, registryTheme: resolved.registryTheme };\n}\n"],"mappings":"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","names":["isPatternRef","isColumnLayout","isPatternRef","isColumnLayout","isV3","migrateV2ToV3","isV3","isV3","isV3","migrateV2ToV3"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decantr/core",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Decantr core — execution-pack compiler primitives and shared Decantr utilities",
5
5
  "author": "Decantr AI",
6
6
  "license": "MIT",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@decantr/essence-spec": "1.0.5",
43
- "@decantr/registry": "1.0.2"
43
+ "@decantr/registry": "1.0.3"
44
44
  },
45
45
  "devDependencies": {},
46
46
  "scripts": {
@@ -141,6 +141,9 @@
141
141
  "pageId": {
142
142
  "$ref": "#/$defs/nonEmptyString"
143
143
  },
144
+ "sectionId": {
145
+ "type": "string"
146
+ },
144
147
  "path": {
145
148
  "$ref": "#/$defs/nonEmptyString"
146
149
  },
@@ -75,6 +75,20 @@
75
75
  "items": {
76
76
  "$ref": "https://decantr.ai/schemas/execution-pack.common.v1.json#/$defs/routeSummary"
77
77
  }
78
+ },
79
+ "themeDecorators": {
80
+ "type": "array",
81
+ "description": "Canonical theme decorator contract — class + intent + slot hint. Lives ONCE in scaffold-pack and is referenced (not duplicated) by section packs as of 1.7.22.",
82
+ "items": {
83
+ "type": "object",
84
+ "required": ["class", "intent", "applyTo"],
85
+ "additionalProperties": false,
86
+ "properties": {
87
+ "class": { "type": "string", "minLength": 1 },
88
+ "intent": { "type": "string" },
89
+ "applyTo": { "type": "string" }
90
+ }
91
+ }
78
92
  }
79
93
  },
80
94
  "additionalProperties": false