rebar-mcp 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 (248) hide show
  1. package/.claude/agents/template-writer.md +43 -0
  2. package/.claude/agents/test-runner.md +47 -0
  3. package/.claude/mcp.json +9 -0
  4. package/.claude/settings.json +29 -0
  5. package/.claude/skills/ /SKILL.md +21 -0
  6. package/.claude/skills/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/SKILL.md +21 -0
  7. package/.claude/skills/bmmibwetxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  8. package/.claude/skills/bmmibwjgvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  9. package/.claude/skills/bmmibwsesxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  10. package/.claude/skills/bmmibwxufxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  11. package/.claude/skills/bmmibx3r9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  12. package/.claude/skills/bmmji0lrkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  13. package/.claude/skills/bmmjiniphxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  14. package/.claude/skills/bmmjio86zxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  15. package/.claude/skills/bmmjiolfbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  16. package/.claude/skills/bmmjit1lvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  17. package/.claude/skills/bmmjita1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
  18. package/.claude/skills/bnd-mmibweu3/SKILL.md +21 -0
  19. package/.claude/skills/bnd-mmibwjh4/SKILL.md +21 -0
  20. package/.claude/skills/bnd-mmibwsey/SKILL.md +21 -0
  21. package/.claude/skills/bnd-mmibwxup/SKILL.md +21 -0
  22. package/.claude/skills/bnd-mmibx3rg/SKILL.md +21 -0
  23. package/.claude/skills/bnd-mmji0lrp/SKILL.md +21 -0
  24. package/.claude/skills/bnd-mmjinipm/SKILL.md +21 -0
  25. package/.claude/skills/bnd-mmjio875/SKILL.md +21 -0
  26. package/.claude/skills/bnd-mmjiolfg/SKILL.md +21 -0
  27. package/.claude/skills/bnd-mmjit1m3/SKILL.md +21 -0
  28. package/.claude/skills/bnd-mmjita1x/SKILL.md +21 -0
  29. package/.claude/skills/coercion-test/SKILL.md +50 -0
  30. package/.claude/skills/large-skill/SKILL.md +21 -0
  31. package/.claude/skills/long-desc-skill/SKILL.md +21 -0
  32. package/.claude/skills/mcp-dev/SKILL.md +61 -0
  33. package/.claude/skills/nl-mmibweus/SKILL.md +25 -0
  34. package/.claude/skills/nl-mmibwjhf/SKILL.md +25 -0
  35. package/.claude/skills/nl-mmibwsf7/SKILL.md +25 -0
  36. package/.claude/skills/nl-mmibwxvq/SKILL.md +25 -0
  37. package/.claude/skills/nl-mmibx3rt/SKILL.md +25 -0
  38. package/.claude/skills/nl-mmji0lrz/SKILL.md +25 -0
  39. package/.claude/skills/nl-mmjinipx/SKILL.md +25 -0
  40. package/.claude/skills/nl-mmjio87f/SKILL.md +25 -0
  41. package/.claude/skills/nl-mmjiolfs/SKILL.md +25 -0
  42. package/.claude/skills/nl-mmjit1mc/SKILL.md +25 -0
  43. package/.claude/skills/nl-mmjita26/SKILL.md +25 -0
  44. package/.claude/skills/rapid-1/SKILL.md +21 -0
  45. package/.claude/skills/rapid-2/SKILL.md +21 -0
  46. package/.claude/skills/rapid-3/SKILL.md +21 -0
  47. package/.claude/skills/rapid-4/SKILL.md +21 -0
  48. package/.claude/skills/rapid-5/SKILL.md +21 -0
  49. package/.claude/skills/test/", /"malicious/": /"true/SKILL.md" +69 -0
  50. package/.claude/skills/test-emoji-/360/237/230/200-skill/SKILL.md +69 -0
  51. package/.claude/skills/test-skill/SKILL.md +69 -0
  52. package/.claude/skills/test; rm -rf /; skill/SKILL.md +69 -0
  53. package/.claude/skills/test<script>alert(1)</script>skill/SKILL.md +69 -0
  54. package/.claudeignore +5 -0
  55. package/.mcp.json +3 -0
  56. package/CHANGELOG.md +29 -0
  57. package/CLAUDE.md +76 -0
  58. package/LICENSE +21 -0
  59. package/README.md +149 -0
  60. package/ROADMAP.md +526 -0
  61. package/ccboot-PRD-v1.0.docx.md +732 -0
  62. package/ccboot-v1.2.0-enforcement-spec.md +1272 -0
  63. package/dist/cli.d.ts +3 -0
  64. package/dist/cli.d.ts.map +1 -0
  65. package/dist/cli.js +674 -0
  66. package/dist/cli.js.map +1 -0
  67. package/dist/constants.d.ts +25 -0
  68. package/dist/constants.d.ts.map +1 -0
  69. package/dist/constants.js +118 -0
  70. package/dist/constants.js.map +1 -0
  71. package/dist/index.d.ts +3 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +47 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/schemas/common.d.ts +62 -0
  76. package/dist/schemas/common.d.ts.map +1 -0
  77. package/dist/schemas/common.js +15 -0
  78. package/dist/schemas/common.js.map +1 -0
  79. package/dist/schemas/scaffolding.d.ts +277 -0
  80. package/dist/schemas/scaffolding.d.ts.map +1 -0
  81. package/dist/schemas/scaffolding.js +133 -0
  82. package/dist/schemas/scaffolding.js.map +1 -0
  83. package/dist/services/claudemd-generator.d.ts +16 -0
  84. package/dist/services/claudemd-generator.d.ts.map +1 -0
  85. package/dist/services/claudemd-generator.js +426 -0
  86. package/dist/services/claudemd-generator.js.map +1 -0
  87. package/dist/services/codex-generator.d.ts +6 -0
  88. package/dist/services/codex-generator.d.ts.map +1 -0
  89. package/dist/services/codex-generator.js +35 -0
  90. package/dist/services/codex-generator.js.map +1 -0
  91. package/dist/services/cursor-generator.d.ts +15 -0
  92. package/dist/services/cursor-generator.d.ts.map +1 -0
  93. package/dist/services/cursor-generator.js +134 -0
  94. package/dist/services/cursor-generator.js.map +1 -0
  95. package/dist/services/file-ops.d.ts +48 -0
  96. package/dist/services/file-ops.d.ts.map +1 -0
  97. package/dist/services/file-ops.js +153 -0
  98. package/dist/services/file-ops.js.map +1 -0
  99. package/dist/services/output-formatter.d.ts +57 -0
  100. package/dist/services/output-formatter.d.ts.map +1 -0
  101. package/dist/services/output-formatter.js +88 -0
  102. package/dist/services/output-formatter.js.map +1 -0
  103. package/dist/services/platform-detect.d.ts +14 -0
  104. package/dist/services/platform-detect.d.ts.map +1 -0
  105. package/dist/services/platform-detect.js +63 -0
  106. package/dist/services/platform-detect.js.map +1 -0
  107. package/dist/services/project-analyzer.d.ts +71 -0
  108. package/dist/services/project-analyzer.d.ts.map +1 -0
  109. package/dist/services/project-analyzer.js +595 -0
  110. package/dist/services/project-analyzer.js.map +1 -0
  111. package/dist/services/rules-engine.d.ts +41 -0
  112. package/dist/services/rules-engine.d.ts.map +1 -0
  113. package/dist/services/rules-engine.js +304 -0
  114. package/dist/services/rules-engine.js.map +1 -0
  115. package/dist/services/strictness.d.ts +37 -0
  116. package/dist/services/strictness.d.ts.map +1 -0
  117. package/dist/services/strictness.js +182 -0
  118. package/dist/services/strictness.js.map +1 -0
  119. package/dist/services/template-engine.d.ts +16 -0
  120. package/dist/services/template-engine.d.ts.map +1 -0
  121. package/dist/services/template-engine.js +85 -0
  122. package/dist/services/template-engine.js.map +1 -0
  123. package/dist/services/validation.d.ts +41 -0
  124. package/dist/services/validation.d.ts.map +1 -0
  125. package/dist/services/validation.js +104 -0
  126. package/dist/services/validation.js.map +1 -0
  127. package/dist/services/windsurf-generator.d.ts +15 -0
  128. package/dist/services/windsurf-generator.d.ts.map +1 -0
  129. package/dist/services/windsurf-generator.js +127 -0
  130. package/dist/services/windsurf-generator.js.map +1 -0
  131. package/dist/tests/enforcement.test.d.ts +2 -0
  132. package/dist/tests/enforcement.test.d.ts.map +1 -0
  133. package/dist/tests/enforcement.test.js +541 -0
  134. package/dist/tests/enforcement.test.js.map +1 -0
  135. package/dist/tests/enterprise.test.d.ts +2 -0
  136. package/dist/tests/enterprise.test.d.ts.map +1 -0
  137. package/dist/tests/enterprise.test.js +353 -0
  138. package/dist/tests/enterprise.test.js.map +1 -0
  139. package/dist/tests/fuzzing.test.d.ts +2 -0
  140. package/dist/tests/fuzzing.test.d.ts.map +1 -0
  141. package/dist/tests/fuzzing.test.js +596 -0
  142. package/dist/tests/fuzzing.test.js.map +1 -0
  143. package/dist/tests/knowledge.test.d.ts +2 -0
  144. package/dist/tests/knowledge.test.d.ts.map +1 -0
  145. package/dist/tests/knowledge.test.js +292 -0
  146. package/dist/tests/knowledge.test.js.map +1 -0
  147. package/dist/tests/management.test.d.ts +2 -0
  148. package/dist/tests/management.test.d.ts.map +1 -0
  149. package/dist/tests/management.test.js +338 -0
  150. package/dist/tests/management.test.js.map +1 -0
  151. package/dist/tests/scaffolding.test.d.ts +2 -0
  152. package/dist/tests/scaffolding.test.d.ts.map +1 -0
  153. package/dist/tests/scaffolding.test.js +419 -0
  154. package/dist/tests/scaffolding.test.js.map +1 -0
  155. package/dist/tests/test-utils.d.ts +76 -0
  156. package/dist/tests/test-utils.d.ts.map +1 -0
  157. package/dist/tests/test-utils.js +171 -0
  158. package/dist/tests/test-utils.js.map +1 -0
  159. package/dist/tests/tool-harness.d.ts +18 -0
  160. package/dist/tests/tool-harness.d.ts.map +1 -0
  161. package/dist/tests/tool-harness.js +51 -0
  162. package/dist/tests/tool-harness.js.map +1 -0
  163. package/dist/tools/enterprise.d.ts +8 -0
  164. package/dist/tools/enterprise.d.ts.map +1 -0
  165. package/dist/tools/enterprise.js +571 -0
  166. package/dist/tools/enterprise.js.map +1 -0
  167. package/dist/tools/knowledge.d.ts +7 -0
  168. package/dist/tools/knowledge.d.ts.map +1 -0
  169. package/dist/tools/knowledge.js +120 -0
  170. package/dist/tools/knowledge.js.map +1 -0
  171. package/dist/tools/management.d.ts +10 -0
  172. package/dist/tools/management.d.ts.map +1 -0
  173. package/dist/tools/management.js +1541 -0
  174. package/dist/tools/management.js.map +1 -0
  175. package/dist/tools/scaffolding.d.ts +8 -0
  176. package/dist/tools/scaffolding.d.ts.map +1 -0
  177. package/dist/tools/scaffolding.js +736 -0
  178. package/dist/tools/scaffolding.js.map +1 -0
  179. package/dist/types.d.ts +54 -0
  180. package/dist/types.d.ts.map +1 -0
  181. package/dist/types.js +5 -0
  182. package/dist/types.js.map +1 -0
  183. package/landing/app/layout.tsx +30 -0
  184. package/landing/app/page.tsx +944 -0
  185. package/landing/next-env.d.ts +6 -0
  186. package/landing/next.config.js +6 -0
  187. package/landing/package-lock.json +896 -0
  188. package/landing/package.json +20 -0
  189. package/landing/tsconfig.json +40 -0
  190. package/package.json +49 -0
  191. package/rebar-v2.0.0-platform-spec.md +1567 -0
  192. package/server.json +20 -0
  193. package/src/cli.ts +735 -0
  194. package/src/constants.ts +131 -0
  195. package/src/index.ts +54 -0
  196. package/src/schemas/common.ts +22 -0
  197. package/src/schemas/scaffolding.ts +161 -0
  198. package/src/services/claudemd-generator.ts +481 -0
  199. package/src/services/codex-generator.ts +44 -0
  200. package/src/services/cursor-generator.ts +153 -0
  201. package/src/services/file-ops.ts +172 -0
  202. package/src/services/platform-detect.ts +80 -0
  203. package/src/services/project-analyzer.ts +690 -0
  204. package/src/services/rules-engine.ts +353 -0
  205. package/src/services/strictness.ts +202 -0
  206. package/src/services/template-engine.ts +119 -0
  207. package/src/services/validation.ts +138 -0
  208. package/src/services/windsurf-generator.ts +145 -0
  209. package/src/tests/enforcement.test.ts +794 -0
  210. package/src/tests/enterprise.test.ts +483 -0
  211. package/src/tests/fuzzing.test.ts +690 -0
  212. package/src/tests/knowledge.test.ts +371 -0
  213. package/src/tests/management.test.ts +451 -0
  214. package/src/tests/scaffolding.test.ts +575 -0
  215. package/src/tests/test-utils.ts +206 -0
  216. package/src/tests/tool-harness.ts +70 -0
  217. package/src/tools/enterprise.ts +666 -0
  218. package/src/tools/knowledge.ts +162 -0
  219. package/src/tools/management.ts +1706 -0
  220. package/src/tools/scaffolding.ts +909 -0
  221. package/src/types.ts +93 -0
  222. package/supabase/.temp/cli-latest +1 -0
  223. package/supabase/.temp/gotrue-version +1 -0
  224. package/supabase/.temp/pooler-url +1 -0
  225. package/supabase/.temp/postgres-version +1 -0
  226. package/supabase/.temp/project-ref +1 -0
  227. package/supabase/.temp/rest-version +1 -0
  228. package/supabase/.temp/storage-migration +1 -0
  229. package/supabase/.temp/storage-version +1 -0
  230. package/templates/agents/explore.md +41 -0
  231. package/templates/agents/plan.md +73 -0
  232. package/templates/agents/security-auditor.md +77 -0
  233. package/templates/agents/test-runner.md +60 -0
  234. package/templates/claudemd/fastapi.md +49 -0
  235. package/templates/claudemd/monorepo.md +48 -0
  236. package/templates/claudemd/nextjs.md +52 -0
  237. package/templates/claudemd/react-spa.md +50 -0
  238. package/templates/claudemd/springboot.md +50 -0
  239. package/templates/hooks/danger-blocker.json +11 -0
  240. package/templates/hooks/format-on-write.json +17 -0
  241. package/templates/hooks/lint-on-write.json +16 -0
  242. package/templates/hooks/secret-detector.json +11 -0
  243. package/templates/skills/code-review.md +68 -0
  244. package/templates/skills/documentation.md +62 -0
  245. package/templates/skills/performance-audit.md +80 -0
  246. package/templates/skills/security-scan.md +66 -0
  247. package/templates/skills/test-writer.md +56 -0
  248. package/tsconfig.json +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-analyzer.js","sourceRoot":"","sources":["../../src/services/project-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface CustomRule {
2
+ id: string;
3
+ name: string;
4
+ description: string;
5
+ severity: "error" | "warning" | "info";
6
+ type: "file-exists" | "file-contains" | "file-not-contains" | "glob-count" | "command";
7
+ target?: string;
8
+ pattern?: string;
9
+ min?: number;
10
+ max?: number;
11
+ command?: string;
12
+ enabled?: boolean;
13
+ }
14
+ export interface RulesConfig {
15
+ version: string;
16
+ rules: CustomRule[];
17
+ }
18
+ export interface RuleResult {
19
+ id: string;
20
+ name: string;
21
+ passed: boolean;
22
+ severity: "error" | "warning" | "info";
23
+ message: string;
24
+ }
25
+ /**
26
+ * Loads custom rules from .rebar/rules.yaml or .rebar/rules.json
27
+ */
28
+ export declare function loadCustomRules(projectPath: string): Promise<RulesConfig | null>;
29
+ /**
30
+ * Evaluates a single rule against the project.
31
+ */
32
+ export declare function evaluateRule(rule: CustomRule, projectPath: string): Promise<RuleResult>;
33
+ /**
34
+ * Evaluates all custom rules against the project.
35
+ */
36
+ export declare function evaluateAllRules(projectPath: string): Promise<RuleResult[]>;
37
+ /**
38
+ * Generates a default rules.yaml template.
39
+ */
40
+ export declare function generateDefaultRulesTemplate(): string;
41
+ //# sourceMappingURL=rules-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-engine.d.ts","sourceRoot":"","sources":["../../src/services/rules-engine.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG,mBAAmB,GAAG,YAAY,GAAG,SAAS,CAAC;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAyFD;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAqBtF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiI7F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAWjF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAkDrD"}
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Custom rules engine for Rebar.
3
+ *
4
+ * Allows users to define custom quality rules in .rebar/rules.yaml
5
+ * that extend the built-in checks.
6
+ */
7
+ import * as path from "node:path";
8
+ import { readFileSafe, fileExists, sanitizePath } from "./file-ops.js";
9
+ /**
10
+ * Parses a YAML-like rules file (simplified parser for basic YAML).
11
+ * For full YAML support, users should use JSON format.
12
+ */
13
+ function parseSimpleYaml(content) {
14
+ try {
15
+ // Try JSON first
16
+ if (content.trim().startsWith("{")) {
17
+ return JSON.parse(content);
18
+ }
19
+ // Simple YAML-like parser
20
+ const rules = [];
21
+ const lines = content.split("\n");
22
+ let currentRule = null;
23
+ let inRules = false;
24
+ for (const line of lines) {
25
+ const trimmed = line.trim();
26
+ if (!trimmed || trimmed.startsWith("#"))
27
+ continue;
28
+ if (trimmed === "rules:") {
29
+ inRules = true;
30
+ continue;
31
+ }
32
+ if (inRules && trimmed.startsWith("- id:")) {
33
+ if (currentRule && currentRule.id) {
34
+ rules.push(currentRule);
35
+ }
36
+ currentRule = { id: trimmed.slice(5).trim(), enabled: true };
37
+ continue;
38
+ }
39
+ if (currentRule && trimmed.includes(":")) {
40
+ const [key, ...valueParts] = trimmed.split(":");
41
+ const value = valueParts.join(":").trim().replace(/^["']|["']$/g, "");
42
+ switch (key.trim()) {
43
+ case "name":
44
+ currentRule.name = value;
45
+ break;
46
+ case "description":
47
+ currentRule.description = value;
48
+ break;
49
+ case "severity":
50
+ if (value === "error" || value === "warning" || value === "info") {
51
+ currentRule.severity = value;
52
+ }
53
+ break;
54
+ case "type":
55
+ if (["file-exists", "file-contains", "file-not-contains", "glob-count", "command"].includes(value)) {
56
+ currentRule.type = value;
57
+ }
58
+ break;
59
+ case "target":
60
+ currentRule.target = value;
61
+ break;
62
+ case "pattern":
63
+ currentRule.pattern = value;
64
+ break;
65
+ case "min":
66
+ currentRule.min = parseInt(value, 10);
67
+ break;
68
+ case "max":
69
+ currentRule.max = parseInt(value, 10);
70
+ break;
71
+ case "command":
72
+ currentRule.command = value;
73
+ break;
74
+ case "enabled":
75
+ currentRule.enabled = value === "true";
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ if (currentRule && currentRule.id) {
81
+ rules.push(currentRule);
82
+ }
83
+ return { version: "1.0", rules };
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ /**
90
+ * Loads custom rules from .rebar/rules.yaml or .rebar/rules.json
91
+ */
92
+ export async function loadCustomRules(projectPath) {
93
+ const yamlPath = sanitizePath(projectPath, ".rebar/rules.yaml");
94
+ const jsonPath = sanitizePath(projectPath, ".rebar/rules.json");
95
+ // Try YAML first
96
+ let content = await readFileSafe(yamlPath);
97
+ if (content) {
98
+ return parseSimpleYaml(content);
99
+ }
100
+ // Try JSON
101
+ content = await readFileSafe(jsonPath);
102
+ if (content) {
103
+ try {
104
+ return JSON.parse(content);
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ /**
113
+ * Evaluates a single rule against the project.
114
+ */
115
+ export async function evaluateRule(rule, projectPath) {
116
+ const result = {
117
+ id: rule.id,
118
+ name: rule.name,
119
+ passed: false,
120
+ severity: rule.severity,
121
+ message: "",
122
+ };
123
+ if (rule.enabled === false) {
124
+ result.passed = true;
125
+ result.message = "Rule disabled";
126
+ return result;
127
+ }
128
+ try {
129
+ switch (rule.type) {
130
+ case "file-exists": {
131
+ if (!rule.target) {
132
+ result.message = "Rule missing 'target' field";
133
+ return result;
134
+ }
135
+ const filePath = sanitizePath(projectPath, rule.target);
136
+ const exists = await fileExists(filePath);
137
+ result.passed = exists;
138
+ result.message = exists
139
+ ? `File exists: ${rule.target}`
140
+ : `File not found: ${rule.target}`;
141
+ break;
142
+ }
143
+ case "file-contains": {
144
+ if (!rule.target || !rule.pattern) {
145
+ result.message = "Rule missing 'target' or 'pattern' field";
146
+ return result;
147
+ }
148
+ const filePath = sanitizePath(projectPath, rule.target);
149
+ const content = await readFileSafe(filePath);
150
+ if (!content) {
151
+ result.passed = false;
152
+ result.message = `File not found: ${rule.target}`;
153
+ return result;
154
+ }
155
+ const regex = new RegExp(rule.pattern);
156
+ result.passed = regex.test(content);
157
+ result.message = result.passed
158
+ ? `Pattern found in ${rule.target}`
159
+ : `Pattern not found in ${rule.target}`;
160
+ break;
161
+ }
162
+ case "file-not-contains": {
163
+ if (!rule.target || !rule.pattern) {
164
+ result.message = "Rule missing 'target' or 'pattern' field";
165
+ return result;
166
+ }
167
+ const filePath = sanitizePath(projectPath, rule.target);
168
+ const content = await readFileSafe(filePath);
169
+ if (!content) {
170
+ result.passed = true; // File doesn't exist, so pattern can't be in it
171
+ result.message = `File not found (OK): ${rule.target}`;
172
+ return result;
173
+ }
174
+ const regex = new RegExp(rule.pattern);
175
+ result.passed = !regex.test(content);
176
+ result.message = result.passed
177
+ ? `Pattern not found in ${rule.target} (OK)`
178
+ : `Forbidden pattern found in ${rule.target}`;
179
+ break;
180
+ }
181
+ case "glob-count": {
182
+ // Simplified glob matching - count files matching pattern
183
+ if (!rule.target) {
184
+ result.message = "Rule missing 'target' glob pattern";
185
+ return result;
186
+ }
187
+ // For simplicity, just check if directory exists and count files
188
+ const targetDir = path.dirname(rule.target);
189
+ const ext = path.extname(rule.target);
190
+ const dirPath = sanitizePath(projectPath, targetDir === "." ? "" : targetDir);
191
+ if (!(await fileExists(dirPath))) {
192
+ result.passed = rule.min === 0 || rule.min === undefined;
193
+ result.message = `Directory not found: ${targetDir}`;
194
+ return result;
195
+ }
196
+ // Count matching files (simplified - just count by extension)
197
+ const fs = await import("node:fs/promises");
198
+ const files = await fs.readdir(dirPath).catch(() => []);
199
+ const matchingFiles = ext
200
+ ? files.filter((f) => f.endsWith(ext))
201
+ : files;
202
+ const count = matchingFiles.length;
203
+ const minOk = rule.min === undefined || count >= rule.min;
204
+ const maxOk = rule.max === undefined || count <= rule.max;
205
+ result.passed = minOk && maxOk;
206
+ if (!minOk) {
207
+ result.message = `Found ${count} files, expected at least ${rule.min}`;
208
+ }
209
+ else if (!maxOk) {
210
+ result.message = `Found ${count} files, expected at most ${rule.max}`;
211
+ }
212
+ else {
213
+ result.message = `Found ${count} files matching ${rule.target}`;
214
+ }
215
+ break;
216
+ }
217
+ case "command": {
218
+ if (!rule.command) {
219
+ result.message = "Rule missing 'command' field";
220
+ return result;
221
+ }
222
+ // Note: Command execution is intentionally limited for security
223
+ result.passed = false;
224
+ result.message = "Command rules are disabled in MCP mode for security";
225
+ break;
226
+ }
227
+ default:
228
+ result.message = `Unknown rule type: ${rule.type}`;
229
+ }
230
+ }
231
+ catch (err) {
232
+ result.message = `Rule evaluation failed: ${err instanceof Error ? err.message : String(err)}`;
233
+ }
234
+ return result;
235
+ }
236
+ /**
237
+ * Evaluates all custom rules against the project.
238
+ */
239
+ export async function evaluateAllRules(projectPath) {
240
+ const config = await loadCustomRules(projectPath);
241
+ if (!config || !config.rules || config.rules.length === 0) {
242
+ return [];
243
+ }
244
+ const results = [];
245
+ for (const rule of config.rules) {
246
+ results.push(await evaluateRule(rule, projectPath));
247
+ }
248
+ return results;
249
+ }
250
+ /**
251
+ * Generates a default rules.yaml template.
252
+ */
253
+ export function generateDefaultRulesTemplate() {
254
+ return `# Rebar Custom Rules
255
+ # Define custom quality gates for your project
256
+ # Docs: https://github.com/RCOLKITT/rebar-mcp#custom-rules
257
+
258
+ version: "1.0"
259
+
260
+ rules:
261
+ # Ensure important files exist
262
+ - id: readme-exists
263
+ name: README.md exists
264
+ description: Every project should have a README
265
+ severity: warning
266
+ type: file-exists
267
+ target: README.md
268
+
269
+ - id: license-exists
270
+ name: LICENSE file exists
271
+ description: Open source projects should have a license
272
+ severity: info
273
+ type: file-exists
274
+ target: LICENSE
275
+
276
+ # Check for sensitive patterns
277
+ - id: no-hardcoded-localhost
278
+ name: No hardcoded localhost URLs
279
+ description: Avoid hardcoding localhost in production code
280
+ severity: warning
281
+ type: file-not-contains
282
+ target: "src/**/*.ts"
283
+ pattern: "localhost:\\\\d+"
284
+
285
+ # Ensure minimum test coverage
286
+ - id: test-files-exist
287
+ name: Test files exist
288
+ description: Project should have test files
289
+ severity: warning
290
+ type: glob-count
291
+ target: "**/*.test.ts"
292
+ min: 1
293
+
294
+ # Disabled example
295
+ - id: example-disabled
296
+ name: Example disabled rule
297
+ description: This rule is disabled
298
+ severity: info
299
+ type: file-exists
300
+ target: .example
301
+ enabled: false
302
+ `;
303
+ }
304
+ //# sourceMappingURL=rules-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-engine.js","sourceRoot":"","sources":["../../src/services/rules-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Strictness profiles for Rebar enforcement hooks.
3
+ *
4
+ * Controls how aggressively hooks enforce quality:
5
+ * - standard: Notify on issues, only block dangerous commands and secrets
6
+ * - strict: Block on test/lint failures
7
+ * - paranoid: Block on any types, large files, TODOs in commits
8
+ */
9
+ export type StrictnessProfile = "standard" | "strict" | "paranoid";
10
+ export interface HookConfig {
11
+ event: string;
12
+ matcher: string;
13
+ command: string;
14
+ description: string;
15
+ }
16
+ /**
17
+ * Generates the complete set of hooks for a given strictness profile.
18
+ *
19
+ * @param profile - The strictness level
20
+ * @param testCommand - Project's test command (e.g., "npm test")
21
+ * @param lintCommand - Project's lint command (e.g., "npx eslint")
22
+ * @param formatCommand - Project's format command (e.g., "npx prettier --write")
23
+ */
24
+ export declare function getHooksForProfile(profile: StrictnessProfile, testCommand: string, lintCommand: string, formatCommand: string): HookConfig[];
25
+ /**
26
+ * Converts HookConfig[] to the settings.json format.
27
+ */
28
+ export declare function hooksToSettingsFormat(hooks: HookConfig[]): Record<string, unknown[]>;
29
+ /**
30
+ * Identifies Rebar-generated hooks by their description prefix.
31
+ */
32
+ export declare function isRebarHook(description: string): boolean;
33
+ /**
34
+ * Detects the current strictness profile from hooks in settings.json.
35
+ */
36
+ export declare function detectCurrentProfile(hooks: Record<string, unknown[]>): StrictnessProfile | null;
37
+ //# sourceMappingURL=strictness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strictness.d.ts","sourceRoot":"","sources":["../../src/services/strictness.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,UAAU,EAAE,CA6Fd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAmBpF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAcxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,iBAAiB,GAAG,IAAI,CA6B/F"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Strictness profiles for Rebar enforcement hooks.
3
+ *
4
+ * Controls how aggressively hooks enforce quality:
5
+ * - standard: Notify on issues, only block dangerous commands and secrets
6
+ * - strict: Block on test/lint failures
7
+ * - paranoid: Block on any types, large files, TODOs in commits
8
+ */
9
+ /**
10
+ * Generates the complete set of hooks for a given strictness profile.
11
+ *
12
+ * @param profile - The strictness level
13
+ * @param testCommand - Project's test command (e.g., "npm test")
14
+ * @param lintCommand - Project's lint command (e.g., "npx eslint")
15
+ * @param formatCommand - Project's format command (e.g., "npx prettier --write")
16
+ */
17
+ export function getHooksForProfile(profile, testCommand, lintCommand, formatCommand) {
18
+ const hooks = [];
19
+ // ─── Format on write — always auto-formats, never blocks ───
20
+ hooks.push({
21
+ event: "PostToolUse",
22
+ matcher: "Write(*.ts)|Write(*.tsx)|Write(*.js)|Write(*.jsx)",
23
+ command: `${formatCommand} "$CLAUDE_FILE_PATH" 2>/dev/null || true`,
24
+ description: "Auto-format TypeScript/JavaScript files after write",
25
+ });
26
+ // ─── Lint on write ───
27
+ if (profile === "standard") {
28
+ // Standard: shows output but does not block
29
+ hooks.push({
30
+ event: "PostToolUse",
31
+ matcher: "Write(*.ts)|Write(*.tsx)|Write(*.js)|Write(*.jsx)",
32
+ command: `${lintCommand} "$CLAUDE_FILE_PATH" 2>&1 | head -20; exit 0`,
33
+ description: "Show lint results after write (non-blocking)",
34
+ });
35
+ }
36
+ else {
37
+ // Strict/Paranoid: blocks on lint errors
38
+ hooks.push({
39
+ event: "PostToolUse",
40
+ matcher: "Write(*.ts)|Write(*.tsx)|Write(*.js)|Write(*.jsx)",
41
+ command: `RESULT=$(${lintCommand} "$CLAUDE_FILE_PATH" 2>&1); EXITCODE=$?; if [ $EXITCODE -ne 0 ]; then echo "$RESULT" | head -20; echo '\\n❌ LINT ERRORS — Fix these before continuing.' >&2; exit 2; fi; exit 0`,
42
+ description: "Block on lint errors after write",
43
+ });
44
+ }
45
+ // ─── Test enforcement ───
46
+ if (profile === "standard") {
47
+ // Standard: runs tests, shows results, does not block
48
+ hooks.push({
49
+ event: "PostToolUse",
50
+ matcher: "Write(*.ts)|Write(*.tsx)|Write(*.js)|Write(*.jsx)|Edit(*.ts)|Edit(*.tsx)|Edit(*.js)|Edit(*.jsx)",
51
+ command: `${testCommand} 2>&1 | tail -10; if [ $? -ne 0 ]; then echo '\\n⚠️ TESTS FAILED — You should fix these before continuing.'; fi; exit 0`,
52
+ description: "Run tests after code changes (non-blocking notification)",
53
+ });
54
+ }
55
+ else {
56
+ // Strict/Paranoid: blocks on test failures
57
+ hooks.push({
58
+ event: "PostToolUse",
59
+ matcher: "Write(*.ts)|Write(*.tsx)|Write(*.js)|Write(*.jsx)|Edit(*.ts)|Edit(*.tsx)|Edit(*.js)|Edit(*.jsx)",
60
+ command: `${testCommand} 2>&1 | tail -10; EXIT_CODE=\${PIPESTATUS[0]}; if [ $EXIT_CODE -ne 0 ]; then echo '\\n❌ TESTS FAILED — Fix failing tests before continuing. Do not move to the next task.' >&2; exit 2; fi; exit 0`,
61
+ description: "Block on test failures after code changes",
62
+ });
63
+ }
64
+ // ─── Danger blocker — ALWAYS blocks, even in Standard ───
65
+ hooks.push({
66
+ event: "PreToolUse",
67
+ matcher: "Bash",
68
+ command: `BLOCKED='rm -rf|rm -fr|git push --force|git push -f|DROP TABLE|DROP DATABASE|TRUNCATE TABLE|chmod -R 777'; if echo "$CLAUDE_BASH_COMMAND" | grep -qiE "$BLOCKED"; then echo 'BLOCKED: Destructive command detected. Ask the developer for explicit approval.' >&2; exit 2; fi; exit 0`,
69
+ description: "Block destructive commands (always active)",
70
+ });
71
+ // ─── Secret detector — ALWAYS blocks, even in Standard ───
72
+ hooks.push({
73
+ event: "PreToolUse",
74
+ matcher: "Bash(git commit*)|Bash(git add*)",
75
+ command: `STAGED=$(git diff --cached --name-only 2>/dev/null); if [ -z "$STAGED" ]; then exit 0; fi; SECRETS=$(git diff --cached | grep -inE '(api[_-]?key|secret|password|token|private[_-]?key|aws_access|AKIA[A-Z0-9]{16})\\s*[:=]\\s*[\"\\x27]?[A-Za-z0-9+/=_-]{8,}' | head -5); if [ -n "$SECRETS" ]; then echo "BLOCKED: Potential secrets in staged files:" >&2; echo "$SECRETS" >&2; exit 2; fi; exit 0`,
76
+ description: "Block commits containing potential secrets (always active)",
77
+ });
78
+ // ─── Paranoid-only hooks ───
79
+ if (profile === "paranoid") {
80
+ // File size guard — blocks writes to files over 400 lines
81
+ hooks.push({
82
+ event: "PostToolUse",
83
+ matcher: "Write(*)|Edit(*)",
84
+ command: `if [ -f "$CLAUDE_FILE_PATH" ]; then LINES=$(wc -l < "$CLAUDE_FILE_PATH"); if [ "$LINES" -gt 400 ]; then echo "BLOCKED: File $CLAUDE_FILE_PATH has $LINES lines (max 400). Split this file into smaller modules." >&2; exit 2; fi; fi; exit 0`,
85
+ description: "Block files exceeding 400 lines",
86
+ });
87
+ // Any type guard — blocks writes that introduce `any` type (TypeScript only)
88
+ hooks.push({
89
+ event: "PostToolUse",
90
+ matcher: "Write(*.ts)|Write(*.tsx)|Edit(*.ts)|Edit(*.tsx)",
91
+ command: `if [ -f "$CLAUDE_FILE_PATH" ]; then ANY_COUNT=$(grep -cE ':\\s*any\\b|as\\s+any\\b|<any>' "$CLAUDE_FILE_PATH" 2>/dev/null || echo 0); if [ "$ANY_COUNT" -gt 0 ]; then echo "BLOCKED: File $CLAUDE_FILE_PATH contains $ANY_COUNT uses of 'any' type. Use specific types or 'unknown' instead." >&2; exit 2; fi; fi; exit 0`,
92
+ description: "Block TypeScript files containing 'any' type",
93
+ });
94
+ // Commit completeness — blocks commits with TODO/FIXME in staged files
95
+ hooks.push({
96
+ event: "PreToolUse",
97
+ matcher: "Bash(git commit*)",
98
+ command: `STAGED=$(git diff --cached --name-only 2>/dev/null); TODOS=""; for f in $STAGED; do if [ -f "$f" ]; then FOUND=$(grep -n 'TODO\\|FIXME\\|HACK\\|XXX' "$f" 2>/dev/null | head -3); if [ -n "$FOUND" ]; then TODOS="$TODOS\\n$f:\\n$FOUND"; fi; fi; done; if [ -n "$TODOS" ]; then echo "BLOCKED: Incomplete work found in staged files:" >&2; echo -e "$TODOS" >&2; echo "\\nRemove all TODO/FIXME/HACK/XXX comments before committing." >&2; exit 2; fi; exit 0`,
99
+ description: "Block commits containing TODO/FIXME/HACK/XXX comments",
100
+ });
101
+ }
102
+ return hooks;
103
+ }
104
+ /**
105
+ * Converts HookConfig[] to the settings.json format.
106
+ */
107
+ export function hooksToSettingsFormat(hooks) {
108
+ const result = {};
109
+ for (const hook of hooks) {
110
+ if (!result[hook.event]) {
111
+ result[hook.event] = [];
112
+ }
113
+ result[hook.event].push({
114
+ matcher: hook.matcher,
115
+ hooks: [
116
+ {
117
+ type: "command",
118
+ command: hook.command,
119
+ },
120
+ ],
121
+ });
122
+ }
123
+ return result;
124
+ }
125
+ /**
126
+ * Identifies Rebar-generated hooks by their description prefix.
127
+ */
128
+ export function isRebarHook(description) {
129
+ const rebarPrefixes = [
130
+ "Auto-format",
131
+ "Show lint",
132
+ "Block on lint",
133
+ "Run tests",
134
+ "Block on test",
135
+ "Block destructive",
136
+ "Block commits containing potential",
137
+ "Block files exceeding",
138
+ "Block TypeScript files containing",
139
+ "Block commits containing TODO",
140
+ ];
141
+ return rebarPrefixes.some((prefix) => description.startsWith(prefix));
142
+ }
143
+ /**
144
+ * Detects the current strictness profile from hooks in settings.json.
145
+ */
146
+ export function detectCurrentProfile(hooks) {
147
+ let hasBlockingLint = false;
148
+ let hasBlockingTests = false;
149
+ let hasFileSizeGuard = false;
150
+ let hasAnyTypeGuard = false;
151
+ for (const eventHooks of Object.values(hooks)) {
152
+ if (!Array.isArray(eventHooks))
153
+ continue;
154
+ for (const hookEntry of eventHooks) {
155
+ const h = hookEntry;
156
+ const hooksArray = h.hooks;
157
+ if (!hooksArray)
158
+ continue;
159
+ for (const hook of hooksArray) {
160
+ const cmd = hook.command;
161
+ if (!cmd)
162
+ continue;
163
+ if (cmd.includes("LINT ERRORS") && cmd.includes("exit 2"))
164
+ hasBlockingLint = true;
165
+ if (cmd.includes("TESTS FAILED") && cmd.includes("exit 2"))
166
+ hasBlockingTests = true;
167
+ if (cmd.includes("max 400") && cmd.includes("exit 2"))
168
+ hasFileSizeGuard = true;
169
+ if (cmd.includes("'any' type") && cmd.includes("exit 2"))
170
+ hasAnyTypeGuard = true;
171
+ }
172
+ }
173
+ }
174
+ if (hasFileSizeGuard && hasAnyTypeGuard)
175
+ return "paranoid";
176
+ if (hasBlockingLint && hasBlockingTests)
177
+ return "strict";
178
+ if (!hasBlockingLint && !hasBlockingTests)
179
+ return "standard";
180
+ return null; // Mixed configuration
181
+ }
182
+ //# sourceMappingURL=strictness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strictness.js","sourceRoot":"","sources":["../../src/services/strictness.ts"],"names":[],"mappings":"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"}