@agpm/cli 0.0.1 → 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Kepler16
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -4,7 +4,7 @@ export declare const addCommand: import("citty").CommandDef<{
4
4
  description: string;
5
5
  required: true;
6
6
  };
7
- artifact: {
7
+ name: {
8
8
  type: "positional";
9
9
  description: string;
10
10
  required: false;
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,UAAU;;;;;;;;;;;EAsGrB,CAAC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,UAAU;;;;;;;;;;;EA2FrB,CAAC"}
@@ -1,9 +1,29 @@
1
1
  import { defineCommand } from "citty";
2
- import { loadConfig, saveConfig, parseSource, ensureRepo, getRepoPath, discoverArtifacts, } from "@agpm/core";
2
+ import { loadConfig, saveConfig, parseSourceString, ensureRepo, getRepoPath, discover, } from "@agpm/core";
3
+ /**
4
+ * Parse artifact name that may include a version ref.
5
+ * Returns { name, ref } where ref is the version if specified.
6
+ */
7
+ function parseArtifactName(input) {
8
+ const atIndex = input.lastIndexOf("@");
9
+ if (atIndex > 0) {
10
+ return {
11
+ name: input.slice(0, atIndex),
12
+ ref: input.slice(atIndex + 1),
13
+ };
14
+ }
15
+ return { name: input };
16
+ }
17
+ /**
18
+ * Find a source in the config by name.
19
+ */
20
+ function findSource(sources, name) {
21
+ return sources.find((s) => s.name === name);
22
+ }
3
23
  export const addCommand = defineCommand({
4
24
  meta: {
5
25
  name: "add",
6
- description: "Add an artifact to the project",
26
+ description: "Add an artifact or collection to the project",
7
27
  },
8
28
  args: {
9
29
  source: {
@@ -11,82 +31,145 @@ export const addCommand = defineCommand({
11
31
  description: "Source containing the artifact (owner/repo or URL)",
12
32
  required: true,
13
33
  },
14
- artifact: {
34
+ name: {
15
35
  type: "positional",
16
- description: "Artifact name to add (optional if source has only one)",
36
+ description: "Artifact or collection name to add",
17
37
  required: false,
18
38
  },
19
39
  },
20
40
  async run({ args }) {
21
41
  const cwd = process.cwd();
22
42
  const config = await loadConfig(cwd);
23
- const parsed = parseSource(args.source);
24
- console.log(`Resolving ${parsed.original}...`);
43
+ // Parse CLI shorthand into a Source object
44
+ const source = parseSourceString(args.source);
45
+ console.log(`Resolving ${source.name}...`);
25
46
  // Ensure repo is cloned
26
- await ensureRepo(parsed);
27
- const repoPath = getRepoPath(parsed);
28
- // Discover available artifacts
29
- const artifacts = await discoverArtifacts(repoPath, parsed.subpath);
30
- if (artifacts.length === 0) {
31
- console.log("No artifacts found in source");
47
+ await ensureRepo(source);
48
+ const repoPath = getRepoPath(source);
49
+ // Discover available artifacts and collections
50
+ const result = await discover(repoPath, source.subdir, source.format);
51
+ if (result.artifacts.length === 0 && result.collections.length === 0) {
52
+ console.log("No artifacts or collections found in source");
32
53
  return;
33
54
  }
34
- let artifact;
35
- if (args.artifact) {
36
- // Find specific artifact
37
- artifact = artifacts.find((a) => a.name === args.artifact ||
38
- a.path === args.artifact ||
39
- a.path.endsWith(`/${args.artifact}`));
40
- if (!artifact) {
41
- console.log(`Artifact "${args.artifact}" not found in source.`);
42
- console.log("\nAvailable artifacts:");
43
- for (const a of artifacts) {
44
- console.log(` - ${a.name}`);
45
- }
46
- return;
47
- }
55
+ // Also ensure source is in sources list
56
+ if (!findSource(config.sources, source.name)) {
57
+ config.sources.push(source);
48
58
  }
49
- else if (artifacts.length === 1) {
50
- // Auto-select if only one artifact
51
- artifact = artifacts[0];
52
- }
53
- else {
54
- // Multiple artifacts, must specify
55
- console.log("Multiple artifacts found. Please specify which one to add:");
56
- console.log();
57
- for (const a of artifacts) {
58
- console.log(` ${a.name}`);
59
- if (a.description) {
60
- const desc = a.description.length > 60
61
- ? a.description.slice(0, 57) + "..."
62
- : a.description;
63
- console.log(` ${desc}`);
59
+ if (args.name) {
60
+ // Parse artifact name (may include @version)
61
+ const { name: itemName, ref: versionRef } = parseArtifactName(args.name);
62
+ // Check if it's a collection first (collections don't support version refs)
63
+ const collection = result.collections.find((c) => c.name === itemName);
64
+ if (collection) {
65
+ if (versionRef) {
66
+ console.log("Warning: Collections do not support version refs. Ignoring @" + versionRef);
64
67
  }
68
+ return addCollection(config, source, collection, cwd);
69
+ }
70
+ // Otherwise, find specific artifact
71
+ const artifact = result.artifacts.find((a) => a.name === itemName ||
72
+ a.path === itemName ||
73
+ a.path.endsWith(`/${itemName}`));
74
+ if (artifact) {
75
+ return addArtifact(config, source, artifact, cwd, versionRef);
65
76
  }
66
- console.log();
67
- console.log(`Usage: agpm add ${args.source} <artifact-name>`);
77
+ // Not found
78
+ console.log(`"${itemName}" not found in source.`);
79
+ showAvailable(result.collections, result.artifacts, args.source);
68
80
  return;
69
81
  }
70
- // Build artifact reference
71
- const artifactRef = `${args.source}/${artifact.name}`;
72
- // Check if already added
73
- if (config.artifacts.includes(artifactRef)) {
82
+ // No name specified - auto-select or show options
83
+ if (result.collections.length === 1 && result.artifacts.length === 0) {
84
+ // Only one collection, auto-add it
85
+ return addCollection(config, source, result.collections[0], cwd);
86
+ }
87
+ if (result.artifacts.length === 1 && result.collections.length === 0) {
88
+ // Only one artifact, auto-add it
89
+ return addArtifact(config, source, result.artifacts[0], cwd);
90
+ }
91
+ // Multiple options, must specify
92
+ console.log("Multiple items found. Please specify which one to add:\n");
93
+ showAvailable(result.collections, result.artifacts, args.source);
94
+ },
95
+ });
96
+ async function addCollection(config, source, collection, cwd) {
97
+ const collectionRef = `${source.name}/${collection.name}`;
98
+ if (config.collections.includes(collectionRef)) {
99
+ console.log(`Collection already configured: ${collectionRef}`);
100
+ return;
101
+ }
102
+ config.collections.push(collectionRef);
103
+ await saveConfig(cwd, config);
104
+ console.log(`Added collection: ${collectionRef}`);
105
+ if (collection.description) {
106
+ console.log(` ${collection.description}`);
107
+ }
108
+ console.log(` Contains: ${collection.artifacts.join(", ")}`);
109
+ console.log();
110
+ console.log("Run `agpm install` to install the collection.");
111
+ }
112
+ async function addArtifact(config, source, artifact, cwd, versionRef) {
113
+ // Build artifact reference with optional version
114
+ const artifactRef = versionRef
115
+ ? `${source.name}/${artifact.name}@${versionRef}`
116
+ : `${source.name}/${artifact.name}`;
117
+ // Check for existing entry (with or without version)
118
+ const baseRef = `${source.name}/${artifact.name}`;
119
+ const existingIndex = config.artifacts.findIndex((a) => a === artifactRef || a.startsWith(baseRef + "@") || a === baseRef);
120
+ if (existingIndex !== -1) {
121
+ const existing = config.artifacts[existingIndex];
122
+ if (existing === artifactRef) {
74
123
  console.log(`Artifact already configured: ${artifactRef}`);
75
124
  return;
76
125
  }
77
- // Also check if source is already in sources list
78
- if (!config.sources.includes(args.source)) {
79
- config.sources.push(args.source);
80
- }
81
- // Add artifact
126
+ // Update to new version
127
+ config.artifacts[existingIndex] = artifactRef;
128
+ await saveConfig(cwd, config);
129
+ console.log(`Updated: ${existing} → ${artifactRef}`);
130
+ }
131
+ else {
82
132
  config.artifacts.push(artifactRef);
83
133
  await saveConfig(cwd, config);
84
134
  console.log(`Added: ${artifactRef}`);
85
- if (artifact.description) {
86
- console.log(` ${artifact.description}`);
135
+ }
136
+ if (artifact.description) {
137
+ console.log(` ${artifact.description}`);
138
+ }
139
+ if (versionRef) {
140
+ console.log(` Pinned to: ${versionRef}`);
141
+ }
142
+ console.log();
143
+ console.log("Run `agpm install` to install the artifact.");
144
+ }
145
+ function showAvailable(collections, artifacts, sourceArg) {
146
+ if (collections.length > 0) {
147
+ console.log("Collections:");
148
+ for (const c of collections) {
149
+ console.log(` ${c.name}`);
150
+ if (c.description) {
151
+ const desc = c.description.length > 60
152
+ ? c.description.slice(0, 57) + "..."
153
+ : c.description;
154
+ console.log(` ${desc}`);
155
+ }
156
+ console.log(` (${c.artifacts.length} artifacts)`);
87
157
  }
88
158
  console.log();
89
- console.log("Run `agpm install` to install the artifact.");
90
- },
91
- });
159
+ }
160
+ if (artifacts.length > 0) {
161
+ console.log("Artifacts:");
162
+ for (const a of artifacts) {
163
+ console.log(` ${a.name}`);
164
+ if (a.description) {
165
+ const desc = a.description.length > 60
166
+ ? a.description.slice(0, 57) + "..."
167
+ : a.description;
168
+ console.log(` ${desc}`);
169
+ }
170
+ }
171
+ console.log();
172
+ }
173
+ console.log(`Usage: agpm add ${sourceArg} <name>`);
174
+ }
92
175
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,cAAc;;;;;;;EAgHzB,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAwCA,eAAO,MAAM,cAAc;;;;;;;EAqLzB,CAAC"}
@@ -1,9 +1,26 @@
1
1
  import { defineCommand } from "citty";
2
2
  import { cp, mkdir, rm } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
- import { loadConfig, loadLock, saveLock, parseSource, ensureRepo, getRepoPath, discoverArtifacts, resolveRef, } from "@agpm/core";
5
- // Default target directories for different AI tools
6
- const TARGET_DIRS = [".claude/skills", ".opencode/skills", ".codex/skills"];
4
+ import { loadConfig, loadLock, saveLock, parseSourceString, parseArtifactRef, ensureRepo, getRepoPath, discover, checkoutToCache, hashDirectory, getEnabledTargetPaths, } from "@agpm/core";
5
+ /**
6
+ * Find a source in the config by name.
7
+ */
8
+ function findSource(sources, name) {
9
+ return sources.find((s) => s.name === name);
10
+ }
11
+ /**
12
+ * Parse collection reference (source/name) into source name and collection name.
13
+ * Collections don't support version refs.
14
+ */
15
+ function parseCollectionRef(ref) {
16
+ const lastSlash = ref.lastIndexOf("/");
17
+ if (lastSlash === -1)
18
+ return null;
19
+ return {
20
+ sourceName: ref.slice(0, lastSlash),
21
+ collectionName: ref.slice(lastSlash + 1),
22
+ };
23
+ }
7
24
  export const installCommand = defineCommand({
8
25
  meta: {
9
26
  name: "install",
@@ -21,63 +38,127 @@ export const installCommand = defineCommand({
21
38
  const cwd = process.cwd();
22
39
  const config = await loadConfig(cwd);
23
40
  const lock = await loadLock(cwd);
24
- if (config.artifacts.length === 0) {
25
- console.log("No artifacts configured.");
26
- console.log("\nAdd artifacts with: agpm add <source> <artifact>");
41
+ // Check for configured targets
42
+ const targetDirs = getEnabledTargetPaths(config.targets, "skill");
43
+ if (targetDirs.length === 0) {
44
+ console.log("No targets configured.");
45
+ console.log("\nAdd targets to agpm.json:");
46
+ console.log(' "targets": { "claude-code": true, "opencode": true }');
27
47
  return;
28
48
  }
29
- console.log(`Installing ${config.artifacts.length} artifact(s)...\n`);
49
+ if (config.collections.length === 0 && config.artifacts.length === 0) {
50
+ console.log("No artifacts or collections configured.");
51
+ console.log("\nAdd artifacts with: agpm add <source> <name>");
52
+ return;
53
+ }
54
+ // Build list of artifact refs to install (expand collections)
55
+ const artifactRefs = [...config.artifacts];
56
+ // Expand collections to their artifacts
57
+ for (const collectionRef of config.collections) {
58
+ const parsed = parseCollectionRef(collectionRef);
59
+ if (!parsed) {
60
+ console.log(`Invalid collection reference: ${collectionRef}`);
61
+ continue;
62
+ }
63
+ const { sourceName, collectionName } = parsed;
64
+ let source = findSource(config.sources, sourceName);
65
+ if (!source) {
66
+ try {
67
+ source = parseSourceString(sourceName);
68
+ }
69
+ catch {
70
+ console.log(`Source not found: ${sourceName}`);
71
+ continue;
72
+ }
73
+ }
74
+ // Discover to find the collection
75
+ await ensureRepo(source);
76
+ const repoPath = getRepoPath(source);
77
+ const result = await discover(repoPath, source.subdir, source.format);
78
+ const collection = result.collections.find((c) => c.name === collectionName);
79
+ if (!collection) {
80
+ console.log(`Collection not found: ${collectionName}`);
81
+ continue;
82
+ }
83
+ // Add each artifact from the collection
84
+ for (const artifactName of collection.artifacts) {
85
+ const artifactRef = `${sourceName}/${artifactName}`;
86
+ if (!artifactRefs.includes(artifactRef)) {
87
+ artifactRefs.push(artifactRef);
88
+ }
89
+ }
90
+ }
91
+ console.log(`Installing ${artifactRefs.length} artifact(s)...\n`);
30
92
  let updated = false;
31
- for (const artifactRef of config.artifacts) {
32
- // Parse artifact reference: source/artifact-name
33
- const lastSlash = artifactRef.lastIndexOf("/");
34
- if (lastSlash === -1) {
93
+ // Cache discovered artifacts per source to avoid repeated discovery
94
+ const discoveryCache = new Map();
95
+ for (const artifactRef of artifactRefs) {
96
+ const parsed = parseArtifactRef(artifactRef);
97
+ if (!parsed) {
35
98
  console.log(`Invalid artifact reference: ${artifactRef}`);
36
99
  continue;
37
100
  }
38
- const sourceStr = artifactRef.slice(0, lastSlash);
39
- const artifactName = artifactRef.slice(lastSlash + 1);
40
- const parsed = parseSource(sourceStr);
101
+ const { source: sourceName, artifact: artifactName, ref: versionRef } = parsed;
102
+ let source = findSource(config.sources, sourceName);
103
+ if (!source) {
104
+ try {
105
+ source = parseSourceString(sourceName);
106
+ }
107
+ catch {
108
+ console.log(`Source not found: ${sourceName}`);
109
+ continue;
110
+ }
111
+ }
112
+ // Build the lock key (without version ref - lock tracks resolved SHA)
113
+ const lockKey = `${sourceName}/${artifactName}`;
41
114
  // Check if we have a lock entry
42
- let lockEntry = lock.artifacts[artifactRef];
115
+ let lockEntry = lock.artifacts[lockKey];
43
116
  if (!lockEntry || args.force) {
44
- // Need to resolve
45
117
  console.log(`Resolving ${artifactRef}...`);
46
- // Ensure repo is cloned
47
- await ensureRepo(parsed);
48
- const repoPath = getRepoPath(parsed);
49
- // Discover artifacts to get the path
50
- const artifacts = await discoverArtifacts(repoPath, parsed.subpath);
118
+ await ensureRepo(source);
119
+ const repoPath = getRepoPath(source);
120
+ // Checkout to cache at the specified ref (or HEAD)
121
+ const { sha, cachePath } = await checkoutToCache(repoPath, versionRef ?? "HEAD");
122
+ // Get or cache discovered artifacts (discovered from cached repo)
123
+ const cacheKey = `${sourceName}@${sha}`;
124
+ let artifacts = discoveryCache.get(cacheKey);
125
+ if (!artifacts) {
126
+ const result = await discover(cachePath, source.subdir, source.format);
127
+ artifacts = result.artifacts;
128
+ discoveryCache.set(cacheKey, artifacts);
129
+ }
51
130
  const artifact = artifacts.find((a) => a.name === artifactName);
52
131
  if (!artifact) {
53
132
  console.log(` Artifact not found: ${artifactName}`);
54
133
  continue;
55
134
  }
56
- // Resolve SHA
57
- const sha = await resolveRef(repoPath, parsed.ref || "HEAD");
135
+ // Compute integrity hash of the artifact directory
136
+ const artifactPath = join(cachePath, artifact.path);
137
+ const integrity = await hashDirectory(artifactPath);
58
138
  lockEntry = {
59
139
  sha,
60
- integrity: `sha256-${sha.slice(0, 16)}`, // Placeholder integrity
140
+ integrity,
61
141
  path: artifact.path,
142
+ ...(versionRef && { ref: versionRef }),
62
143
  metadata: {
63
144
  name: artifact.name,
64
145
  description: artifact.description,
65
146
  },
66
147
  };
67
- lock.artifacts[artifactRef] = lockEntry;
148
+ lock.artifacts[lockKey] = lockEntry;
68
149
  updated = true;
69
150
  }
70
- // Install to target directories
71
- const installRepoPath = getRepoPath(parsed);
72
- const sourcePath = join(installRepoPath, lockEntry.path);
73
- for (const targetDir of TARGET_DIRS) {
151
+ // Install from cache to target directories
152
+ // First, ensure we have the SHA in cache
153
+ await ensureRepo(source);
154
+ const repoPath = getRepoPath(source);
155
+ const { cachePath } = await checkoutToCache(repoPath, lockEntry.sha);
156
+ const sourcePath = join(cachePath, lockEntry.path);
157
+ for (const targetDir of targetDirs) {
74
158
  const targetPath = join(cwd, targetDir, artifactName);
75
159
  try {
76
- // Remove existing
77
160
  await rm(targetPath, { recursive: true, force: true });
78
- // Create parent directory
79
161
  await mkdir(join(cwd, targetDir), { recursive: true });
80
- // Copy skill directory
81
162
  await cp(sourcePath, targetPath, { recursive: true });
82
163
  console.log(` Installed: ${targetDir}/${artifactName}`);
83
164
  }
@@ -86,7 +167,6 @@ export const installCommand = defineCommand({
86
167
  }
87
168
  }
88
169
  }
89
- // Save lock file if updated
90
170
  if (updated) {
91
171
  await saveLock(cwd, lock);
92
172
  console.log("\nUpdated agpm-lock.json");
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"AAsJA,eAAO,MAAM,aAAa,qDAWxB,CAAC"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"AAwMA,eAAO,MAAM,aAAa,qDAWxB,CAAC"}
@@ -1,5 +1,16 @@
1
1
  import { defineCommand } from "citty";
2
- import { loadConfig, saveConfig, parseSource, ensureRepo, getRepoPath, detectFormat, discoverArtifacts } from "@agpm/core";
2
+ import { loadConfig, saveConfig, parseSourceString, ensureRepo, getRepoPath, detectFormat, discover, } from "@agpm/core";
3
+ /**
4
+ * Find a source in the config by name (exact match or partial).
5
+ */
6
+ function findSource(sources, query) {
7
+ // Try exact name match first
8
+ const exact = sources.find((s) => s.name === query);
9
+ if (exact)
10
+ return exact;
11
+ // Try partial match
12
+ return sources.find((s) => s.name.includes(query) || s.url.includes(query));
13
+ }
3
14
  const addCommand = defineCommand({
4
15
  meta: {
5
16
  name: "add",
@@ -15,22 +26,22 @@ const addCommand = defineCommand({
15
26
  async run({ args }) {
16
27
  const cwd = process.cwd();
17
28
  const config = await loadConfig(cwd);
18
- // Parse and validate the source
19
- const parsed = parseSource(args.source);
20
- console.log(`Adding source: ${parsed.original}`);
29
+ // Parse CLI shorthand into a Source object
30
+ const source = parseSourceString(args.source);
31
+ console.log(`Adding source: ${source.name}`);
21
32
  // Check if already added
22
- if (config.sources.includes(args.source)) {
33
+ if (findSource(config.sources, source.name)) {
23
34
  console.log("Source already exists in config");
24
35
  return;
25
36
  }
26
37
  // Clone/fetch the repo to validate it exists
27
- console.log(`Fetching ${parsed.url}...`);
28
- const repo = await ensureRepo(parsed);
38
+ console.log(`Fetching ${source.url}...`);
39
+ const repo = await ensureRepo(source);
29
40
  console.log(`Cloned to ${repo.path} (${repo.sha.slice(0, 8)})`);
30
- // Add to config
31
- config.sources.push(args.source);
41
+ // Add to config (as full object)
42
+ config.sources.push(source);
32
43
  await saveConfig(cwd, config);
33
- console.log(`Added source: ${args.source}`);
44
+ console.log(`Added source: ${source.name}`);
34
45
  },
35
46
  });
36
47
  const listCommand = defineCommand({
@@ -48,10 +59,13 @@ const listCommand = defineCommand({
48
59
  }
49
60
  console.log("Configured sources:\n");
50
61
  for (const source of config.sources) {
51
- const parsed = parseSource(source);
52
- console.log(` ${source}`);
53
- if (parsed.subpath) {
54
- console.log(` └─ subpath: ${parsed.subpath}`);
62
+ console.log(` ${source.name}`);
63
+ console.log(` url: ${source.url}`);
64
+ if (source.format && source.format !== "auto") {
65
+ console.log(` format: ${source.format}`);
66
+ }
67
+ if (source.subdir) {
68
+ console.log(` subdir: ${source.subdir}`);
55
69
  }
56
70
  }
57
71
  },
@@ -64,27 +78,27 @@ const removeCommand = defineCommand({
64
78
  args: {
65
79
  source: {
66
80
  type: "positional",
67
- description: "Source to remove",
81
+ description: "Source name to remove",
68
82
  required: true,
69
83
  },
70
84
  },
71
85
  async run({ args }) {
72
86
  const cwd = process.cwd();
73
87
  const config = await loadConfig(cwd);
74
- const index = config.sources.indexOf(args.source);
88
+ const index = config.sources.findIndex((s) => s.name === args.source);
75
89
  if (index === -1) {
76
90
  console.log(`Source not found: ${args.source}`);
77
91
  return;
78
92
  }
79
- config.sources.splice(index, 1);
93
+ const removed = config.sources.splice(index, 1)[0];
80
94
  await saveConfig(cwd, config);
81
- console.log(`Removed source: ${args.source}`);
95
+ console.log(`Removed source: ${removed.name}`);
82
96
  },
83
97
  });
84
98
  const discoverCommand = defineCommand({
85
99
  meta: {
86
100
  name: "discover",
87
- description: "Discover artifacts in a source",
101
+ description: "Discover artifacts and collections in a source",
88
102
  },
89
103
  args: {
90
104
  source: {
@@ -94,11 +108,17 @@ const discoverCommand = defineCommand({
94
108
  },
95
109
  },
96
110
  async run({ args }) {
97
- const parsed = parseSource(args.source);
98
- const repoPath = getRepoPath(parsed);
111
+ const cwd = process.cwd();
112
+ const config = await loadConfig(cwd);
113
+ // Check if source is in config, otherwise parse as new
114
+ let source = findSource(config.sources, args.source);
115
+ if (!source) {
116
+ source = parseSourceString(args.source);
117
+ }
118
+ const repoPath = getRepoPath(source);
99
119
  // Ensure repo is cloned
100
- console.log(`Checking ${parsed.original}...`);
101
- await ensureRepo(parsed);
120
+ console.log(`Checking ${source.name}...`);
121
+ await ensureRepo(source);
102
122
  // Detect format
103
123
  const format = await detectFormat(repoPath);
104
124
  console.log(`Format: ${format}\n`);
@@ -106,24 +126,41 @@ const discoverCommand = defineCommand({
106
126
  console.log("Unknown format - no .claude-plugin/marketplace.json or skills/ directory found");
107
127
  return;
108
128
  }
109
- // Discover artifacts
110
- const artifacts = await discoverArtifacts(repoPath, parsed.subpath);
111
- if (artifacts.length === 0) {
112
- console.log("No artifacts found");
129
+ // Discover artifacts and collections
130
+ const result = await discover(repoPath, source.subdir, source.format);
131
+ if (result.artifacts.length === 0 && result.collections.length === 0) {
132
+ console.log("No artifacts or collections found");
113
133
  return;
114
134
  }
115
- console.log(`Found ${artifacts.length} artifact(s):\n`);
116
- for (const artifact of artifacts) {
117
- console.log(` ${artifact.name}`);
118
- if (artifact.description) {
119
- // Truncate long descriptions
120
- const desc = artifact.description.length > 80
121
- ? artifact.description.slice(0, 77) + "..."
122
- : artifact.description;
123
- console.log(` ${desc}`);
135
+ // Show collections first
136
+ if (result.collections.length > 0) {
137
+ console.log(`Found ${result.collections.length} collection(s):\n`);
138
+ for (const collection of result.collections) {
139
+ console.log(` ${collection.name}`);
140
+ if (collection.description) {
141
+ const desc = collection.description.length > 80
142
+ ? collection.description.slice(0, 77) + "..."
143
+ : collection.description;
144
+ console.log(` ${desc}`);
145
+ }
146
+ console.log(` artifacts: ${collection.artifacts.join(", ")}`);
147
+ console.log();
148
+ }
149
+ }
150
+ // Show artifacts
151
+ if (result.artifacts.length > 0) {
152
+ console.log(`Found ${result.artifacts.length} artifact(s):\n`);
153
+ for (const artifact of result.artifacts) {
154
+ console.log(` ${artifact.name}`);
155
+ if (artifact.description) {
156
+ const desc = artifact.description.length > 80
157
+ ? artifact.description.slice(0, 77) + "..."
158
+ : artifact.description;
159
+ console.log(` ${desc}`);
160
+ }
161
+ console.log(` path: ${artifact.path}`);
162
+ console.log();
124
163
  }
125
- console.log(` path: ${artifact.path}`);
126
- console.log();
127
164
  }
128
165
  },
129
166
  });
@@ -1 +1 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa;;;;;;EAmGxB,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,aAAa;;;;;;EAyHxB,CAAC"}
@@ -1,5 +1,12 @@
1
1
  import { defineCommand } from "citty";
2
- import { loadConfig, loadLock, saveLock, parseSource, ensureRepo, getRepoPath, discoverArtifacts, resolveRef, } from "@agpm/core";
2
+ import { join } from "node:path";
3
+ import { loadConfig, loadLock, saveLock, parseSourceString, parseArtifactRef, ensureRepo, getRepoPath, discover, checkoutToCache, hashDirectory, } from "@agpm/core";
4
+ /**
5
+ * Find a source in the config by name.
6
+ */
7
+ function findSource(sources, name) {
8
+ return sources.find((s) => s.name === name);
9
+ }
3
10
  export const updateCommand = defineCommand({
4
11
  meta: {
5
12
  name: "update",
@@ -33,36 +40,56 @@ export const updateCommand = defineCommand({
33
40
  console.log(`Updating ${artifactsToUpdate.length} artifact(s)...\n`);
34
41
  let updated = 0;
35
42
  for (const artifactRef of artifactsToUpdate) {
36
- // Parse artifact reference: source/artifact-name
37
- const lastSlash = artifactRef.lastIndexOf("/");
38
- const sourceStr = artifactRef.slice(0, lastSlash);
39
- const artifactName = artifactRef.slice(lastSlash + 1);
40
- const parsed = parseSource(sourceStr);
43
+ // Parse artifact reference: source-name/artifact-name[@ref]
44
+ const parsed = parseArtifactRef(artifactRef);
45
+ if (!parsed) {
46
+ console.log(`Invalid artifact reference: ${artifactRef}`);
47
+ continue;
48
+ }
49
+ const { source: sourceName, artifact: artifactName, ref: versionRef } = parsed;
50
+ // Look up source from config, fallback to parsing as new
51
+ let source = findSource(config.sources, sourceName);
52
+ if (!source) {
53
+ try {
54
+ source = parseSourceString(sourceName);
55
+ }
56
+ catch {
57
+ console.log(`Source not found: ${sourceName}`);
58
+ continue;
59
+ }
60
+ }
61
+ // Lock key is without version ref
62
+ const lockKey = `${sourceName}/${artifactName}`;
41
63
  console.log(`Checking ${artifactRef}...`);
42
64
  // Fetch latest
43
- await ensureRepo(parsed);
44
- const repoPath = getRepoPath(parsed);
45
- // Resolve latest SHA
46
- const latestSha = await resolveRef(repoPath, parsed.ref || "HEAD");
65
+ await ensureRepo(source);
66
+ const repoPath = getRepoPath(source);
67
+ // Resolve ref to SHA (use pinned ref if specified, otherwise HEAD)
68
+ const refToResolve = versionRef ?? "HEAD";
69
+ const { sha: latestSha, cachePath } = await checkoutToCache(repoPath, refToResolve);
47
70
  // Check if update needed
48
- const lockEntry = lock.artifacts[artifactRef];
71
+ const lockEntry = lock.artifacts[lockKey];
49
72
  if (lockEntry && lockEntry.sha === latestSha) {
50
73
  console.log(` Already up to date (${latestSha.slice(0, 8)})`);
51
74
  continue;
52
75
  }
53
- // Discover to get path
54
- const artifacts = await discoverArtifacts(repoPath, parsed.subpath);
55
- const artifact = artifacts.find((a) => a.name === artifactName);
76
+ // Discover to get path from cached repo
77
+ const result = await discover(cachePath, source.subdir, source.format);
78
+ const artifact = result.artifacts.find((a) => a.name === artifactName);
56
79
  if (!artifact) {
57
80
  console.log(` Artifact not found in source`);
58
81
  continue;
59
82
  }
83
+ // Compute integrity hash
84
+ const artifactPath = join(cachePath, artifact.path);
85
+ const integrity = await hashDirectory(artifactPath);
60
86
  const oldSha = lockEntry?.sha?.slice(0, 8) || "none";
61
87
  // Update lock
62
- lock.artifacts[artifactRef] = {
88
+ lock.artifacts[lockKey] = {
63
89
  sha: latestSha,
64
- integrity: `sha256-${latestSha.slice(0, 16)}`,
90
+ integrity,
65
91
  path: artifact.path,
92
+ ...(versionRef && { ref: versionRef }),
66
93
  metadata: {
67
94
  name: artifact.name,
68
95
  description: artifact.description,
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,22 +1,34 @@
1
1
  {
2
2
  "name": "@agpm/cli",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
+ "description": "CLI for AGPM - Agent Package Manager for AI coding tool artifacts",
4
5
  "type": "module",
5
- "bin": {
6
- "agpm": "./dist/index.js"
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/kepler16/agpm.git",
9
+ "directory": "cli/packages/cli"
7
10
  },
8
- "files": ["dist"],
9
- "scripts": {
10
- "build": "tsc",
11
- "dev": "tsx src/index.ts",
12
- "typecheck": "tsc --noEmit"
11
+ "homepage": "https://agpm.dev",
12
+ "bugs": {
13
+ "url": "https://github.com/kepler16/agpm/issues"
14
+ },
15
+ "bin": {
16
+ "agpm": "dist/index.js"
13
17
  },
18
+ "files": [
19
+ "dist"
20
+ ],
14
21
  "dependencies": {
15
- "@agpm/core": "workspace:*",
16
- "citty": "^0.1.6"
22
+ "citty": "^0.1.6",
23
+ "@agpm/core": "0.1.0"
17
24
  },
18
25
  "devDependencies": {
19
26
  "tsx": "^4.19.4",
20
27
  "typescript": "^5.7.0"
28
+ },
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "dev": "tsx src/index.ts",
32
+ "typecheck": "tsc --noEmit"
21
33
  }
22
- }
34
+ }