@polyskill/cli 0.1.4 → 0.1.5
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,eAAO,MAAM,aAAa,SAwFvB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Search flow state machine:
|
|
3
|
+
*
|
|
4
|
+
* FETCH_REGISTRY ──→ FORMAT_OUTPUT ──→ PRINT ──→ EXIT(0)
|
|
5
|
+
* │
|
|
6
|
+
* ├──→ HTTP_ERR (4xx / 5xx)
|
|
7
|
+
* │
|
|
8
|
+
* ▼
|
|
9
|
+
* NETWORK_ERR (DNS / timeout / refused)
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
import chalk from "chalk";
|
|
13
|
+
import { REGISTRY_URL } from "../config.js";
|
|
14
|
+
export const searchCommand = new Command("search")
|
|
15
|
+
.description("Search for skills in the PolySkill registry")
|
|
16
|
+
.argument("[query]", "Search query (matches name, description, keywords)")
|
|
17
|
+
.option("--type <type>", "Filter by skill type (prompt, tool, workflow, composite)")
|
|
18
|
+
.option("--verified", "Only show verified skills")
|
|
19
|
+
.option("--author <name>", "Filter by author name")
|
|
20
|
+
.option("--keyword <keyword>", "Filter by keyword")
|
|
21
|
+
.option("--limit <n>", "Max results (default 20)", "20")
|
|
22
|
+
.option("--json", "Output raw JSON (for programmatic use)")
|
|
23
|
+
.option("--registry <url>", "Registry URL", REGISTRY_URL)
|
|
24
|
+
.action(async (query, options) => {
|
|
25
|
+
const params = new URLSearchParams();
|
|
26
|
+
if (query)
|
|
27
|
+
params.set("q", query);
|
|
28
|
+
if (options.type)
|
|
29
|
+
params.set("type", options.type);
|
|
30
|
+
if (options.verified)
|
|
31
|
+
params.set("verified", "true");
|
|
32
|
+
if (options.author)
|
|
33
|
+
params.set("author", options.author);
|
|
34
|
+
if (options.keyword)
|
|
35
|
+
params.set("keyword", options.keyword);
|
|
36
|
+
params.set("limit", options.limit);
|
|
37
|
+
const url = `${options.registry}/api/skills?${params}`;
|
|
38
|
+
let res;
|
|
39
|
+
try {
|
|
40
|
+
res = await fetch(url, { signal: AbortSignal.timeout(30_000) });
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
const msg = err.name === "TimeoutError"
|
|
44
|
+
? "Request timed out — is the registry running?"
|
|
45
|
+
: `Network error: ${err.message}`;
|
|
46
|
+
console.log(chalk.red(`\n${msg}\n`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
if (!res.ok) {
|
|
50
|
+
console.log(chalk.red(`\nSearch failed: ${res.statusText}\n`));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const data = (await res.json());
|
|
54
|
+
// JSON mode: dump raw response and exit
|
|
55
|
+
if (options.json) {
|
|
56
|
+
console.log(JSON.stringify(data, null, 2));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// No results
|
|
60
|
+
if (data.skills.length === 0) {
|
|
61
|
+
console.log(chalk.yellow(`\nNo skills found${query ? ` for "${query}"` : ""}\n`));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Print results
|
|
65
|
+
console.log();
|
|
66
|
+
for (const skill of data.skills) {
|
|
67
|
+
const badge = skill.verified
|
|
68
|
+
? chalk.green("[verified]")
|
|
69
|
+
: chalk.yellow("[unverified]");
|
|
70
|
+
const typeTag = chalk.dim(skill.type);
|
|
71
|
+
console.log(`${chalk.bold(skill.name)} ${chalk.dim(`v${skill.version}`)} ${badge} ${typeTag}`);
|
|
72
|
+
console.log(` ${skill.description}`);
|
|
73
|
+
console.log(chalk.cyan(` → polyskill install ${skill.name}`));
|
|
74
|
+
console.log();
|
|
75
|
+
}
|
|
76
|
+
const showing = data.skills.length;
|
|
77
|
+
const suffix = query ? ` matching "${query}"` : "";
|
|
78
|
+
if (data.total > showing) {
|
|
79
|
+
console.log(chalk.dim(`Showing ${showing} of ${data.total} skills${suffix}\n`));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log(chalk.dim(`${data.total} skill${data.total === 1 ? "" : "s"} found${suffix}\n`));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,15 +5,17 @@ import { validateCommand } from "./commands/validate.js";
|
|
|
5
5
|
import { buildCommand } from "./commands/build.js";
|
|
6
6
|
import { publishCommand } from "./commands/publish.js";
|
|
7
7
|
import { installCommand } from "./commands/install.js";
|
|
8
|
+
import { searchCommand } from "./commands/search.js";
|
|
8
9
|
const program = new Command();
|
|
9
10
|
program
|
|
10
11
|
.name("polyskill")
|
|
11
12
|
.description("CLI for the PolySkill marketplace")
|
|
12
|
-
.version("0.1.
|
|
13
|
+
.version("0.1.5");
|
|
13
14
|
program.addCommand(initCommand);
|
|
14
15
|
program.addCommand(validateCommand);
|
|
15
16
|
program.addCommand(buildCommand);
|
|
16
17
|
program.addCommand(publishCommand);
|
|
17
18
|
program.addCommand(installCommand);
|
|
19
|
+
program.addCommand(searchCommand);
|
|
18
20
|
program.parse();
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|