agent-config-sync 0.2.0 β†’ 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.
@@ -3,6 +3,6 @@ export interface InitOptions {
3
3
  targets?: TargetName[];
4
4
  }
5
5
  /**
6
- * Run the interactive init wizard.
6
+ * Run the interactive init wizard using TUI prompts.
7
7
  */
8
8
  export declare function runInteractiveInit(options: InitOptions): Promise<void>;
package/dist/cli-init.js CHANGED
@@ -1,10 +1,9 @@
1
1
  import { discoverProject } from './project-discovery.js';
2
- import { listMcps } from './catalog.js';
3
- import { listSkills } from './catalog.js';
4
- import { mcpAdd, } from './cli-mcp.js';
5
- import { skillAdd, } from './cli-skill.js';
2
+ import { promptTargets, promptMcps, promptSkills, promptConfirm } from './prompts/index.js';
3
+ import { mcpAdd } from './cli-mcp.js';
4
+ import { skillAdd } from './cli-skill.js';
6
5
  /**
7
- * Run the interactive init wizard.
6
+ * Run the interactive init wizard using TUI prompts.
8
7
  */
9
8
  export async function runInteractiveInit(options) {
10
9
  const discovery = await discoverProject();
@@ -12,203 +11,44 @@ export async function runInteractiveInit(options) {
12
11
  console.log(`πŸ“ Project: ${projectRoot}\n`);
13
12
  // Initialize state
14
13
  const state = {
15
- targets: options.targets ?? [],
14
+ targets: [],
16
15
  selectedMcps: [],
17
16
  selectedSkills: [],
18
17
  };
19
18
  // Step 1: Select targets
20
- await stepSelectTargets(state);
21
- // Step 2: Select MCPs
22
- await stepSelectMcps(state);
23
- // Step 3: Select skills
24
- await stepSelectSkills(state);
25
- // Step 4: Confirm and apply
26
- await stepConfirmAndApply(state);
27
- console.log('\nβœ… Setup complete!');
28
- console.log('\nRun these commands to see your configuration:');
29
- console.log(` acsync mcp # Show MCP status`);
30
- console.log(` acsync skill # Show skill status`);
31
- }
32
- // ============================================================================
33
- // Step 1: Select Targets
34
- // ============================================================================
35
- async function stepSelectTargets(state) {
36
19
  console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
37
20
  console.log('Step 1: Select Target Agents');
38
21
  console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
39
- if (state.targets.length > 0) {
40
- console.log(`Pre-selected targets: ${state.targets.join(', ')}\n`);
41
- return;
42
- }
43
- const targets = [
44
- { name: 'claude', label: 'Claude Code', description: '.mcp.json' },
45
- { name: 'codex', label: 'Codex', description: '.codex/config.toml' },
46
- { name: 'gemini', label: 'Gemini CLI', description: '.gemini/settings.json' },
47
- ];
48
- console.log('Select which agents to configure:\n');
49
- for (const target of targets) {
50
- console.log(` [${target.name}] ${target.label} (${target.description})`);
51
- }
52
- console.log();
53
- // Simple prompt for target selection
54
- console.log('Enter target names (comma-separated, e.g., claude,codex):');
55
- console.log('Press Enter for default (all):');
56
- // For now, we'll use a simpler approach - read from stdin
57
- const readline = (await import('node:readline')).createInterface({
58
- input: process.stdin,
59
- output: process.stdout,
60
- });
61
- const answer = await new Promise((resolve) => {
62
- readline.question('> ', (input) => {
63
- readline.close();
64
- resolve(input.trim());
65
- });
66
- });
67
- if (answer) {
68
- state.targets = answer.split(',').map(t => t.trim().toLowerCase());
69
- }
70
- else {
71
- state.targets = ['claude', 'codex', 'gemini'];
72
- }
22
+ state.targets = await promptTargets(options.targets);
73
23
  console.log(`Selected: ${state.targets.join(', ')}\n`);
74
- }
75
- // ============================================================================
76
- // Step 2: Select MCPs
77
- // ============================================================================
78
- async function stepSelectMcps(state) {
24
+ // Step 2: Select MCPs
79
25
  console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
80
26
  console.log('Step 2: Select MCP Servers');
81
27
  console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
82
- const mcps = await listMcps();
83
- if (mcps.length === 0) {
84
- console.log('No MCP entries in catalog.\n');
85
- console.log('Tip: Use these commands to add MCPs to your catalog first:');
86
- console.log(' acsync catalog mcp add @modelcontextprotocol/server-github');
87
- console.log(' acsync catalog mcp add @modelcontextprotocol/server-filesystem\n');
88
- return;
89
- }
90
- console.log(`Available MCPs (${mcps.length}):\n`);
91
- for (let i = 0; i < mcps.length; i++) {
92
- const mcp = mcps[i];
93
- console.log(` [${i + 1}] ${mcp.id}`);
94
- console.log(` ${mcp.displayName || mcp.description}`);
95
- }
96
- console.log();
97
- const readline = (await import('node:readline')).createInterface({
98
- input: process.stdin,
99
- output: process.stdout,
100
- });
101
- const answer = await new Promise((resolve) => {
102
- readline.question('Enter MCP numbers to add (comma-separated, or "none" to skip): ', (input) => {
103
- readline.close();
104
- resolve(input.trim());
105
- });
106
- });
107
- if (answer && answer.toLowerCase() !== 'none') {
108
- const indices = answer.split(',').map(s => parseInt(s.trim(), 10) - 1);
109
- for (const idx of indices) {
110
- if (idx >= 0 && idx < mcps.length) {
111
- state.selectedMcps.push(mcps[idx].id);
112
- }
113
- }
114
- }
115
- if (state.selectedMcps.length > 0) {
116
- console.log(`\nSelected MCPs: ${state.selectedMcps.join(', ')}`);
117
- }
118
- console.log();
119
- }
120
- // ============================================================================
121
- // Step 3: Select Skills
122
- // ============================================================================
123
- async function stepSelectSkills(state) {
28
+ state.selectedMcps = await promptMcps();
29
+ // Step 3: Select skills
124
30
  console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
125
31
  console.log('Step 3: Select Skills');
126
32
  console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
127
- const skills = await listSkills();
128
- if (skills.length === 0) {
129
- console.log('No skill entries in catalog.\n');
130
- console.log('Tip: Use these commands to add skills to your catalog first:');
131
- console.log(' acsync catalog skill import ~/.claude/skills/my-skill');
132
- console.log(' acsync skill install <github-url>\n');
133
- return;
134
- }
135
- console.log(`Available Skills (${skills.length}):\n`);
136
- for (let i = 0; i < skills.length; i++) {
137
- const skill = skills[i];
138
- console.log(` [${i + 1}] ${skill.id}`);
139
- console.log(` ${skill.displayName || skill.description}`);
140
- }
141
- console.log();
142
- const readline = (await import('node:readline')).createInterface({
143
- input: process.stdin,
144
- output: process.stdout,
145
- });
146
- const answer = await new Promise((resolve) => {
147
- readline.question('Enter skill numbers to add (comma-separated, or "none" to skip): ', (input) => {
148
- readline.close();
149
- resolve(input.trim());
150
- });
151
- });
152
- if (answer && answer.toLowerCase() !== 'none') {
153
- const indices = answer.split(',').map(s => parseInt(s.trim(), 10) - 1);
154
- for (const idx of indices) {
155
- if (idx >= 0 && idx < skills.length) {
156
- state.selectedSkills.push(skills[idx].id);
157
- }
158
- }
159
- }
160
- if (state.selectedSkills.length > 0) {
161
- console.log(`\nSelected Skills: ${state.selectedSkills.join(', ')}`);
162
- }
163
- console.log();
164
- }
165
- // ============================================================================
166
- // Step 4: Confirm and Apply
167
- // ============================================================================
168
- async function stepConfirmAndApply(state) {
169
- console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
170
- console.log('Step 4: Confirm Selection');
171
- console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
172
- console.log(`Targets: ${state.targets.join(', ')}`);
173
- if (state.selectedMcps.length > 0) {
174
- console.log(`\nMCP Servers to add:`);
175
- for (const mcpId of state.selectedMcps) {
176
- console.log(` β€’ ${mcpId}`);
177
- }
178
- }
179
- if (state.selectedSkills.length > 0) {
180
- console.log(`\nSkills to add:`);
181
- for (const skillId of state.selectedSkills) {
182
- console.log(` β€’ ${skillId}`);
183
- }
184
- }
185
- if (state.selectedMcps.length === 0 && state.selectedSkills.length === 0) {
186
- console.log('\nNo items selected. Nothing to add.\n');
187
- return;
188
- }
189
- console.log();
190
- const readline = (await import('node:readline')).createInterface({
191
- input: process.stdin,
192
- output: process.stdout,
193
- });
194
- const answer = await new Promise((resolve) => {
195
- readline.question('Add these items to your project? (Y/n): ', (input) => {
196
- readline.close();
197
- resolve(input.trim().toLowerCase());
198
- });
199
- });
200
- if (answer === 'y' || answer === 'yes') {
33
+ state.selectedSkills = await promptSkills();
34
+ // Step 4: Confirm and apply
35
+ const confirmed = await promptConfirm(state.targets, state.selectedMcps, state.selectedSkills);
36
+ if (confirmed) {
201
37
  console.log('\nAdding items...\n');
202
38
  // Add MCPs
203
39
  for (const mcpId of state.selectedMcps) {
204
- const shortName = mcpId.replace('@modelcontextprotocol/server-', '')
205
- .replace(/^@/, '');
206
40
  const mcpOptions = {
207
41
  packageId: mcpId,
208
42
  targets: state.targets,
209
43
  noRegister: false,
210
44
  };
211
- await mcpAdd(mcpOptions);
45
+ try {
46
+ await mcpAdd(mcpOptions);
47
+ }
48
+ catch (error) {
49
+ console.error(`Failed to add MCP ${mcpId}: ${error instanceof Error ? error.message : String(error)}`);
50
+ process.exitCode = 1;
51
+ }
212
52
  }
213
53
  // Add Skills
214
54
  for (const skillId of state.selectedSkills) {
@@ -217,13 +57,21 @@ async function stepConfirmAndApply(state) {
217
57
  targets: state.targets,
218
58
  noRegister: false,
219
59
  };
220
- await skillAdd(skillOptions);
60
+ try {
61
+ await skillAdd(skillOptions);
62
+ }
63
+ catch (error) {
64
+ console.error(`Failed to add skill ${skillId}: ${error instanceof Error ? error.message : String(error)}`);
65
+ process.exitCode = 1;
66
+ }
221
67
  }
222
- console.log('\nβœ… All items added successfully!');
68
+ console.log('\nβœ… Setup complete!');
69
+ console.log('\nRun these commands to see your configuration:');
70
+ console.log(` acsync mcp # Show MCP status`);
71
+ console.log(` acsync skill # Show skill status`);
223
72
  }
224
73
  else {
225
74
  console.log('\nCancelled. No changes made.');
226
75
  }
227
- console.log();
228
76
  }
229
77
  //# sourceMappingURL=cli-init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-init.js","sourceRoot":"","sources":["../src/cli-init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-init.js","sourceRoot":"","sources":["../src/cli-init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TargetName } from '../types.js';
2
+ /**
3
+ * Prompt user to confirm the selection summary.
4
+ * @param targets - Selected target agents
5
+ * @param mcps - Selected MCP server IDs
6
+ * @param skills - Selected skill IDs
7
+ * @returns True if user confirmed, false otherwise
8
+ */
9
+ export declare function promptConfirm(targets: TargetName[], mcps: string[], skills: string[]): Promise<boolean>;
@@ -0,0 +1,44 @@
1
+ // @ts-ignore - enquirer uses CommonJS exports
2
+ const Confirm = require('enquirer/lib/prompts/confirm.js');
3
+ /**
4
+ * Prompt user to confirm the selection summary.
5
+ * @param targets - Selected target agents
6
+ * @param mcps - Selected MCP server IDs
7
+ * @param skills - Selected skill IDs
8
+ * @returns True if user confirmed, false otherwise
9
+ */
10
+ export async function promptConfirm(targets, mcps, skills) {
11
+ console.log('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
12
+ console.log('Summary');
13
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
14
+ console.log(`Targets: ${targets.join(', ')}`);
15
+ if (mcps.length > 0) {
16
+ console.log('\nMCP Servers to add:');
17
+ for (const mcpId of mcps) {
18
+ console.log(` β€’ ${mcpId}`);
19
+ }
20
+ }
21
+ if (skills.length > 0) {
22
+ console.log('\nSkills to add:');
23
+ for (const skillId of skills) {
24
+ console.log(` β€’ ${skillId}`);
25
+ }
26
+ }
27
+ if (mcps.length === 0 && skills.length === 0) {
28
+ console.log('\nNo items selected. Nothing to add.\n');
29
+ return false;
30
+ }
31
+ const prompt = new Confirm({
32
+ name: 'confirm',
33
+ message: 'Add these items to your project?',
34
+ initial: true
35
+ });
36
+ try {
37
+ return await prompt.run();
38
+ }
39
+ catch {
40
+ // User cancelled (Ctrl+C)
41
+ return false;
42
+ }
43
+ }
44
+ //# sourceMappingURL=confirm-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-prompt.js","sourceRoot":"","sources":["../../src/prompts/confirm-prompt.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAG3D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAqB,EACrB,IAAc,EACd,MAAgB;IAEhB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC;QACzB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ declare const MultiSelectBase: any;
2
+ /**
3
+ * Custom MultiSelect prompt with emacs-style Ctrl+n/p navigation.
4
+ * Extends enquirer's MultiSelect to support both arrow keys and Ctrl+n/p.
5
+ */
6
+ export declare class CustomMultiSelect extends MultiSelectBase {
7
+ constructor(options: any);
8
+ dispatch(s: any, key: any): Promise<boolean>;
9
+ }
10
+ export {};
@@ -0,0 +1,25 @@
1
+ // Import enquirer's MultiSelect via require to extend it
2
+ // @ts-ignore - enquirer uses CommonJS exports
3
+ const MultiSelectBase = require('enquirer/lib/prompts/multiselect.js');
4
+ /**
5
+ * Custom MultiSelect prompt with emacs-style Ctrl+n/p navigation.
6
+ * Extends enquirer's MultiSelect to support both arrow keys and Ctrl+n/p.
7
+ */
8
+ export class CustomMultiSelect extends MultiSelectBase {
9
+ constructor(options) {
10
+ super(options);
11
+ }
12
+ async dispatch(s, key) {
13
+ // Map Ctrl+n to down, Ctrl+p to up (emacs-style)
14
+ if (key.ctrl && key.name === 'n') {
15
+ key.name = 'down';
16
+ key.ctrl = false;
17
+ }
18
+ else if (key.ctrl && key.name === 'p') {
19
+ key.name = 'up';
20
+ key.ctrl = false;
21
+ }
22
+ return super.dispatch(s, key);
23
+ }
24
+ }
25
+ //# sourceMappingURL=custom-multiselect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-multiselect.js","sourceRoot":"","sources":["../../src/prompts/custom-multiselect.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,8CAA8C;AAC9C,MAAM,eAAe,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAEvE;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,YAAY,OAAY;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,CAAM,EAAE,GAAQ;QAC7B,iDAAiD;QACjD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;YAClB,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAChB,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { promptTargets } from './target-prompt.js';
2
+ export { promptMcps } from './mcp-prompt.js';
3
+ export { promptSkills } from './skill-prompt.js';
4
+ export { promptConfirm } from './confirm-prompt.js';
5
+ export { CustomMultiSelect } from './custom-multiselect.js';
@@ -0,0 +1,6 @@
1
+ export { promptTargets } from './target-prompt.js';
2
+ export { promptMcps } from './mcp-prompt.js';
3
+ export { promptSkills } from './skill-prompt.js';
4
+ export { promptConfirm } from './confirm-prompt.js';
5
+ export { CustomMultiSelect } from './custom-multiselect.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Prompt user to select MCP servers from catalog.
3
+ * @returns Selected MCP server IDs
4
+ */
5
+ export declare function promptMcps(): Promise<string[]>;
@@ -0,0 +1,48 @@
1
+ // @ts-ignore - enquirer uses CommonJS exports
2
+ const AutoComplete = require('enquirer/lib/prompts/autocomplete.js');
3
+ import { listMcps } from '../catalog.js';
4
+ /**
5
+ * Prompt user to select MCP servers from catalog.
6
+ * @returns Selected MCP server IDs
7
+ */
8
+ export async function promptMcps() {
9
+ const mcps = await listMcps();
10
+ if (mcps.length === 0) {
11
+ console.log('No MCP entries in catalog.\n');
12
+ console.log('Tip: Use these commands to add MCPs first:');
13
+ console.log(' acsync catalog mcp add @modelcontextprotocol/server-github');
14
+ console.log(' acsync catalog mcp add @modelcontextprotocol/server-filesystem\n');
15
+ return [];
16
+ }
17
+ const choices = mcps.map(mcp => ({
18
+ name: mcp.id,
19
+ message: mcp.displayName || mcp.id,
20
+ value: mcp.id,
21
+ hint: mcp.description.slice(0, 50)
22
+ }));
23
+ const prompt = new AutoComplete({
24
+ name: 'mcps',
25
+ message: 'Select MCP servers (type to search)',
26
+ multiple: true,
27
+ choices: choices,
28
+ limit: 10,
29
+ suggest: (input, choices) => {
30
+ // Simple fuzzy search - matches if input is substring of name or message
31
+ const lowerInput = input.toLowerCase();
32
+ return choices.filter(choice => {
33
+ const name = (choice.name || '').toLowerCase();
34
+ const message = (choice.message || '').toLowerCase();
35
+ return name.includes(lowerInput) || message.includes(lowerInput);
36
+ }).slice(0, 10);
37
+ }
38
+ });
39
+ try {
40
+ const result = await prompt.run();
41
+ return result || [];
42
+ }
43
+ catch {
44
+ // User cancelled (Ctrl+C)
45
+ return [];
46
+ }
47
+ }
48
+ //# sourceMappingURL=mcp-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-prompt.js","sourceRoot":"","sources":["../../src/prompts/mcp-prompt.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,CAAC,EAAE;QACZ,OAAO,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE;QAClC,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KACnC,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC,KAAa,EAAE,OAAc,EAAE,EAAE;YACzC,yEAAyE;YACzE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC7B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Prompt user to select skills from catalog.
3
+ * @returns Selected skill IDs
4
+ */
5
+ export declare function promptSkills(): Promise<string[]>;
@@ -0,0 +1,48 @@
1
+ // @ts-ignore - enquirer uses CommonJS exports
2
+ const AutoComplete = require('enquirer/lib/prompts/autocomplete.js');
3
+ import { listSkills } from '../catalog.js';
4
+ /**
5
+ * Prompt user to select skills from catalog.
6
+ * @returns Selected skill IDs
7
+ */
8
+ export async function promptSkills() {
9
+ const skills = await listSkills();
10
+ if (skills.length === 0) {
11
+ console.log('No skill entries in catalog.\n');
12
+ console.log('Tip: Use these commands to add skills first:');
13
+ console.log(' acsync catalog skill import ~/.claude/skills/my-skill');
14
+ console.log(' acsync skill install <github-url>\n');
15
+ return [];
16
+ }
17
+ const choices = skills.map(skill => ({
18
+ name: skill.id,
19
+ message: skill.displayName || skill.id,
20
+ value: skill.id,
21
+ hint: skill.description.slice(0, 50)
22
+ }));
23
+ const prompt = new AutoComplete({
24
+ name: 'skills',
25
+ message: 'Select skills (type to search)',
26
+ multiple: true,
27
+ choices: choices,
28
+ limit: 10,
29
+ suggest: (input, choices) => {
30
+ // Simple fuzzy search - matches if input is substring of name or message
31
+ const lowerInput = input.toLowerCase();
32
+ return choices.filter(choice => {
33
+ const name = (choice.name || '').toLowerCase();
34
+ const message = (choice.message || '').toLowerCase();
35
+ return name.includes(lowerInput) || message.includes(lowerInput);
36
+ }).slice(0, 10);
37
+ }
38
+ });
39
+ try {
40
+ const result = await prompt.run();
41
+ return result || [];
42
+ }
43
+ catch {
44
+ // User cancelled (Ctrl+C)
45
+ return [];
46
+ }
47
+ }
48
+ //# sourceMappingURL=skill-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-prompt.js","sourceRoot":"","sources":["../../src/prompts/skill-prompt.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,KAAK,CAAC,EAAE;QACd,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE;QACtC,KAAK,EAAE,KAAK,CAAC,EAAE;QACf,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KACrC,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,gCAAgC;QACzC,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC,KAAa,EAAE,OAAc,EAAE,EAAE;YACzC,yEAAyE;YACzE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC7B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { TargetName } from '../types.js';
2
+ /**
3
+ * Prompt user to select target agents.
4
+ * @param preselected - Pre-selected targets (from CLI options)
5
+ * @returns Selected target names
6
+ */
7
+ export declare function promptTargets(preselected?: TargetName[]): Promise<TargetName[]>;
@@ -0,0 +1,48 @@
1
+ // @ts-ignore - enquirer uses CommonJS exports
2
+ import enquirer from 'enquirer';
3
+ import { CustomMultiSelect } from './custom-multiselect.js';
4
+ /**
5
+ * Prompt user to select target agents.
6
+ * @param preselected - Pre-selected targets (from CLI options)
7
+ * @returns Selected target names
8
+ */
9
+ export async function promptTargets(preselected = []) {
10
+ const EnquirerClass = enquirer;
11
+ const instance = new EnquirerClass({
12
+ symbols: {
13
+ checked: 'β—‰',
14
+ unchecked: 'β—‹'
15
+ }
16
+ });
17
+ instance.register('multi', CustomMultiSelect);
18
+ // All targets selected if none specified
19
+ const allSelected = preselected.length === 0;
20
+ const result = await instance.prompt({
21
+ type: 'multi',
22
+ name: 'targets',
23
+ message: 'Select target agents',
24
+ choices: [
25
+ {
26
+ name: 'claude',
27
+ message: 'Claude Code',
28
+ hint: '.mcp.json',
29
+ enabled: preselected.includes('claude') || allSelected
30
+ },
31
+ {
32
+ name: 'codex',
33
+ message: 'Codex',
34
+ hint: '.codex/config.toml',
35
+ enabled: preselected.includes('codex') || allSelected
36
+ },
37
+ {
38
+ name: 'gemini',
39
+ message: 'Gemini CLI',
40
+ hint: '.gemini/settings.json',
41
+ enabled: preselected.includes('gemini') || allSelected
42
+ }
43
+ ],
44
+ validate: (value) => value.length > 0 || 'Please select at least one target'
45
+ });
46
+ return result.targets;
47
+ }
48
+ //# sourceMappingURL=target-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-prompt.js","sourceRoot":"","sources":["../../src/prompts/target-prompt.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,cAA4B,EAAE;IAChE,MAAM,aAAa,GAAG,QAAe,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;QACjC,OAAO,EAAE;YACP,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,GAAG;SACf;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAE9C,yCAAyC;IACzC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,aAAa;gBACtB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW;aACvD;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW;aACtD;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW;aACvD;SACF;QACD,QAAQ,EAAE,CAAC,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,mCAAmC;KAC3F,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,OAAuB,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-config-sync",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Cross-agent configuration manager for MCP servers and skills. Directly edits native config filesβ€”no manifest, no sync step.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -54,6 +54,7 @@
54
54
  "homepage": "https://github.com/yama662607/agent-config-sync#readme",
55
55
  "dependencies": {
56
56
  "@iarna/toml": "^2.2.5",
57
+ "enquirer": "^2.4.1",
57
58
  "yaml": "^2.8.1"
58
59
  },
59
60
  "devDependencies": {