@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.
- package/dist/commands/add.d.ts +13 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +92 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/install.d.ts +9 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +97 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +39 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/remove.d.ts +14 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +66 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/source.d.ts +2 -0
- package/dist/commands/source.d.ts.map +1 -0
- package/dist/commands/source.js +142 -0
- package/dist/commands/source.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +84 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/package.json +22 -0
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|