@yama662607/agent-config-sync 0.3.1 → 0.4.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 CHANGED
@@ -1,5 +1,10 @@
1
1
  # agent-config-sync
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/@yama662607/agent-config-sync)](https://www.npmjs.com/package/@yama662607/agent-config-sync)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@yama662607/agent-config-sync)](https://www.npmjs.com/package/@yama662607/agent-config-sync)
5
+ [![license](https://img.shields.io/npm/l/@yama662607/agent-config-sync)](LICENSE)
6
+ [![Node.js Version](https://img.shields.io/node/v/@yama662607/agent-config-sync)](https://github.com/yama662607/agent-config-sync)
7
+
3
8
  `acsync` is a cross-agent configuration manager for MCP servers and skills. Unlike manifest-based tools, `acsync` directly edits native config files in your project—no intermediate manifest, no "sync" step.
4
9
 
5
10
  ## Design Principles
@@ -15,7 +20,7 @@
15
20
 
16
21
  ```bash
17
22
  # Install
18
- npm install -g agent-config-sync
23
+ npm install -g @yama662607/agent-config-sync
19
24
 
20
25
  # Add an MCP server to your project
21
26
  acsync mcp add @modelcontextprotocol/server-github --targets claude
@@ -39,7 +44,7 @@ acsync catalog skill list
39
44
  Manage MCP servers for the current project.
40
45
 
41
46
  ```bash
42
- # Show status (default)
47
+ # Show status (default) - Interactive TUI
43
48
  acsync mcp
44
49
 
45
50
  # Add a server
@@ -58,7 +63,7 @@ acsync mcp enable github --targets codex
58
63
  Manage skills for the current project.
59
64
 
60
65
  ```bash
61
- # Show status (default)
66
+ # Show status (default) - Interactive TUI
62
67
  acsync skill
63
68
 
64
69
  # Add a skill from catalog
@@ -171,4 +176,19 @@ my-project/ # Your project
171
176
 
172
177
  ## License
173
178
 
174
- MIT
179
+ MIT © [Daisuke Yamashiki](https://github.com/yama662607)
180
+
181
+ ## Links
182
+
183
+ - [npm Package](https://www.npmjs.com/package/@yama662607/agent-config-sync)
184
+ - [GitHub Repository](https://github.com/yama662607/agent-config-sync)
185
+ - [Issues](https://github.com/yama662607/agent-config-sync/issues)
186
+ - [Model Context Protocol](https://modelcontextprotocol.io)
187
+
188
+ ## Contributing
189
+
190
+ Contributions are welcome! Please feel free to submit a Pull Request.
191
+
192
+ ## Support
193
+
194
+ If you encounter any issues or have questions, please [file an issue](https://github.com/yama662607/agent-config-sync/issues/new) on GitHub.
package/dist/catalog.d.ts CHANGED
@@ -44,22 +44,52 @@ export declare function removeMcp(id: string): Promise<boolean>;
44
44
  */
45
45
  export declare function normalizeMcpPackage(packageId: string, catalogEntry?: Partial<McpCatalogEntry>): McpCatalogEntry;
46
46
  /**
47
- * List all skill entries in the catalog.
47
+ * Get the skills directory path.
48
+ */
49
+ export declare function getSkillsDir(): string;
50
+ /**
51
+ * Get a specific skill directory path.
52
+ */
53
+ export declare function getSkillDir(id: string): string;
54
+ /**
55
+ * Get the SKILL.md file path for a skill.
56
+ */
57
+ export declare function getSkillFilePath(id: string): string;
58
+ /**
59
+ * List all skill entries in the catalog (metadata only).
48
60
  */
49
61
  export declare function listSkills(): Promise<SkillCatalogEntry[]>;
50
62
  /**
51
- * Get a specific skill entry by ID.
63
+ * Get a specific skill entry by ID (metadata only).
52
64
  */
53
65
  export declare function getSkill(id: string): Promise<SkillCatalogEntry | null>;
54
66
  /**
55
- * Add or update a skill entry in the catalog.
67
+ * Get full skill data including content from file.
56
68
  */
57
- export declare function addSkill(entry: SkillCatalogEntry): Promise<void>;
69
+ export declare function getSkillWithContent(id: string): Promise<{
70
+ entry: SkillCatalogEntry;
71
+ content: string;
72
+ } | null>;
58
73
  /**
59
- * Remove a skill entry from the catalog.
74
+ * Add or update a skill entry in the catalog (file-based).
75
+ * Creates a directory and saves SKILL.md file.
76
+ */
77
+ export declare function addSkill(entry: SkillCatalogEntry, content: string): Promise<void>;
78
+ /**
79
+ * Add a skill from a local directory (copies all files).
80
+ */
81
+ export declare function addSkillFromDir(id: string, sourceDir: string, metadata?: Partial<SkillCatalogEntry>): Promise<void>;
82
+ /**
83
+ * Remove a skill entry from the catalog (deletes directory).
60
84
  */
61
85
  export declare function removeSkill(id: string): Promise<boolean>;
62
86
  /**
63
- * Normalize a skill identifier into a catalog entry.
87
+ * Normalize a skill identifier and content into a catalog entry.
88
+ * This extracts metadata from content but doesn't store the content.
64
89
  */
65
90
  export declare function normalizeSkillPackage(packageId: string, content: string, catalogEntry?: Partial<SkillCatalogEntry>): SkillCatalogEntry;
91
+ /**
92
+ * Migrate all skills from old JSON format to new file-based format.
93
+ * Returns the number of skills migrated.
94
+ */
95
+ export declare function migrateSkills(): Promise<number>;
package/dist/catalog.js CHANGED
@@ -94,6 +94,8 @@ export async function loadCatalog() {
94
94
  if (!parsed.skills) {
95
95
  parsed.skills = {};
96
96
  }
97
+ // Auto-migrate from old format if needed
98
+ await ensureMigrated();
97
99
  return parsed;
98
100
  }
99
101
  /**
@@ -186,32 +188,171 @@ function extractDisplayName(packageId) {
186
188
  .join(' ');
187
189
  }
188
190
  // ============================================================================
189
- // Skill Catalog Operations
191
+ // Skill Catalog Operations (File-based storage)
190
192
  // ============================================================================
191
193
  /**
192
- * List all skill entries in the catalog.
194
+ * Get the skills directory path.
195
+ */
196
+ export function getSkillsDir() {
197
+ return path.join(getCatalogDir(), 'skills');
198
+ }
199
+ /**
200
+ * Get a specific skill directory path.
201
+ */
202
+ export function getSkillDir(id) {
203
+ return path.join(getSkillsDir(), id);
204
+ }
205
+ /**
206
+ * Get the SKILL.md file path for a skill.
207
+ */
208
+ export function getSkillFilePath(id) {
209
+ return path.join(getSkillDir(id), 'SKILL.md');
210
+ }
211
+ /**
212
+ * Ensure skills directory exists.
213
+ */
214
+ async function ensureSkillsDir() {
215
+ await fs.mkdir(getSkillsDir(), { recursive: true });
216
+ }
217
+ /**
218
+ * Validate skill ID to prevent path traversal.
219
+ */
220
+ function validateSkillId(id) {
221
+ if (!id || id.length === 0) {
222
+ throw new Error('Skill ID cannot be empty');
223
+ }
224
+ if (id.length > 100) {
225
+ throw new Error('Skill ID too long (max 100 characters)');
226
+ }
227
+ // Prevent path traversal
228
+ if (id.includes('..') || id.includes('/') || id.includes('\\')) {
229
+ throw new Error('Skill ID cannot contain path traversal characters');
230
+ }
231
+ // Prevent leading/trailing dots and dashes
232
+ if (id.startsWith('.') || id.startsWith('-') || id.endsWith('.') || id.endsWith('-')) {
233
+ throw new Error('Skill ID cannot start or end with a dot or dash');
234
+ }
235
+ }
236
+ /**
237
+ * List all skill entries in the catalog (metadata only).
193
238
  */
194
239
  export async function listSkills() {
195
240
  const catalog = await loadCatalog();
196
241
  return Object.values(catalog.skills);
197
242
  }
198
243
  /**
199
- * Get a specific skill entry by ID.
244
+ * Get a specific skill entry by ID (metadata only).
200
245
  */
201
246
  export async function getSkill(id) {
202
247
  const catalog = await loadCatalog();
203
248
  return catalog.skills[id] ?? null;
204
249
  }
205
250
  /**
206
- * Add or update a skill entry in the catalog.
251
+ * Get full skill data including content from file.
207
252
  */
208
- export async function addSkill(entry) {
253
+ export async function getSkillWithContent(id) {
254
+ const entry = await getSkill(id);
255
+ if (!entry) {
256
+ return null;
257
+ }
258
+ try {
259
+ const skillPath = getSkillFilePath(id);
260
+ const content = await fs.readFile(skillPath, 'utf8');
261
+ return { entry, content };
262
+ }
263
+ catch {
264
+ return null;
265
+ }
266
+ }
267
+ /**
268
+ * Add or update a skill entry in the catalog (file-based).
269
+ * Creates a directory and saves SKILL.md file.
270
+ */
271
+ export async function addSkill(entry, content) {
272
+ validateSkillId(entry.id);
273
+ await ensureSkillsDir();
274
+ const skillDir = getSkillDir(entry.id);
275
+ const skillPath = getSkillFilePath(entry.id);
276
+ // Create skill directory
277
+ await fs.mkdir(skillDir, { recursive: true });
278
+ // Write SKILL.md atomically
279
+ const tempPath = `${skillPath}.tmp`;
280
+ await fs.writeFile(tempPath, content, 'utf8');
281
+ await fs.rename(tempPath, skillPath);
282
+ // Update catalog metadata
283
+ const catalog = await loadCatalog();
284
+ catalog.skills[entry.id] = {
285
+ id: entry.id,
286
+ displayName: entry.displayName,
287
+ description: entry.description,
288
+ path: `skills/${entry.id}`,
289
+ addedAt: entry.addedAt ?? new Date().toISOString(),
290
+ tags: entry.tags ?? [],
291
+ license: entry.license,
292
+ };
293
+ await writeCatalogAtomic(catalog);
294
+ }
295
+ /**
296
+ * Add a skill from a local directory (copies all files).
297
+ */
298
+ export async function addSkillFromDir(id, sourceDir, metadata = {}) {
299
+ validateSkillId(id);
300
+ await ensureSkillsDir();
301
+ const skillDir = getSkillDir(id);
302
+ // Create skill directory
303
+ await fs.mkdir(skillDir, { recursive: true });
304
+ // Copy all files from source directory
305
+ const entries = await fs.readdir(sourceDir, { withFileTypes: true });
306
+ for (const entry of entries) {
307
+ const srcPath = path.join(sourceDir, entry.name);
308
+ const destPath = path.join(skillDir, entry.name);
309
+ if (entry.isDirectory()) {
310
+ // Recursively copy subdirectories (e.g., references/)
311
+ await fs.mkdir(destPath, { recursive: true });
312
+ const subEntries = await fs.readdir(srcPath, { withFileTypes: true });
313
+ for (const subEntry of subEntries) {
314
+ if (subEntry.isFile()) {
315
+ const subSrcPath = path.join(srcPath, subEntry.name);
316
+ const subDestPath = path.join(destPath, subEntry.name);
317
+ await fs.copyFile(subSrcPath, subDestPath);
318
+ }
319
+ }
320
+ }
321
+ else if (entry.isFile()) {
322
+ await fs.copyFile(srcPath, destPath);
323
+ }
324
+ }
325
+ // Parse SKILL.md for metadata
326
+ const skillPath = getSkillFilePath(id);
327
+ let content = '';
328
+ let displayName = metadata.displayName ?? id;
329
+ let description = metadata.description ?? '';
330
+ let license = metadata.license;
331
+ try {
332
+ content = await fs.readFile(skillPath, 'utf8');
333
+ const recipe = parseSkillFrontmatter(content);
334
+ displayName = recipe.name || displayName;
335
+ description = recipe.description || description;
336
+ license = recipe.license || license;
337
+ }
338
+ catch {
339
+ // SKILL.md not found, use provided metadata
340
+ }
341
+ // Update catalog metadata
209
342
  const catalog = await loadCatalog();
210
- catalog.skills[entry.id] = entry;
343
+ catalog.skills[id] = {
344
+ id,
345
+ displayName,
346
+ description,
347
+ path: `skills/${id}`,
348
+ addedAt: metadata.addedAt ?? new Date().toISOString(),
349
+ tags: metadata.tags ?? [],
350
+ license,
351
+ };
211
352
  await writeCatalogAtomic(catalog);
212
353
  }
213
354
  /**
214
- * Remove a skill entry from the catalog.
355
+ * Remove a skill entry from the catalog (deletes directory).
215
356
  */
216
357
  export async function removeSkill(id) {
217
358
  const catalog = await loadCatalog();
@@ -220,10 +361,14 @@ export async function removeSkill(id) {
220
361
  }
221
362
  delete catalog.skills[id];
222
363
  await writeCatalogAtomic(catalog);
364
+ // Delete skill directory
365
+ const skillDir = getSkillDir(id);
366
+ await fs.rm(skillDir, { recursive: true, force: true });
223
367
  return true;
224
368
  }
225
369
  /**
226
- * Normalize a skill identifier into a catalog entry.
370
+ * Normalize a skill identifier and content into a catalog entry.
371
+ * This extracts metadata from content but doesn't store the content.
227
372
  */
228
373
  export function normalizeSkillPackage(packageId, content, catalogEntry) {
229
374
  const now = new Date().toISOString();
@@ -233,12 +378,10 @@ export function normalizeSkillPackage(packageId, content, catalogEntry) {
233
378
  id: packageId,
234
379
  displayName: catalogEntry?.displayName ?? recipe.name,
235
380
  description: catalogEntry?.description ?? recipe.description,
236
- recipe: {
237
- ...recipe,
238
- content,
239
- },
381
+ path: catalogEntry?.path ?? `skills/${packageId}`,
240
382
  addedAt: catalogEntry?.addedAt ?? now,
241
383
  tags: catalogEntry?.tags ?? [],
384
+ license: recipe.license,
242
385
  };
243
386
  }
244
387
  /**
@@ -325,4 +468,100 @@ function parseSkillFrontmatter(content) {
325
468
  recipe.description = recipe.description.slice(0, 500);
326
469
  return recipe;
327
470
  }
471
+ // ============================================================================
472
+ // Migration
473
+ // ============================================================================
474
+ /**
475
+ * Check if a skill entry uses the old format (with embedded content).
476
+ */
477
+ function isOldSkillFormat(entry) {
478
+ return entry.recipe && typeof entry.recipe.content === 'string';
479
+ }
480
+ /**
481
+ * Migrate a single skill from old format to new file-based format.
482
+ */
483
+ async function migrateSkill(id, oldEntry) {
484
+ if (!isOldSkillFormat(oldEntry)) {
485
+ return; // Already migrated or invalid format
486
+ }
487
+ const content = oldEntry.recipe.content;
488
+ if (!content) {
489
+ return;
490
+ }
491
+ // Create skill directory and write content
492
+ await ensureSkillsDir();
493
+ const skillDir = getSkillDir(id);
494
+ const skillPath = getSkillFilePath(id);
495
+ await fs.mkdir(skillDir, { recursive: true });
496
+ // Write SKILL.md atomically
497
+ const tempPath = `${skillPath}.tmp`;
498
+ await fs.writeFile(tempPath, content, 'utf8');
499
+ await fs.rename(tempPath, skillPath);
500
+ }
501
+ /**
502
+ * Migrate all skills from old JSON format to new file-based format.
503
+ * Returns the number of skills migrated.
504
+ */
505
+ export async function migrateSkills() {
506
+ const catalogPath = getCatalogPath();
507
+ try {
508
+ await fs.access(catalogPath);
509
+ }
510
+ catch {
511
+ return 0; // Catalog doesn't exist, nothing to migrate
512
+ }
513
+ const raw = await fs.readFile(catalogPath, 'utf8');
514
+ const catalog = JSON.parse(raw);
515
+ if (!catalog.skills || Object.keys(catalog.skills).length === 0) {
516
+ return 0; // No skills to migrate
517
+ }
518
+ let migratedCount = 0;
519
+ const newSkills = {};
520
+ for (const [id, entry] of Object.entries(catalog.skills)) {
521
+ if (isOldSkillFormat(entry)) {
522
+ // Migrate to file-based format
523
+ await migrateSkill(id, entry);
524
+ // Create new entry structure
525
+ newSkills[id] = {
526
+ id: entry.id || id,
527
+ displayName: entry.displayName || entry.recipe.name || id,
528
+ description: entry.description || entry.recipe.description || '',
529
+ path: `skills/${id}`,
530
+ addedAt: entry.addedAt || new Date().toISOString(),
531
+ tags: entry.tags || [],
532
+ license: entry.recipe.license,
533
+ };
534
+ migratedCount++;
535
+ }
536
+ else {
537
+ // Already in new format, keep as-is
538
+ newSkills[id] = entry;
539
+ }
540
+ }
541
+ if (migratedCount > 0) {
542
+ // Update catalog with new format
543
+ catalog.skills = newSkills;
544
+ await writeCatalogAtomic(catalog);
545
+ }
546
+ return migratedCount;
547
+ }
548
+ /**
549
+ * Auto-migrate on catalog load if needed.
550
+ */
551
+ let migrationChecked = false;
552
+ async function ensureMigrated() {
553
+ if (migrationChecked) {
554
+ return;
555
+ }
556
+ migrationChecked = true;
557
+ try {
558
+ const count = await migrateSkills();
559
+ if (count > 0) {
560
+ console.log(`Migrated ${count} skill(s) to file-based format.`);
561
+ }
562
+ }
563
+ catch {
564
+ // Silently ignore migration errors
565
+ }
566
+ }
328
567
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { getMcp, listMcps, addMcp, removeMcp, normalizeMcpPackage, } from './catalog.js';
2
+ import { padRightWide, truncateWide } from './table-utils.js';
2
3
  // ============================================================================
3
4
  // List Command
4
5
  // ============================================================================
@@ -14,33 +15,24 @@ export async function catalogMcpList() {
14
15
  }
15
16
  console.log(`MCP Catalog (${entries.length} entries):\n`);
16
17
  const ID_WIDTH = 45;
17
- const NAME_WIDTH = 19;
18
- const DESC_WIDTH = 30;
18
+ const NAME_WIDTH = 25;
19
+ const DESC_WIDTH = 35;
19
20
  const borderH = '┌' + '─'.repeat(ID_WIDTH + 2) + '┬' + '─'.repeat(NAME_WIDTH + 2) + '┬' + '─'.repeat(DESC_WIDTH + 2) + '┐';
20
21
  const borderM = '├' + '─'.repeat(ID_WIDTH + 2) + '┼' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(DESC_WIDTH + 2) + '┤';
21
22
  const borderF = '└' + '─'.repeat(ID_WIDTH + 2) + '┴' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(DESC_WIDTH + 2) + '┘';
22
23
  console.log(borderH);
23
- console.log('│ ' + padRight('ID', ID_WIDTH) + ' │ ' + padRight('Display Name', NAME_WIDTH) + ' │ ' + padRight('Description', DESC_WIDTH) + ' │');
24
+ console.log('│ ' + padRightWide('ID', ID_WIDTH) + ' │ ' + padRightWide('Display Name', NAME_WIDTH) + ' │ ' + padRightWide('Description', DESC_WIDTH) + ' │');
24
25
  console.log(borderM);
25
26
  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) + ' │');
27
+ const id = truncateWide(entry.id, ID_WIDTH);
28
+ const name = padRightWide(entry.displayName, NAME_WIDTH);
29
+ const desc = truncateWide(entry.description, DESC_WIDTH);
30
+ console.log('│ ' + padRightWide(id, ID_WIDTH) + ' │ ' + name + ' │ ' + padRightWide(desc, DESC_WIDTH) + ' │');
30
31
  }
31
32
  console.log(borderF);
32
33
  console.log();
33
34
  console.log('Run `acsync catalog mcp show <id>` for details.');
34
35
  }
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
36
  // ============================================================================
45
37
  // Show Command
46
38
  // ============================================================================
@@ -171,7 +163,7 @@ export async function catalogSkillInstall(options) {
171
163
  displayName: info.name,
172
164
  description: info.description,
173
165
  });
174
- await addSkill(entry);
166
+ await addSkill(entry, content);
175
167
  console.log(`\n✓ Added to catalog: ${entry.id}`);
176
168
  console.log('\nRun `acsync skill add ' + entry.id + '` to add it to your project.');
177
169
  }
@@ -198,13 +190,13 @@ export async function catalogSkillSearch(query) {
198
190
  const borderM = '├' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(AUTHOR_WIDTH + 2) + '┼' + '─'.repeat(STARS_WIDTH + 2) + '┤';
199
191
  const borderF = '└' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(AUTHOR_WIDTH + 2) + '┴' + '─'.repeat(STARS_WIDTH + 2) + '┘';
200
192
  console.log(borderH);
201
- console.log('│ ' + padRight('Name', NAME_WIDTH) + ' │ ' + padRight('Author', AUTHOR_WIDTH) + ' │ ' + padRight('Stars', STARS_WIDTH) + ' │');
193
+ console.log('│ ' + padRightWide('Name', NAME_WIDTH) + ' │ ' + padRightWide('Author', AUTHOR_WIDTH) + ' │ ' + padRightWide('Stars', STARS_WIDTH) + ' │');
202
194
  console.log(borderM);
203
195
  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 + ' │');
196
+ const name = truncateWide(skill.name, NAME_WIDTH);
197
+ const author = truncateWide(skill.author, AUTHOR_WIDTH);
198
+ const stars = padRightWide('★ ' + formatNumber(skill.stars), STARS_WIDTH);
199
+ console.log('│ ' + padRightWide(name, NAME_WIDTH) + ' │ ' + padRightWide(author, AUTHOR_WIDTH) + ' │ ' + stars + ' │');
208
200
  }
209
201
  console.log(borderF);
210
202
  if (results.length > 20) {
@@ -304,7 +296,7 @@ export async function catalogSkillImport(options) {
304
296
  displayName: options.displayName,
305
297
  description: options.description,
306
298
  });
307
- await addSkill(entry);
299
+ await addSkill(entry, content);
308
300
  console.log(`✓ Added to catalog: ${entry.id}`);
309
301
  console.log('\nRun `acsync skill add ' + entry.id + '` to add it to your project.');
310
302
  }
@@ -324,19 +316,19 @@ export async function catalogSkillList() {
324
316
  }
325
317
  console.log(`Skill Catalog (${entries.length} entries):\n`);
326
318
  const ID_WIDTH = 45;
327
- const NAME_WIDTH = 19;
328
- const DESC_WIDTH = 30;
319
+ const NAME_WIDTH = 25;
320
+ const DESC_WIDTH = 35;
329
321
  const borderH = '┌' + '─'.repeat(ID_WIDTH + 2) + '┬' + '─'.repeat(NAME_WIDTH + 2) + '┬' + '─'.repeat(DESC_WIDTH + 2) + '┐';
330
322
  const borderM = '├' + '─'.repeat(ID_WIDTH + 2) + '┼' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(DESC_WIDTH + 2) + '┤';
331
323
  const borderF = '└' + '─'.repeat(ID_WIDTH + 2) + '┴' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(DESC_WIDTH + 2) + '┘';
332
324
  console.log(borderH);
333
- console.log('│ ' + padRight('ID', ID_WIDTH) + ' │ ' + padRight('Display Name', NAME_WIDTH) + ' │ ' + padRight('Description', DESC_WIDTH) + ' │');
325
+ console.log('│ ' + padRightWide('ID', ID_WIDTH) + ' │ ' + padRightWide('Display Name', NAME_WIDTH) + ' │ ' + padRightWide('Description', DESC_WIDTH) + ' │');
334
326
  console.log(borderM);
335
327
  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) + ' │');
328
+ const id = truncateWide(entry.id, ID_WIDTH);
329
+ const name = padRightWide(entry.displayName, NAME_WIDTH);
330
+ const desc = truncateWide(entry.description, DESC_WIDTH);
331
+ console.log('│ ' + padRightWide(id, ID_WIDTH) + ' │ ' + name + ' │ ' + padRightWide(desc, DESC_WIDTH) + ' │');
340
332
  }
341
333
  console.log(borderF);
342
334
  console.log();
@@ -349,20 +341,21 @@ export async function catalogSkillList() {
349
341
  * Show details of a specific skill catalog entry.
350
342
  */
351
343
  export async function catalogSkillShow(id) {
352
- const { getSkill } = await import('./catalog.js');
353
- const entry = await getSkill(id);
354
- if (!entry) {
344
+ const { getSkillWithContent } = await import('./catalog.js');
345
+ const skillWithData = await getSkillWithContent(id);
346
+ if (!skillWithData) {
355
347
  console.error(`Skill entry not found: ${id}\n`);
356
348
  console.log('Run `acsync catalog skill list` to see available entries.');
357
349
  process.exitCode = 1;
358
350
  return;
359
351
  }
352
+ const { entry, content } = skillWithData;
360
353
  console.log(`Skill Entry: ${entry.id}\n`);
361
354
  console.log(` Display Name: ${entry.displayName}`);
362
355
  console.log(` Description: ${entry.description}`);
363
356
  console.log(` Content:\n`);
364
357
  // Show preview of skill content
365
- const lines = entry.recipe.content.split('\n');
358
+ const lines = content.split('\n');
366
359
  const previewLines = lines.slice(0, 20); // Show first 20 lines
367
360
  console.log(previewLines.join('\n'));
368
361
  if (lines.length > 20) {
@@ -409,7 +402,7 @@ Skill content for ${options.skillId}.
409
402
  displayName: options.displayName,
410
403
  description: options.description,
411
404
  });
412
- await addSkill(entry);
405
+ await addSkill(entry, content);
413
406
  console.log(`Added to catalog: ${entry.id}\n`);
414
407
  console.log('Run `acsync skill add <name>` to add it to your project.');
415
408
  }