@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.
- package/dist/cli-init.js +92 -53
- package/dist/cli-init.js.map +1 -1
- package/dist/cli.js +34 -12
- package/dist/cli.js.map +1 -1
- package/dist/config-adapters.js +5 -3
- package/dist/config-adapters.js.map +1 -1
- package/dist/prompts/custom-multiselect.d.ts +21 -0
- package/dist/prompts/custom-multiselect.js +94 -1
- package/dist/prompts/custom-multiselect.js.map +1 -1
- package/dist/prompts/index.d.ts +2 -2
- package/dist/prompts/index.js +2 -2
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/mcp-prompt.d.ts +5 -2
- package/dist/prompts/mcp-prompt.js +24 -3
- package/dist/prompts/mcp-prompt.js.map +1 -1
- package/dist/prompts/skill-prompt.d.ts +5 -2
- package/dist/prompts/skill-prompt.js +24 -3
- package/dist/prompts/skill-prompt.js.map +1 -1
- package/dist/tui/catalog-tui.d.ts +29 -0
- package/dist/tui/catalog-tui.js +395 -0
- package/dist/tui/catalog-tui.js.map +1 -0
- package/dist/tui/index.d.ts +8 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/mcp-tui.d.ts +27 -0
- package/dist/tui/mcp-tui.js +408 -0
- package/dist/tui/mcp-tui.js.map +1 -0
- package/dist/tui/skill-tui.d.ts +29 -0
- package/dist/tui/skill-tui.js +373 -0
- package/dist/tui/skill-tui.js.map +1 -0
- package/dist/tui/tui-base.d.ts +36 -0
- package/dist/tui/tui-base.js +64 -0
- package/dist/tui/tui-base.js.map +1 -0
- package/dist/types.d.ts +2 -1
- package/package.json +1 -1
|
@@ -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
|
+
}
|