@xemahq/create-biome 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,16 +2,21 @@
2
2
  import * as path from 'node:path';
3
3
  import { stdin, stdout } from 'node:process';
4
4
  import { createInterface } from 'node:readline/promises';
5
- import { existsSync } from 'node:fs';
5
+ import { BiomeKind, isKnownKind, listKinds } from '../lib/kind.js';
6
6
  import { validateBiomeId } from '../lib/manifest-builder.js';
7
- import { ScaffolderError, scaffoldBiome } from '../lib/scaffolder.js';
8
- import { BiomeTemplateId, listTemplates } from '../lib/template.js';
7
+ import { ScaffolderError, scaffoldBiome, } from '../lib/scaffolder.js';
8
+ const DEFAULT_SERVER_BIOMES_DIR = 'repos/xema-community/biomes';
9
+ const DEFAULT_WEB_BIOMES_DIR = 'submodules/xema-host-web/biomes';
10
+ const SCOPES = ['kernel', 'system', 'base', 'platform'];
9
11
  function parseArgs(argv) {
10
12
  let biomeId;
11
- let template;
13
+ let kind;
14
+ let scope;
12
15
  let displayName;
13
16
  let description;
14
- let target;
17
+ let repoRoot;
18
+ let serverBiomesDir;
19
+ let webBiomesDir;
15
20
  let yes = false;
16
21
  let help = false;
17
22
  for (let i = 0; i < argv.length; i++) {
@@ -28,8 +33,11 @@ function parseArgs(argv) {
28
33
  case '-y':
29
34
  yes = true;
30
35
  break;
31
- case '--template':
32
- template = argv[++i];
36
+ case '--kind':
37
+ kind = argv[++i];
38
+ break;
39
+ case '--scope':
40
+ scope = argv[++i];
33
41
  break;
34
42
  case '--display':
35
43
  displayName = argv[++i];
@@ -37,8 +45,14 @@ function parseArgs(argv) {
37
45
  case '--desc':
38
46
  description = argv[++i];
39
47
  break;
40
- case '--target':
41
- target = argv[++i];
48
+ case '--repo-root':
49
+ repoRoot = argv[++i];
50
+ break;
51
+ case '--server-biomes-dir':
52
+ serverBiomesDir = argv[++i];
53
+ break;
54
+ case '--web-biomes-dir':
55
+ webBiomesDir = argv[++i];
42
56
  break;
43
57
  default:
44
58
  if (token.startsWith('--')) {
@@ -53,22 +67,45 @@ function parseArgs(argv) {
53
67
  break;
54
68
  }
55
69
  }
56
- return { biomeId, template, displayName, description, target, yes, help };
70
+ return {
71
+ biomeId,
72
+ kind,
73
+ scope,
74
+ displayName,
75
+ description,
76
+ repoRoot,
77
+ serverBiomesDir,
78
+ webBiomesDir,
79
+ yes,
80
+ help,
81
+ };
57
82
  }
58
83
  function printUsage() {
59
84
  stdout.write(`Usage: pnpm dlx @xemahq/create-biome <biomeId> [options]
60
85
 
86
+ Scaffolds a real in-tree Xema biome.
87
+
61
88
  Options:
62
- --template <id> One of: ${listTemplates().map((t) => t.id).join(' | ')}
63
- --display "<name>" Human-readable display name (default: biomeId)
64
- --desc "<text>" One-line manifest description
65
- --target <path> Where to create the biome (default: ./<biomeId>)
66
- --yes Skip the final confirmation prompt
67
- --help Print this help
89
+ --kind <id> One of: ${listKinds().map((k) => k.id).join(' | ')} (default: service)
90
+ --scope <tier> ${SCOPES.join(' | ')} (default: base)
91
+ --display "<name>" Human-readable display name (default: biomeId)
92
+ --desc "<text>" One-line manifest description
93
+ --repo-root <path> Monorepo root (default: current directory)
94
+ --server-biomes-dir Server biomes dir, relative to repo-root
95
+ (default: ${DEFAULT_SERVER_BIOMES_DIR})
96
+ --web-biomes-dir Web biomes dir, relative to repo-root
97
+ (default: ${DEFAULT_WEB_BIOMES_DIR})
98
+ --yes Skip the final confirmation prompt
99
+ --help Print this help
100
+
101
+ Kinds:
102
+ ${listKinds()
103
+ .map((k) => ` • ${k.id} — ${k.displayName}\n ${k.summary}`)
104
+ .join('\n')}
68
105
 
69
106
  Examples:
70
- pnpm dlx @xemahq/create-biome acme-tickets --template integration-provider
71
- pnpm dlx @xemahq/create-biome acme-cache --template storage-only --yes
107
+ pnpm dlx @xemahq/create-biome acme-tickets --kind service
108
+ pnpm dlx @xemahq/create-biome acme-portal --kind full --scope platform --yes
72
109
  `);
73
110
  }
74
111
  async function main() {
@@ -87,20 +124,23 @@ async function main() {
87
124
  if (!idCheck.ok) {
88
125
  throw new ScaffolderError(idCheck.reason);
89
126
  }
90
- const templateId = args.template ?? (await promptTemplate(rl));
91
- if (!isKnownTemplate(templateId)) {
92
- throw new ScaffolderError(`unknown template "${templateId}". Choose one of: ${listTemplates().map((t) => t.id).join(', ')}`);
127
+ const kindId = args.kind ?? (await promptKind(rl));
128
+ if (!isKnownKind(kindId)) {
129
+ throw new ScaffolderError(`unknown kind "${kindId}". Choose one of: ${listKinds().map((k) => k.id).join(', ')}`);
93
130
  }
94
- const targetDir = path.resolve(args.target ?? `./${biomeId}`);
95
- if (existsSync(targetDir)) {
96
- throw new ScaffolderError(`target directory already exists: ${targetDir} choose a fresh path or delete it first`);
131
+ const scope = args.scope ?? 'base';
132
+ if (!isKnownScope(scope)) {
133
+ throw new ScaffolderError(`unknown scope "${scope}". Choose one of: ${SCOPES.join(', ')}`);
97
134
  }
98
135
  const displayName = args.displayName ??
99
136
  (await prompt(rl, `Display name [${humanize(biomeId)}]: `, humanize(biomeId)));
100
137
  const description = args.description ??
101
138
  (await prompt(rl, 'One-line description: ', `${humanize(biomeId)} biome scaffolded by @xemahq/create-biome`));
139
+ const repoRoot = path.resolve(args.repoRoot ?? process.cwd());
140
+ const serverBiomesDir = args.serverBiomesDir ?? DEFAULT_SERVER_BIOMES_DIR;
141
+ const webBiomesDir = args.webBiomesDir ?? DEFAULT_WEB_BIOMES_DIR;
102
142
  if (!args.yes) {
103
- const confirm = await prompt(rl, `Create biome "${biomeId}" (${templateId}) at ${targetDir}? [Y/n] `, 'y');
143
+ const confirm = await prompt(rl, `Create ${kindId} biome "${biomeId}" (scope ${scope}) under ${repoRoot}? [Y/n] `, 'y');
104
144
  if (!isYes(confirm)) {
105
145
  stdout.write('Aborted — no files written.\n');
106
146
  return;
@@ -110,31 +150,42 @@ async function main() {
110
150
  biomeId,
111
151
  displayName,
112
152
  description,
113
- template: templateId,
114
- targetDir,
153
+ kind: kindId,
154
+ scope,
155
+ repoRoot,
156
+ serverBiomesDir,
157
+ webBiomesDir,
115
158
  });
116
- printSuccessSummary(result.targetDir, result.filesWritten.length);
159
+ printSuccessSummary(result.dirs, result.filesWritten.length, kindId);
117
160
  }
118
161
  finally {
119
162
  rl.close();
120
163
  }
121
164
  }
122
- function printSuccessSummary(targetDir, fileCount) {
123
- stdout.write(`\n✔ Created ${fileCount} files in ${targetDir}\n`);
124
- stdout.write(`\nNext steps:\n`);
125
- stdout.write(` cd ${path.relative(process.cwd(), targetDir) || '.'}\n`);
165
+ function printSuccessSummary(dirs, fileCount, kind) {
166
+ stdout.write(`\n✔ Created ${fileCount} files\n`);
167
+ for (const d of dirs) {
168
+ stdout.write(` ${d.target}: ${d.dir}\n`);
169
+ }
170
+ stdout.write(`\nNext steps (from the monorepo root):\n`);
126
171
  stdout.write(` pnpm install\n`);
127
- stdout.write(` pnpm build\n`);
128
- stdout.write(` pnpm test\n\n`);
129
- stdout.write(`Edit xema-biome.json to declare integration requirements, capabilities, and contributions.\n`);
172
+ if (kind === BiomeKind.Service || kind === BiomeKind.Full) {
173
+ stdout.write(` node tooling/codegen/generate-service-bootstrap.mjs # sync the bootstrap descriptor\n`);
174
+ stdout.write(` pnpm refresh # openapi -> client -> build\n`);
175
+ stdout.write(` node tooling/codegen/biome-finalize.mjs # sync biome index + deps\n`);
176
+ }
177
+ if (kind === BiomeKind.Web || kind === BiomeKind.Full) {
178
+ stdout.write(` (cd submodules/xema-host-web && npm run biomes:generate) # regenerate loader/transpile/paths\n`);
179
+ stdout.write(` # transpilePackages + tsconfig paths are GLOB-DERIVED — no manual host list edit needed.\n`);
180
+ }
181
+ stdout.write(`\nEdit xema-biome.json to declare capabilities, agents, and contributions.\n`);
130
182
  }
131
- async function promptTemplate(rl) {
132
- stdout.write('\nAvailable templates:\n');
133
- for (const t of listTemplates()) {
134
- stdout.write(` • ${t.id} — ${t.displayName}\n ${t.summary}\n`);
183
+ async function promptKind(rl) {
184
+ stdout.write('\nAvailable kinds:\n');
185
+ for (const k of listKinds()) {
186
+ stdout.write(` • ${k.id} — ${k.displayName}\n ${k.summary}\n`);
135
187
  }
136
- const answer = await prompt(rl, `\nTemplate [${BiomeTemplateId.Connector}]: `, BiomeTemplateId.Connector);
137
- return answer;
188
+ return prompt(rl, `\nKind [${BiomeKind.Service}]: `, BiomeKind.Service);
138
189
  }
139
190
  async function prompt(rl, question, fallback) {
140
191
  const raw = await rl.question(question);
@@ -144,8 +195,8 @@ async function prompt(rl, question, fallback) {
144
195
  }
145
196
  return trimmed;
146
197
  }
147
- function isKnownTemplate(value) {
148
- return Object.values(BiomeTemplateId).includes(value);
198
+ function isKnownScope(value) {
199
+ return SCOPES.includes(value);
149
200
  }
150
201
  function isYes(value) {
151
202
  const v = value.trim().toLowerCase();
@@ -163,7 +214,7 @@ main().catch((error) => {
163
214
  process.stderr.write(`create-biome: ${error.message}\n`);
164
215
  process.exit(1);
165
216
  }
166
- process.stderr.write(`create-biome: unexpected error\n${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
217
+ process.stderr.write(`create-biome: unexpected error\n${error instanceof Error ? (error.stack ?? error.message) : String(error)}\n`);
167
218
  process.exit(1);
168
219
  });
169
220
  //# sourceMappingURL=create-biome.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-biome.js","sourceRoot":"","sources":["../../src/bin/create-biome.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA8BpE,SAAS,SAAS,CAAC,IAAuB;IACxC,IAAI,OAA2B,CAAC;IAChC,IAAI,QAA4B,CAAC;IACjC,IAAI,WAA+B,CAAC;IACpC,IAAI,WAA+B,CAAC;IACpC,IAAI,MAA0B,CAAC;IAC/B,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QACpC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,KAAK,OAAO,CAAC;YACb,KAAK,IAAI;gBACP,GAAG,GAAG,IAAI,CAAC;gBACX,MAAM;YACR,KAAK,YAAY;gBACf,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,MAAM;YACR,KAAK,WAAW;gBACd,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnB,MAAM;YACR;gBACE,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,eAAe,CAAC,iBAAiB,KAAK,eAAe,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,CAAC,OAAO,EAAE,CAAC;oBAAA,OAAO,GAAG,KAAK,CAAC;gBAAA,CAAC;qBAC3B,CAAC;oBAAA,MAAM,IAAI,eAAe,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;gBAAA,CAAC;gBAC7E,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,CAAC,KAAK,CAAC;;;gCAGiB,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;CAU3E,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,EAAE,CAAC;YAAA,MAAM,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;QAAA,CAAC;QAClE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAAA,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC;QAE7D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,eAAe,CACvB,qBAAqB,UAAU,qBAAqB,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClG,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,eAAe,CACvB,oCAAoC,SAAS,2CAA2C,CACzF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GACf,IAAI,CAAC,WAAW;YAChB,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,iBAAiB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,WAAW,GACf,IAAI,CAAC,WAAW;YAChB,CAAC,MAAM,MAAM,CACX,EAAE,EACF,wBAAwB,EACxB,GAAG,QAAQ,CAAC,OAAO,CAAC,2CAA2C,CAChE,CAAC,CAAC;QAEL,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,MAAM,CAC1B,EAAE,EACF,iBAAiB,OAAO,MAAM,UAAU,QAAQ,SAAS,UAAU,EACnE,GAAG,CACJ,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,OAAO;YACP,WAAW;YACX,WAAW;YACX,QAAQ,EAAE,UAAU;YACpB,SAAS;SACV,CAAC,CAAC;QACH,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB,EAAE,SAAiB;IAC/D,MAAM,CAAC,KAAK,CAAC,eAAe,SAAS,aAAa,SAAS,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CACV,8FAA8F,CAC/F,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,EAAsC;IAClE,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,WAAW,WAAW,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,EAAE,EACF,eAAe,eAAe,CAAC,SAAS,KAAK,EAC7C,eAAe,CAAC,SAAS,CAC1B,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,EAAsC,EACtC,QAAgB,EAChB,QAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAAA,OAAO,QAAQ,CAAC;IAAA,CAAC;IACtE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAQ,MAAM,CAAC,MAAM,CAAC,eAAe,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,OAAO,OAAO;SACX,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC7G,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"create-biome.js","sourceRoot":"","sources":["../../src/bin/create-biome.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
+ export * from './lib/kind.js';
1
2
  export * from './lib/manifest-builder.js';
2
- export * from './lib/package-builder.js';
3
3
  export * from './lib/scaffolder.js';
4
- export * from './lib/template.js';
5
4
  export * from './lib/template-files.js';
5
+ export * from './lib/host-wiring.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
+ export * from './lib/kind.js';
1
2
  export * from './lib/manifest-builder.js';
2
- export * from './lib/package-builder.js';
3
3
  export * from './lib/scaffolder.js';
4
- export * from './lib/template.js';
5
4
  export * from './lib/template-files.js';
5
+ export * from './lib/host-wiring.js';
6
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface WebBiomeEntry {
2
+ readonly id: string;
3
+ readonly packageName: string;
4
+ readonly tier: string;
5
+ readonly dirName: string;
6
+ }
7
+ export declare function scanWebBiomes(webRoot: string): readonly WebBiomeEntry[];
8
+ export declare function deriveTranspilePackages(entries: readonly WebBiomeEntry[]): readonly string[];
9
+ export declare function deriveTsconfigPaths(entries: readonly WebBiomeEntry[]): Readonly<Record<string, readonly string[]>>;
10
+ //# sourceMappingURL=host-wiring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-wiring.d.ts","sourceRoot":"","sources":["../../src/lib/host-wiring.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,aAAa;IAE5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAiBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,CA8CvE;AAGD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,aAAa,EAAE,GAChC,SAAS,MAAM,EAAE,CAEnB;AAOD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,aAAa,EAAE,GAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAQ7C"}
@@ -0,0 +1,70 @@
1
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
2
+ import * as path from 'node:path';
3
+ const SKIP = new Set(['node_modules', 'dist', '.git', '.turbo']);
4
+ function isDir(p) {
5
+ try {
6
+ return statSync(p).isDirectory();
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ }
12
+ export function scanWebBiomes(webRoot) {
13
+ const biomesRoot = path.join(webRoot, 'biomes');
14
+ const entries = [];
15
+ let tiers = [];
16
+ try {
17
+ tiers = readdirSync(biomesRoot).filter((t) => !SKIP.has(t) && isDir(path.join(biomesRoot, t)));
18
+ }
19
+ catch {
20
+ return entries;
21
+ }
22
+ for (const tier of tiers) {
23
+ const tierDir = path.join(biomesRoot, tier);
24
+ let dirs = [];
25
+ try {
26
+ dirs = readdirSync(tierDir).filter((d) => !SKIP.has(d) && isDir(path.join(tierDir, d)));
27
+ }
28
+ catch {
29
+ continue;
30
+ }
31
+ for (const dirName of dirs) {
32
+ const manifestPath = path.join(tierDir, dirName, 'xema-biome.json');
33
+ if (!existsSync(manifestPath)) {
34
+ continue;
35
+ }
36
+ let raw;
37
+ try {
38
+ raw = JSON.parse(readFileSync(manifestPath, 'utf8'));
39
+ }
40
+ catch {
41
+ continue;
42
+ }
43
+ const m = raw;
44
+ if (m?.xema?.target !== 'web') {
45
+ continue;
46
+ }
47
+ const id = m.xema?.id;
48
+ const packageName = m.name;
49
+ if (typeof id !== 'string' || typeof packageName !== 'string') {
50
+ continue;
51
+ }
52
+ entries.push({ id, packageName, tier, dirName });
53
+ }
54
+ }
55
+ entries.sort((a, b) => a.id.localeCompare(b.id));
56
+ return entries;
57
+ }
58
+ export function deriveTranspilePackages(entries) {
59
+ return entries.map((e) => e.packageName);
60
+ }
61
+ export function deriveTsconfigPaths(entries) {
62
+ const paths = {};
63
+ for (const e of entries) {
64
+ const base = `./biomes/${e.tier}/${e.dirName}`;
65
+ paths[e.packageName] = [`${base}/src/index.tsx`];
66
+ paths[`${e.packageName}/*`] = [`${base}/src/*`];
67
+ }
68
+ return paths;
69
+ }
70
+ //# sourceMappingURL=host-wiring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-wiring.js","sourceRoot":"","sources":["../../src/lib/host-wiring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare enum BiomeKind {
2
+ Service = "service",
3
+ Web = "web",
4
+ Full = "full"
5
+ }
6
+ export interface BiomeKindMetadata {
7
+ readonly id: BiomeKind;
8
+ readonly displayName: string;
9
+ readonly summary: string;
10
+ }
11
+ export declare const BIOME_KINDS: Readonly<Record<BiomeKind, BiomeKindMetadata>>;
12
+ export declare function listKinds(): readonly BiomeKindMetadata[];
13
+ export declare function getKind(id: BiomeKind): BiomeKindMetadata;
14
+ export declare function isKnownKind(value: string): value is BiomeKind;
15
+ //# sourceMappingURL=kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind.d.ts","sourceRoot":"","sources":["../../src/lib/kind.ts"],"names":[],"mappings":"AAgBA,oBAAY,SAAS;IASnB,OAAO,YAAY;IAQnB,GAAG,QAAQ;IAOX,IAAI,SAAS;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAmBtE,CAAC;AAEF,wBAAgB,SAAS,IAAI,SAAS,iBAAiB,EAAE,CAExD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,SAAS,GAAG,iBAAiB,CAExD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D"}
@@ -0,0 +1,33 @@
1
+ export var BiomeKind;
2
+ (function (BiomeKind) {
3
+ BiomeKind["Service"] = "service";
4
+ BiomeKind["Web"] = "web";
5
+ BiomeKind["Full"] = "full";
6
+ })(BiomeKind || (BiomeKind = {}));
7
+ export const BIOME_KINDS = {
8
+ [BiomeKind.Service]: {
9
+ id: BiomeKind.Service,
10
+ displayName: 'Service biome',
11
+ summary: 'A server biome with one NestJS API (XemaServiceModule.forBiome) plus skills/, agents/, contributions/, workspace-manifests/. Mirrors first-party biomes like agent-runtime.',
12
+ },
13
+ [BiomeKind.Web]: {
14
+ id: BiomeKind.Web,
15
+ displayName: 'Web biome',
16
+ summary: 'A frontend-only biome: a nav item + a project-scoped lazy route page using the @xemahq/ui-kernel bridge. Registers via the host loader glob.',
17
+ },
18
+ [BiomeKind.Full]: {
19
+ id: BiomeKind.Full,
20
+ displayName: 'Full-stack biome',
21
+ summary: 'Both a server biome (NestJS API) and its paired web surface, wired together via requiresServerBiomes. The full vertical a product biome ships.',
22
+ },
23
+ };
24
+ export function listKinds() {
25
+ return Object.values(BIOME_KINDS);
26
+ }
27
+ export function getKind(id) {
28
+ return BIOME_KINDS[id];
29
+ }
30
+ export function isKnownKind(value) {
31
+ return Object.values(BiomeKind).includes(value);
32
+ }
33
+ //# sourceMappingURL=kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind.js","sourceRoot":"","sources":["../../src/lib/kind.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAN,IAAY,SAyBX;AAzBD,WAAY,SAAS;IASnB,gCAAmB,CAAA;IAQnB,wBAAW,CAAA;IAOX,0BAAa,CAAA;AACf,CAAC,EAzBW,SAAS,KAAT,SAAS,QAyBpB;AAQD,MAAM,CAAC,MAAM,WAAW,GAAmD;IACzE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;QACnB,EAAE,EAAE,SAAS,CAAC,OAAO;QACrB,WAAW,EAAE,eAAe;QAC5B,OAAO,EACL,6KAA6K;KAChL;IACD,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QACf,EAAE,EAAE,SAAS,CAAC,GAAG;QACjB,WAAW,EAAE,WAAW;QACxB,OAAO,EACL,8IAA8I;KACjJ;IACD,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QAChB,EAAE,EAAE,SAAS,CAAC,IAAI;QAClB,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EACL,gJAAgJ;KACnJ;CACF,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAa;IACnC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -1,25 +1,65 @@
1
- import type { BiomeTemplateMetadata } from './template.js';
2
- export interface ManifestBuilderInput {
1
+ export type ManifestScope = 'kernel' | 'system' | 'base' | 'platform';
2
+ export interface ServerManifestBuilderInput {
3
3
  readonly biomeId: string;
4
4
  readonly displayName: string;
5
5
  readonly description: string;
6
- readonly template: BiomeTemplateMetadata;
6
+ readonly scope: ManifestScope;
7
+ readonly apiName: string;
7
8
  }
8
- export interface ManifestObject {
9
- readonly schemaVersion: 1;
10
- readonly id: string;
9
+ export interface WebManifestBuilderInput {
10
+ readonly biomeId: string;
11
+ readonly displayName: string;
12
+ readonly description: string;
13
+ readonly scope: ManifestScope;
14
+ readonly requiresServerBiomes: readonly string[];
15
+ }
16
+ export interface ServerApiDeclaration {
17
+ readonly name: string;
18
+ readonly path: string;
19
+ readonly displayName: string;
20
+ readonly serviceKind: 'biome-api';
21
+ readonly requiresServices: readonly string[];
22
+ readonly exposesCapabilities: readonly never[];
23
+ }
24
+ export interface ServerManifestObject {
11
25
  readonly name: string;
12
26
  readonly version: string;
13
- readonly trustTier: 'third-party';
14
- readonly engines: {
15
- readonly xema: string;
27
+ readonly xema: {
28
+ readonly id: string;
29
+ readonly displayName: string;
30
+ readonly description: string;
31
+ readonly scope: ManifestScope;
32
+ readonly target: 'server';
33
+ readonly engines: {
34
+ readonly xema: string;
35
+ };
36
+ readonly requiresCapabilities: readonly never[];
37
+ readonly exposesCapabilities: readonly never[];
38
+ readonly contributions: {
39
+ readonly directory: string;
40
+ };
41
+ readonly ships: {
42
+ readonly apis: readonly ServerApiDeclaration[];
43
+ };
44
+ };
45
+ }
46
+ export interface WebManifestObject {
47
+ readonly name: string;
48
+ readonly version: string;
49
+ readonly xema: {
50
+ readonly id: string;
51
+ readonly displayName: string;
52
+ readonly description: string;
53
+ readonly scope: ManifestScope;
54
+ readonly target: 'web';
55
+ readonly requiresServerBiomes?: readonly string[];
16
56
  };
17
- readonly requiresCapabilities: readonly never[];
18
- readonly exposesCapabilities: readonly never[];
19
- readonly contributes: readonly never[];
20
57
  }
21
- export declare function buildManifest(input: ManifestBuilderInput): ManifestObject;
22
- export declare function npmPackageName(biomeId: string): string;
58
+ export declare function buildServerManifest(input: ServerManifestBuilderInput): ServerManifestObject;
59
+ export declare function buildWebManifest(input: WebManifestBuilderInput): WebManifestObject;
60
+ export declare function firstPartyPackageName(biomeId: string): string;
61
+ export declare function apiNameForBiome(biomeId: string): string;
62
+ export declare function webBiomeId(biomeId: string): string;
23
63
  export declare function validateBiomeId(biomeId: string): {
24
64
  ok: true;
25
65
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-builder.d.ts","sourceRoot":"","sources":["../../src/lib/manifest-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAgB3D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,oBAAoB,EAAE,SAAS,KAAK,EAAE,CAAC;IAChD,QAAQ,CAAC,mBAAmB,EAAE,SAAS,KAAK,EAAE,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,KAAK,EAAE,CAAC;CACxC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,cAAc,CAczE;AAQD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AASD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQ7F"}
1
+ {"version":3,"file":"manifest-builder.d.ts","sourceRoot":"","sources":["../../src/lib/manifest-builder.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,62 @@
1
- export function buildManifest(input) {
1
+ const XEMA_ENGINE_RANGE = '^1.0.0';
2
+ const DEFAULT_API_REQUIRES_SERVICES = ['identity-api'];
3
+ export function buildServerManifest(input) {
2
4
  return {
3
- schemaVersion: 1,
4
- id: input.biomeId,
5
- name: input.displayName,
5
+ name: firstPartyPackageName(input.biomeId),
6
6
  version: '0.1.0',
7
- trustTier: 'third-party',
8
- engines: {
9
- xema: '>=1.0.0',
7
+ xema: {
8
+ id: input.biomeId,
9
+ displayName: input.displayName,
10
+ description: input.description,
11
+ scope: input.scope,
12
+ target: 'server',
13
+ engines: { xema: XEMA_ENGINE_RANGE },
14
+ requiresCapabilities: [],
15
+ exposesCapabilities: [],
16
+ contributions: { directory: './contributions' },
17
+ ships: {
18
+ apis: [
19
+ {
20
+ name: input.apiName,
21
+ path: `./api/${input.apiName}`,
22
+ displayName: `${input.displayName} API`,
23
+ serviceKind: 'biome-api',
24
+ requiresServices: DEFAULT_API_REQUIRES_SERVICES,
25
+ exposesCapabilities: [],
26
+ },
27
+ ],
28
+ },
10
29
  },
11
- requiresCapabilities: [],
12
- exposesCapabilities: [],
13
- contributes: [],
14
30
  };
15
31
  }
16
- export function npmPackageName(biomeId) {
17
- return `@xemahq-biomes/${biomeId}`;
32
+ export function buildWebManifest(input) {
33
+ const base = {
34
+ name: firstPartyPackageName(input.biomeId),
35
+ version: '0.1.0',
36
+ xema: {
37
+ id: input.biomeId,
38
+ displayName: input.displayName,
39
+ description: input.description,
40
+ scope: input.scope,
41
+ target: 'web',
42
+ },
43
+ };
44
+ if (input.requiresServerBiomes.length === 0) {
45
+ return base;
46
+ }
47
+ return {
48
+ ...base,
49
+ xema: { ...base.xema, requiresServerBiomes: input.requiresServerBiomes },
50
+ };
51
+ }
52
+ export function firstPartyPackageName(biomeId) {
53
+ return `@xemahq/biomes-${biomeId}`;
54
+ }
55
+ export function apiNameForBiome(biomeId) {
56
+ return `${biomeId}-api`;
57
+ }
58
+ export function webBiomeId(biomeId) {
59
+ return `${biomeId}-web`;
18
60
  }
19
61
  const BIOME_ID_PATTERN = /^[a-z][a-z0-9-]{1,61}[a-z0-9]$/;
20
62
  export function validateBiomeId(biomeId) {
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-builder.js","sourceRoot":"","sources":["../../src/lib/manifest-builder.ts"],"names":[],"mappings":"AAqCA,MAAM,UAAU,aAAa,CAAC,KAA2B;IACvD,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,KAAK,CAAC,OAAO;QACjB,IAAI,EAAE,KAAK,CAAC,WAAW;QACvB,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;SAChB;QACD,oBAAoB,EAAE,EAAE;QACxB,mBAAmB,EAAE,EAAE;QACvB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,kBAAkB,OAAO,EAAE,CAAC;AACrC,CAAC;AAOD,MAAM,gBAAgB,GAAG,gCAAgC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,aAAa,OAAO,8FAA8F;SAC3H,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"manifest-builder.js","sourceRoot":"","sources":["../../src/lib/manifest-builder.ts"],"names":[],"mappings":"AAgFA,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAQnC,MAAM,6BAA6B,GAAsB,CAAC,cAAc,CAAC,CAAC;AAE1E,MAAM,UAAU,mBAAmB,CACjC,KAAiC;IAEjC,OAAO;QACL,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,EAAE,EAAE,KAAK,CAAC,OAAO;YACjB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;YACpC,oBAAoB,EAAE,EAAE;YACxB,mBAAmB,EAAE,EAAE;YACvB,aAAa,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;YAC/C,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ;wBACE,IAAI,EAAE,KAAK,CAAC,OAAO;wBACnB,IAAI,EAAE,SAAS,KAAK,CAAC,OAAO,EAAE;wBAC9B,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,MAAM;wBACvC,WAAW,EAAE,WAAW;wBACxB,gBAAgB,EAAE,6BAA6B;wBAC/C,mBAAmB,EAAE,EAAE;qBACxB;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAA8B;IAE9B,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,EAAE,EAAE,KAAK,CAAC,OAAO;YACjB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAc;SACvB;KACF,CAAC;IACF,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE;KACzE,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,kBAAkB,OAAO,EAAE,CAAC;AACrC,CAAC;AAMD,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,GAAG,OAAO,MAAM,CAAC;AAC1B,CAAC;AAOD,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,GAAG,OAAO,MAAM,CAAC;AAC1B,CAAC;AAQD,MAAM,gBAAgB,GAAG,gCAAgC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAC7B,OAAe;IAEf,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,aAAa,OAAO,8FAA8F;SAC3H,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}