@kilnai/core 0.10.0 → 0.13.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/dist/engine/domain/eval-config.d.ts +2 -1
- package/dist/engine/domain/eval-config.d.ts.map +1 -1
- package/dist/engine/domain/eval-config.js +9 -0
- package/dist/engine/domain/eval-config.js.map +1 -1
- package/dist/engine/domain/knowledge-source.d.ts +5 -1
- package/dist/engine/domain/knowledge-source.d.ts.map +1 -1
- package/dist/engine/error-catalog.js +2 -2
- package/dist/engine/error-catalog.js.map +1 -1
- package/dist/engine/errors.d.ts +1 -1
- package/dist/engine/errors.d.ts.map +1 -1
- package/dist/engine/gateway/conversation-event.d.ts +9 -1
- package/dist/engine/gateway/conversation-event.d.ts.map +1 -1
- package/dist/engine/gateway/tenant-config.d.ts +14 -0
- package/dist/engine/gateway/tenant-config.d.ts.map +1 -1
- package/dist/engine/gateway/tenant-config.js +22 -0
- package/dist/engine/gateway/tenant-config.js.map +1 -1
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js.map +1 -1
- package/dist/eval/consistency-runner.d.ts +28 -0
- package/dist/eval/consistency-runner.d.ts.map +1 -0
- package/dist/eval/consistency-runner.js +43 -0
- package/dist/eval/consistency-runner.js.map +1 -0
- package/dist/eval/experiment-runner.d.ts.map +1 -1
- package/dist/eval/experiment-runner.js +1 -0
- package/dist/eval/experiment-runner.js.map +1 -1
- package/dist/eval/index.d.ts +13 -0
- package/dist/eval/index.d.ts.map +1 -1
- package/dist/eval/index.js +12 -0
- package/dist/eval/index.js.map +1 -1
- package/dist/eval/scorer-factory.d.ts.map +1 -1
- package/dist/eval/scorer-factory.js +33 -0
- package/dist/eval/scorer-factory.js.map +1 -1
- package/dist/eval/scorers/context-relevance-scorer.d.ts +8 -0
- package/dist/eval/scorers/context-relevance-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/context-relevance-scorer.js +32 -0
- package/dist/eval/scorers/context-relevance-scorer.js.map +1 -0
- package/dist/eval/scorers/effort-scorer.d.ts +6 -0
- package/dist/eval/scorers/effort-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/effort-scorer.js +15 -0
- package/dist/eval/scorers/effort-scorer.js.map +1 -0
- package/dist/eval/scorers/handoff-quality-scorer.d.ts +8 -0
- package/dist/eval/scorers/handoff-quality-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/handoff-quality-scorer.js +65 -0
- package/dist/eval/scorers/handoff-quality-scorer.js.map +1 -0
- package/dist/eval/scorers/milestone-scorer.d.ts +6 -0
- package/dist/eval/scorers/milestone-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/milestone-scorer.js +35 -0
- package/dist/eval/scorers/milestone-scorer.js.map +1 -0
- package/dist/eval/scorers/multi-turn-consistency-scorer.d.ts +8 -0
- package/dist/eval/scorers/multi-turn-consistency-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/multi-turn-consistency-scorer.js +55 -0
- package/dist/eval/scorers/multi-turn-consistency-scorer.js.map +1 -0
- package/dist/eval/scorers/policy-adherence-scorer.d.ts +9 -0
- package/dist/eval/scorers/policy-adherence-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/policy-adherence-scorer.js +34 -0
- package/dist/eval/scorers/policy-adherence-scorer.js.map +1 -0
- package/dist/eval/scorers/resolution-scorer.d.ts +6 -0
- package/dist/eval/scorers/resolution-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/resolution-scorer.js +25 -0
- package/dist/eval/scorers/resolution-scorer.js.map +1 -0
- package/dist/eval/scorers/routing-accuracy-scorer.d.ts +6 -0
- package/dist/eval/scorers/routing-accuracy-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/routing-accuracy-scorer.js +19 -0
- package/dist/eval/scorers/routing-accuracy-scorer.js.map +1 -0
- package/dist/eval/scorers/safety-preservation-scorer.d.ts +9 -0
- package/dist/eval/scorers/safety-preservation-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/safety-preservation-scorer.js +54 -0
- package/dist/eval/scorers/safety-preservation-scorer.js.map +1 -0
- package/dist/eval/scorers/tool-calling-accuracy-scorer.d.ts +6 -0
- package/dist/eval/scorers/tool-calling-accuracy-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/tool-calling-accuracy-scorer.js +81 -0
- package/dist/eval/scorers/tool-calling-accuracy-scorer.js.map +1 -0
- package/dist/eval/scorers/tool-trajectory-scorer.d.ts +8 -0
- package/dist/eval/scorers/tool-trajectory-scorer.d.ts.map +1 -0
- package/dist/eval/scorers/tool-trajectory-scorer.js +51 -0
- package/dist/eval/scorers/tool-trajectory-scorer.js.map +1 -0
- package/dist/eval/types.d.ts +1 -0
- package/dist/eval/types.d.ts.map +1 -1
- package/dist/events/index.d.ts +11 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -0
- package/dist/events/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge/infrastructure/composite-extractor.d.ts +2 -2
- package/dist/knowledge/infrastructure/composite-extractor.d.ts.map +1 -1
- package/dist/knowledge/infrastructure/composite-extractor.js +2 -2
- package/dist/knowledge/infrastructure/composite-extractor.js.map +1 -1
- package/dist/knowledge/infrastructure/file-extractor.d.ts +2 -2
- package/dist/knowledge/infrastructure/file-extractor.d.ts.map +1 -1
- package/dist/knowledge/infrastructure/file-extractor.js +1 -1
- package/dist/knowledge/infrastructure/file-extractor.js.map +1 -1
- package/dist/knowledge/infrastructure/pdf-extractor.d.ts +2 -2
- package/dist/knowledge/infrastructure/pdf-extractor.d.ts.map +1 -1
- package/dist/knowledge/infrastructure/pdf-extractor.js +4 -2
- package/dist/knowledge/infrastructure/pdf-extractor.js.map +1 -1
- package/dist/knowledge/infrastructure/url-extractor.d.ts +2 -2
- package/dist/knowledge/infrastructure/url-extractor.d.ts.map +1 -1
- package/dist/knowledge/infrastructure/url-extractor.js +5 -3
- package/dist/knowledge/infrastructure/url-extractor.js.map +1 -1
- package/dist/knowledge/source-manager.d.ts +2 -0
- package/dist/knowledge/source-manager.d.ts.map +1 -1
- package/dist/knowledge/source-manager.js +54 -1
- package/dist/knowledge/source-manager.js.map +1 -1
- package/dist/observability/span-mapper.d.ts.map +1 -1
- package/dist/observability/span-mapper.js +15 -0
- package/dist/observability/span-mapper.js.map +1 -1
- package/dist/package/yaml-parser.d.ts.map +1 -1
- package/dist/package/yaml-parser.js +1 -0
- package/dist/package/yaml-parser.js.map +1 -1
- package/dist/skill/index.d.ts +2 -4
- package/dist/skill/index.d.ts.map +1 -1
- package/dist/skill/index.js +1 -2
- package/dist/skill/index.js.map +1 -1
- package/dist/skill/md-parser.d.ts +21 -0
- package/dist/skill/md-parser.d.ts.map +1 -0
- package/dist/skill/md-parser.js +168 -0
- package/dist/skill/md-parser.js.map +1 -0
- package/dist/skill/skill-registry.d.ts +16 -8
- package/dist/skill/skill-registry.d.ts.map +1 -1
- package/dist/skill/skill-registry.js +77 -30
- package/dist/skill/skill-registry.js.map +1 -1
- package/dist/skill/types.d.ts +7 -3
- package/dist/skill/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/skill/yaml-parser.d.ts +0 -18
- package/dist/skill/yaml-parser.d.ts.map +0 -1
- package/dist/skill/yaml-parser.js +0 -61
- package/dist/skill/yaml-parser.js.map +0 -1
- package/dist/skill/yaml-schema.d.ts +0 -20
- package/dist/skill/yaml-schema.d.ts.map +0 -1
- package/dist/skill/yaml-schema.js +0 -80
- package/dist/skill/yaml-schema.js.map +0 -1
|
@@ -1,43 +1,86 @@
|
|
|
1
1
|
import { existsSync, readdirSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { loadSkillMdIndex, loadSkillMd } from "./md-parser.js";
|
|
4
4
|
export class SkillRegistry {
|
|
5
|
-
|
|
5
|
+
indexes = new Map();
|
|
6
|
+
fullCache = new Map();
|
|
6
7
|
constructor(options) {
|
|
7
8
|
if (options?.builtinSkills) {
|
|
8
9
|
for (const skill of options.builtinSkills) {
|
|
9
|
-
this.
|
|
10
|
+
this.registerFull(skill);
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
|
-
/** Register a skill. First-registered wins
|
|
14
|
-
register(
|
|
15
|
-
if (!this.
|
|
16
|
-
this.
|
|
14
|
+
/** Register a skill index. First-registered wins. */
|
|
15
|
+
register(index) {
|
|
16
|
+
if (!this.indexes.has(index.name)) {
|
|
17
|
+
this.indexes.set(index.name, index);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/** Register a full SkillConfig (for builtins or programmatic use). Stores index + caches full config. */
|
|
21
|
+
registerFull(config) {
|
|
22
|
+
if (!this.indexes.has(config.name)) {
|
|
23
|
+
this.indexes.set(config.name, config);
|
|
24
|
+
this.fullCache.set(config.name, config);
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
27
|
get(name) {
|
|
20
|
-
return this.
|
|
28
|
+
return this.indexes.get(name);
|
|
21
29
|
}
|
|
22
30
|
all() {
|
|
23
|
-
return [...this.
|
|
31
|
+
return [...this.indexes.values()];
|
|
32
|
+
}
|
|
33
|
+
/** Load full SkillConfig on demand. Reads file from disk if not already cached. */
|
|
34
|
+
load(name) {
|
|
35
|
+
const cached = this.fullCache.get(name);
|
|
36
|
+
if (cached)
|
|
37
|
+
return cached;
|
|
38
|
+
const index = this.indexes.get(name);
|
|
39
|
+
if (!index?.filePath)
|
|
40
|
+
return undefined;
|
|
41
|
+
try {
|
|
42
|
+
const config = loadSkillMd(index.filePath);
|
|
43
|
+
this.fullCache.set(name, config);
|
|
44
|
+
return config;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Resolve skills matching any of the given names or tags. */
|
|
51
|
+
resolve(names, tags) {
|
|
52
|
+
if (!names?.length && !tags?.length)
|
|
53
|
+
return [];
|
|
54
|
+
const nameSet = names ? new Set(names) : undefined;
|
|
55
|
+
const tagSet = tags ? new Set(tags) : undefined;
|
|
56
|
+
const results = [];
|
|
57
|
+
for (const index of this.indexes.values()) {
|
|
58
|
+
if (nameSet?.has(index.name)) {
|
|
59
|
+
results.push(index);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (tagSet && index.tags.some((t) => tagSet.has(t))) {
|
|
63
|
+
results.push(index);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return results;
|
|
24
67
|
}
|
|
25
|
-
/** Discover
|
|
68
|
+
/** Discover SKILL.md files from a directory. Returns number of skills loaded. */
|
|
26
69
|
discoverFrom(dirPath) {
|
|
27
70
|
if (!existsSync(dirPath))
|
|
28
71
|
return 0;
|
|
29
|
-
const
|
|
72
|
+
const entries = readdirSync(dirPath, { withFileTypes: true });
|
|
30
73
|
let loaded = 0;
|
|
31
|
-
for (const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
loaded
|
|
74
|
+
for (const entry of entries) {
|
|
75
|
+
// Convention: each skill is a directory containing SKILL.md, or a flat SKILL.md file
|
|
76
|
+
if (entry.isDirectory()) {
|
|
77
|
+
const skillMdPath = join(dirPath, entry.name, "SKILL.md");
|
|
78
|
+
if (existsSync(skillMdPath)) {
|
|
79
|
+
loaded += this.tryLoadIndex(skillMdPath);
|
|
37
80
|
}
|
|
38
81
|
}
|
|
39
|
-
|
|
40
|
-
|
|
82
|
+
else if (entry.name.endsWith(".md")) {
|
|
83
|
+
loaded += this.tryLoadIndex(join(dirPath, entry.name));
|
|
41
84
|
}
|
|
42
85
|
}
|
|
43
86
|
return loaded;
|
|
@@ -49,16 +92,7 @@ export class SkillRegistry {
|
|
|
49
92
|
let loaded = 0;
|
|
50
93
|
for (const skillPath of manifest.skills) {
|
|
51
94
|
const fullPath = join(manifest.installPath, skillPath);
|
|
52
|
-
|
|
53
|
-
const skill = loadSkillYaml(fullPath);
|
|
54
|
-
if (!this.skills.has(skill.name)) {
|
|
55
|
-
this.skills.set(skill.name, skill);
|
|
56
|
-
loaded++;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// Skip invalid skill files silently
|
|
61
|
-
}
|
|
95
|
+
loaded += this.tryLoadIndex(fullPath);
|
|
62
96
|
}
|
|
63
97
|
return loaded;
|
|
64
98
|
}
|
|
@@ -67,7 +101,7 @@ export class SkillRegistry {
|
|
|
67
101
|
* 1. workspace: projectPath/.kiln/skills/
|
|
68
102
|
* 2. user: userHome/.kiln/skills/
|
|
69
103
|
* 3. builtin (passed via constructor)
|
|
70
|
-
* Earlier tiers
|
|
104
|
+
* Earlier tiers win (workspace > user > builtin).
|
|
71
105
|
*/
|
|
72
106
|
discoverAll(projectPath, userHome) {
|
|
73
107
|
const workspaceDir = join(projectPath, ".kiln", "skills");
|
|
@@ -77,5 +111,18 @@ export class SkillRegistry {
|
|
|
77
111
|
total += this.discoverFrom(userDir);
|
|
78
112
|
return total;
|
|
79
113
|
}
|
|
114
|
+
tryLoadIndex(filePath) {
|
|
115
|
+
try {
|
|
116
|
+
const index = loadSkillMdIndex(filePath);
|
|
117
|
+
if (!this.indexes.has(index.name)) {
|
|
118
|
+
this.indexes.set(index.name, index);
|
|
119
|
+
return 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Skip invalid files silently
|
|
124
|
+
}
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
80
127
|
}
|
|
81
128
|
//# sourceMappingURL=skill-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-registry.js","sourceRoot":"","sources":["../../src/skill/skill-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"skill-registry.js","sourceRoot":"","sources":["../../src/skill/skill-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/skill/types.d.ts
CHANGED
|
@@ -4,14 +4,18 @@ export interface SkillTrigger {
|
|
|
4
4
|
readonly event: EventType;
|
|
5
5
|
readonly filter?: Record<string, unknown>;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
8
|
-
export interface
|
|
7
|
+
/** Lightweight index entry — loaded at discovery time (progressive disclosure) */
|
|
8
|
+
export interface SkillIndex {
|
|
9
9
|
readonly name: string;
|
|
10
10
|
readonly description: string;
|
|
11
11
|
readonly tools: readonly string[];
|
|
12
12
|
readonly triggers: readonly SkillTrigger[];
|
|
13
13
|
readonly tags: readonly string[];
|
|
14
|
-
readonly instructions: string;
|
|
15
14
|
readonly handler?: string;
|
|
15
|
+
readonly filePath: string;
|
|
16
|
+
}
|
|
17
|
+
/** Full skill config — loaded on activation. Body is the markdown instructions. */
|
|
18
|
+
export interface SkillConfig extends SkillIndex {
|
|
19
|
+
readonly instructions: string;
|
|
16
20
|
}
|
|
17
21
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B"}
|
package/package.json
CHANGED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { KilnError } from "../engine/errors.js";
|
|
2
|
-
import type { SkillConfig } from "./types.js";
|
|
3
|
-
export declare class SkillYamlError extends KilnError {
|
|
4
|
-
readonly errors: readonly {
|
|
5
|
-
field: string;
|
|
6
|
-
message: string;
|
|
7
|
-
}[];
|
|
8
|
-
readonly filePath?: string;
|
|
9
|
-
constructor(errors: readonly {
|
|
10
|
-
field: string;
|
|
11
|
-
message: string;
|
|
12
|
-
}[], filePath?: string);
|
|
13
|
-
}
|
|
14
|
-
/** Parse a YAML string into a validated SkillConfig */
|
|
15
|
-
export declare function parseSkillYaml(content: string, filePath?: string): SkillConfig;
|
|
16
|
-
/** Read a YAML file from disk and parse into SkillConfig */
|
|
17
|
-
export declare function loadSkillYaml(filePath: string): SkillConfig;
|
|
18
|
-
//# sourceMappingURL=yaml-parser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-parser.d.ts","sourceRoot":"","sources":["../../src/skill/yaml-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,qBAAa,cAAe,SAAQ,SAAS;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAGzB,MAAM,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,EACrD,QAAQ,CAAC,EAAE,MAAM;CAWpB;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAkC9E;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAG3D"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { parse } from "yaml";
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
3
|
-
import { KilnError } from "../engine/errors.js";
|
|
4
|
-
import { validateSkillYaml } from "./yaml-schema.js";
|
|
5
|
-
import { EVENT_LEVEL_MAP } from "../events/index.js";
|
|
6
|
-
const VALID_EVENT_TYPES = new Set(Object.keys(EVENT_LEVEL_MAP));
|
|
7
|
-
export class SkillYamlError extends KilnError {
|
|
8
|
-
errors;
|
|
9
|
-
filePath;
|
|
10
|
-
constructor(errors, filePath) {
|
|
11
|
-
const msg = errors.map((e) => ` ${e.field}: ${e.message}`).join("\n");
|
|
12
|
-
super("SKILL_YAML_INVALID", `Invalid skill YAML${filePath ? ` (${filePath})` : ""}:\n${msg}`, {
|
|
13
|
-
context: { errors, filePath },
|
|
14
|
-
retryable: false,
|
|
15
|
-
});
|
|
16
|
-
this.name = "SkillYamlError";
|
|
17
|
-
this.errors = errors;
|
|
18
|
-
this.filePath = filePath;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/** Parse a YAML string into a validated SkillConfig */
|
|
22
|
-
export function parseSkillYaml(content, filePath) {
|
|
23
|
-
const data = parse(content);
|
|
24
|
-
const errors = validateSkillYaml(data, filePath);
|
|
25
|
-
if (errors.length > 0)
|
|
26
|
-
throw new SkillYamlError(errors, filePath);
|
|
27
|
-
// Safe cast: validation above confirmed the required shape
|
|
28
|
-
const yaml = data;
|
|
29
|
-
// Validate trigger event values against known EventType strings
|
|
30
|
-
const triggerErrors = [];
|
|
31
|
-
const rawTriggers = yaml.triggers ?? [];
|
|
32
|
-
for (let i = 0; i < rawTriggers.length; i++) {
|
|
33
|
-
const trigger = rawTriggers[i];
|
|
34
|
-
if (!VALID_EVENT_TYPES.has(trigger.event)) {
|
|
35
|
-
triggerErrors.push({
|
|
36
|
-
field: `triggers[${i}].event`,
|
|
37
|
-
message: `Unknown event type "${trigger.event}"`,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (triggerErrors.length > 0)
|
|
42
|
-
throw new SkillYamlError(triggerErrors, filePath);
|
|
43
|
-
return {
|
|
44
|
-
name: yaml.name,
|
|
45
|
-
description: yaml.description,
|
|
46
|
-
tools: yaml.tools ?? [],
|
|
47
|
-
triggers: rawTriggers.map((t) => ({
|
|
48
|
-
event: t.event,
|
|
49
|
-
...(t.filter !== undefined ? { filter: t.filter } : {}),
|
|
50
|
-
})),
|
|
51
|
-
tags: yaml.tags ?? [],
|
|
52
|
-
instructions: yaml.instructions,
|
|
53
|
-
...(yaml.handler !== undefined ? { handler: yaml.handler } : {}),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/** Read a YAML file from disk and parse into SkillConfig */
|
|
57
|
-
export function loadSkillYaml(filePath) {
|
|
58
|
-
const content = readFileSync(filePath, "utf-8");
|
|
59
|
-
return parseSkillYaml(content, filePath);
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=yaml-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-parser.js","sourceRoot":"","sources":["../../src/skill/yaml-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { YamlValidationError } from "../domain/yaml-schema.js";
|
|
2
|
-
export type { YamlValidationError };
|
|
3
|
-
/** Trigger as expressed in YAML */
|
|
4
|
-
export interface SkillTriggerYaml {
|
|
5
|
-
readonly event: string;
|
|
6
|
-
readonly filter?: Record<string, unknown>;
|
|
7
|
-
}
|
|
8
|
-
/** Skill config as expressed in YAML */
|
|
9
|
-
export interface SkillYaml {
|
|
10
|
-
readonly name: string;
|
|
11
|
-
readonly description: string;
|
|
12
|
-
readonly tools?: readonly string[];
|
|
13
|
-
readonly triggers?: readonly SkillTriggerYaml[];
|
|
14
|
-
readonly tags?: readonly string[];
|
|
15
|
-
readonly instructions: string;
|
|
16
|
-
readonly handler?: string;
|
|
17
|
-
}
|
|
18
|
-
/** Validate a parsed YAML object against the SkillYaml schema */
|
|
19
|
-
export declare function validateSkillYaml(data: unknown, filePath?: string): YamlValidationError[];
|
|
20
|
-
//# sourceMappingURL=yaml-schema.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-schema.d.ts","sourceRoot":"","sources":["../../src/skill/yaml-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,wCAAwC;AACxC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,iEAAiE;AACjE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,mBAAmB,EAAE,CA+EvB"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
const REQUIRED_FIELDS = ["name", "description", "instructions"];
|
|
2
|
-
/** Validate a parsed YAML object against the SkillYaml schema */
|
|
3
|
-
export function validateSkillYaml(data, filePath) {
|
|
4
|
-
const errors = [];
|
|
5
|
-
if (typeof data !== "object" || data === null || Array.isArray(data)) {
|
|
6
|
-
errors.push({ field: "(root)", message: "Expected an object", filePath });
|
|
7
|
-
return errors;
|
|
8
|
-
}
|
|
9
|
-
const obj = data;
|
|
10
|
-
// Required fields
|
|
11
|
-
for (const field of REQUIRED_FIELDS) {
|
|
12
|
-
if (!(field in obj)) {
|
|
13
|
-
errors.push({ field, message: `Missing required field "${field}"`, filePath });
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
// Type checks for present fields
|
|
17
|
-
if ("name" in obj && typeof obj.name !== "string") {
|
|
18
|
-
errors.push({ field: "name", message: `Expected string, got ${typeof obj.name}`, filePath });
|
|
19
|
-
}
|
|
20
|
-
if ("description" in obj && typeof obj.description !== "string") {
|
|
21
|
-
errors.push({ field: "description", message: `Expected string, got ${typeof obj.description}`, filePath });
|
|
22
|
-
}
|
|
23
|
-
if ("instructions" in obj && typeof obj.instructions !== "string") {
|
|
24
|
-
errors.push({ field: "instructions", message: `Expected string, got ${typeof obj.instructions}`, filePath });
|
|
25
|
-
}
|
|
26
|
-
if ("handler" in obj && typeof obj.handler !== "string") {
|
|
27
|
-
errors.push({ field: "handler", message: `Expected string, got ${typeof obj.handler}`, filePath });
|
|
28
|
-
}
|
|
29
|
-
// tools: optional array of strings
|
|
30
|
-
if ("tools" in obj) {
|
|
31
|
-
if (!Array.isArray(obj.tools)) {
|
|
32
|
-
errors.push({ field: "tools", message: `Expected array, got ${typeof obj.tools}`, filePath });
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
for (let i = 0; i < obj.tools.length; i++) {
|
|
36
|
-
if (typeof obj.tools[i] !== "string") {
|
|
37
|
-
errors.push({ field: `tools[${i}]`, message: `Expected string, got ${typeof obj.tools[i]}`, filePath });
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// tags: optional array of strings
|
|
43
|
-
if ("tags" in obj) {
|
|
44
|
-
if (!Array.isArray(obj.tags)) {
|
|
45
|
-
errors.push({ field: "tags", message: `Expected array, got ${typeof obj.tags}`, filePath });
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
for (let i = 0; i < obj.tags.length; i++) {
|
|
49
|
-
if (typeof obj.tags[i] !== "string") {
|
|
50
|
-
errors.push({ field: `tags[${i}]`, message: `Expected string, got ${typeof obj.tags[i]}`, filePath });
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// triggers: optional array of objects with event=string
|
|
56
|
-
if ("triggers" in obj) {
|
|
57
|
-
if (!Array.isArray(obj.triggers)) {
|
|
58
|
-
errors.push({ field: "triggers", message: `Expected array, got ${typeof obj.triggers}`, filePath });
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
for (let i = 0; i < obj.triggers.length; i++) {
|
|
62
|
-
const trigger = obj.triggers[i];
|
|
63
|
-
if (typeof trigger !== "object" || trigger === null || Array.isArray(trigger)) {
|
|
64
|
-
errors.push({ field: `triggers[${i}]`, message: "Expected an object", filePath });
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
const t = trigger;
|
|
68
|
-
if (!("event" in t)) {
|
|
69
|
-
errors.push({ field: `triggers[${i}].event`, message: `Missing required field "event"`, filePath });
|
|
70
|
-
}
|
|
71
|
-
else if (typeof t.event !== "string") {
|
|
72
|
-
errors.push({ field: `triggers[${i}].event`, message: `Expected string, got ${typeof t.event}`, filePath });
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return errors;
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=yaml-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-schema.js","sourceRoot":"","sources":["../../src/skill/yaml-schema.ts"],"names":[],"mappings":"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"}
|