vigiles 13.0.0 → 14.0.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/README.md +10 -4
- package/dist/audit-report.d.ts +10 -4
- package/dist/audit-report.js +7 -2
- package/dist/audit-report.template.html +28 -28
- package/dist/cli.js +73 -15
- package/dist/core/rule-catalog.d.ts +56 -0
- package/dist/core/rule-catalog.js +146 -0
- package/dist/eval.d.ts +13 -1
- package/dist/eval.js +13 -1
- package/dist/instruction-sources.d.ts +39 -0
- package/dist/instruction-sources.js +71 -0
- package/dist/rule-inventory.d.ts +6 -0
- package/dist/rule-inventory.js +170 -1
- package/dist/rule-routing.d.ts +25 -2
- package/dist/rule-routing.js +337 -26
- package/dist/segment.d.ts +1 -1
- package/dist/segment.js +151 -17
- package/package.json +2 -2
- package/skills/linter-docs/clippy.md +1 -1
- package/skills/linter-docs/eslint.md +1 -1
- package/skills/linter-docs/pylint.md +1 -1
- package/skills/linter-docs/rubocop.md +1 -1
- package/skills/linter-docs/ruff.md +1 -1
- package/skills/linter-docs/stylelint.md +1 -1
- package/skills/strengthen/SKILL.md +4 -4
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
all agree.
|
|
39
39
|
|
|
40
40
|
SPINE = proof/demo-led. Real, screenshotable catches on shipped plugins, THEN
|
|
41
|
-
mechanism. Every proof traces to a real dogfood run (research/
|
|
41
|
+
mechanism. Every proof traces to a real dogfood run (research/audit-captures/) — NEVER
|
|
42
42
|
fabricate one. Order = most-RELATABLE first (broken tool ref → skill collision →
|
|
43
43
|
rules-not-enforced → secrets-exfil gotcha LAST as the bite). The intro triplet
|
|
44
44
|
maps to the three "vibes break silently" proofs (1, 2, 4); Proof 3 (your rules →
|
|
@@ -54,8 +54,11 @@
|
|
|
54
54
|
init/compile/eject manage the spec layer (personas noticed the verb-count gap).
|
|
55
55
|
|
|
56
56
|
DON'T SHAME OSS: catches are ANONYMIZED (no obra/superpowers, madappgang,
|
|
57
|
-
claude-flow by name) — real names live only in research/
|
|
58
|
-
Guard/compiled-hooks
|
|
57
|
+
claude-flow by name) — real names live only in research/audit-captures/.
|
|
58
|
+
Guard/compiled-hooks stay PARKED FOR LAUNCH as a hero section; the 2/7→7/7 finding is
|
|
59
|
+
surfaced as ONE supporting, receipts-linked evidence line under Proof 4 (→
|
|
60
|
+
docs/compiled-hooks.md §disler battery + src/hook-dogfood.test.ts) — reachable
|
|
61
|
+
evidence under the Lighthouse umbrella, not the hero, not the brand.
|
|
59
62
|
|
|
60
63
|
RULES: lead with the reader's CONCRETE PAIN; ≤ ~3-line paragraphs; ONE bold per
|
|
61
64
|
block; ONE idea per sentence; NO internal vocabulary (moat/flywheel) / NO
|
|
@@ -152,7 +155,7 @@ Your rules → enforced 1 of 4 enforced · 2 one line away · 1 contradicted b
|
|
|
152
155
|
your CLAUDE.md says enforce it; your config quietly turns it off
|
|
153
156
|
```
|
|
154
157
|
|
|
155
|
-
You wrote the rule. Your agent treats it as gospel and follows it — until it doesn't, and nothing tells you which time. vigiles checks each mapped rule three ways: enforced, **one line away**, or — the one people screenshot — documented but silently **turned off**. Deterministic, no model.
|
|
158
|
+
You wrote the rule. Your agent treats it as gospel and follows it — until it doesn't, and nothing tells you which time. vigiles checks each mapped rule three ways: enforced, **one line away**, or — the one people screenshot — documented but silently **turned off**. Deterministic, no model. Acting on the map is **opt-in and agent-driven**: enable a rule in one line (the `strengthen` skill does it for you), turn an action rule like `git push` into a compiled hook, leave judgment calls as prose. Nothing runs a model — or changes your config — unless you ask.
|
|
156
159
|
**[How enforcement works →](docs/verifying-instruction-files.md)**
|
|
157
160
|
|
|
158
161
|
## Proof 4 — it can quietly read your secrets and send them out
|
|
@@ -166,6 +169,9 @@ You wrote the rule. Your agent treats it as gospel and follows it — until it d
|
|
|
166
169
|
|
|
167
170
|
Hand one subagent all three powers and a poisoned web page can make it read your `.env` and POST it anywhere — no exploit code, just the tools it was given. The **80 looks like a B** — and that's the trap: a healthy grade hiding a subagent that's a data-leak waiting to happen. vigiles spots it from the tool list alone, free, no model.
|
|
168
171
|
|
|
172
|
+
And the guard you'd write to stop it usually doesn't work: a widely-copied "safety hook" pattern blocks only **2 of 7** classic dangerous commands in our battery — the other five sail through while the hook _looks_ like it's working. A hook vigiles compiles for you blocks **7 of 7**, because the exit code and JSON contract are generated, not hand-written.
|
|
173
|
+
**[The safety-hook battery →](docs/compiled-hooks.md)**
|
|
174
|
+
|
|
169
175
|
That's the whole idea: it checks your harness against **reality, not style**. Every tool, hook, file, script, and skill you reference is verified to actually resolve — and where you name a linter rule, it's checked to exist _and_ be enabled (ESLint, Ruff, Clippy, and more).
|
|
170
176
|
**[Everything it catches →](docs/what-vigiles-catches.md)** · point `audit` at a whole marketplace and it ranks every plugin the same way.
|
|
171
177
|
|
package/dist/audit-report.d.ts
CHANGED
|
@@ -20,8 +20,13 @@ import type { ScanReport, MarketplaceInfo } from "./scan.js";
|
|
|
20
20
|
import type { PluginScore } from "./leaderboard.js";
|
|
21
21
|
import type { RuleInventoryItem } from "./rule-inventory.js";
|
|
22
22
|
import type { RuleRouting } from "./rule-routing.js";
|
|
23
|
-
/**
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The current schema version. Bump only on a BREAKING change to the shape.
|
|
25
|
+
* v2 (2026-07-15): the rule-map `mechanism` enum value for an unrouted rule
|
|
26
|
+
* changed `"compile"` → `"synthesize"` (a non-additive enum change), so a v1
|
|
27
|
+
* consumer that gated on `meta.schemaVersion` would mis-handle it — hence the bump.
|
|
28
|
+
*/
|
|
29
|
+
export declare const AUDIT_SCHEMA_VERSION = 2;
|
|
25
30
|
export interface AuditReportMeta {
|
|
26
31
|
/** Wire-format version — consumers gate on this. */
|
|
27
32
|
readonly schemaVersion: typeof AUDIT_SCHEMA_VERSION;
|
|
@@ -126,9 +131,10 @@ export interface AuditReport {
|
|
|
126
131
|
readonly rulesInventory?: readonly RuleInventoryItem[];
|
|
127
132
|
/**
|
|
128
133
|
* The deterministic State-B routing PREVIEW — the instruction file segmented
|
|
129
|
-
* into atomic rules, each routed (reuse / hook / semantic / unrouted) to how
|
|
134
|
+
* into atomic rules, each routed (reuse / hook / meta / semantic / unrouted) to how
|
|
130
135
|
* it would be enforced, with per-category counts. No model, fs-only. Grounds
|
|
131
|
-
* the report's "
|
|
136
|
+
* the report's "rule map" (strengthen / hook / prose / synthesize) in real
|
|
137
|
+
* numbers instead of generic copy.
|
|
132
138
|
* Present only when at least one atomic rule was segmented. Additive/optional.
|
|
133
139
|
*/
|
|
134
140
|
readonly ruleRouting?: RuleRouting;
|
package/dist/audit-report.js
CHANGED
|
@@ -20,8 +20,13 @@ exports.buildMarketplaceReport = buildMarketplaceReport;
|
|
|
20
20
|
const audit_score_js_1 = require("./audit-score.js");
|
|
21
21
|
const optimize_js_1 = require("./optimize.js");
|
|
22
22
|
const audit_verdict_js_1 = require("./audit-verdict.js");
|
|
23
|
-
/**
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The current schema version. Bump only on a BREAKING change to the shape.
|
|
25
|
+
* v2 (2026-07-15): the rule-map `mechanism` enum value for an unrouted rule
|
|
26
|
+
* changed `"compile"` → `"synthesize"` (a non-additive enum change), so a v1
|
|
27
|
+
* consumer that gated on `meta.schemaVersion` would mis-handle it — hence the bump.
|
|
28
|
+
*/
|
|
29
|
+
exports.AUDIT_SCHEMA_VERSION = 2;
|
|
25
30
|
/** The one command that adopts every un-spec'd surface (bare `init`). */
|
|
26
31
|
const CREATE_ALL_COMMAND = "npx vigiles init";
|
|
27
32
|
/** The command that adopts ONE surface at a given repo-relative path. */
|