vigiles 2.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.
Files changed (156) hide show
  1. package/.claude/settings.json +46 -0
  2. package/.claude/settings.local.json +8 -0
  3. package/.claude-plugin/hooks/post-edit.sh +34 -0
  4. package/.claude-plugin/hooks/pre-edit.sh +40 -0
  5. package/.claude-plugin/hooks/session-start.sh +38 -0
  6. package/.claude-plugin/marketplace.json +14 -0
  7. package/.claude-plugin/plugin.json +47 -0
  8. package/.github/workflows/ci.yml +81 -0
  9. package/.prettierignore +1 -0
  10. package/.vigiles/generated.d.ts +205 -0
  11. package/CLAUDE.md +95 -0
  12. package/CLAUDE.md.spec.ts +142 -0
  13. package/CONTRIBUTING.md +121 -0
  14. package/LICENSE +21 -0
  15. package/README.md +377 -0
  16. package/action.yml +25 -0
  17. package/dist/action.d.ts +7 -0
  18. package/dist/action.d.ts.map +1 -0
  19. package/dist/action.js +180 -0
  20. package/dist/action.js.map +1 -0
  21. package/dist/cli.d.ts +12 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +1267 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/cli.test.d.ts +2 -0
  26. package/dist/cli.test.d.ts.map +1 -0
  27. package/dist/cli.test.js +650 -0
  28. package/dist/cli.test.js.map +1 -0
  29. package/dist/compile.d.ts +101 -0
  30. package/dist/compile.d.ts.map +1 -0
  31. package/dist/compile.js +503 -0
  32. package/dist/compile.js.map +1 -0
  33. package/dist/evolve.d.ts +132 -0
  34. package/dist/evolve.d.ts.map +1 -0
  35. package/dist/evolve.js +599 -0
  36. package/dist/evolve.js.map +1 -0
  37. package/dist/freshness.d.ts +67 -0
  38. package/dist/freshness.d.ts.map +1 -0
  39. package/dist/freshness.js +244 -0
  40. package/dist/freshness.js.map +1 -0
  41. package/dist/freshness.test.d.ts +2 -0
  42. package/dist/freshness.test.d.ts.map +1 -0
  43. package/dist/freshness.test.js +356 -0
  44. package/dist/freshness.test.js.map +1 -0
  45. package/dist/generate-types.d.ts +34 -0
  46. package/dist/generate-types.d.ts.map +1 -0
  47. package/dist/generate-types.js +381 -0
  48. package/dist/generate-types.js.map +1 -0
  49. package/dist/inline.d.ts +58 -0
  50. package/dist/inline.d.ts.map +1 -0
  51. package/dist/inline.js +142 -0
  52. package/dist/inline.js.map +1 -0
  53. package/dist/inline.test.d.ts +5 -0
  54. package/dist/inline.test.d.ts.map +1 -0
  55. package/dist/inline.test.js +152 -0
  56. package/dist/inline.test.js.map +1 -0
  57. package/dist/linters.d.ts +38 -0
  58. package/dist/linters.d.ts.map +1 -0
  59. package/dist/linters.js +588 -0
  60. package/dist/linters.js.map +1 -0
  61. package/dist/proofs.d.ts +272 -0
  62. package/dist/proofs.d.ts.map +1 -0
  63. package/dist/proofs.js +622 -0
  64. package/dist/proofs.js.map +1 -0
  65. package/dist/proofs.test.d.ts +9 -0
  66. package/dist/proofs.test.d.ts.map +1 -0
  67. package/dist/proofs.test.js +952 -0
  68. package/dist/proofs.test.js.map +1 -0
  69. package/dist/spec.d.ts +258 -0
  70. package/dist/spec.d.ts.map +1 -0
  71. package/dist/spec.js +113 -0
  72. package/dist/spec.js.map +1 -0
  73. package/dist/spec.test.d.ts +2 -0
  74. package/dist/spec.test.d.ts.map +1 -0
  75. package/dist/spec.test.js +1222 -0
  76. package/dist/spec.test.js.map +1 -0
  77. package/dist/types.d.ts +101 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/types.js +3 -0
  80. package/dist/types.js.map +1 -0
  81. package/dist/validate.d.ts +10 -0
  82. package/dist/validate.d.ts.map +1 -0
  83. package/dist/validate.js +286 -0
  84. package/dist/validate.js.map +1 -0
  85. package/dist/validate.test.d.ts +2 -0
  86. package/dist/validate.test.d.ts.map +1 -0
  87. package/dist/validate.test.js +531 -0
  88. package/dist/validate.test.js.map +1 -0
  89. package/docs/agent-setup.md +85 -0
  90. package/docs/agent-workflows.md +103 -0
  91. package/docs/comparison.md +71 -0
  92. package/docs/freshness.md +124 -0
  93. package/docs/inline-mode.md +119 -0
  94. package/docs/linter-support.md +166 -0
  95. package/docs/spec-format.md +194 -0
  96. package/eslint.config.mjs +79 -0
  97. package/examples/CLAUDE.md +54 -0
  98. package/examples/CLAUDE.md.spec.ts +65 -0
  99. package/examples/SKILL.md +50 -0
  100. package/examples/SKILL.md.spec.ts +57 -0
  101. package/fixtures/example-project/CLAUDE.md +11 -0
  102. package/fixtures/example-project/package.json +9 -0
  103. package/fixtures/example-project/src/index.ts +3 -0
  104. package/fixtures/example-project/src/utils.test.ts +2 -0
  105. package/fixtures/example-project/src/utils.ts +3 -0
  106. package/logo.png +0 -0
  107. package/package.json +42 -0
  108. package/research/adoption-strategy.md +111 -0
  109. package/research/agent-integration.md +145 -0
  110. package/research/ai-code-quality.md +197 -0
  111. package/research/code-search-for-agents.md +313 -0
  112. package/research/competitive-landscape.md +163 -0
  113. package/research/doc-freshness.md +516 -0
  114. package/research/executable-specs.md +368 -0
  115. package/research/feature-ideas.md +464 -0
  116. package/research/formal-proofs-for-agents.md +338 -0
  117. package/research/fp-for-agent-harness.md +150 -0
  118. package/research/fp-for-deterministic-ai.md +131 -0
  119. package/research/self-evolving-specs.md +298 -0
  120. package/schemas/claude-md-strict.yml +18 -0
  121. package/schemas/claude-md.yml +6 -0
  122. package/schemas/skill-strict.yml +12 -0
  123. package/schemas/skill.yml +5 -0
  124. package/skills/audit-feedback-loop/SKILL.md +76 -0
  125. package/skills/edit-spec/SKILL.md +131 -0
  126. package/skills/enforce-rules-format/SKILL.md +71 -0
  127. package/skills/generate-logo/SKILL.md +102 -0
  128. package/skills/generate-rule/SKILL.md +90 -0
  129. package/skills/linter-docs/clippy.md +241 -0
  130. package/skills/linter-docs/eslint.md +384 -0
  131. package/skills/linter-docs/pylint.md +288 -0
  132. package/skills/linter-docs/rubocop.md +277 -0
  133. package/skills/linter-docs/ruff.md +187 -0
  134. package/skills/linter-docs/stylelint.md +247 -0
  135. package/skills/migrate-to-spec/SKILL.md +124 -0
  136. package/skills/pr-to-lint-rule/SKILL.md +97 -0
  137. package/skills/strengthen/SKILL.md +168 -0
  138. package/src/action.ts +214 -0
  139. package/src/cli.test.ts +914 -0
  140. package/src/cli.ts +1631 -0
  141. package/src/compile.ts +691 -0
  142. package/src/evolve.ts +781 -0
  143. package/src/freshness.test.ts +449 -0
  144. package/src/freshness.ts +299 -0
  145. package/src/generate-types.ts +448 -0
  146. package/src/inline.test.ts +206 -0
  147. package/src/inline.ts +164 -0
  148. package/src/linters.ts +739 -0
  149. package/src/proofs.test.ts +1314 -0
  150. package/src/proofs.ts +849 -0
  151. package/src/spec.test.ts +1471 -0
  152. package/src/spec.ts +427 -0
  153. package/src/types.ts +117 -0
  154. package/src/validate.test.ts +701 -0
  155. package/src/validate.ts +381 -0
  156. package/tsconfig.json +23 -0
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ /**
3
+ * vigiles generate-types — emit .d.ts with type unions from actual project state.
4
+ *
5
+ * Scans linter configs, package.json, and filesystem to generate TypeScript
6
+ * types that the compiler uses to PROVE references are valid at authoring time.
7
+ *
8
+ * Generated types:
9
+ * - EslintRule / StylelintRule / RuffRule / ... — enabled rules per linter
10
+ * - NpmScript — scripts from package.json
11
+ * - ProjectFile — files in the project (scoped to src/ by default)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateTypes = generateTypes;
15
+ const node_fs_1 = require("node:fs");
16
+ const node_path_1 = require("node:path");
17
+ const node_child_process_1 = require("node:child_process");
18
+ const glob_1 = require("glob");
19
+ // ---------------------------------------------------------------------------
20
+ // Linter config detection
21
+ // ---------------------------------------------------------------------------
22
+ function fileContainsSection(filePath, section) {
23
+ if (!(0, node_fs_1.existsSync)(filePath))
24
+ return false;
25
+ try {
26
+ return (0, node_fs_1.readFileSync)(filePath, "utf-8").includes(section);
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ function hasRuffConfig(basePath) {
33
+ return ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(basePath, "ruff.toml")) ||
34
+ (0, node_fs_1.existsSync)((0, node_path_1.resolve)(basePath, ".ruff.toml")) ||
35
+ fileContainsSection((0, node_path_1.resolve)(basePath, "pyproject.toml"), "[tool.ruff"));
36
+ }
37
+ function hasPylintConfig(basePath) {
38
+ return ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(basePath, ".pylintrc")) ||
39
+ (0, node_fs_1.existsSync)((0, node_path_1.resolve)(basePath, "pylintrc")) ||
40
+ fileContainsSection((0, node_path_1.resolve)(basePath, "pyproject.toml"), "[tool.pylint") ||
41
+ fileContainsSection((0, node_path_1.resolve)(basePath, "setup.cfg"), "[pylint"));
42
+ }
43
+ function hasRubocopConfig(basePath) {
44
+ return (0, node_fs_1.existsSync)((0, node_path_1.resolve)(basePath, ".rubocop.yml"));
45
+ }
46
+ function discoverEslintRules(basePath) {
47
+ try {
48
+ const script = `
49
+ const { loadESLint } = require("eslint");
50
+ (async () => {
51
+ try {
52
+ const ESLint = await loadESLint();
53
+ const eslint = new ESLint({ cwd: ${JSON.stringify(basePath)} });
54
+ const config = await eslint.calculateConfigForFile("dummy.js");
55
+ const enabled = Object.entries(config.rules || {})
56
+ .filter(([, v]) => {
57
+ const sev = Array.isArray(v) ? v[0] : v;
58
+ return sev !== 0 && sev !== "off";
59
+ })
60
+ .map(([k]) => k);
61
+ console.log(JSON.stringify(enabled));
62
+ } catch(e) {
63
+ console.log("[]");
64
+ }
65
+ })();
66
+ `;
67
+ const output = (0, node_child_process_1.execSync)(`node -e '${script.replace(/'/g, "'\\''")}'`, {
68
+ encoding: "utf-8",
69
+ cwd: basePath,
70
+ stdio: ["pipe", "pipe", "pipe"],
71
+ timeout: 15000,
72
+ });
73
+ const rules = JSON.parse(output.trim() || "[]");
74
+ if (rules.length === 0)
75
+ return null;
76
+ return { linter: "eslint", rules, via: "flat config" };
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ }
82
+ function discoverStylelintRules(basePath) {
83
+ try {
84
+ const script = `
85
+ const stylelint = require("stylelint");
86
+ (async () => {
87
+ try {
88
+ const linter = stylelint.createLinter({});
89
+ const result = await linter.getConfigForFile(${JSON.stringify((0, node_path_1.resolve)(basePath, "dummy.css"))});
90
+ const enabled = Object.entries(result.config.rules || {})
91
+ .filter(([, v]) => v !== null && !(Array.isArray(v) && v[0] === null))
92
+ .map(([k]) => k);
93
+ console.log(JSON.stringify(enabled));
94
+ } catch(e) {
95
+ console.log("[]");
96
+ }
97
+ })();
98
+ `;
99
+ const output = (0, node_child_process_1.execSync)(`node -e '${script.replace(/'/g, "'\\''")}'`, {
100
+ encoding: "utf-8",
101
+ cwd: basePath,
102
+ stdio: ["pipe", "pipe", "pipe"],
103
+ timeout: 15000,
104
+ });
105
+ const rules = JSON.parse(output.trim() || "[]");
106
+ if (rules.length === 0)
107
+ return null;
108
+ return { linter: "stylelint", rules, via: "config" };
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ }
114
+ function discoverRuffRules(basePath) {
115
+ try {
116
+ if (!hasRuffConfig(basePath))
117
+ return null;
118
+ (0, node_child_process_1.execSync)("which ruff", { stdio: "ignore" });
119
+ const dummyPath = (0, node_path_1.resolve)(basePath, "dummy.py");
120
+ const output = (0, node_child_process_1.execSync)(`ruff check --show-settings ${dummyPath}`, {
121
+ encoding: "utf-8",
122
+ cwd: basePath,
123
+ stdio: ["pipe", "pipe", "pipe"],
124
+ timeout: 10000,
125
+ });
126
+ const enabledMatch = output.match(/linter\.rules\.enabled\s*=\s*\[([\s\S]*?)\]/);
127
+ const rules = [];
128
+ if (enabledMatch?.[1]) {
129
+ const codeRe = /\(([A-Z]+\d*)\)/g;
130
+ let m;
131
+ while ((m = codeRe.exec(enabledMatch[1])) !== null) {
132
+ rules.push(m[1]);
133
+ }
134
+ }
135
+ if (rules.length === 0)
136
+ return null;
137
+ return { linter: "ruff", rules, via: "CLI" };
138
+ }
139
+ catch {
140
+ return null;
141
+ }
142
+ }
143
+ function discoverPylintRules(basePath) {
144
+ try {
145
+ if (!hasPylintConfig(basePath))
146
+ return null;
147
+ (0, node_child_process_1.execSync)("which pylint", { stdio: "ignore" });
148
+ const output = (0, node_child_process_1.execSync)("pylint --list-msgs-enabled", {
149
+ encoding: "utf-8",
150
+ cwd: basePath,
151
+ stdio: ["pipe", "pipe", "pipe"],
152
+ timeout: 15000,
153
+ });
154
+ const disabledIdx = output.indexOf("Disabled messages:");
155
+ const enabledSection = disabledIdx >= 0 ? output.substring(0, disabledIdx) : output;
156
+ // Extract rule IDs like (C0114), (W0611) etc.
157
+ const rules = [];
158
+ const idRe = /\(([A-Z]\d{4})\)/g;
159
+ let m;
160
+ while ((m = idRe.exec(enabledSection)) !== null) {
161
+ rules.push(m[1]);
162
+ }
163
+ // Also extract symbolic names like "missing-module-docstring"
164
+ const nameRe = /^(\w[\w-]+)\s*\(/gm;
165
+ while ((m = nameRe.exec(enabledSection)) !== null) {
166
+ rules.push(m[1]);
167
+ }
168
+ if (rules.length === 0)
169
+ return null;
170
+ return { linter: "pylint", rules, via: "CLI" };
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ function discoverRubocopRules(basePath) {
177
+ try {
178
+ if (!hasRubocopConfig(basePath))
179
+ return null;
180
+ (0, node_child_process_1.execSync)("which rubocop", { stdio: "ignore" });
181
+ const output = (0, node_child_process_1.execSync)("rubocop --list-target-files --show-cops 2>/dev/null | head -500", {
182
+ encoding: "utf-8",
183
+ cwd: basePath,
184
+ stdio: ["pipe", "pipe", "pipe"],
185
+ timeout: 15000,
186
+ shell: "/bin/sh",
187
+ });
188
+ const rules = [];
189
+ const copRe = /^(\w+\/\w+):/gm;
190
+ let m;
191
+ while ((m = copRe.exec(output)) !== null) {
192
+ rules.push(m[1]);
193
+ }
194
+ if (rules.length === 0)
195
+ return null;
196
+ return { linter: "rubocop", rules, via: "CLI" };
197
+ }
198
+ catch {
199
+ return null;
200
+ }
201
+ }
202
+ function discoverClippyRules(basePath) {
203
+ try {
204
+ const cargoPath = (0, node_path_1.resolve)(basePath, "Cargo.toml");
205
+ if (!(0, node_fs_1.existsSync)(cargoPath))
206
+ return null;
207
+ (0, node_child_process_1.execSync)("which cargo", { stdio: "ignore" });
208
+ // Clippy doesn't have a good "list enabled lints" command.
209
+ // We read Cargo.toml [lints.clippy] section for explicit config,
210
+ // and include default warn/deny lints from clippy -W clippy::all
211
+ const content = (0, node_fs_1.readFileSync)(cargoPath, "utf-8");
212
+ const sectionMatch = content.match(/\[lints\.clippy\]([\s\S]*?)(?=\n\[|$)/);
213
+ const rules = [];
214
+ if (sectionMatch?.[1]) {
215
+ const ruleRe = /^(\w[\w-]+)\s*=\s*"(\w+)"/gm;
216
+ let m;
217
+ while ((m = ruleRe.exec(sectionMatch[1])) !== null) {
218
+ if (m[2] !== "allow") {
219
+ rules.push(m[1]);
220
+ }
221
+ }
222
+ }
223
+ if (rules.length === 0)
224
+ return null;
225
+ return { linter: "clippy", rules, via: "Cargo.toml" };
226
+ }
227
+ catch {
228
+ return null;
229
+ }
230
+ }
231
+ // ---------------------------------------------------------------------------
232
+ // NPM script discovery
233
+ // ---------------------------------------------------------------------------
234
+ function discoverNpmScripts(basePath) {
235
+ const pkgPath = (0, node_path_1.resolve)(basePath, "package.json");
236
+ if (!(0, node_fs_1.existsSync)(pkgPath))
237
+ return [];
238
+ try {
239
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, "utf-8"));
240
+ return Object.keys(pkg.scripts ?? {});
241
+ }
242
+ catch {
243
+ return [];
244
+ }
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // Project file discovery
248
+ // ---------------------------------------------------------------------------
249
+ function discoverProjectFiles(basePath, globs = ["src/**/*"]) {
250
+ const files = [];
251
+ for (const pattern of globs) {
252
+ const matches = (0, glob_1.globSync)(pattern, {
253
+ cwd: basePath,
254
+ ignore: ["node_modules/**", "dist/**", ".git/**"],
255
+ nodir: true,
256
+ });
257
+ files.push(...matches);
258
+ }
259
+ return [...new Set(files)].sort();
260
+ }
261
+ // ---------------------------------------------------------------------------
262
+ // Type generation
263
+ // ---------------------------------------------------------------------------
264
+ function escapeForUnion(s) {
265
+ return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
266
+ }
267
+ function formatUnion(items, indent = " ") {
268
+ if (items.length === 0)
269
+ return "never";
270
+ if (items.length <= 3) {
271
+ return items.map((i) => `"${escapeForUnion(i)}"`).join(" | ");
272
+ }
273
+ return ("\n" + items.map((i) => `${indent}| "${escapeForUnion(i)}"`).join("\n"));
274
+ }
275
+ /**
276
+ * Generate .d.ts content with type unions from actual project state.
277
+ *
278
+ * Scans all available linters, package.json scripts, and project files.
279
+ */
280
+ function generateTypes(options = {}) {
281
+ const basePath = options.basePath ?? process.cwd();
282
+ const fileGlobs = options.fileGlobs ?? ["src/**/*"];
283
+ // Discover everything
284
+ const linters = [];
285
+ const eslint = discoverEslintRules(basePath);
286
+ if (eslint)
287
+ linters.push(eslint);
288
+ const stylelint = discoverStylelintRules(basePath);
289
+ if (stylelint)
290
+ linters.push(stylelint);
291
+ const ruff = discoverRuffRules(basePath);
292
+ if (ruff)
293
+ linters.push(ruff);
294
+ const pylint = discoverPylintRules(basePath);
295
+ if (pylint)
296
+ linters.push(pylint);
297
+ const rubocop = discoverRubocopRules(basePath);
298
+ if (rubocop)
299
+ linters.push(rubocop);
300
+ const clippy = discoverClippyRules(basePath);
301
+ if (clippy)
302
+ linters.push(clippy);
303
+ const scripts = discoverNpmScripts(basePath);
304
+ const files = discoverProjectFiles(basePath, fileGlobs);
305
+ // Generate .d.ts
306
+ const sections = [];
307
+ sections.push(`/**`);
308
+ sections.push(` * Auto-generated by \`vigiles generate-types\`.`);
309
+ sections.push(` * DO NOT EDIT — re-run \`vigiles generate-types\` to update.`);
310
+ sections.push(` */`);
311
+ sections.push(``);
312
+ // ---------------------------------------------------------------------------
313
+ // vigiles/generated — standalone types for direct import
314
+ // ---------------------------------------------------------------------------
315
+ sections.push(`declare module "vigiles/generated" {`);
316
+ // Linter rules
317
+ for (const { linter, rules, via } of linters) {
318
+ const typeName = linter.charAt(0).toUpperCase() +
319
+ linter.slice(1).replace(/-([a-z])/g, (_, c) => c.toUpperCase()) +
320
+ "Rule";
321
+ sections.push(``);
322
+ sections.push(` /** ${String(rules.length)} enabled ${linter} rules (via ${via}). */`);
323
+ sections.push(` export type ${typeName} = ${formatUnion(rules, " ")};`);
324
+ }
325
+ // Combined linter rule type
326
+ if (linters.length > 0) {
327
+ const allNames = linters.map((l) => l.linter.charAt(0).toUpperCase() +
328
+ l.linter
329
+ .slice(1)
330
+ .replace(/-([a-z])/g, (_, c) => c.toUpperCase()) +
331
+ "Rule");
332
+ sections.push(``);
333
+ sections.push(` /** All enabled linter rules across all detected linters. */`);
334
+ sections.push(` export type LinterRule = ${allNames.join(" | ")};`);
335
+ }
336
+ // NPM scripts
337
+ if (scripts.length > 0) {
338
+ sections.push(``);
339
+ sections.push(` /** ${String(scripts.length)} npm scripts from package.json. */`);
340
+ sections.push(` export type NpmScript = ${formatUnion(scripts, " ")};`);
341
+ }
342
+ // Project files
343
+ if (files.length > 0) {
344
+ sections.push(``);
345
+ sections.push(` /** ${String(files.length)} project files. */`);
346
+ sections.push(` export type ProjectFile = ${formatUnion(files, " ")};`);
347
+ }
348
+ sections.push(`}`);
349
+ // ---------------------------------------------------------------------------
350
+ // vigiles/spec augmentation — populates KnownLinterRules, KnownProjectFiles,
351
+ // KnownNpmScripts interfaces so enforce(), file(), cmd() narrow automatically.
352
+ // ---------------------------------------------------------------------------
353
+ sections.push(``);
354
+ sections.push(`declare module "vigiles/spec" {`);
355
+ if (linters.length > 0) {
356
+ sections.push(` interface KnownLinterRules {`);
357
+ for (const { linter, rules } of linters) {
358
+ sections.push(` "${escapeForUnion(linter)}": ${formatUnion(rules, " ")};`);
359
+ }
360
+ sections.push(` }`);
361
+ }
362
+ if (files.length > 0) {
363
+ sections.push(` interface KnownProjectFiles {`);
364
+ sections.push(` files: ${formatUnion(files, " ")};`);
365
+ sections.push(` }`);
366
+ }
367
+ if (scripts.length > 0) {
368
+ sections.push(` interface KnownNpmScripts {`);
369
+ sections.push(` scripts: ${formatUnion(scripts, " ")};`);
370
+ sections.push(` }`);
371
+ }
372
+ sections.push(`}`);
373
+ sections.push(``);
374
+ return {
375
+ dts: sections.join("\n"),
376
+ linters,
377
+ scripts,
378
+ files,
379
+ };
380
+ }
381
+ //# sourceMappingURL=generate-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../src/generate-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * vigiles — Inline rule mode for gradual adoption.
3
+ *
4
+ * Parses `<!-- vigiles:enforce <linter>/<rule> "<why>" -->` HTML comments
5
+ * out of any markdown file, so a project can adopt vigiles one rule at a
6
+ * time without committing to a .spec.ts compile step. Every inline rule
7
+ * goes through the same `checkLinterRule` verification as rules declared
8
+ * in a .spec.ts — typos get closest-match suggestions, disabled rules are
9
+ * flagged, etc.
10
+ *
11
+ * Only `enforce` is supported inline. `guidance` would be a tautology: if
12
+ * you're editing the markdown, the prose around the comment already is
13
+ * the guidance — there's nothing extra for a tool to render.
14
+ *
15
+ * A file is in "inline mode" iff it contains at least one vigiles:enforce
16
+ * comment. Spec mode (`.md.spec.ts` sibling) takes precedence if both
17
+ * exist; the spec compiler emits a fresh file that may overwrite the
18
+ * inline markup, so users should pick one per file.
19
+ */
20
+ export interface InlineRule {
21
+ /** Linter rule reference, e.g. "eslint/no-console". */
22
+ linterRule: string;
23
+ /** Why this rule is enforced (human-readable, shown in agent context). */
24
+ why: string;
25
+ /** 1-based line number of the comment in the source file. */
26
+ line: number;
27
+ }
28
+ export interface InlineParseResult {
29
+ rules: InlineRule[];
30
+ /** Lines that look like vigiles: markers but failed to parse. */
31
+ errors: {
32
+ line: number;
33
+ message: string;
34
+ raw: string;
35
+ }[];
36
+ }
37
+ /**
38
+ * Parse inline vigiles rules out of a markdown file's contents.
39
+ * Does not touch the filesystem and does not verify the rules against
40
+ * any linter — callers can feed the returned rules into
41
+ * `checkLinterRule` themselves.
42
+ *
43
+ * Lines inside fenced code blocks (``` ... ``` or ~~~ ... ~~~) are
44
+ * skipped so illustrative examples in docs don't get treated as live
45
+ * rules.
46
+ */
47
+ export declare function parseInlineRules(content: string): InlineParseResult;
48
+ /**
49
+ * True if the content contains at least one parseable vigiles:enforce
50
+ * rule (ignoring fenced code blocks and malformed markers). Used by
51
+ * `require-spec` validation to treat inline mode as spec-equivalent.
52
+ *
53
+ * Deliberately delegates to `parseInlineRules` so a loose prefix regex
54
+ * can't satisfy require-spec with a malformed marker that produces no
55
+ * real enforceable rule.
56
+ */
57
+ export declare function hasInlineRules(content: string): boolean;
58
+ //# sourceMappingURL=inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,iEAAiE;IACjE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1D;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAuFnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD"}
package/dist/inline.js ADDED
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * vigiles — Inline rule mode for gradual adoption.
4
+ *
5
+ * Parses `<!-- vigiles:enforce <linter>/<rule> "<why>" -->` HTML comments
6
+ * out of any markdown file, so a project can adopt vigiles one rule at a
7
+ * time without committing to a .spec.ts compile step. Every inline rule
8
+ * goes through the same `checkLinterRule` verification as rules declared
9
+ * in a .spec.ts — typos get closest-match suggestions, disabled rules are
10
+ * flagged, etc.
11
+ *
12
+ * Only `enforce` is supported inline. `guidance` would be a tautology: if
13
+ * you're editing the markdown, the prose around the comment already is
14
+ * the guidance — there's nothing extra for a tool to render.
15
+ *
16
+ * A file is in "inline mode" iff it contains at least one vigiles:enforce
17
+ * comment. Spec mode (`.md.spec.ts` sibling) takes precedence if both
18
+ * exist; the spec compiler emits a fresh file that may overwrite the
19
+ * inline markup, so users should pick one per file.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.parseInlineRules = parseInlineRules;
23
+ exports.hasInlineRules = hasInlineRules;
24
+ /**
25
+ * Match `<!-- vigiles:enforce <linter>/<rule> "<why>" -->`. The linter
26
+ * reference allows the same characters as the TS-side `SAFE_RULE_NAME_RE`
27
+ * plus `@` for scoped plugin names (e.g. `@typescript-eslint/...`).
28
+ * The `why` is a simple quoted string — if someone wants newlines or
29
+ * embedded quotes, they can move to spec mode.
30
+ */
31
+ const ENFORCE_RE = /<!--\s*vigiles:enforce\s+([@A-Za-z0-9_/:.-]+)\s+"([^"\n]*)"\s*-->/;
32
+ /**
33
+ * Detects any `<!-- vigiles:<kind> -->` comment (valid or not) so we can
34
+ * surface errors for typos and reserved-but-unrecognized kinds. Uses a
35
+ * non-greedy match for the tail so a `-` inside the kind doesn't short-
36
+ * circuit the pattern.
37
+ */
38
+ const MARKER_RE = /<!--\s*vigiles:([A-Za-z_-]+)[^]*?-->/;
39
+ /**
40
+ * Parse inline vigiles rules out of a markdown file's contents.
41
+ * Does not touch the filesystem and does not verify the rules against
42
+ * any linter — callers can feed the returned rules into
43
+ * `checkLinterRule` themselves.
44
+ *
45
+ * Lines inside fenced code blocks (``` ... ``` or ~~~ ... ~~~) are
46
+ * skipped so illustrative examples in docs don't get treated as live
47
+ * rules.
48
+ */
49
+ function parseInlineRules(content) {
50
+ const rules = [];
51
+ const errors = [];
52
+ const lines = content.split("\n");
53
+ let fenceChar = null;
54
+ let fenceLen = 0;
55
+ for (let i = 0; i < lines.length; i++) {
56
+ const line = lines[i];
57
+ // Track fenced code blocks. CommonMark allows ``` or ~~~ fences
58
+ // with 3+ characters; the closing fence must use the same char and
59
+ // have length >= the opening fence's length. Info-string tokens
60
+ // after the opener are allowed.
61
+ const fenceMatch = /^(\s{0,3})(`{3,}|~{3,})(.*)$/.exec(line);
62
+ if (fenceMatch) {
63
+ const marker = fenceMatch[2];
64
+ const ch = marker[0];
65
+ const len = marker.length;
66
+ if (fenceChar === null) {
67
+ fenceChar = ch;
68
+ fenceLen = len;
69
+ continue;
70
+ }
71
+ else if (ch === fenceChar && len >= fenceLen) {
72
+ // Closing fence — trailing info-string is not allowed per
73
+ // CommonMark; only treat it as a close if the rest of the
74
+ // line is whitespace.
75
+ if (fenceMatch[3].trim() === "") {
76
+ fenceChar = null;
77
+ fenceLen = 0;
78
+ continue;
79
+ }
80
+ }
81
+ }
82
+ if (fenceChar !== null) {
83
+ // Inside a code block — ignore any vigiles markers on this line.
84
+ continue;
85
+ }
86
+ // Strip inline code spans (backtick-wrapped text) so illustrative
87
+ // markers in prose like `<!-- vigiles:enforce ... -->` don't get
88
+ // parsed. CommonMark opens with N backticks and closes with exactly
89
+ // N, so the backreference handles matching-length spans.
90
+ const scannable = line.replace(/(`+)[\s\S]*?\1/g, (m) => " ".repeat(m.length));
91
+ const enforceMatch = ENFORCE_RE.exec(scannable);
92
+ if (enforceMatch) {
93
+ rules.push({
94
+ linterRule: enforceMatch[1],
95
+ why: enforceMatch[2],
96
+ line: i + 1,
97
+ });
98
+ continue;
99
+ }
100
+ // Skip the compiled-file hash header (`<!-- vigiles:sha256:... -->`)
101
+ // entirely — it's not a rule marker and should not be reported.
102
+ if (/<!--\s*vigiles:sha\d+:/.test(scannable))
103
+ continue;
104
+ const markerMatch = MARKER_RE.exec(scannable);
105
+ if (markerMatch) {
106
+ // Looks like a vigiles marker but didn't parse as enforce —
107
+ // surface it so users catch typos like "vigile:enforce" or
108
+ // unquoted why.
109
+ const kind = markerMatch[1];
110
+ if (kind === "enforce") {
111
+ errors.push({
112
+ line: i + 1,
113
+ message: 'Malformed vigiles:enforce — expected `<!-- vigiles:enforce <linter>/<rule> "<why>" -->`',
114
+ raw: line.trim(),
115
+ });
116
+ }
117
+ else if (kind !== "disable" && kind !== "ignore") {
118
+ // `vigiles:disable ...` / `vigiles:ignore ...` are reserved for
119
+ // future disable-comment support; don't complain about them.
120
+ errors.push({
121
+ line: i + 1,
122
+ message: `Unknown vigiles marker "${kind}". Only \`vigiles:enforce\` is supported.`,
123
+ raw: line.trim(),
124
+ });
125
+ }
126
+ }
127
+ }
128
+ return { rules, errors };
129
+ }
130
+ /**
131
+ * True if the content contains at least one parseable vigiles:enforce
132
+ * rule (ignoring fenced code blocks and malformed markers). Used by
133
+ * `require-spec` validation to treat inline mode as spec-equivalent.
134
+ *
135
+ * Deliberately delegates to `parseInlineRules` so a loose prefix regex
136
+ * can't satisfy require-spec with a malformed marker that produces no
137
+ * real enforceable rule.
138
+ */
139
+ function hasInlineRules(content) {
140
+ return parseInlineRules(content).rules.length > 0;
141
+ }
142
+ //# sourceMappingURL=inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for the inline-rule parser.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=inline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.test.d.ts","sourceRoot":"","sources":["../src/inline.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}