@skillsmith/core 0.4.15 → 0.4.16
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/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/DependencyMerger.d.ts +39 -0
- package/dist/src/analysis/DependencyMerger.d.ts.map +1 -0
- package/dist/src/analysis/DependencyMerger.js +191 -0
- package/dist/src/analysis/DependencyMerger.js.map +1 -0
- package/dist/src/analysis/DependencyMerger.test.d.ts +2 -0
- package/dist/src/analysis/DependencyMerger.test.d.ts.map +1 -0
- package/dist/src/analysis/DependencyMerger.test.js +258 -0
- package/dist/src/analysis/DependencyMerger.test.js.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.d.ts +42 -0
- package/dist/src/analysis/McpReferenceExtractor.d.ts.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.js +92 -0
- package/dist/src/analysis/McpReferenceExtractor.js.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.test.d.ts +2 -0
- package/dist/src/analysis/McpReferenceExtractor.test.d.ts.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.test.js +262 -0
- package/dist/src/analysis/McpReferenceExtractor.test.js.map +1 -0
- package/dist/src/api/schemas.d.ts +4 -4
- package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
- package/dist/src/db/drivers/sqljsDriver.js +4 -8
- package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
- package/dist/src/db/migrations/v10-dependencies.d.ts +18 -0
- package/dist/src/db/migrations/v10-dependencies.d.ts.map +1 -0
- package/dist/src/db/migrations/v10-dependencies.js +50 -0
- package/dist/src/db/migrations/v10-dependencies.js.map +1 -0
- package/dist/src/db/migrations/v2-phase5-columns.d.ts +7 -0
- package/dist/src/db/migrations/v2-phase5-columns.d.ts.map +1 -0
- package/dist/src/db/migrations/v2-phase5-columns.js +16 -0
- package/dist/src/db/migrations/v2-phase5-columns.js.map +1 -0
- package/dist/src/db/migrations/v3-sync-tables.d.ts +6 -0
- package/dist/src/db/migrations/v3-sync-tables.d.ts.map +1 -0
- package/dist/src/db/migrations/v3-sync-tables.js +41 -0
- package/dist/src/db/migrations/v3-sync-tables.js.map +1 -0
- package/dist/src/db/migrations/v4-security-columns.d.ts +7 -0
- package/dist/src/db/migrations/v4-security-columns.d.ts.map +1 -0
- package/dist/src/db/migrations/v4-security-columns.js +17 -0
- package/dist/src/db/migrations/v4-security-columns.js.map +1 -0
- package/dist/src/db/schema.d.ts +1 -1
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +14 -58
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/exports/repositories.d.ts +1 -0
- package/dist/src/exports/repositories.d.ts.map +1 -1
- package/dist/src/exports/repositories.js +4 -0
- package/dist/src/exports/repositories.js.map +1 -1
- package/dist/src/exports/services.d.ts +2 -0
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.js +5 -0
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/exports/types.d.ts +1 -0
- package/dist/src/exports/types.d.ts.map +1 -1
- package/dist/src/exports/types.js.map +1 -1
- package/dist/src/indexer/GitHubIndexer.d.ts +3 -1
- package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
- package/dist/src/indexer/GitHubIndexer.js.map +1 -1
- package/dist/src/indexer/SkillParser.d.ts +20 -9
- package/dist/src/indexer/SkillParser.d.ts.map +1 -1
- package/dist/src/indexer/SkillParser.js +17 -10
- package/dist/src/indexer/SkillParser.js.map +1 -1
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +5 -1
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/SkillDependencyRepository.d.ts +73 -0
- package/dist/src/repositories/SkillDependencyRepository.d.ts.map +1 -0
- package/dist/src/repositories/SkillDependencyRepository.js +199 -0
- package/dist/src/repositories/SkillDependencyRepository.js.map +1 -0
- package/dist/src/scripts/validation/types.d.ts +2 -2
- package/dist/src/sources/SourceIndexer.d.ts +3 -1
- package/dist/src/sources/SourceIndexer.d.ts.map +1 -1
- package/dist/src/sources/SourceIndexer.js.map +1 -1
- package/dist/src/types/dependencies.d.ts +85 -0
- package/dist/src/types/dependencies.d.ts.map +1 -0
- package/dist/src/types/dependencies.js +11 -0
- package/dist/src/types/dependencies.js.map +1 -0
- package/dist/src/types/skill.d.ts +3 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types/skill.js.map +1 -1
- package/dist/src/types.d.ts +2 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tests/DailyIndexPipeline.test.js +3 -3
- package/dist/tests/DailyIndexPipeline.test.js.map +1 -1
- package/dist/tests/GitHubIndexer.test.js +4 -2
- package/dist/tests/GitHubIndexer.test.js.map +1 -1
- package/dist/tests/edge-cases/EdgeCases.test.js +4 -1
- package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -1
- package/dist/tests/repositories/SkillDependencyRepository.test.d.ts +10 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.d.ts.map +1 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.js +336 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.js.map +1 -0
- package/dist/tests/sources.test.js +1 -1
- package/dist/tests/sources.test.js.map +1 -1
- package/dist/tests/unit/migrations/v10-dependencies.test.d.ts +6 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.d.ts.map +1 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.js +166 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Extracts MCP tool references from SKILL.md content
|
|
3
|
+
* @module @skillsmith/core/analysis/McpReferenceExtractor
|
|
4
|
+
* @see SMI-3145: Build McpReferenceExtractor
|
|
5
|
+
*
|
|
6
|
+
* Scans skill content for `mcp__<server>__<tool>` patterns,
|
|
7
|
+
* tracking whether each reference appears inside a fenced code block.
|
|
8
|
+
*/
|
|
9
|
+
/** Maximum input size in bytes before truncation */
|
|
10
|
+
const MAX_INPUT_BYTES = 100 * 1024;
|
|
11
|
+
/**
|
|
12
|
+
* Pattern matching `mcp__<server>__<tool>` identifiers.
|
|
13
|
+
* Server: lowercase letter followed by lowercase alphanumeric or hyphens.
|
|
14
|
+
* Tool: lowercase letter followed by lowercase alphanumeric or underscores.
|
|
15
|
+
*/
|
|
16
|
+
const MCP_PATTERN = /mcp__([a-z][a-z0-9-]*)__([a-z][a-z0-9_]*)/g;
|
|
17
|
+
/** Matches the opening or closing of a fenced code block */
|
|
18
|
+
const FENCE_PATTERN = /^(`{3,}|~{3,})/;
|
|
19
|
+
/**
|
|
20
|
+
* Extract all MCP tool references from skill content.
|
|
21
|
+
*
|
|
22
|
+
* Scans each line for `mcp__server__tool` patterns, tracking fenced
|
|
23
|
+
* code block state to distinguish high-confidence (prose) references
|
|
24
|
+
* from low-confidence (code example) references.
|
|
25
|
+
*
|
|
26
|
+
* @param content - Raw SKILL.md content (markdown)
|
|
27
|
+
* @returns Extraction result with references, servers, and confidence info
|
|
28
|
+
*/
|
|
29
|
+
export function extractMcpReferences(content) {
|
|
30
|
+
let truncated;
|
|
31
|
+
// Cap input at 100KB
|
|
32
|
+
if (new TextEncoder().encode(content).byteLength > MAX_INPUT_BYTES) {
|
|
33
|
+
content = content.slice(0, MAX_INPUT_BYTES);
|
|
34
|
+
truncated = true;
|
|
35
|
+
}
|
|
36
|
+
const lines = content.split('\n');
|
|
37
|
+
const references = [];
|
|
38
|
+
const serverSet = new Set();
|
|
39
|
+
const highConfidenceSet = new Set();
|
|
40
|
+
let inCodeBlock = false;
|
|
41
|
+
let fenceChar = null;
|
|
42
|
+
let fenceLength = 0;
|
|
43
|
+
for (let i = 0; i < lines.length; i++) {
|
|
44
|
+
const line = lines[i];
|
|
45
|
+
const lineNumber = i + 1;
|
|
46
|
+
// Check for fence toggle
|
|
47
|
+
const fenceMatch = FENCE_PATTERN.exec(line);
|
|
48
|
+
if (fenceMatch) {
|
|
49
|
+
const matchChar = fenceMatch[1][0];
|
|
50
|
+
const matchLength = fenceMatch[1].length;
|
|
51
|
+
if (!inCodeBlock) {
|
|
52
|
+
inCodeBlock = true;
|
|
53
|
+
fenceChar = matchChar;
|
|
54
|
+
fenceLength = matchLength;
|
|
55
|
+
}
|
|
56
|
+
else if (matchChar === fenceChar && matchLength >= fenceLength) {
|
|
57
|
+
// Closing fence must use same character and be at least as long
|
|
58
|
+
inCodeBlock = false;
|
|
59
|
+
fenceChar = null;
|
|
60
|
+
fenceLength = 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Find all MCP references on this line
|
|
64
|
+
let match;
|
|
65
|
+
// Reset lastIndex for each line since we reuse the global regex
|
|
66
|
+
MCP_PATTERN.lastIndex = 0;
|
|
67
|
+
while ((match = MCP_PATTERN.exec(line)) !== null) {
|
|
68
|
+
const server = match[1];
|
|
69
|
+
const tool = match[2];
|
|
70
|
+
references.push({
|
|
71
|
+
server,
|
|
72
|
+
tool,
|
|
73
|
+
line: lineNumber,
|
|
74
|
+
inCodeBlock,
|
|
75
|
+
});
|
|
76
|
+
serverSet.add(server);
|
|
77
|
+
if (!inCodeBlock) {
|
|
78
|
+
highConfidenceSet.add(server);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const result = {
|
|
83
|
+
references,
|
|
84
|
+
servers: [...serverSet].sort(),
|
|
85
|
+
highConfidenceServers: [...highConfidenceSet].sort(),
|
|
86
|
+
};
|
|
87
|
+
if (truncated) {
|
|
88
|
+
result.truncated = true;
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=McpReferenceExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpReferenceExtractor.js","sourceRoot":"","sources":["../../../src/analysis/McpReferenceExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpReferenceExtractor.test.d.ts","sourceRoot":"","sources":["../../../src/analysis/McpReferenceExtractor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { extractMcpReferences } from './McpReferenceExtractor.js';
|
|
3
|
+
describe('McpReferenceExtractor', () => {
|
|
4
|
+
describe('extractMcpReferences', () => {
|
|
5
|
+
it('should extract a basic MCP reference', () => {
|
|
6
|
+
const content = 'Use mcp__linear__save_issue to create issues.';
|
|
7
|
+
const result = extractMcpReferences(content);
|
|
8
|
+
expect(result.references).toHaveLength(1);
|
|
9
|
+
expect(result.references[0]).toEqual({
|
|
10
|
+
server: 'linear',
|
|
11
|
+
tool: 'save_issue',
|
|
12
|
+
line: 1,
|
|
13
|
+
inCodeBlock: false,
|
|
14
|
+
});
|
|
15
|
+
expect(result.servers).toEqual(['linear']);
|
|
16
|
+
expect(result.highConfidenceServers).toEqual(['linear']);
|
|
17
|
+
});
|
|
18
|
+
it('should detect references inside fenced code blocks', () => {
|
|
19
|
+
const content = [
|
|
20
|
+
'Some text',
|
|
21
|
+
'```typescript',
|
|
22
|
+
'await mcp__linear__save_issue({ title: "test" })',
|
|
23
|
+
'```',
|
|
24
|
+
'More text',
|
|
25
|
+
].join('\n');
|
|
26
|
+
const result = extractMcpReferences(content);
|
|
27
|
+
expect(result.references).toHaveLength(1);
|
|
28
|
+
expect(result.references[0].inCodeBlock).toBe(true);
|
|
29
|
+
expect(result.servers).toEqual(['linear']);
|
|
30
|
+
// Inside code block only -> not high confidence
|
|
31
|
+
expect(result.highConfidenceServers).toEqual([]);
|
|
32
|
+
});
|
|
33
|
+
it('should handle multiple servers', () => {
|
|
34
|
+
const content = [
|
|
35
|
+
'Use mcp__linear__save_issue for issues.',
|
|
36
|
+
'Use mcp__claude-flow__agent_spawn for agents.',
|
|
37
|
+
'Use mcp__skillsmith__search for skills.',
|
|
38
|
+
].join('\n');
|
|
39
|
+
const result = extractMcpReferences(content);
|
|
40
|
+
expect(result.references).toHaveLength(3);
|
|
41
|
+
expect(result.servers).toEqual(['claude-flow', 'linear', 'skillsmith']);
|
|
42
|
+
});
|
|
43
|
+
it('should handle servers with hyphens', () => {
|
|
44
|
+
const content = 'Use mcp__claude-flow__agent_spawn for agents.';
|
|
45
|
+
const result = extractMcpReferences(content);
|
|
46
|
+
expect(result.references).toHaveLength(1);
|
|
47
|
+
expect(result.references[0].server).toBe('claude-flow');
|
|
48
|
+
expect(result.references[0].tool).toBe('agent_spawn');
|
|
49
|
+
});
|
|
50
|
+
it('should return empty result for plain markdown', () => {
|
|
51
|
+
const content = [
|
|
52
|
+
'# My Skill',
|
|
53
|
+
'',
|
|
54
|
+
'This skill does something cool.',
|
|
55
|
+
'',
|
|
56
|
+
'## Usage',
|
|
57
|
+
'',
|
|
58
|
+
'Just install and use it.',
|
|
59
|
+
].join('\n');
|
|
60
|
+
const result = extractMcpReferences(content);
|
|
61
|
+
expect(result.references).toEqual([]);
|
|
62
|
+
expect(result.servers).toEqual([]);
|
|
63
|
+
expect(result.highConfidenceServers).toEqual([]);
|
|
64
|
+
expect(result.truncated).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
it('should handle nested code blocks with tilde fences', () => {
|
|
67
|
+
const content = [
|
|
68
|
+
'Outside text with mcp__linear__get_issue',
|
|
69
|
+
'~~~',
|
|
70
|
+
'Inside tilde block mcp__linear__save_issue',
|
|
71
|
+
'~~~',
|
|
72
|
+
'Outside again mcp__linear__list_issues',
|
|
73
|
+
].join('\n');
|
|
74
|
+
const result = extractMcpReferences(content);
|
|
75
|
+
expect(result.references).toHaveLength(3);
|
|
76
|
+
expect(result.references[0].inCodeBlock).toBe(false);
|
|
77
|
+
expect(result.references[1].inCodeBlock).toBe(true);
|
|
78
|
+
expect(result.references[2].inCodeBlock).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
it('should require matching fence characters', () => {
|
|
81
|
+
const content = [
|
|
82
|
+
'```',
|
|
83
|
+
'Inside backtick block mcp__linear__save_issue',
|
|
84
|
+
'~~~',
|
|
85
|
+
'Still inside (tilde cannot close backtick) mcp__linear__get_issue',
|
|
86
|
+
'```',
|
|
87
|
+
'Outside mcp__linear__list_issues',
|
|
88
|
+
].join('\n');
|
|
89
|
+
const result = extractMcpReferences(content);
|
|
90
|
+
expect(result.references[0].inCodeBlock).toBe(true);
|
|
91
|
+
expect(result.references[1].inCodeBlock).toBe(true);
|
|
92
|
+
expect(result.references[2].inCodeBlock).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
it('should truncate input exceeding 100KB', () => {
|
|
95
|
+
// Create content > 100KB: each line ~50 chars, need ~2048 lines for 100KB
|
|
96
|
+
const line = 'x'.repeat(100) + '\n';
|
|
97
|
+
const content = line.repeat(1100); // ~110KB
|
|
98
|
+
const result = extractMcpReferences(content);
|
|
99
|
+
expect(result.truncated).toBe(true);
|
|
100
|
+
expect(result.references).toEqual([]);
|
|
101
|
+
});
|
|
102
|
+
it('should not truncate content under 100KB', () => {
|
|
103
|
+
const content = 'mcp__linear__save_issue\n'.repeat(10);
|
|
104
|
+
const result = extractMcpReferences(content);
|
|
105
|
+
expect(result.truncated).toBeUndefined();
|
|
106
|
+
expect(result.references).toHaveLength(10);
|
|
107
|
+
});
|
|
108
|
+
it('should not match partial patterns like mcp__partial', () => {
|
|
109
|
+
const content = 'This has mcp__partial without a second delimiter.';
|
|
110
|
+
const result = extractMcpReferences(content);
|
|
111
|
+
expect(result.references).toEqual([]);
|
|
112
|
+
});
|
|
113
|
+
it('should match references embedded in URLs or paths', () => {
|
|
114
|
+
const content = 'See https://example.com/docs/mcp__linear__save_issue for details.';
|
|
115
|
+
const result = extractMcpReferences(content);
|
|
116
|
+
expect(result.references).toHaveLength(1);
|
|
117
|
+
expect(result.references[0].server).toBe('linear');
|
|
118
|
+
});
|
|
119
|
+
it('should extract multiple references on one line', () => {
|
|
120
|
+
const content = 'Use mcp__linear__save_issue and mcp__linear__get_issue together.';
|
|
121
|
+
const result = extractMcpReferences(content);
|
|
122
|
+
expect(result.references).toHaveLength(2);
|
|
123
|
+
expect(result.references[0].tool).toBe('save_issue');
|
|
124
|
+
expect(result.references[1].tool).toBe('get_issue');
|
|
125
|
+
expect(result.references[0].line).toBe(1);
|
|
126
|
+
expect(result.references[1].line).toBe(1);
|
|
127
|
+
});
|
|
128
|
+
it('should populate highConfidenceServers only for outside-code-block refs', () => {
|
|
129
|
+
const content = [
|
|
130
|
+
'Use mcp__linear__save_issue in your workflow.',
|
|
131
|
+
'```',
|
|
132
|
+
'mcp__claude-flow__agent_spawn({ type: "coder" })',
|
|
133
|
+
'```',
|
|
134
|
+
].join('\n');
|
|
135
|
+
const result = extractMcpReferences(content);
|
|
136
|
+
expect(result.servers).toEqual(['claude-flow', 'linear']);
|
|
137
|
+
expect(result.highConfidenceServers).toEqual(['linear']);
|
|
138
|
+
});
|
|
139
|
+
it('should handle a server appearing both inside and outside code blocks', () => {
|
|
140
|
+
const content = [
|
|
141
|
+
'Call mcp__linear__save_issue to create.',
|
|
142
|
+
'```',
|
|
143
|
+
'mcp__linear__get_issue({ id: "123" })',
|
|
144
|
+
'```',
|
|
145
|
+
].join('\n');
|
|
146
|
+
const result = extractMcpReferences(content);
|
|
147
|
+
expect(result.references).toHaveLength(2);
|
|
148
|
+
expect(result.servers).toEqual(['linear']);
|
|
149
|
+
// linear appears outside code block, so it's high confidence
|
|
150
|
+
expect(result.highConfidenceServers).toEqual(['linear']);
|
|
151
|
+
});
|
|
152
|
+
it('should handle longer fence sequences', () => {
|
|
153
|
+
const content = [
|
|
154
|
+
'````',
|
|
155
|
+
'mcp__linear__save_issue inside 4-backtick block',
|
|
156
|
+
'```',
|
|
157
|
+
'still inside (3 backticks cannot close 4-backtick fence)',
|
|
158
|
+
'mcp__linear__get_issue',
|
|
159
|
+
'````',
|
|
160
|
+
'mcp__linear__list_issues outside',
|
|
161
|
+
].join('\n');
|
|
162
|
+
const result = extractMcpReferences(content);
|
|
163
|
+
expect(result.references[0].inCodeBlock).toBe(true);
|
|
164
|
+
expect(result.references[1].inCodeBlock).toBe(true);
|
|
165
|
+
expect(result.references[2].inCodeBlock).toBe(false);
|
|
166
|
+
});
|
|
167
|
+
describe('realistic SKILL.md validation (SMI-3147)', () => {
|
|
168
|
+
it('should correctly extract from a realistic SKILL.md body', () => {
|
|
169
|
+
const realisticSkill = [
|
|
170
|
+
'# Linear Integration Skill',
|
|
171
|
+
'',
|
|
172
|
+
'## Overview',
|
|
173
|
+
'',
|
|
174
|
+
'This skill integrates with Linear project management.',
|
|
175
|
+
'It uses mcp__linear__save_issue for creating issues',
|
|
176
|
+
'and mcp__linear__get_issue for retrieving them.',
|
|
177
|
+
'',
|
|
178
|
+
'## Requirements',
|
|
179
|
+
'',
|
|
180
|
+
'You need the mcp__skillsmith__search tool to find related skills.',
|
|
181
|
+
'',
|
|
182
|
+
'## Usage',
|
|
183
|
+
'',
|
|
184
|
+
'### Creating an issue',
|
|
185
|
+
'',
|
|
186
|
+
'```typescript',
|
|
187
|
+
'// Create a new Linear issue',
|
|
188
|
+
'const result = await mcp__linear__save_issue({',
|
|
189
|
+
' title: "Fix bug",',
|
|
190
|
+
' teamId: "team-123",',
|
|
191
|
+
'})',
|
|
192
|
+
'```',
|
|
193
|
+
'',
|
|
194
|
+
'### Spawning agents',
|
|
195
|
+
'',
|
|
196
|
+
'```bash',
|
|
197
|
+
'mcp__claude-flow__agent_spawn --type coder',
|
|
198
|
+
'mcp__claude-flow__task_orchestrate --plan auto',
|
|
199
|
+
'```',
|
|
200
|
+
'',
|
|
201
|
+
'## Notes',
|
|
202
|
+
'',
|
|
203
|
+
'The mcp__linear__list_issues tool is also helpful.',
|
|
204
|
+
].join('\n');
|
|
205
|
+
const result = extractMcpReferences(realisticSkill);
|
|
206
|
+
// Verify references
|
|
207
|
+
expect(result.references.length).toBeGreaterThanOrEqual(7);
|
|
208
|
+
// Verify servers
|
|
209
|
+
expect(result.servers).toEqual(['claude-flow', 'linear', 'skillsmith']);
|
|
210
|
+
// High-confidence: linear and skillsmith appear outside code blocks
|
|
211
|
+
// claude-flow appears only inside code blocks
|
|
212
|
+
expect(result.highConfidenceServers).toEqual(['linear', 'skillsmith']);
|
|
213
|
+
// Verify code block detection for specific references
|
|
214
|
+
const proseRefs = result.references.filter((r) => !r.inCodeBlock);
|
|
215
|
+
const codeRefs = result.references.filter((r) => r.inCodeBlock);
|
|
216
|
+
// Outside code blocks: save_issue(l6), get_issue(l7),
|
|
217
|
+
// search(l11), list_issues(l32)
|
|
218
|
+
expect(proseRefs).toHaveLength(4);
|
|
219
|
+
// Inside code blocks: save_issue(l19),
|
|
220
|
+
// agent_spawn(l26), task_orchestrate(l27)
|
|
221
|
+
expect(codeRefs).toHaveLength(3);
|
|
222
|
+
expect(result.truncated).toBeUndefined();
|
|
223
|
+
});
|
|
224
|
+
it('should handle SKILL.md with no MCP references', () => {
|
|
225
|
+
const plainSkill = [
|
|
226
|
+
'# Simple Skill',
|
|
227
|
+
'',
|
|
228
|
+
'## Overview',
|
|
229
|
+
'',
|
|
230
|
+
'A skill that uses no MCP tools.',
|
|
231
|
+
'',
|
|
232
|
+
'## Usage',
|
|
233
|
+
'',
|
|
234
|
+
'```bash',
|
|
235
|
+
'echo "Hello world"',
|
|
236
|
+
'```',
|
|
237
|
+
].join('\n');
|
|
238
|
+
const result = extractMcpReferences(plainSkill);
|
|
239
|
+
expect(result.references).toEqual([]);
|
|
240
|
+
expect(result.servers).toEqual([]);
|
|
241
|
+
expect(result.highConfidenceServers).toEqual([]);
|
|
242
|
+
});
|
|
243
|
+
it('should handle SKILL.md with only code block references', () => {
|
|
244
|
+
const codeOnlySkill = [
|
|
245
|
+
'# Agent Skill',
|
|
246
|
+
'',
|
|
247
|
+
'This skill orchestrates agents.',
|
|
248
|
+
'',
|
|
249
|
+
'```javascript',
|
|
250
|
+
'mcp__claude-flow__agent_spawn({ type: "coder" })',
|
|
251
|
+
'mcp__claude-flow__memory_usage({ action: "store" })',
|
|
252
|
+
'```',
|
|
253
|
+
].join('\n');
|
|
254
|
+
const result = extractMcpReferences(codeOnlySkill);
|
|
255
|
+
expect(result.references).toHaveLength(2);
|
|
256
|
+
expect(result.servers).toEqual(['claude-flow']);
|
|
257
|
+
expect(result.highConfidenceServers).toEqual([]);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=McpReferenceExtractor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpReferenceExtractor.test.js","sourceRoot":"","sources":["../../../src/analysis/McpReferenceExtractor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,11 @@ import { z } from 'zod';
|
|
|
9
9
|
* Trust tier enum values
|
|
10
10
|
*/
|
|
11
11
|
export declare const TrustTierSchema: z.ZodEnum<{
|
|
12
|
+
unknown: "unknown";
|
|
12
13
|
verified: "verified";
|
|
13
14
|
curated: "curated";
|
|
14
15
|
community: "community";
|
|
15
16
|
experimental: "experimental";
|
|
16
|
-
unknown: "unknown";
|
|
17
17
|
}>;
|
|
18
18
|
/**
|
|
19
19
|
* Schema for individual search result from API
|
|
@@ -28,11 +28,11 @@ export declare const ApiSearchResultSchema: z.ZodObject<{
|
|
|
28
28
|
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
29
29
|
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
30
30
|
trust_tier: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
31
|
+
unknown: "unknown";
|
|
31
32
|
verified: "verified";
|
|
32
33
|
curated: "curated";
|
|
33
34
|
community: "community";
|
|
34
35
|
experimental: "experimental";
|
|
35
|
-
unknown: "unknown";
|
|
36
36
|
}>>>;
|
|
37
37
|
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
38
38
|
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
@@ -69,11 +69,11 @@ export declare const SearchResponseSchema: z.ZodObject<{
|
|
|
69
69
|
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
70
70
|
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
71
71
|
trust_tier: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
72
|
+
unknown: "unknown";
|
|
72
73
|
verified: "verified";
|
|
73
74
|
curated: "curated";
|
|
74
75
|
community: "community";
|
|
75
76
|
experimental: "experimental";
|
|
76
|
-
unknown: "unknown";
|
|
77
77
|
}>>>;
|
|
78
78
|
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
79
79
|
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
@@ -96,11 +96,11 @@ export declare const SingleSkillResponseSchema: z.ZodObject<{
|
|
|
96
96
|
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
97
97
|
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
98
98
|
trust_tier: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
99
|
+
unknown: "unknown";
|
|
99
100
|
verified: "verified";
|
|
100
101
|
curated: "curated";
|
|
101
102
|
community: "community";
|
|
102
103
|
experimental: "experimental";
|
|
103
|
-
unknown: "unknown";
|
|
104
104
|
}>>>;
|
|
105
105
|
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
106
106
|
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqljsDriver.d.ts","sourceRoot":"","sources":["../../../../src/db/drivers/sqljsDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAa,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAY/F,UAAU,aAAa;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;IACpC,MAAM,IAAI,UAAU,CAAA;IACpB,KAAK,IAAI,IAAI,CAAA;CACd;AAED,UAAU,cAAc;IACtB,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAA;IACvC,IAAI,IAAI,OAAO,CAAA;IACf,GAAG,IAAI,UAAU,EAAE,CAAA;IACnB,cAAc,IAAI,MAAM,EAAE,CAAA;IAC1B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;CACb;AAGD,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAA;AACrD,KAAK,eAAe,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"sqljsDriver.d.ts","sourceRoot":"","sources":["../../../../src/db/drivers/sqljsDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAa,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAY/F,UAAU,aAAa;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;IACpC,MAAM,IAAI,UAAU,CAAA;IACpB,KAAK,IAAI,IAAI,CAAA;CACd;AAED,UAAU,cAAc;IACtB,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAA;IACvC,IAAI,IAAI,OAAO,CAAA;IACf,GAAG,IAAI,UAAU,EAAE,CAAA;IACnB,cAAc,IAAI,MAAM,EAAE,CAAA;IAC1B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;CACb;AAGD,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAA;AACrD,KAAK,eAAe,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AA2KhE;;GAEG;AACH,qBAAa,oBAAqB,YAAW,QAAQ;IAQjD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAR3B,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,iBAAiB,CAAI;gBAGV,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,MAAM,EACjC,OAAO,CAAC,EAAE,eAAe;IAM3B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAI/C,WAAW,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC;IAuC3F,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAsB/B,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;;OAGG;IACH,MAAM,IAAI,UAAU;IAIpB,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,aAAa,CAE1B;CACF;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,GAAE,MAAmB,EACzB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAqB/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C"}
|
|
@@ -31,14 +31,10 @@ async function loadSqlJs() {
|
|
|
31
31
|
try {
|
|
32
32
|
// Dynamic import to avoid loading at module evaluation time
|
|
33
33
|
// Using fts5-sql-bundle for FTS5 full-text search support
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
// - ESM named export: module.initSqlJs
|
|
39
|
-
// - ESM default with named: module.default.initSqlJs
|
|
40
|
-
// - CJS interop: module.default.default
|
|
41
|
-
const initSqlJs = module.initSqlJs || module.default?.initSqlJs || module.default?.default || module.default;
|
|
34
|
+
// Typed via ambient declaration in fts5-sql-bundle.d.ts (SMI-2742)
|
|
35
|
+
const module = await import('fts5-sql-bundle');
|
|
36
|
+
const fallback = module.default;
|
|
37
|
+
const initSqlJs = module.initSqlJs || fallback?.initSqlJs || fallback?.default || fallback;
|
|
42
38
|
if (!initSqlJs) {
|
|
43
39
|
throw new Error('[Skillsmith] fts5-sql-bundle: could not locate initSqlJs export');
|
|
44
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqljsDriver.js","sourceRoot":"","sources":["../../../../src/db/drivers/sqljsDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEjE,oDAAoD;AACpD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"sqljsDriver.js","sourceRoot":"","sources":["../../../../src/db/drivers/sqljsDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Migration v10 — skill_dependencies table
|
|
3
|
+
* @module @skillsmith/core/db/migrations/v10-dependencies
|
|
4
|
+
* @see Architecture: ../research/skill-dependency-intelligence-architecture.md §4
|
|
5
|
+
*
|
|
6
|
+
* Stores declared and inferred dependency records for skills.
|
|
7
|
+
* Three signal sources: author declaration, static mcp__* analysis,
|
|
8
|
+
* and co-install behavioral inference.
|
|
9
|
+
*
|
|
10
|
+
* Design notes:
|
|
11
|
+
* - No FK on skill_id — soft reference, dep records survive skill removal
|
|
12
|
+
* (matches SkillVersionRepository pattern)
|
|
13
|
+
* - dep_source distinguishes declared vs inferred for confidence filtering
|
|
14
|
+
* - Unique index on (skill_id, dep_type, dep_target, dep_source) prevents
|
|
15
|
+
* duplicate rows from repeated inference runs
|
|
16
|
+
*/
|
|
17
|
+
export declare const MIGRATION_V10_SQL = "\nCREATE TABLE IF NOT EXISTS skill_dependencies (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n skill_id TEXT NOT NULL,\n dep_type TEXT NOT NULL CHECK (dep_type IN (\n 'skill_hard', 'skill_soft', 'skill_peer',\n 'mcp_server',\n 'model_minimum', 'model_capability',\n 'env_tool', 'env_os', 'env_node',\n 'cli_version',\n 'conflict'\n )),\n dep_target TEXT NOT NULL,\n dep_version TEXT,\n dep_source TEXT NOT NULL CHECK (dep_source IN (\n 'declared',\n 'inferred_static',\n 'inferred_coinstall'\n )),\n confidence REAL CHECK (confidence IS NULL OR (confidence >= 0.0 AND confidence <= 1.0)),\n metadata TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_skill_deps_skill ON skill_dependencies(skill_id);\nCREATE INDEX IF NOT EXISTS idx_skill_deps_target ON skill_dependencies(dep_target);\nCREATE INDEX IF NOT EXISTS idx_skill_deps_type ON skill_dependencies(dep_type);\nCREATE INDEX IF NOT EXISTS idx_skill_deps_source ON skill_dependencies(dep_source);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_skill_deps_unique\n ON skill_dependencies(skill_id, dep_type, dep_target, dep_source);\n";
|
|
18
|
+
//# sourceMappingURL=v10-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v10-dependencies.d.ts","sourceRoot":"","sources":["../../../../src/db/migrations/v10-dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,usCAgC7B,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Migration v10 — skill_dependencies table
|
|
3
|
+
* @module @skillsmith/core/db/migrations/v10-dependencies
|
|
4
|
+
* @see Architecture: ../research/skill-dependency-intelligence-architecture.md §4
|
|
5
|
+
*
|
|
6
|
+
* Stores declared and inferred dependency records for skills.
|
|
7
|
+
* Three signal sources: author declaration, static mcp__* analysis,
|
|
8
|
+
* and co-install behavioral inference.
|
|
9
|
+
*
|
|
10
|
+
* Design notes:
|
|
11
|
+
* - No FK on skill_id — soft reference, dep records survive skill removal
|
|
12
|
+
* (matches SkillVersionRepository pattern)
|
|
13
|
+
* - dep_source distinguishes declared vs inferred for confidence filtering
|
|
14
|
+
* - Unique index on (skill_id, dep_type, dep_target, dep_source) prevents
|
|
15
|
+
* duplicate rows from repeated inference runs
|
|
16
|
+
*/
|
|
17
|
+
export const MIGRATION_V10_SQL = `
|
|
18
|
+
CREATE TABLE IF NOT EXISTS skill_dependencies (
|
|
19
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
20
|
+
skill_id TEXT NOT NULL,
|
|
21
|
+
dep_type TEXT NOT NULL CHECK (dep_type IN (
|
|
22
|
+
'skill_hard', 'skill_soft', 'skill_peer',
|
|
23
|
+
'mcp_server',
|
|
24
|
+
'model_minimum', 'model_capability',
|
|
25
|
+
'env_tool', 'env_os', 'env_node',
|
|
26
|
+
'cli_version',
|
|
27
|
+
'conflict'
|
|
28
|
+
)),
|
|
29
|
+
dep_target TEXT NOT NULL,
|
|
30
|
+
dep_version TEXT,
|
|
31
|
+
dep_source TEXT NOT NULL CHECK (dep_source IN (
|
|
32
|
+
'declared',
|
|
33
|
+
'inferred_static',
|
|
34
|
+
'inferred_coinstall'
|
|
35
|
+
)),
|
|
36
|
+
confidence REAL CHECK (confidence IS NULL OR (confidence >= 0.0 AND confidence <= 1.0)),
|
|
37
|
+
metadata TEXT,
|
|
38
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
39
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_skill_deps_skill ON skill_dependencies(skill_id);
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_skill_deps_target ON skill_dependencies(dep_target);
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_skill_deps_type ON skill_dependencies(dep_type);
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_skill_deps_source ON skill_dependencies(dep_source);
|
|
46
|
+
|
|
47
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_skill_deps_unique
|
|
48
|
+
ON skill_dependencies(skill_id, dep_type, dep_target, dep_source);
|
|
49
|
+
`;
|
|
50
|
+
//# sourceMappingURL=v10-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v10-dependencies.js","sourceRoot":"","sources":["../../../../src/db/migrations/v10-dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgChC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Migration v2 — Add missing columns for Phase 5 imported databases
|
|
3
|
+
* @module @skillsmith/core/db/migrations/v2-phase5-columns
|
|
4
|
+
* @see SMI-974
|
|
5
|
+
*/
|
|
6
|
+
export declare const MIGRATION_V2_SQL = "\n-- Add updated_at column if missing (for Phase 5 imported databases)\nALTER TABLE skills ADD COLUMN updated_at TEXT NOT NULL DEFAULT (datetime('now'));\n\n-- Add source column if missing (from import scripts)\nALTER TABLE skills ADD COLUMN source TEXT;\n\n-- Add stars column if missing (from import scripts)\nALTER TABLE skills ADD COLUMN stars INTEGER;\n";
|
|
7
|
+
//# sourceMappingURL=v2-phase5-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2-phase5-columns.d.ts","sourceRoot":"","sources":["../../../../src/db/migrations/v2-phase5-columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,2WAS5B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Migration v2 — Add missing columns for Phase 5 imported databases
|
|
3
|
+
* @module @skillsmith/core/db/migrations/v2-phase5-columns
|
|
4
|
+
* @see SMI-974
|
|
5
|
+
*/
|
|
6
|
+
export const MIGRATION_V2_SQL = `
|
|
7
|
+
-- Add updated_at column if missing (for Phase 5 imported databases)
|
|
8
|
+
ALTER TABLE skills ADD COLUMN updated_at TEXT NOT NULL DEFAULT (datetime('now'));
|
|
9
|
+
|
|
10
|
+
-- Add source column if missing (from import scripts)
|
|
11
|
+
ALTER TABLE skills ADD COLUMN source TEXT;
|
|
12
|
+
|
|
13
|
+
-- Add stars column if missing (from import scripts)
|
|
14
|
+
ALTER TABLE skills ADD COLUMN stars INTEGER;
|
|
15
|
+
`;
|
|
16
|
+
//# sourceMappingURL=v2-phase5-columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2-phase5-columns.js","sourceRoot":"","sources":["../../../../src/db/migrations/v2-phase5-columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;CAS/B,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Migration v3 — Registry sync tables for local-to-live synchronization
|
|
3
|
+
* @module @skillsmith/core/db/migrations/v3-sync-tables
|
|
4
|
+
*/
|
|
5
|
+
export declare const MIGRATION_V3_SQL = "\n-- Sync configuration table (singleton pattern)\nCREATE TABLE IF NOT EXISTS sync_config (\n id TEXT PRIMARY KEY DEFAULT 'default',\n enabled INTEGER NOT NULL DEFAULT 1,\n frequency TEXT NOT NULL DEFAULT 'daily' CHECK(frequency IN ('daily', 'weekly')),\n interval_ms INTEGER NOT NULL DEFAULT 86400000,\n last_sync_at TEXT,\n next_sync_at TEXT,\n last_sync_count INTEGER DEFAULT 0,\n last_sync_error TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Initialize default config if empty\nINSERT OR IGNORE INTO sync_config (id) VALUES ('default');\n\n-- Sync history table for tracking sync runs\nCREATE TABLE IF NOT EXISTS sync_history (\n id TEXT PRIMARY KEY,\n started_at TEXT NOT NULL,\n completed_at TEXT,\n status TEXT NOT NULL DEFAULT 'running' CHECK(status IN ('running', 'success', 'failed', 'partial')),\n skills_added INTEGER DEFAULT 0,\n skills_updated INTEGER DEFAULT 0,\n skills_unchanged INTEGER DEFAULT 0,\n error_message TEXT,\n duration_ms INTEGER,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Index for efficient history queries\nCREATE INDEX IF NOT EXISTS idx_sync_history_started ON sync_history(started_at DESC);\nCREATE INDEX IF NOT EXISTS idx_sync_history_status ON sync_history(status);\n";
|
|
6
|
+
//# sourceMappingURL=v3-sync-tables.d.ts.map
|