servicemap 0.1.9 → 0.1.11
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/bin/servicemap.mjs +102 -15
- package/package.json +1 -1
package/bin/servicemap.mjs
CHANGED
|
@@ -37,19 +37,62 @@ const universalAgents = [
|
|
|
37
37
|
];
|
|
38
38
|
|
|
39
39
|
const targetCatalog = [
|
|
40
|
-
{ id: '
|
|
41
|
-
{ id: 'grok', label: 'Grok', root: () => resolve(homedir(), '.grok/skills') },
|
|
42
|
-
{ id: 'aiderdesk', label: 'AiderDesk', root: () => resolve(homedir(), '.aider-desk/skills') },
|
|
40
|
+
{ id: 'aider-desk', label: 'AiderDesk', root: () => resolve(homedir(), '.aider-desk/skills') },
|
|
43
41
|
{ id: 'astrbot', label: 'AstrBot', root: () => resolve(homedir(), '.astrbot/data/skills') },
|
|
44
|
-
{ id: 'autohand', label: 'Autohand Code CLI', root: () => resolve(homedir(), '.autohand/skills') },
|
|
42
|
+
{ id: 'autohand-code', label: 'Autohand Code CLI', root: () => resolve(homedir(), '.autohand/skills') },
|
|
45
43
|
{ id: 'augment', label: 'Augment', root: () => resolve(homedir(), '.augment/skills') },
|
|
46
|
-
{ id: '
|
|
44
|
+
{ id: 'bob', label: 'IBM Bob', root: () => resolve(homedir(), '.bob/skills') },
|
|
45
|
+
{ id: 'claude-code', label: 'Claude Code', root: () => resolve(homedir(), '.claude/skills') },
|
|
47
46
|
{ id: 'openclaw', label: 'OpenClaw', root: () => resolve(homedir(), '.openclaw/skills') },
|
|
48
|
-
{ id: 'codearts', label: 'CodeArts Agent', root: () => resolve(homedir(), '.codeartsdoer/skills') },
|
|
49
|
-
{ id: '
|
|
47
|
+
{ id: 'codearts-agent', label: 'CodeArts Agent', root: () => resolve(homedir(), '.codeartsdoer/skills') },
|
|
48
|
+
{ id: 'codebuddy', label: 'CodeBuddy', root: () => resolve(homedir(), '.codebuddy/skills') },
|
|
49
|
+
{ id: 'codemaker', label: 'Codemaker', root: () => resolve(homedir(), '.codemaker/skills') },
|
|
50
|
+
{ id: 'codestudio', label: 'Code Studio', root: () => resolve(homedir(), '.codestudio/skills') },
|
|
51
|
+
{ id: 'command-code', label: 'Command Code', root: () => resolve(homedir(), '.commandcode/skills') },
|
|
50
52
|
{ id: 'continue', label: 'Continue', root: () => resolve(homedir(), '.continue/skills') },
|
|
53
|
+
{ id: 'cortex', label: 'Cortex Code', root: () => resolve(homedir(), '.snowflake/cortex/skills') },
|
|
54
|
+
{ id: 'crush', label: 'Crush', root: () => resolve(homedir(), '.config/crush/skills') },
|
|
55
|
+
{ id: 'devin', label: 'Devin for Terminal', root: () => resolve(homedir(), '.config/devin/skills') },
|
|
56
|
+
{ id: 'forgecode', label: 'ForgeCode', root: () => resolve(homedir(), '.forge/skills') },
|
|
57
|
+
{ id: 'fx', label: 'fx', root: () => resolve(homedir(), '.fx/skills') },
|
|
58
|
+
{ id: 'goose', label: 'Goose', root: () => resolve(homedir(), '.config/goose/skills') },
|
|
59
|
+
{ id: 'grok', label: 'Grok Build', root: () => resolve(homedir(), '.grok/skills') },
|
|
60
|
+
{ id: 'hermes-agent', label: 'Hermes Agent', root: () => resolve(homedir(), '.hermes/skills') },
|
|
61
|
+
{ id: 'inference-sh', label: 'inference.sh', root: () => resolve(homedir(), '.inferencesh/skills') },
|
|
62
|
+
{ id: 'jazz', label: 'Jazz', root: () => resolve(homedir(), '.jazz/skills') },
|
|
63
|
+
{ id: 'junie', label: 'Junie', root: () => resolve(homedir(), '.junie/skills') },
|
|
64
|
+
{ id: 'iflow-cli', label: 'iFlow CLI', root: () => resolve(homedir(), '.iflow/skills') },
|
|
65
|
+
{ id: 'kimchi', label: 'Kimchi', root: () => resolve(homedir(), '.config/kimchi/harness/skills') },
|
|
66
|
+
{ id: 'kiro-cli', label: 'Kiro CLI', root: () => resolve(homedir(), '.kiro/skills') },
|
|
67
|
+
{ id: 'kode', label: 'Kode', root: () => resolve(homedir(), '.kode/skills') },
|
|
68
|
+
{ id: 'lingma', label: 'Lingma', root: () => resolve(homedir(), '.lingma/skills') },
|
|
69
|
+
{ id: 'mcpjam', label: 'MCPJam', root: () => resolve(homedir(), '.mcpjam/skills') },
|
|
70
|
+
{ id: 'minimax-code', label: 'MiniMax Code', root: () => resolve(homedir(), '.minimax/skills') },
|
|
71
|
+
{ id: 'mistral-vibe', label: 'Mistral Vibe', root: () => resolve(homedir(), '.vibe/skills') },
|
|
72
|
+
{ id: 'moxby', label: 'Moxby', root: () => resolve(homedir(), '.moxby/skills') },
|
|
73
|
+
{ id: 'mux', label: 'Mux', root: () => resolve(homedir(), '.mux/skills') },
|
|
74
|
+
{ id: 'openhands', label: 'OpenHands', root: () => resolve(homedir(), '.openhands/skills') },
|
|
75
|
+
{ id: 'ona', label: 'Ona', root: () => resolve(homedir(), '.ona/skills') },
|
|
76
|
+
{ id: 'pi', label: 'Pi', root: () => resolve(homedir(), '.pi/agent/skills') },
|
|
77
|
+
{ id: 'posit-assistant', label: 'Posit Assistant', root: () => resolve(homedir(), '.posit/assistant/skills') },
|
|
78
|
+
{ id: 'qoder', label: 'Qoder', root: () => resolve(homedir(), '.qoder/skills') },
|
|
79
|
+
{ id: 'qoder-cn', label: 'Qoder CN', root: () => resolve(homedir(), '.qoder-cn/skills') },
|
|
80
|
+
{ id: 'qwen-code', label: 'Qwen Code', root: () => resolve(homedir(), '.qwen/skills') },
|
|
81
|
+
{ id: 'reasonix', label: 'Reasonix', root: () => resolve(homedir(), '.reasonix/skills') },
|
|
82
|
+
{ id: 'rovodev', label: 'Rovo Dev', root: () => resolve(homedir(), '.rovodev/skills') },
|
|
83
|
+
{ id: 'roo', label: 'Roo Code', root: () => resolve(homedir(), '.roo/skills') },
|
|
84
|
+
{ id: 'tabnine-cli', label: 'Tabnine CLI', root: () => resolve(homedir(), '.tabnine/agent/skills') },
|
|
85
|
+
{ id: 'terramind', label: 'Terramind', root: () => resolve(homedir(), '.terramind/skills') },
|
|
86
|
+
{ id: 'tinycloud', label: 'Tinycloud', root: () => resolve(homedir(), '.tinycloud/skills') },
|
|
87
|
+
{ id: 'trae', label: 'Trae', root: () => resolve(homedir(), '.trae/skills') },
|
|
88
|
+
{ id: 'trae-cn', label: 'Trae CN', root: () => resolve(homedir(), '.trae-cn/skills') },
|
|
51
89
|
{ id: 'windsurf', label: 'Windsurf', root: () => resolve(homedir(), '.windsurf/skills') },
|
|
52
|
-
{ id: '
|
|
90
|
+
{ id: 'zcode', label: 'ZCode', root: () => resolve(homedir(), '.zcode/skills') },
|
|
91
|
+
{ id: 'zencoder', label: 'Zencoder', root: () => resolve(homedir(), '.zencoder/skills') },
|
|
92
|
+
{ id: 'zenflow', label: 'Zenflow', root: () => resolve(homedir(), '.zencoder/skills') },
|
|
93
|
+
{ id: 'neovate', label: 'Neovate', root: () => resolve(homedir(), '.neovate/skills') },
|
|
94
|
+
{ id: 'pochi', label: 'Pochi', root: () => resolve(homedir(), '.pochi/skills') },
|
|
95
|
+
{ id: 'adal', label: 'AdaL', root: () => resolve(homedir(), '.adal/skills') },
|
|
53
96
|
{ id: 'jetbrains-ai', label: 'JetBrains AI', root: () => resolve(homedir(), '.jetbrains-ai/skills') },
|
|
54
97
|
];
|
|
55
98
|
|
|
@@ -89,12 +132,24 @@ const targetAliases = new Map([
|
|
|
89
132
|
['gpt-5.6-sol', 'universal'],
|
|
90
133
|
['gpt-5.6-terra', 'universal'],
|
|
91
134
|
['gpt-5.6-luna', 'universal'],
|
|
92
|
-
['
|
|
93
|
-
['anthropic
|
|
94
|
-
['
|
|
95
|
-
['claude-
|
|
96
|
-
['claude-
|
|
135
|
+
['claude', 'claude-code'],
|
|
136
|
+
['anthropic', 'claude-code'],
|
|
137
|
+
['anthropic-api', 'claude-code'],
|
|
138
|
+
['claude-opus', 'claude-code'],
|
|
139
|
+
['claude-sonnet', 'claude-code'],
|
|
140
|
+
['claude-haiku', 'claude-code'],
|
|
97
141
|
['xai', 'grok'],
|
|
142
|
+
['aiderdesk', 'aider-desk'],
|
|
143
|
+
['autohand', 'autohand-code'],
|
|
144
|
+
['codearts', 'codearts-agent'],
|
|
145
|
+
['ibm-bob', 'bob'],
|
|
146
|
+
['roo-code', 'roo'],
|
|
147
|
+
['qwen', 'qwen-code'],
|
|
148
|
+
['tabnine', 'tabnine-cli'],
|
|
149
|
+
['kiro', 'kiro-cli'],
|
|
150
|
+
['iflow', 'iflow-cli'],
|
|
151
|
+
['minimax', 'minimax-code'],
|
|
152
|
+
['mistral', 'mistral-vibe'],
|
|
98
153
|
]);
|
|
99
154
|
|
|
100
155
|
function parseArgs() {
|
|
@@ -234,21 +289,53 @@ function skillRootsForTargets(options, targets) {
|
|
|
234
289
|
return [...new Set(targets.map((target) => target.root()))];
|
|
235
290
|
}
|
|
236
291
|
|
|
292
|
+
const visibleUniversalLimit = 12;
|
|
293
|
+
const additionalAgentWindowSize = 8;
|
|
294
|
+
|
|
237
295
|
function renderSurvey(selected, cursor) {
|
|
238
296
|
console.clear();
|
|
239
297
|
console.log('Which agents do you want to install Servicemap to?\n');
|
|
240
298
|
console.log('— Universal (.agents/skills) — always included —');
|
|
241
|
-
for (const agent of universalAgents) {
|
|
299
|
+
for (const agent of universalAgents.slice(0, visibleUniversalLimit)) {
|
|
242
300
|
console.log(` • ${agent}`);
|
|
243
301
|
}
|
|
302
|
+
const hiddenUniversalCount = universalAgents.length - visibleUniversalLimit;
|
|
303
|
+
if (hiddenUniversalCount > 0) {
|
|
304
|
+
console.log(` ...and ${hiddenUniversalCount} more`);
|
|
305
|
+
}
|
|
244
306
|
console.log('\n— Additional agents —');
|
|
245
307
|
console.log('Use ↑/↓, Space to select, Enter to install.\n');
|
|
246
308
|
|
|
247
|
-
|
|
309
|
+
const halfWindow = Math.floor(additionalAgentWindowSize / 2);
|
|
310
|
+
let start = Math.max(0, cursor - halfWindow);
|
|
311
|
+
start = Math.min(start, Math.max(0, targetCatalog.length - additionalAgentWindowSize));
|
|
312
|
+
const end = Math.min(targetCatalog.length, start + additionalAgentWindowSize);
|
|
313
|
+
const beforeCount = start;
|
|
314
|
+
const afterCount = targetCatalog.length - end;
|
|
315
|
+
|
|
316
|
+
if (beforeCount > 0) {
|
|
317
|
+
console.log(` ↑ ${beforeCount} more`);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
targetCatalog.slice(start, end).forEach((target, offset) => {
|
|
321
|
+
const index = start + offset;
|
|
248
322
|
const pointer = index === cursor ? '>' : ' ';
|
|
249
323
|
const checked = selected.has(target.id) ? 'x' : ' ';
|
|
250
324
|
console.log(`${pointer} [${checked}] ${target.label}`);
|
|
251
325
|
});
|
|
326
|
+
|
|
327
|
+
if (afterCount > 0) {
|
|
328
|
+
console.log(` ↓ ${afterCount} more`);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
if (selected.size > 0) {
|
|
332
|
+
const selectedLabels = targetCatalog
|
|
333
|
+
.filter((target) => selected.has(target.id))
|
|
334
|
+
.map((target) => target.label);
|
|
335
|
+
const preview = selectedLabels.slice(0, 3).join(', ');
|
|
336
|
+
const remainder = selectedLabels.length > 3 ? ` +${selectedLabels.length - 3} more` : '';
|
|
337
|
+
console.log(`\nSelected: ${preview}${remainder}`);
|
|
338
|
+
}
|
|
252
339
|
}
|
|
253
340
|
|
|
254
341
|
function runTargetSurvey() {
|