@agentpowers/cli 0.5.1 → 0.6.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/banner.d.ts +2 -0
- package/dist/banner.js +33 -0
- package/dist/banner.js.map +1 -0
- package/dist/cli.js +14 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/detail.js +66 -33
- package/dist/commands/detail.js.map +1 -1
- package/dist/commands/install.js +26 -27
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.js +10 -7
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +2 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/profile.js +25 -16
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/prune.d.ts +4 -0
- package/dist/commands/prune.js +60 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/commands/publish.js +28 -19
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/republish.js +26 -18
- package/dist/commands/republish.js.map +1 -1
- package/dist/commands/scan.js +38 -28
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/search.js +5 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/setup.js +14 -12
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.js +31 -33
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.js +8 -4
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/unpublish.js +16 -11
- package/dist/commands/unpublish.js.map +1 -1
- package/dist/commands/update.js +89 -49
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/verify.js +5 -5
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/whoami.js +11 -6
- package/dist/commands/whoami.js.map +1 -1
- package/dist/formatters.d.ts +26 -1
- package/dist/formatters.js +207 -37
- package/dist/formatters.js.map +1 -1
- package/package.json +2 -1
package/dist/commands/profile.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/** Profile command — view or edit user profile. */
|
|
2
2
|
import { createInterface } from "node:readline/promises";
|
|
3
3
|
import { stdin, stdout } from "node:process";
|
|
4
|
+
import chalk from "chalk";
|
|
4
5
|
import { apiGet, apiPatch, APIError, formatAPIError, NetworkError } from "../api-client.js";
|
|
5
6
|
import { loadAuthToken } from "../auth.js";
|
|
7
|
+
import { formatError, formatSuccess, writeStatus, clearStatus } from "../formatters.js";
|
|
6
8
|
export async function profileCommand(options = {}) {
|
|
7
9
|
const token = loadAuthToken();
|
|
8
10
|
if (!token) {
|
|
9
|
-
console.error("
|
|
11
|
+
console.error(formatError("Not logged in. Run `npx @agentpowers/cli login` first."));
|
|
10
12
|
process.exitCode = 1;
|
|
11
13
|
return;
|
|
12
14
|
}
|
|
@@ -19,16 +21,17 @@ export async function profileCommand(options = {}) {
|
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
catch (err) {
|
|
24
|
+
clearStatus();
|
|
22
25
|
if (err instanceof APIError && err.statusCode === 401) {
|
|
23
|
-
console.error("
|
|
26
|
+
console.error(formatError("Not logged in. Run `npx @agentpowers/cli login` first."));
|
|
24
27
|
process.exitCode = 1;
|
|
25
28
|
}
|
|
26
29
|
else if (err instanceof APIError) {
|
|
27
|
-
console.error(
|
|
30
|
+
console.error(formatError(formatAPIError(err)));
|
|
28
31
|
process.exitCode = 1;
|
|
29
32
|
}
|
|
30
33
|
else if (err instanceof NetworkError) {
|
|
31
|
-
console.error(
|
|
34
|
+
console.error(formatError(err.message));
|
|
32
35
|
process.exitCode = 1;
|
|
33
36
|
}
|
|
34
37
|
else {
|
|
@@ -37,24 +40,28 @@ export async function profileCommand(options = {}) {
|
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
42
|
async function viewProfile(token) {
|
|
43
|
+
writeStatus("Fetching profile...");
|
|
40
44
|
const profile = await apiGet("/v1/users/profile", {}, token);
|
|
45
|
+
clearStatus();
|
|
41
46
|
console.log("");
|
|
42
|
-
console.log(" Your Profile");
|
|
43
|
-
console.log(
|
|
47
|
+
console.log(chalk.bold(" Your Profile"));
|
|
48
|
+
console.log(` ${"─".repeat(12)}`);
|
|
44
49
|
console.log("");
|
|
45
|
-
console.log(` Display Name: ${profile.display_name || "(not set)"}`);
|
|
46
|
-
console.log(` Email: ${profile.email || "(not set)"}`);
|
|
47
|
-
console.log(` Bio: ${profile.bio || "(not set)"}`);
|
|
48
|
-
console.log(` Created: ${profile.created_at || "-"}`);
|
|
50
|
+
console.log(` ${chalk.bold("Display Name:")} ${profile.display_name || chalk.dim("(not set)")}`);
|
|
51
|
+
console.log(` ${chalk.bold("Email:")} ${profile.email || chalk.dim("(not set)")}`);
|
|
52
|
+
console.log(` ${chalk.bold("Bio:")} ${profile.bio || chalk.dim("(not set)")}`);
|
|
53
|
+
console.log(` ${chalk.bold("Created:")} ${profile.created_at || "-"}`);
|
|
49
54
|
console.log("");
|
|
50
55
|
if (!profile.display_name) {
|
|
51
|
-
console.log(" Tip: Set your display name with: npx @agentpowers/cli profile --set");
|
|
56
|
+
console.log(chalk.dim(" Tip: Set your display name with: npx @agentpowers/cli profile --set"));
|
|
52
57
|
console.log("");
|
|
53
58
|
}
|
|
54
59
|
}
|
|
55
60
|
async function editProfile(token) {
|
|
56
61
|
// Fetch current profile to show defaults
|
|
62
|
+
writeStatus("Fetching profile...");
|
|
57
63
|
const current = await apiGet("/v1/users/profile", {}, token);
|
|
64
|
+
clearStatus();
|
|
58
65
|
const rl = createInterface({ input: stdin, output: stdout });
|
|
59
66
|
try {
|
|
60
67
|
const defaultName = current.display_name || "";
|
|
@@ -76,16 +83,18 @@ async function editProfile(token) {
|
|
|
76
83
|
}
|
|
77
84
|
if (Object.keys(body).length === 0) {
|
|
78
85
|
console.log("");
|
|
79
|
-
console.log(" No changes made.");
|
|
86
|
+
console.log(chalk.dim(" No changes made."));
|
|
80
87
|
return;
|
|
81
88
|
}
|
|
89
|
+
writeStatus("Saving profile...");
|
|
82
90
|
const updated = await apiPatch("/v1/users/profile", body, token);
|
|
91
|
+
clearStatus();
|
|
83
92
|
console.log("");
|
|
84
|
-
console.log(" Profile updated!");
|
|
93
|
+
console.log(formatSuccess(" Profile updated!"));
|
|
85
94
|
console.log("");
|
|
86
|
-
console.log(` Display Name: ${updated.display_name || "(not set)"}`);
|
|
87
|
-
console.log(` Email: ${updated.email || "(not set)"}`);
|
|
88
|
-
console.log(` Bio: ${updated.bio || "(not set)"}`);
|
|
95
|
+
console.log(` ${chalk.bold("Display Name:")} ${updated.display_name || chalk.dim("(not set)")}`);
|
|
96
|
+
console.log(` ${chalk.bold("Email:")} ${updated.email || chalk.dim("(not set)")}`);
|
|
97
|
+
console.log(` ${chalk.bold("Bio:")} ${updated.bio || chalk.dim("(not set)")}`);
|
|
89
98
|
console.log("");
|
|
90
99
|
}
|
|
91
100
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** Prune command — remove stale pins whose install directories no longer exist. */
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { loadPins, removePin, isDirectory } from "@agentpowers/core";
|
|
4
|
+
import { getInstallDir, validateSlug } from "../installer.js";
|
|
5
|
+
import { formatSuccess } from "../formatters.js";
|
|
6
|
+
/** Normalize pin.type to "skill" | "agent". Garbage values default to "skill". */
|
|
7
|
+
function normalizePinType(raw) {
|
|
8
|
+
if (raw === "agent")
|
|
9
|
+
return "agent";
|
|
10
|
+
return "skill";
|
|
11
|
+
}
|
|
12
|
+
export async function pruneCommand(options) {
|
|
13
|
+
const dryRun = options?.dryRun ?? false;
|
|
14
|
+
const pins = loadPins();
|
|
15
|
+
const slugs = Object.keys(pins);
|
|
16
|
+
if (slugs.length === 0) {
|
|
17
|
+
console.log("No pins found -- nothing to prune.");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const stale = [];
|
|
21
|
+
for (const slug of slugs) {
|
|
22
|
+
// Skip pins with invalid slugs (path traversal protection)
|
|
23
|
+
if (!validateSlug(slug)) {
|
|
24
|
+
stale.push(slug);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const pin = pins[slug];
|
|
28
|
+
const type = normalizePinType(pin.type);
|
|
29
|
+
const installDir = getInstallDir(slug, type);
|
|
30
|
+
if (!isDirectory(installDir)) {
|
|
31
|
+
stale.push(slug);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (stale.length === 0) {
|
|
35
|
+
console.log(chalk.green("All pins are valid -- nothing to prune."));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (dryRun) {
|
|
39
|
+
console.log(`Would remove ${stale.length} stale pin(s):`);
|
|
40
|
+
for (const slug of stale) {
|
|
41
|
+
console.log(` ${chalk.dim("-")} ${chalk.cyan(slug)}`);
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
let removed = 0;
|
|
46
|
+
for (const slug of stale) {
|
|
47
|
+
if (removePin(slug)) {
|
|
48
|
+
removed++;
|
|
49
|
+
console.log(` ${chalk.red("x")} Removed stale pin: ${chalk.cyan(slug)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (removed > 0) {
|
|
53
|
+
console.log("");
|
|
54
|
+
console.log(formatSuccess(`Pruned ${removed} stale pin(s).`));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.log(chalk.dim("Pins were already cleaned up -- nothing to remove."));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/commands/prune.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,GAAuB;IAC/C,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACpC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA8B;IAC/D,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,2DAA2D;QAC3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,OAAO,gBAAgB,CAAC,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
|
package/dist/commands/publish.js
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { execSync } from "node:child_process";
|
|
5
|
+
import chalk from "chalk";
|
|
5
6
|
import { loadAuthToken } from "../auth.js";
|
|
6
7
|
import { apiPost, apiPatch, apiUpload, APIError, formatAPIError, NetworkError, } from "../api-client.js";
|
|
8
|
+
import { formatError, formatSuccess, writeStatus, clearStatus } from "../formatters.js";
|
|
7
9
|
/** Parse YAML-like frontmatter from SKILL.md content. */
|
|
8
10
|
function parseFrontmatter(content) {
|
|
9
11
|
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
@@ -61,7 +63,7 @@ export async function publishCommand(options) {
|
|
|
61
63
|
if (options.version &&
|
|
62
64
|
options.bump &&
|
|
63
65
|
options.bump !== "patch") {
|
|
64
|
-
console.error("
|
|
66
|
+
console.error(formatError("--version and --bump are mutually exclusive. Use one or the other."));
|
|
65
67
|
process.exitCode = 1;
|
|
66
68
|
return;
|
|
67
69
|
}
|
|
@@ -69,7 +71,7 @@ export async function publishCommand(options) {
|
|
|
69
71
|
if (options.price !== undefined) {
|
|
70
72
|
const priceNum = parseFloat(options.price);
|
|
71
73
|
if (isNaN(priceNum) || priceNum < 0) {
|
|
72
|
-
console.error("
|
|
74
|
+
console.error(formatError("Price must be a non-negative number (e.g. '9.99' or '0')."));
|
|
73
75
|
process.exitCode = 1;
|
|
74
76
|
return;
|
|
75
77
|
}
|
|
@@ -77,7 +79,7 @@ export async function publishCommand(options) {
|
|
|
77
79
|
// Auth check
|
|
78
80
|
const token = loadAuthToken();
|
|
79
81
|
if (!token) {
|
|
80
|
-
console.error("
|
|
82
|
+
console.error(formatError("Authentication required. Run `npx @agentpowers/cli login` first."));
|
|
81
83
|
process.exitCode = 1;
|
|
82
84
|
return;
|
|
83
85
|
}
|
|
@@ -88,7 +90,7 @@ export async function publishCommand(options) {
|
|
|
88
90
|
skillContent = readFileSync(join(dir, "SKILL.md"), "utf-8");
|
|
89
91
|
}
|
|
90
92
|
catch {
|
|
91
|
-
console.error(`
|
|
93
|
+
console.error(formatError(`No SKILL.md found in "${dir}". Create one with name/description frontmatter.`));
|
|
92
94
|
process.exitCode = 1;
|
|
93
95
|
return;
|
|
94
96
|
}
|
|
@@ -97,7 +99,7 @@ export async function publishCommand(options) {
|
|
|
97
99
|
frontmatter = parseFrontmatter(skillContent);
|
|
98
100
|
}
|
|
99
101
|
catch (err) {
|
|
100
|
-
console.error(
|
|
102
|
+
console.error(formatError(err.message));
|
|
101
103
|
process.exitCode = 1;
|
|
102
104
|
return;
|
|
103
105
|
}
|
|
@@ -107,7 +109,7 @@ export async function publishCommand(options) {
|
|
|
107
109
|
? Math.round(parseFloat(options.price) * 100)
|
|
108
110
|
: 0;
|
|
109
111
|
const bump = options.bump || "patch";
|
|
110
|
-
|
|
112
|
+
writeStatus(`Publishing "${frontmatter.name}" (${slug})...`);
|
|
111
113
|
try {
|
|
112
114
|
// Step 1: Create or update the skill listing
|
|
113
115
|
let isUpdate = false;
|
|
@@ -121,6 +123,7 @@ export async function publishCommand(options) {
|
|
|
121
123
|
price_cents: priceCents,
|
|
122
124
|
};
|
|
123
125
|
await apiPost("/v1/skills", payload, token);
|
|
126
|
+
clearStatus();
|
|
124
127
|
console.log("Created new skill listing.");
|
|
125
128
|
}
|
|
126
129
|
catch (err) {
|
|
@@ -132,7 +135,7 @@ export async function publishCommand(options) {
|
|
|
132
135
|
err.statusCode === 400 &&
|
|
133
136
|
err.code === "DISPLAY_NAME_REQUIRED") {
|
|
134
137
|
// Need to set display name first
|
|
135
|
-
|
|
138
|
+
writeStatus("Setting up your author profile...");
|
|
136
139
|
const displayName = frontmatter.name.split("-")[0] || "Author";
|
|
137
140
|
await apiPatch("/v1/users/profile", { display_name: displayName }, token);
|
|
138
141
|
// Retry skill creation
|
|
@@ -145,6 +148,7 @@ export async function publishCommand(options) {
|
|
|
145
148
|
price_cents: priceCents,
|
|
146
149
|
};
|
|
147
150
|
await apiPost("/v1/skills", payload, token);
|
|
151
|
+
clearStatus();
|
|
148
152
|
console.log("Created new skill listing.");
|
|
149
153
|
}
|
|
150
154
|
else {
|
|
@@ -153,7 +157,8 @@ export async function publishCommand(options) {
|
|
|
153
157
|
}
|
|
154
158
|
// Step 2: If updating, PATCH the skill metadata and bump version
|
|
155
159
|
if (isUpdate) {
|
|
156
|
-
|
|
160
|
+
clearStatus();
|
|
161
|
+
writeStatus("Updating skill metadata...");
|
|
157
162
|
const patchPayload = {
|
|
158
163
|
description: frontmatter.description,
|
|
159
164
|
category,
|
|
@@ -171,39 +176,43 @@ export async function publishCommand(options) {
|
|
|
171
176
|
versionPayload.bump = bump;
|
|
172
177
|
}
|
|
173
178
|
await apiPost(`/v1/skills/${encodeURIComponent(slug)}/versions`, versionPayload, token);
|
|
179
|
+
clearStatus();
|
|
174
180
|
console.log("Updated skill metadata and bumped version.");
|
|
175
181
|
}
|
|
176
182
|
// Step 3: Package and upload
|
|
177
|
-
|
|
183
|
+
writeStatus("Packaging...");
|
|
178
184
|
const zipBuffer = createZipBuffer(dir);
|
|
179
|
-
|
|
180
|
-
console.log(
|
|
185
|
+
clearStatus();
|
|
186
|
+
console.log(chalk.dim(`Package size: ${(zipBuffer.length / 1024).toFixed(1)} KB`));
|
|
187
|
+
writeStatus("Uploading...");
|
|
181
188
|
await apiUpload(`/v1/skills/${encodeURIComponent(slug)}/upload`, zipBuffer, "package.zip", undefined, token);
|
|
189
|
+
clearStatus();
|
|
182
190
|
console.log("");
|
|
183
|
-
console.log(`Published ${frontmatter.name} (${slug}) successfully.`);
|
|
184
|
-
console.log(
|
|
185
|
-
console.log(
|
|
191
|
+
console.log(formatSuccess(`Published ${frontmatter.name} (${slug}) successfully.`));
|
|
192
|
+
console.log(`${chalk.bold("View:")} https://agentpowers.ai/skills/${encodeURIComponent(slug)}`);
|
|
193
|
+
console.log(`${chalk.bold("Install:")} npx @agentpowers/cli install ${slug}`);
|
|
186
194
|
console.log("");
|
|
187
195
|
}
|
|
188
196
|
catch (err) {
|
|
197
|
+
clearStatus();
|
|
189
198
|
if (err instanceof APIError) {
|
|
190
199
|
if (err.statusCode === 401) {
|
|
191
|
-
console.error("
|
|
200
|
+
console.error(formatError("Authentication expired. Run `npx @agentpowers/cli login` to refresh."));
|
|
192
201
|
}
|
|
193
202
|
else if (err.statusCode === 403) {
|
|
194
|
-
console.error("
|
|
203
|
+
console.error(formatError("You are not the author of this skill. Only the original author can update it."));
|
|
195
204
|
}
|
|
196
205
|
else {
|
|
197
|
-
console.error(
|
|
206
|
+
console.error(formatError(formatAPIError(err)));
|
|
198
207
|
}
|
|
199
208
|
process.exitCode = 1;
|
|
200
209
|
}
|
|
201
210
|
else if (err instanceof NetworkError) {
|
|
202
|
-
console.error(
|
|
211
|
+
console.error(formatError(err.message));
|
|
203
212
|
process.exitCode = 1;
|
|
204
213
|
}
|
|
205
214
|
else if (err instanceof Error) {
|
|
206
|
-
console.error(
|
|
215
|
+
console.error(formatError(err.message));
|
|
207
216
|
process.exitCode = 1;
|
|
208
217
|
}
|
|
209
218
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +1,43 @@
|
|
|
1
1
|
/** Republish command — restore an archived skill to the marketplace. */
|
|
2
2
|
import { createInterface } from "node:readline";
|
|
3
|
+
import chalk from "chalk";
|
|
3
4
|
import { loadAuthToken } from "../auth.js";
|
|
4
5
|
import { apiGet, apiPost, APIError, formatAPIError, NetworkError, } from "../api-client.js";
|
|
5
6
|
import { validateSlug } from "../installer.js";
|
|
7
|
+
import { formatError, formatSuccess, writeStatus, clearStatus } from "../formatters.js";
|
|
6
8
|
export async function republishCommand(slug, options = {}) {
|
|
7
9
|
if (!validateSlug(slug)) {
|
|
8
|
-
console.error(`
|
|
10
|
+
console.error(formatError(`Invalid slug "${slug}". Slugs must be lowercase alphanumeric with hyphens only.`));
|
|
9
11
|
process.exitCode = 1;
|
|
10
12
|
return;
|
|
11
13
|
}
|
|
12
14
|
const token = loadAuthToken();
|
|
13
15
|
if (!token) {
|
|
14
|
-
console.error("Not logged in. Run `npx @agentpowers/cli login` first.");
|
|
16
|
+
console.error(formatError("Not logged in. Run `npx @agentpowers/cli login` first."));
|
|
15
17
|
process.exitCode = 1;
|
|
16
18
|
return;
|
|
17
19
|
}
|
|
18
20
|
// Pre-flight: fetch skill detail to show info before confirming
|
|
19
21
|
let detail;
|
|
20
22
|
try {
|
|
23
|
+
writeStatus(`Fetching ${slug}...`);
|
|
21
24
|
detail = await apiGet(`/v1/detail/${encodeURIComponent(slug)}`);
|
|
25
|
+
clearStatus();
|
|
22
26
|
}
|
|
23
27
|
catch (err) {
|
|
28
|
+
clearStatus();
|
|
24
29
|
if (err instanceof APIError && err.statusCode === 404) {
|
|
25
|
-
console.error(`Skill '${slug}' not found.`);
|
|
30
|
+
console.error(formatError(`Skill '${slug}' not found.`));
|
|
26
31
|
process.exitCode = 1;
|
|
27
32
|
return;
|
|
28
33
|
}
|
|
29
34
|
else if (err instanceof APIError) {
|
|
30
|
-
console.error(
|
|
35
|
+
console.error(formatError(formatAPIError(err)));
|
|
31
36
|
process.exitCode = 1;
|
|
32
37
|
return;
|
|
33
38
|
}
|
|
34
39
|
else if (err instanceof NetworkError) {
|
|
35
|
-
console.error(
|
|
40
|
+
console.error(formatError(err.message));
|
|
36
41
|
process.exitCode = 1;
|
|
37
42
|
return;
|
|
38
43
|
}
|
|
@@ -40,50 +45,53 @@ export async function republishCommand(slug, options = {}) {
|
|
|
40
45
|
}
|
|
41
46
|
// Display skill info
|
|
42
47
|
const title = detail.title || slug;
|
|
43
|
-
const status = detail.archived_at ? "archived" : "published";
|
|
48
|
+
const status = detail.archived_at ? chalk.yellow("archived") : chalk.green("published");
|
|
44
49
|
const version = detail.version || "-";
|
|
45
50
|
console.log("");
|
|
46
|
-
console.log(` Skill: ${title}`);
|
|
47
|
-
console.log(` Status: ${status}`);
|
|
48
|
-
console.log(` Version: ${version}`);
|
|
51
|
+
console.log(` ${chalk.bold("Skill:")} ${title}`);
|
|
52
|
+
console.log(` ${chalk.bold("Status:")} ${status}`);
|
|
53
|
+
console.log(` ${chalk.bold("Version:")} ${version}`);
|
|
49
54
|
console.log("");
|
|
50
55
|
// Confirm unless --force
|
|
51
56
|
if (!options.force) {
|
|
52
57
|
const confirmed = await confirm(`Are you sure you want to republish '${slug}'? (y/N)`);
|
|
53
58
|
if (!confirmed) {
|
|
54
|
-
console.log("Aborted.");
|
|
59
|
+
console.log(chalk.dim("Aborted."));
|
|
55
60
|
return;
|
|
56
61
|
}
|
|
57
62
|
}
|
|
58
63
|
try {
|
|
64
|
+
writeStatus("Republishing...");
|
|
59
65
|
await apiPost(`/v1/skills/${encodeURIComponent(slug)}/republish`, {}, token);
|
|
60
|
-
|
|
66
|
+
clearStatus();
|
|
67
|
+
console.log(formatSuccess(`Successfully republished '${slug}'. It is now live on the marketplace.`));
|
|
61
68
|
}
|
|
62
69
|
catch (err) {
|
|
70
|
+
clearStatus();
|
|
63
71
|
if (err instanceof APIError) {
|
|
64
72
|
switch (err.statusCode) {
|
|
65
73
|
case 401:
|
|
66
|
-
console.error("Not logged in. Run `npx @agentpowers/cli login` first.");
|
|
74
|
+
console.error(formatError("Not logged in. Run `npx @agentpowers/cli login` first."));
|
|
67
75
|
break;
|
|
68
76
|
case 403:
|
|
69
|
-
console.error(`You are not the owner/author of '${slug}'.`);
|
|
77
|
+
console.error(formatError(`You are not the owner/author of '${slug}'.`));
|
|
70
78
|
break;
|
|
71
79
|
case 404:
|
|
72
|
-
console.error(`Skill '${slug}' not found.`);
|
|
80
|
+
console.error(formatError(`Skill '${slug}' not found.`));
|
|
73
81
|
break;
|
|
74
82
|
case 409:
|
|
75
|
-
console.error(`Skill '${slug}' is not archived. It is already published.`);
|
|
83
|
+
console.error(chalk.yellow(`Skill '${slug}' is not archived. It is already published.`));
|
|
76
84
|
break;
|
|
77
85
|
case 429:
|
|
78
|
-
console.error("Too many requests. Please try again in a few moments.");
|
|
86
|
+
console.error(chalk.yellow("Too many requests. Please try again in a few moments."));
|
|
79
87
|
break;
|
|
80
88
|
default:
|
|
81
|
-
console.error(
|
|
89
|
+
console.error(formatError(formatAPIError(err)));
|
|
82
90
|
}
|
|
83
91
|
process.exitCode = 1;
|
|
84
92
|
}
|
|
85
93
|
else if (err instanceof NetworkError) {
|
|
86
|
-
console.error(
|
|
94
|
+
console.error(formatError(err.message));
|
|
87
95
|
process.exitCode = 1;
|
|
88
96
|
}
|
|
89
97
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"republish.js","sourceRoot":"","sources":["../../src/commands/republish.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,MAAM,EACN,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"republish.js","sourceRoot":"","sources":["../../src/commands/republish.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,MAAM,EACN,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAOxF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,UAA4B,EAAE;IAE9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CACX,WAAW,CAAC,iBAAiB,IAAI,4DAA4D,CAAC,CAC/F,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,gEAAgE;IAChE,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC;QACnC,MAAM,GAAG,MAAM,MAAM,CACnB,cAAc,kBAAkB,CAAC,IAAI,CAAC,EAAE,CACzC,CAAC;QACF,WAAW,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;aAAM,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;aAAM,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,qBAAqB;IACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,yBAAyB;IACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,uCAAuC,IAAI,UAAU,CACtD,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC/B,MAAM,OAAO,CACX,cAAc,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAClD,EAAE,EACF,KAAK,CACN,CAAC;QACF,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,6BAA6B,IAAI,uCAAuC,CAAC,CAAC,CAAC;IACvG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC;gBACvB,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,wDAAwD,CAAC,CAAC,CAAC;oBACrF,MAAM;gBACR,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,oCAAoC,IAAI,IAAI,CAAC,CAAC,CAAC;oBACzE,MAAM;gBACR,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC;oBACzD,MAAM;gBACR,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,6CAA6C,CAAC,CAAC,CAAC;oBACzF,MAAM;gBACR,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;oBACrF,MAAM;gBACR;oBACE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,QAAgB;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;YACrC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|