@xemahq/create-biome 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -10
- package/dist/bin/create-biome.js +95 -44
- package/dist/bin/create-biome.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/host-wiring.d.ts +10 -0
- package/dist/lib/host-wiring.d.ts.map +1 -0
- package/dist/lib/host-wiring.js +70 -0
- package/dist/lib/host-wiring.js.map +1 -0
- package/dist/lib/kind.d.ts +15 -0
- package/dist/lib/kind.d.ts.map +1 -0
- package/dist/lib/kind.js +33 -0
- package/dist/lib/kind.js.map +1 -0
- package/dist/lib/manifest-builder.d.ts +54 -14
- package/dist/lib/manifest-builder.d.ts.map +1 -1
- package/dist/lib/manifest-builder.js +54 -12
- package/dist/lib/manifest-builder.js.map +1 -1
- package/dist/lib/scaffolder.d.ts +12 -6
- package/dist/lib/scaffolder.d.ts.map +1 -1
- package/dist/lib/scaffolder.js +70 -21
- package/dist/lib/scaffolder.js.map +1 -1
- package/dist/lib/template-files.d.ts +7 -2
- package/dist/lib/template-files.d.ts.map +1 -1
- package/dist/lib/template-files.js +473 -222
- package/dist/lib/template-files.js.map +1 -1
- package/package.json +13 -13
- package/LICENSE +0 -201
- package/dist/lib/package-builder.d.ts +0 -17
- package/dist/lib/package-builder.d.ts.map +0 -1
- package/dist/lib/package-builder.js +0 -25
- package/dist/lib/package-builder.js.map +0 -1
- package/dist/lib/template.d.ts +0 -14
- package/dist/lib/template.d.ts.map +0 -1
- package/dist/lib/template.js +0 -26
- package/dist/lib/template.js.map +0 -1
package/README.md
CHANGED
|
@@ -28,31 +28,48 @@
|
|
|
28
28
|
|
|
29
29
|
## Overview
|
|
30
30
|
|
|
31
|
-
Generates a
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
Generates a **real in-tree biome** from a single command — a `biomes/<id>/`
|
|
32
|
+
directory whose `xema-biome.json` passes the canonical `BiomeManifestSchema`,
|
|
33
|
+
whose server APIs bootstrap through `XemaServiceModule.forBiome(...)`, and
|
|
34
|
+
whose web surface registers through the host shell's loader glob. The output
|
|
35
|
+
mirrors the first-party biomes the platform runs, so a new biome is immediately
|
|
36
|
+
valid against the biome validator, the boundary checks, and
|
|
37
|
+
`generate-service-bootstrap.mjs`.
|
|
38
|
+
|
|
39
|
+
## Kinds
|
|
40
|
+
|
|
41
|
+
- `service` — a server biome with one NestJS API plus `skills/`, `agents/`,
|
|
42
|
+
`contributions/`, and `workspace-manifests/`.
|
|
43
|
+
- `web` — a frontend-only biome: a nav item + a project-scoped lazy route page
|
|
44
|
+
using the `@xemahq/ui-kernel` bridge.
|
|
45
|
+
- `full` — both a server biome and its paired web surface, wired together via
|
|
46
|
+
`requiresServerBiomes`.
|
|
35
47
|
|
|
36
48
|
## When to use it
|
|
37
49
|
|
|
38
|
-
- Use it to bootstrap a brand-new biome
|
|
50
|
+
- Use it to bootstrap a brand-new in-tree biome of any kind.
|
|
39
51
|
|
|
40
52
|
## Installation
|
|
41
53
|
|
|
42
54
|
```bash
|
|
43
|
-
# No install needed — run it directly:
|
|
55
|
+
# No install needed — run it directly from the monorepo root:
|
|
44
56
|
pnpm dlx @xemahq/create-biome <biomeId>
|
|
45
57
|
```
|
|
46
58
|
|
|
47
59
|
## Usage
|
|
48
60
|
|
|
49
61
|
```bash
|
|
50
|
-
# Scaffold a biome, choosing a
|
|
51
|
-
pnpm dlx @xemahq/create-biome my-biome --
|
|
52
|
-
pnpm dlx @xemahq/create-biome my-
|
|
53
|
-
pnpm dlx @xemahq/create-biome my-biome --template storage-only
|
|
62
|
+
# Scaffold a biome, choosing a kind:
|
|
63
|
+
pnpm dlx @xemahq/create-biome my-biome --kind service
|
|
64
|
+
pnpm dlx @xemahq/create-biome my-portal --kind full --scope platform
|
|
54
65
|
```
|
|
55
66
|
|
|
67
|
+
After scaffolding a server/full biome, run `node
|
|
68
|
+
tooling/codegen/generate-service-bootstrap.mjs` and `pnpm refresh` from the
|
|
69
|
+
monorepo root. For web/full, the host's `transpilePackages` and tsconfig
|
|
70
|
+
`paths` are glob-derived — the host's `biomes:generate` script (run by its
|
|
71
|
+
`predev`/`prebuild`) picks the new biome up with no manual list edit.
|
|
72
|
+
|
|
56
73
|
## License
|
|
57
74
|
|
|
58
75
|
Apache-2.0 © Xema — [xema.dev](https://xema.dev)
|
package/dist/bin/create-biome.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
|
13
|
+
let kind;
|
|
14
|
+
let scope;
|
|
12
15
|
let displayName;
|
|
13
16
|
let description;
|
|
14
|
-
let
|
|
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 '--
|
|
32
|
-
|
|
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 '--
|
|
41
|
-
|
|
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 {
|
|
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
|
-
--
|
|
63
|
-
--
|
|
64
|
-
--
|
|
65
|
-
--
|
|
66
|
-
--
|
|
67
|
-
--
|
|
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 --
|
|
71
|
-
pnpm dlx @xemahq/create-biome acme-
|
|
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
|
|
91
|
-
if (!
|
|
92
|
-
throw new ScaffolderError(`unknown
|
|
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
|
|
95
|
-
if (
|
|
96
|
-
throw new ScaffolderError(`
|
|
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}" (${
|
|
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
|
-
|
|
114
|
-
|
|
153
|
+
kind: kindId,
|
|
154
|
+
scope,
|
|
155
|
+
repoRoot,
|
|
156
|
+
serverBiomesDir,
|
|
157
|
+
webBiomesDir,
|
|
115
158
|
});
|
|
116
|
-
printSuccessSummary(result.
|
|
159
|
+
printSuccessSummary(result.dirs, result.filesWritten.length, kindId);
|
|
117
160
|
}
|
|
118
161
|
finally {
|
|
119
162
|
rl.close();
|
|
120
163
|
}
|
|
121
164
|
}
|
|
122
|
-
function printSuccessSummary(
|
|
123
|
-
stdout.write(`\n✔ Created ${fileCount} files
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
|
132
|
-
stdout.write('\nAvailable
|
|
133
|
-
for (const
|
|
134
|
-
stdout.write(` • ${
|
|
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
|
-
|
|
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
|
|
148
|
-
return
|
|
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,
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,
|
|
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"}
|
package/dist/lib/kind.js
ADDED
|
@@ -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
|
-
|
|
2
|
-
export interface
|
|
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
|
|
6
|
+
readonly scope: ManifestScope;
|
|
7
|
+
readonly apiName: string;
|
|
7
8
|
}
|
|
8
|
-
export interface
|
|
9
|
-
readonly
|
|
10
|
-
readonly
|
|
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
|
|
14
|
-
|
|
15
|
-
readonly
|
|
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
|
|
22
|
-
export declare function
|
|
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":"
|
|
1
|
+
{"version":3,"file":"manifest-builder.d.ts","sourceRoot":"","sources":["../../src/lib/manifest-builder.ts"],"names":[],"mappings":"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"}
|