mcp-config-manager 2.1.0 → 2.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.
- package/README.md +206 -0
- package/package.json +1 -1
- package/public/index.html +98 -2
- package/public/js/clientView.js +437 -3
- package/public/js/main.js +2 -2
- package/public/js/skillsApi.js +135 -0
- package/public/style.css +877 -26
- package/src/commands-manager.js +268 -0
- package/src/config-manager.js +3 -5
- package/src/server.js +300 -0
- package/src/skills-manager.js +555 -0
- package/src/skills-scopes.js +809 -0
|
@@ -0,0 +1,809 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Skills/prompts/rules configuration per client.
|
|
6
|
+
* Each client can have multiple "tabs" for different types of customizations.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const homedir = os.homedir();
|
|
10
|
+
const platform = os.platform();
|
|
11
|
+
|
|
12
|
+
// Platform-specific paths for VS Code extensions
|
|
13
|
+
const getVSCodePath = () => {
|
|
14
|
+
if (platform === 'darwin') {
|
|
15
|
+
return path.join(homedir, 'Library/Application Support/Code/User');
|
|
16
|
+
} else if (platform === 'win32') {
|
|
17
|
+
return path.join(process.env.APPDATA || '', 'Code/User');
|
|
18
|
+
}
|
|
19
|
+
return path.join(homedir, '.config/Code/User');
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// Platform-specific paths for Cline rules
|
|
23
|
+
const getClinePath = () => {
|
|
24
|
+
if (platform === 'darwin') {
|
|
25
|
+
return path.join(homedir, 'Documents', 'Cline', 'Rules');
|
|
26
|
+
} else if (platform === 'win32') {
|
|
27
|
+
return path.join(process.env.USERPROFILE || homedir, 'Documents', 'Cline', 'Rules');
|
|
28
|
+
}
|
|
29
|
+
return path.join(homedir, 'Documents', 'Cline', 'Rules');
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Client-specific skill/prompt configurations
|
|
34
|
+
* Each client can have multiple tabs for different content types
|
|
35
|
+
*/
|
|
36
|
+
export const CLIENT_SKILLS = {
|
|
37
|
+
// ============================================
|
|
38
|
+
// CLAUDE CODE - Skills, Commands & Agents
|
|
39
|
+
// ============================================
|
|
40
|
+
'claude-code': {
|
|
41
|
+
tabs: [
|
|
42
|
+
{
|
|
43
|
+
id: 'skills',
|
|
44
|
+
name: 'Skills',
|
|
45
|
+
icon: '🎭',
|
|
46
|
+
path: path.join(homedir, '.claude', 'skills'),
|
|
47
|
+
format: 'skill-md',
|
|
48
|
+
filePattern: '*.md',
|
|
49
|
+
supportsDirectories: true,
|
|
50
|
+
description: 'Modular expertise modules'
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'commands',
|
|
54
|
+
name: 'Commands',
|
|
55
|
+
icon: '⚡',
|
|
56
|
+
path: path.join(homedir, '.claude', 'commands'),
|
|
57
|
+
format: 'command-md',
|
|
58
|
+
filePattern: '*.md',
|
|
59
|
+
supportsDirectories: false,
|
|
60
|
+
description: 'Slash commands for quick prompts'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'agents',
|
|
64
|
+
name: 'Agents',
|
|
65
|
+
icon: '🤖',
|
|
66
|
+
path: path.join(homedir, '.claude', 'agents'),
|
|
67
|
+
format: 'agent-md',
|
|
68
|
+
filePattern: '*.md',
|
|
69
|
+
supportsDirectories: false,
|
|
70
|
+
description: 'Custom subagents with YAML frontmatter'
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
// ============================================
|
|
76
|
+
// CURSOR - Rules
|
|
77
|
+
// ============================================
|
|
78
|
+
'cursor': {
|
|
79
|
+
tabs: [
|
|
80
|
+
{
|
|
81
|
+
id: 'rules',
|
|
82
|
+
name: 'Rules',
|
|
83
|
+
icon: '📐',
|
|
84
|
+
path: path.join(homedir, '.cursor', 'rules'),
|
|
85
|
+
format: 'mdc',
|
|
86
|
+
filePattern: '*.mdc',
|
|
87
|
+
supportsDirectories: false,
|
|
88
|
+
description: 'Global rules for Cursor AI'
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
// ============================================
|
|
94
|
+
// CONTINUE.DEV - Prompts & Rules
|
|
95
|
+
// ============================================
|
|
96
|
+
'continue': {
|
|
97
|
+
tabs: [
|
|
98
|
+
{
|
|
99
|
+
id: 'prompts',
|
|
100
|
+
name: 'Prompts',
|
|
101
|
+
icon: '▶️',
|
|
102
|
+
path: path.join(homedir, '.continue', 'prompts'),
|
|
103
|
+
format: 'prompt-md',
|
|
104
|
+
filePattern: '*.prompt',
|
|
105
|
+
supportsDirectories: false,
|
|
106
|
+
description: 'Slash command prompts'
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 'rules',
|
|
110
|
+
name: 'Rules',
|
|
111
|
+
icon: '📏',
|
|
112
|
+
path: path.join(homedir, '.continue', 'rules'),
|
|
113
|
+
format: 'rule-md',
|
|
114
|
+
filePattern: '*.md',
|
|
115
|
+
supportsDirectories: false,
|
|
116
|
+
description: 'Context rules'
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
// ============================================
|
|
122
|
+
// WINDSURF (CODEIUM) - Rules
|
|
123
|
+
// ============================================
|
|
124
|
+
'windsurf': {
|
|
125
|
+
tabs: [
|
|
126
|
+
{
|
|
127
|
+
id: 'rules',
|
|
128
|
+
name: 'Rules',
|
|
129
|
+
icon: '🏄',
|
|
130
|
+
path: path.join(homedir, '.codeium', 'windsurf', 'memories'),
|
|
131
|
+
format: 'rule-md',
|
|
132
|
+
filePattern: 'global_rules.md',
|
|
133
|
+
singleFile: true,
|
|
134
|
+
supportsDirectories: false,
|
|
135
|
+
description: 'Rules for Windsurf AI'
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
// ============================================
|
|
141
|
+
// GITHUB COPILOT - Instructions & Skills
|
|
142
|
+
// NOTE: Per-repo instructions live in .github/copilot-instructions.md
|
|
143
|
+
// Per-repo skills in .github/skills/. User-level skills at ~/.copilot/skills/
|
|
144
|
+
// ============================================
|
|
145
|
+
'github-copilot': {
|
|
146
|
+
tabs: [
|
|
147
|
+
{
|
|
148
|
+
id: 'instructions',
|
|
149
|
+
name: 'Instructions',
|
|
150
|
+
icon: '🐙',
|
|
151
|
+
path: path.join(homedir, '.github'),
|
|
152
|
+
format: 'instructions-md',
|
|
153
|
+
filePattern: 'copilot-instructions.md',
|
|
154
|
+
singleFile: true,
|
|
155
|
+
supportsDirectories: false,
|
|
156
|
+
description: 'Global instructions for Copilot'
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
id: 'skills',
|
|
160
|
+
name: 'Skills',
|
|
161
|
+
icon: '🎯',
|
|
162
|
+
path: path.join(homedir, '.copilot', 'skills'),
|
|
163
|
+
format: 'skill-md',
|
|
164
|
+
filePattern: '*.md',
|
|
165
|
+
supportsDirectories: true,
|
|
166
|
+
description: 'Personal agent skills (SKILL.md in subdirs)'
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
// ============================================
|
|
172
|
+
// VS CODE (with Continue extension)
|
|
173
|
+
// ============================================
|
|
174
|
+
'vscode': {
|
|
175
|
+
tabs: [
|
|
176
|
+
{
|
|
177
|
+
id: 'prompts',
|
|
178
|
+
name: 'Prompts',
|
|
179
|
+
icon: '▶️',
|
|
180
|
+
path: path.join(homedir, '.continue', 'prompts'),
|
|
181
|
+
format: 'prompt-md',
|
|
182
|
+
filePattern: '*.prompt',
|
|
183
|
+
supportsDirectories: false,
|
|
184
|
+
description: 'Continue.dev prompts'
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
id: 'rules',
|
|
188
|
+
name: 'Rules',
|
|
189
|
+
icon: '📏',
|
|
190
|
+
path: path.join(homedir, '.continue', 'rules'),
|
|
191
|
+
format: 'rule-md',
|
|
192
|
+
filePattern: '*.md',
|
|
193
|
+
supportsDirectories: false,
|
|
194
|
+
description: 'Continue.dev rules'
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
|
|
199
|
+
// ============================================
|
|
200
|
+
// AMAZON Q DEVELOPER - Rules
|
|
201
|
+
// NOTE: Project-scoped rules live in .amazonq/rules/ at the repo root.
|
|
202
|
+
// The global path below (~/.aws/amazonq/rules) may not exist on all setups.
|
|
203
|
+
// ============================================
|
|
204
|
+
'amazonq': {
|
|
205
|
+
tabs: [
|
|
206
|
+
{
|
|
207
|
+
id: 'rules',
|
|
208
|
+
name: 'Rules',
|
|
209
|
+
icon: '🔶',
|
|
210
|
+
path: path.join(homedir, '.aws', 'amazonq', 'rules'),
|
|
211
|
+
format: 'rule-md',
|
|
212
|
+
filePattern: '*.md',
|
|
213
|
+
supportsDirectories: false,
|
|
214
|
+
description: 'Rules for Amazon Q'
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
},
|
|
218
|
+
|
|
219
|
+
// ============================================
|
|
220
|
+
// CLINE - Rules
|
|
221
|
+
// ============================================
|
|
222
|
+
'cline': {
|
|
223
|
+
tabs: [
|
|
224
|
+
{
|
|
225
|
+
id: 'rules',
|
|
226
|
+
name: 'Rules',
|
|
227
|
+
icon: '🔧',
|
|
228
|
+
path: getClinePath(),
|
|
229
|
+
format: 'rule-md',
|
|
230
|
+
filePattern: '*.md',
|
|
231
|
+
supportsDirectories: false,
|
|
232
|
+
description: 'Global rules for Cline'
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
// ============================================
|
|
238
|
+
// ROO CODE - Rules
|
|
239
|
+
// ============================================
|
|
240
|
+
'roo-code': {
|
|
241
|
+
tabs: [
|
|
242
|
+
{
|
|
243
|
+
id: 'rules',
|
|
244
|
+
name: 'Rules',
|
|
245
|
+
icon: '🦘',
|
|
246
|
+
path: path.join(homedir, '.roo', 'rules'),
|
|
247
|
+
format: 'rule-md',
|
|
248
|
+
filePattern: '*.md',
|
|
249
|
+
supportsDirectories: false,
|
|
250
|
+
description: 'Global rules for Roo Code'
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
},
|
|
254
|
+
|
|
255
|
+
// ============================================
|
|
256
|
+
// GEMINI CLI - Context, Commands & Skills
|
|
257
|
+
// ============================================
|
|
258
|
+
'gemini': {
|
|
259
|
+
tabs: [
|
|
260
|
+
{
|
|
261
|
+
id: 'context',
|
|
262
|
+
name: 'Context',
|
|
263
|
+
icon: '💎',
|
|
264
|
+
path: path.join(homedir, '.gemini'),
|
|
265
|
+
format: 'context-md',
|
|
266
|
+
filePattern: 'GEMINI.md',
|
|
267
|
+
singleFile: true,
|
|
268
|
+
supportsDirectories: false,
|
|
269
|
+
description: 'Global context (GEMINI.md)'
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
id: 'commands',
|
|
273
|
+
name: 'Commands',
|
|
274
|
+
icon: '✨',
|
|
275
|
+
path: path.join(homedir, '.gemini', 'commands'),
|
|
276
|
+
format: 'command-toml',
|
|
277
|
+
filePattern: '*.toml',
|
|
278
|
+
supportsDirectories: false,
|
|
279
|
+
description: 'Custom commands'
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
id: 'skills',
|
|
283
|
+
name: 'Skills',
|
|
284
|
+
icon: '🎯',
|
|
285
|
+
path: path.join(homedir, '.gemini', 'skills'),
|
|
286
|
+
format: 'skill-md',
|
|
287
|
+
filePattern: '*.md',
|
|
288
|
+
supportsDirectories: true,
|
|
289
|
+
description: 'Agent skills (SKILL.md in subdirs)'
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
},
|
|
293
|
+
|
|
294
|
+
// ============================================
|
|
295
|
+
// GOOGLE ANTIGRAVITY - Same as Gemini
|
|
296
|
+
// ============================================
|
|
297
|
+
'google-antigravity': {
|
|
298
|
+
tabs: [
|
|
299
|
+
{
|
|
300
|
+
id: 'context',
|
|
301
|
+
name: 'Context',
|
|
302
|
+
icon: '💎',
|
|
303
|
+
path: path.join(homedir, '.gemini'),
|
|
304
|
+
format: 'context-md',
|
|
305
|
+
filePattern: 'GEMINI.md',
|
|
306
|
+
singleFile: true,
|
|
307
|
+
supportsDirectories: false,
|
|
308
|
+
description: 'Global context (GEMINI.md)'
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
id: 'commands',
|
|
312
|
+
name: 'Commands',
|
|
313
|
+
icon: '✨',
|
|
314
|
+
path: path.join(homedir, '.gemini', 'commands'),
|
|
315
|
+
format: 'command-toml',
|
|
316
|
+
filePattern: '*.toml',
|
|
317
|
+
supportsDirectories: false,
|
|
318
|
+
description: 'Custom commands'
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
id: 'skills',
|
|
322
|
+
name: 'Skills',
|
|
323
|
+
icon: '🎯',
|
|
324
|
+
path: path.join(homedir, '.gemini', 'skills'),
|
|
325
|
+
format: 'skill-md',
|
|
326
|
+
filePattern: '*.md',
|
|
327
|
+
supportsDirectories: true,
|
|
328
|
+
description: 'Agent skills (SKILL.md in subdirs)'
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
// ============================================
|
|
334
|
+
// CODEX (OPENAI) - Agents & Skills
|
|
335
|
+
// ============================================
|
|
336
|
+
'codex': {
|
|
337
|
+
tabs: [
|
|
338
|
+
{
|
|
339
|
+
id: 'agents',
|
|
340
|
+
name: 'Agents',
|
|
341
|
+
icon: '🧠',
|
|
342
|
+
path: path.join(homedir, '.codex'),
|
|
343
|
+
format: 'agents-md',
|
|
344
|
+
filePattern: 'AGENTS.md',
|
|
345
|
+
singleFile: true,
|
|
346
|
+
supportsDirectories: false,
|
|
347
|
+
description: 'Agent instructions (AGENTS.md)'
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
id: 'skills',
|
|
351
|
+
name: 'Skills',
|
|
352
|
+
icon: '🧠',
|
|
353
|
+
path: path.join(homedir, '.codex', 'skills'),
|
|
354
|
+
format: 'skill-md',
|
|
355
|
+
filePattern: '*.md',
|
|
356
|
+
supportsDirectories: true,
|
|
357
|
+
description: 'Agent skills (SKILL.md)'
|
|
358
|
+
}
|
|
359
|
+
]
|
|
360
|
+
},
|
|
361
|
+
|
|
362
|
+
// ============================================
|
|
363
|
+
// JETBRAINS AI - Rules
|
|
364
|
+
// ============================================
|
|
365
|
+
'jetbrains-ai': {
|
|
366
|
+
tabs: [
|
|
367
|
+
{
|
|
368
|
+
id: 'rules',
|
|
369
|
+
name: 'Rules',
|
|
370
|
+
icon: '🧩',
|
|
371
|
+
path: path.join(homedir, '.aiassistant', 'rules'),
|
|
372
|
+
format: 'rule-md',
|
|
373
|
+
filePattern: '*.md',
|
|
374
|
+
supportsDirectories: false,
|
|
375
|
+
description: 'Rules for JetBrains AI Assistant'
|
|
376
|
+
}
|
|
377
|
+
]
|
|
378
|
+
},
|
|
379
|
+
|
|
380
|
+
// ============================================
|
|
381
|
+
// AUGMENT CODE - Commands & Rules
|
|
382
|
+
// NOTE: Rules are workspace-level (.augment/rules/), commands are user-level
|
|
383
|
+
// ============================================
|
|
384
|
+
'augment': {
|
|
385
|
+
tabs: [
|
|
386
|
+
{
|
|
387
|
+
id: 'commands',
|
|
388
|
+
name: 'Commands',
|
|
389
|
+
icon: '⚡',
|
|
390
|
+
path: path.join(homedir, '.augment', 'commands'),
|
|
391
|
+
format: 'command-md',
|
|
392
|
+
filePattern: '*.md',
|
|
393
|
+
supportsDirectories: false,
|
|
394
|
+
description: 'User-wide commands for Augment Code'
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
id: 'rules',
|
|
398
|
+
name: 'Rules',
|
|
399
|
+
icon: '🔮',
|
|
400
|
+
path: path.join(homedir, '.augment', 'rules'),
|
|
401
|
+
format: 'rule-md',
|
|
402
|
+
filePattern: '*.md',
|
|
403
|
+
supportsDirectories: false,
|
|
404
|
+
description: 'Rules for Augment Code'
|
|
405
|
+
}
|
|
406
|
+
]
|
|
407
|
+
},
|
|
408
|
+
|
|
409
|
+
// ============================================
|
|
410
|
+
// TABNINE - Guidelines
|
|
411
|
+
// ============================================
|
|
412
|
+
'tabnine': {
|
|
413
|
+
tabs: [
|
|
414
|
+
{
|
|
415
|
+
id: 'guidelines',
|
|
416
|
+
name: 'Guidelines',
|
|
417
|
+
icon: '📋',
|
|
418
|
+
path: path.join(homedir, '.tabnine', 'guidelines'),
|
|
419
|
+
format: 'rule-md',
|
|
420
|
+
filePattern: '*.md',
|
|
421
|
+
supportsDirectories: false,
|
|
422
|
+
description: 'Guidelines for Tabnine'
|
|
423
|
+
}
|
|
424
|
+
]
|
|
425
|
+
},
|
|
426
|
+
|
|
427
|
+
// ============================================
|
|
428
|
+
// ZED AI - No global skills support
|
|
429
|
+
// NOTE: Zed uses project-root .rules file for per-project config
|
|
430
|
+
// Rules Library stored in LMDB at ~/.config/zed/prompts/ (not editable)
|
|
431
|
+
// ============================================
|
|
432
|
+
'zed': {
|
|
433
|
+
tabs: []
|
|
434
|
+
},
|
|
435
|
+
|
|
436
|
+
// ============================================
|
|
437
|
+
// AIDER - Conventions
|
|
438
|
+
// NOTE: Config lives in ~/.aider.conf.yml. Conventions loaded via --read flag.
|
|
439
|
+
// ============================================
|
|
440
|
+
'aider': {
|
|
441
|
+
tabs: [
|
|
442
|
+
{
|
|
443
|
+
id: 'config',
|
|
444
|
+
name: 'Config',
|
|
445
|
+
icon: '🔧',
|
|
446
|
+
path: homedir,
|
|
447
|
+
format: 'yaml',
|
|
448
|
+
filePattern: '.aider.conf.yml',
|
|
449
|
+
singleFile: true,
|
|
450
|
+
supportsDirectories: false,
|
|
451
|
+
description: 'Global aider configuration'
|
|
452
|
+
}
|
|
453
|
+
]
|
|
454
|
+
},
|
|
455
|
+
|
|
456
|
+
// ============================================
|
|
457
|
+
// 5IRE - No known skills support
|
|
458
|
+
// ============================================
|
|
459
|
+
'5ire': {
|
|
460
|
+
tabs: []
|
|
461
|
+
},
|
|
462
|
+
|
|
463
|
+
// ============================================
|
|
464
|
+
// FACTORY BRIDGE - No known skills support
|
|
465
|
+
// ============================================
|
|
466
|
+
'factory-bridge': {
|
|
467
|
+
tabs: []
|
|
468
|
+
},
|
|
469
|
+
|
|
470
|
+
// ============================================
|
|
471
|
+
// CLAUDE DESKTOP - Skills, Commands & Agents (same as Claude Code)
|
|
472
|
+
// ============================================
|
|
473
|
+
'claude': {
|
|
474
|
+
tabs: [
|
|
475
|
+
{
|
|
476
|
+
id: 'skills',
|
|
477
|
+
name: 'Skills',
|
|
478
|
+
icon: '🎭',
|
|
479
|
+
path: path.join(homedir, '.claude', 'skills'),
|
|
480
|
+
format: 'skill-md',
|
|
481
|
+
filePattern: '*.md',
|
|
482
|
+
supportsDirectories: true,
|
|
483
|
+
description: 'Modular expertise modules'
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
id: 'commands',
|
|
487
|
+
name: 'Commands',
|
|
488
|
+
icon: '⚡',
|
|
489
|
+
path: path.join(homedir, '.claude', 'commands'),
|
|
490
|
+
format: 'command-md',
|
|
491
|
+
filePattern: '*.md',
|
|
492
|
+
supportsDirectories: false,
|
|
493
|
+
description: 'Slash commands for quick prompts'
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
id: 'agents',
|
|
497
|
+
name: 'Agents',
|
|
498
|
+
icon: '🤖',
|
|
499
|
+
path: path.join(homedir, '.claude', 'agents'),
|
|
500
|
+
format: 'agent-md',
|
|
501
|
+
filePattern: '*.md',
|
|
502
|
+
supportsDirectories: false,
|
|
503
|
+
description: 'Custom subagents with YAML frontmatter'
|
|
504
|
+
}
|
|
505
|
+
]
|
|
506
|
+
},
|
|
507
|
+
|
|
508
|
+
// ============================================
|
|
509
|
+
// FIREBENDER - Rules (JetBrains/Android Studio plugin)
|
|
510
|
+
// Personal rules at ~/.firebender/rules/*.mdc
|
|
511
|
+
// ============================================
|
|
512
|
+
'firebender': {
|
|
513
|
+
tabs: [
|
|
514
|
+
{
|
|
515
|
+
id: 'rules',
|
|
516
|
+
name: 'Rules',
|
|
517
|
+
icon: '🔥',
|
|
518
|
+
path: path.join(homedir, '.firebender', 'rules'),
|
|
519
|
+
format: 'mdc',
|
|
520
|
+
filePattern: '*.mdc',
|
|
521
|
+
supportsDirectories: false,
|
|
522
|
+
description: 'Personal rules for Firebender'
|
|
523
|
+
}
|
|
524
|
+
]
|
|
525
|
+
},
|
|
526
|
+
|
|
527
|
+
// ============================================
|
|
528
|
+
// GOOSE (Block) - Skills
|
|
529
|
+
// User-level at ~/.config/goose/skills/ and ~/.config/agents/skills/
|
|
530
|
+
// ============================================
|
|
531
|
+
'goose': {
|
|
532
|
+
tabs: [
|
|
533
|
+
{
|
|
534
|
+
id: 'skills',
|
|
535
|
+
name: 'Skills',
|
|
536
|
+
icon: '🪿',
|
|
537
|
+
path: path.join(homedir, '.config', 'goose', 'skills'),
|
|
538
|
+
format: 'skill-md',
|
|
539
|
+
filePattern: '*.md',
|
|
540
|
+
supportsDirectories: true,
|
|
541
|
+
description: 'Goose-specific agent skills (SKILL.md)'
|
|
542
|
+
}
|
|
543
|
+
]
|
|
544
|
+
},
|
|
545
|
+
|
|
546
|
+
// ============================================
|
|
547
|
+
// AMP (Sourcegraph) - Skills
|
|
548
|
+
// User-level at ~/.config/agents/skills/
|
|
549
|
+
// ============================================
|
|
550
|
+
'amp': {
|
|
551
|
+
tabs: [
|
|
552
|
+
{
|
|
553
|
+
id: 'skills',
|
|
554
|
+
name: 'Skills',
|
|
555
|
+
icon: '⚡',
|
|
556
|
+
path: path.join(homedir, '.config', 'agents', 'skills'),
|
|
557
|
+
format: 'skill-md',
|
|
558
|
+
filePattern: '*.md',
|
|
559
|
+
supportsDirectories: true,
|
|
560
|
+
description: 'Agent skills (SKILL.md in subdirs)'
|
|
561
|
+
}
|
|
562
|
+
]
|
|
563
|
+
},
|
|
564
|
+
|
|
565
|
+
// ============================================
|
|
566
|
+
// OPENCODE - Skills & Agents
|
|
567
|
+
// User-level at ~/.config/opencode/skills/
|
|
568
|
+
// ============================================
|
|
569
|
+
'opencode': {
|
|
570
|
+
tabs: [
|
|
571
|
+
{
|
|
572
|
+
id: 'skills',
|
|
573
|
+
name: 'Skills',
|
|
574
|
+
icon: '💻',
|
|
575
|
+
path: path.join(homedir, '.config', 'opencode', 'skills'),
|
|
576
|
+
format: 'skill-md',
|
|
577
|
+
filePattern: '*.md',
|
|
578
|
+
supportsDirectories: true,
|
|
579
|
+
description: 'Agent skills (SKILL.md in subdirs)'
|
|
580
|
+
}
|
|
581
|
+
]
|
|
582
|
+
},
|
|
583
|
+
|
|
584
|
+
// ============================================
|
|
585
|
+
// MISTRAL VIBE - Skills & Agents
|
|
586
|
+
// Skills at ~/.vibe/skills/, Agents at ~/.vibe/agents/
|
|
587
|
+
// ============================================
|
|
588
|
+
'mistral-vibe': {
|
|
589
|
+
tabs: [
|
|
590
|
+
{
|
|
591
|
+
id: 'skills',
|
|
592
|
+
name: 'Skills',
|
|
593
|
+
icon: '🌀',
|
|
594
|
+
path: path.join(homedir, '.vibe', 'skills'),
|
|
595
|
+
format: 'skill-md',
|
|
596
|
+
filePattern: '*.md',
|
|
597
|
+
supportsDirectories: true,
|
|
598
|
+
description: 'Agent skills (SKILL.md in subdirs)'
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
id: 'agents',
|
|
602
|
+
name: 'Agents',
|
|
603
|
+
icon: '🤖',
|
|
604
|
+
path: path.join(homedir, '.vibe', 'agents'),
|
|
605
|
+
format: 'agent-toml',
|
|
606
|
+
filePattern: '*.toml',
|
|
607
|
+
supportsDirectories: false,
|
|
608
|
+
description: 'Custom agent profiles (.toml)'
|
|
609
|
+
}
|
|
610
|
+
]
|
|
611
|
+
},
|
|
612
|
+
|
|
613
|
+
// ============================================
|
|
614
|
+
// PI CODING AGENT - Skills
|
|
615
|
+
// User-level at ~/.pi/agent/skills/
|
|
616
|
+
// ============================================
|
|
617
|
+
'pi': {
|
|
618
|
+
tabs: [
|
|
619
|
+
{
|
|
620
|
+
id: 'skills',
|
|
621
|
+
name: 'Skills',
|
|
622
|
+
icon: '🥧',
|
|
623
|
+
path: path.join(homedir, '.pi', 'agent', 'skills'),
|
|
624
|
+
format: 'skill-md',
|
|
625
|
+
filePattern: '*.md',
|
|
626
|
+
supportsDirectories: true,
|
|
627
|
+
description: 'Agent skills (SKILL.md in subdirs)'
|
|
628
|
+
}
|
|
629
|
+
]
|
|
630
|
+
},
|
|
631
|
+
|
|
632
|
+
// ============================================
|
|
633
|
+
// AUTOHAND CODE CLI - Skills
|
|
634
|
+
// User-level at ~/.autohand/skills/
|
|
635
|
+
// ============================================
|
|
636
|
+
'autohand': {
|
|
637
|
+
tabs: [
|
|
638
|
+
{
|
|
639
|
+
id: 'skills',
|
|
640
|
+
name: 'Skills',
|
|
641
|
+
icon: '🤚',
|
|
642
|
+
path: path.join(homedir, '.autohand', 'skills'),
|
|
643
|
+
format: 'skill-md',
|
|
644
|
+
filePattern: '*.md',
|
|
645
|
+
supportsDirectories: true,
|
|
646
|
+
description: 'Agent skills (SKILL.md in subdirs)'
|
|
647
|
+
}
|
|
648
|
+
]
|
|
649
|
+
},
|
|
650
|
+
|
|
651
|
+
// ============================================
|
|
652
|
+
// TRAE (ByteDance) - Rules
|
|
653
|
+
// NOTE: Project-level rules at .trae/rules/. Global path not yet confirmed.
|
|
654
|
+
// ============================================
|
|
655
|
+
'trae': {
|
|
656
|
+
tabs: []
|
|
657
|
+
},
|
|
658
|
+
|
|
659
|
+
// ============================================
|
|
660
|
+
// LETTA CODE - Skills
|
|
661
|
+
// NOTE: Uses .skills/ at project level. Memory-first agent with Context Repos.
|
|
662
|
+
// ============================================
|
|
663
|
+
'letta': {
|
|
664
|
+
tabs: []
|
|
665
|
+
},
|
|
666
|
+
|
|
667
|
+
// ============================================
|
|
668
|
+
// QODO - Rules & Agents
|
|
669
|
+
// NOTE: Uses TOML-based agent configs. No confirmed global user-level path.
|
|
670
|
+
// ============================================
|
|
671
|
+
'qodo': {
|
|
672
|
+
tabs: []
|
|
673
|
+
},
|
|
674
|
+
|
|
675
|
+
// ============================================
|
|
676
|
+
// VT CODE - Skills
|
|
677
|
+
// NOTE: Follows Agent Skills standard but no confirmed global path.
|
|
678
|
+
// ============================================
|
|
679
|
+
'vt-code': {
|
|
680
|
+
tabs: []
|
|
681
|
+
},
|
|
682
|
+
|
|
683
|
+
// ============================================
|
|
684
|
+
// COMMAND CODE
|
|
685
|
+
// NOTE: No confirmed skills path.
|
|
686
|
+
// ============================================
|
|
687
|
+
'command-code': {
|
|
688
|
+
tabs: []
|
|
689
|
+
},
|
|
690
|
+
|
|
691
|
+
// ============================================
|
|
692
|
+
// PIEBALD - Uses Claude Code paths (desktop app wrapper)
|
|
693
|
+
// ============================================
|
|
694
|
+
'piebald': {
|
|
695
|
+
tabs: [
|
|
696
|
+
{
|
|
697
|
+
id: 'skills',
|
|
698
|
+
name: 'Skills',
|
|
699
|
+
icon: '🎭',
|
|
700
|
+
path: path.join(homedir, '.claude', 'skills'),
|
|
701
|
+
format: 'skill-md',
|
|
702
|
+
filePattern: '*.md',
|
|
703
|
+
supportsDirectories: true,
|
|
704
|
+
description: 'Claude Code skills'
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
id: 'agents',
|
|
708
|
+
name: 'Agents',
|
|
709
|
+
icon: '🤖',
|
|
710
|
+
path: path.join(homedir, '.claude', 'agents'),
|
|
711
|
+
format: 'agent-md',
|
|
712
|
+
filePattern: '*.md',
|
|
713
|
+
supportsDirectories: false,
|
|
714
|
+
description: 'Claude Code agents'
|
|
715
|
+
}
|
|
716
|
+
]
|
|
717
|
+
},
|
|
718
|
+
|
|
719
|
+
// ============================================
|
|
720
|
+
// ONA - Cloud-based, no local skills
|
|
721
|
+
// ============================================
|
|
722
|
+
'ona': {
|
|
723
|
+
tabs: []
|
|
724
|
+
},
|
|
725
|
+
|
|
726
|
+
// ============================================
|
|
727
|
+
// AGENTMAN - No confirmed skills path
|
|
728
|
+
// ============================================
|
|
729
|
+
'agentman': {
|
|
730
|
+
tabs: []
|
|
731
|
+
},
|
|
732
|
+
|
|
733
|
+
// ============================================
|
|
734
|
+
// MUX - No confirmed skills path
|
|
735
|
+
// ============================================
|
|
736
|
+
'mux': {
|
|
737
|
+
tabs: []
|
|
738
|
+
},
|
|
739
|
+
|
|
740
|
+
// ============================================
|
|
741
|
+
// SPRING AI - Library, not standalone client
|
|
742
|
+
// ============================================
|
|
743
|
+
'spring-ai': {
|
|
744
|
+
tabs: []
|
|
745
|
+
},
|
|
746
|
+
|
|
747
|
+
// ============================================
|
|
748
|
+
// DATABRICKS - Workspace-level skills only
|
|
749
|
+
// ============================================
|
|
750
|
+
'databricks': {
|
|
751
|
+
tabs: []
|
|
752
|
+
}
|
|
753
|
+
};
|
|
754
|
+
|
|
755
|
+
/**
|
|
756
|
+
* Get skill tabs for a specific client
|
|
757
|
+
*/
|
|
758
|
+
export function getClientSkillTabs(clientId) {
|
|
759
|
+
const config = CLIENT_SKILLS[clientId];
|
|
760
|
+
return config ? config.tabs : [];
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/**
|
|
764
|
+
* Check if a client has any skill/prompt support
|
|
765
|
+
*/
|
|
766
|
+
export function clientHasSkills(clientId) {
|
|
767
|
+
const tabs = getClientSkillTabs(clientId);
|
|
768
|
+
return tabs && tabs.length > 0;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
/**
|
|
772
|
+
* Get a specific tab configuration for a client
|
|
773
|
+
*/
|
|
774
|
+
export function getClientSkillTab(clientId, tabId) {
|
|
775
|
+
const tabs = getClientSkillTabs(clientId);
|
|
776
|
+
return tabs.find(t => t.id === tabId);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/**
|
|
780
|
+
* Get all clients that support skills
|
|
781
|
+
*/
|
|
782
|
+
export function getClientsWithSkillSupport() {
|
|
783
|
+
return Object.entries(CLIENT_SKILLS)
|
|
784
|
+
.filter(([_, config]) => config.tabs && config.tabs.length > 0)
|
|
785
|
+
.map(([clientId, config]) => ({
|
|
786
|
+
clientId,
|
|
787
|
+
tabs: config.tabs
|
|
788
|
+
}));
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
// Legacy exports for backwards compatibility
|
|
792
|
+
export const SKILL_SCOPES = {};
|
|
793
|
+
export const COMMANDS_PATH = path.join(homedir, '.claude', 'commands');
|
|
794
|
+
|
|
795
|
+
export function getScope(scopeId) {
|
|
796
|
+
return null;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
export function getScopesByPriority() {
|
|
800
|
+
return [];
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
export function getScopePath(scopeId) {
|
|
804
|
+
return null;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
export function isScopeReadOnly(scopeId) {
|
|
808
|
+
return true;
|
|
809
|
+
}
|