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,596 @@
1
+ /**
2
+ * Input fuzzing tests for rebar-mcp tools
3
+ * Tests edge cases, boundary conditions, and malformed inputs
4
+ */
5
+ import { describe, it, before } from "node:test";
6
+ import * as assert from "node:assert";
7
+ import { createTestDir, createMockProject, assertToolSuccess, assertToolError, getToolResultText, } from "./test-utils.js";
8
+ import { initializeTools, invokeTool } from "./tool-harness.js";
9
+ // Initialize tools before all tests
10
+ before(() => {
11
+ initializeTools();
12
+ });
13
+ describe("Input Fuzzing: Path Traversal", () => {
14
+ it("should reject path traversal attempts with ../", async () => {
15
+ const { path: testDir, cleanup } = await createTestDir();
16
+ try {
17
+ await createMockProject(testDir);
18
+ const result = await invokeTool("rebar_init_project", {
19
+ project_path: testDir + "/../../../etc",
20
+ });
21
+ // Should either error or resolve to safe path
22
+ const text = getToolResultText(result);
23
+ assert.ok(!text.includes("/etc") || result.isError, "Should not allow access to /etc");
24
+ }
25
+ finally {
26
+ await cleanup();
27
+ }
28
+ });
29
+ it("should handle absolute paths outside project", async () => {
30
+ const { path: testDir, cleanup } = await createTestDir();
31
+ try {
32
+ await createMockProject(testDir);
33
+ const result = await invokeTool("rebar_create_skill", {
34
+ name: "test-skill",
35
+ description: "A test skill",
36
+ instructions: "Do things",
37
+ project_path: "/tmp/nonexistent-path-12345",
38
+ });
39
+ // Tool may create directory or fail - both are acceptable
40
+ // Key is that it doesn't crash
41
+ const text = getToolResultText(result);
42
+ assert.ok(text.length > 0, "Should return some response");
43
+ }
44
+ finally {
45
+ await cleanup();
46
+ }
47
+ });
48
+ });
49
+ describe("Input Fuzzing: Empty and Null Values", () => {
50
+ it("should reject empty skill name", async () => {
51
+ const { path: testDir, cleanup } = await createTestDir();
52
+ try {
53
+ await createMockProject(testDir);
54
+ const result = await invokeTool("rebar_create_skill", {
55
+ name: "",
56
+ description: "A test skill",
57
+ instructions: "Do things",
58
+ project_path: testDir,
59
+ });
60
+ assertToolError(result);
61
+ const text = getToolResultText(result);
62
+ assert.ok(text.toLowerCase().includes("name") || text.toLowerCase().includes("required") || text.toLowerCase().includes("empty"), "Should mention name validation issue");
63
+ }
64
+ finally {
65
+ await cleanup();
66
+ }
67
+ });
68
+ it("should handle whitespace-only name", async () => {
69
+ const { path: testDir, cleanup } = await createTestDir();
70
+ try {
71
+ await createMockProject(testDir);
72
+ const result = await invokeTool("rebar_create_skill", {
73
+ name: " ",
74
+ description: "A test skill",
75
+ instructions: "Do things",
76
+ project_path: testDir,
77
+ });
78
+ // Tool should either reject or sanitize whitespace name
79
+ // Key is that it doesn't crash and returns a response
80
+ const text = getToolResultText(result);
81
+ assert.ok(text.length > 0, "Should return some response");
82
+ }
83
+ finally {
84
+ await cleanup();
85
+ }
86
+ });
87
+ it("should handle empty description gracefully", async () => {
88
+ const { path: testDir, cleanup } = await createTestDir();
89
+ try {
90
+ await createMockProject(testDir);
91
+ const result = await invokeTool("rebar_create_skill", {
92
+ name: "test-skill",
93
+ description: "",
94
+ instructions: "Do things",
95
+ project_path: testDir,
96
+ });
97
+ // Either should succeed with default or error with clear message
98
+ const text = getToolResultText(result);
99
+ assert.ok(text.length > 0, "Should return some response");
100
+ }
101
+ finally {
102
+ await cleanup();
103
+ }
104
+ });
105
+ });
106
+ describe("Input Fuzzing: Boundary Length Values", () => {
107
+ it("should handle skill name exceeding 64 characters", async () => {
108
+ const { path: testDir, cleanup } = await createTestDir();
109
+ try {
110
+ await createMockProject(testDir);
111
+ const longName = "a".repeat(65);
112
+ const result = await invokeTool("rebar_create_skill", {
113
+ name: longName,
114
+ description: "A test skill",
115
+ instructions: "Do things",
116
+ project_path: testDir,
117
+ });
118
+ // Tool should either reject or accept long name without crashing
119
+ const text = getToolResultText(result);
120
+ assert.ok(text.length > 0, "Should return some response");
121
+ }
122
+ finally {
123
+ await cleanup();
124
+ }
125
+ });
126
+ it("should handle description exceeding 200 characters", async () => {
127
+ const { path: testDir, cleanup } = await createTestDir();
128
+ try {
129
+ await createMockProject(testDir);
130
+ const longDescription = "a".repeat(201);
131
+ const result = await invokeTool("rebar_create_skill", {
132
+ name: "long-desc-skill",
133
+ description: longDescription,
134
+ instructions: "Do things",
135
+ project_path: testDir,
136
+ });
137
+ // Tool should either reject or accept long description without crashing
138
+ const text = getToolResultText(result);
139
+ assert.ok(text.length > 0, "Should return some response");
140
+ }
141
+ finally {
142
+ await cleanup();
143
+ }
144
+ });
145
+ it("should handle exactly 64 character name (boundary)", async () => {
146
+ const { path: testDir, cleanup } = await createTestDir();
147
+ try {
148
+ await createMockProject(testDir);
149
+ // Use a unique prefix to avoid conflicts
150
+ const uniquePrefix = `b${Date.now().toString(36)}`;
151
+ const exactName = (uniquePrefix + "x".repeat(64)).substring(0, 64);
152
+ const result = await invokeTool("rebar_create_skill", {
153
+ name: exactName,
154
+ description: "A test skill",
155
+ instructions: "Do things",
156
+ project_path: testDir,
157
+ });
158
+ // Should succeed at exact boundary
159
+ assertToolSuccess(result);
160
+ }
161
+ finally {
162
+ await cleanup();
163
+ }
164
+ });
165
+ it("should handle exactly 200 character description (boundary)", async () => {
166
+ const { path: testDir, cleanup } = await createTestDir();
167
+ try {
168
+ await createMockProject(testDir);
169
+ // Use a unique name to avoid conflicts
170
+ const uniqueName = `bnd-${Date.now().toString(36)}`;
171
+ const exactDescription = "a".repeat(200);
172
+ const result = await invokeTool("rebar_create_skill", {
173
+ name: uniqueName,
174
+ description: exactDescription,
175
+ instructions: "Do things",
176
+ project_path: testDir,
177
+ });
178
+ // Should succeed at exact boundary
179
+ assertToolSuccess(result);
180
+ }
181
+ finally {
182
+ await cleanup();
183
+ }
184
+ });
185
+ });
186
+ describe("Input Fuzzing: Special Characters", () => {
187
+ it("should sanitize skill names with special characters", async () => {
188
+ const { path: testDir, cleanup } = await createTestDir();
189
+ try {
190
+ await createMockProject(testDir);
191
+ const result = await invokeTool("rebar_create_skill", {
192
+ name: "test<script>alert(1)</script>skill",
193
+ description: "A test skill",
194
+ instructions: "Do things",
195
+ project_path: testDir,
196
+ });
197
+ // Should either sanitize or reject
198
+ if (!result.isError) {
199
+ const text = getToolResultText(result);
200
+ assert.ok(!text.includes("<script>"), "Should not contain raw script tags in output");
201
+ }
202
+ }
203
+ finally {
204
+ await cleanup();
205
+ }
206
+ });
207
+ it("should handle unicode characters in name", async () => {
208
+ const { path: testDir, cleanup } = await createTestDir();
209
+ try {
210
+ await createMockProject(testDir);
211
+ const result = await invokeTool("rebar_create_skill", {
212
+ name: "test-emoji-\u{1F600}-skill",
213
+ description: "A skill with emoji",
214
+ instructions: "Do things",
215
+ project_path: testDir,
216
+ });
217
+ // Should either work or fail gracefully
218
+ const text = getToolResultText(result);
219
+ assert.ok(text.length > 0, "Should return some response");
220
+ }
221
+ finally {
222
+ await cleanup();
223
+ }
224
+ });
225
+ it("should handle newlines in description", async () => {
226
+ const { path: testDir, cleanup } = await createTestDir();
227
+ try {
228
+ await createMockProject(testDir);
229
+ // Use a unique name to avoid conflicts
230
+ const uniqueName = `nl-${Date.now().toString(36)}`;
231
+ const result = await invokeTool("rebar_create_skill", {
232
+ name: uniqueName,
233
+ description: "Line one\nLine two\nLine three",
234
+ instructions: "Do things",
235
+ project_path: testDir,
236
+ });
237
+ // Newlines in description should be handled
238
+ assertToolSuccess(result);
239
+ }
240
+ finally {
241
+ await cleanup();
242
+ }
243
+ });
244
+ it("should handle shell metacharacters in name", async () => {
245
+ const { path: testDir, cleanup } = await createTestDir();
246
+ try {
247
+ await createMockProject(testDir);
248
+ const result = await invokeTool("rebar_create_skill", {
249
+ name: "test; rm -rf /; skill",
250
+ description: "A test skill",
251
+ instructions: "Do things",
252
+ project_path: testDir,
253
+ });
254
+ // Should sanitize or reject, never execute
255
+ if (!result.isError) {
256
+ const text = getToolResultText(result);
257
+ assert.ok(!text.includes("rm -rf"), "Should not contain shell commands in output");
258
+ }
259
+ }
260
+ finally {
261
+ await cleanup();
262
+ }
263
+ });
264
+ });
265
+ describe("Input Fuzzing: Invalid Enum Values", () => {
266
+ it("should handle invalid template type", async () => {
267
+ const { path: testDir, cleanup } = await createTestDir();
268
+ try {
269
+ await createMockProject(testDir);
270
+ const result = await invokeTool("rebar_generate_claudemd", {
271
+ project_path: testDir,
272
+ template: "invalid-template-type",
273
+ });
274
+ // Should either use default or return error, not crash
275
+ const text = getToolResultText(result);
276
+ assert.ok(text.length > 0, "Should return some response");
277
+ }
278
+ finally {
279
+ await cleanup();
280
+ }
281
+ });
282
+ it("should handle invalid compliance standard", async () => {
283
+ const { path: testDir, cleanup } = await createTestDir();
284
+ try {
285
+ await createMockProject(testDir, {
286
+ existingClaudeMd: "# Test\n",
287
+ });
288
+ const result = await invokeTool("rebar_apply_compliance", {
289
+ project_path: testDir,
290
+ standard: "invalid-standard",
291
+ scope: "full",
292
+ });
293
+ // Should either reject or use default, not crash
294
+ const text = getToolResultText(result);
295
+ assert.ok(text.length > 0, "Should return some response");
296
+ }
297
+ finally {
298
+ await cleanup();
299
+ }
300
+ });
301
+ it("should handle invalid hook event", async () => {
302
+ const { path: testDir, cleanup } = await createTestDir();
303
+ try {
304
+ await createMockProject(testDir);
305
+ const result = await invokeTool("rebar_create_hook", {
306
+ event: "InvalidEvent",
307
+ command: "echo test",
308
+ description: "A test hook",
309
+ project_path: testDir,
310
+ });
311
+ // Should either reject invalid event or handle gracefully
312
+ const text = getToolResultText(result);
313
+ assert.ok(text.length > 0, "Should return some response");
314
+ }
315
+ finally {
316
+ await cleanup();
317
+ }
318
+ });
319
+ it("should handle invalid output format", async () => {
320
+ const { path: testDir, cleanup } = await createTestDir();
321
+ try {
322
+ await createMockProject(testDir, {
323
+ existingClaudeMd: "# Test\n",
324
+ });
325
+ const result = await invokeTool("rebar_list_artifacts", {
326
+ project_path: testDir,
327
+ output_format: "xml",
328
+ });
329
+ // Should either use default format or return error
330
+ const text = getToolResultText(result);
331
+ assert.ok(text.length > 0, "Should return some response");
332
+ }
333
+ finally {
334
+ await cleanup();
335
+ }
336
+ });
337
+ });
338
+ describe("Input Fuzzing: Type Coercion", () => {
339
+ it("should handle array where string expected", async () => {
340
+ const { path: testDir, cleanup } = await createTestDir();
341
+ try {
342
+ await createMockProject(testDir);
343
+ // Note: This may throw if the tool doesn't validate types before using them
344
+ // The test documents this behavior
345
+ try {
346
+ const result = await invokeTool("rebar_create_skill", {
347
+ name: ["not", "a", "string"],
348
+ description: "A test skill",
349
+ instructions: "Do things",
350
+ project_path: testDir,
351
+ });
352
+ // If we get here, tool handled it gracefully
353
+ const text = getToolResultText(result);
354
+ assert.ok(text.length > 0, "Should return some response");
355
+ }
356
+ catch (err) {
357
+ // Tool threw an error - this is acceptable (documented behavior)
358
+ assert.ok(err instanceof Error, "Should throw a proper error");
359
+ }
360
+ }
361
+ finally {
362
+ await cleanup();
363
+ }
364
+ });
365
+ it("should handle object where string expected", async () => {
366
+ const { path: testDir, cleanup } = await createTestDir();
367
+ try {
368
+ await createMockProject(testDir);
369
+ try {
370
+ const result = await invokeTool("rebar_create_skill", {
371
+ name: { key: "value" },
372
+ description: "A test skill",
373
+ instructions: "Do things",
374
+ project_path: testDir,
375
+ });
376
+ const text = getToolResultText(result);
377
+ assert.ok(text.length > 0, "Should return some response");
378
+ }
379
+ catch (err) {
380
+ assert.ok(err instanceof Error, "Should throw a proper error");
381
+ }
382
+ }
383
+ finally {
384
+ await cleanup();
385
+ }
386
+ });
387
+ it("should handle number where string expected", async () => {
388
+ const { path: testDir, cleanup } = await createTestDir();
389
+ try {
390
+ await createMockProject(testDir);
391
+ try {
392
+ const result = await invokeTool("rebar_create_skill", {
393
+ name: 12345,
394
+ description: "A test skill",
395
+ instructions: "Do things",
396
+ project_path: testDir,
397
+ });
398
+ const text = getToolResultText(result);
399
+ assert.ok(text.length > 0, "Should return some response");
400
+ }
401
+ catch (err) {
402
+ assert.ok(err instanceof Error, "Should throw a proper error");
403
+ }
404
+ }
405
+ finally {
406
+ await cleanup();
407
+ }
408
+ });
409
+ it("should handle string boolean for dry_run", async () => {
410
+ const { path: testDir, cleanup } = await createTestDir();
411
+ try {
412
+ await createMockProject(testDir);
413
+ const result = await invokeTool("rebar_create_skill", {
414
+ name: "coercion-test",
415
+ description: "A test skill",
416
+ instructions: "Do things",
417
+ project_path: testDir,
418
+ dry_run: "true",
419
+ });
420
+ // Should either coerce or reject, not crash
421
+ const text = getToolResultText(result);
422
+ assert.ok(text.length > 0, "Should return some response");
423
+ }
424
+ finally {
425
+ await cleanup();
426
+ }
427
+ });
428
+ });
429
+ describe("Input Fuzzing: Missing Required Fields", () => {
430
+ it("should handle missing project_path", async () => {
431
+ try {
432
+ const result = await invokeTool("rebar_list_artifacts", {});
433
+ // If we get here, tool handled it gracefully
434
+ const text = getToolResultText(result);
435
+ assert.ok(text.length > 0, "Should return some response");
436
+ }
437
+ catch (err) {
438
+ // Tool threw an error - acceptable for missing required field
439
+ assert.ok(err instanceof Error, "Should throw a proper error");
440
+ }
441
+ });
442
+ it("should handle missing name for create_skill", async () => {
443
+ const { path: testDir, cleanup } = await createTestDir();
444
+ try {
445
+ await createMockProject(testDir);
446
+ try {
447
+ const result = await invokeTool("rebar_create_skill", {
448
+ description: "A test skill",
449
+ instructions: "Do things",
450
+ project_path: testDir,
451
+ });
452
+ // If we get here, tool handled it gracefully
453
+ const text = getToolResultText(result);
454
+ assert.ok(text.length > 0, "Should return some response");
455
+ }
456
+ catch (err) {
457
+ // Tool threw an error - acceptable for missing required field
458
+ assert.ok(err instanceof Error, "Should throw a proper error");
459
+ }
460
+ }
461
+ finally {
462
+ await cleanup();
463
+ }
464
+ });
465
+ });
466
+ describe("Input Fuzzing: Extremely Large Inputs", () => {
467
+ it("should handle very large instructions gracefully", async () => {
468
+ const { path: testDir, cleanup } = await createTestDir();
469
+ try {
470
+ await createMockProject(testDir);
471
+ // 100KB of instructions
472
+ const largeInstructions = "x".repeat(100 * 1024);
473
+ const result = await invokeTool("rebar_create_skill", {
474
+ name: "large-skill",
475
+ description: "A skill with large instructions",
476
+ instructions: largeInstructions,
477
+ project_path: testDir,
478
+ });
479
+ // Should either succeed or fail gracefully with size limit message
480
+ const text = getToolResultText(result);
481
+ assert.ok(text.length > 0, "Should return some response");
482
+ }
483
+ finally {
484
+ await cleanup();
485
+ }
486
+ });
487
+ it("should handle very long file path", async () => {
488
+ const { path: testDir, cleanup } = await createTestDir();
489
+ try {
490
+ await createMockProject(testDir);
491
+ // Very long nested path
492
+ const longPath = testDir + "/" + "a".repeat(200) + "/" + "b".repeat(200);
493
+ const result = await invokeTool("rebar_init_project", {
494
+ project_path: longPath,
495
+ });
496
+ // Should either fail gracefully or succeed - key is not crashing
497
+ const text = getToolResultText(result);
498
+ assert.ok(text.length > 0, "Should return some response");
499
+ }
500
+ finally {
501
+ await cleanup();
502
+ }
503
+ });
504
+ });
505
+ describe("Input Fuzzing: Concurrent Operations", () => {
506
+ it("should handle rapid sequential calls", async () => {
507
+ const { path: testDir, cleanup } = await createTestDir();
508
+ try {
509
+ await createMockProject(testDir);
510
+ // Rapid fire 5 skill creations
511
+ const results = await Promise.all([
512
+ invokeTool("rebar_create_skill", {
513
+ name: "rapid-1",
514
+ description: "Rapid test 1",
515
+ instructions: "Test",
516
+ project_path: testDir,
517
+ }),
518
+ invokeTool("rebar_create_skill", {
519
+ name: "rapid-2",
520
+ description: "Rapid test 2",
521
+ instructions: "Test",
522
+ project_path: testDir,
523
+ }),
524
+ invokeTool("rebar_create_skill", {
525
+ name: "rapid-3",
526
+ description: "Rapid test 3",
527
+ instructions: "Test",
528
+ project_path: testDir,
529
+ }),
530
+ invokeTool("rebar_create_skill", {
531
+ name: "rapid-4",
532
+ description: "Rapid test 4",
533
+ instructions: "Test",
534
+ project_path: testDir,
535
+ }),
536
+ invokeTool("rebar_create_skill", {
537
+ name: "rapid-5",
538
+ description: "Rapid test 5",
539
+ instructions: "Test",
540
+ project_path: testDir,
541
+ }),
542
+ ]);
543
+ // All should complete without crashing
544
+ for (const result of results) {
545
+ const text = getToolResultText(result);
546
+ assert.ok(text.length > 0, "Each call should return a response");
547
+ }
548
+ }
549
+ finally {
550
+ await cleanup();
551
+ }
552
+ });
553
+ });
554
+ describe("Input Fuzzing: JSON Injection", () => {
555
+ it("should handle JSON-like strings in inputs", async () => {
556
+ const { path: testDir, cleanup } = await createTestDir();
557
+ try {
558
+ await createMockProject(testDir);
559
+ const result = await invokeTool("rebar_create_skill", {
560
+ name: 'test", "malicious": "true',
561
+ description: '{"injected": true}',
562
+ instructions: '[{"cmd": "rm -rf"}]',
563
+ project_path: testDir,
564
+ });
565
+ // Should sanitize or reject, not break JSON parsing
566
+ const text = getToolResultText(result);
567
+ assert.ok(text.length > 0, "Should return some response");
568
+ }
569
+ finally {
570
+ await cleanup();
571
+ }
572
+ });
573
+ });
574
+ describe("Input Fuzzing: Null Bytes", () => {
575
+ it("should handle null bytes in inputs", async () => {
576
+ const { path: testDir, cleanup } = await createTestDir();
577
+ try {
578
+ await createMockProject(testDir);
579
+ const result = await invokeTool("rebar_create_skill", {
580
+ name: "test\x00skill",
581
+ description: "A test\x00skill",
582
+ instructions: "Do\x00things",
583
+ project_path: testDir,
584
+ });
585
+ // Should sanitize or reject null bytes
586
+ if (!result.isError) {
587
+ const text = getToolResultText(result);
588
+ assert.ok(!text.includes("\x00"), "Should not contain null bytes in output");
589
+ }
590
+ }
591
+ finally {
592
+ await cleanup();
593
+ }
594
+ });
595
+ });
596
+ //# sourceMappingURL=fuzzing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzing.test.js","sourceRoot":"","sources":["../../src/tests/fuzzing.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=knowledge.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.test.d.ts","sourceRoot":"","sources":["../../src/tests/knowledge.test.ts"],"names":[],"mappings":""}