@agentpowers/cli 0.2.0 → 0.3.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 +42 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/detail.d.ts +5 -0
- package/dist/commands/detail.js +81 -0
- package/dist/commands/detail.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.js +23 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/search.d.ts +6 -1
- package/dist/commands/search.js +9 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.js +81 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +5 -0
- package/dist/commands/uninstall.js +66 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.js +36 -0
- package/dist/commands/whoami.js.map +1 -0
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -7,8 +7,13 @@ import { Command } from "commander";
|
|
|
7
7
|
import { searchCommand } from "./commands/search.js";
|
|
8
8
|
import { installCommand } from "./commands/install.js";
|
|
9
9
|
import { loginCommand } from "./commands/login.js";
|
|
10
|
+
import { logoutCommand } from "./commands/logout.js";
|
|
11
|
+
import { whoamiCommand } from "./commands/whoami.js";
|
|
10
12
|
import { setupCommand } from "./commands/setup.js";
|
|
11
13
|
import { updateCommand } from "./commands/update.js";
|
|
14
|
+
import { statusCommand } from "./commands/status.js";
|
|
15
|
+
import { uninstallCommand } from "./commands/uninstall.js";
|
|
16
|
+
import { detailCommand } from "./commands/detail.js";
|
|
12
17
|
function getVersion() {
|
|
13
18
|
try {
|
|
14
19
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -27,8 +32,11 @@ program
|
|
|
27
32
|
program
|
|
28
33
|
.command("search <query>")
|
|
29
34
|
.description("Search for skills in the marketplace")
|
|
30
|
-
.
|
|
31
|
-
|
|
35
|
+
.option("-c, --category <category>", "Filter by category")
|
|
36
|
+
.option("-t, --type <type>", "Filter by type (skill or agent)")
|
|
37
|
+
.option("-l, --limit <limit>", "Maximum results (default 20)")
|
|
38
|
+
.action(async (query, options) => {
|
|
39
|
+
await searchCommand(query, options);
|
|
32
40
|
});
|
|
33
41
|
program
|
|
34
42
|
.command("install <slug>")
|
|
@@ -36,12 +44,38 @@ program
|
|
|
36
44
|
.action(async (slug) => {
|
|
37
45
|
await installCommand(slug);
|
|
38
46
|
});
|
|
47
|
+
program
|
|
48
|
+
.command("uninstall <slug>")
|
|
49
|
+
.description("Remove an installed skill or agent")
|
|
50
|
+
.option("-f, --force", "Skip confirmation prompt")
|
|
51
|
+
.action(async (slug, options) => {
|
|
52
|
+
await uninstallCommand(slug, options);
|
|
53
|
+
});
|
|
54
|
+
program
|
|
55
|
+
.command("detail <slug>")
|
|
56
|
+
.description("Show full details for a skill")
|
|
57
|
+
.option("-s, --source <source>", "Specify source (agentpowers, clawhub)")
|
|
58
|
+
.action(async (slug, options) => {
|
|
59
|
+
await detailCommand(slug, options);
|
|
60
|
+
});
|
|
39
61
|
program
|
|
40
62
|
.command("login")
|
|
41
63
|
.description("Log in to AgentPowers via your browser")
|
|
42
64
|
.action(async () => {
|
|
43
65
|
await loginCommand();
|
|
44
66
|
});
|
|
67
|
+
program
|
|
68
|
+
.command("logout")
|
|
69
|
+
.description("Log out and revoke your CLI token")
|
|
70
|
+
.action(async () => {
|
|
71
|
+
await logoutCommand();
|
|
72
|
+
});
|
|
73
|
+
program
|
|
74
|
+
.command("whoami")
|
|
75
|
+
.description("Show the currently authenticated user")
|
|
76
|
+
.action(async () => {
|
|
77
|
+
await whoamiCommand();
|
|
78
|
+
});
|
|
45
79
|
program
|
|
46
80
|
.command("setup")
|
|
47
81
|
.description("Auto-configure AgentPowers MCP server for your AI tools")
|
|
@@ -54,5 +88,11 @@ program
|
|
|
54
88
|
.action(async () => {
|
|
55
89
|
await updateCommand();
|
|
56
90
|
});
|
|
91
|
+
program
|
|
92
|
+
.command("status")
|
|
93
|
+
.description("List installed skills and agents with metadata")
|
|
94
|
+
.action(async () => {
|
|
95
|
+
await statusCommand();
|
|
96
|
+
});
|
|
57
97
|
program.parse();
|
|
58
98
|
//# sourceMappingURL=cli.js.map
|
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,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,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,KAAK,EAAE,KAAa,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** Detail command — show full skill metadata. */
|
|
2
|
+
import { apiGet, APIError, formatAPIError, NetworkError } from "../api-client.js";
|
|
3
|
+
import { formatPrice, formatSecurityStatus } from "../formatters.js";
|
|
4
|
+
import { validateSlug } from "../installer.js";
|
|
5
|
+
export async function detailCommand(slug, options = {}) {
|
|
6
|
+
if (!validateSlug(slug)) {
|
|
7
|
+
console.error(`Error: Invalid slug "${slug}". Slugs must be lowercase alphanumeric with hyphens only.`);
|
|
8
|
+
process.exitCode = 1;
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const params = {};
|
|
13
|
+
if (options.source)
|
|
14
|
+
params.source = options.source;
|
|
15
|
+
const detail = await apiGet(`/v1/detail/${slug}`, params);
|
|
16
|
+
// Header
|
|
17
|
+
console.log("");
|
|
18
|
+
console.log(` ${detail.title}`);
|
|
19
|
+
console.log(` ${"─".repeat(Math.min(detail.title.length, 60))}`);
|
|
20
|
+
console.log("");
|
|
21
|
+
// Metadata
|
|
22
|
+
const author = detail.author_display_name ||
|
|
23
|
+
detail.author_github ||
|
|
24
|
+
"Unknown";
|
|
25
|
+
console.log(` Author: ${author}`);
|
|
26
|
+
console.log(` Version: ${detail.version || "-"}`);
|
|
27
|
+
if (detail.category)
|
|
28
|
+
console.log(` Category: ${detail.category}`);
|
|
29
|
+
console.log(` Type: ${detail.type || "skill"}`);
|
|
30
|
+
console.log(` Source: ${detail.source || "agentpowers"}`);
|
|
31
|
+
console.log(` Security: ${formatSecurityStatus(detail.security_status || "pending")}`);
|
|
32
|
+
console.log(` Price: ${formatPrice(detail.price_cents || 0)}`);
|
|
33
|
+
console.log("");
|
|
34
|
+
// Description
|
|
35
|
+
const desc = detail.long_description || detail.description;
|
|
36
|
+
if (desc) {
|
|
37
|
+
console.log(` ${desc}`);
|
|
38
|
+
console.log("");
|
|
39
|
+
}
|
|
40
|
+
// Stats
|
|
41
|
+
const stats = [];
|
|
42
|
+
if (detail.download_count != null)
|
|
43
|
+
stats.push(`Downloads: ${detail.download_count}`);
|
|
44
|
+
if (detail.source_stars != null)
|
|
45
|
+
stats.push(`Stars: ${detail.source_stars}`);
|
|
46
|
+
if (detail.source_installs != null)
|
|
47
|
+
stats.push(`Installs: ${detail.source_installs}`);
|
|
48
|
+
if (stats.length > 0) {
|
|
49
|
+
console.log(` Stats: ${stats.join(" | ")}`);
|
|
50
|
+
}
|
|
51
|
+
// Rating
|
|
52
|
+
if (detail.rating_average != null && detail.rating_count > 0) {
|
|
53
|
+
console.log(` Rating: ${detail.rating_average.toFixed(1)}/5 (${detail.rating_count} review${detail.rating_count === 1 ? "" : "s"})`);
|
|
54
|
+
}
|
|
55
|
+
// URL
|
|
56
|
+
const url = detail.source_url || `https://agentpowers.ai/skills/${slug}`;
|
|
57
|
+
console.log(` URL: ${url}`);
|
|
58
|
+
console.log("");
|
|
59
|
+
// Install tip
|
|
60
|
+
console.log(` Install: npx @agentpowers/cli install ${slug}`);
|
|
61
|
+
console.log("");
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (err instanceof APIError && err.statusCode === 404) {
|
|
65
|
+
console.error(`Error: Skill '${slug}' not found.`);
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
}
|
|
68
|
+
else if (err instanceof APIError) {
|
|
69
|
+
console.error(`Error: ${formatAPIError(err)}`);
|
|
70
|
+
process.exitCode = 1;
|
|
71
|
+
}
|
|
72
|
+
else if (err instanceof NetworkError) {
|
|
73
|
+
console.error(`Error: ${err.message}`);
|
|
74
|
+
process.exitCode = 1;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail.js","sourceRoot":"","sources":["../../src/commands/detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Logout command — revoke token and clear local credentials. */
|
|
2
|
+
import { existsSync, unlinkSync } from "node:fs";
|
|
3
|
+
import { loadAuthToken } from "../auth.js";
|
|
4
|
+
import { apiPost } from "../api-client.js";
|
|
5
|
+
import { AUTH_FILE } from "@agentpowers/core";
|
|
6
|
+
export async function logoutCommand() {
|
|
7
|
+
// Best-effort server-side revocation
|
|
8
|
+
const token = loadAuthToken();
|
|
9
|
+
if (token) {
|
|
10
|
+
try {
|
|
11
|
+
await apiPost("/v1/auth/revoke-cli-token", {}, token);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// Ignore — server revocation is best-effort
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Always delete local credentials
|
|
18
|
+
if (existsSync(AUTH_FILE)) {
|
|
19
|
+
unlinkSync(AUTH_FILE);
|
|
20
|
+
}
|
|
21
|
+
console.log("Logged out.");
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,qCAAqC;IACrC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,2BAA2B,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,UAAU,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
/** Search command — query the AgentPowers marketplace. */
|
|
2
|
-
export
|
|
2
|
+
export interface SearchOptions {
|
|
3
|
+
category?: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
limit?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function searchCommand(query: string, options?: SearchOptions): Promise<void>;
|
package/dist/commands/search.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
/** Search command — query the AgentPowers marketplace. */
|
|
2
2
|
import { apiGet, APIError, formatAPIError, NetworkError } from "../api-client.js";
|
|
3
3
|
import { formatSearchResults } from "../formatters.js";
|
|
4
|
-
export async function searchCommand(query) {
|
|
4
|
+
export async function searchCommand(query, options = {}) {
|
|
5
5
|
try {
|
|
6
|
-
const
|
|
6
|
+
const params = { q: query };
|
|
7
|
+
if (options.category)
|
|
8
|
+
params.category = options.category;
|
|
9
|
+
if (options.type)
|
|
10
|
+
params.type = options.type;
|
|
11
|
+
if (options.limit)
|
|
12
|
+
params.limit = options.limit;
|
|
13
|
+
const data = await apiGet("/v1/search", params);
|
|
7
14
|
const output = formatSearchResults(data);
|
|
8
15
|
console.log(output);
|
|
9
16
|
// Install hint
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASvD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,UAAyB,EAAE;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,GAA2B,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QACpD,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7C,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAEhD,MAAM,IAAI,GAAG,MAAM,MAAM,CAA0B,YAAY,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,eAAe;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,2DAA2D,SAAS,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** Status command — list installed skills and agents with metadata. */
|
|
2
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { loadAuthToken } from "../auth.js";
|
|
5
|
+
import { SKILLS_DIR, loadPins } from "@agentpowers/core";
|
|
6
|
+
const AGENTS_DIR = join(SKILLS_DIR, "..", "agents");
|
|
7
|
+
export async function statusCommand() {
|
|
8
|
+
// Auth status
|
|
9
|
+
const token = loadAuthToken();
|
|
10
|
+
if (token) {
|
|
11
|
+
console.log("Logged in (run `npx @agentpowers/cli whoami` to verify)");
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
console.log("Not logged in. Run `npx @agentpowers/cli login` to purchase and publish skills.");
|
|
15
|
+
}
|
|
16
|
+
console.log("");
|
|
17
|
+
// Load pins
|
|
18
|
+
const pins = loadPins();
|
|
19
|
+
// List installed skills
|
|
20
|
+
const skillSlugs = listInstalledSlugs(SKILLS_DIR);
|
|
21
|
+
if (skillSlugs.length > 0) {
|
|
22
|
+
console.log(`Installed Skills (${skillSlugs.length})`);
|
|
23
|
+
console.log(padRight("Slug", 30) +
|
|
24
|
+
padRight("Source", 15) +
|
|
25
|
+
padRight("Security", 12) +
|
|
26
|
+
padRight("Version", 10) +
|
|
27
|
+
"Installed");
|
|
28
|
+
console.log("-".repeat(80));
|
|
29
|
+
for (const slug of skillSlugs) {
|
|
30
|
+
const pin = pins[slug];
|
|
31
|
+
console.log(padRight(slug, 30) +
|
|
32
|
+
padRight(pin?.source ?? "local", 15) +
|
|
33
|
+
padRight(pin?.security_status ?? "-", 12) +
|
|
34
|
+
padRight(pin?.version ?? "-", 10) +
|
|
35
|
+
(pin?.installed_at ? pin.installed_at.slice(0, 10) : "-"));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.log("No skills installed.");
|
|
40
|
+
}
|
|
41
|
+
console.log("");
|
|
42
|
+
// List installed agents
|
|
43
|
+
const agentSlugs = listInstalledSlugs(AGENTS_DIR);
|
|
44
|
+
if (agentSlugs.length > 0) {
|
|
45
|
+
console.log(`Installed Agents (${agentSlugs.length})`);
|
|
46
|
+
console.log(padRight("Slug", 30) +
|
|
47
|
+
padRight("Source", 15) +
|
|
48
|
+
padRight("Security", 12) +
|
|
49
|
+
padRight("Version", 10) +
|
|
50
|
+
"Installed");
|
|
51
|
+
console.log("-".repeat(80));
|
|
52
|
+
for (const slug of agentSlugs) {
|
|
53
|
+
const pin = pins[slug];
|
|
54
|
+
console.log(padRight(slug, 30) +
|
|
55
|
+
padRight(pin?.source ?? "local", 15) +
|
|
56
|
+
padRight(pin?.security_status ?? "-", 12) +
|
|
57
|
+
padRight(pin?.version ?? "-", 10) +
|
|
58
|
+
(pin?.installed_at ? pin.installed_at.slice(0, 10) : "-"));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log("No agents installed.");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function listInstalledSlugs(dir) {
|
|
66
|
+
if (!existsSync(dir))
|
|
67
|
+
return [];
|
|
68
|
+
try {
|
|
69
|
+
return readdirSync(dir, { withFileTypes: true })
|
|
70
|
+
.filter((d) => d.isDirectory() && !d.name.startsWith("."))
|
|
71
|
+
.map((d) => d.name)
|
|
72
|
+
.sort();
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function padRight(str, len) {
|
|
79
|
+
return str.length >= len ? str + " " : str + " ".repeat(len - str.length);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** Uninstall command — remove an installed skill or agent. */
|
|
2
|
+
import { existsSync, rmSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { createInterface } from "node:readline";
|
|
5
|
+
import { validateSlug } from "../installer.js";
|
|
6
|
+
import { SKILLS_DIR, loadPins, removePin } from "@agentpowers/core";
|
|
7
|
+
const AGENTS_DIR = join(SKILLS_DIR, "..", "agents");
|
|
8
|
+
export async function uninstallCommand(slug, options = {}) {
|
|
9
|
+
if (!validateSlug(slug)) {
|
|
10
|
+
console.error(`Error: Invalid slug "${slug}". Slugs must be lowercase alphanumeric with hyphens only.`);
|
|
11
|
+
process.exitCode = 1;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const skillDir = join(SKILLS_DIR, slug);
|
|
15
|
+
const agentDir = join(AGENTS_DIR, slug);
|
|
16
|
+
const pins = loadPins();
|
|
17
|
+
const hasSkillDir = existsSync(skillDir);
|
|
18
|
+
const hasAgentDir = existsSync(agentDir);
|
|
19
|
+
const hasPin = slug in pins;
|
|
20
|
+
if (!hasSkillDir && !hasAgentDir && !hasPin) {
|
|
21
|
+
console.error(`'${slug}' not found. Not installed.`);
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Describe what will be removed
|
|
26
|
+
const locations = [];
|
|
27
|
+
if (hasSkillDir)
|
|
28
|
+
locations.push("skills");
|
|
29
|
+
if (hasAgentDir)
|
|
30
|
+
locations.push("agents");
|
|
31
|
+
if (hasPin)
|
|
32
|
+
locations.push("pin");
|
|
33
|
+
// Confirm unless --force
|
|
34
|
+
if (!options.force) {
|
|
35
|
+
const confirmed = await confirm(`Remove '${slug}' (${locations.join(", ")})?`);
|
|
36
|
+
if (!confirmed) {
|
|
37
|
+
console.log("Aborted.");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Remove directories
|
|
42
|
+
if (hasSkillDir) {
|
|
43
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
44
|
+
}
|
|
45
|
+
if (hasAgentDir) {
|
|
46
|
+
rmSync(agentDir, { recursive: true, force: true });
|
|
47
|
+
}
|
|
48
|
+
// Remove pin
|
|
49
|
+
if (hasPin) {
|
|
50
|
+
removePin(slug);
|
|
51
|
+
}
|
|
52
|
+
console.log(`Uninstalled '${slug}'.`);
|
|
53
|
+
}
|
|
54
|
+
function confirm(question) {
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
const rl = createInterface({
|
|
57
|
+
input: process.stdin,
|
|
58
|
+
output: process.stdout,
|
|
59
|
+
});
|
|
60
|
+
rl.question(`${question} [y/N] `, (answer) => {
|
|
61
|
+
rl.close();
|
|
62
|
+
resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Whoami command — show current authenticated user info. */
|
|
2
|
+
import { loadAuthToken } from "../auth.js";
|
|
3
|
+
import { apiGet, APIError, formatAPIError, NetworkError } from "../api-client.js";
|
|
4
|
+
export async function whoamiCommand() {
|
|
5
|
+
const token = loadAuthToken();
|
|
6
|
+
if (!token) {
|
|
7
|
+
console.error("Not logged in. Run `npx @agentpowers/cli login` first.");
|
|
8
|
+
process.exitCode = 1;
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const me = await apiGet("/v1/auth/me", undefined, token);
|
|
13
|
+
console.log(`Email: ${me.email}`);
|
|
14
|
+
if (me.name) {
|
|
15
|
+
console.log(`Name: ${me.name}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
if (err instanceof APIError && err.statusCode === 401) {
|
|
20
|
+
console.error("Not logged in. Run `npx @agentpowers/cli login` first.");
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
}
|
|
23
|
+
else if (err instanceof APIError) {
|
|
24
|
+
console.error(`Error: ${formatAPIError(err)}`);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
27
|
+
else if (err instanceof NetworkError) {
|
|
28
|
+
console.error(`Error: ${err.message}`);
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +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;AAOlF,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAa,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,UAAU,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentpowers/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "CLI for the AgentPowers marketplace — search, install, and manage Claude Code skills.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"node": ">=18.0.0"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@agentpowers/core": "
|
|
47
|
+
"@agentpowers/core": "^0.1.0",
|
|
48
48
|
"commander": "^13.0.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|