@specverse/engines 5.0.2 → 5.1.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.
Files changed (57) hide show
  1. package/dist/ai/commands/fill.d.ts.map +1 -1
  2. package/dist/ai/commands/fill.js +16 -7
  3. package/dist/ai/commands/fill.js.map +1 -1
  4. package/dist/ai/commands/template.d.ts.map +1 -1
  5. package/dist/ai/commands/template.js +17 -8
  6. package/dist/ai/commands/template.js.map +1 -1
  7. package/dist/bundles/deriveCatalog.d.ts +18 -0
  8. package/dist/bundles/deriveCatalog.d.ts.map +1 -0
  9. package/dist/bundles/deriveCatalog.js +263 -0
  10. package/dist/bundles/deriveCatalog.js.map +1 -0
  11. package/dist/bundles/index.d.ts +15 -0
  12. package/dist/bundles/index.d.ts.map +1 -0
  13. package/dist/bundles/index.js +15 -0
  14. package/dist/bundles/index.js.map +1 -0
  15. package/dist/bundles/types.d.ts +53 -0
  16. package/dist/bundles/types.d.ts.map +1 -0
  17. package/dist/bundles/types.js +22 -0
  18. package/dist/bundles/types.js.map +1 -0
  19. package/dist/bundles/validate.d.ts +55 -0
  20. package/dist/bundles/validate.d.ts.map +1 -0
  21. package/dist/bundles/validate.js +471 -0
  22. package/dist/bundles/validate.js.map +1 -0
  23. package/dist/inference/quint-transpiler.js +2 -2
  24. package/dist/inference/quint-transpiler.js.map +1 -1
  25. package/dist/libs/instance-factories/applications/templates/react/runtime-package-json-generator.js +1 -1
  26. package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +43 -0
  27. package/dist/libs/instance-factories/tools/templates/mcp/mcp-server-generator.js +11 -4
  28. package/libs/instance-factories/applications/templates/react/runtime-package-json-generator.ts +1 -1
  29. package/libs/instance-factories/cli/templates/commander/command-generator.ts +43 -0
  30. package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +10 -3
  31. package/package.json +9 -5
  32. package/assets/examples/09-api/ai-spec.yaml +0 -194
  33. package/assets/examples/09-api/converted.yaml +0 -95
  34. package/assets/examples/09-api/diagram-architecture.mmd +0 -10
  35. package/assets/examples/09-api/diagram-er.mmd +0 -10
  36. package/assets/examples/09-api/documentation.html +0 -104
  37. package/assets/examples/09-api/documentation.md +0 -95
  38. package/assets/examples/09-api/inferred-spec.yaml +0 -420
  39. package/assets/examples/09-api/openapi.json +0 -61
  40. package/assets/examples/10-api/README.md +0 -216
  41. package/assets/examples/10-api/ai-spec.yaml +0 -194
  42. package/assets/examples/10-api/converted.yaml +0 -96
  43. package/assets/examples/10-api/diagram-architecture.mmd +0 -10
  44. package/assets/examples/10-api/diagram-er.mmd +0 -10
  45. package/assets/examples/10-api/documentation.html +0 -104
  46. package/assets/examples/10-api/documentation.md +0 -95
  47. package/assets/examples/10-api/inferred-spec.yaml +0 -7
  48. package/assets/examples/10-api/metadata.yaml +0 -89
  49. package/assets/examples/10-api/openapi.json +0 -61
  50. package/assets/examples/10-api/package-integration-test.js +0 -177
  51. package/assets/examples/10-api/usage-example.js +0 -323
  52. package/assets/examples/10-api/usage-example.ts +0 -363
  53. package/assets/examples/10-api/workflow-test.js +0 -113
  54. package/assets/examples/validate-examples-with-expected-failures.cjs +0 -328
  55. package/assets/examples/validate-examples.cjs +0 -225
  56. package/assets/prompts/MOVED.md +0 -35
  57. package/assets/prompts/SUMMARY-v8-PROMOTION.md +0 -445
@@ -1 +1 @@
1
- {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/ai/commands/fill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAiFvG,wBAAsB,YAAY,CAChC,SAAS,EAAE,WAAW,EACtB,YAAY,EAAE,gBAAgB,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAyGvB;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/ai/commands/fill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA4FvG,wBAAsB,YAAY,CAChC,SAAS,EAAE,WAAW,EACtB,YAAY,EAAE,gBAAgB,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CA0GvB;AAED,eAAe,YAAY,CAAC"}
@@ -6,7 +6,15 @@ import { getTemplate } from './template.js';
6
6
  import { existsSync, readdirSync, readFileSync } from 'fs';
7
7
  import { join, resolve, dirname } from 'path';
8
8
  import { execSync } from 'child_process';
9
- import { fileURLToPath } from 'url';
9
+ import { createRequire } from 'node:module';
10
+ const require = createRequire(import.meta.url);
11
+ /** Resolve @specverse/entities/schema/<name>. Same resolver pattern as
12
+ * template.ts + the MCP generator.
13
+ */
14
+ function resolveEntitiesSchemaFile(name) {
15
+ const pkg = require.resolve('@specverse/entities/package.json');
16
+ return join(dirname(pkg), 'schema', name);
17
+ }
10
18
  function getDirectoryStructure(dirPath, maxDepth = 3) {
11
19
  try {
12
20
  // Use ls to get directory structure
@@ -80,12 +88,13 @@ function getKeyFilesContent(dirPath) {
80
88
  export async function fillTemplate(operation, requirements, options = {}) {
81
89
  try {
82
90
  const template = await getTemplate(operation, options);
83
- // Construct schema paths based on package installation (like ai docs does)
84
- const __filename = fileURLToPath(import.meta.url);
85
- const __dirname = dirname(__filename);
86
- const schemaDir = resolve(__dirname, '../../../schema');
87
- const aiSchemaPath = join(schemaDir, 'SPECVERSE-V3.1-SCHEMA-AI.yaml');
88
- const referenceSchemaPath = join(schemaDir, 'MINIMAL-SYNTAX-REFERENCE.specly');
91
+ // Schema paths both files live in @specverse/entities/schema/,
92
+ // populated by entities' build (compose-schema + json-to-yaml-schema +
93
+ // generate-minimal-syntax-reference). Unified with template.ts and
94
+ // the MCP generator on the same filenames (the old V3.1-prefixed name
95
+ // that used to live in specverse-lang is retired).
96
+ const aiSchemaPath = resolveEntitiesSchemaFile('SPECVERSE-SCHEMA-AI.yaml');
97
+ const referenceSchemaPath = resolveEntitiesSchemaFile('MINIMAL-SYNTAX-REFERENCE.specly');
89
98
  // Prepare variables for substitution
90
99
  let variables = {
91
100
  requirements: requirements.requirements,
@@ -1 +1 @@
1
- {"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/ai/commands/fill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/ai/commands/fill.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/ai/commands/template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGvF,wBAAsB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyHjH;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/ai/commands/template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAevF,wBAAsB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwHjH;AAED,eAAe,WAAW,CAAC"}
@@ -3,10 +3,20 @@
3
3
  * Get raw prompt template for specified operation
4
4
  */
5
5
  import { readFile } from 'node:fs/promises';
6
- import { join, dirname, resolve } from 'node:path';
7
- import { fileURLToPath } from 'node:url';
6
+ import { join, dirname } from 'node:path';
7
+ import { createRequire } from 'node:module';
8
8
  import * as yaml from 'js-yaml';
9
9
  import { resolvePromptPath, validatePromptPath } from '../prompt-loader.js';
10
+ const require = createRequire(import.meta.url);
11
+ /** Resolve a file under @specverse/entities/schema/. The schema dir is
12
+ * populated by entities' build (compose-schema + json-to-yaml-schema +
13
+ * generate-minimal-syntax-reference). Same resolution path the MCP
14
+ * generator uses for specverse://schema.
15
+ */
16
+ function resolveEntitiesSchemaFile(name) {
17
+ const pkg = require.resolve('@specverse/entities/package.json');
18
+ return join(dirname(pkg), 'schema', name);
19
+ }
10
20
  export async function getTemplate(operation, options = {}) {
11
21
  try {
12
22
  // Resolve prompt path based on version
@@ -21,12 +31,11 @@ export async function getTemplate(operation, options = {}) {
21
31
  const templatePath = join(promptDir, `${operation}.prompt.yaml`);
22
32
  const templateContent = await readFile(templatePath, 'utf8');
23
33
  const templateData = yaml.load(templateContent);
24
- // Construct schema paths (always available, even for raw templates)
25
- const __filename = fileURLToPath(import.meta.url);
26
- const __dirname = dirname(__filename);
27
- const schemaDir = resolve(__dirname, '../../../schema');
28
- const aiSchemaPath = join(schemaDir, 'SPECVERSE-SCHEMA-AI.yaml');
29
- const referenceExamplePath = join(schemaDir, 'MINIMAL-SYNTAX-REFERENCE.specly');
34
+ // Schema paths for prompt template variables. Both files live in
35
+ // @specverse/entities/schema/ the AI-guidance YAML next to the
36
+ // JSON Schema, the minimal-syntax example next to both.
37
+ const aiSchemaPath = resolveEntitiesSchemaFile('SPECVERSE-SCHEMA-AI.yaml');
38
+ const referenceExamplePath = resolveEntitiesSchemaFile('MINIMAL-SYNTAX-REFERENCE.specly');
30
39
  // Build comprehensive system prompt from all system sections
31
40
  let systemPrompt = '';
32
41
  if (templateData.system?.role) {
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/ai/commands/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/ai/commands/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Derive a bundle's catalog by scanning its content facet directories.
3
+ *
4
+ * Entry point for the pluggable-bundle catalog subsystem. Called from each
5
+ * bundle's top-level `index.ts` (e.g. `entities/src/core/models/index.ts`)
6
+ * to produce a `CatalogEntry[]` that replaces hand-maintained `docs/index.ts`
7
+ * + `tests/index.ts` arrays.
8
+ *
9
+ * Results are cached per bundle directory — safe to call from module-load
10
+ * paths; subsequent calls for the same bundle return the cached array.
11
+ *
12
+ * See: specverse-self/docs/proposals/PLUGGABLE-BUNDLE-MODEL.md
13
+ */
14
+ import { CatalogEntry, DeriveCatalogOptions } from './types.js';
15
+ export declare function deriveCatalog(bundleDir: string, options?: DeriveCatalogOptions): CatalogEntry[];
16
+ /** Clear the cache — primarily for tests that mutate fixture content between runs. */
17
+ export declare function clearCatalogCache(): void;
18
+ //# sourceMappingURL=deriveCatalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deriveCatalog.d.ts","sourceRoot":"","sources":["../../src/bundles/deriveCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EACL,YAAY,EACZ,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAIpB,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,YAAY,EAAE,CAyChB;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Derive a bundle's catalog by scanning its content facet directories.
3
+ *
4
+ * Entry point for the pluggable-bundle catalog subsystem. Called from each
5
+ * bundle's top-level `index.ts` (e.g. `entities/src/core/models/index.ts`)
6
+ * to produce a `CatalogEntry[]` that replaces hand-maintained `docs/index.ts`
7
+ * + `tests/index.ts` arrays.
8
+ *
9
+ * Results are cached per bundle directory — safe to call from module-load
10
+ * paths; subsequent calls for the same bundle return the cached array.
11
+ *
12
+ * See: specverse-self/docs/proposals/PLUGGABLE-BUNDLE-MODEL.md
13
+ */
14
+ import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
15
+ import { basename, dirname, extname, join, relative, resolve } from 'path';
16
+ import { DEFAULT_FACETS, } from './types.js';
17
+ const cache = new Map();
18
+ export function deriveCatalog(bundleDir, options = {}) {
19
+ // Normalise to absolute so cache hits work across relative callers.
20
+ const root = resolve(bundleDir);
21
+ const cacheKey = JSON.stringify({
22
+ root,
23
+ additional: options.additionalReferences,
24
+ facets: options.facets,
25
+ });
26
+ const cached = cache.get(cacheKey);
27
+ if (cached)
28
+ return cached;
29
+ const facets = {
30
+ ...DEFAULT_FACETS,
31
+ ...(options.facets ?? {}),
32
+ };
33
+ const entries = [];
34
+ for (const facet of Object.keys(facets)) {
35
+ const facetDir = join(root, facet);
36
+ if (!existsSync(facetDir) || !statSync(facetDir).isDirectory())
37
+ continue;
38
+ const pattern = facets[facet];
39
+ const regex = globToRegExp(pattern.glob);
40
+ for (const abs of walkFiles(facetDir)) {
41
+ const relFromFacet = relative(facetDir, abs);
42
+ if (!regex.test(relFromFacet))
43
+ continue;
44
+ const entry = buildEntry(abs, root, pattern.category);
45
+ entries.push(entry);
46
+ }
47
+ }
48
+ // Mixed mode: caller-supplied external references appended after derived.
49
+ if (options.additionalReferences) {
50
+ entries.push(...options.additionalReferences);
51
+ }
52
+ cache.set(cacheKey, entries);
53
+ return entries;
54
+ }
55
+ /** Clear the cache — primarily for tests that mutate fixture content between runs. */
56
+ export function clearCatalogCache() {
57
+ cache.clear();
58
+ }
59
+ // ── Title / description extraction ────────────────────────────────────────
60
+ function buildEntry(filePath, bundleRoot, category) {
61
+ const relPath = './' + relative(bundleRoot, filePath).replaceAll('\\', '/');
62
+ const ext = extname(filePath).toLowerCase();
63
+ let title = '';
64
+ let description;
65
+ if (ext === '.specly') {
66
+ // Look for colocated `<basename>.md` as the doc.
67
+ const mdPath = join(dirname(filePath), basename(filePath, '.specly') + '.md');
68
+ if (existsSync(mdPath)) {
69
+ const md = readMdLeading(mdPath);
70
+ title = md.title;
71
+ description = md.description;
72
+ }
73
+ if (!title)
74
+ title = humanize(basename(filePath, '.specly'));
75
+ }
76
+ else if (ext === '.qnt') {
77
+ // Leading `//` comment block.
78
+ const c = readQuintLeading(filePath);
79
+ title = c.title || humanize(basename(filePath, '.qnt'));
80
+ description = c.description;
81
+ }
82
+ else if (ext === '.ts' || ext === '.tsx' || ext === '.js' || ext === '.mjs') {
83
+ // Test file — extract leading JSDoc-style comment.
84
+ const c = readJSDocLeading(filePath);
85
+ title = c.title || humanize(basename(filePath).replace(/\.(test|spec)\.\w+$/, ''));
86
+ description = c.description;
87
+ }
88
+ else {
89
+ title = humanize(basename(filePath, ext));
90
+ }
91
+ const entry = { title, category, path: relPath };
92
+ if (description)
93
+ entry.description = description;
94
+ return entry;
95
+ }
96
+ function readMdLeading(mdPath) {
97
+ let content;
98
+ try {
99
+ content = readFileSync(mdPath, 'utf8');
100
+ }
101
+ catch {
102
+ return { title: '' };
103
+ }
104
+ const lines = content.split('\n');
105
+ let title = '';
106
+ let description;
107
+ let seenH1 = false;
108
+ for (const line of lines) {
109
+ if (!seenH1) {
110
+ const h1 = line.match(/^#\s+(.+)$/);
111
+ if (h1) {
112
+ title = h1[1].trim();
113
+ seenH1 = true;
114
+ continue;
115
+ }
116
+ continue;
117
+ }
118
+ const trimmed = line.trim();
119
+ if (!trimmed)
120
+ continue;
121
+ if (trimmed.startsWith('#'))
122
+ break; // next heading — description ends
123
+ if (trimmed.startsWith('```'))
124
+ break; // code fence — not prose
125
+ if (trimmed.startsWith('>'))
126
+ continue; // blockquote — skip
127
+ description = trimmed.replace(/^\*\*|\*\*$/g, '').replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
128
+ break;
129
+ }
130
+ return { title, description };
131
+ }
132
+ function readQuintLeading(qntPath) {
133
+ let content;
134
+ try {
135
+ content = readFileSync(qntPath, 'utf8');
136
+ }
137
+ catch {
138
+ return { title: '' };
139
+ }
140
+ const commentLines = [];
141
+ for (const line of content.split('\n')) {
142
+ const t = line.trim();
143
+ if (t.startsWith('//')) {
144
+ commentLines.push(t.replace(/^\/\/\s?/, ''));
145
+ continue;
146
+ }
147
+ if (t === '') {
148
+ if (commentLines.length)
149
+ continue;
150
+ continue;
151
+ }
152
+ break; // first non-comment, non-blank line ends the prolog
153
+ }
154
+ const [titleLine, ...rest] = commentLines.filter(Boolean);
155
+ return {
156
+ title: (titleLine ?? '').trim(),
157
+ description: rest.length ? rest.join(' ').trim() : undefined,
158
+ };
159
+ }
160
+ function readJSDocLeading(filePath) {
161
+ let content;
162
+ try {
163
+ content = readFileSync(filePath, 'utf8');
164
+ }
165
+ catch {
166
+ return { title: '' };
167
+ }
168
+ const match = content.match(/^\s*\/\*\*([\s\S]*?)\*\//);
169
+ if (!match)
170
+ return { title: '' };
171
+ const lines = match[1]
172
+ .split('\n')
173
+ .map((l) => l.replace(/^\s*\*\s?/, '').trim())
174
+ .filter((l) => !l.startsWith('@'));
175
+ const nonEmpty = lines.filter(Boolean);
176
+ const [titleLine, ...rest] = nonEmpty;
177
+ return {
178
+ title: (titleLine ?? '').trim(),
179
+ description: rest.length ? rest.join(' ').trim() : undefined,
180
+ };
181
+ }
182
+ function humanize(slug) {
183
+ return slug
184
+ .replace(/[-_]+/g, ' ')
185
+ .replace(/\b\w/g, (c) => c.toUpperCase());
186
+ }
187
+ // ── Filesystem walking + glob matching ────────────────────────────────────
188
+ function* walkFiles(dir) {
189
+ let entries;
190
+ try {
191
+ entries = readdirSync(dir);
192
+ }
193
+ catch {
194
+ return;
195
+ }
196
+ for (const entry of entries) {
197
+ const full = join(dir, entry);
198
+ let s;
199
+ try {
200
+ s = statSync(full);
201
+ }
202
+ catch {
203
+ continue;
204
+ }
205
+ if (s.isDirectory())
206
+ yield* walkFiles(full);
207
+ else if (s.isFile())
208
+ yield full;
209
+ }
210
+ }
211
+ /**
212
+ * Minimal glob → RegExp for the patterns we support:
213
+ * `**` → any path segments (including none)
214
+ * `*` → non-separator run
215
+ * `{a,b}` → alternation
216
+ * Paths use forward slashes for matching regardless of OS.
217
+ */
218
+ function globToRegExp(glob) {
219
+ let re = '';
220
+ let i = 0;
221
+ while (i < glob.length) {
222
+ const ch = glob[i];
223
+ if (ch === '*' && glob[i + 1] === '*') {
224
+ // `**` or `**/`
225
+ if (glob[i + 2] === '/') {
226
+ re += '(?:.*/)?';
227
+ i += 3;
228
+ }
229
+ else {
230
+ re += '.*';
231
+ i += 2;
232
+ }
233
+ }
234
+ else if (ch === '*') {
235
+ re += '[^/]*';
236
+ i += 1;
237
+ }
238
+ else if (ch === '{') {
239
+ const end = glob.indexOf('}', i);
240
+ if (end === -1) {
241
+ re += '\\{';
242
+ i += 1;
243
+ continue;
244
+ }
245
+ const alts = glob.slice(i + 1, end).split(',').map(escapeRegex);
246
+ re += '(?:' + alts.join('|') + ')';
247
+ i = end + 1;
248
+ }
249
+ else if ('/.?+^$()[]\\'.includes(ch)) {
250
+ re += '\\' + ch;
251
+ i += 1;
252
+ }
253
+ else {
254
+ re += ch;
255
+ i += 1;
256
+ }
257
+ }
258
+ return new RegExp('^' + re + '$');
259
+ }
260
+ function escapeRegex(s) {
261
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
262
+ }
263
+ //# sourceMappingURL=deriveCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deriveCatalog.js","sourceRoot":"","sources":["../../src/bundles/deriveCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @specverse/engines/bundles
3
+ *
4
+ * Pluggable-bundle catalog subsystem. Scans a bundle's content facet
5
+ * directories and returns a unified `CatalogEntry[]` summary. Designed to
6
+ * replace hand-maintained catalog files per bundle — content is primary,
7
+ * catalog is derived.
8
+ *
9
+ * See: specverse-self/docs/proposals/PLUGGABLE-BUNDLE-MODEL.md
10
+ */
11
+ export { deriveCatalog, clearCatalogCache } from './deriveCatalog.js';
12
+ export { DEFAULT_FACETS, type CatalogEntry, type CatalogCategory, type DeriveCatalogOptions, type FacetName as CatalogFacetName, type FacetPattern, } from './types.js';
13
+ export { validateBundle, validateBundles } from './validate.js';
14
+ export type { FacetName as ValidateFacetName, FacetIssue, FacetResult, BundleReport, WorkspaceReport, ValidateOptions, } from './validate.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bundles/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,SAAS,IAAI,gBAAgB,EAClC,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EACV,SAAS,IAAI,iBAAiB,EAC9B,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @specverse/engines/bundles
3
+ *
4
+ * Pluggable-bundle catalog subsystem. Scans a bundle's content facet
5
+ * directories and returns a unified `CatalogEntry[]` summary. Designed to
6
+ * replace hand-maintained catalog files per bundle — content is primary,
7
+ * catalog is derived.
8
+ *
9
+ * See: specverse-self/docs/proposals/PLUGGABLE-BUNDLE-MODEL.md
10
+ */
11
+ export { deriveCatalog, clearCatalogCache } from './deriveCatalog.js';
12
+ export { DEFAULT_FACETS, } from './types.js';
13
+ // ── Bundle validation ────────────────────────────────────────────────
14
+ export { validateBundle, validateBundles } from './validate.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bundles/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,cAAc,GAMf,MAAM,YAAY,CAAC;AAEpB,wEAAwE;AACxE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Types for the pluggable-bundle catalog subsystem.
3
+ *
4
+ * A "bundle" is a self-contained package of schema + implementation + content
5
+ * (examples, tests, behaviour specs). This module's job is producing a
6
+ * `CatalogEntry[]` summary of a bundle's content by scanning its content
7
+ * facet directories (`__examples__/`, `__tests__/`, `__behaviour__/`).
8
+ *
9
+ * See: specverse-self/docs/proposals/PLUGGABLE-BUNDLE-MODEL.md
10
+ */
11
+ /**
12
+ * CatalogEntry and CatalogCategory are defined canonically in
13
+ * `@specverse/types/entity-module` (which also aliases them as
14
+ * `EntityDocReference` and `EntityTestReference` for consumer naming
15
+ * intent). Re-exported here so consumers who import from
16
+ * `@specverse/engines/bundles` have everything they need from one path.
17
+ */
18
+ import type { CatalogCategory, CatalogEntry } from '@specverse/types';
19
+ export type { CatalogCategory, CatalogEntry } from '@specverse/types';
20
+ /** A content facet that the catalog scanner knows how to walk. */
21
+ export type FacetName = '__examples__' | '__tests__' | '__behaviour__';
22
+ /**
23
+ * How a facet is scanned. `glob` is a `fast-glob`-compatible pattern relative
24
+ * to the facet directory; `category` is assigned to every entry the scanner
25
+ * emits for this facet.
26
+ */
27
+ export interface FacetPattern {
28
+ glob: string;
29
+ category: CatalogCategory;
30
+ }
31
+ /** Configuration for `deriveCatalog`. All fields are optional. */
32
+ export interface DeriveCatalogOptions {
33
+ /**
34
+ * Mixed-mode entries: hand-written references the scanner can't discover
35
+ * (e.g. external guides outside the bundle). Appended to the derived set
36
+ * with no de-duplication.
37
+ */
38
+ additionalReferences?: CatalogEntry[];
39
+ /**
40
+ * Override scanning behaviour per facet. Default is the production table
41
+ * exported as `DEFAULT_FACETS`. Use this only when a bundle deviates from
42
+ * the standard layout.
43
+ */
44
+ facets?: Partial<Record<FacetName, FacetPattern>>;
45
+ }
46
+ /**
47
+ * Default facet patterns used when `DeriveCatalogOptions.facets` isn't
48
+ * provided. Tight patterns (extension-specific) so non-content files (e.g. a
49
+ * stray `grammar.yaml` physically nested inside `__behaviour__/`) cannot leak
50
+ * into the catalog regardless of directory depth.
51
+ */
52
+ export declare const DEFAULT_FACETS: Record<FacetName, FacetPattern>;
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bundles/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtE,kEAAkE;AAClE,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,eAAe,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;CACnD;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAI1D,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Types for the pluggable-bundle catalog subsystem.
3
+ *
4
+ * A "bundle" is a self-contained package of schema + implementation + content
5
+ * (examples, tests, behaviour specs). This module's job is producing a
6
+ * `CatalogEntry[]` summary of a bundle's content by scanning its content
7
+ * facet directories (`__examples__/`, `__tests__/`, `__behaviour__/`).
8
+ *
9
+ * See: specverse-self/docs/proposals/PLUGGABLE-BUNDLE-MODEL.md
10
+ */
11
+ /**
12
+ * Default facet patterns used when `DeriveCatalogOptions.facets` isn't
13
+ * provided. Tight patterns (extension-specific) so non-content files (e.g. a
14
+ * stray `grammar.yaml` physically nested inside `__behaviour__/`) cannot leak
15
+ * into the catalog regardless of directory depth.
16
+ */
17
+ export const DEFAULT_FACETS = {
18
+ __examples__: { glob: '**/*.specly', category: 'example' },
19
+ __tests__: { glob: '**/*.test.{ts,tsx,js,mjs}', category: 'test' },
20
+ __behaviour__: { glob: '**/*.qnt', category: 'behaviour' },
21
+ };
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bundles/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0CH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,YAAY,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC1D,SAAS,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,EAAE;IAClE,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;CAC3D,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Validate a bundle's facets and return a structured report.
3
+ *
4
+ * v1 covers four facets: catalog (derived-vs-scan consistency), schema
5
+ * (JSON Schema validity), examples (parse via @specverse/engines/parser),
6
+ * tests (inventory only — execution remains vitest's job). Behaviour,
7
+ * inference, conventions, generators arrive in later iterations.
8
+ *
9
+ * Programmatic API for now. A `spv validate-bundle` CLI wrapper is a
10
+ * separate concern once the underlying validation shape settles.
11
+ *
12
+ * See: specverse-self/docs/proposals/PLUGGABLE-BUNDLE-MODEL.md
13
+ */
14
+ export type FacetName = 'catalog' | 'schema' | 'examples' | 'tests' | 'docs' | 'behaviour';
15
+ export interface FacetIssue {
16
+ severity: 'error' | 'warning';
17
+ message: string;
18
+ location?: string;
19
+ }
20
+ export interface FacetResult {
21
+ facet: FacetName;
22
+ status: 'pass' | 'fail' | 'skip';
23
+ duration: number;
24
+ issues: FacetIssue[];
25
+ metrics?: Record<string, number | string>;
26
+ }
27
+ export interface BundleReport {
28
+ bundle: string;
29
+ path: string;
30
+ facets: FacetResult[];
31
+ totals: {
32
+ pass: number;
33
+ fail: number;
34
+ skip: number;
35
+ };
36
+ duration: number;
37
+ }
38
+ export interface WorkspaceReport {
39
+ bundles: BundleReport[];
40
+ totals: {
41
+ pass: number;
42
+ fail: number;
43
+ skip: number;
44
+ };
45
+ duration: number;
46
+ }
47
+ export interface ValidateOptions {
48
+ /** Override schema path. Defaults to @specverse/entities composed schema. */
49
+ schemaPath?: string;
50
+ }
51
+ /** Validate one bundle. */
52
+ export declare function validateBundle(bundleDir: string, options?: ValidateOptions): Promise<BundleReport>;
53
+ /** Validate several bundles. Reports aggregate. */
54
+ export declare function validateBundles(bundleDirs: string[], options?: ValidateOptions): Promise<WorkspaceReport>;
55
+ //# sourceMappingURL=validate.d.ts.map