@codemcp/agentskills-core 0.0.4

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 (50) hide show
  1. package/LICENSE +19 -0
  2. package/dist/__tests__/package-config.test.d.ts +2 -0
  3. package/dist/__tests__/package-config.test.d.ts.map +1 -0
  4. package/dist/__tests__/package-config.test.js +251 -0
  5. package/dist/__tests__/package-config.test.js.map +1 -0
  6. package/dist/__tests__/parser.test.d.ts +2 -0
  7. package/dist/__tests__/parser.test.d.ts.map +1 -0
  8. package/dist/__tests__/parser.test.js +613 -0
  9. package/dist/__tests__/parser.test.js.map +1 -0
  10. package/dist/__tests__/registry.test.d.ts +2 -0
  11. package/dist/__tests__/registry.test.d.ts.map +1 -0
  12. package/dist/__tests__/registry.test.js +415 -0
  13. package/dist/__tests__/registry.test.js.map +1 -0
  14. package/dist/__tests__/skill-installer.test.d.ts +2 -0
  15. package/dist/__tests__/skill-installer.test.d.ts.map +1 -0
  16. package/dist/__tests__/skill-installer.test.js +229 -0
  17. package/dist/__tests__/skill-installer.test.js.map +1 -0
  18. package/dist/__tests__/validator.test.d.ts +2 -0
  19. package/dist/__tests__/validator.test.d.ts.map +1 -0
  20. package/dist/__tests__/validator.test.js +284 -0
  21. package/dist/__tests__/validator.test.js.map +1 -0
  22. package/dist/index.d.ts +7 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +6 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/installer.d.ts +89 -0
  27. package/dist/installer.d.ts.map +1 -0
  28. package/dist/installer.js +469 -0
  29. package/dist/installer.js.map +1 -0
  30. package/dist/package-config.d.ts +52 -0
  31. package/dist/package-config.d.ts.map +1 -0
  32. package/dist/package-config.js +267 -0
  33. package/dist/package-config.js.map +1 -0
  34. package/dist/parser.d.ts +59 -0
  35. package/dist/parser.d.ts.map +1 -0
  36. package/dist/parser.js +154 -0
  37. package/dist/parser.js.map +1 -0
  38. package/dist/registry.d.ts +72 -0
  39. package/dist/registry.d.ts.map +1 -0
  40. package/dist/registry.js +180 -0
  41. package/dist/registry.js.map +1 -0
  42. package/dist/types.d.ts +202 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +8 -0
  45. package/dist/types.js.map +1 -0
  46. package/dist/validator.d.ts +27 -0
  47. package/dist/validator.d.ts.map +1 -0
  48. package/dist/validator.js +165 -0
  49. package/dist/validator.js.map +1 -0
  50. package/package.json +56 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * SkillInstaller Component
3
+ *
4
+ * Responsibility: Install Agent Skills from various sources (GitHub, Git URLs,
5
+ * local directories, tarballs, npm packages).
6
+ *
7
+ * Uses pacote library for downloading and extracting packages, supports caching,
8
+ * generates lock files for reproducible installations.
9
+ */
10
+ import type { InstallResult, InstallAllResult, SkillManifest, SkillLockFile } from "./types.js";
11
+ /**
12
+ * SkillInstaller class for installing Agent Skills from various sources
13
+ */
14
+ export declare class SkillInstaller {
15
+ private readonly skillsDir;
16
+ private readonly cacheDir?;
17
+ /**
18
+ * Create a new SkillInstaller instance
19
+ *
20
+ * @param skillsDir - Directory where skills will be installed
21
+ * @param cacheDir - Optional cache directory for downloads
22
+ * @throws Error if skillsDir is empty
23
+ */
24
+ constructor(skillsDir: string, cacheDir?: string);
25
+ /**
26
+ * Install a skill from a spec (GitHub, Git URL, local path, tarball, npm)
27
+ *
28
+ * @param name - Name for the installed skill (directory name)
29
+ * @param spec - Package spec (e.g., "github:user/repo#tag", "file:./path", "https://...")
30
+ * @returns InstallResult with success/failure information
31
+ */
32
+ install(name: string, spec: string): Promise<InstallResult>;
33
+ /**
34
+ * Install multiple skills in parallel
35
+ *
36
+ * @param skills - Record of skill names to package specs
37
+ * @returns InstallAllResult with success/failure information
38
+ */
39
+ installAll(skills: Record<string, string>): Promise<InstallAllResult>;
40
+ /**
41
+ * Generate a lock file from installation results
42
+ *
43
+ * @param installed - Record of successfully installed skills
44
+ */
45
+ generateLockFile(installed: Record<string, InstallResult>): Promise<void>;
46
+ /**
47
+ * Read the lock file
48
+ *
49
+ * @returns SkillLockFile or null if file doesn't exist or is invalid
50
+ */
51
+ readLockFile(): Promise<SkillLockFile | null>;
52
+ /**
53
+ * Get manifest without installing (dry-run)
54
+ *
55
+ * @param spec - Package spec
56
+ * @returns SkillManifest
57
+ * @throws Error if spec is invalid or SKILL.md is missing
58
+ */
59
+ getManifest(spec: string): Promise<SkillManifest>;
60
+ /**
61
+ * Copy local directory to install path
62
+ */
63
+ private copyLocalDirectory;
64
+ /**
65
+ * Recursively copy directory, excluding .agentskills and node_modules
66
+ */
67
+ private copyDir;
68
+ /**
69
+ * Extract manifest from installed package
70
+ */
71
+ private extractManifest;
72
+ /**
73
+ * Extract version from spec or metadata
74
+ */
75
+ private extractVersion;
76
+ /**
77
+ * Validate if spec is in a supported format
78
+ */
79
+ private isValidSpec;
80
+ /**
81
+ * Create a failure result
82
+ */
83
+ private createFailure;
84
+ /**
85
+ * Handle installation errors and map to appropriate error codes
86
+ */
87
+ private handleInstallError;
88
+ }
89
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,aAAa,EAEd,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC;;;;;;OAMG;gBACS,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAQhD;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmIjE;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2B3E;;;;OAIG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC;IAyBhB;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAYnD;;;;;;OAMG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkDvD;;OAEG;YACW,kBAAkB;IAoChC;;OAEG;YACW,OAAO;IAyBrB;;OAEG;YACW,eAAe;IA4C7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoCnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CA8F3B"}
@@ -0,0 +1,469 @@
1
+ /**
2
+ * SkillInstaller Component
3
+ *
4
+ * Responsibility: Install Agent Skills from various sources (GitHub, Git URLs,
5
+ * local directories, tarballs, npm packages).
6
+ *
7
+ * Uses pacote library for downloading and extracting packages, supports caching,
8
+ * generates lock files for reproducible installations.
9
+ */
10
+ import { promises as fs } from "fs";
11
+ import { join, dirname, resolve } from "path";
12
+ import * as pacote from "pacote";
13
+ import { parseSkillContent } from "./parser.js";
14
+ /**
15
+ * SkillInstaller class for installing Agent Skills from various sources
16
+ */
17
+ export class SkillInstaller {
18
+ skillsDir;
19
+ cacheDir;
20
+ /**
21
+ * Create a new SkillInstaller instance
22
+ *
23
+ * @param skillsDir - Directory where skills will be installed
24
+ * @param cacheDir - Optional cache directory for downloads
25
+ * @throws Error if skillsDir is empty
26
+ */
27
+ constructor(skillsDir, cacheDir) {
28
+ if (!skillsDir || skillsDir.trim().length === 0) {
29
+ throw new Error("Skills directory is required");
30
+ }
31
+ this.skillsDir = skillsDir;
32
+ this.cacheDir = cacheDir;
33
+ }
34
+ /**
35
+ * Install a skill from a spec (GitHub, Git URL, local path, tarball, npm)
36
+ *
37
+ * @param name - Name for the installed skill (directory name)
38
+ * @param spec - Package spec (e.g., "github:user/repo#tag", "file:./path", "https://...")
39
+ * @returns InstallResult with success/failure information
40
+ */
41
+ async install(name, spec) {
42
+ // Validate inputs
43
+ if (!name || name.trim().length === 0) {
44
+ throw new Error("Skill name is required");
45
+ }
46
+ if (!spec || spec.trim().length === 0) {
47
+ return this.createFailure(name, spec, "INVALID_SPEC", "Package spec is required");
48
+ }
49
+ // Validate spec format
50
+ if (!this.isValidSpec(spec)) {
51
+ return this.createFailure(name, spec, "INVALID_SPEC", "invalid package spec format");
52
+ }
53
+ const installPath = join(this.skillsDir, name);
54
+ try {
55
+ // Clean existing directory if it exists
56
+ try {
57
+ await fs.rm(installPath, { recursive: true, force: true });
58
+ }
59
+ catch {
60
+ // Ignore if directory doesn't exist
61
+ }
62
+ // Ensure parent directory exists
63
+ await fs.mkdir(this.skillsDir, { recursive: true });
64
+ // Extract package using pacote
65
+ const opts = {};
66
+ if (this.cacheDir) {
67
+ opts.cache = this.cacheDir;
68
+ }
69
+ // Handle local directory differently - use direct copy instead of pacote
70
+ if (spec.startsWith("file:")) {
71
+ await this.copyLocalDirectory(spec, installPath);
72
+ }
73
+ else {
74
+ // Use pacote.extract to download and extract the package
75
+ await pacote.extract(spec, installPath, opts);
76
+ }
77
+ // Verify SKILL.md exists
78
+ const skillMdPath = join(installPath, "SKILL.md");
79
+ try {
80
+ await fs.access(skillMdPath);
81
+ }
82
+ catch {
83
+ await fs.rm(installPath, { recursive: true, force: true });
84
+ return this.createFailure(name, spec, "MISSING_SKILL_MD", "SKILL.md file not found in package");
85
+ }
86
+ // Extract manifest from SKILL.md
87
+ const manifest = await this.extractManifest(installPath);
88
+ if (!manifest) {
89
+ await fs.rm(installPath, { recursive: true, force: true });
90
+ return this.createFailure(name, spec, "INVALID_SKILL_FORMAT", "Failed to extract valid skill metadata from SKILL.md");
91
+ }
92
+ // Get package metadata for integrity and version
93
+ let resolvedVersion;
94
+ let integrity;
95
+ if (spec.startsWith("file:")) {
96
+ // For local files, use a hash of the path or timestamp
97
+ resolvedVersion = "local";
98
+ integrity = `file:${installPath}`;
99
+ // Try to get version from package.json
100
+ try {
101
+ const packageJsonPath = join(installPath, "package.json");
102
+ const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
103
+ const packageJson = JSON.parse(packageJsonContent);
104
+ if (packageJson.version) {
105
+ resolvedVersion = packageJson.version;
106
+ }
107
+ }
108
+ catch {
109
+ // package.json is optional for local files
110
+ }
111
+ }
112
+ else {
113
+ const metadata = await pacote.manifest(spec, opts);
114
+ resolvedVersion = this.extractVersion(spec, metadata);
115
+ integrity = metadata._integrity || metadata.dist?.integrity || "";
116
+ }
117
+ return {
118
+ success: true,
119
+ name,
120
+ spec,
121
+ resolvedVersion,
122
+ integrity,
123
+ installPath,
124
+ manifest
125
+ };
126
+ }
127
+ catch (error) {
128
+ // Clean up on error
129
+ try {
130
+ await fs.rm(installPath, { recursive: true, force: true });
131
+ }
132
+ catch {
133
+ // Ignore cleanup errors
134
+ }
135
+ return this.handleInstallError(name, spec, error);
136
+ }
137
+ }
138
+ /**
139
+ * Install multiple skills in parallel
140
+ *
141
+ * @param skills - Record of skill names to package specs
142
+ * @returns InstallAllResult with success/failure information
143
+ */
144
+ async installAll(skills) {
145
+ const results = {};
146
+ const installed = new Set();
147
+ const failed = new Set();
148
+ // Install all skills in parallel
149
+ const installPromises = Object.entries(skills).map(async ([name, spec]) => {
150
+ const result = await this.install(name, spec);
151
+ results[name] = result;
152
+ if (result.success) {
153
+ installed.add(name);
154
+ }
155
+ else {
156
+ failed.add(name);
157
+ }
158
+ });
159
+ await Promise.all(installPromises);
160
+ return {
161
+ success: failed.size === 0,
162
+ installed,
163
+ failed,
164
+ results
165
+ };
166
+ }
167
+ /**
168
+ * Generate a lock file from installation results
169
+ *
170
+ * @param installed - Record of successfully installed skills
171
+ */
172
+ async generateLockFile(installed) {
173
+ const lockFile = {
174
+ version: "1.0",
175
+ generated: new Date().toISOString(),
176
+ skills: {}
177
+ };
178
+ for (const [name, result] of Object.entries(installed)) {
179
+ if (result.success) {
180
+ lockFile.skills[name] = {
181
+ spec: result.spec,
182
+ resolvedVersion: result.resolvedVersion,
183
+ integrity: result.integrity
184
+ };
185
+ }
186
+ }
187
+ const lockFilePath = join(dirname(this.skillsDir), "skills-lock.json");
188
+ await fs.writeFile(lockFilePath, JSON.stringify(lockFile, null, 2), "utf-8");
189
+ }
190
+ /**
191
+ * Read the lock file
192
+ *
193
+ * @returns SkillLockFile or null if file doesn't exist or is invalid
194
+ */
195
+ async readLockFile() {
196
+ const lockFilePath = join(dirname(this.skillsDir), "skills-lock.json");
197
+ try {
198
+ const content = await fs.readFile(lockFilePath, "utf-8");
199
+ const lockFile = JSON.parse(content);
200
+ return lockFile;
201
+ }
202
+ catch {
203
+ return null;
204
+ }
205
+ }
206
+ /**
207
+ * Get manifest without installing (dry-run)
208
+ *
209
+ * @param spec - Package spec
210
+ * @returns SkillManifest
211
+ * @throws Error if spec is invalid or SKILL.md is missing
212
+ */
213
+ async getManifest(spec) {
214
+ if (!this.isValidSpec(spec)) {
215
+ throw new Error("Invalid package spec format");
216
+ }
217
+ // Create a temporary directory for extraction
218
+ const tempDir = join(this.cacheDir || this.skillsDir, `.temp-${Date.now()}`);
219
+ try {
220
+ await fs.mkdir(tempDir, { recursive: true });
221
+ // Extract to temp directory
222
+ if (spec.startsWith("file:")) {
223
+ await this.copyLocalDirectory(spec, tempDir);
224
+ }
225
+ else {
226
+ const opts = {};
227
+ if (this.cacheDir) {
228
+ opts.cache = this.cacheDir;
229
+ }
230
+ await pacote.extract(spec, tempDir, opts);
231
+ }
232
+ // Verify SKILL.md exists
233
+ const skillMdPath = join(tempDir, "SKILL.md");
234
+ try {
235
+ await fs.access(skillMdPath);
236
+ }
237
+ catch {
238
+ throw new Error("SKILL.md file not found in package");
239
+ }
240
+ // Extract and return manifest
241
+ const manifest = await this.extractManifest(tempDir);
242
+ if (!manifest) {
243
+ throw new Error("Failed to extract valid skill metadata from SKILL.md");
244
+ }
245
+ return manifest;
246
+ }
247
+ finally {
248
+ // Clean up temp directory
249
+ try {
250
+ await fs.rm(tempDir, { recursive: true, force: true });
251
+ }
252
+ catch {
253
+ // Ignore cleanup errors
254
+ }
255
+ }
256
+ }
257
+ /**
258
+ * Copy local directory to install path
259
+ */
260
+ async copyLocalDirectory(spec, installPath) {
261
+ // Remove "file:" prefix and resolve path
262
+ let sourcePath = spec.substring(5); // Remove "file:"
263
+ // Handle file:// protocol
264
+ if (sourcePath.startsWith("//")) {
265
+ sourcePath = sourcePath.substring(2);
266
+ }
267
+ // Expand tilde to home directory
268
+ if (sourcePath.startsWith("~/")) {
269
+ const os = await import("os");
270
+ sourcePath = join(os.homedir(), sourcePath.substring(2));
271
+ }
272
+ // Resolve relative paths
273
+ sourcePath = resolve(sourcePath);
274
+ // Verify source exists
275
+ try {
276
+ const stat = await fs.stat(sourcePath);
277
+ if (!stat.isDirectory()) {
278
+ throw new Error(`Source is not a directory: ${sourcePath}`);
279
+ }
280
+ }
281
+ catch {
282
+ throw new Error(`Local path not found: ${sourcePath}`);
283
+ }
284
+ // Copy directory recursively
285
+ await fs.mkdir(installPath, { recursive: true });
286
+ await this.copyDir(sourcePath, installPath);
287
+ }
288
+ /**
289
+ * Recursively copy directory, excluding .agentskills and node_modules
290
+ */
291
+ async copyDir(src, dest) {
292
+ const entries = await fs.readdir(src, { withFileTypes: true });
293
+ for (const entry of entries) {
294
+ // Skip .agentskills, node_modules, and hidden directories
295
+ if (entry.name === ".agentskills" ||
296
+ entry.name === "node_modules" ||
297
+ entry.name.startsWith(".")) {
298
+ continue;
299
+ }
300
+ const srcPath = join(src, entry.name);
301
+ const destPath = join(dest, entry.name);
302
+ if (entry.isDirectory()) {
303
+ await fs.mkdir(destPath, { recursive: true });
304
+ await this.copyDir(srcPath, destPath);
305
+ }
306
+ else {
307
+ await fs.copyFile(srcPath, destPath);
308
+ }
309
+ }
310
+ }
311
+ /**
312
+ * Extract manifest from installed package
313
+ */
314
+ async extractManifest(installPath) {
315
+ try {
316
+ // Read SKILL.md
317
+ const skillMdPath = join(installPath, "SKILL.md");
318
+ const skillContent = await fs.readFile(skillMdPath, "utf-8");
319
+ // Parse SKILL.md
320
+ const parseResult = parseSkillContent(skillContent);
321
+ if (!parseResult.success) {
322
+ return null;
323
+ }
324
+ const { metadata } = parseResult.skill;
325
+ // Try to read package.json for additional metadata
326
+ let packageName;
327
+ let version;
328
+ try {
329
+ const packageJsonPath = join(installPath, "package.json");
330
+ const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
331
+ const packageJson = JSON.parse(packageJsonContent);
332
+ packageName = packageJson.name;
333
+ version = packageJson.version;
334
+ }
335
+ catch {
336
+ // package.json is optional
337
+ }
338
+ return {
339
+ name: metadata.name,
340
+ description: metadata.description,
341
+ license: metadata.license,
342
+ compatibility: metadata.compatibility,
343
+ packageName,
344
+ version,
345
+ metadata: metadata.metadata
346
+ };
347
+ }
348
+ catch {
349
+ return null;
350
+ }
351
+ }
352
+ /**
353
+ * Extract version from spec or metadata
354
+ */
355
+ extractVersion(spec, metadata) {
356
+ // Try to extract from spec first
357
+ const hashIndex = spec.indexOf("#");
358
+ if (hashIndex !== -1) {
359
+ return spec.substring(hashIndex + 1);
360
+ }
361
+ // Try to extract from metadata
362
+ if (typeof metadata.version === "string") {
363
+ return metadata.version;
364
+ }
365
+ if (typeof metadata.gitHead === "string") {
366
+ return metadata.gitHead.substring(0, 7);
367
+ }
368
+ // Default to "latest" or branch name
369
+ return typeof metadata._resolved === "string"
370
+ ? metadata._resolved
371
+ : "latest";
372
+ }
373
+ /**
374
+ * Validate if spec is in a supported format
375
+ */
376
+ isValidSpec(spec) {
377
+ if (!spec || spec.trim().length === 0) {
378
+ return false;
379
+ }
380
+ // Check for valid formats
381
+ const validPrefixes = [
382
+ "github:",
383
+ "git+https://",
384
+ "git+ssh://",
385
+ "file:",
386
+ "http://",
387
+ "https://",
388
+ "@" // npm scoped packages
389
+ ];
390
+ // Check if it starts with any valid prefix
391
+ const hasValidPrefix = validPrefixes.some((prefix) => spec.startsWith(prefix));
392
+ // Also allow npm package names (with or without version)
393
+ // Must start with @scope/ or be a valid package name with optional @version
394
+ // Npm packages cannot contain "format" or similar non-package words
395
+ const isScopedPackage = /^@[a-z0-9-]+\/[a-z0-9-]+(@.+)?$/.test(spec);
396
+ // Valid npm package: no spaces, starts with letter or @, contains only valid chars
397
+ const isNpmPackage = /^[a-z][a-z0-9-]*(@[\w.-~]+)?$/.test(spec);
398
+ // Reject obvious non-packages (containing spaces, invalid keywords, etc.)
399
+ if (spec.includes(" ") || spec.includes("invalid")) {
400
+ return false;
401
+ }
402
+ return hasValidPrefix || isScopedPackage || isNpmPackage;
403
+ }
404
+ /**
405
+ * Create a failure result
406
+ */
407
+ createFailure(name, spec, code, message) {
408
+ return {
409
+ success: false,
410
+ name,
411
+ spec,
412
+ error: {
413
+ code,
414
+ message
415
+ }
416
+ };
417
+ }
418
+ /**
419
+ * Handle installation errors and map to appropriate error codes
420
+ */
421
+ handleInstallError(name, spec, error) {
422
+ const err = error;
423
+ const message = err.message || "Unknown error";
424
+ // Network errors
425
+ if (err.code === "ENOTFOUND" ||
426
+ err.code === "ETIMEDOUT" ||
427
+ err.code === "ECONNREFUSED" ||
428
+ message.toLowerCase().includes("network") ||
429
+ message.includes("getaddrinfo")) {
430
+ return this.createFailure(name, spec, "NETWORK_ERROR", message);
431
+ }
432
+ // 404 errors
433
+ if (err.statusCode === 404 || message.includes("404")) {
434
+ return this.createFailure(name, spec, "INSTALL_FAILED", "Package not found (404)");
435
+ }
436
+ // Repository/reference not found errors
437
+ if (message.toLowerCase().includes("not found") ||
438
+ message.includes("does not exist") ||
439
+ message.includes("Could not find") ||
440
+ message.includes("Repository not found") ||
441
+ message.includes("unknown revision") ||
442
+ message.includes("couldn't find remote ref")) {
443
+ // Check if it's a reference error
444
+ if (message.includes("reference") ||
445
+ message.includes("ref") ||
446
+ message.includes("revision") ||
447
+ message.includes("branch") ||
448
+ message.includes("tag")) {
449
+ return this.createFailure(name, spec, "INSTALL_FAILED", "Git reference not found");
450
+ }
451
+ return this.createFailure(name, spec, "INSTALL_FAILED", "Repository or package not found");
452
+ }
453
+ // Git errors
454
+ if (message.includes("git error") || message.includes("fatal:")) {
455
+ return this.createFailure(name, spec, "INSTALL_FAILED", "Git error: repository or reference not found");
456
+ }
457
+ // Permission errors
458
+ if (err.code === "EACCES" || err.code === "EPERM") {
459
+ return this.createFailure(name, spec, "PERMISSION_ERROR", "Permission denied - permission error");
460
+ }
461
+ // File not found for local paths
462
+ if (err.code === "ENOENT" && spec.startsWith("file:")) {
463
+ return this.createFailure(name, spec, "INSTALL_FAILED", "Local path not found");
464
+ }
465
+ // Generic install failure
466
+ return this.createFailure(name, spec, "INSTALL_FAILED", message);
467
+ }
468
+ }
469
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { PackageConfig } from "./types.js";
2
+ /**
3
+ * PackageConfigManager - Manages package.json configuration for agent skills
4
+ *
5
+ * Responsibilities:
6
+ * - Read package.json from a directory
7
+ * - Parse `agentskills` field (skill dependencies)
8
+ * - Parse `agentskillsConfig` field (configuration settings)
9
+ * - Provide defaults when package.json doesn't exist
10
+ * - Provide defaults when fields are missing
11
+ * - Validate configuration structure
12
+ * - Save/update skills in package.json
13
+ */
14
+ export declare class PackageConfigManager {
15
+ private projectRoot;
16
+ private packageJsonPath;
17
+ constructor(projectRoot: string);
18
+ /**
19
+ * Get default configuration with empty skills and standard defaults
20
+ */
21
+ getDefaultConfig(): PackageConfig;
22
+ /**
23
+ * Load configuration from package.json
24
+ * Returns defaults if package.json doesn't exist
25
+ */
26
+ loadConfig(): Promise<PackageConfig>;
27
+ /**
28
+ * Validate and extract skills from package.json
29
+ */
30
+ private validateAndExtractSkills;
31
+ /**
32
+ * Validate and extract config from package.json
33
+ */
34
+ private validateAndExtractConfig;
35
+ /**
36
+ * Save skills to package.json
37
+ * Creates package.json if it doesn't exist
38
+ * Preserves other fields
39
+ */
40
+ saveSkills(skills: Record<string, string>): Promise<void>;
41
+ /**
42
+ * Add a single skill to package.json
43
+ * Updates existing skill if name already exists
44
+ */
45
+ addSkill(name: string, spec: string): Promise<void>;
46
+ /**
47
+ * Remove a skill from package.json
48
+ * Does not error if skill doesn't exist or file doesn't exist
49
+ */
50
+ removeSkill(name: string): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=package-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-config.d.ts","sourceRoot":"","sources":["../src/package-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;gBAEpB,WAAW,EAAE,MAAM;IAQ/B;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAejC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IA+C1C;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkFhC;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC/D;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzD;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA+B/C"}