@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,392 @@
1
+ const VALID_DOCUMENT_TYPES = [
2
+ "classification-template",
3
+ "threat-model-template",
4
+ "checklist",
5
+ "training-plan",
6
+ "secure-config"
7
+ ];
8
+ const VALID_RISK_LEVELS = ["L1", "L2", "L3"];
9
+ function isValidDocumentType(value) {
10
+ return (typeof value === "string" &&
11
+ VALID_DOCUMENT_TYPES.includes(value));
12
+ }
13
+ function isValidRiskLevel(value) {
14
+ return (typeof value === "string" &&
15
+ VALID_RISK_LEVELS.includes(value));
16
+ }
17
+ function makeRpcError(message, data) {
18
+ return Object.assign(new Error(message), {
19
+ rpcError: { code: -32602, message, data: data ?? null }
20
+ });
21
+ }
22
+ // ---------------------------------------------------------------------------
23
+ // Document structure definitions
24
+ // ---------------------------------------------------------------------------
25
+ function buildClassificationTemplate(riskLevel) {
26
+ const base = [
27
+ {
28
+ name: "Identificação",
29
+ mandatory: true,
30
+ fields: [
31
+ { name: "Nome da Aplicação", required: "mandatory", guidance: "Identificador único e nome oficial da aplicação." },
32
+ { name: "Proprietário / Equipa", required: "mandatory", guidance: "Nome da equipa ou pessoa responsável." },
33
+ { name: "Descrição Funcional", required: "mandatory", guidance: "Resumo do propósito e funcionalidades principais." }
34
+ ]
35
+ },
36
+ {
37
+ name: "Dados Processados",
38
+ mandatory: true,
39
+ fields: [
40
+ { name: "Tipos de Dados", required: "mandatory", guidance: "Listar categorias de dados (ex: PII, financeiros, operacionais)." },
41
+ { name: "Volume Estimado", required: "conditional", guidance: "Preencher se relevante para a classificação de risco." },
42
+ { name: "Retenção e Eliminação", required: "optional", guidance: "Política de retenção aplicável." }
43
+ ]
44
+ },
45
+ {
46
+ name: "Nível de Risco",
47
+ mandatory: true,
48
+ fields: [
49
+ { name: "Classificação Determinada", required: "mandatory", guidance: "Indicar L1, L2 ou L3 com justificação baseada nos critérios SbD-ToE." },
50
+ { name: "Critérios Aplicados", required: "mandatory", guidance: "Listar os critérios que levaram à classificação." }
51
+ ]
52
+ }
53
+ ];
54
+ if (riskLevel === "L2" || riskLevel === "L3") {
55
+ base.push({
56
+ name: "Ameaças Identificadas",
57
+ mandatory: true,
58
+ fields: [
59
+ { name: "Principais Ameaças", required: "mandatory", guidance: "Listar as ameaças identificadas no contexto da aplicação." },
60
+ { name: "Impacto Estimado", required: "mandatory", guidance: "Para cada ameaça, descrever o impacto potencial." },
61
+ { name: "Probabilidade", required: "conditional", guidance: "Estimativa de probabilidade para cada ameaça (alta/média/baixa)." }
62
+ ]
63
+ });
64
+ }
65
+ if (riskLevel === "L3") {
66
+ base.push({
67
+ name: "Plano de Remediação",
68
+ mandatory: true,
69
+ fields: [
70
+ { name: "Acções de Mitigação", required: "mandatory", guidance: "Para cada ameaça L3, descrever as acções de mitigação concretas." },
71
+ { name: "Responsáveis", required: "mandatory", guidance: "Assignar responsáveis por cada acção." },
72
+ { name: "Prazo de Implementação", required: "mandatory", guidance: "Data limite para cada acção de remediação." },
73
+ { name: "Evidências de Validação", required: "conditional", guidance: "Artefactos que comprovam a implementação das mitigações." }
74
+ ]
75
+ });
76
+ }
77
+ return base;
78
+ }
79
+ function buildThreatModelTemplate(riskLevel) {
80
+ const base = [
81
+ {
82
+ name: "Âmbito",
83
+ mandatory: true,
84
+ fields: [
85
+ { name: "Sistema em Análise", required: "mandatory", guidance: "Identificar os componentes e boundaries do sistema." },
86
+ { name: "Pressupostos", required: "mandatory", guidance: "Listar os pressupostos de segurança assumidos." },
87
+ { name: "Exclusões", required: "optional", guidance: "Componentes fora do âmbito e justificação." }
88
+ ]
89
+ },
90
+ {
91
+ name: "Actores",
92
+ mandatory: true,
93
+ fields: [
94
+ { name: "Actores Legítimos", required: "mandatory", guidance: "Identificar utilizadores e sistemas que interagem com o sistema." },
95
+ { name: "Actores Adversariais", required: "mandatory", guidance: "Perfis de atacante relevantes para o contexto." },
96
+ { name: "Nível de Confiança por Actor", required: "conditional", guidance: "Descrever o nível de confiança atribuído a cada actor." }
97
+ ]
98
+ },
99
+ {
100
+ name: "Superfície de Ataque",
101
+ mandatory: true,
102
+ fields: [
103
+ { name: "Entry Points", required: "mandatory", guidance: "Listar todos os pontos de entrada no sistema (APIs, UI, ficheiros, etc.)." },
104
+ { name: "Assets Críticos", required: "mandatory", guidance: "Identificar os assets que precisam de protecção." },
105
+ { name: "Trust Boundaries", required: "conditional", guidance: "Desenhar os limites de confiança entre componentes." }
106
+ ]
107
+ }
108
+ ];
109
+ if (riskLevel === "L2" || riskLevel === "L3") {
110
+ base.push({
111
+ name: "Árvores de Ameaça",
112
+ mandatory: true,
113
+ fields: [
114
+ { name: "Ameaças STRIDE", required: "mandatory", guidance: "Identificar ameaças usando a metodologia STRIDE por componente." },
115
+ { name: "Cenários de Ataque", required: "mandatory", guidance: "Descrever cenários de ataque realistas para as ameaças identificadas." },
116
+ { name: "Priorização", required: "conditional", guidance: "Priorizar ameaças por impacto e probabilidade." }
117
+ ]
118
+ }, {
119
+ name: "Controlos",
120
+ mandatory: true,
121
+ fields: [
122
+ { name: "Controlos Existentes", required: "mandatory", guidance: "Listar controlos de segurança já implementados." },
123
+ { name: "Controlos Propostos", required: "mandatory", guidance: "Descrever novos controlos a implementar por cada ameaça." },
124
+ { name: "Referências SbD-ToE", required: "optional", guidance: "Citar os CTRL-* relevantes do manual SbD-ToE." }
125
+ ]
126
+ });
127
+ }
128
+ if (riskLevel === "L3") {
129
+ base.push({
130
+ name: "Análise de Residual Risk",
131
+ mandatory: true,
132
+ fields: [
133
+ { name: "Risco Residual por Ameaça", required: "mandatory", guidance: "Após mitigações, documentar o risco residual aceite para cada ameaça." },
134
+ { name: "Aprovação Formal", required: "mandatory", guidance: "Registo de aprovação do risco residual pela entidade responsável." },
135
+ { name: "Plano de Revisão", required: "conditional", guidance: "Periodicidade de revisão do threat model." }
136
+ ]
137
+ });
138
+ }
139
+ return base;
140
+ }
141
+ function buildChecklist(riskLevel) {
142
+ const base = [
143
+ {
144
+ name: "Requisitos Mínimos L1",
145
+ mandatory: true,
146
+ fields: [
147
+ { name: "Autenticação Básica", required: "mandatory", guidance: "Verificar se autenticação está implementada e configurada correctamente." },
148
+ { name: "Gestão de Segredos", required: "mandatory", guidance: "Confirmar que secrets não estão hardcoded no código ou versionados." },
149
+ { name: "Logging de Eventos de Segurança", required: "mandatory", guidance: "Verificar que eventos relevantes de segurança são registados." },
150
+ { name: "Dependências Actualizadas", required: "conditional", guidance: "Confirmar ausência de dependências com vulnerabilidades conhecidas críticas." }
151
+ ]
152
+ }
153
+ ];
154
+ if (riskLevel === "L2" || riskLevel === "L3") {
155
+ base.push({
156
+ name: "Requisitos Adicionais L2",
157
+ mandatory: true,
158
+ fields: [
159
+ { name: "Testes de Segurança Automatizados", required: "mandatory", guidance: "SAST/DAST integrados no pipeline CI/CD sem findings críticos." },
160
+ { name: "Revisão de Código com Foco em Segurança", required: "mandatory", guidance: "Processo de code review inclui verificação de aspectos de segurança." },
161
+ { name: "Gestão de Incidentes", required: "mandatory", guidance: "Processo documentado de resposta a incidentes de segurança." },
162
+ { name: "Monitorização Activa", required: "conditional", guidance: "Alertas configurados para eventos de segurança anómalos." }
163
+ ]
164
+ });
165
+ }
166
+ if (riskLevel === "L3") {
167
+ base.push({
168
+ name: "Requisitos Regulatórios L3",
169
+ mandatory: true,
170
+ fields: [
171
+ { name: "Conformidade Normativa", required: "mandatory", guidance: "Identificar e documentar conformidade com normas aplicáveis (GDPR, NIS2, etc.)." },
172
+ { name: "Auditoria e Rastreabilidade", required: "mandatory", guidance: "Logs de auditoria com retenção conforme requisitos legais." },
173
+ { name: "Relatório de Segurança Periódico", required: "mandatory", guidance: "Frequência e formato do relatório de segurança exigido." },
174
+ { name: "Aprovações de Terceiros", required: "conditional", guidance: "Auditorias externas ou certificações necessárias." }
175
+ ]
176
+ });
177
+ }
178
+ return base;
179
+ }
180
+ function buildTrainingPlan(riskLevel) {
181
+ const base = [
182
+ {
183
+ name: "Objectivos",
184
+ mandatory: true,
185
+ fields: [
186
+ { name: "Objectivos de Aprendizagem", required: "mandatory", guidance: "Listar os conhecimentos e competências a adquirir." },
187
+ { name: "Resultados Esperados", required: "mandatory", guidance: "Descrever o estado de preparação da equipa após a formação." }
188
+ ]
189
+ },
190
+ {
191
+ name: "Audiência",
192
+ mandatory: true,
193
+ fields: [
194
+ { name: "Perfis Alvo", required: "mandatory", guidance: "Identificar os papéis que devem participar na formação." },
195
+ { name: "Pré-requisitos", required: "conditional", guidance: "Conhecimentos mínimos esperados dos participantes." }
196
+ ]
197
+ },
198
+ {
199
+ name: "Módulos Base",
200
+ mandatory: true,
201
+ fields: [
202
+ { name: "Fundamentos SbD-ToE", required: "mandatory", guidance: "Conceitos base do manual, níveis de risco e estrutura de capítulos." },
203
+ { name: "Práticas de Segurança no Ciclo de Desenvolvimento", required: "mandatory", guidance: "Como integrar segurança nas fases de design, dev e deploy." },
204
+ { name: "Uso das Tools MCP SbD-ToE", required: "conditional", guidance: "Demonstração prática das tools disponíveis no servidor MCP." }
205
+ ]
206
+ }
207
+ ];
208
+ if (riskLevel === "L2" || riskLevel === "L3") {
209
+ base.push({
210
+ name: "Exercícios Práticos",
211
+ mandatory: true,
212
+ fields: [
213
+ { name: "Cenários de Ameaça", required: "mandatory", guidance: "Exercícios baseados em cenários reais de ameaça do contexto da equipa." },
214
+ { name: "Hands-on Threat Modeling", required: "mandatory", guidance: "Exercício prático de threat modeling com metodologia SbD-ToE." },
215
+ { name: "Simulação de Incident Response", required: "conditional", guidance: "Exercício de resposta a incidente de segurança simulado." }
216
+ ]
217
+ });
218
+ }
219
+ if (riskLevel === "L3") {
220
+ base.push({
221
+ name: "Avaliação e Certificação",
222
+ mandatory: true,
223
+ fields: [
224
+ { name: "Critérios de Avaliação", required: "mandatory", guidance: "Definir os critérios e limites de aprovação." },
225
+ { name: "Formato da Avaliação", required: "mandatory", guidance: "Descrever o método de avaliação (teste, projecto, demonstração)." },
226
+ { name: "Registo de Conclusão", required: "mandatory", guidance: "Documento comprovativo de conclusão e aprovação da formação." },
227
+ { name: "Periodicidade de Renovação", required: "conditional", guidance: "Frequência com que a formação deve ser repetida ou actualizada." }
228
+ ]
229
+ });
230
+ }
231
+ return base;
232
+ }
233
+ function buildSecureConfig(riskLevel) {
234
+ const base = [
235
+ {
236
+ name: "Hardening Base",
237
+ mandatory: true,
238
+ fields: [
239
+ { name: "Configuração Mínima de Sistema", required: "mandatory", guidance: "Listar as configurações de sistema operativo/runtime aplicadas para reduzir superfície de ataque." },
240
+ { name: "Portos e Serviços Expostos", required: "mandatory", guidance: "Inventariar todos os portos e serviços activos, justificando cada um." },
241
+ { name: "Actualizações e Patches", required: "mandatory", guidance: "Política de aplicação de patches de segurança." }
242
+ ]
243
+ },
244
+ {
245
+ name: "Segredos",
246
+ mandatory: true,
247
+ fields: [
248
+ { name: "Inventário de Segredos", required: "mandatory", guidance: "Listar todos os segredos usados (API keys, passwords, certificados)." },
249
+ { name: "Mecanismo de Armazenamento", required: "mandatory", guidance: "Descrever o vault ou mecanismo seguro de armazenamento de segredos." },
250
+ { name: "Rotação de Segredos", required: "conditional", guidance: "Política de rotação periódica de segredos." }
251
+ ]
252
+ },
253
+ {
254
+ name: "Logging",
255
+ mandatory: true,
256
+ fields: [
257
+ { name: "Eventos Registados", required: "mandatory", guidance: "Listar os eventos de segurança que devem ser logados." },
258
+ { name: "Formato e Destino dos Logs", required: "mandatory", guidance: "Formato estruturado e destino seguro dos logs." },
259
+ { name: "Retenção", required: "conditional", guidance: "Período de retenção dos logs de segurança." }
260
+ ]
261
+ }
262
+ ];
263
+ if (riskLevel === "L2" || riskLevel === "L3") {
264
+ base.push({
265
+ name: "Network Segmentation",
266
+ mandatory: true,
267
+ fields: [
268
+ { name: "Segmentação de Rede", required: "mandatory", guidance: "Descrever a segmentação de rede aplicada (VLANs, security groups, etc.)." },
269
+ { name: "Firewall Rules", required: "mandatory", guidance: "Inventariar e justificar as regras de firewall activas." },
270
+ { name: "Ingress/Egress Control", required: "conditional", guidance: "Políticas de controlo de tráfego de entrada e saída." }
271
+ ]
272
+ }, {
273
+ name: "mTLS",
274
+ mandatory: true,
275
+ fields: [
276
+ { name: "Serviços com mTLS", required: "mandatory", guidance: "Identificar os serviços que requerem mTLS e o estado de implementação." },
277
+ { name: "Gestão de Certificados", required: "mandatory", guidance: "Processo de emissão, renovação e revogação de certificados." },
278
+ { name: "Certificate Pinning", required: "optional", guidance: "Avaliação da necessidade de certificate pinning para clientes móveis." }
279
+ ]
280
+ });
281
+ }
282
+ if (riskLevel === "L3") {
283
+ base.push({
284
+ name: "Auditoria Contínua",
285
+ mandatory: true,
286
+ fields: [
287
+ { name: "Ferramentas de Auditoria", required: "mandatory", guidance: "Listar as ferramentas de auditoria contínua activas (CSPM, SIEM, etc.)." },
288
+ { name: "Frequência de Revisão", required: "mandatory", guidance: "Periodicidade das revisões de segurança automatizadas e manuais." },
289
+ { name: "Alertas Críticos", required: "mandatory", guidance: "Definir os alertas que requerem resposta imediata." }
290
+ ]
291
+ }, {
292
+ name: "Conformidade",
293
+ mandatory: true,
294
+ fields: [
295
+ { name: "Frameworks Aplicáveis", required: "mandatory", guidance: "Listar os frameworks regulatórios e normativos aplicáveis (GDPR, NIS2, ISO 27001, etc.)." },
296
+ { name: "Controlos de Conformidade", required: "mandatory", guidance: "Mapear controlos de segurança implementados para cada requisito normativo." },
297
+ { name: "Evidências de Conformidade", required: "mandatory", guidance: "Documentar as evidências disponíveis para auditoria externa." },
298
+ { name: "Plano de Melhoria", required: "conditional", guidance: "Acções planeadas para fechar gaps de conformidade identificados." }
299
+ ]
300
+ });
301
+ }
302
+ return base;
303
+ }
304
+ // ---------------------------------------------------------------------------
305
+ // Acceptance criteria per type
306
+ // ---------------------------------------------------------------------------
307
+ const ACCEPTANCE_CRITERIA = {
308
+ "classification-template": [
309
+ "Todas as secções obrigatórias preenchidas.",
310
+ "Classificação de risco justificada com critérios documentados.",
311
+ "Dados processados inventariados e categorizados.",
312
+ "Documento revisto e aprovado pelo responsável de segurança."
313
+ ],
314
+ "threat-model-template": [
315
+ "Âmbito e actores completamente identificados.",
316
+ "Superfície de ataque mapeada com entry points e assets.",
317
+ "Para L2+: todas as ameaças STRIDE endereçadas com controlos.",
318
+ "Para L3: risco residual documentado e aprovado formalmente."
319
+ ],
320
+ "checklist": [
321
+ "Todos os items marcados como cumpridos ou com justificação de não aplicabilidade.",
322
+ "Evidências recolhidas para cada item obrigatório.",
323
+ "Checklist revista e assinada antes do release.",
324
+ "Para L3: conformidade normativa verificada e documentada."
325
+ ],
326
+ "training-plan": [
327
+ "Todos os módulos base completados pela audiência alvo.",
328
+ "Exercícios práticos realizados e documentados.",
329
+ "Para L3: avaliação realizada com aprovação acima do threshold definido.",
330
+ "Registo de conclusão arquivado."
331
+ ],
332
+ "secure-config": [
333
+ "Hardening base aplicado e verificado em todos os ambientes.",
334
+ "Segredos em vault — zero segredos em código ou configuração versionada.",
335
+ "Logging de eventos de segurança activo e testado.",
336
+ "Para L2+: segmentação de rede e mTLS implementados e documentados.",
337
+ "Para L3: conformidade auditada e evidências recolhidas."
338
+ ]
339
+ };
340
+ // ---------------------------------------------------------------------------
341
+ // Relevant bundles per type
342
+ // ---------------------------------------------------------------------------
343
+ const RELEVANT_BUNDLES = {
344
+ "classification-template": ["01-classificacao-aplicacoes", "02-requisitos-seguranca", "14-governanca-contratacao"],
345
+ "threat-model-template": ["03-threat-modeling", "04-arquitetura-segura", "02-requisitos-seguranca"],
346
+ "checklist": ["02-requisitos-seguranca", "06-desenvolvimento-seguro", "10-testes-seguranca"],
347
+ "training-plan": ["13-formacao-onboarding", "14-governanca-contratacao"],
348
+ "secure-config": ["04-arquitetura-segura", "08-iac-infraestrutura", "09-containers-imagens", "07-cicd-seguro"]
349
+ };
350
+ // ---------------------------------------------------------------------------
351
+ // Handler
352
+ // ---------------------------------------------------------------------------
353
+ export function handleGenerateDocument(args) {
354
+ const typeArg = args["type"];
355
+ if (!isValidDocumentType(typeArg)) {
356
+ throw makeRpcError(`Tipo de documento inválido: "${String(typeArg)}". Valores permitidos: ${VALID_DOCUMENT_TYPES.join(", ")}.`, { invalidValue: typeArg });
357
+ }
358
+ const documentType = typeArg;
359
+ const riskLevelArg = args["riskLevel"];
360
+ if (!isValidRiskLevel(riskLevelArg)) {
361
+ throw makeRpcError(`riskLevel inválido: "${String(riskLevelArg)}". Valores permitidos: L1, L2, L3.`, { invalidValue: riskLevelArg });
362
+ }
363
+ const riskLevel = riskLevelArg;
364
+ // context is accepted but not used in structure logic (reserved for future use)
365
+ // sanitized: not forwarded to any external system
366
+ let sections;
367
+ switch (documentType) {
368
+ case "classification-template":
369
+ sections = buildClassificationTemplate(riskLevel);
370
+ break;
371
+ case "threat-model-template":
372
+ sections = buildThreatModelTemplate(riskLevel);
373
+ break;
374
+ case "checklist":
375
+ sections = buildChecklist(riskLevel);
376
+ break;
377
+ case "training-plan":
378
+ sections = buildTrainingPlan(riskLevel);
379
+ break;
380
+ case "secure-config":
381
+ sections = buildSecureConfig(riskLevel);
382
+ break;
383
+ }
384
+ return {
385
+ documentType,
386
+ riskLevel,
387
+ sections,
388
+ acceptanceCriteria: ACCEPTANCE_CRITERIA[documentType],
389
+ relevantBundles: RELEVANT_BUNDLES[documentType]
390
+ };
391
+ }
392
+ //# sourceMappingURL=generate-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-document.js","sourceRoot":"","sources":["../../src/tools/generate-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,189 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { handleGenerateDocument } from "./generate-document.js";
3
+ // ---------------------------------------------------------------------------
4
+ // Helpers
5
+ // ---------------------------------------------------------------------------
6
+ function call(args) {
7
+ return handleGenerateDocument(args);
8
+ }
9
+ // ---------------------------------------------------------------------------
10
+ // Validation
11
+ // ---------------------------------------------------------------------------
12
+ describe("handleGenerateDocument — validation", () => {
13
+ it("throws rpcError -32602 for invalid type", () => {
14
+ let err;
15
+ try {
16
+ call({ type: "invalid-type", riskLevel: "L1" });
17
+ }
18
+ catch (e) {
19
+ err = e;
20
+ }
21
+ expect(err).toBeInstanceOf(Error);
22
+ expect(err.rpcError?.code).toBe(-32602);
23
+ expect(err.message).toContain("invalid-type");
24
+ });
25
+ it("throws rpcError -32602 for invalid riskLevel", () => {
26
+ let err;
27
+ try {
28
+ call({ type: "checklist", riskLevel: "L4" });
29
+ }
30
+ catch (e) {
31
+ err = e;
32
+ }
33
+ expect(err).toBeInstanceOf(Error);
34
+ expect(err.rpcError?.code).toBe(-32602);
35
+ expect(err.message).toContain("L4");
36
+ });
37
+ it("throws rpcError -32602 when type is missing", () => {
38
+ let err;
39
+ try {
40
+ call({ riskLevel: "L1" });
41
+ }
42
+ catch (e) {
43
+ err = e;
44
+ }
45
+ expect(err).toBeInstanceOf(Error);
46
+ expect(err.rpcError?.code).toBe(-32602);
47
+ });
48
+ it("throws rpcError -32602 when riskLevel is missing", () => {
49
+ let err;
50
+ try {
51
+ call({ type: "checklist" });
52
+ }
53
+ catch (e) {
54
+ err = e;
55
+ }
56
+ expect(err).toBeInstanceOf(Error);
57
+ expect(err.rpcError?.code).toBe(-32602);
58
+ });
59
+ });
60
+ // ---------------------------------------------------------------------------
61
+ // Output structure
62
+ // ---------------------------------------------------------------------------
63
+ describe("handleGenerateDocument — output structure", () => {
64
+ it("returns required fields for all 5 types at L1", () => {
65
+ const types = [
66
+ "classification-template",
67
+ "threat-model-template",
68
+ "checklist",
69
+ "training-plan",
70
+ "secure-config"
71
+ ];
72
+ for (const type of types) {
73
+ const result = call({ type, riskLevel: "L1" });
74
+ expect(result.documentType).toBe(type);
75
+ expect(result.riskLevel).toBe("L1");
76
+ expect(result.sections.length).toBeGreaterThan(0);
77
+ expect(result.acceptanceCriteria.length).toBeGreaterThan(0);
78
+ expect(result.relevantBundles.length).toBeGreaterThan(0);
79
+ }
80
+ });
81
+ it("context field is accepted but does not change output structure", () => {
82
+ const withContext = call({
83
+ type: "checklist",
84
+ riskLevel: "L1",
85
+ context: { projectName: "Test", team: "Dev" }
86
+ });
87
+ const withoutContext = call({
88
+ type: "checklist",
89
+ riskLevel: "L1"
90
+ });
91
+ expect(withContext.sections).toEqual(withoutContext.sections);
92
+ });
93
+ });
94
+ // ---------------------------------------------------------------------------
95
+ // L1/L2/L3 progression
96
+ // ---------------------------------------------------------------------------
97
+ describe("handleGenerateDocument — risk level progression", () => {
98
+ it("L3 has more sections than L1 for classification-template", () => {
99
+ const l1 = call({ type: "classification-template", riskLevel: "L1" });
100
+ const l3 = call({ type: "classification-template", riskLevel: "L3" });
101
+ expect(l3.sections.length).toBeGreaterThan(l1.sections.length);
102
+ });
103
+ it("L3 has more sections than L2 for threat-model-template", () => {
104
+ const l2 = call({ type: "threat-model-template", riskLevel: "L2" });
105
+ const l3 = call({ type: "threat-model-template", riskLevel: "L3" });
106
+ expect(l3.sections.length).toBeGreaterThanOrEqual(l2.sections.length);
107
+ });
108
+ it("L2 has more sections than L1 for secure-config", () => {
109
+ const l1 = call({ type: "secure-config", riskLevel: "L1" });
110
+ const l2 = call({ type: "secure-config", riskLevel: "L2" });
111
+ expect(l2.sections.length).toBeGreaterThan(l1.sections.length);
112
+ });
113
+ it("all types produce sections at all risk levels", () => {
114
+ const types = [
115
+ "classification-template",
116
+ "threat-model-template",
117
+ "checklist",
118
+ "training-plan",
119
+ "secure-config"
120
+ ];
121
+ const levels = ["L1", "L2", "L3"];
122
+ for (const type of types) {
123
+ for (const riskLevel of levels) {
124
+ const result = call({ type, riskLevel });
125
+ expect(result.sections.length).toBeGreaterThan(0);
126
+ }
127
+ }
128
+ });
129
+ });
130
+ // ---------------------------------------------------------------------------
131
+ // relevantBundles
132
+ // ---------------------------------------------------------------------------
133
+ describe("handleGenerateDocument — relevantBundles", () => {
134
+ it("classification-template has expected bundles", () => {
135
+ const result = call({ type: "classification-template", riskLevel: "L1" });
136
+ expect(result.relevantBundles).toContain("01-classificacao-aplicacoes");
137
+ expect(result.relevantBundles).toContain("02-requisitos-seguranca");
138
+ });
139
+ it("threat-model-template includes 03-threat-modeling", () => {
140
+ const result = call({ type: "threat-model-template", riskLevel: "L2" });
141
+ expect(result.relevantBundles).toContain("03-threat-modeling");
142
+ });
143
+ it("secure-config includes infrastructure bundles", () => {
144
+ const result = call({ type: "secure-config", riskLevel: "L1" });
145
+ expect(result.relevantBundles).toContain("08-iac-infraestrutura");
146
+ expect(result.relevantBundles).toContain("09-containers-imagens");
147
+ });
148
+ it("training-plan includes 13-formacao-onboarding", () => {
149
+ const result = call({ type: "training-plan", riskLevel: "L1" });
150
+ expect(result.relevantBundles).toContain("13-formacao-onboarding");
151
+ });
152
+ });
153
+ // ---------------------------------------------------------------------------
154
+ // Section fields
155
+ // ---------------------------------------------------------------------------
156
+ describe("handleGenerateDocument — section fields", () => {
157
+ it("each field has name, required, and guidance", () => {
158
+ const result = call({ type: "checklist", riskLevel: "L2" });
159
+ for (const section of result.sections) {
160
+ expect(typeof section.name).toBe("string");
161
+ expect(typeof section.mandatory).toBe("boolean");
162
+ for (const field of section.fields) {
163
+ expect(typeof field.name).toBe("string");
164
+ expect(["mandatory", "conditional", "optional"]).toContain(field.required);
165
+ expect(typeof field.guidance).toBe("string");
166
+ expect(field.guidance.length).toBeGreaterThan(0);
167
+ }
168
+ }
169
+ });
170
+ it("guidance never contains pre-filled substantive content (only instructions)", () => {
171
+ const types = [
172
+ "classification-template",
173
+ "threat-model-template",
174
+ "checklist",
175
+ "training-plan",
176
+ "secure-config"
177
+ ];
178
+ for (const type of types) {
179
+ const result = call({ type, riskLevel: "L2" });
180
+ for (const section of result.sections) {
181
+ for (const field of section.fields) {
182
+ // guidance should be instructional — check it's not suspiciously long pre-filled content
183
+ expect(field.guidance.length).toBeLessThan(300);
184
+ }
185
+ }
186
+ }
187
+ });
188
+ });
189
+ //# sourceMappingURL=generate-document.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-document.test.js","sourceRoot":"","sources":["../../src/tools/generate-document.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ type BundleCategory = "foundation" | "domain" | "operational";
2
+ interface BundleToReview {
3
+ chapterId: string;
4
+ readableTitle: string;
5
+ category: BundleCategory;
6
+ reason: string;
7
+ expectedEvidence: string[];
8
+ }
9
+ interface PathMappingEntry {
10
+ pattern: string;
11
+ matchedFiles: string[];
12
+ bundles: string[];
13
+ }
14
+ interface MapReviewScopeResult {
15
+ bundlesToReview: BundleToReview[];
16
+ pathMapping: PathMappingEntry[];
17
+ nextSteps: string[];
18
+ }
19
+ export declare function handleMapSbdToeReviewScope(args: Record<string, unknown>): MapReviewScopeResult;
20
+ export {};