swift-skills-mcp 0.0.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.
- package/LICENSE +21 -0
- package/README.md +410 -0
- package/build/cli/auth.d.ts +3 -0
- package/build/cli/auth.d.ts.map +1 -0
- package/build/cli/auth.js +44 -0
- package/build/cli/auth.js.map +1 -0
- package/build/cli/setup.d.ts +2 -0
- package/build/cli/setup.d.ts.map +1 -0
- package/build/cli/setup.js +150 -0
- package/build/cli/setup.js.map +1 -0
- package/build/cli/source-manager.d.ts +3 -0
- package/build/cli/source-manager.d.ts.map +1 -0
- package/build/cli/source-manager.js +117 -0
- package/build/cli/source-manager.js.map +1 -0
- package/build/config/creators.d.ts +11 -0
- package/build/config/creators.d.ts.map +1 -0
- package/build/config/creators.js +32 -0
- package/build/config/creators.js.map +1 -0
- package/build/config/sources.d.ts +91 -0
- package/build/config/sources.d.ts.map +1 -0
- package/build/config/sources.js +231 -0
- package/build/config/sources.js.map +1 -0
- package/build/config/sources.test.d.ts +2 -0
- package/build/config/sources.test.d.ts.map +1 -0
- package/build/config/sources.test.js +199 -0
- package/build/config/sources.test.js.map +1 -0
- package/build/config/swift-keywords.d.ts +29 -0
- package/build/config/swift-keywords.d.ts.map +1 -0
- package/build/config/swift-keywords.js +77 -0
- package/build/config/swift-keywords.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +181 -0
- package/build/index.js.map +1 -0
- package/build/integration/cache-behavior.test.d.ts +2 -0
- package/build/integration/cache-behavior.test.d.ts.map +1 -0
- package/build/integration/cache-behavior.test.js +521 -0
- package/build/integration/cache-behavior.test.js.map +1 -0
- package/build/integration/mcp-client.test.d.ts +2 -0
- package/build/integration/mcp-client.test.d.ts.map +1 -0
- package/build/integration/mcp-client.test.js +82 -0
- package/build/integration/mcp-client.test.js.map +1 -0
- package/build/integration/response-quality.test.d.ts +2 -0
- package/build/integration/response-quality.test.d.ts.map +1 -0
- package/build/integration/response-quality.test.js +230 -0
- package/build/integration/response-quality.test.js.map +1 -0
- package/build/integration/test-client.d.ts +25 -0
- package/build/integration/test-client.d.ts.map +1 -0
- package/build/integration/test-client.js +93 -0
- package/build/integration/test-client.js.map +1 -0
- package/build/sources/free/nilcoalescing.d.ts +8 -0
- package/build/sources/free/nilcoalescing.d.ts.map +1 -0
- package/build/sources/free/nilcoalescing.js +26 -0
- package/build/sources/free/nilcoalescing.js.map +1 -0
- package/build/sources/free/nilcoalescing.test.d.ts +2 -0
- package/build/sources/free/nilcoalescing.test.d.ts.map +1 -0
- package/build/sources/free/nilcoalescing.test.js +63 -0
- package/build/sources/free/nilcoalescing.test.js.map +1 -0
- package/build/sources/free/pointfree.d.ts +15 -0
- package/build/sources/free/pointfree.d.ts.map +1 -0
- package/build/sources/free/pointfree.js +175 -0
- package/build/sources/free/pointfree.js.map +1 -0
- package/build/sources/free/pointfree.test.d.ts +2 -0
- package/build/sources/free/pointfree.test.d.ts.map +1 -0
- package/build/sources/free/pointfree.test.js +86 -0
- package/build/sources/free/pointfree.test.js.map +1 -0
- package/build/sources/free/rssPatternSource.d.ts +42 -0
- package/build/sources/free/rssPatternSource.d.ts.map +1 -0
- package/build/sources/free/rssPatternSource.js +109 -0
- package/build/sources/free/rssPatternSource.js.map +1 -0
- package/build/sources/free/rssPatternSource.test.d.ts +2 -0
- package/build/sources/free/rssPatternSource.test.d.ts.map +1 -0
- package/build/sources/free/rssPatternSource.test.js +89 -0
- package/build/sources/free/rssPatternSource.test.js.map +1 -0
- package/build/sources/free/sundell.d.ts +8 -0
- package/build/sources/free/sundell.d.ts.map +1 -0
- package/build/sources/free/sundell.js +17 -0
- package/build/sources/free/sundell.js.map +1 -0
- package/build/sources/free/sundell.test.d.ts +2 -0
- package/build/sources/free/sundell.test.d.ts.map +1 -0
- package/build/sources/free/sundell.test.js +63 -0
- package/build/sources/free/sundell.test.js.map +1 -0
- package/build/sources/free/vanderlee.d.ts +8 -0
- package/build/sources/free/vanderlee.d.ts.map +1 -0
- package/build/sources/free/vanderlee.js +63 -0
- package/build/sources/free/vanderlee.js.map +1 -0
- package/build/sources/free/vanderlee.test.d.ts +2 -0
- package/build/sources/free/vanderlee.test.d.ts.map +1 -0
- package/build/sources/free/vanderlee.test.js +77 -0
- package/build/sources/free/vanderlee.test.js.map +1 -0
- package/build/sources/premium/patreon-dl.d.ts +45 -0
- package/build/sources/premium/patreon-dl.d.ts.map +1 -0
- package/build/sources/premium/patreon-dl.js +189 -0
- package/build/sources/premium/patreon-dl.js.map +1 -0
- package/build/sources/premium/patreon-fetch.d.ts +3 -0
- package/build/sources/premium/patreon-fetch.d.ts.map +1 -0
- package/build/sources/premium/patreon-fetch.js +18 -0
- package/build/sources/premium/patreon-fetch.js.map +1 -0
- package/build/sources/premium/patreon-oauth.d.ts +24 -0
- package/build/sources/premium/patreon-oauth.d.ts.map +1 -0
- package/build/sources/premium/patreon-oauth.js +208 -0
- package/build/sources/premium/patreon-oauth.js.map +1 -0
- package/build/sources/premium/patreon-zip.d.ts +17 -0
- package/build/sources/premium/patreon-zip.d.ts.map +1 -0
- package/build/sources/premium/patreon-zip.js +127 -0
- package/build/sources/premium/patreon-zip.js.map +1 -0
- package/build/sources/premium/patreon.d.ts +48 -0
- package/build/sources/premium/patreon.d.ts.map +1 -0
- package/build/sources/premium/patreon.js +221 -0
- package/build/sources/premium/patreon.js.map +1 -0
- package/build/sources/premium/youtube.d.ts +14 -0
- package/build/sources/premium/youtube.d.ts.map +1 -0
- package/build/sources/premium/youtube.js +92 -0
- package/build/sources/premium/youtube.js.map +1 -0
- package/build/tools/extract-cookie.d.ts +2 -0
- package/build/tools/extract-cookie.d.ts.map +1 -0
- package/build/tools/extract-cookie.js +40 -0
- package/build/tools/extract-cookie.js.map +1 -0
- package/build/tools/handlers/enableSource.d.ts +3 -0
- package/build/tools/handlers/enableSource.d.ts.map +1 -0
- package/build/tools/handlers/enableSource.js +25 -0
- package/build/tools/handlers/enableSource.js.map +1 -0
- package/build/tools/handlers/getPatreonPatterns.d.ts +3 -0
- package/build/tools/handlers/getPatreonPatterns.d.ts.map +1 -0
- package/build/tools/handlers/getPatreonPatterns.js +43 -0
- package/build/tools/handlers/getPatreonPatterns.js.map +1 -0
- package/build/tools/handlers/getSwiftPattern.d.ts +3 -0
- package/build/tools/handlers/getSwiftPattern.d.ts.map +1 -0
- package/build/tools/handlers/getSwiftPattern.js +72 -0
- package/build/tools/handlers/getSwiftPattern.js.map +1 -0
- package/build/tools/handlers/handlers.test.d.ts +2 -0
- package/build/tools/handlers/handlers.test.d.ts.map +1 -0
- package/build/tools/handlers/handlers.test.js +359 -0
- package/build/tools/handlers/handlers.test.js.map +1 -0
- package/build/tools/handlers/listContentSources.d.ts +3 -0
- package/build/tools/handlers/listContentSources.d.ts.map +1 -0
- package/build/tools/handlers/listContentSources.js +34 -0
- package/build/tools/handlers/listContentSources.js.map +1 -0
- package/build/tools/handlers/searchSwiftContent.d.ts +3 -0
- package/build/tools/handlers/searchSwiftContent.d.ts.map +1 -0
- package/build/tools/handlers/searchSwiftContent.js +121 -0
- package/build/tools/handlers/searchSwiftContent.js.map +1 -0
- package/build/tools/handlers/setupPatreon.d.ts +3 -0
- package/build/tools/handlers/setupPatreon.d.ts.map +1 -0
- package/build/tools/handlers/setupPatreon.js +40 -0
- package/build/tools/handlers/setupPatreon.js.map +1 -0
- package/build/tools/index.d.ts +3 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +18 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/registry.d.ts +14 -0
- package/build/tools/registry.d.ts.map +1 -0
- package/build/tools/registry.js +21 -0
- package/build/tools/registry.js.map +1 -0
- package/build/tools/registry.test.d.ts +2 -0
- package/build/tools/registry.test.d.ts.map +1 -0
- package/build/tools/registry.test.js +54 -0
- package/build/tools/registry.test.js.map +1 -0
- package/build/tools/types.d.ts +67 -0
- package/build/tools/types.d.ts.map +1 -0
- package/build/tools/types.js +3 -0
- package/build/tools/types.js.map +1 -0
- package/build/utils/cache.d.ts +20 -0
- package/build/utils/cache.d.ts.map +1 -0
- package/build/utils/cache.js +186 -0
- package/build/utils/cache.js.map +1 -0
- package/build/utils/concurrency.d.ts +13 -0
- package/build/utils/concurrency.d.ts.map +1 -0
- package/build/utils/concurrency.js +33 -0
- package/build/utils/concurrency.js.map +1 -0
- package/build/utils/errors.d.ts +19 -0
- package/build/utils/errors.d.ts.map +1 -0
- package/build/utils/errors.js +35 -0
- package/build/utils/errors.js.map +1 -0
- package/build/utils/fetch.d.ts +6 -0
- package/build/utils/fetch.d.ts.map +1 -0
- package/build/utils/fetch.js +6 -0
- package/build/utils/fetch.js.map +1 -0
- package/build/utils/http.d.ts +21 -0
- package/build/utils/http.d.ts.map +1 -0
- package/build/utils/http.js +53 -0
- package/build/utils/http.js.map +1 -0
- package/build/utils/intent-cache.d.ts +94 -0
- package/build/utils/intent-cache.d.ts.map +1 -0
- package/build/utils/intent-cache.js +164 -0
- package/build/utils/intent-cache.js.map +1 -0
- package/build/utils/intent-cache.test.d.ts +2 -0
- package/build/utils/intent-cache.test.d.ts.map +1 -0
- package/build/utils/intent-cache.test.js +290 -0
- package/build/utils/intent-cache.test.js.map +1 -0
- package/build/utils/logger.d.ts +4 -0
- package/build/utils/logger.d.ts.map +1 -0
- package/build/utils/logger.js +9 -0
- package/build/utils/logger.js.map +1 -0
- package/build/utils/paths.d.ts +27 -0
- package/build/utils/paths.d.ts.map +1 -0
- package/build/utils/paths.js +43 -0
- package/build/utils/paths.js.map +1 -0
- package/build/utils/pattern-formatter.d.ts +40 -0
- package/build/utils/pattern-formatter.d.ts.map +1 -0
- package/build/utils/pattern-formatter.js +124 -0
- package/build/utils/pattern-formatter.js.map +1 -0
- package/build/utils/response-helpers.d.ts +17 -0
- package/build/utils/response-helpers.d.ts.map +1 -0
- package/build/utils/response-helpers.js +34 -0
- package/build/utils/response-helpers.js.map +1 -0
- package/build/utils/search-terms.d.ts +17 -0
- package/build/utils/search-terms.d.ts.map +1 -0
- package/build/utils/search-terms.js +71 -0
- package/build/utils/search-terms.js.map +1 -0
- package/build/utils/search-terms.test.d.ts +2 -0
- package/build/utils/search-terms.test.d.ts.map +1 -0
- package/build/utils/search-terms.test.js +107 -0
- package/build/utils/search-terms.test.js.map +1 -0
- package/build/utils/search.d.ts +48 -0
- package/build/utils/search.d.ts.map +1 -0
- package/build/utils/search.js +158 -0
- package/build/utils/search.js.map +1 -0
- package/build/utils/search.test.d.ts +2 -0
- package/build/utils/search.test.d.ts.map +1 -0
- package/build/utils/search.test.js +199 -0
- package/build/utils/search.test.js.map +1 -0
- package/build/utils/semantic-recall.d.ts +38 -0
- package/build/utils/semantic-recall.d.ts.map +1 -0
- package/build/utils/semantic-recall.js +134 -0
- package/build/utils/semantic-recall.js.map +1 -0
- package/build/utils/semantic-recall.test.d.ts +2 -0
- package/build/utils/semantic-recall.test.d.ts.map +1 -0
- package/build/utils/semantic-recall.test.js +326 -0
- package/build/utils/semantic-recall.test.js.map +1 -0
- package/build/utils/source-registry.d.ts +45 -0
- package/build/utils/source-registry.d.ts.map +1 -0
- package/build/utils/source-registry.js +113 -0
- package/build/utils/source-registry.js.map +1 -0
- package/build/utils/source-registry.test.d.ts +2 -0
- package/build/utils/source-registry.test.d.ts.map +1 -0
- package/build/utils/source-registry.test.js +206 -0
- package/build/utils/source-registry.test.js.map +1 -0
- package/build/utils/swift-analysis.d.ts +61 -0
- package/build/utils/swift-analysis.d.ts.map +1 -0
- package/build/utils/swift-analysis.js +339 -0
- package/build/utils/swift-analysis.js.map +1 -0
- package/build/utils/swift-analysis.test.d.ts +2 -0
- package/build/utils/swift-analysis.test.d.ts.map +1 -0
- package/build/utils/swift-analysis.test.js +473 -0
- package/build/utils/swift-analysis.test.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// src/config/sources.test.ts
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
3
|
+
import SourceManager, { AVAILABLE_SOURCES } from './sources.js';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
describe('AVAILABLE_SOURCES', () => {
|
|
8
|
+
it('should have free sources', () => {
|
|
9
|
+
const freeSources = AVAILABLE_SOURCES.filter(s => s.type === 'free');
|
|
10
|
+
expect(freeSources.length).toBeGreaterThan(0);
|
|
11
|
+
expect(freeSources.some(s => s.id === 'sundell')).toBe(true);
|
|
12
|
+
expect(freeSources.some(s => s.id === 'vanderlee')).toBe(true);
|
|
13
|
+
expect(freeSources.some(s => s.id === 'nilcoalescing')).toBe(true);
|
|
14
|
+
expect(freeSources.some(s => s.id === 'pointfree')).toBe(true);
|
|
15
|
+
});
|
|
16
|
+
it('should have premium sources', () => {
|
|
17
|
+
const premiumSources = AVAILABLE_SOURCES.filter(s => s.type === 'premium');
|
|
18
|
+
expect(premiumSources.length).toBeGreaterThan(0);
|
|
19
|
+
expect(premiumSources.some(s => s.id === 'patreon')).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
it('should have required fields for all sources', () => {
|
|
22
|
+
for (const source of AVAILABLE_SOURCES) {
|
|
23
|
+
expect(source.id).toBeDefined();
|
|
24
|
+
expect(source.name).toBeDefined();
|
|
25
|
+
expect(source.description).toBeDefined();
|
|
26
|
+
expect(source.type).toMatch(/^(free|premium)$/);
|
|
27
|
+
expect(typeof source.enabled).toBe('boolean');
|
|
28
|
+
expect(typeof source.requiresAuth).toBe('boolean');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
it('should have free sources enabled by default', () => {
|
|
32
|
+
const freeSources = AVAILABLE_SOURCES.filter(s => s.type === 'free');
|
|
33
|
+
for (const source of freeSources) {
|
|
34
|
+
expect(source.enabled).toBe(true);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
it('should have premium sources disabled by default', () => {
|
|
38
|
+
const premiumSources = AVAILABLE_SOURCES.filter(s => s.type === 'premium');
|
|
39
|
+
for (const source of premiumSources) {
|
|
40
|
+
expect(source.enabled).toBe(false);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
it('should have configKeys for auth-required sources', () => {
|
|
44
|
+
const authSources = AVAILABLE_SOURCES.filter(s => s.requiresAuth);
|
|
45
|
+
for (const source of authSources) {
|
|
46
|
+
expect(source.configKeys).toBeDefined();
|
|
47
|
+
expect(source.configKeys.length).toBeGreaterThan(0);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe('SourceManager', () => {
|
|
52
|
+
let tempConfigPath;
|
|
53
|
+
let manager;
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
// Create a temp config path for testing
|
|
56
|
+
tempConfigPath = path.join(os.tmpdir(), `swift-patterns-mcp-test-${Date.now()}.json`);
|
|
57
|
+
manager = new SourceManager(tempConfigPath);
|
|
58
|
+
});
|
|
59
|
+
afterEach(() => {
|
|
60
|
+
// Clean up temp file
|
|
61
|
+
try {
|
|
62
|
+
fs.unlinkSync(tempConfigPath);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Ignore if file doesn't exist
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
describe('getSource', () => {
|
|
69
|
+
it('should return source by id', () => {
|
|
70
|
+
const source = manager.getSource('sundell');
|
|
71
|
+
expect(source).toBeDefined();
|
|
72
|
+
expect(source?.id).toBe('sundell');
|
|
73
|
+
expect(source?.name).toBe('Swift by Sundell');
|
|
74
|
+
});
|
|
75
|
+
it('should return undefined for unknown source', () => {
|
|
76
|
+
const source = manager.getSource('nonexistent');
|
|
77
|
+
expect(source).toBeUndefined();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe('getAllSources', () => {
|
|
81
|
+
it('should return all sources with status', () => {
|
|
82
|
+
const sources = manager.getAllSources();
|
|
83
|
+
expect(sources.length).toBe(AVAILABLE_SOURCES.length);
|
|
84
|
+
for (const source of sources) {
|
|
85
|
+
expect(source).toHaveProperty('isEnabled');
|
|
86
|
+
expect(source).toHaveProperty('isConfigured');
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
it('should show free sources as configured', () => {
|
|
90
|
+
const sources = manager.getAllSources();
|
|
91
|
+
const freeSources = sources.filter(s => s.type === 'free');
|
|
92
|
+
for (const source of freeSources) {
|
|
93
|
+
expect(source.isConfigured).toBe(true);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('getEnabledSources', () => {
|
|
98
|
+
it('should return only enabled and configured sources', () => {
|
|
99
|
+
const enabled = manager.getEnabledSources();
|
|
100
|
+
for (const source of enabled) {
|
|
101
|
+
expect(source.enabled).toBe(true);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
it('should include free sources by default', () => {
|
|
105
|
+
const enabled = manager.getEnabledSources();
|
|
106
|
+
const ids = enabled.map(s => s.id);
|
|
107
|
+
expect(ids).toContain('sundell');
|
|
108
|
+
expect(ids).toContain('vanderlee');
|
|
109
|
+
expect(ids).toContain('nilcoalescing');
|
|
110
|
+
expect(ids).toContain('pointfree');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('getSourcesByType', () => {
|
|
114
|
+
it('should filter by free type', () => {
|
|
115
|
+
const freeSources = manager.getSourcesByType('free');
|
|
116
|
+
expect(freeSources.length).toBeGreaterThan(0);
|
|
117
|
+
for (const source of freeSources) {
|
|
118
|
+
expect(source.type).toBe('free');
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
it('should filter by premium type', () => {
|
|
122
|
+
const premiumSources = manager.getSourcesByType('premium');
|
|
123
|
+
expect(premiumSources.length).toBeGreaterThan(0);
|
|
124
|
+
for (const source of premiumSources) {
|
|
125
|
+
expect(source.type).toBe('premium');
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('enableSource', () => {
|
|
130
|
+
it('should enable a free source', () => {
|
|
131
|
+
const result = manager.enableSource('sundell');
|
|
132
|
+
expect(result).toBe(true);
|
|
133
|
+
});
|
|
134
|
+
it('should return false for unknown source', () => {
|
|
135
|
+
const result = manager.enableSource('nonexistent');
|
|
136
|
+
expect(result).toBe(false);
|
|
137
|
+
});
|
|
138
|
+
it('should throw for unconfigured premium source', () => {
|
|
139
|
+
expect(() => manager.enableSource('patreon')).toThrow(/requires configuration/);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('disableSource', () => {
|
|
143
|
+
it('should disable a source', () => {
|
|
144
|
+
manager.enableSource('sundell');
|
|
145
|
+
const result = manager.disableSource('sundell');
|
|
146
|
+
expect(result).toBe(true);
|
|
147
|
+
});
|
|
148
|
+
it('should return false for unknown source', () => {
|
|
149
|
+
const result = manager.disableSource('nonexistent');
|
|
150
|
+
expect(result).toBe(false);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('isSourceConfigured', () => {
|
|
154
|
+
it('should return true for free sources', () => {
|
|
155
|
+
const configured = manager.isSourceConfigured('sundell');
|
|
156
|
+
expect(configured).toBe(true);
|
|
157
|
+
});
|
|
158
|
+
it('should return false for unconfigured premium sources', () => {
|
|
159
|
+
const configured = manager.isSourceConfigured('patreon');
|
|
160
|
+
expect(configured).toBe(false);
|
|
161
|
+
});
|
|
162
|
+
it('should return true for non-auth sources', () => {
|
|
163
|
+
const configured = manager.isSourceConfigured('vanderlee');
|
|
164
|
+
expect(configured).toBe(true);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('markSourceConfigured', () => {
|
|
168
|
+
it('should mark source as configured', () => {
|
|
169
|
+
manager.markSourceConfigured('patreon');
|
|
170
|
+
// After marking, the config should be saved
|
|
171
|
+
// We can verify by creating a new manager with the same path
|
|
172
|
+
const newManager = new SourceManager(tempConfigPath);
|
|
173
|
+
const sources = newManager.getAllSources();
|
|
174
|
+
const patreon = sources.find(s => s.id === 'patreon');
|
|
175
|
+
expect(patreon?.isEnabled).toBe(true);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe('config persistence', () => {
|
|
179
|
+
it('should save and load config', () => {
|
|
180
|
+
manager.enableSource('sundell');
|
|
181
|
+
manager.disableSource('vanderlee');
|
|
182
|
+
// Create new manager with same path
|
|
183
|
+
const newManager = new SourceManager(tempConfigPath);
|
|
184
|
+
const sources = newManager.getAllSources();
|
|
185
|
+
const sundell = sources.find(s => s.id === 'sundell');
|
|
186
|
+
const vanderlee = sources.find(s => s.id === 'vanderlee');
|
|
187
|
+
expect(sundell?.isEnabled).toBe(true);
|
|
188
|
+
expect(vanderlee?.isEnabled).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
it('should handle missing config file gracefully', () => {
|
|
191
|
+
const missingPath = path.join(os.tmpdir(), 'nonexistent-config.json');
|
|
192
|
+
const newManager = new SourceManager(missingPath);
|
|
193
|
+
// Should use defaults
|
|
194
|
+
const sources = newManager.getAllSources();
|
|
195
|
+
expect(sources.length).toBe(AVAILABLE_SOURCES.length);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
//# sourceMappingURL=sources.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.test.js","sourceRoot":"","sources":["../../src/config/sources.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared keyword definitions for Swift content analysis
|
|
3
|
+
* These are used by various sources to detect topics and calculate relevance
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Base topic keywords shared across all sources
|
|
7
|
+
*/
|
|
8
|
+
export declare const BASE_TOPIC_KEYWORDS: Record<string, string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Base quality signals shared across all sources
|
|
11
|
+
*/
|
|
12
|
+
export declare const BASE_QUALITY_SIGNALS: Record<string, number>;
|
|
13
|
+
/**
|
|
14
|
+
* Merge keyword sets, with specific keywords overriding base keywords
|
|
15
|
+
*/
|
|
16
|
+
export declare function mergeKeywords(base: Record<string, string[]>, specific: Record<string, string[]>): Record<string, string[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Merge quality signals, with specific signals overriding base signals
|
|
19
|
+
*/
|
|
20
|
+
export declare function mergeQualitySignals(base: Record<string, number>, specific: Record<string, number>): Record<string, number>;
|
|
21
|
+
/**
|
|
22
|
+
* Create merged source configuration from source-specific overrides.
|
|
23
|
+
* Simplifies the common pattern of extending base keywords/signals.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createSourceConfig(specificTopics: Record<string, string[]>, specificSignals: Record<string, number>): {
|
|
26
|
+
topicKeywords: Record<string, string[]>;
|
|
27
|
+
qualitySignals: Record<string, number>;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=swift-keywords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift-keywords.d.ts","sourceRoot":"","sources":["../../src/config/swift-keywords.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CASxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBvD,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAa1B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACxC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC;IACD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC,CAKA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// src/config/swift-keywords.ts
|
|
2
|
+
/**
|
|
3
|
+
* Shared keyword definitions for Swift content analysis
|
|
4
|
+
* These are used by various sources to detect topics and calculate relevance
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Base topic keywords shared across all sources
|
|
8
|
+
*/
|
|
9
|
+
export const BASE_TOPIC_KEYWORDS = {
|
|
10
|
+
'swiftui': ['swiftui', 'view', 'state', 'binding'],
|
|
11
|
+
'concurrency': ['async', 'await', 'actor', 'task'],
|
|
12
|
+
'testing': ['test', 'xctest', 'mock'],
|
|
13
|
+
'architecture': ['architecture', 'mvvm', 'coordinator'],
|
|
14
|
+
'networking': ['network', 'urlsession', 'api', 'http'],
|
|
15
|
+
'performance': ['performance', 'memory', 'optimization'],
|
|
16
|
+
'protocols': ['protocol', 'generic'],
|
|
17
|
+
'uikit': ['uikit', 'uiview'],
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Base quality signals shared across all sources
|
|
21
|
+
*/
|
|
22
|
+
export const BASE_QUALITY_SIGNALS = {
|
|
23
|
+
// Instructional content
|
|
24
|
+
'how to': 5,
|
|
25
|
+
'step by step': 5,
|
|
26
|
+
'tutorial': 5,
|
|
27
|
+
'guide': 4,
|
|
28
|
+
'example': 4,
|
|
29
|
+
'tip': 3,
|
|
30
|
+
// Advanced topics
|
|
31
|
+
'architecture': 8,
|
|
32
|
+
'testing': 7,
|
|
33
|
+
'performance': 7,
|
|
34
|
+
'concurrency': 7,
|
|
35
|
+
'async': 6,
|
|
36
|
+
'await': 6,
|
|
37
|
+
'actor': 6,
|
|
38
|
+
'protocol': 5,
|
|
39
|
+
'generic': 5,
|
|
40
|
+
// Frameworks
|
|
41
|
+
'swiftui': 6,
|
|
42
|
+
'uikit': 5,
|
|
43
|
+
'combine': 6,
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Merge keyword sets, with specific keywords overriding base keywords
|
|
47
|
+
*/
|
|
48
|
+
export function mergeKeywords(base, specific) {
|
|
49
|
+
const merged = { ...base };
|
|
50
|
+
for (const [key, values] of Object.entries(specific)) {
|
|
51
|
+
if (merged[key]) {
|
|
52
|
+
// Merge arrays and remove duplicates
|
|
53
|
+
merged[key] = [...new Set([...merged[key], ...values])];
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
merged[key] = values;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return merged;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Merge quality signals, with specific signals overriding base signals
|
|
63
|
+
*/
|
|
64
|
+
export function mergeQualitySignals(base, specific) {
|
|
65
|
+
return { ...base, ...specific };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create merged source configuration from source-specific overrides.
|
|
69
|
+
* Simplifies the common pattern of extending base keywords/signals.
|
|
70
|
+
*/
|
|
71
|
+
export function createSourceConfig(specificTopics, specificSignals) {
|
|
72
|
+
return {
|
|
73
|
+
topicKeywords: mergeKeywords(BASE_TOPIC_KEYWORDS, specificTopics),
|
|
74
|
+
qualitySignals: mergeQualitySignals(BASE_QUALITY_SIGNALS, specificSignals),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=swift-keywords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift-keywords.js","sourceRoot":"","sources":["../../src/config/swift-keywords.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;IAClD,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IAClD,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;IACrC,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC;IACvD,YAAY,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC;IACtD,aAAa,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC;IACxD,WAAW,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;IACpC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,wBAAwB;IACxB,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,CAAC;IACjB,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC;IAER,kBAAkB;IAClB,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;IACZ,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IAEZ,aAAa;IACb,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAA8B,EAC9B,QAAkC;IAElC,MAAM,MAAM,GAA6B,EAAE,GAAG,IAAI,EAAE,CAAC;IAErD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,qCAAqC;YACrC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAA4B,EAC5B,QAAgC;IAEhC,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,cAAwC,EACxC,eAAuC;IAKvC,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,mBAAmB,EAAE,cAAc,CAAC;QACjE,cAAc,EAAE,mBAAmB,CAAC,oBAAoB,EAAE,eAAe,CAAC;KAC3E,CAAC;AACJ,CAAC"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,eAAe,CAAC"}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// src/index.ts
|
|
3
|
+
import 'dotenv/config';
|
|
4
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
5
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
+
import SourceManager from "./config/sources.js";
|
|
8
|
+
import { getHandler } from './tools/index.js';
|
|
9
|
+
import { createErrorResponseFromError } from './utils/response-helpers.js';
|
|
10
|
+
import { prefetchAllSources } from './utils/source-registry.js';
|
|
11
|
+
import logger from './utils/logger.js';
|
|
12
|
+
// Premium sources (imported conditionally)
|
|
13
|
+
let patreonSource = null;
|
|
14
|
+
try {
|
|
15
|
+
const module = await import("./sources/premium/patreon.js");
|
|
16
|
+
patreonSource = module.PatreonSource;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Patreon not available
|
|
20
|
+
}
|
|
21
|
+
// Initialize source manager
|
|
22
|
+
const sourceManager = new SourceManager();
|
|
23
|
+
// Tool context for handlers
|
|
24
|
+
const toolContext = { sourceManager, patreonSource };
|
|
25
|
+
// Core tools (always available)
|
|
26
|
+
const CORE_TOOLS = [
|
|
27
|
+
{
|
|
28
|
+
name: "get_swift_pattern",
|
|
29
|
+
description: "Get Swift/SwiftUI patterns from curated free sources (Sundell, van der Lee, Nil Coalescing, etc.)",
|
|
30
|
+
inputSchema: {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
topic: {
|
|
34
|
+
type: "string",
|
|
35
|
+
description: "Topic to search (e.g., 'swiftui', 'testing', 'async-await', 'performance')",
|
|
36
|
+
},
|
|
37
|
+
source: {
|
|
38
|
+
type: "string",
|
|
39
|
+
enum: ["all", "sundell", "vanderlee", "nilcoalescing", "pointfree"],
|
|
40
|
+
description: "Specific source to search (default: all free sources)",
|
|
41
|
+
},
|
|
42
|
+
minQuality: {
|
|
43
|
+
type: "number",
|
|
44
|
+
description: "Minimum quality score 0-100 (default: 60)",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ["topic"],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "search_swift_content",
|
|
52
|
+
description: "Search all enabled sources for Swift/iOS content",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
query: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Search query",
|
|
59
|
+
},
|
|
60
|
+
requireCode: {
|
|
61
|
+
type: "boolean",
|
|
62
|
+
description: "Only return results with code examples",
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ["query"],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "list_content_sources",
|
|
70
|
+
description: "List all available content sources and their status",
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: "object",
|
|
73
|
+
properties: {},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "enable_source",
|
|
78
|
+
description: "Enable a content source (requires setup for premium sources)",
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: "object",
|
|
81
|
+
properties: {
|
|
82
|
+
source: {
|
|
83
|
+
type: "string",
|
|
84
|
+
description: "Source ID (e.g., 'patreon')",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
required: ["source"],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
// Premium tools (only if Patreon is enabled)
|
|
92
|
+
const PATREON_TOOLS = [
|
|
93
|
+
{
|
|
94
|
+
name: "get_patreon_patterns",
|
|
95
|
+
description: "Get high-quality patterns from your Patreon subscriptions (requires Patreon enabled)",
|
|
96
|
+
inputSchema: {
|
|
97
|
+
type: "object",
|
|
98
|
+
properties: {
|
|
99
|
+
topic: {
|
|
100
|
+
type: "string",
|
|
101
|
+
description: "Topic to search",
|
|
102
|
+
},
|
|
103
|
+
minQuality: {
|
|
104
|
+
type: "number",
|
|
105
|
+
description: "Minimum quality score (default: 70)",
|
|
106
|
+
},
|
|
107
|
+
requireCode: {
|
|
108
|
+
type: "boolean",
|
|
109
|
+
description: "Only return posts with code",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "setup_patreon",
|
|
116
|
+
description: "Set up Patreon integration to access your subscriptions",
|
|
117
|
+
inputSchema: {
|
|
118
|
+
type: "object",
|
|
119
|
+
properties: {
|
|
120
|
+
action: {
|
|
121
|
+
type: "string",
|
|
122
|
+
enum: ["start", "status"],
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
// Create server
|
|
129
|
+
const server = new Server({
|
|
130
|
+
name: "swift-patterns-mcp",
|
|
131
|
+
version: "1.0.0",
|
|
132
|
+
}, {
|
|
133
|
+
capabilities: {
|
|
134
|
+
tools: {},
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
// List tools based on enabled sources
|
|
138
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
139
|
+
const enabledSources = sourceManager.getEnabledSources();
|
|
140
|
+
const hasPatreon = enabledSources.some(s => s.id === 'patreon');
|
|
141
|
+
const tools = [...CORE_TOOLS];
|
|
142
|
+
if (hasPatreon && patreonSource) {
|
|
143
|
+
tools.push(...PATREON_TOOLS);
|
|
144
|
+
}
|
|
145
|
+
return { tools };
|
|
146
|
+
});
|
|
147
|
+
// Handle tool calls
|
|
148
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
149
|
+
const { name, arguments: args } = request.params;
|
|
150
|
+
try {
|
|
151
|
+
const handler = getHandler(name);
|
|
152
|
+
if (handler) {
|
|
153
|
+
return handler(args ?? {}, toolContext);
|
|
154
|
+
}
|
|
155
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return createErrorResponseFromError(error);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
// Start server
|
|
162
|
+
async function main() {
|
|
163
|
+
const transport = new StdioServerTransport();
|
|
164
|
+
await server.connect(transport);
|
|
165
|
+
logger.info("Swift MCP Server running on stdio");
|
|
166
|
+
// Prefetch sources in background if enabled
|
|
167
|
+
if (sourceManager.isPrefetchEnabled()) {
|
|
168
|
+
prefetchAllSources().then((results) => {
|
|
169
|
+
const successful = results.filter(r => r.status === 'fulfilled').length;
|
|
170
|
+
const failed = results.filter(r => r.status === 'rejected').length;
|
|
171
|
+
logger.info(`Sources prefetch complete: ${successful} succeeded, ${failed} failed`);
|
|
172
|
+
}).catch((error) => {
|
|
173
|
+
logger.warn({ err: error }, "Failed to prefetch sources");
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
main().catch((error) => {
|
|
178
|
+
logger.error({ err: error }, "Fatal error");
|
|
179
|
+
process.exit(1);
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-behavior.test.d.ts","sourceRoot":"","sources":["../../src/integration/cache-behavior.test.ts"],"names":[],"mappings":""}
|