@uinaf/skillcheck 1.5.0 → 1.5.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/dist/cli.js CHANGED
@@ -61,12 +61,13 @@ function parseArgs(argv) {
61
61
  function resolveRoot(flags) {
62
62
  return path.resolve(flags.get("--root") ?? process.cwd());
63
63
  }
64
- function stateDirs(root) {
64
+ function stateDirs(root, uid = process.getuid?.()) {
65
65
  const base = path.join(root, ".skillcheck");
66
66
  const id = createHash("sha256").update(path.resolve(root)).digest("hex").slice(0, 12);
67
+ const owner = uid === void 0 ? "" : `${uid}-`;
67
68
  return {
68
69
  results: path.join(base, "results"),
69
- scratch: path.join(fs.realpathSync(os.tmpdir()), `skillcheck-${id}`),
70
+ scratch: path.join(fs.realpathSync(os.tmpdir()), `skillcheck-${owner}${id}`),
70
71
  scorecards: path.join(base, "scorecards")
71
72
  };
72
73
  }
@@ -137,7 +138,7 @@ function assertUniformConfig(entries, allowMixed) {
137
138
  for (const [harness, configs] of byHarness) if (configs.size > 1) throw new Error(`${harness} results span multiple run configurations (${[...configs.values()].map(describeConfig).join("; ")}); rerun them to match or pass --allow-mixed`);
138
139
  }
139
140
  function ensureEvalPackages(opts) {
140
- const missing = requiredEvalPackages(opts, process.env.ANTHROPIC_API_KEY !== void 0).filter((pkg) => resolvePackageDir(pkg) === void 0);
141
+ const missing = requiredEvalPackages(opts, Boolean(process.env.ANTHROPIC_API_KEY)).filter((pkg) => resolvePackageDir(pkg) === void 0);
141
142
  if (missing.length === 0) return;
142
143
  const peers = JSON.parse(fs.readFileSync(path.join(packageDir, "package.json"), "utf8")).peerDependencies ?? {};
143
144
  const specs = missing.map((pkg) => `"${pkg}@${peers[pkg] ?? "latest"}"`).join(" ");
@@ -89,8 +89,10 @@ var GrokProvider = class {
89
89
  cost = event.total_cost_usd;
90
90
  }
91
91
  };
92
+ child.stdout?.setEncoding("utf8");
93
+ child.stderr?.setEncoding("utf8");
92
94
  child.stdout?.on("data", (chunk) => {
93
- stdout += chunk.toString("utf8");
95
+ stdout += chunk;
94
96
  if (stdout.length > OUTPUT_CAP) {
95
97
  stop("grok event stream exceeded limit");
96
98
  return;
@@ -103,7 +105,7 @@ var GrokProvider = class {
103
105
  }
104
106
  });
105
107
  child.stderr?.on("data", (chunk) => {
106
- stderr = (stderr + chunk.toString("utf8")).slice(-4e3);
108
+ stderr = (stderr + chunk).slice(-4e3);
107
109
  });
108
110
  child.on("error", (cause) => {
109
111
  error ??= `grok could not start: ${cause.message}`;
package/docs/adoption.md CHANGED
@@ -10,7 +10,9 @@ pnpm add -D @uinaf/skillcheck
10
10
  ```
11
11
 
12
12
  Runners that install with `--ignore-scripts` are fine: the package ships
13
- compiled ESM and has no install, prepare, or postinstall script.
13
+ compiled ESM and has no install or postinstall script. Its `prepare` script
14
+ only wires this repository's own commit hook; package managers do not run it
15
+ for a registry install.
14
16
 
15
17
  ```json
16
18
  { "scripts": { "skills:lint": "skillcheck lint" } }
@@ -25,6 +27,7 @@ jobs:
25
27
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
28
  with:
27
29
  persist-credentials: false
30
+ - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
28
31
  - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0
29
32
  with:
30
33
  node-version: "24"
@@ -33,7 +36,8 @@ jobs:
33
36
  ```
34
37
 
35
38
  The job needs no secrets and no network beyond the install. Node 24 is the
36
- floor.
39
+ floor. `pnpm/action-setup` installs the pnpm version pinned in the repo's
40
+ `packageManager` field; hosted runners do not ship pnpm.
37
41
 
38
42
  Run it through the script rather than a bare `npx skillcheck`: the script
39
43
  resolves the version the repo pinned, and `npx` would resolve the latest one on
package/docs/releasing.md CHANGED
@@ -5,15 +5,13 @@
5
5
  A push to `main` runs one workflow, `.github/workflows/release.yml`:
6
6
 
7
7
  ```text
8
- verify ──┐
9
- ├──> release npm publish, OIDC + uinaf-ci (release environment)
10
- scan ────┘
8
+ verify ──> release npm publish, OIDC + uinaf-ci (release environment)
11
9
  ```
12
10
 
13
- `verify` and `scan` are the shared gate: `verify` is called from `verify.yml`,
14
- and `scan` calls the shared scan in `uinaf/.github`, the same one `scan.yml`
15
- runs for pull requests. Keep it that way: a second copy of the gate on a push-to-`main` workflow
16
- races this one over the same commit.
11
+ `verify` is the one gate, called from `verify.yml`; its last step runs the
12
+ shared push-time scan from `uinaf/.github` over the pushed range. Keep it that
13
+ way: a second copy of the gate on a push-to-`main` workflow races this one over
14
+ the same commit.
17
15
 
18
16
  The file name `release.yml` is load-bearing. See below.
19
17
 
package/docs/scenarios.md CHANGED
@@ -109,7 +109,7 @@ frontmatter block; body text mentioning the key does not count.
109
109
  ## The workdir
110
110
 
111
111
  Per run, under a scratch directory in the system temp dir
112
- (`skillcheck-<hash of the root>/<name>/trial-<n>/`), rebuilt from scratch each
112
+ (`skillcheck-<uid>-<hash of the root>/<name>/trial-<n>/`), rebuilt from scratch each
113
113
  time. It stays outside the root so the agent cannot reach the skill's source,
114
114
  its evals, or the repository's own agent guidance. The skill under test is installed where the harness discovers skills:
115
115
  `.claude/skills/<skill>/`, plus `.agents/skills/<skill>/` on codex, or
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uinaf/skillcheck",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Lint and eval harness for agent skills",
5
5
  "homepage": "https://github.com/uinaf/skillcheck#readme",
6
6
  "bugs": {
@@ -66,5 +66,5 @@
66
66
  "engines": {
67
67
  "node": ">=24"
68
68
  },
69
- "packageManager": "pnpm@12.4.2"
69
+ "packageManager": "pnpm@12.5.1"
70
70
  }