@skillsmith/mcp-server 0.3.3 → 0.3.5

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 (261) hide show
  1. package/README.md +5 -3
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/__tests__/LocalIndexer.test.d.ts +5 -0
  4. package/dist/src/__tests__/LocalIndexer.test.d.ts.map +1 -0
  5. package/dist/src/__tests__/LocalIndexer.test.js +396 -0
  6. package/dist/src/__tests__/LocalIndexer.test.js.map +1 -0
  7. package/dist/src/__tests__/context.test.d.ts +10 -0
  8. package/dist/src/__tests__/context.test.d.ts.map +1 -0
  9. package/dist/src/__tests__/context.test.js +345 -0
  10. package/dist/src/__tests__/context.test.js.map +1 -0
  11. package/dist/src/__tests__/get-skill.test.d.ts +1 -0
  12. package/dist/src/__tests__/get-skill.test.d.ts.map +1 -1
  13. package/dist/src/__tests__/get-skill.test.js +279 -0
  14. package/dist/src/__tests__/get-skill.test.js.map +1 -1
  15. package/dist/src/__tests__/index-local.test.d.ts +5 -0
  16. package/dist/src/__tests__/index-local.test.d.ts.map +1 -0
  17. package/dist/src/__tests__/index-local.test.js +203 -0
  18. package/dist/src/__tests__/index-local.test.js.map +1 -0
  19. package/dist/src/__tests__/middleware/license.test.js +180 -78
  20. package/dist/src/__tests__/middleware/license.test.js.map +1 -1
  21. package/dist/src/__tests__/recommend.test.d.ts +7 -0
  22. package/dist/src/__tests__/recommend.test.d.ts.map +1 -0
  23. package/dist/src/__tests__/recommend.test.js +277 -0
  24. package/dist/src/__tests__/recommend.test.js.map +1 -0
  25. package/dist/src/__tests__/search.test.js +140 -1
  26. package/dist/src/__tests__/search.test.js.map +1 -1
  27. package/dist/src/__tests__/utils/validation.test.d.ts +7 -0
  28. package/dist/src/__tests__/utils/validation.test.d.ts.map +1 -0
  29. package/dist/src/__tests__/utils/validation.test.js +82 -0
  30. package/dist/src/__tests__/utils/validation.test.js.map +1 -0
  31. package/dist/src/context.d.ts +22 -0
  32. package/dist/src/context.d.ts.map +1 -1
  33. package/dist/src/context.js +63 -9
  34. package/dist/src/context.js.map +1 -1
  35. package/dist/src/index.js +15 -1
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/indexer/FrontmatterParser.d.ts +30 -0
  38. package/dist/src/indexer/FrontmatterParser.d.ts.map +1 -0
  39. package/dist/src/indexer/FrontmatterParser.js +109 -0
  40. package/dist/src/indexer/FrontmatterParser.js.map +1 -0
  41. package/dist/src/indexer/LocalIndexer.d.ts +136 -0
  42. package/dist/src/indexer/LocalIndexer.d.ts.map +1 -0
  43. package/dist/src/indexer/LocalIndexer.js +271 -0
  44. package/dist/src/indexer/LocalIndexer.js.map +1 -0
  45. package/dist/src/indexer/index.d.ts +8 -0
  46. package/dist/src/indexer/index.d.ts.map +1 -0
  47. package/dist/src/indexer/index.js +8 -0
  48. package/dist/src/indexer/index.js.map +1 -0
  49. package/dist/src/llm/failover.d.ts +210 -0
  50. package/dist/src/llm/failover.d.ts.map +1 -0
  51. package/dist/src/llm/failover.js +329 -0
  52. package/dist/src/llm/failover.js.map +1 -0
  53. package/dist/src/middleware/errorFormatter.d.ts +27 -0
  54. package/dist/src/middleware/errorFormatter.d.ts.map +1 -1
  55. package/dist/src/middleware/errorFormatter.js +95 -0
  56. package/dist/src/middleware/errorFormatter.js.map +1 -1
  57. package/dist/src/middleware/index.d.ts +1 -1
  58. package/dist/src/middleware/index.d.ts.map +1 -1
  59. package/dist/src/middleware/index.js.map +1 -1
  60. package/dist/src/middleware/license.d.ts +5 -0
  61. package/dist/src/middleware/license.d.ts.map +1 -1
  62. package/dist/src/middleware/license.js +2 -1
  63. package/dist/src/middleware/license.js.map +1 -1
  64. package/dist/src/middleware/quota-helpers.d.ts +40 -0
  65. package/dist/src/middleware/quota-helpers.d.ts.map +1 -0
  66. package/dist/src/middleware/quota-helpers.js +90 -0
  67. package/dist/src/middleware/quota-helpers.js.map +1 -0
  68. package/dist/src/middleware/quota-types.d.ts +105 -0
  69. package/dist/src/middleware/quota-types.d.ts.map +1 -0
  70. package/dist/src/middleware/quota-types.js +4 -0
  71. package/dist/src/middleware/quota-types.js.map +1 -0
  72. package/dist/src/middleware/quota.d.ts +3 -97
  73. package/dist/src/middleware/quota.d.ts.map +1 -1
  74. package/dist/src/middleware/quota.js +2 -87
  75. package/dist/src/middleware/quota.js.map +1 -1
  76. package/dist/src/tools/LocalSkillSearch.d.ts +32 -0
  77. package/dist/src/tools/LocalSkillSearch.d.ts.map +1 -0
  78. package/dist/src/tools/LocalSkillSearch.js +74 -0
  79. package/dist/src/tools/LocalSkillSearch.js.map +1 -0
  80. package/dist/src/tools/compare.d.ts +3 -102
  81. package/dist/src/tools/compare.d.ts.map +1 -1
  82. package/dist/src/tools/compare.helpers.d.ts +36 -0
  83. package/dist/src/tools/compare.helpers.d.ts.map +1 -0
  84. package/dist/src/tools/compare.helpers.js +252 -0
  85. package/dist/src/tools/compare.helpers.js.map +1 -0
  86. package/dist/src/tools/compare.js +6 -288
  87. package/dist/src/tools/compare.js.map +1 -1
  88. package/dist/src/tools/compare.types.d.ts +134 -0
  89. package/dist/src/tools/compare.types.d.ts.map +1 -0
  90. package/dist/src/tools/compare.types.js +47 -0
  91. package/dist/src/tools/compare.types.js.map +1 -0
  92. package/dist/src/tools/get-skill.d.ts.map +1 -1
  93. package/dist/src/tools/get-skill.js +38 -2
  94. package/dist/src/tools/get-skill.js.map +1 -1
  95. package/dist/src/tools/index-local.d.ts +117 -0
  96. package/dist/src/tools/index-local.d.ts.map +1 -0
  97. package/dist/src/tools/index-local.js +126 -0
  98. package/dist/src/tools/index-local.js.map +1 -0
  99. package/dist/src/tools/index.d.ts +2 -0
  100. package/dist/src/tools/index.d.ts.map +1 -1
  101. package/dist/src/tools/index.js +2 -0
  102. package/dist/src/tools/index.js.map +1 -1
  103. package/dist/src/tools/install.conflict-helpers.d.ts +64 -0
  104. package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -0
  105. package/dist/src/tools/install.conflict-helpers.js +165 -0
  106. package/dist/src/tools/install.conflict-helpers.js.map +1 -0
  107. package/dist/src/tools/install.conflict-helpers.test.d.ts +15 -0
  108. package/dist/src/tools/install.conflict-helpers.test.d.ts.map +1 -0
  109. package/dist/src/tools/install.conflict-helpers.test.js +243 -0
  110. package/dist/src/tools/install.conflict-helpers.test.js.map +1 -0
  111. package/dist/src/tools/install.conflict.d.ts +58 -0
  112. package/dist/src/tools/install.conflict.d.ts.map +1 -0
  113. package/dist/src/tools/install.conflict.js +160 -0
  114. package/dist/src/tools/install.conflict.js.map +1 -0
  115. package/dist/src/tools/install.conflict.test.d.ts +15 -0
  116. package/dist/src/tools/install.conflict.test.d.ts.map +1 -0
  117. package/dist/src/tools/install.conflict.test.js +354 -0
  118. package/dist/src/tools/install.conflict.test.js.map +1 -0
  119. package/dist/src/tools/install.d.ts +11 -60
  120. package/dist/src/tools/install.d.ts.map +1 -1
  121. package/dist/src/tools/install.helpers.d.ts +83 -0
  122. package/dist/src/tools/install.helpers.d.ts.map +1 -0
  123. package/dist/src/tools/install.helpers.js +333 -0
  124. package/dist/src/tools/install.helpers.js.map +1 -0
  125. package/dist/src/tools/install.js +199 -255
  126. package/dist/src/tools/install.js.map +1 -1
  127. package/dist/src/tools/install.types.d.ts +178 -0
  128. package/dist/src/tools/install.types.d.ts.map +1 -0
  129. package/dist/src/tools/install.types.js +105 -0
  130. package/dist/src/tools/install.types.js.map +1 -0
  131. package/dist/src/tools/merge.d.ts +53 -0
  132. package/dist/src/tools/merge.d.ts.map +1 -0
  133. package/dist/src/tools/merge.js +276 -0
  134. package/dist/src/tools/merge.js.map +1 -0
  135. package/dist/src/tools/merge.test.d.ts +11 -0
  136. package/dist/src/tools/merge.test.d.ts.map +1 -0
  137. package/dist/src/tools/merge.test.js +224 -0
  138. package/dist/src/tools/merge.test.js.map +1 -0
  139. package/dist/src/tools/recommend.d.ts +3 -148
  140. package/dist/src/tools/recommend.d.ts.map +1 -1
  141. package/dist/src/tools/recommend.helpers.d.ts +42 -0
  142. package/dist/src/tools/recommend.helpers.d.ts.map +1 -0
  143. package/dist/src/tools/recommend.helpers.js +155 -0
  144. package/dist/src/tools/recommend.helpers.js.map +1 -0
  145. package/dist/src/tools/recommend.js +216 -154
  146. package/dist/src/tools/recommend.js.map +1 -1
  147. package/dist/src/tools/recommend.types.d.ts +164 -0
  148. package/dist/src/tools/recommend.types.d.ts.map +1 -0
  149. package/dist/src/tools/recommend.types.js +87 -0
  150. package/dist/src/tools/recommend.types.js.map +1 -0
  151. package/dist/src/tools/search.d.ts +18 -4
  152. package/dist/src/tools/search.d.ts.map +1 -1
  153. package/dist/src/tools/search.js +91 -16
  154. package/dist/src/tools/search.js.map +1 -1
  155. package/dist/src/tools/validate.d.ts +3 -70
  156. package/dist/src/tools/validate.d.ts.map +1 -1
  157. package/dist/src/tools/validate.helpers.d.ts +22 -0
  158. package/dist/src/tools/validate.helpers.d.ts.map +1 -0
  159. package/dist/src/tools/validate.helpers.js +276 -0
  160. package/dist/src/tools/validate.helpers.js.map +1 -0
  161. package/dist/src/tools/validate.js +4 -337
  162. package/dist/src/tools/validate.js.map +1 -1
  163. package/dist/src/tools/validate.types.d.ts +96 -0
  164. package/dist/src/tools/validate.types.d.ts.map +1 -0
  165. package/dist/src/tools/validate.types.js +71 -0
  166. package/dist/src/tools/validate.types.js.map +1 -0
  167. package/dist/src/utils/validation.d.ts +6 -2
  168. package/dist/src/utils/validation.d.ts.map +1 -1
  169. package/dist/src/utils/validation.js +11 -2
  170. package/dist/src/utils/validation.js.map +1 -1
  171. package/dist/src/webhooks/index.d.ts +1 -0
  172. package/dist/src/webhooks/index.d.ts.map +1 -1
  173. package/dist/src/webhooks/index.js +2 -0
  174. package/dist/src/webhooks/index.js.map +1 -1
  175. package/dist/src/webhooks/stripe-webhook-endpoint.d.ts +68 -0
  176. package/dist/src/webhooks/stripe-webhook-endpoint.d.ts.map +1 -0
  177. package/dist/src/webhooks/stripe-webhook-endpoint.js +213 -0
  178. package/dist/src/webhooks/stripe-webhook-endpoint.js.map +1 -0
  179. package/dist/src/webhooks/webhook-endpoint.d.ts +4 -49
  180. package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
  181. package/dist/src/webhooks/webhook-endpoint.js +3 -125
  182. package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
  183. package/dist/src/webhooks/webhook-helpers.d.ts +69 -0
  184. package/dist/src/webhooks/webhook-helpers.d.ts.map +1 -0
  185. package/dist/src/webhooks/webhook-helpers.js +146 -0
  186. package/dist/src/webhooks/webhook-helpers.js.map +1 -0
  187. package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts +12 -0
  188. package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts.map +1 -0
  189. package/dist/tests/e2e/conflict-resolution.e2e.test.js +343 -0
  190. package/dist/tests/e2e/conflict-resolution.e2e.test.js.map +1 -0
  191. package/dist/tests/integration/fixtures/development-skills.d.ts +22 -0
  192. package/dist/tests/integration/fixtures/development-skills.d.ts.map +1 -0
  193. package/dist/tests/integration/fixtures/development-skills.js +165 -0
  194. package/dist/tests/integration/fixtures/development-skills.js.map +1 -0
  195. package/dist/tests/integration/fixtures/devops-skills.d.ts +10 -0
  196. package/dist/tests/integration/fixtures/devops-skills.d.ts.map +1 -0
  197. package/dist/tests/integration/fixtures/devops-skills.js +70 -0
  198. package/dist/tests/integration/fixtures/devops-skills.js.map +1 -0
  199. package/dist/tests/integration/fixtures/experimental-skills.d.ts +14 -0
  200. package/dist/tests/integration/fixtures/experimental-skills.d.ts.map +1 -0
  201. package/dist/tests/integration/fixtures/experimental-skills.js +255 -0
  202. package/dist/tests/integration/fixtures/experimental-skills.js.map +1 -0
  203. package/dist/tests/integration/fixtures/skill-types.d.ts +18 -0
  204. package/dist/tests/integration/fixtures/skill-types.d.ts.map +1 -0
  205. package/dist/tests/integration/fixtures/skill-types.js +6 -0
  206. package/dist/tests/integration/fixtures/skill-types.js.map +1 -0
  207. package/dist/tests/integration/fixtures/test-skills.d.ts +10 -14
  208. package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -1
  209. package/dist/tests/integration/fixtures/test-skills.js +23 -590
  210. package/dist/tests/integration/fixtures/test-skills.js.map +1 -1
  211. package/dist/tests/integration/fixtures/testing-skills.d.ts +10 -0
  212. package/dist/tests/integration/fixtures/testing-skills.d.ts.map +1 -0
  213. package/dist/tests/integration/fixtures/testing-skills.js +70 -0
  214. package/dist/tests/integration/fixtures/testing-skills.js.map +1 -0
  215. package/dist/tests/integration/fixtures/verified-skills.d.ts +11 -0
  216. package/dist/tests/integration/fixtures/verified-skills.d.ts.map +1 -0
  217. package/dist/tests/integration/fixtures/verified-skills.js +91 -0
  218. package/dist/tests/integration/fixtures/verified-skills.js.map +1 -0
  219. package/dist/tests/integration/install-conflict.integration.test.d.ts +8 -0
  220. package/dist/tests/integration/install-conflict.integration.test.d.ts.map +1 -0
  221. package/dist/tests/integration/install-conflict.integration.test.js +384 -0
  222. package/dist/tests/integration/install-conflict.integration.test.js.map +1 -0
  223. package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +13 -0
  224. package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +1 -0
  225. package/dist/tests/integration/install-trust-parsing.integration.test.js +290 -0
  226. package/dist/tests/integration/install-trust-parsing.integration.test.js.map +1 -0
  227. package/dist/tests/integration/install.integration.test.js +151 -1
  228. package/dist/tests/integration/install.integration.test.js.map +1 -1
  229. package/dist/tests/integration/recommend.integration.test.js +2 -1
  230. package/dist/tests/integration/recommend.integration.test.js.map +1 -1
  231. package/dist/tests/llm/failover.test.d.ts +13 -0
  232. package/dist/tests/llm/failover.test.d.ts.map +1 -0
  233. package/dist/tests/llm/failover.test.js +250 -0
  234. package/dist/tests/llm/failover.test.js.map +1 -0
  235. package/dist/tests/recommend.test.js +133 -1
  236. package/dist/tests/recommend.test.js.map +1 -1
  237. package/dist/tests/tools.test.d.ts +1 -0
  238. package/dist/tests/tools.test.d.ts.map +1 -1
  239. package/dist/tests/tools.test.js +59 -1
  240. package/dist/tests/tools.test.js.map +1 -1
  241. package/dist/tests/unit/compare-helpers.test.d.ts +8 -0
  242. package/dist/tests/unit/compare-helpers.test.d.ts.map +1 -0
  243. package/dist/tests/unit/compare-helpers.test.js +224 -0
  244. package/dist/tests/unit/compare-helpers.test.js.map +1 -0
  245. package/dist/tests/unit/install-helpers.test.d.ts +8 -0
  246. package/dist/tests/unit/install-helpers.test.d.ts.map +1 -0
  247. package/dist/tests/unit/install-helpers.test.js +460 -0
  248. package/dist/tests/unit/install-helpers.test.js.map +1 -0
  249. package/dist/tests/unit/recommend-helpers.test.d.ts +8 -0
  250. package/dist/tests/unit/recommend-helpers.test.d.ts.map +1 -0
  251. package/dist/tests/unit/recommend-helpers.test.js +117 -0
  252. package/dist/tests/unit/recommend-helpers.test.js.map +1 -0
  253. package/dist/tests/unit/validate-helpers.test.d.ts +8 -0
  254. package/dist/tests/unit/validate-helpers.test.d.ts.map +1 -0
  255. package/dist/tests/unit/validate-helpers.test.js +243 -0
  256. package/dist/tests/unit/validate-helpers.test.js.map +1 -0
  257. package/package.json +7 -6
  258. package/src/assets/docs/USER_GUIDE.md +0 -220
  259. package/src/assets/skills/skillsmith/docs/QUOTAS.md +0 -182
  260. package/src/assets/skills/skillsmith/docs/SECURITY.md +0 -174
  261. package/src/assets/skills/skillsmith/docs/TRUST_TIERS.md +0 -142
@@ -0,0 +1,345 @@
1
+ /**
2
+ * Tests for MCP Server Tool Context
3
+ *
4
+ * @see SMI-1614: MCP Server Test Coverage Gaps
5
+ * @see SMI-792: Database initialization
6
+ * @see SMI-898: Path traversal protection
7
+ * @see SMI-1184: Telemetry configuration
8
+ */
9
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
10
+ import { homedir, tmpdir } from 'os';
11
+ import { join } from 'path';
12
+ import { existsSync, rmSync } from 'fs';
13
+ import { getDefaultDbPath, createToolContext, closeToolContext, getToolContext, resetToolContext, } from '../context.js';
14
+ describe('Context Module', () => {
15
+ // Store original values for env vars we modify
16
+ const ENV_VARS_TO_CLEAR = [
17
+ 'SKILLSMITH_DB_PATH',
18
+ 'SKILLSMITH_TELEMETRY_ENABLED',
19
+ 'POSTHOG_API_KEY',
20
+ 'SKILLSMITH_BACKGROUND_SYNC',
21
+ 'SKILLSMITH_LLM_FAILOVER_ENABLED',
22
+ ];
23
+ beforeEach(async () => {
24
+ vi.resetModules();
25
+ // Use vi.stubEnv for proper environment isolation
26
+ ENV_VARS_TO_CLEAR.forEach((key) => {
27
+ vi.stubEnv(key, undefined);
28
+ });
29
+ // Reset global context
30
+ await resetToolContext();
31
+ });
32
+ afterEach(async () => {
33
+ vi.unstubAllEnvs();
34
+ vi.restoreAllMocks();
35
+ await resetToolContext();
36
+ });
37
+ describe('getDefaultDbPath', () => {
38
+ it('should return default path when SKILLSMITH_DB_PATH is not set', () => {
39
+ delete process.env.SKILLSMITH_DB_PATH;
40
+ const dbPath = getDefaultDbPath();
41
+ expect(dbPath).toBe(join(homedir(), '.skillsmith', 'skills.db'));
42
+ });
43
+ it('should return env path when SKILLSMITH_DB_PATH is set to valid path', () => {
44
+ const validPath = join(homedir(), '.skillsmith', 'custom.db');
45
+ process.env.SKILLSMITH_DB_PATH = validPath;
46
+ const dbPath = getDefaultDbPath();
47
+ expect(dbPath).toBe(validPath);
48
+ });
49
+ it('should allow temp directory paths', () => {
50
+ const tempPath = join(tmpdir(), 'skillsmith-test', 'skills.db');
51
+ process.env.SKILLSMITH_DB_PATH = tempPath;
52
+ const dbPath = getDefaultDbPath();
53
+ expect(dbPath).toBe(tempPath);
54
+ });
55
+ it('should throw error for path traversal attempt', () => {
56
+ process.env.SKILLSMITH_DB_PATH = '/etc/../../../tmp/malicious.db';
57
+ expect(() => getDefaultDbPath()).toThrow('Invalid SKILLSMITH_DB_PATH');
58
+ });
59
+ it('should allow in-memory database path', () => {
60
+ process.env.SKILLSMITH_DB_PATH = ':memory:';
61
+ const dbPath = getDefaultDbPath();
62
+ expect(dbPath).toBe(':memory:');
63
+ });
64
+ it('should allow .claude directory paths', () => {
65
+ const claudePath = join(homedir(), '.claude', 'skills.db');
66
+ process.env.SKILLSMITH_DB_PATH = claudePath;
67
+ const dbPath = getDefaultDbPath();
68
+ expect(dbPath).toBe(claudePath);
69
+ });
70
+ });
71
+ describe('createToolContext', () => {
72
+ describe('basic initialization', () => {
73
+ it('should create context with in-memory database', () => {
74
+ const context = createToolContext({ dbPath: ':memory:' });
75
+ expect(context.db).toBeDefined();
76
+ expect(context.searchService).toBeDefined();
77
+ expect(context.skillRepository).toBeDefined();
78
+ expect(context.apiClient).toBeDefined();
79
+ context.db.close();
80
+ });
81
+ it('should create context with default options', async () => {
82
+ const context = createToolContext({ dbPath: ':memory:' });
83
+ expect(context.distinctId).toBeUndefined();
84
+ // backgroundSync is created by default when sync config is enabled
85
+ // This is the expected default behavior
86
+ expect(context.llmFailover).toBeUndefined();
87
+ await closeToolContext(context);
88
+ });
89
+ it('should throw error for invalid custom path', () => {
90
+ expect(() => createToolContext({ dbPath: '/etc/malicious/../../../root/hack.db' })).toThrow('Invalid database path');
91
+ });
92
+ it('should apply custom search cache TTL', () => {
93
+ const context = createToolContext({
94
+ dbPath: ':memory:',
95
+ searchCacheTtl: 600,
96
+ });
97
+ expect(context.searchService).toBeDefined();
98
+ context.db.close();
99
+ });
100
+ it('should apply API client configuration', () => {
101
+ const context = createToolContext({
102
+ dbPath: ':memory:',
103
+ apiClientConfig: {
104
+ timeout: 5000,
105
+ maxRetries: 2,
106
+ offlineMode: true,
107
+ },
108
+ });
109
+ expect(context.apiClient).toBeDefined();
110
+ expect(context.apiClient.isOffline()).toBe(true);
111
+ context.db.close();
112
+ });
113
+ it('should create directory for file-based database path', () => {
114
+ const testDir = join(tmpdir(), 'skillsmith-context-test-' + Date.now());
115
+ const dbPath = join(testDir, 'test.db');
116
+ // Clean up if exists
117
+ if (existsSync(testDir)) {
118
+ rmSync(testDir, { recursive: true });
119
+ }
120
+ const context = createToolContext({ dbPath });
121
+ expect(existsSync(testDir)).toBe(true);
122
+ context.db.close();
123
+ // Clean up
124
+ rmSync(testDir, { recursive: true });
125
+ });
126
+ it('should skip directory creation for in-memory database', () => {
127
+ // This should not throw even though :memory: has no directory
128
+ const context = createToolContext({ dbPath: ':memory:' });
129
+ expect(context.db).toBeDefined();
130
+ context.db.close();
131
+ });
132
+ });
133
+ describe('telemetry configuration', () => {
134
+ it('should not enable telemetry by default', () => {
135
+ const context = createToolContext({ dbPath: ':memory:' });
136
+ expect(context.distinctId).toBeUndefined();
137
+ context.db.close();
138
+ });
139
+ it('should enable telemetry when env var is true and API key provided', () => {
140
+ process.env.SKILLSMITH_TELEMETRY_ENABLED = 'true';
141
+ process.env.POSTHOG_API_KEY = 'phc_test_key_12345';
142
+ const context = createToolContext({ dbPath: ':memory:' });
143
+ expect(context.distinctId).toBeDefined();
144
+ expect(typeof context.distinctId).toBe('string');
145
+ context.db.close();
146
+ });
147
+ it('should enable telemetry via config options', () => {
148
+ const context = createToolContext({
149
+ dbPath: ':memory:',
150
+ telemetryConfig: {
151
+ enabled: true,
152
+ postHogApiKey: 'phc_config_key_12345',
153
+ },
154
+ });
155
+ expect(context.distinctId).toBeDefined();
156
+ context.db.close();
157
+ });
158
+ it('should not enable telemetry without API key', () => {
159
+ process.env.SKILLSMITH_TELEMETRY_ENABLED = 'true';
160
+ // No POSTHOG_API_KEY set
161
+ const context = createToolContext({ dbPath: ':memory:' });
162
+ expect(context.distinctId).toBeUndefined();
163
+ context.db.close();
164
+ });
165
+ it('should prefer env var over config when both set', () => {
166
+ process.env.SKILLSMITH_TELEMETRY_ENABLED = 'true';
167
+ process.env.POSTHOG_API_KEY = 'phc_env_key';
168
+ const context = createToolContext({
169
+ dbPath: ':memory:',
170
+ telemetryConfig: {
171
+ enabled: false, // Config says false, but env var says true
172
+ postHogApiKey: 'phc_config_key',
173
+ },
174
+ });
175
+ // env var wins
176
+ expect(context.distinctId).toBeDefined();
177
+ context.db.close();
178
+ });
179
+ });
180
+ describe('background sync configuration', () => {
181
+ it('should not create backgroundSync when disabled via env var', () => {
182
+ process.env.SKILLSMITH_BACKGROUND_SYNC = 'false';
183
+ const context = createToolContext({ dbPath: ':memory:' });
184
+ expect(context.backgroundSync).toBeUndefined();
185
+ context.db.close();
186
+ });
187
+ it('should not create backgroundSync when disabled via config', () => {
188
+ const context = createToolContext({
189
+ dbPath: ':memory:',
190
+ backgroundSyncConfig: { enabled: false },
191
+ });
192
+ expect(context.backgroundSync).toBeUndefined();
193
+ context.db.close();
194
+ });
195
+ it('should check sync config enabled flag before starting', () => {
196
+ // backgroundSync is only created if syncConfig.enabled is true
197
+ // Default sync config has enabled: false
198
+ const context = createToolContext({
199
+ dbPath: ':memory:',
200
+ backgroundSyncConfig: { enabled: true },
201
+ });
202
+ // Background sync may or may not be created based on internal sync config
203
+ // Just verify context creation succeeds
204
+ expect(context.db).toBeDefined();
205
+ context.db.close();
206
+ });
207
+ });
208
+ describe('LLM failover configuration', () => {
209
+ it('should not create llmFailover by default', () => {
210
+ const context = createToolContext({ dbPath: ':memory:' });
211
+ expect(context.llmFailover).toBeUndefined();
212
+ context.db.close();
213
+ });
214
+ it('should create llmFailover when enabled via env var', async () => {
215
+ process.env.SKILLSMITH_LLM_FAILOVER_ENABLED = 'true';
216
+ const context = createToolContext({ dbPath: ':memory:' });
217
+ expect(context.llmFailover).toBeDefined();
218
+ await closeToolContext(context);
219
+ });
220
+ it('should create llmFailover when enabled via config', async () => {
221
+ const context = createToolContext({
222
+ dbPath: ':memory:',
223
+ llmFailoverConfig: { enabled: true },
224
+ });
225
+ expect(context.llmFailover).toBeDefined();
226
+ await closeToolContext(context);
227
+ });
228
+ });
229
+ describe('signal handler registration', () => {
230
+ it('should register signal handlers when services are created', async () => {
231
+ process.env.SKILLSMITH_LLM_FAILOVER_ENABLED = 'true';
232
+ const context = createToolContext({ dbPath: ':memory:' });
233
+ expect(context._signalHandlers).toBeDefined();
234
+ expect(context._signalHandlers.length).toBeGreaterThan(0);
235
+ await closeToolContext(context);
236
+ });
237
+ it('should not register signal handlers without services', () => {
238
+ process.env.SKILLSMITH_BACKGROUND_SYNC = 'false';
239
+ const context = createToolContext({
240
+ dbPath: ':memory:',
241
+ backgroundSyncConfig: { enabled: false },
242
+ });
243
+ expect(context._signalHandlers).toBeUndefined();
244
+ context.db.close();
245
+ });
246
+ });
247
+ });
248
+ describe('closeToolContext', () => {
249
+ it('should close database connection', async () => {
250
+ const context = createToolContext({ dbPath: ':memory:' });
251
+ await closeToolContext(context);
252
+ // Database should be closed - further operations should fail
253
+ expect(() => context.db.exec('SELECT 1')).toThrow();
254
+ });
255
+ it('should remove signal handlers', async () => {
256
+ process.env.SKILLSMITH_LLM_FAILOVER_ENABLED = 'true';
257
+ const context = createToolContext({ dbPath: ':memory:' });
258
+ const initialHandlerCount = context._signalHandlers?.length ?? 0;
259
+ expect(initialHandlerCount).toBeGreaterThan(0);
260
+ await closeToolContext(context);
261
+ // Signal handlers should be removed (verified by not causing memory leak)
262
+ });
263
+ it('should stop background sync if running', async () => {
264
+ // Create context with background sync enabled
265
+ const context = createToolContext({
266
+ dbPath: ':memory:',
267
+ backgroundSyncConfig: { enabled: true },
268
+ });
269
+ await closeToolContext(context);
270
+ // Should complete without error
271
+ });
272
+ it('should close LLM failover chain if initialized', async () => {
273
+ const context = createToolContext({
274
+ dbPath: ':memory:',
275
+ llmFailoverConfig: { enabled: true },
276
+ });
277
+ await closeToolContext(context);
278
+ // Should complete without error
279
+ });
280
+ it('should shutdown PostHog if telemetry was enabled', async () => {
281
+ process.env.POSTHOG_API_KEY = 'phc_test_key';
282
+ const context = createToolContext({
283
+ dbPath: ':memory:',
284
+ telemetryConfig: { enabled: true, postHogApiKey: 'phc_test_key' },
285
+ });
286
+ expect(context.distinctId).toBeDefined();
287
+ await closeToolContext(context);
288
+ // Should complete without error
289
+ });
290
+ });
291
+ describe('getToolContext (singleton)', () => {
292
+ it('should create context on first call', async () => {
293
+ await resetToolContext(); // Ensure clean state
294
+ const context = getToolContext({ dbPath: ':memory:' });
295
+ expect(context).toBeDefined();
296
+ expect(context.db).toBeDefined();
297
+ });
298
+ it('should return same context on subsequent calls', async () => {
299
+ await resetToolContext();
300
+ const context1 = getToolContext({ dbPath: ':memory:' });
301
+ const context2 = getToolContext();
302
+ expect(context1).toBe(context2);
303
+ });
304
+ it('should warn when options provided after context created', async () => {
305
+ await resetToolContext();
306
+ const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
307
+ getToolContext({ dbPath: ':memory:' });
308
+ getToolContext({ dbPath: ':memory:', searchCacheTtl: 1000 });
309
+ expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining('Options ignored'));
310
+ consoleWarnSpy.mockRestore();
311
+ });
312
+ it('should not warn when no options provided on subsequent calls', async () => {
313
+ await resetToolContext();
314
+ const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
315
+ getToolContext({ dbPath: ':memory:' });
316
+ getToolContext(); // No options
317
+ expect(consoleWarnSpy).not.toHaveBeenCalled();
318
+ consoleWarnSpy.mockRestore();
319
+ });
320
+ });
321
+ describe('resetToolContext', () => {
322
+ it('should clear the global context', async () => {
323
+ const context1 = getToolContext({ dbPath: ':memory:' });
324
+ await resetToolContext();
325
+ const context2 = getToolContext({ dbPath: ':memory:' });
326
+ // Should be different instances
327
+ expect(context1).not.toBe(context2);
328
+ });
329
+ it('should close existing context before reset', async () => {
330
+ const context = getToolContext({ dbPath: ':memory:' });
331
+ const db = context.db;
332
+ await resetToolContext();
333
+ // Original database should be closed
334
+ expect(() => db.exec('SELECT 1')).toThrow();
335
+ });
336
+ it('should be idempotent when no context exists', async () => {
337
+ await resetToolContext();
338
+ await resetToolContext(); // Should not throw
339
+ // Should be able to create new context
340
+ const context = getToolContext({ dbPath: ':memory:' });
341
+ expect(context).toBeDefined();
342
+ });
343
+ });
344
+ });
345
+ //# sourceMappingURL=context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../../src/__tests__/context.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Tests for SMI-582: MCP Get Skill Tool
3
3
  * Updated for SMI-790: Wire to SkillRepository
4
+ * Updated for SMI-1614: Coverage gaps
4
5
  */
5
6
  export {};
6
7
  //# sourceMappingURL=get-skill.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-skill.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/get-skill.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
1
+ {"version":3,"file":"get-skill.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/get-skill.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}