@sx4im/skillcheck 0.1.0 → 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/README.md +31 -6
- package/dist/src/cli.d.ts +10 -0
- package/dist/src/cli.js +93 -3
- package/dist/src/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,21 +11,28 @@ Measure whether an agent skill actually improves task performance.
|
|
|
11
11
|
- The launch used `qwen/qwen3-next-80b-a3b-instruct` for generator, grader, and runner after direct NVIDIA diagnostics showed the original StepFun, DeepSeek, and Mistral stack was not reliable enough to complete the corpus.
|
|
12
12
|
- Do not publish to npm until `RELEASE-CHECKLIST.md` is complete.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## One-Line Install
|
|
15
15
|
|
|
16
|
-
After npm publication,
|
|
16
|
+
After npm publication, install the CLI globally with one command:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
|
|
19
|
+
npm install -g @sx4im/skillcheck
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Then verify the installed command:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
npm install -g @sx4im/skillcheck
|
|
26
25
|
skillcheck --help
|
|
27
26
|
```
|
|
28
27
|
|
|
28
|
+
Check a skill by passing a skill file or folder. You can drag and drop the file/folder into the terminal after `skillcheck check`:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
skillcheck check path/to/SKILL.md
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
This quick run uses 3 tasks x 2 trials by default, prints a readable verdict, and saves the full JSON result under `skillcheck-results/`.
|
|
35
|
+
|
|
29
36
|
Before npm publication, install the CLI from this GitHub repo for testing:
|
|
30
37
|
|
|
31
38
|
```bash
|
|
@@ -83,7 +90,25 @@ The final M5 run used `--concurrency 1` and a 5 second process-wide request dela
|
|
|
83
90
|
|
|
84
91
|
## Commands
|
|
85
92
|
|
|
86
|
-
|
|
93
|
+
Friendly skill check:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
skillcheck check path/to/SKILL.md
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
You can also omit `check` when the argument is an existing path:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
skillcheck path/to/skill-folder
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Run a stronger check:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
skillcheck check path/to/SKILL.md --tasks 10 --trials 3
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Advanced raw JSON evaluator:
|
|
87
112
|
|
|
88
113
|
```bash
|
|
89
114
|
skillcheck eval path/to/SKILL.md --tasks 10 --trials 3 --output results/my-run.json
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -1 +1,11 @@
|
|
|
1
|
+
import { type EvalOptions } from './eval.js';
|
|
2
|
+
export declare function defaultCheckOutputPath(inputPath: string, now?: Date): string;
|
|
3
|
+
interface CheckOptions {
|
|
4
|
+
evalOptions: EvalOptions;
|
|
5
|
+
json: boolean;
|
|
6
|
+
output: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseCheckOptions(argv: string[], inputIndex?: number): CheckOptions;
|
|
9
|
+
export declare function formatCheckSummary(result: unknown, outputPath: string): string;
|
|
1
10
|
export declare function main(argv: string[]): Promise<void>;
|
|
11
|
+
export {};
|
package/dist/src/cli.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
1
3
|
import { NvidiaNimClient } from './adapters/nvidia-nim.js';
|
|
2
4
|
import { runCorpus } from './corpus.js';
|
|
3
5
|
import { evalSkill } from './eval.js';
|
|
@@ -7,7 +9,12 @@ import { verifyResult } from './verify.js';
|
|
|
7
9
|
function printHelp() {
|
|
8
10
|
console.log(`skillcheck
|
|
9
11
|
|
|
12
|
+
Quick start:
|
|
13
|
+
skillcheck check <path-to-SKILL.md-or-folder>
|
|
14
|
+
skillcheck <path-to-SKILL.md-or-folder>
|
|
15
|
+
|
|
10
16
|
Usage:
|
|
17
|
+
skillcheck check <path> [--tasks N] [--trials K] [--output file.json] [--json]
|
|
11
18
|
skillcheck m0
|
|
12
19
|
skillcheck eval <path> [--tasks N] [--trials K] [--output file.json] [--task-suite file.json]
|
|
13
20
|
[--runner model] [--grader model] [--generator model]
|
|
@@ -17,7 +24,8 @@ Usage:
|
|
|
17
24
|
skillcheck rot [--results dir] [--output file.json] [--model model] [--corpus corpus.yaml]
|
|
18
25
|
[--tasks N] [--trials K]
|
|
19
26
|
|
|
20
|
-
|
|
27
|
+
Drop a SKILL.md, AGENTS.md, CLAUDE.md, .cursorrules file, or a folder containing one.
|
|
28
|
+
check is the friendly quick run. eval is the raw reproducible JSON evaluator.`);
|
|
21
29
|
}
|
|
22
30
|
function readOption(argv, name) {
|
|
23
31
|
const index = argv.indexOf(name);
|
|
@@ -52,8 +60,24 @@ function readOptionalNumberOption(argv, name) {
|
|
|
52
60
|
}
|
|
53
61
|
return parsed;
|
|
54
62
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
63
|
+
function hasFlag(argv, name) {
|
|
64
|
+
return argv.includes(name);
|
|
65
|
+
}
|
|
66
|
+
function slugify(value) {
|
|
67
|
+
const slug = value
|
|
68
|
+
.toLowerCase()
|
|
69
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
70
|
+
.replace(/^-+|-+$/g, '');
|
|
71
|
+
return slug || 'skill';
|
|
72
|
+
}
|
|
73
|
+
export function defaultCheckOutputPath(inputPath, now = new Date()) {
|
|
74
|
+
const parsed = path.parse(path.resolve(inputPath));
|
|
75
|
+
const name = parsed.name || path.basename(parsed.dir) || 'skill';
|
|
76
|
+
const timestamp = now.toISOString().replace(/[:.]/g, '-');
|
|
77
|
+
return path.join('skillcheck-results', `${slugify(name)}-${timestamp}.json`);
|
|
78
|
+
}
|
|
79
|
+
function parseEvalOptions(argv, inputIndex = 3) {
|
|
80
|
+
const inputPath = argv[inputIndex];
|
|
57
81
|
if (!inputPath || inputPath.startsWith('--')) {
|
|
58
82
|
throw new Error('Usage: skillcheck eval <path> [--tasks N] [--trials K] [--output file.json]');
|
|
59
83
|
}
|
|
@@ -73,6 +97,28 @@ function parseEvalOptions(argv) {
|
|
|
73
97
|
taskSuite: readOption(argv, '--task-suite')
|
|
74
98
|
};
|
|
75
99
|
}
|
|
100
|
+
export function parseCheckOptions(argv, inputIndex = 3) {
|
|
101
|
+
const inputPath = argv[inputIndex];
|
|
102
|
+
if (!inputPath || inputPath.startsWith('--')) {
|
|
103
|
+
throw new Error('Usage: skillcheck check <path-to-skill-file-or-folder>\nExample: skillcheck check ./SKILL.md');
|
|
104
|
+
}
|
|
105
|
+
const output = readOption(argv, '--output') ?? defaultCheckOutputPath(inputPath);
|
|
106
|
+
return {
|
|
107
|
+
evalOptions: {
|
|
108
|
+
inputPath,
|
|
109
|
+
output,
|
|
110
|
+
tasks: readNumberOption(argv, '--tasks', 3),
|
|
111
|
+
trials: readNumberOption(argv, '--trials', 2),
|
|
112
|
+
mode: 'forced',
|
|
113
|
+
runner: readOption(argv, '--runner'),
|
|
114
|
+
grader: readOption(argv, '--grader'),
|
|
115
|
+
generator: readOption(argv, '--generator'),
|
|
116
|
+
taskSuite: readOption(argv, '--task-suite')
|
|
117
|
+
},
|
|
118
|
+
json: hasFlag(argv, '--json'),
|
|
119
|
+
output
|
|
120
|
+
};
|
|
121
|
+
}
|
|
76
122
|
function parseRotOptions(argv) {
|
|
77
123
|
return {
|
|
78
124
|
resultsDir: readOption(argv, '--results') ?? 'results',
|
|
@@ -98,6 +144,42 @@ function parseCorpusRunOptions(argv) {
|
|
|
98
144
|
limit: readOptionalNumberOption(argv, '--limit')
|
|
99
145
|
};
|
|
100
146
|
}
|
|
147
|
+
function asRecord(value) {
|
|
148
|
+
return typeof value === 'object' && value !== null ? value : {};
|
|
149
|
+
}
|
|
150
|
+
function formatPercent(value) {
|
|
151
|
+
return typeof value === 'number' ? `${(value * 100).toFixed(1)}%` : 'n/a';
|
|
152
|
+
}
|
|
153
|
+
function formatNumber(value) {
|
|
154
|
+
return typeof value === 'number' ? value.toFixed(1) : 'n/a';
|
|
155
|
+
}
|
|
156
|
+
export function formatCheckSummary(result, outputPath) {
|
|
157
|
+
const root = asRecord(result);
|
|
158
|
+
const skill = asRecord(root.skill);
|
|
159
|
+
const config = asRecord(root.config);
|
|
160
|
+
const score = asRecord(root.result);
|
|
161
|
+
const ci = Array.isArray(score.ci_pp) ? score.ci_pp : [];
|
|
162
|
+
const ciText = typeof ci[0] === 'number' && typeof ci[1] === 'number'
|
|
163
|
+
? `[${ci[0].toFixed(1)}, ${ci[1].toFixed(1)}] pp`
|
|
164
|
+
: 'n/a';
|
|
165
|
+
return `Skillcheck result
|
|
166
|
+
Skill: ${String(skill.name ?? 'unknown')}
|
|
167
|
+
Verdict: ${String(score.verdict ?? 'unknown')}
|
|
168
|
+
Effect: ${formatNumber(score.effect_pp)} pp, 95% CI ${ciText}
|
|
169
|
+
Pass rate: with skill ${formatPercent(score.with_skill_pass)} vs without skill ${formatPercent(score.no_skill_pass)}
|
|
170
|
+
Token overhead: ${String(score.token_overhead ?? 'n/a')} tokens
|
|
171
|
+
Tasks/trials: ${String(config.tasks ?? 'n/a')} tasks x ${String(config.trials ?? 'n/a')} trials
|
|
172
|
+
Saved JSON: ${outputPath}`;
|
|
173
|
+
}
|
|
174
|
+
async function runCheck(options) {
|
|
175
|
+
console.error(`Checking ${options.evalOptions.inputPath} (${options.evalOptions.tasks} tasks x ${options.evalOptions.trials} trials)...`);
|
|
176
|
+
const result = await evalSkill(options.evalOptions);
|
|
177
|
+
if (options.json) {
|
|
178
|
+
console.log(JSON.stringify(result, null, 2));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
console.log(formatCheckSummary(result, options.output));
|
|
182
|
+
}
|
|
101
183
|
export async function main(argv) {
|
|
102
184
|
const command = argv[2];
|
|
103
185
|
if (!command || command === '--help' || command === '-h') {
|
|
@@ -110,6 +192,10 @@ export async function main(argv) {
|
|
|
110
192
|
process.exitCode = report.passed ? 0 : 1;
|
|
111
193
|
return;
|
|
112
194
|
}
|
|
195
|
+
if (command === 'check') {
|
|
196
|
+
await runCheck(parseCheckOptions(argv));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
113
199
|
if (command === 'eval') {
|
|
114
200
|
const result = await evalSkill(parseEvalOptions(argv));
|
|
115
201
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -141,6 +227,10 @@ export async function main(argv) {
|
|
|
141
227
|
console.log(JSON.stringify(result, null, 2));
|
|
142
228
|
return;
|
|
143
229
|
}
|
|
230
|
+
if (!command.startsWith('-') && existsSync(command)) {
|
|
231
|
+
await runCheck(parseCheckOptions(['node', 'skillcheck', 'check', ...argv.slice(2)]));
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
144
234
|
throw new Error(`Unknown command: ${command}`);
|
|
145
235
|
}
|
|
146
236
|
//# sourceMappingURL=cli.js.map
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../packages/cli/src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAmB,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../packages/cli/src/cli.ts"],"names":[],"mappings":"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"}
|