@ranimontagna/agent-toolkit 0.1.1
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 +426 -0
- package/dist/bin/agent-toolkit.d.ts +2 -0
- package/dist/bin/agent-toolkit.js +14 -0
- package/dist/bin/agent-toolkit.js.map +1 -0
- package/dist/src/args.d.ts +1 -0
- package/dist/src/args.js +152 -0
- package/dist/src/args.js.map +1 -0
- package/dist/src/checksum.d.ts +2 -0
- package/dist/src/checksum.js +9 -0
- package/dist/src/checksum.js.map +1 -0
- package/dist/src/context.d.ts +3 -0
- package/dist/src/context.js +10 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/installers/caveman.d.ts +1 -0
- package/dist/src/installers/caveman.js +23 -0
- package/dist/src/installers/caveman.js.map +1 -0
- package/dist/src/installers/frontend-skills.d.ts +1 -0
- package/dist/src/installers/frontend-skills.js +82 -0
- package/dist/src/installers/frontend-skills.js.map +1 -0
- package/dist/src/installers/graphify.d.ts +1 -0
- package/dist/src/installers/graphify.js +58 -0
- package/dist/src/installers/graphify.js.map +1 -0
- package/dist/src/installers/gsd.d.ts +1 -0
- package/dist/src/installers/gsd.js +19 -0
- package/dist/src/installers/gsd.js.map +1 -0
- package/dist/src/installers/rtk.d.ts +1 -0
- package/dist/src/installers/rtk.js +158 -0
- package/dist/src/installers/rtk.js.map +1 -0
- package/dist/src/installers/superpowers.d.ts +1 -0
- package/dist/src/installers/superpowers.js +73 -0
- package/dist/src/installers/superpowers.js.map +1 -0
- package/dist/src/logger.d.ts +18 -0
- package/dist/src/logger.js +35 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/main.d.ts +1 -0
- package/dist/src/main.js +104 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/menu.d.ts +1 -0
- package/dist/src/menu.js +98 -0
- package/dist/src/menu.js.map +1 -0
- package/dist/src/provenance.d.ts +1 -0
- package/dist/src/provenance.js +44 -0
- package/dist/src/provenance.js.map +1 -0
- package/dist/src/runtimes.d.ts +7 -0
- package/dist/src/runtimes.js +123 -0
- package/dist/src/runtimes.js.map +1 -0
- package/dist/src/skills.d.ts +12 -0
- package/dist/src/skills.js +247 -0
- package/dist/src/skills.js.map +1 -0
- package/dist/src/state.d.ts +51 -0
- package/dist/src/state.js +137 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/system.d.ts +21 -0
- package/dist/src/system.js +109 -0
- package/dist/src/system.js.map +1 -0
- package/dist/src/tool-lock.d.ts +60 -0
- package/dist/src/tool-lock.js +109 -0
- package/dist/src/tool-lock.js.map +1 -0
- package/dist/src/ui.d.ts +3 -0
- package/dist/src/ui.js +41 -0
- package/dist/src/ui.js.map +1 -0
- package/dist/src/usage.d.ts +1 -0
- package/dist/src/usage.js +66 -0
- package/dist/src/usage.js.map +1 -0
- package/package.json +50 -0
- package/setup-agent-toolkit.sh +20 -0
- package/skills/core/agent-toolkit-maintainer/SKILL.md +68 -0
- package/tools.lock.json +84 -0
package/dist/src/menu.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { createInterface } from "node:readline/promises";
|
|
3
|
+
import { die } from "./logger.js";
|
|
4
|
+
import { availableSkillScopes, discoverSkillDirs } from "./skills.js";
|
|
5
|
+
import { isRuntimeName, isToolName, setAllRuntimes, setAllTools, splitList, state, } from "./state.js";
|
|
6
|
+
import { usage } from "./usage.js";
|
|
7
|
+
function selectToolsFromAnswer(answer) {
|
|
8
|
+
setAllTools(false);
|
|
9
|
+
if (!answer.trim())
|
|
10
|
+
die("Select at least one tool.");
|
|
11
|
+
for (const tool of splitList(answer)) {
|
|
12
|
+
if (tool === "all") {
|
|
13
|
+
setAllTools(true);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (!isToolName(tool))
|
|
17
|
+
die(`Unknown tool in menu selection: ${tool}`);
|
|
18
|
+
state.tools[tool] = true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function selectRuntimesFromAnswer(answer) {
|
|
22
|
+
setAllRuntimes(false);
|
|
23
|
+
if (!answer.trim())
|
|
24
|
+
die("Select at least one runtime.");
|
|
25
|
+
for (const runtime of splitList(answer)) {
|
|
26
|
+
if (runtime === "all") {
|
|
27
|
+
setAllRuntimes(true);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!isRuntimeName(runtime))
|
|
31
|
+
die(`Unknown runtime in menu selection: ${runtime}`);
|
|
32
|
+
state.runtimes[runtime] = true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function selectScopeFromAnswer(answer) {
|
|
36
|
+
if (!answer.trim())
|
|
37
|
+
return;
|
|
38
|
+
const scope = answer.trim().toLowerCase();
|
|
39
|
+
if (scope !== "global" && scope !== "local")
|
|
40
|
+
die(`Unknown install scope: ${scope}`);
|
|
41
|
+
state.gsdScope = scope;
|
|
42
|
+
}
|
|
43
|
+
function selectSkillScopesFromAnswer(answer) {
|
|
44
|
+
if (!answer.trim() || answer.trim().toLowerCase() === "all")
|
|
45
|
+
return;
|
|
46
|
+
state.skillScopes.push(...splitList(answer));
|
|
47
|
+
}
|
|
48
|
+
function printAvailableSkillScopes() {
|
|
49
|
+
const skillDirs = discoverSkillDirs();
|
|
50
|
+
const scopes = availableSkillScopes(skillDirs);
|
|
51
|
+
if (scopes.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
console.log("");
|
|
54
|
+
console.log("Available skill scopes:");
|
|
55
|
+
for (const scope of scopes)
|
|
56
|
+
console.log(` - ${scope}`);
|
|
57
|
+
}
|
|
58
|
+
function applyMenuAnswers(answers) {
|
|
59
|
+
selectToolsFromAnswer(answers[0] ?? "");
|
|
60
|
+
selectRuntimesFromAnswer(answers[1] ?? "");
|
|
61
|
+
selectScopeFromAnswer(answers[2] ?? "");
|
|
62
|
+
state.installMissingClis = /^y(es)?$/i.test((answers[3] ?? "").trim());
|
|
63
|
+
if (state.tools.skills) {
|
|
64
|
+
selectSkillScopesFromAnswer(answers[4] ?? "");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function showMenu() {
|
|
68
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
69
|
+
const raw = fs.readFileSync(0, "utf8");
|
|
70
|
+
if (!raw.trim()) {
|
|
71
|
+
die("No interactive terminal detected. Pass --all/--*-only flags or pipe menu answers.");
|
|
72
|
+
}
|
|
73
|
+
applyMenuAnswers(raw.split(/\r?\n/));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
77
|
+
try {
|
|
78
|
+
console.log(usage());
|
|
79
|
+
console.log("");
|
|
80
|
+
const toolsAnswer = await rl.question("Tools to install [comma list: rtk,caveman,superpowers,graphify,gsd,frontend-skills,skills, or all]: ");
|
|
81
|
+
selectToolsFromAnswer(toolsAnswer);
|
|
82
|
+
const runtimeAnswer = await rl.question("Runtimes to target [comma list: claude,codex,opencode,gemini, or all]: ");
|
|
83
|
+
selectRuntimesFromAnswer(runtimeAnswer);
|
|
84
|
+
const scopeAnswer = await rl.question("Install scope [global/local, default global]: ");
|
|
85
|
+
selectScopeFromAnswer(scopeAnswer);
|
|
86
|
+
const cliAnswer = await rl.question("Install missing selected CLIs via npm? [y/N]: ");
|
|
87
|
+
state.installMissingClis = /^y(es)?$/i.test(cliAnswer.trim());
|
|
88
|
+
if (state.tools.skills) {
|
|
89
|
+
printAvailableSkillScopes();
|
|
90
|
+
const scopeAnswer = await rl.question("Skill scopes to install [comma list, all, default all]: ");
|
|
91
|
+
selectSkillScopesFromAnswer(scopeAnswer);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
rl.close();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function checkExternalToolProvenance(): void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { die, warn } from "./logger.js";
|
|
2
|
+
import { runtimeMeta, runtimeNames, state } from "./state.js";
|
|
3
|
+
import { isMutableExternalSource } from "./tool-lock.js";
|
|
4
|
+
function checkSource(label, spec) {
|
|
5
|
+
if (!isMutableExternalSource(spec))
|
|
6
|
+
return;
|
|
7
|
+
if (state.allowMutableSources) {
|
|
8
|
+
warn(`Mutable external tool source allowed explicitly: ${label}=${spec}`);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
die(`Mutable external tool source is not allowed: ${label}=${spec}. ` +
|
|
12
|
+
"Pin it in tools.lock.json or pass --allow-mutable-sources.");
|
|
13
|
+
}
|
|
14
|
+
function checkRtkReleaseSource() {
|
|
15
|
+
if (!state.rtkGithub.includes("/releases/latest"))
|
|
16
|
+
return;
|
|
17
|
+
if (state.allowMutableSources) {
|
|
18
|
+
warn(`Mutable RTK release source allowed explicitly: ${state.rtkGithub}`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
die(`Mutable external tool source is not allowed: RTK=${state.rtkGithub}. ` +
|
|
22
|
+
"Use a tagged release URL from tools.lock.json or pass --allow-mutable-sources.");
|
|
23
|
+
}
|
|
24
|
+
export function checkExternalToolProvenance() {
|
|
25
|
+
if (state.tools.rtk)
|
|
26
|
+
checkRtkReleaseSource();
|
|
27
|
+
if (state.tools.caveman)
|
|
28
|
+
checkSource("Caveman", state.cavemanPackage);
|
|
29
|
+
if (state.tools.graphify)
|
|
30
|
+
checkSource("Graphify", state.graphifyPackage);
|
|
31
|
+
if (state.tools.gsd)
|
|
32
|
+
checkSource("GSD", state.gsdPackage);
|
|
33
|
+
if (state.tools["frontend-skills"]) {
|
|
34
|
+
checkSource("Agent Skills CLI", state.frontendSkillsCliPackage);
|
|
35
|
+
}
|
|
36
|
+
if (!state.installMissingClis)
|
|
37
|
+
return;
|
|
38
|
+
for (const runtime of runtimeNames) {
|
|
39
|
+
if (!state.runtimes[runtime])
|
|
40
|
+
continue;
|
|
41
|
+
checkSource(runtimeMeta[runtime].label, state.cliPackages[runtime]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,SAAS,WAAW,CAAC,KAAa,EAAE,IAAY;IAC9C,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;QAAE,OAAO;IAE3C,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC9B,IAAI,CAAC,oDAAoD,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,GAAG,CACD,gDAAgD,KAAK,IAAI,IAAI,IAAI;QAC/D,4DAA4D,CAC/D,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB;IAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAAE,OAAO;IAE1D,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC9B,IAAI,CAAC,kDAAkD,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,GAAG,CACD,oDAAoD,KAAK,CAAC,SAAS,IAAI;QACrE,gFAAgF,CACnF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG;QAAE,qBAAqB,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO;QAAE,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ;QAAE,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG;QAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAAE,OAAO;IAEtC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACvC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type RuntimeName } from "./state.js";
|
|
2
|
+
export declare function runtimeCommand(runtime: RuntimeName): string;
|
|
3
|
+
export declare function runtimeLabel(runtime: RuntimeName): string;
|
|
4
|
+
export declare function selectedCavemanArgs(): string[];
|
|
5
|
+
export declare function selectedGsdArgs(): string[];
|
|
6
|
+
export declare function selectedSkillsAgentArgs(): string[];
|
|
7
|
+
export declare function checkPrerequisites(): void;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { die, err, info, ok, step, warn } from "./logger.js";
|
|
2
|
+
import { runtimeMeta, runtimeNames, state } from "./state.js";
|
|
3
|
+
import { commandExists, requireCommand, requireNode, run } from "./system.js";
|
|
4
|
+
export function runtimeCommand(runtime) {
|
|
5
|
+
return runtimeMeta[runtime].command;
|
|
6
|
+
}
|
|
7
|
+
export function runtimeLabel(runtime) {
|
|
8
|
+
return runtimeMeta[runtime].label;
|
|
9
|
+
}
|
|
10
|
+
export function selectedCavemanArgs() {
|
|
11
|
+
const args = [];
|
|
12
|
+
for (const runtime of runtimeNames) {
|
|
13
|
+
if (state.runtimes[runtime])
|
|
14
|
+
args.push("--only", runtime);
|
|
15
|
+
}
|
|
16
|
+
if (state.cavemanMode !== "all")
|
|
17
|
+
args.push("--minimal");
|
|
18
|
+
args.push("--non-interactive");
|
|
19
|
+
return args;
|
|
20
|
+
}
|
|
21
|
+
export function selectedGsdArgs() {
|
|
22
|
+
const args = [state.gsdScope === "local" ? "--local" : "--global"];
|
|
23
|
+
for (const runtime of runtimeNames) {
|
|
24
|
+
if (state.runtimes[runtime])
|
|
25
|
+
args.push(`--${runtime}`);
|
|
26
|
+
}
|
|
27
|
+
return args;
|
|
28
|
+
}
|
|
29
|
+
const skillsAgentNames = {
|
|
30
|
+
claude: "claude-code",
|
|
31
|
+
codex: "codex",
|
|
32
|
+
opencode: "opencode",
|
|
33
|
+
gemini: "gemini-cli",
|
|
34
|
+
};
|
|
35
|
+
export function selectedSkillsAgentArgs() {
|
|
36
|
+
const args = [];
|
|
37
|
+
for (const runtime of runtimeNames) {
|
|
38
|
+
if (state.runtimes[runtime])
|
|
39
|
+
args.push("--agent", skillsAgentNames[runtime]);
|
|
40
|
+
}
|
|
41
|
+
return args;
|
|
42
|
+
}
|
|
43
|
+
function installRuntimeCli(runtime) {
|
|
44
|
+
const label = runtimeLabel(runtime);
|
|
45
|
+
const command = runtimeCommand(runtime);
|
|
46
|
+
const packageName = state.cliPackages[runtime];
|
|
47
|
+
requireNode(18);
|
|
48
|
+
requireCommand("npm");
|
|
49
|
+
info(`Installing ${label} via npm package ${packageName}...`);
|
|
50
|
+
const result = run("npm", ["install", "-g", packageName]);
|
|
51
|
+
if (!result.ok) {
|
|
52
|
+
err(`${label} install failed.`);
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
if (commandExists(command)) {
|
|
56
|
+
ok(`${label} installed`);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
err(`${label} package installed, but '${command}' is still not on PATH.`);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
function ensureRuntimeCli(runtime) {
|
|
63
|
+
const command = runtimeCommand(runtime);
|
|
64
|
+
const label = runtimeLabel(runtime);
|
|
65
|
+
if (commandExists(command)) {
|
|
66
|
+
ok(`${label} found`);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
if (state.installMissingClis)
|
|
70
|
+
return installRuntimeCli(runtime);
|
|
71
|
+
warn(`${label} not found; selected runtime may be skipped or require manual setup.`);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
export function checkPrerequisites() {
|
|
75
|
+
step("Checking prerequisites");
|
|
76
|
+
if (state.tools.rtk && commandExists("rtk")) {
|
|
77
|
+
ok("RTK found");
|
|
78
|
+
}
|
|
79
|
+
if (state.tools.caveman) {
|
|
80
|
+
requireNode(18);
|
|
81
|
+
requireCommand("npx");
|
|
82
|
+
ok(`node found: ${process.version}`);
|
|
83
|
+
ok("npx found");
|
|
84
|
+
}
|
|
85
|
+
if (state.tools.gsd) {
|
|
86
|
+
requireNode(22);
|
|
87
|
+
requireCommand("npx");
|
|
88
|
+
ok(`node found: ${process.version}`);
|
|
89
|
+
ok("npx found");
|
|
90
|
+
}
|
|
91
|
+
if (state.tools["frontend-skills"]) {
|
|
92
|
+
requireNode(18);
|
|
93
|
+
requireCommand("git");
|
|
94
|
+
requireCommand("npx");
|
|
95
|
+
ok(`node found: ${process.version}`);
|
|
96
|
+
ok("git found");
|
|
97
|
+
ok("npx found");
|
|
98
|
+
}
|
|
99
|
+
if (state.tools.graphify && !commandExists("graphify")) {
|
|
100
|
+
if (state.graphifyInstaller === "uv") {
|
|
101
|
+
requireCommand("uv");
|
|
102
|
+
ok("uv found");
|
|
103
|
+
}
|
|
104
|
+
else if (state.graphifyInstaller === "pipx") {
|
|
105
|
+
requireCommand("pipx");
|
|
106
|
+
ok("pipx found");
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
die("GRAPHIFY_INSTALLER must be uv or pipx.");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (state.installMissingClis) {
|
|
113
|
+
requireNode(18);
|
|
114
|
+
requireCommand("npm");
|
|
115
|
+
ok("npm found");
|
|
116
|
+
}
|
|
117
|
+
for (const runtime of runtimeNames) {
|
|
118
|
+
if (state.runtimes[runtime])
|
|
119
|
+
ensureRuntimeCli(runtime);
|
|
120
|
+
}
|
|
121
|
+
console.log("");
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=runtimes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimes.js","sourceRoot":"","sources":["../../src/runtimes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type SkillMetadata = Record<string, string>;
|
|
2
|
+
type SkillMetadataResult = {
|
|
3
|
+
metadata: SkillMetadata;
|
|
4
|
+
} | {
|
|
5
|
+
error: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function parseSkillMetadata(filePath: string): SkillMetadataResult;
|
|
8
|
+
export declare function discoverSkillDirs(): string[];
|
|
9
|
+
export declare function availableSkillScopes(skillDirs: string[]): string[];
|
|
10
|
+
export declare function listCustomSkills(): boolean;
|
|
11
|
+
export declare function installCustomSkills(): boolean;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { HOME } from "./context.js";
|
|
4
|
+
import { err, ok, step, warn } from "./logger.js";
|
|
5
|
+
import { normalizedSkillScopes, runtimeNames, state, } from "./state.js";
|
|
6
|
+
import { commandExists, findCommand, run } from "./system.js";
|
|
7
|
+
function opencodeConfigDir() {
|
|
8
|
+
if (process.env.OPENCODE_CONFIG_DIR)
|
|
9
|
+
return process.env.OPENCODE_CONFIG_DIR;
|
|
10
|
+
if (process.env.OPENCODE_CONFIG)
|
|
11
|
+
return path.dirname(process.env.OPENCODE_CONFIG);
|
|
12
|
+
if (process.env.XDG_CONFIG_HOME)
|
|
13
|
+
return path.join(process.env.XDG_CONFIG_HOME, "opencode");
|
|
14
|
+
return path.join(HOME, ".config", "opencode");
|
|
15
|
+
}
|
|
16
|
+
function geminiConfigDir() {
|
|
17
|
+
return process.env.GEMINI_CONFIG_DIR || path.join(HOME, ".gemini");
|
|
18
|
+
}
|
|
19
|
+
function skillsTargetDir(runtime) {
|
|
20
|
+
if (state.gsdScope === "local") {
|
|
21
|
+
return path.join(process.cwd(), `.${runtime}`, "skills");
|
|
22
|
+
}
|
|
23
|
+
switch (runtime) {
|
|
24
|
+
case "claude":
|
|
25
|
+
return path.join(process.env.CLAUDE_CONFIG_DIR || path.join(HOME, ".claude"), "skills");
|
|
26
|
+
case "codex":
|
|
27
|
+
return path.join(process.env.CODEX_HOME || path.join(HOME, ".codex"), "skills");
|
|
28
|
+
case "opencode":
|
|
29
|
+
return path.join(opencodeConfigDir(), "skills");
|
|
30
|
+
case "gemini":
|
|
31
|
+
return path.join(geminiConfigDir(), "skills");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function parseSkillMetadata(filePath) {
|
|
35
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
36
|
+
const lines = raw.split(/\r?\n/);
|
|
37
|
+
if (lines[0] !== "---") {
|
|
38
|
+
return {
|
|
39
|
+
error: `Invalid skill frontmatter in ${filePath}: first line must be ---`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const closing = lines.findIndex((line, index) => index > 0 && line === "---");
|
|
43
|
+
if (closing === -1) {
|
|
44
|
+
return {
|
|
45
|
+
error: `Invalid skill frontmatter in ${filePath}: missing closing ---`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const metadata = {};
|
|
49
|
+
for (const line of lines.slice(1, closing)) {
|
|
50
|
+
const match = line.match(/^([A-Za-z0-9_-]+):\s*(.*)$/);
|
|
51
|
+
if (!match)
|
|
52
|
+
continue;
|
|
53
|
+
const key = match[1];
|
|
54
|
+
const rawValue = match[2];
|
|
55
|
+
if (!key || rawValue === undefined)
|
|
56
|
+
continue;
|
|
57
|
+
let value = rawValue.trim();
|
|
58
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
59
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
60
|
+
value = value.slice(1, -1);
|
|
61
|
+
}
|
|
62
|
+
metadata[key] = value;
|
|
63
|
+
}
|
|
64
|
+
return { metadata };
|
|
65
|
+
}
|
|
66
|
+
function validateSkillDir(skillDir) {
|
|
67
|
+
const filePath = path.join(skillDir, "SKILL.md");
|
|
68
|
+
if (!fs.existsSync(filePath)) {
|
|
69
|
+
err(`Missing SKILL.md in ${skillDir}`);
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
const parsed = parseSkillMetadata(filePath);
|
|
73
|
+
if ("error" in parsed) {
|
|
74
|
+
err(parsed.error);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
const { name = "", description = "" } = parsed.metadata;
|
|
78
|
+
if (!name) {
|
|
79
|
+
err(`Invalid skill metadata in ${filePath}: missing name`);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (name.length > 64 || !/^[a-z0-9]+(-[a-z0-9]+)*$/.test(name)) {
|
|
83
|
+
err(`Invalid skill name in ${filePath}: ${name}`);
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
if (!description) {
|
|
87
|
+
err(`Invalid skill metadata in ${filePath}: missing description`);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
if (description.length > 1024) {
|
|
91
|
+
err(`Invalid skill description in ${filePath}: description exceeds 1024 characters`);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
function skillRelativePath(skillDir) {
|
|
97
|
+
return path.relative(state.customSkillsDir, skillDir).replace(/\\/g, "/");
|
|
98
|
+
}
|
|
99
|
+
export function discoverSkillDirs() {
|
|
100
|
+
if (!fs.existsSync(state.customSkillsDir) ||
|
|
101
|
+
!fs.statSync(state.customSkillsDir).isDirectory()) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
const found = [];
|
|
105
|
+
const visit = (dir) => {
|
|
106
|
+
const skillFile = path.join(dir, "SKILL.md");
|
|
107
|
+
if (fs.existsSync(skillFile)) {
|
|
108
|
+
found.push(dir);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
112
|
+
if (!entry.isDirectory())
|
|
113
|
+
continue;
|
|
114
|
+
if (entry.name.startsWith("."))
|
|
115
|
+
continue;
|
|
116
|
+
visit(path.join(dir, entry.name));
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
visit(state.customSkillsDir);
|
|
120
|
+
return found.sort((a, b) => skillRelativePath(a).localeCompare(skillRelativePath(b)));
|
|
121
|
+
}
|
|
122
|
+
function skillMatchesScope(skillDir, scope) {
|
|
123
|
+
const relative = skillRelativePath(skillDir).toLowerCase();
|
|
124
|
+
return relative === scope || relative.startsWith(`${scope}/`);
|
|
125
|
+
}
|
|
126
|
+
function filterSkillDirsByScope(skillDirs) {
|
|
127
|
+
const scopes = normalizedSkillScopes();
|
|
128
|
+
if (scopes.length === 0)
|
|
129
|
+
return skillDirs;
|
|
130
|
+
return skillDirs.filter((skillDir) => scopes.some((scope) => skillMatchesScope(skillDir, scope)));
|
|
131
|
+
}
|
|
132
|
+
export function availableSkillScopes(skillDirs) {
|
|
133
|
+
const scopes = new Set();
|
|
134
|
+
for (const skillDir of skillDirs) {
|
|
135
|
+
const parts = skillRelativePath(skillDir).split("/").filter(Boolean);
|
|
136
|
+
for (let i = 1; i < parts.length; i += 1) {
|
|
137
|
+
scopes.add(parts.slice(0, i).join("/"));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return [...scopes].sort();
|
|
141
|
+
}
|
|
142
|
+
export function listCustomSkills() {
|
|
143
|
+
if (!fs.existsSync(state.customSkillsDir) ||
|
|
144
|
+
!fs.statSync(state.customSkillsDir).isDirectory()) {
|
|
145
|
+
warn(`Skills directory not found: ${state.customSkillsDir}`);
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
const allSkillDirs = discoverSkillDirs();
|
|
149
|
+
const skillDirs = filterSkillDirsByScope(allSkillDirs);
|
|
150
|
+
if (skillDirs.length === 0) {
|
|
151
|
+
warn(`No Agent Skills found in ${state.customSkillsDir}`);
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
console.log("Custom Skills");
|
|
155
|
+
for (const skillDir of skillDirs) {
|
|
156
|
+
const parsed = parseSkillMetadata(path.join(skillDir, "SKILL.md"));
|
|
157
|
+
const description = !("error" in parsed) && parsed.metadata.description
|
|
158
|
+
? ` - ${parsed.metadata.description}`
|
|
159
|
+
: "";
|
|
160
|
+
console.log(` - ${skillRelativePath(skillDir)}${description}`);
|
|
161
|
+
}
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
function copySkillDir(sourceDir, targetRoot) {
|
|
165
|
+
const name = path.basename(sourceDir);
|
|
166
|
+
const destination = path.join(targetRoot, name);
|
|
167
|
+
const tempDestination = `${destination}.tmp.${process.pid}`;
|
|
168
|
+
fs.mkdirSync(targetRoot, { recursive: true });
|
|
169
|
+
fs.rmSync(tempDestination, { recursive: true, force: true });
|
|
170
|
+
fs.cpSync(sourceDir, tempDestination, { recursive: true });
|
|
171
|
+
fs.rmSync(destination, { recursive: true, force: true });
|
|
172
|
+
fs.renameSync(tempDestination, destination);
|
|
173
|
+
}
|
|
174
|
+
function installGeminiSkill(skillDir) {
|
|
175
|
+
const scope = state.gsdScope === "local" ? "workspace" : "user";
|
|
176
|
+
const gemini = findCommand("gemini");
|
|
177
|
+
if (gemini) {
|
|
178
|
+
return run(gemini, [
|
|
179
|
+
"skills",
|
|
180
|
+
"install",
|
|
181
|
+
skillDir,
|
|
182
|
+
"--scope",
|
|
183
|
+
scope,
|
|
184
|
+
"--consent",
|
|
185
|
+
]).ok;
|
|
186
|
+
}
|
|
187
|
+
copySkillDir(skillDir, skillsTargetDir("gemini"));
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
function installCustomSkillsForRuntime(runtime, skillDirs) {
|
|
191
|
+
const targetRoot = skillsTargetDir(runtime);
|
|
192
|
+
let installed = 0;
|
|
193
|
+
for (const skillDir of skillDirs) {
|
|
194
|
+
if (runtime === "gemini") {
|
|
195
|
+
if (!installGeminiSkill(skillDir))
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
copySkillDir(skillDir, targetRoot);
|
|
200
|
+
}
|
|
201
|
+
installed += 1;
|
|
202
|
+
}
|
|
203
|
+
if (installed > 0) {
|
|
204
|
+
if (runtime === "gemini" && commandExists("gemini")) {
|
|
205
|
+
ok(`Installed ${installed} skill(s) for gemini via Gemini CLI`);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
ok(`Installed ${installed} skill(s) for ${runtime} at ${targetRoot}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
warn(`No skills found in ${state.customSkillsDir} for ${runtime}`);
|
|
213
|
+
}
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
export function installCustomSkills() {
|
|
217
|
+
step("Custom Skills");
|
|
218
|
+
console.log(" Personal skills bundled with this hub");
|
|
219
|
+
if (!fs.existsSync(state.customSkillsDir) ||
|
|
220
|
+
!fs.statSync(state.customSkillsDir).isDirectory()) {
|
|
221
|
+
warn(`Skills directory not found: ${state.customSkillsDir}`);
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
const skillDirs = filterSkillDirsByScope(discoverSkillDirs());
|
|
225
|
+
for (const skillDir of skillDirs) {
|
|
226
|
+
if (!validateSkillDir(skillDir))
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
if (skillDirs.length === 0) {
|
|
230
|
+
const scopes = normalizedSkillScopes();
|
|
231
|
+
if (scopes.length > 0) {
|
|
232
|
+
warn(`No Agent Skills found in ${state.customSkillsDir} for scope: ${scopes.join(", ")}`);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
warn(`No Agent Skills found in ${state.customSkillsDir}`);
|
|
236
|
+
}
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
for (const runtime of runtimeNames) {
|
|
240
|
+
if (state.runtimes[runtime] &&
|
|
241
|
+
!installCustomSkillsForRuntime(runtime, skillDirs)) {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export declare const toolNames: readonly ["rtk", "caveman", "superpowers", "graphify", "gsd", "frontend-skills", "skills"];
|
|
2
|
+
export type ToolName = (typeof toolNames)[number];
|
|
3
|
+
export declare const runtimeNames: readonly ["claude", "codex", "opencode", "gemini"];
|
|
4
|
+
export type RuntimeName = (typeof runtimeNames)[number];
|
|
5
|
+
export type InstallScope = "global" | "local";
|
|
6
|
+
type RuntimeMeta = {
|
|
7
|
+
command: string;
|
|
8
|
+
label: string;
|
|
9
|
+
display: string;
|
|
10
|
+
};
|
|
11
|
+
type State = {
|
|
12
|
+
rtkInstallDir: string;
|
|
13
|
+
rtkGithub: string;
|
|
14
|
+
rtkAssetChecksums: Record<string, string>;
|
|
15
|
+
cavemanPackage: string;
|
|
16
|
+
cavemanMode: string;
|
|
17
|
+
graphifyPackage: string;
|
|
18
|
+
graphifyInstaller: string;
|
|
19
|
+
gsdPackage: string;
|
|
20
|
+
frontendSkillsCliPackage: string;
|
|
21
|
+
frontendSkillSources: Array<{
|
|
22
|
+
label: string;
|
|
23
|
+
repository: string;
|
|
24
|
+
ref: string;
|
|
25
|
+
skill: string;
|
|
26
|
+
}>;
|
|
27
|
+
gsdScope: InstallScope;
|
|
28
|
+
customSkillsDir: string;
|
|
29
|
+
skillScopes: string[];
|
|
30
|
+
listSkills: boolean;
|
|
31
|
+
cliPackages: Record<RuntimeName, string>;
|
|
32
|
+
tools: Record<ToolName, boolean>;
|
|
33
|
+
runtimes: Record<RuntimeName, boolean>;
|
|
34
|
+
nonInteractive: boolean;
|
|
35
|
+
installMissingClis: boolean;
|
|
36
|
+
allowMutableSources: boolean;
|
|
37
|
+
};
|
|
38
|
+
export declare function isToolName(value: string): value is ToolName;
|
|
39
|
+
export declare function isRuntimeName(value: string): value is RuntimeName;
|
|
40
|
+
export declare function splitList(value: string): string[];
|
|
41
|
+
export declare function normalizeScope(scope: string): string;
|
|
42
|
+
export declare const state: State;
|
|
43
|
+
export declare const runtimeMeta: Record<RuntimeName, RuntimeMeta>;
|
|
44
|
+
export declare function setAllTools(value: boolean): void;
|
|
45
|
+
export declare function selectOnlyTool(tool: ToolName): void;
|
|
46
|
+
export declare function setAllRuntimes(value: boolean): void;
|
|
47
|
+
export declare function selectOnlyRuntime(runtime: RuntimeName): void;
|
|
48
|
+
export declare function anyToolSelected(): boolean;
|
|
49
|
+
export declare function anyRuntimeSelected(): boolean;
|
|
50
|
+
export declare function normalizedSkillScopes(): string[];
|
|
51
|
+
export {};
|