@vertesia/build-tools 1.5.0-dev.20260725.083715Z → 1.5.0-dev.20260804.124748Z
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 +297 -266
- package/lib/bin/build.js +26 -1
- package/lib/bin/build.js.map +1 -1
- package/lib/bin/config.d.ts +12 -0
- package/lib/bin/config.d.ts.map +1 -1
- package/lib/bin/config.js +25 -0
- package/lib/bin/config.js.map +1 -1
- package/lib/core/skill-markdown/load-catalog.d.ts +30 -0
- package/lib/core/skill-markdown/load-catalog.d.ts.map +1 -0
- package/lib/core/skill-markdown/load-catalog.js +69 -0
- package/lib/core/skill-markdown/load-catalog.js.map +1 -0
- package/lib/core/skill-markdown/preprocess.d.ts +127 -0
- package/lib/core/skill-markdown/preprocess.d.ts.map +1 -0
- package/lib/core/skill-markdown/preprocess.js +455 -0
- package/lib/core/skill-markdown/preprocess.js.map +1 -0
- package/lib/core/skill-markdown/schema-validator.d.ts +109 -0
- package/lib/core/skill-markdown/schema-validator.d.ts.map +1 -0
- package/lib/core/skill-markdown/schema-validator.js +420 -0
- package/lib/core/skill-markdown/schema-validator.js.map +1 -0
- package/lib/core/transformers/index.d.ts +1 -1
- package/lib/core/transformers/index.d.ts.map +1 -1
- package/lib/core/transformers/index.js +1 -1
- package/lib/core/transformers/index.js.map +1 -1
- package/lib/core/transformers/skill.d.ts +15 -1
- package/lib/core/transformers/skill.d.ts.map +1 -1
- package/lib/core/transformers/skill.js +82 -60
- package/lib/core/transformers/skill.js.map +1 -1
- package/lib/import-transform/detector.d.ts +19 -6
- package/lib/import-transform/detector.d.ts.map +1 -1
- package/lib/import-transform/detector.js +73 -24
- package/lib/import-transform/detector.js.map +1 -1
- package/lib/import-transform/index.d.ts.map +1 -1
- package/lib/import-transform/index.js +10 -1
- package/lib/import-transform/index.js.map +1 -1
- package/lib/import-transform/patterns.d.ts +7 -8
- package/lib/import-transform/patterns.d.ts.map +1 -1
- package/lib/import-transform/patterns.js +7 -8
- package/lib/import-transform/patterns.js.map +1 -1
- package/lib/index.d.ts +7 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -3
- package/lib/index.js.map +1 -1
- package/lib/vite/dev-server.d.ts +10 -0
- package/lib/vite/dev-server.d.ts.map +1 -1
- package/lib/vite/dev-server.js +36 -4
- package/lib/vite/dev-server.js.map +1 -1
- package/package.json +9 -12
- package/src/bin/build.ts +31 -2
- package/src/bin/config.ts +27 -0
- package/src/core/skill-markdown/load-catalog.ts +100 -0
- package/src/core/skill-markdown/preprocess.ts +632 -0
- package/src/core/skill-markdown/schema-validator.ts +517 -0
- package/src/core/transformers/index.ts +3 -0
- package/src/core/transformers/skill.ts +116 -53
- package/src/import-transform/detector.ts +78 -26
- package/src/import-transform/index.ts +12 -2
- package/src/import-transform/patterns.ts +7 -12
- package/src/index.ts +35 -2
- package/src/vite/dev-server.ts +52 -4
package/lib/bin/build.js
CHANGED
|
@@ -33,8 +33,10 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import { readFileSync } from 'node:fs';
|
|
35
35
|
import path from 'node:path';
|
|
36
|
+
import { loadSkillCatalog } from '../core/skill-markdown/load-catalog.js';
|
|
37
|
+
import { createSkillTransformer, isSkillTransformer } from '../core/transformers/skill.js';
|
|
36
38
|
import { transformImports } from '../import-transform/index.js';
|
|
37
|
-
import { resolveConfig, VertesiaBuildConfigError } from './config.js';
|
|
39
|
+
import { resolveConfig, resolveSkillCatalogPath, VertesiaBuildConfigError } from './config.js';
|
|
38
40
|
function fail(message) {
|
|
39
41
|
console.error(`vertesia-build: ${message}`);
|
|
40
42
|
process.exit(1);
|
|
@@ -59,8 +61,10 @@ async function main() {
|
|
|
59
61
|
const cwd = process.cwd();
|
|
60
62
|
const pkg = readPackageJson(cwd);
|
|
61
63
|
let options;
|
|
64
|
+
let catalogPath;
|
|
62
65
|
try {
|
|
63
66
|
options = resolveConfig(pkg, cwd);
|
|
67
|
+
catalogPath = resolveSkillCatalogPath(pkg, cwd);
|
|
64
68
|
}
|
|
65
69
|
catch (error) {
|
|
66
70
|
if (error instanceof VertesiaBuildConfigError) {
|
|
@@ -68,6 +72,27 @@ async function main() {
|
|
|
68
72
|
}
|
|
69
73
|
throw error;
|
|
70
74
|
}
|
|
75
|
+
if (catalogPath) {
|
|
76
|
+
let markdown;
|
|
77
|
+
try {
|
|
78
|
+
markdown = await loadSkillCatalog(catalogPath);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
fail(error.message);
|
|
82
|
+
}
|
|
83
|
+
const bound = createSkillTransformer({ markdown });
|
|
84
|
+
// Swap by identity, not by pattern: a consumer's own transformer registered for the same
|
|
85
|
+
// files must not be silently replaced by ours.
|
|
86
|
+
const replaced = options.transformers.filter(isSkillTransformer).length;
|
|
87
|
+
if (replaced === 0) {
|
|
88
|
+
fail('skillCatalog is configured but "skill" is not in vertesia-build.transformers.');
|
|
89
|
+
}
|
|
90
|
+
options = {
|
|
91
|
+
...options,
|
|
92
|
+
transformers: options.transformers.map((rule) => isSkillTransformer(rule) ? bound : rule),
|
|
93
|
+
};
|
|
94
|
+
console.log(`vertesia-build: skill catalog loaded (${markdown.tools.size} tools, ${markdown.skills.size} skills)`);
|
|
95
|
+
}
|
|
71
96
|
const result = await transformImports(options);
|
|
72
97
|
console.log(`vertesia-build: files=${result.filesProcessed} chunks=${result.chunksEmitted} ` +
|
|
73
98
|
`assets=${result.assetsCopied} widgets=${result.widgetsCompiled}`);
|
package/lib/bin/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/bin/build.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/bin/build.ts"],"names":[],"mappings":"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"}
|
package/lib/bin/config.d.ts
CHANGED
|
@@ -11,6 +11,18 @@ export declare const CONFIG_KEY = "vertesia-build";
|
|
|
11
11
|
export declare class VertesiaBuildConfigError extends Error {
|
|
12
12
|
constructor(message: string);
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Absolute path of the module the CLI imports to obtain the skill catalog, if configured.
|
|
16
|
+
*
|
|
17
|
+
* A path rather than an inline object because the catalog is derived from compiled code — this
|
|
18
|
+
* package's own tool registry, or a dependency's catalog artifact. Naming the module in
|
|
19
|
+
* package.json keeps the dependency explicit and reviewable instead of having build-tools go
|
|
20
|
+
* looking for a registry it should not know about.
|
|
21
|
+
*
|
|
22
|
+
* Kept separate from `resolveConfig` because loading it is asynchronous I/O, and `resolveConfig`
|
|
23
|
+
* is deliberately pure.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveSkillCatalogPath(pkg: Record<string, unknown>, cwd: string): string | undefined;
|
|
14
26
|
/**
|
|
15
27
|
* Parse and validate the `vertesia-build` block of a package.json.
|
|
16
28
|
*
|
package/lib/bin/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/bin/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAE3C,qBAAa,wBAAyB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI9B;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/bin/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAE3C,qBAAa,wBAAyB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI9B;AAYD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAarG;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAwEhG"}
|
package/lib/bin/config.js
CHANGED
|
@@ -15,6 +15,31 @@ export class VertesiaBuildConfigError extends Error {
|
|
|
15
15
|
this.name = 'VertesiaBuildConfigError';
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Absolute path of the module the CLI imports to obtain the skill catalog, if configured.
|
|
20
|
+
*
|
|
21
|
+
* A path rather than an inline object because the catalog is derived from compiled code — this
|
|
22
|
+
* package's own tool registry, or a dependency's catalog artifact. Naming the module in
|
|
23
|
+
* package.json keeps the dependency explicit and reviewable instead of having build-tools go
|
|
24
|
+
* looking for a registry it should not know about.
|
|
25
|
+
*
|
|
26
|
+
* Kept separate from `resolveConfig` because loading it is asynchronous I/O, and `resolveConfig`
|
|
27
|
+
* is deliberately pure.
|
|
28
|
+
*/
|
|
29
|
+
export function resolveSkillCatalogPath(pkg, cwd) {
|
|
30
|
+
const raw = pkg[CONFIG_KEY];
|
|
31
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
const value = raw.skillCatalog;
|
|
35
|
+
if (value === undefined) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
39
|
+
throw new VertesiaBuildConfigError(`"${CONFIG_KEY}.skillCatalog" must be a non-empty path when set.`);
|
|
40
|
+
}
|
|
41
|
+
return path.resolve(cwd, value);
|
|
42
|
+
}
|
|
18
43
|
/**
|
|
19
44
|
* Parse and validate the `vertesia-build` block of a package.json.
|
|
20
45
|
*
|
package/lib/bin/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/bin/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/bin/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loading the skill catalog named by `vertesia-build.skillCatalog`.
|
|
3
|
+
*
|
|
4
|
+
* Shared by the `vertesia-build` CLI and the Vite dev-server plugin so both resolve
|
|
5
|
+
* `{@tool …}` / `{@skill …}` against the same registry. Without this the two paths disagree:
|
|
6
|
+
* a build would validate a skill body that `vite dev` and `vitest` then refuse to transform.
|
|
7
|
+
*
|
|
8
|
+
* The catalog is named as a *module path* rather than inlined, because it is derived from compiled
|
|
9
|
+
* code — a package's own tool registry, or a dependency's catalog artifact. Naming it in
|
|
10
|
+
* package.json keeps that dependency explicit instead of having build-tools go looking for a
|
|
11
|
+
* registry it should not know about.
|
|
12
|
+
*/
|
|
13
|
+
import type { PreprocessSkillMarkdownOptions } from './preprocess.js';
|
|
14
|
+
export declare const CONFIG_KEY = "vertesia-build";
|
|
15
|
+
/**
|
|
16
|
+
* Import a catalog module and normalise it into preprocessor options.
|
|
17
|
+
*
|
|
18
|
+
* @throws when the module does not export both `tools` and `skills`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function loadSkillCatalog(modulePath: string): Promise<PreprocessSkillMarkdownOptions>;
|
|
21
|
+
/**
|
|
22
|
+
* Absolute path of the catalog module configured in a package.json, if any.
|
|
23
|
+
*
|
|
24
|
+
* Returns `undefined` when the key is absent — a package that uses no constructs needs no catalog,
|
|
25
|
+
* and the transformer only fails when a body actually uses one.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveSkillCatalogPath(pkg: Record<string, unknown>, cwd: string): string | undefined;
|
|
28
|
+
/** Read `<dir>/package.json`, or `undefined` when it is missing or unparseable. */
|
|
29
|
+
export declare function readPackageJson(dir: string): Record<string, unknown> | undefined;
|
|
30
|
+
//# sourceMappingURL=load-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-catalog.d.ts","sourceRoot":"","sources":["../../../src/core/skill-markdown/load-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAEtE,eAAO,MAAM,UAAU,mBAAmB,CAAC;AA4B3C;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAkBlG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAarG;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAMhF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loading the skill catalog named by `vertesia-build.skillCatalog`.
|
|
3
|
+
*
|
|
4
|
+
* Shared by the `vertesia-build` CLI and the Vite dev-server plugin so both resolve
|
|
5
|
+
* `{@tool …}` / `{@skill …}` against the same registry. Without this the two paths disagree:
|
|
6
|
+
* a build would validate a skill body that `vite dev` and `vitest` then refuse to transform.
|
|
7
|
+
*
|
|
8
|
+
* The catalog is named as a *module path* rather than inlined, because it is derived from compiled
|
|
9
|
+
* code — a package's own tool registry, or a dependency's catalog artifact. Naming it in
|
|
10
|
+
* package.json keeps that dependency explicit instead of having build-tools go looking for a
|
|
11
|
+
* registry it should not know about.
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync } from 'node:fs';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { pathToFileURL } from 'node:url';
|
|
16
|
+
export const CONFIG_KEY = 'vertesia-build';
|
|
17
|
+
/**
|
|
18
|
+
* Import a catalog module and normalise it into preprocessor options.
|
|
19
|
+
*
|
|
20
|
+
* @throws when the module does not export both `tools` and `skills`.
|
|
21
|
+
*/
|
|
22
|
+
export async function loadSkillCatalog(modulePath) {
|
|
23
|
+
const loaded = (await import(pathToFileURL(modulePath).href));
|
|
24
|
+
const source = (loaded.default ?? loaded);
|
|
25
|
+
if (!source.tools || !source.skills) {
|
|
26
|
+
throw new Error(`skillCatalog module ${modulePath} must export { tools, skills }.`);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
tools: new Set(source.tools),
|
|
30
|
+
skills: new Set(source.skills),
|
|
31
|
+
ambiguousTools: source.ambiguousTools ? new Set(source.ambiguousTools) : undefined,
|
|
32
|
+
ambiguousSkills: source.ambiguousSkills ? new Set(source.ambiguousSkills) : undefined,
|
|
33
|
+
unvalidatableTools: source.unvalidatableTools ? new Set(source.unvalidatableTools) : undefined,
|
|
34
|
+
validateExample: source.validateExample,
|
|
35
|
+
validateField: source.validateField,
|
|
36
|
+
skillToolPrefix: source.skillToolPrefix,
|
|
37
|
+
exampleLanguages: source.exampleLanguages ? new Set(source.exampleLanguages) : undefined,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Absolute path of the catalog module configured in a package.json, if any.
|
|
42
|
+
*
|
|
43
|
+
* Returns `undefined` when the key is absent — a package that uses no constructs needs no catalog,
|
|
44
|
+
* and the transformer only fails when a body actually uses one.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveSkillCatalogPath(pkg, cwd) {
|
|
47
|
+
const raw = pkg[CONFIG_KEY];
|
|
48
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const value = raw.skillCatalog;
|
|
52
|
+
if (value === undefined) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
56
|
+
throw new Error(`"${CONFIG_KEY}.skillCatalog" must be a non-empty path when set.`);
|
|
57
|
+
}
|
|
58
|
+
return path.resolve(cwd, value);
|
|
59
|
+
}
|
|
60
|
+
/** Read `<dir>/package.json`, or `undefined` when it is missing or unparseable. */
|
|
61
|
+
export function readPackageJson(dir) {
|
|
62
|
+
try {
|
|
63
|
+
return JSON.parse(readFileSync(path.join(dir, 'package.json'), 'utf-8'));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=load-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-catalog.js","sourceRoot":"","sources":["../../../src/core/skill-markdown/load-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AA4B3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACrD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAA4B,CAAC;IACzF,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAe,CAAC;IAExD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,iCAAiC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO;QACH,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;QAClF,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;QACrF,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9F,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;KAC3F,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAA4B,EAAE,GAAW;IAC7E,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAI,GAAkC,CAAC,YAAY,CAAC;IAC/D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,mDAAmD,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,GAAW;IACvC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAA4B,CAAC;IACxG,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic preprocessor for skill Markdown.
|
|
3
|
+
*
|
|
4
|
+
* Markdown gives syntax but no semantics: in "Use `execute_parallel_work_streams` with
|
|
5
|
+
* `customer_orders`", nothing distinguishes the tool from the sample data. Rather than guess,
|
|
6
|
+
* this preprocessor recognises exactly four explicit constructs and leaves every other byte of
|
|
7
|
+
* prose untouched:
|
|
8
|
+
*
|
|
9
|
+
* - `{@tool search_documents}` → renders as `` `search_documents` ``
|
|
10
|
+
* - `{@skill workstreams}` → renders as `` `learn_workstreams` ``
|
|
11
|
+
* - `{@param search_documents.query}` → renders as `` `query` ``, checked against the schema
|
|
12
|
+
* - ```` ```json tool=batch_execute ```` → validated against that tool, tag stripped on render
|
|
13
|
+
*
|
|
14
|
+
* What that buys is *fail-closed validation and consistent rendering*, not centralised naming —
|
|
15
|
+
* the name is still spelled out at each site, so a rename still touches every reference. The
|
|
16
|
+
* `{@skill}` form earns the most: it takes the `learn_` prefix convention out of the author's
|
|
17
|
+
* hands, and that convention is exactly what drifts.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately pure. It reads no files, imports no registry, and never inspects Git; it is a
|
|
20
|
+
* function of (markdown, catalog) alone, so a build, a test, and CI cannot disagree — and a
|
|
21
|
+
* tarball or shallow checkout builds identically. Schema knowledge stays with the caller via
|
|
22
|
+
* `validateExample`, which keeps AJV and the dispatch model out of build-tools entirely.
|
|
23
|
+
*/
|
|
24
|
+
/** The runtime convention: a skill named `x` is offered to the model as the tool `learn_x`. */
|
|
25
|
+
export declare const DEFAULT_SKILL_TOOL_PREFIX = "learn_";
|
|
26
|
+
export type SkillReferenceKind = 'tool' | 'skill' | 'param' | 'subagent_tool';
|
|
27
|
+
export interface SkillReference {
|
|
28
|
+
kind: SkillReferenceKind;
|
|
29
|
+
/** Name exactly as written in the source. For a `param`, the tool the field belongs to. */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Dotted/`[]` path into the tool's params schema. Only on a `param` reference. */
|
|
32
|
+
path?: string;
|
|
33
|
+
/** Text substituted into the rendered Markdown. */
|
|
34
|
+
rendered: string;
|
|
35
|
+
/** 1-based line of the construct, for error messages. */
|
|
36
|
+
line: number;
|
|
37
|
+
resolved: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface SkillExample {
|
|
40
|
+
/** Tool named by the fence's `tool=` tag. */
|
|
41
|
+
tool: string;
|
|
42
|
+
/** Fence language, e.g. `json`. */
|
|
43
|
+
lang: string;
|
|
44
|
+
/** Raw fence body. */
|
|
45
|
+
source: string;
|
|
46
|
+
/** Parsed body. Absent when the body is not strict JSON. */
|
|
47
|
+
value?: unknown;
|
|
48
|
+
/** 1-based line of the opening fence. */
|
|
49
|
+
line: number;
|
|
50
|
+
/** Problems from JSON parsing and from `validateExample`. */
|
|
51
|
+
errors: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface PreprocessSkillMarkdownOptions {
|
|
54
|
+
/** Tool names the consuming build can resolve. */
|
|
55
|
+
tools: ReadonlySet<string>;
|
|
56
|
+
/** Skill names the consuming build can resolve. */
|
|
57
|
+
skills: ReadonlySet<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Names owned by more than one provider. An unqualified reference to one of these is an
|
|
60
|
+
* error: a flat name set would silently collapse the two definitions and resolve the
|
|
61
|
+
* reference to whichever the consumer happened to keep. Collisions must be resolved at the
|
|
62
|
+
* source, or the syntax grows provider qualification — not be papered over here.
|
|
63
|
+
*/
|
|
64
|
+
ambiguousTools?: ReadonlySet<string>;
|
|
65
|
+
ambiguousSkills?: ReadonlySet<string>;
|
|
66
|
+
/**
|
|
67
|
+
* Tools that exist but whose schema this build cannot see, so a tagged example for them
|
|
68
|
+
* would get an existence check and nothing more.
|
|
69
|
+
*
|
|
70
|
+
* Tagging one is rejected rather than silently half-checked: a `tool=` fence is a claim that
|
|
71
|
+
* the payload is verified, and a fence that only *looks* gated is worse than an untagged one.
|
|
72
|
+
*/
|
|
73
|
+
unvalidatableTools?: ReadonlySet<string>;
|
|
74
|
+
/**
|
|
75
|
+
* Consumer-supplied validation for a tagged example: schema checks, dispatcher resolution,
|
|
76
|
+
* anything else that needs the registry. Returns human-readable problems; empty means valid.
|
|
77
|
+
* Exceptions it throws are captured as errors, never propagated.
|
|
78
|
+
*
|
|
79
|
+
* `createSchemaExampleValidator` in this package is the usual implementation.
|
|
80
|
+
*/
|
|
81
|
+
validateExample?: (example: {
|
|
82
|
+
tool: string;
|
|
83
|
+
value: unknown;
|
|
84
|
+
}) => string[];
|
|
85
|
+
/**
|
|
86
|
+
* Consumer-supplied validation for a `{@param tool.field}` reference: does that tool's schema
|
|
87
|
+
* declare that field? Returns human-readable problems; empty means the field exists.
|
|
88
|
+
* Exceptions it throws are captured as errors, never propagated.
|
|
89
|
+
*
|
|
90
|
+
* `createSchemaFieldValidator` in this package is the usual implementation. A catalog that
|
|
91
|
+
* omits it makes every `{@param …}` an error rather than taking the field on trust: the
|
|
92
|
+
* construct's only purpose is to be checked, so a misconfigured consumer must not quietly
|
|
93
|
+
* turn the whole tree into decoration.
|
|
94
|
+
*/
|
|
95
|
+
validateField?: (ref: {
|
|
96
|
+
tool: string;
|
|
97
|
+
path: string;
|
|
98
|
+
}) => string[];
|
|
99
|
+
/** Override the `learn_` prefix if the runtime convention ever changes. */
|
|
100
|
+
skillToolPrefix?: string;
|
|
101
|
+
/**
|
|
102
|
+
* Fence languages a `tool=` tag may appear on. A tag on a `bash` or `python` fence is a
|
|
103
|
+
* mistake: the body is not a tool payload, so nothing would ever validate it.
|
|
104
|
+
*/
|
|
105
|
+
exampleLanguages?: ReadonlySet<string>;
|
|
106
|
+
}
|
|
107
|
+
export interface PreprocessSkillMarkdownResult {
|
|
108
|
+
/** Markdown with constructs rendered and validation tags stripped. */
|
|
109
|
+
markdown: string;
|
|
110
|
+
references: SkillReference[];
|
|
111
|
+
examples: SkillExample[];
|
|
112
|
+
/**
|
|
113
|
+
* Every problem found, already prefixed with a line number. The caller decides whether to
|
|
114
|
+
* throw — this function never does, so it stays usable from a linter as well as from a build.
|
|
115
|
+
*/
|
|
116
|
+
errors: string[];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Render explicit constructs and validate tagged examples.
|
|
120
|
+
*
|
|
121
|
+
* Never throws and never reads the environment: a caller wanting a hard failure inspects
|
|
122
|
+
* `errors`, or uses `assertSkillMarkdown`.
|
|
123
|
+
*/
|
|
124
|
+
export declare function preprocessSkillMarkdown(markdown: string, options: PreprocessSkillMarkdownOptions): PreprocessSkillMarkdownResult;
|
|
125
|
+
/** Convenience for build callers: preprocess, or throw once with every problem listed. */
|
|
126
|
+
export declare function assertSkillMarkdown(markdown: string, options: PreprocessSkillMarkdownOptions, source: string): PreprocessSkillMarkdownResult;
|
|
127
|
+
//# sourceMappingURL=preprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess.d.ts","sourceRoot":"","sources":["../../../src/core/skill-markdown/preprocess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,+FAA+F;AAC/F,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,eAAe,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC3C,kDAAkD;IAClD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,mDAAmD;IACnD,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;IAC1E;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;IAClE,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC1C,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB;;;OAGG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AA2VD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,8BAA8B,GACxC,6BAA6B,CAgG/B;AAoDD,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,8BAA8B,EACvC,MAAM,EAAE,MAAM,GACf,6BAA6B,CAM/B"}
|