@codemcp/agentskills-cli 0.0.5

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 (46) hide show
  1. package/LICENSE +19 -0
  2. package/dist/__tests__/cli.test.d.ts +2 -0
  3. package/dist/__tests__/cli.test.d.ts.map +1 -0
  4. package/dist/__tests__/cli.test.js +210 -0
  5. package/dist/__tests__/cli.test.js.map +1 -0
  6. package/dist/cli.d.ts +6 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +66 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/__tests__/add.test.d.ts +2 -0
  11. package/dist/commands/__tests__/add.test.d.ts.map +1 -0
  12. package/dist/commands/__tests__/add.test.js +363 -0
  13. package/dist/commands/__tests__/add.test.js.map +1 -0
  14. package/dist/commands/__tests__/install.test.d.ts +2 -0
  15. package/dist/commands/__tests__/install.test.d.ts.map +1 -0
  16. package/dist/commands/__tests__/install.test.js +587 -0
  17. package/dist/commands/__tests__/install.test.js.map +1 -0
  18. package/dist/commands/__tests__/list.test.d.ts +2 -0
  19. package/dist/commands/__tests__/list.test.d.ts.map +1 -0
  20. package/dist/commands/__tests__/list.test.js +69 -0
  21. package/dist/commands/__tests__/list.test.js.map +1 -0
  22. package/dist/commands/__tests__/validate.test.d.ts +2 -0
  23. package/dist/commands/__tests__/validate.test.d.ts.map +1 -0
  24. package/dist/commands/__tests__/validate.test.js +858 -0
  25. package/dist/commands/__tests__/validate.test.js.map +1 -0
  26. package/dist/commands/add.d.ts +28 -0
  27. package/dist/commands/add.d.ts.map +1 -0
  28. package/dist/commands/add.js +65 -0
  29. package/dist/commands/add.js.map +1 -0
  30. package/dist/commands/install.d.ts +16 -0
  31. package/dist/commands/install.d.ts.map +1 -0
  32. package/dist/commands/install.js +125 -0
  33. package/dist/commands/install.js.map +1 -0
  34. package/dist/commands/list.d.ts +4 -0
  35. package/dist/commands/list.d.ts.map +1 -0
  36. package/dist/commands/list.js +41 -0
  37. package/dist/commands/list.js.map +1 -0
  38. package/dist/commands/validate.d.ts +26 -0
  39. package/dist/commands/validate.d.ts.map +1 -0
  40. package/dist/commands/validate.js +244 -0
  41. package/dist/commands/validate.js.map +1 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +10 -0
  45. package/dist/index.js.map +1 -0
  46. package/package.json +57 -0
@@ -0,0 +1,587 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { promises as fs } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ import { installCommand } from "../install.js";
6
+ import { SkillInstaller } from "@codemcp/agentskills-core";
7
+ /**
8
+ * Comprehensive test suite for install command
9
+ *
10
+ * Following TDD RED phase:
11
+ * - Write tests first to define the command interface and behavior
12
+ * - Tests define expected user experience before implementation
13
+ * - Clear test structure with arrange-act-assert
14
+ * - Mock SkillInstaller to avoid real downloads
15
+ * - Use real file system with temp directories
16
+ *
17
+ * Coverage:
18
+ * 1. Basic Installation (install skills, create directory, parallel install, lock file, success message)
19
+ * 2. Error Handling (no package.json, no agentskills field, empty agentskills, installation failures)
20
+ * 3. Configuration (custom skillsDirectory, default directory, create parent dirs)
21
+ * 4. Output (spinner, checkmarks, summary)
22
+ * 5. Options (custom cwd, default cwd)
23
+ */
24
+ describe("install command", () => {
25
+ let testDir;
26
+ let consoleLogSpy;
27
+ let consoleErrorSpy;
28
+ let processExitSpy;
29
+ let skillInstallerInstallSpy;
30
+ let skillInstallerGenerateLockFileSpy;
31
+ beforeEach(async () => {
32
+ // Create unique temp directory for each test
33
+ testDir = join(tmpdir(), `agentskills-test-${Date.now()}-${Math.random()}`);
34
+ await fs.mkdir(testDir, { recursive: true });
35
+ // Mock console and process.exit
36
+ consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => { });
37
+ consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => { });
38
+ processExitSpy = vi
39
+ .spyOn(process, "exit")
40
+ .mockImplementation((() => { }));
41
+ // Mock SkillInstaller methods
42
+ skillInstallerInstallSpy = vi.spyOn(SkillInstaller.prototype, "install");
43
+ skillInstallerGenerateLockFileSpy = vi.spyOn(SkillInstaller.prototype, "generateLockFile");
44
+ });
45
+ afterEach(async () => {
46
+ // Clean up temp directory
47
+ try {
48
+ await fs.rm(testDir, { recursive: true, force: true });
49
+ }
50
+ catch (error) {
51
+ // Ignore cleanup errors
52
+ }
53
+ // Restore mocks
54
+ consoleLogSpy.mockRestore();
55
+ consoleErrorSpy.mockRestore();
56
+ processExitSpy.mockRestore();
57
+ skillInstallerInstallSpy.mockRestore();
58
+ skillInstallerGenerateLockFileSpy.mockRestore();
59
+ });
60
+ // Helper function to create package.json with agentskills
61
+ async function createPackageJson(skills, config) {
62
+ const packageJson = {
63
+ name: "test-project",
64
+ version: "1.0.0",
65
+ agentskills: skills
66
+ };
67
+ if (config) {
68
+ packageJson.agentskillsConfig = config;
69
+ }
70
+ await fs.writeFile(join(testDir, "package.json"), JSON.stringify(packageJson, null, 2), "utf-8");
71
+ }
72
+ // Helper function to create successful install result
73
+ function createSuccessResult(name, spec) {
74
+ return {
75
+ success: true,
76
+ name,
77
+ spec,
78
+ resolvedVersion: "1.0.0",
79
+ integrity: "sha512-test",
80
+ installPath: join(testDir, ".agentskills/skills", name),
81
+ manifest: {
82
+ name,
83
+ description: "Test skill"
84
+ }
85
+ };
86
+ }
87
+ // Helper function to create failed install result
88
+ function createFailureResult(name, spec, message) {
89
+ return {
90
+ success: false,
91
+ name,
92
+ spec,
93
+ error: {
94
+ code: "INSTALL_FAILED",
95
+ message
96
+ }
97
+ };
98
+ }
99
+ describe("Basic Installation", () => {
100
+ it("should install skills from package.json", async () => {
101
+ // Arrange
102
+ await createPackageJson({
103
+ "skill-one": "github:user/skill-one",
104
+ "skill-two": "github:user/skill-two"
105
+ });
106
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
107
+ return createSuccessResult(name, spec);
108
+ });
109
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
110
+ // Act
111
+ await installCommand({ cwd: testDir });
112
+ // Assert
113
+ expect(skillInstallerInstallSpy).toHaveBeenCalledWith("skill-one", "github:user/skill-one");
114
+ expect(skillInstallerInstallSpy).toHaveBeenCalledWith("skill-two", "github:user/skill-two");
115
+ expect(processExitSpy).toHaveBeenCalledWith(0);
116
+ });
117
+ it("should create .agentskills/skills/ directory", async () => {
118
+ // Arrange
119
+ await createPackageJson({
120
+ "test-skill": "github:user/test-skill"
121
+ });
122
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
123
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
124
+ // Act
125
+ await installCommand({ cwd: testDir });
126
+ // Assert
127
+ const skillsDir = join(testDir, ".agentskills/skills");
128
+ const exists = await fs
129
+ .access(skillsDir)
130
+ .then(() => true)
131
+ .catch(() => false);
132
+ expect(exists).toBe(true);
133
+ });
134
+ it("should install multiple skills in parallel", async () => {
135
+ // Arrange
136
+ await createPackageJson({
137
+ "skill-one": "github:user/skill-one",
138
+ "skill-two": "github:user/skill-two",
139
+ "skill-three": "github:user/skill-three"
140
+ });
141
+ const installPromises = [];
142
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
143
+ const promise = new Promise((resolve) => {
144
+ setTimeout(() => resolve(createSuccessResult(name, spec)), 10);
145
+ });
146
+ installPromises.push(promise);
147
+ return promise;
148
+ });
149
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
150
+ // Act
151
+ const startTime = Date.now();
152
+ await installCommand({ cwd: testDir });
153
+ const duration = Date.now() - startTime;
154
+ // Assert - should complete in parallel (< 50ms total, not 30ms sequential)
155
+ expect(installPromises.length).toBe(3);
156
+ expect(duration).toBeLessThan(50); // If sequential, would take 30ms
157
+ expect(processExitSpy).toHaveBeenCalledWith(0);
158
+ });
159
+ it("should generate lock file after installation", async () => {
160
+ // Arrange
161
+ await createPackageJson({
162
+ "skill-one": "github:user/skill-one"
163
+ });
164
+ const result = createSuccessResult("skill-one", "github:user/skill-one");
165
+ skillInstallerInstallSpy.mockResolvedValue(result);
166
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
167
+ // Act
168
+ await installCommand({ cwd: testDir });
169
+ // Assert
170
+ expect(skillInstallerGenerateLockFileSpy).toHaveBeenCalledWith({
171
+ "skill-one": result
172
+ });
173
+ });
174
+ it("should display success message", async () => {
175
+ // Arrange
176
+ await createPackageJson({
177
+ "skill-one": "github:user/skill-one",
178
+ "skill-two": "github:user/skill-two"
179
+ });
180
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
181
+ return createSuccessResult(name, spec);
182
+ });
183
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
184
+ // Act
185
+ await installCommand({ cwd: testDir });
186
+ // Assert
187
+ const output = consoleLogSpy.mock.calls
188
+ .map((call) => call.join(" "))
189
+ .join("\n");
190
+ expect(output).toMatch(/installed.*2.*skills?/i);
191
+ expect(output).toMatch(/\.agentskills\/skills/i);
192
+ });
193
+ });
194
+ describe("Error Handling", () => {
195
+ it("should error when no package.json found", async () => {
196
+ // Arrange - no package.json created
197
+ // Act
198
+ await installCommand({ cwd: testDir });
199
+ // Assert
200
+ expect(consoleErrorSpy).toHaveBeenCalled();
201
+ const output = consoleErrorSpy.mock.calls
202
+ .map((call) => call.join(" "))
203
+ .join("\n");
204
+ expect(output).toMatch(/package\.json.*not found/i);
205
+ expect(processExitSpy).toHaveBeenCalledWith(1);
206
+ });
207
+ it("should warn and exit 0 when no agentskills field", async () => {
208
+ // Arrange
209
+ await fs.writeFile(join(testDir, "package.json"), JSON.stringify({ name: "test-project", version: "1.0.0" }, null, 2), "utf-8");
210
+ // Act
211
+ await installCommand({ cwd: testDir });
212
+ // Assert
213
+ expect(consoleLogSpy).toHaveBeenCalled();
214
+ const output = consoleLogSpy.mock.calls
215
+ .map((call) => call.join(" "))
216
+ .join("\n");
217
+ expect(output).toMatch(/no.*skills.*install|agentskills.*field.*empty/i);
218
+ expect(processExitSpy).toHaveBeenCalledWith(0);
219
+ });
220
+ it("should warn and exit 0 when empty agentskills object", async () => {
221
+ // Arrange
222
+ await createPackageJson({});
223
+ // Act
224
+ await installCommand({ cwd: testDir });
225
+ // Assert
226
+ expect(consoleLogSpy).toHaveBeenCalled();
227
+ const output = consoleLogSpy.mock.calls
228
+ .map((call) => call.join(" "))
229
+ .join("\n");
230
+ expect(output).toMatch(/no.*skills.*install|agentskills.*empty/i);
231
+ expect(processExitSpy).toHaveBeenCalledWith(0);
232
+ });
233
+ it("should show error for failed skill but continue installing others", async () => {
234
+ // Arrange
235
+ await createPackageJson({
236
+ "skill-one": "github:user/skill-one",
237
+ "skill-two": "github:user/invalid-skill",
238
+ "skill-three": "github:user/skill-three"
239
+ });
240
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
241
+ if (name === "skill-two") {
242
+ return createFailureResult(name, spec, "Package not found");
243
+ }
244
+ return createSuccessResult(name, spec);
245
+ });
246
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
247
+ // Act
248
+ await installCommand({ cwd: testDir });
249
+ // Assert
250
+ expect(skillInstallerInstallSpy).toHaveBeenCalledTimes(3);
251
+ expect(consoleErrorSpy).toHaveBeenCalled();
252
+ const errorOutput = consoleErrorSpy.mock.calls
253
+ .map((call) => call.join(" "))
254
+ .join("\n");
255
+ expect(errorOutput).toMatch(/skill-two.*failed/i);
256
+ expect(errorOutput).toMatch(/package not found/i);
257
+ const logOutput = consoleLogSpy.mock.calls
258
+ .map((call) => call.join(" "))
259
+ .join("\n");
260
+ expect(logOutput).toMatch(/2.*installed/i);
261
+ expect(logOutput).toMatch(/1.*failed/i);
262
+ });
263
+ it("should exit with code 1 when all skills fail to install", async () => {
264
+ // Arrange
265
+ await createPackageJson({
266
+ "skill-one": "github:user/invalid-one",
267
+ "skill-two": "github:user/invalid-two"
268
+ });
269
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
270
+ return createFailureResult(name, spec, "Network error");
271
+ });
272
+ // Act
273
+ await installCommand({ cwd: testDir });
274
+ // Assert
275
+ expect(consoleErrorSpy).toHaveBeenCalled();
276
+ const output = consoleErrorSpy.mock.calls
277
+ .map((call) => call.join(" "))
278
+ .join("\n");
279
+ expect(output).toMatch(/skill-one.*failed/i);
280
+ expect(output).toMatch(/skill-two.*failed/i);
281
+ expect(processExitSpy).toHaveBeenCalledWith(1);
282
+ });
283
+ it("should error when package.json is invalid JSON", async () => {
284
+ // Arrange
285
+ await fs.writeFile(join(testDir, "package.json"), "{ invalid json }", "utf-8");
286
+ // Act
287
+ await installCommand({ cwd: testDir });
288
+ // Assert
289
+ expect(consoleErrorSpy).toHaveBeenCalled();
290
+ const output = consoleErrorSpy.mock.calls
291
+ .map((call) => call.join(" "))
292
+ .join("\n");
293
+ expect(output).toMatch(/failed.*parse|invalid.*json/i);
294
+ expect(processExitSpy).toHaveBeenCalledWith(1);
295
+ });
296
+ it("should error when permission error creating directory", async () => {
297
+ // Arrange
298
+ await createPackageJson({
299
+ "test-skill": "github:user/test-skill"
300
+ });
301
+ // Create a file where the directory should be to cause EEXIST error
302
+ const skillsDir = join(testDir, ".agentskills");
303
+ await fs.mkdir(skillsDir, { recursive: true });
304
+ await fs.writeFile(join(skillsDir, "skills"), "blocking file", "utf-8");
305
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
306
+ // Act
307
+ await installCommand({ cwd: testDir });
308
+ // Assert
309
+ expect(consoleErrorSpy).toHaveBeenCalled();
310
+ const output = consoleErrorSpy.mock.calls
311
+ .map((call) => call.join(" "))
312
+ .join("\n");
313
+ expect(output).toMatch(/failed.*create.*directory|permission|error/i);
314
+ expect(processExitSpy).toHaveBeenCalledWith(1);
315
+ });
316
+ });
317
+ describe("Configuration", () => {
318
+ it("should use agentskillsConfig.skillsDirectory if specified", async () => {
319
+ // Arrange
320
+ await createPackageJson({
321
+ "test-skill": "github:user/test-skill"
322
+ }, {
323
+ skillsDirectory: "custom-skills-dir"
324
+ });
325
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
326
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
327
+ // Act
328
+ await installCommand({ cwd: testDir });
329
+ // Assert
330
+ // SkillInstaller should be created with custom directory
331
+ const customDir = join(testDir, "custom-skills-dir");
332
+ const exists = await fs
333
+ .access(customDir)
334
+ .then(() => true)
335
+ .catch(() => false);
336
+ expect(exists).toBe(true);
337
+ });
338
+ it("should default to .agentskills/skills/ if not specified", async () => {
339
+ // Arrange
340
+ await createPackageJson({
341
+ "test-skill": "github:user/test-skill"
342
+ });
343
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
344
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
345
+ // Act
346
+ await installCommand({ cwd: testDir });
347
+ // Assert
348
+ const defaultDir = join(testDir, ".agentskills/skills");
349
+ const exists = await fs
350
+ .access(defaultDir)
351
+ .then(() => true)
352
+ .catch(() => false);
353
+ expect(exists).toBe(true);
354
+ });
355
+ it("should create parent directories if needed", async () => {
356
+ // Arrange
357
+ await createPackageJson({
358
+ "test-skill": "github:user/test-skill"
359
+ }, {
360
+ skillsDirectory: "deeply/nested/skills/directory"
361
+ });
362
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
363
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
364
+ // Act
365
+ await installCommand({ cwd: testDir });
366
+ // Assert
367
+ const nestedDir = join(testDir, "deeply/nested/skills/directory");
368
+ const exists = await fs
369
+ .access(nestedDir)
370
+ .then(() => true)
371
+ .catch(() => false);
372
+ expect(exists).toBe(true);
373
+ });
374
+ });
375
+ describe("Output", () => {
376
+ it("should show spinner during installation", async () => {
377
+ // Arrange
378
+ await createPackageJson({
379
+ "test-skill": "github:user/test-skill"
380
+ });
381
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
382
+ // Simulate some delay
383
+ await new Promise((resolve) => setTimeout(resolve, 50));
384
+ return createSuccessResult(name, spec);
385
+ });
386
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
387
+ // Act
388
+ await installCommand({ cwd: testDir });
389
+ // Assert
390
+ const output = consoleLogSpy.mock.calls
391
+ .map((call) => call.join(" "))
392
+ .join("\n");
393
+ // Output should contain some indication of progress (spinner messages)
394
+ // The actual implementation will use ora for spinners
395
+ expect(output.length).toBeGreaterThan(0);
396
+ });
397
+ it("should show success checkmarks for each skill", async () => {
398
+ // Arrange
399
+ await createPackageJson({
400
+ "skill-one": "github:user/skill-one",
401
+ "skill-two": "github:user/skill-two"
402
+ });
403
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
404
+ return createSuccessResult(name, spec);
405
+ });
406
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
407
+ // Act
408
+ await installCommand({ cwd: testDir });
409
+ // Assert
410
+ const output = consoleLogSpy.mock.calls
411
+ .map((call) => call.join(" "))
412
+ .join("\n");
413
+ expect(output).toMatch(/✓.*skill-one/i);
414
+ expect(output).toMatch(/✓.*skill-two/i);
415
+ });
416
+ it("should show final summary with count and location", async () => {
417
+ // Arrange
418
+ await createPackageJson({
419
+ "skill-one": "github:user/skill-one",
420
+ "skill-two": "github:user/skill-two",
421
+ "skill-three": "github:user/skill-three"
422
+ });
423
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
424
+ return createSuccessResult(name, spec);
425
+ });
426
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
427
+ // Act
428
+ await installCommand({ cwd: testDir });
429
+ // Assert
430
+ const output = consoleLogSpy.mock.calls
431
+ .map((call) => call.join(" "))
432
+ .join("\n");
433
+ expect(output).toMatch(/3.*skills?.*installed/i);
434
+ expect(output).toMatch(/\.agentskills\/skills/i);
435
+ });
436
+ });
437
+ describe("Options", () => {
438
+ it("should use custom cwd option", async () => {
439
+ // Arrange
440
+ const customDir = join(testDir, "custom-project");
441
+ await fs.mkdir(customDir, { recursive: true });
442
+ await fs.writeFile(join(customDir, "package.json"), JSON.stringify({
443
+ name: "custom-project",
444
+ agentskills: {
445
+ "test-skill": "github:user/test-skill"
446
+ }
447
+ }, null, 2), "utf-8");
448
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
449
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
450
+ // Act
451
+ await installCommand({ cwd: customDir });
452
+ // Assert
453
+ const skillsDir = join(customDir, ".agentskills/skills");
454
+ const exists = await fs
455
+ .access(skillsDir)
456
+ .then(() => true)
457
+ .catch(() => false);
458
+ expect(exists).toBe(true);
459
+ expect(processExitSpy).toHaveBeenCalledWith(0);
460
+ });
461
+ it("should default cwd to process.cwd()", async () => {
462
+ // Arrange
463
+ const originalCwd = process.cwd();
464
+ // Change to test directory
465
+ process.chdir(testDir);
466
+ await createPackageJson({
467
+ "test-skill": "github:user/test-skill"
468
+ });
469
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
470
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
471
+ try {
472
+ // Act
473
+ await installCommand(); // No cwd option
474
+ // Assert
475
+ const skillsDir = join(testDir, ".agentskills/skills");
476
+ const exists = await fs
477
+ .access(skillsDir)
478
+ .then(() => true)
479
+ .catch(() => false);
480
+ expect(exists).toBe(true);
481
+ expect(processExitSpy).toHaveBeenCalledWith(0);
482
+ }
483
+ finally {
484
+ // Restore original cwd
485
+ process.chdir(originalCwd);
486
+ }
487
+ });
488
+ });
489
+ describe("Lock File Generation", () => {
490
+ it("should generate lock file only with successful installs", async () => {
491
+ // Arrange
492
+ await createPackageJson({
493
+ "skill-one": "github:user/skill-one",
494
+ "skill-two": "github:user/invalid-skill",
495
+ "skill-three": "github:user/skill-three"
496
+ });
497
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
498
+ if (name === "skill-two") {
499
+ return createFailureResult(name, spec, "Package not found");
500
+ }
501
+ return createSuccessResult(name, spec);
502
+ });
503
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
504
+ // Act
505
+ await installCommand({ cwd: testDir });
506
+ // Assert
507
+ expect(skillInstallerGenerateLockFileSpy).toHaveBeenCalledTimes(1);
508
+ const lockFileArg = skillInstallerGenerateLockFileSpy.mock
509
+ .calls[0][0];
510
+ expect(Object.keys(lockFileArg)).toHaveLength(2);
511
+ expect(lockFileArg["skill-one"]).toBeDefined();
512
+ expect(lockFileArg["skill-three"]).toBeDefined();
513
+ expect(lockFileArg["skill-two"]).toBeUndefined();
514
+ });
515
+ it("should not generate lock file when all installs fail", async () => {
516
+ // Arrange
517
+ await createPackageJson({
518
+ "skill-one": "github:user/invalid-one",
519
+ "skill-two": "github:user/invalid-two"
520
+ });
521
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
522
+ return createFailureResult(name, spec, "Network error");
523
+ });
524
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
525
+ // Act
526
+ await installCommand({ cwd: testDir });
527
+ // Assert
528
+ expect(skillInstallerGenerateLockFileSpy).not.toHaveBeenCalled();
529
+ expect(processExitSpy).toHaveBeenCalledWith(1);
530
+ });
531
+ });
532
+ describe("Edge Cases", () => {
533
+ it("should handle skills with special characters in names", async () => {
534
+ // Arrange
535
+ await createPackageJson({
536
+ "skill-with-dashes": "github:user/skill-with-dashes",
537
+ "@scoped/skill": "github:org/scoped-skill"
538
+ });
539
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
540
+ return createSuccessResult(name, spec);
541
+ });
542
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
543
+ // Act
544
+ await installCommand({ cwd: testDir });
545
+ // Assert
546
+ expect(skillInstallerInstallSpy).toHaveBeenCalledWith("skill-with-dashes", "github:user/skill-with-dashes");
547
+ expect(skillInstallerInstallSpy).toHaveBeenCalledWith("@scoped/skill", "github:org/scoped-skill");
548
+ expect(processExitSpy).toHaveBeenCalledWith(0);
549
+ });
550
+ it("should handle large number of skills", async () => {
551
+ // Arrange
552
+ const skills = {};
553
+ for (let i = 0; i < 50; i++) {
554
+ skills[`skill-${i}`] = `github:user/skill-${i}`;
555
+ }
556
+ await createPackageJson(skills);
557
+ skillInstallerInstallSpy.mockImplementation(async (name, spec) => {
558
+ return createSuccessResult(name, spec);
559
+ });
560
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
561
+ // Act
562
+ await installCommand({ cwd: testDir });
563
+ // Assert
564
+ expect(skillInstallerInstallSpy).toHaveBeenCalledTimes(50);
565
+ const output = consoleLogSpy.mock.calls
566
+ .map((call) => call.join(" "))
567
+ .join("\n");
568
+ expect(output).toMatch(/50.*skills?.*installed/i);
569
+ expect(processExitSpy).toHaveBeenCalledWith(0);
570
+ });
571
+ it("should handle installation with no output captured", async () => {
572
+ // Arrange
573
+ await createPackageJson({
574
+ "test-skill": "github:user/test-skill"
575
+ });
576
+ skillInstallerInstallSpy.mockResolvedValue(createSuccessResult("test-skill", "github:user/test-skill"));
577
+ skillInstallerGenerateLockFileSpy.mockResolvedValue(undefined);
578
+ // Remove console spies to ensure command works without them
579
+ consoleLogSpy.mockRestore();
580
+ consoleErrorSpy.mockRestore();
581
+ // Act & Assert - should not throw
582
+ await installCommand({ cwd: testDir });
583
+ expect(processExitSpy).toHaveBeenCalledWith(0);
584
+ });
585
+ });
586
+ });
587
+ //# sourceMappingURL=install.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/install.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/list.test.ts"],"names":[],"mappings":""}