vigiles 14.8.0 → 14.9.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/audit-report.template.html +37 -32
- package/dist/audit-score.js +1 -1
- package/dist/score-core.d.ts +10 -0
- package/dist/score-core.js +12 -2
- package/package.json +1 -1
package/dist/audit-score.js
CHANGED
|
@@ -186,7 +186,7 @@ function safety(r) {
|
|
|
186
186
|
{
|
|
187
187
|
n: hard.length,
|
|
188
188
|
weight: score_core_js_1.W_TRIFECTA,
|
|
189
|
-
label:
|
|
189
|
+
label: score_core_js_1.TRIFECTA_LABEL,
|
|
190
190
|
},
|
|
191
191
|
]);
|
|
192
192
|
// inherits-all trifecta findings are ADVISORY: surfaced as a maximal-blast-radius
|
package/dist/score-core.d.ts
CHANGED
|
@@ -36,6 +36,16 @@ export declare const W_DANGLING_REF = 8;
|
|
|
36
36
|
export declare const W_OVERLAP = 8;
|
|
37
37
|
export declare const W_NO_CONTRACT = 5;
|
|
38
38
|
export declare const W_TRIFECTA = 10;
|
|
39
|
+
/**
|
|
40
|
+
* The one canonical, jargon-free finding string for a HARD lethal-trifecta unit —
|
|
41
|
+
* shared by the Safety category card (audit-score) AND the verdict sentence / overall
|
|
42
|
+
* deduction (reportDeductions here), so the plain-language copy can't drift between
|
|
43
|
+
* surfaces (one-detector-no-drift). It NAMES the three legs and the consequence in
|
|
44
|
+
* plain words instead of the old "holding all three lethal-trifecta legs
|
|
45
|
+
* (prompt-injection exfil path)" shorthand a first-time reader can't parse. The
|
|
46
|
+
* `(s)` placeholder is resolved by the caller's pluralizer against the count.
|
|
47
|
+
*/
|
|
48
|
+
export declare const TRIFECTA_LABEL = "unit(s) can read data, reach the web, and run commands \u2014 the \"lethal trifecta\", so a prompt injection could exfiltrate secrets";
|
|
39
49
|
/** Map a 0–100 structural-health score to its letter grade (A ≥90 … F <60). */
|
|
40
50
|
export declare function gradeFor(score: number): PluginScore["grade"];
|
|
41
51
|
/** One deduction: a count, its per-item weight, and the label if non-zero. */
|
package/dist/score-core.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.W_TRIFECTA = exports.W_NO_CONTRACT = exports.W_OVERLAP = exports.W_DANGLING_REF = exports.W_NO_DESCRIPTION = exports.W_MISSING_HOOK = void 0;
|
|
3
|
+
exports.TRIFECTA_LABEL = exports.W_TRIFECTA = exports.W_NO_CONTRACT = exports.W_OVERLAP = exports.W_DANGLING_REF = exports.W_NO_DESCRIPTION = exports.W_MISSING_HOOK = void 0;
|
|
4
4
|
exports.gradeFor = gradeFor;
|
|
5
5
|
exports.reportDeductions = reportDeductions;
|
|
6
6
|
exports.isEmptyMachine = isEmptyMachine;
|
|
@@ -15,6 +15,16 @@ exports.W_DANGLING_REF = 8; // a referenced intra-plugin file that's missing →
|
|
|
15
15
|
exports.W_OVERLAP = 8; // a description collision → the wrong skill fires
|
|
16
16
|
exports.W_NO_CONTRACT = 5; // generic small-footgun weight (disallowedTools typo, invalid model/color)
|
|
17
17
|
exports.W_TRIFECTA = 10; // a HARD lethal-trifecta contract (all three legs, explicit) → a prompt-injection exfil path. HALF the old 20: a DING, not a fail — a trifecta is a real risk worth surfacing in the grade, but official plugins ship the pattern by design, so it dents the score (e.g. feature-dev's 3 hard units → −30 → C) without a catastrophic F.
|
|
18
|
+
/**
|
|
19
|
+
* The one canonical, jargon-free finding string for a HARD lethal-trifecta unit —
|
|
20
|
+
* shared by the Safety category card (audit-score) AND the verdict sentence / overall
|
|
21
|
+
* deduction (reportDeductions here), so the plain-language copy can't drift between
|
|
22
|
+
* surfaces (one-detector-no-drift). It NAMES the three legs and the consequence in
|
|
23
|
+
* plain words instead of the old "holding all three lethal-trifecta legs
|
|
24
|
+
* (prompt-injection exfil path)" shorthand a first-time reader can't parse. The
|
|
25
|
+
* `(s)` placeholder is resolved by the caller's pluralizer against the count.
|
|
26
|
+
*/
|
|
27
|
+
exports.TRIFECTA_LABEL = 'unit(s) can read data, reach the web, and run commands — the "lethal trifecta", so a prompt injection could exfiltrate secrets';
|
|
18
28
|
// Two things are advisory, NOT graded penalties (shown, never scored — see scoreReport):
|
|
19
29
|
// - untested surfaces — a hardening gap, not breakage.
|
|
20
30
|
// - an agent that inherits all tools (no `tools:` line) — see reportDeductions for why.
|
|
@@ -56,7 +66,7 @@ function reportDeductions(r) {
|
|
|
56
66
|
{
|
|
57
67
|
n: hardTrifecta,
|
|
58
68
|
weight: exports.W_TRIFECTA,
|
|
59
|
-
label:
|
|
69
|
+
label: exports.TRIFECTA_LABEL,
|
|
60
70
|
},
|
|
61
71
|
{
|
|
62
72
|
n: missingHooks,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vigiles",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.9.0",
|
|
4
4
|
"description": "Lint & test the harness your AI agent runs on — verify the references in your CLAUDE.md / AGENTS.md and test that your hooks and skills actually work.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|