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,131 @@
1
+ /**
2
+ * Constants and default values for rebar-mcp
3
+ */
4
+
5
+ export const TOOL_PREFIX = "rebar_";
6
+
7
+ export const SKILL_NAME_MAX_LENGTH = 64;
8
+ export const SKILL_DESCRIPTION_MAX_LENGTH = 200;
9
+ export const CLAUDEMD_MAX_LINES = 500;
10
+ export const SKILL_BUDGET_PERCENT = 2;
11
+
12
+ /** Approximate tokens per character for budget estimation */
13
+ export const TOKENS_PER_CHAR = 0.25;
14
+
15
+ /** Claude Code context window size for budget calculations */
16
+ export const CONTEXT_WINDOW_TOKENS = 200_000;
17
+
18
+ export const HOOK_EVENTS = [
19
+ "PreToolCall",
20
+ "PostToolCall",
21
+ "Notification",
22
+ "Stop",
23
+ "SubagentStop",
24
+ "PreCompact",
25
+ "PostCompact",
26
+ "SessionStart",
27
+ ] as const;
28
+
29
+ export const TECH_STACKS = [
30
+ "nextjs",
31
+ "react",
32
+ "vue",
33
+ "angular",
34
+ "svelte",
35
+ "express",
36
+ "fastapi",
37
+ "django",
38
+ "flask",
39
+ "springboot",
40
+ "rails",
41
+ "laravel",
42
+ "go",
43
+ "rust",
44
+ "dotnet",
45
+ ] as const;
46
+
47
+ export const COMPLIANCE_STANDARDS = ["hipaa", "sox", "pci-dss", "soc2"] as const;
48
+
49
+ export const ARTIFACT_TYPES = [
50
+ "skill",
51
+ "agent",
52
+ "hook",
53
+ "command",
54
+ "knowledge",
55
+ "claudemd",
56
+ "mcp-config",
57
+ "settings",
58
+ ] as const;
59
+
60
+ export const MCP_SERVICES = [
61
+ "github",
62
+ "sentry",
63
+ "postgres",
64
+ "slack",
65
+ "linear",
66
+ "jira",
67
+ "datadog",
68
+ "pagerduty",
69
+ "vercel",
70
+ "supabase",
71
+ ] as const;
72
+
73
+ /** Dangerous commands blocked by security hooks */
74
+ export const DANGEROUS_COMMANDS_STANDARD = [
75
+ "rm -rf /",
76
+ "rm -rf ~",
77
+ "rm -rf .",
78
+ "git push --force",
79
+ "git push -f",
80
+ "DROP TABLE",
81
+ "DROP DATABASE",
82
+ "TRUNCATE",
83
+ ];
84
+
85
+ export const DANGEROUS_COMMANDS_STRICT = [
86
+ ...DANGEROUS_COMMANDS_STANDARD,
87
+ "git reset --hard",
88
+ "git checkout -- .",
89
+ "chmod 777",
90
+ "curl | sh",
91
+ "wget | sh",
92
+ ];
93
+
94
+ export const DANGEROUS_COMMANDS_PARANOID = [
95
+ ...DANGEROUS_COMMANDS_STRICT,
96
+ "eval(",
97
+ "exec(",
98
+ "sudo ",
99
+ "su -",
100
+ "pkill",
101
+ "killall",
102
+ ];
103
+
104
+ export const SECRET_PATTERNS = [
105
+ "AKIA[0-9A-Z]{16}", // AWS Access Key
106
+ "sk-[a-zA-Z0-9]{48}", // OpenAI API Key
107
+ "sk-ant-[a-zA-Z0-9-]{90,}", // Anthropic API Key
108
+ "ghp_[a-zA-Z0-9]{36}", // GitHub PAT
109
+ "glpat-[a-zA-Z0-9-]{20}", // GitLab PAT
110
+ "xoxb-[0-9]{10,}", // Slack Bot Token
111
+ "-----BEGIN (RSA |EC )?PRIVATE KEY-----", // Private keys
112
+ ];
113
+
114
+ /** Default file patterns for tech stack detection */
115
+ export const STACK_DETECTION_FILES: Record<string, string[]> = {
116
+ nextjs: ["next.config.js", "next.config.ts", "next.config.mjs"],
117
+ react: ["src/App.tsx", "src/App.jsx"],
118
+ vue: ["vue.config.js", "nuxt.config.ts"],
119
+ angular: ["angular.json"],
120
+ svelte: ["svelte.config.js"],
121
+ express: ["app.js", "server.js"],
122
+ fastapi: ["main.py", "app/main.py"],
123
+ django: ["manage.py", "settings.py"],
124
+ flask: ["app.py", "wsgi.py"],
125
+ springboot: ["pom.xml", "build.gradle"],
126
+ rails: ["Gemfile", "config/routes.rb"],
127
+ laravel: ["artisan", "composer.json"],
128
+ go: ["go.mod"],
129
+ rust: ["Cargo.toml"],
130
+ dotnet: ["*.csproj", "*.sln"],
131
+ };
package/src/index.ts ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * rebar-mcp
4
+ *
5
+ * Reinforcement for AI-generated code. Enforcement hooks, quality audits,
6
+ * and opinionated templates that prevent AI coding tools from shipping broken code.
7
+ *
8
+ * Transport: stdio (primary), streamable HTTP (secondary)
9
+ */
10
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
12
+ import { registerScaffoldingTools } from "./tools/scaffolding.js";
13
+ import { registerKnowledgeTools } from "./tools/knowledge.js";
14
+ import { registerManagementTools } from "./tools/management.js";
15
+ import { registerEnterpriseTools } from "./tools/enterprise.js";
16
+ import { runCLI } from "./cli.js";
17
+
18
+ async function runMCPServer(): Promise<void> {
19
+ const server = new McpServer({
20
+ name: "rebar-mcp",
21
+ version: "2.0.0",
22
+ });
23
+
24
+ // Register all tool modules
25
+ registerScaffoldingTools(server); // Tier 1: init, claudemd, skill, agent, hook, command
26
+ registerKnowledgeTools(server); // Tier 2: knowledge, adr
27
+ registerManagementTools(server); // Tier 2: list, validate, audit, doctor
28
+ registerEnterpriseTools(server); // Tier 3: compliance, ci, security, mcp-config
29
+
30
+ // Connect via stdio transport
31
+ const transport = new StdioServerTransport();
32
+ await server.connect(transport);
33
+
34
+ // Log to stderr (stdout is reserved for MCP protocol)
35
+ console.error("rebar-mcp v2.0.0 started on stdio transport");
36
+ }
37
+
38
+ async function main(): Promise<void> {
39
+ const args = process.argv.slice(2);
40
+
41
+ // CLI mode: any command without --mcp flag
42
+ if (args.length > 0 && !args.includes("--mcp")) {
43
+ const exitCode = await runCLI(args);
44
+ process.exit(exitCode);
45
+ }
46
+
47
+ // MCP server mode (default when no args, or with --mcp flag)
48
+ await runMCPServer();
49
+ }
50
+
51
+ main().catch((err: unknown) => {
52
+ console.error("Fatal error:", err);
53
+ process.exit(1);
54
+ });
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Common Zod schemas shared across tools
3
+ */
4
+ import { z } from "zod";
5
+ import {
6
+ TECH_STACKS,
7
+ COMPLIANCE_STANDARDS,
8
+ HOOK_EVENTS,
9
+ ARTIFACT_TYPES,
10
+ MCP_SERVICES,
11
+ } from "../constants.js";
12
+
13
+ export const TechStackSchema = z.enum(TECH_STACKS);
14
+ export const ComplianceStandardSchema = z.enum(COMPLIANCE_STANDARDS);
15
+ export const HookEventSchema = z.enum(HOOK_EVENTS);
16
+ export const ArtifactTypeFilterSchema = z.enum([...ARTIFACT_TYPES, "all"] as const);
17
+ export const MCPServiceSchema = z.enum(MCP_SERVICES);
18
+
19
+ export const ProjectPathSchema = z
20
+ .string()
21
+ .min(1)
22
+ .describe("Absolute or relative path to the project root directory");
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Zod schemas for scaffolding tool inputs
3
+ */
4
+ import { z } from "zod";
5
+ import {
6
+ TechStackSchema,
7
+ ComplianceStandardSchema,
8
+ HookEventSchema,
9
+ ProjectPathSchema,
10
+ ArtifactTypeFilterSchema,
11
+ MCPServiceSchema,
12
+ } from "./common.js";
13
+
14
+ export const InitProjectInputSchema = z.object({
15
+ project_path: ProjectPathSchema,
16
+ tech_stack: z.array(TechStackSchema).min(1).describe("Technology stacks used in the project"),
17
+ team_size: z.number().int().min(1).max(1000).describe("Number of developers on the team"),
18
+ compliance: z
19
+ .array(ComplianceStandardSchema)
20
+ .optional()
21
+ .default([])
22
+ .describe("Compliance standards to apply"),
23
+ strictness: z
24
+ .enum(["standard", "strict", "paranoid"])
25
+ .default("standard")
26
+ .describe("Enforcement strictness level. 'standard' notifies on issues, 'strict' blocks on test/lint failures, 'paranoid' adds file size limits, any-type blocking, and commit completeness checks."),
27
+ platforms: z
28
+ .array(z.enum(["claude-code", "cursor", "windsurf", "codex", "all"]))
29
+ .default(["all"])
30
+ .describe("Which AI coding platforms to generate configuration for. 'all' generates for all supported platforms."),
31
+ }).strict();
32
+
33
+ export const GenerateClaudeMDInputSchema = z.object({
34
+ project_path: ProjectPathSchema,
35
+ scope: z.enum(["root", "subdir"]).default("root").describe("Whether this is the root or subdirectory CLAUDE.md"),
36
+ tech_stack: z.array(TechStackSchema).optional().describe("Tech stack override; auto-detected if omitted"),
37
+ merge_existing: z.boolean().default(false).describe("Whether to merge with an existing CLAUDE.md"),
38
+ }).strict();
39
+
40
+ export const CreateSkillInputSchema = z.object({
41
+ name: z.string().min(1).max(64).describe("Skill name (max 64 chars, lowercase with hyphens)"),
42
+ description: z.string().min(1).max(200).describe("Skill description (max 200 chars)"),
43
+ invocation: z.enum(["user", "auto", "both"]).default("user").describe("How the skill is triggered"),
44
+ context: z.enum(["inline", "fork"]).default("inline").describe("Whether skill runs inline or in forked context"),
45
+ agent_type: z.string().optional().describe("Agent type hint for forked skills"),
46
+ allowed_tools: z.array(z.string()).optional().default([]).describe("List of tools the skill can use"),
47
+ }).strict();
48
+
49
+ export const CreateAgentInputSchema = z.object({
50
+ name: z.string().min(1).max(64).describe("Agent name (lowercase with hyphens)"),
51
+ description: z.string().min(1).max(200).describe("Agent description"),
52
+ role: z.enum(["explore", "plan", "general", "custom"]).default("general").describe("Agent role type"),
53
+ allowed_tools: z.array(z.string()).optional().default([]).describe("Tools the agent can access"),
54
+ model_hint: z.string().optional().describe("Preferred model hint"),
55
+ }).strict();
56
+
57
+ export const CreateHookInputSchema = z.object({
58
+ event: HookEventSchema.describe("Claude Code lifecycle event to hook into"),
59
+ matcher: z.string().optional().describe("Regex pattern to match (e.g., tool name for PreToolCall)"),
60
+ command: z.string().min(1).describe("Shell command to execute"),
61
+ exit_behavior: z.enum(["block", "notify"]).default("block").describe("What to do on non-zero exit"),
62
+ description: z.string().min(1).describe("Human-readable description of the hook"),
63
+ }).strict();
64
+
65
+ export const CreateCommandInputSchema = z.object({
66
+ name: z.string().min(1).max(64).describe("Command name (used as /command-name)"),
67
+ description: z.string().min(1).max(200).describe("Command description"),
68
+ prompt_body: z.string().min(1).describe("The prompt template body for the command"),
69
+ arguments: z
70
+ .array(
71
+ z.object({
72
+ name: z.string(),
73
+ description: z.string(),
74
+ required: z.boolean().default(true),
75
+ }).strict()
76
+ )
77
+ .optional()
78
+ .default([])
79
+ .describe("Arguments the command accepts"),
80
+ }).strict();
81
+
82
+ export const CreateKnowledgeInputSchema = z.object({
83
+ title: z.string().min(1).describe("Document title"),
84
+ category: z.enum(["adr", "runbook", "api", "schema", "style"]).describe("Document category"),
85
+ content: z.string().min(1).describe("Document content in markdown"),
86
+ tags: z.array(z.string()).optional().default([]).describe("Tags for categorization"),
87
+ }).strict();
88
+
89
+ export const CreateADRInputSchema = z.object({
90
+ title: z.string().min(1).describe("ADR title"),
91
+ status: z.enum(["proposed", "accepted", "deprecated"]).default("proposed").describe("Decision status"),
92
+ context: z.string().min(1).describe("Context and problem statement"),
93
+ decision: z.string().min(1).describe("The decision made"),
94
+ consequences: z.string().min(1).describe("Consequences of the decision"),
95
+ }).strict();
96
+
97
+ export const ListArtifactsInputSchema = z.object({
98
+ project_path: ProjectPathSchema,
99
+ type_filter: ArtifactTypeFilterSchema.optional().default("all").describe("Filter by artifact type"),
100
+ }).strict();
101
+
102
+ export const ValidateConfigInputSchema = z.object({
103
+ project_path: ProjectPathSchema,
104
+ fix_mode: z.enum(["report", "auto_fix"]).default("report").describe("Whether to report issues or auto-fix them"),
105
+ }).strict();
106
+
107
+ export const AuditContextInputSchema = z.object({
108
+ project_path: ProjectPathSchema,
109
+ }).strict();
110
+
111
+ export const ApplyComplianceInputSchema = z.object({
112
+ project_path: ProjectPathSchema,
113
+ standard: ComplianceStandardSchema.describe("Compliance standard to apply"),
114
+ scope: z.enum(["full", "hooks_only", "skills_only"]).default("full").describe("Scope of compliance artifacts"),
115
+ }).strict();
116
+
117
+ export const CreateCIWorkflowInputSchema = z.object({
118
+ repo_path: ProjectPathSchema.describe("Path to the git repository"),
119
+ review_focus: z.enum(["security", "performance", "style", "all"]).default("all").describe("Focus area for reviews"),
120
+ branch_pattern: z.string().default("main").describe("Branch pattern to trigger on"),
121
+ }).strict();
122
+
123
+ export const CreateSecurityHookInputSchema = z.object({
124
+ project_path: ProjectPathSchema,
125
+ strictness: z.enum(["standard", "strict", "paranoid"]).default("standard").describe("Security strictness level"),
126
+ }).strict();
127
+
128
+ export const GenerateMCPConfigInputSchema = z.object({
129
+ project_path: ProjectPathSchema,
130
+ services: z.array(MCPServiceSchema).min(1).describe("MCP services to configure"),
131
+ scope: z.enum(["project", "user"]).default("project").describe("Configuration scope"),
132
+ }).strict();
133
+
134
+ export const SetStrictnessInputSchema = z.object({
135
+ project_path: ProjectPathSchema,
136
+ strictness: z.enum(["standard", "strict", "paranoid"]).describe("Desired strictness level"),
137
+ output_format: z.enum(["markdown", "json"]).default("markdown").describe("Output format"),
138
+ }).strict();
139
+
140
+ export const DoctorInputSchema = z.object({
141
+ project_path: ProjectPathSchema,
142
+ output_format: z.enum(["markdown", "json"]).default("markdown").describe("Output format"),
143
+ }).strict();
144
+
145
+ export const MetricsInputSchema = z.object({
146
+ project_path: ProjectPathSchema,
147
+ action: z.enum(["view", "record"]).default("view").describe("View history or record new score"),
148
+ output_format: z.enum(["markdown", "json"]).default("markdown").describe("Output format"),
149
+ }).strict();
150
+
151
+ export const BadgeInputSchema = z.object({
152
+ project_path: ProjectPathSchema,
153
+ style: z.enum(["flat", "flat-square", "plastic"]).default("flat").describe("Badge style"),
154
+ output_format: z.enum(["svg", "json"]).default("svg").describe("Output format"),
155
+ }).strict();
156
+
157
+ export const CustomRulesInputSchema = z.object({
158
+ project_path: ProjectPathSchema,
159
+ action: z.enum(["list", "init", "evaluate"]).default("list").describe("Action to perform"),
160
+ output_format: z.enum(["markdown", "json"]).default("markdown").describe("Output format"),
161
+ }).strict();