@skillsmith/cli 0.2.7 → 0.3.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.
- package/README.md +3 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/author.d.ts +16 -2
- package/dist/src/commands/author.d.ts.map +1 -1
- package/dist/src/commands/author.js +96 -51
- package/dist/src/commands/author.js.map +1 -1
- package/dist/src/commands/index.d.ts +1 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/sync.d.ts +21 -0
- package/dist/src/commands/sync.d.ts.map +1 -0
- package/dist/src/commands/sync.js +413 -0
- package/dist/src/commands/sync.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -2
- package/dist/src/index.js.map +1 -1
- package/dist/tests/author.test.js +85 -0
- package/dist/tests/author.test.js.map +1 -1
- package/dist/tests/e2e/author.e2e.test.js +341 -21
- package/dist/tests/e2e/author.e2e.test.js.map +1 -1
- package/dist/tests/e2e/utils/index.d.ts +4 -0
- package/dist/tests/e2e/utils/index.d.ts.map +1 -1
- package/dist/tests/e2e/utils/index.js +4 -0
- package/dist/tests/e2e/utils/index.js.map +1 -1
- package/dist/tests/e2e/utils/mock-github.d.ts +23 -0
- package/dist/tests/e2e/utils/mock-github.d.ts.map +1 -0
- package/dist/tests/e2e/utils/mock-github.js +60 -0
- package/dist/tests/e2e/utils/mock-github.js.map +1 -0
- package/dist/tests/e2e/utils/mock-prompts.d.ts +19 -0
- package/dist/tests/e2e/utils/mock-prompts.d.ts.map +1 -0
- package/dist/tests/e2e/utils/mock-prompts.js +48 -0
- package/dist/tests/e2e/utils/mock-prompts.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Command - Registry synchronization CLI
|
|
3
|
+
*
|
|
4
|
+
* Provides commands for syncing the local skill database with the
|
|
5
|
+
* live Skillsmith registry.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* skillsmith sync # Run sync (differential)
|
|
9
|
+
* skillsmith sync --force # Run full sync
|
|
10
|
+
* skillsmith sync --dry-run # Preview what would sync
|
|
11
|
+
* skillsmith sync status # Show sync status
|
|
12
|
+
* skillsmith sync history # Show sync history
|
|
13
|
+
* skillsmith sync config # Configure auto-sync
|
|
14
|
+
*/
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
import chalk from 'chalk';
|
|
17
|
+
import ora from 'ora';
|
|
18
|
+
import Table from 'cli-table3';
|
|
19
|
+
import { openDatabase, SkillRepository, createApiClient, SyncConfigRepository, SyncHistoryRepository, SyncEngine, } from '@skillsmith/core';
|
|
20
|
+
import { DEFAULT_DB_PATH } from '../config.js';
|
|
21
|
+
import { sanitizeError } from '../utils/sanitize.js';
|
|
22
|
+
/**
|
|
23
|
+
* Format duration in human-readable form
|
|
24
|
+
*/
|
|
25
|
+
function formatDuration(ms) {
|
|
26
|
+
if (ms < 1000)
|
|
27
|
+
return `${ms}ms`;
|
|
28
|
+
if (ms < 60000)
|
|
29
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
30
|
+
return `${(ms / 60000).toFixed(1)}m`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Format date for display
|
|
34
|
+
*/
|
|
35
|
+
function formatDate(isoString) {
|
|
36
|
+
if (!isoString)
|
|
37
|
+
return chalk.dim('Never');
|
|
38
|
+
const date = new Date(isoString);
|
|
39
|
+
return date.toLocaleString();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Format time until next sync
|
|
43
|
+
*/
|
|
44
|
+
function formatTimeUntil(isoString) {
|
|
45
|
+
if (!isoString)
|
|
46
|
+
return chalk.dim('N/A');
|
|
47
|
+
const target = new Date(isoString);
|
|
48
|
+
const now = new Date();
|
|
49
|
+
const diffMs = target.getTime() - now.getTime();
|
|
50
|
+
if (diffMs <= 0)
|
|
51
|
+
return chalk.yellow('Due now');
|
|
52
|
+
const hours = Math.floor(diffMs / 3600000);
|
|
53
|
+
const minutes = Math.floor((diffMs % 3600000) / 60000);
|
|
54
|
+
if (hours > 24) {
|
|
55
|
+
const days = Math.floor(hours / 24);
|
|
56
|
+
return `${days}d ${hours % 24}h`;
|
|
57
|
+
}
|
|
58
|
+
if (hours > 0) {
|
|
59
|
+
return `${hours}h ${minutes}m`;
|
|
60
|
+
}
|
|
61
|
+
return `${minutes}m`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Run sync operation
|
|
65
|
+
*/
|
|
66
|
+
async function runSync(options) {
|
|
67
|
+
const spinner = ora();
|
|
68
|
+
try {
|
|
69
|
+
spinner.start('Opening database...');
|
|
70
|
+
const db = openDatabase(options.dbPath);
|
|
71
|
+
try {
|
|
72
|
+
const skillRepo = new SkillRepository(db);
|
|
73
|
+
const syncConfigRepo = new SyncConfigRepository(db);
|
|
74
|
+
const syncHistoryRepo = new SyncHistoryRepository(db);
|
|
75
|
+
const apiClient = createApiClient();
|
|
76
|
+
const syncEngine = new SyncEngine(apiClient, skillRepo, syncConfigRepo, syncHistoryRepo);
|
|
77
|
+
spinner.text = options.force ? 'Starting full sync...' : 'Starting differential sync...';
|
|
78
|
+
const result = await syncEngine.sync({
|
|
79
|
+
force: options.force,
|
|
80
|
+
dryRun: options.dryRun,
|
|
81
|
+
onProgress: (progress) => {
|
|
82
|
+
switch (progress.phase) {
|
|
83
|
+
case 'connecting':
|
|
84
|
+
spinner.text = 'Checking API health...';
|
|
85
|
+
break;
|
|
86
|
+
case 'fetching':
|
|
87
|
+
spinner.text = `Fetching skills... (${progress.current} fetched)`;
|
|
88
|
+
break;
|
|
89
|
+
case 'comparing':
|
|
90
|
+
spinner.text = `Comparing ${progress.total} skills with local database...`;
|
|
91
|
+
break;
|
|
92
|
+
case 'upserting':
|
|
93
|
+
spinner.text = `Syncing skill ${progress.current}/${progress.total}...`;
|
|
94
|
+
break;
|
|
95
|
+
case 'complete':
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
if (options.json) {
|
|
101
|
+
spinner.stop();
|
|
102
|
+
console.log(JSON.stringify(result, null, 2));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (result.success) {
|
|
106
|
+
spinner.succeed(options.dryRun
|
|
107
|
+
? chalk.yellow('Dry run complete (no changes made)')
|
|
108
|
+
: chalk.green('Sync completed successfully'));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
spinner.warn(chalk.yellow('Sync completed with errors'));
|
|
112
|
+
}
|
|
113
|
+
// Display results
|
|
114
|
+
console.log();
|
|
115
|
+
console.log(chalk.bold('Results:'));
|
|
116
|
+
console.log(` ${chalk.green('+')} Added: ${result.skillsAdded}`);
|
|
117
|
+
console.log(` ${chalk.blue('~')} Updated: ${result.skillsUpdated}`);
|
|
118
|
+
console.log(` ${chalk.dim('=')} Unchanged: ${result.skillsUnchanged}`);
|
|
119
|
+
console.log(` ${chalk.cyan('Σ')} Total: ${result.totalProcessed}`);
|
|
120
|
+
console.log(` ${chalk.dim('⏱')} Duration: ${formatDuration(result.durationMs)}`);
|
|
121
|
+
if (result.errors.length > 0) {
|
|
122
|
+
console.log();
|
|
123
|
+
console.log(chalk.red('Errors:'));
|
|
124
|
+
for (const error of result.errors) {
|
|
125
|
+
console.log(` ${chalk.red('•')} ${error}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (options.dryRun) {
|
|
129
|
+
console.log();
|
|
130
|
+
console.log(chalk.dim('Run without --dry-run to apply these changes.'));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
db.close();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
spinner.fail('Sync failed');
|
|
139
|
+
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Show sync status
|
|
145
|
+
*/
|
|
146
|
+
async function showStatus(options) {
|
|
147
|
+
try {
|
|
148
|
+
const db = openDatabase(options.dbPath);
|
|
149
|
+
try {
|
|
150
|
+
const syncConfigRepo = new SyncConfigRepository(db);
|
|
151
|
+
const syncHistoryRepo = new SyncHistoryRepository(db);
|
|
152
|
+
const config = syncConfigRepo.getConfig();
|
|
153
|
+
const lastRun = syncHistoryRepo.getLastSuccessful();
|
|
154
|
+
const isRunning = syncHistoryRepo.isRunning();
|
|
155
|
+
const isDue = syncConfigRepo.isSyncDue();
|
|
156
|
+
const stats = syncHistoryRepo.getStats();
|
|
157
|
+
if (options.json) {
|
|
158
|
+
console.log(JSON.stringify({
|
|
159
|
+
config,
|
|
160
|
+
lastRun,
|
|
161
|
+
isRunning,
|
|
162
|
+
isDue,
|
|
163
|
+
stats,
|
|
164
|
+
}, null, 2));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
console.log(chalk.bold.blue('\n=== Sync Status ===\n'));
|
|
168
|
+
// Configuration
|
|
169
|
+
console.log(chalk.bold('Configuration:'));
|
|
170
|
+
console.log(` Auto-sync: ${config.enabled ? chalk.green('Enabled') : chalk.red('Disabled')}`);
|
|
171
|
+
console.log(` Frequency: ${chalk.cyan(config.frequency)}`);
|
|
172
|
+
console.log();
|
|
173
|
+
// Current state
|
|
174
|
+
console.log(chalk.bold('Current State:'));
|
|
175
|
+
console.log(` Last sync: ${formatDate(config.lastSyncAt)}`);
|
|
176
|
+
console.log(` Next sync: ${formatDate(config.nextSyncAt)}`);
|
|
177
|
+
console.log(` Time until: ${formatTimeUntil(config.nextSyncAt)}`);
|
|
178
|
+
console.log(` Status: ${isRunning ? chalk.yellow('Running') : isDue ? chalk.green('Due') : chalk.dim('Waiting')}`);
|
|
179
|
+
console.log();
|
|
180
|
+
// Last run details
|
|
181
|
+
if (lastRun) {
|
|
182
|
+
console.log(chalk.bold('Last Successful Run:'));
|
|
183
|
+
console.log(` Started: ${formatDate(lastRun.startedAt)}`);
|
|
184
|
+
console.log(` Duration: ${lastRun.durationMs ? formatDuration(lastRun.durationMs) : 'N/A'}`);
|
|
185
|
+
console.log(` Added: ${lastRun.skillsAdded}`);
|
|
186
|
+
console.log(` Updated: ${lastRun.skillsUpdated}`);
|
|
187
|
+
console.log(` Unchanged: ${lastRun.skillsUnchanged}`);
|
|
188
|
+
console.log();
|
|
189
|
+
}
|
|
190
|
+
// Error info
|
|
191
|
+
if (config.lastSyncError) {
|
|
192
|
+
console.log(chalk.bold.red('Last Error:'));
|
|
193
|
+
console.log(` ${config.lastSyncError}`);
|
|
194
|
+
console.log();
|
|
195
|
+
}
|
|
196
|
+
// Statistics
|
|
197
|
+
console.log(chalk.bold('Statistics:'));
|
|
198
|
+
console.log(` Total runs: ${stats.totalRuns}`);
|
|
199
|
+
console.log(` Successful: ${stats.successfulRuns}`);
|
|
200
|
+
console.log(` Failed: ${stats.failedRuns}`);
|
|
201
|
+
console.log(` Avg duration: ${stats.averageDurationMs ? formatDuration(stats.averageDurationMs) : 'N/A'}`);
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
db.close();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Show sync history
|
|
214
|
+
*/
|
|
215
|
+
async function showHistory(options) {
|
|
216
|
+
try {
|
|
217
|
+
const db = openDatabase(options.dbPath);
|
|
218
|
+
try {
|
|
219
|
+
const syncHistoryRepo = new SyncHistoryRepository(db);
|
|
220
|
+
const history = syncHistoryRepo.getHistory(options.limit);
|
|
221
|
+
if (options.json) {
|
|
222
|
+
console.log(JSON.stringify(history, null, 2));
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (history.length === 0) {
|
|
226
|
+
console.log(chalk.dim('\nNo sync history found. Run `skillsmith sync` to start syncing.\n'));
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
console.log(chalk.bold.blue('\n=== Sync History ===\n'));
|
|
230
|
+
const table = new Table({
|
|
231
|
+
head: [
|
|
232
|
+
chalk.bold('Date'),
|
|
233
|
+
chalk.bold('Status'),
|
|
234
|
+
chalk.bold('Added'),
|
|
235
|
+
chalk.bold('Updated'),
|
|
236
|
+
chalk.bold('Duration'),
|
|
237
|
+
],
|
|
238
|
+
colWidths: [22, 12, 10, 10, 12],
|
|
239
|
+
});
|
|
240
|
+
for (const entry of history) {
|
|
241
|
+
const statusColor = entry.status === 'success'
|
|
242
|
+
? chalk.green
|
|
243
|
+
: entry.status === 'failed'
|
|
244
|
+
? chalk.red
|
|
245
|
+
: entry.status === 'partial'
|
|
246
|
+
? chalk.yellow
|
|
247
|
+
: chalk.blue;
|
|
248
|
+
table.push([
|
|
249
|
+
new Date(entry.startedAt).toLocaleString(),
|
|
250
|
+
statusColor(entry.status),
|
|
251
|
+
String(entry.skillsAdded),
|
|
252
|
+
String(entry.skillsUpdated),
|
|
253
|
+
entry.durationMs ? formatDuration(entry.durationMs) : '-',
|
|
254
|
+
]);
|
|
255
|
+
}
|
|
256
|
+
console.log(table.toString());
|
|
257
|
+
if (history.some((e) => e.errorMessage)) {
|
|
258
|
+
console.log();
|
|
259
|
+
console.log(chalk.bold.red('Errors:'));
|
|
260
|
+
for (const entry of history.filter((e) => e.errorMessage)) {
|
|
261
|
+
console.log(` ${chalk.dim(new Date(entry.startedAt).toLocaleDateString())}: ${entry.errorMessage}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
db.close();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Configure sync settings
|
|
276
|
+
*/
|
|
277
|
+
async function configureSync(options) {
|
|
278
|
+
try {
|
|
279
|
+
const db = openDatabase(options.dbPath);
|
|
280
|
+
try {
|
|
281
|
+
const syncConfigRepo = new SyncConfigRepository(db);
|
|
282
|
+
// If just showing config
|
|
283
|
+
if (options.show || (!options.enable && !options.disable && !options.frequency)) {
|
|
284
|
+
const config = syncConfigRepo.getConfig();
|
|
285
|
+
if (options.json) {
|
|
286
|
+
console.log(JSON.stringify(config, null, 2));
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
console.log(chalk.bold.blue('\n=== Sync Configuration ===\n'));
|
|
290
|
+
console.log(` Auto-sync: ${config.enabled ? chalk.green('Enabled') : chalk.red('Disabled')}`);
|
|
291
|
+
console.log(` Frequency: ${chalk.cyan(config.frequency)}`);
|
|
292
|
+
console.log(` Interval: ${formatDuration(config.intervalMs)}`);
|
|
293
|
+
console.log(` Last sync: ${formatDate(config.lastSyncAt)}`);
|
|
294
|
+
console.log(` Next sync: ${formatDate(config.nextSyncAt)}`);
|
|
295
|
+
console.log();
|
|
296
|
+
console.log(chalk.dim('Use --enable/--disable to toggle auto-sync'));
|
|
297
|
+
console.log(chalk.dim('Use --frequency daily|weekly to change schedule'));
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
// Apply changes
|
|
301
|
+
if (options.enable) {
|
|
302
|
+
syncConfigRepo.enable();
|
|
303
|
+
console.log(chalk.green('✓ Auto-sync enabled'));
|
|
304
|
+
}
|
|
305
|
+
if (options.disable) {
|
|
306
|
+
syncConfigRepo.disable();
|
|
307
|
+
console.log(chalk.yellow('✓ Auto-sync disabled'));
|
|
308
|
+
}
|
|
309
|
+
if (options.frequency) {
|
|
310
|
+
const freq = options.frequency.toLowerCase();
|
|
311
|
+
if (freq !== 'daily' && freq !== 'weekly') {
|
|
312
|
+
console.error(chalk.red('Error: Frequency must be "daily" or "weekly"'));
|
|
313
|
+
process.exit(1);
|
|
314
|
+
}
|
|
315
|
+
syncConfigRepo.setFrequency(freq);
|
|
316
|
+
console.log(chalk.green(`✓ Frequency set to ${freq}`));
|
|
317
|
+
}
|
|
318
|
+
// Show updated config
|
|
319
|
+
const config = syncConfigRepo.getConfig();
|
|
320
|
+
console.log();
|
|
321
|
+
console.log(chalk.dim('Current settings:'));
|
|
322
|
+
console.log(` Auto-sync: ${config.enabled ? 'enabled' : 'disabled'}, Frequency: ${config.frequency}`);
|
|
323
|
+
}
|
|
324
|
+
finally {
|
|
325
|
+
db.close();
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
330
|
+
process.exit(1);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Create sync status subcommand
|
|
335
|
+
*/
|
|
336
|
+
function createStatusCommand() {
|
|
337
|
+
return new Command('status')
|
|
338
|
+
.description('Show sync status and statistics')
|
|
339
|
+
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
340
|
+
.option('--json', 'Output as JSON')
|
|
341
|
+
.action(async (opts) => {
|
|
342
|
+
await showStatus({
|
|
343
|
+
dbPath: opts['db'],
|
|
344
|
+
json: opts['json'] ?? false,
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Create sync history subcommand
|
|
350
|
+
*/
|
|
351
|
+
function createHistoryCommand() {
|
|
352
|
+
return new Command('history')
|
|
353
|
+
.description('Show sync history')
|
|
354
|
+
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
355
|
+
.option('-l, --limit <number>', 'Number of entries to show', '10')
|
|
356
|
+
.option('--json', 'Output as JSON')
|
|
357
|
+
.action(async (opts) => {
|
|
358
|
+
await showHistory({
|
|
359
|
+
dbPath: opts['db'],
|
|
360
|
+
limit: parseInt(opts['limit'], 10),
|
|
361
|
+
json: opts['json'] ?? false,
|
|
362
|
+
});
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Create sync config subcommand
|
|
367
|
+
*/
|
|
368
|
+
function createConfigCommand() {
|
|
369
|
+
return new Command('config')
|
|
370
|
+
.description('Configure automatic sync settings')
|
|
371
|
+
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
372
|
+
.option('--enable', 'Enable automatic background sync')
|
|
373
|
+
.option('--disable', 'Disable automatic background sync')
|
|
374
|
+
.option('--frequency <freq>', 'Set sync frequency (daily|weekly)')
|
|
375
|
+
.option('--show', 'Show current configuration')
|
|
376
|
+
.option('--json', 'Output as JSON')
|
|
377
|
+
.action(async (opts) => {
|
|
378
|
+
await configureSync({
|
|
379
|
+
dbPath: opts['db'],
|
|
380
|
+
enable: opts['enable'],
|
|
381
|
+
disable: opts['disable'],
|
|
382
|
+
frequency: opts['frequency'],
|
|
383
|
+
show: opts['show'],
|
|
384
|
+
json: opts['json'] ?? false,
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Create sync command with subcommands
|
|
390
|
+
*/
|
|
391
|
+
export function createSyncCommand() {
|
|
392
|
+
const cmd = new Command('sync')
|
|
393
|
+
.description('Synchronize skills from the Skillsmith registry')
|
|
394
|
+
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
395
|
+
.option('-f, --force', 'Force full sync (ignore last sync time)')
|
|
396
|
+
.option('--dry-run', 'Show what would be synced without making changes')
|
|
397
|
+
.option('--json', 'Output results as JSON')
|
|
398
|
+
.action(async (opts) => {
|
|
399
|
+
await runSync({
|
|
400
|
+
dbPath: opts['db'],
|
|
401
|
+
force: opts['force'] ?? false,
|
|
402
|
+
dryRun: opts['dry-run'] ?? false,
|
|
403
|
+
json: opts['json'] ?? false,
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
// Add subcommands
|
|
407
|
+
cmd.addCommand(createStatusCommand());
|
|
408
|
+
cmd.addCommand(createHistoryCommand());
|
|
409
|
+
cmd.addCommand(createConfigCommand());
|
|
410
|
+
return cmd;
|
|
411
|
+
}
|
|
412
|
+
export default createSyncCommand;
|
|
413
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* - validate: Validate local SKILL.md (SMI-746)
|
|
13
13
|
* - publish: Prepare skill for sharing (SMI-746)
|
|
14
14
|
* - analyze: Analyze codebase for skill recommendations (SMI-1283)
|
|
15
|
+
* - author subagent: Generate companion subagent for a skill (SMI-1389)
|
|
16
|
+
* - author transform: Upgrade existing skill with subagent (SMI-1390)
|
|
17
|
+
* - author mcp-init: Scaffold a new MCP server project (SMI-1433)
|
|
15
18
|
*/
|
|
16
19
|
export {};
|
|
17
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}
|
package/dist/src/index.js
CHANGED
|
@@ -12,10 +12,13 @@
|
|
|
12
12
|
* - validate: Validate local SKILL.md (SMI-746)
|
|
13
13
|
* - publish: Prepare skill for sharing (SMI-746)
|
|
14
14
|
* - analyze: Analyze codebase for skill recommendations (SMI-1283)
|
|
15
|
+
* - author subagent: Generate companion subagent for a skill (SMI-1389)
|
|
16
|
+
* - author transform: Upgrade existing skill with subagent (SMI-1390)
|
|
17
|
+
* - author mcp-init: Scaffold a new MCP server project (SMI-1433)
|
|
15
18
|
*/
|
|
16
19
|
import { Command } from 'commander';
|
|
17
20
|
import { importSkills } from './import.js';
|
|
18
|
-
import { createSearchCommand, createListCommand, createUpdateCommand, createRemoveCommand, createInitCommand, createValidateCommand, createPublishCommand, createSubagentCommand, createTransformCommand, createMcpInitCommand, createAnalyzeCommand, createRecommendCommand, } from './commands/index.js';
|
|
21
|
+
import { createSearchCommand, createListCommand, createUpdateCommand, createRemoveCommand, createInitCommand, createValidateCommand, createPublishCommand, createSubagentCommand, createTransformCommand, createMcpInitCommand, createAnalyzeCommand, createRecommendCommand, createSyncCommand, } from './commands/index.js';
|
|
19
22
|
import { DEFAULT_DB_PATH } from './config.js';
|
|
20
23
|
import { sanitizeError } from './utils/sanitize.js';
|
|
21
24
|
import { displayStartupHeader } from './utils/license.js';
|
|
@@ -68,8 +71,10 @@ program.addCommand(createListCommand());
|
|
|
68
71
|
program.addCommand(createUpdateCommand());
|
|
69
72
|
program.addCommand(createRemoveCommand());
|
|
70
73
|
// SMI-746: Skill authoring commands (under 'author' group)
|
|
74
|
+
// SMI-1389, SMI-1390: Subagent generation
|
|
75
|
+
// SMI-1433: MCP server scaffolding
|
|
71
76
|
const authorCommand = new Command('author')
|
|
72
|
-
.description('Skill authoring and
|
|
77
|
+
.description('Skill authoring, subagent generation, and MCP server tools')
|
|
73
78
|
.addCommand(createInitCommand())
|
|
74
79
|
.addCommand(createValidateCommand())
|
|
75
80
|
.addCommand(createPublishCommand())
|
|
@@ -85,5 +90,7 @@ program.addCommand(createPublishCommand().name('publish'));
|
|
|
85
90
|
program.addCommand(createAnalyzeCommand());
|
|
86
91
|
// SMI-1299: Recommendations
|
|
87
92
|
program.addCommand(createRecommendCommand());
|
|
93
|
+
// Registry Sync
|
|
94
|
+
program.addCommand(createSyncCommand());
|
|
88
95
|
program.parse();
|
|
89
96
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ vi.mock('fs/promises', () => ({
|
|
|
9
9
|
writeFile: vi.fn(),
|
|
10
10
|
readFile: vi.fn(),
|
|
11
11
|
stat: vi.fn(),
|
|
12
|
+
access: vi.fn(),
|
|
12
13
|
}));
|
|
13
14
|
// Mock inquirer
|
|
14
15
|
vi.mock('@inquirer/prompts', () => ({
|
|
@@ -23,6 +24,7 @@ vi.mock('ora', () => ({
|
|
|
23
24
|
stop: vi.fn().mockReturnThis(),
|
|
24
25
|
succeed: vi.fn().mockReturnThis(),
|
|
25
26
|
fail: vi.fn().mockReturnThis(),
|
|
27
|
+
warn: vi.fn().mockReturnThis(),
|
|
26
28
|
text: '',
|
|
27
29
|
})),
|
|
28
30
|
}));
|
|
@@ -107,6 +109,88 @@ describe('SMI-746: Skill Authoring Commands', () => {
|
|
|
107
109
|
const module = await import('../src/commands/author.js');
|
|
108
110
|
expect(typeof module.publishSkill).toBe('function');
|
|
109
111
|
});
|
|
112
|
+
it('exports generateSubagent function', async () => {
|
|
113
|
+
const module = await import('../src/commands/author.js');
|
|
114
|
+
expect(typeof module.generateSubagent).toBe('function');
|
|
115
|
+
});
|
|
116
|
+
it('exports transformSkill function', async () => {
|
|
117
|
+
const module = await import('../src/commands/author.js');
|
|
118
|
+
expect(typeof module.transformSkill).toBe('function');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
// SMI-1389: Subagent Command Tests
|
|
122
|
+
describe('createSubagentCommand', () => {
|
|
123
|
+
it('creates a command with correct name', async () => {
|
|
124
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
125
|
+
const cmd = createSubagentCommand();
|
|
126
|
+
expect(cmd).toBeInstanceOf(Command);
|
|
127
|
+
expect(cmd.name()).toBe('subagent');
|
|
128
|
+
});
|
|
129
|
+
it('has output option with default', async () => {
|
|
130
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
131
|
+
const cmd = createSubagentCommand();
|
|
132
|
+
const outputOpt = cmd.options.find((o) => o.short === '-o');
|
|
133
|
+
expect(outputOpt).toBeDefined();
|
|
134
|
+
expect(outputOpt?.defaultValue).toBe('~/.claude/agents');
|
|
135
|
+
});
|
|
136
|
+
it('has tools option', async () => {
|
|
137
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
138
|
+
const cmd = createSubagentCommand();
|
|
139
|
+
const toolsOpt = cmd.options.find((o) => o.long === '--tools');
|
|
140
|
+
expect(toolsOpt).toBeDefined();
|
|
141
|
+
});
|
|
142
|
+
it('has model option with sonnet default', async () => {
|
|
143
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
144
|
+
const cmd = createSubagentCommand();
|
|
145
|
+
const modelOpt = cmd.options.find((o) => o.long === '--model');
|
|
146
|
+
expect(modelOpt).toBeDefined();
|
|
147
|
+
expect(modelOpt?.defaultValue).toBe('sonnet');
|
|
148
|
+
});
|
|
149
|
+
it('has skip-claude-md option', async () => {
|
|
150
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
151
|
+
const cmd = createSubagentCommand();
|
|
152
|
+
const skipOpt = cmd.options.find((o) => o.long === '--skip-claude-md');
|
|
153
|
+
expect(skipOpt).toBeDefined();
|
|
154
|
+
});
|
|
155
|
+
it('accepts optional path argument with default', async () => {
|
|
156
|
+
const { createSubagentCommand } = await import('../src/commands/author.js');
|
|
157
|
+
const cmd = createSubagentCommand();
|
|
158
|
+
expect(cmd.registeredArguments.length).toBe(1);
|
|
159
|
+
expect(cmd.registeredArguments[0]?.defaultValue).toBe('.');
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
// SMI-1390: Transform Command Tests
|
|
163
|
+
describe('createTransformCommand', () => {
|
|
164
|
+
it('creates a command with correct name', async () => {
|
|
165
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
166
|
+
const cmd = createTransformCommand();
|
|
167
|
+
expect(cmd).toBeInstanceOf(Command);
|
|
168
|
+
expect(cmd.name()).toBe('transform');
|
|
169
|
+
});
|
|
170
|
+
it('has dry-run option', async () => {
|
|
171
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
172
|
+
const cmd = createTransformCommand();
|
|
173
|
+
const dryRunOpt = cmd.options.find((o) => o.long === '--dry-run');
|
|
174
|
+
expect(dryRunOpt).toBeDefined();
|
|
175
|
+
});
|
|
176
|
+
it('has force option', async () => {
|
|
177
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
178
|
+
const cmd = createTransformCommand();
|
|
179
|
+
const forceOpt = cmd.options.find((o) => o.long === '--force');
|
|
180
|
+
expect(forceOpt).toBeDefined();
|
|
181
|
+
});
|
|
182
|
+
it('has batch option', async () => {
|
|
183
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
184
|
+
const cmd = createTransformCommand();
|
|
185
|
+
const batchOpt = cmd.options.find((o) => o.long === '--batch');
|
|
186
|
+
expect(batchOpt).toBeDefined();
|
|
187
|
+
});
|
|
188
|
+
it('accepts optional path argument with default', async () => {
|
|
189
|
+
const { createTransformCommand } = await import('../src/commands/author.js');
|
|
190
|
+
const cmd = createTransformCommand();
|
|
191
|
+
expect(cmd.registeredArguments.length).toBe(1);
|
|
192
|
+
expect(cmd.registeredArguments[0]?.defaultValue).toBe('.');
|
|
193
|
+
});
|
|
110
194
|
});
|
|
111
195
|
});
|
|
112
196
|
describe('SMI-1389: Subagent Command', () => {
|
|
@@ -442,6 +526,7 @@ describe('SMI-1433: MCP Server Scaffolding Command', () => {
|
|
|
442
526
|
stop: vi.fn().mockReturnThis(),
|
|
443
527
|
succeed: vi.fn().mockReturnThis(),
|
|
444
528
|
fail: failMock,
|
|
529
|
+
warn: vi.fn().mockReturnThis(),
|
|
445
530
|
text: '',
|
|
446
531
|
});
|
|
447
532
|
// Directory doesn't exist, but mkdir fails
|