skillsauth 2.0.0 → 3.0.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.
Files changed (87) hide show
  1. package/README.md +256 -79
  2. package/dist/__tests__/agents.test.d.ts +2 -0
  3. package/dist/__tests__/agents.test.d.ts.map +1 -0
  4. package/dist/__tests__/agents.test.js +48 -0
  5. package/dist/__tests__/agents.test.js.map +1 -0
  6. package/dist/__tests__/installer.test.d.ts +2 -0
  7. package/dist/__tests__/installer.test.d.ts.map +1 -0
  8. package/dist/__tests__/installer.test.js +126 -0
  9. package/dist/__tests__/installer.test.js.map +1 -0
  10. package/dist/__tests__/lockfile.test.d.ts +2 -0
  11. package/dist/__tests__/lockfile.test.d.ts.map +1 -0
  12. package/dist/__tests__/lockfile.test.js +76 -0
  13. package/dist/__tests__/lockfile.test.js.map +1 -0
  14. package/dist/__tests__/plugin-manifest.test.d.ts +2 -0
  15. package/dist/__tests__/plugin-manifest.test.d.ts.map +1 -0
  16. package/dist/__tests__/plugin-manifest.test.js +150 -0
  17. package/dist/__tests__/plugin-manifest.test.js.map +1 -0
  18. package/dist/__tests__/slug.test.d.ts +2 -0
  19. package/dist/__tests__/slug.test.d.ts.map +1 -0
  20. package/dist/__tests__/slug.test.js +34 -0
  21. package/dist/__tests__/slug.test.js.map +1 -0
  22. package/dist/commands/add-local.d.ts +14 -0
  23. package/dist/commands/add-local.d.ts.map +1 -0
  24. package/dist/commands/add-local.js +234 -0
  25. package/dist/commands/add-local.js.map +1 -0
  26. package/dist/commands/add.d.ts +7 -2
  27. package/dist/commands/add.d.ts.map +1 -1
  28. package/dist/commands/add.js +69 -33
  29. package/dist/commands/add.js.map +1 -1
  30. package/dist/commands/check.d.ts +7 -0
  31. package/dist/commands/check.d.ts.map +1 -0
  32. package/dist/commands/check.js +57 -0
  33. package/dist/commands/check.js.map +1 -0
  34. package/dist/commands/find.d.ts +7 -0
  35. package/dist/commands/find.d.ts.map +1 -0
  36. package/dist/commands/find.js +60 -0
  37. package/dist/commands/find.js.map +1 -0
  38. package/dist/commands/init.d.ts +7 -0
  39. package/dist/commands/init.d.ts.map +1 -0
  40. package/dist/commands/init.js +146 -0
  41. package/dist/commands/init.js.map +1 -0
  42. package/dist/commands/installed.d.ts +1 -0
  43. package/dist/commands/installed.d.ts.map +1 -1
  44. package/dist/commands/installed.js +4 -0
  45. package/dist/commands/installed.js.map +1 -1
  46. package/dist/commands/plugins.d.ts +8 -0
  47. package/dist/commands/plugins.d.ts.map +1 -0
  48. package/dist/commands/plugins.js +96 -0
  49. package/dist/commands/plugins.js.map +1 -0
  50. package/dist/commands/remove.d.ts.map +1 -1
  51. package/dist/commands/remove.js +5 -0
  52. package/dist/commands/remove.js.map +1 -1
  53. package/dist/index.js +91 -12
  54. package/dist/index.js.map +1 -1
  55. package/dist/lib/agent-registry.d.ts +19 -0
  56. package/dist/lib/agent-registry.d.ts.map +1 -0
  57. package/dist/lib/agent-registry.js +408 -0
  58. package/dist/lib/agent-registry.js.map +1 -0
  59. package/dist/lib/agents.d.ts +9 -1
  60. package/dist/lib/agents.d.ts.map +1 -1
  61. package/dist/lib/agents.js +19 -10
  62. package/dist/lib/agents.js.map +1 -1
  63. package/dist/lib/api.js +2 -2
  64. package/dist/lib/installer.d.ts +12 -1
  65. package/dist/lib/installer.d.ts.map +1 -1
  66. package/dist/lib/installer.js +159 -27
  67. package/dist/lib/installer.js.map +1 -1
  68. package/dist/lib/plugin-manifest.d.ts +21 -0
  69. package/dist/lib/plugin-manifest.d.ts.map +1 -0
  70. package/dist/lib/plugin-manifest.js +144 -0
  71. package/dist/lib/plugin-manifest.js.map +1 -0
  72. package/dist/types.d.ts +3 -1
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/types.js +1 -1
  75. package/dist/types.js.map +1 -1
  76. package/dist/utils/constants.d.ts +1 -14
  77. package/dist/utils/constants.d.ts.map +1 -1
  78. package/dist/utils/constants.js +1 -15
  79. package/dist/utils/constants.js.map +1 -1
  80. package/dist/utils/display.d.ts.map +1 -1
  81. package/dist/utils/display.js +2 -6
  82. package/dist/utils/display.js.map +1 -1
  83. package/dist/utils/slug.d.ts +6 -0
  84. package/dist/utils/slug.d.ts.map +1 -0
  85. package/dist/utils/slug.js +8 -0
  86. package/dist/utils/slug.js.map +1 -0
  87. package/package.json +59 -37
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Agent IDs, install paths, and detection aligned
3
+ * with SkillsAuth platform.
4
+ */
5
+ import { existsSync } from 'fs';
6
+ import { homedir } from 'os';
7
+ import { join } from 'path';
8
+ const home = homedir();
9
+ function configHome() {
10
+ return process.env['XDG_CONFIG_HOME']?.trim() || join(home, '.config');
11
+ }
12
+ function claudeHome() {
13
+ return process.env['CLAUDE_CONFIG_DIR']?.trim() || join(home, '.claude');
14
+ }
15
+ function codexHome() {
16
+ return process.env['CODEX_HOME']?.trim() || join(home, '.codex');
17
+ }
18
+ function getOpenClawGlobalSkillsDir() {
19
+ if (existsSync(join(home, '.openclaw')))
20
+ return join(home, '.openclaw/skills');
21
+ if (existsSync(join(home, '.clawdbot')))
22
+ return join(home, '.clawdbot/skills');
23
+ if (existsSync(join(home, '.moltbot')))
24
+ return join(home, '.moltbot/skills');
25
+ return join(home, '.openclaw/skills');
26
+ }
27
+ const cfg = configHome();
28
+ const ch = () => claudeHome();
29
+ const cx = () => codexHome();
30
+ /** Sorted; must match every key in `AGENT_REGISTRY`. */
31
+ export const AGENT_IDS = [
32
+ 'adal',
33
+ 'amp',
34
+ 'antigravity',
35
+ 'augment',
36
+ 'claude-code',
37
+ 'cline',
38
+ 'codebuddy',
39
+ 'codex',
40
+ 'command-code',
41
+ 'continue',
42
+ 'cortex',
43
+ 'crush',
44
+ 'cursor',
45
+ 'deepagents',
46
+ 'droid',
47
+ 'firebender',
48
+ 'gemini-cli',
49
+ 'github-copilot',
50
+ 'goose',
51
+ 'iflow-cli',
52
+ 'junie',
53
+ 'kilo',
54
+ 'kimi-cli',
55
+ 'kiro-cli',
56
+ 'kode',
57
+ 'mcpjam',
58
+ 'mistral-vibe',
59
+ 'mux',
60
+ 'neovate',
61
+ 'opencode',
62
+ 'openclaw',
63
+ 'openhands',
64
+ 'pi',
65
+ 'pochi',
66
+ 'qoder',
67
+ 'qwen-code',
68
+ 'replit',
69
+ 'roo',
70
+ 'trae',
71
+ 'trae-cn',
72
+ 'universal',
73
+ 'warp',
74
+ 'windsurf',
75
+ 'zencoder',
76
+ ];
77
+ export const AGENT_REGISTRY = {
78
+ adal: {
79
+ displayName: 'AdaL',
80
+ skillsDirRel: '.adal/skills',
81
+ globalSkillsRoot: () => join(home, '.adal/skills'),
82
+ metaDotDir: '.adal',
83
+ detect: () => existsSync(join(home, '.adal')),
84
+ },
85
+ amp: {
86
+ displayName: 'Amp',
87
+ skillsDirRel: '.agents/skills',
88
+ globalSkillsRoot: () => join(cfg, 'agents/skills'),
89
+ metaDotDir: '.config',
90
+ detect: () => existsSync(join(cfg, 'amp')),
91
+ },
92
+ antigravity: {
93
+ displayName: 'Antigravity',
94
+ skillsDirRel: '.agents/skills',
95
+ globalSkillsRoot: () => join(home, '.gemini/antigravity/skills'),
96
+ metaDotDir: '.gemini',
97
+ detect: () => existsSync(join(home, '.gemini/antigravity')),
98
+ },
99
+ augment: {
100
+ displayName: 'Augment',
101
+ skillsDirRel: '.augment/skills',
102
+ globalSkillsRoot: () => join(home, '.augment/skills'),
103
+ metaDotDir: '.augment',
104
+ detect: () => existsSync(join(home, '.augment')),
105
+ },
106
+ 'claude-code': {
107
+ displayName: 'Claude Code',
108
+ skillsDirRel: '.claude/skills',
109
+ globalSkillsRoot: () => join(ch(), 'skills'),
110
+ metaDotDir: '.claude',
111
+ detect: () => existsSync(ch()),
112
+ },
113
+ cline: {
114
+ displayName: 'Cline',
115
+ skillsDirRel: '.agents/skills',
116
+ globalSkillsRoot: () => join(home, '.agents/skills'),
117
+ metaDotDir: '.cline',
118
+ detect: () => existsSync(join(home, '.cline')),
119
+ },
120
+ codebuddy: {
121
+ displayName: 'CodeBuddy',
122
+ skillsDirRel: '.codebuddy/skills',
123
+ globalSkillsRoot: () => join(home, '.codebuddy/skills'),
124
+ metaDotDir: '.codebuddy',
125
+ detect: () => existsSync(join(process.cwd(), '.codebuddy')) || existsSync(join(home, '.codebuddy')),
126
+ },
127
+ codex: {
128
+ displayName: 'Codex',
129
+ skillsDirRel: '.agents/skills',
130
+ globalSkillsRoot: () => join(cx(), 'skills'),
131
+ metaDotDir: '.codex',
132
+ detect: () => existsSync(cx()) || existsSync('/etc/codex'),
133
+ },
134
+ 'command-code': {
135
+ displayName: 'Command Code',
136
+ skillsDirRel: '.commandcode/skills',
137
+ globalSkillsRoot: () => join(home, '.commandcode/skills'),
138
+ metaDotDir: '.commandcode',
139
+ detect: () => existsSync(join(home, '.commandcode')),
140
+ },
141
+ continue: {
142
+ displayName: 'Continue',
143
+ skillsDirRel: '.continue/skills',
144
+ globalSkillsRoot: () => join(home, '.continue/skills'),
145
+ metaDotDir: '.continue',
146
+ detect: () => existsSync(join(process.cwd(), '.continue')) || existsSync(join(home, '.continue')),
147
+ },
148
+ cortex: {
149
+ displayName: 'Cortex Code',
150
+ skillsDirRel: '.cortex/skills',
151
+ globalSkillsRoot: () => join(home, '.snowflake/cortex/skills'),
152
+ metaDotDir: '.snowflake',
153
+ detect: () => existsSync(join(home, '.snowflake/cortex')),
154
+ },
155
+ crush: {
156
+ displayName: 'Crush',
157
+ skillsDirRel: '.crush/skills',
158
+ globalSkillsRoot: () => join(home, '.config/crush/skills'),
159
+ metaDotDir: '.config',
160
+ detect: () => existsSync(join(home, '.config/crush')),
161
+ },
162
+ cursor: {
163
+ displayName: 'Cursor',
164
+ skillsDirRel: '.agents/skills',
165
+ globalSkillsRoot: () => join(home, '.cursor/skills'),
166
+ metaDotDir: '.cursor',
167
+ detect: () => existsSync(join(home, '.cursor')),
168
+ },
169
+ deepagents: {
170
+ displayName: 'Deep Agents',
171
+ skillsDirRel: '.agents/skills',
172
+ globalSkillsRoot: () => join(home, '.deepagents/agent/skills'),
173
+ metaDotDir: '.deepagents',
174
+ detect: () => existsSync(join(home, '.deepagents')),
175
+ },
176
+ droid: {
177
+ displayName: 'Droid',
178
+ skillsDirRel: '.factory/skills',
179
+ globalSkillsRoot: () => join(home, '.factory/skills'),
180
+ metaDotDir: '.factory',
181
+ detect: () => existsSync(join(home, '.factory')),
182
+ },
183
+ firebender: {
184
+ displayName: 'Firebender',
185
+ skillsDirRel: '.agents/skills',
186
+ globalSkillsRoot: () => join(home, '.firebender/skills'),
187
+ metaDotDir: '.firebender',
188
+ detect: () => existsSync(join(home, '.firebender')),
189
+ },
190
+ 'gemini-cli': {
191
+ displayName: 'Gemini CLI',
192
+ skillsDirRel: '.agents/skills',
193
+ globalSkillsRoot: () => join(home, '.gemini/skills'),
194
+ metaDotDir: '.gemini',
195
+ detect: () => existsSync(join(home, '.gemini')),
196
+ },
197
+ 'github-copilot': {
198
+ displayName: 'GitHub Copilot',
199
+ skillsDirRel: '.agents/skills',
200
+ globalSkillsRoot: () => join(home, '.copilot/skills'),
201
+ metaDotDir: '.copilot',
202
+ detect: () => existsSync(join(home, '.copilot')),
203
+ },
204
+ goose: {
205
+ displayName: 'Goose',
206
+ skillsDirRel: '.goose/skills',
207
+ globalSkillsRoot: () => join(cfg, 'goose/skills'),
208
+ metaDotDir: '.goose',
209
+ detect: () => existsSync(join(cfg, 'goose')),
210
+ },
211
+ 'iflow-cli': {
212
+ displayName: 'iFlow CLI',
213
+ skillsDirRel: '.iflow/skills',
214
+ globalSkillsRoot: () => join(home, '.iflow/skills'),
215
+ metaDotDir: '.iflow',
216
+ detect: () => existsSync(join(home, '.iflow')),
217
+ },
218
+ junie: {
219
+ displayName: 'Junie',
220
+ skillsDirRel: '.junie/skills',
221
+ globalSkillsRoot: () => join(home, '.junie/skills'),
222
+ metaDotDir: '.junie',
223
+ detect: () => existsSync(join(home, '.junie')),
224
+ },
225
+ kilo: {
226
+ displayName: 'Kilo Code',
227
+ skillsDirRel: '.kilocode/skills',
228
+ globalSkillsRoot: () => join(home, '.kilocode/skills'),
229
+ metaDotDir: '.kilocode',
230
+ detect: () => existsSync(join(home, '.kilocode')),
231
+ },
232
+ 'kimi-cli': {
233
+ displayName: 'Kimi Code CLI',
234
+ skillsDirRel: '.agents/skills',
235
+ globalSkillsRoot: () => join(home, '.config/agents/skills'),
236
+ metaDotDir: '.kimi',
237
+ detect: () => existsSync(join(home, '.kimi')),
238
+ },
239
+ 'kiro-cli': {
240
+ displayName: 'Kiro CLI',
241
+ skillsDirRel: '.kiro/skills',
242
+ globalSkillsRoot: () => join(home, '.kiro/skills'),
243
+ metaDotDir: '.kiro',
244
+ detect: () => existsSync(join(home, '.kiro')),
245
+ },
246
+ kode: {
247
+ displayName: 'Kode',
248
+ skillsDirRel: '.kode/skills',
249
+ globalSkillsRoot: () => join(home, '.kode/skills'),
250
+ metaDotDir: '.kode',
251
+ detect: () => existsSync(join(home, '.kode')),
252
+ },
253
+ mcpjam: {
254
+ displayName: 'MCPJam',
255
+ skillsDirRel: '.mcpjam/skills',
256
+ globalSkillsRoot: () => join(home, '.mcpjam/skills'),
257
+ metaDotDir: '.mcpjam',
258
+ detect: () => existsSync(join(home, '.mcpjam')),
259
+ },
260
+ 'mistral-vibe': {
261
+ displayName: 'Mistral Vibe',
262
+ skillsDirRel: '.vibe/skills',
263
+ globalSkillsRoot: () => join(home, '.vibe/skills'),
264
+ metaDotDir: '.vibe',
265
+ detect: () => existsSync(join(home, '.vibe')),
266
+ },
267
+ mux: {
268
+ displayName: 'Mux',
269
+ skillsDirRel: '.mux/skills',
270
+ globalSkillsRoot: () => join(home, '.mux/skills'),
271
+ metaDotDir: '.mux',
272
+ detect: () => existsSync(join(home, '.mux')),
273
+ },
274
+ neovate: {
275
+ displayName: 'Neovate',
276
+ skillsDirRel: '.neovate/skills',
277
+ globalSkillsRoot: () => join(home, '.neovate/skills'),
278
+ metaDotDir: '.neovate',
279
+ detect: () => existsSync(join(home, '.neovate')),
280
+ },
281
+ opencode: {
282
+ displayName: 'OpenCode',
283
+ skillsDirRel: '.agents/skills',
284
+ globalSkillsRoot: () => join(cfg, 'opencode/skills'),
285
+ metaDotDir: '.config',
286
+ detect: () => existsSync(join(cfg, 'opencode')),
287
+ },
288
+ openclaw: {
289
+ displayName: 'OpenClaw',
290
+ skillsDirRel: 'skills',
291
+ globalSkillsRoot: () => getOpenClawGlobalSkillsDir(),
292
+ metaDotDir: '.openclaw',
293
+ detect: () => existsSync(join(home, '.openclaw')) ||
294
+ existsSync(join(home, '.clawdbot')) ||
295
+ existsSync(join(home, '.moltbot')),
296
+ },
297
+ openhands: {
298
+ displayName: 'OpenHands',
299
+ skillsDirRel: '.openhands/skills',
300
+ globalSkillsRoot: () => join(home, '.openhands/skills'),
301
+ metaDotDir: '.openhands',
302
+ detect: () => existsSync(join(home, '.openhands')),
303
+ },
304
+ pi: {
305
+ displayName: 'Pi',
306
+ skillsDirRel: '.pi/skills',
307
+ globalSkillsRoot: () => join(home, '.pi/agent/skills'),
308
+ metaDotDir: '.pi',
309
+ detect: () => existsSync(join(home, '.pi/agent')),
310
+ },
311
+ pochi: {
312
+ displayName: 'Pochi',
313
+ skillsDirRel: '.pochi/skills',
314
+ globalSkillsRoot: () => join(home, '.pochi/skills'),
315
+ metaDotDir: '.pochi',
316
+ detect: () => existsSync(join(home, '.pochi')),
317
+ },
318
+ qoder: {
319
+ displayName: 'Qoder',
320
+ skillsDirRel: '.qoder/skills',
321
+ globalSkillsRoot: () => join(home, '.qoder/skills'),
322
+ metaDotDir: '.qoder',
323
+ detect: () => existsSync(join(home, '.qoder')),
324
+ },
325
+ 'qwen-code': {
326
+ displayName: 'Qwen Code',
327
+ skillsDirRel: '.qwen/skills',
328
+ globalSkillsRoot: () => join(home, '.qwen/skills'),
329
+ metaDotDir: '.qwen',
330
+ detect: () => existsSync(join(home, '.qwen')),
331
+ },
332
+ replit: {
333
+ displayName: 'Replit',
334
+ skillsDirRel: '.agents/skills',
335
+ globalSkillsRoot: () => join(cfg, 'agents/skills'),
336
+ metaDotDir: '.replit',
337
+ detect: () => existsSync(join(process.cwd(), '.replit')),
338
+ },
339
+ roo: {
340
+ displayName: 'Roo Code',
341
+ skillsDirRel: '.roo/skills',
342
+ globalSkillsRoot: () => join(home, '.roo/skills'),
343
+ metaDotDir: '.roo',
344
+ detect: () => existsSync(join(home, '.roo')),
345
+ },
346
+ trae: {
347
+ displayName: 'Trae',
348
+ skillsDirRel: '.trae/skills',
349
+ globalSkillsRoot: () => join(home, '.trae/skills'),
350
+ metaDotDir: '.trae',
351
+ detect: () => existsSync(join(home, '.trae')),
352
+ },
353
+ 'trae-cn': {
354
+ displayName: 'Trae CN',
355
+ skillsDirRel: '.trae/skills',
356
+ globalSkillsRoot: () => join(home, '.trae-cn/skills'),
357
+ metaDotDir: '.trae-cn',
358
+ detect: () => existsSync(join(home, '.trae-cn')),
359
+ },
360
+ universal: {
361
+ displayName: 'Universal',
362
+ skillsDirRel: '.agents/skills',
363
+ globalSkillsRoot: () => join(cfg, 'agents/skills'),
364
+ metaDotDir: '.agents',
365
+ detect: () => false,
366
+ },
367
+ warp: {
368
+ displayName: 'Warp',
369
+ skillsDirRel: '.agents/skills',
370
+ globalSkillsRoot: () => join(home, '.agents/skills'),
371
+ metaDotDir: '.warp',
372
+ detect: () => existsSync(join(home, '.warp')),
373
+ },
374
+ windsurf: {
375
+ displayName: 'Windsurf',
376
+ skillsDirRel: '.windsurf/skills',
377
+ globalSkillsRoot: () => join(home, '.codeium/windsurf/skills'),
378
+ metaDotDir: '.codeium',
379
+ detect: () => existsSync(join(home, '.codeium/windsurf')),
380
+ },
381
+ zencoder: {
382
+ displayName: 'Zencoder',
383
+ skillsDirRel: '.zencoder/skills',
384
+ globalSkillsRoot: () => join(home, '.zencoder/skills'),
385
+ metaDotDir: '.zencoder',
386
+ detect: () => existsSync(join(home, '.zencoder')),
387
+ },
388
+ };
389
+ function skillMdRel(skillsDirRel, slug) {
390
+ const base = skillsDirRel.replace(/\/$/, '');
391
+ return `${base}/${slug}/SKILL.md`;
392
+ }
393
+ function buildAgentPaths() {
394
+ const o = {};
395
+ for (const id of AGENT_IDS) {
396
+ const e = AGENT_REGISTRY[id];
397
+ o[id] = {
398
+ local: (slug) => skillMdRel(e.skillsDirRel, slug),
399
+ global: (slug) => join(e.globalSkillsRoot(), slug, 'SKILL.md'),
400
+ };
401
+ }
402
+ return o;
403
+ }
404
+ export const AGENT_PATHS = buildAgentPaths();
405
+ export function isAgentDetected(id) {
406
+ return AGENT_REGISTRY[id].detect();
407
+ }
408
+ //# sourceMappingURL=agent-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/lib/agent-registry.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,16 @@
1
1
  import type { AgentType } from '../types.js';
2
+ export interface AgentMeta {
3
+ id: AgentType;
4
+ displayName: string;
5
+ dotDir: string;
6
+ }
7
+ export declare function getAgentMeta(id: AgentType): AgentMeta;
8
+ export declare function getDisplayName(id: AgentType): string;
2
9
  export interface AgentDetection {
3
10
  id: AgentType;
4
11
  name: string;
5
12
  detected: boolean;
6
13
  }
7
- export declare function detectAgents(scope: 'local' | 'global', cwd: string): AgentDetection[];
14
+ export declare function detectAgents(_scope: 'local' | 'global', _cwd: string): AgentDetection[];
15
+ export declare function detectAutoAgents(scope: 'local' | 'global', cwd: string): AgentType[];
8
16
  //# sourceMappingURL=agents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAOrF"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,SAAS,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAGrD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAMvF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAIpF"}
@@ -1,12 +1,21 @@
1
- import { existsSync } from 'fs';
2
- import { join } from 'path';
3
- import { homedir } from 'os';
4
- export function detectAgents(scope, cwd) {
5
- const base = scope === 'local' ? cwd : homedir();
6
- return [
7
- { id: 'claude-code', name: 'Claude Code', detected: existsSync(join(base, '.claude')) },
8
- { id: 'cursor', name: 'Cursor', detected: existsSync(join(base, '.cursor')) },
9
- { id: 'windsurf', name: 'Windsurf', detected: existsSync(join(base, '.windsurf')) },
10
- ];
1
+ import { AGENT_IDS, AGENT_REGISTRY, isAgentDetected } from './agent-registry.js';
2
+ export function getAgentMeta(id) {
3
+ const e = AGENT_REGISTRY[id];
4
+ return { id, displayName: e.displayName, dotDir: e.metaDotDir };
5
+ }
6
+ export function getDisplayName(id) {
7
+ return AGENT_REGISTRY[id].displayName;
8
+ }
9
+ export function detectAgents(_scope, _cwd) {
10
+ return AGENT_IDS.map((id) => ({
11
+ id,
12
+ name: AGENT_REGISTRY[id].displayName,
13
+ detected: isAgentDetected(id),
14
+ }));
15
+ }
16
+ export function detectAutoAgents(scope, cwd) {
17
+ return detectAgents(scope, cwd)
18
+ .filter((a) => a.detected)
19
+ .map((a) => a.id);
11
20
  }
12
21
  //# sourceMappingURL=agents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAS7B,MAAM,UAAU,YAAY,CAAC,KAAyB,EAAE,GAAW;IACjE,MAAM,IAAI,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjD,OAAO;QACL,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE;QACvF,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE;QAC7E,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE;KACpF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQjF,MAAM,UAAU,YAAY,CAAC,EAAa;IACxC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAa;IAC1C,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;AACxC,CAAC;AAQD,MAAM,UAAU,YAAY,CAAC,MAA0B,EAAE,IAAY;IACnE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE;QACF,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,WAAW;QACpC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAyB,EAAE,GAAW;IACrE,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC"}
package/dist/lib/api.js CHANGED
@@ -14,7 +14,7 @@ async function apiFetch(path) {
14
14
  let res;
15
15
  try {
16
16
  res = await fetch(url, {
17
- headers: { 'User-Agent': 'skillsauth-cli/1.0.0' },
17
+ headers: { 'User-Agent': 'skillsauth-cli/3.0.1' },
18
18
  signal: AbortSignal.timeout(15000),
19
19
  });
20
20
  }
@@ -52,7 +52,7 @@ export function recordDownload(skillId, agentType) {
52
52
  return;
53
53
  fetch(`${API_BASE_URL}/download`, {
54
54
  method: 'POST',
55
- headers: { 'Content-Type': 'application/json', 'User-Agent': 'skillsauth-cli/1.0.0' },
55
+ headers: { 'Content-Type': 'application/json', 'User-Agent': 'skillsauth-cli/3.0.1' },
56
56
  body: JSON.stringify({ skillId, agentType }),
57
57
  signal: AbortSignal.timeout(5000),
58
58
  }).catch(() => { });
@@ -3,9 +3,20 @@ export interface InstallResult {
3
3
  agent: AgentType;
4
4
  path: string;
5
5
  status: 'installed' | 'updated' | 'skipped' | 'error';
6
+ symlink?: boolean;
6
7
  error?: string;
7
8
  }
8
9
  export declare function getInstallPath(slug: string, agent: AgentType, scope: InstallScope): string;
9
- export declare function installSkill(skill: CLISkill, agents: AgentType[], scope: InstallScope, force?: boolean): InstallResult[];
10
+ /**
11
+ * Install a skill to the canonical store first, then symlink (or copy) into
12
+ * each agent's expected directory.
13
+ *
14
+ * Canonical store: .agents/skills/<slug>/ (local) or ~/.agents/skills/<slug>/ (global)
15
+ * Agent link: .<agent>/skills/<slug>/ -> canonical store
16
+ *
17
+ * When `copyMode` is true, files are copied directly to each agent path
18
+ * (no canonical store / no symlink). This is the legacy behaviour.
19
+ */
20
+ export declare function installSkill(skill: CLISkill, agents: AgentType[], scope: InstallScope, force?: boolean, copyMode?: boolean): InstallResult[];
10
21
  export declare function uninstallSkill(slug: string, agents: AgentType[], scope: InstallScope): void;
11
22
  //# sourceMappingURL=installer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/lib/installer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGrE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAI1F;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,EAAE,EACnB,KAAK,EAAE,YAAY,EACnB,KAAK,UAAQ,GACZ,aAAa,EAAE,CAuBjB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAmB3F"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/lib/installer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIrE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAO1F;AAuED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,EAAE,EACnB,KAAK,EAAE,YAAY,EACnB,KAAK,UAAQ,EACb,QAAQ,UAAQ,GACf,aAAa,EAAE,CAsDjB;AA2BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CA4B3F"}