vskill 0.1.0 → 0.1.2
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/agents/agents-registry.d.ts +48 -37
- package/dist/agents/agents-registry.js +206 -261
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/agents/agents-registry.test.d.ts +1 -0
- package/dist/agents/agents-registry.test.js +203 -0
- package/dist/agents/agents-registry.test.js.map +1 -0
- package/dist/api/client.js +9 -1
- package/dist/api/client.js.map +1 -1
- package/dist/api/client.test.d.ts +1 -0
- package/dist/api/client.test.js +204 -0
- package/dist/api/client.test.js.map +1 -0
- package/dist/blocklist/blocklist.d.ts +23 -0
- package/dist/blocklist/blocklist.js +116 -0
- package/dist/blocklist/blocklist.js.map +1 -0
- package/dist/blocklist/blocklist.test.d.ts +1 -0
- package/dist/blocklist/blocklist.test.js +259 -0
- package/dist/blocklist/blocklist.test.js.map +1 -0
- package/dist/blocklist/types.d.ts +18 -0
- package/dist/blocklist/types.js +5 -0
- package/dist/blocklist/types.js.map +1 -0
- package/dist/commands/add.d.ts +2 -0
- package/dist/commands/add.js +221 -6
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/add.test.d.ts +1 -0
- package/dist/commands/add.test.js +682 -0
- package/dist/commands/add.test.js.map +1 -0
- package/dist/commands/blocklist.d.ts +1 -0
- package/dist/commands/blocklist.js +87 -0
- package/dist/commands/blocklist.js.map +1 -0
- package/dist/commands/blocklist.test.d.ts +1 -0
- package/dist/commands/blocklist.test.js +158 -0
- package/dist/commands/blocklist.test.js.map +1 -0
- package/dist/commands/remove.d.ts +7 -0
- package/dist/commands/remove.js +91 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/remove.test.d.ts +1 -0
- package/dist/commands/remove.test.js +164 -0
- package/dist/commands/remove.test.js.map +1 -0
- package/dist/commands/submit.d.ts +1 -1
- package/dist/commands/submit.js +26 -16
- package/dist/commands/submit.js.map +1 -1
- package/dist/commands/submit.test.d.ts +1 -0
- package/dist/commands/submit.test.js +74 -0
- package/dist/commands/submit.test.js.map +1 -0
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/lockfile/lockfile.test.d.ts +1 -0
- package/dist/lockfile/lockfile.test.js +196 -0
- package/dist/lockfile/lockfile.test.js.map +1 -0
- package/dist/lockfile/types.d.ts +8 -0
- package/dist/marketplace/index.d.ts +2 -0
- package/dist/marketplace/index.js +2 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/marketplace.d.ts +34 -0
- package/dist/marketplace/marketplace.js +51 -0
- package/dist/marketplace/marketplace.js.map +1 -0
- package/dist/marketplace/marketplace.test.d.ts +1 -0
- package/dist/marketplace/marketplace.test.js +103 -0
- package/dist/marketplace/marketplace.test.js.map +1 -0
- package/dist/scanner/index.d.ts +4 -0
- package/dist/scanner/index.js +4 -0
- package/dist/scanner/index.js.map +1 -1
- package/dist/scanner/patterns.test.d.ts +1 -0
- package/dist/scanner/patterns.test.js +353 -0
- package/dist/scanner/patterns.test.js.map +1 -0
- package/dist/scanner/repo-scanner.d.ts +30 -0
- package/dist/scanner/repo-scanner.js +190 -0
- package/dist/scanner/repo-scanner.js.map +1 -0
- package/dist/scanner/tier1.test.d.ts +1 -0
- package/dist/scanner/tier1.test.js +182 -0
- package/dist/scanner/tier1.test.js.map +1 -0
- package/dist/scanner/tier2-llm.d.ts +28 -0
- package/dist/scanner/tier2-llm.js +130 -0
- package/dist/scanner/tier2-llm.js.map +1 -0
- package/dist/scanner/types.d.ts +58 -0
- package/dist/scanner/types.js +5 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/security/index.d.ts +2 -0
- package/dist/security/index.js +2 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/platform-security.d.ts +17 -0
- package/dist/security/platform-security.js +34 -0
- package/dist/security/platform-security.js.map +1 -0
- package/dist/security/platform-security.test.d.ts +1 -0
- package/dist/security/platform-security.test.js +92 -0
- package/dist/security/platform-security.test.js.map +1 -0
- package/dist/settings/index.d.ts +2 -0
- package/dist/settings/index.js +2 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/settings.d.ts +16 -0
- package/dist/settings/settings.js +73 -0
- package/dist/settings/settings.js.map +1 -0
- package/dist/settings/settings.test.d.ts +1 -0
- package/dist/settings/settings.test.js +103 -0
- package/dist/settings/settings.test.js.map +1 -0
- package/dist/utils/__tests__/paths.test.d.ts +1 -0
- package/dist/utils/__tests__/paths.test.js +22 -0
- package/dist/utils/__tests__/paths.test.js.map +1 -0
- package/dist/utils/__tests__/validation.test.d.ts +1 -0
- package/dist/utils/__tests__/validation.test.js +49 -0
- package/dist/utils/__tests__/validation.test.js.map +1 -0
- package/dist/utils/browser.d.ts +6 -0
- package/dist/utils/browser.js +37 -0
- package/dist/utils/browser.js.map +1 -0
- package/dist/utils/paths.d.ts +5 -0
- package/dist/utils/paths.js +13 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/validation.d.ts +14 -0
- package/dist/utils/validation.js +34 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +5 -2
- package/scripts/preuninstall.cjs +58 -0
|
@@ -1,511 +1,456 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Agent Registry — 39 AI coding agents with metadata.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Each agent has detection paths, parent company info, and feature support.
|
|
5
|
+
* Used to determine which agents can install/use verified skills.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Complete registry of 39 AI coding agents.
|
|
6
9
|
*
|
|
7
|
-
*
|
|
10
|
+
* 7 universal agents, 32 non-universal agents.
|
|
8
11
|
*/
|
|
9
|
-
import { existsSync } from 'node:fs';
|
|
10
|
-
import { join } from 'node:path';
|
|
11
|
-
import { homedir } from 'node:os';
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
// Helpers
|
|
14
|
-
// ---------------------------------------------------------------------------
|
|
15
|
-
const home = homedir();
|
|
16
|
-
const xdgConfig = process.env.XDG_CONFIG_HOME || join(home, '.config');
|
|
17
|
-
const claudeConfig = process.env.CLAUDE_CONFIG_DIR || join(home, '.claude');
|
|
18
|
-
const codexHome = process.env.CODEX_HOME || join(home, '.codex');
|
|
19
|
-
function exists(...segments) {
|
|
20
|
-
return existsSync(join(...segments));
|
|
21
|
-
}
|
|
22
|
-
const DEFAULT_FEATURES = {
|
|
23
|
-
basicSkills: true,
|
|
24
|
-
allowedTools: true,
|
|
25
|
-
contextFork: false,
|
|
26
|
-
hooks: false,
|
|
27
|
-
};
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// Registry
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
12
|
export const AGENTS_REGISTRY = [
|
|
32
|
-
//
|
|
13
|
+
// ----------------------------------------------------------------
|
|
14
|
+
// Universal agents (7)
|
|
15
|
+
// ----------------------------------------------------------------
|
|
33
16
|
{
|
|
34
17
|
id: 'amp',
|
|
35
18
|
displayName: 'Amp',
|
|
36
|
-
localSkillsDir: '.
|
|
37
|
-
globalSkillsDir:
|
|
19
|
+
localSkillsDir: '.amp/skills',
|
|
20
|
+
globalSkillsDir: '~/.amp/skills',
|
|
38
21
|
isUniversal: true,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
parentCompany: 'Amp (Sourcegraph)',
|
|
43
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
22
|
+
detectInstalled: 'which amp',
|
|
23
|
+
parentCompany: 'Sourcegraph',
|
|
24
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
44
25
|
},
|
|
45
26
|
{
|
|
46
27
|
id: 'codex',
|
|
47
|
-
displayName: 'Codex',
|
|
48
|
-
localSkillsDir: '.
|
|
49
|
-
globalSkillsDir:
|
|
28
|
+
displayName: 'Codex CLI',
|
|
29
|
+
localSkillsDir: '.codex/skills',
|
|
30
|
+
globalSkillsDir: '~/.codex/skills',
|
|
50
31
|
isUniversal: true,
|
|
51
|
-
|
|
52
|
-
detectInstalled: async () => exists(codexHome) || exists('/etc/codex'),
|
|
53
|
-
envVars: ['CODEX_HOME'],
|
|
32
|
+
detectInstalled: 'which codex',
|
|
54
33
|
parentCompany: 'OpenAI',
|
|
55
|
-
featureSupport: {
|
|
34
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
56
35
|
},
|
|
57
36
|
{
|
|
58
37
|
id: 'gemini-cli',
|
|
59
38
|
displayName: 'Gemini CLI',
|
|
60
|
-
localSkillsDir: '.
|
|
61
|
-
globalSkillsDir:
|
|
39
|
+
localSkillsDir: '.gemini/skills',
|
|
40
|
+
globalSkillsDir: '~/.gemini/skills',
|
|
62
41
|
isUniversal: true,
|
|
63
|
-
|
|
64
|
-
detectInstalled: async () => exists(home, '.gemini'),
|
|
42
|
+
detectInstalled: 'which gemini',
|
|
65
43
|
parentCompany: 'Google',
|
|
66
|
-
featureSupport: {
|
|
44
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: true, customSystemPrompt: true },
|
|
67
45
|
},
|
|
68
46
|
{
|
|
69
47
|
id: 'github-copilot',
|
|
70
48
|
displayName: 'GitHub Copilot',
|
|
71
|
-
localSkillsDir: '.
|
|
72
|
-
globalSkillsDir:
|
|
49
|
+
localSkillsDir: '.github/copilot/skills',
|
|
50
|
+
globalSkillsDir: '~/.config/github-copilot/skills',
|
|
73
51
|
isUniversal: true,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
78
|
-
notes: 'Detection checks .github dir (common false positive)',
|
|
52
|
+
detectInstalled: 'which github-copilot',
|
|
53
|
+
parentCompany: 'GitHub (Microsoft)',
|
|
54
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
79
55
|
},
|
|
80
56
|
{
|
|
81
57
|
id: 'kimi-cli',
|
|
82
|
-
displayName: 'Kimi
|
|
83
|
-
localSkillsDir: '.
|
|
84
|
-
globalSkillsDir:
|
|
58
|
+
displayName: 'Kimi CLI',
|
|
59
|
+
localSkillsDir: '.kimi/skills',
|
|
60
|
+
globalSkillsDir: '~/.kimi/skills',
|
|
85
61
|
isUniversal: true,
|
|
86
|
-
|
|
87
|
-
detectInstalled: async () => exists(home, '.kimi'),
|
|
62
|
+
detectInstalled: 'which kimi',
|
|
88
63
|
parentCompany: 'Moonshot AI',
|
|
89
|
-
featureSupport: {
|
|
64
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
90
65
|
},
|
|
91
66
|
{
|
|
92
67
|
id: 'opencode',
|
|
93
68
|
displayName: 'OpenCode',
|
|
94
|
-
localSkillsDir: '.
|
|
95
|
-
globalSkillsDir:
|
|
69
|
+
localSkillsDir: '.opencode/skills',
|
|
70
|
+
globalSkillsDir: '~/.opencode/skills',
|
|
96
71
|
isUniversal: true,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
parentCompany: 'sst (open source)',
|
|
101
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
102
|
-
notes: 'Cross-detects Claude Code skills directory as fallback',
|
|
72
|
+
detectInstalled: 'which opencode',
|
|
73
|
+
parentCompany: 'Community',
|
|
74
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: true, customSystemPrompt: true },
|
|
103
75
|
},
|
|
104
76
|
{
|
|
105
77
|
id: 'replit',
|
|
106
|
-
displayName: 'Replit',
|
|
107
|
-
localSkillsDir: '.
|
|
108
|
-
globalSkillsDir:
|
|
78
|
+
displayName: 'Replit Agent',
|
|
79
|
+
localSkillsDir: '.replit/skills',
|
|
80
|
+
globalSkillsDir: '~/.replit/skills',
|
|
109
81
|
isUniversal: true,
|
|
110
|
-
|
|
111
|
-
detectInstalled: async () => exists(process.cwd(), '.agents'),
|
|
112
|
-
envVars: ['XDG_CONFIG_HOME'],
|
|
82
|
+
detectInstalled: 'which replit',
|
|
113
83
|
parentCompany: 'Replit',
|
|
114
|
-
featureSupport: {
|
|
115
|
-
notes: 'Hidden universal agent (showInUniversalList: false)',
|
|
84
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
116
85
|
},
|
|
117
|
-
//
|
|
86
|
+
// ----------------------------------------------------------------
|
|
87
|
+
// Non-universal agents (32)
|
|
88
|
+
// ----------------------------------------------------------------
|
|
118
89
|
{
|
|
119
90
|
id: 'antigravity',
|
|
120
91
|
displayName: 'Antigravity',
|
|
121
|
-
localSkillsDir: '.
|
|
122
|
-
globalSkillsDir:
|
|
92
|
+
localSkillsDir: '.antigravity/skills',
|
|
93
|
+
globalSkillsDir: '~/.antigravity/skills',
|
|
123
94
|
isUniversal: false,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
128
|
-
notes: 'Singular .agent/skills (not .agents/skills)',
|
|
95
|
+
detectInstalled: 'which antigravity',
|
|
96
|
+
parentCompany: 'Antigravity',
|
|
97
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
129
98
|
},
|
|
130
99
|
{
|
|
131
100
|
id: 'augment',
|
|
132
|
-
displayName: 'Augment',
|
|
101
|
+
displayName: 'Augment Code',
|
|
133
102
|
localSkillsDir: '.augment/skills',
|
|
134
|
-
globalSkillsDir:
|
|
103
|
+
globalSkillsDir: '~/.augment/skills',
|
|
135
104
|
isUniversal: false,
|
|
136
|
-
|
|
137
|
-
detectInstalled: async () => exists(home, '.augment'),
|
|
105
|
+
detectInstalled: 'which augment',
|
|
138
106
|
parentCompany: 'Augment',
|
|
139
|
-
featureSupport: {
|
|
107
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
140
108
|
},
|
|
141
109
|
{
|
|
142
110
|
id: 'claude-code',
|
|
143
111
|
displayName: 'Claude Code',
|
|
144
|
-
localSkillsDir: '.claude/
|
|
145
|
-
globalSkillsDir:
|
|
112
|
+
localSkillsDir: '.claude/commands',
|
|
113
|
+
globalSkillsDir: '~/.claude/commands',
|
|
146
114
|
isUniversal: false,
|
|
147
|
-
|
|
148
|
-
detectInstalled: async () => exists(claudeConfig),
|
|
149
|
-
envVars: ['CLAUDE_CONFIG_DIR'],
|
|
115
|
+
detectInstalled: 'which claude',
|
|
150
116
|
parentCompany: 'Anthropic',
|
|
151
|
-
featureSupport: {
|
|
152
|
-
|
|
117
|
+
featureSupport: { slashCommands: true, hooks: true, mcp: true, customSystemPrompt: true },
|
|
118
|
+
pluginCacheDir: '~/.claude/plugins/cache',
|
|
153
119
|
},
|
|
154
120
|
{
|
|
155
121
|
id: 'openclaw',
|
|
156
122
|
displayName: 'OpenClaw',
|
|
157
|
-
localSkillsDir: 'skills',
|
|
158
|
-
globalSkillsDir:
|
|
123
|
+
localSkillsDir: '.openclaw/skills',
|
|
124
|
+
globalSkillsDir: '~/.openclaw/skills',
|
|
159
125
|
isUniversal: false,
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
164
|
-
notes: 'Bare skills/ dir. 3 legacy global names from rebranding.',
|
|
126
|
+
detectInstalled: 'which openclaw',
|
|
127
|
+
parentCompany: 'Community',
|
|
128
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
165
129
|
},
|
|
166
130
|
{
|
|
167
131
|
id: 'cline',
|
|
168
132
|
displayName: 'Cline',
|
|
169
133
|
localSkillsDir: '.cline/skills',
|
|
170
|
-
globalSkillsDir:
|
|
134
|
+
globalSkillsDir: '~/.cline/skills',
|
|
171
135
|
isUniversal: false,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
featureSupport: { basicSkills: true, allowedTools: true, contextFork: false, hooks: true },
|
|
176
|
-
notes: 'One of two agents supporting hooks (with Claude Code)',
|
|
136
|
+
detectInstalled: 'which cline',
|
|
137
|
+
parentCompany: 'Cline',
|
|
138
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
177
139
|
},
|
|
178
140
|
{
|
|
179
141
|
id: 'codebuddy',
|
|
180
142
|
displayName: 'CodeBuddy',
|
|
181
143
|
localSkillsDir: '.codebuddy/skills',
|
|
182
|
-
globalSkillsDir:
|
|
144
|
+
globalSkillsDir: '~/.codebuddy/skills',
|
|
183
145
|
isUniversal: false,
|
|
184
|
-
|
|
185
|
-
detectInstalled: async () => exists(process.cwd(), '.codebuddy') || exists(home, '.codebuddy'),
|
|
146
|
+
detectInstalled: 'which codebuddy',
|
|
186
147
|
parentCompany: 'CodeBuddy',
|
|
187
|
-
featureSupport: {
|
|
148
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
188
149
|
},
|
|
189
150
|
{
|
|
190
151
|
id: 'command-code',
|
|
191
152
|
displayName: 'Command Code',
|
|
192
|
-
localSkillsDir: '.
|
|
193
|
-
globalSkillsDir:
|
|
153
|
+
localSkillsDir: '.command-code/skills',
|
|
154
|
+
globalSkillsDir: '~/.command-code/skills',
|
|
194
155
|
isUniversal: false,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
156
|
+
detectInstalled: 'which command-code',
|
|
157
|
+
parentCompany: 'Command',
|
|
158
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
199
159
|
},
|
|
200
160
|
{
|
|
201
161
|
id: 'continue',
|
|
202
162
|
displayName: 'Continue',
|
|
203
163
|
localSkillsDir: '.continue/skills',
|
|
204
|
-
globalSkillsDir:
|
|
164
|
+
globalSkillsDir: '~/.continue/skills',
|
|
205
165
|
isUniversal: false,
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
166
|
+
detectInstalled: 'which continue',
|
|
167
|
+
parentCompany: 'Continue',
|
|
168
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
210
169
|
},
|
|
211
170
|
{
|
|
212
171
|
id: 'crush',
|
|
213
172
|
displayName: 'Crush',
|
|
214
173
|
localSkillsDir: '.crush/skills',
|
|
215
|
-
globalSkillsDir:
|
|
174
|
+
globalSkillsDir: '~/.crush/skills',
|
|
216
175
|
isUniversal: false,
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
176
|
+
detectInstalled: 'which crush',
|
|
177
|
+
parentCompany: 'Crush',
|
|
178
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
221
179
|
},
|
|
222
180
|
{
|
|
223
181
|
id: 'cursor',
|
|
224
182
|
displayName: 'Cursor',
|
|
225
183
|
localSkillsDir: '.cursor/skills',
|
|
226
|
-
globalSkillsDir:
|
|
184
|
+
globalSkillsDir: '~/.cursor/skills',
|
|
227
185
|
isUniversal: false,
|
|
228
|
-
|
|
229
|
-
detectInstalled: async () => exists(home, '.cursor'),
|
|
186
|
+
detectInstalled: 'which cursor',
|
|
230
187
|
parentCompany: 'Anysphere',
|
|
231
|
-
featureSupport: {
|
|
188
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
232
189
|
},
|
|
233
190
|
{
|
|
234
191
|
id: 'droid',
|
|
235
192
|
displayName: 'Droid',
|
|
236
|
-
localSkillsDir: '.
|
|
237
|
-
globalSkillsDir:
|
|
193
|
+
localSkillsDir: '.droid/skills',
|
|
194
|
+
globalSkillsDir: '~/.droid/skills',
|
|
238
195
|
isUniversal: false,
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
243
|
-
notes: 'Dir is .factory/ not .droid/',
|
|
196
|
+
detectInstalled: 'which droid',
|
|
197
|
+
parentCompany: 'Droid',
|
|
198
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
244
199
|
},
|
|
245
200
|
{
|
|
246
201
|
id: 'goose',
|
|
247
202
|
displayName: 'Goose',
|
|
248
203
|
localSkillsDir: '.goose/skills',
|
|
249
|
-
globalSkillsDir:
|
|
204
|
+
globalSkillsDir: '~/.goose/skills',
|
|
250
205
|
isUniversal: false,
|
|
251
|
-
|
|
252
|
-
detectInstalled: async () => exists(xdgConfig, 'goose'),
|
|
253
|
-
envVars: ['XDG_CONFIG_HOME'],
|
|
206
|
+
detectInstalled: 'which goose',
|
|
254
207
|
parentCompany: 'Block',
|
|
255
|
-
featureSupport: {
|
|
208
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: true, customSystemPrompt: true },
|
|
256
209
|
},
|
|
257
210
|
{
|
|
258
211
|
id: 'junie',
|
|
259
212
|
displayName: 'Junie',
|
|
260
213
|
localSkillsDir: '.junie/skills',
|
|
261
|
-
globalSkillsDir:
|
|
214
|
+
globalSkillsDir: '~/.junie/skills',
|
|
262
215
|
isUniversal: false,
|
|
263
|
-
|
|
264
|
-
detectInstalled: async () => exists(home, '.junie'),
|
|
216
|
+
detectInstalled: 'which junie',
|
|
265
217
|
parentCompany: 'JetBrains',
|
|
266
|
-
featureSupport: {
|
|
218
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
267
219
|
},
|
|
268
220
|
{
|
|
269
221
|
id: 'iflow-cli',
|
|
270
222
|
displayName: 'iFlow CLI',
|
|
271
223
|
localSkillsDir: '.iflow/skills',
|
|
272
|
-
globalSkillsDir:
|
|
224
|
+
globalSkillsDir: '~/.iflow/skills',
|
|
273
225
|
isUniversal: false,
|
|
274
|
-
|
|
275
|
-
detectInstalled: async () => exists(home, '.iflow'),
|
|
226
|
+
detectInstalled: 'which iflow',
|
|
276
227
|
parentCompany: 'iFlow',
|
|
277
|
-
featureSupport: {
|
|
228
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
278
229
|
},
|
|
279
230
|
{
|
|
280
231
|
id: 'kilo',
|
|
281
|
-
displayName: 'Kilo
|
|
282
|
-
localSkillsDir: '.
|
|
283
|
-
globalSkillsDir:
|
|
232
|
+
displayName: 'Kilo',
|
|
233
|
+
localSkillsDir: '.kilo/skills',
|
|
234
|
+
globalSkillsDir: '~/.kilo/skills',
|
|
284
235
|
isUniversal: false,
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
236
|
+
detectInstalled: 'which kilo',
|
|
237
|
+
parentCompany: 'Kilo',
|
|
238
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
289
239
|
},
|
|
290
240
|
{
|
|
291
241
|
id: 'kiro-cli',
|
|
292
242
|
displayName: 'Kiro CLI',
|
|
293
243
|
localSkillsDir: '.kiro/skills',
|
|
294
|
-
globalSkillsDir:
|
|
244
|
+
globalSkillsDir: '~/.kiro/skills',
|
|
295
245
|
isUniversal: false,
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
featureSupport: { basicSkills: true, allowedTools: false, contextFork: false, hooks: false },
|
|
300
|
-
notes: 'Does NOT support allowed-tools. Requires manual registration.',
|
|
246
|
+
detectInstalled: 'which kiro',
|
|
247
|
+
parentCompany: 'Amazon',
|
|
248
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
301
249
|
},
|
|
302
250
|
{
|
|
303
251
|
id: 'kode',
|
|
304
252
|
displayName: 'Kode',
|
|
305
253
|
localSkillsDir: '.kode/skills',
|
|
306
|
-
globalSkillsDir:
|
|
254
|
+
globalSkillsDir: '~/.kode/skills',
|
|
307
255
|
isUniversal: false,
|
|
308
|
-
|
|
309
|
-
detectInstalled: async () => exists(home, '.kode'),
|
|
256
|
+
detectInstalled: 'which kode',
|
|
310
257
|
parentCompany: 'Kode',
|
|
311
|
-
featureSupport: {
|
|
258
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
312
259
|
},
|
|
313
260
|
{
|
|
314
261
|
id: 'mcpjam',
|
|
315
262
|
displayName: 'MCPJam',
|
|
316
263
|
localSkillsDir: '.mcpjam/skills',
|
|
317
|
-
globalSkillsDir:
|
|
264
|
+
globalSkillsDir: '~/.mcpjam/skills',
|
|
318
265
|
isUniversal: false,
|
|
319
|
-
|
|
320
|
-
detectInstalled: async () => exists(home, '.mcpjam'),
|
|
266
|
+
detectInstalled: 'which mcpjam',
|
|
321
267
|
parentCompany: 'MCPJam',
|
|
322
|
-
featureSupport: {
|
|
268
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: true, customSystemPrompt: false },
|
|
323
269
|
},
|
|
324
270
|
{
|
|
325
271
|
id: 'mistral-vibe',
|
|
326
272
|
displayName: 'Mistral Vibe',
|
|
327
|
-
localSkillsDir: '.
|
|
328
|
-
globalSkillsDir:
|
|
273
|
+
localSkillsDir: '.mistral/skills',
|
|
274
|
+
globalSkillsDir: '~/.mistral/skills',
|
|
329
275
|
isUniversal: false,
|
|
330
|
-
|
|
331
|
-
detectInstalled: async () => exists(home, '.vibe'),
|
|
276
|
+
detectInstalled: 'which mistral-vibe',
|
|
332
277
|
parentCompany: 'Mistral AI',
|
|
333
|
-
featureSupport: {
|
|
334
|
-
notes: 'Dir is .vibe/ not .mistral-vibe/',
|
|
278
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
335
279
|
},
|
|
336
280
|
{
|
|
337
281
|
id: 'mux',
|
|
338
282
|
displayName: 'Mux',
|
|
339
283
|
localSkillsDir: '.mux/skills',
|
|
340
|
-
globalSkillsDir:
|
|
284
|
+
globalSkillsDir: '~/.mux/skills',
|
|
341
285
|
isUniversal: false,
|
|
342
|
-
|
|
343
|
-
detectInstalled: async () => exists(home, '.mux'),
|
|
286
|
+
detectInstalled: 'which mux',
|
|
344
287
|
parentCompany: 'Mux',
|
|
345
|
-
featureSupport: {
|
|
288
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
346
289
|
},
|
|
347
290
|
{
|
|
348
291
|
id: 'openhands',
|
|
349
292
|
displayName: 'OpenHands',
|
|
350
293
|
localSkillsDir: '.openhands/skills',
|
|
351
|
-
globalSkillsDir:
|
|
294
|
+
globalSkillsDir: '~/.openhands/skills',
|
|
352
295
|
isUniversal: false,
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
296
|
+
detectInstalled: 'which openhands',
|
|
297
|
+
parentCompany: 'All Hands AI',
|
|
298
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
357
299
|
},
|
|
358
300
|
{
|
|
359
301
|
id: 'pi',
|
|
360
302
|
displayName: 'Pi',
|
|
361
303
|
localSkillsDir: '.pi/skills',
|
|
362
|
-
globalSkillsDir:
|
|
304
|
+
globalSkillsDir: '~/.pi/skills',
|
|
363
305
|
isUniversal: false,
|
|
364
|
-
|
|
365
|
-
detectInstalled: async () => exists(home, '.pi/agent'),
|
|
306
|
+
detectInstalled: 'which pi',
|
|
366
307
|
parentCompany: 'Pi',
|
|
367
|
-
featureSupport: {
|
|
368
|
-
notes: 'Nested global path: ~/.pi/agent/skills',
|
|
308
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
369
309
|
},
|
|
370
310
|
{
|
|
371
311
|
id: 'qoder',
|
|
372
312
|
displayName: 'Qoder',
|
|
373
313
|
localSkillsDir: '.qoder/skills',
|
|
374
|
-
globalSkillsDir:
|
|
314
|
+
globalSkillsDir: '~/.qoder/skills',
|
|
375
315
|
isUniversal: false,
|
|
376
|
-
|
|
377
|
-
detectInstalled: async () => exists(home, '.qoder'),
|
|
316
|
+
detectInstalled: 'which qoder',
|
|
378
317
|
parentCompany: 'Qoder',
|
|
379
|
-
featureSupport: {
|
|
318
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
380
319
|
},
|
|
381
320
|
{
|
|
382
321
|
id: 'qwen-code',
|
|
383
322
|
displayName: 'Qwen Code',
|
|
384
323
|
localSkillsDir: '.qwen/skills',
|
|
385
|
-
globalSkillsDir:
|
|
324
|
+
globalSkillsDir: '~/.qwen/skills',
|
|
386
325
|
isUniversal: false,
|
|
387
|
-
|
|
388
|
-
detectInstalled: async () => exists(home, '.qwen'),
|
|
326
|
+
detectInstalled: 'which qwen-code',
|
|
389
327
|
parentCompany: 'Alibaba',
|
|
390
|
-
featureSupport: {
|
|
391
|
-
notes: 'Dir is .qwen/ not .qwen-code/',
|
|
328
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
392
329
|
},
|
|
393
330
|
{
|
|
394
331
|
id: 'roo',
|
|
395
332
|
displayName: 'Roo Code',
|
|
396
333
|
localSkillsDir: '.roo/skills',
|
|
397
|
-
globalSkillsDir:
|
|
334
|
+
globalSkillsDir: '~/.roo/skills',
|
|
398
335
|
isUniversal: false,
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
336
|
+
detectInstalled: 'which roo',
|
|
337
|
+
parentCompany: 'Roo',
|
|
338
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
403
339
|
},
|
|
404
340
|
{
|
|
405
341
|
id: 'trae',
|
|
406
342
|
displayName: 'Trae',
|
|
407
343
|
localSkillsDir: '.trae/skills',
|
|
408
|
-
globalSkillsDir:
|
|
344
|
+
globalSkillsDir: '~/.trae/skills',
|
|
409
345
|
isUniversal: false,
|
|
410
|
-
|
|
411
|
-
detectInstalled: async () => exists(home, '.trae'),
|
|
346
|
+
detectInstalled: 'which trae',
|
|
412
347
|
parentCompany: 'ByteDance',
|
|
413
|
-
featureSupport: {
|
|
414
|
-
notes: 'Shares localSkillsDir with Trae CN',
|
|
348
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: true, customSystemPrompt: true },
|
|
415
349
|
},
|
|
416
350
|
{
|
|
417
351
|
id: 'trae-cn',
|
|
418
352
|
displayName: 'Trae CN',
|
|
419
|
-
localSkillsDir: '.trae/skills',
|
|
420
|
-
globalSkillsDir:
|
|
353
|
+
localSkillsDir: '.trae-cn/skills',
|
|
354
|
+
globalSkillsDir: '~/.trae-cn/skills',
|
|
421
355
|
isUniversal: false,
|
|
422
|
-
|
|
423
|
-
detectInstalled: async () => exists(home, '.trae-cn'),
|
|
356
|
+
detectInstalled: 'which trae-cn',
|
|
424
357
|
parentCompany: 'ByteDance',
|
|
425
|
-
featureSupport: {
|
|
426
|
-
notes: 'China variant. Shares localSkillsDir with Trae.',
|
|
358
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: true, customSystemPrompt: true },
|
|
427
359
|
},
|
|
428
360
|
{
|
|
429
361
|
id: 'windsurf',
|
|
430
362
|
displayName: 'Windsurf',
|
|
431
363
|
localSkillsDir: '.windsurf/skills',
|
|
432
|
-
globalSkillsDir:
|
|
364
|
+
globalSkillsDir: '~/.windsurf/skills',
|
|
433
365
|
isUniversal: false,
|
|
434
|
-
|
|
435
|
-
detectInstalled: async () => exists(home, '.codeium/windsurf'),
|
|
366
|
+
detectInstalled: 'which windsurf',
|
|
436
367
|
parentCompany: 'Codeium',
|
|
437
|
-
featureSupport: {
|
|
438
|
-
notes: 'Global path under ~/.codeium/windsurf/',
|
|
368
|
+
featureSupport: { slashCommands: true, hooks: false, mcp: true, customSystemPrompt: true },
|
|
439
369
|
},
|
|
440
370
|
{
|
|
441
371
|
id: 'zencoder',
|
|
442
|
-
displayName: '
|
|
372
|
+
displayName: 'ZenCoder',
|
|
443
373
|
localSkillsDir: '.zencoder/skills',
|
|
444
|
-
globalSkillsDir:
|
|
374
|
+
globalSkillsDir: '~/.zencoder/skills',
|
|
445
375
|
isUniversal: false,
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
featureSupport: { basicSkills: true, allowedTools: false, contextFork: false, hooks: false },
|
|
450
|
-
notes: 'Does NOT support allowed-tools',
|
|
376
|
+
detectInstalled: 'which zencoder',
|
|
377
|
+
parentCompany: 'ZenCoder',
|
|
378
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
451
379
|
},
|
|
452
380
|
{
|
|
453
381
|
id: 'neovate',
|
|
454
382
|
displayName: 'Neovate',
|
|
455
383
|
localSkillsDir: '.neovate/skills',
|
|
456
|
-
globalSkillsDir:
|
|
384
|
+
globalSkillsDir: '~/.neovate/skills',
|
|
457
385
|
isUniversal: false,
|
|
458
|
-
|
|
459
|
-
detectInstalled: async () => exists(home, '.neovate'),
|
|
386
|
+
detectInstalled: 'which neovate',
|
|
460
387
|
parentCompany: 'Neovate',
|
|
461
|
-
featureSupport: {
|
|
388
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
462
389
|
},
|
|
463
390
|
{
|
|
464
391
|
id: 'pochi',
|
|
465
392
|
displayName: 'Pochi',
|
|
466
393
|
localSkillsDir: '.pochi/skills',
|
|
467
|
-
globalSkillsDir:
|
|
394
|
+
globalSkillsDir: '~/.pochi/skills',
|
|
468
395
|
isUniversal: false,
|
|
469
|
-
|
|
470
|
-
detectInstalled: async () => exists(home, '.pochi'),
|
|
396
|
+
detectInstalled: 'which pochi',
|
|
471
397
|
parentCompany: 'Pochi',
|
|
472
|
-
featureSupport: {
|
|
398
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
473
399
|
},
|
|
474
400
|
{
|
|
475
401
|
id: 'adal',
|
|
476
|
-
displayName: '
|
|
402
|
+
displayName: 'Adal',
|
|
477
403
|
localSkillsDir: '.adal/skills',
|
|
478
|
-
globalSkillsDir:
|
|
404
|
+
globalSkillsDir: '~/.adal/skills',
|
|
479
405
|
isUniversal: false,
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
featureSupport: { ...DEFAULT_FEATURES },
|
|
406
|
+
detectInstalled: 'which adal',
|
|
407
|
+
parentCompany: 'Adal',
|
|
408
|
+
featureSupport: { slashCommands: false, hooks: false, mcp: false, customSystemPrompt: true },
|
|
484
409
|
},
|
|
485
410
|
];
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
411
|
+
/** Total number of registered agents */
|
|
412
|
+
export const TOTAL_AGENTS = AGENTS_REGISTRY.length;
|
|
413
|
+
/**
|
|
414
|
+
* Returns all universal agents (support the universal skill format).
|
|
415
|
+
*/
|
|
490
416
|
export function getUniversalAgents() {
|
|
491
|
-
return AGENTS_REGISTRY.filter(a => a.isUniversal);
|
|
417
|
+
return AGENTS_REGISTRY.filter((a) => a.isUniversal);
|
|
492
418
|
}
|
|
493
|
-
/**
|
|
419
|
+
/**
|
|
420
|
+
* Returns all non-universal agents.
|
|
421
|
+
*/
|
|
494
422
|
export function getNonUniversalAgents() {
|
|
495
|
-
return AGENTS_REGISTRY.filter(a => !a.isUniversal);
|
|
423
|
+
return AGENTS_REGISTRY.filter((a) => !a.isUniversal);
|
|
496
424
|
}
|
|
497
|
-
/**
|
|
425
|
+
/**
|
|
426
|
+
* Gets a single agent by ID.
|
|
427
|
+
*
|
|
428
|
+
* @param id - Agent identifier
|
|
429
|
+
* @returns The agent definition, or undefined if not found
|
|
430
|
+
*/
|
|
498
431
|
export function getAgent(id) {
|
|
499
|
-
return AGENTS_REGISTRY.find(a => a.id === id);
|
|
432
|
+
return AGENTS_REGISTRY.find((a) => a.id === id);
|
|
500
433
|
}
|
|
501
|
-
/**
|
|
434
|
+
/**
|
|
435
|
+
* Detects which agents are installed on the current system
|
|
436
|
+
* by running each agent's detectInstalled command.
|
|
437
|
+
*
|
|
438
|
+
* @returns Array of installed agent definitions
|
|
439
|
+
*/
|
|
502
440
|
export async function detectInstalledAgents() {
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
441
|
+
const { exec } = await import('node:child_process');
|
|
442
|
+
const { promisify } = await import('node:util');
|
|
443
|
+
const execAsync = promisify(exec);
|
|
444
|
+
const results = [];
|
|
445
|
+
await Promise.allSettled(AGENTS_REGISTRY.map(async (agent) => {
|
|
446
|
+
try {
|
|
447
|
+
await execAsync(agent.detectInstalled);
|
|
448
|
+
results.push(agent);
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
// Not installed — skip
|
|
452
|
+
}
|
|
453
|
+
}));
|
|
454
|
+
return results.sort((a, b) => a.id.localeCompare(b.id));
|
|
508
455
|
}
|
|
509
|
-
/** Total agent count */
|
|
510
|
-
export const TOTAL_AGENTS = AGENTS_REGISTRY.length; // 39
|
|
511
456
|
//# sourceMappingURL=agents-registry.js.map
|