vigiles 33.3.0 → 35.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/action.yml +45 -8
- package/dist/adapters/codex/driver.js +2 -1
- package/dist/adapters/codex/mock-model.d.ts +3 -2
- package/dist/adapters/codex/mock-model.js +15 -3
- package/dist/cli-flag-check.js +1 -0
- package/dist/cli-main.js +253 -56
- package/dist/core/config-schema.d.ts +53 -34
- package/dist/core/config-schema.js +42 -0
- package/dist/core/harness-driver.d.ts +5 -2
- package/dist/core/presets.d.ts +44 -0
- package/dist/core/presets.js +44 -0
- package/dist/core/script-overrun.d.ts +32 -0
- package/dist/core/script-overrun.js +42 -0
- package/dist/core/validate.js +1 -1
- package/dist/doc-test-script-coverage.d.ts +1 -1
- package/dist/doc-test-script-coverage.js +1 -1
- package/dist/eval-lock.d.ts +5 -6
- package/dist/eval-lock.js +5 -6
- package/dist/harness-test.d.ts +35 -1
- package/dist/harness-test.js +100 -10
- package/dist/mock-model.d.ts +4 -1
- package/dist/mock-model.js +42 -11
- package/dist/setup-plan.d.ts +93 -25
- package/dist/setup-plan.js +133 -67
- package/dist/vigilesrc.schema.json +6 -0
- package/package.json +1 -2
|
@@ -69,20 +69,20 @@ export declare const vigilesConfigSchema: z.ZodObject<{
|
|
|
69
69
|
checkboxes: "checkboxes";
|
|
70
70
|
}>>>;
|
|
71
71
|
rules: z.ZodPrefault<z.ZodObject<{
|
|
72
|
-
"spec-refs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
73
|
-
"orphan-docs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
74
|
-
"duplicate-rules": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
75
|
-
"require-instructions-spec": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
76
|
-
"require-skill-spec": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
77
|
-
integrity: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
78
|
-
coverage: z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
72
|
+
"spec-refs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
73
|
+
"orphan-docs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
74
|
+
"duplicate-rules": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
75
|
+
"require-instructions-spec": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
76
|
+
"require-skill-spec": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
77
|
+
integrity: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
78
|
+
coverage: z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
|
|
79
79
|
linterRules: z.ZodOptional<z.ZodNumber>;
|
|
80
80
|
scripts: z.ZodOptional<z.ZodNumber>;
|
|
81
81
|
}, z.core.$strict>], null>, z.ZodTuple<[z.ZodLiteral<"error">, z.ZodObject<{
|
|
82
82
|
linterRules: z.ZodOptional<z.ZodNumber>;
|
|
83
83
|
scripts: z.ZodOptional<z.ZodNumber>;
|
|
84
84
|
}, z.core.$strict>], null>]>>;
|
|
85
|
-
"untested-skill": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
85
|
+
"untested-skill": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
|
|
86
86
|
include: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
87
87
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
88
88
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
@@ -91,7 +91,7 @@ export declare const vigilesConfigSchema: z.ZodObject<{
|
|
|
91
91
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
92
92
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
93
93
|
}, z.core.$strict>], null>]>>;
|
|
94
|
-
"untested-subagent": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
94
|
+
"untested-subagent": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
|
|
95
95
|
include: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
96
96
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
97
97
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
@@ -100,7 +100,7 @@ export declare const vigilesConfigSchema: z.ZodObject<{
|
|
|
100
100
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
101
101
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
102
102
|
}, z.core.$strict>], null>]>>;
|
|
103
|
-
"untested-hook": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
103
|
+
"untested-hook": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
|
|
104
104
|
include: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
105
105
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
106
106
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
@@ -109,7 +109,7 @@ export declare const vigilesConfigSchema: z.ZodObject<{
|
|
|
109
109
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
110
110
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
111
111
|
}, z.core.$strict>], null>]>>;
|
|
112
|
-
"untested-output-style": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
112
|
+
"untested-output-style": z.ZodDefault<z.ZodUnion<readonly [z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
|
|
113
113
|
include: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
114
114
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
115
115
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
@@ -118,29 +118,29 @@ export declare const vigilesConfigSchema: z.ZodObject<{
|
|
|
118
118
|
exclude: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<readonly string[], string | string[]>>>;
|
|
119
119
|
testExtension: z.ZodOptional<z.ZodString>;
|
|
120
120
|
}, z.core.$strict>], null>]>>;
|
|
121
|
-
"unmarked-refs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
122
|
-
"subagent-tool-contract": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
123
|
-
"hook-events": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
124
|
-
"subagent-frontmatter": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
125
|
-
"mcp-config": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
126
|
-
"skill-frontmatter": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
127
|
-
"mcp-tool-resolves": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
128
|
-
"hook-script-exists": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
129
|
-
"prefer-compiled-hooks": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
130
|
-
"disallowed-tools-contract": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
131
|
-
"description-overlap": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
132
|
-
"skill-description-budget": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
133
|
-
"frontmatter-valid": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
134
|
-
"mcp-hook-target-resolves": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
135
|
-
"lethal-trifecta": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
136
|
-
"skill-resource-resolves": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
137
|
-
"skill-missing-fence": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
138
|
-
"plugin-dir-layout": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
139
|
-
"delegation-trifecta": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
140
|
-
"hook-block-ineffective": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
141
|
-
"hook-matcher": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
142
|
-
"doc-refs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
143
|
-
"instruction-weight": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "
|
|
121
|
+
"unmarked-refs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
122
|
+
"subagent-tool-contract": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
123
|
+
"hook-events": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
124
|
+
"subagent-frontmatter": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
125
|
+
"mcp-config": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
126
|
+
"skill-frontmatter": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
127
|
+
"mcp-tool-resolves": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
128
|
+
"hook-script-exists": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
129
|
+
"prefer-compiled-hooks": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
130
|
+
"disallowed-tools-contract": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
131
|
+
"description-overlap": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
132
|
+
"skill-description-budget": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
133
|
+
"frontmatter-valid": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
134
|
+
"mcp-hook-target-resolves": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
135
|
+
"lethal-trifecta": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
136
|
+
"skill-resource-resolves": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
137
|
+
"skill-missing-fence": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
138
|
+
"plugin-dir-layout": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
139
|
+
"delegation-trifecta": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
140
|
+
"hook-block-ineffective": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
141
|
+
"hook-matcher": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
142
|
+
"doc-refs": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
143
|
+
"instruction-weight": z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodLiteral<"warn">, z.ZodLiteral<"error">, z.ZodLiteral<false>, z.ZodLiteral<"off">, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<true>]>, z.ZodTransform<false | "error" | "warn", boolean | 0 | 1 | 2 | "error" | "warn" | "off">>>;
|
|
144
144
|
}, z.core.$strict>>;
|
|
145
145
|
files: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
146
146
|
maxRules: z.ZodOptional<z.ZodNumber>;
|
|
@@ -170,8 +170,27 @@ export declare const vigilesConfigSchema: z.ZodObject<{
|
|
|
170
170
|
apiVersion: z.ZodOptional<z.ZodNumber>;
|
|
171
171
|
}, z.core.$strict>>;
|
|
172
172
|
nudge: z.ZodOptional<z.ZodLiteral<"dismissed">>;
|
|
173
|
+
extends: z.ZodOptional<z.ZodEnum<{
|
|
174
|
+
"vigiles:recommended": "vigiles:recommended";
|
|
175
|
+
}>>;
|
|
173
176
|
$schema: z.ZodOptional<z.ZodString>;
|
|
174
177
|
}, z.core.$strict>;
|
|
178
|
+
/**
|
|
179
|
+
* Parse a raw `.vigilesrc.json` value — THE one entry point every reader uses.
|
|
180
|
+
*
|
|
181
|
+
* 🔴 THE PRESET IS MERGED INTO THE RAW INPUT, BEFORE THE SCHEMA, for one reason:
|
|
182
|
+
* after parsing, every rule carries a value (the schema fills each default), so
|
|
183
|
+
* "the user wrote `hook-events: warn`" and "nobody wrote it" are the same
|
|
184
|
+
* output, and an explicit downgrade could not win over the preset. Before
|
|
185
|
+
* parsing, the user's own `rules` keys are exactly what they wrote. So the
|
|
186
|
+
* preset's severities go UNDER them, and the schema then normalizes and
|
|
187
|
+
* validates the result as if the user had typed both.
|
|
188
|
+
*
|
|
189
|
+
* Only a recognized preset with an object (or absent) `rules` is expanded;
|
|
190
|
+
* anything else is passed through untouched for the schema to refuse with its
|
|
191
|
+
* own message, so a typo in `extends` is reported, never silently ignored.
|
|
192
|
+
*/
|
|
193
|
+
export declare function parseVigilesConfig(raw: unknown): Readonly<ReturnType<typeof vigilesConfigSchema.safeParse>>;
|
|
175
194
|
/**
|
|
176
195
|
* A `.vigilesrc.json` that cannot be honoured as written.
|
|
177
196
|
*
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.REPLACED_KEYS = exports.VigilesConfigError = exports.vigilesConfigSchema = exports.RULE_NAMES = void 0;
|
|
4
|
+
exports.parseVigilesConfig = parseVigilesConfig;
|
|
4
5
|
exports.replacedKeyMessage = replacedKeyMessage;
|
|
5
6
|
exports.formatConfigIssues = formatConfigIssues;
|
|
6
7
|
/**
|
|
@@ -48,6 +49,7 @@ exports.formatConfigIssues = formatConfigIssues;
|
|
|
48
49
|
*/
|
|
49
50
|
const zod_1 = require("zod");
|
|
50
51
|
const edit_distance_js_1 = require("./edit-distance.js");
|
|
52
|
+
const presets_js_1 = require("./presets.js");
|
|
51
53
|
// ---------------------------------------------------------------------------
|
|
52
54
|
// Primitives
|
|
53
55
|
// ---------------------------------------------------------------------------
|
|
@@ -232,6 +234,14 @@ exports.vigilesConfigSchema = zod_1.z
|
|
|
232
234
|
audit: zod_1.z.object({ measure: zod_1.z.boolean().optional() }).strict().optional(),
|
|
233
235
|
eval: zod_1.z.object({ apiVersion: zod_1.z.number().optional() }).strict().optional(),
|
|
234
236
|
nudge: zod_1.z.literal("dismissed").optional(),
|
|
237
|
+
/**
|
|
238
|
+
* A named preset whose rule severities apply UNDER `rules` — ESLint's
|
|
239
|
+
* `extends`. `"vigiles:recommended"` gates the structural group (see
|
|
240
|
+
* `./presets.ts`); an explicit `rules` entry overrides it. Applied by
|
|
241
|
+
* {@link parseVigilesConfig}, which is why this key is only VALIDATED here.
|
|
242
|
+
* Placed after the keys people misspell most: the "Known:" list is capped.
|
|
243
|
+
*/
|
|
244
|
+
extends: zod_1.z.enum(presets_js_1.PRESET_NAMES).optional(),
|
|
235
245
|
/**
|
|
236
246
|
* The editor's pointer at the published JSON Schema. Accepted, never read.
|
|
237
247
|
*
|
|
@@ -262,6 +272,38 @@ exports.vigilesConfigSchema = zod_1.z
|
|
|
262
272
|
$schema: zod_1.z.string().optional(),
|
|
263
273
|
})
|
|
264
274
|
.strict();
|
|
275
|
+
/**
|
|
276
|
+
* Parse a raw `.vigilesrc.json` value — THE one entry point every reader uses.
|
|
277
|
+
*
|
|
278
|
+
* 🔴 THE PRESET IS MERGED INTO THE RAW INPUT, BEFORE THE SCHEMA, for one reason:
|
|
279
|
+
* after parsing, every rule carries a value (the schema fills each default), so
|
|
280
|
+
* "the user wrote `hook-events: warn`" and "nobody wrote it" are the same
|
|
281
|
+
* output, and an explicit downgrade could not win over the preset. Before
|
|
282
|
+
* parsing, the user's own `rules` keys are exactly what they wrote. So the
|
|
283
|
+
* preset's severities go UNDER them, and the schema then normalizes and
|
|
284
|
+
* validates the result as if the user had typed both.
|
|
285
|
+
*
|
|
286
|
+
* Only a recognized preset with an object (or absent) `rules` is expanded;
|
|
287
|
+
* anything else is passed through untouched for the schema to refuse with its
|
|
288
|
+
* own message, so a typo in `extends` is reported, never silently ignored.
|
|
289
|
+
*/
|
|
290
|
+
function parseVigilesConfig(raw) {
|
|
291
|
+
return exports.vigilesConfigSchema.safeParse(withPresetRules(raw));
|
|
292
|
+
}
|
|
293
|
+
/** `raw` with its `extends` preset's rules placed under its own `rules`. */
|
|
294
|
+
function withPresetRules(raw) {
|
|
295
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
296
|
+
return raw;
|
|
297
|
+
const preset = "extends" in raw ? raw.extends : undefined;
|
|
298
|
+
const rules = "rules" in raw ? raw.rules : undefined;
|
|
299
|
+
if (!(0, presets_js_1.isPresetName)(preset))
|
|
300
|
+
return raw;
|
|
301
|
+
if (rules === undefined)
|
|
302
|
+
return { ...raw, rules: { ...(0, presets_js_1.presetRules)(preset) } };
|
|
303
|
+
if (typeof rules !== "object" || rules === null || Array.isArray(rules))
|
|
304
|
+
return raw;
|
|
305
|
+
return { ...raw, rules: { ...(0, presets_js_1.presetRules)(preset), ...rules } };
|
|
306
|
+
}
|
|
265
307
|
/**
|
|
266
308
|
* A `.vigilesrc.json` that cannot be honoured as written.
|
|
267
309
|
*
|
|
@@ -107,8 +107,11 @@ export interface HarnessDriverContext {
|
|
|
107
107
|
readonly cwd: string;
|
|
108
108
|
/** Whether a settings file was written (CC: pass `--settings`). */
|
|
109
109
|
readonly hasSettings: boolean;
|
|
110
|
-
/**
|
|
111
|
-
|
|
110
|
+
/**
|
|
111
|
+
* The ONLY tools the agent has, when the spec lists them; undefined = no
|
|
112
|
+
* restriction (every tool is offered, the default four are pre-approved).
|
|
113
|
+
*/
|
|
114
|
+
readonly tools?: readonly string[];
|
|
112
115
|
/** Capture the full event transcript instead of just the final result. */
|
|
113
116
|
readonly transcript: boolean;
|
|
114
117
|
/** Path to a plugin dir to install natively, if any. */
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Named rule PRESETS a `.vigilesrc.json` can `extends` — the ESLint
|
|
3
|
+
* `recommended` model, stored as data.
|
|
4
|
+
*
|
|
5
|
+
* 🔴 WHY A PRESET READ AT LOAD TIME, NOT RULE LINES WRITTEN AT SETUP TIME. Every
|
|
6
|
+
* rule's built-in default stays `warn` (`config-schema.ts`); the structural rules
|
|
7
|
+
* gate only because `init` turns them up. It used to do that by WRITING nine
|
|
8
|
+
* `"<rule>": "error"` lines into the new repo's config — a snapshot of the group
|
|
9
|
+
* on the day `init` ran. A repo adopted before a rule joined the group never got
|
|
10
|
+
* it from an upgrade, and re-running `init` to fetch it rewrote far more than
|
|
11
|
+
* the rule (#338). `"extends": "vigiles:recommended"` is resolved by the loader
|
|
12
|
+
* on every run, so the repo follows the group as the installed vigiles ships it,
|
|
13
|
+
* and an explicit `rules` entry still overrides it.
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ ADDING A RULE HERE IS A BREAKING CHANGE (a `!` commit, a semver major): it
|
|
16
|
+
* can turn a consumer's CI red with no edit on their side. Removing one is not.
|
|
17
|
+
* ESLint treats `eslint:recommended` the same way.
|
|
18
|
+
*
|
|
19
|
+
* Harness-agnostic data: rule names only, no adapter fact.
|
|
20
|
+
*/
|
|
21
|
+
import type { RulesConfig } from "./types.js";
|
|
22
|
+
/**
|
|
23
|
+
* The rules `vigiles:recommended` raises to `error` — the FP-safe structural
|
|
24
|
+
* group: each one fires only on a genuine defect (a never-available or typo'd
|
|
25
|
+
* tool, a subagent missing `name`/`description`, a typo'd hook event, a dead hook
|
|
26
|
+
* script, a broken MCP reference, two skills that collide in the selector), so a
|
|
27
|
+
* well-formed harness stays green.
|
|
28
|
+
*
|
|
29
|
+
* Deliberately EXCLUDES the workflow rules (`require-instructions-spec`,
|
|
30
|
+
* `untested-*`): a clean repo fails those until the work is done, so they stay
|
|
31
|
+
* an explicit opt-in (`init --strict`).
|
|
32
|
+
*/
|
|
33
|
+
export declare const RECOMMENDED_RULES: readonly ["subagent-tool-contract", "subagent-frontmatter", "hook-events", "hook-script-exists", "mcp-config", "mcp-tool-resolves", "mcp-hook-target-resolves", "disallowed-tools-contract", "description-overlap"];
|
|
34
|
+
/** The preset names `extends` accepts. One today; the tuple is the enum. */
|
|
35
|
+
export declare const PRESET_NAMES: readonly ["vigiles:recommended"];
|
|
36
|
+
/** A preset name `extends` accepts. */
|
|
37
|
+
export type PresetName = (typeof PRESET_NAMES)[number];
|
|
38
|
+
/** The preset `init` writes. */
|
|
39
|
+
export declare const RECOMMENDED_PRESET: PresetName;
|
|
40
|
+
/** Whether a raw value names a preset. */
|
|
41
|
+
export declare function isPresetName(value: unknown): value is PresetName;
|
|
42
|
+
/** The rule severities a preset sets, in the config's raw spelling. */
|
|
43
|
+
export declare function presetRules(name: PresetName): Readonly<Partial<Record<keyof RulesConfig, "error">>>;
|
|
44
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RECOMMENDED_PRESET = exports.PRESET_NAMES = exports.RECOMMENDED_RULES = void 0;
|
|
4
|
+
exports.isPresetName = isPresetName;
|
|
5
|
+
exports.presetRules = presetRules;
|
|
6
|
+
/**
|
|
7
|
+
* The rules `vigiles:recommended` raises to `error` — the FP-safe structural
|
|
8
|
+
* group: each one fires only on a genuine defect (a never-available or typo'd
|
|
9
|
+
* tool, a subagent missing `name`/`description`, a typo'd hook event, a dead hook
|
|
10
|
+
* script, a broken MCP reference, two skills that collide in the selector), so a
|
|
11
|
+
* well-formed harness stays green.
|
|
12
|
+
*
|
|
13
|
+
* Deliberately EXCLUDES the workflow rules (`require-instructions-spec`,
|
|
14
|
+
* `untested-*`): a clean repo fails those until the work is done, so they stay
|
|
15
|
+
* an explicit opt-in (`init --strict`).
|
|
16
|
+
*/
|
|
17
|
+
exports.RECOMMENDED_RULES = [
|
|
18
|
+
"subagent-tool-contract",
|
|
19
|
+
"subagent-frontmatter",
|
|
20
|
+
"hook-events",
|
|
21
|
+
"hook-script-exists",
|
|
22
|
+
"mcp-config",
|
|
23
|
+
"mcp-tool-resolves",
|
|
24
|
+
"mcp-hook-target-resolves",
|
|
25
|
+
"disallowed-tools-contract",
|
|
26
|
+
"description-overlap",
|
|
27
|
+
];
|
|
28
|
+
/** The preset names `extends` accepts. One today; the tuple is the enum. */
|
|
29
|
+
exports.PRESET_NAMES = ["vigiles:recommended"];
|
|
30
|
+
/** The preset `init` writes. */
|
|
31
|
+
exports.RECOMMENDED_PRESET = "vigiles:recommended";
|
|
32
|
+
/** What each preset sets, as the config would spell it. */
|
|
33
|
+
const PRESETS = {
|
|
34
|
+
"vigiles:recommended": Object.fromEntries(exports.RECOMMENDED_RULES.map((r) => [r, "error"])),
|
|
35
|
+
};
|
|
36
|
+
/** Whether a raw value names a preset. */
|
|
37
|
+
function isPresetName(value) {
|
|
38
|
+
return exports.PRESET_NAMES.some((n) => n === value);
|
|
39
|
+
}
|
|
40
|
+
/** The rule severities a preset sets, in the config's raw spelling. */
|
|
41
|
+
function presetRules(name) {
|
|
42
|
+
return PRESETS[name];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running past the end of a scripted model is an error.
|
|
3
|
+
*
|
|
4
|
+
* A harness test scripts the turns the agent should take, then asserts on what
|
|
5
|
+
* happened. When the agent asks for more turns than the script has, the mock
|
|
6
|
+
* used to answer with a copy of the LAST turn: a looping agent (a Stop hook
|
|
7
|
+
* that keeps blocking, a retry, a reaction to a tool result) then ran on turns
|
|
8
|
+
* nobody scripted, a final `{ tool }` re-ran its side effect, and the test went
|
|
9
|
+
* green over a run it never described (#340). Pure and shared by both mocks
|
|
10
|
+
* (Anthropic Messages, OpenAI Responses) and the runner that fails the test.
|
|
11
|
+
*/
|
|
12
|
+
import type { ModelRequest } from "./harness-driver.js";
|
|
13
|
+
/** The first request the script could not answer. */
|
|
14
|
+
export interface ScriptOverrun {
|
|
15
|
+
/** How many turns the script had. */
|
|
16
|
+
readonly scripted: number;
|
|
17
|
+
/** 1-based number of the agent request that had no turn left. */
|
|
18
|
+
readonly request: number;
|
|
19
|
+
/** The last message that request carried (what the agent was reacting to). */
|
|
20
|
+
readonly lastMessage: string;
|
|
21
|
+
}
|
|
22
|
+
/** Why a test failed because the agent outran its script. */
|
|
23
|
+
export declare function scriptOverrunMessage(o: ScriptOverrun): string;
|
|
24
|
+
/**
|
|
25
|
+
* The first agent request past the end of a script of `scripted` turns, read
|
|
26
|
+
* off the recorded requests (side-channel calls never consume a turn, so they
|
|
27
|
+
* do not count). Undefined when the agent stayed inside the script.
|
|
28
|
+
*/
|
|
29
|
+
export declare function findScriptOverrun(scripted: number, requests: readonly ModelRequest[]): ScriptOverrun | undefined;
|
|
30
|
+
/** {@link findScriptOverrun} and {@link scriptOverrunMessage} in one: the message, or undefined. */
|
|
31
|
+
export declare function overrunMessageFor(scripted: number, requests: readonly ModelRequest[]): string | undefined;
|
|
32
|
+
//# sourceMappingURL=script-overrun.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scriptOverrunMessage = scriptOverrunMessage;
|
|
4
|
+
exports.findScriptOverrun = findScriptOverrun;
|
|
5
|
+
exports.overrunMessageFor = overrunMessageFor;
|
|
6
|
+
const MAX_QUOTED = 160;
|
|
7
|
+
const quote = (text) => {
|
|
8
|
+
const flat = text.replace(/\s+/g, " ").trim();
|
|
9
|
+
return flat.length > MAX_QUOTED ? `${flat.slice(0, MAX_QUOTED)}...` : flat;
|
|
10
|
+
};
|
|
11
|
+
/** Why a test failed because the agent outran its script. */
|
|
12
|
+
function scriptOverrunMessage(o) {
|
|
13
|
+
const last = o.lastMessage.trim() === ""
|
|
14
|
+
? ""
|
|
15
|
+
: ` The request carried this last message: "${quote(o.lastMessage)}".`;
|
|
16
|
+
return (`the agent asked for more model turns than the script has: ${String(o.scripted)} turn(s) scripted, ` +
|
|
17
|
+
`and agent request #${String(o.request)} had none left.${last} ` +
|
|
18
|
+
"The mock does not repeat the last turn, because a looping agent would then pass on turns nobody scripted. " +
|
|
19
|
+
"Script every turn the agent should take.");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The first agent request past the end of a script of `scripted` turns, read
|
|
23
|
+
* off the recorded requests (side-channel calls never consume a turn, so they
|
|
24
|
+
* do not count). Undefined when the agent stayed inside the script.
|
|
25
|
+
*/
|
|
26
|
+
function findScriptOverrun(scripted, requests) {
|
|
27
|
+
const agent = requests.filter((r) => r.sideChannel !== true);
|
|
28
|
+
const first = agent[scripted];
|
|
29
|
+
if (first === undefined)
|
|
30
|
+
return undefined;
|
|
31
|
+
return {
|
|
32
|
+
scripted,
|
|
33
|
+
request: scripted + 1,
|
|
34
|
+
lastMessage: first.messages.at(-1)?.text ?? "",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** {@link findScriptOverrun} and {@link scriptOverrunMessage} in one: the message, or undefined. */
|
|
38
|
+
function overrunMessageFor(scripted, requests) {
|
|
39
|
+
const overrun = findScriptOverrun(scripted, requests);
|
|
40
|
+
return overrun === undefined ? undefined : scriptOverrunMessage(overrun);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=script-overrun.js.map
|
package/dist/core/validate.js
CHANGED
|
@@ -147,7 +147,7 @@ function loadConfig(searchFrom, { onInvalid = "throw" } = {}) {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
if (problems.length === 0) {
|
|
150
|
-
const parsed = config_schema_js_1.
|
|
150
|
+
const parsed = (0, config_schema_js_1.parseVigilesConfig)(raw);
|
|
151
151
|
if (parsed.success)
|
|
152
152
|
return parsed.data;
|
|
153
153
|
problems.push(...(0, config_schema_js_1.formatConfigIssues)(parsed.error.issues));
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* anywhere in the prose counts, because a name like `test:harness` cannot
|
|
21
21
|
* collide with an English word the way `test` and `audit` do. The only thing the
|
|
22
22
|
* lookarounds buy is that a LONGER script name is never read as a shorter one
|
|
23
|
-
* (`test:
|
|
23
|
+
* (`test:unit-extra` does not document `test:unit`).
|
|
24
24
|
*
|
|
25
25
|
* Scope is the `test:` PREFIX, deliberately. Bare `npm test` is the vitest
|
|
26
26
|
* suite, named in the map as prose; every other script (`build`, `lint`,
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* anywhere in the prose counts, because a name like `test:harness` cannot
|
|
22
22
|
* collide with an English word the way `test` and `audit` do. The only thing the
|
|
23
23
|
* lookarounds buy is that a LONGER script name is never read as a shorter one
|
|
24
|
-
* (`test:
|
|
24
|
+
* (`test:unit-extra` does not document `test:unit`).
|
|
25
25
|
*
|
|
26
26
|
* Scope is the `test:` PREFIX, deliberately. Bare `npm test` is the vitest
|
|
27
27
|
* suite, named in the map as prose; every other script (`build`, `lint`,
|
package/dist/eval-lock.d.ts
CHANGED
|
@@ -116,12 +116,11 @@ export declare function lockPath(dir: string, name: string): string;
|
|
|
116
116
|
*/
|
|
117
117
|
export declare function readLock(dir: string, name: string): EvalLock | null;
|
|
118
118
|
/**
|
|
119
|
-
* Whether ANY lock has been committed under `dir`.
|
|
120
|
-
* (
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
* opt-in-by-committing behavior that keeps a fresh `init` from going red.
|
|
119
|
+
* Whether ANY lock has been committed under `dir`. `eval --check` fails when none
|
|
120
|
+
* is (#197): with no lock there is no recorded result to verify the current inputs
|
|
121
|
+
* against, so a pass would mean nothing was checked. Once the first lock is
|
|
122
|
+
* committed, every named eval is held to having a fresh one (a new unlocked eval
|
|
123
|
+
* then reads as stale). The edit-time nudge also stays silent until then.
|
|
125
124
|
*/
|
|
126
125
|
export declare function anyLocksCommitted(dir: string): boolean;
|
|
127
126
|
/**
|
package/dist/eval-lock.js
CHANGED
|
@@ -130,12 +130,11 @@ function readLock(dir, name) {
|
|
|
130
130
|
return obj;
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
|
-
* Whether ANY lock has been committed under `dir`.
|
|
134
|
-
* (
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* opt-in-by-committing behavior that keeps a fresh `init` from going red.
|
|
133
|
+
* Whether ANY lock has been committed under `dir`. `eval --check` fails when none
|
|
134
|
+
* is (#197): with no lock there is no recorded result to verify the current inputs
|
|
135
|
+
* against, so a pass would mean nothing was checked. Once the first lock is
|
|
136
|
+
* committed, every named eval is held to having a fresh one (a new unlocked eval
|
|
137
|
+
* then reads as stale). The edit-time nudge also stays silent until then.
|
|
139
138
|
*/
|
|
140
139
|
function anyLocksCommitted(dir) {
|
|
141
140
|
return countLocks(dir) > 0;
|
package/dist/harness-test.d.ts
CHANGED
|
@@ -52,7 +52,18 @@ export interface HarnessTestSpec {
|
|
|
52
52
|
readonly model: readonly ModelTurn[];
|
|
53
53
|
/** The user prompt. Default: "go". */
|
|
54
54
|
readonly prompt?: string;
|
|
55
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* The ONLY tools the agent has, when you list them: a tool left out is not
|
|
57
|
+
* offered (`claude --tools`, Claude Code 2.0.31+), `[]` is refused, and a
|
|
58
|
+
* scripted call to a tool the list leaves out throws before the run starts.
|
|
59
|
+
* Omitted, nothing is withheld: every tool is offered and Read, Edit, Write and
|
|
60
|
+
* Bash are pre-approved. Each listed tool is also pre-approved
|
|
61
|
+
* (`--allowedTools`), so it does not stop on a permission prompt; a permission
|
|
62
|
+
* rule such as `Bash(git *)` keeps its specifier for the approval and is
|
|
63
|
+
* offered as plain `Bash`. An MCP tool is not a built-in: left out, it is still
|
|
64
|
+
* offered but not approved, so a call to it is refused for permission rather
|
|
65
|
+
* than as "No such tool".
|
|
66
|
+
*/
|
|
56
67
|
readonly allowedTools?: readonly string[];
|
|
57
68
|
/**
|
|
58
69
|
* Capture the full event transcript (`--output-format stream-json`) into
|
|
@@ -119,6 +130,27 @@ export declare function parseResultEvent(stdout: string): Record<string, unknown
|
|
|
119
130
|
/** The agent's final answer text from a transcript / result object, or "". */
|
|
120
131
|
export declare function parseOutput(stdout: string): string;
|
|
121
132
|
export declare function parseHooks(stdout: string): HookFire[];
|
|
133
|
+
/**
|
|
134
|
+
* The names `--tools` should offer for an `allowedTools` list. `--allowedTools`
|
|
135
|
+
* takes permission rules (`Bash(git *)`); `--tools` takes tool NAMES, and a rule
|
|
136
|
+
* with a specifier there makes the CLI offer no tools at all. So the specifier is
|
|
137
|
+
* dropped (`Bash(git *)` → `Bash`) and repeats collapse. Pure.
|
|
138
|
+
*/
|
|
139
|
+
export declare function toolAvailabilityList(allowed: readonly string[]): readonly string[];
|
|
140
|
+
/**
|
|
141
|
+
* A scripted call to a tool an EXPLICIT `allowedTools` does not offer. The CLI
|
|
142
|
+
* answers it with "No such tool available" and the run goes on, so a test that
|
|
143
|
+
* scripts the call and then asserts on something else passes over a step that
|
|
144
|
+
* never happened. Returns the message to throw, or undefined. MCP tools are not
|
|
145
|
+
* built-ins, so `--tools` does not withhold them and they are skipped. Pure.
|
|
146
|
+
*/
|
|
147
|
+
export declare function unofferedScriptedTool(model: readonly ModelTurn[], allowed: readonly string[] | undefined): string | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* A run on a `claude` that predates `--tools` exits at argument parsing, and
|
|
150
|
+
* commander's "unknown option" says nothing about WHY vigiles passed it. Returns
|
|
151
|
+
* the message to throw, or undefined when the run did not die that way. Pure.
|
|
152
|
+
*/
|
|
153
|
+
export declare function unsupportedToolsFlag(stderr: string): string | undefined;
|
|
122
154
|
/**
|
|
123
155
|
* The `claude` CLI argv for a harness run (shared by the direct and sandboxed
|
|
124
156
|
* paths). `ANTHROPIC_BASE_URL` is set by the caller's environment / wrapper, not
|
|
@@ -170,6 +202,8 @@ export interface RunHarnessTestOptions {
|
|
|
170
202
|
*/
|
|
171
203
|
readonly adapter?: HarnessAdapter;
|
|
172
204
|
}
|
|
205
|
+
/** Say so on stderr when side-channel calls arrived and no script turn was served. */
|
|
206
|
+
export declare function warnUnconsumed(count: number, sideChannelCount: number): void;
|
|
173
207
|
/**
|
|
174
208
|
* Run the real agent CLI against a scripted mock model, with the given fixture
|
|
175
209
|
* and settings (hooks). Deterministic — same script, same result. Adapter-driven
|