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.
- package/.claude/agents/template-writer.md +43 -0
- package/.claude/agents/test-runner.md +47 -0
- package/.claude/mcp.json +9 -0
- package/.claude/settings.json +29 -0
- package/.claude/skills/ /SKILL.md +21 -0
- package/.claude/skills/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/SKILL.md +21 -0
- package/.claude/skills/bmmibwetxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibwjgvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibwsesxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibwxufxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibx3r9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmji0lrkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjiniphxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjio86zxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjiolfbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjit1lvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjita1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibweu3/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibwjh4/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibwsey/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibwxup/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibx3rg/SKILL.md +21 -0
- package/.claude/skills/bnd-mmji0lrp/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjinipm/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjio875/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjiolfg/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjit1m3/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjita1x/SKILL.md +21 -0
- package/.claude/skills/coercion-test/SKILL.md +50 -0
- package/.claude/skills/large-skill/SKILL.md +21 -0
- package/.claude/skills/long-desc-skill/SKILL.md +21 -0
- package/.claude/skills/mcp-dev/SKILL.md +61 -0
- package/.claude/skills/nl-mmibweus/SKILL.md +25 -0
- package/.claude/skills/nl-mmibwjhf/SKILL.md +25 -0
- package/.claude/skills/nl-mmibwsf7/SKILL.md +25 -0
- package/.claude/skills/nl-mmibwxvq/SKILL.md +25 -0
- package/.claude/skills/nl-mmibx3rt/SKILL.md +25 -0
- package/.claude/skills/nl-mmji0lrz/SKILL.md +25 -0
- package/.claude/skills/nl-mmjinipx/SKILL.md +25 -0
- package/.claude/skills/nl-mmjio87f/SKILL.md +25 -0
- package/.claude/skills/nl-mmjiolfs/SKILL.md +25 -0
- package/.claude/skills/nl-mmjit1mc/SKILL.md +25 -0
- package/.claude/skills/nl-mmjita26/SKILL.md +25 -0
- package/.claude/skills/rapid-1/SKILL.md +21 -0
- package/.claude/skills/rapid-2/SKILL.md +21 -0
- package/.claude/skills/rapid-3/SKILL.md +21 -0
- package/.claude/skills/rapid-4/SKILL.md +21 -0
- package/.claude/skills/rapid-5/SKILL.md +21 -0
- package/.claude/skills/test/", /"malicious/": /"true/SKILL.md" +69 -0
- package/.claude/skills/test-emoji-/360/237/230/200-skill/SKILL.md +69 -0
- package/.claude/skills/test-skill/SKILL.md +69 -0
- package/.claude/skills/test; rm -rf /; skill/SKILL.md +69 -0
- package/.claude/skills/test<script>alert(1)</script>skill/SKILL.md +69 -0
- package/.claudeignore +5 -0
- package/.mcp.json +3 -0
- package/CHANGELOG.md +29 -0
- package/CLAUDE.md +76 -0
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/ROADMAP.md +526 -0
- package/ccboot-PRD-v1.0.docx.md +732 -0
- package/ccboot-v1.2.0-enforcement-spec.md +1272 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +674 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +25 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +118 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/common.d.ts +62 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +15 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/scaffolding.d.ts +277 -0
- package/dist/schemas/scaffolding.d.ts.map +1 -0
- package/dist/schemas/scaffolding.js +133 -0
- package/dist/schemas/scaffolding.js.map +1 -0
- package/dist/services/claudemd-generator.d.ts +16 -0
- package/dist/services/claudemd-generator.d.ts.map +1 -0
- package/dist/services/claudemd-generator.js +426 -0
- package/dist/services/claudemd-generator.js.map +1 -0
- package/dist/services/codex-generator.d.ts +6 -0
- package/dist/services/codex-generator.d.ts.map +1 -0
- package/dist/services/codex-generator.js +35 -0
- package/dist/services/codex-generator.js.map +1 -0
- package/dist/services/cursor-generator.d.ts +15 -0
- package/dist/services/cursor-generator.d.ts.map +1 -0
- package/dist/services/cursor-generator.js +134 -0
- package/dist/services/cursor-generator.js.map +1 -0
- package/dist/services/file-ops.d.ts +48 -0
- package/dist/services/file-ops.d.ts.map +1 -0
- package/dist/services/file-ops.js +153 -0
- package/dist/services/file-ops.js.map +1 -0
- package/dist/services/output-formatter.d.ts +57 -0
- package/dist/services/output-formatter.d.ts.map +1 -0
- package/dist/services/output-formatter.js +88 -0
- package/dist/services/output-formatter.js.map +1 -0
- package/dist/services/platform-detect.d.ts +14 -0
- package/dist/services/platform-detect.d.ts.map +1 -0
- package/dist/services/platform-detect.js +63 -0
- package/dist/services/platform-detect.js.map +1 -0
- package/dist/services/project-analyzer.d.ts +71 -0
- package/dist/services/project-analyzer.d.ts.map +1 -0
- package/dist/services/project-analyzer.js +595 -0
- package/dist/services/project-analyzer.js.map +1 -0
- package/dist/services/rules-engine.d.ts +41 -0
- package/dist/services/rules-engine.d.ts.map +1 -0
- package/dist/services/rules-engine.js +304 -0
- package/dist/services/rules-engine.js.map +1 -0
- package/dist/services/strictness.d.ts +37 -0
- package/dist/services/strictness.d.ts.map +1 -0
- package/dist/services/strictness.js +182 -0
- package/dist/services/strictness.js.map +1 -0
- package/dist/services/template-engine.d.ts +16 -0
- package/dist/services/template-engine.d.ts.map +1 -0
- package/dist/services/template-engine.js +85 -0
- package/dist/services/template-engine.js.map +1 -0
- package/dist/services/validation.d.ts +41 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +104 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/services/windsurf-generator.d.ts +15 -0
- package/dist/services/windsurf-generator.d.ts.map +1 -0
- package/dist/services/windsurf-generator.js +127 -0
- package/dist/services/windsurf-generator.js.map +1 -0
- package/dist/tests/enforcement.test.d.ts +2 -0
- package/dist/tests/enforcement.test.d.ts.map +1 -0
- package/dist/tests/enforcement.test.js +541 -0
- package/dist/tests/enforcement.test.js.map +1 -0
- package/dist/tests/enterprise.test.d.ts +2 -0
- package/dist/tests/enterprise.test.d.ts.map +1 -0
- package/dist/tests/enterprise.test.js +353 -0
- package/dist/tests/enterprise.test.js.map +1 -0
- package/dist/tests/fuzzing.test.d.ts +2 -0
- package/dist/tests/fuzzing.test.d.ts.map +1 -0
- package/dist/tests/fuzzing.test.js +596 -0
- package/dist/tests/fuzzing.test.js.map +1 -0
- package/dist/tests/knowledge.test.d.ts +2 -0
- package/dist/tests/knowledge.test.d.ts.map +1 -0
- package/dist/tests/knowledge.test.js +292 -0
- package/dist/tests/knowledge.test.js.map +1 -0
- package/dist/tests/management.test.d.ts +2 -0
- package/dist/tests/management.test.d.ts.map +1 -0
- package/dist/tests/management.test.js +338 -0
- package/dist/tests/management.test.js.map +1 -0
- package/dist/tests/scaffolding.test.d.ts +2 -0
- package/dist/tests/scaffolding.test.d.ts.map +1 -0
- package/dist/tests/scaffolding.test.js +419 -0
- package/dist/tests/scaffolding.test.js.map +1 -0
- package/dist/tests/test-utils.d.ts +76 -0
- package/dist/tests/test-utils.d.ts.map +1 -0
- package/dist/tests/test-utils.js +171 -0
- package/dist/tests/test-utils.js.map +1 -0
- package/dist/tests/tool-harness.d.ts +18 -0
- package/dist/tests/tool-harness.d.ts.map +1 -0
- package/dist/tests/tool-harness.js +51 -0
- package/dist/tests/tool-harness.js.map +1 -0
- package/dist/tools/enterprise.d.ts +8 -0
- package/dist/tools/enterprise.d.ts.map +1 -0
- package/dist/tools/enterprise.js +571 -0
- package/dist/tools/enterprise.js.map +1 -0
- package/dist/tools/knowledge.d.ts +7 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +120 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/management.d.ts +10 -0
- package/dist/tools/management.d.ts.map +1 -0
- package/dist/tools/management.js +1541 -0
- package/dist/tools/management.js.map +1 -0
- package/dist/tools/scaffolding.d.ts +8 -0
- package/dist/tools/scaffolding.d.ts.map +1 -0
- package/dist/tools/scaffolding.js +736 -0
- package/dist/tools/scaffolding.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/landing/app/layout.tsx +30 -0
- package/landing/app/page.tsx +944 -0
- package/landing/next-env.d.ts +6 -0
- package/landing/next.config.js +6 -0
- package/landing/package-lock.json +896 -0
- package/landing/package.json +20 -0
- package/landing/tsconfig.json +40 -0
- package/package.json +49 -0
- package/rebar-v2.0.0-platform-spec.md +1567 -0
- package/server.json +20 -0
- package/src/cli.ts +735 -0
- package/src/constants.ts +131 -0
- package/src/index.ts +54 -0
- package/src/schemas/common.ts +22 -0
- package/src/schemas/scaffolding.ts +161 -0
- package/src/services/claudemd-generator.ts +481 -0
- package/src/services/codex-generator.ts +44 -0
- package/src/services/cursor-generator.ts +153 -0
- package/src/services/file-ops.ts +172 -0
- package/src/services/platform-detect.ts +80 -0
- package/src/services/project-analyzer.ts +690 -0
- package/src/services/rules-engine.ts +353 -0
- package/src/services/strictness.ts +202 -0
- package/src/services/template-engine.ts +119 -0
- package/src/services/validation.ts +138 -0
- package/src/services/windsurf-generator.ts +145 -0
- package/src/tests/enforcement.test.ts +794 -0
- package/src/tests/enterprise.test.ts +483 -0
- package/src/tests/fuzzing.test.ts +690 -0
- package/src/tests/knowledge.test.ts +371 -0
- package/src/tests/management.test.ts +451 -0
- package/src/tests/scaffolding.test.ts +575 -0
- package/src/tests/test-utils.ts +206 -0
- package/src/tests/tool-harness.ts +70 -0
- package/src/tools/enterprise.ts +666 -0
- package/src/tools/knowledge.ts +162 -0
- package/src/tools/management.ts +1706 -0
- package/src/tools/scaffolding.ts +909 -0
- package/src/types.ts +93 -0
- package/supabase/.temp/cli-latest +1 -0
- package/supabase/.temp/gotrue-version +1 -0
- package/supabase/.temp/pooler-url +1 -0
- package/supabase/.temp/postgres-version +1 -0
- package/supabase/.temp/project-ref +1 -0
- package/supabase/.temp/rest-version +1 -0
- package/supabase/.temp/storage-migration +1 -0
- package/supabase/.temp/storage-version +1 -0
- package/templates/agents/explore.md +41 -0
- package/templates/agents/plan.md +73 -0
- package/templates/agents/security-auditor.md +77 -0
- package/templates/agents/test-runner.md +60 -0
- package/templates/claudemd/fastapi.md +49 -0
- package/templates/claudemd/monorepo.md +48 -0
- package/templates/claudemd/nextjs.md +52 -0
- package/templates/claudemd/react-spa.md +50 -0
- package/templates/claudemd/springboot.md +50 -0
- package/templates/hooks/danger-blocker.json +11 -0
- package/templates/hooks/format-on-write.json +17 -0
- package/templates/hooks/lint-on-write.json +16 -0
- package/templates/hooks/secret-detector.json +11 -0
- package/templates/skills/code-review.md +68 -0
- package/templates/skills/documentation.md +62 -0
- package/templates/skills/performance-audit.md +80 -0
- package/templates/skills/security-scan.md +66 -0
- package/templates/skills/test-writer.md +56 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.test.d.ts","sourceRoot":"","sources":["../../src/tests/knowledge.test.ts"],"names":[],"mappings":""}
|