agent-config-sync 0.2.0 β 0.3.1
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/dist/cli-init.d.ts +1 -1
- package/dist/cli-init.js +31 -183
- package/dist/cli-init.js.map +1 -1
- package/dist/prompts/confirm-prompt.d.ts +9 -0
- package/dist/prompts/confirm-prompt.js +46 -0
- package/dist/prompts/confirm-prompt.js.map +1 -0
- package/dist/prompts/custom-multiselect.d.ts +10 -0
- package/dist/prompts/custom-multiselect.js +26 -0
- package/dist/prompts/custom-multiselect.js.map +1 -0
- package/dist/prompts/index.d.ts +5 -0
- package/dist/prompts/index.js +6 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/mcp-prompt.d.ts +5 -0
- package/dist/prompts/mcp-prompt.js +50 -0
- package/dist/prompts/mcp-prompt.js.map +1 -0
- package/dist/prompts/skill-prompt.d.ts +5 -0
- package/dist/prompts/skill-prompt.js +50 -0
- package/dist/prompts/skill-prompt.js.map +1 -0
- package/dist/prompts/target-prompt.d.ts +7 -0
- package/dist/prompts/target-prompt.js +47 -0
- package/dist/prompts/target-prompt.js.map +1 -0
- package/package.json +2 -1
package/dist/cli-init.d.ts
CHANGED
package/dist/cli-init.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { discoverProject } from './project-discovery.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
83
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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β
|
|
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
|
package/dist/cli-init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-init.js","sourceRoot":"","sources":["../src/cli-init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,
|
|
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,46 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
// @ts-ignore - enquirer uses CommonJS exports
|
|
4
|
+
const Confirm = require('enquirer/lib/prompts/confirm.js');
|
|
5
|
+
/**
|
|
6
|
+
* Prompt user to confirm the selection summary.
|
|
7
|
+
* @param targets - Selected target agents
|
|
8
|
+
* @param mcps - Selected MCP server IDs
|
|
9
|
+
* @param skills - Selected skill IDs
|
|
10
|
+
* @returns True if user confirmed, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
export async function promptConfirm(targets, mcps, skills) {
|
|
13
|
+
console.log('\nββββββββββββββββββββββββββββββββββββββββ');
|
|
14
|
+
console.log('Summary');
|
|
15
|
+
console.log('ββββββββββββββββββββββββββββββββββββββββ\n');
|
|
16
|
+
console.log(`Targets: ${targets.join(', ')}`);
|
|
17
|
+
if (mcps.length > 0) {
|
|
18
|
+
console.log('\nMCP Servers to add:');
|
|
19
|
+
for (const mcpId of mcps) {
|
|
20
|
+
console.log(` β’ ${mcpId}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (skills.length > 0) {
|
|
24
|
+
console.log('\nSkills to add:');
|
|
25
|
+
for (const skillId of skills) {
|
|
26
|
+
console.log(` β’ ${skillId}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (mcps.length === 0 && skills.length === 0) {
|
|
30
|
+
console.log('\nNo items selected. Nothing to add.\n');
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const prompt = new Confirm({
|
|
34
|
+
name: 'confirm',
|
|
35
|
+
message: 'Add these items to your project?',
|
|
36
|
+
initial: true
|
|
37
|
+
});
|
|
38
|
+
try {
|
|
39
|
+
return await prompt.run();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// User cancelled (Ctrl+C)
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# 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,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,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
|
+
/**
|
|
2
|
+
* Custom MultiSelect prompt with emacs-style Ctrl+n/p navigation.
|
|
3
|
+
* Extends enquirer's MultiSelect to support both arrow keys and Ctrl+n/p.
|
|
4
|
+
*/
|
|
5
|
+
declare const MultiSelectBase: any;
|
|
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,26 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
/**
|
|
4
|
+
* Custom MultiSelect prompt with emacs-style Ctrl+n/p navigation.
|
|
5
|
+
* Extends enquirer's MultiSelect to support both arrow keys and Ctrl+n/p.
|
|
6
|
+
*/
|
|
7
|
+
// @ts-ignore - enquirer uses CommonJS exports
|
|
8
|
+
const MultiSelectBase = require('enquirer/lib/prompts/multiselect.js');
|
|
9
|
+
export class CustomMultiSelect extends MultiSelectBase {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super(options);
|
|
12
|
+
}
|
|
13
|
+
async dispatch(s, key) {
|
|
14
|
+
// Map Ctrl+n to down, Ctrl+p to up (emacs-style)
|
|
15
|
+
if (key.ctrl && key.name === 'n') {
|
|
16
|
+
key.name = 'down';
|
|
17
|
+
key.ctrl = false;
|
|
18
|
+
}
|
|
19
|
+
else if (key.ctrl && key.name === 'p') {
|
|
20
|
+
key.name = 'up';
|
|
21
|
+
key.ctrl = false;
|
|
22
|
+
}
|
|
23
|
+
return super.dispatch(s, key);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# 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,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C;;;GAGG;AACH,8CAA8C;AAC9C,MAAM,eAAe,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAEvE,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,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,50 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
// @ts-ignore - enquirer uses CommonJS exports
|
|
4
|
+
const AutoComplete = require('enquirer/lib/prompts/autocomplete.js');
|
|
5
|
+
import { listMcps } from '../catalog.js';
|
|
6
|
+
/**
|
|
7
|
+
* Prompt user to select MCP servers from catalog.
|
|
8
|
+
* @returns Selected MCP server IDs
|
|
9
|
+
*/
|
|
10
|
+
export async function promptMcps() {
|
|
11
|
+
const mcps = await listMcps();
|
|
12
|
+
if (mcps.length === 0) {
|
|
13
|
+
console.log('No MCP entries in catalog.\n');
|
|
14
|
+
console.log('Tip: Use these commands to add MCPs first:');
|
|
15
|
+
console.log(' acsync catalog mcp add @modelcontextprotocol/server-github');
|
|
16
|
+
console.log(' acsync catalog mcp add @modelcontextprotocol/server-filesystem\n');
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
const choices = mcps.map(mcp => ({
|
|
20
|
+
name: mcp.id,
|
|
21
|
+
message: mcp.displayName || mcp.id,
|
|
22
|
+
value: mcp.id,
|
|
23
|
+
hint: mcp.description.slice(0, 50)
|
|
24
|
+
}));
|
|
25
|
+
const prompt = new AutoComplete({
|
|
26
|
+
name: 'mcps',
|
|
27
|
+
message: 'Select MCP servers (type to search)',
|
|
28
|
+
multiple: true,
|
|
29
|
+
choices: choices,
|
|
30
|
+
limit: 10,
|
|
31
|
+
suggest: (input, choices) => {
|
|
32
|
+
// Simple fuzzy search - matches if input is substring of name or message
|
|
33
|
+
const lowerInput = input.toLowerCase();
|
|
34
|
+
return choices.filter(choice => {
|
|
35
|
+
const name = (choice.name || '').toLowerCase();
|
|
36
|
+
const message = (choice.message || '').toLowerCase();
|
|
37
|
+
return name.includes(lowerInput) || message.includes(lowerInput);
|
|
38
|
+
}).slice(0, 10);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
try {
|
|
42
|
+
const result = await prompt.run();
|
|
43
|
+
return result || [];
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// User cancelled (Ctrl+C)
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# 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,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,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,50 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
// @ts-ignore - enquirer uses CommonJS exports
|
|
4
|
+
const AutoComplete = require('enquirer/lib/prompts/autocomplete.js');
|
|
5
|
+
import { listSkills } from '../catalog.js';
|
|
6
|
+
/**
|
|
7
|
+
* Prompt user to select skills from catalog.
|
|
8
|
+
* @returns Selected skill IDs
|
|
9
|
+
*/
|
|
10
|
+
export async function promptSkills() {
|
|
11
|
+
const skills = await listSkills();
|
|
12
|
+
if (skills.length === 0) {
|
|
13
|
+
console.log('No skill entries in catalog.\n');
|
|
14
|
+
console.log('Tip: Use these commands to add skills first:');
|
|
15
|
+
console.log(' acsync catalog skill import ~/.claude/skills/my-skill');
|
|
16
|
+
console.log(' acsync skill install <github-url>\n');
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
const choices = skills.map(skill => ({
|
|
20
|
+
name: skill.id,
|
|
21
|
+
message: skill.displayName || skill.id,
|
|
22
|
+
value: skill.id,
|
|
23
|
+
hint: skill.description.slice(0, 50)
|
|
24
|
+
}));
|
|
25
|
+
const prompt = new AutoComplete({
|
|
26
|
+
name: 'skills',
|
|
27
|
+
message: 'Select skills (type to search)',
|
|
28
|
+
multiple: true,
|
|
29
|
+
choices: choices,
|
|
30
|
+
limit: 10,
|
|
31
|
+
suggest: (input, choices) => {
|
|
32
|
+
// Simple fuzzy search - matches if input is substring of name or message
|
|
33
|
+
const lowerInput = input.toLowerCase();
|
|
34
|
+
return choices.filter(choice => {
|
|
35
|
+
const name = (choice.name || '').toLowerCase();
|
|
36
|
+
const message = (choice.message || '').toLowerCase();
|
|
37
|
+
return name.includes(lowerInput) || message.includes(lowerInput);
|
|
38
|
+
}).slice(0, 10);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
try {
|
|
42
|
+
const result = await prompt.run();
|
|
43
|
+
return result || [];
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// User cancelled (Ctrl+C)
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# 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,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,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,47 @@
|
|
|
1
|
+
import enquirer from 'enquirer';
|
|
2
|
+
import { CustomMultiSelect } from './custom-multiselect.js';
|
|
3
|
+
/**
|
|
4
|
+
* Prompt user to select target agents.
|
|
5
|
+
* @param preselected - Pre-selected targets (from CLI options)
|
|
6
|
+
* @returns Selected target names
|
|
7
|
+
*/
|
|
8
|
+
export async function promptTargets(preselected = []) {
|
|
9
|
+
const EnquirerClass = enquirer;
|
|
10
|
+
const instance = new EnquirerClass({
|
|
11
|
+
symbols: {
|
|
12
|
+
checked: 'β',
|
|
13
|
+
unchecked: 'β'
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
instance.register('multi', CustomMultiSelect);
|
|
17
|
+
// All targets selected if none specified
|
|
18
|
+
const allSelected = preselected.length === 0;
|
|
19
|
+
const result = await instance.prompt({
|
|
20
|
+
type: 'multi',
|
|
21
|
+
name: 'targets',
|
|
22
|
+
message: 'Select target agents',
|
|
23
|
+
choices: [
|
|
24
|
+
{
|
|
25
|
+
name: 'claude',
|
|
26
|
+
message: 'Claude Code',
|
|
27
|
+
hint: '.mcp.json',
|
|
28
|
+
enabled: preselected.includes('claude') || allSelected
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'codex',
|
|
32
|
+
message: 'Codex',
|
|
33
|
+
hint: '.codex/config.toml',
|
|
34
|
+
enabled: preselected.includes('codex') || allSelected
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'gemini',
|
|
38
|
+
message: 'Gemini CLI',
|
|
39
|
+
hint: '.gemini/settings.json',
|
|
40
|
+
enabled: preselected.includes('gemini') || allSelected
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
validate: (value) => value.length > 0 || 'Please select at least one target'
|
|
44
|
+
});
|
|
45
|
+
return result.targets;
|
|
46
|
+
}
|
|
47
|
+
//# 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,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.
|
|
3
|
+
"version": "0.3.1",
|
|
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": {
|