@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.
- package/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +91 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/cursor.d.ts +27 -0
- package/dist/commands/cursor.d.ts.map +1 -0
- package/dist/commands/cursor.js +80 -0
- package/dist/commands/cursor.js.map +1 -0
- package/dist/commands/doctor.d.ts +13 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +59 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/info.d.ts +13 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +102 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/install.d.ts +13 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +167 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +13 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +51 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/logs.d.ts +15 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +99 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/open.d.ts +13 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +30 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/plan.d.ts +14 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +75 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/run.d.ts +17 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +143 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/search.d.ts +13 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +32 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/uninstall.d.ts +13 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +35 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/util.d.ts +7 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +9 -0
- package/dist/util.js.map +1 -0
- package/dist/utils/json.d.ts +11 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +10 -0
- package/dist/utils/json.js.map +1 -0
- 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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|