skillpkg-core 0.5.4 → 0.5.7

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 (150) hide show
  1. package/dist/adapters/adapter-manager.d.ts +51 -0
  2. package/dist/adapters/adapter-manager.d.ts.map +1 -0
  3. package/dist/adapters/adapter-manager.js +147 -0
  4. package/dist/adapters/adapter-manager.js.map +1 -0
  5. package/dist/adapters/base.d.ts.map +1 -1
  6. package/dist/adapters/base.js +14 -3
  7. package/dist/adapters/base.js.map +1 -1
  8. package/dist/adapters/index.d.ts +1 -1
  9. package/dist/adapters/index.d.ts.map +1 -1
  10. package/dist/adapters/index.js +1 -1
  11. package/dist/adapters/index.js.map +1 -1
  12. package/dist/config/types.d.ts +3 -3
  13. package/dist/config/types.d.ts.map +1 -1
  14. package/dist/config/types.js +0 -1
  15. package/dist/config/types.js.map +1 -1
  16. package/dist/discovery/discovery-manager.d.ts +55 -0
  17. package/dist/discovery/discovery-manager.d.ts.map +1 -0
  18. package/dist/discovery/discovery-manager.js +217 -0
  19. package/dist/discovery/discovery-manager.js.map +1 -0
  20. package/dist/discovery/index.d.ts +20 -0
  21. package/dist/discovery/index.d.ts.map +1 -0
  22. package/dist/discovery/index.js +21 -0
  23. package/dist/discovery/index.js.map +1 -0
  24. package/dist/discovery/manager.d.ts +53 -0
  25. package/dist/discovery/manager.d.ts.map +1 -0
  26. package/dist/discovery/manager.js +203 -0
  27. package/dist/discovery/manager.js.map +1 -0
  28. package/dist/discovery/providers/awesome.d.ts +72 -0
  29. package/dist/discovery/providers/awesome.d.ts.map +1 -0
  30. package/dist/discovery/providers/awesome.js +214 -0
  31. package/dist/discovery/providers/awesome.js.map +1 -0
  32. package/dist/discovery/providers/github.d.ts +44 -0
  33. package/dist/discovery/providers/github.d.ts.map +1 -0
  34. package/dist/discovery/providers/github.js +82 -0
  35. package/dist/discovery/providers/github.js.map +1 -0
  36. package/dist/discovery/providers/index.d.ts +9 -0
  37. package/dist/discovery/providers/index.d.ts.map +1 -0
  38. package/dist/discovery/providers/index.js +9 -0
  39. package/dist/discovery/providers/index.js.map +1 -0
  40. package/dist/discovery/providers/local.d.ts +38 -0
  41. package/dist/discovery/providers/local.d.ts.map +1 -0
  42. package/dist/discovery/providers/local.js +75 -0
  43. package/dist/discovery/providers/local.js.map +1 -0
  44. package/dist/discovery/providers/priority.d.ts +89 -0
  45. package/dist/discovery/providers/priority.d.ts.map +1 -0
  46. package/dist/discovery/providers/priority.js +258 -0
  47. package/dist/discovery/providers/priority.js.map +1 -0
  48. package/dist/discovery/providers/skillsmp.d.ts +66 -0
  49. package/dist/discovery/providers/skillsmp.d.ts.map +1 -0
  50. package/dist/discovery/providers/skillsmp.js +134 -0
  51. package/dist/discovery/providers/skillsmp.js.map +1 -0
  52. package/dist/discovery/types.d.ts +108 -0
  53. package/dist/discovery/types.d.ts.map +1 -0
  54. package/dist/discovery/types.js +5 -0
  55. package/dist/discovery/types.js.map +1 -0
  56. package/dist/doctor/doctor.d.ts +62 -0
  57. package/dist/doctor/doctor.d.ts.map +1 -0
  58. package/dist/doctor/doctor.js +399 -0
  59. package/dist/doctor/doctor.js.map +1 -0
  60. package/dist/doctor/index.d.ts +6 -0
  61. package/dist/doctor/index.d.ts.map +1 -0
  62. package/dist/doctor/index.js +6 -0
  63. package/dist/doctor/index.js.map +1 -0
  64. package/dist/doctor/types.d.ts +68 -0
  65. package/dist/doctor/types.d.ts.map +1 -0
  66. package/dist/doctor/types.js +2 -0
  67. package/dist/doctor/types.js.map +1 -0
  68. package/dist/fetcher/fetcher.d.ts.map +1 -1
  69. package/dist/fetcher/fetcher.js +265 -25
  70. package/dist/fetcher/fetcher.js.map +1 -1
  71. package/dist/fetcher/source-parser.d.ts +8 -6
  72. package/dist/fetcher/source-parser.d.ts.map +1 -1
  73. package/dist/fetcher/source-parser.js +37 -16
  74. package/dist/fetcher/source-parser.js.map +1 -1
  75. package/dist/fetcher/types.d.ts +17 -4
  76. package/dist/fetcher/types.d.ts.map +1 -1
  77. package/dist/fetcher/types.js.map +1 -1
  78. package/dist/importer/importer.js +1 -1
  79. package/dist/importer/importer.js.map +1 -1
  80. package/dist/index.d.ts +4 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +7 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/installer/installer.d.ts +1 -1
  85. package/dist/installer/installer.d.ts.map +1 -1
  86. package/dist/installer/installer.js +21 -13
  87. package/dist/installer/installer.js.map +1 -1
  88. package/dist/installer/types.d.ts +15 -13
  89. package/dist/installer/types.d.ts.map +1 -1
  90. package/dist/matching/engine.d.ts +57 -0
  91. package/dist/matching/engine.d.ts.map +1 -0
  92. package/dist/matching/engine.js +419 -0
  93. package/dist/matching/engine.js.map +1 -0
  94. package/dist/matching/index.d.ts +9 -0
  95. package/dist/matching/index.d.ts.map +1 -0
  96. package/dist/matching/index.js +8 -0
  97. package/dist/matching/index.js.map +1 -0
  98. package/dist/matching/types.d.ts +91 -0
  99. package/dist/matching/types.d.ts.map +1 -0
  100. package/dist/matching/types.js +13 -0
  101. package/dist/matching/types.js.map +1 -0
  102. package/dist/parser/schema.d.ts +61 -8
  103. package/dist/parser/schema.d.ts.map +1 -1
  104. package/dist/parser/schema.js +59 -9
  105. package/dist/parser/schema.js.map +1 -1
  106. package/dist/resolver/dependency-resolver.d.ts.map +1 -1
  107. package/dist/resolver/dependency-resolver.js +15 -3
  108. package/dist/resolver/dependency-resolver.js.map +1 -1
  109. package/dist/resolver/index.d.ts +1 -1
  110. package/dist/resolver/index.d.ts.map +1 -1
  111. package/dist/resolver/index.js.map +1 -1
  112. package/dist/resolver/types.d.ts +13 -0
  113. package/dist/resolver/types.d.ts.map +1 -1
  114. package/dist/skill/reader.d.ts.map +1 -1
  115. package/dist/skill/reader.js +12 -11
  116. package/dist/skill/reader.js.map +1 -1
  117. package/dist/skill/types.d.ts +28 -2
  118. package/dist/skill/types.d.ts.map +1 -1
  119. package/dist/state/state-manager.d.ts +19 -0
  120. package/dist/state/state-manager.d.ts.map +1 -1
  121. package/dist/state/state-manager.js +50 -0
  122. package/dist/state/state-manager.js.map +1 -1
  123. package/dist/store/config.d.ts.map +1 -1
  124. package/dist/store/config.js +7 -0
  125. package/dist/store/config.js.map +1 -1
  126. package/dist/store/index.d.ts +2 -2
  127. package/dist/store/index.d.ts.map +1 -1
  128. package/dist/store/index.js +1 -1
  129. package/dist/store/index.js.map +1 -1
  130. package/dist/store/manager.d.ts +2 -0
  131. package/dist/store/manager.d.ts.map +1 -1
  132. package/dist/store/manager.js +19 -1
  133. package/dist/store/manager.js.map +1 -1
  134. package/dist/store/store-manager.d.ts +123 -0
  135. package/dist/store/store-manager.d.ts.map +1 -0
  136. package/dist/store/store-manager.js +312 -0
  137. package/dist/store/store-manager.js.map +1 -0
  138. package/dist/syncer/syncer.d.ts +4 -0
  139. package/dist/syncer/syncer.d.ts.map +1 -1
  140. package/dist/syncer/syncer.js +91 -27
  141. package/dist/syncer/syncer.js.map +1 -1
  142. package/dist/syncer/types.d.ts +16 -8
  143. package/dist/syncer/types.d.ts.map +1 -1
  144. package/dist/syncer/types.js +29 -32
  145. package/dist/syncer/types.js.map +1 -1
  146. package/dist/types.d.ts +33 -0
  147. package/dist/types.d.ts.map +1 -1
  148. package/dist/types.js +9 -2
  149. package/dist/types.js.map +1 -1
  150. package/package.json +9 -9
@@ -0,0 +1,399 @@
1
+ /**
2
+ * Doctor class - diagnoses and repairs skillpkg state
3
+ *
4
+ * Leverages existing methods:
5
+ * - StateManager.getOrphanStates() - detect orphan state entries
6
+ * - StateManager.cleanOrphanStates() - remove orphan state entries
7
+ * - StateManager.cleanDanglingReferences() - clean dangling deps
8
+ * - StoreManager.cleanOrphans() - remove orphan registry entries
9
+ */
10
+ export class Doctor {
11
+ stateManager;
12
+ configManager;
13
+ storeManager;
14
+ constructor(stateManager, configManager, storeManager) {
15
+ this.stateManager = stateManager;
16
+ this.configManager = configManager;
17
+ this.storeManager = storeManager;
18
+ }
19
+ /**
20
+ * Diagnose the current state
21
+ * Uses StateManager.getOrphanStates() for consistency with existing API
22
+ */
23
+ async diagnose(projectPath) {
24
+ const issues = [];
25
+ // Load all data sources
26
+ const state = await this.stateManager.loadState(projectPath);
27
+ const registry = await this.storeManager.getRegistry();
28
+ const config = await this.configManager.loadProjectConfig(projectPath);
29
+ const diskSkills = await this.storeManager.getSkillNames();
30
+ // Get skill sets
31
+ const stateSkills = new Set(Object.keys(state.skills));
32
+ const registrySkills = new Set(Object.keys(registry.skills));
33
+ const diskSkillSet = new Set(diskSkills);
34
+ const configSkills = new Set(config?.skills ? Object.keys(config.skills) : []);
35
+ // Check 1: Skills in state but not on disk (orphan_state)
36
+ // Uses StateManager.getOrphanStates() for consistency
37
+ const orphanStates = this.stateManager.getOrphanStates(state, diskSkills);
38
+ for (const skillName of orphanStates) {
39
+ issues.push(this.createIssue('orphan_state', 'error', skillName, `Skill "${skillName}" is in state.json but has no files on disk`, 'Remove from state.json', true));
40
+ }
41
+ // Check 2: Skills in registry but not on disk (orphan_registry)
42
+ // These will be cleaned by StoreManager.cleanOrphans()
43
+ for (const skillName of registrySkills) {
44
+ if (!diskSkillSet.has(skillName)) {
45
+ issues.push(this.createIssue('orphan_registry', 'error', skillName, `Skill "${skillName}" is in registry.json but has no files on disk`, 'Remove from registry.json', true));
46
+ }
47
+ }
48
+ // Check 3: Skills on disk but not in registry (orphan_disk)
49
+ for (const skillName of diskSkillSet) {
50
+ if (!registrySkills.has(skillName)) {
51
+ issues.push(this.createIssue('orphan_disk', 'warning', skillName, `Skill "${skillName}" exists on disk but not in registry.json`, 'Add to registry.json or remove from disk', true));
52
+ }
53
+ }
54
+ // Check 4: Invalid skill names (contains path separators)
55
+ for (const skillName of [...stateSkills, ...registrySkills]) {
56
+ if (skillName.includes('/') || skillName.includes('\\')) {
57
+ issues.push(this.createIssue('invalid_skill_name', 'error', skillName, `Skill name "${skillName}" contains path separators`, 'Reinstall with correct name from SKILL.md frontmatter', true));
58
+ }
59
+ }
60
+ // Check 5: State-Registry version mismatch
61
+ for (const skillName of stateSkills) {
62
+ if (registrySkills.has(skillName)) {
63
+ const stateVersion = state.skills[skillName].version;
64
+ const registryVersion = registry.skills[skillName].version;
65
+ if (stateVersion !== registryVersion) {
66
+ issues.push(this.createIssue('state_registry_mismatch', 'warning', skillName, `Version mismatch: state=${stateVersion}, registry=${registryVersion}`, 'Update to latest version', true));
67
+ }
68
+ }
69
+ }
70
+ // Check 6: User-installed skills not in skillpkg.json
71
+ if (config) {
72
+ for (const [skillName, skillState] of Object.entries(state.skills)) {
73
+ if (skillState.installed_by === 'user' && !configSkills.has(skillName)) {
74
+ issues.push(this.createIssue('missing_skillpkg_entry', 'info', skillName, `User-installed skill "${skillName}" is not in skillpkg.json`, 'Add to skillpkg.json for team sharing', false));
75
+ }
76
+ }
77
+ }
78
+ // Check 7: Dangling dependency references
79
+ // Check depended_by arrays for references to non-existent skills
80
+ for (const [skillName, skillState] of Object.entries(state.skills)) {
81
+ if (skillState.depended_by) {
82
+ for (const dependent of skillState.depended_by) {
83
+ if (!stateSkills.has(dependent)) {
84
+ issues.push(this.createIssue('dangling_dependency', 'warning', skillName, `Skill "${skillName}" has dangling dependency reference to "${dependent}"`, 'Clean up dependency references', true));
85
+ }
86
+ }
87
+ }
88
+ }
89
+ // Check 8: Orphan dependencies (using existing StateManager method)
90
+ // Skills installed as dependencies but their installer no longer exists
91
+ const orphanDeps = this.stateManager.getOrphanDependencies(state);
92
+ for (const skillName of orphanDeps) {
93
+ // Only add if not already reported as orphan_state
94
+ if (!orphanStates.includes(skillName)) {
95
+ issues.push(this.createIssue('orphan_dependency', 'warning', skillName, `Skill "${skillName}" was installed as a dependency but is no longer needed`, 'Remove unused dependency', true));
96
+ }
97
+ }
98
+ // Count synced skills
99
+ let syncedCount = 0;
100
+ for (const skillName of registrySkills) {
101
+ const entry = registry.skills[skillName];
102
+ if (entry.syncedPlatforms && entry.syncedPlatforms.length > 0) {
103
+ syncedCount++;
104
+ }
105
+ }
106
+ return {
107
+ healthy: issues.filter(i => i.severity === 'error').length === 0,
108
+ issues,
109
+ stats: {
110
+ stateCount: stateSkills.size,
111
+ registryCount: registrySkills.size,
112
+ diskCount: diskSkillSet.size,
113
+ syncedCount,
114
+ },
115
+ };
116
+ }
117
+ /**
118
+ * Repair detected issues
119
+ *
120
+ * Uses batch operations from existing managers for efficiency:
121
+ * - StateManager.cleanOrphanStates() for orphan_state issues
122
+ * - StoreManager.cleanOrphans() for orphan_registry issues
123
+ * - StateManager.cleanDanglingReferences() for dangling_dependency issues
124
+ */
125
+ async repair(projectPath, options = {}) {
126
+ const result = {
127
+ success: true,
128
+ actions: [],
129
+ errors: [],
130
+ issuesFixed: 0,
131
+ issuesRemaining: 0,
132
+ };
133
+ // First, diagnose
134
+ const diagnosis = await this.diagnose(projectPath);
135
+ // Filter issues based on options
136
+ const issuesToFix = options.autoOnly
137
+ ? diagnosis.issues.filter(i => i.autoFixable)
138
+ : diagnosis.issues;
139
+ if (options.dryRun) {
140
+ // Just report what would be done
141
+ for (const issue of issuesToFix) {
142
+ const action = this.getRepairAction(issue);
143
+ if (action) {
144
+ result.actions.push(action);
145
+ }
146
+ }
147
+ result.issuesRemaining = diagnosis.issues.length;
148
+ return result;
149
+ }
150
+ // Use batch operations where possible for efficiency
151
+ if (options.removeOrphans !== false) {
152
+ // Batch clean orphan registry entries using StoreManager.cleanOrphans()
153
+ const orphanRegistryIssues = issuesToFix.filter(i => i.type === 'orphan_registry');
154
+ if (orphanRegistryIssues.length > 0) {
155
+ try {
156
+ const cleaned = await this.storeManager.cleanOrphans();
157
+ for (const name of cleaned) {
158
+ result.issuesFixed++;
159
+ result.actions.push({
160
+ type: 'remove_registry',
161
+ skillName: name,
162
+ description: `Remove "${name}" from registry.json`,
163
+ });
164
+ }
165
+ }
166
+ catch (error) {
167
+ result.errors.push(`Failed to clean orphan registry entries: ${error instanceof Error ? error.message : String(error)}`);
168
+ result.success = false;
169
+ }
170
+ }
171
+ // Batch clean orphan state entries using StateManager.cleanOrphanStates()
172
+ const orphanStateIssues = issuesToFix.filter(i => i.type === 'orphan_state');
173
+ if (orphanStateIssues.length > 0) {
174
+ try {
175
+ const diskSkills = await this.storeManager.getSkillNames();
176
+ const cleaned = await this.stateManager.cleanOrphanStates(projectPath, diskSkills);
177
+ for (const name of cleaned) {
178
+ result.issuesFixed++;
179
+ result.actions.push({
180
+ type: 'remove_state',
181
+ skillName: name,
182
+ description: `Remove "${name}" from state.json`,
183
+ });
184
+ }
185
+ }
186
+ catch (error) {
187
+ result.errors.push(`Failed to clean orphan state entries: ${error instanceof Error ? error.message : String(error)}`);
188
+ result.success = false;
189
+ }
190
+ }
191
+ // Batch clean dangling references using StateManager.cleanDanglingReferences()
192
+ const danglingIssues = issuesToFix.filter(i => i.type === 'dangling_dependency');
193
+ if (danglingIssues.length > 0) {
194
+ try {
195
+ const cleanedCount = await this.stateManager.cleanDanglingReferences(projectPath);
196
+ if (cleanedCount > 0) {
197
+ result.issuesFixed += danglingIssues.length;
198
+ for (const issue of danglingIssues) {
199
+ result.actions.push({
200
+ type: 'update_state',
201
+ skillName: issue.skillName,
202
+ description: `Clean dependency references for "${issue.skillName}"`,
203
+ });
204
+ }
205
+ }
206
+ }
207
+ catch (error) {
208
+ result.errors.push(`Failed to clean dangling references: ${error instanceof Error ? error.message : String(error)}`);
209
+ result.success = false;
210
+ }
211
+ }
212
+ }
213
+ // Handle remaining issues individually
214
+ const handledTypes = new Set(['orphan_registry', 'orphan_state', 'dangling_dependency']);
215
+ const remainingIssues = issuesToFix.filter(i => !handledTypes.has(i.type));
216
+ for (const issue of remainingIssues) {
217
+ if (!issue.autoFixable && options.autoOnly) {
218
+ result.issuesRemaining++;
219
+ continue;
220
+ }
221
+ try {
222
+ const fixed = await this.fixIssue(projectPath, issue, options);
223
+ if (fixed) {
224
+ result.issuesFixed++;
225
+ const action = this.getRepairAction(issue);
226
+ if (action) {
227
+ result.actions.push(action);
228
+ }
229
+ }
230
+ else {
231
+ result.issuesRemaining++;
232
+ }
233
+ }
234
+ catch (error) {
235
+ result.errors.push(`Failed to fix ${issue.type} for ${issue.skillName}: ${error instanceof Error ? error.message : String(error)}`);
236
+ result.success = false;
237
+ result.issuesRemaining++;
238
+ }
239
+ }
240
+ return result;
241
+ }
242
+ /**
243
+ * Fix a single issue
244
+ */
245
+ async fixIssue(projectPath, issue, options) {
246
+ switch (issue.type) {
247
+ case 'orphan_state':
248
+ if (options.removeOrphans !== false) {
249
+ // Remove from state.json
250
+ await this.stateManager.recordSkillUninstall(projectPath, issue.skillName);
251
+ return true;
252
+ }
253
+ return false;
254
+ case 'orphan_registry':
255
+ if (options.removeOrphans !== false) {
256
+ // Remove from registry.json
257
+ const registry = await this.storeManager.getRegistry();
258
+ delete registry.skills[issue.skillName];
259
+ await this.storeManager.saveRegistry(registry);
260
+ return true;
261
+ }
262
+ return false;
263
+ case 'orphan_disk':
264
+ if (options.removeOrphans !== false) {
265
+ // Add to registry from disk (or remove, depending on preference)
266
+ // For now, we'll remove the orphan directory
267
+ await this.storeManager.removeSkill(issue.skillName);
268
+ return true;
269
+ }
270
+ return false;
271
+ case 'invalid_skill_name':
272
+ if (options.removeOrphans !== false) {
273
+ // Remove entries with invalid names
274
+ const state = await this.stateManager.loadState(projectPath);
275
+ if (state.skills[issue.skillName]) {
276
+ await this.stateManager.recordSkillUninstall(projectPath, issue.skillName);
277
+ }
278
+ const registry = await this.storeManager.getRegistry();
279
+ if (registry.skills[issue.skillName]) {
280
+ delete registry.skills[issue.skillName];
281
+ await this.storeManager.saveRegistry(registry);
282
+ }
283
+ return true;
284
+ }
285
+ return false;
286
+ case 'state_registry_mismatch':
287
+ // Sync state version to registry version
288
+ const registry = await this.storeManager.getRegistry();
289
+ const registryEntry = registry.skills[issue.skillName];
290
+ if (registryEntry) {
291
+ const state = await this.stateManager.loadState(projectPath);
292
+ state.skills[issue.skillName].version = registryEntry.version;
293
+ await this.stateManager.saveState(projectPath, state);
294
+ return true;
295
+ }
296
+ return false;
297
+ case 'dangling_dependency':
298
+ // Handled by batch operation (cleanDanglingReferences), but keep as fallback
299
+ const currentState = await this.stateManager.loadState(projectPath);
300
+ const skillState = currentState.skills[issue.skillName];
301
+ if (skillState && skillState.depended_by) {
302
+ skillState.depended_by = skillState.depended_by.filter(dep => currentState.skills[dep] !== undefined);
303
+ await this.stateManager.saveState(projectPath, currentState);
304
+ return true;
305
+ }
306
+ return false;
307
+ case 'orphan_dependency':
308
+ // Remove skill that was installed as dependency but is no longer needed
309
+ if (options.removeOrphans !== false) {
310
+ await this.storeManager.removeSkill(issue.skillName);
311
+ await this.stateManager.recordSkillUninstall(projectPath, issue.skillName);
312
+ return true;
313
+ }
314
+ return false;
315
+ case 'missing_skillpkg_entry':
316
+ // This is informational, don't auto-fix
317
+ return false;
318
+ case 'sync_outdated':
319
+ if (options.resync) {
320
+ // Would need Syncer to fix this
321
+ return false;
322
+ }
323
+ return false;
324
+ default:
325
+ return false;
326
+ }
327
+ }
328
+ /**
329
+ * Get repair action for an issue
330
+ */
331
+ getRepairAction(issue) {
332
+ switch (issue.type) {
333
+ case 'orphan_state':
334
+ return {
335
+ type: 'remove_state',
336
+ skillName: issue.skillName,
337
+ description: `Remove "${issue.skillName}" from state.json`,
338
+ };
339
+ case 'orphan_registry':
340
+ return {
341
+ type: 'remove_registry',
342
+ skillName: issue.skillName,
343
+ description: `Remove "${issue.skillName}" from registry.json`,
344
+ };
345
+ case 'orphan_disk':
346
+ return {
347
+ type: 'remove_registry',
348
+ skillName: issue.skillName,
349
+ description: `Remove orphan skill directory "${issue.skillName}"`,
350
+ };
351
+ case 'invalid_skill_name':
352
+ return {
353
+ type: 'remove_state',
354
+ skillName: issue.skillName,
355
+ description: `Remove invalid skill name "${issue.skillName}"`,
356
+ };
357
+ case 'state_registry_mismatch':
358
+ return {
359
+ type: 'update_state',
360
+ skillName: issue.skillName,
361
+ description: `Sync version for "${issue.skillName}"`,
362
+ };
363
+ case 'dangling_dependency':
364
+ return {
365
+ type: 'update_state',
366
+ skillName: issue.skillName,
367
+ description: `Clean dependency references for "${issue.skillName}"`,
368
+ };
369
+ case 'orphan_dependency':
370
+ return {
371
+ type: 'remove_state',
372
+ skillName: issue.skillName,
373
+ description: `Remove unused dependency "${issue.skillName}"`,
374
+ };
375
+ default:
376
+ return null;
377
+ }
378
+ }
379
+ /**
380
+ * Create an issue object
381
+ */
382
+ createIssue(type, severity, skillName, message, suggestion, autoFixable) {
383
+ return {
384
+ type,
385
+ severity,
386
+ skillName,
387
+ message,
388
+ suggestion,
389
+ autoFixable,
390
+ };
391
+ }
392
+ }
393
+ /**
394
+ * Create a Doctor instance
395
+ */
396
+ export function createDoctor(stateManager, configManager, storeManager) {
397
+ return new Doctor(stateManager, configManager, storeManager);
398
+ }
399
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Doctor module - Diagnose and repair skillpkg state
3
+ */
4
+ export * from './types.js';
5
+ export * from './doctor.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Doctor module - Diagnose and repair skillpkg state
3
+ */
4
+ export * from './types.js';
5
+ export * from './doctor.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Doctor module types
3
+ *
4
+ * Types for diagnosing and repairing skillpkg state
5
+ */
6
+ import type { BaseResult } from '../types.js';
7
+ /**
8
+ * Issue severity levels
9
+ */
10
+ export type IssueSeverity = 'error' | 'warning' | 'info';
11
+ /**
12
+ * Issue types that can be detected
13
+ */
14
+ export type IssueType = 'orphan_state' | 'orphan_registry' | 'orphan_disk' | 'orphan_dependency' | 'state_registry_mismatch' | 'invalid_skill_name' | 'missing_skillpkg_entry' | 'dangling_dependency' | 'sync_outdated';
15
+ /**
16
+ * Detected issue
17
+ */
18
+ export interface Issue {
19
+ type: IssueType;
20
+ severity: IssueSeverity;
21
+ skillName: string;
22
+ message: string;
23
+ suggestion: string;
24
+ autoFixable: boolean;
25
+ }
26
+ /**
27
+ * Diagnosis result
28
+ */
29
+ export interface DiagnosisResult {
30
+ healthy: boolean;
31
+ issues: Issue[];
32
+ stats: {
33
+ stateCount: number;
34
+ registryCount: number;
35
+ diskCount: number;
36
+ syncedCount: number;
37
+ };
38
+ }
39
+ /**
40
+ * Repair options
41
+ */
42
+ export interface RepairOptions {
43
+ /** Only fix auto-fixable issues */
44
+ autoOnly?: boolean;
45
+ /** Dry run - don't actually make changes */
46
+ dryRun?: boolean;
47
+ /** Remove orphaned entries from state/registry */
48
+ removeOrphans?: boolean;
49
+ /** Re-sync skills to platforms */
50
+ resync?: boolean;
51
+ }
52
+ /**
53
+ * Repair action
54
+ */
55
+ export interface RepairAction {
56
+ type: 'remove_state' | 'remove_registry' | 'add_registry' | 'update_state' | 'resync';
57
+ skillName: string;
58
+ description: string;
59
+ }
60
+ /**
61
+ * Repair result
62
+ */
63
+ export interface RepairResult extends BaseResult {
64
+ actions: RepairAction[];
65
+ issuesFixed: number;
66
+ issuesRemaining: number;
67
+ }
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/doctor/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,mBAAmB,GACnB,yBAAyB,GACzB,oBAAoB,GACpB,wBAAwB,GACxB,qBAAqB,GACrB,eAAe,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,GAAG,iBAAiB,GAAG,cAAc,GAAG,cAAc,GAAG,QAAQ,CAAC;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/doctor/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/fetcher/fetcher.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAC;AAG5E,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAgLD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAsB1D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAW/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,cAAmB,GAAG,YAAY,CAU7E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,cAAmB,GAAG,mBAAmB,CAiB3F"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/fetcher/fetcher.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAGvF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAoB,MAAM,uBAAuB,CAAC;AAEnF;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAyBtB;AAkdD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAuB1D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAW/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,cAAmB,GAAG,YAAY,CAU7E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,cAAmB,GAAG,mBAAmB,CAqB3F"}