@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.
Files changed (135) hide show
  1. package/dist/engine/domain/eval-config.d.ts +2 -1
  2. package/dist/engine/domain/eval-config.d.ts.map +1 -1
  3. package/dist/engine/domain/eval-config.js +9 -0
  4. package/dist/engine/domain/eval-config.js.map +1 -1
  5. package/dist/engine/domain/knowledge-source.d.ts +5 -1
  6. package/dist/engine/domain/knowledge-source.d.ts.map +1 -1
  7. package/dist/engine/error-catalog.js +2 -2
  8. package/dist/engine/error-catalog.js.map +1 -1
  9. package/dist/engine/errors.d.ts +1 -1
  10. package/dist/engine/errors.d.ts.map +1 -1
  11. package/dist/engine/gateway/conversation-event.d.ts +9 -1
  12. package/dist/engine/gateway/conversation-event.d.ts.map +1 -1
  13. package/dist/engine/gateway/tenant-config.d.ts +14 -0
  14. package/dist/engine/gateway/tenant-config.d.ts.map +1 -1
  15. package/dist/engine/gateway/tenant-config.js +22 -0
  16. package/dist/engine/gateway/tenant-config.js.map +1 -1
  17. package/dist/engine/index.d.ts +1 -1
  18. package/dist/engine/index.d.ts.map +1 -1
  19. package/dist/engine/index.js.map +1 -1
  20. package/dist/eval/consistency-runner.d.ts +28 -0
  21. package/dist/eval/consistency-runner.d.ts.map +1 -0
  22. package/dist/eval/consistency-runner.js +43 -0
  23. package/dist/eval/consistency-runner.js.map +1 -0
  24. package/dist/eval/experiment-runner.d.ts.map +1 -1
  25. package/dist/eval/experiment-runner.js +1 -0
  26. package/dist/eval/experiment-runner.js.map +1 -1
  27. package/dist/eval/index.d.ts +13 -0
  28. package/dist/eval/index.d.ts.map +1 -1
  29. package/dist/eval/index.js +12 -0
  30. package/dist/eval/index.js.map +1 -1
  31. package/dist/eval/scorer-factory.d.ts.map +1 -1
  32. package/dist/eval/scorer-factory.js +33 -0
  33. package/dist/eval/scorer-factory.js.map +1 -1
  34. package/dist/eval/scorers/context-relevance-scorer.d.ts +8 -0
  35. package/dist/eval/scorers/context-relevance-scorer.d.ts.map +1 -0
  36. package/dist/eval/scorers/context-relevance-scorer.js +32 -0
  37. package/dist/eval/scorers/context-relevance-scorer.js.map +1 -0
  38. package/dist/eval/scorers/effort-scorer.d.ts +6 -0
  39. package/dist/eval/scorers/effort-scorer.d.ts.map +1 -0
  40. package/dist/eval/scorers/effort-scorer.js +15 -0
  41. package/dist/eval/scorers/effort-scorer.js.map +1 -0
  42. package/dist/eval/scorers/handoff-quality-scorer.d.ts +8 -0
  43. package/dist/eval/scorers/handoff-quality-scorer.d.ts.map +1 -0
  44. package/dist/eval/scorers/handoff-quality-scorer.js +65 -0
  45. package/dist/eval/scorers/handoff-quality-scorer.js.map +1 -0
  46. package/dist/eval/scorers/milestone-scorer.d.ts +6 -0
  47. package/dist/eval/scorers/milestone-scorer.d.ts.map +1 -0
  48. package/dist/eval/scorers/milestone-scorer.js +35 -0
  49. package/dist/eval/scorers/milestone-scorer.js.map +1 -0
  50. package/dist/eval/scorers/multi-turn-consistency-scorer.d.ts +8 -0
  51. package/dist/eval/scorers/multi-turn-consistency-scorer.d.ts.map +1 -0
  52. package/dist/eval/scorers/multi-turn-consistency-scorer.js +55 -0
  53. package/dist/eval/scorers/multi-turn-consistency-scorer.js.map +1 -0
  54. package/dist/eval/scorers/policy-adherence-scorer.d.ts +9 -0
  55. package/dist/eval/scorers/policy-adherence-scorer.d.ts.map +1 -0
  56. package/dist/eval/scorers/policy-adherence-scorer.js +34 -0
  57. package/dist/eval/scorers/policy-adherence-scorer.js.map +1 -0
  58. package/dist/eval/scorers/resolution-scorer.d.ts +6 -0
  59. package/dist/eval/scorers/resolution-scorer.d.ts.map +1 -0
  60. package/dist/eval/scorers/resolution-scorer.js +25 -0
  61. package/dist/eval/scorers/resolution-scorer.js.map +1 -0
  62. package/dist/eval/scorers/routing-accuracy-scorer.d.ts +6 -0
  63. package/dist/eval/scorers/routing-accuracy-scorer.d.ts.map +1 -0
  64. package/dist/eval/scorers/routing-accuracy-scorer.js +19 -0
  65. package/dist/eval/scorers/routing-accuracy-scorer.js.map +1 -0
  66. package/dist/eval/scorers/safety-preservation-scorer.d.ts +9 -0
  67. package/dist/eval/scorers/safety-preservation-scorer.d.ts.map +1 -0
  68. package/dist/eval/scorers/safety-preservation-scorer.js +54 -0
  69. package/dist/eval/scorers/safety-preservation-scorer.js.map +1 -0
  70. package/dist/eval/scorers/tool-calling-accuracy-scorer.d.ts +6 -0
  71. package/dist/eval/scorers/tool-calling-accuracy-scorer.d.ts.map +1 -0
  72. package/dist/eval/scorers/tool-calling-accuracy-scorer.js +81 -0
  73. package/dist/eval/scorers/tool-calling-accuracy-scorer.js.map +1 -0
  74. package/dist/eval/scorers/tool-trajectory-scorer.d.ts +8 -0
  75. package/dist/eval/scorers/tool-trajectory-scorer.d.ts.map +1 -0
  76. package/dist/eval/scorers/tool-trajectory-scorer.js +51 -0
  77. package/dist/eval/scorers/tool-trajectory-scorer.js.map +1 -0
  78. package/dist/eval/types.d.ts +1 -0
  79. package/dist/eval/types.d.ts.map +1 -1
  80. package/dist/events/index.d.ts +11 -1
  81. package/dist/events/index.d.ts.map +1 -1
  82. package/dist/events/index.js +1 -0
  83. package/dist/events/index.js.map +1 -1
  84. package/dist/index.d.ts +2 -2
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/knowledge/infrastructure/composite-extractor.d.ts +2 -2
  88. package/dist/knowledge/infrastructure/composite-extractor.d.ts.map +1 -1
  89. package/dist/knowledge/infrastructure/composite-extractor.js +2 -2
  90. package/dist/knowledge/infrastructure/composite-extractor.js.map +1 -1
  91. package/dist/knowledge/infrastructure/file-extractor.d.ts +2 -2
  92. package/dist/knowledge/infrastructure/file-extractor.d.ts.map +1 -1
  93. package/dist/knowledge/infrastructure/file-extractor.js +1 -1
  94. package/dist/knowledge/infrastructure/file-extractor.js.map +1 -1
  95. package/dist/knowledge/infrastructure/pdf-extractor.d.ts +2 -2
  96. package/dist/knowledge/infrastructure/pdf-extractor.d.ts.map +1 -1
  97. package/dist/knowledge/infrastructure/pdf-extractor.js +4 -2
  98. package/dist/knowledge/infrastructure/pdf-extractor.js.map +1 -1
  99. package/dist/knowledge/infrastructure/url-extractor.d.ts +2 -2
  100. package/dist/knowledge/infrastructure/url-extractor.d.ts.map +1 -1
  101. package/dist/knowledge/infrastructure/url-extractor.js +5 -3
  102. package/dist/knowledge/infrastructure/url-extractor.js.map +1 -1
  103. package/dist/knowledge/source-manager.d.ts +2 -0
  104. package/dist/knowledge/source-manager.d.ts.map +1 -1
  105. package/dist/knowledge/source-manager.js +54 -1
  106. package/dist/knowledge/source-manager.js.map +1 -1
  107. package/dist/observability/span-mapper.d.ts.map +1 -1
  108. package/dist/observability/span-mapper.js +15 -0
  109. package/dist/observability/span-mapper.js.map +1 -1
  110. package/dist/package/yaml-parser.d.ts.map +1 -1
  111. package/dist/package/yaml-parser.js +1 -0
  112. package/dist/package/yaml-parser.js.map +1 -1
  113. package/dist/skill/index.d.ts +2 -4
  114. package/dist/skill/index.d.ts.map +1 -1
  115. package/dist/skill/index.js +1 -2
  116. package/dist/skill/index.js.map +1 -1
  117. package/dist/skill/md-parser.d.ts +21 -0
  118. package/dist/skill/md-parser.d.ts.map +1 -0
  119. package/dist/skill/md-parser.js +168 -0
  120. package/dist/skill/md-parser.js.map +1 -0
  121. package/dist/skill/skill-registry.d.ts +16 -8
  122. package/dist/skill/skill-registry.d.ts.map +1 -1
  123. package/dist/skill/skill-registry.js +77 -30
  124. package/dist/skill/skill-registry.js.map +1 -1
  125. package/dist/skill/types.d.ts +7 -3
  126. package/dist/skill/types.d.ts.map +1 -1
  127. package/package.json +1 -1
  128. package/dist/skill/yaml-parser.d.ts +0 -18
  129. package/dist/skill/yaml-parser.d.ts.map +0 -1
  130. package/dist/skill/yaml-parser.js +0 -61
  131. package/dist/skill/yaml-parser.js.map +0 -1
  132. package/dist/skill/yaml-schema.d.ts +0 -20
  133. package/dist/skill/yaml-schema.d.ts.map +0 -1
  134. package/dist/skill/yaml-schema.js +0 -80
  135. 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 { loadSkillYaml } from "./yaml-parser.js";
3
+ import { loadSkillMdIndex, loadSkillMd } from "./md-parser.js";
4
4
  export class SkillRegistry {
5
- skills = new Map();
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.register(skill);
10
+ this.registerFull(skill);
10
11
  }
11
12
  }
12
13
  }
13
- /** Register a skill. First-registered wins -- no overwrite. */
14
- register(skill) {
15
- if (!this.skills.has(skill.name)) {
16
- this.skills.set(skill.name, skill);
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.skills.get(name);
28
+ return this.indexes.get(name);
21
29
  }
22
30
  all() {
23
- return [...this.skills.values()];
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 skills from a directory path. Returns number of skills loaded. */
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 files = readdirSync(dirPath).filter((f) => f.endsWith(".yaml") || f.endsWith(".yml"));
72
+ const entries = readdirSync(dirPath, { withFileTypes: true });
30
73
  let loaded = 0;
31
- for (const file of files) {
32
- try {
33
- const skill = loadSkillYaml(join(dirPath, file));
34
- if (!this.skills.has(skill.name)) {
35
- this.skills.set(skill.name, skill);
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
- catch {
40
- // Skip invalid files silently
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
- try {
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 override later (workspace wins over user wins over builtin).
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":"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"}
1
+ {"version":3,"file":"skill-registry.js","sourceRoot":"","sources":["../../src/skill/skill-registry.ts"],"names":[],"mappings":"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"}
@@ -4,14 +4,18 @@ export interface SkillTrigger {
4
4
  readonly event: EventType;
5
5
  readonly filter?: Record<string, unknown>;
6
6
  }
7
- /** Skill configuration (runtime form) */
8
- export interface SkillConfig {
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,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,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,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@kilnai/core",
3
- "version": "0.10.0",
3
+ "version": "0.13.0",
4
4
  "description": "Domain-agnostic AI orchestration engine -- 7 primitives, 3 composites, YAML-configured",
5
5
  "type": "module",
6
6
  "exports": {
@@ -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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"}