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,257 @@
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 { existsSync, readdirSync, statSync } from "node:fs";
11
+ import { join, normalize } from "node:path";
12
+ import { homedir } from "node:os";
13
+ import { parseSkillFile, scanSkillDirectory } from "./parser.js";
14
+ /**
15
+ * Default scan options
16
+ */
17
+ const DEFAULT_SCAN_OPTIONS = {
18
+ directories: [
19
+ "~/.pi-harness/skills",
20
+ "skills",
21
+ ".agents/skills",
22
+ ],
23
+ maxDepth: 10,
24
+ includeHidden: false,
25
+ };
26
+ /**
27
+ * Expand ~ in paths to home directory
28
+ */
29
+ function expandPath(path) {
30
+ if (path.startsWith("~/")) {
31
+ return join(homedir(), path.slice(2));
32
+ }
33
+ return path;
34
+ }
35
+ /**
36
+ * Check if a path should be included based on patterns
37
+ */
38
+ function matchesPattern(path, patterns) {
39
+ if (!patterns || patterns.length === 0) {
40
+ return true;
41
+ }
42
+ for (const pattern of patterns) {
43
+ if (path.includes(pattern)) {
44
+ return true;
45
+ }
46
+ }
47
+ return false;
48
+ }
49
+ /**
50
+ * Recursively scan a directory for skills
51
+ */
52
+ function scanDirectory(dir, options, scannedPaths, errors, depth = 0) {
53
+ const skillDirs = [];
54
+ // Skip if max depth exceeded
55
+ if (options.maxDepth !== undefined && depth > options.maxDepth) {
56
+ return skillDirs;
57
+ }
58
+ // Normalize and resolve path
59
+ const normalizedPath = normalize(expandPath(dir));
60
+ // Skip if already scanned
61
+ if (scannedPaths.has(normalizedPath)) {
62
+ return skillDirs;
63
+ }
64
+ scannedPaths.add(normalizedPath);
65
+ // Skip if doesn't exist
66
+ if (!existsSync(normalizedPath)) {
67
+ return skillDirs;
68
+ }
69
+ try {
70
+ const entries = readdirSync(normalizedPath);
71
+ for (const entry of entries) {
72
+ // Skip hidden directories if not included
73
+ if (entry.startsWith(".") && !options.includeHidden) {
74
+ continue;
75
+ }
76
+ const fullPath = join(normalizedPath, entry);
77
+ try {
78
+ const stat = statSync(fullPath);
79
+ if (stat.isDirectory()) {
80
+ // Check if this directory contains a SKILL.md
81
+ const skillMdPath = join(fullPath, "SKILL.md");
82
+ if (existsSync(skillMdPath)) {
83
+ // Found a skill!
84
+ skillDirs.push(fullPath);
85
+ }
86
+ else {
87
+ // Recurse into subdirectory
88
+ const subSkills = scanDirectory(fullPath, options, scannedPaths, errors, depth + 1);
89
+ skillDirs.push(...subSkills);
90
+ }
91
+ }
92
+ }
93
+ catch (err) {
94
+ errors.push({
95
+ path: fullPath,
96
+ error: err instanceof Error ? err.message : String(err),
97
+ });
98
+ }
99
+ }
100
+ }
101
+ catch (err) {
102
+ errors.push({
103
+ path: normalizedPath,
104
+ error: err instanceof Error ? err.message : String(err),
105
+ });
106
+ }
107
+ return skillDirs;
108
+ }
109
+ /**
110
+ * Scan multiple directories for skills
111
+ */
112
+ export async function scanForSkills(options) {
113
+ const startTime = Date.now();
114
+ const mergedOptions = {
115
+ ...DEFAULT_SCAN_OPTIONS,
116
+ ...options,
117
+ };
118
+ const scannedPaths = new Set();
119
+ const errors = [];
120
+ const skillDirs = [];
121
+ for (const dir of mergedOptions.directories) {
122
+ const dirs = scanDirectory(dir, mergedOptions, scannedPaths, errors, 0);
123
+ skillDirs.push(...dirs);
124
+ }
125
+ // Parse each skill directory
126
+ const skills = [];
127
+ for (const skillDir of skillDirs) {
128
+ try {
129
+ const skillMdPath = join(skillDir, "SKILL.md");
130
+ const skill = parseSkillFile(skillMdPath);
131
+ // Scan for references and examples
132
+ const { references, examples } = scanSkillDirectory(skillDir);
133
+ skill.references = references;
134
+ skill.examples = examples;
135
+ skills.push(skill);
136
+ }
137
+ catch (err) {
138
+ errors.push({
139
+ path: skillDir,
140
+ error: err instanceof Error ? err.message : String(err),
141
+ });
142
+ }
143
+ }
144
+ return {
145
+ skills,
146
+ errors,
147
+ scannedPaths: Array.from(scannedPaths),
148
+ durationMs: Date.now() - startTime,
149
+ };
150
+ }
151
+ /**
152
+ * Scan for skills synchronously (for use at startup)
153
+ */
154
+ export function scanForSkillsSync(options) {
155
+ const startTime = Date.now();
156
+ const mergedOptions = {
157
+ ...DEFAULT_SCAN_OPTIONS,
158
+ ...options,
159
+ };
160
+ const scannedPaths = new Set();
161
+ const errors = [];
162
+ const skillDirs = [];
163
+ for (const dir of mergedOptions.directories) {
164
+ const dirs = scanDirectory(dir, mergedOptions, scannedPaths, errors, 0);
165
+ skillDirs.push(...dirs);
166
+ }
167
+ // Parse each skill directory
168
+ const skills = [];
169
+ for (const skillDir of skillDirs) {
170
+ try {
171
+ const skillMdPath = join(skillDir, "SKILL.md");
172
+ const skill = parseSkillFile(skillMdPath);
173
+ // Scan for references and examples
174
+ const { references, examples } = scanSkillDirectory(skillDir);
175
+ skill.references = references;
176
+ skill.examples = examples;
177
+ skills.push(skill);
178
+ }
179
+ catch (err) {
180
+ errors.push({
181
+ path: skillDir,
182
+ error: err instanceof Error ? err.message : String(err),
183
+ });
184
+ }
185
+ }
186
+ return {
187
+ skills,
188
+ errors,
189
+ scannedPaths: Array.from(scannedPaths),
190
+ durationMs: Date.now() - startTime,
191
+ };
192
+ }
193
+ /**
194
+ * Resolve skill locations from options
195
+ */
196
+ export function resolveSkillLocations(locations) {
197
+ const defaults = DEFAULT_SCAN_OPTIONS.directories;
198
+ if (!locations || locations.length === 0) {
199
+ return defaults.map(expandPath);
200
+ }
201
+ return locations.map(expandPath);
202
+ }
203
+ /**
204
+ * Check if a path is a valid skill directory
205
+ */
206
+ export function isSkillDirectory(path) {
207
+ const skillMdPath = join(expandPath(path), "SKILL.md");
208
+ return existsSync(skillMdPath);
209
+ }
210
+ /**
211
+ * Watch directories for skill changes
212
+ */
213
+ export function watchSkillDirectories(directories, onChange, options) {
214
+ const pollInterval = options?.pollInterval ?? 5000;
215
+ const lastModified = new Map();
216
+ const check = () => {
217
+ for (const dir of directories) {
218
+ const expandedDir = expandPath(dir);
219
+ if (!existsSync(expandedDir))
220
+ continue;
221
+ try {
222
+ const entries = readdirSync(expandedDir, { withFileTypes: true });
223
+ for (const entry of entries) {
224
+ if (!entry.isDirectory() || entry.name.startsWith("."))
225
+ continue;
226
+ const skillPath = join(expandedDir, entry.name);
227
+ const skillMdPath = join(skillPath, "SKILL.md");
228
+ if (!existsSync(skillMdPath))
229
+ continue;
230
+ try {
231
+ const stat = statSync(skillMdPath);
232
+ const mtime = stat.mtimeMs;
233
+ const lastMtime = lastModified.get(skillPath);
234
+ if (!lastMtime) {
235
+ lastModified.set(skillPath, mtime);
236
+ onChange("add", skillPath);
237
+ }
238
+ else if (mtime > lastMtime) {
239
+ lastModified.set(skillPath, mtime);
240
+ onChange("change", skillPath);
241
+ }
242
+ }
243
+ catch {
244
+ // File might have been deleted
245
+ }
246
+ }
247
+ }
248
+ catch {
249
+ // Directory might not exist
250
+ }
251
+ }
252
+ };
253
+ const interval = setInterval(check, pollInterval);
254
+ // Return cleanup function
255
+ return () => clearInterval(interval);
256
+ }
257
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Skill Commands - /skill:name slash command handler
3
+ *
4
+ * Registers /skill:name commands for explicit skill invocation.
5
+ * Based on pi.dev skill command specification.
6
+ */
7
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
8
+ /**
9
+ * Skill command configuration
10
+ */
11
+ export interface SkillCommandConfig {
12
+ /** Enable skill commands */
13
+ enabled: boolean;
14
+ /** Prefix for skill commands (default: "skill:") */
15
+ prefix: string;
16
+ }
17
+ /**
18
+ * Default configuration
19
+ */
20
+ export declare const DEFAULT_COMMAND_CONFIG: SkillCommandConfig;
21
+ /**
22
+ * Initialize skill commands with ExtensionAPI
23
+ */
24
+ export declare function initSkillCommands(pi: ExtensionAPI, config?: Partial<SkillCommandConfig>): void;
25
+ /**
26
+ * Get skill index for system prompt injection
27
+ */
28
+ export declare function getSkillIndexForSystemPrompt(): string;
29
+ /**
30
+ * Refresh skill commands (re-register after skills change)
31
+ */
32
+ export declare function refreshSkillCommands(pi: ExtensionAPI, prefix?: string): void;
33
+ //# sourceMappingURL=skill-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-commands.d.ts","sourceRoot":"","sources":["../src/skill-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA6C,MAAM,iCAAiC,CAAC;AAI/G;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,kBAGpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,YAAY,EAChB,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAoCN;AA4MD;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAuBrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAQN"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Skill Commands - /skill:name slash command handler
3
+ *
4
+ * Registers /skill:name commands for explicit skill invocation.
5
+ * Based on pi.dev skill command specification.
6
+ */
7
+ import { getGlobalSkillRegistry } from "./loader.js";
8
+ import { scanForSkillsSync } from "./scanner.js";
9
+ /**
10
+ * Default configuration
11
+ */
12
+ export const DEFAULT_COMMAND_CONFIG = {
13
+ enabled: true,
14
+ prefix: "skill:",
15
+ };
16
+ /**
17
+ * Initialize skill commands with ExtensionAPI
18
+ */
19
+ export function initSkillCommands(pi, config) {
20
+ const cfg = { ...DEFAULT_COMMAND_CONFIG, ...config };
21
+ if (!cfg.enabled)
22
+ return;
23
+ const registry = getGlobalSkillRegistry();
24
+ // Initialize registry with existing skills
25
+ const result = scanForSkillsSync();
26
+ for (const skill of result.skills) {
27
+ registry.register(skill);
28
+ }
29
+ // Register /skill command for listing
30
+ pi.registerCommand("skill", {
31
+ description: "Interact with skills. Usage: /skill [list|search <query>|info <name>]",
32
+ handler: async (args, ctx) => {
33
+ const parts = args.trim().split(/\s+/);
34
+ const subcommand = parts[0] || "list";
35
+ const query = parts.slice(1).join(" ");
36
+ switch (subcommand) {
37
+ case "list":
38
+ return handleSkillList(registry, ctx);
39
+ case "search":
40
+ return handleSkillSearch(registry, query, ctx);
41
+ case "info":
42
+ return handleSkillInfo(registry, query, ctx);
43
+ default:
44
+ ctx.ui.notify(`Unknown subcommand: ${subcommand}. Use: /skill [list|search|info]`, "warning");
45
+ }
46
+ },
47
+ });
48
+ // Register individual skill commands dynamically
49
+ registerSkillCommands(pi, registry, cfg.prefix);
50
+ }
51
+ /**
52
+ * Register individual skill commands
53
+ */
54
+ function registerSkillCommands(pi, registry, prefix) {
55
+ // Get all registered skills
56
+ const skills = registry.list();
57
+ for (const skill of skills) {
58
+ const commandName = `${prefix}${skill.id}`;
59
+ // Skip if command name is too long or conflicts
60
+ if (commandName.length > 50)
61
+ continue;
62
+ // Register the command
63
+ try {
64
+ pi.registerCommand(commandName, {
65
+ description: skill.frontmatter.description,
66
+ handler: async (_skillArgs, ctx) => {
67
+ // Load the full skill content
68
+ const loaded = await registry.load(skill.id, {
69
+ loadReferences: true,
70
+ loadExamples: true,
71
+ });
72
+ if (!loaded) {
73
+ ctx.ui.notify(`Skill not found: ${skill.id}`, "error");
74
+ return;
75
+ }
76
+ // Build response with skill content
77
+ const response = [];
78
+ response.push(`# ${loaded.frontmatter.name}`);
79
+ response.push(`**${loaded.frontmatter.description}**`);
80
+ response.push("");
81
+ response.push("---");
82
+ response.push(loaded.body);
83
+ // Append references
84
+ if (loaded.references.length > 0) {
85
+ response.push("");
86
+ response.push("## References");
87
+ for (const ref of loaded.references) {
88
+ response.push(`- ${ref.relativePath}`);
89
+ }
90
+ }
91
+ // Show skill details
92
+ ctx.ui.notify(`Skill '${loaded.frontmatter.name}' - ${loaded.body.length} chars. ` +
93
+ `Use /skill info ${loaded.id} for full details.`, "info");
94
+ },
95
+ });
96
+ }
97
+ catch (err) {
98
+ // Skip if command registration fails (e.g., name conflict)
99
+ console.debug(`[SkillCommands] Skipped registering ${commandName}:`, err);
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Handle /skill list
105
+ */
106
+ async function handleSkillList(registry, ctx) {
107
+ const skills = registry.list();
108
+ if (skills.length === 0) {
109
+ ctx.ui.notify("No skills registered. Skills are loaded from ~/.pi-harness/skills/, skills/, or .agents/skills/", "info");
110
+ return;
111
+ }
112
+ const lines = ["# Available Skills", ""];
113
+ for (const skill of skills) {
114
+ const author = skill.hermes?.author ?? "unknown";
115
+ const usage = skill.hermes?.usage_count ?? 0;
116
+ lines.push(`## ${skill.frontmatter.name} ${author === "agent" ? "(agent)" : author === "curator" ? "(curator)" : ""}`);
117
+ lines.push(skill.frontmatter.description);
118
+ lines.push(`- Usage: ${usage}x`);
119
+ if (skill.hermes?.triggers?.length) {
120
+ lines.push(`- Triggers: ${skill.hermes.triggers.join(", ")}`);
121
+ }
122
+ lines.push("");
123
+ }
124
+ // Send as a message using the context's session if available
125
+ ctx.ui.notify(`Found ${skills.length} skills. Use /skill info <name> for details.`, "info");
126
+ }
127
+ /**
128
+ * Handle /skill search
129
+ */
130
+ async function handleSkillSearch(registry, query, ctx) {
131
+ if (!query) {
132
+ ctx.ui.notify("Usage: /skill search <query>", "warning");
133
+ return;
134
+ }
135
+ const results = registry.find(query, { threshold: 0.2 });
136
+ if (results.length === 0) {
137
+ ctx.ui.notify(`No skills found matching: ${query}`, "info");
138
+ return;
139
+ }
140
+ const lines = [`# Skills matching: ${query}`, ""];
141
+ for (const result of results.slice(0, 10)) {
142
+ lines.push(`## ${result.skill.frontmatter.name} (${Math.round(result.score * 100)}% match)`);
143
+ lines.push(result.skill.frontmatter.description);
144
+ if (result.matchedTriggers.length > 0) {
145
+ lines.push(`Matched: ${result.matchedTriggers.join(", ")}`);
146
+ }
147
+ lines.push("");
148
+ }
149
+ ctx.ui.notify(`Found ${results.length} matching skills. Use /skill info <name> for details.`, "info");
150
+ }
151
+ /**
152
+ * Handle /skill info
153
+ */
154
+ async function handleSkillInfo(registry, skillName, ctx) {
155
+ if (!skillName) {
156
+ ctx.ui.notify("Usage: /skill info <name>", "warning");
157
+ return;
158
+ }
159
+ const skill = registry.get(skillName);
160
+ if (!skill) {
161
+ ctx.ui.notify(`Skill not found: ${skillName}`, "error");
162
+ return;
163
+ }
164
+ // Load full content
165
+ const loaded = await registry.load(skill.id, { loadReferences: true });
166
+ if (!loaded) {
167
+ ctx.ui.notify(`Failed to load skill: ${skillName}`, "error");
168
+ return;
169
+ }
170
+ const lines = [];
171
+ lines.push(`# ${loaded.frontmatter.name}`);
172
+ lines.push("");
173
+ lines.push("**Description:** " + loaded.frontmatter.description);
174
+ if (loaded.frontmatter.version) {
175
+ lines.push("**Version:** " + loaded.frontmatter.version);
176
+ }
177
+ if (loaded.hermes?.author) {
178
+ lines.push("**Author:** " + loaded.hermes.author);
179
+ }
180
+ if (loaded.hermes?.confidence !== undefined) {
181
+ lines.push("**Confidence:** " + Math.round(loaded.hermes.confidence * 100) + "%");
182
+ }
183
+ if (loaded.hermes?.usage_count !== undefined) {
184
+ lines.push("**Used:** " + loaded.hermes.usage_count + " times");
185
+ }
186
+ lines.push("");
187
+ lines.push("## Content");
188
+ lines.push(loaded.body);
189
+ if (loaded.references.length > 0) {
190
+ lines.push("");
191
+ lines.push("## References");
192
+ for (const ref of loaded.references) {
193
+ lines.push(`- ${ref.relativePath}`);
194
+ }
195
+ }
196
+ if (loaded.hermes?.pitfalls?.length) {
197
+ lines.push("");
198
+ lines.push("## Pitfalls");
199
+ for (const pitfall of loaded.hermes.pitfalls) {
200
+ lines.push(`- **${pitfall.name}**: ${pitfall.why}`);
201
+ }
202
+ }
203
+ // Show skill content via notification (simplified approach)
204
+ ctx.ui.notify(`Skill '${loaded.frontmatter.name}' loaded with ${loaded.body.length} chars. Use /skill:${skill.id} to activate.`, "info");
205
+ }
206
+ /**
207
+ * Get skill index for system prompt injection
208
+ */
209
+ export function getSkillIndexForSystemPrompt() {
210
+ const registry = getGlobalSkillRegistry();
211
+ const skills = registry.list();
212
+ if (skills.length === 0) {
213
+ return "";
214
+ }
215
+ const lines = [];
216
+ lines.push("## Available Skills");
217
+ lines.push("");
218
+ for (const skill of skills) {
219
+ lines.push(`- **${skill.frontmatter.name}**: ${skill.frontmatter.description}`);
220
+ if (skill.hermes?.triggers?.length) {
221
+ lines.push(` Triggers: ${skill.hermes.triggers.join(", ")}`);
222
+ }
223
+ }
224
+ lines.push("");
225
+ lines.push("Use `/skill:name` to activate a skill.");
226
+ return lines.join("\n");
227
+ }
228
+ /**
229
+ * Refresh skill commands (re-register after skills change)
230
+ */
231
+ export function refreshSkillCommands(pi, prefix) {
232
+ const cfg = {
233
+ enabled: true,
234
+ prefix: prefix ?? DEFAULT_COMMAND_CONFIG.prefix,
235
+ };
236
+ const registry = getGlobalSkillRegistry();
237
+ registerSkillCommands(pi, registry, cfg.prefix);
238
+ }
239
+ //# sourceMappingURL=skill-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-commands.js","sourceRoot":"","sources":["../src/skill-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAYjD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAuB;IACxD,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAgB,EAChB,MAAoC;IAEpC,MAAM,GAAG,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAAC;IAErD,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO;IAEzB,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAE1C,2CAA2C;IAC3C,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,sCAAsC;IACtC,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE;QAC1B,WAAW,EAAE,uEAAuE;QACpF,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,GAAqB,EAAE,EAAE;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEvC,QAAQ,UAAU,EAAE,CAAC;gBACnB,KAAK,MAAM;oBACT,OAAO,eAAe,CAAC,QAAQ,EAAE,GAA8B,CAAC,CAAC;gBACnE,KAAK,QAAQ;oBACX,OAAO,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE,GAA8B,CAAC,CAAC;gBAC5E,KAAK,MAAM;oBACT,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,GAA8B,CAAC,CAAC;gBAC1E;oBACE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,uBAAuB,UAAU,kCAAkC,EAAE,SAAS,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,iDAAiD;IACjD,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,EAAgB,EAChB,QAAmD,EACnD,MAAc;IAEd,4BAA4B;IAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;QAE3C,gDAAgD;QAChD,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE;YAAE,SAAS;QAEtC,uBAAuB;QACvB,IAAI,CAAC;YACH,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE;gBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,WAAW;gBAC1C,OAAO,EAAE,KAAK,EAAE,UAAkB,EAAE,GAAqB,EAAE,EAAE;oBAC3D,8BAA8B;oBAC9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;wBAC3C,cAAc,EAAE,IAAI;wBACpB,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;oBAEH,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;wBACvD,OAAO;oBACT,CAAC;oBAED,oCAAoC;oBACpC,MAAM,QAAQ,GAAa,EAAE,CAAC;oBAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;oBACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAClB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAE3B,oBAAoB;oBACpB,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAClB,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;4BACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;oBAED,qBAAqB;oBACrB,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,UAAU,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,UAAU;wBACpE,mBAAmB,MAAM,CAAC,EAAE,oBAAoB,EAChD,MAAM,CACP,CAAC;gBACJ,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2DAA2D;YAC3D,OAAO,CAAC,KAAK,CAAC,uCAAuC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,QAAmD,EACnD,GAA4B;IAE5B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,iGAAiG,EAAE,MAAM,CAAC,CAAC;QACzH,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAEnD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvH,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,6DAA6D;IAC7D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,MAAM,8CAA8C,EAAE,MAAM,CAAC,CAAC;AAC9F,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAmD,EACnD,KAAa,EACb,GAA4B;IAE5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAGzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,6BAA6B,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAGD,MAAM,KAAK,GAAa,CAAC,sBAAsB,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAE5D,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,MAAM,uDAAuD,EAAE,MAAM,CAAC,CAAC;AACxG,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,QAAmD,EACnD,SAAiB,EACjB,GAA4B;IAE5B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAExB,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,WAAW,CAAC,IAAI,iBAAiB,MAAM,CAAC,IAAI,CAAC,MAAM,sBAAsB,KAAK,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAC3I,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QAChF,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,EAAgB,EAChB,MAAe;IAEf,MAAM,GAAG,GAAuB;QAC9B,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,MAAM,IAAI,sBAAsB,CAAC,MAAM;KAChD,CAAC;IAEF,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Skill Tool - Agent-accessible skill management
3
+ *
4
+ * Tool for agent to create, update, delete skills autonomously.
5
+ * Implements Hermes-style skill management with write_approval gate.
6
+ *
7
+ * Note: Full tool integration requires matching handler registration.
8
+ */
9
+ import { getGlobalSkillRegistry } from "./loader.js";
10
+ /**
11
+ * Skill tool configuration
12
+ */
13
+ export interface SkillToolConfig {
14
+ /** Enable skill tool */
15
+ enabled: boolean;
16
+ /** Require approval for writes */
17
+ writeApproval: boolean;
18
+ /** Auto-create directory if missing */
19
+ autoCreateDir: boolean;
20
+ }
21
+ /**
22
+ * Default configuration
23
+ */
24
+ export declare const DEFAULT_TOOL_CONFIG: SkillToolConfig;
25
+ /**
26
+ * Skill manage tool parameters
27
+ */
28
+ export interface SkillManageParams {
29
+ action: "create" | "patch" | "delete" | "list" | "info" | "search" | "lint" | "write_file" | "remove_file";
30
+ name?: string;
31
+ body?: string;
32
+ description?: string;
33
+ content?: string;
34
+ file?: string;
35
+ old_text?: string;
36
+ author?: "agent" | "user" | "curator";
37
+ }
38
+ /**
39
+ * Skill manage result
40
+ */
41
+ export interface SkillManageResult {
42
+ success: boolean;
43
+ message: string;
44
+ skillId?: string;
45
+ details?: Record<string, unknown>;
46
+ }
47
+ /**
48
+ * Create skill tool definition (for registration with ExtensionAPI)
49
+ */
50
+ export declare function createSkillToolDefinition(handler: (params: SkillManageParams) => Promise<SkillManageResult>): {
51
+ name: string;
52
+ label: string;
53
+ description: string;
54
+ parameters: {
55
+ type: "object";
56
+ properties: {
57
+ action: {
58
+ type: "string";
59
+ enum: readonly ["create", "patch", "delete", "list", "info", "search", "lint", "write_file", "remove_file"];
60
+ description: string;
61
+ };
62
+ name: {
63
+ type: "string";
64
+ description: string;
65
+ };
66
+ body: {
67
+ type: "string";
68
+ description: string;
69
+ };
70
+ description: {
71
+ type: "string";
72
+ description: string;
73
+ };
74
+ content: {
75
+ type: "string";
76
+ description: string;
77
+ };
78
+ file: {
79
+ type: "string";
80
+ description: string;
81
+ };
82
+ old_text: {
83
+ type: "string";
84
+ description: string;
85
+ };
86
+ author: {
87
+ type: "string";
88
+ enum: readonly ["agent", "user", "curator"];
89
+ description: string;
90
+ };
91
+ };
92
+ required: readonly ["action"];
93
+ };
94
+ handler: (params: SkillManageParams) => Promise<SkillManageResult>;
95
+ };
96
+ /**
97
+ * Handle skill creation
98
+ */
99
+ export declare function handleSkillCreate(registry: ReturnType<typeof getGlobalSkillRegistry>, name: string, body?: string, description?: string, author?: "agent" | "user" | "curator"): SkillManageResult;
100
+ /**
101
+ * Handle skill listing
102
+ */
103
+ export declare function handleSkillList(registry: ReturnType<typeof getGlobalSkillRegistry>): SkillManageResult;
104
+ /**
105
+ * Handle skill info
106
+ */
107
+ export declare function handleSkillInfo(registry: ReturnType<typeof getGlobalSkillRegistry>, name: string): SkillManageResult;
108
+ /**
109
+ * Handle skill search
110
+ */
111
+ export declare function handleSkillSearch(registry: ReturnType<typeof getGlobalSkillRegistry>, query: string): SkillManageResult;
112
+ /**
113
+ * Handle skill linting
114
+ */
115
+ export declare function handleSkillLint(registry: ReturnType<typeof getGlobalSkillRegistry>, name: string): SkillManageResult;
116
+ /**
117
+ * Process skill manage action
118
+ */
119
+ export declare function processSkillManage(params: SkillManageParams, registry?: ReturnType<typeof getGlobalSkillRegistry>): Promise<SkillManageResult>;
120
+ //# sourceMappingURL=skill-tool.d.ts.map