@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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,GAOf,MAAM,aAAa,CAAA;AAEpB,6EAA6E;AAC7E,gFAAgF;AAChF,OAAO,EACL,8BAA8B,GAK/B,MAAM,8BAA8B,CAAA;AAErC,2BAA2B;AAC3B,OAAO,EACL,YAAY,EACZ,kBAAkB,GAGnB,MAAM,oBAAoB,CAAA;AAE3B,0EAA0E;AAC1E,oEAAoE;AACpE,qEAAqE;AACrE,2EAA2E;AAC3E,uDAAuD;AACvD,OAAO,EACL,iCAAiC,EACjC,iCAAiC,GAClC,MAAM,uBAAuB,CAAA;AAE9B,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,GAGZ,MAAM,YAAY,CAAA;AAEnB,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,GASf,MAAM,aAAa,CAAA;AAEpB,6EAA6E;AAC7E,gFAAgF;AAChF,OAAO,EACL,8BAA8B,GAK/B,MAAM,8BAA8B,CAAA;AAErC,2BAA2B;AAC3B,OAAO,EACL,YAAY,EACZ,kBAAkB,GAGnB,MAAM,oBAAoB,CAAA;AAE3B,0EAA0E;AAC1E,oEAAoE;AACpE,qEAAqE;AACrE,2EAA2E;AAC3E,uDAAuD;AACvD,OAAO,EACL,iCAAiC,EACjC,iCAAiC,GAClC,MAAM,uBAAuB,CAAA;AAE9B,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,GAGZ,MAAM,YAAY,CAAA;AAEnB,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
@@ -196,6 +196,26 @@ export declare const SingleSkillResponseSchema: z.ZodObject<{
196
196
  }, z.core.$strip>;
197
197
  meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
198
198
  }, z.core.$strip>;
199
+ /**
200
+ * Schema for the `GET /stats` basic (non-detailed) response body.
201
+ * Field names match supabase/functions/stats/index.ts's `cachedStats` shape.
202
+ */
203
+ export declare const PlatformStatsSchema: z.ZodObject<{
204
+ skillCount: z.ZodNumber;
205
+ githubTotal: z.ZodNumber;
206
+ lastUpdated: z.ZodString;
207
+ }, z.core.$strip>;
208
+ /**
209
+ * Stats response schema (`{ data: PlatformStats, meta?: ... }`)
210
+ */
211
+ export declare const StatsResponseSchema: z.ZodObject<{
212
+ data: z.ZodObject<{
213
+ skillCount: z.ZodNumber;
214
+ githubTotal: z.ZodNumber;
215
+ lastUpdated: z.ZodString;
216
+ }, z.core.$strip>;
217
+ meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
218
+ }, z.core.$strip>;
199
219
  /**
200
220
  * Inferred type from ApiSearchResultSchema
201
221
  */
@@ -212,4 +232,12 @@ export type ValidatedSingleSkillResponse = z.infer<typeof SingleSkillResponseSch
212
232
  * Inferred type from TelemetryResponseSchema
213
233
  */
214
234
  export type ValidatedTelemetryResponse = z.infer<typeof TelemetryResponseSchema>;
235
+ /**
236
+ * Inferred type from PlatformStatsSchema
237
+ */
238
+ export type ValidatedPlatformStats = z.infer<typeof PlatformStatsSchema>;
239
+ /**
240
+ * Inferred type from StatsResponseSchema
241
+ */
242
+ export type ValidatedStatsResponse = z.infer<typeof StatsResponseSchema>;
215
243
  //# sourceMappingURL=schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAA;AAMF;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqChC,CAAA;AAMF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;;;kBAK5E;AAMD;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;iBAKlC,CAAA;AAMF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAc/B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBAEpC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;iBAYvC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAMjF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA0D,CAAA;AAE3F;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAiD,CAAA;AAMvF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAE5E;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAE1E;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEpF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAA;AAMF;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqChC,CAAA;AAMF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;;;kBAK5E;AAMD;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;iBAKlC,CAAA;AAMF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAc/B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBAEpC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;iBAYvC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAMjF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA0D,CAAA;AAE3F;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAiD,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;iBAA+C,CAAA;AAM/E;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAE5E;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAE1E;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEpF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEhF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAExE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
@@ -142,4 +142,17 @@ export const SearchResponseSchema = createApiResponseSchema(z.array(ApiSearchRes
142
142
  * Single skill response schema
143
143
  */
144
144
  export const SingleSkillResponseSchema = createApiResponseSchema(ApiSearchResultSchema);
145
+ /**
146
+ * Schema for the `GET /stats` basic (non-detailed) response body.
147
+ * Field names match supabase/functions/stats/index.ts's `cachedStats` shape.
148
+ */
149
+ export const PlatformStatsSchema = z.object({
150
+ skillCount: z.number(),
151
+ githubTotal: z.number(),
152
+ lastUpdated: z.string(),
153
+ });
154
+ /**
155
+ * Stats response schema (`{ data: PlatformStats, meta?: ... }`)
156
+ */
157
+ export const StatsResponseSchema = createApiResponseSchema(PlatformStatsSchema);
145
158
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"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"}
@@ -66,4 +66,89 @@ export declare function emitInstallEvent(payload: InstallEventPayload): Promise<
66
66
  * camelCase variants are silently dropped.
67
67
  */
68
68
  export declare function emitSearchEvent(payload: SearchEventPayload): void;
69
+ /**
70
+ * The synchronously-available, background-refreshed identity `wrap.ts`
71
+ * needs to attribute a `tool_call` event. Never resolved inline on the
72
+ * emit path — see `setTelemetryIdentityProvider`.
73
+ *
74
+ * `sdkVersion` is deliberately optional and resolved by the mcp-server
75
+ * caller (`context.async.ts`), not here: `@skillsmith/core` has no
76
+ * dependency on `@modelcontextprotocol/sdk` or any mcp-server package
77
+ * metadata, so this module must stay agnostic to how the caller derives it.
78
+ *
79
+ * `tier` is intentionally NOT part of this shape yet. Wave 3 (SMI-6362)
80
+ * ships without it: the only synchronous, already-cached tier resolver in
81
+ * the codebase (`createLicenseMiddleware`'s per-instance cache,
82
+ * `middleware/license.ts`) is constructed in `index.ts`'s `main()`, after
83
+ * `context.async.ts` (where this provider is installed) has already run —
84
+ * `context.async.ts` cannot reach it without a new cross-module wiring path,
85
+ * which is out of this wave's stated file footprint. Named limitation,
86
+ * tracked as a Wave 6 follow-up in the plan doc — not silently dropped.
87
+ */
88
+ export interface TelemetryIdentity {
89
+ accessToken: string;
90
+ apiKey?: string;
91
+ sdkVersion?: string;
92
+ }
93
+ export type TelemetryIdentityProvider = () => TelemetryIdentity | null;
94
+ /**
95
+ * Install (or clear, with `null`) the module-level identity provider
96
+ * `emitToolCallEvent` reads synchronously on every call. The provider itself
97
+ * must never block — see the design note in the SMI-6362 plan §1
98
+ * ("Credential plumbing"): the cache is refreshed in the background by the
99
+ * caller (on install, on 401, and on a timer), never inline here.
100
+ */
101
+ export declare function setTelemetryIdentityProvider(provider: TelemetryIdentityProvider | null): void;
102
+ export declare function setTelemetryIdentityInvalidationHandler(handler: (() => void) | null): void;
103
+ /** Payload `wrap.ts`'s second sink builds per MCP tool call. */
104
+ export interface ToolCallEventPayload {
105
+ toolName: string;
106
+ framework: string;
107
+ durationMs: number;
108
+ success: boolean;
109
+ /** SMI-6362 §1: from the agent-marker file's own session id, when present. */
110
+ sessionId?: string;
111
+ /**
112
+ * SMI-6362 §1: always `false` this wave. No MCP harness today distinguishes
113
+ * a subagent-issued tool call from a top-level one at the protocol level —
114
+ * the marker channel's `_meta`/file schema (SMI-5456) has no such field,
115
+ * and subagents share the SAME MCP server process as the top-level agent,
116
+ * so there is no process-level signal either. Sending a guessed value
117
+ * would be actively misleading in a paid analytics surface; `false` is the
118
+ * only honest default until a real signal exists. Named limitation,
119
+ * tracked as a Wave 6 follow-up in the plan doc (parallel to D-9).
120
+ */
121
+ isSubagent: boolean;
122
+ errorName?: string;
123
+ errorMessage?: string;
124
+ }
125
+ interface TelemetryEmitStats {
126
+ accepted: number;
127
+ rejected: number;
128
+ failed: number;
129
+ skippedNoIdentity: number;
130
+ /**
131
+ * SMI-6362 Wave 4 (D-8, completing what Wave 3 left unexported): the
132
+ * `X-Skillsmith-Telemetry-Reason` from the most recent rejection, so the
133
+ * read path (`analytics.ts` AC-10) can render an actionable line — e.g.
134
+ * `ambiguous_team` -> "set SKILLSMITH_LICENSE_KEY to choose which team" —
135
+ * instead of just a count. `null` until the first rejection this process.
136
+ */
137
+ lastRejectionReason: string | null;
138
+ }
139
+ /** SMI-6362 (D-8): a snapshot of this process's `tool_call` emission outcomes. */
140
+ export declare function getTelemetryEmitStats(): TelemetryEmitStats;
141
+ /** Reset for tests only. */
142
+ export declare function _resetTelemetryEmitStatsForTests(): void;
143
+ /**
144
+ * SMI-6362 §1: emit a `tool_call` event for an MCP tool invocation.
145
+ *
146
+ * Fire-and-forget (synchronous, returns `void`), mirroring `emitSearchEvent`.
147
+ * Reads the identity provider synchronously; if none is installed or it
148
+ * returns `null` (no cached credential yet), the event is skipped entirely
149
+ * — never sent unauthenticated, per the plan's "no fallback to an
150
+ * unauthenticated POST" rule (§1, "Credential plumbing").
151
+ */
152
+ export declare function emitToolCallEvent(payload: ToolCallEventPayload): void;
153
+ export {};
69
154
  //# sourceMappingURL=remote-audit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-audit.d.ts","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAsED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAUjE"}
1
+ {"version":3,"file":"remote-audit.d.ts","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAgFD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAUjE;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAItE;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI,GAAG,IAAI,CAE7F;AAeD,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE1F;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;;OASG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC;AAUD,kFAAkF;AAClF,wBAAgB,qBAAqB,IAAI,kBAAkB,CAE1D;AAED,4BAA4B;AAC5B,wBAAgB,gCAAgC,IAAI,IAAI,CAOvD;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAiCrE"}
@@ -1,5 +1,6 @@
1
1
  import { createHmac } from 'node:crypto';
2
2
  import { getApiKey } from '../config/index.js';
3
+ import { getOrCreateInstallId } from '../config/device-identity.js';
3
4
  const DEFAULT_API_BASE = 'https://api.skillsmith.app';
4
5
  const EVENT_ENDPOINT = '/functions/v1/events';
5
6
  const REQUEST_TIMEOUT_MS = 2000;
@@ -38,20 +39,27 @@ function isDisabled() {
38
39
  * Used by all `emit*Event` exports — never throws, swallows network/abort/
39
40
  * endpoint errors, and respects the 2s timeout. Telemetry failures must
40
41
  * never break the caller's flow.
42
+ *
43
+ * SMI-6362 (D-8): returns the raw `Response` (or `null` on a swallowed
44
+ * transport failure) so a caller that needs emission-durability
45
+ * classification — `emitToolCallEvent` below — can read it. The two
46
+ * pre-existing callers (`emitInstallEvent`, `emitSearchEvent`) ignore the
47
+ * return value, unchanged.
41
48
  */
42
- async function postTelemetryEvent(body) {
49
+ async function postTelemetryEvent(body, opts) {
43
50
  const controller = new AbortController();
44
51
  const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
45
52
  try {
46
- await fetch(`${getApiBase()}${EVENT_ENDPOINT}`, {
53
+ return await fetch(`${getApiBase()}${EVENT_ENDPOINT}`, {
47
54
  method: 'POST',
48
- headers: { 'content-type': 'application/json' },
55
+ headers: { 'content-type': 'application/json', ...(opts?.headers ?? {}) },
49
56
  signal: controller.signal,
50
57
  body: JSON.stringify(body),
51
58
  });
52
59
  }
53
60
  catch {
54
61
  // Best-effort: swallow all errors (network, abort, endpoint down).
62
+ return null;
55
63
  }
56
64
  finally {
57
65
  clearTimeout(timer);
@@ -128,4 +136,119 @@ export function emitSearchEvent(payload) {
128
136
  metadata: payload,
129
137
  });
130
138
  }
139
+ let telemetryIdentityProvider = null;
140
+ /**
141
+ * Install (or clear, with `null`) the module-level identity provider
142
+ * `emitToolCallEvent` reads synchronously on every call. The provider itself
143
+ * must never block — see the design note in the SMI-6362 plan §1
144
+ * ("Credential plumbing"): the cache is refreshed in the background by the
145
+ * caller (on install, on 401, and on a timer), never inline here.
146
+ */
147
+ export function setTelemetryIdentityProvider(provider) {
148
+ telemetryIdentityProvider = provider;
149
+ }
150
+ /**
151
+ * SMI-6362 §1: one of the three refresh triggers the plan names for the
152
+ * identity cache ("on install, on 401 from the events endpoint, and on a
153
+ * 5-minute timer"). This module cannot itself refresh anything — it has no
154
+ * knowledge of how the caller resolves a token — so it only signals
155
+ * "the cached token was rejected as invalid" via this optional callback,
156
+ * which `context.async.ts` registers alongside the provider. `classifyResponse`
157
+ * fires it on `reason === 'invalid_jwt'` and nowhere else (an `identity_required`
158
+ * or `consent_denied` rejection is not a stale-token problem and refreshing
159
+ * would not fix it).
160
+ */
161
+ let telemetryIdentityInvalidationHandler = null;
162
+ export function setTelemetryIdentityInvalidationHandler(handler) {
163
+ telemetryIdentityInvalidationHandler = handler;
164
+ }
165
+ const emitStats = {
166
+ accepted: 0,
167
+ rejected: 0,
168
+ failed: 0,
169
+ skippedNoIdentity: 0,
170
+ lastRejectionReason: null,
171
+ };
172
+ /** SMI-6362 (D-8): a snapshot of this process's `tool_call` emission outcomes. */
173
+ export function getTelemetryEmitStats() {
174
+ return { ...emitStats };
175
+ }
176
+ /** Reset for tests only. */
177
+ export function _resetTelemetryEmitStatsForTests() {
178
+ emitStats.accepted = 0;
179
+ emitStats.rejected = 0;
180
+ emitStats.failed = 0;
181
+ emitStats.skippedNoIdentity = 0;
182
+ emitStats.lastRejectionReason = null;
183
+ loggedRejectReasons.clear();
184
+ }
185
+ // SMI-6362 (D-8): log a rejection reason once per reason per process, not
186
+ // once per event — a sustained rejection (e.g. a stale token) must not spam
187
+ // stderr on every single tool call.
188
+ const loggedRejectReasons = new Set();
189
+ function classifyResponse(response) {
190
+ if (!response) {
191
+ emitStats.failed++;
192
+ return;
193
+ }
194
+ if (response.ok && response.headers.get('X-Skillsmith-Telemetry-Accepted') === '1') {
195
+ emitStats.accepted++;
196
+ return;
197
+ }
198
+ emitStats.rejected++;
199
+ const reason = response.headers.get('X-Skillsmith-Telemetry-Reason') ?? 'unknown';
200
+ emitStats.lastRejectionReason = reason;
201
+ if (!loggedRejectReasons.has(reason)) {
202
+ loggedRejectReasons.add(reason);
203
+ console.debug(`[skillsmith] tool_call telemetry rejected (reason=${reason}); further rejections with this reason are counted but not logged again this process`);
204
+ }
205
+ // SMI-6362 §1: only a stale/invalid token is worth an out-of-band refresh —
206
+ // `identity_required` (no JWT sent at all), `consent_denied`/`consent_required`,
207
+ // `no_team`, etc. would not be fixed by re-resolving the same token.
208
+ if (reason === 'invalid_jwt') {
209
+ telemetryIdentityInvalidationHandler?.();
210
+ }
211
+ }
212
+ /**
213
+ * SMI-6362 §1: emit a `tool_call` event for an MCP tool invocation.
214
+ *
215
+ * Fire-and-forget (synchronous, returns `void`), mirroring `emitSearchEvent`.
216
+ * Reads the identity provider synchronously; if none is installed or it
217
+ * returns `null` (no cached credential yet), the event is skipped entirely
218
+ * — never sent unauthenticated, per the plan's "no fallback to an
219
+ * unauthenticated POST" rule (§1, "Credential plumbing").
220
+ */
221
+ export function emitToolCallEvent(payload) {
222
+ if (isDisabled())
223
+ return;
224
+ const identity = telemetryIdentityProvider?.();
225
+ if (!identity) {
226
+ emitStats.skippedNoIdentity++;
227
+ return;
228
+ }
229
+ const metadata = {
230
+ tool_name: payload.toolName,
231
+ source: 'mcp-tool',
232
+ framework: payload.framework,
233
+ duration_ms: payload.durationMs,
234
+ success: payload.success,
235
+ platform: process.platform,
236
+ is_subagent: payload.isSubagent,
237
+ };
238
+ if (payload.sessionId !== undefined)
239
+ metadata.session_id = payload.sessionId;
240
+ if (identity.sdkVersion !== undefined)
241
+ metadata.sdk_version = identity.sdkVersion;
242
+ if (!payload.success) {
243
+ if (payload.errorName !== undefined)
244
+ metadata.error_name = payload.errorName;
245
+ if (payload.errorMessage !== undefined)
246
+ metadata.error_message = payload.errorMessage;
247
+ }
248
+ void postTelemetryEvent({
249
+ event: 'tool_call',
250
+ anonymous_id: getOrCreateInstallId(),
251
+ metadata,
252
+ }, { headers: { Authorization: `Bearer ${identity.accessToken}` } }).then(classifyResponse);
253
+ }
131
254
  //# sourceMappingURL=remote-audit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-audit.js","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-audit.js","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { emitInstallEvent, emitSearchEvent } from './remote-audit.js';
2
+ import { emitInstallEvent, emitSearchEvent, emitToolCallEvent, setTelemetryIdentityProvider, setTelemetryIdentityInvalidationHandler, getTelemetryEmitStats, _resetTelemetryEmitStatsForTests, } from './remote-audit.js';
3
+ vi.mock('../config/device-identity.js', () => ({
4
+ getOrCreateInstallId: vi.fn(() => 'a'.repeat(64)),
5
+ }));
3
6
  const fetchSpy = vi.fn();
4
7
  beforeEach(() => {
5
8
  vi.stubGlobal('fetch', fetchSpy);
@@ -166,4 +169,217 @@ describe('emitSearchEvent', () => {
166
169
  await flush();
167
170
  });
168
171
  });
172
+ /**
173
+ * SMI-6362 §1: emitToolCallEvent — the second sink `withTelemetry` fires for
174
+ * MCP tool calls. Distinct from emitInstallEvent/emitSearchEvent above in two
175
+ * load-bearing ways: (1) it never uses the API-key-derived HMAC anonymous_id
176
+ * — `anonymous_id` is always the persisted install id (D-7), regardless of
177
+ * credential; (2) it is gated on a synchronously-read identity PROVIDER, not
178
+ * on `getApiKey()` directly, and sends `Authorization: Bearer <token>`.
179
+ */
180
+ describe('emitToolCallEvent', () => {
181
+ const flush = () => new Promise((resolve) => setImmediate(resolve));
182
+ const basePayload = {
183
+ toolName: 'search',
184
+ framework: 'claude-code',
185
+ durationMs: 42,
186
+ success: true,
187
+ isSubagent: false,
188
+ };
189
+ afterEach(() => {
190
+ setTelemetryIdentityProvider(null);
191
+ setTelemetryIdentityInvalidationHandler(null);
192
+ _resetTelemetryEmitStatsForTests();
193
+ });
194
+ it('skips entirely (no fetch call) when no identity provider is installed', async () => {
195
+ emitToolCallEvent(basePayload);
196
+ await flush();
197
+ expect(fetchSpy).not.toHaveBeenCalled();
198
+ expect(getTelemetryEmitStats().skippedNoIdentity).toBe(1);
199
+ });
200
+ it('skips entirely when the provider returns null (no cached credential yet)', async () => {
201
+ setTelemetryIdentityProvider(() => null);
202
+ emitToolCallEvent(basePayload);
203
+ await flush();
204
+ expect(fetchSpy).not.toHaveBeenCalled();
205
+ expect(getTelemetryEmitStats().skippedNoIdentity).toBe(1);
206
+ });
207
+ it('never falls back to an unauthenticated POST — no identity means no send at all', async () => {
208
+ // Regression guard for the plan's explicit "no fallback to an
209
+ // unauthenticated POST" rule (§1, Credential plumbing).
210
+ setTelemetryIdentityProvider(() => null);
211
+ emitToolCallEvent(basePayload);
212
+ emitToolCallEvent(basePayload);
213
+ await flush();
214
+ expect(fetchSpy).not.toHaveBeenCalled();
215
+ });
216
+ it('skips when telemetry is disabled via env, even with a valid identity', async () => {
217
+ process.env.SKILLSMITH_TELEMETRY = '0';
218
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
219
+ emitToolCallEvent(basePayload);
220
+ await flush();
221
+ expect(fetchSpy).not.toHaveBeenCalled();
222
+ });
223
+ it('sends event=tool_call with the install id as anonymous_id (not an API-key hash)', async () => {
224
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
225
+ emitToolCallEvent(basePayload);
226
+ await flush();
227
+ expect(fetchSpy).toHaveBeenCalledTimes(1);
228
+ const body = readBody();
229
+ expect(body.event).toBe('tool_call');
230
+ expect(body.anonymous_id).toBe('a'.repeat(64));
231
+ });
232
+ it('sends Authorization: Bearer <accessToken> from the identity provider', async () => {
233
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-xyz' }));
234
+ emitToolCallEvent(basePayload);
235
+ await flush();
236
+ const headers = fetchSpy.mock.calls[0]?.[1]?.headers;
237
+ expect(headers.Authorization).toBe('Bearer jwt-xyz');
238
+ });
239
+ it('sends the full snake_case metadata shape, D-2a/D-3 exclusions honoured', async () => {
240
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc', sdkVersion: '0.7.12' }));
241
+ emitToolCallEvent({
242
+ toolName: 'install_skill',
243
+ framework: 'cursor',
244
+ durationMs: 99,
245
+ success: true,
246
+ isSubagent: false,
247
+ sessionId: 'sess-42',
248
+ });
249
+ await flush();
250
+ const body = readBody();
251
+ const meta = body.metadata;
252
+ expect(meta.tool_name).toBe('install_skill');
253
+ expect(meta.source).toBe('mcp-tool');
254
+ expect(meta.framework).toBe('cursor');
255
+ expect(meta.duration_ms).toBe(99);
256
+ expect(meta.success).toBe(true);
257
+ expect(meta.session_id).toBe('sess-42');
258
+ expect(meta.sdk_version).toBe('0.7.12');
259
+ expect(meta.is_subagent).toBe(false);
260
+ expect(meta.platform).toBe(process.platform);
261
+ // D-2a: team_id is never a client-sent field (server-derived only).
262
+ expect(meta).not.toHaveProperty('team_id');
263
+ // D-3: skill_name is never sent on a tool_call event.
264
+ expect(meta).not.toHaveProperty('skill_name');
265
+ });
266
+ it('omits session_id and sdk_version when neither is available', async () => {
267
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
268
+ emitToolCallEvent(basePayload);
269
+ await flush();
270
+ const meta = readBody().metadata;
271
+ expect(meta).not.toHaveProperty('session_id');
272
+ expect(meta).not.toHaveProperty('sdk_version');
273
+ });
274
+ it('includes error_name/error_message on failure only', async () => {
275
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
276
+ emitToolCallEvent({
277
+ ...basePayload,
278
+ success: false,
279
+ errorName: 'ZodError',
280
+ errorMessage: 'invalid arguments',
281
+ });
282
+ await flush();
283
+ const meta = readBody().metadata;
284
+ expect(meta.error_name).toBe('ZodError');
285
+ expect(meta.error_message).toBe('invalid arguments');
286
+ });
287
+ it('omits error_name/error_message on success even if somehow passed', async () => {
288
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
289
+ emitToolCallEvent({
290
+ ...basePayload,
291
+ success: true,
292
+ errorName: 'should-not-appear',
293
+ errorMessage: 'should-not-appear',
294
+ });
295
+ await flush();
296
+ const meta = readBody().metadata;
297
+ expect(meta).not.toHaveProperty('error_name');
298
+ expect(meta).not.toHaveProperty('error_message');
299
+ });
300
+ describe('D-8: emission-durability classification', () => {
301
+ it('classifies a response with Accepted=1 as accepted', async () => {
302
+ fetchSpy.mockResolvedValueOnce(new Response(null, { status: 200, headers: { 'X-Skillsmith-Telemetry-Accepted': '1' } }));
303
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
304
+ emitToolCallEvent(basePayload);
305
+ await flush();
306
+ expect(getTelemetryEmitStats()).toMatchObject({ accepted: 1, rejected: 0, failed: 0 });
307
+ });
308
+ it('classifies a response with Accepted=0 + a reason header as rejected', async () => {
309
+ fetchSpy.mockResolvedValueOnce(new Response(null, {
310
+ status: 200,
311
+ headers: {
312
+ 'X-Skillsmith-Telemetry-Accepted': '0',
313
+ 'X-Skillsmith-Telemetry-Reason': 'consent_required',
314
+ },
315
+ }));
316
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
317
+ emitToolCallEvent(basePayload);
318
+ await flush();
319
+ expect(getTelemetryEmitStats()).toMatchObject({
320
+ accepted: 0,
321
+ rejected: 1,
322
+ failed: 0,
323
+ lastRejectionReason: 'consent_required',
324
+ });
325
+ });
326
+ it('classifies a swallowed fetch/network error as failed', async () => {
327
+ fetchSpy.mockRejectedValueOnce(new Error('network down'));
328
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
329
+ emitToolCallEvent(basePayload);
330
+ await flush();
331
+ expect(getTelemetryEmitStats()).toMatchObject({ accepted: 0, rejected: 0, failed: 1 });
332
+ });
333
+ it('updates lastRejectionReason to the most recent rejection only', async () => {
334
+ fetchSpy.mockResolvedValueOnce(new Response(null, {
335
+ status: 200,
336
+ headers: {
337
+ 'X-Skillsmith-Telemetry-Accepted': '0',
338
+ 'X-Skillsmith-Telemetry-Reason': 'ambiguous_team',
339
+ },
340
+ }));
341
+ setTelemetryIdentityProvider(() => ({ accessToken: 'jwt-abc' }));
342
+ emitToolCallEvent(basePayload);
343
+ await flush();
344
+ expect(getTelemetryEmitStats().lastRejectionReason).toBe('ambiguous_team');
345
+ fetchSpy.mockResolvedValueOnce(new Response(null, {
346
+ status: 200,
347
+ headers: {
348
+ 'X-Skillsmith-Telemetry-Accepted': '0',
349
+ 'X-Skillsmith-Telemetry-Reason': 'consent_denied',
350
+ },
351
+ }));
352
+ emitToolCallEvent(basePayload);
353
+ await flush();
354
+ expect(getTelemetryEmitStats().lastRejectionReason).toBe('consent_denied');
355
+ });
356
+ it('invokes the invalidation handler on an invalid_jwt rejection, and only that reason', async () => {
357
+ const onInvalid = vi.fn();
358
+ setTelemetryIdentityInvalidationHandler(onInvalid);
359
+ setTelemetryIdentityProvider(() => ({ accessToken: 'stale-jwt' }));
360
+ fetchSpy.mockResolvedValueOnce(new Response(null, {
361
+ status: 200,
362
+ headers: {
363
+ 'X-Skillsmith-Telemetry-Accepted': '0',
364
+ 'X-Skillsmith-Telemetry-Reason': 'invalid_jwt',
365
+ },
366
+ }));
367
+ emitToolCallEvent(basePayload);
368
+ await flush();
369
+ expect(onInvalid).toHaveBeenCalledTimes(1);
370
+ // A different rejection reason (e.g. consent_denied) must NOT trigger
371
+ // a refresh — re-resolving the same valid token would not fix it.
372
+ fetchSpy.mockResolvedValueOnce(new Response(null, {
373
+ status: 200,
374
+ headers: {
375
+ 'X-Skillsmith-Telemetry-Accepted': '0',
376
+ 'X-Skillsmith-Telemetry-Reason': 'consent_denied',
377
+ },
378
+ }));
379
+ emitToolCallEvent(basePayload);
380
+ await flush();
381
+ expect(onInvalid).toHaveBeenCalledTimes(1);
382
+ });
383
+ });
384
+ });
169
385
  //# sourceMappingURL=remote-audit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-audit.test.js","sourceRoot":"","sources":["../../../src/audit/remote-audit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-audit.test.js","sourceRoot":"","sources":["../../../src/audit/remote-audit.test.ts"],"names":[],"mappings":"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"}