@yama662607/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.
@@ -0,0 +1,408 @@
1
+ /**
2
+ * MCP Project TUI
3
+ *
4
+ * Manage MCP servers for the current project with visual status display.
5
+ */
6
+ import { createRequire } from 'node:module';
7
+ const require = createRequire(import.meta.url);
8
+ // @ts-ignore - enquirer uses CommonJS exports
9
+ const { Select, prompt: enquirerPrompt } = require('enquirer');
10
+ import { getMcpServers } from '../config-adapters.js';
11
+ import { discoverProject } from '../project-discovery.js';
12
+ import { listMcps } from '../catalog.js';
13
+ import { join } from 'node:path';
14
+ /**
15
+ * MCP TUI Screen
16
+ */
17
+ export class McpTuiScreen {
18
+ name = 'mcp';
19
+ async render(state) {
20
+ console.clear();
21
+ this.renderHeader();
22
+ // Main loop
23
+ while (true) {
24
+ const action = await this.renderMain(state);
25
+ if (action === 'exit')
26
+ return null;
27
+ if (action === 'back')
28
+ return state;
29
+ }
30
+ }
31
+ renderHeader() {
32
+ console.log('╔═══════════════════════════════════════════════════════════════════╗');
33
+ console.log('║ 🔧 Project MCPs ║');
34
+ console.log('╚═══════════════════════════════════════════════════════════════════╝');
35
+ }
36
+ getDefaultConfigPath(target, projectRoot) {
37
+ switch (target) {
38
+ case 'claude':
39
+ return join(projectRoot, '.mcp.json');
40
+ case 'codex':
41
+ return join(projectRoot, '.codex', 'config.toml');
42
+ case 'gemini':
43
+ return join(projectRoot, '.gemini', 'settings.json');
44
+ }
45
+ }
46
+ async renderMain(state) {
47
+ const discovery = await discoverProject();
48
+ const currentTarget = state.target;
49
+ // Get current status for all targets
50
+ const allStatus = {};
51
+ for (const target of ['claude', 'codex', 'gemini']) {
52
+ try {
53
+ // Get config path for target
54
+ const configPath = this.getDefaultConfigPath(target, discovery.root);
55
+ const servers = await getMcpServers(target, configPath);
56
+ allStatus[target] = servers;
57
+ }
58
+ catch {
59
+ allStatus[target] = {};
60
+ }
61
+ }
62
+ // Display status table
63
+ this.renderStatusTable(allStatus, currentTarget);
64
+ console.log();
65
+ // Get unique server names
66
+ const serverNames = new Set();
67
+ for (const target of ['claude', 'codex', 'gemini']) {
68
+ Object.keys(allStatus[target]).forEach(name => serverNames.add(name));
69
+ }
70
+ const choices = [
71
+ { name: 'add', message: '➕ Add MCP to project', value: '__add__', hint: '' },
72
+ { name: 'switch-target', message: `🔄 Switch target (current: ${currentTarget})`, value: '__switch__', hint: '' },
73
+ { name: 'exit', message: '🚪 Exit', value: '__exit__', hint: '' },
74
+ ];
75
+ // Add server actions
76
+ if (serverNames.size > 0) {
77
+ const serverChoices = Array.from(serverNames).map(name => {
78
+ const enabledForTarget = allStatus[currentTarget]?.[name]?.enabled ?? false;
79
+ const statusIcon = enabledForTarget ? '✅' : '❌';
80
+ return {
81
+ name: `server:${name}`,
82
+ message: `${statusIcon} ${name}`,
83
+ value: name,
84
+ hint: ''
85
+ };
86
+ });
87
+ choices.splice(1, 0, ...serverChoices);
88
+ }
89
+ const prompt = new Select({
90
+ name: 'action',
91
+ message: 'Select MCP or action:',
92
+ choices,
93
+ actions: {
94
+ ctrl: { n: 'down', p: 'up' }
95
+ }
96
+ });
97
+ try {
98
+ const selected = await prompt.run();
99
+ if (selected === '__exit__')
100
+ return 'exit';
101
+ if (selected === '__add__')
102
+ return await this.handleAdd(state);
103
+ if (selected === '__switch__')
104
+ return await this.handleSwitchTarget(state);
105
+ // Server selected
106
+ return await this.handleServerAction(selected, allStatus, currentTarget);
107
+ }
108
+ catch {
109
+ return 'exit';
110
+ }
111
+ }
112
+ renderStatusTable(allStatus, currentTarget) {
113
+ const targets = ['claude', 'codex', 'gemini'];
114
+ const serverNames = new Set();
115
+ for (const target of targets) {
116
+ Object.keys(allStatus[target] || {}).forEach(name => serverNames.add(name));
117
+ }
118
+ if (serverNames.size === 0) {
119
+ console.log('\n No MCP servers configured for this project.');
120
+ console.log(' Select "➕ Add MCP to project" to get started.\n');
121
+ return;
122
+ }
123
+ // Table header
124
+ console.log('\n ┌─' + '─'.repeat(30) + '┬─' + '─'.repeat(8) + '─' +
125
+ '┬─'.repeat(3) + '┬─'.repeat(3) + '┬─'.repeat(3) + '┐');
126
+ console.log(' │ ' + 'Server'.padEnd(30) + '│ ' + 'Status'.padEnd(8) +
127
+ ' │ C │ C │ G │');
128
+ console.log(' │' + '─'.repeat(32) + '┼' + '─'.repeat(10) +
129
+ '┼───┼───┼───┤');
130
+ // Rows
131
+ for (const name of Array.from(serverNames).sort()) {
132
+ const status = allStatus[currentTarget]?.[name];
133
+ const enabled = status?.enabled ?? false;
134
+ const statusText = enabled ? '✅ On ' : '❌ Off';
135
+ console.log(' │ ' + name.padEnd(30) + '│ ' + statusText.padEnd(8) + ' │ ' +
136
+ (allStatus.claude?.[name]?.enabled ? '✅' : '❌') + ' │ ' +
137
+ (allStatus.codex?.[name]?.enabled ? '✅' : '❌') + ' │ ' +
138
+ (allStatus.gemini?.[name]?.enabled ? '✅' : '❌') + ' │');
139
+ }
140
+ console.log(' └─' + '─'.repeat(30) + '┴─' + '─'.repeat(8) + '─' +
141
+ '┴───┴───┴───┘');
142
+ console.log(' Legend: C=Claude, C=Codex, G=Gemini | ✅=Enabled, ❌=Disabled');
143
+ }
144
+ async handleSwitchTarget(state) {
145
+ const targets = ['claude', 'codex', 'gemini'];
146
+ const prompt = new Select({
147
+ name: 'target',
148
+ message: 'Select target:',
149
+ choices: targets.map(t => ({
150
+ name: t,
151
+ message: t === state.target ? `${t} (current)` : t
152
+ })),
153
+ actions: {
154
+ ctrl: { n: 'down', p: 'up' }
155
+ }
156
+ });
157
+ try {
158
+ const selected = await prompt.run();
159
+ state.target = selected;
160
+ return 'refresh';
161
+ }
162
+ catch {
163
+ return 'back';
164
+ }
165
+ }
166
+ async handleAdd(state) {
167
+ console.log('\n📦 Add MCP to Project\n');
168
+ // Get catalog entries
169
+ const mcps = await listMcps();
170
+ if (mcps.length === 0) {
171
+ console.log('No MCP entries in catalog.');
172
+ console.log('\nOptions:');
173
+ console.log(' 1. Add from npm package');
174
+ console.log(' 2. Add custom configuration');
175
+ const prompt = new Select({
176
+ name: 'option',
177
+ message: 'Choose option:',
178
+ choices: [
179
+ { name: 'npm', message: 'Add from npm package' },
180
+ { name: 'custom', message: 'Add custom configuration' },
181
+ { name: 'back', message: '← Back' }
182
+ ],
183
+ actions: {
184
+ ctrl: { n: 'down', p: 'up' }
185
+ }
186
+ });
187
+ try {
188
+ const choice = await prompt.run();
189
+ if (choice === 'back')
190
+ return 'back';
191
+ if (choice === 'npm')
192
+ return await this.addFromNpm(state);
193
+ if (choice === 'custom')
194
+ return await this.addCustom(state);
195
+ }
196
+ catch {
197
+ return 'back';
198
+ }
199
+ }
200
+ // Show catalog entries
201
+ const choices = mcps.map(mcp => ({
202
+ name: mcp.id,
203
+ message: `📦 ${mcp.displayName || mcp.id}`,
204
+ hint: mcp.description?.slice(0, 50)
205
+ }));
206
+ choices.push({ name: 'npm', message: 'Add from npm package (not in catalog)', hint: '' }, { name: 'custom', message: 'Add custom configuration', hint: '' }, { name: 'back', message: '← Back', hint: '' });
207
+ const prompt = new Select({
208
+ name: 'mcp',
209
+ message: 'Select MCP (or action):',
210
+ choices,
211
+ actions: {
212
+ ctrl: { n: 'down', p: 'up' }
213
+ }
214
+ });
215
+ try {
216
+ const selected = await prompt.run();
217
+ if (selected === 'back')
218
+ return 'back';
219
+ if (selected === 'npm')
220
+ return await this.addFromNpm(state);
221
+ if (selected === 'custom')
222
+ return await this.addCustom(state);
223
+ // Add from catalog
224
+ return await this.addToProject(selected, state);
225
+ }
226
+ catch {
227
+ return 'back';
228
+ }
229
+ }
230
+ async addToProject(mcpId, state) {
231
+ const { mcpAdd } = await import('../cli-mcp.js');
232
+ try {
233
+ await mcpAdd({
234
+ packageId: mcpId,
235
+ targets: [state.target],
236
+ noRegister: true
237
+ });
238
+ console.log('\n✅ Added to project!');
239
+ }
240
+ catch (error) {
241
+ console.error(`\n❌ Error: ${error.message}`);
242
+ }
243
+ await this.pressEnter();
244
+ return 'refresh';
245
+ }
246
+ async addFromNpm(state) {
247
+ const { prompt } = await import('enquirer');
248
+ try {
249
+ const response = await prompt({
250
+ type: 'input',
251
+ name: 'packageId',
252
+ message: 'Enter npm package ID (e.g., @modelcontextprotocol/server-github):'
253
+ });
254
+ if (!response.packageId)
255
+ return 'back';
256
+ const { mcpAdd } = await import('../cli-mcp.js');
257
+ await mcpAdd({
258
+ packageId: response.packageId,
259
+ targets: [state.target],
260
+ noRegister: false
261
+ });
262
+ console.log('\n✅ Added to catalog and project!');
263
+ }
264
+ catch (error) {
265
+ console.error(`\n❌ Error: ${error.message}`);
266
+ }
267
+ await this.pressEnter();
268
+ return 'refresh';
269
+ }
270
+ async addCustom(state) {
271
+ const { prompt } = await import('enquirer');
272
+ try {
273
+ const response = await prompt([
274
+ {
275
+ type: 'input',
276
+ name: 'name',
277
+ message: 'Server name:'
278
+ },
279
+ {
280
+ type: 'select',
281
+ name: 'transport',
282
+ message: 'Transport type:',
283
+ choices: ['stdio', 'http']
284
+ }
285
+ ]);
286
+ if (!response.name)
287
+ return 'back';
288
+ let url;
289
+ let command;
290
+ let args;
291
+ if (response.transport === 'http') {
292
+ const urlResponse = await prompt({
293
+ type: 'input',
294
+ name: 'url',
295
+ message: 'HTTP URL:'
296
+ });
297
+ url = urlResponse.url;
298
+ }
299
+ else {
300
+ const cmdResponse = await prompt({
301
+ type: 'input',
302
+ name: 'command',
303
+ message: 'Command (e.g., npx):'
304
+ });
305
+ command = cmdResponse.command;
306
+ }
307
+ // Add to catalog first
308
+ const { catalogMcpAdd } = await import('../cli-catalog.js');
309
+ await catalogMcpAdd({
310
+ packageId: response.name,
311
+ url,
312
+ command,
313
+ args
314
+ });
315
+ // Then add to project
316
+ const { mcpAdd } = await import('../cli-mcp.js');
317
+ await mcpAdd({
318
+ packageId: response.name,
319
+ targets: [state.target],
320
+ noRegister: true
321
+ });
322
+ console.log('\n✅ Added to catalog and project!');
323
+ }
324
+ catch (error) {
325
+ console.error(`\n❌ Error: ${error.message}`);
326
+ }
327
+ await this.pressEnter();
328
+ return 'refresh';
329
+ }
330
+ async handleServerAction(serverName, allStatus, currentTarget) {
331
+ const isEnabled = allStatus[currentTarget]?.[serverName]?.enabled ?? false;
332
+ console.log(`\n🔧 ${serverName}`);
333
+ console.log('─'.repeat(60));
334
+ const prompt = new Select({
335
+ name: 'action',
336
+ message: `Server is ${isEnabled ? 'enabled' : 'disabled'}. What would you like to do?`,
337
+ choices: [
338
+ { name: 'toggle', message: isEnabled ? '❌ Disable' : '✅ Enable' },
339
+ { name: 'remove', message: '🗑️ Remove from project' },
340
+ { name: 'back', message: '← Back' }
341
+ ],
342
+ actions: {
343
+ ctrl: { n: 'down', p: 'up' }
344
+ }
345
+ });
346
+ try {
347
+ const action = await prompt.run();
348
+ if (action === 'back')
349
+ return 'refresh';
350
+ if (action === 'toggle')
351
+ return await this.toggleServer(serverName, currentTarget, isEnabled);
352
+ if (action === 'remove')
353
+ return await this.removeServer(serverName, currentTarget);
354
+ }
355
+ catch {
356
+ return 'refresh';
357
+ }
358
+ return 'refresh';
359
+ }
360
+ async toggleServer(serverName, target, currentEnabled) {
361
+ const { mcpEnable, mcpDisable } = await import('../cli-mcp.js');
362
+ try {
363
+ if (currentEnabled) {
364
+ await mcpDisable({ serverName, targets: [target] });
365
+ console.log(`\n✅ Disabled ${serverName}`);
366
+ }
367
+ else {
368
+ await mcpEnable({ serverName, targets: [target] });
369
+ console.log(`\n✅ Enabled ${serverName}`);
370
+ }
371
+ }
372
+ catch (error) {
373
+ console.error(`\n❌ Error: ${error.message}`);
374
+ }
375
+ await this.pressEnter();
376
+ return 'refresh';
377
+ }
378
+ async removeServer(serverName, target) {
379
+ const { prompt } = await import('enquirer');
380
+ try {
381
+ const confirmed = await prompt({
382
+ type: 'confirm',
383
+ name: 'confirm',
384
+ message: `Remove "${serverName}" from ${target}?`,
385
+ initial: false
386
+ });
387
+ if (!confirmed)
388
+ return 'refresh';
389
+ const { mcpRemove } = await import('../cli-mcp.js');
390
+ await mcpRemove({ serverName, targets: [target] });
391
+ console.log(`\n✅ Removed ${serverName}`);
392
+ }
393
+ catch (error) {
394
+ console.error(`\n❌ Error: ${error.message}`);
395
+ }
396
+ await this.pressEnter();
397
+ return 'refresh';
398
+ }
399
+ pressEnter() {
400
+ return new Promise(resolve => {
401
+ process.stdin.once('data', () => resolve());
402
+ });
403
+ }
404
+ handleAction(state, action) {
405
+ return Promise.resolve(state);
406
+ }
407
+ }
408
+ //# sourceMappingURL=mcp-tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tui.js","sourceRoot":"","sources":["../../src/tui/mcp-tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Skill Project TUI
3
+ *
4
+ * Manage skills for the current project.
5
+ */
6
+ import type { TuiState, ScreenAction } from './tui-base.js';
7
+ /**
8
+ * Skill TUI Screen
9
+ */
10
+ export declare class SkillTuiScreen {
11
+ name: "skill";
12
+ render(state: TuiState): Promise<TuiState | null>;
13
+ private renderHeader;
14
+ private getDefaultConfigPath;
15
+ private renderMain;
16
+ private renderStatusTable;
17
+ private getInstalledSkills;
18
+ private handleSwitchTarget;
19
+ private handleAdd;
20
+ private handleInstall;
21
+ private addToProject;
22
+ private installFromGithub;
23
+ private importLocal;
24
+ private handleSkillAction;
25
+ private removeSkill;
26
+ private showSkillDetails;
27
+ private pressEnter;
28
+ handleAction(state: TuiState, action: ScreenAction): Promise<TuiState>;
29
+ }