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 @@
1
+ {"version":3,"file":"skill-tool.d.ts","sourceRoot":"","sources":["../src/skill-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
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
+ import { lintSkill } from "./linter.js";
11
+ /**
12
+ * Default configuration
13
+ */
14
+ export const DEFAULT_TOOL_CONFIG = {
15
+ enabled: true,
16
+ writeApproval: false,
17
+ autoCreateDir: true,
18
+ };
19
+ /**
20
+ * Create skill tool definition (for registration with ExtensionAPI)
21
+ */
22
+ export function createSkillToolDefinition(handler) {
23
+ return {
24
+ name: "skill_manage",
25
+ label: "Skill Manager",
26
+ description: "Create, update, delete, or view skills. Skills capture procedural knowledge for reuse.",
27
+ parameters: {
28
+ type: "object",
29
+ properties: {
30
+ action: {
31
+ type: "string",
32
+ enum: ["create", "patch", "delete", "list", "info", "search", "lint", "write_file", "remove_file"],
33
+ description: "Action to perform",
34
+ },
35
+ name: {
36
+ type: "string",
37
+ description: "Skill name (kebab-case, e.g., 'code-review')",
38
+ },
39
+ body: {
40
+ type: "string",
41
+ description: "Full skill content (SKILL.md body)",
42
+ },
43
+ description: {
44
+ type: "string",
45
+ description: "Skill description for routing",
46
+ },
47
+ content: {
48
+ type: "string",
49
+ description: "Content for file operations",
50
+ },
51
+ file: {
52
+ type: "string",
53
+ description: "File path for write_file/remove_file",
54
+ },
55
+ old_text: {
56
+ type: "string",
57
+ description: "Text to match for replacement",
58
+ },
59
+ author: {
60
+ type: "string",
61
+ enum: ["agent", "user", "curator"],
62
+ description: "Author of the skill",
63
+ },
64
+ },
65
+ required: ["action"],
66
+ },
67
+ handler,
68
+ };
69
+ }
70
+ /**
71
+ * Handle skill creation
72
+ */
73
+ export function handleSkillCreate(registry, name, body, description, author = "agent") {
74
+ if (!name) {
75
+ return { success: false, message: "Skill name is required" };
76
+ }
77
+ // Validate name
78
+ const nameRegex = /^[a-z0-9]+(-[a-z0-9]+)*$/;
79
+ if (!nameRegex.test(name)) {
80
+ return {
81
+ success: false,
82
+ message: `Invalid name '${name}'. Must be kebab-case (e.g., 'code-review')`,
83
+ };
84
+ }
85
+ // Check if skill already exists
86
+ if (registry.has(name)) {
87
+ return { success: false, message: `Skill '${name}' already exists. Use 'patch' to update.` };
88
+ }
89
+ // Build skill content
90
+ const skillBody = body || description || "";
91
+ const skillContent = `---
92
+ name: ${name}
93
+ description: ${description || `Skill: ${name}`}
94
+ author: ${author}
95
+ version: 1.0.0
96
+ confidence: 0.5
97
+ ---
98
+
99
+ ${skillBody}
100
+ `;
101
+ return {
102
+ success: true,
103
+ message: `Skill '${name}' created. Content: ${skillContent.length} chars.`,
104
+ skillId: name,
105
+ };
106
+ }
107
+ /**
108
+ * Handle skill listing
109
+ */
110
+ export function handleSkillList(registry) {
111
+ const skills = registry.list();
112
+ if (skills.length === 0) {
113
+ return { success: true, message: "No skills registered." };
114
+ }
115
+ const lines = ["# Skills", ""];
116
+ for (const skill of skills) {
117
+ lines.push(`- **${skill.frontmatter.name}**: ${skill.frontmatter.description}`);
118
+ if (skill.hermes?.author) {
119
+ lines.push(` Author: ${skill.hermes.author}`);
120
+ }
121
+ }
122
+ return {
123
+ success: true,
124
+ message: lines.join("\n"),
125
+ details: { count: skills.length },
126
+ };
127
+ }
128
+ /**
129
+ * Handle skill info
130
+ */
131
+ export function handleSkillInfo(registry, name) {
132
+ if (!name) {
133
+ return { success: false, message: "Skill name is required" };
134
+ }
135
+ const skill = registry.get(name);
136
+ if (!skill) {
137
+ return { success: false, message: `Skill '${name}' not found` };
138
+ }
139
+ const lines = [];
140
+ lines.push(`# ${skill.frontmatter.name}`);
141
+ lines.push(`**${skill.frontmatter.description}**`);
142
+ lines.push("");
143
+ lines.push("---");
144
+ lines.push(skill.body);
145
+ return {
146
+ success: true,
147
+ message: lines.join("\n"),
148
+ skillId: skill.id,
149
+ };
150
+ }
151
+ /**
152
+ * Handle skill search
153
+ */
154
+ export function handleSkillSearch(registry, query) {
155
+ if (!query) {
156
+ return { success: false, message: "Search query required" };
157
+ }
158
+ const results = registry.find(query, { threshold: 0.2 });
159
+ if (results.length === 0) {
160
+ return { success: true, message: `No skills found matching: ${query}` };
161
+ }
162
+ const lines = [`# Skills matching: ${query}`, ""];
163
+ for (const result of results.slice(0, 10)) {
164
+ lines.push(`- **${result.skill.frontmatter.name}** (${Math.round(result.score * 100)}% match)`);
165
+ lines.push(` ${result.skill.frontmatter.description}`);
166
+ }
167
+ return {
168
+ success: true,
169
+ message: lines.join("\n"),
170
+ details: { count: results.length },
171
+ };
172
+ }
173
+ /**
174
+ * Handle skill linting
175
+ */
176
+ export function handleSkillLint(registry, name) {
177
+ if (!name) {
178
+ return { success: false, message: "Skill name required for linting" };
179
+ }
180
+ const skill = registry.get(name);
181
+ if (!skill) {
182
+ return { success: false, message: `Skill '${name}' not found` };
183
+ }
184
+ const results = lintSkill(skill);
185
+ if (results.length === 0) {
186
+ return {
187
+ success: true,
188
+ message: `✓ Skill '${name}' passed linting with no issues.`,
189
+ };
190
+ }
191
+ const lines = [`✗ Skill '${name}' linting issues:`, ""];
192
+ for (const result of results) {
193
+ const icon = result.severity === "error" ? "✗" : result.severity === "warning" ? "⚠" : "ℹ";
194
+ lines.push(`${icon} [${result.severity}] ${result.rule}: ${result.message}`);
195
+ }
196
+ return {
197
+ success: false,
198
+ message: lines.join("\n"),
199
+ details: { issues: results.length },
200
+ };
201
+ }
202
+ /**
203
+ * Process skill manage action
204
+ */
205
+ export async function processSkillManage(params, registry) {
206
+ const reg = registry || getGlobalSkillRegistry();
207
+ const { action, name, body, description, author = "agent" } = params;
208
+ try {
209
+ switch (action) {
210
+ case "create":
211
+ return handleSkillCreate(reg, name, body, description, author);
212
+ case "list":
213
+ return handleSkillList(reg);
214
+ case "info":
215
+ return handleSkillInfo(reg, name);
216
+ case "search":
217
+ return handleSkillSearch(reg, name);
218
+ case "lint":
219
+ return handleSkillLint(reg, name);
220
+ case "patch":
221
+ return { success: false, message: "Patch not implemented yet" };
222
+ case "delete":
223
+ return { success: false, message: "Delete not implemented yet" };
224
+ case "write_file":
225
+ return { success: false, message: "Write file not implemented yet" };
226
+ case "remove_file":
227
+ return { success: false, message: "Remove file not implemented yet" };
228
+ default:
229
+ return { success: false, message: `Unknown action: ${action}` };
230
+ }
231
+ }
232
+ catch (err) {
233
+ return {
234
+ success: false,
235
+ message: err instanceof Error ? err.message : String(err),
236
+ };
237
+ }
238
+ }
239
+ //# sourceMappingURL=skill-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-tool.js","sourceRoot":"","sources":["../src/skill-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Skill Versioning
3
+ *
4
+ * Track skill changes, store diff history, support rollback.
5
+ * Based on Hermes Agent's skill versioning.
6
+ */
7
+ /**
8
+ * Skill version entry
9
+ */
10
+ export interface SkillVersion {
11
+ id: string;
12
+ skillId: string;
13
+ version: string;
14
+ createdAt: string;
15
+ author: "agent" | "user" | "curator";
16
+ changes: SkillChanges;
17
+ content: string;
18
+ message?: string;
19
+ }
20
+ /**
21
+ * Skill changes (diff summary)
22
+ */
23
+ export interface SkillChanges {
24
+ frontmatter?: {
25
+ added?: Record<string, unknown>;
26
+ removed?: Record<string, unknown>;
27
+ changed?: Record<string, {
28
+ from: unknown;
29
+ to: unknown;
30
+ }>;
31
+ };
32
+ body?: {
33
+ linesAdded: number;
34
+ linesRemoved: number;
35
+ summary: string;
36
+ };
37
+ references?: {
38
+ added: string[];
39
+ removed: string[];
40
+ };
41
+ }
42
+ /**
43
+ * Skill versioning store
44
+ */
45
+ export interface SkillVersioningStore {
46
+ versions: SkillVersion[];
47
+ currentVersion: string;
48
+ }
49
+ /**
50
+ * Skill versioning configuration
51
+ */
52
+ export interface SkillVersioningConfig {
53
+ /** Enable versioning */
54
+ enabled: boolean;
55
+ /** Directory for version storage */
56
+ versionsDir: string;
57
+ /** Max versions to keep per skill */
58
+ maxVersions: number;
59
+ }
60
+ /**
61
+ * Default configuration
62
+ */
63
+ export declare const DEFAULT_VERSIONING_CONFIG: SkillVersioningConfig;
64
+ /**
65
+ * Skill versioning class
66
+ */
67
+ export declare class SkillVersioning {
68
+ private config;
69
+ private versionsDir;
70
+ private cache;
71
+ constructor(config?: Partial<SkillVersioningConfig>);
72
+ /**
73
+ * Record a new version
74
+ */
75
+ recordVersion(skillId: string, content: string, author?: "agent" | "user" | "curator", message?: string): SkillVersion;
76
+ /**
77
+ * Get versions for a skill
78
+ */
79
+ getVersions(skillId: string): SkillVersion[];
80
+ /**
81
+ * Get specific version
82
+ */
83
+ getVersion(skillId: string, version: string): SkillVersion | null;
84
+ /**
85
+ * Get latest version
86
+ */
87
+ getLatestVersion(skillId: string): SkillVersion | null;
88
+ /**
89
+ * Rollback to previous version
90
+ */
91
+ rollback(skillId: string, targetVersion: string): SkillVersion | null;
92
+ /**
93
+ * Get diff between versions
94
+ */
95
+ getDiff(skillId: string, fromVersion: string, toVersion: string): {
96
+ from: SkillVersion | null;
97
+ to: SkillVersion | null;
98
+ changes: SkillChanges | null;
99
+ };
100
+ /**
101
+ * Save version to disk
102
+ */
103
+ private saveVersion;
104
+ /**
105
+ * Trim old versions
106
+ */
107
+ private trimVersions;
108
+ /**
109
+ * List all skills with versions
110
+ */
111
+ listSkills(): string[];
112
+ /**
113
+ * Get version history summary
114
+ */
115
+ getHistorySummary(skillId: string): {
116
+ totalVersions: number;
117
+ authors: Record<string, number>;
118
+ lastModified: string | null;
119
+ };
120
+ }
121
+ export declare function getGlobalSkillVersioning(): SkillVersioning;
122
+ export declare function createSkillVersioning(config?: Partial<SkillVersioningConfig>): SkillVersioning;
123
+ //# sourceMappingURL=skill-versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-versioning.d.ts","sourceRoot":"","sources":["../src/skill-versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Skill Versioning
3
+ *
4
+ * Track skill changes, store diff history, support rollback.
5
+ * Based on Hermes Agent's skill versioning.
6
+ */
7
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ import { homedir } from "node:os";
10
+ /**
11
+ * Default configuration
12
+ */
13
+ export const DEFAULT_VERSIONING_CONFIG = {
14
+ enabled: true,
15
+ versionsDir: "~/.pi-harness/skill-versions",
16
+ maxVersions: 50,
17
+ };
18
+ /**
19
+ * Expand path with ~
20
+ */
21
+ function expandPath(path) {
22
+ if (path.startsWith("~/")) {
23
+ return join(homedir(), path.slice(2));
24
+ }
25
+ return path;
26
+ }
27
+ /**
28
+ * Generate changes summary
29
+ */
30
+ function generateChanges(oldContent, newContent) {
31
+ const oldLines = oldContent.split("\n");
32
+ const newLines = newContent.split("\n");
33
+ // Simple line diff
34
+ let linesAdded = 0;
35
+ let linesRemoved = 0;
36
+ const oldSet = new Set(oldLines);
37
+ const newSet = new Set(newLines);
38
+ for (const line of newLines) {
39
+ if (!oldSet.has(line)) {
40
+ linesAdded++;
41
+ }
42
+ }
43
+ for (const line of oldLines) {
44
+ if (!newSet.has(line)) {
45
+ linesRemoved++;
46
+ }
47
+ }
48
+ // Generate summary
49
+ let summary = "";
50
+ if (linesAdded > 0 && linesRemoved > 0) {
51
+ summary = `Modified ${linesAdded} lines, removed ${linesRemoved}`;
52
+ }
53
+ else if (linesAdded > 0) {
54
+ summary = `Added ${linesAdded} lines`;
55
+ }
56
+ else if (linesRemoved > 0) {
57
+ summary = `Removed ${linesRemoved} lines`;
58
+ }
59
+ else {
60
+ summary = "Minor changes";
61
+ }
62
+ return {
63
+ body: {
64
+ linesAdded,
65
+ linesRemoved,
66
+ summary,
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Skill versioning class
72
+ */
73
+ export class SkillVersioning {
74
+ config;
75
+ versionsDir;
76
+ cache = new Map();
77
+ constructor(config) {
78
+ this.config = { ...DEFAULT_VERSIONING_CONFIG, ...config };
79
+ this.versionsDir = expandPath(this.config.versionsDir);
80
+ mkdirSync(this.versionsDir, { recursive: true });
81
+ }
82
+ /**
83
+ * Record a new version
84
+ */
85
+ recordVersion(skillId, content, author = "agent", message) {
86
+ // Get current version number
87
+ const versions = this.getVersions(skillId);
88
+ const lastVersion = versions[0];
89
+ const lastVersionNum = lastVersion
90
+ ? parseInt(lastVersion.version.split(".")[2] || "0", 10)
91
+ : 0;
92
+ const newVersion = `1.0.${lastVersionNum + 1}`;
93
+ // Generate changes
94
+ const changes = lastVersion
95
+ ? generateChanges(lastVersion.content, content)
96
+ : { body: { linesAdded: content.split("\n").length, linesRemoved: 0, summary: "Initial version" } };
97
+ const version = {
98
+ id: `${skillId}_v${Date.now()}`,
99
+ skillId,
100
+ version: newVersion,
101
+ createdAt: new Date().toISOString(),
102
+ author,
103
+ changes,
104
+ content,
105
+ message,
106
+ };
107
+ // Add to cache and save
108
+ versions.unshift(version);
109
+ this.cache.set(skillId, versions);
110
+ this.saveVersion(skillId, versions);
111
+ // Trim old versions
112
+ this.trimVersions(skillId);
113
+ return version;
114
+ }
115
+ /**
116
+ * Get versions for a skill
117
+ */
118
+ getVersions(skillId) {
119
+ if (this.cache.has(skillId)) {
120
+ return this.cache.get(skillId);
121
+ }
122
+ const filePath = join(this.versionsDir, `${skillId}.json`);
123
+ if (!existsSync(filePath)) {
124
+ return [];
125
+ }
126
+ try {
127
+ const content = readFileSync(filePath, "utf-8");
128
+ const versions = JSON.parse(content);
129
+ this.cache.set(skillId, versions);
130
+ return versions;
131
+ }
132
+ catch (err) {
133
+ console.error(`[SkillVersioning] Failed to load ${filePath}:`, err);
134
+ return [];
135
+ }
136
+ }
137
+ /**
138
+ * Get specific version
139
+ */
140
+ getVersion(skillId, version) {
141
+ const versions = this.getVersions(skillId);
142
+ return versions.find((v) => v.version === version) ?? null;
143
+ }
144
+ /**
145
+ * Get latest version
146
+ */
147
+ getLatestVersion(skillId) {
148
+ const versions = this.getVersions(skillId);
149
+ return versions[0] ?? null;
150
+ }
151
+ /**
152
+ * Rollback to previous version
153
+ */
154
+ rollback(skillId, targetVersion) {
155
+ const version = this.getVersion(skillId, targetVersion);
156
+ if (!version) {
157
+ return null;
158
+ }
159
+ // Record the rollback as a new version
160
+ return this.recordVersion(skillId, version.content, "user", `Rolled back to version ${targetVersion}`);
161
+ }
162
+ /**
163
+ * Get diff between versions
164
+ */
165
+ getDiff(skillId, fromVersion, toVersion) {
166
+ const from = this.getVersion(skillId, fromVersion);
167
+ const to = this.getVersion(skillId, toVersion);
168
+ if (!from || !to) {
169
+ return { from: null, to: null, changes: null };
170
+ }
171
+ const changes = generateChanges(from.content, to.content);
172
+ return { from, to, changes };
173
+ }
174
+ /**
175
+ * Save version to disk
176
+ */
177
+ saveVersion(skillId, versions) {
178
+ const filePath = join(this.versionsDir, `${skillId}.json`);
179
+ try {
180
+ writeFileSync(filePath, JSON.stringify(versions, null, 2), "utf-8");
181
+ }
182
+ catch (err) {
183
+ console.error(`[SkillVersioning] Failed to save ${filePath}:`, err);
184
+ }
185
+ }
186
+ /**
187
+ * Trim old versions
188
+ */
189
+ trimVersions(skillId) {
190
+ const versions = this.cache.get(skillId);
191
+ if (!versions || versions.length <= this.config.maxVersions) {
192
+ return;
193
+ }
194
+ const trimmed = versions.slice(0, this.config.maxVersions);
195
+ this.cache.set(skillId, trimmed);
196
+ this.saveVersion(skillId, trimmed);
197
+ }
198
+ /**
199
+ * List all skills with versions
200
+ */
201
+ listSkills() {
202
+ try {
203
+ const { readdirSync } = require("node:fs");
204
+ const files = readdirSync(this.versionsDir);
205
+ return files
206
+ .filter((f) => f.endsWith(".json"))
207
+ .map((f) => f.replace(".json", ""));
208
+ }
209
+ catch (err) {
210
+ return [];
211
+ }
212
+ }
213
+ /**
214
+ * Get version history summary
215
+ */
216
+ getHistorySummary(skillId) {
217
+ const versions = this.getVersions(skillId);
218
+ const authors = {};
219
+ for (const v of versions) {
220
+ authors[v.author] = (authors[v.author] || 0) + 1;
221
+ }
222
+ return {
223
+ totalVersions: versions.length,
224
+ authors,
225
+ lastModified: versions[0]?.createdAt ?? null,
226
+ };
227
+ }
228
+ }
229
+ // Global instance
230
+ let globalVersioning = null;
231
+ export function getGlobalSkillVersioning() {
232
+ if (!globalVersioning) {
233
+ globalVersioning = new SkillVersioning();
234
+ }
235
+ return globalVersioning;
236
+ }
237
+ export function createSkillVersioning(config) {
238
+ return new SkillVersioning(config);
239
+ }
240
+ //# sourceMappingURL=skill-versioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-versioning.js","sourceRoot":"","sources":["../src/skill-versioning.ts"],"names":[],"mappings":"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"}