vigiles 29.0.0 → 29.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/dist/core/compile.js
CHANGED
|
@@ -781,7 +781,10 @@ function yamlScalar(value) {
|
|
|
781
781
|
// A JSON string IS a YAML double-quoted scalar, escaping included.
|
|
782
782
|
return JSON.stringify(value);
|
|
783
783
|
}
|
|
784
|
-
function renderSkillFrontmatter(spec,
|
|
784
|
+
function renderSkillFrontmatter(spec,
|
|
785
|
+
// Downstream of the SkillFrontmatterProfile alias (src/core/dialect.ts).
|
|
786
|
+
// eslint-disable-next-line local/no-harness-names -- goes away with that alias
|
|
787
|
+
profile = "claude-code") {
|
|
785
788
|
const fm = [
|
|
786
789
|
"---",
|
|
787
790
|
`name: ${yamlScalar(spec.name)}`,
|
|
@@ -789,6 +792,8 @@ function renderSkillFrontmatter(spec, profile = "claude-code") {
|
|
|
789
792
|
];
|
|
790
793
|
// The CC-only keys below are inert in a minimal (Codex/OpenCode) SKILL.md, so
|
|
791
794
|
// they're omitted entirely under that profile.
|
|
795
|
+
// Downstream of the SkillFrontmatterProfile alias (src/core/dialect.ts).
|
|
796
|
+
// eslint-disable-next-line local/no-harness-names -- goes away with that alias
|
|
792
797
|
if (profile === "claude-code") {
|
|
793
798
|
if (spec.disableModelInvocation !== undefined) {
|
|
794
799
|
fm.push(`disable-model-invocation: ${String(spec.disableModelInvocation)}`);
|
|
@@ -894,7 +899,10 @@ function compileSkill(spec, options = {}) {
|
|
|
894
899
|
spec = (0, skill_normalize_js_1.foldLegacyPostcondition)(spec);
|
|
895
900
|
const basePath = options.basePath ?? process.cwd();
|
|
896
901
|
const specFile = options.specFile ?? "SKILL.md.spec.ts";
|
|
897
|
-
const profile =
|
|
902
|
+
const profile =
|
|
903
|
+
// Downstream of the SkillFrontmatterProfile alias (src/core/dialect.ts).
|
|
904
|
+
// eslint-disable-next-line local/no-harness-names -- goes away with that alias
|
|
905
|
+
options.dialect?.skillFrontmatter ?? "claude-code";
|
|
898
906
|
const errors = [];
|
|
899
907
|
// Verify spec file naming
|
|
900
908
|
if (!specFile.endsWith(".spec.ts")) {
|
|
@@ -285,6 +285,10 @@ exports.VigilesConfigError = VigilesConfigError;
|
|
|
285
285
|
exports.REPLACED_KEYS = [
|
|
286
286
|
{
|
|
287
287
|
key: "harness",
|
|
288
|
+
// The literal OLD config text this migration notice quotes back at the user:
|
|
289
|
+
// a historical artefact, not a fact about a harness, so there is no port to
|
|
290
|
+
// read it off. This is the one exemption here that is not debt.
|
|
291
|
+
// eslint-disable-next-line local/no-harness-names -- quoted legacy config
|
|
288
292
|
was: '"harness": ["claude-code", "codex"]',
|
|
289
293
|
now: "a KEY per harness",
|
|
290
294
|
},
|
|
@@ -298,6 +302,10 @@ exports.REPLACED_KEYS = [
|
|
|
298
302
|
function replacedKeyMessage(present) {
|
|
299
303
|
return (`.vigilesrc.json: ${present.map((k) => `"${k.key}"`).join(" and ")} ` +
|
|
300
304
|
`${present.length === 1 ? "was" : "were"} replaced by one nested key, "harnesses".\n` +
|
|
305
|
+
// A worked EXAMPLE config in a diagnostic, and real debt: with a third
|
|
306
|
+
// adapter this sample goes stale, so it wants rendering from the adapter
|
|
307
|
+
// registry rather than two names typed out here.
|
|
308
|
+
// eslint-disable-next-line local/no-harness-names -- example config text
|
|
301
309
|
` Write: { "harnesses": { "claude-code": { "roots": [".ai"] }, "codex": {} } }\n` +
|
|
302
310
|
present.map((k) => ` - ${k.was} → ${k.now}`).join("\n") +
|
|
303
311
|
`\n The old harness ARRAY's order silently decided what got read: one order graded the ` +
|
|
@@ -545,6 +545,11 @@ const PREAPPROVAL_NOTE = "`allowed-tools:` does NOT fence a skill — it PRE-APP
|
|
|
545
545
|
* omits them under `"minimal"`).
|
|
546
546
|
*/
|
|
547
547
|
function dialectSupportsSkillFence(dialect) {
|
|
548
|
+
// Downstream of the SkillFrontmatterProfile alias (src/core/dialect.ts). This
|
|
549
|
+
// function is the clearest argument for fixing it there: it already HAS a
|
|
550
|
+
// capability name — "supports skill fence" — and reaches it by comparing an
|
|
551
|
+
// adapter name.
|
|
552
|
+
// eslint-disable-next-line local/no-harness-names -- goes away with that alias
|
|
548
553
|
return dialect.skillFrontmatter === "claude-code";
|
|
549
554
|
}
|
|
550
555
|
/**
|
|
@@ -414,6 +414,10 @@ function unclaimedSurfaceFindings(paths, layouts, declared) {
|
|
|
414
414
|
...d,
|
|
415
415
|
message: `${d.dir}/ holds ${plural(d.kind, d.count)} that no harness vigiles knows about reads, ` +
|
|
416
416
|
`so none of it is in this grade. Three ways out: keep it where it is and say so in ` +
|
|
417
|
+
// A worked EXAMPLE config in a diagnostic, and real debt: it names a
|
|
418
|
+
// harness the repo being audited may not even target, while `layouts` is
|
|
419
|
+
// already in scope here and knows which one it does.
|
|
420
|
+
// eslint-disable-next-line local/no-harness-names -- example config text
|
|
417
421
|
`.vigilesrc.json (\`{"harnesses":{"claude-code":{"roots":["${d.root === "" ? "." : d.root}"]}}}\` ` +
|
|
418
422
|
`— see docs/configuration.md), audit it on its own ` +
|
|
419
423
|
`(\`vigiles audit ${d.root === "" ? "." : d.root}\`), or move it somewhere a harness ` +
|
package/dist/scan.js
CHANGED
|
@@ -40,7 +40,18 @@ const node_path_1 = require("node:path");
|
|
|
40
40
|
// Claude Code default), and only the generic one takes the `ExcludeSet` that
|
|
41
41
|
// makes `.vigilesrc.json#exclude` reach surface discovery.
|
|
42
42
|
const plugin_loader_js_1 = require("./plugin-loader.js");
|
|
43
|
+
// 🔴 A FINDING, NOT A FORMALITY, and one nothing else in the repo could see: this
|
|
44
|
+
// module is listed as a harness-agnostic detector, yet it imports the Claude Code
|
|
45
|
+
// adapter to use as a DEFAULT (`scanPlugin`'s `dialect`/`layout` parameters, and
|
|
46
|
+
// four more sites below). `boundaries/dependencies` does not catch it because it
|
|
47
|
+
// deliberately leaves this file unclassified; the CC-literal rule does not catch
|
|
48
|
+
// it because `\.claude` needs the dot and this path spells `/claude-code/`.
|
|
49
|
+
// Keeping the CC default is the stated backwards-compatibility guarantee, so this
|
|
50
|
+
// is real debt with a known shape — the default belongs to the CALLER (the CLI
|
|
51
|
+
// already resolves an adapter), not to the detector.
|
|
52
|
+
// eslint-disable-next-line local/no-harness-names -- see above
|
|
43
53
|
const layout_js_1 = require("./adapters/claude-code/layout.js");
|
|
54
|
+
// eslint-disable-next-line local/no-harness-names -- see above
|
|
44
55
|
const dialect_js_1 = require("./adapters/claude-code/dialect.js");
|
|
45
56
|
const plugin_loader_js_2 = require("./plugin-loader.js");
|
|
46
57
|
const score_core_js_1 = require("./score-core.js");
|
package/dist/test-coverage.js
CHANGED
|
@@ -76,6 +76,11 @@ const assert_never_js_1 = require("./core/assert-never.js");
|
|
|
76
76
|
const ts_runner_caps_js_1 = require("./ts-runner-caps.js");
|
|
77
77
|
const glob_1 = require("glob");
|
|
78
78
|
const layout_js_1 = require("./core/layout.js");
|
|
79
|
+
// 🔴 Same finding as src/scan.ts: a module listed as a harness-agnostic detector
|
|
80
|
+
// importing the Claude Code adapter for a DEFAULT. Invisible to both existing
|
|
81
|
+
// fences — unclassified for `boundaries/dependencies`, and `\.claude` does not
|
|
82
|
+
// match `/claude-code/`. The default belongs to the caller, not the detector.
|
|
83
|
+
// eslint-disable-next-line local/no-harness-names -- see above
|
|
79
84
|
const layout_js_2 = require("./adapters/claude-code/layout.js");
|
|
80
85
|
const coverage_evidence_js_1 = require("./coverage-evidence.js");
|
|
81
86
|
const coverage_artifact_js_1 = require("./coverage-artifact.js");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vigiles",
|
|
3
|
-
"version": "29.
|
|
3
|
+
"version": "29.1.0",
|
|
4
4
|
"description": "Audit, test and measure the harness your AI agent runs on — grade your CLAUDE.md / AGENTS.md, skills, subagents and hooks, run them against a scripted model, and measure whether they actually fire.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|