@khalidsaidi/skillrunner 0.1.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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +91 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/cursor.d.ts +27 -0
  8. package/dist/commands/cursor.d.ts.map +1 -0
  9. package/dist/commands/cursor.js +80 -0
  10. package/dist/commands/cursor.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +13 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +59 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/info.d.ts +13 -0
  16. package/dist/commands/info.d.ts.map +1 -0
  17. package/dist/commands/info.js +102 -0
  18. package/dist/commands/info.js.map +1 -0
  19. package/dist/commands/install.d.ts +13 -0
  20. package/dist/commands/install.d.ts.map +1 -0
  21. package/dist/commands/install.js +167 -0
  22. package/dist/commands/install.js.map +1 -0
  23. package/dist/commands/list.d.ts +13 -0
  24. package/dist/commands/list.d.ts.map +1 -0
  25. package/dist/commands/list.js +51 -0
  26. package/dist/commands/list.js.map +1 -0
  27. package/dist/commands/logs.d.ts +15 -0
  28. package/dist/commands/logs.d.ts.map +1 -0
  29. package/dist/commands/logs.js +99 -0
  30. package/dist/commands/logs.js.map +1 -0
  31. package/dist/commands/open.d.ts +13 -0
  32. package/dist/commands/open.d.ts.map +1 -0
  33. package/dist/commands/open.js +30 -0
  34. package/dist/commands/open.js.map +1 -0
  35. package/dist/commands/plan.d.ts +14 -0
  36. package/dist/commands/plan.d.ts.map +1 -0
  37. package/dist/commands/plan.js +75 -0
  38. package/dist/commands/plan.js.map +1 -0
  39. package/dist/commands/run.d.ts +17 -0
  40. package/dist/commands/run.d.ts.map +1 -0
  41. package/dist/commands/run.js +143 -0
  42. package/dist/commands/run.js.map +1 -0
  43. package/dist/commands/search.d.ts +13 -0
  44. package/dist/commands/search.d.ts.map +1 -0
  45. package/dist/commands/search.js +32 -0
  46. package/dist/commands/search.js.map +1 -0
  47. package/dist/commands/uninstall.d.ts +13 -0
  48. package/dist/commands/uninstall.d.ts.map +1 -0
  49. package/dist/commands/uninstall.js +35 -0
  50. package/dist/commands/uninstall.js.map +1 -0
  51. package/dist/util.d.ts +7 -0
  52. package/dist/util.d.ts.map +1 -0
  53. package/dist/util.js +9 -0
  54. package/dist/util.js.map +1 -0
  55. package/dist/utils/json.d.ts +11 -0
  56. package/dist/utils/json.d.ts.map +1 -0
  57. package/dist/utils/json.js +10 -0
  58. package/dist/utils/json.js.map +1 -0
  59. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Khalid Saidi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # SkillRunner CLI
2
+
3
+ State-of-the-art npm CLI for discoverable, safe, reusable engineering skills.
4
+
5
+ Install:
6
+
7
+ ```bash
8
+ npm i -g @khalidsaidi/skillrunner
9
+ ```
10
+
11
+ Quickstart:
12
+
13
+ ```bash
14
+ skill doctor
15
+ skill search lint
16
+ skill install run-lint
17
+ skill plan run-lint
18
+ skill run run-lint
19
+ skill logs --last
20
+ ```
21
+
22
+ ## Why use it
23
+
24
+ - Curated catalog with `default`, `advanced`, and `conditional` skill lanes
25
+ - Safety controls: plan preview, preflight checks, and script guardrails
26
+ - Local-first execution with run artifacts and logs
27
+ - Continuous quality checks via CI and nightly template matrix runs
28
+
29
+ ## Current catalog snapshot
30
+
31
+ - 25 total skills
32
+ - 14 automation skills
33
+ - 11 knowledge skills
34
+ - 10 default-enabled skills
35
+ - 4 packs
36
+
37
+ ## Core commands
38
+
39
+ - `skill doctor`
40
+ - `skill search <query>`
41
+ - `skill info <name>`
42
+ - `skill install <name>`
43
+ - `skill uninstall <name>`
44
+ - `skill plan <name>`
45
+ - `skill run <name>`
46
+ - `skill logs --last`
47
+ - `skill list`
48
+
49
+ Full docs and maintainer notes: <https://github.com/khalidsaidi/skillrunner>
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { doctorCmd } from "./commands/doctor.js";
4
+ import { listCmd } from "./commands/list.js";
5
+ import { searchCmd } from "./commands/search.js";
6
+ import { infoCmd } from "./commands/info.js";
7
+ import { installCmd } from "./commands/install.js";
8
+ import { uninstallCmd } from "./commands/uninstall.js";
9
+ import { planCmd } from "./commands/plan.js";
10
+ import { runCmd } from "./commands/run.js";
11
+ import { logsCmd } from "./commands/logs.js";
12
+ import { openCmd } from "./commands/open.js";
13
+ import { cursorInstallCmd, cursorListCmd } from "./commands/cursor.js";
14
+ const program = new Command();
15
+ program
16
+ .name("skill")
17
+ .description("SkillRunner — browse, install, and run skills")
18
+ .version("0.1.0")
19
+ .option("-j, --json", "Output JSON for extension integration");
20
+ program
21
+ .command("doctor")
22
+ .option("--json")
23
+ .description("Check env, providers, registry")
24
+ .action(doctorCmd);
25
+ program
26
+ .command("list")
27
+ .option("--json")
28
+ .description("List installed skills")
29
+ .action(listCmd);
30
+ program
31
+ .command("search <query>")
32
+ .option("--json")
33
+ .description("Search registry")
34
+ .action(searchCmd);
35
+ program
36
+ .command("info <name>")
37
+ .option("--json")
38
+ .description("Show skill details")
39
+ .action(infoCmd);
40
+ program
41
+ .command("install <name>")
42
+ .option("--json")
43
+ .description("Install skill")
44
+ .action(installCmd);
45
+ program
46
+ .command("uninstall <name>")
47
+ .option("--json")
48
+ .description("Uninstall skill")
49
+ .action(uninstallCmd);
50
+ program
51
+ .command("plan <name>")
52
+ .option("--json")
53
+ .description("Show plan only")
54
+ .option("--inputs <pairs...>", "input k=v")
55
+ .action(planCmd);
56
+ program
57
+ .command("run <name>")
58
+ .option("--json")
59
+ .description("Run skill")
60
+ .option("--yes", "Skip confirmation")
61
+ .option("--inputs <pairs...>", "input k=v")
62
+ .option("--cwd <dir>", "Working directory")
63
+ .option("--allow-dirty", "Allow dirty repo")
64
+ .option("--no-branch", "Do not create branch")
65
+ .action(runCmd);
66
+ program
67
+ .command("logs")
68
+ .option("--json")
69
+ .description("Show run logs")
70
+ .option("--last", "Last run")
71
+ .option("--id <runId>", "Run ID")
72
+ .action(logsCmd);
73
+ program
74
+ .command("open")
75
+ .option("--json")
76
+ .description("Open dashboard")
77
+ .action(openCmd);
78
+ const cursorCmd = new Command("cursor").description("Cursor integration");
79
+ cursorCmd
80
+ .command("install <name>")
81
+ .option("--json")
82
+ .option("--scope <scope>", "project|global", "project")
83
+ .action(cursorInstallCmd);
84
+ cursorCmd
85
+ .command("list")
86
+ .option("--json")
87
+ .option("--scope <scope>", "project|global|both", "both")
88
+ .action(cursorListCmd);
89
+ program.addCommand(cursorCmd);
90
+ program.parse();
91
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare function cursorInstallCmd(name: string, opts: {
2
+ scope?: string;
3
+ json?: boolean;
4
+ }, cmd?: {
5
+ opts?: () => {
6
+ json?: boolean;
7
+ };
8
+ parent?: {
9
+ opts?: () => {
10
+ json?: boolean;
11
+ };
12
+ };
13
+ }): Promise<void>;
14
+ export declare function cursorListCmd(opts: {
15
+ scope?: string;
16
+ json?: boolean;
17
+ }, cmd?: {
18
+ opts?: () => {
19
+ json?: boolean;
20
+ };
21
+ parent?: {
22
+ opts?: () => {
23
+ json?: boolean;
24
+ };
25
+ };
26
+ }): Promise<void>;
27
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/commands/cursor.ts"],"names":[],"mappings":"AAaA,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxC,GAAG,CAAC,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;CAC9C,GACA,OAAO,CAAC,IAAI,CAAC,CAwDf;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxC,GAAG,CAAC,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;CAC9C,GACA,OAAO,CAAC,IAAI,CAAC,CAkCf"}
@@ -0,0 +1,80 @@
1
+ import chalk from "chalk";
2
+ import { cpSync, existsSync, mkdirSync, readdirSync } from "fs";
3
+ import { join } from "path";
4
+ import { getSkillsDir } from "@skillrunner/engine";
5
+ import { shouldUseJson } from "../utils/json.js";
6
+ function getCursorSkillsDir(scope) {
7
+ if (scope === "global") {
8
+ return join(process.env.HOME || "", ".cursor", "skills");
9
+ }
10
+ return join(process.cwd(), ".cursor", "skills");
11
+ }
12
+ export async function cursorInstallCmd(name, opts, cmd) {
13
+ const json = shouldUseJson(opts, cmd);
14
+ const scope = (opts.scope || "project");
15
+ const skillsDir = getSkillsDir();
16
+ if (!existsSync(skillsDir)) {
17
+ if (json)
18
+ console.log(JSON.stringify({ success: false, error: "No skills installed" }, null, 2));
19
+ else
20
+ console.error(chalk.red('No skills installed. Run "skill install <name>" first.'));
21
+ process.exit(1);
22
+ }
23
+ const entries = readdirSync(skillsDir, { withFileTypes: true });
24
+ const match = entries.find((e) => e.isDirectory() && (e.name === name || e.name.startsWith(name + "@")));
25
+ if (!match) {
26
+ if (json) {
27
+ console.log(JSON.stringify({ success: false, error: `Skill not installed: ${name}` }, null, 2));
28
+ }
29
+ else {
30
+ console.error(chalk.red("Skill not installed:"), name);
31
+ }
32
+ process.exit(1);
33
+ }
34
+ const srcDir = join(skillsDir, match.name);
35
+ const destDir = getCursorSkillsDir(scope);
36
+ mkdirSync(destDir, { recursive: true });
37
+ const dest = join(destDir, match.name.split("@")[0]);
38
+ cpSync(srcDir, dest, { recursive: true });
39
+ if (json) {
40
+ console.log(JSON.stringify({ success: true, path: dest, scope }, null, 2));
41
+ }
42
+ else {
43
+ console.log(chalk.green("Installed to Cursor:"), dest, chalk.dim(`(${scope})`));
44
+ }
45
+ }
46
+ export async function cursorListCmd(opts, cmd) {
47
+ const json = shouldUseJson(opts, cmd);
48
+ const scope = (opts.scope || "both");
49
+ const dirs = [];
50
+ if (scope === "project" || scope === "both") {
51
+ dirs.push({ scope: "project", path: getCursorSkillsDir("project") });
52
+ }
53
+ if (scope === "global" || scope === "both") {
54
+ dirs.push({ scope: "global", path: getCursorSkillsDir("global") });
55
+ }
56
+ const result = {};
57
+ for (const { scope: s, path: p } of dirs) {
58
+ if (existsSync(p)) {
59
+ result[s] = readdirSync(p, { withFileTypes: true })
60
+ .filter((e) => e.isDirectory())
61
+ .map((e) => e.name);
62
+ }
63
+ else {
64
+ result[s] = [];
65
+ }
66
+ }
67
+ if (json) {
68
+ console.log(JSON.stringify(result, null, 2));
69
+ return;
70
+ }
71
+ for (const [s, skills] of Object.entries(result)) {
72
+ console.log(chalk.bold(`${s} skills:`));
73
+ if (skills.length)
74
+ skills.forEach((n) => console.log(` ${n}`));
75
+ else
76
+ console.log(chalk.dim(" (none)"));
77
+ console.log();
78
+ }
79
+ }
80
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/commands/cursor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function doctorCmd(opts: {
2
+ json?: boolean;
3
+ }, cmd: {
4
+ opts?: () => {
5
+ json?: boolean;
6
+ };
7
+ parent?: {
8
+ opts?: () => {
9
+ json?: boolean;
10
+ };
11
+ };
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AASA,wBAAsB,SAAS,CAC7B,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxB,GAAG,EAAE;IACH,IAAI,CAAC,EAAE,MAAM;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;CAC9C,GACA,OAAO,CAAC,IAAI,CAAC,CAkEf"}
@@ -0,0 +1,59 @@
1
+ import chalk from "chalk";
2
+ import { execSync } from "child_process";
3
+ import { resolveRegistryIndex, getSkillsDir, getRunsDir, } from "@skillrunner/engine";
4
+ import { shouldUseJson } from "../utils/json.js";
5
+ export async function doctorCmd(opts, cmd) {
6
+ const json = shouldUseJson(opts, cmd);
7
+ const results = {
8
+ node: null,
9
+ pnpm: null,
10
+ git: null,
11
+ registry: null,
12
+ paths: { skills: getSkillsDir(), runs: getRunsDir() },
13
+ };
14
+ try {
15
+ results.node = execSync("node -v", { encoding: "utf-8" }).trim();
16
+ }
17
+ catch {
18
+ results.node = null;
19
+ }
20
+ try {
21
+ results.pnpm = execSync("pnpm -v 2>/dev/null || npm -v 2>/dev/null", {
22
+ encoding: "utf-8",
23
+ shell: "/bin/bash",
24
+ }).trim();
25
+ }
26
+ catch {
27
+ results.pnpm = null;
28
+ }
29
+ try {
30
+ results.git = execSync("git --version", { encoding: "utf-8" }).trim();
31
+ }
32
+ catch {
33
+ results.git = null;
34
+ }
35
+ try {
36
+ const index = await resolveRegistryIndex();
37
+ results.registry = index ? "ok" : null;
38
+ }
39
+ catch (e) {
40
+ results.registry = e.message;
41
+ }
42
+ if (json) {
43
+ console.log(JSON.stringify(results, null, 2));
44
+ return;
45
+ }
46
+ console.log(chalk.bold("SkillRunner Doctor\n"));
47
+ console.log("Node: ", results.node ? chalk.green(results.node) : chalk.red("not found"));
48
+ console.log("pnpm: ", results.pnpm
49
+ ? chalk.green(results.pnpm)
50
+ : chalk.yellow("optional"));
51
+ console.log("Git: ", results.git ? chalk.green(results.git) : chalk.red("not found"));
52
+ console.log("Registry:", results.registry === "ok"
53
+ ? chalk.green("reachable")
54
+ : chalk.red(String(results.registry)));
55
+ console.log("\nPaths:");
56
+ console.log(" skills:", getSkillsDir());
57
+ console.log(" runs: ", getRunsDir());
58
+ }
59
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function infoCmd(name: string, opts: {
2
+ json?: boolean;
3
+ }, cmd: {
4
+ opts?: () => {
5
+ json?: boolean;
6
+ };
7
+ parent?: {
8
+ opts?: () => {
9
+ json?: boolean;
10
+ };
11
+ };
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAwBA,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxB,GAAG,EAAE;IACH,IAAI,CAAC,EAAE,MAAM;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;CAC9C,GACA,OAAO,CAAC,IAAI,CAAC,CAyFf"}
@@ -0,0 +1,102 @@
1
+ import chalk from "chalk";
2
+ import { resolveRegistryIndex, getSkillFromIndex, parseSkillMd, getSkillsDir, } from "@skillrunner/engine";
3
+ import { existsSync, readFileSync, readdirSync } from "fs";
4
+ import { join } from "path";
5
+ import { shouldUseJson } from "../utils/json.js";
6
+ function findInstalledSkillDir(name) {
7
+ const skillsDir = getSkillsDir();
8
+ if (!existsSync(skillsDir))
9
+ return null;
10
+ const entries = readdirSync(skillsDir, { withFileTypes: true });
11
+ const match = entries.find((e) => e.isDirectory() && (e.name === name || e.name.startsWith(`${name}@`)));
12
+ return match ? join(skillsDir, match.name) : null;
13
+ }
14
+ export async function infoCmd(name, opts, cmd) {
15
+ const json = shouldUseJson(opts, cmd);
16
+ let skill;
17
+ const localPath = findInstalledSkillDir(name);
18
+ if (localPath && existsSync(join(localPath, "SKILL.md"))) {
19
+ const meta = parseSkillMd(readFileSync(join(localPath, "SKILL.md"), "utf-8"));
20
+ skill = {
21
+ name: meta.name,
22
+ description: meta.description,
23
+ version: meta.version,
24
+ tags: meta.tags,
25
+ kind: meta.kind,
26
+ risk: meta.risk,
27
+ availability: meta.availability,
28
+ prerequisites: meta.prerequisites,
29
+ capabilities: meta.capabilities,
30
+ scripts: meta.scripts,
31
+ inputs: meta.inputs,
32
+ paths: {
33
+ dir: localPath,
34
+ skill_md: join(localPath, "SKILL.md"),
35
+ raw_skill_md: "",
36
+ },
37
+ };
38
+ }
39
+ if (!skill) {
40
+ try {
41
+ const idx = await resolveRegistryIndex();
42
+ skill = getSkillFromIndex(idx, name);
43
+ }
44
+ catch (e) {
45
+ if (json) {
46
+ console.log(JSON.stringify({ error: e.message }, null, 2));
47
+ }
48
+ else {
49
+ console.error(chalk.red("Registry unreachable:"), e.message);
50
+ }
51
+ process.exit(1);
52
+ }
53
+ }
54
+ if (!skill) {
55
+ if (json)
56
+ console.log(JSON.stringify({ error: "Skill not found" }, null, 2));
57
+ else
58
+ console.error(chalk.red("Skill not found:"), name);
59
+ process.exit(1);
60
+ }
61
+ if (json) {
62
+ console.log(JSON.stringify(skill, null, 2));
63
+ return;
64
+ }
65
+ console.log(chalk.bold(skill.name));
66
+ if (skill.version)
67
+ console.log(chalk.dim(`Version: ${skill.version}`));
68
+ console.log(chalk.dim(`Kind: ${skill.kind || "unknown"}`));
69
+ console.log(chalk.dim(`Risk: ${skill.risk || "low"}`));
70
+ console.log(chalk.dim(`Availability: ${skill.availability || "default"}`));
71
+ console.log();
72
+ console.log(skill.description);
73
+ if (skill.prerequisites) {
74
+ const tools = Array.isArray(skill.prerequisites.tools)
75
+ ? skill.prerequisites.tools
76
+ : [];
77
+ const files = Array.isArray(skill.prerequisites.files)
78
+ ? skill.prerequisites.files
79
+ : [];
80
+ const env = Array.isArray(skill.prerequisites.env)
81
+ ? skill.prerequisites.env
82
+ : [];
83
+ const packageJsonDeps = Array.isArray(skill.prerequisites.packageJsonDeps)
84
+ ? skill.prerequisites.packageJsonDeps
85
+ : [];
86
+ if (tools.length || files.length || env.length || packageJsonDeps.length) {
87
+ console.log(chalk.dim("\nPrerequisites:"));
88
+ if (tools.length)
89
+ console.log(chalk.dim(` tools: ${tools.join(", ")}`));
90
+ if (files.length)
91
+ console.log(chalk.dim(` files: ${files.join(", ")}`));
92
+ if (env.length)
93
+ console.log(chalk.dim(` env: ${env.map((v) => `$${v}`).join(", ")}`));
94
+ if (packageJsonDeps.length) {
95
+ console.log(chalk.dim(` packageJsonDeps: ${packageJsonDeps.join(", ")}`));
96
+ }
97
+ }
98
+ }
99
+ if (skill.tags?.length)
100
+ console.log(chalk.dim("\nTags: " + skill.tags.join(", ")));
101
+ }
102
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function installCmd(name: string, opts: {
2
+ json?: boolean;
3
+ }, cmd: {
4
+ opts?: () => {
5
+ json?: boolean;
6
+ };
7
+ parent?: {
8
+ opts?: () => {
9
+ json?: boolean;
10
+ };
11
+ };
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAqJA,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxB,GAAG,EAAE;IACH,IAAI,CAAC,EAAE,MAAM;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;CAC9C,GACA,OAAO,CAAC,IAAI,CAAC,CA2Ff"}