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,459 @@
1
+ /**
2
+ * SKILL.md Parser
3
+ *
4
+ * Parses skill files with YAML frontmatter and markdown body.
5
+ * Based on pi.dev Agent Skills specification.
6
+ */
7
+ import { existsSync, readFileSync } from "node:fs";
8
+ /**
9
+ * Simple YAML-like frontmatter parser (subset of YAML for skill frontmatter)
10
+ * Handles: strings, numbers, booleans, arrays, nested objects
11
+ */
12
+ function parseFrontmatter(yaml) {
13
+ const result = {};
14
+ const lines = yaml.split("\n");
15
+ let i = 0;
16
+ function parseValue(line, _indent) {
17
+ line = line.trimEnd();
18
+ // Empty line
19
+ if (!line)
20
+ return undefined;
21
+ // Boolean
22
+ if (line === "true")
23
+ return true;
24
+ if (line === "false")
25
+ return false;
26
+ // Number
27
+ if (/^-?\d+(\.\d+)?$/.test(line))
28
+ return Number(line);
29
+ // Quoted string
30
+ if (line.startsWith('"') && line.endsWith('"')) {
31
+ return line.slice(1, -1);
32
+ }
33
+ if (line.startsWith("'") && line.endsWith("'")) {
34
+ return line.slice(1, -1);
35
+ }
36
+ // Array
37
+ if (line.match(/^-\s/)) {
38
+ const arr = [];
39
+ const itemMatch = line.match(/^-\s+(.*)$/);
40
+ if (itemMatch) {
41
+ arr.push(parseValue(itemMatch[1], 0));
42
+ }
43
+ return arr;
44
+ }
45
+ // Plain value
46
+ return line;
47
+ }
48
+ function parseBlock(_key, lines, start) {
49
+ const arr = [];
50
+ let j = start;
51
+ while (j < lines.length) {
52
+ const line = lines[j];
53
+ if (!line.trim()) {
54
+ j++;
55
+ continue;
56
+ }
57
+ const match = line.match(/^-\s+(.*)$/);
58
+ if (match) {
59
+ arr.push(parseValue(match[1], 0));
60
+ j++;
61
+ }
62
+ else {
63
+ break;
64
+ }
65
+ }
66
+ return { value: arr, end: j };
67
+ }
68
+ while (i < lines.length) {
69
+ const line = lines[i];
70
+ // Skip empty lines and comments
71
+ if (!line.trim() || line.trim().startsWith("#")) {
72
+ i++;
73
+ continue;
74
+ }
75
+ // Check for key: value pattern
76
+ const kvMatch = line.match(/^([\w_]+):\s*(.*)$/);
77
+ if (kvMatch) {
78
+ const key = kvMatch[1];
79
+ const value = kvMatch[2].trim();
80
+ // Check if it's an array/block
81
+ if (!value) {
82
+ // Look ahead for array items
83
+ const blockStart = i + 1;
84
+ if (blockStart < lines.length && lines[blockStart].trim().startsWith("- ")) {
85
+ const { value: blockValue, end } = parseBlock(key, lines, blockStart);
86
+ result[key] = blockValue;
87
+ i = end;
88
+ continue;
89
+ }
90
+ // Empty value
91
+ result[key] = "";
92
+ i++;
93
+ continue;
94
+ }
95
+ result[key] = parseValue(value, 0);
96
+ i++;
97
+ continue;
98
+ }
99
+ i++;
100
+ }
101
+ return result;
102
+ }
103
+ // Regex patterns for frontmatter
104
+ const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
105
+ const NAME_REGEX = /^[a-z0-9]+(-[a-z0-9]+)*$/;
106
+ /**
107
+ * Parse a SKILL.md file
108
+ */
109
+ export function parseSkillFile(filePath) {
110
+ if (!existsSync(filePath)) {
111
+ throw new Error(`Skill file not found: ${filePath}`);
112
+ }
113
+ const content = readFileSync(filePath, "utf-8");
114
+ return parseSkillContent(content, filePath);
115
+ }
116
+ /**
117
+ * Parse SKILL.md content string
118
+ */
119
+ export function parseSkillContent(content, filePath) {
120
+ const match = content.match(FRONTMATTER_REGEX);
121
+ if (!match) {
122
+ // No frontmatter - treat entire content as body
123
+ return createSkillWithoutFrontmatter(content, filePath);
124
+ }
125
+ const [, frontmatterStr, body] = match;
126
+ let frontmatter;
127
+ try {
128
+ frontmatter = parseFrontmatter(frontmatterStr);
129
+ }
130
+ catch (err) {
131
+ throw new Error(`Invalid YAML frontmatter in ${filePath}: ${err}`);
132
+ }
133
+ // Extract pi.dev standard fields
134
+ const fm = extractFrontmatter(frontmatter);
135
+ // Extract Hermes extensions
136
+ const hermes = extractHermesExtensions(frontmatter);
137
+ // Validate required fields
138
+ if (!fm.name) {
139
+ throw new Error(`Missing required field 'name' in ${filePath}`);
140
+ }
141
+ if (!fm.description) {
142
+ throw new Error(`Missing required field 'description' in ${filePath}`);
143
+ }
144
+ // Validate name format (kebab-case)
145
+ if (!NAME_REGEX.test(fm.name)) {
146
+ throw new Error(`Invalid skill name '${fm.name}' in ${filePath}. Must be kebab-case (e.g., 'code-review')`);
147
+ }
148
+ // Create skill object
149
+ const skill = {
150
+ id: fm.name,
151
+ path: filePath ? getSkillDirectory(filePath) : "",
152
+ frontmatter: fm,
153
+ hermes,
154
+ body: body.trim(),
155
+ references: [],
156
+ examples: [],
157
+ metadata: mergeMetadata(fm, hermes),
158
+ loaded: false,
159
+ };
160
+ return skill;
161
+ }
162
+ /**
163
+ * Extract pi.dev standard frontmatter fields
164
+ */
165
+ function extractFrontmatter(raw) {
166
+ return {
167
+ name: String(raw.name || ""),
168
+ description: String(raw.description || ""),
169
+ version: raw.version ? String(raw.version) : undefined,
170
+ license: raw.license ? String(raw.license) : undefined,
171
+ compatibility: raw.compatibility ? String(raw.compatibility) : undefined,
172
+ metadata: raw.metadata,
173
+ allowed_tools: Array.isArray(raw.allowed_tools)
174
+ ? raw.allowed_tools.map(String)
175
+ : undefined,
176
+ disable_model_invocation: Boolean(raw.disable_model_invocation),
177
+ };
178
+ }
179
+ /**
180
+ * Extract Hermes-specific extensions from frontmatter
181
+ */
182
+ function extractHermesExtensions(raw) {
183
+ return {
184
+ author: normalizeAuthor(raw.author),
185
+ confidence: typeof raw.confidence === "number"
186
+ ? Math.max(0, Math.min(1, raw.confidence))
187
+ : undefined,
188
+ usage_count: typeof raw.usage_count === "number" ? Math.floor(raw.usage_count) : undefined,
189
+ created_at: raw.created_at ? String(raw.created_at) : undefined,
190
+ updated_at: raw.updated_at ? String(raw.updated_at) : undefined,
191
+ triggers: Array.isArray(raw.triggers)
192
+ ? raw.triggers.map(String)
193
+ : undefined,
194
+ pitfalls: Array.isArray(raw.pitfalls)
195
+ ? raw.pitfalls.map((p) => normalizePitfall(p))
196
+ : undefined,
197
+ anti_patterns: Array.isArray(raw.anti_patterns)
198
+ ? raw.anti_patterns.map(String)
199
+ : undefined,
200
+ auto_update: Boolean(raw.auto_update),
201
+ };
202
+ }
203
+ /**
204
+ * Normalize author field
205
+ */
206
+ function normalizeAuthor(author) {
207
+ if (typeof author === "string") {
208
+ const normalized = author.toLowerCase();
209
+ if (normalized === "agent" ||
210
+ normalized === "user" ||
211
+ normalized === "curator") {
212
+ return normalized;
213
+ }
214
+ }
215
+ return undefined;
216
+ }
217
+ /**
218
+ * Normalize pitfall entry
219
+ */
220
+ function normalizePitfall(p) {
221
+ if (typeof p === "string") {
222
+ return { name: p, why: "" };
223
+ }
224
+ if (typeof p === "object" && p !== null) {
225
+ const obj = p;
226
+ return {
227
+ name: String(obj.name || "unnamed"),
228
+ why: String(obj.why || obj.description || ""),
229
+ affects: obj.affects ? String(obj.affects) : undefined,
230
+ };
231
+ }
232
+ return { name: "unknown", why: "" };
233
+ }
234
+ /**
235
+ * Create skill without frontmatter (backward compatibility)
236
+ */
237
+ function createSkillWithoutFrontmatter(content, filePath) {
238
+ const name = filePath ? getSkillDirectory(filePath).split("/").pop() || "unnamed" : "unnamed";
239
+ return {
240
+ id: name,
241
+ path: filePath ? getSkillDirectory(filePath) : "",
242
+ frontmatter: {
243
+ name,
244
+ description: `Auto-generated skill from ${name}`,
245
+ },
246
+ hermes: {},
247
+ body: content.trim(),
248
+ references: [],
249
+ examples: [],
250
+ metadata: {
251
+ name,
252
+ description: `Auto-generated skill from ${name}`,
253
+ },
254
+ loaded: false,
255
+ };
256
+ }
257
+ /**
258
+ * Get skill directory from SKILL.md path
259
+ */
260
+ function getSkillDirectory(skillFilePath) {
261
+ // Remove /SKILL.md from path
262
+ const match = skillFilePath.match(/^(.*)\/SKILL\.md$/);
263
+ return match ? match[1] : skillFilePath;
264
+ }
265
+ /**
266
+ * Merge frontmatter and hermes into metadata
267
+ */
268
+ function mergeMetadata(fm, hermes) {
269
+ return {
270
+ ...fm,
271
+ ...hermes,
272
+ };
273
+ }
274
+ /**
275
+ * Scan skill directory for references and examples
276
+ */
277
+ export function scanSkillDirectory(skillDir) {
278
+ const references = [];
279
+ const examples = [];
280
+ // Import dynamic dependencies at runtime
281
+ try {
282
+ const { readdirSync, statSync } = require("node:fs");
283
+ const { join, relative } = require("node:path");
284
+ function scanDir(dir, baseDir) {
285
+ if (!existsSync(dir))
286
+ return;
287
+ const entries = readdirSync(dir);
288
+ for (const entry of entries) {
289
+ if (entry.startsWith("."))
290
+ continue;
291
+ const fullPath = join(dir, entry);
292
+ const stat = statSync(fullPath);
293
+ if (stat.isDirectory()) {
294
+ if (entry === "references") {
295
+ scanReferences(fullPath, baseDir, references);
296
+ }
297
+ else if (entry === "examples") {
298
+ scanExamples(fullPath, baseDir, examples);
299
+ }
300
+ }
301
+ }
302
+ }
303
+ function scanReferences(dir, baseDir, refs) {
304
+ if (!existsSync(dir))
305
+ return;
306
+ const { readdirSync, statSync } = require("node:fs");
307
+ const { join } = require("node:path");
308
+ const entries = readdirSync(dir);
309
+ for (const entry of entries) {
310
+ if (entry.startsWith("."))
311
+ continue;
312
+ const fullPath = join(dir, entry);
313
+ const stat = statSync(fullPath);
314
+ if (stat.isFile() && /\.(md|txt|json|yaml|yml)$/i.test(entry)) {
315
+ refs.push({
316
+ name: entry.replace(/\.(md|txt|json|yaml|yml)$/i, ""),
317
+ path: fullPath,
318
+ relativePath: relative(baseDir, fullPath),
319
+ });
320
+ }
321
+ }
322
+ }
323
+ function scanExamples(dir, baseDir, exs) {
324
+ if (!existsSync(dir))
325
+ return;
326
+ const { readdirSync, statSync } = require("node:fs");
327
+ const { join } = require("node:path");
328
+ const entries = readdirSync(dir);
329
+ for (const entry of entries) {
330
+ if (entry.startsWith("."))
331
+ continue;
332
+ const fullPath = join(dir, entry);
333
+ const stat = statSync(fullPath);
334
+ if (stat.isFile() && /\.(md|json|txt)$/i.test(entry)) {
335
+ exs.push({
336
+ name: entry.replace(/\.(md|json|txt)$/i, ""),
337
+ path: fullPath,
338
+ relativePath: relative(baseDir, fullPath),
339
+ });
340
+ }
341
+ }
342
+ }
343
+ scanDir(skillDir, skillDir);
344
+ }
345
+ catch {
346
+ // Silently ignore fs errors during directory scan
347
+ }
348
+ return { references, examples };
349
+ }
350
+ /**
351
+ * Serialize skill back to SKILL.md format
352
+ */
353
+ export function serializeSkill(skill) {
354
+ const lines = ["---"];
355
+ // Add frontmatter fields
356
+ if (skill.frontmatter.name) {
357
+ lines.push(`name: ${skill.frontmatter.name}`);
358
+ }
359
+ if (skill.frontmatter.description) {
360
+ lines.push(`description: ${skill.frontmatter.description}`);
361
+ }
362
+ if (skill.frontmatter.version) {
363
+ lines.push(`version: ${skill.frontmatter.version}`);
364
+ }
365
+ if (skill.frontmatter.license) {
366
+ lines.push(`license: ${skill.frontmatter.license}`);
367
+ }
368
+ if (skill.frontmatter.compatibility) {
369
+ lines.push(`compatibility: ${skill.frontmatter.compatibility}`);
370
+ }
371
+ if (skill.frontmatter.disable_model_invocation) {
372
+ lines.push(`disable_model_invocation: true`);
373
+ }
374
+ if (skill.frontmatter.allowed_tools?.length) {
375
+ lines.push(`allowed_tools:`);
376
+ for (const tool of skill.frontmatter.allowed_tools) {
377
+ lines.push(` - ${tool}`);
378
+ }
379
+ }
380
+ // Add Hermes extensions
381
+ if (skill.hermes?.author) {
382
+ lines.push(`author: ${skill.hermes.author}`);
383
+ }
384
+ if (skill.hermes?.confidence !== undefined) {
385
+ lines.push(`confidence: ${skill.hermes.confidence}`);
386
+ }
387
+ if (skill.hermes?.usage_count !== undefined) {
388
+ lines.push(`usage_count: ${skill.hermes.usage_count}`);
389
+ }
390
+ if (skill.hermes?.triggers?.length) {
391
+ lines.push(`triggers:`);
392
+ for (const trigger of skill.hermes.triggers) {
393
+ lines.push(` - "${trigger}"`);
394
+ }
395
+ }
396
+ if (skill.hermes?.pitfalls?.length) {
397
+ lines.push(`pitfalls:`);
398
+ for (const pitfall of skill.hermes.pitfalls) {
399
+ lines.push(` - name: ${pitfall.name}`);
400
+ if (pitfall.why) {
401
+ lines.push(` why: ${pitfall.why}`);
402
+ }
403
+ if (pitfall.affects) {
404
+ lines.push(` affects: ${pitfall.affects}`);
405
+ }
406
+ }
407
+ }
408
+ if (skill.hermes?.anti_patterns?.length) {
409
+ lines.push(`anti_patterns:`);
410
+ for (const anti of skill.hermes.anti_patterns) {
411
+ lines.push(` - "${anti}"`);
412
+ }
413
+ }
414
+ if (skill.hermes?.auto_update !== undefined) {
415
+ lines.push(`auto_update: ${skill.hermes.auto_update}`);
416
+ }
417
+ // Add timestamps
418
+ const now = new Date().toISOString();
419
+ if (!skill.hermes?.created_at) {
420
+ lines.push(`created_at: ${now}`);
421
+ }
422
+ lines.push(`updated_at: ${now}`);
423
+ // Add metadata if present
424
+ if (skill.frontmatter.metadata && Object.keys(skill.frontmatter.metadata).length > 0) {
425
+ lines.push(`metadata:`);
426
+ for (const [key, value] of Object.entries(skill.frontmatter.metadata)) {
427
+ lines.push(` ${key}: ${JSON.stringify(value)}`);
428
+ }
429
+ }
430
+ lines.push("---");
431
+ lines.push("");
432
+ lines.push(skill.body);
433
+ return lines.join("\n");
434
+ }
435
+ /**
436
+ * Generate SKILL.md from trajectory or partial skill
437
+ */
438
+ export function generateSkillFromTemplate(template, overrides) {
439
+ const skill = {
440
+ id: template.id || "new-skill",
441
+ path: template.path || "",
442
+ frontmatter: {
443
+ name: overrides?.name || template.frontmatter?.name || "new-skill",
444
+ description: overrides?.description ||
445
+ template.frontmatter?.description ||
446
+ "Auto-generated skill",
447
+ version: overrides?.version || template.frontmatter?.version || "1.0.0",
448
+ ...overrides,
449
+ },
450
+ hermes: template.hermes || {},
451
+ body: template.body || "",
452
+ references: [],
453
+ examples: [],
454
+ metadata: {},
455
+ loaded: false,
456
+ };
457
+ return serializeSkill(skill);
458
+ }
459
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAWnD;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,SAAS,UAAU,CAAC,IAAY,EAAE,OAAe;QAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAEtB,aAAa;QACb,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,UAAU;QACV,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAEnC,SAAS;QACT,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtD,gBAAgB;QAChB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,QAAQ;QACR,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAc,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,GAAe,CAAC;QACzB,CAAC;QAED,cAAc;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,UAAU,CAAC,IAAY,EAAE,KAAe,EAAE,KAAa;QAC9D,MAAM,GAAG,GAAc,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,gCAAgC;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,+BAA+B;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEhC,+BAA+B;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,6BAA6B;gBAC7B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3E,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;oBACtE,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;oBACzB,CAAC,GAAG,GAAG,CAAC;oBACR,SAAS;gBACX,CAAC;gBACD,cAAc;gBACd,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACjB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iCAAiC;AACjC,MAAM,iBAAiB,GAAG,oCAAoC,CAAC;AAC/D,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAiB;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,gDAAgD;QAChD,OAAO,6BAA6B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAEvC,IAAI,WAAoC,CAAC;IACzC,IAAI,CAAC;QACH,WAAW,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,iCAAiC;IACjC,MAAM,EAAE,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAE3C,4BAA4B;IAC5B,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAEpD,2BAA2B;IAC3B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,CAAC,IAAI,QAAQ,QAAQ,4CAA4C,CAC3F,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,KAAK,GAAU;QACnB,EAAE,EAAE,EAAE,CAAC,IAAI;QACX,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;QACjD,WAAW,EAAE,EAAE;QACf,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC;QACnC,MAAM,EAAE,KAAK;KACd,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAA4B;IACtD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACtD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACtD,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,QAAQ,EAAE,GAAG,CAAC,QAA+C;QAC7D,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,SAAS;QACb,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;KAChE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,GAA4B;IAC3D,OAAO;QACL,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QACnC,UAAU,EACR,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;YAChC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1C,CAAC,CAAC,SAAS;QACf,WAAW,EACT,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/E,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1B,CAAC,CAAC,SAAS;QACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,SAAS;QACb,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,SAAS;QACb,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;KACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACxC,IACE,UAAU,KAAK,OAAO;YACtB,UAAU,KAAK,MAAM;YACrB,UAAU,KAAK,SAAS,EACxB,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,CAAU;IAClC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,CAA4B,CAAC;QACzC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC;YACnC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;YAC7C,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;SACvD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CACpC,OAAe,EACf,QAAiB;IAEjB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9F,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;QACjD,WAAW,EAAE;YACX,IAAI;YACJ,WAAW,EAAE,6BAA6B,IAAI,EAAE;SACjD;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;QACpB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE;YACR,IAAI;YACJ,WAAW,EAAE,6BAA6B,IAAI,EAAE;SACjD;QACD,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,aAAqB;IAC9C,6BAA6B;IAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,EAAoB,EACpB,MAAwB;IAExB,OAAO;QACL,GAAG,EAAE;QACL,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAIjD,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAEhD,SAAS,OAAO,CAAC,GAAW,EAAE,OAAe;YAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO;YAE7B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvB,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;wBAC3B,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAChD,CAAC;yBAAM,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;wBAChC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS,cAAc,CACrB,GAAW,EACX,OAAe,EACf,IAAsB;YAEtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO;YAE7B,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAEtC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9D,IAAI,CAAC,IAAI,CAAC;wBACR,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC;wBACrD,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;qBAC1C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS,YAAY,CACnB,GAAW,EACX,OAAe,EACf,GAAmB;YAEnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO;YAE7B,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAEtC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,IAAI,CAAC;wBACP,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;wBAC5C,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;qBAC1C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,CAAC;IAEhC,yBAAyB;IACzB,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,iBAAiB;IACjB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;IAEjC,0BAA0B;IAC1B,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAwB,EACxB,SAAqC;IAErC,MAAM,KAAK,GAAU;QACnB,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,WAAW;QAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;QACzB,WAAW,EAAE;YACX,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,IAAI,WAAW;YAClE,WAAW,EACT,SAAS,EAAE,WAAW;gBACtB,QAAQ,CAAC,WAAW,EAAE,WAAW;gBACjC,sBAAsB;YACxB,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,OAAO,IAAI,OAAO;YACvE,GAAG,SAAS;SACb;QACD,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;QACzB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,KAAK;KACd,CAAC;IAEF,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Skill Directory Scanner
3
+ *
4
+ * Recursively scans directories for skills (directories containing SKILL.md).
5
+ * Supports pi.dev Agent Skills locations:
6
+ * - ~/.pi-harness/skills
7
+ * - skills/ (relative to cwd)
8
+ * - .agents/skills/ (pi.dev compatible)
9
+ */
10
+ import type { ScanOptions, ScanResult } from "./types.js";
11
+ /**
12
+ * Scan multiple directories for skills
13
+ */
14
+ export declare function scanForSkills(options?: Partial<ScanOptions>): Promise<ScanResult>;
15
+ /**
16
+ * Scan for skills synchronously (for use at startup)
17
+ */
18
+ export declare function scanForSkillsSync(options?: Partial<ScanOptions>): ScanResult;
19
+ /**
20
+ * Resolve skill locations from options
21
+ */
22
+ export declare function resolveSkillLocations(locations?: string[]): string[];
23
+ /**
24
+ * Check if a path is a valid skill directory
25
+ */
26
+ export declare function isSkillDirectory(path: string): boolean;
27
+ /**
28
+ * Watch directories for skill changes
29
+ */
30
+ export declare function watchSkillDirectories(directories: string[], onChange: (event: "add" | "change" | "unlink", skillPath: string) => void, options?: {
31
+ pollInterval?: number;
32
+ }): () => void;
33
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AA0HrE;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC,CAiDrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC7B,UAAU,CAiDZ;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,EACzE,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC,MAAM,IAAI,CA8CZ"}