vigiles 30.0.2 → 31.0.1

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.
Files changed (42) hide show
  1. package/dist/adapter-conformance.js +9 -15
  2. package/dist/adapters/claude-code/run-scripts.d.ts +5 -3
  3. package/dist/adapters/claude-code/run-scripts.js +5 -3
  4. package/dist/claude-code.js +5 -0
  5. package/dist/cli-main.d.ts +8 -0
  6. package/dist/cli-main.js +315 -212
  7. package/dist/codex.js +5 -0
  8. package/dist/core/compile.d.ts +5 -5
  9. package/dist/core/compile.js +28 -25
  10. package/dist/core/config-schema.d.ts +32 -32
  11. package/dist/core/coverage.d.ts +4 -3
  12. package/dist/core/coverage.js +4 -3
  13. package/dist/core/doc-refs.d.ts +3 -1
  14. package/dist/core/doc-refs.js +2 -1
  15. package/dist/core/frame.d.ts +90 -0
  16. package/dist/core/frame.js +58 -0
  17. package/dist/core/glob-ignore.d.ts +28 -0
  18. package/dist/core/glob-ignore.js +42 -0
  19. package/dist/core/orphans.d.ts +5 -3
  20. package/dist/core/orphans.js +5 -4
  21. package/dist/core/refs.d.ts +2 -2
  22. package/dist/core/refs.js +9 -12
  23. package/dist/core/spec.js +5 -0
  24. package/dist/core/symbols.d.ts +25 -19
  25. package/dist/core/symbols.js +51 -74
  26. package/dist/core/tree-sitter-wasm.d.ts +24 -0
  27. package/dist/core/tree-sitter-wasm.js +128 -0
  28. package/dist/eval-surface.js +5 -0
  29. package/dist/exclude.d.ts +3 -5
  30. package/dist/exclude.js +3 -3
  31. package/dist/hook-install.js +23 -10
  32. package/dist/hook.js +5 -0
  33. package/dist/jest.js +5 -0
  34. package/dist/linting.d.ts +11 -30
  35. package/dist/linting.js +22 -35
  36. package/dist/scan.d.ts +3 -3
  37. package/dist/scan.js +8 -7
  38. package/dist/test-coverage.d.ts +20 -3
  39. package/dist/test-coverage.js +40 -14
  40. package/dist/test.js +5 -0
  41. package/dist/vitest.mjs +5 -0
  42. package/package.json +4 -7
package/dist/codex.js CHANGED
@@ -14,6 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ // 🔴 PUBLIC ENTRY POINT `vigiles/codex` — every export here is a promise to users. The default for a
18
+ // symbol is INTERNAL. It is exported only if (a) a NAMED external consumer uses it, or (b) it is
19
+ // a deliberate extension point listed in STABILITY.md (the adapter kit is the example). "Might
20
+ // be useful" is neither. Review point: the diff of `api-surface/vigiles-codex.api.md`, which
21
+ // `npm run api:check` fails on.
17
22
  /**
18
23
  * `vigiles/codex` — the OpenAI Codex harness adapter. Sits beside
19
24
  * `vigiles/claude-code`: same harness-agnostic `vigiles` testing core, a
@@ -63,7 +63,7 @@ export interface CompileError {
63
63
  export declare function validateFileRef(filePath: string, basePath: string): CompileError | null;
64
64
  export declare function readPackageScripts(basePath: string): Record<string, string> | null;
65
65
  export declare function validateCommandRef(command: string, basePath: string): CompileError | null;
66
- export declare function validateSymbolRef(file: string, name: string, basePath: string): CompileError | null;
66
+ export declare function validateSymbolRef(file: string, name: string, basePath: string): Promise<CompileError | null>;
67
67
  export declare function validateDirRef(dirPath: string, basePath: string): CompileError | null;
68
68
  export declare function validateGlobRef(pattern: string, basePath: string): CompileError | null;
69
69
  export interface CompileClaudeResult {
@@ -142,7 +142,7 @@ export declare const DEFAULT_MAX_SECTION_CHARS = 15000;
142
142
  * Returns the compiled markdown, validation errors, and linter check results.
143
143
  * The markdown is generated even if there are errors (with warnings).
144
144
  */
145
- export declare function compileClaude(spec: ClaudeSpec, options?: CompileClaudeOptions): CompileClaudeResult;
145
+ export declare function compileClaude(spec: ClaudeSpec, options?: CompileClaudeOptions): Promise<CompileClaudeResult>;
146
146
  export interface CompileSkillResult {
147
147
  /**
148
148
  * The stamped artifact — present ONLY when `errors` is empty. `null` is what
@@ -163,7 +163,7 @@ export declare function compileSkill(spec: SkillSpec, options?: {
163
163
  /** The harness dialect — supplies `skillFrontmatterKeys`. Omitting it emits
164
164
  * every key the compiler can render, so existing callers are unchanged. */
165
165
  dialect?: HarnessDialect;
166
- }): CompileSkillResult;
166
+ }): Promise<CompileSkillResult>;
167
167
  export interface CompileAgentResult {
168
168
  /**
169
169
  * The stamped artifact — present ONLY when `errors` is empty. `null` is what
@@ -186,7 +186,7 @@ export declare function compileAgent(spec: AgentSpec, options: {
186
186
  /** The harness dialect to verify the tool contract against (required — the
187
187
  * core defines no default dialect; the adapter/composition root injects it). */
188
188
  dialect: HarnessDialect;
189
- }): CompileAgentResult;
189
+ }): Promise<CompileAgentResult>;
190
190
  export interface CompileRailwayOptions {
191
191
  /** Names of compiled agents, to resolve `delegate` targets. Skipped if omitted. */
192
192
  knownAgents?: readonly string[];
@@ -230,5 +230,5 @@ export interface AdoptResult {
230
230
  * Compare a generated file against what the spec would produce.
231
231
  * Returns the diff so users can see what was manually changed.
232
232
  */
233
- export declare function adoptDiff(filePath: string, spec: ClaudeSpec | SkillSpec | AgentSpec, basePath: string, dialect: HarnessDialect): AdoptResult;
233
+ export declare function adoptDiff(filePath: string, spec: ClaudeSpec | SkillSpec | AgentSpec, basePath: string, dialect: HarnessDialect): Promise<AdoptResult>;
234
234
  //# sourceMappingURL=compile.d.ts.map
@@ -169,7 +169,7 @@ function validateCommandRef(command, basePath) {
169
169
  }
170
170
  return null;
171
171
  }
172
- function validateSymbolRef(file, name, basePath) {
172
+ async function validateSymbolRef(file, name, basePath) {
173
173
  const full = (0, node_path_1.resolve)(basePath, file);
174
174
  if (!(0, node_fs_1.existsSync)(full)) {
175
175
  return {
@@ -178,7 +178,7 @@ function validateSymbolRef(file, name, basePath) {
178
178
  path: file,
179
179
  };
180
180
  }
181
- const support = (0, symbols_js_1.langForFile)(file);
181
+ const support = await (0, symbols_js_1.langForFile)(file);
182
182
  if (support.kind === "unsupported") {
183
183
  return {
184
184
  type: "stale-ref",
@@ -186,16 +186,16 @@ function validateSymbolRef(file, name, basePath) {
186
186
  path: file,
187
187
  };
188
188
  }
189
- if (support.kind === "grammar-missing") {
190
- // The language is parseable by this tool; the optional grammar is absent in THIS install.
189
+ if (support.kind === "grammar-load-failed") {
190
+ // The language is parseable by this tool; its grammar failed to load in THIS process.
191
191
  // Distinct wording on purpose — see the union's docblock in core/symbols.ts.
192
192
  return {
193
193
  type: "stale-ref",
194
- message: `Symbol not checked: the ${support.id} grammar is not installed (npm i -D ${support.pkg})`,
194
+ message: (0, symbols_js_1.notCheckedReason)(support),
195
195
  path: file,
196
196
  };
197
197
  }
198
- if (!(0, symbols_js_1.fileDefinesSymbol)(full, name)) {
198
+ if (!(await (0, symbols_js_1.fileDefinesSymbol)(full, name))) {
199
199
  return {
200
200
  type: "stale-ref",
201
201
  message: `"${name}" is not defined in ${file}`,
@@ -235,18 +235,18 @@ function validateGlobRef(pattern, basePath) {
235
235
  }
236
236
  return null;
237
237
  }
238
- function validateRefs(fragments, basePath) {
238
+ async function validateRefs(fragments, basePath) {
239
239
  const errors = [];
240
240
  for (const fragment of fragments) {
241
241
  if (typeof fragment !== "string") {
242
- errors.push(...validateOneRef(fragment, basePath));
242
+ errors.push(...(await validateOneRef(fragment, basePath)));
243
243
  }
244
244
  }
245
245
  return errors;
246
246
  }
247
247
  const wrap = (e) => (e ? [e] : []);
248
248
  /** Validate a single non-string fragment (a `Ref` or `EffectRegion`). */
249
- function validateOneRef(r, basePath) {
249
+ async function validateOneRef(r, basePath) {
250
250
  switch (r._ref) {
251
251
  case "file":
252
252
  return wrap(validateFileRef(r.path, basePath));
@@ -263,7 +263,7 @@ function validateOneRef(r, basePath) {
263
263
  ]
264
264
  : [];
265
265
  case "symbol":
266
- return wrap(validateSymbolRef(r.file, r.symbol, basePath));
266
+ return wrap(await validateSymbolRef(r.file, r.symbol, basePath));
267
267
  case "dir":
268
268
  return wrap(validateDirRef(r.path, basePath));
269
269
  case "glob":
@@ -448,7 +448,7 @@ const RESERVED_SECTION_KEYS = new Set([
448
448
  "key_files",
449
449
  "rules",
450
450
  ]);
451
- function compileSectionsSection(spec, basePath, maxSectionLines) {
451
+ async function compileSectionsSection(spec, basePath, maxSectionLines) {
452
452
  if (!spec.sections)
453
453
  return { lines: [], errors: [] };
454
454
  const lines = [];
@@ -467,7 +467,7 @@ function compileSectionsSection(spec, basePath, maxSectionLines) {
467
467
  lines.push(`## ${heading}\n\n${content.trim()}`);
468
468
  }
469
469
  else {
470
- errors.push(...validateRefs(content, basePath));
470
+ errors.push(...(await validateRefs(content, basePath)));
471
471
  const rendered = content.map(renderFragment).join("");
472
472
  errors.push(...validateSectionContent(name, rendered, maxSectionLines));
473
473
  lines.push(`## ${heading}\n\n${rendered.trim()}`);
@@ -581,7 +581,7 @@ function compileRulesSection(spec, basePath, options) {
581
581
  // (no frontmatter), so Codex/OpenCode reuse it unchanged — only the h1 target
582
582
  // differs, which already comes from the injected dialect. Nothing here is
583
583
  // CC-only, so there is no per-dialect branch to gate.
584
- function compileClaude(spec, options = {}) {
584
+ async function compileClaude(spec, options = {}) {
585
585
  const targets = spec.target ?? options.dialect?.instructionTargets[0] ?? DEFAULT_TARGET;
586
586
  const target = Array.isArray(targets) ? targets[0] : targets;
587
587
  const basePath = options.basePath ?? process.cwd();
@@ -614,7 +614,7 @@ function compileClaude(spec, options = {}) {
614
614
  }
615
615
  // Per-spec maxSectionLines takes precedence, then compile options
616
616
  const maxSectionLines = spec.maxSectionLines ?? options.maxSectionLines;
617
- const prose = compileSectionsSection(spec, basePath, maxSectionLines);
617
+ const prose = await compileSectionsSection(spec, basePath, maxSectionLines);
618
618
  const keyFiles = compileKeyFilesSection(spec, basePath);
619
619
  const commands = compileCommandsSection(spec, basePath);
620
620
  const rules = compileRulesSection(spec, basePath, options);
@@ -902,7 +902,7 @@ function checkInlineCode(markdown, max) {
902
902
  /**
903
903
  * Compile a SkillSpec into SKILL.md markdown with YAML frontmatter.
904
904
  */
905
- function compileSkill(spec, options = {}) {
905
+ async function compileSkill(spec, options = {}) {
906
906
  // 🔴 NORMALISE FIRST, before anything reads the spec. `compileSkill` accepts a
907
907
  // `SkillSpec` STRUCTURALLY, so a caller can hand us `{ _specType: "skill", …,
908
908
  // result: cmd(…) }` without ever touching `experimental_skill()`. Both readers
@@ -931,7 +931,7 @@ function compileSkill(spec, options = {}) {
931
931
  });
932
932
  }
933
933
  }
934
- errors.push(...validateRefs(collectSkillRefs(spec), basePath));
934
+ errors.push(...(await validateRefs(collectSkillRefs(spec), basePath)));
935
935
  // A typed `output` Result contract is valid ONLY for a forked skill: an inline
936
936
  // skill has no call→return boundary, so a typed outcome there is a category
937
937
  // error (see research/spec-syntax-and-railway-scope.md). Enforce it at compile.
@@ -1063,7 +1063,7 @@ function purityMarker(purity) {
1063
1063
  return `<!-- vigiles:purity:${level} -->`;
1064
1064
  }
1065
1065
  /** Render the subagent's named `##` system-prompt sections (verified like CLAUDE.md). */
1066
- function renderAgentSections(sections, basePath) {
1066
+ async function renderAgentSections(sections, basePath) {
1067
1067
  const lines = [];
1068
1068
  const errors = [];
1069
1069
  for (const [name, content] of Object.entries(sections)) {
@@ -1079,7 +1079,7 @@ function renderAgentSections(sections, basePath) {
1079
1079
  lines.push(`## ${heading}\n\n${content.trim()}`);
1080
1080
  }
1081
1081
  else {
1082
- errors.push(...validateRefs(content, basePath));
1082
+ errors.push(...(await validateRefs(content, basePath)));
1083
1083
  const rendered = content.map(renderFragment).join("");
1084
1084
  errors.push(...validateSectionContent(name, rendered));
1085
1085
  lines.push(`## ${heading}\n\n${rendered.trim()}`);
@@ -1134,7 +1134,7 @@ function renderAgentRules(rules) {
1134
1134
  * Verifies the tool contract and the body's references; the marks the body
1135
1135
  * carries (`vigiles:symbol`, file/cmd refs) are the same ones `lint` re-checks.
1136
1136
  */
1137
- function compileAgent(spec, options) {
1137
+ async function compileAgent(spec, options) {
1138
1138
  const basePath = options.basePath ?? process.cwd();
1139
1139
  const specFile = options.specFile ?? "agent.md.spec.ts";
1140
1140
  const dialect = options.dialect;
@@ -1169,13 +1169,13 @@ function compileAgent(spec, options) {
1169
1169
  }
1170
1170
  }
1171
1171
  if (Array.isArray(spec.body)) {
1172
- errors.push(...validateRefs(spec.body, basePath));
1172
+ errors.push(...(await validateRefs(spec.body, basePath)));
1173
1173
  }
1174
1174
  const sections = [];
1175
1175
  if (spec.body !== undefined)
1176
1176
  sections.push(renderBody(spec.body).trim());
1177
1177
  if (spec.sections) {
1178
- const result = renderAgentSections(spec.sections, basePath);
1178
+ const result = await renderAgentSections(spec.sections, basePath);
1179
1179
  sections.push(...result.lines);
1180
1180
  errors.push(...result.errors);
1181
1181
  }
@@ -1287,7 +1287,7 @@ function checkFileHash(filePath) {
1287
1287
  * Compare a generated file against what the spec would produce.
1288
1288
  * Returns the diff so users can see what was manually changed.
1289
1289
  */
1290
- function adoptDiff(filePath, spec, basePath, dialect) {
1290
+ async function adoptDiff(filePath, spec, basePath, dialect) {
1291
1291
  const fullPath = (0, node_path_1.resolve)(basePath, filePath);
1292
1292
  const currentContent = (0, node_fs_1.existsSync)(fullPath)
1293
1293
  ? (0, node_fs_1.readFileSync)(fullPath, "utf-8")
@@ -1296,7 +1296,7 @@ function adoptDiff(filePath, spec, basePath, dialect) {
1296
1296
  // Compile the spec to get what it WOULD produce
1297
1297
  let compiledContent = null;
1298
1298
  if (spec._specType === "claude") {
1299
- const { markdown } = compileClaude(spec, {
1299
+ const { markdown } = await compileClaude(spec, {
1300
1300
  basePath,
1301
1301
  specFile: filePath,
1302
1302
  dialect,
@@ -1304,11 +1304,14 @@ function adoptDiff(filePath, spec, basePath, dialect) {
1304
1304
  compiledContent = markdown;
1305
1305
  }
1306
1306
  else if (spec._specType === "skill") {
1307
- const { markdown } = compileSkill(spec, { basePath, specFile: filePath });
1307
+ const { markdown } = await compileSkill(spec, {
1308
+ basePath,
1309
+ specFile: filePath,
1310
+ });
1308
1311
  compiledContent = markdown;
1309
1312
  }
1310
1313
  else if (spec._specType === "agent") {
1311
- const { markdown } = compileAgent(spec, {
1314
+ const { markdown } = await compileAgent(spec, {
1312
1315
  basePath,
1313
1316
  specFile: filePath,
1314
1317
  dialect,
@@ -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 | "off" | "warn" | "error">>>;
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 | "off" | "warn" | "error">>>;
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 | "off" | "warn" | "error">>>;
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 | "off" | "warn" | "error">>>;
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 | "off" | "warn" | "error">>>;
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 | "off" | "warn" | "error">>>;
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 | "off" | "warn" | "error">>, 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 | "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<{
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 | "off" | "warn" | "error">>, 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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "off" | "warn" | "error">>, 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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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 | "off" | "warn" | "error">>, 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 | "warn" | "error", boolean | 0 | 1 | 2 | "warn" | "error" | "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,28 +109,28 @@ 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
- "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 | "off" | "warn" | "error">>>;
113
- "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 | "off" | "warn" | "error">>>;
114
- "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 | "off" | "warn" | "error">>>;
115
- "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 | "off" | "warn" | "error">>>;
116
- "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 | "off" | "warn" | "error">>>;
117
- "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 | "off" | "warn" | "error">>>;
118
- "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 | "off" | "warn" | "error">>>;
119
- "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 | "off" | "warn" | "error">>>;
120
- "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 | "off" | "warn" | "error">>>;
121
- "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 | "off" | "warn" | "error">>>;
122
- "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 | "off" | "warn" | "error">>>;
123
- "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 | "off" | "warn" | "error">>>;
124
- "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 | "off" | "warn" | "error">>>;
125
- "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 | "off" | "warn" | "error">>>;
126
- "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 | "off" | "warn" | "error">>>;
127
- "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 | "off" | "warn" | "error">>>;
128
- "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 | "off" | "warn" | "error">>>;
129
- "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 | "off" | "warn" | "error">>>;
130
- "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 | "off" | "warn" | "error">>>;
131
- "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 | "off" | "warn" | "error">>>;
132
- "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 | "off" | "warn" | "error">>>;
133
- "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 | "off" | "warn" | "error">>>;
112
+ "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">>>;
113
+ "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">>>;
114
+ "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">>>;
115
+ "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">>>;
116
+ "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">>>;
117
+ "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">>>;
118
+ "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">>>;
119
+ "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">>>;
120
+ "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">>>;
121
+ "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">>>;
122
+ "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">>>;
123
+ "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">>>;
124
+ "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">>>;
125
+ "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">>>;
126
+ "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">>>;
127
+ "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">>>;
128
+ "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">>>;
129
+ "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">>>;
130
+ "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">>>;
131
+ "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">>>;
132
+ "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">>>;
133
+ "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">>>;
134
134
  }, z.core.$strict>>;
135
135
  files: z.ZodDefault<z.ZodArray<z.ZodString>>;
136
136
  maxRules: z.ZodOptional<z.ZodNumber>;
@@ -8,6 +8,7 @@
8
8
  * Configurable thresholds in .vigilesrc.json trigger warnings or errors when
9
9
  * coverage drops below the minimum.
10
10
  */
11
+ import { type GlobIgnore } from "./glob-ignore.js";
11
12
  import type { CoverageThresholds } from "./types.js";
12
13
  import type { ClaudeSpec } from "./spec.js";
13
14
  export interface CoverageMetric {
@@ -35,11 +36,11 @@ export declare function readNpmScripts(basePath: string): string[];
35
36
  * Collect commands documented in specs by loading spec source files directly.
36
37
  * Reads the structured `commands` field — no markdown parsing.
37
38
  */
38
- export declare function collectDocumentedCommands(basePath: string, specs: ClaudeSpec[] | undefined, ignore: readonly string[]): Set<string>;
39
+ export declare function collectDocumentedCommands(basePath: string, specs: ClaudeSpec[] | undefined, ignore: GlobIgnore): Set<string>;
39
40
  /**
40
41
  * Compute script coverage: what % of npm scripts are documented in specs.
41
42
  */
42
- export declare function computeScriptCoverage(basePath: string, threshold: number | undefined, specs: ClaudeSpec[] | undefined, ignore: readonly string[]): CoverageMetric;
43
+ export declare function computeScriptCoverage(basePath: string, threshold: number | undefined, specs: ClaudeSpec[] | undefined, ignore: GlobIgnore): CoverageMetric;
43
44
  /**
44
45
  * Compute linter rule coverage from pre-computed totals.
45
46
  * The actual linter scanning is done by the existing discover() in cli.ts.
@@ -48,7 +49,7 @@ export declare function computeLinterRuleCoverage(enabled: number, documented: n
48
49
  /**
49
50
  * Check all coverage metrics against thresholds.
50
51
  */
51
- export declare function checkCoverage(basePath: string, thresholds: CoverageThresholds, linterEnabled: number, linterDocumented: number, specs: ClaudeSpec[] | undefined, ignore: readonly string[]): CoverageReport;
52
+ export declare function checkCoverage(basePath: string, thresholds: CoverageThresholds, linterEnabled: number, linterDocumented: number, specs: ClaudeSpec[] | undefined, ignore: GlobIgnore): CoverageReport;
52
53
  /**
53
54
  * Format coverage report as human-readable text.
54
55
  */
@@ -20,6 +20,7 @@ const node_fs_1 = require("node:fs");
20
20
  const integrity_js_1 = require("./integrity.js");
21
21
  const node_path_1 = require("node:path");
22
22
  const glob_1 = require("glob");
23
+ const glob_ignore_js_1 = require("./glob-ignore.js");
23
24
  const compile_js_1 = require("./compile.js");
24
25
  // ---------------------------------------------------------------------------
25
26
  // Script coverage
@@ -50,12 +51,12 @@ function collectDocumentedCommands(basePath, specs, ignore) {
50
51
  // Fallback: scan compiled markdown for spec file references, then
51
52
  // load the compiled JS spec from dist/. If that fails, try to
52
53
  // extract commands from the compiled output (last resort).
53
- // `ignore` is the repo's ExcludeSet string face (src/exclude.ts): the floor
54
- // plus `.vigilesrc.json#exclude`, required so this fallback cannot walk a
54
+ // `ignore` is the repo's `ExcludeSet.globIgnore` (src/exclude.ts, correct
55
+ // from any cwd) or patterns relative to `basePath`, required so this fallback cannot walk a
55
56
  // vendored corpus the repo excluded (#192). The CLI always passes `specs`,
56
57
  // so this branch is reached by the library path and tests only.
57
58
  const mdFiles = (0, glob_1.globSync)("**/*.md", {
58
- ignore: [...ignore],
59
+ ignore: (0, glob_ignore_js_1.withIgnored)([], ignore),
59
60
  cwd: basePath,
60
61
  });
61
62
  for (const mdFile of mdFiles) {
@@ -17,6 +17,7 @@
17
17
  * in markdown is explicitly out of scope — use eslint-plugin-markdown or
18
18
  * twoslash for that.
19
19
  */
20
+ import { type GlobIgnore } from "./glob-ignore.js";
20
21
  export type DocRefKind = "enforce" | "file" | "cmd" | "ref";
21
22
  export interface DocRef {
22
23
  readonly file: string;
@@ -40,7 +41,8 @@ export interface DocRefReport {
40
41
  }
41
42
  export interface FindDocRefsOptions {
42
43
  readonly basePath?: string;
43
- readonly ignore?: readonly string[];
44
+ /** The repo exclude (`ExcludeSet.globIgnore`), or patterns relative to `basePath`. */
45
+ readonly ignore?: GlobIgnore;
44
46
  }
45
47
  interface ExtractResult {
46
48
  refs: DocRef[];
@@ -29,6 +29,7 @@ const node_fs_1 = require("node:fs");
29
29
  const typescript_1 = __importDefault(require("typescript"));
30
30
  const node_path_1 = require("node:path");
31
31
  const glob_1 = require("glob");
32
+ const glob_ignore_js_1 = require("./glob-ignore.js");
32
33
  const linters_js_1 = require("./linters.js");
33
34
  const compile_js_1 = require("./compile.js");
34
35
  // ---------------------------------------------------------------------------
@@ -239,7 +240,7 @@ function validateRefs(refs, basePath) {
239
240
  */
240
241
  function findDocRefs(options = {}) {
241
242
  const basePath = options.basePath ?? process.cwd();
242
- const ignore = [...DEFAULT_IGNORE, ...(options.ignore ?? [])];
243
+ const ignore = (0, glob_ignore_js_1.withIgnored)(DEFAULT_IGNORE, options.ignore);
243
244
  const files = (0, glob_1.globSync)("**/*.md", { cwd: basePath, ignore });
244
245
  const allRefs = [];
245
246
  let filesIgnored = 0;
@@ -0,0 +1,90 @@
1
+ /**
2
+ * The frame of a path — WHICH DIRECTORY it is relative to — named by its TYPE
3
+ * rather than by a comment (#281).
4
+ *
5
+ * 🔴 WHY THIS EXISTS. Every path the CLI handled was a bare `string`, so a path
6
+ * relative to a nested bundle, one relative to the repository and an absolute one
7
+ * were the same type, and nothing stopped a caller from printing the wrong one.
8
+ * `overBundles` handed each check ONE `root: string` that had to be the discovery
9
+ * base, the base of the config's globs AND the frame of every printed path at
10
+ * once. Under `bundles: "all"` that root was the nested bundle, so `include`
11
+ * resolved from the wrong directory and `::warning file=skills/x/SKILL.md` named a
12
+ * file that did not exist from where the command ran — while a root-bundle skill
13
+ * of the same name made the annotation land on the WRONG real file, which looks
14
+ * like success.
15
+ *
16
+ * Three frames, two of them branded:
17
+ * - {@link RepoPath} — relative to {@link Frame.root}, the directory whose
18
+ * `.vigilesrc.json` governs the run. Every printed or annotated path.
19
+ * - {@link BundlePath} — relative to one {@link Bundle}'s own directory. What a
20
+ * per-bundle scan reports.
21
+ * - an absolute path — a plain `string`, the only thing the filesystem takes.
22
+ *
23
+ * The brand is `Opaque` from `ts-essentials` (a `unique symbol` key, so no object
24
+ * literal can forge it), imported as a TYPE ONLY: nothing of it survives the
25
+ * build. It must not reach a public `.d.ts` either — this module is internal and
26
+ * the API report (`api-surface/*.api.md`) is the gate that would show a leak.
27
+ *
28
+ * 🔴 THE ONE CONVERSION POINT. A `RepoPath` is minted here and nowhere else:
29
+ * {@link Frame.repo} from an absolute path, {@link Bundle.path} from a
30
+ * `BundlePath`. A cast to `RepoPath` outside this file is refused by ESLint
31
+ * (`no-restricted-syntax` in `eslint.config.mjs`), so "where did this path get its
32
+ * frame" always has the answer "in frame.ts".
33
+ *
34
+ * WHAT IS UNREPRESENTABLE AND WHAT IS ONLY DETECTABLE. The CLI's output boundary
35
+ * (`ghAnnotate`, the per-bundle check context) takes `RepoPath`, so handing it a
36
+ * bundle-relative or absolute string is a tsc error. Upstream of that, scan-core
37
+ * keeps reporting plain bundle-relative strings, because its browser twin
38
+ * (`scan-files.ts`) shares those shapes and has no filesystem to have a frame
39
+ * over. {@link Bundle.scanned} is the seam where such a string gets its frame;
40
+ * a relative string that is secretly repo-relative still passes it, and that
41
+ * residue is caught by tests, not by the compiler.
42
+ *
43
+ * NODE-FREE: path ops come from `../posix-path.js`, and the caller supplies the
44
+ * working directory, so this module has no process state of its own.
45
+ */
46
+ import type { Opaque } from "ts-essentials";
47
+ /** A `/`-separated path relative to {@link Frame.root}. `.` is the root itself. */
48
+ export type RepoPath = Opaque<string, "RepoPath">;
49
+ /** A `/`-separated path relative to one {@link Bundle}'s own directory. */
50
+ export type BundlePath = Opaque<string, "BundlePath">;
51
+ /** One scored directory: the lint target itself, or a nested plugin bundle. */
52
+ export interface Bundle {
53
+ /** Absolute directory of the bundle. */
54
+ readonly abs: string;
55
+ /** Where the bundle sits, from the frame root (`.` when it IS the root). */
56
+ readonly at: RepoPath;
57
+ /** A path this bundle's scan reported, re-expressed from the frame root. */
58
+ path(p: BundlePath): RepoPath;
59
+ /**
60
+ * The seam for scan-core's plain strings, which are bundle-relative by
61
+ * contract (see the header). An ABSOLUTE string is accepted too and converted
62
+ * directly — `hook-block-ineffective` reports its script that way.
63
+ */
64
+ scanned(p: string): RepoPath;
65
+ }
66
+ /** The single owner of "relative to which directory", built once per command. */
67
+ export interface Frame {
68
+ /** Absolute directory every {@link RepoPath} is relative to. */
69
+ readonly root: string;
70
+ /** The one conversion from an absolute path. Throws on a relative input. */
71
+ repo(abs: string): RepoPath;
72
+ /** Describe the bundle at an absolute directory, in this frame. */
73
+ bundle(abs: string): Bundle;
74
+ }
75
+ /**
76
+ * The frame for a command run from `cwd` against `target` (absolute).
77
+ *
78
+ * The root is `cwd` — where `loadConfig()` read `.vigilesrc.json` (it does not
79
+ * walk up; measured 2026-09-23) — UNLESS the target lies outside it. A foreign
80
+ * target (`vigiles lint ../other`) is somebody else's repository, and its paths
81
+ * mean something from ITS root; relative to `cwd` they would all start with
82
+ * `../`, and a foreign lint must never let the caller's own files satisfy the
83
+ * target's `sharedDirs` references. That exception was `sharedDirsRootFor` in
84
+ * the CLI, applied to `sharedDirs` alone; it is owned here now, so `include`,
85
+ * `exclude`, `sharedDirs` and every printed path agree on one root.
86
+ */
87
+ export declare function frameFor(cwd: string, target: string): Frame;
88
+ /** The frame rooted at an absolute directory. */
89
+ export declare function frameAt(root: string): Frame;
90
+ //# sourceMappingURL=frame.d.ts.map