pi-harness-runtime 1.1.95 → 1.1.97

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 (226) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/harness/loop-runtime.ts +3 -0
  3. package/index.ts +130 -29
  4. package/package.json +2 -1
  5. package/packages/a2a-adapter/package.json +1 -1
  6. package/packages/architecture-generator/package.json +1 -1
  7. package/packages/auth/package.json +1 -1
  8. package/packages/autonomous-refactor/package.json +1 -1
  9. package/packages/autonomous-runtime/package.json +1 -1
  10. package/packages/cache-strategy/package.json +1 -1
  11. package/packages/capability-registry/package.json +1 -1
  12. package/packages/checkpoint/package.json +1 -1
  13. package/packages/cli-plugin-sdk/package.json +1 -1
  14. package/packages/clipboard/package.json +1 -1
  15. package/packages/clipboard-plugin/package.json +1 -1
  16. package/packages/code-generation/package.json +1 -1
  17. package/packages/code-review/package.json +1 -1
  18. package/packages/codex-adapter/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/cookie-sanitizer/package.json +1 -1
  24. package/packages/cost-optimizer/package.json +1 -1
  25. package/packages/dependency-analyzer/package.json +1 -1
  26. package/packages/django-plugin/package.json +1 -1
  27. package/packages/doc-generator/package.json +1 -1
  28. package/packages/evaluation-engine/package.json +1 -1
  29. package/packages/evaluation-runner/package.json +1 -1
  30. package/packages/event-bus/package.json +1 -1
  31. package/packages/event-store/package.json +1 -1
  32. package/packages/experience-replay/package.json +1 -1
  33. package/packages/feedback-collector/package.json +1 -1
  34. package/packages/file-copy-helper/package.json +1 -1
  35. package/packages/framework-detector/package.json +1 -1
  36. package/packages/framework-plugin-sdk/package.json +1 -1
  37. package/packages/frappe-plugin/package.json +1 -1
  38. package/packages/generic-web-plugin/package.json +1 -1
  39. package/packages/health-monitor/package.json +1 -1
  40. package/packages/intent-analyzer/package.json +1 -1
  41. package/packages/jev-judge/package.json +1 -1
  42. package/packages/knowledge-graph/package.json +1 -1
  43. package/packages/knowledge-retrieval/package.json +1 -1
  44. package/packages/laravel-plugin/package.json +1 -1
  45. package/packages/learning-engine/package.json +1 -1
  46. package/packages/mcp-adapter/package.json +1 -1
  47. package/packages/memory-engine/package.json +1 -1
  48. package/packages/milestone-manager/package.json +1 -1
  49. package/packages/model-registry/package.json +1 -1
  50. package/packages/nextjs-plugin/package.json +1 -1
  51. package/packages/notification/package.json +1 -1
  52. package/packages/observability/package.json +1 -1
  53. package/packages/okf-indexer/package.json +1 -1
  54. package/packages/performance-optimizer/package.json +1 -1
  55. package/packages/privilege-broker/package.json +1 -1
  56. package/packages/project-analyzer/package.json +1 -1
  57. package/packages/project-bootstrap/package.json +1 -1
  58. package/packages/projection-engine/package.json +1 -1
  59. package/packages/prompt-compiler/package.json +1 -1
  60. package/packages/prompt-versioning/package.json +1 -1
  61. package/packages/provider-adapter-sdk/package.json +1 -1
  62. package/packages/provider-router/package.json +1 -1
  63. package/packages/provider-selector/package.json +1 -1
  64. package/packages/providers/package.json +1 -1
  65. package/packages/qdrant-skills/dist/client.d.ts +51 -0
  66. package/packages/qdrant-skills/dist/client.d.ts.map +1 -0
  67. package/packages/qdrant-skills/dist/client.js +105 -0
  68. package/packages/qdrant-skills/dist/client.js.map +1 -0
  69. package/packages/qdrant-skills/dist/embedder.d.ts +39 -0
  70. package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -0
  71. package/packages/qdrant-skills/dist/embedder.js +101 -0
  72. package/packages/qdrant-skills/dist/embedder.js.map +1 -0
  73. package/packages/qdrant-skills/dist/index.d.ts +25 -0
  74. package/packages/qdrant-skills/dist/index.d.ts.map +1 -0
  75. package/packages/qdrant-skills/dist/index.js +25 -0
  76. package/packages/qdrant-skills/dist/index.js.map +1 -0
  77. package/packages/qdrant-skills/package.json +27 -0
  78. package/packages/qdrant-skills/src/client.ts +178 -0
  79. package/packages/qdrant-skills/src/embedder.ts +137 -0
  80. package/packages/qdrant-skills/src/index.ts +42 -0
  81. package/packages/quota-manager/package.json +1 -1
  82. package/packages/rate-limiter/package.json +1 -1
  83. package/packages/react-vite-plugin/package.json +1 -1
  84. package/packages/release-manager/package.json +1 -1
  85. package/packages/requirement-compiler/package.json +1 -1
  86. package/packages/runtime/package.json +1 -1
  87. package/packages/scheduler/package.json +1 -1
  88. package/packages/scheduler-adapter/package.json +1 -1
  89. package/packages/session/package.json +1 -1
  90. package/packages/session-api/package.json +1 -1
  91. package/packages/session-export/package.json +1 -1
  92. package/packages/shared-context/package.json +1 -1
  93. package/packages/skill-mcp-client/package.json +1 -1
  94. package/packages/skill-registry/package.json +1 -1
  95. package/packages/skills/dist/index.d.ts +40 -0
  96. package/packages/skills/dist/index.d.ts.map +1 -0
  97. package/packages/skills/dist/index.js +84 -0
  98. package/packages/skills/dist/index.js.map +1 -0
  99. package/packages/skills/dist/linter.d.ts +38 -0
  100. package/packages/skills/dist/linter.d.ts.map +1 -0
  101. package/packages/skills/dist/linter.js +323 -0
  102. package/packages/skills/dist/linter.js.map +1 -0
  103. package/packages/skills/dist/loader.d.ts +74 -0
  104. package/packages/skills/dist/loader.d.ts.map +1 -0
  105. package/packages/skills/dist/loader.js +280 -0
  106. package/packages/skills/dist/loader.js.map +1 -0
  107. package/packages/skills/dist/parser.d.ts +32 -0
  108. package/packages/skills/dist/parser.d.ts.map +1 -0
  109. package/packages/skills/dist/parser.js +459 -0
  110. package/packages/skills/dist/parser.js.map +1 -0
  111. package/packages/skills/dist/scanner.d.ts +33 -0
  112. package/packages/skills/dist/scanner.d.ts.map +1 -0
  113. package/packages/skills/dist/scanner.js +257 -0
  114. package/packages/skills/dist/scanner.js.map +1 -0
  115. package/packages/skills/dist/skill-commands.d.ts +33 -0
  116. package/packages/skills/dist/skill-commands.d.ts.map +1 -0
  117. package/packages/skills/dist/skill-commands.js +239 -0
  118. package/packages/skills/dist/skill-commands.js.map +1 -0
  119. package/packages/skills/dist/skill-tool.d.ts +120 -0
  120. package/packages/skills/dist/skill-tool.d.ts.map +1 -0
  121. package/packages/skills/dist/skill-tool.js +239 -0
  122. package/packages/skills/dist/skill-tool.js.map +1 -0
  123. package/packages/skills/dist/skill-versioning.d.ts +123 -0
  124. package/packages/skills/dist/skill-versioning.d.ts.map +1 -0
  125. package/packages/skills/dist/skill-versioning.js +240 -0
  126. package/packages/skills/dist/skill-versioning.js.map +1 -0
  127. package/packages/skills/dist/types.d.ts +226 -0
  128. package/packages/skills/dist/types.d.ts.map +1 -0
  129. package/packages/skills/dist/types.js +21 -0
  130. package/packages/skills/dist/types.js.map +1 -0
  131. package/packages/skills/package.json +46 -0
  132. package/packages/skills/src/index.ts +95 -0
  133. package/packages/skills/src/linter.ts +371 -0
  134. package/packages/skills/src/loader.ts +335 -0
  135. package/packages/skills/src/parser.ts +548 -0
  136. package/packages/skills/src/scanner.ts +322 -0
  137. package/packages/skills/src/skill-commands.ts +318 -0
  138. package/packages/skills/src/skill-tool.ts +324 -0
  139. package/packages/skills/src/skill-versioning.ts +345 -0
  140. package/packages/skills/src/types.ts +259 -0
  141. package/packages/skills/test/init-skills.test.ts +118 -0
  142. package/packages/sprint-planner/package.json +1 -1
  143. package/packages/subscription-engine/package.json +1 -1
  144. package/packages/task-compiler/package.json +1 -1
  145. package/packages/tencentdb-memory/package.json +1 -1
  146. package/packages/tencentdb-sync/package.json +1 -1
  147. package/packages/test-data-generator/package.json +1 -1
  148. package/packages/test-generator/package.json +1 -1
  149. package/packages/todo-bd-sync/package.json +1 -1
  150. package/packages/token-estimation/package.json +1 -1
  151. package/packages/token-optimizer/package.json +1 -1
  152. package/packages/trajectory/dist/src/curator.d.ts +189 -0
  153. package/packages/trajectory/dist/src/curator.d.ts.map +1 -0
  154. package/packages/trajectory/dist/src/curator.js +340 -0
  155. package/packages/trajectory/dist/src/curator.js.map +1 -0
  156. package/packages/trajectory/dist/src/journey-renderer.d.ts +53 -0
  157. package/packages/trajectory/dist/src/journey-renderer.d.ts.map +1 -0
  158. package/packages/trajectory/dist/src/journey-renderer.js +324 -0
  159. package/packages/trajectory/dist/src/journey-renderer.js.map +1 -0
  160. package/packages/trajectory/dist/src/learning-graph.d.ts +159 -0
  161. package/packages/trajectory/dist/src/learning-graph.d.ts.map +1 -0
  162. package/packages/trajectory/dist/src/learning-graph.js +258 -0
  163. package/packages/trajectory/dist/src/learning-graph.js.map +1 -0
  164. package/packages/trajectory/dist/src/memory-store.d.ts +146 -0
  165. package/packages/trajectory/dist/src/memory-store.d.ts.map +1 -0
  166. package/packages/trajectory/dist/src/memory-store.js +472 -0
  167. package/packages/trajectory/dist/src/memory-store.js.map +1 -0
  168. package/packages/trajectory/dist/src/review-fork.d.ts +164 -0
  169. package/packages/trajectory/dist/src/review-fork.d.ts.map +1 -0
  170. package/packages/trajectory/dist/src/review-fork.js +332 -0
  171. package/packages/trajectory/dist/src/review-fork.js.map +1 -0
  172. package/packages/trajectory/dist/src/write-approval.d.ts +136 -0
  173. package/packages/trajectory/dist/src/write-approval.d.ts.map +1 -0
  174. package/packages/trajectory/dist/src/write-approval.js +281 -0
  175. package/packages/trajectory/dist/src/write-approval.js.map +1 -0
  176. package/packages/trajectory/package.json +1 -1
  177. package/packages/trajectory/src/curator.ts +485 -0
  178. package/packages/trajectory/src/journey-renderer.ts +399 -0
  179. package/packages/trajectory/src/learning-graph.ts +363 -0
  180. package/packages/trajectory/src/memory-store.ts +578 -0
  181. package/packages/trajectory/src/review-fork.ts +450 -0
  182. package/packages/trajectory/src/write-approval.ts +372 -0
  183. package/packages/tui/package.json +1 -1
  184. package/packages/types/package.json +1 -1
  185. package/packages/workflow-events/package.json +1 -1
  186. package/packages/workspace-scanner/package.json +1 -1
  187. package/packages/worktree/package.json +1 -1
  188. package/packages/write-review/dist/blackboard.d.ts +98 -0
  189. package/packages/write-review/dist/blackboard.d.ts.map +1 -0
  190. package/packages/write-review/dist/blackboard.js +289 -0
  191. package/packages/write-review/dist/blackboard.js.map +1 -0
  192. package/packages/write-review/dist/event-bus.d.ts +106 -0
  193. package/packages/write-review/dist/event-bus.d.ts.map +1 -0
  194. package/packages/write-review/dist/event-bus.js +294 -0
  195. package/packages/write-review/dist/event-bus.js.map +1 -0
  196. package/packages/write-review/dist/gate.d.ts +37 -0
  197. package/packages/write-review/dist/gate.d.ts.map +1 -0
  198. package/packages/write-review/dist/gate.js +138 -0
  199. package/packages/write-review/dist/gate.js.map +1 -0
  200. package/packages/write-review/dist/index.d.ts +22 -0
  201. package/packages/write-review/dist/index.d.ts.map +1 -0
  202. package/packages/write-review/dist/index.js +60 -0
  203. package/packages/write-review/dist/index.js.map +1 -0
  204. package/packages/write-review/dist/injection.d.ts +40 -0
  205. package/packages/write-review/dist/injection.d.ts.map +1 -0
  206. package/packages/write-review/dist/injection.js +179 -0
  207. package/packages/write-review/dist/injection.js.map +1 -0
  208. package/packages/write-review/dist/review.d.ts +54 -0
  209. package/packages/write-review/dist/review.d.ts.map +1 -0
  210. package/packages/write-review/dist/review.js +154 -0
  211. package/packages/write-review/dist/review.js.map +1 -0
  212. package/packages/write-review/dist/trigger.d.ts +39 -0
  213. package/packages/write-review/dist/trigger.d.ts.map +1 -0
  214. package/packages/write-review/dist/trigger.js +107 -0
  215. package/packages/write-review/dist/trigger.js.map +1 -0
  216. package/packages/write-review/dist/types.d.ts +78 -0
  217. package/packages/write-review/dist/types.d.ts.map +1 -0
  218. package/packages/write-review/dist/types.js +26 -0
  219. package/packages/write-review/dist/types.js.map +1 -0
  220. package/packages/write-review/package.json +1 -1
  221. package/packages/write-review/src/event-bus.ts +351 -0
  222. package/packages/write-review/src/index.ts +1 -0
  223. package/packages/write-review/src/injection.ts +25 -3
  224. package/proactive-compact.ts +51 -7
  225. package/scripts/sync-skills.ts +275 -0
  226. package/scripts/sync-to-qdrant.ts +398 -0
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Skill Linter
3
+ *
4
+ * Hermes-style quality checks for skills.
5
+ * Ensures skills capture "lessons, not logs".
6
+ */
7
+ import type { Skill, LintResult, LintRule, LintSeverity } from "./types.js";
8
+ /**
9
+ * Hermes-style linter rules
10
+ */
11
+ export declare const LINTER_RULES: LintRule[];
12
+ /**
13
+ * Lint a skill
14
+ */
15
+ export declare function lintSkill(skill: Skill, rules?: LintRule[]): LintResult[];
16
+ /**
17
+ * Lint a skill and return formatted output
18
+ */
19
+ export declare function lintSkillFormatted(skill: Skill, rules?: LintRule[]): string;
20
+ /**
21
+ * Get lint summary for multiple skills
22
+ */
23
+ export declare function lintSkillsSummary(skills: Skill[]): {
24
+ total: number;
25
+ passed: number;
26
+ failed: number;
27
+ bySeverity: Record<LintSeverity, number>;
28
+ byRule: Record<string, number>;
29
+ };
30
+ /**
31
+ * Create custom lint rule
32
+ */
33
+ export declare function createLintRule(name: string, description: string, severity: LintSeverity, check: (skill: Skill) => LintResult | null): LintRule;
34
+ /**
35
+ * Filter lint results by severity
36
+ */
37
+ export declare function filterLintResults(results: LintResult[], minSeverity: LintSeverity): LintResult[];
38
+ //# sourceMappingURL=linter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,QAAQ,EA0PlC,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,CAoBxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAe3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAwBA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,UAAU,GAAG,IAAI,GACzC,QAAQ,CAEV;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,UAAU,EAAE,EACrB,WAAW,EAAE,YAAY,GACxB,UAAU,EAAE,CAQd"}
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Skill Linter
3
+ *
4
+ * Hermes-style quality checks for skills.
5
+ * Ensures skills capture "lessons, not logs".
6
+ */
7
+ /**
8
+ * Hermes-style linter rules
9
+ */
10
+ export const LINTER_RULES = [
11
+ // === Quality Rules ===
12
+ {
13
+ name: "incident-log-shape",
14
+ description: "Body contains too many PR/issue references (looks like incident log)",
15
+ severity: "warning",
16
+ check: (skill) => {
17
+ // Count PR/issue references like #123, PR #456, issue #789
18
+ const prIssueRefs = skill.body.match(/(?:PR|issue|#)\s*\d+/gi) ?? [];
19
+ if (prIssueRefs.length > 5) {
20
+ return {
21
+ rule: "incident-log-shape",
22
+ severity: "warning",
23
+ message: `Found ${prIssueRefs.length} PR/issue references. Skills should capture rules, not incident logs.`,
24
+ };
25
+ }
26
+ return null;
27
+ },
28
+ },
29
+ {
30
+ name: "references-sprawl",
31
+ description: "Too many reference files (>60)",
32
+ severity: "error",
33
+ check: (skill) => {
34
+ if (skill.references.length > 60) {
35
+ return {
36
+ rule: "references-sprawl",
37
+ severity: "error",
38
+ message: `Found ${skill.references.length} reference files. Skills should consolidate references.`,
39
+ };
40
+ }
41
+ return null;
42
+ },
43
+ },
44
+ {
45
+ name: "oversized-body",
46
+ description: "SKILL.md exceeds 24k characters",
47
+ severity: "warning",
48
+ check: (skill) => {
49
+ if (skill.body.length > 24000) {
50
+ return {
51
+ rule: "oversized-body",
52
+ severity: "warning",
53
+ message: `SKILL.md body is ${skill.body.length} chars (exceeds 24k). Consider splitting into references.`,
54
+ };
55
+ }
56
+ return null;
57
+ },
58
+ },
59
+ {
60
+ name: "missing-pitfalls",
61
+ description: "No pitfalls with 'why' explanations",
62
+ severity: "info",
63
+ check: (skill) => {
64
+ const hasPitfalls = skill.hermes?.pitfalls && skill.hermes.pitfalls.length > 0;
65
+ const hasWhy = skill.body.toLowerCase().includes("why");
66
+ if (!hasPitfalls && !hasWhy) {
67
+ return {
68
+ rule: "missing-pitfalls",
69
+ severity: "info",
70
+ message: "No pitfalls found. Consider documenting common mistakes and why they happen.",
71
+ };
72
+ }
73
+ return null;
74
+ },
75
+ },
76
+ {
77
+ name: "missing-examples",
78
+ description: "No examples provided",
79
+ severity: "info",
80
+ check: (skill) => {
81
+ if (skill.examples.length === 0) {
82
+ return {
83
+ rule: "missing-examples",
84
+ severity: "info",
85
+ message: "No examples found. Consider adding example files to demonstrate the skill.",
86
+ };
87
+ }
88
+ return null;
89
+ },
90
+ },
91
+ // === pi.dev Compatibility Rules ===
92
+ {
93
+ name: "missing-description",
94
+ description: "No description in frontmatter",
95
+ severity: "error",
96
+ check: (skill) => {
97
+ if (!skill.frontmatter.description || skill.frontmatter.description.length < 10) {
98
+ return {
99
+ rule: "missing-description",
100
+ severity: "error",
101
+ message: "Missing or too short description. The description determines when the model considers loading the skill.",
102
+ };
103
+ }
104
+ return null;
105
+ },
106
+ },
107
+ {
108
+ name: "invalid-name",
109
+ description: "Name contains invalid characters",
110
+ severity: "error",
111
+ check: (skill) => {
112
+ const nameRegex = /^[a-z0-9]+(-[a-z0-9]+)*$/;
113
+ if (!nameRegex.test(skill.frontmatter.name)) {
114
+ return {
115
+ rule: "invalid-name",
116
+ severity: "error",
117
+ message: `Invalid skill name '${skill.frontmatter.name}'. Must be kebab-case (e.g., 'code-review').`,
118
+ };
119
+ }
120
+ return null;
121
+ },
122
+ },
123
+ {
124
+ name: "name-mismatch",
125
+ description: "Directory name doesn't match skill name",
126
+ severity: "warning",
127
+ check: (skill) => {
128
+ const dirName = skill.path.split("/").pop() ?? "";
129
+ if (dirName !== skill.frontmatter.name && dirName !== "") {
130
+ return {
131
+ rule: "name-mismatch",
132
+ severity: "warning",
133
+ message: `Directory name '${dirName}' differs from skill name '${skill.frontmatter.name}'. Consider matching them for portability.`,
134
+ };
135
+ }
136
+ return null;
137
+ },
138
+ },
139
+ // === Hermes-Specific Rules ===
140
+ {
141
+ name: "missing-triggers",
142
+ description: "No triggers defined for auto-matching",
143
+ severity: "info",
144
+ check: (skill) => {
145
+ const hasTriggers = skill.hermes?.triggers && skill.hermes.triggers.length > 0;
146
+ if (!hasTriggers) {
147
+ return {
148
+ rule: "missing-triggers",
149
+ severity: "info",
150
+ message: "No triggers defined. The skill relies only on description matching.",
151
+ };
152
+ }
153
+ return null;
154
+ },
155
+ },
156
+ {
157
+ name: "low-confidence",
158
+ description: "Skill has low confidence score",
159
+ severity: "info",
160
+ check: (skill) => {
161
+ const confidence = skill.hermes?.confidence;
162
+ if (confidence !== undefined && confidence < 0.5) {
163
+ return {
164
+ rule: "low-confidence",
165
+ severity: "info",
166
+ message: `Low confidence score (${confidence}). Consider validating this skill pattern.`,
167
+ };
168
+ }
169
+ return null;
170
+ },
171
+ },
172
+ {
173
+ name: "unused-skill",
174
+ description: "Skill has never been used",
175
+ severity: "info",
176
+ check: (skill) => {
177
+ const usageCount = skill.hermes?.usage_count ?? 0;
178
+ if (usageCount === 0 && skill.hermes?.created_at) {
179
+ return {
180
+ rule: "unused-skill",
181
+ severity: "info",
182
+ message: "This skill has never been used. Consider testing or archiving it.",
183
+ };
184
+ }
185
+ return null;
186
+ },
187
+ },
188
+ {
189
+ name: "generic-description",
190
+ description: "Description is too generic",
191
+ severity: "warning",
192
+ check: (skill) => {
193
+ const genericPhrases = [
194
+ "helps with",
195
+ "useful for",
196
+ "does things",
197
+ "stuff",
198
+ "things",
199
+ ];
200
+ const descLower = skill.frontmatter.description.toLowerCase();
201
+ for (const phrase of genericPhrases) {
202
+ if (descLower.includes(phrase)) {
203
+ return {
204
+ rule: "generic-description",
205
+ severity: "warning",
206
+ message: `Description contains generic phrase '${phrase}'. Be specific about what the skill does and when to use it.`,
207
+ };
208
+ }
209
+ }
210
+ return null;
211
+ },
212
+ },
213
+ {
214
+ name: "log-like-content",
215
+ description: "Body contains log-like content (timestamps, repeated patterns)",
216
+ severity: "warning",
217
+ check: (skill) => {
218
+ // Check for log patterns
219
+ const logPatterns = [
220
+ /\d{4}-\d{2}-\d{2}/, // dates
221
+ /\d{2}:\d{2}:\d{2}/, // timestamps
222
+ /^(?:INFO|ERROR|WARN|DEBUG)/m, // log levels
223
+ /^\d+\.\s/m, // numbered lists (too detailed)
224
+ ];
225
+ let matchCount = 0;
226
+ for (const pattern of logPatterns) {
227
+ if (pattern.test(skill.body)) {
228
+ matchCount++;
229
+ }
230
+ }
231
+ if (matchCount >= 2) {
232
+ return {
233
+ rule: "log-like-content",
234
+ severity: "warning",
235
+ message: "Body contains log-like patterns. Skills should capture procedures and rules, not logs.",
236
+ };
237
+ }
238
+ return null;
239
+ },
240
+ },
241
+ ];
242
+ /**
243
+ * Lint a skill
244
+ */
245
+ export function lintSkill(skill, rules) {
246
+ const rulesToUse = rules ?? LINTER_RULES;
247
+ const results = [];
248
+ for (const rule of rulesToUse) {
249
+ try {
250
+ const result = rule.check(skill);
251
+ if (result) {
252
+ results.push(result);
253
+ }
254
+ }
255
+ catch (err) {
256
+ results.push({
257
+ rule: rule.name,
258
+ severity: "error",
259
+ message: `Linter error: ${err instanceof Error ? err.message : String(err)}`,
260
+ });
261
+ }
262
+ }
263
+ return results;
264
+ }
265
+ /**
266
+ * Lint a skill and return formatted output
267
+ */
268
+ export function lintSkillFormatted(skill, rules) {
269
+ const results = lintSkill(skill, rules);
270
+ if (results.length === 0) {
271
+ return `✓ ${skill.id}: No issues found`;
272
+ }
273
+ const lines = [`✗ ${skill.id}:`];
274
+ for (const result of results) {
275
+ const icon = result.severity === "error" ? "✗" : result.severity === "warning" ? "⚠" : "ℹ";
276
+ lines.push(` ${icon} [${result.severity}] ${result.rule}: ${result.message}`);
277
+ }
278
+ return lines.join("\n");
279
+ }
280
+ /**
281
+ * Get lint summary for multiple skills
282
+ */
283
+ export function lintSkillsSummary(skills) {
284
+ const summary = {
285
+ total: skills.length,
286
+ passed: 0,
287
+ failed: 0,
288
+ bySeverity: { error: 0, warning: 0, info: 0 },
289
+ byRule: {},
290
+ };
291
+ for (const skill of skills) {
292
+ const results = lintSkill(skill);
293
+ if (results.length === 0) {
294
+ summary.passed++;
295
+ }
296
+ else {
297
+ summary.failed++;
298
+ for (const result of results) {
299
+ summary.bySeverity[result.severity]++;
300
+ summary.byRule[result.rule] = (summary.byRule[result.rule] ?? 0) + 1;
301
+ }
302
+ }
303
+ }
304
+ return summary;
305
+ }
306
+ /**
307
+ * Create custom lint rule
308
+ */
309
+ export function createLintRule(name, description, severity, check) {
310
+ return { name, description, severity, check };
311
+ }
312
+ /**
313
+ * Filter lint results by severity
314
+ */
315
+ export function filterLintResults(results, minSeverity) {
316
+ const severityOrder = ["info", "warning", "error"];
317
+ const minIndex = severityOrder.indexOf(minSeverity);
318
+ return results.filter((result) => {
319
+ const resultIndex = severityOrder.indexOf(result.severity);
320
+ return resultIndex >= minIndex;
321
+ });
322
+ }
323
+ //# sourceMappingURL=linter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.js","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAe;IACtC,wBAAwB;IAExB;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,sEAAsE;QACnF,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,2DAA2D;YAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC;YACrE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,SAAS,WAAW,CAAC,MAAM,uEAAuE;iBAC5G,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,gCAAgC;QAC7C,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACjC,OAAO;oBACL,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,SAAS,KAAK,CAAC,UAAU,CAAC,MAAM,yDAAyD;iBACnG,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,iCAAiC;QAC9C,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBAC9B,OAAO;oBACL,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,2DAA2D;iBAC1G,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,qCAAqC;QAClD,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAExD,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,8EAA8E;iBACxF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,sBAAsB;QACnC,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,4EAA4E;iBACtF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED,qCAAqC;IAErC;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,+BAA+B;QAC5C,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAChF,OAAO;oBACL,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,0GAA0G;iBACpH,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,MAAM,SAAS,GAAG,0BAA0B,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO;oBACL,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,uBAAuB,KAAK,CAAC,WAAW,CAAC,IAAI,8CAA8C;iBACrG,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,yCAAyC;QACtD,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAClD,IAAI,OAAO,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACzD,OAAO;oBACL,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,mBAAmB,OAAO,8BAA8B,KAAK,CAAC,WAAW,CAAC,IAAI,4CAA4C;iBACpI,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED,gCAAgC;IAEhC;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,uCAAuC;QACpD,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,qEAAqE;iBAC/E,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,gCAAgC;QAC7C,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC;YAC5C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;gBACjD,OAAO;oBACL,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,yBAAyB,UAAU,4CAA4C;iBACzF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2BAA2B;QACxC,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC;YAClD,IAAI,UAAU,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;gBACjD,OAAO;oBACL,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,mEAAmE;iBAC7E,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,MAAM,cAAc,GAAG;gBACrB,YAAY;gBACZ,YAAY;gBACZ,aAAa;gBACb,OAAO;gBACP,QAAQ;aACT,CAAC;YACF,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YAE9D,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;gBACpC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,OAAO;wBACL,IAAI,EAAE,qBAAqB;wBAC3B,QAAQ,EAAE,SAAS;wBACnB,OAAO,EAAE,wCAAwC,MAAM,8DAA8D;qBACtH,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,gEAAgE;QAC7E,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,CAAC,KAAY,EAAqB,EAAE;YACzC,yBAAyB;YACzB,MAAM,WAAW,GAAG;gBAClB,mBAAmB,EAAG,QAAQ;gBAC9B,mBAAmB,EAAI,aAAa;gBACpC,6BAA6B,EAAG,aAAa;gBAC7C,WAAW,EAAY,gCAAgC;aACxD,CAAC;YAEF,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAED,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBACpB,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,wFAAwF;iBAClG,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,KAAkB;IACxD,MAAM,UAAU,GAAG,KAAK,IAAI,YAAY,CAAC;IACzC,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,KAAkB;IACjE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;IAE3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3F,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAO/C,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAkC;QAC7E,MAAM,EAAE,EAA4B;KACrC,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,WAAmB,EACnB,QAAsB,EACtB,KAA0C;IAE1C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAqB,EACrB,WAAyB;IAEzB,MAAM,aAAa,GAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEpD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,OAAO,WAAW,IAAI,QAAQ,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Skill Registry
3
+ *
4
+ * Stores and manages skills with progressive disclosure.
5
+ * Based on pi.dev Agent Skills specification.
6
+ */
7
+ import type { Skill, SkillIndex, MatchOptions, MatchResult, LoadOptions, LoadedSkill } from "./types.js";
8
+ /**
9
+ * Skill Registry - manages loaded and indexed skills
10
+ */
11
+ export declare class SkillRegistry {
12
+ private skills;
13
+ private index;
14
+ private loading;
15
+ /**
16
+ * Register a skill
17
+ */
18
+ register(skill: Skill): void;
19
+ /**
20
+ * Unregister a skill by ID
21
+ */
22
+ unregister(skillId: string): boolean;
23
+ /**
24
+ * Get a skill by ID
25
+ */
26
+ get(skillId: string): Skill | undefined;
27
+ /**
28
+ * List all registered skills
29
+ */
30
+ list(): Skill[];
31
+ /**
32
+ * Get skill index (lightweight)
33
+ */
34
+ getIndex(): SkillIndex;
35
+ /**
36
+ * Find skills matching a trigger/query
37
+ */
38
+ find(query: string, options?: MatchOptions): MatchResult[];
39
+ /**
40
+ * Find best matching skill for a query
41
+ */
42
+ findBestMatch(query: string, options?: MatchOptions): MatchResult | null;
43
+ /**
44
+ * Load a skill's full content (progressive disclosure)
45
+ */
46
+ load(skillId: string, options?: LoadOptions): Promise<LoadedSkill | null>;
47
+ /**
48
+ * Load skill content from disk
49
+ */
50
+ private loadSkill;
51
+ /**
52
+ * Update skill index entry
53
+ */
54
+ private updateIndex;
55
+ /**
56
+ * Clear all skills
57
+ */
58
+ clear(): void;
59
+ /**
60
+ * Get count of registered skills
61
+ */
62
+ get size(): number;
63
+ /**
64
+ * Check if skill exists
65
+ */
66
+ has(skillId: string): boolean;
67
+ }
68
+ /**
69
+ * Create a new skill registry
70
+ */
71
+ export declare function createSkillRegistry(): SkillRegistry;
72
+ export declare function getGlobalSkillRegistry(): SkillRegistry;
73
+ export declare function setGlobalSkillRegistry(registry: SkillRegistry): void;
74
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,KAAK,EACL,UAAU,EAEV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EAEZ,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,OAAO,CAA0C;IAEzD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAG3B;IAED;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUnC;IAED;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEtC;IAED;;OAEG;IACH,IAAI,IAAI,KAAK,EAAE,CAEd;IAED;;OAEG;IACH,QAAQ,IAAI,UAAU,CAErB;IAED;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,EAAE,CAkFzD;IAED;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,IAAI,CAGvE;IAED;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4B9E;IAED;;OAEG;YACW,SAAS;IA6DvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAqBnB;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5B;CACF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAOD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAEpE"}