@skillsmith/core 0.11.7 → 0.12.1

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 (192) hide show
  1. package/CHANGELOG.md +210 -0
  2. package/README.md +7 -8
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/api/client.types.d.ts +9 -0
  5. package/dist/src/api/client.types.d.ts.map +1 -1
  6. package/dist/src/api/schemas.d.ts +6 -0
  7. package/dist/src/api/schemas.d.ts.map +1 -1
  8. package/dist/src/api/schemas.js +5 -0
  9. package/dist/src/api/schemas.js.map +1 -1
  10. package/dist/src/api/security-summary.d.ts +10 -1
  11. package/dist/src/api/security-summary.d.ts.map +1 -1
  12. package/dist/src/api/security-summary.js +9 -0
  13. package/dist/src/api/security-summary.js.map +1 -1
  14. package/dist/src/api/security-summary.test.js +79 -1
  15. package/dist/src/api/security-summary.test.js.map +1 -1
  16. package/dist/src/api/types.d.ts +9 -0
  17. package/dist/src/api/types.d.ts.map +1 -1
  18. package/dist/src/config/token-credentials.d.ts +20 -0
  19. package/dist/src/config/token-credentials.d.ts.map +1 -1
  20. package/dist/src/config/token-credentials.js +59 -0
  21. package/dist/src/config/token-credentials.js.map +1 -1
  22. package/dist/src/config/token-credentials.test.d.ts +3 -0
  23. package/dist/src/config/token-credentials.test.d.ts.map +1 -1
  24. package/dist/src/config/token-credentials.test.js +68 -0
  25. package/dist/src/config/token-credentials.test.js.map +1 -1
  26. package/dist/src/exports/services.d.ts +1 -1
  27. package/dist/src/exports/services.d.ts.map +1 -1
  28. package/dist/src/exports/services.js +3 -1
  29. package/dist/src/exports/services.js.map +1 -1
  30. package/dist/src/index.d.ts +3 -3
  31. package/dist/src/index.d.ts.map +1 -1
  32. package/dist/src/index.js +3 -3
  33. package/dist/src/index.js.map +1 -1
  34. package/dist/src/install/agent-config-merge.json-array.d.ts +8 -0
  35. package/dist/src/install/agent-config-merge.json-array.d.ts.map +1 -1
  36. package/dist/src/install/agent-config-merge.json-array.js +22 -2
  37. package/dist/src/install/agent-config-merge.json-array.js.map +1 -1
  38. package/dist/src/install/agent-pack-installer.cursor-hooks.d.ts.map +1 -1
  39. package/dist/src/install/agent-pack-installer.cursor-hooks.js +122 -3
  40. package/dist/src/install/agent-pack-installer.cursor-hooks.js.map +1 -1
  41. package/dist/src/install/agent-pack-installer.cursor-hooks.test.js +146 -1
  42. package/dist/src/install/agent-pack-installer.cursor-hooks.test.js.map +1 -1
  43. package/dist/src/install/agent-pack-installer.harness.d.ts +8 -0
  44. package/dist/src/install/agent-pack-installer.harness.d.ts.map +1 -1
  45. package/dist/src/install/agent-pack-installer.harness.js +8 -1
  46. package/dist/src/install/agent-pack-installer.harness.js.map +1 -1
  47. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +25 -0
  48. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  49. package/dist/src/scripts/skill-scanner/trust-scorer.js +1 -1
  50. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  51. package/dist/src/security/scanner/SecurityScanner.archive.d.ts +34 -0
  52. package/dist/src/security/scanner/SecurityScanner.archive.d.ts.map +1 -0
  53. package/dist/src/security/scanner/SecurityScanner.archive.js +218 -0
  54. package/dist/src/security/scanner/SecurityScanner.archive.js.map +1 -0
  55. package/dist/src/security/scanner/SecurityScanner.compound.d.ts +1 -0
  56. package/dist/src/security/scanner/SecurityScanner.compound.d.ts.map +1 -1
  57. package/dist/src/security/scanner/SecurityScanner.compound.js +117 -38
  58. package/dist/src/security/scanner/SecurityScanner.compound.js.map +1 -1
  59. package/dist/src/security/scanner/SecurityScanner.d.ts +41 -4
  60. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  61. package/dist/src/security/scanner/SecurityScanner.decoy.d.ts +72 -0
  62. package/dist/src/security/scanner/SecurityScanner.decoy.d.ts.map +1 -0
  63. package/dist/src/security/scanner/SecurityScanner.decoy.js +265 -0
  64. package/dist/src/security/scanner/SecurityScanner.decoy.js.map +1 -0
  65. package/dist/src/security/scanner/SecurityScanner.encoding.d.ts +56 -0
  66. package/dist/src/security/scanner/SecurityScanner.encoding.d.ts.map +1 -0
  67. package/dist/src/security/scanner/SecurityScanner.encoding.js +270 -0
  68. package/dist/src/security/scanner/SecurityScanner.encoding.js.map +1 -0
  69. package/dist/src/security/scanner/SecurityScanner.exec.d.ts +23 -20
  70. package/dist/src/security/scanner/SecurityScanner.exec.d.ts.map +1 -1
  71. package/dist/src/security/scanner/SecurityScanner.exec.js +207 -52
  72. package/dist/src/security/scanner/SecurityScanner.exec.js.map +1 -1
  73. package/dist/src/security/scanner/SecurityScanner.fetch-correlation.d.ts +115 -0
  74. package/dist/src/security/scanner/SecurityScanner.fetch-correlation.d.ts.map +1 -0
  75. package/dist/src/security/scanner/SecurityScanner.fetch-correlation.js +181 -0
  76. package/dist/src/security/scanner/SecurityScanner.fetch-correlation.js.map +1 -0
  77. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +14 -11
  78. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
  79. package/dist/src/security/scanner/SecurityScanner.helpers.js +26 -124
  80. package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
  81. package/dist/src/security/scanner/SecurityScanner.js +114 -36
  82. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  83. package/dist/src/security/scanner/SecurityScanner.paste-host.d.ts +69 -0
  84. package/dist/src/security/scanner/SecurityScanner.paste-host.d.ts.map +1 -0
  85. package/dist/src/security/scanner/SecurityScanner.paste-host.js +342 -0
  86. package/dist/src/security/scanner/SecurityScanner.paste-host.js.map +1 -0
  87. package/dist/src/security/scanner/SecurityScanner.risk-score.d.ts +27 -0
  88. package/dist/src/security/scanner/SecurityScanner.risk-score.d.ts.map +1 -0
  89. package/dist/src/security/scanner/SecurityScanner.risk-score.js +178 -0
  90. package/dist/src/security/scanner/SecurityScanner.risk-score.js.map +1 -0
  91. package/dist/src/security/scanner/SecurityScanner.urls.d.ts +20 -0
  92. package/dist/src/security/scanner/SecurityScanner.urls.d.ts.map +1 -0
  93. package/dist/src/security/scanner/SecurityScanner.urls.js +26 -0
  94. package/dist/src/security/scanner/SecurityScanner.urls.js.map +1 -0
  95. package/dist/src/security/scanner/index.d.ts +2 -2
  96. package/dist/src/security/scanner/index.d.ts.map +1 -1
  97. package/dist/src/security/scanner/index.js +5 -1
  98. package/dist/src/security/scanner/index.js.map +1 -1
  99. package/dist/src/security/scanner/multiline-category-closure.test.js +6 -0
  100. package/dist/src/security/scanner/multiline-category-closure.test.js.map +1 -1
  101. package/dist/src/security/scanner/patterns.d.ts +41 -21
  102. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  103. package/dist/src/security/scanner/patterns.exec.d.ts +89 -0
  104. package/dist/src/security/scanner/patterns.exec.d.ts.map +1 -0
  105. package/dist/src/security/scanner/patterns.exec.js +115 -0
  106. package/dist/src/security/scanner/patterns.exec.js.map +1 -0
  107. package/dist/src/security/scanner/patterns.js +78 -41
  108. package/dist/src/security/scanner/patterns.js.map +1 -1
  109. package/dist/src/security/scanner/types.d.ts +15 -1
  110. package/dist/src/security/scanner/types.d.ts.map +1 -1
  111. package/dist/src/security/scanner/typosquat.d.ts +10 -0
  112. package/dist/src/security/scanner/typosquat.d.ts.map +1 -1
  113. package/dist/src/security/scanner/typosquat.js +5 -1
  114. package/dist/src/security/scanner/typosquat.js.map +1 -1
  115. package/dist/src/security/scanner/weights.d.ts +12 -3
  116. package/dist/src/security/scanner/weights.d.ts.map +1 -1
  117. package/dist/src/security/scanner/weights.js +50 -1
  118. package/dist/src/security/scanner/weights.js.map +1 -1
  119. package/dist/src/services/agent-pack/prompt-source.js +1 -1
  120. package/dist/src/services/agent-pack/prompt-source.js.map +1 -1
  121. package/dist/src/services/bundled-sibling-scan.d.ts +87 -13
  122. package/dist/src/services/bundled-sibling-scan.d.ts.map +1 -1
  123. package/dist/src/services/bundled-sibling-scan.js +177 -33
  124. package/dist/src/services/bundled-sibling-scan.js.map +1 -1
  125. package/dist/src/services/recommend-guard.d.ts.map +1 -1
  126. package/dist/src/services/recommend-guard.js +8 -1
  127. package/dist/src/services/recommend-guard.js.map +1 -1
  128. package/dist/src/services/recommend-guard.test.js +6 -2
  129. package/dist/src/services/recommend-guard.test.js.map +1 -1
  130. package/dist/src/sync/index.d.ts +1 -0
  131. package/dist/src/sync/index.d.ts.map +1 -1
  132. package/dist/src/sync/index.js +2 -0
  133. package/dist/src/sync/index.js.map +1 -1
  134. package/dist/src/sync/license-status-client.d.ts +56 -0
  135. package/dist/src/sync/license-status-client.d.ts.map +1 -0
  136. package/dist/src/sync/license-status-client.js +118 -0
  137. package/dist/src/sync/license-status-client.js.map +1 -0
  138. package/dist/src/sync/license-status-client.test.d.ts +14 -0
  139. package/dist/src/sync/license-status-client.test.d.ts.map +1 -0
  140. package/dist/src/sync/license-status-client.test.js +136 -0
  141. package/dist/src/sync/license-status-client.test.js.map +1 -0
  142. package/dist/src/types.d.ts +13 -0
  143. package/dist/src/types.d.ts.map +1 -1
  144. package/dist/src/utils/version-check.d.ts +58 -5
  145. package/dist/src/utils/version-check.d.ts.map +1 -1
  146. package/dist/src/utils/version-check.js +73 -2
  147. package/dist/src/utils/version-check.js.map +1 -1
  148. package/dist/src/utils/version-check.test.js +49 -10
  149. package/dist/src/utils/version-check.test.js.map +1 -1
  150. package/dist/tests/SecurityScanner.scoring.test.js +123 -0
  151. package/dist/tests/SecurityScanner.scoring.test.js.map +1 -1
  152. package/dist/tests/security/advisory-severity-guard.test.d.ts +20 -0
  153. package/dist/tests/security/advisory-severity-guard.test.d.ts.map +1 -0
  154. package/dist/tests/security/advisory-severity-guard.test.js +70 -0
  155. package/dist/tests/security/advisory-severity-guard.test.js.map +1 -0
  156. package/dist/tests/security/archive-evasion.test.d.ts +2 -0
  157. package/dist/tests/security/archive-evasion.test.d.ts.map +1 -0
  158. package/dist/tests/security/archive-evasion.test.js +126 -0
  159. package/dist/tests/security/archive-evasion.test.js.map +1 -0
  160. package/dist/tests/security/clawhavoc-e2e.fixtures.d.ts +71 -0
  161. package/dist/tests/security/clawhavoc-e2e.fixtures.d.ts.map +1 -0
  162. package/dist/tests/security/clawhavoc-e2e.fixtures.js +135 -0
  163. package/dist/tests/security/clawhavoc-e2e.fixtures.js.map +1 -0
  164. package/dist/tests/security/co-signal-escalation.test.d.ts +30 -0
  165. package/dist/tests/security/co-signal-escalation.test.d.ts.map +1 -0
  166. package/dist/tests/security/co-signal-escalation.test.js +494 -0
  167. package/dist/tests/security/co-signal-escalation.test.js.map +1 -0
  168. package/dist/tests/security/decoy-misdirection.test.d.ts +2 -0
  169. package/dist/tests/security/decoy-misdirection.test.d.ts.map +1 -0
  170. package/dist/tests/security/decoy-misdirection.test.js +130 -0
  171. package/dist/tests/security/decoy-misdirection.test.js.map +1 -0
  172. package/dist/tests/security/encoded-payload.test.d.ts +2 -0
  173. package/dist/tests/security/encoded-payload.test.d.ts.map +1 -0
  174. package/dist/tests/security/encoded-payload.test.js +199 -0
  175. package/dist/tests/security/encoded-payload.test.js.map +1 -0
  176. package/dist/tests/security/gatekeeper-bypass.test.d.ts +2 -0
  177. package/dist/tests/security/gatekeeper-bypass.test.d.ts.map +1 -0
  178. package/dist/tests/security/gatekeeper-bypass.test.js +167 -0
  179. package/dist/tests/security/gatekeeper-bypass.test.js.map +1 -0
  180. package/dist/tests/security/paste-host-fetch.test.d.ts +2 -0
  181. package/dist/tests/security/paste-host-fetch.test.d.ts.map +1 -0
  182. package/dist/tests/security/paste-host-fetch.test.js +199 -0
  183. package/dist/tests/security/paste-host-fetch.test.js.map +1 -0
  184. package/dist/tests/security/scanner-regression-guard.test.js +5 -0
  185. package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
  186. package/dist/tests/services/aidefence-feedback.test.js +5 -0
  187. package/dist/tests/services/aidefence-feedback.test.js.map +1 -1
  188. package/dist/tests/services/bundled-sibling-scan.test.js +171 -10
  189. package/dist/tests/services/bundled-sibling-scan.test.js.map +1 -1
  190. package/dist/tests/skill-scanner/allowlist.test.js +12 -1
  191. package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
  192. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"bundled-sibling-scan.js","sourceRoot":"","sources":["../../../src/services/bundled-sibling-scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bundled-sibling-scan.js","sourceRoot":"","sources":["../../../src/services/bundled-sibling-scan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recommend-guard.d.ts","sourceRoot":"","sources":["../../../src/services/recommend-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAQhD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D"}
1
+ {"version":3,"file":"recommend-guard.d.ts","sourceRoot":"","sources":["../../../src/services/recommend-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAQhD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kCAAkC,IAAI,MAAM,CAS3D"}
@@ -50,6 +50,13 @@ export function buildEmptyStackGuidance() {
50
50
  * generically via this one shared helper instead.
51
51
  */
52
52
  export function getRecommendAutoDetectedFooterText() {
53
- return 'auto-detected from your installed skills across all clients';
53
+ // PR #2375 review follow-up: "across all clients" overclaimed scope —
54
+ // each surface actually scans exactly one client (CLI: the canonical
55
+ // install path; MCP: whatever SKILLSMITH_CLIENT resolves to at call
56
+ // time), never a union across clients. Wording stays generic (no single
57
+ // client value is available here to name specifically — see the
58
+ // function-level doc comment above) without asserting a scope neither
59
+ // surface implements.
60
+ return 'auto-detected from your installed skills';
54
61
  }
55
62
  //# sourceMappingURL=recommend-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recommend-guard.js","sourceRoot":"","sources":["../../../src/services/recommend-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CACL,0EAA0E;QAC1E,2EAA2E;QAC3E,2EAA2E;QAC3E,oEAAoE;QACpE,mEAAmE,CACpE,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO,6DAA6D,CAAA;AACtE,CAAC"}
1
+ {"version":3,"file":"recommend-guard.js","sourceRoot":"","sources":["../../../src/services/recommend-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CACL,0EAA0E;QAC1E,2EAA2E;QAC3E,2EAA2E;QAC3E,oEAAoE;QACpE,mEAAmE,CACpE,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kCAAkC;IAChD,sEAAsE;IACtE,qEAAqE;IACrE,oEAAoE;IACpE,wEAAwE;IACxE,gEAAgE;IAChE,sEAAsE;IACtE,sBAAsB;IACtB,OAAO,0CAA0C,CAAA;AACnD,CAAC"}
@@ -32,10 +32,14 @@ describe('getRecommendAutoDetectedFooterText (SMI-5893 Wave 7 Step 2)', () => {
32
32
  expect(typeof text).toBe('string');
33
33
  expect(text.length).toBeGreaterThan(0);
34
34
  });
35
- it('describes multi-harness detection instead of naming a single hardcoded path', () => {
35
+ it('describes detection generically instead of naming a single hardcoded path or overclaiming multi-client scope', () => {
36
+ // PR #2375 review follow-up: this text must not name one hardcoded
37
+ // client path (the original bug), but must also not claim "all
38
+ // clients" — each surface (CLI, MCP) actually scans exactly one
39
+ // client per call, never a union across clients.
36
40
  const text = getRecommendAutoDetectedFooterText();
37
41
  expect(text.toLowerCase()).not.toContain('~/.claude/skills');
38
- expect(text.toLowerCase()).toContain('all clients');
42
+ expect(text.toLowerCase()).not.toContain('all clients');
39
43
  });
40
44
  it('is deterministic (identical wording every call) so CLI and MCP never drift apart', () => {
41
45
  expect(getRecommendAutoDetectedFooterText()).toBe(getRecommendAutoDetectedFooterText());
@@ -1 +1 @@
1
- {"version":3,"file":"recommend-guard.test.js","sourceRoot":"","sources":["../../../src/services/recommend-guard.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,uBAAuB,EAAE,kCAAkC,EAAE,MAAM,sBAAsB,CAAA;AAElG,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;QAC1C,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3D,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,kCAAkC,EAAE,CAAA;QACjD,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,IAAI,GAAG,kCAAkC,EAAE,CAAA;QACjD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC5D,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,kCAAkC,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"recommend-guard.test.js","sourceRoot":"","sources":["../../../src/services/recommend-guard.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,uBAAuB,EAAE,kCAAkC,EAAE,MAAM,sBAAsB,CAAA;AAElG,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;QAC1C,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3D,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,kCAAkC,EAAE,CAAA;QACjD,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8GAA8G,EAAE,GAAG,EAAE;QACtH,mEAAmE;QACnE,+DAA+D;QAC/D,gEAAgE;QAChE,iDAAiD;QACjD,MAAM,IAAI,GAAG,kCAAkC,EAAE,CAAA;QACjD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC5D,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,kCAAkC,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -15,4 +15,5 @@ export { buildInventoryPayload } from './inventory-builder.js';
15
15
  export { uploadInventory, purgeInventory, InventoryAuthError, InventoryConflictError, InventoryValidationError, InventoryUploadError, } from './inventory-client.js';
16
16
  export { pushInventory, maybeAutoPush, type PushInventoryOptions, type MaybeAutoPushOptions, } from './inventory-push.js';
17
17
  export { sendAuditDigest, AuditNotifyAuthError, AuditNotifyError, type AuditDigestVerdict, type AuditDigestPushFinding, type AuditDigestPushPayload, type AuditDigestPushResult, } from './audit-notify-client.js';
18
+ export { resolveSessionTier, SessionTierAuthError, SessionTierTransientError, type SessionTierResult, } from './license-status-client.js';
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EACL,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,0CAA0C,CAAA;AAGjD,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGlG,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAA;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,aAAa,EACb,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EACL,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,0CAA0C,CAAA;AAGjD,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGlG,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAA;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,aAAa,EACb,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAA"}
@@ -21,4 +21,6 @@ export { uploadInventory, purgeInventory, InventoryAuthError, InventoryConflictE
21
21
  export { pushInventory, maybeAutoPush, } from './inventory-push.js';
22
22
  // Continuous-audit email digest push client (SMI-5541 Wave 2C Stage 2)
23
23
  export { sendAuditDigest, AuditNotifyAuthError, AuditNotifyError, } from './audit-notify-client.js';
24
+ // Session-token tier self-check client (SMI-6098, umbrella SMI-6085)
25
+ export { resolveSessionTier, SessionTierAuthError, SessionTierTransientError, } from './license-status-client.js';
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,OAAO,EACL,oBAAoB,EAIpB,mBAAmB,GACpB,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EACL,qBAAqB,GAItB,MAAM,0CAA0C,CAAA;AAEjD,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAwD,MAAM,iBAAiB,CAAA;AAElG,qBAAqB;AACrB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAG5B,MAAM,4BAA4B,CAAA;AAEnC,sDAAsD;AACtD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAM1B,MAAM,sBAAsB,CAAA;AAE7B,kEAAkE;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAoC,MAAM,uBAAuB,CAAA;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,aAAa,EACb,aAAa,GAGd,MAAM,qBAAqB,CAAA;AAE5B,uEAAuE;AACvE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GAKjB,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,OAAO,EACL,oBAAoB,EAIpB,mBAAmB,GACpB,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EACL,qBAAqB,GAItB,MAAM,0CAA0C,CAAA;AAEjD,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAwD,MAAM,iBAAiB,CAAA;AAElG,qBAAqB;AACrB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAG5B,MAAM,4BAA4B,CAAA;AAEnC,sDAAsD;AACtD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAM1B,MAAM,sBAAsB,CAAA;AAE7B,kEAAkE;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAoC,MAAM,uBAAuB,CAAA;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,aAAa,EACb,aAAa,GAGd,MAAM,qBAAqB,CAAA;AAE5B,uEAAuE;AACvE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GAKjB,MAAM,0BAA0B,CAAA;AAEjC,qEAAqE;AACrE,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAE1B,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Session-token tier self-check client (SMI-6098, umbrella SMI-6085).
3
+ *
4
+ * SMI-1953 fixed the MCP server's live tier resolution for a personal
5
+ * `SKILLSMITH_API_KEY`, but a user authenticated only via the standard
6
+ * `skillsmith login` device-session (no separately-configured API key) was
7
+ * never covered — the MCP license middleware always fell back to `community`
8
+ * regardless of real entitlement. This client authenticates with the stored
9
+ * device-login session (proactively refreshing via `resolveAccessToken`) and
10
+ * calls the `license-status` edge function with the session token, mirroring
11
+ * `inventory-client.ts` / `audit-notify-client.ts`.
12
+ *
13
+ * @module @skillsmith/core/sync/license-status-client
14
+ */
15
+ /**
16
+ * No usable device session — none stored, or a refresh attempt failed. This
17
+ * is a real, definitive "not authenticated this way" (same class as a
18
+ * missing/bad API key): callers should fall back to community, cached at
19
+ * the middleware's normal definitive TTL.
20
+ */
21
+ export declare class SessionTierAuthError extends Error {
22
+ constructor(message?: string);
23
+ }
24
+ /**
25
+ * A transport or server failure that is NOT a definitive tier signal —
26
+ * network error, timeout, an HTTP 5xx/429 from `license-status`, or an
27
+ * unparseable/unexpected response shape. Callers MUST treat this as
28
+ * transient (retry soon / serve a stale cached value), never collapse it
29
+ * into "community" — a real paying customer must not be downgraded for the
30
+ * full cache TTL just because the tier check itself glitched.
31
+ */
32
+ export declare class SessionTierTransientError extends Error {
33
+ constructor(message: string);
34
+ }
35
+ /** Mirrors `license-status`'s `data` response shape. */
36
+ export interface SessionTierResult {
37
+ authenticated: boolean;
38
+ /** Raw tier string from the server; validate against the known enum at the call site. */
39
+ tier?: string;
40
+ rateLimit?: number;
41
+ userId?: string;
42
+ }
43
+ /**
44
+ * Resolve the caller's real subscription tier via the device-login session.
45
+ *
46
+ * `authenticated: false` in the returned result is itself a DEFINITIVE
47
+ * signal (the server verified the JWT and found no session), distinct from
48
+ * the thrown errors below, which mean the check couldn't be completed at
49
+ * all.
50
+ *
51
+ * @throws {SessionTierAuthError} No stored session, or the proactive refresh failed.
52
+ * @throws {SessionTierTransientError} Network error, HTTP 429/5xx, or an
53
+ * unparseable/unexpected response — not a definitive tier signal.
54
+ */
55
+ export declare function resolveSessionTier(): Promise<SessionTierResult>;
56
+ //# sourceMappingURL=license-status-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-status-client.d.ts","sourceRoot":"","sources":["../../../src/sync/license-status-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAeH;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,SAA6D;CAIjF;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAA;IACtB,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CA8DrE"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Session-token tier self-check client (SMI-6098, umbrella SMI-6085).
3
+ *
4
+ * SMI-1953 fixed the MCP server's live tier resolution for a personal
5
+ * `SKILLSMITH_API_KEY`, but a user authenticated only via the standard
6
+ * `skillsmith login` device-session (no separately-configured API key) was
7
+ * never covered — the MCP license middleware always fell back to `community`
8
+ * regardless of real entitlement. This client authenticates with the stored
9
+ * device-login session (proactively refreshing via `resolveAccessToken`) and
10
+ * calls the `license-status` edge function with the session token, mirroring
11
+ * `inventory-client.ts` / `audit-notify-client.ts`.
12
+ *
13
+ * @module @skillsmith/core/sync/license-status-client
14
+ */
15
+ import { resolveAccessToken as resolveSessionToken } from './access-token.js';
16
+ import { DEFAULT_BASE_URL, PRODUCTION_ANON_KEY } from '../api/utils.js';
17
+ /**
18
+ * Timeout for the `license-status` request. Matches `license.tier.ts`'s
19
+ * `LICENSE_STATUS_TIMEOUT_MS` (the API-key resolver's own precedent) — a
20
+ * stalled connection here must not block `getLicenseInfo()` indefinitely.
21
+ */
22
+ const LICENSE_STATUS_TIMEOUT_MS = 5000;
23
+ /** The tier values a genuine `authenticated: true` response can carry. */
24
+ const KNOWN_TIERS = new Set(['community', 'individual', 'team', 'enterprise']);
25
+ /**
26
+ * No usable device session — none stored, or a refresh attempt failed. This
27
+ * is a real, definitive "not authenticated this way" (same class as a
28
+ * missing/bad API key): callers should fall back to community, cached at
29
+ * the middleware's normal definitive TTL.
30
+ */
31
+ export class SessionTierAuthError extends Error {
32
+ constructor(message = 'Not authenticated. Run `skillsmith login` and try again.') {
33
+ super(message);
34
+ this.name = 'SessionTierAuthError';
35
+ }
36
+ }
37
+ /**
38
+ * A transport or server failure that is NOT a definitive tier signal —
39
+ * network error, timeout, an HTTP 5xx/429 from `license-status`, or an
40
+ * unparseable/unexpected response shape. Callers MUST treat this as
41
+ * transient (retry soon / serve a stale cached value), never collapse it
42
+ * into "community" — a real paying customer must not be downgraded for the
43
+ * full cache TTL just because the tier check itself glitched.
44
+ */
45
+ export class SessionTierTransientError extends Error {
46
+ constructor(message) {
47
+ super(message);
48
+ this.name = 'SessionTierTransientError';
49
+ }
50
+ }
51
+ /**
52
+ * Resolve the caller's real subscription tier via the device-login session.
53
+ *
54
+ * `authenticated: false` in the returned result is itself a DEFINITIVE
55
+ * signal (the server verified the JWT and found no session), distinct from
56
+ * the thrown errors below, which mean the check couldn't be completed at
57
+ * all.
58
+ *
59
+ * @throws {SessionTierAuthError} No stored session, or the proactive refresh failed.
60
+ * @throws {SessionTierTransientError} Network error, HTTP 429/5xx, or an
61
+ * unparseable/unexpected response — not a definitive tier signal.
62
+ */
63
+ export async function resolveSessionTier() {
64
+ const accessToken = await resolveSessionToken(() => new SessionTierAuthError());
65
+ const controller = new AbortController();
66
+ const timeoutId = setTimeout(() => controller.abort(), LICENSE_STATUS_TIMEOUT_MS);
67
+ let res;
68
+ try {
69
+ try {
70
+ res = await fetch(`${DEFAULT_BASE_URL}/license-status`, {
71
+ method: 'GET',
72
+ headers: {
73
+ apikey: PRODUCTION_ANON_KEY,
74
+ Authorization: `Bearer ${accessToken}`,
75
+ },
76
+ signal: controller.signal,
77
+ });
78
+ }
79
+ catch (error) {
80
+ const detail = controller.signal.aborted
81
+ ? 'timeout'
82
+ : error instanceof Error
83
+ ? error.message
84
+ : String(error);
85
+ throw new SessionTierTransientError(`license-status request failed: ${detail}`);
86
+ }
87
+ }
88
+ finally {
89
+ clearTimeout(timeoutId);
90
+ }
91
+ // license-status's own abuse rate limit (429), or a server error — neither
92
+ // is a stable tier signal (mirrors createTierResolver's API-key handling).
93
+ if (res.status === 429 || res.status >= 500) {
94
+ throw new SessionTierTransientError(`license-status returned HTTP ${res.status}`);
95
+ }
96
+ let body;
97
+ try {
98
+ body = (await res.json());
99
+ }
100
+ catch {
101
+ throw new SessionTierTransientError('license-status returned an unreadable body');
102
+ }
103
+ const data = body?.data;
104
+ if (!res.ok || !data || typeof data.authenticated !== 'boolean') {
105
+ throw new SessionTierTransientError(`license-status returned an unexpected response (status ${res.status})`);
106
+ }
107
+ // A genuine `authenticated: true` response must carry a recognized tier.
108
+ // Without this, a malformed/buggy response (authenticated:true, no tier,
109
+ // or a garbage tier string) would fall through the middleware's "no tier"
110
+ // branch and get silently cached as a DEFINITIVE community result — the
111
+ // exact anti-pattern the server side already guards against, mirrored
112
+ // here for defense-in-depth.
113
+ if (data.authenticated === true && !KNOWN_TIERS.has(data.tier ?? '')) {
114
+ throw new SessionTierTransientError(`license-status returned authenticated:true with an unrecognized tier: ${String(data.tier)}`);
115
+ }
116
+ return data;
117
+ }
118
+ //# sourceMappingURL=license-status-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-status-client.js","sourceRoot":"","sources":["../../../src/sync/license-status-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * license-status-client tests (SMI-6098, umbrella SMI-6085).
3
+ *
4
+ * Mirrors audit-notify-client.test.ts's mock shape (token-credentials leaf
5
+ * module + global fetch).
6
+ *
7
+ * UC-1: no credentials -> SessionTierAuthError, no fetch.
8
+ * UC-2: expired credentials -> refresh path runs, new token used.
9
+ * UC-3: 200 authenticated:true/false bodies returned verbatim.
10
+ * UC-4: 429/5xx -> SessionTierTransientError.
11
+ * UC-5: network throw / unreadable / malformed body -> SessionTierTransientError.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=license-status-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-status-client.test.d.ts","sourceRoot":"","sources":["../../../src/sync/license-status-client.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * license-status-client tests (SMI-6098, umbrella SMI-6085).
3
+ *
4
+ * Mirrors audit-notify-client.test.ts's mock shape (token-credentials leaf
5
+ * module + global fetch).
6
+ *
7
+ * UC-1: no credentials -> SessionTierAuthError, no fetch.
8
+ * UC-2: expired credentials -> refresh path runs, new token used.
9
+ * UC-3: 200 authenticated:true/false bodies returned verbatim.
10
+ * UC-4: 429/5xx -> SessionTierTransientError.
11
+ * UC-5: network throw / unreadable / malformed body -> SessionTierTransientError.
12
+ */
13
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
14
+ vi.mock('../config/token-credentials.js', () => ({
15
+ loadCredentials: vi.fn(),
16
+ refreshAccessToken: vi.fn(),
17
+ storeCredentials: vi.fn(),
18
+ }));
19
+ import { loadCredentials, refreshAccessToken, storeCredentials, } from '../config/token-credentials.js';
20
+ import { resolveSessionTier, SessionTierAuthError, SessionTierTransientError, } from './license-status-client.js';
21
+ const fetchMock = vi.fn();
22
+ function jsonResponse(body, status) {
23
+ return new Response(JSON.stringify(body), {
24
+ status,
25
+ headers: { 'Content-Type': 'application/json' },
26
+ });
27
+ }
28
+ const futureCreds = {
29
+ accessToken: 'at_valid',
30
+ refreshToken: 'rt_valid',
31
+ expiresAt: Date.now() + 3_600_000,
32
+ version: 2,
33
+ };
34
+ describe('license-status-client', () => {
35
+ beforeEach(() => {
36
+ vi.clearAllMocks();
37
+ vi.stubGlobal('fetch', fetchMock);
38
+ });
39
+ afterEach(() => {
40
+ vi.unstubAllGlobals();
41
+ });
42
+ it('UC-1: throws SessionTierAuthError when no credentials are stored — no fetch', async () => {
43
+ vi.mocked(loadCredentials).mockResolvedValue(null);
44
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierAuthError);
45
+ expect(fetchMock).not.toHaveBeenCalled();
46
+ });
47
+ it('UC-2: refreshes an about-to-expire token and sends with the new token', async () => {
48
+ vi.mocked(loadCredentials).mockResolvedValue({
49
+ ...futureCreds,
50
+ accessToken: 'at_stale',
51
+ expiresAt: Date.now() + 1_000, // within the 60s skew -> refresh
52
+ });
53
+ vi.mocked(refreshAccessToken).mockResolvedValue({ ...futureCreds, accessToken: 'at_fresh' });
54
+ fetchMock.mockResolvedValue(jsonResponse({ data: { authenticated: true, tier: 'team', rateLimit: 120, userId: 'u1' } }, 200));
55
+ const res = await resolveSessionTier();
56
+ expect(res).toEqual({ authenticated: true, tier: 'team', rateLimit: 120, userId: 'u1' });
57
+ expect(storeCredentials).toHaveBeenCalledOnce();
58
+ const init = fetchMock.mock.calls[0]?.[1];
59
+ expect(init.headers.Authorization).toBe('Bearer at_fresh');
60
+ });
61
+ it('UC-3a: 200 authenticated:true -> returned verbatim', async () => {
62
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
63
+ fetchMock.mockResolvedValue(jsonResponse({ data: { authenticated: true, tier: 'enterprise', rateLimit: 1000, userId: 'u2' } }, 200));
64
+ await expect(resolveSessionTier()).resolves.toEqual({
65
+ authenticated: true,
66
+ tier: 'enterprise',
67
+ rateLimit: 1000,
68
+ userId: 'u2',
69
+ });
70
+ });
71
+ it('UC-3b: 200 authenticated:false -> returned verbatim (definitive, not thrown)', async () => {
72
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
73
+ fetchMock.mockResolvedValue(jsonResponse({ data: { authenticated: false } }, 200));
74
+ await expect(resolveSessionTier()).resolves.toEqual({ authenticated: false });
75
+ });
76
+ it('UC-4a: HTTP 429 -> SessionTierTransientError', async () => {
77
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
78
+ fetchMock.mockResolvedValue(jsonResponse({}, 429));
79
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierTransientError);
80
+ });
81
+ it('UC-4b: HTTP 500 -> SessionTierTransientError', async () => {
82
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
83
+ fetchMock.mockResolvedValue(jsonResponse({}, 500));
84
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierTransientError);
85
+ });
86
+ it('UC-5a: fetch throws (network error) -> SessionTierTransientError', async () => {
87
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
88
+ fetchMock.mockRejectedValue(new Error('ECONNRESET'));
89
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierTransientError);
90
+ });
91
+ it('UC-5b: unreadable body -> SessionTierTransientError', async () => {
92
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
93
+ fetchMock.mockResolvedValue(new Response('not json', { status: 200 }));
94
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierTransientError);
95
+ });
96
+ it('UC-5c: 200 with an unexpected/missing data shape -> SessionTierTransientError', async () => {
97
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
98
+ fetchMock.mockResolvedValue(jsonResponse({ nope: true }, 200));
99
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierTransientError);
100
+ });
101
+ it('UC-5d: authenticated:true with a missing tier -> SessionTierTransientError, never a silent community result', async () => {
102
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
103
+ fetchMock.mockResolvedValue(jsonResponse({ data: { authenticated: true } }, 200));
104
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierTransientError);
105
+ });
106
+ it('UC-5e: authenticated:true with an unrecognized tier -> SessionTierTransientError', async () => {
107
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
108
+ fetchMock.mockResolvedValue(jsonResponse({ data: { authenticated: true, tier: 'platinum' } }, 200));
109
+ await expect(resolveSessionTier()).rejects.toBeInstanceOf(SessionTierTransientError);
110
+ });
111
+ it('UC-6a: the request carries an AbortSignal (timeout wiring present)', async () => {
112
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
113
+ fetchMock.mockResolvedValue(jsonResponse({ data: { authenticated: false } }, 200));
114
+ await resolveSessionTier();
115
+ const init = fetchMock.mock.calls[0]?.[1];
116
+ expect(init.signal).toBeInstanceOf(AbortSignal);
117
+ });
118
+ it('UC-6b: a stalled request is aborted after the timeout and reported as transient', async () => {
119
+ vi.useFakeTimers();
120
+ vi.mocked(loadCredentials).mockResolvedValue(futureCreds);
121
+ fetchMock.mockImplementation((_url, init) => new Promise((_resolve, reject) => {
122
+ const signal = init.signal;
123
+ signal?.addEventListener('abort', () => {
124
+ const err = new Error('The operation was aborted.');
125
+ err.name = 'AbortError';
126
+ reject(err);
127
+ });
128
+ }));
129
+ const promise = resolveSessionTier();
130
+ const assertion = expect(promise).rejects.toThrow(/timeout/);
131
+ await vi.advanceTimersByTimeAsync(5000);
132
+ await assertion;
133
+ vi.useRealTimers();
134
+ });
135
+ });
136
+ //# sourceMappingURL=license-status-client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-status-client.test.js","sourceRoot":"","sources":["../../../src/sync/license-status-client.test.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,19 @@ export interface SecuritySummary {
39
39
  findingsCount: number;
40
40
  /** When the skill was last scanned */
41
41
  scannedAt: string | null;
42
+ /**
43
+ * SMI-6033 Wave 2 (Gap 8): true when the most recent scan could not cover
44
+ * every candidate file (count/size cap, transient fetch failure, tree-fetch
45
+ * failure, tree truncation, or tree-budget exhaustion). Informational only —
46
+ * does NOT affect installability the way quarantine does. Defaults to
47
+ * `false` when absent from older cached data.
48
+ */
49
+ scanCoverageIncomplete?: boolean;
50
+ /**
51
+ * SMI-6033 Wave 2 (Gap 8): '; '-joined machine-readable cause token(s) for a
52
+ * `scanCoverageIncomplete: true` result, or `null`/absent when complete.
53
+ */
54
+ scanCoverageNote?: string | null;
42
55
  }
43
56
  /**
44
57
  * Full skill definition
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- /**
2
- * Version check utility for auto-update notifications
3
- * @see SMI-1952: Add auto-update check to MCP server startup
4
- */
5
1
  /**
6
2
  * Result of a version check against npm registry
7
3
  */
@@ -34,8 +30,65 @@ export declare function checkForUpdates(packageName: string, currentVersion: str
34
30
  /**
35
31
  * Format update notification message for stderr output
36
32
  *
33
+ * SMI-5893 Wave 10 (GH#2368 C-06/C-07/C-22): upgrading the npm package alone
34
+ * never refreshes on-disk onboarding artifacts (hooks.json, the bundled
35
+ * slash-command skill's SKILL.md, agent-pack hook scripts) — those are only
36
+ * (re)written when the corresponding install command actually runs. Before
37
+ * this change the message assumed Claude Code and said nothing about this,
38
+ * so a Cursor (or any non-Claude-Code) user who upgraded the package still
39
+ * saw stale hooks/SKILL.md content with no indication why.
40
+ *
41
+ * Verified against current command behavior, not assumed:
42
+ * - `skillsmith setup --client <client>` installs the bundled slash-command
43
+ * skill but SKIPS an already-present install unless `--force` is passed
44
+ * (`install-skill.ts`) — so `--force` is required here to actually refresh
45
+ * it, and `--client` IS supported (per-client target path).
46
+ * - `skillsmith agent install` (hooks, MCP registration, agent-pack SKILL.md)
47
+ * always re-writes Skillsmith-owned artifacts on every run, with or
48
+ * without `--force` — that flag only controls whether a FOREIGN
49
+ * conflicting entry gets overwritten (`agent.ts`'s own `--force` help
50
+ * text). It has NO `--client` flag — it auto-detects and installs into
51
+ * every present harness, so `client` is threaded only into the `setup`
52
+ * line below, not this one.
53
+ *
54
+ * Code-review finding (real regression): an earlier draft of this message
55
+ * dropped `result.updateCommand` (the actual "how do I get the new npm
56
+ * version" instruction) entirely, replacing it solely with the on-disk-
57
+ * artifact-refresh commands above — which run against the STILL-OLD
58
+ * installed binary and never upgrade anything. Both instructions are
59
+ * necessary and address different problems; neither substitutes the other.
60
+ *
37
61
  * @param result - Version check result with update available
62
+ * @param client - Resolved client ID (e.g. via {@link resolveUpdateNotificationClient}),
63
+ * if available. When omitted, the message stays generic rather than
64
+ * guessing a client.
38
65
  * @returns Formatted message string
39
66
  */
40
- export declare function formatUpdateNotification(result: VersionCheckResult): string;
67
+ export declare function formatUpdateNotification(result: VersionCheckResult, client?: string): string;
68
+ /**
69
+ * Resolve `SKILLSMITH_CLIENT` for {@link formatUpdateNotification}'s
70
+ * optional `client` parameter, without ever throwing (code-review finding,
71
+ * SMI-5893 Wave 10): the only production call site (`mcp-server/src/index.ts`)
72
+ * awaits this inside a `.then()` whose trailing `.catch()` is empty — an
73
+ * uncaught throw from `resolveClientId` on an invalid env value would
74
+ * silently drop the ENTIRE update notification, not just degrade to the
75
+ * generic message this function's own contract promises.
76
+ *
77
+ * Also deliberately does NOT call `resolveClientId(undefined)` when `raw`
78
+ * is unset — that would return `'claude-code'` (its documented default),
79
+ * which is actively wrong here: of the 9 client harnesses this repo
80
+ * supports, only Cursor's own generated MCP config ever sets
81
+ * `SKILLSMITH_CLIENT` (confirmed via `packages/cli/src/templates/mcp-server.template.snippets.ts` —
82
+ * the claude-code/copilot/windsurf/agents/codex/opencode/hermes/grok/
83
+ * antigravity snippets never set it). Defaulting to claude-code would tell
84
+ * a Windsurf/Copilot/etc. user to `setup --force --client claude-code`,
85
+ * pointing them at `~/.claude/skills` instead of their actual client's
86
+ * directory. Staying `undefined` here keeps the message client-neutral for
87
+ * everyone this env var was never meant to identify.
88
+ *
89
+ * @param raw - `process.env.SKILLSMITH_CLIENT`, or any other raw string.
90
+ * @returns the resolved client id, or `undefined` if `raw` is unset/empty
91
+ * or does not resolve to a known client.
92
+ */
93
+ export declare function resolveUpdateNotificationClient(raw: string | undefined): string | undefined;
41
94
  //# 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":"AAAA;;;GAGG;AAEH;;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;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAK3E"}
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"}