@skillsmith/core 0.4.13 → 0.4.15

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 (296) hide show
  1. package/README.md +2 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analytics/storage.d.ts +8 -2
  4. package/dist/src/analytics/storage.d.ts.map +1 -1
  5. package/dist/src/analytics/storage.js +16 -5
  6. package/dist/src/analytics/storage.js.map +1 -1
  7. package/dist/src/analytics/usage-tracker.d.ts +8 -2
  8. package/dist/src/analytics/usage-tracker.d.ts.map +1 -1
  9. package/dist/src/analytics/usage-tracker.js +24 -11
  10. package/dist/src/analytics/usage-tracker.js.map +1 -1
  11. package/dist/src/api/client.d.ts +1 -0
  12. package/dist/src/api/client.d.ts.map +1 -1
  13. package/dist/src/api/client.health.d.ts +26 -0
  14. package/dist/src/api/client.health.d.ts.map +1 -0
  15. package/dist/src/api/client.health.js +74 -0
  16. package/dist/src/api/client.health.js.map +1 -0
  17. package/dist/src/api/client.js +3 -51
  18. package/dist/src/api/client.js.map +1 -1
  19. package/dist/src/benchmarks/IndexBenchmark.js +2 -2
  20. package/dist/src/benchmarks/IndexBenchmark.js.map +1 -1
  21. package/dist/src/benchmarks/SearchBenchmark.js +2 -2
  22. package/dist/src/benchmarks/SearchBenchmark.js.map +1 -1
  23. package/dist/src/benchmarks/cacheBenchmark.js +2 -2
  24. package/dist/src/benchmarks/cacheBenchmark.js.map +1 -1
  25. package/dist/src/benchmarks/embeddingBenchmark.js +1 -1
  26. package/dist/src/benchmarks/embeddingBenchmark.js.map +1 -1
  27. package/dist/src/cache/CacheManager.d.ts +13 -2
  28. package/dist/src/cache/CacheManager.d.ts.map +1 -1
  29. package/dist/src/cache/CacheManager.js +27 -6
  30. package/dist/src/cache/CacheManager.js.map +1 -1
  31. package/dist/src/cache/TieredCache.d.ts +15 -2
  32. package/dist/src/cache/TieredCache.d.ts.map +1 -1
  33. package/dist/src/cache/TieredCache.js +52 -70
  34. package/dist/src/cache/TieredCache.js.map +1 -1
  35. package/dist/src/cache/index.d.ts +12 -0
  36. package/dist/src/cache/index.d.ts.map +1 -1
  37. package/dist/src/cache/index.js +20 -1
  38. package/dist/src/cache/index.js.map +1 -1
  39. package/dist/src/cache/sqlite.d.ts +15 -1
  40. package/dist/src/cache/sqlite.d.ts.map +1 -1
  41. package/dist/src/cache/sqlite.js +22 -4
  42. package/dist/src/cache/sqlite.js.map +1 -1
  43. package/dist/src/db/createDatabase.d.ts +9 -1
  44. package/dist/src/db/createDatabase.d.ts.map +1 -1
  45. package/dist/src/db/createDatabase.js +21 -1
  46. package/dist/src/db/createDatabase.js.map +1 -1
  47. package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
  48. package/dist/src/db/drivers/sqljsDriver.js +5 -2
  49. package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
  50. package/dist/src/db/migrations/v5-skill-versions.d.ts +30 -0
  51. package/dist/src/db/migrations/v5-skill-versions.d.ts.map +1 -0
  52. package/dist/src/db/migrations/v5-skill-versions.js +45 -0
  53. package/dist/src/db/migrations/v5-skill-versions.js.map +1 -0
  54. package/dist/src/db/migrations/v5b-change-type.d.ts +19 -0
  55. package/dist/src/db/migrations/v5b-change-type.d.ts.map +1 -0
  56. package/dist/src/db/migrations/v5b-change-type.js +22 -0
  57. package/dist/src/db/migrations/v5b-change-type.js.map +1 -0
  58. package/dist/src/db/migrations/v6-advisories.d.ts +32 -0
  59. package/dist/src/db/migrations/v6-advisories.d.ts.map +1 -0
  60. package/dist/src/db/migrations/v6-advisories.js +53 -0
  61. package/dist/src/db/migrations/v6-advisories.js.map +1 -0
  62. package/dist/src/db/migrations/v7-compatibility.d.ts +21 -0
  63. package/dist/src/db/migrations/v7-compatibility.d.ts.map +1 -0
  64. package/dist/src/db/migrations/v7-compatibility.js +23 -0
  65. package/dist/src/db/migrations/v7-compatibility.js.map +1 -0
  66. package/dist/src/db/migrations/v8-co-installs.d.ts +21 -0
  67. package/dist/src/db/migrations/v8-co-installs.d.ts.map +1 -0
  68. package/dist/src/db/migrations/v8-co-installs.js +33 -0
  69. package/dist/src/db/migrations/v8-co-installs.js.map +1 -0
  70. package/dist/src/db/schema.d.ts +6 -11
  71. package/dist/src/db/schema.d.ts.map +1 -1
  72. package/dist/src/db/schema.js +38 -17
  73. package/dist/src/db/schema.js.map +1 -1
  74. package/dist/src/embeddings/hnsw-store.d.ts +14 -0
  75. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -1
  76. package/dist/src/embeddings/hnsw-store.helpers.d.ts +4 -4
  77. package/dist/src/embeddings/hnsw-store.helpers.d.ts.map +1 -1
  78. package/dist/src/embeddings/hnsw-store.helpers.js +5 -5
  79. package/dist/src/embeddings/hnsw-store.helpers.js.map +1 -1
  80. package/dist/src/embeddings/hnsw-store.js +32 -4
  81. package/dist/src/embeddings/hnsw-store.js.map +1 -1
  82. package/dist/src/embeddings/index.d.ts +15 -1
  83. package/dist/src/embeddings/index.d.ts.map +1 -1
  84. package/dist/src/embeddings/index.js +24 -4
  85. package/dist/src/embeddings/index.js.map +1 -1
  86. package/dist/src/exports/repositories.d.ts +5 -0
  87. package/dist/src/exports/repositories.d.ts.map +1 -1
  88. package/dist/src/exports/repositories.js +17 -0
  89. package/dist/src/exports/repositories.js.map +1 -1
  90. package/dist/src/exports/types.d.ts +1 -1
  91. package/dist/src/exports/types.d.ts.map +1 -1
  92. package/dist/src/exports/types.js.map +1 -1
  93. package/dist/src/index.d.ts +1 -1
  94. package/dist/src/index.d.ts.map +1 -1
  95. package/dist/src/index.js +2 -1
  96. package/dist/src/index.js.map +1 -1
  97. package/dist/src/indexer/SkillParser.d.ts +2 -0
  98. package/dist/src/indexer/SkillParser.d.ts.map +1 -1
  99. package/dist/src/indexer/SkillParser.js.map +1 -1
  100. package/dist/src/learning/PatternStore.d.ts +8 -2
  101. package/dist/src/learning/PatternStore.d.ts.map +1 -1
  102. package/dist/src/learning/PatternStore.helpers.d.ts +19 -1
  103. package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -1
  104. package/dist/src/learning/PatternStore.helpers.js +51 -0
  105. package/dist/src/learning/PatternStore.helpers.js.map +1 -1
  106. package/dist/src/learning/PatternStore.js +19 -39
  107. package/dist/src/learning/PatternStore.js.map +1 -1
  108. package/dist/src/repositories/AdvisoryRepository.d.ts +80 -0
  109. package/dist/src/repositories/AdvisoryRepository.d.ts.map +1 -0
  110. package/dist/src/repositories/AdvisoryRepository.js +128 -0
  111. package/dist/src/repositories/AdvisoryRepository.js.map +1 -0
  112. package/dist/src/repositories/AdvisoryRepository.test.d.ts +6 -0
  113. package/dist/src/repositories/AdvisoryRepository.test.d.ts.map +1 -0
  114. package/dist/src/repositories/AdvisoryRepository.test.js +149 -0
  115. package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -0
  116. package/dist/src/repositories/CoInstallRepository.d.ts +68 -0
  117. package/dist/src/repositories/CoInstallRepository.d.ts.map +1 -0
  118. package/dist/src/repositories/CoInstallRepository.js +122 -0
  119. package/dist/src/repositories/CoInstallRepository.js.map +1 -0
  120. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  121. package/dist/src/repositories/SkillRepository.js +16 -5
  122. package/dist/src/repositories/SkillRepository.js.map +1 -1
  123. package/dist/src/repositories/SkillVersionRepository.d.ts +82 -0
  124. package/dist/src/repositories/SkillVersionRepository.d.ts.map +1 -0
  125. package/dist/src/repositories/SkillVersionRepository.js +118 -0
  126. package/dist/src/repositories/SkillVersionRepository.js.map +1 -0
  127. package/dist/src/search/hybrid.d.ts +15 -4
  128. package/dist/src/search/hybrid.d.ts.map +1 -1
  129. package/dist/src/search/hybrid.js +25 -9
  130. package/dist/src/search/hybrid.js.map +1 -1
  131. package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
  132. package/dist/src/services/SearchService.helpers.js +4 -0
  133. package/dist/src/services/SearchService.helpers.js.map +1 -1
  134. package/dist/src/services/SearchService.types.d.ts +1 -0
  135. package/dist/src/services/SearchService.types.d.ts.map +1 -1
  136. package/dist/src/services/TaskRunner.d.ts +5 -81
  137. package/dist/src/services/TaskRunner.d.ts.map +1 -1
  138. package/dist/src/services/TaskRunner.js +7 -68
  139. package/dist/src/services/TaskRunner.js.map +1 -1
  140. package/dist/src/services/TaskRunner.process.d.ts +33 -0
  141. package/dist/src/services/TaskRunner.process.d.ts.map +1 -0
  142. package/dist/src/services/TaskRunner.process.js +70 -0
  143. package/dist/src/services/TaskRunner.process.js.map +1 -0
  144. package/dist/src/services/TaskRunner.types.d.ts +76 -0
  145. package/dist/src/services/TaskRunner.types.d.ts.map +1 -0
  146. package/dist/src/services/TaskRunner.types.js +22 -0
  147. package/dist/src/services/TaskRunner.types.js.map +1 -0
  148. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts +13 -0
  149. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts.map +1 -0
  150. package/dist/src/services/__tests__/TaskRunner.process.test.js +91 -0
  151. package/dist/src/services/__tests__/TaskRunner.process.test.js.map +1 -0
  152. package/dist/src/services/quarantine/QuarantineService.d.ts +3 -24
  153. package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -1
  154. package/dist/src/services/quarantine/QuarantineService.js +8 -205
  155. package/dist/src/services/quarantine/QuarantineService.js.map +1 -1
  156. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts +57 -0
  157. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts.map +1 -0
  158. package/dist/src/services/quarantine/QuarantineService.multiapproval.js +211 -0
  159. package/dist/src/services/quarantine/QuarantineService.multiapproval.js.map +1 -0
  160. package/dist/src/session/SessionManager.d.ts +2 -33
  161. package/dist/src/session/SessionManager.d.ts.map +1 -1
  162. package/dist/src/session/SessionManager.js +14 -238
  163. package/dist/src/session/SessionManager.js.map +1 -1
  164. package/dist/src/session/SessionManager.memory.d.ts +67 -0
  165. package/dist/src/session/SessionManager.memory.d.ts.map +1 -0
  166. package/dist/src/session/SessionManager.memory.js +262 -0
  167. package/dist/src/session/SessionManager.memory.js.map +1 -0
  168. package/dist/src/sync/SyncEngine.d.ts +13 -1
  169. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  170. package/dist/src/sync/SyncEngine.js +50 -1
  171. package/dist/src/sync/SyncEngine.js.map +1 -1
  172. package/dist/src/testing/MultiLLMProvider.d.ts +5 -6
  173. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
  174. package/dist/src/testing/MultiLLMProvider.js +18 -130
  175. package/dist/src/testing/MultiLLMProvider.js.map +1 -1
  176. package/dist/src/testing/MultiLLMProvider.metrics.d.ts +33 -0
  177. package/dist/src/testing/MultiLLMProvider.metrics.d.ts.map +1 -0
  178. package/dist/src/testing/MultiLLMProvider.metrics.js +87 -0
  179. package/dist/src/testing/MultiLLMProvider.metrics.js.map +1 -0
  180. package/dist/src/testing/MultiLLMProvider.selection.d.ts +77 -0
  181. package/dist/src/testing/MultiLLMProvider.selection.d.ts.map +1 -0
  182. package/dist/src/testing/MultiLLMProvider.selection.js +151 -0
  183. package/dist/src/testing/MultiLLMProvider.selection.js.map +1 -0
  184. package/dist/src/types/skill.d.ts +10 -0
  185. package/dist/src/types/skill.d.ts.map +1 -1
  186. package/dist/src/types.d.ts +34 -0
  187. package/dist/src/types.d.ts.map +1 -1
  188. package/dist/src/versioning/change-classifier.d.ts +38 -0
  189. package/dist/src/versioning/change-classifier.d.ts.map +1 -0
  190. package/dist/src/versioning/change-classifier.js +187 -0
  191. package/dist/src/versioning/change-classifier.js.map +1 -0
  192. package/dist/src/versioning/change-classifier.test.d.ts +6 -0
  193. package/dist/src/versioning/change-classifier.test.d.ts.map +1 -0
  194. package/dist/src/versioning/change-classifier.test.js +275 -0
  195. package/dist/src/versioning/change-classifier.test.js.map +1 -0
  196. package/dist/src/versioning/update-risk.d.ts +50 -0
  197. package/dist/src/versioning/update-risk.d.ts.map +1 -0
  198. package/dist/src/versioning/update-risk.js +80 -0
  199. package/dist/src/versioning/update-risk.js.map +1 -0
  200. package/dist/src/versioning/update-risk.test.d.ts +6 -0
  201. package/dist/src/versioning/update-risk.test.d.ts.map +1 -0
  202. package/dist/src/versioning/update-risk.test.js +200 -0
  203. package/dist/src/versioning/update-risk.test.js.map +1 -0
  204. package/dist/tests/AnalyticsStorage.test.js +2 -2
  205. package/dist/tests/AnalyticsStorage.test.js.map +1 -1
  206. package/dist/tests/AuditLogger.edge-cases.test.d.ts +10 -0
  207. package/dist/tests/AuditLogger.edge-cases.test.d.ts.map +1 -0
  208. package/dist/tests/AuditLogger.edge-cases.test.js +183 -0
  209. package/dist/tests/AuditLogger.edge-cases.test.js.map +1 -0
  210. package/dist/tests/CacheManager.test.d.ts +9 -0
  211. package/dist/tests/CacheManager.test.d.ts.map +1 -0
  212. package/dist/tests/CacheManager.test.js +163 -0
  213. package/dist/tests/CacheManager.test.js.map +1 -0
  214. package/dist/tests/CacheSecurity.test.js +4 -4
  215. package/dist/tests/CacheSecurity.test.js.map +1 -1
  216. package/dist/tests/EmbeddingService.test.js +11 -12
  217. package/dist/tests/EmbeddingService.test.js.map +1 -1
  218. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts +10 -0
  219. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts.map +1 -0
  220. package/dist/tests/GitHubIndexer.edge-cases.test.js +255 -0
  221. package/dist/tests/GitHubIndexer.edge-cases.test.js.map +1 -0
  222. package/dist/tests/HybridSearch.test.d.ts +8 -0
  223. package/dist/tests/HybridSearch.test.d.ts.map +1 -0
  224. package/dist/tests/HybridSearch.test.js +48 -0
  225. package/dist/tests/HybridSearch.test.js.map +1 -0
  226. package/dist/tests/SearchService.test.js +71 -0
  227. package/dist/tests/SearchService.test.js.map +1 -1
  228. package/dist/tests/SkillVersionRepository.test.d.ts +2 -0
  229. package/dist/tests/SkillVersionRepository.test.d.ts.map +1 -0
  230. package/dist/tests/SkillVersionRepository.test.js +168 -0
  231. package/dist/tests/SkillVersionRepository.test.js.map +1 -0
  232. package/dist/tests/TieredCache.test.js +10 -10
  233. package/dist/tests/TieredCache.test.js.map +1 -1
  234. package/dist/tests/UsageTracker.test.js +6 -6
  235. package/dist/tests/UsageTracker.test.js.map +1 -1
  236. package/dist/tests/analytics/usage-tracker.test.js +8 -8
  237. package/dist/tests/analytics/usage-tracker.test.js.map +1 -1
  238. package/dist/tests/api/client.health.test.d.ts +15 -0
  239. package/dist/tests/api/client.health.test.d.ts.map +1 -0
  240. package/dist/tests/api/client.health.test.js +111 -0
  241. package/dist/tests/api/client.health.test.js.map +1 -0
  242. package/dist/tests/cache.test.js +7 -9
  243. package/dist/tests/cache.test.js.map +1 -1
  244. package/dist/tests/db/betterSqlite3Driver.test.d.ts +8 -0
  245. package/dist/tests/db/betterSqlite3Driver.test.d.ts.map +1 -0
  246. package/dist/tests/db/betterSqlite3Driver.test.js +88 -0
  247. package/dist/tests/db/betterSqlite3Driver.test.js.map +1 -0
  248. package/dist/tests/db/database-abstraction.test.js +48 -0
  249. package/dist/tests/db/database-abstraction.test.js.map +1 -1
  250. package/dist/tests/db/schema-migrations.test.d.ts +10 -0
  251. package/dist/tests/db/schema-migrations.test.d.ts.map +1 -0
  252. package/dist/tests/db/schema-migrations.test.js +134 -0
  253. package/dist/tests/db/schema-migrations.test.js.map +1 -0
  254. package/dist/tests/db/sqljsDriver.test.d.ts +9 -0
  255. package/dist/tests/db/sqljsDriver.test.d.ts.map +1 -0
  256. package/dist/tests/db/sqljsDriver.test.js +75 -0
  257. package/dist/tests/db/sqljsDriver.test.js.map +1 -0
  258. package/dist/tests/embeddings/hnsw-store.test.js +27 -24
  259. package/dist/tests/embeddings/hnsw-store.test.js.map +1 -1
  260. package/dist/tests/helpers/database.d.ts +32 -0
  261. package/dist/tests/helpers/database.d.ts.map +1 -0
  262. package/dist/tests/helpers/database.js +54 -0
  263. package/dist/tests/helpers/database.js.map +1 -0
  264. package/dist/tests/learning/PatternStore.helpers.test.d.ts +17 -0
  265. package/dist/tests/learning/PatternStore.helpers.test.d.ts.map +1 -0
  266. package/dist/tests/learning/PatternStore.helpers.test.js +301 -0
  267. package/dist/tests/learning/PatternStore.helpers.test.js.map +1 -0
  268. package/dist/tests/learning/PatternStore.test.js +9 -0
  269. package/dist/tests/learning/PatternStore.test.js.map +1 -1
  270. package/dist/tests/repositories/CoInstallRepository.test.d.ts +9 -0
  271. package/dist/tests/repositories/CoInstallRepository.test.d.ts.map +1 -0
  272. package/dist/tests/repositories/CoInstallRepository.test.js +126 -0
  273. package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -0
  274. package/dist/tests/routing/LanguageRouter.test.d.ts +9 -0
  275. package/dist/tests/routing/LanguageRouter.test.d.ts.map +1 -0
  276. package/dist/tests/routing/LanguageRouter.test.js +150 -0
  277. package/dist/tests/routing/LanguageRouter.test.js.map +1 -0
  278. package/dist/tests/session/SessionManager.memory.test.d.ts +11 -0
  279. package/dist/tests/session/SessionManager.memory.test.d.ts.map +1 -0
  280. package/dist/tests/session/SessionManager.memory.test.js +219 -0
  281. package/dist/tests/session/SessionManager.memory.test.js.map +1 -0
  282. package/dist/tests/sync/SyncEngine.test.js +32 -18
  283. package/dist/tests/sync/SyncEngine.test.js.map +1 -1
  284. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts +13 -0
  285. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts.map +1 -0
  286. package/dist/tests/testing/MultiLLMProvider.metrics.test.js +149 -0
  287. package/dist/tests/testing/MultiLLMProvider.metrics.test.js.map +1 -0
  288. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts +15 -0
  289. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts.map +1 -0
  290. package/dist/tests/testing/MultiLLMProvider.selection.test.js +249 -0
  291. package/dist/tests/testing/MultiLLMProvider.selection.test.js.map +1 -0
  292. package/dist/tests/unit/quarantine-query-builder.test.d.ts +10 -0
  293. package/dist/tests/unit/quarantine-query-builder.test.d.ts.map +1 -0
  294. package/dist/tests/unit/quarantine-query-builder.test.js +157 -0
  295. package/dist/tests/unit/quarantine-query-builder.test.js.map +1 -0
  296. package/package.json +1 -3
@@ -35,8 +35,14 @@ export interface Skill {
35
35
  securityFindingsCount: number;
36
36
  securityScannedAt: string | null;
37
37
  securityPassed: boolean | null;
38
+ /** SMI-2760: Flat array of compatible IDE/LLM/platform slugs */
39
+ compatibility?: string[];
38
40
  createdAt: string;
39
41
  updatedAt: string;
42
+ /** SHA-256 hex of the most recently recorded content proxy (optional, populated by SkillVersionRepository) */
43
+ latestContentHash?: string;
44
+ /** Number of distinct content hashes recorded for this skill */
45
+ versionCount?: number;
40
46
  }
41
47
  export interface SkillCreateInput {
42
48
  id?: string;
@@ -54,6 +60,8 @@ export interface SkillCreateInput {
54
60
  securityFindingsCount?: number;
55
61
  securityScannedAt?: string | null;
56
62
  securityPassed?: boolean | null;
63
+ /** SMI-2760: Flat array of compatible IDE/LLM/platform slugs */
64
+ compatibility?: string[];
57
65
  }
58
66
  export interface SkillUpdateInput {
59
67
  name?: string;
@@ -70,6 +78,8 @@ export interface SkillUpdateInput {
70
78
  securityFindingsCount?: number;
71
79
  securityScannedAt?: string | null;
72
80
  securityPassed?: boolean | null;
81
+ /** SMI-2760: Flat array of compatible IDE/LLM/platform slugs */
82
+ compatibility?: string[];
73
83
  }
74
84
  export interface SearchOptions {
75
85
  query: string;
@@ -1 +1 @@
1
- {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/types/skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/types/skill.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,7 @@ export interface Skill {
64
64
  * SMI-1491: Added repository field for transparency about installation source
65
65
  * SMI-825: Added security summary
66
66
  * SMI-1809: Added source field to identify local vs registry skills
67
+ * SMI-2734: Added installHint for ergonomic registry ID surfacing in search results
67
68
  */
68
69
  export interface SkillSearchResult {
69
70
  id: string;
@@ -79,6 +80,20 @@ export interface SkillSearchResult {
79
80
  security?: SecuritySummary;
80
81
  /** SMI-1809: Source of the skill ('local' for ~/.claude/skills/, 'registry' for API) */
81
82
  source?: 'local' | 'registry';
83
+ /** SMI-2734: Registry install ID in 'author/skill-name' format. Only set for registry skills.
84
+ * Undefined for local skills since their author field is not a routable registry owner. */
85
+ installHint?: string;
86
+ /** SMI-2760: Flat array of compatible IDE/LLM/platform slugs (e.g. ["claude-code", "cursor", "claude"]) */
87
+ compatibility?: string[];
88
+ }
89
+ /**
90
+ * SMI-2760: Compatibility filter for search
91
+ */
92
+ export interface CompatibilityFilter {
93
+ /** IDE slugs to match (e.g. ['cursor', 'claude-code']) */
94
+ ides?: string[];
95
+ /** LLM slugs to match (e.g. ['claude', 'gpt-4o']) */
96
+ llms?: string[];
82
97
  }
83
98
  /**
84
99
  * Search filters
@@ -91,6 +106,8 @@ export interface SearchFilters {
91
106
  safeOnly?: boolean;
92
107
  /** SMI-825: Maximum risk score (0-100, lower is safer) */
93
108
  maxRiskScore?: number;
109
+ /** SMI-2760: Filter by IDE/LLM compatibility */
110
+ compatibleWith?: CompatibilityFilter;
94
111
  }
95
112
  /**
96
113
  * Search response with timing
@@ -114,5 +131,22 @@ export interface GetSkillResponse {
114
131
  timing: {
115
132
  totalMs: number;
116
133
  };
134
+ /** SMI-2761: Skills frequently installed alongside this one (≥5 co-installs) */
135
+ also_installed?: AlsoInstalledSkill[];
136
+ }
137
+ /**
138
+ * SMI-2761: Minimal skill summary used in co-install recommendations
139
+ */
140
+ export interface AlsoInstalledSkill {
141
+ /** Skill ID (e.g. "anthropic/commit") */
142
+ skillId: string;
143
+ /** Human-readable name */
144
+ name: string;
145
+ /** Short description */
146
+ description?: string;
147
+ /** Author slug */
148
+ author?: string;
149
+ /** Co-install count */
150
+ installCount: number;
117
151
  }
118
152
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @fileoverview Heuristic change classifier for skill content diffs
3
+ * @module @skillsmith/core/versioning/change-classifier
4
+ * @see SMI-skill-version-tracking Wave 2
5
+ *
6
+ * Compares old and new SKILL.md content to produce a semantic change type:
7
+ * 'major' — structural regression (headings removed, large risk delta)
8
+ * 'minor' — new structure added (headings added only, dep added)
9
+ * 'patch' — body edits with no structural changes
10
+ * 'unknown' — could not classify
11
+ *
12
+ * When the author provides a semver field in SKILL.md frontmatter the
13
+ * caller should pass that through; this module trusts the semver bump
14
+ * over heuristics when it is present and parseable.
15
+ */
16
+ export type ChangeType = 'major' | 'minor' | 'patch' | 'unknown';
17
+ /**
18
+ * Classify the change between two versions of a SKILL.md.
19
+ *
20
+ * Order of precedence:
21
+ * 1. Author-provided semver in frontmatter (trusted over heuristics)
22
+ * 2. Removed headings → 'major'
23
+ * 3. Risk score delta > 20 → upgrade to 'major'
24
+ * 4. Removed dependencies → 'major'
25
+ * 5. Added headings only → 'minor'
26
+ * 6. Added dependencies → 'minor'
27
+ * 7. Body edits with no structural changes → 'patch'
28
+ * 8. No detectable change → 'patch'
29
+ * 9. Error during classification → 'unknown'
30
+ *
31
+ * @param oldContent Previous SKILL.md content
32
+ * @param newContent Updated SKILL.md content
33
+ * @param oldRiskScore Risk score of the old version (0–100, optional)
34
+ * @param newRiskScore Risk score of the new version (0–100, optional)
35
+ * @returns Semantic change type
36
+ */
37
+ export declare function classifyChange(oldContent: string, newContent: string, oldRiskScore?: number, newRiskScore?: number): ChangeType;
38
+ //# sourceMappingURL=change-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-classifier.d.ts","sourceRoot":"","sources":["../../../src/versioning/change-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;AAgHhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,UAAU,CAgDZ"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * @fileoverview Heuristic change classifier for skill content diffs
3
+ * @module @skillsmith/core/versioning/change-classifier
4
+ * @see SMI-skill-version-tracking Wave 2
5
+ *
6
+ * Compares old and new SKILL.md content to produce a semantic change type:
7
+ * 'major' — structural regression (headings removed, large risk delta)
8
+ * 'minor' — new structure added (headings added only, dep added)
9
+ * 'patch' — body edits with no structural changes
10
+ * 'unknown' — could not classify
11
+ *
12
+ * When the author provides a semver field in SKILL.md frontmatter the
13
+ * caller should pass that through; this module trusts the semver bump
14
+ * over heuristics when it is present and parseable.
15
+ */
16
+ // ============================================================================
17
+ // Frontmatter parsing
18
+ // ============================================================================
19
+ /** Very thin YAML-style frontmatter reader — only extracts key: value pairs */
20
+ function parseFrontmatter(content) {
21
+ const result = {};
22
+ const match = /^---\r?\n([\s\S]*?)\r?\n---/.exec(content);
23
+ if (!match)
24
+ return result;
25
+ for (const line of match[1].split('\n')) {
26
+ const colonIdx = line.indexOf(':');
27
+ if (colonIdx === -1)
28
+ continue;
29
+ const key = line.slice(0, colonIdx).trim();
30
+ const value = line.slice(colonIdx + 1).trim();
31
+ if (key && value)
32
+ result[key] = value;
33
+ }
34
+ return result;
35
+ }
36
+ /** Extract a semver string from frontmatter if present */
37
+ function extractSemver(frontmatter) {
38
+ const raw = frontmatter['version'] ?? frontmatter['semver'] ?? null;
39
+ if (!raw)
40
+ return null;
41
+ // Accept bare semver: 1.2.3 or with optional v prefix
42
+ return /^\s*v?\d+\.\d+\.\d+/.test(raw) ? raw.replace(/^\s*v/, '') : null;
43
+ }
44
+ /** Parse semver into major/minor/patch numbers */
45
+ function parseSemverParts(v) {
46
+ const m = /^(\d+)\.(\d+)\.(\d+)/.exec(v);
47
+ if (!m)
48
+ return null;
49
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
50
+ }
51
+ /** Derive ChangeType from two semver strings */
52
+ function classifyBySemver(oldSemver, newSemver) {
53
+ const oldParts = parseSemverParts(oldSemver);
54
+ const newParts = parseSemverParts(newSemver);
55
+ if (!oldParts || !newParts)
56
+ return null;
57
+ if (newParts[0] > oldParts[0])
58
+ return 'major';
59
+ if (newParts[0] < oldParts[0])
60
+ return 'major'; // downgrade also = major
61
+ if (newParts[1] > oldParts[1])
62
+ return 'minor';
63
+ if (newParts[1] < oldParts[1])
64
+ return 'minor'; // minor downgrade = minor
65
+ if (newParts[2] !== oldParts[2])
66
+ return 'patch';
67
+ return 'patch'; // identical semver → treat as patch (re-record)
68
+ }
69
+ // ============================================================================
70
+ // Heading extraction
71
+ // ============================================================================
72
+ /** Extract H2/H3 heading text from markdown */
73
+ function extractHeadings(content) {
74
+ const headings = new Set();
75
+ for (const line of content.split('\n')) {
76
+ const m = /^#{2,3}\s+(.+)/.exec(line);
77
+ if (m)
78
+ headings.add(m[1].trim().toLowerCase());
79
+ }
80
+ return headings;
81
+ }
82
+ // ============================================================================
83
+ // Dependency extraction
84
+ // ============================================================================
85
+ /**
86
+ * Extract dependency names from SKILL.md.
87
+ *
88
+ * Looks for lines that match common dependency list patterns:
89
+ * - `- dep-name` inside a "## Dependencies" or "## Requirements" section
90
+ * - `dependencies: [dep1, dep2]` in frontmatter
91
+ */
92
+ function extractDependencies(content, frontmatter) {
93
+ const deps = new Set();
94
+ // Frontmatter array-style: dependencies: [a, b]
95
+ const fmDeps = frontmatter['dependencies'] ?? frontmatter['requires'] ?? '';
96
+ if (fmDeps) {
97
+ for (const d of fmDeps.replace(/[[\]]/g, '').split(',')) {
98
+ const trimmed = d.trim();
99
+ if (trimmed)
100
+ deps.add(trimmed.toLowerCase());
101
+ }
102
+ }
103
+ // Body: lines under a dependencies/requirements heading
104
+ let inDepsSection = false;
105
+ for (const line of content.split('\n')) {
106
+ if (/^#{1,3}\s+(dependencies|requirements|requires)/i.test(line)) {
107
+ inDepsSection = true;
108
+ continue;
109
+ }
110
+ if (/^#{1,3}\s+/.test(line)) {
111
+ inDepsSection = false;
112
+ continue;
113
+ }
114
+ if (inDepsSection) {
115
+ const m = /^[-*]\s+(\S+)/.exec(line);
116
+ if (m)
117
+ deps.add(m[1].trim().toLowerCase());
118
+ }
119
+ }
120
+ return deps;
121
+ }
122
+ // ============================================================================
123
+ // Public API
124
+ // ============================================================================
125
+ /**
126
+ * Classify the change between two versions of a SKILL.md.
127
+ *
128
+ * Order of precedence:
129
+ * 1. Author-provided semver in frontmatter (trusted over heuristics)
130
+ * 2. Removed headings → 'major'
131
+ * 3. Risk score delta > 20 → upgrade to 'major'
132
+ * 4. Removed dependencies → 'major'
133
+ * 5. Added headings only → 'minor'
134
+ * 6. Added dependencies → 'minor'
135
+ * 7. Body edits with no structural changes → 'patch'
136
+ * 8. No detectable change → 'patch'
137
+ * 9. Error during classification → 'unknown'
138
+ *
139
+ * @param oldContent Previous SKILL.md content
140
+ * @param newContent Updated SKILL.md content
141
+ * @param oldRiskScore Risk score of the old version (0–100, optional)
142
+ * @param newRiskScore Risk score of the new version (0–100, optional)
143
+ * @returns Semantic change type
144
+ */
145
+ export function classifyChange(oldContent, newContent, oldRiskScore, newRiskScore) {
146
+ try {
147
+ const oldFm = parseFrontmatter(oldContent);
148
+ const newFm = parseFrontmatter(newContent);
149
+ // 1. Trust author-provided semver — only when the semver actually changed
150
+ const oldSemver = extractSemver(oldFm);
151
+ const newSemver = extractSemver(newFm);
152
+ if (oldSemver && newSemver && oldSemver !== newSemver) {
153
+ const fromSemver = classifyBySemver(oldSemver, newSemver);
154
+ if (fromSemver)
155
+ return fromSemver;
156
+ }
157
+ // 2. Heading analysis
158
+ const oldHeadings = extractHeadings(oldContent);
159
+ const newHeadings = extractHeadings(newContent);
160
+ const removedHeadings = [...oldHeadings].filter((h) => !newHeadings.has(h));
161
+ const addedHeadings = [...newHeadings].filter((h) => !oldHeadings.has(h));
162
+ if (removedHeadings.length > 0)
163
+ return 'major';
164
+ // 3. Risk score delta — large increase signals a major change
165
+ if (typeof oldRiskScore === 'number' &&
166
+ typeof newRiskScore === 'number' &&
167
+ newRiskScore - oldRiskScore > 20) {
168
+ return 'major';
169
+ }
170
+ // 4. Dependency analysis
171
+ const oldDeps = extractDependencies(oldContent, oldFm);
172
+ const newDeps = extractDependencies(newContent, newFm);
173
+ const removedDeps = [...oldDeps].filter((d) => !newDeps.has(d));
174
+ const addedDeps = [...newDeps].filter((d) => !oldDeps.has(d));
175
+ if (removedDeps.length > 0)
176
+ return 'major';
177
+ // 5–6. Additions-only → minor
178
+ if (addedHeadings.length > 0 || addedDeps.length > 0)
179
+ return 'minor';
180
+ // 7–8. Any textual change or no change → patch
181
+ return 'patch';
182
+ }
183
+ catch {
184
+ return 'unknown';
185
+ }
186
+ }
187
+ //# sourceMappingURL=change-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-classifier.js","sourceRoot":"","sources":["../../../src/versioning/change-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Tests for change-classifier.ts
3
+ * @see SMI-skill-version-tracking Wave 2
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=change-classifier.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-classifier.test.d.ts","sourceRoot":"","sources":["../../../src/versioning/change-classifier.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,275 @@
1
+ /**
2
+ * @fileoverview Tests for change-classifier.ts
3
+ * @see SMI-skill-version-tracking Wave 2
4
+ */
5
+ import { describe, it, expect } from 'vitest';
6
+ import { classifyChange } from './change-classifier.js';
7
+ // ============================================================================
8
+ // Fixtures
9
+ // ============================================================================
10
+ const BASE_SKILL = `---
11
+ name: test-skill
12
+ version: 1.0.0
13
+ ---
14
+
15
+ ## Overview
16
+
17
+ This is a test skill.
18
+
19
+ ## Usage
20
+
21
+ Run with /test.
22
+
23
+ ## Configuration
24
+
25
+ Set env vars.
26
+ `;
27
+ const WITH_HEADING_REMOVED = `---
28
+ name: test-skill
29
+ version: 1.0.0
30
+ ---
31
+
32
+ ## Overview
33
+
34
+ This is a test skill.
35
+
36
+ ## Usage
37
+
38
+ Run with /test.
39
+ `;
40
+ const WITH_HEADING_ADDED = `---
41
+ name: test-skill
42
+ version: 1.0.0
43
+ ---
44
+
45
+ ## Overview
46
+
47
+ This is a test skill.
48
+
49
+ ## Usage
50
+
51
+ Run with /test.
52
+
53
+ ## Configuration
54
+
55
+ Set env vars.
56
+
57
+ ## Examples
58
+
59
+ Here are examples.
60
+ `;
61
+ const WITH_BODY_EDIT_ONLY = `---
62
+ name: test-skill
63
+ version: 1.0.0
64
+ ---
65
+
66
+ ## Overview
67
+
68
+ This is an UPDATED test skill.
69
+
70
+ ## Usage
71
+
72
+ Run with /test command.
73
+
74
+ ## Configuration
75
+
76
+ Set your env vars here.
77
+ `;
78
+ const WITH_SEMVER_MAJOR = `---
79
+ name: test-skill
80
+ version: 2.0.0
81
+ ---
82
+
83
+ ## Overview
84
+
85
+ This is a test skill.
86
+
87
+ ## Usage
88
+
89
+ Run with /test.
90
+
91
+ ## Configuration
92
+
93
+ Set env vars.
94
+ `;
95
+ const WITH_SEMVER_MINOR = `---
96
+ name: test-skill
97
+ version: 1.1.0
98
+ ---
99
+
100
+ ## Overview
101
+
102
+ This is a test skill.
103
+
104
+ ## Usage
105
+
106
+ Run with /test.
107
+
108
+ ## Configuration
109
+
110
+ Set env vars.
111
+ `;
112
+ const WITH_SEMVER_PATCH = `---
113
+ name: test-skill
114
+ version: 1.0.1
115
+ ---
116
+
117
+ ## Overview
118
+
119
+ This is a test skill.
120
+
121
+ ## Usage
122
+
123
+ Run with /test.
124
+
125
+ ## Configuration
126
+
127
+ Set env vars.
128
+ `;
129
+ const WITH_DEPENDENCY_REMOVED = `---
130
+ name: test-skill
131
+ version: 1.0.0
132
+ ---
133
+
134
+ ## Overview
135
+
136
+ A test skill with dependencies.
137
+
138
+ ## Dependencies
139
+
140
+ - dep-b
141
+
142
+ ## Usage
143
+
144
+ Run with /test.
145
+ `;
146
+ const WITH_DEPENDENCY_ADDED = `---
147
+ name: test-skill
148
+ version: 1.0.0
149
+ ---
150
+
151
+ ## Overview
152
+
153
+ A test skill with dependencies.
154
+
155
+ ## Dependencies
156
+
157
+ - dep-a
158
+ - dep-b
159
+ - dep-c
160
+
161
+ ## Usage
162
+
163
+ Run with /test.
164
+ `;
165
+ const BASE_WITH_DEPS = `---
166
+ name: test-skill
167
+ version: 1.0.0
168
+ ---
169
+
170
+ ## Overview
171
+
172
+ A test skill with dependencies.
173
+
174
+ ## Dependencies
175
+
176
+ - dep-a
177
+ - dep-b
178
+
179
+ ## Usage
180
+
181
+ Run with /test.
182
+ `;
183
+ // ============================================================================
184
+ // Tests
185
+ // ============================================================================
186
+ describe('classifyChange', () => {
187
+ describe('heading removal → major', () => {
188
+ it('returns major when a heading is removed', () => {
189
+ expect(classifyChange(BASE_SKILL, WITH_HEADING_REMOVED)).toBe('major');
190
+ });
191
+ it('returns major when multiple headings are removed', () => {
192
+ const twoHeadingsGone = `---
193
+ name: test-skill
194
+ version: 1.0.0
195
+ ---
196
+
197
+ ## Overview
198
+
199
+ Only this remains.
200
+ `;
201
+ expect(classifyChange(BASE_SKILL, twoHeadingsGone)).toBe('major');
202
+ });
203
+ });
204
+ describe('heading addition only → minor', () => {
205
+ it('returns minor when a heading is added with no removals', () => {
206
+ expect(classifyChange(BASE_SKILL, WITH_HEADING_ADDED)).toBe('minor');
207
+ });
208
+ });
209
+ describe('body edits only → patch', () => {
210
+ it('returns patch when only body text changes', () => {
211
+ expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY)).toBe('patch');
212
+ });
213
+ it('returns patch when content is identical', () => {
214
+ expect(classifyChange(BASE_SKILL, BASE_SKILL)).toBe('patch');
215
+ });
216
+ });
217
+ describe('semver in frontmatter overrides heuristic', () => {
218
+ it('returns major when semver major bumps', () => {
219
+ // semver overrides even if headings look like minor
220
+ expect(classifyChange(BASE_SKILL, WITH_SEMVER_MAJOR)).toBe('major');
221
+ });
222
+ it('returns minor when semver minor bumps', () => {
223
+ expect(classifyChange(BASE_SKILL, WITH_SEMVER_MINOR)).toBe('minor');
224
+ });
225
+ it('returns patch when semver patch bumps', () => {
226
+ expect(classifyChange(BASE_SKILL, WITH_SEMVER_PATCH)).toBe('patch');
227
+ });
228
+ it('semver override applies even when headings were removed (semver wins)', () => {
229
+ // new content: semver 2.0.0 + heading removed — semver says major, heuristic also says major
230
+ const newContent = `---
231
+ name: test-skill
232
+ version: 2.0.0
233
+ ---
234
+
235
+ ## Overview
236
+
237
+ Only overview.
238
+ `;
239
+ expect(classifyChange(BASE_SKILL, newContent)).toBe('major');
240
+ });
241
+ });
242
+ describe('risk score delta > 20 → major', () => {
243
+ it('upgrades to major when risk delta exceeds 20', () => {
244
+ // No heading changes but risk jumped significantly
245
+ expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY, 10, 35)).toBe('major');
246
+ });
247
+ it('does not upgrade when risk delta is exactly 20', () => {
248
+ expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY, 10, 30)).toBe('patch');
249
+ });
250
+ it('does not upgrade when risk decreases', () => {
251
+ expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY, 50, 20)).toBe('patch');
252
+ });
253
+ });
254
+ describe('dependency changes', () => {
255
+ it('returns major when a dependency is removed', () => {
256
+ // No semver change, no heading change, but dep removed
257
+ const base = BASE_WITH_DEPS;
258
+ expect(classifyChange(base, WITH_DEPENDENCY_REMOVED)).toBe('major');
259
+ });
260
+ it('returns minor when a dependency is added', () => {
261
+ const base = BASE_WITH_DEPS;
262
+ expect(classifyChange(base, WITH_DEPENDENCY_ADDED)).toBe('minor');
263
+ });
264
+ });
265
+ describe('error / unknown content', () => {
266
+ it('returns patch for empty content (no headings or semver)', () => {
267
+ expect(classifyChange('', '')).toBe('patch');
268
+ });
269
+ it('returns unknown when classifier throws (simulated by invalid regex-triggering content)', () => {
270
+ // Pass valid strings — classifier should not throw, returns patch
271
+ expect(classifyChange('hello', 'world')).toBe('patch');
272
+ });
273
+ });
274
+ });
275
+ //# sourceMappingURL=change-classifier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-classifier.test.js","sourceRoot":"","sources":["../../../src/versioning/change-classifier.test.ts"],"names":[],"mappings":"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"}