@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.
- package/README.md +5 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/__tests__/LocalIndexer.test.d.ts +5 -0
- package/dist/src/__tests__/LocalIndexer.test.d.ts.map +1 -0
- package/dist/src/__tests__/LocalIndexer.test.js +396 -0
- package/dist/src/__tests__/LocalIndexer.test.js.map +1 -0
- package/dist/src/__tests__/context.test.d.ts +10 -0
- package/dist/src/__tests__/context.test.d.ts.map +1 -0
- package/dist/src/__tests__/context.test.js +345 -0
- package/dist/src/__tests__/context.test.js.map +1 -0
- package/dist/src/__tests__/get-skill.test.d.ts +1 -0
- package/dist/src/__tests__/get-skill.test.d.ts.map +1 -1
- package/dist/src/__tests__/get-skill.test.js +279 -0
- package/dist/src/__tests__/get-skill.test.js.map +1 -1
- package/dist/src/__tests__/index-local.test.d.ts +5 -0
- package/dist/src/__tests__/index-local.test.d.ts.map +1 -0
- package/dist/src/__tests__/index-local.test.js +203 -0
- package/dist/src/__tests__/index-local.test.js.map +1 -0
- package/dist/src/__tests__/middleware/license.test.js +180 -78
- package/dist/src/__tests__/middleware/license.test.js.map +1 -1
- package/dist/src/__tests__/recommend.test.d.ts +7 -0
- package/dist/src/__tests__/recommend.test.d.ts.map +1 -0
- package/dist/src/__tests__/recommend.test.js +277 -0
- package/dist/src/__tests__/recommend.test.js.map +1 -0
- package/dist/src/__tests__/search.test.js +140 -1
- package/dist/src/__tests__/search.test.js.map +1 -1
- package/dist/src/__tests__/utils/validation.test.d.ts +7 -0
- package/dist/src/__tests__/utils/validation.test.d.ts.map +1 -0
- package/dist/src/__tests__/utils/validation.test.js +82 -0
- package/dist/src/__tests__/utils/validation.test.js.map +1 -0
- package/dist/src/context.d.ts +22 -0
- package/dist/src/context.d.ts.map +1 -1
- package/dist/src/context.js +63 -9
- package/dist/src/context.js.map +1 -1
- package/dist/src/index.js +15 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/FrontmatterParser.d.ts +30 -0
- package/dist/src/indexer/FrontmatterParser.d.ts.map +1 -0
- package/dist/src/indexer/FrontmatterParser.js +109 -0
- package/dist/src/indexer/FrontmatterParser.js.map +1 -0
- package/dist/src/indexer/LocalIndexer.d.ts +136 -0
- package/dist/src/indexer/LocalIndexer.d.ts.map +1 -0
- package/dist/src/indexer/LocalIndexer.js +271 -0
- package/dist/src/indexer/LocalIndexer.js.map +1 -0
- package/dist/src/indexer/index.d.ts +8 -0
- package/dist/src/indexer/index.d.ts.map +1 -0
- package/dist/src/indexer/index.js +8 -0
- package/dist/src/indexer/index.js.map +1 -0
- package/dist/src/llm/failover.d.ts +210 -0
- package/dist/src/llm/failover.d.ts.map +1 -0
- package/dist/src/llm/failover.js +329 -0
- package/dist/src/llm/failover.js.map +1 -0
- package/dist/src/middleware/errorFormatter.d.ts +27 -0
- package/dist/src/middleware/errorFormatter.d.ts.map +1 -1
- package/dist/src/middleware/errorFormatter.js +95 -0
- package/dist/src/middleware/errorFormatter.js.map +1 -1
- package/dist/src/middleware/index.d.ts +1 -1
- package/dist/src/middleware/index.d.ts.map +1 -1
- package/dist/src/middleware/index.js.map +1 -1
- package/dist/src/middleware/license.d.ts +5 -0
- package/dist/src/middleware/license.d.ts.map +1 -1
- package/dist/src/middleware/license.js +2 -1
- package/dist/src/middleware/license.js.map +1 -1
- package/dist/src/middleware/quota-helpers.d.ts +40 -0
- package/dist/src/middleware/quota-helpers.d.ts.map +1 -0
- package/dist/src/middleware/quota-helpers.js +90 -0
- package/dist/src/middleware/quota-helpers.js.map +1 -0
- package/dist/src/middleware/quota-types.d.ts +105 -0
- package/dist/src/middleware/quota-types.d.ts.map +1 -0
- package/dist/src/middleware/quota-types.js +4 -0
- package/dist/src/middleware/quota-types.js.map +1 -0
- package/dist/src/middleware/quota.d.ts +3 -97
- package/dist/src/middleware/quota.d.ts.map +1 -1
- package/dist/src/middleware/quota.js +2 -87
- package/dist/src/middleware/quota.js.map +1 -1
- package/dist/src/tools/LocalSkillSearch.d.ts +32 -0
- package/dist/src/tools/LocalSkillSearch.d.ts.map +1 -0
- package/dist/src/tools/LocalSkillSearch.js +74 -0
- package/dist/src/tools/LocalSkillSearch.js.map +1 -0
- package/dist/src/tools/compare.d.ts +3 -102
- package/dist/src/tools/compare.d.ts.map +1 -1
- package/dist/src/tools/compare.helpers.d.ts +36 -0
- package/dist/src/tools/compare.helpers.d.ts.map +1 -0
- package/dist/src/tools/compare.helpers.js +252 -0
- package/dist/src/tools/compare.helpers.js.map +1 -0
- package/dist/src/tools/compare.js +6 -288
- package/dist/src/tools/compare.js.map +1 -1
- package/dist/src/tools/compare.types.d.ts +134 -0
- package/dist/src/tools/compare.types.d.ts.map +1 -0
- package/dist/src/tools/compare.types.js +47 -0
- package/dist/src/tools/compare.types.js.map +1 -0
- package/dist/src/tools/get-skill.d.ts.map +1 -1
- package/dist/src/tools/get-skill.js +38 -2
- package/dist/src/tools/get-skill.js.map +1 -1
- package/dist/src/tools/index-local.d.ts +117 -0
- package/dist/src/tools/index-local.d.ts.map +1 -0
- package/dist/src/tools/index-local.js +126 -0
- package/dist/src/tools/index-local.js.map +1 -0
- package/dist/src/tools/index.d.ts +2 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +2 -0
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/install.conflict-helpers.d.ts +64 -0
- package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -0
- package/dist/src/tools/install.conflict-helpers.js +165 -0
- package/dist/src/tools/install.conflict-helpers.js.map +1 -0
- package/dist/src/tools/install.conflict-helpers.test.d.ts +15 -0
- package/dist/src/tools/install.conflict-helpers.test.d.ts.map +1 -0
- package/dist/src/tools/install.conflict-helpers.test.js +243 -0
- package/dist/src/tools/install.conflict-helpers.test.js.map +1 -0
- package/dist/src/tools/install.conflict.d.ts +58 -0
- package/dist/src/tools/install.conflict.d.ts.map +1 -0
- package/dist/src/tools/install.conflict.js +160 -0
- package/dist/src/tools/install.conflict.js.map +1 -0
- package/dist/src/tools/install.conflict.test.d.ts +15 -0
- package/dist/src/tools/install.conflict.test.d.ts.map +1 -0
- package/dist/src/tools/install.conflict.test.js +354 -0
- package/dist/src/tools/install.conflict.test.js.map +1 -0
- package/dist/src/tools/install.d.ts +11 -60
- package/dist/src/tools/install.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.d.ts +83 -0
- package/dist/src/tools/install.helpers.d.ts.map +1 -0
- package/dist/src/tools/install.helpers.js +333 -0
- package/dist/src/tools/install.helpers.js.map +1 -0
- package/dist/src/tools/install.js +199 -255
- package/dist/src/tools/install.js.map +1 -1
- package/dist/src/tools/install.types.d.ts +178 -0
- package/dist/src/tools/install.types.d.ts.map +1 -0
- package/dist/src/tools/install.types.js +105 -0
- package/dist/src/tools/install.types.js.map +1 -0
- package/dist/src/tools/merge.d.ts +53 -0
- package/dist/src/tools/merge.d.ts.map +1 -0
- package/dist/src/tools/merge.js +276 -0
- package/dist/src/tools/merge.js.map +1 -0
- package/dist/src/tools/merge.test.d.ts +11 -0
- package/dist/src/tools/merge.test.d.ts.map +1 -0
- package/dist/src/tools/merge.test.js +224 -0
- package/dist/src/tools/merge.test.js.map +1 -0
- package/dist/src/tools/recommend.d.ts +3 -148
- package/dist/src/tools/recommend.d.ts.map +1 -1
- package/dist/src/tools/recommend.helpers.d.ts +42 -0
- package/dist/src/tools/recommend.helpers.d.ts.map +1 -0
- package/dist/src/tools/recommend.helpers.js +155 -0
- package/dist/src/tools/recommend.helpers.js.map +1 -0
- package/dist/src/tools/recommend.js +216 -154
- package/dist/src/tools/recommend.js.map +1 -1
- package/dist/src/tools/recommend.types.d.ts +164 -0
- package/dist/src/tools/recommend.types.d.ts.map +1 -0
- package/dist/src/tools/recommend.types.js +87 -0
- package/dist/src/tools/recommend.types.js.map +1 -0
- package/dist/src/tools/search.d.ts +18 -4
- package/dist/src/tools/search.d.ts.map +1 -1
- package/dist/src/tools/search.js +91 -16
- package/dist/src/tools/search.js.map +1 -1
- package/dist/src/tools/validate.d.ts +3 -70
- package/dist/src/tools/validate.d.ts.map +1 -1
- package/dist/src/tools/validate.helpers.d.ts +22 -0
- package/dist/src/tools/validate.helpers.d.ts.map +1 -0
- package/dist/src/tools/validate.helpers.js +276 -0
- package/dist/src/tools/validate.helpers.js.map +1 -0
- package/dist/src/tools/validate.js +4 -337
- package/dist/src/tools/validate.js.map +1 -1
- package/dist/src/tools/validate.types.d.ts +96 -0
- package/dist/src/tools/validate.types.d.ts.map +1 -0
- package/dist/src/tools/validate.types.js +71 -0
- package/dist/src/tools/validate.types.js.map +1 -0
- package/dist/src/utils/validation.d.ts +6 -2
- package/dist/src/utils/validation.d.ts.map +1 -1
- package/dist/src/utils/validation.js +11 -2
- package/dist/src/utils/validation.js.map +1 -1
- package/dist/src/webhooks/index.d.ts +1 -0
- package/dist/src/webhooks/index.d.ts.map +1 -1
- package/dist/src/webhooks/index.js +2 -0
- package/dist/src/webhooks/index.js.map +1 -1
- package/dist/src/webhooks/stripe-webhook-endpoint.d.ts +68 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.d.ts.map +1 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.js +213 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.js.map +1 -0
- package/dist/src/webhooks/webhook-endpoint.d.ts +4 -49
- package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
- package/dist/src/webhooks/webhook-endpoint.js +3 -125
- package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
- package/dist/src/webhooks/webhook-helpers.d.ts +69 -0
- package/dist/src/webhooks/webhook-helpers.d.ts.map +1 -0
- package/dist/src/webhooks/webhook-helpers.js +146 -0
- package/dist/src/webhooks/webhook-helpers.js.map +1 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts +12 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.js +343 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.js.map +1 -0
- package/dist/tests/integration/fixtures/development-skills.d.ts +22 -0
- package/dist/tests/integration/fixtures/development-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/development-skills.js +165 -0
- package/dist/tests/integration/fixtures/development-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/devops-skills.d.ts +10 -0
- package/dist/tests/integration/fixtures/devops-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/devops-skills.js +70 -0
- package/dist/tests/integration/fixtures/devops-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/experimental-skills.d.ts +14 -0
- package/dist/tests/integration/fixtures/experimental-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/experimental-skills.js +255 -0
- package/dist/tests/integration/fixtures/experimental-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/skill-types.d.ts +18 -0
- package/dist/tests/integration/fixtures/skill-types.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/skill-types.js +6 -0
- package/dist/tests/integration/fixtures/skill-types.js.map +1 -0
- package/dist/tests/integration/fixtures/test-skills.d.ts +10 -14
- package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -1
- package/dist/tests/integration/fixtures/test-skills.js +23 -590
- package/dist/tests/integration/fixtures/test-skills.js.map +1 -1
- package/dist/tests/integration/fixtures/testing-skills.d.ts +10 -0
- package/dist/tests/integration/fixtures/testing-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/testing-skills.js +70 -0
- package/dist/tests/integration/fixtures/testing-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/verified-skills.d.ts +11 -0
- package/dist/tests/integration/fixtures/verified-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/verified-skills.js +91 -0
- package/dist/tests/integration/fixtures/verified-skills.js.map +1 -0
- package/dist/tests/integration/install-conflict.integration.test.d.ts +8 -0
- package/dist/tests/integration/install-conflict.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install-conflict.integration.test.js +384 -0
- package/dist/tests/integration/install-conflict.integration.test.js.map +1 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +13 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.js +290 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.js.map +1 -0
- package/dist/tests/integration/install.integration.test.js +151 -1
- package/dist/tests/integration/install.integration.test.js.map +1 -1
- package/dist/tests/integration/recommend.integration.test.js +2 -1
- package/dist/tests/integration/recommend.integration.test.js.map +1 -1
- package/dist/tests/llm/failover.test.d.ts +13 -0
- package/dist/tests/llm/failover.test.d.ts.map +1 -0
- package/dist/tests/llm/failover.test.js +250 -0
- package/dist/tests/llm/failover.test.js.map +1 -0
- package/dist/tests/recommend.test.js +133 -1
- package/dist/tests/recommend.test.js.map +1 -1
- package/dist/tests/tools.test.d.ts +1 -0
- package/dist/tests/tools.test.d.ts.map +1 -1
- package/dist/tests/tools.test.js +59 -1
- package/dist/tests/tools.test.js.map +1 -1
- package/dist/tests/unit/compare-helpers.test.d.ts +8 -0
- package/dist/tests/unit/compare-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/compare-helpers.test.js +224 -0
- package/dist/tests/unit/compare-helpers.test.js.map +1 -0
- package/dist/tests/unit/install-helpers.test.d.ts +8 -0
- package/dist/tests/unit/install-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/install-helpers.test.js +460 -0
- package/dist/tests/unit/install-helpers.test.js.map +1 -0
- package/dist/tests/unit/recommend-helpers.test.d.ts +8 -0
- package/dist/tests/unit/recommend-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/recommend-helpers.test.js +117 -0
- package/dist/tests/unit/recommend-helpers.test.js.map +1 -0
- package/dist/tests/unit/validate-helpers.test.d.ts +8 -0
- package/dist/tests/unit/validate-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/validate-helpers.test.js +243 -0
- package/dist/tests/unit/validate-helpers.test.js.map +1 -0
- package/package.json +7 -6
- package/src/assets/docs/USER_GUIDE.md +0 -220
- package/src/assets/skills/skillsmith/docs/QUOTAS.md +0 -182
- package/src/assets/skills/skillsmith/docs/SECURITY.md +0 -174
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-skill.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/get-skill.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"get-skill.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/get-skill.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|