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,571 @@
1
+ import * as path from "node:path";
2
+ import { ApplyComplianceInputSchema, CreateCIWorkflowInputSchema, CreateSecurityHookInputSchema, GenerateMCPConfigInputSchema, } from "../schemas/scaffolding.js";
3
+ import { resolveProjectPath, sanitizePath, atomicWrite, ensureDir, readFileSafe, safeWriteFile, } from "../services/file-ops.js";
4
+ import { DANGEROUS_COMMANDS_STANDARD, DANGEROUS_COMMANDS_STRICT, DANGEROUS_COMMANDS_PARANOID, SECRET_PATTERNS, } from "../constants.js";
5
+ function makeResult(text, isError = false) {
6
+ return {
7
+ content: [{ type: "text", text }],
8
+ ...(isError ? { isError: true } : {}),
9
+ };
10
+ }
11
+ export function registerEnterpriseTools(server) {
12
+ // ─── rebar_apply_compliance ──────────────────────────────────────
13
+ server.registerTool("rebar_apply_compliance", {
14
+ title: "Apply Compliance Pack",
15
+ description: "[Rebar] Applies a compliance template pack to the project — generates hooks for audit logging, " +
16
+ "skills for compliance-aware code review, and CLAUDE.md sections with regulatory requirements.\n\n" +
17
+ "Supported standards:\n" +
18
+ "• hipaa: PHI handling, audit logging, encryption requirements, data classification\n" +
19
+ "• soc2: Access controls, audit trails, change management, encryption\n" +
20
+ "• pci-dss: Card number blocking, tokenization requirements, OWASP checks\n" +
21
+ "• sox: Financial calculation review, audit trails, separation of duties\n\n" +
22
+ "Scope options:\n" +
23
+ "• full: Hooks + skills + CLAUDE.md section\n" +
24
+ "• hooks_only: Just audit/blocking hooks\n" +
25
+ "• skills_only: Just compliance review skills\n\n" +
26
+ "Examples:\n" +
27
+ " rebar_apply_compliance({ project_path: '.', standard: 'hipaa', scope: 'full' })\n" +
28
+ " rebar_apply_compliance({ project_path: '.', standard: 'soc2', scope: 'hooks_only' })\n\n" +
29
+ "Idempotent: Safe to run multiple times — won't duplicate hooks.",
30
+ inputSchema: ApplyComplianceInputSchema,
31
+ annotations: {
32
+ readOnlyHint: false,
33
+ destructiveHint: false,
34
+ idempotentHint: true,
35
+ openWorldHint: false,
36
+ },
37
+ }, async (args) => {
38
+ const { project_path, standard, scope } = args;
39
+ const absPath = resolveProjectPath(project_path);
40
+ const generated = [];
41
+ try {
42
+ const complianceConfig = getComplianceConfig(standard);
43
+ // Generate hooks
44
+ if (scope === "full" || scope === "hooks_only") {
45
+ const settingsPath = sanitizePath(absPath, ".claude/settings.json");
46
+ let settings = {};
47
+ const existing = await readFileSafe(settingsPath);
48
+ if (existing) {
49
+ settings = JSON.parse(existing);
50
+ }
51
+ if (!settings.hooks)
52
+ settings.hooks = {};
53
+ const hooks = settings.hooks;
54
+ for (const hook of complianceConfig.hooks) {
55
+ const eventKey = hook.event;
56
+ if (!hooks[eventKey])
57
+ hooks[eventKey] = [];
58
+ const eventHooks = hooks[eventKey];
59
+ const exists = eventHooks.some((h) => h.command === hook.command);
60
+ if (!exists) {
61
+ eventHooks.push(hook);
62
+ }
63
+ }
64
+ await ensureDir(path.dirname(settingsPath));
65
+ await atomicWrite(settingsPath, JSON.stringify(settings, null, 2));
66
+ generated.push(`✓ Added ${complianceConfig.hooks.length} compliance hook(s) to settings.json`);
67
+ }
68
+ // Generate skills
69
+ if (scope === "full" || scope === "skills_only") {
70
+ for (const skill of complianceConfig.skills) {
71
+ const skillDir = sanitizePath(absPath, `.claude/skills/${skill.name}`);
72
+ await ensureDir(skillDir);
73
+ const skillPath = path.join(skillDir, "SKILL.md");
74
+ const result = await safeWriteFile(skillPath, skill.content, true);
75
+ generated.push(`✓ ${result.message}`);
76
+ }
77
+ }
78
+ // Append to CLAUDE.md
79
+ if (scope === "full") {
80
+ const claudemdPath = sanitizePath(absPath, "CLAUDE.md");
81
+ const existingMd = await readFileSafe(claudemdPath);
82
+ const section = complianceConfig.claudemdSection;
83
+ if (existingMd && !existingMd.includes(section.substring(0, 50))) {
84
+ await atomicWrite(claudemdPath, existingMd + "\n\n" + section);
85
+ generated.push("✓ Added compliance section to CLAUDE.md");
86
+ }
87
+ else if (!existingMd) {
88
+ await atomicWrite(claudemdPath, `# Project\n\n${section}`);
89
+ generated.push("✓ Created CLAUDE.md with compliance section");
90
+ }
91
+ else {
92
+ generated.push("• CLAUDE.md already contains compliance section");
93
+ }
94
+ }
95
+ return makeResult(`Compliance pack applied: ${standard.toUpperCase()}\n` +
96
+ `Scope: ${scope}\n\n` +
97
+ generated.join("\n") +
98
+ `\n\nReview the generated artifacts and customize as needed.`);
99
+ }
100
+ catch (err) {
101
+ const message = err instanceof Error ? err.message : String(err);
102
+ return makeResult(`Failed to apply compliance pack: ${message}`, true);
103
+ }
104
+ });
105
+ // ─── rebar_create_ci_workflow ────────────────────────────────────
106
+ server.registerTool("rebar_create_ci_workflow", {
107
+ title: "Create CI Workflow",
108
+ description: "[Rebar] Generates a GitHub Actions workflow that enables Claude Code to review pull requests. " +
109
+ "Creates a .github/workflows/claude-review.yml file that triggers on PRs and @claude mentions.\n\n" +
110
+ "Review focus options:\n" +
111
+ "• security: OWASP vulnerabilities, auth issues, data exposure\n" +
112
+ "• performance: N+1 queries, memory leaks, bundle size\n" +
113
+ "• style: Code conventions, naming, organization\n" +
114
+ "• all: Comprehensive review covering all areas\n\n" +
115
+ "Examples:\n" +
116
+ " rebar_create_ci_workflow({ repo_path: '.', review_focus: 'all', branch_pattern: 'main' })\n" +
117
+ " rebar_create_ci_workflow({ repo_path: '.', review_focus: 'security', branch_pattern: 'develop' })\n\n" +
118
+ "Requires: ANTHROPIC_API_KEY in repository secrets.\n" +
119
+ "Idempotent: Updates existing workflow if present.",
120
+ inputSchema: CreateCIWorkflowInputSchema,
121
+ annotations: {
122
+ readOnlyHint: false,
123
+ destructiveHint: false,
124
+ idempotentHint: true,
125
+ openWorldHint: false,
126
+ },
127
+ }, async (args) => {
128
+ const { repo_path, review_focus, branch_pattern } = args;
129
+ const absPath = resolveProjectPath(repo_path);
130
+ const workflowDir = sanitizePath(absPath, ".github/workflows");
131
+ const workflowPath = path.join(workflowDir, "claude-review.yml");
132
+ try {
133
+ await ensureDir(workflowDir);
134
+ const focusInstructions = getReviewFocusInstructions(review_focus);
135
+ const workflow = `name: Claude Code Review
136
+
137
+ on:
138
+ pull_request:
139
+ branches: [${branch_pattern}]
140
+ issue_comment:
141
+ types: [created]
142
+
143
+ permissions:
144
+ contents: read
145
+ pull-requests: write
146
+ issues: write
147
+
148
+ jobs:
149
+ claude-review:
150
+ if: |
151
+ (github.event_name == 'pull_request') ||
152
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude'))
153
+ runs-on: ubuntu-latest
154
+ steps:
155
+ - uses: actions/checkout@v4
156
+ with:
157
+ fetch-depth: 0
158
+
159
+ - name: Claude Code Review
160
+ uses: anthropics/claude-code-action@v1
161
+ with:
162
+ anthropic_api_key: \${{ secrets.ANTHROPIC_API_KEY }}
163
+ review_focus: "${review_focus}"
164
+ custom_instructions: |
165
+ ${focusInstructions}
166
+ `;
167
+ const result = await safeWriteFile(workflowPath, workflow, true);
168
+ return makeResult(`CI workflow created!\n\n` +
169
+ `Location: ${workflowPath}\n` +
170
+ `Review focus: ${review_focus}\n` +
171
+ `Branch pattern: ${branch_pattern}\n\n` +
172
+ `${result.message}\n\n` +
173
+ `Next steps:\n` +
174
+ `1. Add ANTHROPIC_API_KEY to your repository secrets\n` +
175
+ `2. Push the workflow file to your repository\n` +
176
+ `3. Create a PR to trigger the review`);
177
+ }
178
+ catch (err) {
179
+ const message = err instanceof Error ? err.message : String(err);
180
+ return makeResult(`Failed to create CI workflow: ${message}`, true);
181
+ }
182
+ });
183
+ // ─── rebar_create_security_hook ──────────────────────────────────
184
+ server.registerTool("rebar_create_security_hook", {
185
+ title: "Create Security Hooks",
186
+ description: "[Rebar] Generates a comprehensive security hook system that blocks dangerous commands and detects secret leaks " +
187
+ "before they happen. Creates a blocker script and hooks it into Claude Code's PreToolCall lifecycle.\n\n" +
188
+ "Strictness levels:\n" +
189
+ "• standard: Blocks rm -rf, force push, DROP TABLE, TRUNCATE (8 patterns)\n" +
190
+ "• strict: + git reset --hard, chmod 777, curl|sh, wget|sh (13 patterns)\n" +
191
+ "• paranoid: + eval(), exec(), sudo, su, pkill, killall (19 patterns)\n\n" +
192
+ "Also detects secret patterns: AWS keys, API keys, GitHub tokens, private keys.\n\n" +
193
+ "Examples:\n" +
194
+ " rebar_create_security_hook({ project_path: '.', strictness: 'standard' })\n" +
195
+ " rebar_create_security_hook({ project_path: '.', strictness: 'paranoid' })\n\n" +
196
+ "Idempotent: Updates existing security hook if present.",
197
+ inputSchema: CreateSecurityHookInputSchema,
198
+ annotations: {
199
+ readOnlyHint: false,
200
+ destructiveHint: false,
201
+ idempotentHint: true,
202
+ openWorldHint: false,
203
+ },
204
+ }, async (args) => {
205
+ const { project_path, strictness } = args;
206
+ const absPath = resolveProjectPath(project_path);
207
+ try {
208
+ // Get the appropriate command list
209
+ let commands;
210
+ switch (strictness) {
211
+ case "paranoid":
212
+ commands = DANGEROUS_COMMANDS_PARANOID;
213
+ break;
214
+ case "strict":
215
+ commands = DANGEROUS_COMMANDS_STRICT;
216
+ break;
217
+ default:
218
+ commands = DANGEROUS_COMMANDS_STANDARD;
219
+ }
220
+ // Create the blocker script
221
+ const scriptsDir = sanitizePath(absPath, ".claude/scripts");
222
+ await ensureDir(scriptsDir);
223
+ const patterns = commands.map((c) => ` "${c.replace(/"/g, '\\"')}"`).join("\n");
224
+ const secretPatterns = SECRET_PATTERNS.map((p) => ` "${p}"`).join("\n");
225
+ const blockerScript = `#!/usr/bin/env bash
226
+ # Security hook: blocks dangerous commands
227
+ # Strictness level: ${strictness}
228
+ # Generated by rebar-mcp
229
+
230
+ COMMAND="$TOOL_INPUT_COMMAND"
231
+
232
+ # Dangerous command patterns
233
+ DANGEROUS_PATTERNS=(
234
+ ${patterns}
235
+ )
236
+
237
+ for pattern in "\${DANGEROUS_PATTERNS[@]}"; do
238
+ if echo "$COMMAND" | grep -qiF "$pattern"; then
239
+ echo "BLOCKED: Command contains dangerous pattern: $pattern" >&2
240
+ echo "If you need to run this command, do it manually outside Claude Code." >&2
241
+ exit 1
242
+ fi
243
+ done
244
+
245
+ # Secret leak detection
246
+ SECRET_PATTERNS=(
247
+ ${secretPatterns}
248
+ )
249
+
250
+ for pattern in "\${SECRET_PATTERNS[@]}"; do
251
+ if echo "$COMMAND" | grep -qE "$pattern"; then
252
+ echo "BLOCKED: Command may expose secrets matching pattern: $pattern" >&2
253
+ exit 1
254
+ fi
255
+ done
256
+
257
+ exit 0
258
+ `;
259
+ const scriptPath = path.join(scriptsDir, "security-blocker.sh");
260
+ await atomicWrite(scriptPath, blockerScript);
261
+ // Make executable
262
+ const { chmod } = await import("node:fs/promises");
263
+ await chmod(scriptPath, 0o755);
264
+ // Add hook to settings.json
265
+ const settingsPath = sanitizePath(absPath, ".claude/settings.json");
266
+ let settings = {};
267
+ const existing = await readFileSafe(settingsPath);
268
+ if (existing) {
269
+ settings = JSON.parse(existing);
270
+ }
271
+ if (!settings.hooks)
272
+ settings.hooks = {};
273
+ const hooks = settings.hooks;
274
+ if (!hooks.PreToolCall)
275
+ hooks.PreToolCall = [];
276
+ const hookEntry = {
277
+ description: `Security blocker (${strictness})`,
278
+ matcher: "Bash",
279
+ command: scriptPath,
280
+ exit_behavior: "block",
281
+ };
282
+ const eventHooks = hooks.PreToolCall;
283
+ const existingIdx = eventHooks.findIndex((h) => h.description?.startsWith("Security blocker"));
284
+ if (existingIdx >= 0) {
285
+ eventHooks[existingIdx] = hookEntry;
286
+ }
287
+ else {
288
+ eventHooks.push(hookEntry);
289
+ }
290
+ // Also add deny rules to permissions
291
+ if (!settings.permissions)
292
+ settings.permissions = {};
293
+ const perms = settings.permissions;
294
+ if (!perms.deny)
295
+ perms.deny = [];
296
+ const denyList = perms.deny;
297
+ const denyRules = [
298
+ "Bash(rm -rf *)",
299
+ "Read(./.env)",
300
+ "Read(./.env.*)",
301
+ ];
302
+ for (const rule of denyRules) {
303
+ if (!denyList.includes(rule)) {
304
+ denyList.push(rule);
305
+ }
306
+ }
307
+ await ensureDir(path.dirname(settingsPath));
308
+ await atomicWrite(settingsPath, JSON.stringify(settings, null, 2));
309
+ return makeResult(`Security hooks installed!\n\n` +
310
+ `Strictness: ${strictness}\n` +
311
+ `Blocked patterns: ${commands.length} dangerous commands\n` +
312
+ `Secret patterns: ${SECRET_PATTERNS.length} leak detectors\n\n` +
313
+ `Generated files:\n` +
314
+ ` ✓ ${scriptPath} — Blocker script\n` +
315
+ ` ✓ ${settingsPath} — Hook configuration\n\n` +
316
+ `The following will be blocked:\n` +
317
+ commands.map((c) => ` • ${c}`).join("\n"));
318
+ }
319
+ catch (err) {
320
+ const message = err instanceof Error ? err.message : String(err);
321
+ return makeResult(`Failed to create security hooks: ${message}`, true);
322
+ }
323
+ });
324
+ // ─── rebar_generate_mcp_config ───────────────────────────────────
325
+ server.registerTool("rebar_generate_mcp_config", {
326
+ title: "Generate MCP Config",
327
+ description: "[Rebar] Creates a .mcp.json file with pre-configured MCP server entries for your services. " +
328
+ "Each entry includes the correct npx command and environment variable placeholders.\n\n" +
329
+ "Supported services: github, sentry, postgres, slack, linear, jira, datadog, pagerduty, vercel, supabase\n\n" +
330
+ "Scope:\n" +
331
+ "• project: Creates .mcp.json in project root (team-shared)\n" +
332
+ "• user: Creates in ~/.claude/.mcp.json (personal)\n\n" +
333
+ "Examples:\n" +
334
+ " rebar_generate_mcp_config({ project_path: '.', services: ['github', 'slack'], scope: 'project' })\n" +
335
+ " rebar_generate_mcp_config({ project_path: '.', services: ['github', 'sentry', 'postgres'], scope: 'project' })\n\n" +
336
+ "Returns: Config file location, list of configured services, next steps.",
337
+ inputSchema: GenerateMCPConfigInputSchema,
338
+ annotations: {
339
+ readOnlyHint: false,
340
+ destructiveHint: false,
341
+ idempotentHint: true,
342
+ openWorldHint: false,
343
+ },
344
+ }, async (args) => {
345
+ const { project_path, services, scope } = args;
346
+ const absPath = resolveProjectPath(project_path);
347
+ try {
348
+ const mcpServers = {};
349
+ for (const service of services) {
350
+ mcpServers[service] = getMCPServiceConfig(service);
351
+ }
352
+ const config = { mcpServers };
353
+ const configContent = JSON.stringify(config, null, 2);
354
+ let configPath;
355
+ if (scope === "project") {
356
+ configPath = sanitizePath(absPath, ".mcp.json");
357
+ }
358
+ else {
359
+ const homeDir = process.env.HOME || process.env.USERPROFILE || "~";
360
+ configPath = path.join(homeDir, ".claude", ".mcp.json");
361
+ }
362
+ const result = await safeWriteFile(configPath, configContent, true);
363
+ const serviceList = services
364
+ .map((s) => ` • ${s}`)
365
+ .join("\n");
366
+ return makeResult(`MCP configuration generated!\n\n` +
367
+ `Location: ${configPath}\n` +
368
+ `Scope: ${scope}\n\n` +
369
+ `Configured services:\n${serviceList}\n\n` +
370
+ `${result.message}\n\n` +
371
+ `Next steps:\n` +
372
+ `1. Fill in API keys and tokens in the configuration\n` +
373
+ `2. Run 'claude mcp list' to verify the servers are registered\n` +
374
+ `3. Restart Claude Code to load the new MCP servers`);
375
+ }
376
+ catch (err) {
377
+ const message = err instanceof Error ? err.message : String(err);
378
+ return makeResult(`Failed to generate MCP config: ${message}`, true);
379
+ }
380
+ });
381
+ }
382
+ // ─── Helper Functions ─────────────────────────────────────────────────
383
+ function getComplianceConfig(standard) {
384
+ switch (standard) {
385
+ case "hipaa":
386
+ return {
387
+ hooks: [
388
+ {
389
+ event: "PreToolCall",
390
+ matcher: "Bash",
391
+ description: "HIPAA: Audit logging for all commands",
392
+ command: 'echo "[$(date -u)] HIPAA_AUDIT: $TOOL_INPUT_COMMAND" >> .claude/audit.log',
393
+ exit_behavior: "notify",
394
+ },
395
+ {
396
+ event: "PreToolCall",
397
+ matcher: "Write|Edit",
398
+ description: "HIPAA: Check for PHI in written files",
399
+ command: 'if grep -qiE "(SSN|social.security|patient.id|medical.record|health.insurance)" "$TOOL_INPUT_FILE_PATH" 2>/dev/null; then echo "WARNING: Possible PHI detected in file" >&2; fi',
400
+ exit_behavior: "notify",
401
+ },
402
+ ],
403
+ skills: [
404
+ {
405
+ name: "phi-handler",
406
+ content: "---\nname: phi-handler\ndescription: Ensures Protected Health Information (PHI) is handled according to HIPAA requirements\ninvocation: auto\ncontext: inline\n---\n\n# PHI Handler\n\nWhen working with code that handles health data:\n\n1. Never log PHI to console or debug output\n2. Ensure PHI is encrypted at rest and in transit\n3. Apply minimum necessary access principle\n4. Add audit trail for all PHI access\n5. Use de-identification where possible\n",
407
+ },
408
+ ],
409
+ claudemdSection: "## HIPAA Compliance\n\n" +
410
+ "This project handles Protected Health Information (PHI).\n\n" +
411
+ "### Requirements\n" +
412
+ "- All PHI must be encrypted at rest (AES-256) and in transit (TLS 1.2+)\n" +
413
+ "- Access to PHI requires authentication and authorization\n" +
414
+ "- All PHI access must be logged for audit purposes\n" +
415
+ "- Data retention policies must be enforced\n" +
416
+ "- Never log PHI in application logs, console output, or error messages\n" +
417
+ "- Use de-identified data for development and testing\n\n" +
418
+ "### Data Classification\n" +
419
+ "- **PHI**: Patient names, SSN, medical records, insurance IDs, dates of service\n" +
420
+ "- **ePHI**: Electronic PHI stored or transmitted digitally\n" +
421
+ "- **De-identified**: Data with all 18 HIPAA identifiers removed\n",
422
+ };
423
+ case "soc2":
424
+ return {
425
+ hooks: [
426
+ {
427
+ event: "PreToolCall",
428
+ matcher: "Bash",
429
+ description: "SOC2: Audit logging",
430
+ command: 'echo "[$(date -u)] SOC2_AUDIT: $TOOL_INPUT_COMMAND" >> .claude/audit.log',
431
+ exit_behavior: "notify",
432
+ },
433
+ ],
434
+ skills: [
435
+ {
436
+ name: "access-control-review",
437
+ content: "---\nname: access-control-review\ndescription: Reviews code for proper access control implementation per SOC2 requirements\ninvocation: auto\ncontext: fork\n---\n\n# Access Control Review\n\nVerify that code changes implement proper access controls:\n\n1. Authentication is required for all protected endpoints\n2. Authorization checks match the principle of least privilege\n3. Session management follows security best practices\n4. API keys and tokens are properly scoped\n",
438
+ },
439
+ ],
440
+ claudemdSection: "## SOC2 Compliance\n\n" +
441
+ "This project follows SOC2 Trust Service Criteria.\n\n" +
442
+ "### Security Controls\n" +
443
+ "- All changes require code review\n" +
444
+ "- Access follows principle of least privilege\n" +
445
+ "- Audit logging enabled for all state-changing operations\n" +
446
+ "- Encryption required for sensitive data\n" +
447
+ "- Regular dependency vulnerability scanning\n",
448
+ };
449
+ case "pci-dss":
450
+ return {
451
+ hooks: [
452
+ {
453
+ event: "PreToolCall",
454
+ matcher: "Bash|Write|Edit",
455
+ description: "PCI-DSS: Block card number patterns in code",
456
+ command: 'if echo "$TOOL_INPUT" | grep -qE "\\b[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}\\b"; then echo "BLOCKED: Possible card number detected" >&2; exit 1; fi',
457
+ exit_behavior: "block",
458
+ },
459
+ ],
460
+ skills: [],
461
+ claudemdSection: "## PCI-DSS Compliance\n\n" +
462
+ "This project handles payment card data.\n\n" +
463
+ "### Requirements\n" +
464
+ "- Never store full card numbers in code, logs, or comments\n" +
465
+ "- Use tokenization for card data references\n" +
466
+ "- All cardholder data must be encrypted\n" +
467
+ "- Follow secure coding guidelines (OWASP)\n",
468
+ };
469
+ case "sox":
470
+ return {
471
+ hooks: [
472
+ {
473
+ event: "PreToolCall",
474
+ matcher: "Bash",
475
+ description: "SOX: Audit logging for financial systems",
476
+ command: 'echo "[$(date -u)] SOX_AUDIT: $TOOL_INPUT_COMMAND" >> .claude/audit.log',
477
+ exit_behavior: "notify",
478
+ },
479
+ ],
480
+ skills: [],
481
+ claudemdSection: "## SOX Compliance\n\n" +
482
+ "This project is subject to Sarbanes-Oxley requirements.\n\n" +
483
+ "### Requirements\n" +
484
+ "- All changes to financial calculations require dual review\n" +
485
+ "- Audit trail for all data modifications\n" +
486
+ "- Separation of duties in deployment pipeline\n" +
487
+ "- Change management documentation required\n",
488
+ };
489
+ default:
490
+ return { hooks: [], skills: [], claudemdSection: "" };
491
+ }
492
+ }
493
+ function getReviewFocusInstructions(focus) {
494
+ switch (focus) {
495
+ case "security":
496
+ return "Focus on security vulnerabilities: injection attacks, auth issues, data exposure, OWASP Top 10.";
497
+ case "performance":
498
+ return "Focus on performance issues: N+1 queries, memory leaks, unnecessary re-renders, bundle size.";
499
+ case "style":
500
+ return "Focus on code style: naming conventions, code organization, readability, documentation.";
501
+ default:
502
+ return "Review for security, performance, code quality, and correctness.";
503
+ }
504
+ }
505
+ function getMCPServiceConfig(service) {
506
+ const configs = {
507
+ github: {
508
+ command: "npx",
509
+ args: ["-y", "@modelcontextprotocol/server-github"],
510
+ env: { GITHUB_PERSONAL_ACCESS_TOKEN: "<your-github-token>" },
511
+ },
512
+ sentry: {
513
+ command: "npx",
514
+ args: ["-y", "@modelcontextprotocol/server-sentry"],
515
+ env: { SENTRY_AUTH_TOKEN: "<your-sentry-token>" },
516
+ },
517
+ postgres: {
518
+ command: "npx",
519
+ args: ["-y", "@modelcontextprotocol/server-postgres"],
520
+ env: { POSTGRES_CONNECTION_STRING: "<your-postgres-url>" },
521
+ },
522
+ slack: {
523
+ command: "npx",
524
+ args: ["-y", "@modelcontextprotocol/server-slack"],
525
+ env: { SLACK_BOT_TOKEN: "<your-slack-token>" },
526
+ },
527
+ linear: {
528
+ command: "npx",
529
+ args: ["-y", "@modelcontextprotocol/server-linear"],
530
+ env: { LINEAR_API_KEY: "<your-linear-key>" },
531
+ },
532
+ jira: {
533
+ command: "npx",
534
+ args: ["-y", "@modelcontextprotocol/server-jira"],
535
+ env: {
536
+ JIRA_URL: "<your-jira-url>",
537
+ JIRA_API_TOKEN: "<your-jira-token>",
538
+ JIRA_EMAIL: "<your-email>",
539
+ },
540
+ },
541
+ datadog: {
542
+ command: "npx",
543
+ args: ["-y", "@modelcontextprotocol/server-datadog"],
544
+ env: {
545
+ DD_API_KEY: "<your-datadog-api-key>",
546
+ DD_APP_KEY: "<your-datadog-app-key>",
547
+ },
548
+ },
549
+ pagerduty: {
550
+ command: "npx",
551
+ args: ["-y", "@modelcontextprotocol/server-pagerduty"],
552
+ env: { PAGERDUTY_API_KEY: "<your-pagerduty-key>" },
553
+ },
554
+ vercel: {
555
+ command: "npx",
556
+ args: ["-y", "@vercel/mcp"],
557
+ env: { VERCEL_TOKEN: "<your-vercel-token>" },
558
+ },
559
+ supabase: {
560
+ command: "npx",
561
+ args: ["-y", "@supabase/mcp-server"],
562
+ env: { SUPABASE_ACCESS_TOKEN: "<your-supabase-token>" },
563
+ },
564
+ };
565
+ return configs[service] || {
566
+ command: "npx",
567
+ args: ["-y", `@modelcontextprotocol/server-${service}`],
568
+ env: {},
569
+ };
570
+ }
571
+ //# sourceMappingURL=enterprise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enterprise.js","sourceRoot":"","sources":["../../src/tools/enterprise.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tier 2: Knowledge Base Tools
3
+ * rebar_create_knowledge, rebar_create_adr
4
+ */
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function registerKnowledgeTools(server: McpServer): void;
7
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwI9D"}