@agpm/cli 0.0.1

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.
@@ -0,0 +1,13 @@
1
+ export declare const addCommand: import("citty").CommandDef<{
2
+ source: {
3
+ type: "positional";
4
+ description: string;
5
+ required: true;
6
+ };
7
+ artifact: {
8
+ type: "positional";
9
+ description: string;
10
+ required: false;
11
+ };
12
+ }>;
13
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,UAAU;;;;;;;;;;;EAsGrB,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { defineCommand } from "citty";
2
+ import { loadConfig, saveConfig, parseSource, ensureRepo, getRepoPath, discoverArtifacts, } from "@agpm/core";
3
+ export const addCommand = defineCommand({
4
+ meta: {
5
+ name: "add",
6
+ description: "Add an artifact to the project",
7
+ },
8
+ args: {
9
+ source: {
10
+ type: "positional",
11
+ description: "Source containing the artifact (owner/repo or URL)",
12
+ required: true,
13
+ },
14
+ artifact: {
15
+ type: "positional",
16
+ description: "Artifact name to add (optional if source has only one)",
17
+ required: false,
18
+ },
19
+ },
20
+ async run({ args }) {
21
+ const cwd = process.cwd();
22
+ const config = await loadConfig(cwd);
23
+ const parsed = parseSource(args.source);
24
+ console.log(`Resolving ${parsed.original}...`);
25
+ // 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");
32
+ return;
33
+ }
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
+ }
48
+ }
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}`);
64
+ }
65
+ }
66
+ console.log();
67
+ console.log(`Usage: agpm add ${args.source} <artifact-name>`);
68
+ return;
69
+ }
70
+ // Build artifact reference
71
+ const artifactRef = `${args.source}/${artifact.name}`;
72
+ // Check if already added
73
+ if (config.artifacts.includes(artifactRef)) {
74
+ console.log(`Artifact already configured: ${artifactRef}`);
75
+ return;
76
+ }
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
82
+ config.artifacts.push(artifactRef);
83
+ await saveConfig(cwd, config);
84
+ console.log(`Added: ${artifactRef}`);
85
+ if (artifact.description) {
86
+ console.log(` ${artifact.description}`);
87
+ }
88
+ console.log();
89
+ console.log("Run `agpm install` to install the artifact.");
90
+ },
91
+ });
92
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const installCommand: import("citty").CommandDef<{
2
+ force: {
3
+ type: "boolean";
4
+ alias: string;
5
+ description: string;
6
+ default: false;
7
+ };
8
+ }>;
9
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,cAAc;;;;;;;EAgHzB,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { defineCommand } from "citty";
2
+ import { cp, mkdir, rm } from "node:fs/promises";
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"];
7
+ export const installCommand = defineCommand({
8
+ meta: {
9
+ name: "install",
10
+ description: "Install configured artifacts to target directories",
11
+ },
12
+ args: {
13
+ force: {
14
+ type: "boolean",
15
+ alias: "f",
16
+ description: "Force reinstall even if already installed",
17
+ default: false,
18
+ },
19
+ },
20
+ async run({ args }) {
21
+ const cwd = process.cwd();
22
+ const config = await loadConfig(cwd);
23
+ 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>");
27
+ return;
28
+ }
29
+ console.log(`Installing ${config.artifacts.length} artifact(s)...\n`);
30
+ 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) {
35
+ console.log(`Invalid artifact reference: ${artifactRef}`);
36
+ continue;
37
+ }
38
+ const sourceStr = artifactRef.slice(0, lastSlash);
39
+ const artifactName = artifactRef.slice(lastSlash + 1);
40
+ const parsed = parseSource(sourceStr);
41
+ // Check if we have a lock entry
42
+ let lockEntry = lock.artifacts[artifactRef];
43
+ if (!lockEntry || args.force) {
44
+ // Need to resolve
45
+ 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);
51
+ const artifact = artifacts.find((a) => a.name === artifactName);
52
+ if (!artifact) {
53
+ console.log(` Artifact not found: ${artifactName}`);
54
+ continue;
55
+ }
56
+ // Resolve SHA
57
+ const sha = await resolveRef(repoPath, parsed.ref || "HEAD");
58
+ lockEntry = {
59
+ sha,
60
+ integrity: `sha256-${sha.slice(0, 16)}`, // Placeholder integrity
61
+ path: artifact.path,
62
+ metadata: {
63
+ name: artifact.name,
64
+ description: artifact.description,
65
+ },
66
+ };
67
+ lock.artifacts[artifactRef] = lockEntry;
68
+ updated = true;
69
+ }
70
+ // Install to target directories
71
+ const installRepoPath = getRepoPath(parsed);
72
+ const sourcePath = join(installRepoPath, lockEntry.path);
73
+ for (const targetDir of TARGET_DIRS) {
74
+ const targetPath = join(cwd, targetDir, artifactName);
75
+ try {
76
+ // Remove existing
77
+ await rm(targetPath, { recursive: true, force: true });
78
+ // Create parent directory
79
+ await mkdir(join(cwd, targetDir), { recursive: true });
80
+ // Copy skill directory
81
+ await cp(sourcePath, targetPath, { recursive: true });
82
+ console.log(` Installed: ${targetDir}/${artifactName}`);
83
+ }
84
+ catch (error) {
85
+ console.log(` Failed to install to ${targetDir}: ${error.message}`);
86
+ }
87
+ }
88
+ }
89
+ // Save lock file if updated
90
+ if (updated) {
91
+ await saveLock(cwd, lock);
92
+ console.log("\nUpdated agpm-lock.json");
93
+ }
94
+ console.log("\nDone.");
95
+ },
96
+ });
97
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const listCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,qDAyCtB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { defineCommand } from "citty";
2
+ import { loadConfig, loadLock } from "@agpm/core";
3
+ export const listCommand = defineCommand({
4
+ meta: {
5
+ name: "list",
6
+ description: "List configured artifacts and their status",
7
+ },
8
+ async run() {
9
+ const cwd = process.cwd();
10
+ const config = await loadConfig(cwd);
11
+ const lock = await loadLock(cwd);
12
+ if (config.artifacts.length === 0) {
13
+ console.log("No artifacts configured.");
14
+ console.log("\nAdd artifacts with: agpm add <source> <artifact>");
15
+ return;
16
+ }
17
+ console.log("Configured artifacts:\n");
18
+ for (const artifactRef of config.artifacts) {
19
+ const lockEntry = lock.artifacts[artifactRef];
20
+ console.log(` ${artifactRef}`);
21
+ if (lockEntry) {
22
+ console.log(` SHA: ${lockEntry.sha.slice(0, 8)}`);
23
+ console.log(` Path: ${lockEntry.path}`);
24
+ if (lockEntry.metadata.description) {
25
+ const desc = lockEntry.metadata.description.length > 60
26
+ ? lockEntry.metadata.description.slice(0, 57) + "..."
27
+ : lockEntry.metadata.description;
28
+ console.log(` ${desc}`);
29
+ }
30
+ }
31
+ else {
32
+ console.log(` (not installed)`);
33
+ }
34
+ console.log();
35
+ }
36
+ console.log(`${config.artifacts.length} artifact(s) configured`);
37
+ },
38
+ });
39
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,4CAA4C;KAC1D;IACD,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAE9C,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;YAEhC,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3C,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM,IAAI,GACR,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE;wBACxC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;wBACrD,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,yBAAyB,CAAC,CAAC;IACnE,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const removeCommand: import("citty").CommandDef<{
2
+ artifact: {
3
+ type: "positional";
4
+ description: string;
5
+ required: true;
6
+ };
7
+ keepFiles: {
8
+ type: "boolean";
9
+ alias: string;
10
+ description: string;
11
+ default: false;
12
+ };
13
+ }>;
14
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa;;;;;;;;;;;;EAmExB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { defineCommand } from "citty";
2
+ import { rm } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { loadConfig, saveConfig, loadLock, saveLock } from "@agpm/core";
5
+ // Target directories to clean up
6
+ const TARGET_DIRS = [".claude/skills", ".opencode/skills", ".codex/skills"];
7
+ export const removeCommand = defineCommand({
8
+ meta: {
9
+ name: "remove",
10
+ description: "Remove an artifact from the project",
11
+ },
12
+ args: {
13
+ artifact: {
14
+ type: "positional",
15
+ description: "Artifact to remove (name or full reference)",
16
+ required: true,
17
+ },
18
+ keepFiles: {
19
+ type: "boolean",
20
+ alias: "k",
21
+ description: "Keep installed files (only remove from config)",
22
+ default: false,
23
+ },
24
+ },
25
+ async run({ args }) {
26
+ const cwd = process.cwd();
27
+ const config = await loadConfig(cwd);
28
+ const lock = await loadLock(cwd);
29
+ // Find the artifact (match by name or full reference)
30
+ const artifactRef = config.artifacts.find((ref) => ref === args.artifact ||
31
+ ref.endsWith(`/${args.artifact}`));
32
+ if (!artifactRef) {
33
+ console.log(`Artifact not found: ${args.artifact}`);
34
+ console.log("\nConfigured artifacts:");
35
+ for (const ref of config.artifacts) {
36
+ console.log(` - ${ref}`);
37
+ }
38
+ return;
39
+ }
40
+ // Get artifact name from reference
41
+ const artifactName = artifactRef.slice(artifactRef.lastIndexOf("/") + 1);
42
+ // Remove from config
43
+ config.artifacts = config.artifacts.filter((ref) => ref !== artifactRef);
44
+ await saveConfig(cwd, config);
45
+ // Remove from lock
46
+ if (lock.artifacts[artifactRef]) {
47
+ delete lock.artifacts[artifactRef];
48
+ await saveLock(cwd, lock);
49
+ }
50
+ console.log(`Removed: ${artifactRef}`);
51
+ // Clean up files unless keepFiles is set
52
+ if (!args.keepFiles) {
53
+ for (const targetDir of TARGET_DIRS) {
54
+ const targetPath = join(cwd, targetDir, artifactName);
55
+ try {
56
+ await rm(targetPath, { recursive: true, force: true });
57
+ console.log(` Deleted: ${targetDir}/${artifactName}`);
58
+ }
59
+ catch {
60
+ // Directory doesn't exist, that's fine
61
+ }
62
+ }
63
+ }
64
+ },
65
+ });
66
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const sourceCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"AAsJA,eAAO,MAAM,aAAa,qDAWxB,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { defineCommand } from "citty";
2
+ import { loadConfig, saveConfig, parseSource, ensureRepo, getRepoPath, detectFormat, discoverArtifacts } from "@agpm/core";
3
+ const addCommand = defineCommand({
4
+ meta: {
5
+ name: "add",
6
+ description: "Add a source to the project",
7
+ },
8
+ args: {
9
+ source: {
10
+ type: "positional",
11
+ description: "Source reference (owner/repo, URL, or local path)",
12
+ required: true,
13
+ },
14
+ },
15
+ async run({ args }) {
16
+ const cwd = process.cwd();
17
+ const config = await loadConfig(cwd);
18
+ // Parse and validate the source
19
+ const parsed = parseSource(args.source);
20
+ console.log(`Adding source: ${parsed.original}`);
21
+ // Check if already added
22
+ if (config.sources.includes(args.source)) {
23
+ console.log("Source already exists in config");
24
+ return;
25
+ }
26
+ // Clone/fetch the repo to validate it exists
27
+ console.log(`Fetching ${parsed.url}...`);
28
+ const repo = await ensureRepo(parsed);
29
+ console.log(`Cloned to ${repo.path} (${repo.sha.slice(0, 8)})`);
30
+ // Add to config
31
+ config.sources.push(args.source);
32
+ await saveConfig(cwd, config);
33
+ console.log(`Added source: ${args.source}`);
34
+ },
35
+ });
36
+ const listCommand = defineCommand({
37
+ meta: {
38
+ name: "list",
39
+ description: "List configured sources",
40
+ },
41
+ async run() {
42
+ const cwd = process.cwd();
43
+ const config = await loadConfig(cwd);
44
+ if (config.sources.length === 0) {
45
+ console.log("No sources configured");
46
+ console.log("\nAdd a source with: agpm source add <repo>");
47
+ return;
48
+ }
49
+ console.log("Configured sources:\n");
50
+ 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}`);
55
+ }
56
+ }
57
+ },
58
+ });
59
+ const removeCommand = defineCommand({
60
+ meta: {
61
+ name: "remove",
62
+ description: "Remove a source from the project",
63
+ },
64
+ args: {
65
+ source: {
66
+ type: "positional",
67
+ description: "Source to remove",
68
+ required: true,
69
+ },
70
+ },
71
+ async run({ args }) {
72
+ const cwd = process.cwd();
73
+ const config = await loadConfig(cwd);
74
+ const index = config.sources.indexOf(args.source);
75
+ if (index === -1) {
76
+ console.log(`Source not found: ${args.source}`);
77
+ return;
78
+ }
79
+ config.sources.splice(index, 1);
80
+ await saveConfig(cwd, config);
81
+ console.log(`Removed source: ${args.source}`);
82
+ },
83
+ });
84
+ const discoverCommand = defineCommand({
85
+ meta: {
86
+ name: "discover",
87
+ description: "Discover artifacts in a source",
88
+ },
89
+ args: {
90
+ source: {
91
+ type: "positional",
92
+ description: "Source to discover artifacts in",
93
+ required: true,
94
+ },
95
+ },
96
+ async run({ args }) {
97
+ const parsed = parseSource(args.source);
98
+ const repoPath = getRepoPath(parsed);
99
+ // Ensure repo is cloned
100
+ console.log(`Checking ${parsed.original}...`);
101
+ await ensureRepo(parsed);
102
+ // Detect format
103
+ const format = await detectFormat(repoPath);
104
+ console.log(`Format: ${format}\n`);
105
+ if (format === "unknown") {
106
+ console.log("Unknown format - no .claude-plugin/marketplace.json or skills/ directory found");
107
+ return;
108
+ }
109
+ // Discover artifacts
110
+ const artifacts = await discoverArtifacts(repoPath, parsed.subpath);
111
+ if (artifacts.length === 0) {
112
+ console.log("No artifacts found");
113
+ return;
114
+ }
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}`);
124
+ }
125
+ console.log(` path: ${artifact.path}`);
126
+ console.log();
127
+ }
128
+ },
129
+ });
130
+ export const sourceCommand = defineCommand({
131
+ meta: {
132
+ name: "source",
133
+ description: "Manage artifact sources",
134
+ },
135
+ subCommands: {
136
+ add: addCommand,
137
+ list: listCommand,
138
+ remove: removeCommand,
139
+ discover: discoverCommand,
140
+ },
141
+ });
142
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const updateCommand: import("citty").CommandDef<{
2
+ artifact: {
3
+ type: "positional";
4
+ description: string;
5
+ required: false;
6
+ };
7
+ }>;
8
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa;;;;;;EAmGxB,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { defineCommand } from "citty";
2
+ import { loadConfig, loadLock, saveLock, parseSource, ensureRepo, getRepoPath, discoverArtifacts, resolveRef, } from "@agpm/core";
3
+ export const updateCommand = defineCommand({
4
+ meta: {
5
+ name: "update",
6
+ description: "Update artifacts to latest versions",
7
+ },
8
+ args: {
9
+ artifact: {
10
+ type: "positional",
11
+ description: "Specific artifact to update (optional, updates all if not specified)",
12
+ required: false,
13
+ },
14
+ },
15
+ async run({ args }) {
16
+ const cwd = process.cwd();
17
+ const config = await loadConfig(cwd);
18
+ const lock = await loadLock(cwd);
19
+ if (config.artifacts.length === 0) {
20
+ console.log("No artifacts configured.");
21
+ return;
22
+ }
23
+ // Filter to specific artifact if provided
24
+ let artifactsToUpdate = config.artifacts;
25
+ if (args.artifact) {
26
+ artifactsToUpdate = config.artifacts.filter((ref) => ref === args.artifact ||
27
+ ref.endsWith(`/${args.artifact}`));
28
+ if (artifactsToUpdate.length === 0) {
29
+ console.log(`Artifact not found: ${args.artifact}`);
30
+ return;
31
+ }
32
+ }
33
+ console.log(`Updating ${artifactsToUpdate.length} artifact(s)...\n`);
34
+ let updated = 0;
35
+ 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);
41
+ console.log(`Checking ${artifactRef}...`);
42
+ // Fetch latest
43
+ await ensureRepo(parsed);
44
+ const repoPath = getRepoPath(parsed);
45
+ // Resolve latest SHA
46
+ const latestSha = await resolveRef(repoPath, parsed.ref || "HEAD");
47
+ // Check if update needed
48
+ const lockEntry = lock.artifacts[artifactRef];
49
+ if (lockEntry && lockEntry.sha === latestSha) {
50
+ console.log(` Already up to date (${latestSha.slice(0, 8)})`);
51
+ continue;
52
+ }
53
+ // Discover to get path
54
+ const artifacts = await discoverArtifacts(repoPath, parsed.subpath);
55
+ const artifact = artifacts.find((a) => a.name === artifactName);
56
+ if (!artifact) {
57
+ console.log(` Artifact not found in source`);
58
+ continue;
59
+ }
60
+ const oldSha = lockEntry?.sha?.slice(0, 8) || "none";
61
+ // Update lock
62
+ lock.artifacts[artifactRef] = {
63
+ sha: latestSha,
64
+ integrity: `sha256-${latestSha.slice(0, 16)}`,
65
+ path: artifact.path,
66
+ metadata: {
67
+ name: artifact.name,
68
+ description: artifact.description,
69
+ },
70
+ };
71
+ console.log(` Updated: ${oldSha} -> ${latestSha.slice(0, 8)}`);
72
+ updated++;
73
+ }
74
+ if (updated > 0) {
75
+ await saveLock(cwd, lock);
76
+ console.log(`\nUpdated ${updated} artifact(s) in agpm-lock.json`);
77
+ console.log("Run `agpm install` to apply updates.");
78
+ }
79
+ else {
80
+ console.log("\nAll artifacts are up to date.");
81
+ }
82
+ },
83
+ });
84
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import { defineCommand, runMain } from "citty";
3
+ import { sourceCommand } from "./commands/source.js";
4
+ import { addCommand } from "./commands/add.js";
5
+ import { installCommand } from "./commands/install.js";
6
+ import { listCommand } from "./commands/list.js";
7
+ import { removeCommand } from "./commands/remove.js";
8
+ import { updateCommand } from "./commands/update.js";
9
+ // Sync is an alias for install
10
+ const syncCommand = defineCommand({
11
+ meta: {
12
+ name: "sync",
13
+ description: "Sync artifacts (alias for install)",
14
+ },
15
+ args: installCommand.args,
16
+ run: installCommand.run,
17
+ });
18
+ const main = defineCommand({
19
+ meta: {
20
+ name: "agpm",
21
+ version: "0.0.1",
22
+ description: "Agent Package Manager - Universal package manager for AI coding tool artifacts",
23
+ },
24
+ subCommands: {
25
+ source: sourceCommand,
26
+ add: addCommand,
27
+ install: installCommand,
28
+ sync: syncCommand,
29
+ list: listCommand,
30
+ remove: removeCommand,
31
+ update: updateCommand,
32
+ },
33
+ });
34
+ runMain(main);
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,+BAA+B;AAC/B,MAAM,WAAW,GAAG,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,oCAAoC;KAClD;IACD,IAAI,EAAE,cAAc,CAAC,IAAI;IACzB,GAAG,EAAE,cAAc,CAAC,GAAG;CACxB,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,gFAAgF;KAC9F;IACD,WAAW,EAAE;QACX,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;KACtB;CACF,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@agpm/cli",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "bin": {
6
+ "agpm": "./dist/index.js"
7
+ },
8
+ "files": ["dist"],
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsx src/index.ts",
12
+ "typecheck": "tsc --noEmit"
13
+ },
14
+ "dependencies": {
15
+ "@agpm/core": "workspace:*",
16
+ "citty": "^0.1.6"
17
+ },
18
+ "devDependencies": {
19
+ "tsx": "^4.19.4",
20
+ "typescript": "^5.7.0"
21
+ }
22
+ }