agent-config-sync 0.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.
@@ -0,0 +1,433 @@
1
+ import { getMcp, listMcps, addMcp, removeMcp, normalizeMcpPackage, } from './catalog.js';
2
+ // ============================================================================
3
+ // List Command
4
+ // ============================================================================
5
+ /**
6
+ * List all MCP entries in the catalog.
7
+ */
8
+ export async function catalogMcpList() {
9
+ const entries = await listMcps();
10
+ if (entries.length === 0) {
11
+ console.log('No MCP entries in catalog.\n');
12
+ console.log('Run `acsync catalog mcp add <package>` to add an entry.');
13
+ return;
14
+ }
15
+ console.log(`MCP Catalog (${entries.length} entries):\n`);
16
+ const ID_WIDTH = 45;
17
+ const NAME_WIDTH = 19;
18
+ const DESC_WIDTH = 30;
19
+ const borderH = '┌' + '─'.repeat(ID_WIDTH + 2) + '┬' + '─'.repeat(NAME_WIDTH + 2) + '┬' + '─'.repeat(DESC_WIDTH + 2) + '┐';
20
+ const borderM = '├' + '─'.repeat(ID_WIDTH + 2) + '┼' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(DESC_WIDTH + 2) + '┤';
21
+ const borderF = '└' + '─'.repeat(ID_WIDTH + 2) + '┴' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(DESC_WIDTH + 2) + '┘';
22
+ console.log(borderH);
23
+ console.log('│ ' + padRight('ID', ID_WIDTH) + ' │ ' + padRight('Display Name', NAME_WIDTH) + ' │ ' + padRight('Description', DESC_WIDTH) + ' │');
24
+ console.log(borderM);
25
+ for (const entry of entries) {
26
+ const id = truncate(entry.id, ID_WIDTH);
27
+ const name = padRight(entry.displayName, NAME_WIDTH);
28
+ const desc = truncate(entry.description, DESC_WIDTH);
29
+ console.log('│ ' + padRight(id, ID_WIDTH) + ' │ ' + name + ' │ ' + padRight(desc, DESC_WIDTH) + ' │');
30
+ }
31
+ console.log(borderF);
32
+ console.log();
33
+ console.log('Run `acsync catalog mcp show <id>` for details.');
34
+ }
35
+ function truncate(str, maxLen) {
36
+ if (str.length > maxLen) {
37
+ return str.slice(0, maxLen - 1) + '…';
38
+ }
39
+ return str;
40
+ }
41
+ function padRight(str, len) {
42
+ return str.padEnd(len, ' ');
43
+ }
44
+ // ============================================================================
45
+ // Show Command
46
+ // ============================================================================
47
+ /**
48
+ * Show details of a specific catalog entry.
49
+ */
50
+ export async function catalogMcpShow(id) {
51
+ const entry = await getMcp(id);
52
+ if (!entry) {
53
+ console.error(`MCP entry not found: ${id}\n`);
54
+ console.log('Run `acsync catalog mcp list` to see available entries.');
55
+ process.exitCode = 1;
56
+ return;
57
+ }
58
+ console.log(`MCP Entry: ${entry.id}\n`);
59
+ console.log(` Display Name: ${entry.displayName}`);
60
+ console.log(` Description: ${entry.description}`);
61
+ console.log(` Recipe:`);
62
+ if (entry.recipe.url) {
63
+ console.log(` Transport: http`);
64
+ console.log(` URL: ${entry.recipe.url}`);
65
+ }
66
+ else if (entry.recipe.command) {
67
+ console.log(` Transport: stdio`);
68
+ console.log(` Command: ${entry.recipe.command}`);
69
+ if (entry.recipe.args && entry.recipe.args.length > 0) {
70
+ console.log(` Args: ${JSON.stringify(entry.recipe.args)}`);
71
+ }
72
+ if (entry.recipe.cwd) {
73
+ console.log(` CWD: ${entry.recipe.cwd}`);
74
+ }
75
+ }
76
+ else {
77
+ console.log(` Transport: (none)`);
78
+ }
79
+ if (entry.recipe.env && Object.keys(entry.recipe.env).length > 0) {
80
+ console.log(` Env: ${JSON.stringify(entry.recipe.env)}`);
81
+ }
82
+ console.log(` Added: ${entry.addedAt}`);
83
+ if (entry.tags && entry.tags.length > 0) {
84
+ console.log(` Tags: ${entry.tags.join(', ')}`);
85
+ }
86
+ console.log();
87
+ }
88
+ /**
89
+ * Add an MCP entry to the catalog.
90
+ */
91
+ export async function catalogMcpAdd(options) {
92
+ // Check if already exists
93
+ const existing = await getMcp(options.packageId);
94
+ if (existing) {
95
+ console.error(`MCP entry already exists: ${options.packageId}\n`);
96
+ console.log('Use `acsync catalog mcp edit` to modify the entry.');
97
+ process.exitCode = 1;
98
+ return;
99
+ }
100
+ // Build recipe
101
+ const recipe = {};
102
+ if (options.url) {
103
+ recipe.url = options.url;
104
+ }
105
+ else if (options.command) {
106
+ recipe.command = options.command;
107
+ recipe.args = options.args ?? [];
108
+ recipe.cwd = options.cwd;
109
+ }
110
+ if (options.env) {
111
+ recipe.env = options.env;
112
+ }
113
+ // Build entry
114
+ const entry = normalizeMcpPackage(options.packageId, {
115
+ displayName: options.displayName,
116
+ description: options.description,
117
+ ...(Object.keys(recipe).length > 0 ? { recipe } : {}),
118
+ });
119
+ await addMcp(entry);
120
+ console.log(`Added to catalog: ${entry.id}\n`);
121
+ console.log('Run `acsync mcp add <package>` to add it to your project.');
122
+ }
123
+ // ============================================================================
124
+ // Remove Command
125
+ // ============================================================================
126
+ /**
127
+ * Remove an MCP entry from the catalog.
128
+ */
129
+ export async function catalogMcpRemove(id) {
130
+ const removed = await removeMcp(id);
131
+ if (!removed) {
132
+ console.error(`MCP entry not found: ${id}\n`);
133
+ console.log('Run `acsync catalog mcp list` to see available entries.');
134
+ process.exitCode = 1;
135
+ return;
136
+ }
137
+ console.log(`Removed from catalog: ${id}\n`);
138
+ }
139
+ /**
140
+ * Install a skill from the skills.directory registry into the catalog.
141
+ */
142
+ export async function catalogSkillInstall(options) {
143
+ const { getSkillInfo, downloadSkillContent } = await import('./registry.js');
144
+ console.log(`Fetching info for "${options.skillId}" from registry...`);
145
+ const info = await getSkillInfo(options.skillId);
146
+ if (!info) {
147
+ console.error(`Skill not found in registry: ${options.skillId}\n`);
148
+ console.log('Run `acsync catalog skill search <query>` to search the registry.');
149
+ process.exitCode = 1;
150
+ return;
151
+ }
152
+ // Display skill info
153
+ console.log(`\nFound: ${info.name}`);
154
+ console.log(` Author: ${info.author}`);
155
+ console.log(` Description: ${info.description}`);
156
+ console.log(` Stars: ${info.stars}`);
157
+ console.log(` Repo: ${info.links.repo}`);
158
+ // Download content
159
+ console.log(`\nDownloading skill content...`);
160
+ const content = await downloadSkillContent(info.links.skill_md);
161
+ // Add to catalog
162
+ const { normalizeSkillPackage, addSkill, getSkill } = await import('./catalog.js');
163
+ const existing = await getSkill(options.skillId);
164
+ if (existing && !options.force) {
165
+ console.error(`Skill already exists in catalog: ${options.skillId}\n`);
166
+ console.log('Use `acsync catalog skill install ' + options.skillId + ' --force` to reinstall.');
167
+ process.exitCode = 1;
168
+ return;
169
+ }
170
+ const entry = normalizeSkillPackage(info.name, content, {
171
+ displayName: info.name,
172
+ description: info.description,
173
+ });
174
+ await addSkill(entry);
175
+ console.log(`\n✓ Added to catalog: ${entry.id}`);
176
+ console.log('\nRun `acsync skill add ' + entry.id + '` to add it to your project.');
177
+ }
178
+ // ============================================================================
179
+ // Search Command
180
+ // ============================================================================
181
+ /**
182
+ * Search the skills.directory registry for skills.
183
+ */
184
+ export async function catalogSkillSearch(query) {
185
+ const { searchSkills } = await import('./registry.js');
186
+ console.log(`Searching registry for "${query}"...\n`);
187
+ const results = await searchSkills(query);
188
+ if (results.length === 0) {
189
+ console.log('No skills found.\n');
190
+ console.log('Try a different search term or visit https://skills.directory\n');
191
+ return;
192
+ }
193
+ console.log(`Found ${results.length} skill(s):\n`);
194
+ const NAME_WIDTH = 30;
195
+ const AUTHOR_WIDTH = 15;
196
+ const STARS_WIDTH = 8;
197
+ const borderH = '┌' + '─'.repeat(NAME_WIDTH + 2) + '┬' + '─'.repeat(AUTHOR_WIDTH + 2) + '┬' + '─'.repeat(STARS_WIDTH + 2) + '┐';
198
+ const borderM = '├' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(AUTHOR_WIDTH + 2) + '┼' + '─'.repeat(STARS_WIDTH + 2) + '┤';
199
+ const borderF = '└' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(AUTHOR_WIDTH + 2) + '┴' + '─'.repeat(STARS_WIDTH + 2) + '┘';
200
+ console.log(borderH);
201
+ console.log('│ ' + padRight('Name', NAME_WIDTH) + ' │ ' + padRight('Author', AUTHOR_WIDTH) + ' │ ' + padRight('Stars', STARS_WIDTH) + ' │');
202
+ console.log(borderM);
203
+ for (const skill of results.slice(0, 20)) {
204
+ const name = truncate(skill.name, NAME_WIDTH);
205
+ const author = truncate(skill.author, AUTHOR_WIDTH);
206
+ const stars = padRight('★ ' + formatNumber(skill.stars), STARS_WIDTH);
207
+ console.log('│ ' + padRight(name, NAME_WIDTH) + ' │ ' + padRight(author, AUTHOR_WIDTH) + ' │ ' + stars + ' │');
208
+ }
209
+ console.log(borderF);
210
+ if (results.length > 20) {
211
+ console.log(`\n... and ${results.length - 20} more results`);
212
+ }
213
+ console.log(`\nRun \`acsync catalog skill install <name>\` to install a skill.`);
214
+ console.log(`Visit https://skills.directory for more information.\n`);
215
+ }
216
+ function formatNumber(num) {
217
+ if (num >= 1000) {
218
+ return (num / 1000).toFixed(1) + 'k';
219
+ }
220
+ return num.toString();
221
+ }
222
+ // ============================================================================
223
+ // Import Command (import from local path)
224
+ // ============================================================================
225
+ /** Maximum size for skill files (1MB) */
226
+ const MAX_SKILL_FILE_SIZE = 1024 * 1024;
227
+ /**
228
+ * Validate that a path doesn't escape the allowed base directory.
229
+ */
230
+ function validatePath(resolvedPath, allowedBase) {
231
+ if (!resolvedPath.startsWith(allowedBase)) {
232
+ throw new Error('Path must be within the allowed directory');
233
+ }
234
+ }
235
+ /**
236
+ * Import a skill from a local path into the catalog.
237
+ */
238
+ export async function catalogSkillImport(options) {
239
+ const fs = await import('node:fs/promises');
240
+ const path = await import('node:path');
241
+ const { normalizeSkillPackage, addSkill, getSkill } = await import('./catalog.js');
242
+ const skillPath = path.resolve(options.path);
243
+ // Security: Validate path is within allowed directories
244
+ const homeDir = path.join(path.resolve(process.env.HOME || '~'));
245
+ const currentDir = path.resolve(process.cwd());
246
+ const allowedBases = [homeDir, currentDir];
247
+ if (!allowedBases.some(base => {
248
+ try {
249
+ validatePath(skillPath, base);
250
+ return true;
251
+ }
252
+ catch {
253
+ return false;
254
+ }
255
+ })) {
256
+ console.error(`Invalid path: Path must be within home directory or current project\n`);
257
+ process.exitCode = 1;
258
+ return;
259
+ }
260
+ const skillMdPath = path.join(skillPath, 'SKILL.md');
261
+ console.log(`Importing skill from: ${skillPath}`);
262
+ // Check if SKILL.md exists and get stats
263
+ let stats;
264
+ try {
265
+ stats = await fs.stat(skillMdPath);
266
+ }
267
+ catch {
268
+ console.error(`SKILL.md not found at: ${skillMdPath}\n`);
269
+ console.log('Ensure the directory contains a SKILL.md file.');
270
+ process.exitCode = 1;
271
+ return;
272
+ }
273
+ // Security: Check file size
274
+ if (stats.size > MAX_SKILL_FILE_SIZE) {
275
+ console.error(`File too large: ${stats.size} bytes (max: ${MAX_SKILL_FILE_SIZE})\n`);
276
+ process.exitCode = 1;
277
+ return;
278
+ }
279
+ // Read skill content
280
+ const content = await fs.readFile(skillMdPath, 'utf8');
281
+ // Parse skill name from content or use provided name
282
+ let skillId = options.skillId;
283
+ if (!skillId) {
284
+ const nameMatch = content.match(/^name:\s*(.+)$/m);
285
+ if (nameMatch) {
286
+ skillId = nameMatch[1].trim().replace(/^["']|["']$/g, '');
287
+ }
288
+ else {
289
+ // Use directory name
290
+ skillId = path.basename(skillPath);
291
+ }
292
+ }
293
+ console.log(` Skill name: ${skillId}`);
294
+ // Check if already exists
295
+ const existing = await getSkill(skillId);
296
+ if (existing) {
297
+ console.error(`Skill already exists in catalog: ${skillId}\n`);
298
+ console.log('Use a different name or remove the existing entry first.');
299
+ process.exitCode = 1;
300
+ return;
301
+ }
302
+ // Add to catalog
303
+ const entry = normalizeSkillPackage(skillId, content, {
304
+ displayName: options.displayName,
305
+ description: options.description,
306
+ });
307
+ await addSkill(entry);
308
+ console.log(`✓ Added to catalog: ${entry.id}`);
309
+ console.log('\nRun `acsync skill add ' + entry.id + '` to add it to your project.');
310
+ }
311
+ // ============================================================================
312
+ // Skill Catalog Commands
313
+ // ============================================================================
314
+ /**
315
+ * List all skill entries in the catalog.
316
+ */
317
+ export async function catalogSkillList() {
318
+ const { listSkills } = await import('./catalog.js');
319
+ const entries = await listSkills();
320
+ if (entries.length === 0) {
321
+ console.log('No skill entries in catalog.\n');
322
+ console.log('Run `acsync catalog skill add <name>` to add an entry.');
323
+ return;
324
+ }
325
+ console.log(`Skill Catalog (${entries.length} entries):\n`);
326
+ const ID_WIDTH = 45;
327
+ const NAME_WIDTH = 19;
328
+ const DESC_WIDTH = 30;
329
+ const borderH = '┌' + '─'.repeat(ID_WIDTH + 2) + '┬' + '─'.repeat(NAME_WIDTH + 2) + '┬' + '─'.repeat(DESC_WIDTH + 2) + '┐';
330
+ const borderM = '├' + '─'.repeat(ID_WIDTH + 2) + '┼' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(DESC_WIDTH + 2) + '┤';
331
+ const borderF = '└' + '─'.repeat(ID_WIDTH + 2) + '┴' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(DESC_WIDTH + 2) + '┘';
332
+ console.log(borderH);
333
+ console.log('│ ' + padRight('ID', ID_WIDTH) + ' │ ' + padRight('Display Name', NAME_WIDTH) + ' │ ' + padRight('Description', DESC_WIDTH) + ' │');
334
+ console.log(borderM);
335
+ for (const entry of entries) {
336
+ const id = truncate(entry.id, ID_WIDTH);
337
+ const name = padRight(entry.displayName, NAME_WIDTH);
338
+ const desc = truncate(entry.description, DESC_WIDTH);
339
+ console.log('│ ' + padRight(id, ID_WIDTH) + ' │ ' + name + ' │ ' + padRight(desc, DESC_WIDTH) + ' │');
340
+ }
341
+ console.log(borderF);
342
+ console.log();
343
+ console.log('Run `acsync catalog skill show <id>` for details.');
344
+ }
345
+ // ============================================================================
346
+ // Show Command
347
+ // ============================================================================
348
+ /**
349
+ * Show details of a specific skill catalog entry.
350
+ */
351
+ export async function catalogSkillShow(id) {
352
+ const { getSkill } = await import('./catalog.js');
353
+ const entry = await getSkill(id);
354
+ if (!entry) {
355
+ console.error(`Skill entry not found: ${id}\n`);
356
+ console.log('Run `acsync catalog skill list` to see available entries.');
357
+ process.exitCode = 1;
358
+ return;
359
+ }
360
+ console.log(`Skill Entry: ${entry.id}\n`);
361
+ console.log(` Display Name: ${entry.displayName}`);
362
+ console.log(` Description: ${entry.description}`);
363
+ console.log(` Content:\n`);
364
+ // Show preview of skill content
365
+ const lines = entry.recipe.content.split('\n');
366
+ const previewLines = lines.slice(0, 20); // Show first 20 lines
367
+ console.log(previewLines.join('\n'));
368
+ if (lines.length > 20) {
369
+ console.log(`\n... (${lines.length - 20} more lines)`);
370
+ }
371
+ console.log(`\n Added: ${entry.addedAt}`);
372
+ if (entry.tags && entry.tags.length > 0) {
373
+ console.log(` Tags: ${entry.tags.join(', ')}`);
374
+ }
375
+ console.log();
376
+ }
377
+ /**
378
+ * Add a skill entry to the catalog.
379
+ */
380
+ export async function catalogSkillAdd(options) {
381
+ const { getSkill, normalizeSkillPackage, addSkill } = await import('./catalog.js');
382
+ const fs = await import('node:fs/promises');
383
+ // Check if already exists
384
+ const existing = await getSkill(options.skillId);
385
+ if (existing) {
386
+ console.error(`Skill entry already exists: ${options.skillId}\n`);
387
+ console.log('Use `acsync skill add` to add it to your project.');
388
+ process.exitCode = 1;
389
+ return;
390
+ }
391
+ // Read skill content from file or create default
392
+ let content;
393
+ if (options.file) {
394
+ content = await fs.readFile(options.file, 'utf8');
395
+ }
396
+ else {
397
+ content = `---
398
+ name: ${options.skillId}
399
+ description: ${options.description || `Skill: ${options.skillId}`}
400
+ ---
401
+
402
+ # ${options.displayName || options.skillId}
403
+
404
+ Skill content for ${options.skillId}.
405
+ `;
406
+ }
407
+ // Build entry
408
+ const entry = normalizeSkillPackage(options.skillId, content, {
409
+ displayName: options.displayName,
410
+ description: options.description,
411
+ });
412
+ await addSkill(entry);
413
+ console.log(`Added to catalog: ${entry.id}\n`);
414
+ console.log('Run `acsync skill add <name>` to add it to your project.');
415
+ }
416
+ // ============================================================================
417
+ // Remove Command
418
+ // ============================================================================
419
+ /**
420
+ * Remove a skill entry from the catalog.
421
+ */
422
+ export async function catalogSkillRemove(id) {
423
+ const { removeSkill } = await import('./catalog.js');
424
+ const removed = await removeSkill(id);
425
+ if (!removed) {
426
+ console.error(`Skill entry not found: ${id}\n`);
427
+ console.log('Run `acsync catalog skill list` to see available entries.');
428
+ process.exitCode = 1;
429
+ return;
430
+ }
431
+ console.log(`Removed from catalog: ${id}\n`);
432
+ }
433
+ //# sourceMappingURL=cli-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-catalog.js","sourceRoot":"","sources":["../src/cli-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface ValidateOptions {
2
+ strict: boolean;
3
+ }
4
+ /**
5
+ * Validate the current project configuration.
6
+ */
7
+ export declare function validate(options: ValidateOptions): Promise<void>;
8
+ export interface DoctorOptions {
9
+ fix: boolean;
10
+ }
11
+ /**
12
+ * Run diagnostics and health checks.
13
+ */
14
+ export declare function doctor(options: DoctorOptions): Promise<void>;
@@ -0,0 +1,177 @@
1
+ import fs from 'node:fs/promises';
2
+ import { discoverProject } from './project-discovery.js';
3
+ import { loadCatalog } from './catalog.js';
4
+ /**
5
+ * Validate the current project configuration.
6
+ */
7
+ export async function validate(options) {
8
+ const errors = [];
9
+ const warnings = [];
10
+ // 1. Project discovery
11
+ console.log('Checking project discovery...');
12
+ try {
13
+ const discovery = await discoverProject();
14
+ console.log(` ✓ Project root: ${discovery.root}`);
15
+ }
16
+ catch (error) {
17
+ errors.push(`Project discovery failed: ${error.message}\n`);
18
+ }
19
+ // 2. Catalog references
20
+ console.log('Checking catalog...');
21
+ try {
22
+ const catalog = await loadCatalog();
23
+ console.log(` ✓ Catalog loaded (${Object.keys(catalog.mcps).length} entries)`);
24
+ }
25
+ catch (error) {
26
+ errors.push(`Catalog load failed: ${error.message}\n`);
27
+ }
28
+ // 3. Native config parseability
29
+ console.log('Checking native configs...');
30
+ try {
31
+ const discovery = await discoverProject();
32
+ const { readNativeConfig } = await import('./config-adapters.js');
33
+ for (const [target, configPath] of discovery.targets.entries()) {
34
+ if (!configPath.exists) {
35
+ console.log(` ⚠ ${target}: config not found at ${configPath.path}`);
36
+ continue;
37
+ }
38
+ const result = await readNativeConfig(target, configPath.path);
39
+ if (result.config === null) {
40
+ if (result.raw) {
41
+ warnings.push(`${target}: failed to parse config at ${configPath.path}\n`);
42
+ }
43
+ else {
44
+ warnings.push(`${target}: empty config at ${configPath.path}\n`);
45
+ }
46
+ }
47
+ else {
48
+ console.log(` ✓ ${target}: config parsed successfully`);
49
+ }
50
+ }
51
+ }
52
+ catch (error) {
53
+ errors.push(`Config validation failed: ${error.message}\n`);
54
+ }
55
+ // Summary
56
+ console.log();
57
+ if (errors.length > 0) {
58
+ console.error('Validation failed:\n');
59
+ for (const error of errors) {
60
+ console.error(` ✗ ${error}`);
61
+ }
62
+ process.exitCode = 1;
63
+ }
64
+ else if (warnings.length > 0) {
65
+ console.warn('Warnings:\n');
66
+ for (const warning of warnings) {
67
+ console.warn(` ⚠ ${warning}`);
68
+ }
69
+ if (options.strict) {
70
+ console.error('\nValidation failed (strict mode).');
71
+ process.exitCode = 1;
72
+ }
73
+ else {
74
+ console.log('\nValidation passed with warnings.');
75
+ }
76
+ }
77
+ else {
78
+ console.log('Validation passed.\n');
79
+ }
80
+ }
81
+ /**
82
+ * Run diagnostics and health checks.
83
+ */
84
+ export async function doctor(options) {
85
+ console.log('acsync Diagnostics\n');
86
+ console.log('='.repeat(50));
87
+ // 1. Project discovery
88
+ console.log('\n[Project Discovery]');
89
+ try {
90
+ const discovery = await discoverProject();
91
+ console.log(` ✓ Project root: ${discovery.root}`);
92
+ console.log(` ✓ Detected targets:`);
93
+ for (const [target, configPath] of discovery.targets.entries()) {
94
+ const status = configPath.exists ? '✓' : '✗';
95
+ console.log(` ${status} ${target}: ${configPath.path}`);
96
+ }
97
+ }
98
+ catch (error) {
99
+ console.log(` ✗ ${error.message}`);
100
+ }
101
+ // 2. Catalog health
102
+ console.log('\n[Catalog Health]');
103
+ try {
104
+ const catalog = await loadCatalog();
105
+ const entryCount = Object.keys(catalog.mcps).length;
106
+ console.log(` ✓ Catalog location: ${await getCatalogPath()}`);
107
+ console.log(` ✓ Entries: ${entryCount}`);
108
+ console.log(` ✓ Version: ${catalog.version}`);
109
+ }
110
+ catch (error) {
111
+ console.log(` ✗ ${error.message}`);
112
+ if (options.fix) {
113
+ console.log(' Attempting to fix...');
114
+ try {
115
+ const { initCatalog } = await import('./catalog.js');
116
+ await initCatalog();
117
+ console.log(' ✓ Catalog initialized');
118
+ }
119
+ catch (fixError) {
120
+ console.log(` ✗ Fix failed: ${fixError.message}`);
121
+ }
122
+ }
123
+ }
124
+ // 3. Environment checks
125
+ console.log('\n[Environment]');
126
+ await checkCommand('node', 'Node.js');
127
+ await checkCommand('npm', 'npm');
128
+ await checkCommand('npx', 'npx');
129
+ // 4. Target readiness
130
+ console.log('\n[Target Readiness]');
131
+ try {
132
+ const discovery = await discoverProject();
133
+ for (const [target, configPath] of discovery.targets.entries()) {
134
+ if (configPath.exists) {
135
+ const size = (await fs.stat(configPath.path)).size;
136
+ console.log(` ✓ ${target}: config exists (${size} bytes)`);
137
+ }
138
+ else {
139
+ console.log(` ⚠ ${target}: config not found (run \`acsync mcp init\`)`);
140
+ }
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.log(` ✗ ${error.message}`);
145
+ }
146
+ console.log('\n' + '='.repeat(50));
147
+ console.log('\nFor more help, run `acsync --help` or visit the documentation.\n');
148
+ }
149
+ async function getCatalogPath() {
150
+ const { getCatalogPath: getPath } = await import('./catalog.js');
151
+ return getPath();
152
+ }
153
+ async function checkCommand(command, name) {
154
+ try {
155
+ const result = await commandExists(command);
156
+ if (result) {
157
+ console.log(` ✓ ${name}: found`);
158
+ }
159
+ else {
160
+ console.log(` ⚠ ${name}: not found (may be required for some MCP servers)`);
161
+ }
162
+ }
163
+ catch (error) {
164
+ console.log(` ⚠ ${name}: unable to check`);
165
+ }
166
+ }
167
+ async function commandExists(command) {
168
+ try {
169
+ const isWindows = process.platform === 'win32';
170
+ const result = await (isWindows ? `where ${command}` : `which ${command}`);
171
+ return !!result;
172
+ }
173
+ catch {
174
+ return false;
175
+ }
176
+ }
177
+ //# sourceMappingURL=cli-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-diagnostics.js","sourceRoot":"","sources":["../src/cli-diagnostics.ts"],"names":[],"mappings":"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"}