@agpm/core 0.0.2 → 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.
package/dist/discovery.js CHANGED
@@ -6,6 +6,7 @@ import { parse as parseYaml } from "yaml";
6
6
  // ============================================================================
7
7
  /**
8
8
  * Detect the format of a repository.
9
+ * Checks in order of specificity: marketplace > plugin > simple
9
10
  */
10
11
  export async function detectFormat(repoPath) {
11
12
  // Check for Claude marketplace format (.claude-plugin/marketplace.json)
@@ -16,6 +17,14 @@ export async function detectFormat(repoPath) {
16
17
  catch {
17
18
  // Not claude-marketplace format
18
19
  }
20
+ // Check for Claude plugin format (.claude-plugin/plugin.json)
21
+ try {
22
+ await stat(join(repoPath, ".claude-plugin", "plugin.json"));
23
+ return "claude-plugin";
24
+ }
25
+ catch {
26
+ // Not claude-plugin format
27
+ }
19
28
  // Check for simple format (skills/ directory)
20
29
  try {
21
30
  const skillsStat = await stat(join(repoPath, "skills"));
@@ -28,18 +37,93 @@ export async function detectFormat(repoPath) {
28
37
  }
29
38
  return "unknown";
30
39
  }
40
+ /**
41
+ * Discover skills from explicit paths (used by marketplace when skills array is defined).
42
+ */
43
+ async function discoverSkillsFromPaths(repoPath, skillPaths, seenPaths, fallbackDescription) {
44
+ const skills = [];
45
+ for (const skillPath of skillPaths) {
46
+ const normalizedPath = skillPath.replace(/^\.\//, "");
47
+ if (seenPaths.has(normalizedPath))
48
+ continue;
49
+ seenPaths.add(normalizedPath);
50
+ const absolutePath = join(repoPath, normalizedPath);
51
+ const metadata = await parseSkillMd(absolutePath);
52
+ skills.push({
53
+ name: metadata?.name ?? basename(normalizedPath),
54
+ description: metadata?.description ?? fallbackDescription,
55
+ path: normalizedPath,
56
+ absolutePath,
57
+ metadata: metadata,
58
+ });
59
+ }
60
+ return skills;
61
+ }
62
+ /**
63
+ * Discover all skills within a directory (used by plugin.json and marketplace fallback).
64
+ */
65
+ async function discoverSkillsFromDirectory(repoPath, skillsDir, seenPaths, fallbackDescription) {
66
+ const skills = [];
67
+ try {
68
+ const entries = await readdir(skillsDir, { withFileTypes: true });
69
+ for (const entry of entries) {
70
+ if (!entry.isDirectory() || entry.name.startsWith("."))
71
+ continue;
72
+ const skillPath = join(skillsDir, entry.name);
73
+ const relativePath = relative(repoPath, skillPath);
74
+ if (seenPaths.has(relativePath))
75
+ continue;
76
+ seenPaths.add(relativePath);
77
+ const metadata = await parseSkillMd(skillPath);
78
+ skills.push({
79
+ name: metadata?.name ?? entry.name,
80
+ description: metadata?.description ?? fallbackDescription,
81
+ path: relativePath,
82
+ absolutePath: skillPath,
83
+ metadata: metadata,
84
+ });
85
+ }
86
+ }
87
+ catch {
88
+ // Directory doesn't exist or can't be read
89
+ }
90
+ return skills;
91
+ }
92
+ /**
93
+ * Convert discovered skills to artifacts with format tag.
94
+ */
95
+ function skillsToArtifacts(skills, format) {
96
+ return skills.map((skill) => ({
97
+ name: skill.name,
98
+ description: skill.description,
99
+ type: "skill",
100
+ path: skill.path,
101
+ absolutePath: skill.absolutePath,
102
+ format,
103
+ metadata: skill.metadata,
104
+ }));
105
+ }
31
106
  // ============================================================================
32
107
  // Discovery
33
108
  // ============================================================================
34
109
  /**
35
- * Discover all artifacts in a repository.
110
+ * Discover all artifacts and collections in a repository.
111
+ *
112
+ * @param repoPath - Path to the repository
113
+ * @param subdir - Optional subdirectory to search within
114
+ * @param explicitFormat - If provided, use this format instead of auto-detecting
36
115
  */
37
- export async function discoverArtifacts(repoPath, subpath) {
38
- const searchPath = subpath ? join(repoPath, subpath) : repoPath;
39
- const format = await detectFormat(searchPath);
116
+ export async function discover(repoPath, subdir, explicitFormat) {
117
+ const searchPath = subdir ? join(repoPath, subdir) : repoPath;
118
+ // Use explicit format if provided and not "auto", otherwise detect
119
+ const format = (explicitFormat && explicitFormat !== "auto")
120
+ ? explicitFormat
121
+ : await detectFormat(searchPath);
40
122
  switch (format) {
41
123
  case "claude-marketplace":
42
124
  return discoverClaudeMarketplace(searchPath);
125
+ case "claude-plugin":
126
+ return discoverClaudePlugin(searchPath);
43
127
  case "simple":
44
128
  return discoverSimpleFormat(searchPath);
45
129
  default:
@@ -48,82 +132,113 @@ export async function discoverArtifacts(repoPath, subpath) {
48
132
  }
49
133
  }
50
134
  /**
51
- * Discover artifacts from Claude plugin manifest.
52
- *
53
- * Claude marketplace format:
54
- * - .claude-marketplace/marketplace.json contains plugins array
55
- * - Each plugin has `source` pointing to a directory
56
- * - That directory contains a `skills/` subdirectory with skill folders
57
- * - Each skill folder has SKILL.md
135
+ * @deprecated Use `discover` instead. This is kept for backwards compatibility.
136
+ */
137
+ export async function discoverArtifacts(repoPath, subdir, explicitFormat) {
138
+ const result = await discover(repoPath, subdir, explicitFormat);
139
+ return result.artifacts;
140
+ }
141
+ /**
142
+ * Discover artifacts from Claude marketplace manifest.
58
143
  *
59
- * Some repos (like Anthropic's) also include explicit `skills` arrays
60
- * as a convenience, which we support as a fallback.
144
+ * Marketplace format (.claude-plugin/marketplace.json):
145
+ * - Contains `plugins` array with plugin entries
146
+ * - If plugin has explicit `skills` array → use only those
147
+ * - Otherwise discover from `source/skills/` directory
148
+ * - Each plugin becomes a collection containing its artifacts
61
149
  */
62
150
  async function discoverClaudeMarketplace(repoPath) {
63
151
  const manifestPath = join(repoPath, ".claude-plugin", "marketplace.json");
64
- const artifacts = [];
65
- const seenPaths = new Set();
66
152
  const content = await readFile(manifestPath, "utf-8");
67
153
  const manifest = JSON.parse(content);
154
+ const allArtifacts = [];
155
+ const collections = [];
156
+ const seenPaths = new Set();
68
157
  for (const plugin of manifest.plugins) {
69
- // Primary method: source points to plugin directory with skills/ inside
70
- if (plugin.source) {
71
- const sourcePath = plugin.source.replace(/^\.\//, "");
158
+ const sourcePath = (typeof plugin.source === "string" ? plugin.source : "").replace(/^\.\//, "");
159
+ let skills = [];
160
+ // If plugin has explicit skills array, use ONLY those
161
+ if (plugin.skills && Array.isArray(plugin.skills) && plugin.skills.length > 0) {
162
+ skills = await discoverSkillsFromPaths(repoPath, plugin.skills, seenPaths, plugin.description);
163
+ }
164
+ else if (plugin.source) {
165
+ // No explicit skills - discover from source/skills/ directory
72
166
  const pluginDir = sourcePath ? join(repoPath, sourcePath) : repoPath;
73
167
  const skillsDir = join(pluginDir, "skills");
74
- try {
75
- const entries = await readdir(skillsDir, { withFileTypes: true });
76
- for (const entry of entries) {
77
- if (!entry.isDirectory() || entry.name.startsWith("."))
78
- continue;
79
- const skillPath = join(skillsDir, entry.name);
80
- const relativePath = relative(repoPath, skillPath);
81
- // Skip duplicates (multiple plugins may point to same skills dir)
82
- if (seenPaths.has(relativePath))
83
- continue;
84
- seenPaths.add(relativePath);
85
- const metadata = await parseSkillMd(skillPath);
86
- artifacts.push({
87
- name: metadata?.name ?? entry.name,
88
- description: metadata?.description ?? plugin.description,
89
- type: "skill",
90
- path: relativePath,
91
- absolutePath: skillPath,
92
- format: "claude-marketplace",
93
- metadata: metadata,
94
- });
95
- }
96
- }
97
- catch {
98
- // skills/ directory doesn't exist in plugin source dir
99
- }
168
+ skills = await discoverSkillsFromDirectory(repoPath, skillsDir, seenPaths, plugin.description);
100
169
  }
101
- // Fallback: explicit skills array (convenience format used by some repos)
102
- if (plugin.skills && plugin.skills.length > 0) {
103
- for (const skillPath of plugin.skills) {
104
- const normalizedPath = skillPath.replace(/^\.\//, "");
105
- // Skip duplicates
106
- if (seenPaths.has(normalizedPath))
107
- continue;
108
- seenPaths.add(normalizedPath);
109
- const absolutePath = join(repoPath, normalizedPath);
110
- const metadata = await parseSkillMd(absolutePath);
111
- artifacts.push({
112
- name: metadata?.name ?? basename(normalizedPath),
113
- description: metadata?.description ?? plugin.description,
114
- type: "skill",
115
- path: normalizedPath,
116
- absolutePath,
117
- format: "claude-marketplace",
118
- metadata: metadata,
119
- });
120
- }
170
+ // Add to artifacts
171
+ const artifacts = skillsToArtifacts(skills, "claude-marketplace");
172
+ allArtifacts.push(...artifacts);
173
+ // Create collection for this plugin
174
+ if (skills.length > 0) {
175
+ collections.push({
176
+ name: plugin.name,
177
+ description: plugin.description,
178
+ artifacts: skills.map((s) => s.name),
179
+ path: sourcePath || ".",
180
+ metadata: {
181
+ version: plugin.version,
182
+ author: plugin.author,
183
+ },
184
+ });
121
185
  }
122
186
  }
123
- return artifacts;
187
+ return { artifacts: allArtifacts, collections, format: "claude-marketplace" };
188
+ }
189
+ /**
190
+ * Discover artifacts from Claude plugin manifest.
191
+ *
192
+ * Plugin format (.claude-plugin/plugin.json):
193
+ * - `skills` field is path(s) to directories CONTAINING skills
194
+ * - Default `skills/` directory is always searched
195
+ * - The plugin itself is the collection containing all artifacts
196
+ */
197
+ async function discoverClaudePlugin(repoPath) {
198
+ const manifestPath = join(repoPath, ".claude-plugin", "plugin.json");
199
+ const content = await readFile(manifestPath, "utf-8");
200
+ const manifest = JSON.parse(content);
201
+ const seenPaths = new Set();
202
+ const allSkills = [];
203
+ // Collect skill directories to search
204
+ const skillsDirs = [];
205
+ // Add custom skills paths from manifest (these are directory paths, not individual skills)
206
+ if (manifest.skills) {
207
+ const paths = Array.isArray(manifest.skills) ? manifest.skills : [manifest.skills];
208
+ for (const p of paths) {
209
+ const normalized = p.replace(/^\.\//, "");
210
+ skillsDirs.push(join(repoPath, normalized));
211
+ }
212
+ }
213
+ // Always add default skills/ directory
214
+ skillsDirs.push(join(repoPath, "skills"));
215
+ // Discover skills from each directory
216
+ for (const skillsDir of skillsDirs) {
217
+ const skills = await discoverSkillsFromDirectory(repoPath, skillsDir, seenPaths, manifest.description);
218
+ allSkills.push(...skills);
219
+ }
220
+ const artifacts = skillsToArtifacts(allSkills, "claude-plugin");
221
+ // The plugin itself is the single collection
222
+ const collection = {
223
+ name: manifest.name,
224
+ description: manifest.description,
225
+ artifacts: allSkills.map((s) => s.name),
226
+ path: ".",
227
+ metadata: {
228
+ version: manifest.version,
229
+ author: manifest.author,
230
+ },
231
+ };
232
+ return {
233
+ artifacts,
234
+ collections: artifacts.length > 0 ? [collection] : [],
235
+ format: "claude-plugin",
236
+ };
124
237
  }
125
238
  /**
126
239
  * Discover artifacts from simple format (skills/ directory).
240
+ * Simple format uses metadata.json, not Claude's SKILL.md structure.
241
+ * Simple format has no collections - just raw artifacts.
127
242
  */
128
243
  async function discoverSimpleFormat(repoPath) {
129
244
  const skillsDir = join(repoPath, "skills");
@@ -136,20 +251,17 @@ async function discoverSimpleFormat(repoPath) {
136
251
  if (entry.name.startsWith("."))
137
252
  continue;
138
253
  const skillPath = join(skillsDir, entry.name);
139
- const metadata = await parseSkillMd(skillPath);
140
- // Also try metadata.json
141
- let jsonMetadata = null;
254
+ // Simple format uses metadata.json
255
+ let metadata = {};
142
256
  try {
143
- const metadataContent = await readFile(join(skillPath, "metadata.json"), "utf-8");
144
- jsonMetadata = JSON.parse(metadataContent);
257
+ const content = await readFile(join(skillPath, "metadata.json"), "utf-8");
258
+ metadata = JSON.parse(content);
145
259
  }
146
260
  catch {
147
261
  // No metadata.json
148
262
  }
149
- const name = metadata?.name ?? jsonMetadata?.name ?? entry.name;
150
- const description = metadata?.description ??
151
- jsonMetadata?.abstract ??
152
- jsonMetadata?.description;
263
+ const name = metadata.name ?? entry.name;
264
+ const description = metadata.description ?? metadata.abstract;
153
265
  artifacts.push({
154
266
  name,
155
267
  description,
@@ -157,17 +269,17 @@ async function discoverSimpleFormat(repoPath) {
157
269
  path: relative(repoPath, skillPath),
158
270
  absolutePath: skillPath,
159
271
  format: "simple",
160
- metadata: { ...jsonMetadata, ...metadata },
272
+ metadata,
161
273
  });
162
274
  }
163
275
  }
164
276
  catch {
165
277
  // skills/ directory doesn't exist or can't be read
166
278
  }
167
- return artifacts;
279
+ return { artifacts, collections: [], format: "simple" };
168
280
  }
169
281
  /**
170
- * Parse SKILL.md or AGENTS.md YAML frontmatter.
282
+ * Parse Claude Code skill metadata from SKILL.md or AGENTS.md YAML frontmatter.
171
283
  */
172
284
  async function parseSkillMd(dirPath) {
173
285
  for (const filename of ["SKILL.md", "AGENTS.md"]) {
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
package/dist/git.d.ts CHANGED
@@ -1,17 +1,4 @@
1
- export interface ParsedSource {
2
- /** Full git URL for cloning */
3
- url: string;
4
- /** GitHub owner (if GitHub) */
5
- owner?: string;
6
- /** Repository name */
7
- repo?: string;
8
- /** Git ref (branch, tag, SHA) */
9
- ref?: string;
10
- /** Subpath within repo (after #) */
11
- subpath?: string;
12
- /** Original source string */
13
- original: string;
14
- }
1
+ import type { Source } from "./config.js";
15
2
  export interface RepoInfo {
16
3
  /** Path to the cloned repo */
17
4
  path: string;
@@ -19,29 +6,33 @@ export interface RepoInfo {
19
6
  sha: string;
20
7
  }
21
8
  /**
22
- * Parse a source string into its components.
9
+ * Parse a CLI source shorthand string into a normalized Source object.
23
10
  *
24
11
  * Supported formats:
25
- * - owner/repo
26
- * - owner/repo#subpath
12
+ * - owner/repo (GitHub shorthand)
13
+ * - owner/repo#subdir
27
14
  * - https://github.com/owner/repo
28
- * - https://github.com/owner/repo#subpath
29
- * - ./local/path
15
+ * - git://github.com/owner/repo
16
+ * - git+ssh://git@github.com/owner/repo
17
+ * - git@github.com:owner/repo
18
+ * - Any of the above with #subdir suffix
19
+ *
20
+ * Returns a Source object suitable for storing in agpm.json.
30
21
  */
31
- export declare function parseSource(source: string): ParsedSource;
22
+ export declare function parseSourceString(input: string): Source;
32
23
  /**
33
24
  * Get the global agpm directory path.
34
25
  */
35
26
  export declare function getAgpmDir(): string;
36
27
  /**
37
- * Get the path where a repo should be stored.
28
+ * Get the path where a repo should be stored based on its URL.
38
29
  */
39
- export declare function getRepoPath(source: ParsedSource): string;
30
+ export declare function getRepoPath(source: Source): string;
40
31
  /**
41
32
  * Clone or fetch a repository.
42
33
  * Returns the path to the repo and the current HEAD SHA.
43
34
  */
44
- export declare function ensureRepo(source: ParsedSource): Promise<RepoInfo>;
35
+ export declare function ensureRepo(source: Source): Promise<RepoInfo>;
45
36
  /**
46
37
  * Checkout a specific ref (branch, tag, or SHA) in a repo.
47
38
  */
@@ -50,4 +41,15 @@ export declare function checkoutRef(repoPath: string, ref: string): Promise<stri
50
41
  * Resolve a ref to a full SHA.
51
42
  */
52
43
  export declare function resolveRef(repoPath: string, ref?: string): Promise<string>;
44
+ /**
45
+ * Checkout a ref and cache the repo at that SHA.
46
+ *
47
+ * 1. Resolves the ref to a full SHA
48
+ * 2. If not already cached, checkouts the repo at that SHA and caches it
49
+ * 3. Returns the SHA and path to the cached repo
50
+ */
51
+ export declare function checkoutToCache(repoPath: string, ref?: string): Promise<{
52
+ sha: string;
53
+ cachePath: string;
54
+ }>;
53
55
  //# sourceMappingURL=git.d.ts.map
package/dist/git.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAMD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAiDxD;AAMD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAcxD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0BxE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxF"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO1C,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AA8DD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkDvD;AAMD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgClD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0BlE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxF;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAe,GACnB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB7C"}