@skillsmith/core 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +1 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/db/schema.d.ts +1 -1
  4. package/dist/src/db/schema.d.ts.map +1 -1
  5. package/dist/src/db/schema.js +41 -1
  6. package/dist/src/db/schema.js.map +1 -1
  7. package/dist/src/index.d.ts +1 -0
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +2 -0
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/repositories/SyncConfigRepository.d.ts +91 -0
  12. package/dist/src/repositories/SyncConfigRepository.d.ts.map +1 -0
  13. package/dist/src/repositories/SyncConfigRepository.js +202 -0
  14. package/dist/src/repositories/SyncConfigRepository.js.map +1 -0
  15. package/dist/src/repositories/SyncHistoryRepository.d.ts +104 -0
  16. package/dist/src/repositories/SyncHistoryRepository.d.ts.map +1 -0
  17. package/dist/src/repositories/SyncHistoryRepository.js +235 -0
  18. package/dist/src/repositories/SyncHistoryRepository.js.map +1 -0
  19. package/dist/src/scripts/github-import/github-client.d.ts +24 -0
  20. package/dist/src/scripts/github-import/github-client.d.ts.map +1 -1
  21. package/dist/src/scripts/github-import/github-client.js +103 -0
  22. package/dist/src/scripts/github-import/github-client.js.map +1 -1
  23. package/dist/src/scripts/github-import/index.js +3 -10
  24. package/dist/src/scripts/github-import/index.js.map +1 -1
  25. package/dist/src/scripts/merge-skills.d.ts +56 -0
  26. package/dist/src/scripts/merge-skills.d.ts.map +1 -0
  27. package/dist/src/scripts/merge-skills.js +411 -0
  28. package/dist/src/scripts/merge-skills.js.map +1 -0
  29. package/dist/src/scripts/skill-scanner/index.d.ts +9 -2
  30. package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -1
  31. package/dist/src/scripts/skill-scanner/index.js +98 -7
  32. package/dist/src/scripts/skill-scanner/index.js.map +1 -1
  33. package/dist/src/scripts/skill-scanner/logger.d.ts +51 -0
  34. package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -1
  35. package/dist/src/scripts/skill-scanner/logger.js +255 -1
  36. package/dist/src/scripts/skill-scanner/logger.js.map +1 -1
  37. package/dist/src/scripts/skill-scanner/reporter.d.ts +1 -1
  38. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
  39. package/dist/src/scripts/skill-scanner/reporter.js +67 -15
  40. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
  41. package/dist/src/scripts/skill-scanner/scanner.d.ts +5 -2
  42. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
  43. package/dist/src/scripts/skill-scanner/scanner.js +156 -39
  44. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
  45. package/dist/src/scripts/skill-scanner/types.d.ts +44 -0
  46. package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -1
  47. package/dist/src/sync/BackgroundSyncService.d.ts +90 -0
  48. package/dist/src/sync/BackgroundSyncService.d.ts.map +1 -0
  49. package/dist/src/sync/BackgroundSyncService.js +214 -0
  50. package/dist/src/sync/BackgroundSyncService.js.map +1 -0
  51. package/dist/src/sync/SyncEngine.d.ts +76 -0
  52. package/dist/src/sync/SyncEngine.d.ts.map +1 -0
  53. package/dist/src/sync/SyncEngine.js +272 -0
  54. package/dist/src/sync/SyncEngine.js.map +1 -0
  55. package/dist/src/sync/index.d.ts +11 -0
  56. package/dist/src/sync/index.d.ts.map +1 -0
  57. package/dist/src/sync/index.js +14 -0
  58. package/dist/src/sync/index.js.map +1 -0
  59. package/dist/tests/sync/SyncConfigRepository.test.d.ts +7 -0
  60. package/dist/tests/sync/SyncConfigRepository.test.d.ts.map +1 -0
  61. package/dist/tests/sync/SyncConfigRepository.test.js +154 -0
  62. package/dist/tests/sync/SyncConfigRepository.test.js.map +1 -0
  63. package/dist/tests/sync/SyncEngine.test.d.ts +7 -0
  64. package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -0
  65. package/dist/tests/sync/SyncEngine.test.js +298 -0
  66. package/dist/tests/sync/SyncEngine.test.js.map +1 -0
  67. package/dist/tests/sync/SyncHistoryRepository.test.d.ts +7 -0
  68. package/dist/tests/sync/SyncHistoryRepository.test.d.ts.map +1 -0
  69. package/dist/tests/sync/SyncHistoryRepository.test.js +220 -0
  70. package/dist/tests/sync/SyncHistoryRepository.test.js.map +1 -0
  71. package/package.json +1 -1
@@ -5,10 +5,10 @@
5
5
  */
6
6
  import * as path from 'path';
7
7
  import { SecurityScanner } from '../../security/index.js';
8
- import { shouldQuarantine, DEFAULT_TRUST_CONFIG } from './trust-scorer.js';
9
- import { determineSeverityCategory } from './categorizer.js';
8
+ import { shouldQuarantine, getPassFailStats, calculateAverageRiskScore, calculateMaxRiskScore, DEFAULT_TRUST_CONFIG, } from './trust-scorer.js';
9
+ import { determineSeverityCategory, countBySeverity } from './categorizer.js';
10
10
  import { extractScannableContent, readImportedSkills, ensureDirectoryExists, fileExists, writeJsonFile, } from './file-scanner.js';
11
- import { formatDuration, logHeader, logFindings, logProgress, logCompletion, logFileOutput, } from './logger.js';
11
+ import { formatDuration, logHeader, logFindings, logProgress, logCompletion, logFileOutput, logScanStart, logProgressBar, clearProgressLine, logQuarantineTable, logCategorizedResults, } from './logger.js';
12
12
  import { logSummary, generateSecurityReport, generateQuarantineOutput, generateSafeSkillsOutput, logRecommendations, } from './reporter.js';
13
13
  /** Default scanner configuration */
14
14
  export const DEFAULT_CONFIG = {
@@ -44,44 +44,116 @@ export function scanSkill(skill, scanner, config = DEFAULT_TRUST_CONFIG) {
44
44
  scanTimestamp: new Date().toISOString(),
45
45
  };
46
46
  }
47
+ /** Default CLI options */
48
+ export const DEFAULT_CLI_OPTIONS = {
49
+ json: false,
50
+ verbose: false,
51
+ quiet: false,
52
+ inputPath: DEFAULT_CONFIG.defaultInput,
53
+ };
54
+ /**
55
+ * Generate JSON output for machine-readable format
56
+ */
57
+ function generateJsonOutput(results, config, durationMs) {
58
+ const { passed, quarantined: quarantinedCount } = getPassFailStats(results);
59
+ const bySeverity = countBySeverity(results);
60
+ const avgRiskScore = calculateAverageRiskScore(results);
61
+ const maxRiskScore = calculateMaxRiskScore(results);
62
+ const quarantinedSkills = results
63
+ .filter((r) => r.isQuarantined)
64
+ .sort((a, b) => b.scanReport.riskScore - a.scanReport.riskScore)
65
+ .map((r) => ({
66
+ skillId: r.skillId,
67
+ riskScore: r.scanReport.riskScore,
68
+ severity: r.severityCategory,
69
+ topFinding: r.scanReport.findings.length > 0
70
+ ? `${r.scanReport.findings[0].type}: ${r.scanReport.findings[0].message}`
71
+ : 'N/A',
72
+ }));
73
+ const safeSkills = results
74
+ .filter((r) => !r.isQuarantined)
75
+ .sort((a, b) => a.scanReport.riskScore - b.scanReport.riskScore)
76
+ .map((r) => ({
77
+ skillId: r.skillId,
78
+ riskScore: r.scanReport.riskScore,
79
+ }));
80
+ return {
81
+ success: true,
82
+ summary: {
83
+ totalScanned: results.length,
84
+ passed,
85
+ quarantined: quarantinedCount,
86
+ bySeverity,
87
+ averageRiskScore: Math.round(avgRiskScore * 100) / 100,
88
+ maxRiskScore,
89
+ duration: Math.round(durationMs),
90
+ skillsPerSecond: Math.round((results.length / durationMs) * 1000 * 10) / 10,
91
+ },
92
+ quarantined: quarantinedSkills,
93
+ safe: safeSkills,
94
+ outputFiles: {
95
+ report: path.join(config.outputDir, 'security-report.json'),
96
+ quarantine: path.join(config.outputDir, 'quarantine-skills.json'),
97
+ safe: path.join(config.outputDir, 'safe-skills.json'),
98
+ },
99
+ };
100
+ }
47
101
  /**
48
102
  * Scan all imported skills
49
103
  *
50
104
  * @param inputPath - Path to the imported skills JSON file
51
105
  * @param config - Scanner configuration
106
+ * @param cliOptions - CLI options for output control
52
107
  */
53
- export async function scanImportedSkills(inputPath, config = DEFAULT_CONFIG) {
108
+ export async function scanImportedSkills(inputPath, config = DEFAULT_CONFIG, cliOptions = {}) {
109
+ const options = { ...DEFAULT_CLI_OPTIONS, ...cliOptions, inputPath };
54
110
  const startTime = performance.now();
55
- logHeader('SMI-864: Security Scanner for Imported Skills');
56
- console.log(`Input file: ${inputPath}`);
57
- console.log(`Output directory: ${config.outputDir}`);
58
- console.log();
59
- // Validate input file exists
111
+ // Validate input file exists (always check, regardless of output mode)
60
112
  if (!fileExists(inputPath)) {
61
- console.error(`Error: Input file not found: ${inputPath}`);
62
- console.error('Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [path-to-imported-skills.json]');
113
+ if (options.json) {
114
+ console.log(JSON.stringify({ success: false, error: `Input file not found: ${inputPath}` }));
115
+ }
116
+ else {
117
+ console.error(`Error: Input file not found: ${inputPath}`);
118
+ console.error('Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [options] [path-to-imported-skills.json]');
119
+ console.error('\nOptions:');
120
+ console.error(' --json Output results in JSON format (machine-readable)');
121
+ console.error(' --verbose Show detailed output');
122
+ console.error(' --quiet Minimal output');
123
+ }
63
124
  process.exit(1);
64
125
  }
65
126
  // Ensure output directory exists
66
127
  ensureDirectoryExists(config.outputDir);
67
128
  // Read and parse imported skills
68
- console.log('Reading imported skills...');
69
129
  let skills;
70
130
  try {
71
131
  skills = await readImportedSkills(inputPath);
72
132
  }
73
133
  catch (error) {
74
- console.error(`Error reading/parsing input file: ${error.message}`);
134
+ if (options.json) {
135
+ console.log(JSON.stringify({
136
+ success: false,
137
+ error: `Failed to read input: ${error.message}`,
138
+ }));
139
+ }
140
+ else {
141
+ console.error(`Error reading/parsing input file: ${error.message}`);
142
+ }
75
143
  process.exit(1);
76
144
  }
77
- console.log(`Found ${skills.length} skills to scan\n`);
145
+ // For JSON output, skip all console logging until the end
146
+ if (!options.json && !options.quiet) {
147
+ logScanStart(skills.length, inputPath, config.outputDir);
148
+ }
78
149
  // Initialize scanner
79
150
  const scanner = new SecurityScanner(config.scannerOptions);
80
151
  // Scan all skills
81
152
  const results = [];
82
153
  const allFindings = [];
83
154
  let processedCount = 0;
84
- console.log('Scanning skills...');
155
+ // Use progress bar for interactive output
156
+ const useProgressBar = !options.json && !options.quiet && process.stdout.isTTY;
85
157
  for (const skill of skills) {
86
158
  processedCount++;
87
159
  const result = scanSkill(skill, scanner, config.trustConfig);
@@ -91,50 +163,95 @@ export async function scanImportedSkills(inputPath, config = DEFAULT_CONFIG) {
91
163
  allFindings.push({ ...finding, skillId: skill.id });
92
164
  }
93
165
  // Log progress
94
- if (processedCount % config.progressInterval === 0) {
166
+ if (useProgressBar) {
167
+ logProgressBar(processedCount, skills.length, true);
168
+ }
169
+ else if (!options.json && !options.quiet && processedCount % config.progressInterval === 0) {
95
170
  logProgress(processedCount, skills.length);
96
171
  }
97
172
  }
98
- logCompletion(processedCount, skills.length);
99
- // Log critical and high findings
173
+ // Clear progress bar line
174
+ if (useProgressBar) {
175
+ clearProgressLine();
176
+ }
177
+ if (!options.json && !options.quiet) {
178
+ logCompletion(processedCount, skills.length);
179
+ }
180
+ // Log critical and high findings (if not JSON mode)
100
181
  const criticalFindings = allFindings.filter((f) => f.severity === 'critical');
101
182
  const highFindings = allFindings.filter((f) => f.severity === 'high');
102
- logFindings(criticalFindings, 20, 'CRITICAL FINDINGS');
103
- logFindings(highFindings, 10, 'HIGH SEVERITY FINDINGS');
183
+ if (!options.json && !options.quiet) {
184
+ logFindings(criticalFindings, 20, 'CRITICAL FINDINGS');
185
+ logFindings(highFindings, 10, 'HIGH SEVERITY FINDINGS');
186
+ }
187
+ // Print categorized results
188
+ if (!options.json && !options.quiet) {
189
+ logCategorizedResults(results);
190
+ }
191
+ // Print quarantine table (if not JSON mode)
192
+ if (!options.json && !options.quiet) {
193
+ logHeader('QUARANTINED SKILLS');
194
+ logQuarantineTable(results);
195
+ }
104
196
  // Print summary
105
- logSummary(results);
197
+ if (!options.json && !options.quiet) {
198
+ logSummary(results);
199
+ }
106
200
  // Generate output files
107
- console.log('Generating output files...\n');
201
+ if (!options.json && !options.quiet) {
202
+ console.log('Generating output files...\n');
203
+ }
108
204
  // 1. Full security report
109
205
  const securityReport = generateSecurityReport(results, allFindings, inputPath);
110
206
  const reportPath = path.join(config.outputDir, 'security-report.json');
111
207
  await writeJsonFile(reportPath, securityReport);
112
- logFileOutput('security-report.json', results.length);
208
+ if (!options.json && !options.quiet) {
209
+ logFileOutput('security-report.json', results.length);
210
+ }
113
211
  // 2. Quarantine list
114
212
  const quarantineOutput = generateQuarantineOutput(results);
115
213
  const quarantinePath = path.join(config.outputDir, 'quarantine-skills.json');
116
214
  await writeJsonFile(quarantinePath, quarantineOutput);
117
- logFileOutput('quarantine-skills.json', quarantineOutput.count, 'blocked');
215
+ if (!options.json && !options.quiet) {
216
+ logFileOutput('quarantine-skills.json', quarantineOutput.count, 'blocked');
217
+ }
118
218
  // 3. Safe skills list
119
219
  const safeOutput = generateSafeSkillsOutput(results);
120
220
  const safePath = path.join(config.outputDir, 'safe-skills.json');
121
221
  await writeJsonFile(safePath, safeOutput);
122
- logFileOutput('safe-skills.json', safeOutput.count, 'approved');
222
+ if (!options.json && !options.quiet) {
223
+ logFileOutput('safe-skills.json', safeOutput.count, 'approved');
224
+ }
123
225
  // Final timing
124
226
  const endTime = performance.now();
125
- const duration = formatDuration(endTime - startTime);
126
- console.log('\n' + '='.repeat(60));
127
- console.log(' SCAN COMPLETE');
128
- console.log('='.repeat(60));
129
- console.log(` Duration: ${duration}`);
130
- console.log(` Skills per second: ${((results.length / (endTime - startTime)) * 1000).toFixed(1)}`);
131
- console.log();
132
- console.log(' Output files:');
133
- console.log(` - ${reportPath}`);
134
- console.log(` - ${quarantinePath}`);
135
- console.log(` - ${safePath}`);
136
- console.log('='.repeat(60) + '\n');
137
- // Recommendations
138
- logRecommendations(results, criticalFindings.length);
227
+ const durationMs = endTime - startTime;
228
+ const duration = formatDuration(durationMs);
229
+ // JSON output mode
230
+ if (options.json) {
231
+ const jsonOutput = generateJsonOutput(results, config, durationMs);
232
+ console.log(JSON.stringify(jsonOutput, null, 2));
233
+ return;
234
+ }
235
+ // Human-readable completion output
236
+ if (!options.quiet) {
237
+ const border = '═'.repeat(60);
238
+ console.log();
239
+ console.log('\x1b[36m' + border + '\x1b[0m');
240
+ console.log('\x1b[1m SCAN COMPLETE\x1b[0m');
241
+ console.log('\x1b[36m' + border + '\x1b[0m');
242
+ console.log();
243
+ console.log(` Duration: ${duration}`);
244
+ console.log(` Skills per second: ${((results.length / durationMs) * 1000).toFixed(1)}`);
245
+ console.log();
246
+ console.log(' Output files:');
247
+ console.log(` - ${reportPath}`);
248
+ console.log(` - ${quarantinePath}`);
249
+ console.log(` - ${safePath}`);
250
+ console.log();
251
+ console.log('\x1b[36m' + border + '\x1b[0m');
252
+ console.log();
253
+ // Recommendations
254
+ logRecommendations(results, criticalFindings.length);
255
+ }
139
256
  }
140
257
  //# sourceMappingURL=scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/scanner.ts"],"names":[],"mappings":"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"}
@@ -94,5 +94,49 @@ export interface SafeSkillsOutput {
94
94
  export interface FindingWithContext extends SecurityFinding {
95
95
  skillId: string;
96
96
  }
97
+ /**
98
+ * CLI options for the scanner
99
+ */
100
+ export interface ScannerCliOptions {
101
+ /** Output JSON format for machine-readable output */
102
+ json: boolean;
103
+ /** Show verbose output */
104
+ verbose: boolean;
105
+ /** Quiet mode - minimal output */
106
+ quiet: boolean;
107
+ /** Input file path */
108
+ inputPath: string;
109
+ }
110
+ /**
111
+ * JSON output structure for --json flag
112
+ */
113
+ export interface JsonOutput {
114
+ success: boolean;
115
+ summary: {
116
+ totalScanned: number;
117
+ passed: number;
118
+ quarantined: number;
119
+ bySeverity: Record<SeverityCategory, number>;
120
+ averageRiskScore: number;
121
+ maxRiskScore: number;
122
+ duration: number;
123
+ skillsPerSecond: number;
124
+ };
125
+ quarantined: Array<{
126
+ skillId: string;
127
+ riskScore: number;
128
+ severity: SeverityCategory;
129
+ topFinding: string;
130
+ }>;
131
+ safe: Array<{
132
+ skillId: string;
133
+ riskScore: number;
134
+ }>;
135
+ outputFiles: {
136
+ report: string;
137
+ quarantine: string;
138
+ safe: string;
139
+ };
140
+ }
97
141
  export type { ScanReport, SecurityFinding, SecuritySeverity };
98
142
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE5F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;AAErE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,MAAM,CAAA;QACd,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;QAC5C,gBAAgB,EAAE,MAAM,CAAA;QACxB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,WAAW,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,gBAAgB,CAAA;KAC3B,CAAC,CAAA;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,gBAAgB,EAAE,gBAAgB,CAAA;QAClC,WAAW,EAAE,MAAM,EAAE,CAAA;KACtB,CAAC,CAAA;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;KAClB,CAAC,CAAA;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,OAAO,EAAE,MAAM,CAAA;CAChB;AAGD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * BackgroundSyncService - Session-based automatic sync
3
+ *
4
+ * Runs sync operations during active MCP server sessions based on
5
+ * user-configured frequency (daily/weekly). Uses non-blocking timers
6
+ * that don't prevent process exit.
7
+ */
8
+ import type { SyncEngine, SyncResult } from './SyncEngine.js';
9
+ import type { SyncConfigRepository } from '../repositories/SyncConfigRepository.js';
10
+ /**
11
+ * Background sync service options
12
+ */
13
+ export interface BackgroundSyncOptions {
14
+ /** Check interval in ms (default: 60000 = 1 minute) */
15
+ checkIntervalMs?: number;
16
+ /** Run sync immediately on start if due */
17
+ syncOnStart?: boolean;
18
+ /** Callback when sync completes */
19
+ onSyncComplete?: (result: SyncResult) => void;
20
+ /** Callback when sync fails */
21
+ onSyncError?: (error: Error) => void;
22
+ /** Enable debug logging */
23
+ debug?: boolean;
24
+ }
25
+ /**
26
+ * Service state
27
+ */
28
+ export interface BackgroundSyncState {
29
+ isStarted: boolean;
30
+ isRunning: boolean;
31
+ lastResult: SyncResult | null;
32
+ lastError: Error | null;
33
+ checksPerformed: number;
34
+ syncsTriggered: number;
35
+ }
36
+ /**
37
+ * Background sync service for automatic registry synchronization
38
+ */
39
+ export declare class BackgroundSyncService {
40
+ private syncEngine;
41
+ private configRepo;
42
+ private options;
43
+ private timer;
44
+ private isRunning;
45
+ private isStopped;
46
+ private state;
47
+ constructor(syncEngine: SyncEngine, configRepo: SyncConfigRepository, options?: BackgroundSyncOptions);
48
+ private log;
49
+ /**
50
+ * Start the background sync service
51
+ */
52
+ start(): void;
53
+ /**
54
+ * Stop the background sync service
55
+ */
56
+ stop(): void;
57
+ /**
58
+ * Check if sync should run now
59
+ */
60
+ private shouldSyncNow;
61
+ /**
62
+ * Check if sync is due and trigger if needed
63
+ */
64
+ private checkAndSync;
65
+ /**
66
+ * Trigger a sync operation
67
+ */
68
+ private triggerSync;
69
+ /**
70
+ * Manually trigger a sync (for testing or manual intervention)
71
+ */
72
+ manualSync(): Promise<SyncResult>;
73
+ /**
74
+ * Get current service state
75
+ */
76
+ getState(): BackgroundSyncState;
77
+ /**
78
+ * Check if service is actively running syncs
79
+ */
80
+ isSyncRunning(): boolean;
81
+ /**
82
+ * Check if service is started
83
+ */
84
+ isServiceStarted(): boolean;
85
+ }
86
+ /**
87
+ * Create and start a background sync service
88
+ */
89
+ export declare function createBackgroundSyncService(syncEngine: SyncEngine, configRepo: SyncConfigRepository, options?: BackgroundSyncOptions): BackgroundSyncService;
90
+ //# sourceMappingURL=BackgroundSyncService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackgroundSyncService.d.ts","sourceRoot":"","sources":["../../../src/sync/BackgroundSyncService.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAA;AAEnF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mCAAmC;IACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAC7C,+BAA+B;IAC/B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACpC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;IAC7B,SAAS,EAAE,KAAK,GAAG,IAAI,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,OAAO,CAAiC;IAEhD,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,KAAK,CAOZ;gBAGC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,oBAAoB,EAChC,OAAO,GAAE,qBAA0B;IAarC,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,KAAK,IAAI,IAAI;IAmCb;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,WAAW;IAqCzB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IA4BvC;;OAEG;IACH,QAAQ,IAAI,mBAAmB;IAI/B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,gBAAgB,IAAI,OAAO;CAG5B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,oBAAoB,EAChC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,qBAAqB,CAIvB"}