@agentpowers/cli 0.3.0 → 0.4.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/cli.js +10 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/install.d.ts +8 -1
- package/dist/commands/install.js +113 -11
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/update.d.ts +4 -2
- package/dist/commands/update.js +120 -19
- package/dist/commands/update.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -41,8 +41,12 @@ program
|
|
|
41
41
|
program
|
|
42
42
|
.command("install <slug>")
|
|
43
43
|
.description("Install a skill by its slug")
|
|
44
|
-
.
|
|
45
|
-
|
|
44
|
+
.option("--code <code>", "License code for paid skills")
|
|
45
|
+
.option("--source <source>", "External source (e.g. clawhub)")
|
|
46
|
+
.option("--global", "Install to the global config directory")
|
|
47
|
+
.option("--for <tool>", "Target AI tool (claude-code, codex, gemini, kiro)", "claude-code")
|
|
48
|
+
.action(async (slug, options) => {
|
|
49
|
+
await installCommand(slug, options);
|
|
46
50
|
});
|
|
47
51
|
program
|
|
48
52
|
.command("uninstall <slug>")
|
|
@@ -83,10 +87,11 @@ program
|
|
|
83
87
|
await setupCommand();
|
|
84
88
|
});
|
|
85
89
|
program
|
|
86
|
-
.command("update")
|
|
90
|
+
.command("update [slug]")
|
|
87
91
|
.description("Check for and install updates to installed skills")
|
|
88
|
-
.
|
|
89
|
-
|
|
92
|
+
.option("-f, --force", "Skip confirmation for locally edited skills")
|
|
93
|
+
.action(async (slug, options) => {
|
|
94
|
+
await updateCommand(slug, options);
|
|
90
95
|
});
|
|
91
96
|
program
|
|
92
97
|
.command("status")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,wEAAwE;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,kFAAkF,CAAC;KAC/F,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;KAC9D,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAAO,EAAE,EAAE;IACvC,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
/** Install command — download and install a skill from the marketplace. */
|
|
2
|
-
|
|
2
|
+
interface InstallOptions {
|
|
3
|
+
code?: string;
|
|
4
|
+
source?: string;
|
|
5
|
+
global?: boolean;
|
|
6
|
+
for?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function installCommand(slug: string, options?: InstallOptions): Promise<void>;
|
|
9
|
+
export {};
|
package/dist/commands/install.js
CHANGED
|
@@ -1,27 +1,129 @@
|
|
|
1
1
|
/** Install command — download and install a skill from the marketplace. */
|
|
2
2
|
import { hostname } from "node:os";
|
|
3
3
|
import { loadAuthToken } from "../auth.js";
|
|
4
|
-
import { apiGet, recordInstallation, APIError, formatAPIError, NetworkError, } from "../api-client.js";
|
|
4
|
+
import { apiGet, apiPost, recordInstallation, APIError, formatAPIError, NetworkError, } from "../api-client.js";
|
|
5
5
|
import { downloadAndExtract, validateSlug } from "../installer.js";
|
|
6
|
-
|
|
6
|
+
import { TOOL_CONFIG_DIRS } from "@agentpowers/core";
|
|
7
|
+
/** Coerce a detail type string to PackageType, defaulting to "skill". */
|
|
8
|
+
function toPackageType(raw) {
|
|
9
|
+
if (raw === "agent")
|
|
10
|
+
return "agent";
|
|
11
|
+
return "skill";
|
|
12
|
+
}
|
|
13
|
+
export async function installCommand(slug, options) {
|
|
7
14
|
// Validate slug format
|
|
8
15
|
if (!validateSlug(slug)) {
|
|
9
16
|
console.error(`Error: Invalid slug "${slug}". Slugs must be lowercase alphanumeric with hyphens only.`);
|
|
10
17
|
process.exitCode = 1;
|
|
11
18
|
return;
|
|
12
19
|
}
|
|
20
|
+
const targetTool = options?.for ?? "claude-code";
|
|
21
|
+
// Validate target tool
|
|
22
|
+
if (!(targetTool in TOOL_CONFIG_DIRS)) {
|
|
23
|
+
const supported = Object.keys(TOOL_CONFIG_DIRS).sort().join(", ");
|
|
24
|
+
console.error(`Error: Unknown tool "${targetTool}". Supported tools: ${supported}`);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
13
28
|
const token = loadAuthToken();
|
|
29
|
+
const source = options?.source;
|
|
14
30
|
try {
|
|
31
|
+
// --code: redeem license code before downloading
|
|
32
|
+
if (options?.code) {
|
|
33
|
+
if (!token) {
|
|
34
|
+
console.error("Error: Authentication required to redeem a license code. Run `npx @agentpowers/cli login` first.");
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log("Redeeming license code...");
|
|
39
|
+
await apiPost("/v1/purchases/redeem", { license_code: options.code }, token);
|
|
40
|
+
console.log("License code redeemed.");
|
|
41
|
+
}
|
|
42
|
+
// --source: install from a specific external source
|
|
43
|
+
if (source) {
|
|
44
|
+
console.log(`Fetching ${slug} from ${source}...`);
|
|
45
|
+
const detail = await apiGet(`/v1/detail/${encodeURIComponent(slug)}`, { source }, token);
|
|
46
|
+
const downloadUrl = detail.source_url;
|
|
47
|
+
if (!downloadUrl) {
|
|
48
|
+
console.error(`Error: No download URL available for "${slug}" from source "${source}".`);
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const result = await downloadAndExtract(downloadUrl, slug, toPackageType(detail.type), source, detail.version ?? null, detail.security_status ?? "pass", targetTool);
|
|
53
|
+
console.log(`Installed ${slug} to ${result.installDir}`);
|
|
54
|
+
console.log(`Content hash: ${result.contentHash}`);
|
|
55
|
+
void recordInstallation(slug, "cli", source, hostname(), token);
|
|
56
|
+
console.log("\nThe skill is now available.");
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Default flow: try native AgentPowers first
|
|
15
60
|
console.log(`Downloading ${slug}...`);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
61
|
+
let downloadData = null;
|
|
62
|
+
let nativeError = null;
|
|
63
|
+
try {
|
|
64
|
+
downloadData = await apiGet(`/v1/skills/${encodeURIComponent(slug)}/download`, undefined, token);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err instanceof APIError && err.statusCode === 404) {
|
|
68
|
+
nativeError = err;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Found natively — download and install
|
|
75
|
+
if (downloadData) {
|
|
76
|
+
const result = await downloadAndExtract(downloadData.url, slug, "skill", "agentpowers", null, "pass", targetTool);
|
|
77
|
+
console.log(`Installed ${slug} to ${result.installDir}`);
|
|
78
|
+
console.log(`Content hash: ${result.contentHash}`);
|
|
79
|
+
void recordInstallation(slug, "cli", "agentpowers", hostname(), token);
|
|
80
|
+
console.log("\nThe skill is now available.");
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Not found natively — try unified detail endpoint for external sources
|
|
84
|
+
if (nativeError) {
|
|
85
|
+
console.log("Not found in AgentPowers, searching other sources...");
|
|
86
|
+
let detail = null;
|
|
87
|
+
try {
|
|
88
|
+
detail = await apiGet(`/v1/detail/${encodeURIComponent(slug)}`, undefined, token);
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
if (err instanceof APIError && err.statusCode === 404) {
|
|
92
|
+
detail = null;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (detail && detail.source && detail.source !== "agentpowers") {
|
|
99
|
+
const detailSource = detail.source;
|
|
100
|
+
const downloadUrl = detail.source_url;
|
|
101
|
+
if (!downloadUrl) {
|
|
102
|
+
console.error(`Error: No download URL available for "${slug}" from source "${detailSource}".`);
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
console.log(`Found on ${detailSource}: ${detail.title ?? slug} (v${detail.version ?? "?"})`);
|
|
107
|
+
const result = await downloadAndExtract(downloadUrl, slug, toPackageType(detail.type), detailSource, detail.version ?? null, detail.security_status ?? "pass", targetTool);
|
|
108
|
+
console.log(`Installed ${slug} to ${result.installDir}`);
|
|
109
|
+
console.log(`Content hash: ${result.contentHash}`);
|
|
110
|
+
void recordInstallation(slug, "cli", detailSource, hostname(), token);
|
|
111
|
+
console.log("\nThe skill is now available.");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// If detail returned a native result, try downloading it
|
|
115
|
+
if (detail && (!detail.source || detail.source === "agentpowers")) {
|
|
116
|
+
const nativeDownload = await apiGet(`/v1/skills/${encodeURIComponent(slug)}/download`, undefined, token);
|
|
117
|
+
const result = await downloadAndExtract(nativeDownload.url, slug, toPackageType(detail.type), "agentpowers", null, detail.security_status ?? "pass", targetTool);
|
|
118
|
+
console.log(`Installed ${slug} to ${result.installDir}`);
|
|
119
|
+
console.log(`Content hash: ${result.contentHash}`);
|
|
120
|
+
void recordInstallation(slug, "cli", "agentpowers", hostname(), token);
|
|
121
|
+
console.log("\nThe skill is now available.");
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
console.error(`Error: Skill "${slug}" not found in any source.`);
|
|
125
|
+
process.exitCode = 1;
|
|
126
|
+
}
|
|
25
127
|
}
|
|
26
128
|
catch (err) {
|
|
27
129
|
if (err instanceof APIError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
/** Update command — check for and install updates to
|
|
2
|
-
export declare function updateCommand(
|
|
1
|
+
/** Update command — check for and install updates to installed skills. */
|
|
2
|
+
export declare function updateCommand(slug?: string, options?: {
|
|
3
|
+
force?: boolean;
|
|
4
|
+
}): Promise<void>;
|
package/dist/commands/update.js
CHANGED
|
@@ -1,10 +1,101 @@
|
|
|
1
|
-
/** Update command — check for and install updates to
|
|
1
|
+
/** Update command — check for and install updates to installed skills. */
|
|
2
2
|
import { hostname } from "node:os";
|
|
3
3
|
import { loadAuthToken } from "../auth.js";
|
|
4
4
|
import { apiGet, recordInstallation, APIError, NetworkError, } from "../api-client.js";
|
|
5
|
-
import { downloadAndExtract, getInstallDir } from "../installer.js";
|
|
5
|
+
import { downloadAndExtract, getInstallDir, validateSlug } from "../installer.js";
|
|
6
6
|
import { loadPins, hashDirectory, isDirectory } from "@agentpowers/core";
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Update a single skill by slug.
|
|
9
|
+
*/
|
|
10
|
+
async function updateSingle(slug, force) {
|
|
11
|
+
const pins = loadPins();
|
|
12
|
+
const pin = pins[slug];
|
|
13
|
+
if (!pin) {
|
|
14
|
+
console.error(`'${slug}' is not installed. Run \`npx @agentpowers/cli install ${slug}\` first.`);
|
|
15
|
+
process.exitCode = 1;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const type = pin.type ?? "skill";
|
|
19
|
+
const installDir = getInstallDir(slug, type);
|
|
20
|
+
const token = loadAuthToken();
|
|
21
|
+
// Check if locally edited
|
|
22
|
+
let isEdited = false;
|
|
23
|
+
if (isDirectory(installDir)) {
|
|
24
|
+
try {
|
|
25
|
+
const currentHash = hashDirectory(installDir);
|
|
26
|
+
isEdited = currentHash !== pin.content_hash;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// If we can't hash, treat as not edited
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Fetch latest version from API
|
|
33
|
+
let detail;
|
|
34
|
+
try {
|
|
35
|
+
const params = {};
|
|
36
|
+
if (pin.source !== "agentpowers")
|
|
37
|
+
params.source = pin.source;
|
|
38
|
+
detail = await apiGet(`/v1/detail/${encodeURIComponent(slug)}`, params);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err instanceof APIError && err.statusCode === 404) {
|
|
42
|
+
console.error(`'${slug}' not found on server (may have been unpublished).`);
|
|
43
|
+
}
|
|
44
|
+
else if (err instanceof NetworkError) {
|
|
45
|
+
console.error(`${slug}: ${err.message}`);
|
|
46
|
+
}
|
|
47
|
+
else if (err instanceof Error) {
|
|
48
|
+
console.error(`${slug}: ${err.message}`);
|
|
49
|
+
}
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const latestVersion = detail.version;
|
|
54
|
+
// Compare versions
|
|
55
|
+
if (!latestVersion || latestVersion === pin.version) {
|
|
56
|
+
if (isEdited && !force) {
|
|
57
|
+
console.log(`${slug} is up to date (v${pin.version ?? "unknown"}) but locally edited.`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
console.log(`${slug} is already up to date (v${pin.version ?? "unknown"}).`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Update available — check for local edits
|
|
64
|
+
if (isEdited && !force) {
|
|
65
|
+
console.log(`${slug}: locally edited — ${pin.version ?? "unknown"} -> ${latestVersion} available but skipped.`);
|
|
66
|
+
console.log("Use --force to update anyway (local changes will be overwritten).");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Download and install
|
|
70
|
+
try {
|
|
71
|
+
const label = isEdited ? "Force updating" : "Updating";
|
|
72
|
+
console.log(` ${label} ${slug}: ${pin.version ?? "unknown"} -> ${latestVersion}...`);
|
|
73
|
+
const downloadData = await apiGet(`/v1/skills/${encodeURIComponent(slug)}/download`, undefined, token);
|
|
74
|
+
await downloadAndExtract(downloadData.url, slug, type, pin.source, latestVersion, detail.security_status ?? "pass");
|
|
75
|
+
console.log(` [ok] ${slug} updated to ${latestVersion}.`);
|
|
76
|
+
// Record installation (fire-and-forget)
|
|
77
|
+
void recordInstallation(slug, "cli", pin.source, hostname(), token);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
if (err instanceof Error) {
|
|
81
|
+
console.error(` [!] ${slug}: Update failed — ${err.message}`);
|
|
82
|
+
}
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function updateCommand(slug, options) {
|
|
87
|
+
const force = options?.force ?? false;
|
|
88
|
+
// Single-slug mode
|
|
89
|
+
if (slug) {
|
|
90
|
+
if (!validateSlug(slug)) {
|
|
91
|
+
console.error(`Error: Invalid slug "${slug}". Slugs must be lowercase alphanumeric with hyphens only.`);
|
|
92
|
+
process.exitCode = 1;
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
await updateSingle(slug, force);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Update-all mode
|
|
8
99
|
const pins = loadPins();
|
|
9
100
|
const slugs = Object.keys(pins);
|
|
10
101
|
if (slugs.length === 0) {
|
|
@@ -15,11 +106,12 @@ export async function updateCommand() {
|
|
|
15
106
|
let updated = 0;
|
|
16
107
|
let current = 0;
|
|
17
108
|
let skipped = 0;
|
|
109
|
+
let forced = 0;
|
|
18
110
|
let errored = 0;
|
|
19
|
-
for (const
|
|
20
|
-
const pin = pins[
|
|
111
|
+
for (const pinSlug of slugs) {
|
|
112
|
+
const pin = pins[pinSlug];
|
|
21
113
|
const type = pin.type ?? "skill";
|
|
22
|
-
const installDir = getInstallDir(
|
|
114
|
+
const installDir = getInstallDir(pinSlug, type);
|
|
23
115
|
// Check if locally edited
|
|
24
116
|
let isEdited = false;
|
|
25
117
|
if (isDirectory(installDir)) {
|
|
@@ -37,18 +129,18 @@ export async function updateCommand() {
|
|
|
37
129
|
const params = {};
|
|
38
130
|
if (pin.source !== "agentpowers")
|
|
39
131
|
params.source = pin.source;
|
|
40
|
-
detail = await apiGet(`/v1/detail/${encodeURIComponent(
|
|
132
|
+
detail = await apiGet(`/v1/detail/${encodeURIComponent(pinSlug)}`, params);
|
|
41
133
|
}
|
|
42
134
|
catch (err) {
|
|
43
135
|
errored++;
|
|
44
136
|
if (err instanceof APIError && err.statusCode === 404) {
|
|
45
|
-
console.error(` [!] ${
|
|
137
|
+
console.error(` [!] ${pinSlug}: Not found on server (may have been unpublished).`);
|
|
46
138
|
}
|
|
47
139
|
else if (err instanceof NetworkError) {
|
|
48
|
-
console.error(` [!] ${
|
|
140
|
+
console.error(` [!] ${pinSlug}: ${err.message}`);
|
|
49
141
|
}
|
|
50
142
|
else if (err instanceof Error) {
|
|
51
|
-
console.error(` [!] ${
|
|
143
|
+
console.error(` [!] ${pinSlug}: ${err.message}`);
|
|
52
144
|
}
|
|
53
145
|
continue;
|
|
54
146
|
}
|
|
@@ -59,25 +151,32 @@ export async function updateCommand() {
|
|
|
59
151
|
continue;
|
|
60
152
|
}
|
|
61
153
|
// Update available
|
|
62
|
-
if (isEdited) {
|
|
154
|
+
if (isEdited && !force) {
|
|
63
155
|
skipped++;
|
|
64
|
-
console.log(` [skip] ${
|
|
156
|
+
console.log(` [skip] ${pinSlug}: locally edited — ${pin.version ?? "unknown"} -> ${latestVersion} available but skipped.`);
|
|
65
157
|
continue;
|
|
66
158
|
}
|
|
67
159
|
// Download and install
|
|
68
160
|
try {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
161
|
+
const label = isEdited ? "Force updating" : "Updating";
|
|
162
|
+
console.log(` ${label} ${pinSlug}: ${pin.version ?? "unknown"} -> ${latestVersion}...`);
|
|
163
|
+
const downloadData = await apiGet(`/v1/skills/${encodeURIComponent(pinSlug)}/download`, undefined, token);
|
|
164
|
+
await downloadAndExtract(downloadData.url, pinSlug, type, pin.source, latestVersion, detail.security_status ?? "pass");
|
|
165
|
+
if (isEdited) {
|
|
166
|
+
forced++;
|
|
167
|
+
console.log(` [ok] ${pinSlug} force-updated to ${latestVersion}.`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
updated++;
|
|
171
|
+
console.log(` [ok] ${pinSlug} updated to ${latestVersion}.`);
|
|
172
|
+
}
|
|
74
173
|
// Record installation (fire-and-forget)
|
|
75
|
-
void recordInstallation(
|
|
174
|
+
void recordInstallation(pinSlug, "cli", pin.source, hostname(), token);
|
|
76
175
|
}
|
|
77
176
|
catch (err) {
|
|
78
177
|
errored++;
|
|
79
178
|
if (err instanceof Error) {
|
|
80
|
-
console.error(` [!] ${
|
|
179
|
+
console.error(` [!] ${pinSlug}: Update failed — ${err.message}`);
|
|
81
180
|
}
|
|
82
181
|
}
|
|
83
182
|
}
|
|
@@ -86,6 +185,8 @@ export async function updateCommand() {
|
|
|
86
185
|
const parts = [];
|
|
87
186
|
if (updated > 0)
|
|
88
187
|
parts.push(`${updated} updated`);
|
|
188
|
+
if (forced > 0)
|
|
189
|
+
parts.push(`${forced} force-updated`);
|
|
89
190
|
if (current > 0)
|
|
90
191
|
parts.push(`${current} already current`);
|
|
91
192
|
if (skipped > 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|