@shiftleftpt/sbd-toe-mcp 0.1.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 (93) hide show
  1. package/.env.example +35 -0
  2. package/LICENSE +201 -0
  3. package/README.md +323 -0
  4. package/data/publish/algolia_docs_records.json +148847 -0
  5. package/data/publish/algolia_docs_records_enriched.json +194004 -0
  6. package/data/publish/algolia_entities_records.json +74715 -0
  7. package/data/publish/algolia_entities_records_enriched.json +177587 -0
  8. package/data/publish/algolia_index_settings.json +102 -0
  9. package/data/publish/sbd-toe-index-compact.json +111 -0
  10. package/data/reports/run_manifest.json +10 -0
  11. package/dist/backend/semantic-index-gateway.d.ts +25 -0
  12. package/dist/backend/semantic-index-gateway.js +555 -0
  13. package/dist/backend/semantic-index-gateway.js.map +1 -0
  14. package/dist/backend/semantic-index-gateway.test.d.ts +1 -0
  15. package/dist/backend/semantic-index-gateway.test.js +384 -0
  16. package/dist/backend/semantic-index-gateway.test.js.map +1 -0
  17. package/dist/bootstrap/checkout-backend.d.ts +31 -0
  18. package/dist/bootstrap/checkout-backend.js +136 -0
  19. package/dist/bootstrap/checkout-backend.js.map +1 -0
  20. package/dist/bootstrap/checkout-backend.test.d.ts +1 -0
  21. package/dist/bootstrap/checkout-backend.test.js +158 -0
  22. package/dist/bootstrap/checkout-backend.test.js.map +1 -0
  23. package/dist/bootstrap/release-checkout.d.ts +8 -0
  24. package/dist/bootstrap/release-checkout.js +168 -0
  25. package/dist/bootstrap/release-checkout.js.map +1 -0
  26. package/dist/bootstrap/release-checkout.test.d.ts +1 -0
  27. package/dist/bootstrap/release-checkout.test.js +137 -0
  28. package/dist/bootstrap/release-checkout.test.js.map +1 -0
  29. package/dist/config.d.ts +4 -0
  30. package/dist/config.js +81 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.js +1063 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/orchestrator/ask-manual.d.ts +13 -0
  36. package/dist/orchestrator/ask-manual.js +202 -0
  37. package/dist/orchestrator/ask-manual.js.map +1 -0
  38. package/dist/prompt/build-answer-prompt.d.ts +2 -0
  39. package/dist/prompt/build-answer-prompt.js +51 -0
  40. package/dist/prompt/build-answer-prompt.js.map +1 -0
  41. package/dist/prompt/system-prompt.d.ts +1 -0
  42. package/dist/prompt/system-prompt.js +94 -0
  43. package/dist/prompt/system-prompt.js.map +1 -0
  44. package/dist/resources/sbd-toe-resources.d.ts +18 -0
  45. package/dist/resources/sbd-toe-resources.js +164 -0
  46. package/dist/resources/sbd-toe-resources.js.map +1 -0
  47. package/dist/resources/sbd-toe-resources.test.d.ts +1 -0
  48. package/dist/resources/sbd-toe-resources.test.js +134 -0
  49. package/dist/resources/sbd-toe-resources.test.js.map +1 -0
  50. package/dist/test-utils.d.ts +153 -0
  51. package/dist/test-utils.js +176 -0
  52. package/dist/test-utils.js.map +1 -0
  53. package/dist/tools/generate-document.d.ts +22 -0
  54. package/dist/tools/generate-document.js +392 -0
  55. package/dist/tools/generate-document.js.map +1 -0
  56. package/dist/tools/generate-document.test.d.ts +1 -0
  57. package/dist/tools/generate-document.test.js +189 -0
  58. package/dist/tools/generate-document.test.js.map +1 -0
  59. package/dist/tools/map-review-scope.d.ts +20 -0
  60. package/dist/tools/map-review-scope.js +299 -0
  61. package/dist/tools/map-review-scope.js.map +1 -0
  62. package/dist/tools/map-review-scope.test.d.ts +1 -0
  63. package/dist/tools/map-review-scope.test.js +204 -0
  64. package/dist/tools/map-review-scope.test.js.map +1 -0
  65. package/dist/tools/plan-repo-governance.d.ts +41 -0
  66. package/dist/tools/plan-repo-governance.js +509 -0
  67. package/dist/tools/plan-repo-governance.js.map +1 -0
  68. package/dist/tools/plan-repo-governance.test.d.ts +1 -0
  69. package/dist/tools/plan-repo-governance.test.js +237 -0
  70. package/dist/tools/plan-repo-governance.test.js.map +1 -0
  71. package/dist/tools/structured-tools.d.ts +5 -0
  72. package/dist/tools/structured-tools.js +310 -0
  73. package/dist/tools/structured-tools.js.map +1 -0
  74. package/dist/tools/structured-tools.test.d.ts +1 -0
  75. package/dist/tools/structured-tools.test.js +459 -0
  76. package/dist/tools/structured-tools.test.js.map +1 -0
  77. package/dist/types.d.ts +160 -0
  78. package/dist/types.js +2 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/upstream/backend-contract.d.ts +3 -0
  81. package/dist/upstream/backend-contract.js +37 -0
  82. package/dist/upstream/backend-contract.js.map +1 -0
  83. package/dist/validators/ai-disclosure.d.ts +39 -0
  84. package/dist/validators/ai-disclosure.js +183 -0
  85. package/dist/validators/ai-disclosure.js.map +1 -0
  86. package/dist/validators/ai-disclosure.test.d.ts +1 -0
  87. package/dist/validators/ai-disclosure.test.js +244 -0
  88. package/dist/validators/ai-disclosure.test.js.map +1 -0
  89. package/examples/claude-desktop.json +8 -0
  90. package/examples/vscode.mcp.json +9 -0
  91. package/package.json +50 -0
  92. package/prompts/sbd-toe-chat-system.md +71 -0
  93. package/smithery.yaml +44 -0
@@ -0,0 +1,237 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-repo-governance.test.js","sourceRoot":"","sources":["../../src/tools/plan-repo-governance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { SnapshotCache } from "../backend/semantic-index-gateway.js";
2
+ export declare function handleListSbdToeChapters(args: Record<string, unknown>, cache: SnapshotCache): unknown;
3
+ export declare function handleQuerySbdToeEntities(args: Record<string, unknown>, cache: SnapshotCache): Promise<unknown>;
4
+ export declare function handleGetSbdToeChapterBrief(args: Record<string, unknown>, cache: SnapshotCache): unknown;
5
+ export declare function handleMapSbdToeApplicability(args: Record<string, unknown>, cache: SnapshotCache): unknown;
@@ -0,0 +1,310 @@
1
+ import { retrievePublishedContext } from "../backend/semantic-index-gateway.js";
2
+ const VALID_RISK_LEVELS = ["L1", "L2", "L3"];
3
+ const READABLE_TITLES = {
4
+ "00-fundamentos": "Fundamentos SbD-ToE",
5
+ "01-classificacao-aplicacoes": "Classificação de Aplicações",
6
+ "02-requisitos-seguranca": "Requisitos de Segurança",
7
+ "03-threat-modeling": "Threat Modeling",
8
+ "04-arquitetura-segura": "Arquitetura Segura",
9
+ "05-dependencias-sbom-sca": "Dependências, SBOM e SCA",
10
+ "06-desenvolvimento-seguro": "Desenvolvimento Seguro",
11
+ "07-cicd-seguro": "CI/CD Seguro",
12
+ "08-iac-infraestrutura": "IaC e Infraestrutura",
13
+ "09-containers-imagens": "Containers e Imagens",
14
+ "10-testes-seguranca": "Testes de Segurança",
15
+ "11-deploy-seguro": "Deploy Seguro",
16
+ "12-monitorizacao-operacoes": "Monitorização e Operações",
17
+ "13-formacao-onboarding": "Formação e Onboarding",
18
+ "14-governanca-contratacao": "Governança e Contratação"
19
+ };
20
+ function isValidRiskLevel(value) {
21
+ return typeof value === "string" && VALID_RISK_LEVELS.includes(value);
22
+ }
23
+ function getStr(record, key) {
24
+ const val = record[key];
25
+ return typeof val === "string" ? val : undefined;
26
+ }
27
+ function getStrArr(record, key) {
28
+ const val = record[key];
29
+ if (!Array.isArray(val))
30
+ return [];
31
+ return val.filter((v) => typeof v === "string");
32
+ }
33
+ function getEntityItems(cache) {
34
+ return cache.entities.items ?? [];
35
+ }
36
+ export function handleListSbdToeChapters(args, cache) {
37
+ const riskLevelArg = args["riskLevel"];
38
+ if (riskLevelArg !== undefined && !isValidRiskLevel(riskLevelArg)) {
39
+ throw new Error(`riskLevel inválido: "${String(riskLevelArg)}". Valores permitidos: L1, L2, L3.`);
40
+ }
41
+ const riskLevel = isValidRiskLevel(riskLevelArg) ? riskLevelArg : undefined;
42
+ const items = getEntityItems(cache);
43
+ const seen = new Set();
44
+ const chapters = [];
45
+ for (const item of items) {
46
+ const oid = getStr(item, "objectID") ?? "";
47
+ const entityType = getStr(item, "entity_type");
48
+ const chapterId = getStr(item, "chapter_id");
49
+ const isChapterRecord = entityType === "chapter_bundle" ||
50
+ oid.startsWith("cap-") ||
51
+ oid.startsWith("ch-") ||
52
+ oid.toLowerCase().includes("chapter");
53
+ if (!isChapterRecord)
54
+ continue;
55
+ const id = chapterId ?? oid;
56
+ if (!id || seen.has(id))
57
+ continue;
58
+ if (riskLevel !== undefined) {
59
+ const riskLevels = getStrArr(item, "risk_levels");
60
+ if (!riskLevels.includes(riskLevel))
61
+ continue;
62
+ }
63
+ seen.add(id);
64
+ const title = getStr(item, "title") ?? id;
65
+ chapters.push({ id, title, readableTitle: READABLE_TITLES[id] ?? title });
66
+ }
67
+ return { chapters };
68
+ }
69
+ export async function handleQuerySbdToeEntities(args, cache) {
70
+ void cache;
71
+ const query = args["query"];
72
+ if (typeof query !== "string" || query.length < 1 || query.length > 200) {
73
+ throw new Error('O argumento "query" é obrigatório e deve ter entre 1 e 200 caracteres.');
74
+ }
75
+ const topKArg = args["topK"];
76
+ if (topKArg !== undefined) {
77
+ if (typeof topKArg !== "number" ||
78
+ !Number.isInteger(topKArg) ||
79
+ topKArg < 1 ||
80
+ topKArg > 15) {
81
+ throw new Error('O argumento "topK" deve ser um inteiro entre 1 e 15.');
82
+ }
83
+ }
84
+ const topK = typeof topKArg === "number" ? topKArg : 5;
85
+ const riskLevelArg = args["riskLevel"];
86
+ if (riskLevelArg !== undefined && !isValidRiskLevel(riskLevelArg)) {
87
+ throw new Error(`riskLevel inválido: "${String(riskLevelArg)}". Valores permitidos: L1, L2, L3.`);
88
+ }
89
+ const riskLevel = isValidRiskLevel(riskLevelArg) ? riskLevelArg : undefined;
90
+ const entityType = typeof args["entityType"] === "string" ? args["entityType"] : undefined;
91
+ const chapterId = typeof args["chapterId"] === "string" ? args["chapterId"] : undefined;
92
+ const bundle = await retrievePublishedContext(query, topK);
93
+ let results = bundle.retrieved;
94
+ if (entityType !== undefined) {
95
+ results = results.filter((r) => typeof r.raw["entity_type"] === "string" && r.raw["entity_type"] === entityType);
96
+ }
97
+ if (chapterId !== undefined) {
98
+ results = results.filter((r) => {
99
+ const rawChapterId = r.raw["chapter_id"];
100
+ return ((typeof r.chapter === "string" && r.chapter.includes(chapterId)) ||
101
+ (typeof rawChapterId === "string" && rawChapterId === chapterId));
102
+ });
103
+ }
104
+ if (riskLevel !== undefined) {
105
+ results = results.filter((r) => {
106
+ const rls = r.raw["risk_levels"];
107
+ return Array.isArray(rls) && rls.includes(riskLevel);
108
+ });
109
+ }
110
+ return { entities: results.slice(0, topK), total: results.length };
111
+ }
112
+ export function handleGetSbdToeChapterBrief(args, cache) {
113
+ const chapterId = args["chapterId"];
114
+ if (typeof chapterId !== "string" || chapterId.trim().length === 0) {
115
+ throw new Error('O argumento "chapterId" é obrigatório e não pode ser vazio.');
116
+ }
117
+ const items = getEntityItems(cache);
118
+ const enrichedLookup = cache.entitiesEnrichedLookup;
119
+ let found;
120
+ for (const item of items) {
121
+ const oid = getStr(item, "objectID") ?? "";
122
+ const cid = getStr(item, "chapter_id") ?? "";
123
+ if (oid === chapterId || cid === chapterId) {
124
+ found = item;
125
+ break;
126
+ }
127
+ }
128
+ if (found === undefined) {
129
+ return { id: chapterId, found: false };
130
+ }
131
+ const oid = getStr(found, "objectID");
132
+ const enriched = oid !== undefined ? enrichedLookup.get(oid) : undefined;
133
+ const phases = getStrArr(found, "related_phases");
134
+ const intentTopics = enriched?.intent_topics
135
+ ? [...enriched.intent_topics]
136
+ : getStrArr(found, "intent_topics");
137
+ const artifacts = enriched?.artifact_ids
138
+ ? [...enriched.artifact_ids]
139
+ : getStrArr(found, "artifact_ids");
140
+ const objective = getStr(found, "summary") ?? getStr(found, "searchable_text");
141
+ return {
142
+ id: chapterId,
143
+ found: true,
144
+ title: getStr(found, "title") ?? chapterId,
145
+ ...(objective !== undefined ? { objective } : {}),
146
+ ...(phases.length > 0 ? { phases } : {}),
147
+ ...(artifacts.length > 0 ? { artifacts } : {}),
148
+ ...(intentTopics.length > 0 ? { intent_topics: intentTopics } : {})
149
+ };
150
+ }
151
+ const VALID_TECHNOLOGIES = [
152
+ "containers", "serverless", "kubernetes", "ci-cd", "iac", "api-gateway",
153
+ "mobile", "spa", "microservices", "legacy-integration", "ml-ai", "data-pipeline",
154
+ "sca-sbom", "sast", "dast", "secrets-management", "monitoring", "iam",
155
+ "network-segmentation", "cryptography"
156
+ ];
157
+ const VALID_PROJECT_ROLES = [
158
+ "developer", "architect", "security", "devops", "manager"
159
+ ];
160
+ function isValidTechnology(value) {
161
+ return typeof value === "string" && VALID_TECHNOLOGIES.includes(value);
162
+ }
163
+ function isValidProjectRole(value) {
164
+ return typeof value === "string" && VALID_PROJECT_ROLES.includes(value);
165
+ }
166
+ function buildActivatedBundles(riskLevel, technologies) {
167
+ const techSet = new Set(technologies);
168
+ const foundationBundles = [
169
+ { chapterId: "01-classificacao-aplicacoes", status: "active", reason: "Obrigatório L1+" },
170
+ { chapterId: "02-requisitos-seguranca", status: "active", reason: "Obrigatório L1+" },
171
+ { chapterId: "03-threat-modeling", status: "active", reason: "Obrigatório L1+" }
172
+ ];
173
+ const domainBundles = [];
174
+ if (techSet.has("sca-sbom") || techSet.has("sast") || techSet.has("dast")) {
175
+ domainBundles.push({
176
+ chapterId: "05-dependencias-sbom-sca",
177
+ status: "active",
178
+ reason: `technologies inclui ${["sca-sbom", "sast", "dast"].filter((t) => techSet.has(t)).join(", ")}`
179
+ });
180
+ }
181
+ if (riskLevel === "L2" || riskLevel === "L3") {
182
+ domainBundles.push({
183
+ chapterId: "06-desenvolvimento-seguro",
184
+ status: "active",
185
+ reason: `Sempre para ${riskLevel}+`
186
+ });
187
+ }
188
+ if (techSet.has("iac") || techSet.has("containers") || techSet.has("kubernetes")) {
189
+ domainBundles.push({
190
+ chapterId: "08-iac-infraestrutura",
191
+ status: "active",
192
+ reason: `technologies inclui ${["iac", "containers", "kubernetes"].filter((t) => techSet.has(t)).join(", ")}`
193
+ });
194
+ }
195
+ if (techSet.has("containers") || techSet.has("kubernetes")) {
196
+ domainBundles.push({
197
+ chapterId: "09-containers-imagens",
198
+ status: "active",
199
+ reason: `technologies inclui ${["containers", "kubernetes"].filter((t) => techSet.has(t)).join(", ")}`
200
+ });
201
+ }
202
+ if (techSet.has("sast") || techSet.has("dast")) {
203
+ domainBundles.push({
204
+ chapterId: "10-testes-seguranca",
205
+ status: "active",
206
+ reason: `technologies inclui ${["sast", "dast"].filter((t) => techSet.has(t)).join(", ")}`
207
+ });
208
+ }
209
+ const operationalBundles = [];
210
+ if (techSet.has("ci-cd")) {
211
+ operationalBundles.push({
212
+ chapterId: "07-cicd-seguro",
213
+ status: "active",
214
+ reason: "technologies inclui ci-cd"
215
+ });
216
+ }
217
+ if (riskLevel === "L2" || riskLevel === "L3") {
218
+ operationalBundles.push({
219
+ chapterId: "11-deploy-seguro",
220
+ status: "active",
221
+ reason: "L2+"
222
+ });
223
+ }
224
+ if (techSet.has("monitoring")) {
225
+ operationalBundles.push({
226
+ chapterId: "12-monitorizacao-operacoes",
227
+ status: "active",
228
+ reason: "technologies inclui monitoring"
229
+ });
230
+ }
231
+ return { foundationBundles, domainBundles, operationalBundles };
232
+ }
233
+ export function handleMapSbdToeApplicability(args, cache) {
234
+ const riskLevelArg = args["riskLevel"];
235
+ if (!isValidRiskLevel(riskLevelArg)) {
236
+ throw new Error(`riskLevel é obrigatório e deve ser L1, L2 ou L3. Recebido: "${String(riskLevelArg)}".`);
237
+ }
238
+ const riskLevel = riskLevelArg;
239
+ // Validate optional technologies allowlist
240
+ const technologiesArg = args["technologies"];
241
+ let technologies = [];
242
+ if (technologiesArg !== undefined) {
243
+ if (!Array.isArray(technologiesArg)) {
244
+ const err = {
245
+ code: -32602,
246
+ message: 'O argumento "technologies" deve ser um array.',
247
+ data: null
248
+ };
249
+ throw Object.assign(new Error(err.message), { rpcError: err });
250
+ }
251
+ const invalidTechs = technologiesArg.filter((t) => !isValidTechnology(t));
252
+ if (invalidTechs.length > 0) {
253
+ const err = {
254
+ code: -32602,
255
+ message: `Valores inválidos em "technologies": ${invalidTechs.map(String).join(", ")}. Valores permitidos: ${VALID_TECHNOLOGIES.join(", ")}.`,
256
+ data: { invalidValues: invalidTechs }
257
+ };
258
+ throw Object.assign(new Error(err.message), { rpcError: err });
259
+ }
260
+ technologies = technologiesArg.filter(isValidTechnology);
261
+ }
262
+ // Validate optional projectRole allowlist
263
+ const projectRoleArg = args["projectRole"];
264
+ if (projectRoleArg !== undefined && !isValidProjectRole(projectRoleArg)) {
265
+ const err = {
266
+ code: -32602,
267
+ message: `Valor inválido em "projectRole": "${String(projectRoleArg)}". Valores permitidos: ${VALID_PROJECT_ROLES.join(", ")}.`,
268
+ data: { invalidValue: projectRoleArg }
269
+ };
270
+ throw Object.assign(new Error(err.message), { rpcError: err });
271
+ }
272
+ const hasPersonalData = typeof args["hasPersonalData"] === "boolean" ? args["hasPersonalData"] : false;
273
+ const items = getEntityItems(cache);
274
+ const allChapterIds = new Set();
275
+ for (const item of items) {
276
+ if (getStr(item, "entity_type") === "chapter_bundle") {
277
+ const cid = getStr(item, "chapter_id");
278
+ if (cid !== undefined)
279
+ allChapterIds.add(cid);
280
+ }
281
+ }
282
+ const activeChapterIds = new Set();
283
+ for (const item of items) {
284
+ const rls = getStrArr(item, "risk_levels");
285
+ if (rls.includes(riskLevel)) {
286
+ const cid = getStr(item, "chapter_id");
287
+ if (cid !== undefined)
288
+ activeChapterIds.add(cid);
289
+ }
290
+ }
291
+ const active = [...activeChapterIds].sort();
292
+ const excluded = [...allChapterIds].filter((id) => !activeChapterIds.has(id)).sort();
293
+ const activatedBundles = buildActivatedBundles(riskLevel, technologies);
294
+ // 13-formacao-onboarding: apenas L3
295
+ if (riskLevel === "L3") {
296
+ activatedBundles.operationalBundles.push({
297
+ chapterId: "13-formacao-onboarding",
298
+ status: "active",
299
+ reason: "L3"
300
+ });
301
+ }
302
+ return {
303
+ riskLevel,
304
+ active,
305
+ conditional: [],
306
+ excluded,
307
+ activatedBundles
308
+ };
309
+ }
310
+ //# sourceMappingURL=structured-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-tools.js","sourceRoot":"","sources":["../../src/tools/structured-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};