@agentpowers/cli 0.5.2 → 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 +6 -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.js +9 -6
- package/dist/commands/prune.js.map +1 -1
- 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 +50 -36
- 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/update.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/** Update command — check for and install updates to installed skills. */
|
|
2
2
|
import { hostname } from "node:os";
|
|
3
|
+
import chalk from "chalk";
|
|
3
4
|
import { loadAuthToken } from "../auth.js";
|
|
4
5
|
import { apiGet, recordInstallation, APIError, NetworkError, } from "../api-client.js";
|
|
5
6
|
import { downloadAndExtract, getInstallDir, validateSlug } from "../installer.js";
|
|
7
|
+
import { formatError, writeStatus, clearStatus, renderTable } from "../formatters.js";
|
|
6
8
|
import { loadPins, hashDirectory, isDirectory } from "@agentpowers/core";
|
|
7
9
|
/** Normalize pin.type to "skill" | "agent". Garbage values default to "skill". */
|
|
8
10
|
function normalizePinType(raw) {
|
|
@@ -17,7 +19,7 @@ async function updateSingle(slug, force) {
|
|
|
17
19
|
const pins = loadPins();
|
|
18
20
|
const pin = pins[slug];
|
|
19
21
|
if (!pin) {
|
|
20
|
-
console.error(`'${slug}' is not installed. Run \`npx @agentpowers/cli install ${slug}\` first.`);
|
|
22
|
+
console.error(formatError(`'${slug}' is not installed. Run \`npx @agentpowers/cli install ${slug}\` first.`));
|
|
21
23
|
process.exitCode = 1;
|
|
22
24
|
return;
|
|
23
25
|
}
|
|
@@ -25,7 +27,7 @@ async function updateSingle(slug, force) {
|
|
|
25
27
|
const installDir = getInstallDir(slug, type);
|
|
26
28
|
// Ghost pin — directory doesn't exist on disk
|
|
27
29
|
if (!isDirectory(installDir)) {
|
|
28
|
-
console.error(`'${slug}' has a pin but is not installed on disk. Run \`npx @agentpowers/cli prune\` to clean up, or reinstall it.`);
|
|
30
|
+
console.error(formatError(`'${slug}' has a pin but is not installed on disk. Run \`npx @agentpowers/cli prune\` to clean up, or reinstall it.`));
|
|
29
31
|
process.exitCode = 1;
|
|
30
32
|
return;
|
|
31
33
|
}
|
|
@@ -42,20 +44,23 @@ async function updateSingle(slug, force) {
|
|
|
42
44
|
// Fetch latest version from API
|
|
43
45
|
let detail;
|
|
44
46
|
try {
|
|
47
|
+
writeStatus(`Checking ${slug}...`);
|
|
45
48
|
const params = {};
|
|
46
49
|
if (pin.source !== "agentpowers")
|
|
47
50
|
params.source = pin.source;
|
|
48
51
|
detail = await apiGet(`/v1/detail/${encodeURIComponent(slug)}`, params);
|
|
52
|
+
clearStatus();
|
|
49
53
|
}
|
|
50
54
|
catch (err) {
|
|
55
|
+
clearStatus();
|
|
51
56
|
if (err instanceof APIError && err.statusCode === 404) {
|
|
52
|
-
console.error(`'${slug}' not found on server (may have been unpublished).`);
|
|
57
|
+
console.error(formatError(`'${slug}' not found on server (may have been unpublished).`));
|
|
53
58
|
}
|
|
54
59
|
else if (err instanceof NetworkError) {
|
|
55
|
-
console.error(`${slug}: ${err.message}`);
|
|
60
|
+
console.error(formatError(`${slug}: ${err.message}`));
|
|
56
61
|
}
|
|
57
62
|
else if (err instanceof Error) {
|
|
58
|
-
console.error(`${slug}: ${err.message}`);
|
|
63
|
+
console.error(formatError(`${slug}: ${err.message}`));
|
|
59
64
|
}
|
|
60
65
|
process.exitCode = 1;
|
|
61
66
|
return;
|
|
@@ -64,31 +69,32 @@ async function updateSingle(slug, force) {
|
|
|
64
69
|
// Compare versions
|
|
65
70
|
if (!latestVersion || latestVersion === pin.version) {
|
|
66
71
|
if (isEdited && !force) {
|
|
67
|
-
console.log(`${slug} is up to date (v${pin.version ?? "unknown"}) but locally edited.`);
|
|
72
|
+
console.log(`${chalk.cyan(slug)} is up to date (v${pin.version ?? "unknown"}) but ${chalk.yellow("locally edited")}.`);
|
|
68
73
|
return;
|
|
69
74
|
}
|
|
70
|
-
console.log(`${slug} is already up to date (v${pin.version ?? "unknown"}).`);
|
|
75
|
+
console.log(`${chalk.cyan(slug)} is already up to date (v${pin.version ?? "unknown"}).`);
|
|
71
76
|
return;
|
|
72
77
|
}
|
|
73
78
|
// Update available — check for local edits
|
|
74
79
|
if (isEdited && !force) {
|
|
75
|
-
console.log(`${slug}: locally edited
|
|
76
|
-
console.log("Use --force to update anyway (local changes will be overwritten).");
|
|
80
|
+
console.log(`${chalk.cyan(slug)}: ${chalk.yellow("locally edited")} -- ${pin.version ?? "unknown"} -> ${latestVersion} available but skipped.`);
|
|
81
|
+
console.log(chalk.dim("Use --force to update anyway (local changes will be overwritten)."));
|
|
77
82
|
return;
|
|
78
83
|
}
|
|
79
84
|
// Download and install
|
|
80
85
|
try {
|
|
81
86
|
const label = isEdited ? "Force updating" : "Updating";
|
|
82
|
-
console.log(` ${label} ${slug}: ${pin.version ?? "unknown"} -> ${latestVersion}...`);
|
|
87
|
+
console.log(` ${label} ${chalk.cyan(slug)}: ${pin.version ?? "unknown"} -> ${latestVersion}...`);
|
|
83
88
|
const downloadData = await apiGet(`/v1/skills/${encodeURIComponent(slug)}/download`, undefined, token);
|
|
84
89
|
await downloadAndExtract(downloadData.url, slug, type, pin.source, latestVersion, detail.security_status ?? "pass");
|
|
85
|
-
console.log(` [ok] ${slug} updated to ${latestVersion}.`);
|
|
90
|
+
console.log(` ${chalk.green("[ok]")} ${chalk.cyan(slug)} updated to ${latestVersion}.`);
|
|
86
91
|
// Record installation (fire-and-forget)
|
|
87
92
|
void recordInstallation(slug, "cli", pin.source, hostname(), token);
|
|
88
93
|
}
|
|
89
94
|
catch (err) {
|
|
95
|
+
clearStatus();
|
|
90
96
|
if (err instanceof Error) {
|
|
91
|
-
console.error(` [!] ${slug}: Update failed
|
|
97
|
+
console.error(` ${chalk.red("[!]")} ${chalk.cyan(slug)}: Update failed -- ${err.message}`);
|
|
92
98
|
}
|
|
93
99
|
process.exitCode = 1;
|
|
94
100
|
}
|
|
@@ -98,7 +104,7 @@ export async function updateCommand(slug, options) {
|
|
|
98
104
|
// Single-slug mode
|
|
99
105
|
if (slug) {
|
|
100
106
|
if (!validateSlug(slug)) {
|
|
101
|
-
console.error(`
|
|
107
|
+
console.error(formatError(`Invalid slug "${slug}". Slugs must be lowercase alphanumeric with hyphens only.`));
|
|
102
108
|
process.exitCode = 1;
|
|
103
109
|
return;
|
|
104
110
|
}
|
|
@@ -118,9 +124,10 @@ export async function updateCommand(slug, options) {
|
|
|
118
124
|
let skipped = 0;
|
|
119
125
|
let forced = 0;
|
|
120
126
|
let errored = 0;
|
|
121
|
-
// Detect ghost pins
|
|
122
|
-
// These are harmless but noisy; skip them and suggest `prune` to clean up.
|
|
127
|
+
// Detect ghost pins
|
|
123
128
|
const ghostSlugs = [];
|
|
129
|
+
const summaryRows = [];
|
|
130
|
+
writeStatus("Checking for updates...");
|
|
124
131
|
for (const pinSlug of slugs) {
|
|
125
132
|
// Skip pins with invalid slugs (path traversal protection)
|
|
126
133
|
if (!validateSlug(pinSlug)) {
|
|
@@ -155,13 +162,10 @@ export async function updateCommand(slug, options) {
|
|
|
155
162
|
catch (err) {
|
|
156
163
|
errored++;
|
|
157
164
|
if (err instanceof APIError && err.statusCode === 404) {
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
else if (err instanceof NetworkError) {
|
|
161
|
-
console.error(` [!] ${pinSlug}: ${err.message}`);
|
|
165
|
+
summaryRows.push([pinSlug, pin.source || "unknown", pin.version ?? "-", "-", chalk.red("Not found")]);
|
|
162
166
|
}
|
|
163
167
|
else if (err instanceof Error) {
|
|
164
|
-
|
|
168
|
+
summaryRows.push([pinSlug, pin.source || "unknown", pin.version ?? "-", "-", chalk.red("Error")]);
|
|
165
169
|
}
|
|
166
170
|
continue;
|
|
167
171
|
}
|
|
@@ -169,56 +173,66 @@ export async function updateCommand(slug, options) {
|
|
|
169
173
|
// Compare versions
|
|
170
174
|
if (!latestVersion || latestVersion === pin.version) {
|
|
171
175
|
current++;
|
|
176
|
+
summaryRows.push([pinSlug, pin.source || "unknown", pin.version ?? "-", latestVersion ?? "-", chalk.dim("Up to date")]);
|
|
172
177
|
continue;
|
|
173
178
|
}
|
|
174
179
|
// Update available
|
|
175
180
|
if (isEdited && !force) {
|
|
176
181
|
skipped++;
|
|
177
|
-
|
|
182
|
+
summaryRows.push([pinSlug, pin.source || "unknown", pin.version ?? "-", latestVersion, chalk.yellow("Edited (skipped)")]);
|
|
178
183
|
continue;
|
|
179
184
|
}
|
|
180
185
|
// Download and install
|
|
181
186
|
try {
|
|
182
|
-
|
|
183
|
-
console.log(` ${label} ${pinSlug}: ${pin.version ?? "unknown"} -> ${latestVersion}...`);
|
|
187
|
+
writeStatus(`Updating ${pinSlug}...`);
|
|
184
188
|
const downloadData = await apiGet(`/v1/skills/${encodeURIComponent(pinSlug)}/download`, undefined, token);
|
|
185
189
|
await downloadAndExtract(downloadData.url, pinSlug, type, pin.source, latestVersion, detail.security_status ?? "pass");
|
|
186
190
|
if (isEdited) {
|
|
187
191
|
forced++;
|
|
188
|
-
|
|
192
|
+
summaryRows.push([pinSlug, pin.source || "unknown", pin.version ?? "-", latestVersion, chalk.green("Force-updated")]);
|
|
189
193
|
}
|
|
190
194
|
else {
|
|
191
195
|
updated++;
|
|
192
|
-
|
|
196
|
+
summaryRows.push([pinSlug, pin.source || "unknown", pin.version ?? "-", latestVersion, chalk.green("Updated")]);
|
|
193
197
|
}
|
|
194
198
|
// Record installation (fire-and-forget)
|
|
195
199
|
void recordInstallation(pinSlug, "cli", pin.source, hostname(), token);
|
|
196
200
|
}
|
|
197
201
|
catch (err) {
|
|
198
202
|
errored++;
|
|
199
|
-
|
|
200
|
-
console.error(` [!] ${pinSlug}: Update failed — ${err.message}`);
|
|
201
|
-
}
|
|
203
|
+
summaryRows.push([pinSlug, pin.source || "unknown", pin.version ?? "-", "-", chalk.red("Failed")]);
|
|
202
204
|
}
|
|
203
205
|
}
|
|
204
|
-
|
|
206
|
+
clearStatus();
|
|
207
|
+
// Summary table
|
|
208
|
+
if (summaryRows.length > 0) {
|
|
209
|
+
const columns = [
|
|
210
|
+
{ header: "Slug", style: (v) => chalk.cyan(v) },
|
|
211
|
+
{ header: "Source", style: (v) => chalk.yellow(v) },
|
|
212
|
+
{ header: "Current" },
|
|
213
|
+
{ header: "Latest" },
|
|
214
|
+
{ header: "Status" },
|
|
215
|
+
];
|
|
216
|
+
console.log(renderTable(columns, summaryRows, "Update Summary"));
|
|
217
|
+
}
|
|
218
|
+
// Text summary
|
|
205
219
|
console.log("");
|
|
206
220
|
const parts = [];
|
|
207
221
|
if (updated > 0)
|
|
208
|
-
parts.push(`${updated} updated`);
|
|
222
|
+
parts.push(chalk.green(`${updated} updated`));
|
|
209
223
|
if (forced > 0)
|
|
210
|
-
parts.push(`${forced} force-updated`);
|
|
224
|
+
parts.push(chalk.green(`${forced} force-updated`));
|
|
211
225
|
if (current > 0)
|
|
212
|
-
parts.push(`${current} already current`);
|
|
226
|
+
parts.push(chalk.dim(`${current} already current`));
|
|
213
227
|
if (skipped > 0)
|
|
214
|
-
parts.push(`${skipped} skipped (locally edited)`);
|
|
228
|
+
parts.push(chalk.yellow(`${skipped} skipped (locally edited)`));
|
|
215
229
|
if (errored > 0)
|
|
216
|
-
parts.push(`${errored} failed`);
|
|
230
|
+
parts.push(chalk.red(`${errored} failed`));
|
|
217
231
|
if (ghostSlugs.length > 0)
|
|
218
|
-
parts.push(`${ghostSlugs.length} stale (not on disk)`);
|
|
232
|
+
parts.push(chalk.dim(`${ghostSlugs.length} stale (not on disk)`));
|
|
219
233
|
console.log(parts.join(", ") + ".");
|
|
220
234
|
if (ghostSlugs.length > 0) {
|
|
221
|
-
console.log(`\nRun \`npx @agentpowers/cli prune\` to remove ${ghostSlugs.length} stale pin(s) from the registry.`);
|
|
235
|
+
console.log(chalk.dim(`\nRun \`npx @agentpowers/cli prune\` to remove ${ghostSlugs.length} stale pin(s) from the registry.`));
|
|
222
236
|
}
|
|
223
237
|
}
|
|
224
238
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Verify command — check installed skills against content hash pins. */
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
3
4
|
import { loadPins, hashDirectory, isDirectory, SKILLS_DIR, } from "@agentpowers/core";
|
|
4
5
|
export async function verifyCommand() {
|
|
5
6
|
const pins = loadPins();
|
|
@@ -12,25 +13,24 @@ export async function verifyCommand() {
|
|
|
12
13
|
let hasFailure = false;
|
|
13
14
|
for (const slug of slugs.sort()) {
|
|
14
15
|
const pin = pins[slug];
|
|
15
|
-
const type = pin.type || "skill";
|
|
16
16
|
const source = pin.source || "unknown";
|
|
17
17
|
// Determine install directory
|
|
18
18
|
const installDir = join(SKILLS_DIR, slug);
|
|
19
19
|
if (!pin.content_hash) {
|
|
20
|
-
console.log(` SKIP ${slug} (${source})
|
|
20
|
+
console.log(` ${chalk.yellow("SKIP")} ${chalk.cyan(slug)} (${source}) -- no content hash stored`);
|
|
21
21
|
continue;
|
|
22
22
|
}
|
|
23
23
|
if (!isDirectory(installDir)) {
|
|
24
|
-
console.log(` MISSING ${slug} (${source})
|
|
24
|
+
console.log(` ${chalk.red("MISSING")} ${chalk.cyan(slug)} (${source}) -- not found on disk`);
|
|
25
25
|
hasFailure = true;
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
28
28
|
const currentHash = hashDirectory(installDir);
|
|
29
29
|
if (currentHash === pin.content_hash) {
|
|
30
|
-
console.log(` OK ${slug} (${source})`);
|
|
30
|
+
console.log(` ${chalk.green("OK")} ${chalk.cyan(slug)} (${source})`);
|
|
31
31
|
}
|
|
32
32
|
else {
|
|
33
|
-
console.log(` FAIL ${slug} (${source})
|
|
33
|
+
console.log(` ${chalk.red("FAIL")} ${chalk.cyan(slug)} (${source}) -- hash mismatch`);
|
|
34
34
|
hasFailure = true;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,QAAQ,EACR,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,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,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,QAAQ,EACR,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,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,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC;QAEvC,8BAA8B;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,6BAA6B,CAAC,CAAC;YACtG,SAAS;QACX,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,wBAAwB,CAAC,CAAC;YAC9F,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,WAAW,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,oBAAoB,CAAC,CAAC;YAC1F,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
package/dist/commands/whoami.js
CHANGED
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
/** Whoami command — show current authenticated user info. */
|
|
2
|
+
import chalk from "chalk";
|
|
2
3
|
import { loadAuthToken } from "../auth.js";
|
|
3
4
|
import { apiGet, APIError, formatAPIError, NetworkError } from "../api-client.js";
|
|
5
|
+
import { formatError, writeStatus, clearStatus } from "../formatters.js";
|
|
4
6
|
export async function whoamiCommand() {
|
|
5
7
|
const token = loadAuthToken();
|
|
6
8
|
if (!token) {
|
|
7
|
-
console.error("Not logged in. Run `npx @agentpowers/cli login` first.");
|
|
9
|
+
console.error(formatError("Not logged in. Run `npx @agentpowers/cli login` first."));
|
|
8
10
|
process.exitCode = 1;
|
|
9
11
|
return;
|
|
10
12
|
}
|
|
11
13
|
try {
|
|
14
|
+
writeStatus("Checking...");
|
|
12
15
|
const me = await apiGet("/v1/auth/me", undefined, token);
|
|
13
|
-
|
|
16
|
+
clearStatus();
|
|
17
|
+
console.log(`${chalk.bold("Email:")} ${me.email}`);
|
|
14
18
|
if (me.name) {
|
|
15
|
-
console.log(
|
|
19
|
+
console.log(`${chalk.bold("Name:")} ${me.name}`);
|
|
16
20
|
}
|
|
17
21
|
}
|
|
18
22
|
catch (err) {
|
|
23
|
+
clearStatus();
|
|
19
24
|
if (err instanceof APIError && err.statusCode === 401) {
|
|
20
|
-
console.error("Not logged in. Run `npx @agentpowers/cli login` first.");
|
|
25
|
+
console.error(formatError("Not logged in. Run `npx @agentpowers/cli login` first."));
|
|
21
26
|
process.exitCode = 1;
|
|
22
27
|
}
|
|
23
28
|
else if (err instanceof APIError) {
|
|
24
|
-
console.error(
|
|
29
|
+
console.error(formatError(formatAPIError(err)));
|
|
25
30
|
process.exitCode = 1;
|
|
26
31
|
}
|
|
27
32
|
else if (err instanceof NetworkError) {
|
|
28
|
-
console.error(
|
|
33
|
+
console.error(formatError(err.message));
|
|
29
34
|
process.exitCode = 1;
|
|
30
35
|
}
|
|
31
36
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAOzE,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,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,IAAI,CAAC;QACH,WAAW,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,MAAM,MAAM,CAAa,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACrE,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,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,wDAAwD,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,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;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"}
|
package/dist/formatters.d.ts
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
|
-
/** Terminal output formatters for CLI display. */
|
|
1
|
+
/** Terminal output formatters for CLI display — Rich-style colored output. */
|
|
2
2
|
import type { SectionedSearchResponse } from "./types.js";
|
|
3
|
+
declare const teal: import("chalk").ChalkInstance;
|
|
4
|
+
export { teal };
|
|
3
5
|
export declare function formatPrice(priceCents: number): string;
|
|
6
|
+
/** Format security status with color (for terminal display). */
|
|
4
7
|
export declare function formatSecurityStatus(status: string): string;
|
|
8
|
+
/** Format security status without color (for plain text / tests). */
|
|
9
|
+
export declare function formatSecurityStatusPlain(status: string): string;
|
|
10
|
+
export declare function formatSeverity(severity: string): string;
|
|
11
|
+
export declare function formatInstalled(state: string | null): string;
|
|
12
|
+
export interface TableColumn {
|
|
13
|
+
header: string;
|
|
14
|
+
width?: number;
|
|
15
|
+
align?: "left" | "right";
|
|
16
|
+
style?: (val: string) => string;
|
|
17
|
+
}
|
|
18
|
+
export declare function stripAnsi(str: string): string;
|
|
19
|
+
/** Sanitize a string for safe terminal display (removes newlines, control chars). */
|
|
20
|
+
export declare function sanitizeForTerminal(str: string): string;
|
|
21
|
+
export declare function renderTable(columns: TableColumn[], rows: string[][], title?: string): string;
|
|
22
|
+
export declare function renderPanel(content: string, title?: string, borderColor?: "cyan" | "green" | "yellow" | "red"): string;
|
|
23
|
+
/** Write a status message to stderr (same line, overwritten). */
|
|
24
|
+
export declare function writeStatus(message: string): void;
|
|
25
|
+
export declare function clearStatus(): void;
|
|
26
|
+
export declare function formatError(message: string): string;
|
|
27
|
+
export declare function formatSuccess(message: string): string;
|
|
28
|
+
export declare function formatWarning(message: string): string;
|
|
29
|
+
export declare function formatDim(message: string): string;
|
|
5
30
|
export declare function formatSearchResults(data: SectionedSearchResponse): string;
|