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.
Files changed (2) hide show
  1. package/bin/servicemap.mjs +102 -15
  2. package/package.json +1 -1
@@ -37,19 +37,62 @@ const universalAgents = [
37
37
  ];
38
38
 
39
39
  const targetCatalog = [
40
- { id: 'claude', label: 'Claude Code', root: () => resolve(homedir(), '.claude/skills') },
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: 'ibm-bob', label: 'IBM Bob', root: () => resolve(homedir(), '.bob/skills') },
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: 'roo-code', label: 'Roo Code', root: () => resolve(homedir(), '.roo/skills') },
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: 'replit-agent', label: 'Replit Agent', root: () => resolve(homedir(), '.replit/skills') },
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
- ['anthropic', 'claude'],
93
- ['anthropic-api', 'claude'],
94
- ['claude-opus', 'claude'],
95
- ['claude-sonnet', 'claude'],
96
- ['claude-haiku', '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
- targetCatalog.forEach((target, index) => {
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() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "servicemap",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "Generate an internal service map page or desktop app for a software project.",
5
5
  "type": "module",
6
6
  "bin": {