@shiftleftpt/sbd-toe-mcp 0.1.0 → 0.2.16

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 (42) hide show
  1. package/.env.example +0 -3
  2. package/README.md +136 -254
  3. package/dist/config.js +0 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/types.d.ts +0 -3
  6. package/package.json +18 -2
  7. package/dist/backend/semantic-index-gateway.test.d.ts +0 -1
  8. package/dist/backend/semantic-index-gateway.test.js +0 -384
  9. package/dist/backend/semantic-index-gateway.test.js.map +0 -1
  10. package/dist/bootstrap/checkout-backend.d.ts +0 -31
  11. package/dist/bootstrap/checkout-backend.js +0 -136
  12. package/dist/bootstrap/checkout-backend.js.map +0 -1
  13. package/dist/bootstrap/checkout-backend.test.d.ts +0 -1
  14. package/dist/bootstrap/checkout-backend.test.js +0 -158
  15. package/dist/bootstrap/checkout-backend.test.js.map +0 -1
  16. package/dist/bootstrap/release-checkout.d.ts +0 -8
  17. package/dist/bootstrap/release-checkout.js +0 -168
  18. package/dist/bootstrap/release-checkout.js.map +0 -1
  19. package/dist/bootstrap/release-checkout.test.d.ts +0 -1
  20. package/dist/bootstrap/release-checkout.test.js +0 -137
  21. package/dist/bootstrap/release-checkout.test.js.map +0 -1
  22. package/dist/resources/sbd-toe-resources.test.d.ts +0 -1
  23. package/dist/resources/sbd-toe-resources.test.js +0 -134
  24. package/dist/resources/sbd-toe-resources.test.js.map +0 -1
  25. package/dist/test-utils.d.ts +0 -153
  26. package/dist/test-utils.js +0 -176
  27. package/dist/test-utils.js.map +0 -1
  28. package/dist/tools/generate-document.test.d.ts +0 -1
  29. package/dist/tools/generate-document.test.js +0 -189
  30. package/dist/tools/generate-document.test.js.map +0 -1
  31. package/dist/tools/map-review-scope.test.d.ts +0 -1
  32. package/dist/tools/map-review-scope.test.js +0 -204
  33. package/dist/tools/map-review-scope.test.js.map +0 -1
  34. package/dist/tools/plan-repo-governance.test.d.ts +0 -1
  35. package/dist/tools/plan-repo-governance.test.js +0 -237
  36. package/dist/tools/plan-repo-governance.test.js.map +0 -1
  37. package/dist/tools/structured-tools.test.d.ts +0 -1
  38. package/dist/tools/structured-tools.test.js +0 -459
  39. package/dist/tools/structured-tools.test.js.map +0 -1
  40. package/dist/validators/ai-disclosure.test.d.ts +0 -1
  41. package/dist/validators/ai-disclosure.test.js +0 -244
  42. package/dist/validators/ai-disclosure.test.js.map +0 -1
@@ -1,204 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { handleMapSbdToeReviewScope } from "./map-review-scope.js";
3
- // ---------------------------------------------------------------------------
4
- // Helpers
5
- // ---------------------------------------------------------------------------
6
- function call(args) {
7
- return handleMapSbdToeReviewScope(args);
8
- }
9
- function bundleIds(result) {
10
- return result.bundlesToReview.map((b) => b.chapterId);
11
- }
12
- // ---------------------------------------------------------------------------
13
- // Validation — path traversal & input errors
14
- // ---------------------------------------------------------------------------
15
- describe("handleMapSbdToeReviewScope — validation", () => {
16
- it("throws rpcError -32602 for path with '..'", () => {
17
- let err;
18
- try {
19
- call({ changedFiles: ["../etc/passwd"], riskLevel: "L1" });
20
- }
21
- catch (e) {
22
- err = e;
23
- }
24
- expect(err).toBeInstanceOf(Error);
25
- expect(err.rpcError?.code).toBe(-32602);
26
- expect(err.message).toContain("..");
27
- });
28
- it("throws rpcError -32602 for path with embedded '..'", () => {
29
- let err;
30
- try {
31
- call({ changedFiles: ["src/../config.ts"], riskLevel: "L1" });
32
- }
33
- catch (e) {
34
- err = e;
35
- }
36
- expect(err).toBeInstanceOf(Error);
37
- expect(err.rpcError?.code).toBe(-32602);
38
- });
39
- it("throws rpcError -32602 for empty changedFiles array", () => {
40
- let err;
41
- try {
42
- call({ changedFiles: [], riskLevel: "L1" });
43
- }
44
- catch (e) {
45
- err = e;
46
- }
47
- expect(err).toBeInstanceOf(Error);
48
- expect(err.rpcError?.code).toBe(-32602);
49
- });
50
- it("throws rpcError -32602 for invalid riskLevel", () => {
51
- let err;
52
- try {
53
- call({ changedFiles: ["src/index.ts"], riskLevel: "L9" });
54
- }
55
- catch (e) {
56
- err = e;
57
- }
58
- expect(err).toBeInstanceOf(Error);
59
- expect(err.rpcError?.code).toBe(-32602);
60
- });
61
- it("throws rpcError -32602 when changedFiles is missing", () => {
62
- let err;
63
- try {
64
- call({ riskLevel: "L1" });
65
- }
66
- catch (e) {
67
- err = e;
68
- }
69
- expect(err).toBeInstanceOf(Error);
70
- expect(err.rpcError?.code).toBe(-32602);
71
- });
72
- });
73
- // ---------------------------------------------------------------------------
74
- // Path mapping
75
- // ---------------------------------------------------------------------------
76
- describe("handleMapSbdToeReviewScope — path mapping", () => {
77
- it("src/index.ts + .github/workflows/ci.yml (L2) → 06-desenvolvimento-seguro and 07-cicd-seguro", () => {
78
- const result = call({
79
- changedFiles: ["src/index.ts", ".github/workflows/ci.yml"],
80
- riskLevel: "L2"
81
- });
82
- const ids = bundleIds(result);
83
- expect(ids).toContain("06-desenvolvimento-seguro");
84
- expect(ids).toContain("07-cicd-seguro");
85
- });
86
- it("package.json (L1) → 05-dependencias-sbom-sca", () => {
87
- const result = call({ changedFiles: ["package.json"], riskLevel: "L1" });
88
- expect(bundleIds(result)).toContain("05-dependencias-sbom-sca");
89
- });
90
- it("src/config.ts → includes 08-iac-infraestrutura (specific rule)", () => {
91
- const result = call({ changedFiles: ["src/config.ts"], riskLevel: "L1" });
92
- expect(bundleIds(result)).toContain("08-iac-infraestrutura");
93
- });
94
- it("docs/readme.md → 14-governanca-contratacao", () => {
95
- const result = call({ changedFiles: ["docs/readme.md"], riskLevel: "L1" });
96
- expect(bundleIds(result)).toContain("14-governanca-contratacao");
97
- });
98
- it("yarn.lock → 05-dependencias-sbom-sca", () => {
99
- const result = call({ changedFiles: ["yarn.lock"], riskLevel: "L1" });
100
- expect(bundleIds(result)).toContain("05-dependencias-sbom-sca");
101
- });
102
- it("release/v1.0.tar.gz → 11-deploy-seguro", () => {
103
- const result = call({ changedFiles: ["release/v1.0.tar.gz"], riskLevel: "L1" });
104
- expect(bundleIds(result)).toContain("11-deploy-seguro");
105
- });
106
- it(".github/skills/sbd-toe-skill/SKILL.md → 13-formacao-onboarding and 14-governanca-contratacao", () => {
107
- const result = call({ changedFiles: [".github/skills/sbd-toe-skill/SKILL.md"], riskLevel: "L1" });
108
- const ids = bundleIds(result);
109
- expect(ids).toContain("13-formacao-onboarding");
110
- expect(ids).toContain("14-governanca-contratacao");
111
- });
112
- it("unmapped path triggers guardrail bundles", () => {
113
- const result = call({ changedFiles: ["random/unknown/file.txt"], riskLevel: "L1" });
114
- const ids = bundleIds(result);
115
- expect(ids).toContain("01-classificacao-aplicacoes");
116
- expect(ids).toContain("02-requisitos-seguranca");
117
- });
118
- });
119
- // ---------------------------------------------------------------------------
120
- // Deduplication
121
- // ---------------------------------------------------------------------------
122
- describe("handleMapSbdToeReviewScope — deduplication", () => {
123
- it("bundle activated by multiple paths appears only once", () => {
124
- const result = call({
125
- changedFiles: ["src/index.ts", "src/config.ts", "src/tools/structured-tools.ts"],
126
- riskLevel: "L1"
127
- });
128
- const ids = bundleIds(result);
129
- const uniqueIds = new Set(ids);
130
- expect(ids.length).toBe(uniqueIds.size);
131
- });
132
- it("reason mentions multiple files when applicable", () => {
133
- const result = call({
134
- changedFiles: ["src/index.ts", "src/tools/structured-tools.ts"],
135
- riskLevel: "L1"
136
- });
137
- const devBundle = result.bundlesToReview.find((b) => b.chapterId === "06-desenvolvimento-seguro");
138
- expect(devBundle).toBeDefined();
139
- // reason should mention both files
140
- expect(devBundle?.reason).toContain("src/index.ts");
141
- expect(devBundle?.reason).toContain("src/tools/structured-tools.ts");
142
- });
143
- });
144
- // ---------------------------------------------------------------------------
145
- // Output structure
146
- // ---------------------------------------------------------------------------
147
- describe("handleMapSbdToeReviewScope — output structure", () => {
148
- it("each bundle entry has required fields", () => {
149
- const result = call({
150
- changedFiles: ["src/index.ts", "package.json"],
151
- riskLevel: "L2"
152
- });
153
- for (const bundle of result.bundlesToReview) {
154
- expect(typeof bundle.chapterId).toBe("string");
155
- expect(typeof bundle.readableTitle).toBe("string");
156
- expect(["foundation", "domain", "operational"]).toContain(bundle.category);
157
- expect(typeof bundle.reason).toBe("string");
158
- expect(bundle.expectedEvidence.length).toBeGreaterThan(0);
159
- }
160
- });
161
- it("pathMapping covers matched patterns", () => {
162
- const result = call({
163
- changedFiles: ["src/index.ts", ".github/workflows/ci.yml", "package.json"],
164
- riskLevel: "L1"
165
- });
166
- expect(result.pathMapping.length).toBeGreaterThanOrEqual(3);
167
- });
168
- it("nextSteps is non-empty", () => {
169
- const result = call({ changedFiles: ["src/index.ts"], riskLevel: "L1" });
170
- expect(result.nextSteps.length).toBeGreaterThan(0);
171
- });
172
- it("nextSteps mentions L2+ security tests for L2", () => {
173
- const result = call({ changedFiles: ["src/index.ts"], riskLevel: "L2" });
174
- const hasL2Step = result.nextSteps.some((s) => s.includes("L2") && s.includes("SAST"));
175
- expect(hasL2Step).toBe(true);
176
- });
177
- it("nextSteps mentions L3 approval for L3", () => {
178
- const result = call({ changedFiles: ["src/index.ts"], riskLevel: "L3" });
179
- const hasL3Step = result.nextSteps.some((s) => s.includes("L3") && s.includes("aprovação"));
180
- expect(hasL3Step).toBe(true);
181
- });
182
- });
183
- // ---------------------------------------------------------------------------
184
- // Cross-platform paths
185
- // ---------------------------------------------------------------------------
186
- describe("handleMapSbdToeReviewScope — cross-platform paths", () => {
187
- it("normalizes Windows-style backslashes before matching", () => {
188
- const result = call({
189
- changedFiles: ["src\\index.ts"],
190
- riskLevel: "L1"
191
- });
192
- expect(bundleIds(result)).toContain("06-desenvolvimento-seguro");
193
- });
194
- });
195
- // ---------------------------------------------------------------------------
196
- // diffSummary truncation
197
- // ---------------------------------------------------------------------------
198
- describe("handleMapSbdToeReviewScope — diffSummary", () => {
199
- it("accepts diffSummary without error, truncated silently", () => {
200
- const longSummary = "x".repeat(1000);
201
- expect(() => call({ changedFiles: ["src/index.ts"], riskLevel: "L1", diffSummary: longSummary })).not.toThrow();
202
- });
203
- });
204
- //# sourceMappingURL=map-review-scope.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-review-scope.test.js","sourceRoot":"","sources":["../../src/tools/map-review-scope.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,237 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { handlePlanRepoGovernance } from "./plan-repo-governance.js";
3
- function call(args) {
4
- return handlePlanRepoGovernance(args);
5
- }
6
- // ---------------------------------------------------------------------------
7
- // Validation
8
- // ---------------------------------------------------------------------------
9
- describe("handlePlanRepoGovernance — validation", () => {
10
- it("throws rpcError -32602 for invalid repoType", () => {
11
- let err;
12
- try {
13
- call({ repoType: "invalid", platform: "github", riskLevel: "L1" });
14
- }
15
- catch (e) {
16
- err = e;
17
- }
18
- expect(err.rpcError?.code).toBe(-32602);
19
- expect(err.message).toContain("invalid");
20
- });
21
- it("throws rpcError -32602 for invalid platform (bitbucket)", () => {
22
- let err;
23
- try {
24
- call({ repoType: "service", platform: "bitbucket", riskLevel: "L1" });
25
- }
26
- catch (e) {
27
- err = e;
28
- }
29
- expect(err.rpcError?.code).toBe(-32602);
30
- expect(err.message).toContain("bitbucket");
31
- });
32
- it("throws rpcError -32602 for invalid riskLevel L4", () => {
33
- let err;
34
- try {
35
- call({ repoType: "service", platform: "github", riskLevel: "L4" });
36
- }
37
- catch (e) {
38
- err = e;
39
- }
40
- expect(err.rpcError?.code).toBe(-32602);
41
- });
42
- it("throws rpcError -32602 for teamSize 0", () => {
43
- let err;
44
- try {
45
- call({ repoType: "service", platform: "github", riskLevel: "L1", organizationContext: { teamSize: 0 } });
46
- }
47
- catch (e) {
48
- err = e;
49
- }
50
- expect(err.rpcError?.code).toBe(-32602);
51
- });
52
- it("throws rpcError -32602 for invalid enforcementLevel", () => {
53
- let err;
54
- try {
55
- call({ repoType: "service", platform: "github", riskLevel: "L1", organizationContext: { enforcementLevel: "brutal" } });
56
- }
57
- catch (e) {
58
- err = e;
59
- }
60
- expect(err.rpcError?.code).toBe(-32602);
61
- });
62
- it("accepts valid organizationContext without error", () => {
63
- expect(() => call({
64
- repoType: "service",
65
- platform: "github",
66
- riskLevel: "L2",
67
- organizationContext: { scale: "mid-size", teamSize: 10, enforcementLevel: "enforced" }
68
- })).not.toThrow();
69
- });
70
- });
71
- // ---------------------------------------------------------------------------
72
- // applicableControls
73
- // ---------------------------------------------------------------------------
74
- describe("handlePlanRepoGovernance — applicableControls", () => {
75
- it("any valid combination returns ≥4 controls", () => {
76
- const combos = [
77
- { repoType: "library", platform: "github", riskLevel: "L1" },
78
- { repoType: "service", platform: "gitlab", riskLevel: "L2" },
79
- { repoType: "webapp", platform: "github", riskLevel: "L3" },
80
- { repoType: "infrastructure", platform: "gitlab", riskLevel: "L1" },
81
- { repoType: "pipeline", platform: "github", riskLevel: "L2" },
82
- { repoType: "monorepo", platform: "gitlab", riskLevel: "L3" }
83
- ];
84
- for (const combo of combos) {
85
- const result = call(combo);
86
- expect(result.applicableControls.length).toBeGreaterThanOrEqual(4);
87
- }
88
- });
89
- it("each control has controlId, description, category, rationale", () => {
90
- const result = call({ repoType: "service", platform: "github", riskLevel: "L2" });
91
- const validCategories = ["access", "code-quality", "supply-chain", "secrets", "ci-cd", "audit"];
92
- for (const ctrl of result.applicableControls) {
93
- expect(typeof ctrl.controlId).toBe("string");
94
- expect(ctrl.controlId.startsWith("CTRL-")).toBe(true);
95
- expect(typeof ctrl.description).toBe("string");
96
- expect(validCategories).toContain(ctrl.category);
97
- expect(typeof ctrl.rationale).toBe("string");
98
- }
99
- });
100
- it("L1 mandatory controls are present for service/github/L1", () => {
101
- const result = call({ repoType: "service", platform: "github", riskLevel: "L1" });
102
- const ids = result.applicableControls.map((c) => c.controlId);
103
- expect(ids).toContain("CTRL-ACCESS-001");
104
- expect(ids).toContain("CTRL-QUALITY-001");
105
- expect(ids).toContain("CTRL-SECRETS-001");
106
- expect(ids).toContain("CTRL-CICD-001");
107
- });
108
- });
109
- // ---------------------------------------------------------------------------
110
- // mandatoryControls
111
- // ---------------------------------------------------------------------------
112
- describe("handlePlanRepoGovernance — mandatoryControls", () => {
113
- it("L2 has ≥5 mandatory controls", () => {
114
- const result = call({ repoType: "service", platform: "github", riskLevel: "L2" });
115
- expect(result.mandatoryControls.length).toBeGreaterThanOrEqual(5);
116
- });
117
- it("L3 has ≥10 mandatory controls", () => {
118
- const result = call({ repoType: "service", platform: "github", riskLevel: "L3" });
119
- expect(result.mandatoryControls.length).toBeGreaterThanOrEqual(10);
120
- });
121
- it("mandatoryControls is subset of applicableControls IDs", () => {
122
- const result = call({ repoType: "webapp", platform: "github", riskLevel: "L3" });
123
- const applicableIds = new Set(result.applicableControls.map((c) => c.controlId));
124
- for (const id of result.mandatoryControls) {
125
- expect(applicableIds.has(id)).toBe(true);
126
- }
127
- });
128
- it("L3 has more mandatory controls than L1", () => {
129
- const l1 = call({ repoType: "service", platform: "github", riskLevel: "L1" });
130
- const l3 = call({ repoType: "service", platform: "github", riskLevel: "L3" });
131
- expect(l3.mandatoryControls.length).toBeGreaterThan(l1.mandatoryControls.length);
132
- });
133
- });
134
- // ---------------------------------------------------------------------------
135
- // baselineCheckpoints
136
- // ---------------------------------------------------------------------------
137
- describe("handlePlanRepoGovernance — baselineCheckpoints", () => {
138
- it("always returns ≥4 checkpoints", () => {
139
- const combos = [
140
- { repoType: "service", platform: "github", riskLevel: "L1" },
141
- { repoType: "service", platform: "github", riskLevel: "L2" },
142
- { repoType: "service", platform: "github", riskLevel: "L3" }
143
- ];
144
- for (const combo of combos) {
145
- const result = call(combo);
146
- expect(result.baselineCheckpoints.length).toBeGreaterThanOrEqual(4);
147
- }
148
- });
149
- it("each checkpoint has non-empty phase and ≥1 action", () => {
150
- const result = call({ repoType: "service", platform: "gitlab", riskLevel: "L2" });
151
- for (const cp of result.baselineCheckpoints) {
152
- expect(cp.phase.length).toBeGreaterThan(0);
153
- expect(cp.actions.length).toBeGreaterThanOrEqual(1);
154
- }
155
- });
156
- it("L2+ includes incident-response checkpoint", () => {
157
- const l2 = call({ repoType: "service", platform: "github", riskLevel: "L2" });
158
- const l3 = call({ repoType: "service", platform: "github", riskLevel: "L3" });
159
- const phases = (r) => r.baselineCheckpoints.map((c) => c.phase);
160
- expect(phases(l2)).toContain("incident-response");
161
- expect(phases(l3)).toContain("incident-response");
162
- });
163
- it("L1 does NOT include incident-response checkpoint", () => {
164
- const result = call({ repoType: "service", platform: "github", riskLevel: "L1" });
165
- const phases = result.baselineCheckpoints.map((c) => c.phase);
166
- expect(phases).not.toContain("incident-response");
167
- });
168
- });
169
- // ---------------------------------------------------------------------------
170
- // evidenceChecklist
171
- // ---------------------------------------------------------------------------
172
- describe("handlePlanRepoGovernance — evidenceChecklist", () => {
173
- it("L1 returns ≥4 items", () => {
174
- const result = call({ repoType: "library", platform: "github", riskLevel: "L1" });
175
- expect(result.evidenceChecklist.length).toBeGreaterThanOrEqual(4);
176
- });
177
- it("L2 returns ≥8 items", () => {
178
- const result = call({ repoType: "service", platform: "github", riskLevel: "L2" });
179
- expect(result.evidenceChecklist.length).toBeGreaterThanOrEqual(8);
180
- });
181
- it("L3 returns ≥12 items", () => {
182
- const result = call({ repoType: "service", platform: "github", riskLevel: "L3" });
183
- expect(result.evidenceChecklist.length).toBeGreaterThanOrEqual(12);
184
- });
185
- it("each item has item, category, and non-empty requiredFor", () => {
186
- const result = call({ repoType: "webapp", platform: "gitlab", riskLevel: "L3" });
187
- for (const ev of result.evidenceChecklist) {
188
- expect(typeof ev.item).toBe("string");
189
- expect(typeof ev.category).toBe("string");
190
- expect(ev.requiredFor.length).toBeGreaterThan(0);
191
- }
192
- });
193
- });
194
- // ---------------------------------------------------------------------------
195
- // platformSpecific YAML
196
- // ---------------------------------------------------------------------------
197
- describe("handlePlanRepoGovernance — platformSpecific", () => {
198
- it("github returns YAML with branch_protection", () => {
199
- const result = call({ repoType: "service", platform: "github", riskLevel: "L1" });
200
- expect(result.platformSpecific.recommendations).toContain("branch_protection");
201
- });
202
- it("gitlab returns YAML with protected_branches", () => {
203
- const result = call({ repoType: "service", platform: "gitlab", riskLevel: "L1" });
204
- expect(result.platformSpecific.recommendations).toContain("protected_branches");
205
- });
206
- it("github L3 YAML includes require_signed_commits: true", () => {
207
- const result = call({ repoType: "service", platform: "github", riskLevel: "L3" });
208
- expect(result.platformSpecific.recommendations).toContain("require_signed_commits: true");
209
- });
210
- it("github L2 YAML includes security-scan in required_status_checks", () => {
211
- const result = call({ repoType: "service", platform: "github", riskLevel: "L2" });
212
- expect(result.platformSpecific.recommendations).toContain("security-scan");
213
- });
214
- it("platformSpecific.recommendations is a non-empty string", () => {
215
- const result = call({ repoType: "pipeline", platform: "gitlab", riskLevel: "L2" });
216
- expect(typeof result.platformSpecific.recommendations).toBe("string");
217
- expect(result.platformSpecific.recommendations.length).toBeGreaterThan(10);
218
- });
219
- });
220
- // ---------------------------------------------------------------------------
221
- // gaps
222
- // ---------------------------------------------------------------------------
223
- describe("handlePlanRepoGovernance — gaps", () => {
224
- it("always returns at least one gap", () => {
225
- const result = call({ repoType: "service", platform: "github", riskLevel: "L1" });
226
- expect(result.gaps.length).toBeGreaterThan(0);
227
- });
228
- it("each gap has area, risk, mitigation", () => {
229
- const result = call({ repoType: "webapp", platform: "github", riskLevel: "L2" });
230
- for (const gap of result.gaps) {
231
- expect(typeof gap.area).toBe("string");
232
- expect(typeof gap.risk).toBe("string");
233
- expect(typeof gap.mitigation).toBe("string");
234
- }
235
- });
236
- });
237
- //# sourceMappingURL=plan-repo-governance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan-repo-governance.test.js","sourceRoot":"","sources":["../../src/tools/plan-repo-governance.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};