@skillsmith/core 0.12.1 → 0.12.3

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 (398) hide show
  1. package/CHANGELOG.md +164 -0
  2. package/README.md +2 -2
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/api/client.d.ts +5 -3
  5. package/dist/src/api/client.d.ts.map +1 -1
  6. package/dist/src/api/client.js +23 -33
  7. package/dist/src/api/client.js.map +1 -1
  8. package/dist/src/api/client.registry-sync.d.ts +28 -0
  9. package/dist/src/api/client.registry-sync.d.ts.map +1 -0
  10. package/dist/src/api/client.registry-sync.js +36 -0
  11. package/dist/src/api/client.registry-sync.js.map +1 -0
  12. package/dist/src/api/client.test.js +185 -0
  13. package/dist/src/api/client.test.js.map +1 -1
  14. package/dist/src/api/client.toSkill.d.ts +16 -0
  15. package/dist/src/api/client.toSkill.d.ts.map +1 -0
  16. package/dist/src/api/client.toSkill.js +46 -0
  17. package/dist/src/api/client.toSkill.js.map +1 -0
  18. package/dist/src/api/client.types.d.ts +22 -0
  19. package/dist/src/api/client.types.d.ts.map +1 -1
  20. package/dist/src/api/index.d.ts +1 -1
  21. package/dist/src/api/index.d.ts.map +1 -1
  22. package/dist/src/api/index.js.map +1 -1
  23. package/dist/src/api/schemas.d.ts +28 -0
  24. package/dist/src/api/schemas.d.ts.map +1 -1
  25. package/dist/src/api/schemas.js +13 -0
  26. package/dist/src/api/schemas.js.map +1 -1
  27. package/dist/src/audit/remote-audit.d.ts +85 -0
  28. package/dist/src/audit/remote-audit.d.ts.map +1 -1
  29. package/dist/src/audit/remote-audit.js +126 -3
  30. package/dist/src/audit/remote-audit.js.map +1 -1
  31. package/dist/src/audit/remote-audit.test.js +217 -1
  32. package/dist/src/audit/remote-audit.test.js.map +1 -1
  33. package/dist/src/config/index.d.ts +1 -0
  34. package/dist/src/config/index.d.ts.map +1 -1
  35. package/dist/src/config/index.js.map +1 -1
  36. package/dist/src/db/migration-runner.d.ts.map +1 -1
  37. package/dist/src/db/migration-runner.js +6 -0
  38. package/dist/src/db/migration-runner.js.map +1 -1
  39. package/dist/src/db/migrations/v18-skill-versions-real-content-hash.d.ts +36 -0
  40. package/dist/src/db/migrations/v18-skill-versions-real-content-hash.d.ts.map +1 -0
  41. package/dist/src/db/migrations/v18-skill-versions-real-content-hash.js +38 -0
  42. package/dist/src/db/migrations/v18-skill-versions-real-content-hash.js.map +1 -0
  43. package/dist/src/db/schema.d.ts +1 -1
  44. package/dist/src/db/schema.d.ts.map +1 -1
  45. package/dist/src/db/schema.js +3 -1
  46. package/dist/src/db/schema.js.map +1 -1
  47. package/dist/src/exports/services.d.ts +3 -7
  48. package/dist/src/exports/services.d.ts.map +1 -1
  49. package/dist/src/exports/services.install.d.ts +18 -0
  50. package/dist/src/exports/services.install.d.ts.map +1 -0
  51. package/dist/src/exports/services.install.js +62 -0
  52. package/dist/src/exports/services.install.js.map +1 -0
  53. package/dist/src/exports/services.js +12 -32
  54. package/dist/src/exports/services.js.map +1 -1
  55. package/dist/src/exports/types.d.ts +1 -1
  56. package/dist/src/exports/types.d.ts.map +1 -1
  57. package/dist/src/index.d.ts +6 -5
  58. package/dist/src/index.d.ts.map +1 -1
  59. package/dist/src/index.js +9 -4
  60. package/dist/src/index.js.map +1 -1
  61. package/dist/src/install/agent-config-merge.json.d.ts +5 -4
  62. package/dist/src/install/agent-config-merge.json.d.ts.map +1 -1
  63. package/dist/src/install/agent-config-merge.json.js +10 -9
  64. package/dist/src/install/agent-config-merge.json.js.map +1 -1
  65. package/dist/src/install/agent-config-merge.types.d.ts +11 -1
  66. package/dist/src/install/agent-config-merge.types.d.ts.map +1 -1
  67. package/dist/src/install/agent-config-merge.types.js.map +1 -1
  68. package/dist/src/install/agent-harness-targets.d.ts +30 -2
  69. package/dist/src/install/agent-harness-targets.d.ts.map +1 -1
  70. package/dist/src/install/agent-harness-targets.js +17 -0
  71. package/dist/src/install/agent-harness-targets.js.map +1 -1
  72. package/dist/src/install/agent-manifest-path-guard.d.ts +28 -3
  73. package/dist/src/install/agent-manifest-path-guard.d.ts.map +1 -1
  74. package/dist/src/install/agent-manifest-path-guard.js +59 -3
  75. package/dist/src/install/agent-manifest-path-guard.js.map +1 -1
  76. package/dist/src/install/agent-manifest-path-guard.test.js +27 -1
  77. package/dist/src/install/agent-manifest-path-guard.test.js.map +1 -1
  78. package/dist/src/install/agent-pack-installer.antigravity-mcp.d.ts +74 -0
  79. package/dist/src/install/agent-pack-installer.antigravity-mcp.d.ts.map +1 -0
  80. package/dist/src/install/agent-pack-installer.antigravity-mcp.js +106 -0
  81. package/dist/src/install/agent-pack-installer.antigravity-mcp.js.map +1 -0
  82. package/dist/src/install/agent-pack-installer.antigravity-mcp.test.d.ts +2 -0
  83. package/dist/src/install/agent-pack-installer.antigravity-mcp.test.d.ts.map +1 -0
  84. package/dist/src/install/agent-pack-installer.antigravity-mcp.test.js +157 -0
  85. package/dist/src/install/agent-pack-installer.antigravity-mcp.test.js.map +1 -0
  86. package/dist/src/install/agent-pack-installer.cursor-mcp.d.ts +53 -0
  87. package/dist/src/install/agent-pack-installer.cursor-mcp.d.ts.map +1 -0
  88. package/dist/src/install/agent-pack-installer.cursor-mcp.js +207 -0
  89. package/dist/src/install/agent-pack-installer.cursor-mcp.js.map +1 -0
  90. package/dist/src/install/agent-pack-installer.cursor-mcp.test.d.ts +2 -0
  91. package/dist/src/install/agent-pack-installer.cursor-mcp.test.d.ts.map +1 -0
  92. package/dist/src/install/agent-pack-installer.cursor-mcp.test.js +285 -0
  93. package/dist/src/install/agent-pack-installer.cursor-mcp.test.js.map +1 -0
  94. package/dist/src/install/agent-pack-installer.d.ts +8 -0
  95. package/dist/src/install/agent-pack-installer.d.ts.map +1 -1
  96. package/dist/src/install/agent-pack-installer.entry.d.ts +120 -3
  97. package/dist/src/install/agent-pack-installer.entry.d.ts.map +1 -1
  98. package/dist/src/install/agent-pack-installer.entry.js +166 -3
  99. package/dist/src/install/agent-pack-installer.entry.js.map +1 -1
  100. package/dist/src/install/agent-pack-installer.js +97 -3
  101. package/dist/src/install/agent-pack-installer.js.map +1 -1
  102. package/dist/src/install/agent-pack-installer.types.d.ts +27 -0
  103. package/dist/src/install/agent-pack-installer.types.d.ts.map +1 -1
  104. package/dist/src/install/agent-pack-installer.types.js +6 -0
  105. package/dist/src/install/agent-pack-installer.types.js.map +1 -1
  106. package/dist/src/install/agent-pack-installer.workspace-scope.test.d.ts +2 -0
  107. package/dist/src/install/agent-pack-installer.workspace-scope.test.d.ts.map +1 -0
  108. package/dist/src/install/agent-pack-installer.workspace-scope.test.js +148 -0
  109. package/dist/src/install/agent-pack-installer.workspace-scope.test.js.map +1 -0
  110. package/dist/src/install/agent-pack-uninstaller.d.ts +18 -7
  111. package/dist/src/install/agent-pack-uninstaller.d.ts.map +1 -1
  112. package/dist/src/install/agent-pack-uninstaller.js +59 -9
  113. package/dist/src/install/agent-pack-uninstaller.js.map +1 -1
  114. package/dist/src/install/agent-pack-uninstaller.test.js +74 -1
  115. package/dist/src/install/agent-pack-uninstaller.test.js.map +1 -1
  116. package/dist/src/install/fan-out.d.ts.map +1 -1
  117. package/dist/src/install/fan-out.js +6 -0
  118. package/dist/src/install/fan-out.js.map +1 -1
  119. package/dist/src/install/index.d.ts +2 -0
  120. package/dist/src/install/index.d.ts.map +1 -1
  121. package/dist/src/install/index.js +2 -0
  122. package/dist/src/install/index.js.map +1 -1
  123. package/dist/src/install/workspace-scope.d.ts +207 -0
  124. package/dist/src/install/workspace-scope.d.ts.map +1 -0
  125. package/dist/src/install/workspace-scope.js +275 -0
  126. package/dist/src/install/workspace-scope.js.map +1 -0
  127. package/dist/src/install/workspace-scope.test.d.ts +2 -0
  128. package/dist/src/install/workspace-scope.test.d.ts.map +1 -0
  129. package/dist/src/install/workspace-scope.test.js +378 -0
  130. package/dist/src/install/workspace-scope.test.js.map +1 -0
  131. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +9 -1
  132. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  133. package/dist/src/scripts/scan-imported-skills.d.ts +7 -1
  134. package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
  135. package/dist/src/scripts/scan-imported-skills.js +15 -2
  136. package/dist/src/scripts/scan-imported-skills.js.map +1 -1
  137. package/dist/src/scripts/skill-scanner/allowlist.d.ts +10 -0
  138. package/dist/src/scripts/skill-scanner/allowlist.d.ts.map +1 -1
  139. package/dist/src/scripts/skill-scanner/allowlist.js +10 -0
  140. package/dist/src/scripts/skill-scanner/allowlist.js.map +1 -1
  141. package/dist/src/scripts/skill-scanner/index.d.ts +8 -0
  142. package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -1
  143. package/dist/src/scripts/skill-scanner/index.js +13 -5
  144. package/dist/src/scripts/skill-scanner/index.js.map +1 -1
  145. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
  146. package/dist/src/scripts/skill-scanner/trust-scorer.js +6 -0
  147. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  148. package/dist/src/security/__tests__/pathValidation.test.js +30 -1
  149. package/dist/src/security/__tests__/pathValidation.test.js.map +1 -1
  150. package/dist/src/security/scanner/SecurityScanner.action-context.d.ts +15 -0
  151. package/dist/src/security/scanner/SecurityScanner.action-context.d.ts.map +1 -0
  152. package/dist/src/security/scanner/SecurityScanner.action-context.js +209 -0
  153. package/dist/src/security/scanner/SecurityScanner.action-context.js.map +1 -0
  154. package/dist/src/security/scanner/SecurityScanner.d.ts +25 -0
  155. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  156. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +40 -1
  157. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
  158. package/dist/src/security/scanner/SecurityScanner.helpers.js +88 -51
  159. package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
  160. package/dist/src/security/scanner/SecurityScanner.js +39 -6
  161. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  162. package/dist/src/security/scanner/SecurityScanner.pii.d.ts +30 -0
  163. package/dist/src/security/scanner/SecurityScanner.pii.d.ts.map +1 -1
  164. package/dist/src/security/scanner/SecurityScanner.pii.js +8 -1
  165. package/dist/src/security/scanner/SecurityScanner.pii.js.map +1 -1
  166. package/dist/src/security/scanner/SecurityScanner.prose-lexicon.d.ts +60 -0
  167. package/dist/src/security/scanner/SecurityScanner.prose-lexicon.d.ts.map +1 -0
  168. package/dist/src/security/scanner/SecurityScanner.prose-lexicon.js +228 -0
  169. package/dist/src/security/scanner/SecurityScanner.prose-lexicon.js.map +1 -0
  170. package/dist/src/security/scanner/SecurityScanner.scanners.d.ts.map +1 -1
  171. package/dist/src/security/scanner/SecurityScanner.scanners.js +35 -5
  172. package/dist/src/security/scanner/SecurityScanner.scanners.js.map +1 -1
  173. package/dist/src/security/scanner/SecurityScanner.value-gate.d.ts +49 -0
  174. package/dist/src/security/scanner/SecurityScanner.value-gate.d.ts.map +1 -0
  175. package/dist/src/security/scanner/SecurityScanner.value-gate.js +134 -0
  176. package/dist/src/security/scanner/SecurityScanner.value-gate.js.map +1 -0
  177. package/dist/src/security/scanner/SecurityScanner.weak-passwords.d.ts +55 -0
  178. package/dist/src/security/scanner/SecurityScanner.weak-passwords.d.ts.map +1 -0
  179. package/dist/src/security/scanner/SecurityScanner.weak-passwords.js +313 -0
  180. package/dist/src/security/scanner/SecurityScanner.weak-passwords.js.map +1 -0
  181. package/dist/src/security/scanner/patterns.d.ts +16 -6
  182. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  183. package/dist/src/security/scanner/patterns.js +25 -61
  184. package/dist/src/security/scanner/patterns.js.map +1 -1
  185. package/dist/src/security/scanner/patterns.sensitive-path.d.ts +45 -0
  186. package/dist/src/security/scanner/patterns.sensitive-path.d.ts.map +1 -0
  187. package/dist/src/security/scanner/patterns.sensitive-path.js +137 -0
  188. package/dist/src/security/scanner/patterns.sensitive-path.js.map +1 -0
  189. package/dist/src/security/scanner/regex-utils.d.ts +31 -17
  190. package/dist/src/security/scanner/regex-utils.d.ts.map +1 -1
  191. package/dist/src/security/scanner/regex-utils.js +31 -17
  192. package/dist/src/security/scanner/regex-utils.js.map +1 -1
  193. package/dist/src/security/scanner/types.d.ts +9 -0
  194. package/dist/src/security/scanner/types.d.ts.map +1 -1
  195. package/dist/src/services/SubagentGenerator.client-profiles.d.ts +258 -0
  196. package/dist/src/services/SubagentGenerator.client-profiles.d.ts.map +1 -0
  197. package/dist/src/services/SubagentGenerator.client-profiles.js +260 -0
  198. package/dist/src/services/SubagentGenerator.client-profiles.js.map +1 -0
  199. package/dist/src/services/SubagentGenerator.d.ts +19 -41
  200. package/dist/src/services/SubagentGenerator.d.ts.map +1 -1
  201. package/dist/src/services/SubagentGenerator.helpers.d.ts +64 -0
  202. package/dist/src/services/SubagentGenerator.helpers.d.ts.map +1 -0
  203. package/dist/src/services/SubagentGenerator.helpers.js +228 -0
  204. package/dist/src/services/SubagentGenerator.helpers.js.map +1 -0
  205. package/dist/src/services/SubagentGenerator.js +66 -208
  206. package/dist/src/services/SubagentGenerator.js.map +1 -1
  207. package/dist/src/services/SubagentGenerator.types.d.ts +45 -0
  208. package/dist/src/services/SubagentGenerator.types.d.ts.map +1 -0
  209. package/dist/src/services/SubagentGenerator.types.js +14 -0
  210. package/dist/src/services/SubagentGenerator.types.js.map +1 -0
  211. package/dist/src/services/TransformationService.d.ts +18 -61
  212. package/dist/src/services/TransformationService.d.ts.map +1 -1
  213. package/dist/src/services/TransformationService.js +29 -17
  214. package/dist/src/services/TransformationService.js.map +1 -1
  215. package/dist/src/services/TransformationService.types.d.ts +74 -0
  216. package/dist/src/services/TransformationService.types.d.ts.map +1 -0
  217. package/dist/src/services/TransformationService.types.js +8 -0
  218. package/dist/src/services/TransformationService.types.js.map +1 -0
  219. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts +5 -0
  220. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts.map +1 -0
  221. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js +72 -0
  222. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js.map +1 -0
  223. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts +2 -0
  224. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts.map +1 -0
  225. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js +61 -0
  226. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js.map +1 -0
  227. package/dist/src/services/__tests__/SubagentGenerator.test.js +155 -0
  228. package/dist/src/services/__tests__/SubagentGenerator.test.js.map +1 -1
  229. package/dist/src/services/__tests__/TransformationService.test.js +48 -0
  230. package/dist/src/services/__tests__/TransformationService.test.js.map +1 -1
  231. package/dist/src/services/agent-pack/agent-pack.test.js +1 -0
  232. package/dist/src/services/agent-pack/agent-pack.test.js.map +1 -1
  233. package/dist/src/services/agent-pack/prompt-source.d.ts +1 -1
  234. package/dist/src/services/agent-pack/prompt-source.d.ts.map +1 -1
  235. package/dist/src/services/agent-pack/prompt-source.js +10 -3
  236. package/dist/src/services/agent-pack/prompt-source.js.map +1 -1
  237. package/dist/src/services/agent-pack/types.d.ts +26 -2
  238. package/dist/src/services/agent-pack/types.d.ts.map +1 -1
  239. package/dist/src/services/agent-pack/types.js +13 -0
  240. package/dist/src/services/agent-pack/types.js.map +1 -1
  241. package/dist/src/services/agent-tool-profile.d.ts.map +1 -1
  242. package/dist/src/services/agent-tool-profile.js +7 -0
  243. package/dist/src/services/agent-tool-profile.js.map +1 -1
  244. package/dist/src/services/agent-tool-profile.test.js +2 -2
  245. package/dist/src/services/skill-content-comparison.d.ts +71 -0
  246. package/dist/src/services/skill-content-comparison.d.ts.map +1 -0
  247. package/dist/src/services/skill-content-comparison.js +90 -0
  248. package/dist/src/services/skill-content-comparison.js.map +1 -0
  249. package/dist/src/services/skill-content-comparison.test.d.ts +6 -0
  250. package/dist/src/services/skill-content-comparison.test.d.ts.map +1 -0
  251. package/dist/src/services/skill-content-comparison.test.js +83 -0
  252. package/dist/src/services/skill-content-comparison.test.js.map +1 -0
  253. package/dist/src/services/skill-identity-classification.d.ts +202 -0
  254. package/dist/src/services/skill-identity-classification.d.ts.map +1 -0
  255. package/dist/src/services/skill-identity-classification.js +295 -0
  256. package/dist/src/services/skill-identity-classification.js.map +1 -0
  257. package/dist/src/services/skill-identity-classification.test.d.ts +6 -0
  258. package/dist/src/services/skill-identity-classification.test.d.ts.map +1 -0
  259. package/dist/src/services/skill-identity-classification.test.js +314 -0
  260. package/dist/src/services/skill-identity-classification.test.js.map +1 -0
  261. package/dist/src/services/skill-installation.content.d.ts.map +1 -1
  262. package/dist/src/services/skill-installation.content.js +6 -1
  263. package/dist/src/services/skill-installation.content.js.map +1 -1
  264. package/dist/src/services/skill-installation.helpers.d.ts +8 -15
  265. package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
  266. package/dist/src/services/skill-installation.helpers.js +11 -105
  267. package/dist/src/services/skill-installation.helpers.js.map +1 -1
  268. package/dist/src/services/skill-installation.helpers.test.js +106 -1
  269. package/dist/src/services/skill-installation.helpers.test.js.map +1 -1
  270. package/dist/src/services/skill-installation.service.js +1 -1
  271. package/dist/src/services/skill-installation.service.js.map +1 -1
  272. package/dist/src/services/skill-installation.types.d.ts +33 -0
  273. package/dist/src/services/skill-installation.types.d.ts.map +1 -1
  274. package/dist/src/services/skill-installation.types.js.map +1 -1
  275. package/dist/src/services/skill-installation.uninstall.d.ts +84 -0
  276. package/dist/src/services/skill-installation.uninstall.d.ts.map +1 -0
  277. package/dist/src/services/skill-installation.uninstall.js +252 -0
  278. package/dist/src/services/skill-installation.uninstall.js.map +1 -0
  279. package/dist/src/services/skill-manifest.d.ts +41 -0
  280. package/dist/src/services/skill-manifest.d.ts.map +1 -1
  281. package/dist/src/services/skill-manifest.js +93 -0
  282. package/dist/src/services/skill-manifest.js.map +1 -1
  283. package/dist/src/services/skill-manifest.test.js +27 -0
  284. package/dist/src/services/skill-manifest.test.js.map +1 -1
  285. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  286. package/dist/src/sync/SyncEngine.js +69 -77
  287. package/dist/src/sync/SyncEngine.js.map +1 -1
  288. package/dist/src/telemetry/agent-marker.d.ts +8 -0
  289. package/dist/src/telemetry/agent-marker.d.ts.map +1 -1
  290. package/dist/src/telemetry/agent-marker.js +7 -0
  291. package/dist/src/telemetry/agent-marker.js.map +1 -1
  292. package/dist/src/telemetry/agent-marker.test.js +7 -1
  293. package/dist/src/telemetry/agent-marker.test.js.map +1 -1
  294. package/dist/src/telemetry/index.d.ts +1 -1
  295. package/dist/src/telemetry/index.d.ts.map +1 -1
  296. package/dist/src/telemetry/index.js +1 -1
  297. package/dist/src/telemetry/index.js.map +1 -1
  298. package/dist/src/telemetry/wrap.d.ts +6 -0
  299. package/dist/src/telemetry/wrap.d.ts.map +1 -1
  300. package/dist/src/telemetry/wrap.js +65 -10
  301. package/dist/src/telemetry/wrap.js.map +1 -1
  302. package/dist/src/telemetry/wrap.test.js +81 -1
  303. package/dist/src/telemetry/wrap.test.js.map +1 -1
  304. package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts +26 -0
  305. package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts.map +1 -0
  306. package/dist/src/telemetry/wrap.tool-call-sink.test.js +162 -0
  307. package/dist/src/telemetry/wrap.tool-call-sink.test.js.map +1 -0
  308. package/dist/src/types/skill.d.ts +9 -1
  309. package/dist/src/types/skill.d.ts.map +1 -1
  310. package/dist/src/utils/index.d.ts +2 -1
  311. package/dist/src/utils/index.d.ts.map +1 -1
  312. package/dist/src/utils/index.js +3 -1
  313. package/dist/src/utils/index.js.map +1 -1
  314. package/dist/src/utils/skill-name.d.ts +19 -0
  315. package/dist/src/utils/skill-name.d.ts.map +1 -0
  316. package/dist/src/utils/skill-name.js +26 -0
  317. package/dist/src/utils/skill-name.js.map +1 -0
  318. package/dist/src/utils/skill-name.test.d.ts +2 -0
  319. package/dist/src/utils/skill-name.test.d.ts.map +1 -0
  320. package/dist/src/utils/skill-name.test.js +34 -0
  321. package/dist/src/utils/skill-name.test.js.map +1 -0
  322. package/dist/src/utils/version-check.d.ts +61 -0
  323. package/dist/src/utils/version-check.d.ts.map +1 -1
  324. package/dist/src/utils/version-check.js +78 -1
  325. package/dist/src/utils/version-check.js.map +1 -1
  326. package/dist/src/utils/version-check.test.js +130 -1
  327. package/dist/src/utils/version-check.test.js.map +1 -1
  328. package/dist/tests/db/migration-runner-race.test.js +19 -9
  329. package/dist/tests/db/migration-runner-race.test.js.map +1 -1
  330. package/dist/tests/install/fan-out.test.js +27 -0
  331. package/dist/tests/install/fan-out.test.js.map +1 -1
  332. package/dist/tests/security/ContinuousSecurity.performance.test.js +12 -7
  333. package/dist/tests/security/ContinuousSecurity.performance.test.js.map +1 -1
  334. package/dist/tests/security/ContinuousSecurity.test.js +14 -2
  335. package/dist/tests/security/ContinuousSecurity.test.js.map +1 -1
  336. package/dist/tests/security/ai-defence-multiline-promotion.test.d.ts +10 -12
  337. package/dist/tests/security/ai-defence-multiline-promotion.test.d.ts.map +1 -1
  338. package/dist/tests/security/ai-defence-multiline-promotion.test.js +26 -33
  339. package/dist/tests/security/ai-defence-multiline-promotion.test.js.map +1 -1
  340. package/dist/tests/security/nested-instruction-long-attribute.test.js +20 -10
  341. package/dist/tests/security/nested-instruction-long-attribute.test.js.map +1 -1
  342. package/dist/tests/security/scanner-evidence-tiers.test.js +15 -0
  343. package/dist/tests/security/scanner-evidence-tiers.test.js.map +1 -1
  344. package/dist/tests/security/scanner-multiline-cap.test.d.ts +21 -0
  345. package/dist/tests/security/scanner-multiline-cap.test.d.ts.map +1 -0
  346. package/dist/tests/security/scanner-multiline-cap.test.js +152 -0
  347. package/dist/tests/security/scanner-multiline-cap.test.js.map +1 -0
  348. package/dist/tests/security/scanner-regression-guard.test.js +37 -0
  349. package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
  350. package/dist/tests/security/scanner-witness-sw1.test.d.ts +32 -0
  351. package/dist/tests/security/scanner-witness-sw1.test.d.ts.map +1 -0
  352. package/dist/tests/security/scanner-witness-sw1.test.js +255 -0
  353. package/dist/tests/security/scanner-witness-sw1.test.js.map +1 -0
  354. package/dist/tests/security/sensitive-path-adversarial-review.test.d.ts +2 -0
  355. package/dist/tests/security/sensitive-path-adversarial-review.test.d.ts.map +1 -0
  356. package/dist/tests/security/sensitive-path-adversarial-review.test.js +193 -0
  357. package/dist/tests/security/sensitive-path-adversarial-review.test.js.map +1 -0
  358. package/dist/tests/security/sensitive-path-fp.test.js +248 -0
  359. package/dist/tests/security/sensitive-path-fp.test.js.map +1 -1
  360. package/dist/tests/security/smi5879-corroboration.core.test.js +44 -0
  361. package/dist/tests/security/smi5879-corroboration.core.test.js.map +1 -1
  362. package/dist/tests/security/weak-password-lexicon.test.d.ts +18 -0
  363. package/dist/tests/security/weak-password-lexicon.test.d.ts.map +1 -0
  364. package/dist/tests/security/weak-password-lexicon.test.js +122 -0
  365. package/dist/tests/security/weak-password-lexicon.test.js.map +1 -0
  366. package/dist/tests/skill-scanner/allowlist.test.js +58 -4
  367. package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
  368. package/dist/tests/skill-scanner/categorizer.test.d.ts +2 -0
  369. package/dist/tests/skill-scanner/categorizer.test.d.ts.map +1 -0
  370. package/dist/tests/skill-scanner/categorizer.test.js +71 -0
  371. package/dist/tests/skill-scanner/categorizer.test.js.map +1 -0
  372. package/dist/tests/skill-scanner/cli-guard.test.d.ts +23 -0
  373. package/dist/tests/skill-scanner/cli-guard.test.d.ts.map +1 -0
  374. package/dist/tests/skill-scanner/cli-guard.test.js +71 -0
  375. package/dist/tests/skill-scanner/cli-guard.test.js.map +1 -0
  376. package/dist/tests/sync/SyncEngine.abort.test.js +15 -11
  377. package/dist/tests/sync/SyncEngine.abort.test.js.map +1 -1
  378. package/dist/tests/sync/SyncEngine.status.test.js +1 -1
  379. package/dist/tests/sync/SyncEngine.status.test.js.map +1 -1
  380. package/dist/tests/sync/SyncEngine.test.d.ts +11 -2
  381. package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -1
  382. package/dist/tests/sync/SyncEngine.test.js +164 -13
  383. package/dist/tests/sync/SyncEngine.test.js.map +1 -1
  384. package/dist/tests/unit/migrations/migration-v18.test.d.ts +16 -0
  385. package/dist/tests/unit/migrations/migration-v18.test.d.ts.map +1 -0
  386. package/dist/tests/unit/migrations/migration-v18.test.js +192 -0
  387. package/dist/tests/unit/migrations/migration-v18.test.js.map +1 -0
  388. package/dist/tests/unit/services/skill-installation.content.test.js +101 -1
  389. package/dist/tests/unit/services/skill-installation.content.test.js.map +1 -1
  390. package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.d.ts +29 -0
  391. package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.d.ts.map +1 -0
  392. package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.js +200 -0
  393. package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.js.map +1 -0
  394. package/dist/tests/unit/services/skill-installation.service.test.js +9 -8
  395. package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
  396. package/dist/tests/unit/sync-engine.source-aware.test.js +5 -5
  397. package/dist/tests/unit/sync-engine.source-aware.test.js.map +1 -1
  398. package/package.json +7 -2
@@ -19,7 +19,8 @@ import { createHash } from 'crypto';
19
19
  import { CacheRepository } from '../repositories/CacheRepository.js';
20
20
  import { analyzeSkill, quickTransformCheck } from './SkillAnalyzer.js';
21
21
  import { decomposeSkill, parallelizeTaskCalls, } from './SkillDecomposer.js';
22
- import { generateSubagent, } from './SubagentGenerator.js';
22
+ import { generateSubagent } from './SubagentGenerator.js';
23
+ import { CANONICAL_CLIENT } from '../install/paths.js';
23
24
  const DEFAULT_OPTIONS = {
24
25
  cacheTtl: 3600, // 1 hour
25
26
  enableCache: true,
@@ -58,9 +59,13 @@ export class TransformationService {
58
59
  * @param skillName - Human-readable skill name
59
60
  * @param description - Skill description
60
61
  * @param content - The full SKILL.md content
62
+ * @param client - SMI-6276: target client for the generated companion-agent
63
+ * frontmatter shape (default: canonical / `claude-code`, preserving prior
64
+ * behavior for every existing caller). See
65
+ * `SubagentGenerator.client-profiles.ts`.
61
66
  * @returns Transformation result
62
67
  */
63
- async transform(skillId, skillName, description, content) {
68
+ async transform(skillId, skillName, description, content, client = CANONICAL_CLIENT) {
64
69
  const startTime = Date.now();
65
70
  // SMI-1791: Validate content length to prevent DoS
66
71
  if (content.length > MAX_CONTENT_LENGTH) {
@@ -68,7 +73,7 @@ export class TransformationService {
68
73
  }
69
74
  // Check cache first (unless force transform)
70
75
  if (!this.options.forceTransform && this.cache) {
71
- const cached = this.getCachedTransformation(skillId, content);
76
+ const cached = this.getCachedTransformation(skillId, content, client);
72
77
  if (cached) {
73
78
  return cached;
74
79
  }
@@ -79,7 +84,7 @@ export class TransformationService {
79
84
  const result = this.createMinimalResult(content, startTime);
80
85
  // Cache the result
81
86
  if (this.cache) {
82
- this.cacheTransformation(skillId, content, result);
87
+ this.cacheTransformation(skillId, content, result, client);
83
88
  }
84
89
  return result;
85
90
  }
@@ -96,12 +101,12 @@ export class TransformationService {
96
101
  // 2. Decompose if needed
97
102
  const decomposition = decomposeSkill(transformedContent, analysis);
98
103
  // 3. Generate subagent if beneficial
99
- const subagentResult = generateSubagent(skillName, description, content, analysis);
104
+ const subagentResult = generateSubagent(skillName, description, content, analysis, client);
100
105
  // Build result
101
106
  const result = this.buildResult(decomposition, subagentResult, analysis, tasksParallelized, startTime);
102
107
  // Cache the result
103
108
  if (this.cache) {
104
- this.cacheTransformation(skillId, content, result);
109
+ this.cacheTransformation(skillId, content, result, client);
105
110
  }
106
111
  return result;
107
112
  }
@@ -114,9 +119,11 @@ export class TransformationService {
114
119
  * @param skillName - Human-readable skill name
115
120
  * @param description - Skill description
116
121
  * @param content - The full SKILL.md content
122
+ * @param client - SMI-6276: target client for the generated companion-agent
123
+ * frontmatter shape (default: canonical / `claude-code`).
117
124
  * @returns Transformation result
118
125
  */
119
- transformWithoutCache(skillName, description, content) {
126
+ transformWithoutCache(skillName, description, content, client = CANONICAL_CLIENT) {
120
127
  const startTime = Date.now();
121
128
  // SMI-1791: Validate content length to prevent DoS
122
129
  if (content.length > MAX_CONTENT_LENGTH) {
@@ -139,7 +146,7 @@ export class TransformationService {
139
146
  // 2. Decompose if needed
140
147
  const decomposition = decomposeSkill(transformedContent, analysis);
141
148
  // 3. Generate subagent if beneficial
142
- const subagentResult = generateSubagent(skillName, description, content, analysis);
149
+ const subagentResult = generateSubagent(skillName, description, content, analysis, client);
143
150
  return this.buildResult(decomposition, subagentResult, analysis, tasksParallelized, startTime);
144
151
  }
145
152
  /**
@@ -154,11 +161,11 @@ export class TransformationService {
154
161
  /**
155
162
  * Get cached transformation if available and valid
156
163
  */
157
- getCachedTransformation(skillId, content) {
164
+ getCachedTransformation(skillId, content, client) {
158
165
  if (!this.cache)
159
166
  return null;
160
167
  try {
161
- const cacheKey = this.buildCacheKey(skillId);
168
+ const cacheKey = this.buildCacheKey(skillId, client);
162
169
  const cached = this.cache.get(cacheKey);
163
170
  if (!cached)
164
171
  return null;
@@ -183,11 +190,11 @@ export class TransformationService {
183
190
  /**
184
191
  * Cache a transformation result
185
192
  */
186
- cacheTransformation(skillId, content, result) {
193
+ cacheTransformation(skillId, content, result, client) {
187
194
  if (!this.cache)
188
195
  return;
189
196
  try {
190
- const cacheKey = this.buildCacheKey(skillId);
197
+ const cacheKey = this.buildCacheKey(skillId, client);
191
198
  const contentHash = this.hashContent(content);
192
199
  const cacheEntry = {
193
200
  result,
@@ -203,10 +210,13 @@ export class TransformationService {
203
210
  }
204
211
  }
205
212
  /**
206
- * Build cache key for a skill
213
+ * Build cache key for a skill. Includes `client` (SMI-6276 pr-reviewer
214
+ * finding) -- without it, a cached transformation generated for one
215
+ * client's frontmatter shape gets silently served back for a different
216
+ * client, defeating the whole point of client-parameterized generation.
207
217
  */
208
- buildCacheKey(skillId) {
209
- return `${CACHE_KEY_PREFIX}${skillId}`;
218
+ buildCacheKey(skillId, client) {
219
+ return `${CACHE_KEY_PREFIX}${skillId}:${client}`;
210
220
  }
211
221
  /**
212
222
  * SMI-1790: Compute SHA-256 hash for content comparison
@@ -305,11 +315,13 @@ export class TransformationService {
305
315
  * @param skillName - Human-readable skill name
306
316
  * @param description - Skill description
307
317
  * @param content - The full SKILL.md content
318
+ * @param client - SMI-6276: target client for the generated companion-agent
319
+ * frontmatter shape (default: canonical / `claude-code`).
308
320
  * @returns Transformation result
309
321
  */
310
- export function transformSkill(skillName, description, content) {
322
+ export function transformSkill(skillName, description, content, client = CANONICAL_CLIENT) {
311
323
  const service = new TransformationService();
312
- return service.transformWithoutCache(skillName, description, content);
324
+ return service.transformWithoutCache(skillName, description, content, client);
313
325
  }
314
326
  export default TransformationService;
315
327
  //# sourceMappingURL=TransformationService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransformationService.js","sourceRoot":"","sources":["../../../src/services/TransformationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TransformationService.js","sourceRoot":"","sources":["../../../src/services/TransformationService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Type definitions for `TransformationService.ts` — split out (SMI-6276)
3
+ * when the `client` parameter threaded through by Wave 6 Step 1 pushed the
4
+ * combined file past the 500-line standard. Re-exported verbatim from
5
+ * `TransformationService.ts` so its own public import path is unaffected.
6
+ */
7
+ import type { SkillAnalysis } from './SkillAnalyzer.js';
8
+ import type { SubagentDefinition } from './SubagentGenerator.js';
9
+ /**
10
+ * Full transformation result for a skill
11
+ */
12
+ export interface TransformationResult {
13
+ /** Whether transformation was applied */
14
+ transformed: boolean;
15
+ /** The optimized main SKILL.md content */
16
+ mainSkillContent: string;
17
+ /** Sub-skills (if decomposed) */
18
+ subSkills: Array<{
19
+ filename: string;
20
+ content: string;
21
+ }>;
22
+ /** Companion subagent (if generated) */
23
+ subagent?: SubagentDefinition;
24
+ /** CLAUDE.md integration snippet */
25
+ claudeMdSnippet?: string;
26
+ /** Transformation statistics */
27
+ stats: TransformationStats;
28
+ /** Analysis that informed the transformation */
29
+ analysis: SkillAnalysis;
30
+ /** Attribution footer added to content */
31
+ attribution: string;
32
+ }
33
+ /**
34
+ * Statistics about the transformation
35
+ */
36
+ export interface TransformationStats {
37
+ /** Original content line count */
38
+ originalLines: number;
39
+ /** Optimized main skill line count */
40
+ optimizedLines: number;
41
+ /** Number of sub-skills extracted */
42
+ subSkillCount: number;
43
+ /** Whether Task() calls were parallelized */
44
+ tasksParallelized: boolean;
45
+ /** Whether subagent was generated */
46
+ subagentGenerated: boolean;
47
+ /** Estimated token reduction percentage */
48
+ tokenReductionPercent: number;
49
+ /** Transformation duration in ms */
50
+ transformDurationMs: number;
51
+ }
52
+ /**
53
+ * Cached transformation entry
54
+ */
55
+ export interface CachedTransformation {
56
+ result: TransformationResult;
57
+ skillHash: string;
58
+ cachedAt: string;
59
+ version: string;
60
+ }
61
+ /**
62
+ * Configuration for TransformationService
63
+ */
64
+ export interface TransformationServiceOptions {
65
+ /** Cache TTL in seconds (default: 3600 = 1 hour) */
66
+ cacheTtl?: number;
67
+ /** Enable caching (default: true) */
68
+ enableCache?: boolean;
69
+ /** Force re-transformation even if cached (default: false) */
70
+ forceTransform?: boolean;
71
+ /** Transformation version for cache invalidation */
72
+ version?: string;
73
+ }
74
+ //# sourceMappingURL=TransformationService.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformationService.types.d.ts","sourceRoot":"","sources":["../../../src/services/TransformationService.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAEhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,WAAW,EAAE,OAAO,CAAA;IAEpB,0CAA0C;IAC1C,gBAAgB,EAAE,MAAM,CAAA;IAExB,iCAAiC;IACjC,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;IAEF,wCAAwC;IACxC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAE7B,oCAAoC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,gCAAgC;IAChC,KAAK,EAAE,mBAAmB,CAAA;IAE1B,gDAAgD;IAChD,QAAQ,EAAE,aAAa,CAAA;IAEvB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAA;IAErB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAA;IAEtB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAA;IAErB,6CAA6C;IAC7C,iBAAiB,EAAE,OAAO,CAAA;IAE1B,qCAAqC;IACrC,iBAAiB,EAAE,OAAO,CAAA;IAE1B,2CAA2C;IAC3C,qBAAqB,EAAE,MAAM,CAAA;IAE7B,oCAAoC;IACpC,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,oBAAoB,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,qCAAqC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for `TransformationService.ts` — split out (SMI-6276)
3
+ * when the `client` parameter threaded through by Wave 6 Step 1 pushed the
4
+ * combined file past the 500-line standard. Re-exported verbatim from
5
+ * `TransformationService.ts` so its own public import path is unaffected.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=TransformationService.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformationService.types.js","sourceRoot":"","sources":["../../../src/services/TransformationService.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @fileoverview Tests for SubagentGenerator.client-profiles (SMI-6276)
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=SubagentGenerator.client-profiles.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubagentGenerator.client-profiles.test.d.ts","sourceRoot":"","sources":["../../../../src/services/__tests__/SubagentGenerator.client-profiles.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @fileoverview Tests for SubagentGenerator.client-profiles (SMI-6276)
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ import { CLIENT_IDS } from '../../install/paths.js';
6
+ import { SUBAGENT_CLIENT_PROFILES, getSubagentGenerationProfile, mapToolNames, } from '../SubagentGenerator.client-profiles.js';
7
+ describe('SubagentGenerator.client-profiles', () => {
8
+ describe('SUBAGENT_CLIENT_PROFILES', () => {
9
+ it('has an entry for every ClientId', () => {
10
+ for (const client of CLIENT_IDS) {
11
+ expect(SUBAGENT_CLIENT_PROFILES[client]).toBeDefined();
12
+ }
13
+ });
14
+ it('gives cursor the exact same profile object as claude-code (deliberate reuse)', () => {
15
+ expect(SUBAGENT_CLIENT_PROFILES.cursor).toBe(SUBAGENT_CLIENT_PROFILES['claude-code']);
16
+ });
17
+ it('claude-code accepts Claude-native tools and a Claude model enum', () => {
18
+ const profile = SUBAGENT_CLIENT_PROFILES['claude-code'];
19
+ expect(profile.toolsPolicy).toBe('claude-native');
20
+ expect(profile.modelPolicy).toBe('claude-enum');
21
+ expect(profile.includeSkillsField).toBe(true);
22
+ });
23
+ it('antigravity uses a mapped tool array and omits the model field', () => {
24
+ const profile = SUBAGENT_CLIENT_PROFILES.antigravity;
25
+ expect(profile.toolsPolicy).toBe('mapped-array');
26
+ expect(profile.modelPolicy).toBe('omit');
27
+ expect(profile.includeSkillsField).toBe(false);
28
+ expect(profile.toolNameMap).toBeDefined();
29
+ });
30
+ it('opencode includes the mode: subagent line but omits tools/model', () => {
31
+ const profile = SUBAGENT_CLIENT_PROFILES.opencode;
32
+ expect(profile.toolsPolicy).toBe('omit');
33
+ expect(profile.modelPolicy).toBe('omit');
34
+ expect(profile.extraFrontmatterLines).toContain('mode: subagent');
35
+ });
36
+ it('every unverified-vocabulary client (copilot/windsurf/agents/hermes/grok) omits tools and model', () => {
37
+ for (const client of ['copilot', 'windsurf', 'agents', 'hermes', 'grok']) {
38
+ const profile = SUBAGENT_CLIENT_PROFILES[client];
39
+ expect(profile.toolsPolicy).toBe('omit');
40
+ expect(profile.modelPolicy).toBe('omit');
41
+ }
42
+ });
43
+ });
44
+ describe('getSubagentGenerationProfile', () => {
45
+ it('defaults to the claude-code (canonical) profile when no client is given', () => {
46
+ expect(getSubagentGenerationProfile()).toBe(SUBAGENT_CLIENT_PROFILES['claude-code']);
47
+ });
48
+ it('resolves the antigravity profile by name', () => {
49
+ expect(getSubagentGenerationProfile('antigravity')).toBe(SUBAGENT_CLIENT_PROFILES.antigravity);
50
+ });
51
+ });
52
+ describe('mapToolNames', () => {
53
+ const antigravityProfile = SUBAGENT_CLIENT_PROFILES.antigravity;
54
+ it('maps confirmed Skillsmith tool names to AntiGravity-own identifiers', () => {
55
+ const mapped = mapToolNames(['Read', 'Bash', 'Grep'], antigravityProfile);
56
+ expect(mapped).toEqual(['view_file', 'run_command', 'grep_search']);
57
+ });
58
+ it('deduplicates Write and Edit onto the same AntiGravity tool', () => {
59
+ const mapped = mapToolNames(['Write', 'Edit'], antigravityProfile);
60
+ expect(mapped).toEqual(['replace_file_content']);
61
+ });
62
+ it('silently drops internal tool names with no confirmed AntiGravity mapping', () => {
63
+ const mapped = mapToolNames(['Glob', 'WebFetch', 'WebSearch'], antigravityProfile);
64
+ expect(mapped).toEqual([]);
65
+ });
66
+ it('returns an empty array for a profile with no toolNameMap', () => {
67
+ const mapped = mapToolNames(['Read', 'Bash'], SUBAGENT_CLIENT_PROFILES['claude-code']);
68
+ expect(mapped).toEqual([]);
69
+ });
70
+ });
71
+ });
72
+ //# sourceMappingURL=SubagentGenerator.client-profiles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubagentGenerator.client-profiles.test.js","sourceRoot":"","sources":["../../../../src/services/__tests__/SubagentGenerator.client-profiles.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SubagentGenerator.helpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubagentGenerator.helpers.test.d.ts","sourceRoot":"","sources":["../../../../src/services/__tests__/SubagentGenerator.helpers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @fileoverview Tests for `SubagentGenerator.helpers.ts` — split from
3
+ * `SubagentGenerator.ts` (SMI-6276 Wave 6 Step 1, 500-line standard).
4
+ */
5
+ import { describe, it, expect } from 'vitest';
6
+ import { extractTriggerPhrases } from '../SubagentGenerator.helpers.js';
7
+ describe('extractTriggerPhrases', () => {
8
+ it('extracts phrases from normal descriptions and content', () => {
9
+ const phrases = extractTriggerPhrases('Use this when you need to test REST APIs.', 'This skill helps you validate API responses.');
10
+ expect(phrases.length).toBeGreaterThan(0);
11
+ expect(phrases.length).toBeLessThanOrEqual(5);
12
+ });
13
+ it('returns an empty array for content with no trigger-like phrasing', () => {
14
+ const phrases = extractTriggerPhrases('A skill', 'Nothing special here');
15
+ expect(Array.isArray(phrases)).toBe(true);
16
+ });
17
+ // CodeQL finding (SMI-6276, "polynomial regular expression used on
18
+ // uncontrolled data"): the pre-fix patterns paired an optional word group
19
+ // directly against an unbounded lazy wildcard capture, giving
20
+ // polynomially-many ways to split ambiguous repeated content between "the
21
+ // optional group matched" and "the wildcard consumed it instead" --
22
+ // `description` here is NOT length-capped before reaching these patterns
23
+ // (only `content` is sliced to 2000 chars), and is untrusted,
24
+ // externally-authored text in a skill registry — a genuine attack
25
+ // surface. Empirically confirmed (not just theoretical) before this fix:
26
+ // the exact 3-pattern loop below, run against a ~32KB adversarial
27
+ // description built the same way as this test's input, took ~1.25s
28
+ // pre-fix and ~7ms post-fix on this same test machine -- a real,
29
+ // measurable quadratic-ish blowup a large-enough description would turn
30
+ // into a genuine multi-second-or-more DoS.
31
+ it('does not exhibit polynomial-time blowup on adversarial "helps ... tasks" input (ReDoS)', () => {
32
+ const adversarialDescription = 'helps you to ' + 'a '.repeat(16000) + 'nomatch';
33
+ const start = Date.now();
34
+ const phrases = extractTriggerPhrases(adversarialDescription, '');
35
+ const elapsedMs = Date.now() - start;
36
+ expect(Array.isArray(phrases)).toBe(true);
37
+ // The fixed patterns finish in single-digit milliseconds regardless of
38
+ // input size (bounded capture groups cap worst-case per-position work
39
+ // to a small constant); the pre-fix patterns measured ~1250ms on this
40
+ // exact input on this machine. 1000ms leaves generous CI-jitter
41
+ // headroom while still failing hard on any reintroduction of the
42
+ // unbounded-wildcard shape.
43
+ expect(elapsedMs).toBeLessThan(1000);
44
+ });
45
+ it('does not exhibit polynomial-time blowup on adversarial "when ... need to" input (ReDoS)', () => {
46
+ const adversarialDescription = 'when ' + 'you need to '.repeat(16000) + 'nomatch';
47
+ const start = Date.now();
48
+ const phrases = extractTriggerPhrases(adversarialDescription, '');
49
+ const elapsedMs = Date.now() - start;
50
+ expect(Array.isArray(phrases)).toBe(true);
51
+ expect(elapsedMs).toBeLessThan(1000);
52
+ });
53
+ it('still caps extracted phrases at the existing 50-character limit', () => {
54
+ const longDescription = 'when you need to ' + 'x'.repeat(200) + '.';
55
+ const phrases = extractTriggerPhrases(longDescription, '');
56
+ for (const phrase of phrases) {
57
+ expect(phrase.length).toBeLessThanOrEqual(50);
58
+ }
59
+ });
60
+ });
61
+ //# sourceMappingURL=SubagentGenerator.helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubagentGenerator.helpers.test.js","sourceRoot":"","sources":["../../../../src/services/__tests__/SubagentGenerator.helpers.test.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,16 @@
3
3
  * Part of Skillsmith Optimization Layer
4
4
  */
5
5
  import { describe, it, expect } from 'vitest';
6
+ import { parse as parseYaml } from 'yaml';
6
7
  import { generateSubagent, generateMinimalSubagent } from '../SubagentGenerator.js';
7
8
  import { analyzeSkill } from '../SkillAnalyzer.js';
9
+ /** Extract just the frontmatter block (between the two `---` markers) as raw text. */
10
+ function extractFrontmatter(content) {
11
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
12
+ if (!match)
13
+ throw new Error('No frontmatter block found in generated content');
14
+ return match[1];
15
+ }
8
16
  describe('SubagentGenerator', () => {
9
17
  describe('generateSubagent', () => {
10
18
  it('should not generate subagent for simple skills', () => {
@@ -169,6 +177,153 @@ Write output files.
169
177
  const result = generateMinimalSubagent('write-skill', 'Write skill', content);
170
178
  expect(result.subagent?.tools).toContain('Read');
171
179
  });
180
+ it('threads the client parameter through to a client-specific frontmatter shape', () => {
181
+ const content = `# Skill\n\nRun bash commands. Search for patterns using grep.`;
182
+ const result = generateMinimalSubagent('client-skill', 'Client skill', content, 'antigravity');
183
+ expect(result.generated).toBe(true);
184
+ expect(result.subagent?.content).not.toMatch(/^tools: /m);
185
+ expect(result.subagent?.content).not.toMatch(/^model: (haiku|sonnet|opus)$/m);
186
+ });
187
+ });
188
+ describe('per-client generation profiles (SMI-6276)', () => {
189
+ // Mirrors the existing heavy-tool-usage fixture above so `suggestsSubagent`
190
+ // reliably trips — plus lines that hit Read/Bash/Grep detection so the
191
+ // AntiGravity mapped-array assertions below have something to map.
192
+ const heavyToolContent = `---
193
+ name: multi-client-skill
194
+ description: Exercises heavy tool usage across bash, grep, and file reads
195
+ ---
196
+
197
+ # Multi Client Skill
198
+
199
+ This skill runs many commands:
200
+ - npm install
201
+ - git status
202
+ - docker build
203
+ - npx something
204
+ - yarn add
205
+ - pnpm install
206
+
207
+ Use bash to execute commands.
208
+ Terminal operations are common.
209
+ Read files to examine content before changes.
210
+ Search for patterns using grep.
211
+ `;
212
+ const description = 'Exercises heavy tool usage across bash, grep, and file reads';
213
+ const analysis = analyzeSkill(heavyToolContent);
214
+ it('generates distinct frontmatter for Claude Code, Cursor, AntiGravity, and an omit-fallback client in the same run', () => {
215
+ const claudeResult = generateSubagent('multi-client-skill', description, heavyToolContent, analysis, 'claude-code');
216
+ const cursorResult = generateSubagent('multi-client-skill', description, heavyToolContent, analysis, 'cursor');
217
+ const antigravityResult = generateSubagent('multi-client-skill', description, heavyToolContent, analysis, 'antigravity');
218
+ const copilotResult = generateSubagent('multi-client-skill', description, heavyToolContent, analysis, 'copilot');
219
+ expect(claudeResult.generated).toBe(true);
220
+ expect(cursorResult.generated).toBe(true);
221
+ expect(antigravityResult.generated).toBe(true);
222
+ expect(copilotResult.generated).toBe(true);
223
+ const claudeContent = claudeResult.subagent.content;
224
+ const cursorContent = cursorResult.subagent.content;
225
+ const antigravityContent = antigravityResult.subagent.content;
226
+ const copilotContent = copilotResult.subagent.content;
227
+ // Claude Code: Claude-native comma-list tools + a Claude model enum value.
228
+ expect(claudeContent).toMatch(/^tools: .*Read/m);
229
+ expect(claudeContent).toMatch(/^model: (haiku|sonnet|opus)$/m);
230
+ // Cursor deliberately mirrors Claude Code — COMPANION_AGENT_TARGETS.cursor
231
+ // resolves to the SAME `.claude/agents/` file, which Cursor reads as a
232
+ // documented compatibility surface (see client-profiles.ts header) — so
233
+ // identical output here is the intended, evidence-backed behavior, not
234
+ // an accidental fallback to a shared default.
235
+ expect(cursorContent).toEqual(claudeContent);
236
+ // AntiGravity: genuinely different shape — proves this isn't just
237
+ // Cursor's case reused everywhere. No Claude-shaped scalar `tools:`
238
+ // line, no Claude model enum value, and its OWN mapped vocabulary
239
+ // rendered as a real YAML array (not a comma-joined string).
240
+ expect(antigravityContent).not.toMatch(/^tools: /m);
241
+ expect(antigravityContent).not.toContain('Read,');
242
+ expect(antigravityContent).not.toMatch(/^model: (haiku|sonnet|opus)$/m);
243
+ expect(antigravityContent).toMatch(/^tools:$/m);
244
+ expect(antigravityContent).toContain(' - run_command');
245
+ expect(antigravityContent).toContain(' - grep_search');
246
+ expect(antigravityContent).toContain(' - view_file');
247
+ // Step 2 is a separate, independent question (not this wave's scope) —
248
+ // regression-pin that this wave's fix does not touch it either way.
249
+ expect(antigravityContent).not.toMatch(/^subagent:/m);
250
+ // Copilot: the unverified-vocabulary fallback path — omits both fields
251
+ // entirely rather than guessing a partial/wrong mapping.
252
+ expect(copilotContent).not.toMatch(/^tools:/m);
253
+ expect(copilotContent).not.toMatch(/^model:/m);
254
+ // Every client still gets the universal minimum (name + description).
255
+ for (const content of [claudeContent, cursorContent, antigravityContent, copilotContent]) {
256
+ expect(content).toMatch(/^name: multi-client-skill-specialist$/m);
257
+ expect(content).toMatch(/^description: /m);
258
+ }
259
+ });
260
+ it('emits an AntiGravity tools array using only confirmed identifiers, not Claude names', () => {
261
+ const result = generateSubagent('multi-client-skill', description, heavyToolContent, analysis, 'antigravity');
262
+ const content = result.subagent.content;
263
+ // Never leak Skillsmith's internal Claude-style names into the value.
264
+ expect(content).not.toMatch(/- (Read|Write|Edit|Bash|Grep|Glob|WebFetch|WebSearch)$/m);
265
+ });
266
+ it('gives OpenCode a mode: subagent line but no tools/model fields', () => {
267
+ const result = generateSubagent('multi-client-skill', description, heavyToolContent, analysis, 'opencode');
268
+ const content = result.subagent.content;
269
+ expect(content).toMatch(/^mode: subagent$/m);
270
+ expect(content).not.toMatch(/^tools:/m);
271
+ expect(content).not.toMatch(/^model:/m);
272
+ });
273
+ });
274
+ // GPT-5.6-Sol round-2 pr-reviewer confirmation (SMI-6276): round 1's fix
275
+ // (JSON.stringify()-quoting the description) was CONFIRMED-FIXED, but the
276
+ // round-1 regression tests only asserted a description LINE existed, never
277
+ // actually exercised a hazardous `: ` or ` #` sequence. This closes that
278
+ // coverage gap by parsing the generated frontmatter with a real YAML
279
+ // parser, proving both that it's syntactically valid AND that the
280
+ // hazardous substrings survive intact rather than corrupting the block.
281
+ describe('YAML-safe description quoting (SMI-6276 round 2)', () => {
282
+ // Heavy tool-usage body (same pattern already proven above in this file)
283
+ // to reliably clear generateSubagent()'s own "worth generating" gate —
284
+ // the hazardous text under test lives only in the `description` argument
285
+ // passed to generateSubagent(), not the source SKILL.md's own frontmatter.
286
+ const heavyToolBody = `---
287
+ name: hazard-skill
288
+ description: A skill with heavy tool usage for YAML-hazard testing
289
+ ---
290
+
291
+ # Hazard Skill
292
+
293
+ - npm install
294
+ - git status
295
+ - docker build
296
+ - npx something
297
+ - yarn add
298
+ - pnpm install
299
+
300
+ Use bash to execute commands.
301
+ Terminal operations are common.
302
+ `;
303
+ it('a description containing ": " does not get reinterpreted as a nested YAML key', () => {
304
+ const description = 'Handles config: values and other: colon-separated pairs';
305
+ const analysis = analyzeSkill(heavyToolBody);
306
+ const result = generateSubagent('colon-skill', description, heavyToolBody, analysis);
307
+ const frontmatter = extractFrontmatter(result.subagent.content);
308
+ const parsed = parseYaml(frontmatter);
309
+ // The full description text must survive as ONE string value under the
310
+ // `description` key — not silently truncated, and not exploded into
311
+ // extra top-level keys by an unescaped `: `.
312
+ expect(typeof parsed.description).toBe('string');
313
+ expect(parsed.description).toContain(description);
314
+ expect(Object.keys(parsed)).not.toContain('values and other');
315
+ });
316
+ it('a description containing " #" does not get truncated as a YAML comment', () => {
317
+ const description = 'Fixes issue #123 and #456 before release';
318
+ const analysis = analyzeSkill(heavyToolBody);
319
+ const result = generateSubagent('hash-skill', description, heavyToolBody, analysis);
320
+ const frontmatter = extractFrontmatter(result.subagent.content);
321
+ const parsed = parseYaml(frontmatter);
322
+ expect(typeof parsed.description).toBe('string');
323
+ // Everything after the first ` #` must still be present -- an
324
+ // unquoted scalar would have silently dropped "123 and #456...".
325
+ expect(parsed.description).toContain('#123 and #456 before release');
326
+ });
172
327
  });
173
328
  });
174
329
  //# sourceMappingURL=SubagentGenerator.test.js.map