subagents-sh 0.1.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.
Files changed (66) hide show
  1. package/README.md +57 -0
  2. package/dist/commands/add.d.ts +6 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +35 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/list.d.ts +7 -0
  7. package/dist/commands/list.d.ts.map +1 -0
  8. package/dist/commands/list.js +77 -0
  9. package/dist/commands/list.js.map +1 -0
  10. package/dist/commands/remove.d.ts +6 -0
  11. package/dist/commands/remove.d.ts.map +1 -0
  12. package/dist/commands/remove.js +25 -0
  13. package/dist/commands/remove.js.map +1 -0
  14. package/dist/commands/update.d.ts +7 -0
  15. package/dist/commands/update.d.ts.map +1 -0
  16. package/dist/commands/update.js +83 -0
  17. package/dist/commands/update.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +125 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/types.d.ts +41 -0
  23. package/dist/types.d.ts.map +1 -0
  24. package/dist/types.js +3 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist/utils/fetch.d.ts +23 -0
  27. package/dist/utils/fetch.d.ts.map +1 -0
  28. package/dist/utils/fetch.js +124 -0
  29. package/dist/utils/fetch.js.map +1 -0
  30. package/dist/utils/fetch.test.d.ts +2 -0
  31. package/dist/utils/fetch.test.d.ts.map +1 -0
  32. package/dist/utils/fetch.test.js +246 -0
  33. package/dist/utils/fetch.test.js.map +1 -0
  34. package/dist/utils/install.d.ts +68 -0
  35. package/dist/utils/install.d.ts.map +1 -0
  36. package/dist/utils/install.js +140 -0
  37. package/dist/utils/install.js.map +1 -0
  38. package/dist/utils/install.test.d.ts +2 -0
  39. package/dist/utils/install.test.d.ts.map +1 -0
  40. package/dist/utils/install.test.js +565 -0
  41. package/dist/utils/install.test.js.map +1 -0
  42. package/dist/utils/manifest.d.ts +37 -0
  43. package/dist/utils/manifest.d.ts.map +1 -0
  44. package/dist/utils/manifest.js +74 -0
  45. package/dist/utils/manifest.js.map +1 -0
  46. package/dist/utils/manifest.test.d.ts +2 -0
  47. package/dist/utils/manifest.test.d.ts.map +1 -0
  48. package/dist/utils/manifest.test.js +278 -0
  49. package/dist/utils/manifest.test.js.map +1 -0
  50. package/dist/utils/paths.d.ts +49 -0
  51. package/dist/utils/paths.d.ts.map +1 -0
  52. package/dist/utils/paths.js +98 -0
  53. package/dist/utils/paths.js.map +1 -0
  54. package/dist/utils/paths.test.d.ts +2 -0
  55. package/dist/utils/paths.test.d.ts.map +1 -0
  56. package/dist/utils/paths.test.js +255 -0
  57. package/dist/utils/paths.test.js.map +1 -0
  58. package/dist/utils/telemetry.d.ts +5 -0
  59. package/dist/utils/telemetry.d.ts.map +1 -0
  60. package/dist/utils/telemetry.js +30 -0
  61. package/dist/utils/telemetry.js.map +1 -0
  62. package/dist/utils/telemetry.test.d.ts +2 -0
  63. package/dist/utils/telemetry.test.d.ts.map +1 -0
  64. package/dist/utils/telemetry.test.js +113 -0
  65. package/dist/utils/telemetry.test.js.map +1 -0
  66. package/package.json +57 -0
@@ -0,0 +1,565 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import * as fs from 'node:fs';
3
+ import { parseSubagent, installSubagent, uninstallSubagent, updateAllSubagents, } from './install.js';
4
+ import * as fetchModule from './fetch.js';
5
+ import * as manifestModule from './manifest.js';
6
+ import * as pathsModule from './paths.js';
7
+ import * as telemetryModule from './telemetry.js';
8
+ vi.mock('node:fs');
9
+ vi.mock('./fetch.js');
10
+ vi.mock('./manifest.js');
11
+ vi.mock('./paths.js');
12
+ vi.mock('./telemetry.js');
13
+ describe('parseSubagent', () => {
14
+ it('parses valid YAML frontmatter', () => {
15
+ const content = `---
16
+ name: Test Agent
17
+ description: A test agent
18
+ tools:
19
+ - Bash
20
+ - Read
21
+ ---
22
+
23
+ # Test Agent
24
+
25
+ This is the agent content.`;
26
+ const result = parseSubagent(content);
27
+ expect(result.frontmatter).toEqual({
28
+ name: 'Test Agent',
29
+ description: 'A test agent',
30
+ tools: ['Bash', 'Read'],
31
+ });
32
+ expect(result.content).toBe('# Test Agent\n\nThis is the agent content.');
33
+ expect(result.raw).toBe(content);
34
+ });
35
+ it('parses frontmatter with minimal fields', () => {
36
+ const content = `---
37
+ name: Minimal Agent
38
+ ---
39
+
40
+ Content here`;
41
+ const result = parseSubagent(content);
42
+ expect(result.frontmatter.name).toBe('Minimal Agent');
43
+ expect(result.frontmatter.description).toBeUndefined();
44
+ expect(result.frontmatter.tools).toBeUndefined();
45
+ });
46
+ it('throws when name is missing', () => {
47
+ const content = `---
48
+ description: Missing name
49
+ ---
50
+
51
+ Content`;
52
+ expect(() => parseSubagent(content)).toThrow('Subagent is missing required "name" field in frontmatter');
53
+ });
54
+ it('throws when frontmatter is empty', () => {
55
+ const content = `---
56
+ ---
57
+
58
+ Content`;
59
+ expect(() => parseSubagent(content)).toThrow('Subagent is missing required "name" field in frontmatter');
60
+ });
61
+ it('throws when no frontmatter present', () => {
62
+ const content = '# Just content without frontmatter';
63
+ expect(() => parseSubagent(content)).toThrow('Subagent is missing required "name" field in frontmatter');
64
+ });
65
+ it('trims content whitespace', () => {
66
+ const content = `---
67
+ name: Test
68
+ ---
69
+
70
+ Content with leading/trailing whitespace
71
+
72
+ `;
73
+ const result = parseSubagent(content);
74
+ expect(result.content).toBe('Content with leading/trailing whitespace');
75
+ });
76
+ it('preserves additional frontmatter fields', () => {
77
+ const content = `---
78
+ name: Extended Agent
79
+ description: Has extra fields
80
+ customField: custom value
81
+ version: 1.0.0
82
+ ---
83
+
84
+ Content`;
85
+ const result = parseSubagent(content);
86
+ expect(result.frontmatter.customField).toBe('custom value');
87
+ expect(result.frontmatter.version).toBe('1.0.0');
88
+ });
89
+ });
90
+ describe('installSubagent', () => {
91
+ beforeEach(() => {
92
+ vi.mocked(pathsModule.getSubagentPath).mockReturnValue('/test/.claude/agents/test-agent.md');
93
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(false);
94
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue(undefined);
95
+ vi.mocked(fetchModule.getDefaultBranch).mockResolvedValue('main');
96
+ vi.mocked(telemetryModule.sendTelemetry).mockImplementation(() => Promise.resolve());
97
+ });
98
+ afterEach(() => {
99
+ vi.resetAllMocks();
100
+ });
101
+ it('fetches from GitHub and saves to disk', async () => {
102
+ const agentContent = `---
103
+ name: Test Agent
104
+ description: A test agent
105
+ ---
106
+
107
+ Agent content`;
108
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
109
+ owner: 'owner',
110
+ repo: 'repo',
111
+ name: 'test-agent',
112
+ });
113
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
114
+ content: agentContent,
115
+ source: {
116
+ owner: 'owner',
117
+ repo: 'repo',
118
+ name: 'test-agent',
119
+ branch: 'main',
120
+ path: '.claude/agents/test-agent.md',
121
+ },
122
+ });
123
+ await installSubagent('owner/repo/test-agent');
124
+ expect(fs.writeFileSync).toHaveBeenCalledWith('/test/.claude/agents/test-agent.md', agentContent);
125
+ });
126
+ it('creates manifest entry with metadata and scope', async () => {
127
+ const agentContent = `---
128
+ name: Test Agent
129
+ description: A test agent
130
+ tools:
131
+ - Bash
132
+ ---
133
+
134
+ Content`;
135
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
136
+ owner: 'owner',
137
+ repo: 'repo',
138
+ name: 'test-agent',
139
+ });
140
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
141
+ content: agentContent,
142
+ source: {
143
+ owner: 'owner',
144
+ repo: 'repo',
145
+ name: 'test-agent',
146
+ branch: 'main',
147
+ path: '.claude/agents/test-agent.md',
148
+ },
149
+ });
150
+ await installSubagent('owner/repo/test-agent');
151
+ expect(manifestModule.addToManifest).toHaveBeenCalledWith('test-agent', expect.objectContaining({
152
+ name: 'Test Agent',
153
+ path: '/test/.claude/agents/test-agent.md',
154
+ source: 'owner/repo/test-agent',
155
+ description: 'A test agent',
156
+ tools: ['Bash'],
157
+ }), 'global' // Default scope
158
+ );
159
+ });
160
+ it('sends telemetry event with scope', async () => {
161
+ const agentContent = `---
162
+ name: Test Agent
163
+ ---
164
+
165
+ Content`;
166
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
167
+ owner: 'owner',
168
+ repo: 'repo',
169
+ name: 'test-agent',
170
+ });
171
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
172
+ content: agentContent,
173
+ source: {
174
+ owner: 'owner',
175
+ repo: 'repo',
176
+ name: 'test-agent',
177
+ branch: 'main',
178
+ path: '.claude/agents/test-agent.md',
179
+ },
180
+ });
181
+ await installSubagent('owner/repo/test-agent');
182
+ expect(telemetryModule.sendTelemetry).toHaveBeenCalledWith('owner/repo/test-agent', 'download', expect.objectContaining({
183
+ owner: 'owner',
184
+ repo: 'repo',
185
+ name: 'test-agent',
186
+ isUpdate: false,
187
+ scope: 'global',
188
+ }));
189
+ });
190
+ it('respects force flag for overwrites', async () => {
191
+ const agentContent = `---
192
+ name: Test Agent
193
+ ---
194
+
195
+ Content`;
196
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
197
+ name: 'Test Agent',
198
+ path: '/test/.claude/agents/test-agent.md',
199
+ source: 'owner/repo/test-agent',
200
+ installedAt: '2024-01-01T00:00:00.000Z',
201
+ updatedAt: '2024-01-01T00:00:00.000Z',
202
+ });
203
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
204
+ owner: 'owner',
205
+ repo: 'repo',
206
+ name: 'test-agent',
207
+ });
208
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
209
+ content: agentContent,
210
+ source: {
211
+ owner: 'owner',
212
+ repo: 'repo',
213
+ name: 'test-agent',
214
+ branch: 'main',
215
+ path: '.claude/agents/test-agent.md',
216
+ },
217
+ });
218
+ const result = await installSubagent('owner/repo/test-agent', { force: true });
219
+ expect(result.isUpdate).toBe(true);
220
+ expect(fs.writeFileSync).toHaveBeenCalled();
221
+ });
222
+ it('throws if subagent exists without force', async () => {
223
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
224
+ name: 'Test Agent',
225
+ path: '/test/.claude/agents/test-agent.md',
226
+ source: 'owner/repo/test-agent',
227
+ installedAt: '2024-01-01T00:00:00.000Z',
228
+ updatedAt: '2024-01-01T00:00:00.000Z',
229
+ });
230
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
231
+ owner: 'owner',
232
+ repo: 'repo',
233
+ name: 'test-agent',
234
+ });
235
+ await expect(installSubagent('owner/repo/test-agent')).rejects.toThrow('Subagent "test-agent" is already installed in global scope. Use --force to overwrite.');
236
+ });
237
+ it('throws if file exists on disk without manifest entry', async () => {
238
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(true);
239
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
240
+ owner: 'owner',
241
+ repo: 'repo',
242
+ name: 'test-agent',
243
+ });
244
+ await expect(installSubagent('owner/repo/test-agent')).rejects.toThrow('Subagent "test-agent" is already installed in global scope. Use --force to overwrite.');
245
+ });
246
+ it('returns install result with path, update status, and scope', async () => {
247
+ const agentContent = `---
248
+ name: Test Agent
249
+ ---
250
+
251
+ Content`;
252
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
253
+ owner: 'owner',
254
+ repo: 'repo',
255
+ name: 'test-agent',
256
+ });
257
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
258
+ content: agentContent,
259
+ source: {
260
+ owner: 'owner',
261
+ repo: 'repo',
262
+ name: 'test-agent',
263
+ branch: 'main',
264
+ path: '.claude/agents/test-agent.md',
265
+ },
266
+ });
267
+ const result = await installSubagent('owner/repo/test-agent');
268
+ expect(result).toEqual({
269
+ name: 'test-agent',
270
+ path: '/test/.claude/agents/test-agent.md',
271
+ isUpdate: false,
272
+ scope: 'global',
273
+ });
274
+ });
275
+ it('preserves installedAt date on update', async () => {
276
+ const originalDate = '2024-01-01T00:00:00.000Z';
277
+ const agentContent = `---
278
+ name: Test Agent
279
+ ---
280
+
281
+ Content`;
282
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
283
+ name: 'Test Agent',
284
+ path: '/test/.claude/agents/test-agent.md',
285
+ source: 'owner/repo/test-agent',
286
+ installedAt: originalDate,
287
+ updatedAt: originalDate,
288
+ });
289
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
290
+ owner: 'owner',
291
+ repo: 'repo',
292
+ name: 'test-agent',
293
+ });
294
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
295
+ content: agentContent,
296
+ source: {
297
+ owner: 'owner',
298
+ repo: 'repo',
299
+ name: 'test-agent',
300
+ branch: 'main',
301
+ path: '.claude/agents/test-agent.md',
302
+ },
303
+ });
304
+ await installSubagent('owner/repo/test-agent', { force: true });
305
+ expect(manifestModule.addToManifest).toHaveBeenCalledWith('test-agent', expect.objectContaining({
306
+ installedAt: originalDate,
307
+ }), 'global');
308
+ });
309
+ it('installs to local scope when specified', async () => {
310
+ const agentContent = `---
311
+ name: Test Agent
312
+ ---
313
+
314
+ Content`;
315
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
316
+ owner: 'owner',
317
+ repo: 'repo',
318
+ name: 'test-agent',
319
+ });
320
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
321
+ content: agentContent,
322
+ source: {
323
+ owner: 'owner',
324
+ repo: 'repo',
325
+ name: 'test-agent',
326
+ branch: 'main',
327
+ path: '.claude/agents/test-agent.md',
328
+ },
329
+ });
330
+ const result = await installSubagent('owner/repo/test-agent', { scope: 'local' });
331
+ expect(result.scope).toBe('local');
332
+ expect(pathsModule.getSubagentPath).toHaveBeenCalledWith('test-agent', 'local');
333
+ expect(pathsModule.subagentExists).toHaveBeenCalledWith('test-agent', 'local');
334
+ expect(manifestModule.getFromManifest).toHaveBeenCalledWith('test-agent', 'local');
335
+ expect(manifestModule.addToManifest).toHaveBeenCalledWith('test-agent', expect.anything(), 'local');
336
+ });
337
+ });
338
+ describe('uninstallSubagent', () => {
339
+ beforeEach(() => {
340
+ vi.mocked(pathsModule.getSubagentPath).mockReturnValue('/test/.claude/agents/test-agent.md');
341
+ vi.mocked(pathsModule.findSubagentScope).mockReturnValue('global');
342
+ });
343
+ afterEach(() => {
344
+ vi.resetAllMocks();
345
+ });
346
+ it('removes file and manifest entry', () => {
347
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
348
+ name: 'Test Agent',
349
+ path: '/test/.claude/agents/test-agent.md',
350
+ source: 'owner/repo/test-agent',
351
+ installedAt: '2024-01-01T00:00:00.000Z',
352
+ updatedAt: '2024-01-01T00:00:00.000Z',
353
+ });
354
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(true);
355
+ const result = uninstallSubagent('test-agent');
356
+ expect(fs.unlinkSync).toHaveBeenCalledWith('/test/.claude/agents/test-agent.md');
357
+ expect(manifestModule.removeFromManifest).toHaveBeenCalledWith('test-agent', 'global');
358
+ expect(result.path).toBe('/test/.claude/agents/test-agent.md');
359
+ expect(result.scope).toBe('global');
360
+ });
361
+ it('removes manifest entry even if file is missing', () => {
362
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
363
+ name: 'Test Agent',
364
+ path: '/test/.claude/agents/test-agent.md',
365
+ source: 'owner/repo/test-agent',
366
+ installedAt: '2024-01-01T00:00:00.000Z',
367
+ updatedAt: '2024-01-01T00:00:00.000Z',
368
+ });
369
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(false);
370
+ uninstallSubagent('test-agent');
371
+ expect(fs.unlinkSync).not.toHaveBeenCalled();
372
+ expect(manifestModule.removeFromManifest).toHaveBeenCalledWith('test-agent', 'global');
373
+ });
374
+ it('removes file even if manifest entry is missing', () => {
375
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue(undefined);
376
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(true);
377
+ uninstallSubagent('test-agent');
378
+ expect(fs.unlinkSync).toHaveBeenCalledWith('/test/.claude/agents/test-agent.md');
379
+ expect(manifestModule.removeFromManifest).toHaveBeenCalledWith('test-agent', 'global');
380
+ });
381
+ it('throws when subagent is not installed', () => {
382
+ vi.mocked(pathsModule.findSubagentScope).mockReturnValue(null);
383
+ expect(() => uninstallSubagent('nonexistent')).toThrow('Subagent "nonexistent" is not installed.');
384
+ });
385
+ it('auto-detects scope when not specified', () => {
386
+ vi.mocked(pathsModule.findSubagentScope).mockReturnValue('local');
387
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
388
+ name: 'Test Agent',
389
+ path: '/test/.claude/agents/test-agent.md',
390
+ source: 'owner/repo/test-agent',
391
+ installedAt: '2024-01-01T00:00:00.000Z',
392
+ updatedAt: '2024-01-01T00:00:00.000Z',
393
+ });
394
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(true);
395
+ const result = uninstallSubagent('test-agent');
396
+ expect(result.scope).toBe('local');
397
+ expect(pathsModule.findSubagentScope).toHaveBeenCalledWith('test-agent');
398
+ });
399
+ it('uses specified scope when provided', () => {
400
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
401
+ name: 'Test Agent',
402
+ path: '/test/.claude/agents/test-agent.md',
403
+ source: 'owner/repo/test-agent',
404
+ installedAt: '2024-01-01T00:00:00.000Z',
405
+ updatedAt: '2024-01-01T00:00:00.000Z',
406
+ });
407
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(true);
408
+ const result = uninstallSubagent('test-agent', { scope: 'local' });
409
+ expect(result.scope).toBe('local');
410
+ expect(pathsModule.findSubagentScope).not.toHaveBeenCalled();
411
+ });
412
+ });
413
+ describe('updateAllSubagents', () => {
414
+ beforeEach(() => {
415
+ vi.mocked(pathsModule.getSubagentPath).mockImplementation((name) => `/test/.claude/agents/${name}.md`);
416
+ vi.mocked(pathsModule.subagentExists).mockReturnValue(true);
417
+ vi.mocked(fetchModule.getDefaultBranch).mockResolvedValue('main');
418
+ vi.mocked(telemetryModule.sendTelemetry).mockImplementation(() => Promise.resolve());
419
+ });
420
+ afterEach(() => {
421
+ vi.resetAllMocks();
422
+ });
423
+ it('updates all installed subagents', async () => {
424
+ vi.mocked(manifestModule.listManifestSubagents).mockReturnValue([
425
+ {
426
+ name: 'Agent A',
427
+ path: '/test/.claude/agents/agent-a.md',
428
+ source: 'owner/repo/agent-a',
429
+ installedAt: '2024-01-01T00:00:00.000Z',
430
+ updatedAt: '2024-01-01T00:00:00.000Z',
431
+ },
432
+ {
433
+ name: 'Agent B',
434
+ path: '/test/.claude/agents/agent-b.md',
435
+ source: 'owner/repo/agent-b',
436
+ installedAt: '2024-01-01T00:00:00.000Z',
437
+ updatedAt: '2024-01-01T00:00:00.000Z',
438
+ },
439
+ ]);
440
+ vi.mocked(manifestModule.getFromManifest).mockImplementation((name) => ({
441
+ name: `Agent ${name.charAt(name.length - 1).toUpperCase()}`,
442
+ path: `/test/.claude/agents/${name}.md`,
443
+ source: `owner/repo/${name}`,
444
+ installedAt: '2024-01-01T00:00:00.000Z',
445
+ updatedAt: '2024-01-01T00:00:00.000Z',
446
+ }));
447
+ vi.mocked(fetchModule.parseIdentifier).mockImplementation((id) => {
448
+ const parts = id.split('/');
449
+ return { owner: parts[0], repo: parts[1], name: parts[2] };
450
+ });
451
+ vi.mocked(fetchModule.fetchFromGitHub).mockImplementation(async (_, __, name) => ({
452
+ content: `---\nname: ${name}\n---\nContent`,
453
+ source: {
454
+ owner: 'owner',
455
+ repo: 'repo',
456
+ name,
457
+ branch: 'main',
458
+ path: `.claude/agents/${name}.md`,
459
+ },
460
+ }));
461
+ const result = await updateAllSubagents();
462
+ expect(result.updated).toEqual(['Agent A', 'Agent B']);
463
+ expect(result.errors).toHaveLength(0);
464
+ });
465
+ it('calls progress callback with status updates', async () => {
466
+ vi.mocked(manifestModule.listManifestSubagents).mockReturnValue([
467
+ {
468
+ name: 'Agent A',
469
+ path: '/test/.claude/agents/agent-a.md',
470
+ source: 'owner/repo/agent-a',
471
+ installedAt: '2024-01-01T00:00:00.000Z',
472
+ updatedAt: '2024-01-01T00:00:00.000Z',
473
+ },
474
+ ]);
475
+ vi.mocked(manifestModule.getFromManifest).mockReturnValue({
476
+ name: 'Agent A',
477
+ path: '/test/.claude/agents/agent-a.md',
478
+ source: 'owner/repo/agent-a',
479
+ installedAt: '2024-01-01T00:00:00.000Z',
480
+ updatedAt: '2024-01-01T00:00:00.000Z',
481
+ });
482
+ vi.mocked(fetchModule.parseIdentifier).mockReturnValue({
483
+ owner: 'owner',
484
+ repo: 'repo',
485
+ name: 'agent-a',
486
+ });
487
+ vi.mocked(fetchModule.fetchFromGitHub).mockResolvedValue({
488
+ content: `---\nname: agent-a\n---\nContent`,
489
+ source: {
490
+ owner: 'owner',
491
+ repo: 'repo',
492
+ name: 'agent-a',
493
+ branch: 'main',
494
+ path: '.claude/agents/agent-a.md',
495
+ },
496
+ });
497
+ const onProgress = vi.fn();
498
+ await updateAllSubagents({}, onProgress);
499
+ expect(onProgress).toHaveBeenCalledWith('Agent A', 'updating');
500
+ expect(onProgress).toHaveBeenCalledWith('Agent A', 'updated');
501
+ });
502
+ it('collects errors and continues updating', async () => {
503
+ vi.mocked(manifestModule.listManifestSubagents).mockReturnValue([
504
+ {
505
+ name: 'Agent A',
506
+ path: '/test/.claude/agents/agent-a.md',
507
+ source: 'owner/repo/agent-a',
508
+ installedAt: '2024-01-01T00:00:00.000Z',
509
+ updatedAt: '2024-01-01T00:00:00.000Z',
510
+ },
511
+ {
512
+ name: 'Agent B',
513
+ path: '/test/.claude/agents/agent-b.md',
514
+ source: 'owner/repo/agent-b',
515
+ installedAt: '2024-01-01T00:00:00.000Z',
516
+ updatedAt: '2024-01-01T00:00:00.000Z',
517
+ },
518
+ ]);
519
+ vi.mocked(manifestModule.getFromManifest).mockImplementation((name) => ({
520
+ name: `Agent ${name.charAt(name.length - 1).toUpperCase()}`,
521
+ path: `/test/.claude/agents/${name}.md`,
522
+ source: `owner/repo/${name}`,
523
+ installedAt: '2024-01-01T00:00:00.000Z',
524
+ updatedAt: '2024-01-01T00:00:00.000Z',
525
+ }));
526
+ vi.mocked(fetchModule.parseIdentifier).mockImplementation((id) => {
527
+ const parts = id.split('/');
528
+ return { owner: parts[0], repo: parts[1], name: parts[2] };
529
+ });
530
+ // First agent fails, second succeeds
531
+ vi.mocked(fetchModule.fetchFromGitHub)
532
+ .mockRejectedValueOnce(new Error('Network error'))
533
+ .mockResolvedValueOnce({
534
+ content: `---\nname: agent-b\n---\nContent`,
535
+ source: {
536
+ owner: 'owner',
537
+ repo: 'repo',
538
+ name: 'agent-b',
539
+ branch: 'main',
540
+ path: '.claude/agents/agent-b.md',
541
+ },
542
+ });
543
+ const onProgress = vi.fn();
544
+ const result = await updateAllSubagents({}, onProgress);
545
+ expect(result.updated).toEqual(['Agent B']);
546
+ expect(result.errors).toHaveLength(1);
547
+ expect(result.errors[0]).toEqual({
548
+ name: 'Agent A',
549
+ error: 'Network error',
550
+ });
551
+ expect(onProgress).toHaveBeenCalledWith('Agent A', 'error', 'Network error');
552
+ });
553
+ it('returns empty arrays when no subagents installed', async () => {
554
+ vi.mocked(manifestModule.listManifestSubagents).mockReturnValue([]);
555
+ const result = await updateAllSubagents();
556
+ expect(result.updated).toEqual([]);
557
+ expect(result.errors).toEqual([]);
558
+ });
559
+ it('uses specified scope for updates', async () => {
560
+ vi.mocked(manifestModule.listManifestSubagents).mockReturnValue([]);
561
+ await updateAllSubagents({ scope: 'local' });
562
+ expect(manifestModule.listManifestSubagents).toHaveBeenCalledWith('local');
563
+ });
564
+ });
565
+ //# sourceMappingURL=install.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../src/utils/install.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Manifest, InstalledSubagent, StorageScope } from '../types.js';
2
+ /**
3
+ * Load the manifest file for a given scope
4
+ * @param scope - 'global' (default) or 'local'
5
+ */
6
+ export declare function loadManifest(scope?: StorageScope): Manifest;
7
+ /**
8
+ * Save the manifest file for a given scope
9
+ * @param manifest - The manifest to save
10
+ * @param scope - 'global' (default) or 'local'
11
+ */
12
+ export declare function saveManifest(manifest: Manifest, scope?: StorageScope): void;
13
+ /**
14
+ * Add a subagent to the manifest for a given scope
15
+ * @param name - Subagent name
16
+ * @param subagent - Subagent info
17
+ * @param scope - 'global' (default) or 'local'
18
+ */
19
+ export declare function addToManifest(name: string, subagent: InstalledSubagent, scope?: StorageScope): void;
20
+ /**
21
+ * Remove a subagent from the manifest for a given scope
22
+ * @param name - Subagent name
23
+ * @param scope - 'global' (default) or 'local'
24
+ */
25
+ export declare function removeFromManifest(name: string, scope?: StorageScope): void;
26
+ /**
27
+ * Get a subagent from the manifest for a given scope
28
+ * @param name - Subagent name
29
+ * @param scope - 'global' (default) or 'local'
30
+ */
31
+ export declare function getFromManifest(name: string, scope?: StorageScope): InstalledSubagent | undefined;
32
+ /**
33
+ * List all subagents in the manifest for a given scope
34
+ * @param scope - 'global' (default) or 'local'
35
+ */
36
+ export declare function listManifestSubagents(scope?: StorageScope): InstalledSubagent[];
37
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI7E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,YAAuB,GAAG,QAAQ,CAmBrE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAE,YAAuB,GAAG,IAAI,CAGrF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,GAAE,YAAuB,GAAG,IAAI,CAI7G;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,YAAuB,GAAG,IAAI,CAIrF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,YAAuB,GAAG,iBAAiB,GAAG,SAAS,CAG3G;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,GAAE,YAAuB,GAAG,iBAAiB,EAAE,CAGzF"}