@skillsmith/core 0.12.1 → 0.12.2

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 (280) hide show
  1. package/CHANGELOG.md +155 -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 +5 -5
  58. package/dist/src/index.d.ts.map +1 -1
  59. package/dist/src/index.js +7 -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/security/__tests__/pathValidation.test.js +30 -1
  132. package/dist/src/security/__tests__/pathValidation.test.js.map +1 -1
  133. package/dist/src/services/SubagentGenerator.client-profiles.d.ts +258 -0
  134. package/dist/src/services/SubagentGenerator.client-profiles.d.ts.map +1 -0
  135. package/dist/src/services/SubagentGenerator.client-profiles.js +260 -0
  136. package/dist/src/services/SubagentGenerator.client-profiles.js.map +1 -0
  137. package/dist/src/services/SubagentGenerator.d.ts +19 -41
  138. package/dist/src/services/SubagentGenerator.d.ts.map +1 -1
  139. package/dist/src/services/SubagentGenerator.helpers.d.ts +64 -0
  140. package/dist/src/services/SubagentGenerator.helpers.d.ts.map +1 -0
  141. package/dist/src/services/SubagentGenerator.helpers.js +228 -0
  142. package/dist/src/services/SubagentGenerator.helpers.js.map +1 -0
  143. package/dist/src/services/SubagentGenerator.js +66 -208
  144. package/dist/src/services/SubagentGenerator.js.map +1 -1
  145. package/dist/src/services/SubagentGenerator.types.d.ts +45 -0
  146. package/dist/src/services/SubagentGenerator.types.d.ts.map +1 -0
  147. package/dist/src/services/SubagentGenerator.types.js +14 -0
  148. package/dist/src/services/SubagentGenerator.types.js.map +1 -0
  149. package/dist/src/services/TransformationService.d.ts +18 -61
  150. package/dist/src/services/TransformationService.d.ts.map +1 -1
  151. package/dist/src/services/TransformationService.js +29 -17
  152. package/dist/src/services/TransformationService.js.map +1 -1
  153. package/dist/src/services/TransformationService.types.d.ts +74 -0
  154. package/dist/src/services/TransformationService.types.d.ts.map +1 -0
  155. package/dist/src/services/TransformationService.types.js +8 -0
  156. package/dist/src/services/TransformationService.types.js.map +1 -0
  157. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts +5 -0
  158. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts.map +1 -0
  159. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js +72 -0
  160. package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js.map +1 -0
  161. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts +2 -0
  162. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts.map +1 -0
  163. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js +61 -0
  164. package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js.map +1 -0
  165. package/dist/src/services/__tests__/SubagentGenerator.test.js +155 -0
  166. package/dist/src/services/__tests__/SubagentGenerator.test.js.map +1 -1
  167. package/dist/src/services/__tests__/TransformationService.test.js +48 -0
  168. package/dist/src/services/__tests__/TransformationService.test.js.map +1 -1
  169. package/dist/src/services/agent-pack/agent-pack.test.js +1 -0
  170. package/dist/src/services/agent-pack/agent-pack.test.js.map +1 -1
  171. package/dist/src/services/agent-pack/prompt-source.d.ts +1 -1
  172. package/dist/src/services/agent-pack/prompt-source.d.ts.map +1 -1
  173. package/dist/src/services/agent-pack/prompt-source.js +10 -3
  174. package/dist/src/services/agent-pack/prompt-source.js.map +1 -1
  175. package/dist/src/services/agent-pack/types.d.ts +26 -2
  176. package/dist/src/services/agent-pack/types.d.ts.map +1 -1
  177. package/dist/src/services/agent-pack/types.js +13 -0
  178. package/dist/src/services/agent-pack/types.js.map +1 -1
  179. package/dist/src/services/agent-tool-profile.d.ts.map +1 -1
  180. package/dist/src/services/agent-tool-profile.js +7 -0
  181. package/dist/src/services/agent-tool-profile.js.map +1 -1
  182. package/dist/src/services/agent-tool-profile.test.js +2 -2
  183. package/dist/src/services/skill-content-comparison.d.ts +71 -0
  184. package/dist/src/services/skill-content-comparison.d.ts.map +1 -0
  185. package/dist/src/services/skill-content-comparison.js +90 -0
  186. package/dist/src/services/skill-content-comparison.js.map +1 -0
  187. package/dist/src/services/skill-content-comparison.test.d.ts +6 -0
  188. package/dist/src/services/skill-content-comparison.test.d.ts.map +1 -0
  189. package/dist/src/services/skill-content-comparison.test.js +83 -0
  190. package/dist/src/services/skill-content-comparison.test.js.map +1 -0
  191. package/dist/src/services/skill-identity-classification.d.ts +202 -0
  192. package/dist/src/services/skill-identity-classification.d.ts.map +1 -0
  193. package/dist/src/services/skill-identity-classification.js +295 -0
  194. package/dist/src/services/skill-identity-classification.js.map +1 -0
  195. package/dist/src/services/skill-identity-classification.test.d.ts +6 -0
  196. package/dist/src/services/skill-identity-classification.test.d.ts.map +1 -0
  197. package/dist/src/services/skill-identity-classification.test.js +314 -0
  198. package/dist/src/services/skill-identity-classification.test.js.map +1 -0
  199. package/dist/src/services/skill-installation.content.d.ts.map +1 -1
  200. package/dist/src/services/skill-installation.content.js +6 -1
  201. package/dist/src/services/skill-installation.content.js.map +1 -1
  202. package/dist/src/services/skill-installation.helpers.d.ts +8 -15
  203. package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
  204. package/dist/src/services/skill-installation.helpers.js +11 -105
  205. package/dist/src/services/skill-installation.helpers.js.map +1 -1
  206. package/dist/src/services/skill-installation.helpers.test.js +106 -1
  207. package/dist/src/services/skill-installation.helpers.test.js.map +1 -1
  208. package/dist/src/services/skill-installation.service.js +1 -1
  209. package/dist/src/services/skill-installation.service.js.map +1 -1
  210. package/dist/src/services/skill-installation.types.d.ts +33 -0
  211. package/dist/src/services/skill-installation.types.d.ts.map +1 -1
  212. package/dist/src/services/skill-installation.types.js.map +1 -1
  213. package/dist/src/services/skill-installation.uninstall.d.ts +84 -0
  214. package/dist/src/services/skill-installation.uninstall.d.ts.map +1 -0
  215. package/dist/src/services/skill-installation.uninstall.js +252 -0
  216. package/dist/src/services/skill-installation.uninstall.js.map +1 -0
  217. package/dist/src/services/skill-manifest.d.ts +41 -0
  218. package/dist/src/services/skill-manifest.d.ts.map +1 -1
  219. package/dist/src/services/skill-manifest.js +93 -0
  220. package/dist/src/services/skill-manifest.js.map +1 -1
  221. package/dist/src/services/skill-manifest.test.js +27 -0
  222. package/dist/src/services/skill-manifest.test.js.map +1 -1
  223. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  224. package/dist/src/sync/SyncEngine.js +69 -77
  225. package/dist/src/sync/SyncEngine.js.map +1 -1
  226. package/dist/src/telemetry/agent-marker.d.ts +8 -0
  227. package/dist/src/telemetry/agent-marker.d.ts.map +1 -1
  228. package/dist/src/telemetry/agent-marker.js +7 -0
  229. package/dist/src/telemetry/agent-marker.js.map +1 -1
  230. package/dist/src/telemetry/agent-marker.test.js +7 -1
  231. package/dist/src/telemetry/agent-marker.test.js.map +1 -1
  232. package/dist/src/telemetry/index.d.ts +1 -1
  233. package/dist/src/telemetry/index.d.ts.map +1 -1
  234. package/dist/src/telemetry/index.js +1 -1
  235. package/dist/src/telemetry/index.js.map +1 -1
  236. package/dist/src/telemetry/wrap.d.ts +6 -0
  237. package/dist/src/telemetry/wrap.d.ts.map +1 -1
  238. package/dist/src/telemetry/wrap.js +65 -10
  239. package/dist/src/telemetry/wrap.js.map +1 -1
  240. package/dist/src/telemetry/wrap.test.js +81 -1
  241. package/dist/src/telemetry/wrap.test.js.map +1 -1
  242. package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts +26 -0
  243. package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts.map +1 -0
  244. package/dist/src/telemetry/wrap.tool-call-sink.test.js +162 -0
  245. package/dist/src/telemetry/wrap.tool-call-sink.test.js.map +1 -0
  246. package/dist/src/types/skill.d.ts +9 -1
  247. package/dist/src/types/skill.d.ts.map +1 -1
  248. package/dist/src/utils/index.d.ts +1 -1
  249. package/dist/src/utils/index.d.ts.map +1 -1
  250. package/dist/src/utils/index.js +1 -1
  251. package/dist/src/utils/index.js.map +1 -1
  252. package/dist/src/utils/version-check.d.ts +61 -0
  253. package/dist/src/utils/version-check.d.ts.map +1 -1
  254. package/dist/src/utils/version-check.js +78 -1
  255. package/dist/src/utils/version-check.js.map +1 -1
  256. package/dist/src/utils/version-check.test.js +130 -1
  257. package/dist/src/utils/version-check.test.js.map +1 -1
  258. package/dist/tests/db/migration-runner-race.test.js +19 -9
  259. package/dist/tests/db/migration-runner-race.test.js.map +1 -1
  260. package/dist/tests/install/fan-out.test.js +27 -0
  261. package/dist/tests/install/fan-out.test.js.map +1 -1
  262. package/dist/tests/sync/SyncEngine.abort.test.js +15 -11
  263. package/dist/tests/sync/SyncEngine.abort.test.js.map +1 -1
  264. package/dist/tests/sync/SyncEngine.status.test.js +1 -1
  265. package/dist/tests/sync/SyncEngine.status.test.js.map +1 -1
  266. package/dist/tests/sync/SyncEngine.test.d.ts +11 -2
  267. package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -1
  268. package/dist/tests/sync/SyncEngine.test.js +164 -13
  269. package/dist/tests/sync/SyncEngine.test.js.map +1 -1
  270. package/dist/tests/unit/migrations/migration-v18.test.d.ts +16 -0
  271. package/dist/tests/unit/migrations/migration-v18.test.d.ts.map +1 -0
  272. package/dist/tests/unit/migrations/migration-v18.test.js +192 -0
  273. package/dist/tests/unit/migrations/migration-v18.test.js.map +1 -0
  274. package/dist/tests/unit/services/skill-installation.content.test.js +65 -1
  275. package/dist/tests/unit/services/skill-installation.content.test.js.map +1 -1
  276. package/dist/tests/unit/services/skill-installation.service.test.js +9 -8
  277. package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
  278. package/dist/tests/unit/sync-engine.source-aware.test.js +5 -5
  279. package/dist/tests/unit/sync-engine.source-aware.test.js.map +1 -1
  280. package/package.json +2 -2
@@ -11,7 +11,7 @@
11
11
  * - per-request framework (H4 — not memoised)
12
12
  */
13
13
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
14
- import { withTelemetry, isTelemetered, setEmissionGate } from './wrap.js';
14
+ import { withTelemetry, isTelemetered, setEmissionGate, runWithToolNameContext } from './wrap.js';
15
15
  // ---------------------------------------------------------------------------
16
16
  // Mock trackSkillInvoke so tests run without a live PostHog instance
17
17
  // ---------------------------------------------------------------------------
@@ -28,7 +28,20 @@ vi.mock('./posthog.js', () => ({
28
28
  vi.mock('../logging/redact.js', () => ({
29
29
  redactSensitiveData: (s) => s,
30
30
  }));
31
+ // SMI-6362 §1: `emitToolCallEvent` (the second sink) is deliberately NOT
32
+ // mocked at the module level below — the AC-11 p99 gate at the bottom of this
33
+ // file (§8) engages the REAL `remote-audit.js` so it proves the actual
34
+ // wiring on the hot path, not a stand-in. Full functional coverage of the
35
+ // second sink itself (gate-off/on, identity-null, transport-rejection
36
+ // swallowing) lives in the sibling `wrap.tool-call-sink.test.ts`. Only
37
+ // `getOrCreateInstallId` (real implementation reads/writes
38
+ // `~/.skillsmith/config.json` under a file lock — unwanted disk I/O in a unit
39
+ // test) is mocked, matching remote-audit.test.ts's own convention exactly.
40
+ vi.mock('../config/device-identity.js', () => ({
41
+ getOrCreateInstallId: vi.fn(() => 'a'.repeat(64)),
42
+ }));
31
43
  import { trackSkillInvoke } from './posthog.js';
44
+ import { setTelemetryIdentityProvider, _resetTelemetryEmitStatsForTests, } from '../audit/remote-audit.js';
32
45
  const mockTrack = vi.mocked(trackSkillInvoke);
33
46
  beforeEach(() => {
34
47
  mockTrack.mockReset();
@@ -189,6 +202,14 @@ describe('per-request framework', () => {
189
202
  // ---------------------------------------------------------------------------
190
203
  // 8. Overhead gate (Risk #7 — p99 < 1ms per wrapped call)
191
204
  // ---------------------------------------------------------------------------
205
+ //
206
+ // SMI-6362 §1's second sink (`emitToolCallEvent` — a `tool_call` event
207
+ // dispatched to `search_metrics` alongside this sink's pre-existing
208
+ // `trackSkillInvoke` PostHog event) has its own functional coverage in the
209
+ // sibling `wrap.tool-call-sink.test.ts` (500-line file gate). The p99 gate
210
+ // below is re-run with that second sink genuinely engaged (see the second
211
+ // `it` block) to satisfy AC-11 — re-asserting the SAME latency thresholds,
212
+ // not new ones, now that a second network-dispatching sink sits on this path.
192
213
  describe('overhead gate (risk #7)', () => {
193
214
  it('p99 per-call overhead is < 1ms over 10 000 iterations', async () => {
194
215
  const ITERATIONS = 10_000;
@@ -217,6 +238,65 @@ describe('overhead gate (risk #7)', () => {
217
238
  expect(mean).toBeLessThan(0.5);
218
239
  expect(mockTrack).toHaveBeenCalledTimes(ITERATIONS);
219
240
  });
241
+ // SMI-6362 AC-11: the pre-existing gate above predates the second sink and
242
+ // never installs `runWithToolNameContext`, so `emitToolCallEvent` was never
243
+ // actually reached during that measurement — it would have passed trivially
244
+ // even if the second sink were arbitrarily slow. This case re-runs the same
245
+ // gate with the second sink genuinely engaged on every iteration (tool-name
246
+ // context + a valid identity provider installed, so `emitToolCallEvent`
247
+ // builds its metadata object and dispatches `fetch` each time) to prove the
248
+ // p99/mean thresholds still hold with BOTH sinks live, per the plan's "the
249
+ // p99 overhead gate ... still passes with the second sink installed."
250
+ it('p99 per-call overhead is < 1ms over 10 000 iterations with the second sink engaged', async () => {
251
+ // `X-Skillsmith-Telemetry-Accepted: '1'` matters here beyond realism: an
252
+ // unclassified-as-accepted response makes `classifyResponse` log a
253
+ // once-per-process console.debug line, which is noise this test doesn't
254
+ // need (and doesn't assert on `getTelemetryEmitStats()` — this gate is
255
+ // about latency, not durability classification; that's the sibling
256
+ // file's job).
257
+ const fetchSpy = vi
258
+ .fn()
259
+ .mockResolvedValue(new Response(null, { status: 200, headers: { 'X-Skillsmith-Telemetry-Accepted': '1' } }));
260
+ vi.stubGlobal('fetch', fetchSpy);
261
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
262
+ try {
263
+ const ITERATIONS = 10_000;
264
+ const noopHandler = async () => 42;
265
+ const wrappedNoop = withTelemetry(noopHandler, {
266
+ source: 'mcp-tool',
267
+ extractSkillId: () => 'bench/skill',
268
+ });
269
+ const run = () => runWithToolNameContext('bench-tool', () => wrappedNoop());
270
+ // JIT warm-up — stabilise before measuring
271
+ for (let i = 0; i < 100; i++) {
272
+ await run();
273
+ }
274
+ mockTrack.mockReset();
275
+ fetchSpy.mockClear();
276
+ const elapsed = [];
277
+ for (let i = 0; i < ITERATIONS; i++) {
278
+ const t0 = performance.now();
279
+ await run();
280
+ elapsed.push(performance.now() - t0);
281
+ }
282
+ elapsed.sort((a, b) => a - b);
283
+ const p99 = elapsed[Math.ceil(ITERATIONS * 0.99) - 1];
284
+ const mean = elapsed.reduce((s, v) => s + v, 0) / ITERATIONS;
285
+ // AC-11: same thresholds as the single-sink gate above, now with the
286
+ // second sink genuinely on the hot path.
287
+ expect(p99).toBeLessThan(1);
288
+ expect(mean).toBeLessThan(0.5);
289
+ expect(mockTrack).toHaveBeenCalledTimes(ITERATIONS);
290
+ // Confirms the second sink really was reached on every iteration —
291
+ // otherwise this test would be exactly as trivial as the one above.
292
+ expect(fetchSpy).toHaveBeenCalledTimes(ITERATIONS);
293
+ }
294
+ finally {
295
+ vi.unstubAllGlobals();
296
+ setTelemetryIdentityProvider(null);
297
+ _resetTelemetryEmitStatsForTests();
298
+ }
299
+ });
220
300
  });
221
301
  // ---------------------------------------------------------------------------
222
302
  // 9. Emission gate (SMI-5019 wire-in)
@@ -1 +1 @@
1
- {"version":3,"file":"wrap.test.js","sourceRoot":"","sources":["../../../src/telemetry/wrap.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrap.test.js","sourceRoot":"","sources":["../../../src/telemetry/wrap.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * SMI-6362 §1: `withTelemetry`'s second sink — a `tool_call` event dispatched
3
+ * through `emitToolCallEvent` (`../audit/remote-audit.js`) alongside the
4
+ * pre-existing `trackSkillInvoke` (PostHog `skill_invoke`) sink. Sibling to
5
+ * `wrap.test.ts` (500-line file gate), matching the existing
6
+ * `wrap.gate.test.ts` / `wrap.marker.test.ts` split convention for this file.
7
+ *
8
+ * The plan's AC-11 test-coverage row for "`wrap.ts` second sink" requires
9
+ * proving, at the `withTelemetry` integration level (not re-testing
10
+ * `emitToolCallEvent`'s own unit behaviour, already covered exhaustively by
11
+ * `remote-audit.test.ts`):
12
+ * - gate-off ⇒ BOTH sinks stay silent, not just the legacy one (the D-1
13
+ * client-side invariant, asserted at the single enforcement point)
14
+ * - gate-on (with tool-name context installed) ⇒ both sinks fire
15
+ * - a transport-layer rejection from the second sink does not change the
16
+ * wrapped function's own return value or thrown errors
17
+ * - an identity provider returning `null` ⇒ no POST is attempted and
18
+ * `skippedNoIdentity` increments
19
+ *
20
+ * These tests exercise the REAL `remote-audit.js` (only `getOrCreateInstallId`
21
+ * and global `fetch` are stubbed, matching `remote-audit.test.ts`'s own
22
+ * convention) so they prove the actual wiring `wrap.ts` performs, not a
23
+ * stand-in that could silently drift from it.
24
+ */
25
+ export {};
26
+ //# sourceMappingURL=wrap.tool-call-sink.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.tool-call-sink.test.d.ts","sourceRoot":"","sources":["../../../src/telemetry/wrap.tool-call-sink.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * SMI-6362 §1: `withTelemetry`'s second sink — a `tool_call` event dispatched
3
+ * through `emitToolCallEvent` (`../audit/remote-audit.js`) alongside the
4
+ * pre-existing `trackSkillInvoke` (PostHog `skill_invoke`) sink. Sibling to
5
+ * `wrap.test.ts` (500-line file gate), matching the existing
6
+ * `wrap.gate.test.ts` / `wrap.marker.test.ts` split convention for this file.
7
+ *
8
+ * The plan's AC-11 test-coverage row for "`wrap.ts` second sink" requires
9
+ * proving, at the `withTelemetry` integration level (not re-testing
10
+ * `emitToolCallEvent`'s own unit behaviour, already covered exhaustively by
11
+ * `remote-audit.test.ts`):
12
+ * - gate-off ⇒ BOTH sinks stay silent, not just the legacy one (the D-1
13
+ * client-side invariant, asserted at the single enforcement point)
14
+ * - gate-on (with tool-name context installed) ⇒ both sinks fire
15
+ * - a transport-layer rejection from the second sink does not change the
16
+ * wrapped function's own return value or thrown errors
17
+ * - an identity provider returning `null` ⇒ no POST is attempted and
18
+ * `skippedNoIdentity` increments
19
+ *
20
+ * These tests exercise the REAL `remote-audit.js` (only `getOrCreateInstallId`
21
+ * and global `fetch` are stubbed, matching `remote-audit.test.ts`'s own
22
+ * convention) so they prove the actual wiring `wrap.ts` performs, not a
23
+ * stand-in that could silently drift from it.
24
+ */
25
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
26
+ import { withTelemetry, setEmissionGate, runWithToolNameContext } from './wrap.js';
27
+ vi.mock('./posthog.js', () => ({
28
+ trackSkillInvoke: vi.fn(),
29
+ }));
30
+ // SMI-5615: test seam for the Wave-2 `logging/redact.ts` module — see
31
+ // wrap.test.ts for rationale.
32
+ vi.mock('../logging/redact.js', () => ({
33
+ redactSensitiveData: (s) => s,
34
+ }));
35
+ // The real implementation reads/writes `~/.skillsmith/config.json` under a
36
+ // file lock — unwanted disk I/O in a unit test. Matches
37
+ // remote-audit.test.ts's own convention exactly.
38
+ vi.mock('../config/device-identity.js', () => ({
39
+ getOrCreateInstallId: vi.fn(() => 'a'.repeat(64)),
40
+ }));
41
+ import { trackSkillInvoke } from './posthog.js';
42
+ import { setTelemetryIdentityProvider, getTelemetryEmitStats, _resetTelemetryEmitStatsForTests, } from '../audit/remote-audit.js';
43
+ const mockTrack = vi.mocked(trackSkillInvoke);
44
+ const TOOL_OPTS = {
45
+ source: 'mcp-tool',
46
+ extractSkillId: () => 'test/skill',
47
+ };
48
+ const fetchSpy = vi.fn();
49
+ beforeEach(() => {
50
+ mockTrack.mockReset();
51
+ vi.stubGlobal('fetch', fetchSpy);
52
+ fetchSpy.mockReset();
53
+ fetchSpy.mockResolvedValue(new Response(null, { status: 200, headers: { 'X-Skillsmith-Telemetry-Accepted': '1' } }));
54
+ _resetTelemetryEmitStatsForTests();
55
+ });
56
+ afterEach(() => {
57
+ vi.unstubAllGlobals();
58
+ setEmissionGate(undefined);
59
+ setTelemetryIdentityProvider(null);
60
+ _resetTelemetryEmitStatsForTests();
61
+ });
62
+ // Allow the fire-and-forget `void postTelemetryEvent(...).then(...)` chain
63
+ // inside `emitToolCallEvent` to actually run — it is not awaited by
64
+ // `wrap.ts` by design (fire-and-forget), so assertions on `fetchSpy` /
65
+ // `getTelemetryEmitStats()` need one microtask flush first.
66
+ const flush = () => new Promise((resolve) => setImmediate(resolve));
67
+ describe('second sink (tool_call via emitToolCallEvent, SMI-6362 §1)', () => {
68
+ it('gate-off ⇒ both sinks stay silent, not just the legacy one', async () => {
69
+ setEmissionGate(undefined); // default-suppress — no gate installed
70
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
71
+ const handler = () => 'ok';
72
+ const wrapped = withTelemetry(handler, TOOL_OPTS);
73
+ await runWithToolNameContext('search', () => wrapped());
74
+ await flush();
75
+ expect(mockTrack).not.toHaveBeenCalled();
76
+ expect(fetchSpy).not.toHaveBeenCalled();
77
+ });
78
+ it('gate-on with tool-name context installed ⇒ both sinks fire', async () => {
79
+ setEmissionGate(() => true);
80
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
81
+ const handler = () => 'ok';
82
+ const wrapped = withTelemetry(handler, TOOL_OPTS);
83
+ await runWithToolNameContext('search', () => wrapped());
84
+ await flush();
85
+ expect(mockTrack).toHaveBeenCalledOnce();
86
+ expect(fetchSpy).toHaveBeenCalledOnce();
87
+ const body = JSON.parse(fetchSpy.mock.calls[0]?.[1]?.body);
88
+ expect(body.event).toBe('tool_call');
89
+ expect(body.metadata).toMatchObject({ tool_name: 'search', success: true });
90
+ expect(getTelemetryEmitStats().accepted).toBe(1);
91
+ });
92
+ it('no tool-name context installed ⇒ second sink never fires, legacy sink still does', async () => {
93
+ // Guards the source-gating precondition itself: a `mcp-tool` call whose
94
+ // dispatcher never installed `runWithToolNameContext` (e.g. a code path
95
+ // reached outside `call-tool-handler.ts`) must not emit a `tool_call`
96
+ // with an undefined tool name.
97
+ setEmissionGate(() => true);
98
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
99
+ const handler = () => 'ok';
100
+ const wrapped = withTelemetry(handler, TOOL_OPTS);
101
+ await wrapped();
102
+ await flush();
103
+ expect(mockTrack).toHaveBeenCalledOnce();
104
+ expect(fetchSpy).not.toHaveBeenCalled();
105
+ });
106
+ it('identity provider returns null ⇒ no POST is attempted and skippedNoIdentity increments', async () => {
107
+ setEmissionGate(() => true);
108
+ setTelemetryIdentityProvider(() => null);
109
+ const handler = () => 'ok';
110
+ const wrapped = withTelemetry(handler, TOOL_OPTS);
111
+ await runWithToolNameContext('search', () => wrapped());
112
+ await flush();
113
+ // The legacy PostHog sink is unaffected by the second sink's identity gate.
114
+ expect(mockTrack).toHaveBeenCalledOnce();
115
+ expect(fetchSpy).not.toHaveBeenCalled();
116
+ expect(getTelemetryEmitStats().skippedNoIdentity).toBe(1);
117
+ });
118
+ it("a transport-layer rejection from the second sink does not change the wrapped fn's return value", async () => {
119
+ setEmissionGate(() => true);
120
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
121
+ fetchSpy.mockRejectedValueOnce(new Error('network down'));
122
+ const handler = () => 'still works';
123
+ const wrapped = withTelemetry(handler, TOOL_OPTS);
124
+ const result = await runWithToolNameContext('search', () => wrapped());
125
+ await flush();
126
+ expect(result).toBe('still works');
127
+ // postTelemetryEvent swallows the rejection internally and classifies it
128
+ // as `failed` — it never surfaces to the caller.
129
+ expect(getTelemetryEmitStats().failed).toBe(1);
130
+ });
131
+ it('a transport-layer rejection from the second sink does not change a thrown error', async () => {
132
+ setEmissionGate(() => true);
133
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
134
+ fetchSpy.mockRejectedValueOnce(new Error('network down'));
135
+ const boom = () => {
136
+ throw new Error('handler exploded');
137
+ };
138
+ const wrappedBoom = withTelemetry(boom, TOOL_OPTS);
139
+ await expect(runWithToolNameContext('search', () => wrappedBoom())).rejects.toThrow('handler exploded');
140
+ await flush();
141
+ expect(mockTrack).toHaveBeenCalledWith(expect.objectContaining({ success: false }));
142
+ expect(getTelemetryEmitStats().failed).toBe(1);
143
+ });
144
+ it('emitToolCallEvent throwing synchronously is swallowed by the same boundary that protects trackSkillInvoke', async () => {
145
+ // A harder case than a rejected fetch: the sink itself throws
146
+ // synchronously (e.g. a future refactor that reads something unguarded).
147
+ // wrap.ts's outer try/catch around the whole `if (gateOn)` block must
148
+ // swallow it identically to the existing `trackSkillInvoke`-throws case
149
+ // (see wrap.test.ts's "emit-failure survival" case).
150
+ setEmissionGate(() => true);
151
+ setTelemetryIdentityProvider(() => {
152
+ throw new Error('identity provider blew up');
153
+ });
154
+ const handler = () => 'still works';
155
+ const wrapped = withTelemetry(handler, TOOL_OPTS);
156
+ const result = await runWithToolNameContext('search', () => wrapped());
157
+ expect(result).toBe('still works');
158
+ // The legacy sink, evaluated first in the same finally block, still fired.
159
+ expect(mockTrack).toHaveBeenCalledOnce();
160
+ });
161
+ });
162
+ //# sourceMappingURL=wrap.tool-call-sink.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.tool-call-sink.test.js","sourceRoot":"","sources":["../../../src/telemetry/wrap.tool-call-sink.test.ts"],"names":[],"mappings":"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"}
@@ -60,7 +60,15 @@ export interface Skill {
60
60
  license?: string | null;
61
61
  createdAt: string;
62
62
  updatedAt: string;
63
- /** SHA-256 hex of the most recently recorded content proxy (optional, populated by SkillVersionRepository) */
63
+ /**
64
+ * SHA-256 hex of the most-recently-synced `skill_versions.content_hash`
65
+ * row for this skill — as of SMI-6343 Wave 2, a real hash of the
66
+ * registry's SKILL.md content at index time, never a metadata proxy (the
67
+ * original meaning this comment described). Currently declared but not
68
+ * populated anywhere in the codebase (no writer/reader references it) —
69
+ * a future consumer should source it via `SkillVersionRepository`, not
70
+ * assume it is already wired up.
71
+ */
64
72
  latestContentHash?: string;
65
73
  /** Number of distinct content hashes recorded for this skill */
66
74
  versionCount?: number;
@@ -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":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE9D;;;;;;;;GAQG;AAEH,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,UAAU,GACV,SAAS,GACT,WAAW,GACX,cAAc,GACd,SAAS,GACT,YAAY,GACZ,OAAO,CAAA;AAEX;;;GAGG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,SAAS,GACT,eAAe,GACf,UAAU,GACV,UAAU,GACV,qBAAqB,CAAA;AAEzB;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAOlC,CAAA;AAEV;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,CAAA;AAE9C,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,qDAAqD;IACrD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IAEpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,kDAAkD;IAClD,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;CACF;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAA;IAChD,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export { logger, createLogger, silentLogger, type Logger } from './logger.js';
5
5
  export { withRetry, fetchWithRetry, isTransientError, isRetryableStatus, parseRetryAfter, RetryExhaustedError, DEFAULT_RETRY_CONFIG, type RetryConfig, } from './retry.js';
6
- export { checkForUpdates, formatUpdateNotification, type VersionCheckResult, } from './version-check.js';
6
+ export { checkForUpdates, formatUpdateNotification, agentInstallRemediationCommand, checkCursorMcpArtifact, type VersionCheckResult, type CursorMcpArtifactCheck, } from './version-check.js';
7
7
  export { parseRepoUrl, isGitHubUrl, type ParsedRepoUrl } from './github-url.js';
8
8
  export { safeWriteFile, SymlinkError, HardlinkError } from './safe-fs.js';
9
9
  export { isQuietModeEnabled } from './quiet-mode.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -4,7 +4,7 @@
4
4
  export { logger, createLogger, silentLogger } from './logger.js';
5
5
  export { withRetry, fetchWithRetry, isTransientError, isRetryableStatus, parseRetryAfter, RetryExhaustedError, DEFAULT_RETRY_CONFIG, } from './retry.js';
6
6
  // SMI-1952: Version check for auto-update notifications
7
- export { checkForUpdates, formatUpdateNotification, } from './version-check.js';
7
+ export { checkForUpdates, formatUpdateNotification, agentInstallRemediationCommand, checkCursorMcpArtifact, } from './version-check.js';
8
8
  // SMI-2171: GitHub URL parsing utilities
9
9
  export { parseRepoUrl, isGitHubUrl } from './github-url.js';
10
10
  // SMI-2274: Safe filesystem operations (symlink protection)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,aAAa,CAAA;AAC7E,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,YAAY,CAAA;AAEnB,wDAAwD;AACxD,OAAO,EACL,eAAe,EACf,wBAAwB,GAEzB,MAAM,oBAAoB,CAAA;AAE3B,yCAAyC;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,MAAM,iBAAiB,CAAA;AAE/E,4DAA4D;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEzE,4EAA4E;AAC5E,sEAAsE;AACtE,6EAA6E;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,aAAa,CAAA;AAC7E,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,YAAY,CAAA;AAEnB,wDAAwD;AACxD,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,GAGvB,MAAM,oBAAoB,CAAA;AAE3B,yCAAyC;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,MAAM,iBAAiB,CAAA;AAE/E,4DAA4D;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEzE,4EAA4E;AAC5E,sEAAsE;AACtE,6EAA6E;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -65,6 +65,18 @@ export declare function checkForUpdates(packageName: string, currentVersion: str
65
65
  * @returns Formatted message string
66
66
  */
67
67
  export declare function formatUpdateNotification(result: VersionCheckResult, client?: string): string;
68
+ /**
69
+ * Canonical "refresh hooks/MCP registration" remediation command — the
70
+ * single source of truth for this exact string, shared by
71
+ * {@link formatUpdateNotification} (version-bump-triggered, fires only
72
+ * inside a running MCP server — structurally unreachable when the server
73
+ * never spawns at all, e.g. GH#2368 V3's "zero MCP tools" report) and
74
+ * {@link checkCursorMcpArtifact} (on-disk-content-triggered, SMI-6279
75
+ * Wave 9 — reachable from `skillsmith diagnose` even when no server is
76
+ * running) so the two never drift into differently-worded instructions for
77
+ * the same underlying fix.
78
+ */
79
+ export declare function agentInstallRemediationCommand(): string;
68
80
  /**
69
81
  * Resolve `SKILLSMITH_CLIENT` for {@link formatUpdateNotification}'s
70
82
  * optional `client` parameter, without ever throwing (code-review finding,
@@ -91,4 +103,53 @@ export declare function formatUpdateNotification(result: VersionCheckResult, cli
91
103
  * or does not resolve to a known client.
92
104
  */
93
105
  export declare function resolveUpdateNotificationClient(raw: string | undefined): string | undefined;
106
+ /**
107
+ * Result of inspecting one `.cursor/mcp.json` file for the GH#2368 V3
108
+ * staleness signature (SMI-6279 Wave 9).
109
+ */
110
+ export interface CursorMcpArtifactCheck {
111
+ /** Absolute path checked. */
112
+ path: string;
113
+ /** Whether the file exists on disk at all. */
114
+ exists: boolean;
115
+ /**
116
+ * A Skillsmith MCP server entry was found under either the current key
117
+ * (`CURSOR_MCP_ENTRY_KEY`) or the pre-SMI-6279 legacy key
118
+ * (`LEGACY_MCP_ENTRY_KEY`) — see `agent-pack-installer.entry.ts`.
119
+ */
120
+ entryFound: boolean;
121
+ /** The JSON key the entry was found under, when `entryFound` is true. */
122
+ entryKey?: string;
123
+ /**
124
+ * True when the entry's `command` is the broken `npx` form
125
+ * (`buildAgentMcpEntryValue()`'s shape) — two independent live UAT passes
126
+ * proved this ENOENTs inside Cursor's bundled Node (GH#2368 C-01).
127
+ */
128
+ usesNpxForm: boolean;
129
+ /** True when `env.SKILLSMITH_CLIENT === 'cursor'` is present on the entry. */
130
+ hasClientEnv: boolean;
131
+ /**
132
+ * True when this artifact needs a `agent install` refresh — an entry was
133
+ * found and either `usesNpxForm` or NOT `hasClientEnv` (or both; the
134
+ * GH#2368 V3 repro found the real broken installer output had both
135
+ * problems at once). `false` when no entry was found at all — Cursor
136
+ * simply not being configured yet is not a staleness signal.
137
+ */
138
+ stale: boolean;
139
+ /** Present only when `stale` is true — the exact remediation command. */
140
+ remediation?: string;
141
+ }
142
+ /**
143
+ * Inspect one `.cursor/mcp.json` file (global `~/.cursor/mcp.json` or a
144
+ * project-scoped `<workspace>/.cursor/mcp.json` — the GH#2368 V3 tester's
145
+ * actual broken config was project-scoped, and nothing before this checked
146
+ * that location at all) for the exact staleness signature
147
+ * {@link agentInstallRemediationCommand} fixes: the `npx` command form, and/or
148
+ * a missing `SKILLSMITH_CLIENT` env var.
149
+ *
150
+ * Read-only, never throws — an unreadable or unparsable file is reported as
151
+ * "not found" (nothing we can confidently flag) rather than surfaced as an
152
+ * error; `skillsmith diagnose` is a best-effort diagnostic, not a validator.
153
+ */
154
+ export declare function checkCursorMcpArtifact(path: string): CursorMcpArtifactCheck;
94
155
  //# sourceMappingURL=version-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/utils/version-check.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAA;IACxB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;CACtB;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA8BpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAS5F;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO3F"}
1
+ {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/utils/version-check.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAA;IACxB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;CACtB;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA8BpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAS5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO3F;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAA;IACf;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAA;IACpB,8EAA8E;IAC9E,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAA;IACd,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAgD3E"}
@@ -2,7 +2,9 @@
2
2
  * Version check utility for auto-update notifications
3
3
  * @see SMI-1952: Add auto-update check to MCP server startup
4
4
  */
5
+ import { existsSync, readFileSync } from 'node:fs';
5
6
  import { resolveClientId } from '../install/paths.js';
7
+ import { CURSOR_MCP_ENTRY_KEY, LEGACY_MCP_ENTRY_KEY, } from '../install/agent-pack-installer.entry.js';
6
8
  /** Default timeout for npm registry requests (3 seconds) */
7
9
  const VERSION_CHECK_TIMEOUT_MS = 3000;
8
10
  /**
@@ -91,7 +93,21 @@ export function formatUpdateNotification(result, client) {
91
93
  `Run \`${result.updateCommand}\` to use the new version.\n` +
92
94
  `Note: upgrading does not refresh onboarding artifacts already on disk —\n` +
93
95
  `run \`skillsmith setup --force${clientFlag}\` to refresh the bundled skill, and\n` +
94
- `\`skillsmith agent install\` to refresh hooks/MCP registration.`);
96
+ `\`${agentInstallRemediationCommand()}\` to refresh hooks/MCP registration.`);
97
+ }
98
+ /**
99
+ * Canonical "refresh hooks/MCP registration" remediation command — the
100
+ * single source of truth for this exact string, shared by
101
+ * {@link formatUpdateNotification} (version-bump-triggered, fires only
102
+ * inside a running MCP server — structurally unreachable when the server
103
+ * never spawns at all, e.g. GH#2368 V3's "zero MCP tools" report) and
104
+ * {@link checkCursorMcpArtifact} (on-disk-content-triggered, SMI-6279
105
+ * Wave 9 — reachable from `skillsmith diagnose` even when no server is
106
+ * running) so the two never drift into differently-worded instructions for
107
+ * the same underlying fix.
108
+ */
109
+ export function agentInstallRemediationCommand() {
110
+ return 'skillsmith agent install';
95
111
  }
96
112
  /**
97
113
  * Resolve `SKILLSMITH_CLIENT` for {@link formatUpdateNotification}'s
@@ -128,4 +144,65 @@ export function resolveUpdateNotificationClient(raw) {
128
144
  return undefined;
129
145
  }
130
146
  }
147
+ function notFoundResult(path, exists) {
148
+ return { path, exists, entryFound: false, usesNpxForm: false, hasClientEnv: false, stale: false };
149
+ }
150
+ /**
151
+ * Inspect one `.cursor/mcp.json` file (global `~/.cursor/mcp.json` or a
152
+ * project-scoped `<workspace>/.cursor/mcp.json` — the GH#2368 V3 tester's
153
+ * actual broken config was project-scoped, and nothing before this checked
154
+ * that location at all) for the exact staleness signature
155
+ * {@link agentInstallRemediationCommand} fixes: the `npx` command form, and/or
156
+ * a missing `SKILLSMITH_CLIENT` env var.
157
+ *
158
+ * Read-only, never throws — an unreadable or unparsable file is reported as
159
+ * "not found" (nothing we can confidently flag) rather than surfaced as an
160
+ * error; `skillsmith diagnose` is a best-effort diagnostic, not a validator.
161
+ */
162
+ export function checkCursorMcpArtifact(path) {
163
+ if (!existsSync(path))
164
+ return notFoundResult(path, false);
165
+ let doc;
166
+ try {
167
+ doc = JSON.parse(readFileSync(path, 'utf-8'));
168
+ }
169
+ catch {
170
+ return notFoundResult(path, true);
171
+ }
172
+ if (!doc || typeof doc !== 'object' || Array.isArray(doc))
173
+ return notFoundResult(path, true);
174
+ const servers = doc.mcpServers;
175
+ if (!servers || typeof servers !== 'object' || Array.isArray(servers)) {
176
+ return notFoundResult(path, true);
177
+ }
178
+ const serversObj = servers;
179
+ const entryKey = CURSOR_MCP_ENTRY_KEY in serversObj
180
+ ? CURSOR_MCP_ENTRY_KEY
181
+ : LEGACY_MCP_ENTRY_KEY in serversObj
182
+ ? LEGACY_MCP_ENTRY_KEY
183
+ : undefined;
184
+ if (!entryKey)
185
+ return notFoundResult(path, true);
186
+ const entry = serversObj[entryKey];
187
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry))
188
+ return notFoundResult(path, true);
189
+ const entryObj = entry;
190
+ const usesNpxForm = entryObj.command === 'npx';
191
+ const env = entryObj.env;
192
+ const hasClientEnv = !!env &&
193
+ typeof env === 'object' &&
194
+ !Array.isArray(env) &&
195
+ env.SKILLSMITH_CLIENT === 'cursor';
196
+ const stale = usesNpxForm || !hasClientEnv;
197
+ return {
198
+ path,
199
+ exists: true,
200
+ entryFound: true,
201
+ entryKey,
202
+ usesNpxForm,
203
+ hasClientEnv,
204
+ stale,
205
+ remediation: stale ? agentInstallRemediationCommand() : undefined,
206
+ };
207
+ }
131
208
  //# sourceMappingURL=version-check.js.map