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.
@@ -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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, 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 | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "off">>, z.ZodTuple<[z.ZodLiteral<"warn">, z.ZodObject<{
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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "off">>>;
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
- /** Tools the agent may use. */
111
- readonly tools: readonly string[];
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
@@ -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.vigilesConfigSchema.safeParse(raw);
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:cli-e2e` does not document `test:e2e`).
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:cli-e2e` does not document `test:e2e`).
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`,
@@ -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`. The CI staleness gate
120
- * (`eval --check`) uses this to stay a NO-OP until the feature is in use: a repo
121
- * that has never run `eval --update` has no locks, so there is nothing to verify
122
- * and CI passes green. Once the first lock is committed, every named eval is held
123
- * to having a fresh one (a new unlocked eval then reads as stale). The graduated,
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`. The CI staleness gate
134
- * (`eval --check`) uses this to stay a NO-OP until the feature is in use: a repo
135
- * that has never run `eval --update` has no locks, so there is nothing to verify
136
- * and CI passes green. Once the first lock is committed, every named eval is held
137
- * to having a fresh one (a new unlocked eval then reads as stale). The graduated,
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;
@@ -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
- /** Tools the agent may use. Default: Read Edit Write Bash. */
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