@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.
- package/.env.example +35 -0
- package/LICENSE +201 -0
- package/README.md +323 -0
- package/data/publish/algolia_docs_records.json +148847 -0
- package/data/publish/algolia_docs_records_enriched.json +194004 -0
- package/data/publish/algolia_entities_records.json +74715 -0
- package/data/publish/algolia_entities_records_enriched.json +177587 -0
- package/data/publish/algolia_index_settings.json +102 -0
- package/data/publish/sbd-toe-index-compact.json +111 -0
- package/data/reports/run_manifest.json +10 -0
- package/dist/backend/semantic-index-gateway.d.ts +25 -0
- package/dist/backend/semantic-index-gateway.js +555 -0
- package/dist/backend/semantic-index-gateway.js.map +1 -0
- package/dist/backend/semantic-index-gateway.test.d.ts +1 -0
- package/dist/backend/semantic-index-gateway.test.js +384 -0
- package/dist/backend/semantic-index-gateway.test.js.map +1 -0
- package/dist/bootstrap/checkout-backend.d.ts +31 -0
- package/dist/bootstrap/checkout-backend.js +136 -0
- package/dist/bootstrap/checkout-backend.js.map +1 -0
- package/dist/bootstrap/checkout-backend.test.d.ts +1 -0
- package/dist/bootstrap/checkout-backend.test.js +158 -0
- package/dist/bootstrap/checkout-backend.test.js.map +1 -0
- package/dist/bootstrap/release-checkout.d.ts +8 -0
- package/dist/bootstrap/release-checkout.js +168 -0
- package/dist/bootstrap/release-checkout.js.map +1 -0
- package/dist/bootstrap/release-checkout.test.d.ts +1 -0
- package/dist/bootstrap/release-checkout.test.js +137 -0
- package/dist/bootstrap/release-checkout.test.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1063 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/ask-manual.d.ts +13 -0
- package/dist/orchestrator/ask-manual.js +202 -0
- package/dist/orchestrator/ask-manual.js.map +1 -0
- package/dist/prompt/build-answer-prompt.d.ts +2 -0
- package/dist/prompt/build-answer-prompt.js +51 -0
- package/dist/prompt/build-answer-prompt.js.map +1 -0
- package/dist/prompt/system-prompt.d.ts +1 -0
- package/dist/prompt/system-prompt.js +94 -0
- package/dist/prompt/system-prompt.js.map +1 -0
- package/dist/resources/sbd-toe-resources.d.ts +18 -0
- package/dist/resources/sbd-toe-resources.js +164 -0
- package/dist/resources/sbd-toe-resources.js.map +1 -0
- package/dist/resources/sbd-toe-resources.test.d.ts +1 -0
- package/dist/resources/sbd-toe-resources.test.js +134 -0
- package/dist/resources/sbd-toe-resources.test.js.map +1 -0
- package/dist/test-utils.d.ts +153 -0
- package/dist/test-utils.js +176 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/tools/generate-document.d.ts +22 -0
- package/dist/tools/generate-document.js +392 -0
- package/dist/tools/generate-document.js.map +1 -0
- package/dist/tools/generate-document.test.d.ts +1 -0
- package/dist/tools/generate-document.test.js +189 -0
- package/dist/tools/generate-document.test.js.map +1 -0
- package/dist/tools/map-review-scope.d.ts +20 -0
- package/dist/tools/map-review-scope.js +299 -0
- package/dist/tools/map-review-scope.js.map +1 -0
- package/dist/tools/map-review-scope.test.d.ts +1 -0
- package/dist/tools/map-review-scope.test.js +204 -0
- package/dist/tools/map-review-scope.test.js.map +1 -0
- package/dist/tools/plan-repo-governance.d.ts +41 -0
- package/dist/tools/plan-repo-governance.js +509 -0
- package/dist/tools/plan-repo-governance.js.map +1 -0
- package/dist/tools/plan-repo-governance.test.d.ts +1 -0
- package/dist/tools/plan-repo-governance.test.js +237 -0
- package/dist/tools/plan-repo-governance.test.js.map +1 -0
- package/dist/tools/structured-tools.d.ts +5 -0
- package/dist/tools/structured-tools.js +310 -0
- package/dist/tools/structured-tools.js.map +1 -0
- package/dist/tools/structured-tools.test.d.ts +1 -0
- package/dist/tools/structured-tools.test.js +459 -0
- package/dist/tools/structured-tools.test.js.map +1 -0
- package/dist/types.d.ts +160 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/upstream/backend-contract.d.ts +3 -0
- package/dist/upstream/backend-contract.js +37 -0
- package/dist/upstream/backend-contract.js.map +1 -0
- package/dist/validators/ai-disclosure.d.ts +39 -0
- package/dist/validators/ai-disclosure.js +183 -0
- package/dist/validators/ai-disclosure.js.map +1 -0
- package/dist/validators/ai-disclosure.test.d.ts +1 -0
- package/dist/validators/ai-disclosure.test.js +244 -0
- package/dist/validators/ai-disclosure.test.js.map +1 -0
- package/examples/claude-desktop.json +8 -0
- package/examples/vscode.mcp.json +9 -0
- package/package.json +50 -0
- package/prompts/sbd-toe-chat-system.md +71 -0
- package/smithery.yaml +44 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Allowlists
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const VALID_REPO_TYPES = [
|
|
5
|
+
"library", "service", "webapp", "infrastructure", "pipeline", "monorepo"
|
|
6
|
+
];
|
|
7
|
+
const VALID_PLATFORMS = ["github", "gitlab"];
|
|
8
|
+
const VALID_RISK_LEVELS = ["L1", "L2", "L3"];
|
|
9
|
+
const VALID_SCALES = ["startup", "mid-size", "enterprise"];
|
|
10
|
+
const VALID_ENFORCEMENT_LEVELS = ["advisory", "enforced", "strict"];
|
|
11
|
+
function isValid(value, allowlist) {
|
|
12
|
+
return typeof value === "string" && allowlist.includes(value);
|
|
13
|
+
}
|
|
14
|
+
function makeRpcError(message, data) {
|
|
15
|
+
return Object.assign(new Error(message), {
|
|
16
|
+
rpcError: { code: -32602, message, data: data ?? null }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const ALL_CONTROLS = [
|
|
20
|
+
{
|
|
21
|
+
controlId: "CTRL-ACCESS-001",
|
|
22
|
+
category: "access",
|
|
23
|
+
description: "Branch protection com ≥1 reviewer obrigatório",
|
|
24
|
+
rationale: "Previne commits directos na branch principal sem revisão humana."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
controlId: "CTRL-ACCESS-002",
|
|
28
|
+
category: "access",
|
|
29
|
+
description: "CODEOWNERS definido para paths críticos",
|
|
30
|
+
rationale: "Garante que alterações a código sensível são revistas por especialistas designados."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
controlId: "CTRL-ACCESS-003",
|
|
34
|
+
category: "access",
|
|
35
|
+
description: "MFA obrigatório para todos os contributors",
|
|
36
|
+
rationale: "Reduz risco de comprometimento de conta de contributor com acesso ao repositório."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
controlId: "CTRL-QUALITY-001",
|
|
40
|
+
category: "code-quality",
|
|
41
|
+
description: "Linting e type-checking em CI",
|
|
42
|
+
rationale: "Detecta erros de código e problemas de qualidade de forma automatizada."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
controlId: "CTRL-QUALITY-002",
|
|
46
|
+
category: "code-quality",
|
|
47
|
+
description: "Cobertura de testes mínima (L1: 60%, L2: 70%, L3: 80%)",
|
|
48
|
+
rationale: "Assegura que o código tem cobertura de testes adequada ao nível de risco."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
controlId: "CTRL-QUALITY-003",
|
|
52
|
+
category: "code-quality",
|
|
53
|
+
description: "Code review obrigatório (L2: 1 reviewer; L3: 2 reviewers)",
|
|
54
|
+
rationale: "Revisão por pares reduz a probabilidade de introduzir vulnerabilidades de segurança."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
controlId: "CTRL-SUPPLY-001",
|
|
58
|
+
category: "supply-chain",
|
|
59
|
+
description: "Dependency scanning (Dependabot/Renovate)",
|
|
60
|
+
rationale: "Detecta vulnerabilidades conhecidas em dependências de forma contínua."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
controlId: "CTRL-SUPPLY-002",
|
|
64
|
+
category: "supply-chain",
|
|
65
|
+
description: "SBOM gerado em cada release",
|
|
66
|
+
rationale: "Mantém rastreabilidade completa dos componentes incluídos em cada artefacto de release."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
controlId: "CTRL-SUPPLY-003",
|
|
70
|
+
category: "supply-chain",
|
|
71
|
+
description: "Pinning de versões de dependências de CI",
|
|
72
|
+
rationale: "Previne ataques de supply chain via dependências de CI não fixadas."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
controlId: "CTRL-SECRETS-001",
|
|
76
|
+
category: "secrets",
|
|
77
|
+
description: "Scanning de segredos (gitleaks/trufflehog)",
|
|
78
|
+
rationale: "Detecta segredos expostos no histórico de commits e pull requests."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
controlId: "CTRL-SECRETS-002",
|
|
82
|
+
category: "secrets",
|
|
83
|
+
description: "Variáveis sensíveis exclusivamente em vault/secrets manager",
|
|
84
|
+
rationale: "Elimina o risco de exposição de credenciais em configurações versionadas."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
controlId: "CTRL-CICD-001",
|
|
88
|
+
category: "ci-cd",
|
|
89
|
+
description: "Pipeline de CI obrigatório em PRs",
|
|
90
|
+
rationale: "Garante que todos os PRs passam por gates automáticos de qualidade e segurança."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
controlId: "CTRL-CICD-002",
|
|
94
|
+
category: "ci-cd",
|
|
95
|
+
description: "SAST em CI (CodeQL/semgrep)",
|
|
96
|
+
rationale: "Análise estática detecta classes comuns de vulnerabilidades antes do merge."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
controlId: "CTRL-CICD-003",
|
|
100
|
+
category: "ci-cd",
|
|
101
|
+
description: "Container image scanning (L2+)",
|
|
102
|
+
rationale: "Verifica vulnerabilidades em imagens de container antes do deploy."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
controlId: "CTRL-AUDIT-001",
|
|
106
|
+
category: "audit",
|
|
107
|
+
description: "Audit log de acessos ao repositório",
|
|
108
|
+
rationale: "Mantém rastreabilidade de quem acedeu e alterou o repositório."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
controlId: "CTRL-AUDIT-002",
|
|
112
|
+
category: "audit",
|
|
113
|
+
description: "Signed commits obrigatórios (L3)",
|
|
114
|
+
rationale: "Garante autenticidade e não-repúdio dos commits em repositórios de alto risco."
|
|
115
|
+
}
|
|
116
|
+
];
|
|
117
|
+
const CONTROLS_BY_ID = new Map(ALL_CONTROLS.map((c) => [c.controlId, c]));
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// Mandatory controls per risk level (additive)
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
const MANDATORY_L1 = ["CTRL-ACCESS-001", "CTRL-QUALITY-001", "CTRL-SECRETS-001", "CTRL-CICD-001"];
|
|
122
|
+
const MANDATORY_L2_ADDITIONAL = [
|
|
123
|
+
"CTRL-ACCESS-002", "CTRL-QUALITY-002", "CTRL-QUALITY-003", "CTRL-SUPPLY-001", "CTRL-CICD-002"
|
|
124
|
+
];
|
|
125
|
+
const MANDATORY_L3_ADDITIONAL = [
|
|
126
|
+
"CTRL-ACCESS-003", "CTRL-SUPPLY-002", "CTRL-SUPPLY-003",
|
|
127
|
+
"CTRL-SECRETS-002", "CTRL-AUDIT-001", "CTRL-AUDIT-002"
|
|
128
|
+
];
|
|
129
|
+
function getMandatoryControlIds(riskLevel) {
|
|
130
|
+
const ids = [...MANDATORY_L1];
|
|
131
|
+
if (riskLevel === "L2" || riskLevel === "L3") {
|
|
132
|
+
ids.push(...MANDATORY_L2_ADDITIONAL);
|
|
133
|
+
}
|
|
134
|
+
if (riskLevel === "L3") {
|
|
135
|
+
ids.push(...MANDATORY_L3_ADDITIONAL);
|
|
136
|
+
}
|
|
137
|
+
return ids;
|
|
138
|
+
}
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Additional controls per repoType
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
const REPO_TYPE_EXTRA_CONTROLS = {
|
|
143
|
+
library: ["CTRL-SUPPLY-002", "CTRL-QUALITY-002"],
|
|
144
|
+
service: ["CTRL-CICD-002", "CTRL-SECRETS-001"],
|
|
145
|
+
webapp: ["CTRL-CICD-002", "CTRL-SECRETS-001", "CTRL-CICD-003"],
|
|
146
|
+
infrastructure: ["CTRL-SUPPLY-003", "CTRL-CICD-002", "CTRL-AUDIT-001"],
|
|
147
|
+
pipeline: ["CTRL-SUPPLY-003", "CTRL-CICD-001", "CTRL-SECRETS-002"],
|
|
148
|
+
monorepo: ["CTRL-ACCESS-002", "CTRL-QUALITY-003"]
|
|
149
|
+
};
|
|
150
|
+
function getApplicableControls(repoType, riskLevel) {
|
|
151
|
+
const mandatoryIds = new Set(getMandatoryControlIds(riskLevel));
|
|
152
|
+
const repoExtraIds = new Set(REPO_TYPE_EXTRA_CONTROLS[repoType]);
|
|
153
|
+
// webapp: CTRL-CICD-003 only for L2+
|
|
154
|
+
if (repoType === "webapp" && riskLevel === "L1") {
|
|
155
|
+
repoExtraIds.delete("CTRL-CICD-003");
|
|
156
|
+
}
|
|
157
|
+
const allIds = new Set([...mandatoryIds, ...repoExtraIds]);
|
|
158
|
+
const controls = [];
|
|
159
|
+
for (const id of allIds) {
|
|
160
|
+
const ctrl = CONTROLS_BY_ID.get(id);
|
|
161
|
+
if (ctrl !== undefined) {
|
|
162
|
+
controls.push(ctrl);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return controls.sort((a, b) => a.controlId.localeCompare(b.controlId));
|
|
166
|
+
}
|
|
167
|
+
function buildBaselineCheckpoints(riskLevel, platform) {
|
|
168
|
+
const reviewCount = riskLevel === "L3" ? 2 : 1;
|
|
169
|
+
const coverageTarget = riskLevel === "L1" ? "60%" : riskLevel === "L2" ? "70%" : "80%";
|
|
170
|
+
const platformCi = platform === "github" ? "GitHub Actions" : "GitLab CI/CD";
|
|
171
|
+
const checkpoints = [
|
|
172
|
+
{
|
|
173
|
+
phase: "setup",
|
|
174
|
+
actions: [
|
|
175
|
+
"Activar branch protection na branch principal.",
|
|
176
|
+
"Definir CODEOWNERS para paths críticos.",
|
|
177
|
+
"Configurar scanning de segredos (gitleaks ou trufflehog).",
|
|
178
|
+
"Criar ficheiro de configuração de CI base.",
|
|
179
|
+
...(riskLevel === "L2" || riskLevel === "L3"
|
|
180
|
+
? ["Configurar dependency scanning (Dependabot/Renovate)."]
|
|
181
|
+
: []),
|
|
182
|
+
...(riskLevel === "L3"
|
|
183
|
+
? ["Activar MFA para todos os contributors.", "Configurar audit log."]
|
|
184
|
+
: [])
|
|
185
|
+
],
|
|
186
|
+
tooling: [
|
|
187
|
+
platform === "github" ? "GitHub Branch Protection Settings" : "GitLab Protected Branches",
|
|
188
|
+
"gitleaks / trufflehog",
|
|
189
|
+
...(riskLevel !== "L1" ? ["Dependabot / Renovate"] : [])
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
phase: "pre-merge",
|
|
194
|
+
actions: [
|
|
195
|
+
`Executar linting e type-checking em ${platformCi}.`,
|
|
196
|
+
`Exigir cobertura de testes ≥ ${coverageTarget}.`,
|
|
197
|
+
`Exigir ${reviewCount} reviewer(s) aprovados antes do merge.`,
|
|
198
|
+
"Executar scanning de segredos em cada PR.",
|
|
199
|
+
...(riskLevel === "L2" || riskLevel === "L3"
|
|
200
|
+
? ["Executar SAST (CodeQL ou semgrep) em cada PR."]
|
|
201
|
+
: [])
|
|
202
|
+
],
|
|
203
|
+
tooling: [
|
|
204
|
+
platformCi,
|
|
205
|
+
"CodeQL / semgrep",
|
|
206
|
+
"gitleaks / trufflehog"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
phase: "release",
|
|
211
|
+
actions: [
|
|
212
|
+
"Verificar que todos os gates de CI estão a verde antes do release.",
|
|
213
|
+
"Criar release tag com changelog de segurança.",
|
|
214
|
+
...(riskLevel === "L2" || riskLevel === "L3"
|
|
215
|
+
? ["Gerar e publicar SBOM do artefacto de release."]
|
|
216
|
+
: []),
|
|
217
|
+
...(riskLevel === "L3"
|
|
218
|
+
? ["Verificar que todos os commits da release estão assinados.", "Obter aprovação formal do responsável de segurança."]
|
|
219
|
+
: [])
|
|
220
|
+
],
|
|
221
|
+
tooling: [
|
|
222
|
+
"syft / cyclonedx-cli (SBOM)",
|
|
223
|
+
...(riskLevel === "L3" ? ["GPG / Sigstore"] : [])
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
phase: "audit",
|
|
228
|
+
actions: [
|
|
229
|
+
"Rever permissões de acesso ao repositório trimestralmente.",
|
|
230
|
+
"Verificar que todas as dependências estão actualizadas.",
|
|
231
|
+
"Rever configuração de branch protection e CODEOWNERS.",
|
|
232
|
+
...(riskLevel === "L2" || riskLevel === "L3"
|
|
233
|
+
? ["Rever resultados de SAST/dependency scan dos últimos 30 dias."]
|
|
234
|
+
: []),
|
|
235
|
+
...(riskLevel === "L3"
|
|
236
|
+
? ["Rever audit log de acessos críticos.", "Verificar conformidade com politicas de MFA."]
|
|
237
|
+
: [])
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
];
|
|
241
|
+
if (riskLevel === "L2" || riskLevel === "L3") {
|
|
242
|
+
checkpoints.push({
|
|
243
|
+
phase: "incident-response",
|
|
244
|
+
actions: [
|
|
245
|
+
"Revogar acessos comprometidos imediatamente.",
|
|
246
|
+
"Notificar responsável de segurança nas primeiras 4 horas.",
|
|
247
|
+
"Abrir issue de segurança confidencial com template de IR.",
|
|
248
|
+
"Conduzir post-mortem com acções correctivas no prazo de 5 dias úteis.",
|
|
249
|
+
...(riskLevel === "L3"
|
|
250
|
+
? ["Avaliar obrigação de notificação regulatória (GDPR/NIS2)."]
|
|
251
|
+
: [])
|
|
252
|
+
],
|
|
253
|
+
tooling: ["Security Advisory (GitHub/GitLab)", "Template de Incident Response"]
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
return checkpoints;
|
|
257
|
+
}
|
|
258
|
+
function buildEvidenceChecklist(riskLevel) {
|
|
259
|
+
const l1Items = [
|
|
260
|
+
{
|
|
261
|
+
item: "Branch protection activa na branch principal",
|
|
262
|
+
category: "access",
|
|
263
|
+
requiredFor: ["L1", "L2", "L3"]
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
item: "Pipeline de CI funcional com execução em PRs",
|
|
267
|
+
category: "ci-cd",
|
|
268
|
+
requiredFor: ["L1", "L2", "L3"]
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
item: "Scanning de segredos configurado e a executar",
|
|
272
|
+
category: "secrets",
|
|
273
|
+
requiredFor: ["L1", "L2", "L3"]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
item: "Linting e type-checking em CI sem erros críticos",
|
|
277
|
+
category: "code-quality",
|
|
278
|
+
requiredFor: ["L1", "L2", "L3"]
|
|
279
|
+
}
|
|
280
|
+
];
|
|
281
|
+
const l2Items = [
|
|
282
|
+
{
|
|
283
|
+
item: "Ficheiro CODEOWNERS presente e actualizado",
|
|
284
|
+
category: "access",
|
|
285
|
+
requiredFor: ["L2", "L3"]
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
item: "Dependency scanning activo (Dependabot/Renovate configurado)",
|
|
289
|
+
category: "supply-chain",
|
|
290
|
+
requiredFor: ["L2", "L3"]
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
item: "SAST configurado em CI sem findings críticos por resolver",
|
|
294
|
+
category: "code-quality",
|
|
295
|
+
requiredFor: ["L2", "L3"]
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
item: "Logs de code review disponíveis (PRs com aprovações documentadas)",
|
|
299
|
+
category: "code-quality",
|
|
300
|
+
requiredFor: ["L2", "L3"]
|
|
301
|
+
}
|
|
302
|
+
];
|
|
303
|
+
const l3Items = [
|
|
304
|
+
{
|
|
305
|
+
item: "SBOM artefacto gerado e publicado em cada release",
|
|
306
|
+
category: "supply-chain",
|
|
307
|
+
requiredFor: ["L3"]
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
item: "Signed commits verificados na branch principal",
|
|
311
|
+
category: "audit",
|
|
312
|
+
requiredFor: ["L3"]
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
item: "Audit log configurado com retenção ≥ 90 dias",
|
|
316
|
+
category: "audit",
|
|
317
|
+
requiredFor: ["L3"]
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
item: "MFA activado e evidenciado para todos os contributors com acesso de escrita",
|
|
321
|
+
category: "access",
|
|
322
|
+
requiredFor: ["L3"]
|
|
323
|
+
}
|
|
324
|
+
];
|
|
325
|
+
const items = [...l1Items];
|
|
326
|
+
if (riskLevel === "L2" || riskLevel === "L3") {
|
|
327
|
+
items.push(...l2Items);
|
|
328
|
+
}
|
|
329
|
+
if (riskLevel === "L3") {
|
|
330
|
+
items.push(...l3Items);
|
|
331
|
+
}
|
|
332
|
+
return items;
|
|
333
|
+
}
|
|
334
|
+
function buildGaps(repoType, riskLevel) {
|
|
335
|
+
const gaps = [];
|
|
336
|
+
if (repoType === "library") {
|
|
337
|
+
gaps.push({
|
|
338
|
+
area: "Supply chain",
|
|
339
|
+
risk: "Dependências transitivas não auditadas podem introduzir vulnerabilidades para consumidores da biblioteca.",
|
|
340
|
+
mitigation: "Implementar SBOM em cada release e dependency scanning contínuo."
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
if (repoType === "webapp" || repoType === "service") {
|
|
344
|
+
gaps.push({
|
|
345
|
+
area: "Runtime security",
|
|
346
|
+
risk: "Código de aplicação pode conter vulnerabilidades injectáveis (XSS, SQLi, etc.) não detectadas por análise estática.",
|
|
347
|
+
mitigation: "Complementar SAST com DAST em ambiente de staging antes de cada release."
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
if (repoType === "infrastructure") {
|
|
351
|
+
gaps.push({
|
|
352
|
+
area: "IaC drift",
|
|
353
|
+
risk: "Configuração de infraestrutura pode divergir do estado versionado (configuration drift).",
|
|
354
|
+
mitigation: "Configurar detecção de drift com alertas automáticos (ex: Terraform Cloud, Pulumi Deployments)."
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
if (repoType === "pipeline") {
|
|
358
|
+
gaps.push({
|
|
359
|
+
area: "CI/CD supply chain",
|
|
360
|
+
risk: "Acções/scripts de CI não fixados a versões específicas podem ser substituídos maliciosamente.",
|
|
361
|
+
mitigation: "Fixar todas as acções a SHA específicos e auditar periodicamente as permissões do pipeline."
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
if (repoType === "monorepo") {
|
|
365
|
+
gaps.push({
|
|
366
|
+
area: "Granularidade de acesso",
|
|
367
|
+
risk: "Acesso excessivamente amplo a componentes não relacionados dentro do monorepo.",
|
|
368
|
+
mitigation: "Definir CODEOWNERS granular por directório e usar path-based permissions."
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
if (riskLevel === "L2" || riskLevel === "L3") {
|
|
372
|
+
gaps.push({
|
|
373
|
+
area: "Cobertura de testes de segurança",
|
|
374
|
+
risk: "SAST pode não detectar vulnerabilidades lógicas ou de negócio.",
|
|
375
|
+
mitigation: "Realizar revisões manuais de segurança periódicas focadas em lógica de negócio crítica."
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
if (riskLevel === "L3") {
|
|
379
|
+
gaps.push({
|
|
380
|
+
area: "Conformidade regulatória",
|
|
381
|
+
risk: "Requisitos regulatórios (GDPR, NIS2) podem impor obrigações adicionais não cobertas por este plano.",
|
|
382
|
+
mitigation: "Realizar avaliação de conformidade específica com um responsável de DPO/CISO."
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
// Always include a general gap
|
|
386
|
+
gaps.push({
|
|
387
|
+
area: "Gestão de incidentes",
|
|
388
|
+
risk: "Ausência de processo documentado de resposta a incidentes de segurança no repositório.",
|
|
389
|
+
mitigation: "Criar SECURITY.md com processo de disclosure responsável e template de incident response."
|
|
390
|
+
});
|
|
391
|
+
return gaps;
|
|
392
|
+
}
|
|
393
|
+
// ---------------------------------------------------------------------------
|
|
394
|
+
// Platform-specific YAML
|
|
395
|
+
// ---------------------------------------------------------------------------
|
|
396
|
+
function buildGitHubYaml(riskLevel) {
|
|
397
|
+
const requiredReviews = riskLevel === "L3" ? 2 : 1;
|
|
398
|
+
const hasL2Plus = riskLevel === "L2" || riskLevel === "L3";
|
|
399
|
+
return `branch_protection:
|
|
400
|
+
required_reviews: ${requiredReviews}
|
|
401
|
+
dismiss_stale_reviews: true
|
|
402
|
+
require_code_owner_reviews: ${hasL2Plus}
|
|
403
|
+
required_status_checks:
|
|
404
|
+
- lint
|
|
405
|
+
- test
|
|
406
|
+
- secrets-scan${hasL2Plus ? "\n - security-scan" : ""}${riskLevel === "L3" ? "\n - sbom-verify" : ""}
|
|
407
|
+
require_signed_commits: ${riskLevel === "L3"}
|
|
408
|
+
actions_permissions:
|
|
409
|
+
allowed_actions: selected
|
|
410
|
+
github_owned_allowed: true
|
|
411
|
+
patterns_allowed:
|
|
412
|
+
- "actions/*@v*"
|
|
413
|
+
- "github/*@v*"
|
|
414
|
+
dependabot:
|
|
415
|
+
enabled: ${hasL2Plus}
|
|
416
|
+
update_schedule: weekly
|
|
417
|
+
security_updates: true`;
|
|
418
|
+
}
|
|
419
|
+
function buildGitLabYaml(riskLevel) {
|
|
420
|
+
const requiredApprovals = riskLevel === "L3" ? 2 : 1;
|
|
421
|
+
const hasL2Plus = riskLevel === "L2" || riskLevel === "L3";
|
|
422
|
+
return `protected_branches:
|
|
423
|
+
allowed_to_merge: maintainer
|
|
424
|
+
allowed_to_push: no_one
|
|
425
|
+
code_owner_approval_required: ${hasL2Plus}
|
|
426
|
+
merge_request_approvals:
|
|
427
|
+
approvals_required: ${requiredApprovals}
|
|
428
|
+
reset_approvals_on_push: true
|
|
429
|
+
disable_overriding_approvers: ${riskLevel === "L3"}
|
|
430
|
+
security_scanning:
|
|
431
|
+
sast_enabled: ${hasL2Plus}
|
|
432
|
+
dependency_scanning: ${hasL2Plus}
|
|
433
|
+
secret_detection: true
|
|
434
|
+
container_scanning: ${hasL2Plus}${riskLevel === "L3" ? "\n license_scanning: true" : ""}
|
|
435
|
+
audit_events:
|
|
436
|
+
enabled: ${riskLevel === "L3"}
|
|
437
|
+
retention_days: ${riskLevel === "L3" ? 90 : 30}`;
|
|
438
|
+
}
|
|
439
|
+
function buildPlatformSpecific(platform, riskLevel) {
|
|
440
|
+
const yaml = platform === "github"
|
|
441
|
+
? buildGitHubYaml(riskLevel)
|
|
442
|
+
: buildGitLabYaml(riskLevel);
|
|
443
|
+
return { recommendations: yaml };
|
|
444
|
+
}
|
|
445
|
+
// ---------------------------------------------------------------------------
|
|
446
|
+
// Handler
|
|
447
|
+
// ---------------------------------------------------------------------------
|
|
448
|
+
export function handlePlanRepoGovernance(args) {
|
|
449
|
+
// Validate repoType
|
|
450
|
+
const repoTypeArg = args["repoType"];
|
|
451
|
+
if (!isValid(repoTypeArg, VALID_REPO_TYPES)) {
|
|
452
|
+
throw makeRpcError(`repoType inválido: "${String(repoTypeArg)}". Valores permitidos: ${VALID_REPO_TYPES.join(", ")}.`, { invalidValue: repoTypeArg });
|
|
453
|
+
}
|
|
454
|
+
const repoType = repoTypeArg;
|
|
455
|
+
// Validate platform
|
|
456
|
+
const platformArg = args["platform"];
|
|
457
|
+
if (!isValid(platformArg, VALID_PLATFORMS)) {
|
|
458
|
+
throw makeRpcError(`platform inválido: "${String(platformArg)}". Valores permitidos: ${VALID_PLATFORMS.join(", ")}.`, { invalidValue: platformArg });
|
|
459
|
+
}
|
|
460
|
+
const platform = platformArg;
|
|
461
|
+
// Validate riskLevel
|
|
462
|
+
const riskLevelArg = args["riskLevel"];
|
|
463
|
+
if (!isValid(riskLevelArg, VALID_RISK_LEVELS)) {
|
|
464
|
+
throw makeRpcError(`riskLevel inválido: "${String(riskLevelArg)}". Valores permitidos: L1, L2, L3.`, { invalidValue: riskLevelArg });
|
|
465
|
+
}
|
|
466
|
+
const riskLevel = riskLevelArg;
|
|
467
|
+
// Validate organizationContext (optional)
|
|
468
|
+
const orgCtxArg = args["organizationContext"];
|
|
469
|
+
if (orgCtxArg !== undefined && orgCtxArg !== null) {
|
|
470
|
+
if (typeof orgCtxArg !== "object" || Array.isArray(orgCtxArg)) {
|
|
471
|
+
throw makeRpcError('organizationContext deve ser um objecto.');
|
|
472
|
+
}
|
|
473
|
+
const orgCtx = orgCtxArg;
|
|
474
|
+
const scaleArg = orgCtx["scale"];
|
|
475
|
+
if (scaleArg !== undefined && !isValid(scaleArg, VALID_SCALES)) {
|
|
476
|
+
throw makeRpcError(`organizationContext.scale inválido: "${String(scaleArg)}". Valores permitidos: ${VALID_SCALES.join(", ")}.`, { invalidValue: scaleArg });
|
|
477
|
+
}
|
|
478
|
+
const enforcementArg = orgCtx["enforcementLevel"];
|
|
479
|
+
if (enforcementArg !== undefined && !isValid(enforcementArg, VALID_ENFORCEMENT_LEVELS)) {
|
|
480
|
+
throw makeRpcError(`organizationContext.enforcementLevel inválido: "${String(enforcementArg)}". Valores permitidos: ${VALID_ENFORCEMENT_LEVELS.join(", ")}.`, { invalidValue: enforcementArg });
|
|
481
|
+
}
|
|
482
|
+
const teamSizeArg = orgCtx["teamSize"];
|
|
483
|
+
if (teamSizeArg !== undefined) {
|
|
484
|
+
if (typeof teamSizeArg !== "number" ||
|
|
485
|
+
!Number.isInteger(teamSizeArg) ||
|
|
486
|
+
teamSizeArg < 1) {
|
|
487
|
+
throw makeRpcError(`organizationContext.teamSize inválido: "${String(teamSizeArg)}". Deve ser um inteiro ≥ 1.`, { invalidValue: teamSizeArg });
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
// Build output
|
|
492
|
+
const applicableControls = getApplicableControls(repoType, riskLevel);
|
|
493
|
+
const applicableIds = new Set(applicableControls.map((c) => c.controlId));
|
|
494
|
+
const mandatoryControlIds = getMandatoryControlIds(riskLevel).filter((id) => applicableIds.has(id));
|
|
495
|
+
const mandatorySet = new Set(mandatoryControlIds);
|
|
496
|
+
const recommendedControlIds = applicableControls
|
|
497
|
+
.map((c) => c.controlId)
|
|
498
|
+
.filter((id) => !mandatorySet.has(id));
|
|
499
|
+
return {
|
|
500
|
+
applicableControls,
|
|
501
|
+
mandatoryControls: mandatoryControlIds,
|
|
502
|
+
recommendedControls: recommendedControlIds,
|
|
503
|
+
baselineCheckpoints: buildBaselineCheckpoints(riskLevel, platform),
|
|
504
|
+
evidenceChecklist: buildEvidenceChecklist(riskLevel),
|
|
505
|
+
gaps: buildGaps(repoType, riskLevel),
|
|
506
|
+
platformSpecific: buildPlatformSpecific(platform, riskLevel)
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
//# sourceMappingURL=plan-repo-governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-repo-governance.js","sourceRoot":"","sources":["../../src/tools/plan-repo-governance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|