agent-master-devsecops 3.9.0 → 5.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 (82) hide show
  1. package/README.md +205 -371
  2. package/agents/AGENT_DEVSECOPS.md +32 -417
  3. package/agents/AGENT_INFRA.md +31 -0
  4. package/agents/AGENT_ORCHESTRATOR.md +39 -264
  5. package/agents/AGENT_QA.md +58 -186
  6. package/agents/AGENT_SCRUM.md +23 -190
  7. package/agents/AGENT_SRE.md +22 -173
  8. package/agents/AGENT_UIUX.md +26 -162
  9. package/docs/ARCHITECTURE.md +152 -148
  10. package/docs/CALCULATIONS.md +17 -17
  11. package/docs/CHANGELOG.md +112 -49
  12. package/docs/ENGINEERING_RULES.md +56 -252
  13. package/docs/IDEAS.md +17 -17
  14. package/docs/LOCAL_BACKLOG.md +20 -0
  15. package/docs/STATE.md +111 -43
  16. package/docs/playbooks/PLAYBOOK_CIRCUIT_BREAKER_LLM.md +58 -58
  17. package/docs/playbooks/PLAYBOOK_OPENTELEMETRY_TRACING.md +58 -58
  18. package/package.json +59 -47
  19. package/scripts/auditors/a11y_auditor.js +462 -0
  20. package/scripts/auditors/code_quality_auditor.js +444 -0
  21. package/scripts/auditors/contract_test_validator.js +396 -0
  22. package/scripts/auditors/eval_harness.js +213 -0
  23. package/scripts/auditors/git_hygiene_linter.js +391 -0
  24. package/scripts/auditors/pr_reviewer.js +627 -0
  25. package/scripts/auditors/sast_scanner.js +442 -0
  26. package/scripts/auditors/sca_dependency_auditor.js +673 -0
  27. package/scripts/{bootstrap_cli.js → bin/bootstrap_cli.js} +597 -468
  28. package/scripts/bin/domain_idea_miner.js +658 -0
  29. package/scripts/bin/smart_onboarding.js +905 -0
  30. package/scripts/{web_inspector.js → bin/web_inspector.js} +578 -355
  31. package/scripts/core/architecture_advisor.js +378 -0
  32. package/scripts/core/ast_skeletonizer.js +413 -0
  33. package/scripts/core/autonomous_remediation_engine.js +305 -0
  34. package/scripts/{circuit_breaker.js → core/circuit_breaker.js} +546 -330
  35. package/scripts/core/context_compressor.js +237 -0
  36. package/scripts/core/fast_feature_scaffold.js +840 -0
  37. package/scripts/core/hot_state_cache.js +238 -0
  38. package/scripts/core/knowledge_gateway.js +888 -0
  39. package/scripts/{magic_prompt_generator.js → core/magic_prompt_generator.js} +250 -205
  40. package/scripts/{multi_agent_orchestrator.js → core/multi_agent_orchestrator.js} +421 -258
  41. package/scripts/{otel_tracer.js → core/otel_tracer.js} +335 -228
  42. package/scripts/{perf_benchmark.js → core/perf_benchmark.js} +212 -153
  43. package/scripts/core/sarif_engine.js +299 -0
  44. package/scripts/{sre_remediation_engine.js → core/sre_remediation_engine.js} +236 -174
  45. package/scripts/{universal_packager.js → core/universal_packager.js} +357 -313
  46. package/scripts/integrations/atlassian_client.js +600 -0
  47. package/scripts/integrations/atlassian_sync_action.js +576 -0
  48. package/scripts/integrations/confluence_sync.js +684 -0
  49. package/scripts/integrations/credentials_guard.js +500 -0
  50. package/scripts/integrations/jira_manager.js +722 -0
  51. package/scripts/mcp/handlers/atlassian_handlers.js +300 -0
  52. package/scripts/mcp/handlers/core_handlers.js +419 -0
  53. package/scripts/mcp/handlers/qa_handlers.js +502 -0
  54. package/scripts/mcp/handlers/rules_handlers.js +379 -0
  55. package/scripts/mcp/handlers/scaffold_handlers.js +334 -0
  56. package/scripts/mcp/handlers/sre_handlers.js +443 -0
  57. package/scripts/mcp/resources_registry.js +453 -0
  58. package/scripts/mcp/server.js +408 -0
  59. package/scripts/mcp/tool_handlers.js +444 -0
  60. package/scripts/mcp/tools_registry.js +1123 -0
  61. package/scripts/mcp_server.js +236 -1884
  62. package/.cursorignore +0 -23
  63. package/agents/compact/AGENT_ORCHESTRATOR_COMPACTO.md +0 -53
  64. package/scripts/a11y_auditor.js +0 -187
  65. package/scripts/ast_skeletonizer.js +0 -220
  66. package/scripts/atlassian_client.js +0 -238
  67. package/scripts/atlassian_sync_action.js +0 -269
  68. package/scripts/code_quality_auditor.js +0 -142
  69. package/scripts/confluence_sync.js +0 -337
  70. package/scripts/context_compressor.js +0 -139
  71. package/scripts/contract_test_validator.js +0 -166
  72. package/scripts/credentials_guard.js +0 -216
  73. package/scripts/domain_idea_miner.js +0 -364
  74. package/scripts/eval_harness.js +0 -100
  75. package/scripts/fast_feature_scaffold.js +0 -338
  76. package/scripts/git_hygiene_linter.js +0 -186
  77. package/scripts/hot_state_cache.js +0 -95
  78. package/scripts/jira_manager.js +0 -408
  79. package/scripts/pr_reviewer.js +0 -373
  80. package/scripts/sast_scanner.js +0 -180
  81. package/scripts/sca_dependency_auditor.js +0 -167
  82. package/scripts/smart_onboarding.js +0 -610
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scripts/core/context_compressor.js
4
+ *
5
+ * Compactador Semântico de Contexto para Modelos Locais (v5.1.0 Enterprise).
6
+ * Destila o prompt canônico e regras do Agent Master em menos de 1.500 tokens (~6.000 chars),
7
+ * preservando 100% da autoridade normativa, os 10 Princípios Canônicos, as Regras de Engenharia,
8
+ * os Modos de Operação e o Tríplice Registro.
9
+ *
10
+ * Otimizado para execução com baixa latência em Ollama (Llama 3.1 8B, Qwen 2.5 Coder, Mistral 7B).
11
+ */
12
+
13
+ 'use strict';
14
+
15
+ const fs = require('node:fs');
16
+ const path = require('node:path');
17
+ const { version: PKG_VERSION } = require('../../package.json');
18
+ const { createSarifReport } = require('./sarif_engine.js');
19
+
20
+ const ROOT_DIR = path.resolve(__dirname, '../..');
21
+
22
+ class ContextCompressor {
23
+ constructor(options = {}) {
24
+ this.maxTokens = options.maxTokens || 1500;
25
+ this.charsPerToken = options.charsPerToken || 4.0;
26
+ }
27
+
28
+ estimateTokens(text = '') {
29
+ if (!text || typeof text !== 'string') return 0;
30
+ return Math.ceil(text.trim().length / this.charsPerToken);
31
+ }
32
+
33
+ generateCompactPrompt() {
34
+ return `=== AGENT ORCHESTRATOR & SUÍTE MULTI-AGENTE (LOCAL HIGH-DENSITY EDITION v${PKG_VERSION}) ===
35
+ [DIRETIVA SUPREMA]: Você é o AGENT ORCHESTRATOR da Suíte Multi-Agente (Orchestrator, UI/UX, DevSecOps, QA, Scrum, SRE e Infra Engineer). Atue como Staff Engineer, Arquiteto de Soluções, Especialista em Segurança e Auditor Cético.
36
+ [COMPATIBILIDADE]: Otimizado para modelos locais (Ollama, vLLM, LM Studio) e IDEs. Adere aos 10 Princípios Canônicos (v5.1 Enterprise).
37
+
38
+ [10 PRINCÍPIOS CANÔNICOS DE ENGENHARIA & GOVERNANÇA (REGRAS NORMATIVAS)]:
39
+ R1. TDD Obrigatório: Escreva ou valide testes unitários ANTES de modificar código de produção (Princípio 4).
40
+ R2. Branching por Ticket: Trabalhe sempre em branch dedicada exclusivamente com o identificador <TICKET>. Nunca comite direto em main (Princípio 3).
41
+ R3. Pull Request & CI: Todo merge exige PR formal no GitHub com 100% dos checks de CI verdes.
42
+ R4. Zero Segredos (TruffleHog): NUNCA comite credenciais, arquivos .env, tokens de API ou chaves privadas (Princípio 2).
43
+ R5. Defesa DevSecOps & OWASP: Imunidade a CWE-78 (Cmd Injection), CWE-79 (XSS), CWE-89 (SQLi), CWE-116 e CWE-1333 (ReDoS).
44
+ R6. Observabilidade Nativa: Exponha /metrics no padrão Prometheus 0.0.4 e W3C TraceContext (Princípio 6).
45
+ R7. Protocolo Dual-Layer: Chat curto e objetivo com tópicos separados por LINHA EM BRANCO DUPLA (\\n\\n) e links markdown clicáveis.
46
+ R8. Bíblia Confluence: Toda decisão arquitetural exige novo ADR canônico no Confluence (Princípio 9).
47
+ R9. Governança Jira: Mova cards para 'Em andamento' antes de iniciar; finalize com relatório técnico denso.
48
+ R10. Zero Suposições & Grounding Oficial: Baseie decisões em APIs oficiais via Dynamic Knowledge Gateway (W3C, OSV, Spring).
49
+ R11. Integridade de Documentação: Preserve comentários, docstrings e contratos de API pré-existentes.
50
+ R12. Segurança Operacional: NUNCA execute comandos destrutivos (rm -rf, git reset --hard não planejado, drop database).
51
+ R13. Ceticismo Adversário (AGENT_QA.md): Audite diffs com frieza cética; forneça testes de quebra e nunca aprove código sem testes.
52
+ R14. Filtro de Sanidade de Ideias: Ideias em docs/IDEAS.md devem ter conexão 100% direta com o domínio e stack real do projeto (Princípio 7).
53
+ R15. Imutabilidade & Segredos Compulsórios: Requisitos do fluxo são imutáveis e inquebráveis. Valide e obtenha ativamente todas as credenciais (Princípio 8).
54
+
55
+ [TRÍPLICE REGISTRO]:
56
+ 1. Git: Branch dedicada -> Testes locais -> Commit no formato [<TICKET>] - <Ações breves em português> -> PR formal -> CI verde -> Merge.
57
+ 2. Jira / Backlog Local: 'A fazer' -> 'Em andamento' -> Comentário Canônico -> 'Concluído'.
58
+ 3. Confluence / Docs: Registro contínuo de novos ADRs na Bíblia do Projeto.
59
+
60
+ [MODOS DE OPERAÇÃO]:
61
+ - modo: orchestrator: Coordenação central, arquitetura, triagem e despacho de tarefas.
62
+ - modo: uiux: Design System, Heurísticas de Nielsen e acessibilidade WCAG 2.1 AA.
63
+ - modo: devsecops: Implementação de código robusto, arquitetura limpa e esteiras CI/CD.
64
+ - modo: qa: Auditoria adversária independente de PR e emissão de parecer canônico.
65
+ - modo: scrum: Gestão ágil, melhoria contínua (PDCA/Ishikawa) e backlog recursivo.
66
+ - modo: sre: Observabilidade contínua (/metrics), telemetria e auto-remediação.
67
+ - modo: infra: Infraestrutura real, containers, Cloudflare Tunnel e resiliência de rede.
68
+ - modo: full-dev: Loop autônomo contínuo: estuda ideia -> implementa -> testa -> registra -> avança sem parar.
69
+
70
+ [PROTOCOLO DE SAÍDA NO CHAT]:
71
+ • **Feito 1** ([Jira TICKET](url) · [Commit abc](url))
72
+ Descrição direta do feito.
73
+
74
+ • **Feito 2** ([Confluence ADR](url) · [PR #X](url))
75
+ Detalhe objetivo do teste ou entrega.
76
+ (Obrigatória linha em branco dupla entre tópicos)`;
77
+ }
78
+
79
+ compressCustomText(text = '', maxTokens = this.maxTokens) {
80
+ if (!text || typeof text !== 'string') return '';
81
+
82
+ let cleaned = text
83
+ .replace(/<!--[\s\S]*?-->/g, '')
84
+ .replace(/<example>[\s\S]*?<\/example>/gi, '')
85
+ .replace(/<[^>]+>/g, '')
86
+ .replace(/\r\n/g, '\n')
87
+ .replace(/[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F1E0}-\u{1F1FF}\u{2700}-\u{27BF}\u{2600}-\u{26FF}]/gu, '')
88
+ .replace(/[ \t]+/g, ' ')
89
+ .replace(/\n{3,}/g, '\n\n')
90
+ .trim();
91
+
92
+ const maxChars = maxTokens * this.charsPerToken;
93
+ if (cleaned.length > maxChars) {
94
+ cleaned = cleaned.slice(0, maxChars - 3).trimEnd() + '...';
95
+ }
96
+
97
+ return cleaned;
98
+ }
99
+
100
+ exportCompactAgent(targetDir = ROOT_DIR, options = {}) {
101
+ const opts = options || {};
102
+ const writtenToDisk = opts.writeToDisk !== false;
103
+ const compactDir = path.join(targetDir, 'agents', 'compact');
104
+ const filePath = path.join(compactDir, 'AGENT_ORCHESTRATOR_COMPACTO.md');
105
+ const promptContent = this.generateCompactPrompt();
106
+
107
+ if (writtenToDisk) {
108
+ if (!fs.existsSync(compactDir)) {
109
+ fs.mkdirSync(compactDir, { recursive: true });
110
+ }
111
+ fs.writeFileSync(filePath, promptContent, 'utf8');
112
+ }
113
+
114
+ const tokens = this.estimateTokens(promptContent);
115
+ return {
116
+ filePath,
117
+ tokenCount: tokens,
118
+ charCount: promptContent.length,
119
+ underBudget: tokens <= this.maxTokens,
120
+ writtenToDisk,
121
+ prompt: promptContent
122
+ };
123
+ }
124
+
125
+ auditToSarif(text = null) {
126
+ const content = text !== null ? text : this.generateCompactPrompt();
127
+ const tokens = this.estimateTokens(content);
128
+ const findings = [];
129
+
130
+ if (tokens > this.maxTokens) {
131
+ findings.push({
132
+ ruleId: 'RULE-CTX-001',
133
+ name: 'ContextBudgetExceeded',
134
+ severity: 'WARNING',
135
+ message: `O prompt compactado excedeu o orçamento estrito de ${this.maxTokens} tokens (Total atual: ${tokens} tokens).`,
136
+ remediation: 'Reduza detalhes secundários preservando apenas os 10 Princípios Canônicos e o Tríplice Registro.'
137
+ });
138
+ }
139
+
140
+ return createSarifReport({
141
+ toolName: 'agent-master-context-compressor',
142
+ rules: [
143
+ {
144
+ id: 'RULE-CTX-001',
145
+ name: 'ContextBudgetExceeded',
146
+ description: 'Valida se o prompt gerado cabe dentro da janela compacta de modelos locais',
147
+ severity: 'MEDIUM',
148
+ cwe: 'CWE-400'
149
+ }
150
+ ],
151
+ findings,
152
+ properties: {
153
+ tokenCount: tokens,
154
+ maxTokens: this.maxTokens,
155
+ underBudget: tokens <= this.maxTokens
156
+ }
157
+ });
158
+ }
159
+
160
+ formatReport() {
161
+ const prompt = this.generateCompactPrompt();
162
+ const tokens = this.estimateTokens(prompt);
163
+ return [
164
+ '### Relatório de Compactação Semântica de Contexto',
165
+ `- **Versão:** v${PKG_VERSION} Enterprise`,
166
+ `- **Tokens Estimados:** ${tokens} (Orçamento: ${this.maxTokens})`,
167
+ `- **Caracteres:** ${prompt.length}`,
168
+ `- **Status:** ${tokens <= this.maxTokens ? '✅ **DENTRO DO ORÇAMENTO**' : '⚠️ **EXCEDIDO**'}`,
169
+ `- **Princípios Ativos:** 10 Princípios Canônicos Universais (v5.1)`
170
+ ].join('\n');
171
+ }
172
+
173
+ static estimateTokens(text) {
174
+ return new ContextCompressor().estimateTokens(text);
175
+ }
176
+
177
+ static generateCompactPrompt() {
178
+ return new ContextCompressor().generateCompactPrompt();
179
+ }
180
+
181
+ static compressCustomText(text, maxTokens) {
182
+ return new ContextCompressor().compressCustomText(text, maxTokens);
183
+ }
184
+
185
+ static exportCompactAgent(targetDir, options) {
186
+ return new ContextCompressor().exportCompactAgent(targetDir, options);
187
+ }
188
+ }
189
+
190
+ // Funções retrocompatíveis
191
+ function estimateTokens(text) {
192
+ return ContextCompressor.estimateTokens(text);
193
+ }
194
+
195
+ function generateCompactPrompt() {
196
+ return ContextCompressor.generateCompactPrompt();
197
+ }
198
+
199
+ function compressCustomText(text, maxTokens) {
200
+ return ContextCompressor.compressCustomText(text, maxTokens);
201
+ }
202
+
203
+ function exportCompactAgent(targetDir, options) {
204
+ return ContextCompressor.exportCompactAgent(targetDir, options);
205
+ }
206
+
207
+ async function runCli() {
208
+ const args = process.argv.slice(2);
209
+ const compressor = new ContextCompressor();
210
+ const result = compressor.exportCompactAgent(ROOT_DIR);
211
+
212
+ console.log('=== Compactador Semântico de Contexto para Modelos Locais (v5.1) ===');
213
+ console.log(`Arquivo Gerado: ${result.filePath}`);
214
+ console.log(`Caracteres: ${result.charCount}`);
215
+ console.log(`Tokens Estimados: ${result.tokenCount} (Orçamento máximo: ${compressor.maxTokens})`);
216
+ console.log(`Status de Conformidade: ${result.underBudget ? 'DENTRO DO ORÇAMENTO (APROVADO)' : 'ULTRAPASSADO'}`);
217
+
218
+ if (args.includes('--print')) {
219
+ console.log('\n--- Conteúdo Destilado ---\n');
220
+ console.log(result.prompt);
221
+ }
222
+ }
223
+
224
+ if (require.main === module) {
225
+ runCli().catch(err => {
226
+ console.error(err);
227
+ process.exit(1);
228
+ });
229
+ }
230
+
231
+ module.exports = {
232
+ ContextCompressor,
233
+ estimateTokens,
234
+ generateCompactPrompt,
235
+ compressCustomText,
236
+ exportCompactAgent
237
+ };