agent-master-devsecops 0.0.0-stage → 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 (61) hide show
  1. package/README.md +204 -2
  2. package/agents/AGENT_DEVSECOPS.md +32 -0
  3. package/agents/AGENT_INFRA.md +31 -0
  4. package/agents/AGENT_ORCHESTRATOR.md +39 -0
  5. package/agents/AGENT_QA.md +58 -0
  6. package/agents/AGENT_SCRUM.md +23 -0
  7. package/agents/AGENT_SRE.md +22 -0
  8. package/agents/AGENT_UIUX.md +26 -0
  9. package/docs/ARCHITECTURE.md +152 -0
  10. package/docs/CALCULATIONS.md +17 -0
  11. package/docs/CHANGELOG.md +112 -0
  12. package/docs/ENGINEERING_RULES.md +56 -0
  13. package/docs/IDEAS.md +17 -0
  14. package/docs/LOCAL_BACKLOG.md +20 -0
  15. package/docs/STATE.md +111 -0
  16. package/docs/playbooks/PLAYBOOK_CIRCUIT_BREAKER_LLM.md +58 -0
  17. package/docs/playbooks/PLAYBOOK_OPENTELEMETRY_TRACING.md +58 -0
  18. package/package.json +57 -4
  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/bin/bootstrap_cli.js +597 -0
  28. package/scripts/bin/domain_idea_miner.js +658 -0
  29. package/scripts/bin/smart_onboarding.js +905 -0
  30. package/scripts/bin/web_inspector.js +578 -0
  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/core/circuit_breaker.js +546 -0
  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/core/magic_prompt_generator.js +250 -0
  40. package/scripts/core/multi_agent_orchestrator.js +421 -0
  41. package/scripts/core/otel_tracer.js +335 -0
  42. package/scripts/core/perf_benchmark.js +212 -0
  43. package/scripts/core/sarif_engine.js +299 -0
  44. package/scripts/core/sre_remediation_engine.js +236 -0
  45. package/scripts/core/universal_packager.js +357 -0
  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 -0
@@ -0,0 +1,357 @@
1
+ /**
2
+ * Universal Multi-Platform Packager & Profile Generator
3
+ * Exportador universal de perfis, manifestos e configurações do Agent Master DevSecOps
4
+ * para Cursor IDE, Windsurf, Claude Desktop, ChatGPT Custom GPTs e Ollama local.
5
+ * Conforme especificado em AGDEV-5 e README.md.
6
+ */
7
+
8
+ const fs = require('node:fs');
9
+ const path = require('node:path');
10
+ const { version: PKG_VERSION } = require('../../package.json');
11
+ const { generateCompactPrompt } = require('./context_compressor.js');
12
+ const { createSarifReport } = require('./sarif_engine.js');
13
+
14
+ const SUPPORTED_PLATFORMS = ['cursor', 'windsurf', 'vscode', 'claude_desktop', 'chatgpt', 'ollama', 'antigravity', 'all'];
15
+
16
+ class UniversalPackager {
17
+ constructor(baseDir = path.resolve(__dirname, '../..')) {
18
+ this.baseDir = baseDir;
19
+ }
20
+
21
+ getCanonicalRules() {
22
+ const rulesPath = path.join(this.baseDir, 'docs', 'ENGINEERING_RULES.md');
23
+ if (fs.existsSync(rulesPath)) {
24
+ return fs.readFileSync(rulesPath, 'utf8');
25
+ }
26
+ return '10 Princípios Canônicos de Engenharia de Software & Governança';
27
+ }
28
+
29
+ getCompactPrompt() {
30
+ return generateCompactPrompt();
31
+ }
32
+
33
+ generateCursorProfile(targetDir, options = {}) {
34
+ const cursorRulesContent = `# Cursor Rules — Agent Master DevSecOps\n\n${this.getCompactPrompt()}`;
35
+ const mcpConfig = {
36
+ mcpServers: {
37
+ 'agent-master-devsecops': {
38
+ command: 'node',
39
+ args: [options.mcpServerPath || path.resolve(this.baseDir, 'scripts', 'mcp_server.js')]
40
+ }
41
+ }
42
+ };
43
+
44
+ const files = [
45
+ { path: path.join(targetDir, '.cursorrules'), content: cursorRulesContent },
46
+ { path: path.join(targetDir, '.cursor', 'mcp.json'), content: JSON.stringify(mcpConfig, null, 2) }
47
+ ];
48
+
49
+ if (!options.dryRun) {
50
+ files.forEach(f => {
51
+ fs.mkdirSync(path.dirname(f.path), { recursive: true });
52
+ fs.writeFileSync(f.path, f.content, 'utf8');
53
+ });
54
+ }
55
+
56
+ return { platform: 'cursor', filesCount: files.length, files: files.map(f => f.path) };
57
+ }
58
+
59
+ generateWindsurfProfile(targetDir, options = {}) {
60
+ const content = `# Windsurf Rules — Agent Master DevSecOps\n\n${this.getCompactPrompt()}`;
61
+ const filePath = path.join(targetDir, '.windsurfrules');
62
+
63
+ if (!options.dryRun) {
64
+ fs.mkdirSync(targetDir, { recursive: true });
65
+ fs.writeFileSync(filePath, content, 'utf8');
66
+ }
67
+
68
+ return { platform: 'windsurf', filesCount: 1, files: [filePath] };
69
+ }
70
+
71
+ generateClaudeDesktopProfile(targetDir, options = {}) {
72
+ const mcpConfig = {
73
+ mcpServers: {
74
+ 'agent-master-devsecops': {
75
+ command: 'node',
76
+ args: [options.mcpServerPath || path.resolve(this.baseDir, 'scripts', 'mcp_server.js')]
77
+ }
78
+ }
79
+ };
80
+ const filePath = path.join(targetDir, 'claude_desktop_config.json');
81
+
82
+ if (!options.dryRun) {
83
+ fs.mkdirSync(targetDir, { recursive: true });
84
+ fs.writeFileSync(filePath, JSON.stringify(mcpConfig, null, 2), 'utf8');
85
+ }
86
+
87
+ return { platform: 'claude_desktop', filesCount: 1, files: [filePath] };
88
+ }
89
+
90
+ generateChatGptProfile(targetDir, options = {}) {
91
+ const openApiSchema = {
92
+ openapi: '3.1.0',
93
+ info: {
94
+ title: 'Agent Master DevSecOps API',
95
+ version: PKG_VERSION,
96
+ description: 'Serviço de auditoria e governança autônoma DevSecOps para Custom GPTs.'
97
+ },
98
+ paths: {
99
+ '/audit': {
100
+ post: {
101
+ summary: 'Audita código contra os 10 Princípios Canônicos e OWASP',
102
+ operationId: 'auditCode',
103
+ responses: { '200': { description: 'Relatório de auditoria' } }
104
+ }
105
+ }
106
+ }
107
+ };
108
+
109
+ const files = [
110
+ { path: path.join(targetDir, 'chatgpt_custom_instructions.md'), content: this.getCompactPrompt() },
111
+ { path: path.join(targetDir, 'agent_master_openapi.json'), content: JSON.stringify(openApiSchema, null, 2) }
112
+ ];
113
+
114
+ if (!options.dryRun) {
115
+ files.forEach(f => {
116
+ fs.mkdirSync(path.dirname(f.path), { recursive: true });
117
+ fs.writeFileSync(f.path, f.content, 'utf8');
118
+ });
119
+ }
120
+
121
+ return { platform: 'chatgpt', filesCount: files.length, files: files.map(f => f.path) };
122
+ }
123
+
124
+ generateOllamaProfile(targetDir, options = {}) {
125
+ const baseModel = options.baseModel || 'qwen2.5-coder:7b';
126
+ const modelfileContent = 'FROM ' + baseModel + '\n\nSYSTEM """\n' + this.getCompactPrompt() + '\n"""\n\nPARAMETER temperature 0.2\n';
127
+ const filePath = path.join(targetDir, 'Modelfile');
128
+
129
+ if (!options.dryRun) {
130
+ fs.mkdirSync(targetDir, { recursive: true });
131
+ fs.writeFileSync(filePath, modelfileContent, 'utf8');
132
+ }
133
+
134
+ return { platform: 'ollama', filesCount: 1, files: [filePath] };
135
+ }
136
+
137
+ generateAntigravityConfig(targetDir, options = {}) {
138
+ const homeDir = process.env.USERPROFILE || process.env.HOME || '';
139
+ const mcpServerPath = options.mcpServerPath || path.resolve(this.baseDir, 'scripts', 'mcp_server.js');
140
+ const geminiConfigDir = path.join(homeDir, '.gemini', 'config');
141
+ const mcpConfigPath = path.join(geminiConfigDir, 'mcp_config.json');
142
+
143
+ const files = [];
144
+
145
+ if (!options.dryRun) {
146
+ if (!fs.existsSync(geminiConfigDir)) {
147
+ fs.mkdirSync(geminiConfigDir, { recursive: true });
148
+ }
149
+
150
+ let mcpJson = { mcpServers: {} };
151
+ if (fs.existsSync(mcpConfigPath)) {
152
+ try {
153
+ mcpJson = JSON.parse(fs.readFileSync(mcpConfigPath, 'utf8'));
154
+ if (!mcpJson.mcpServers) mcpJson.mcpServers = {};
155
+ } catch (err) {
156
+ mcpJson = { mcpServers: {} };
157
+ void err;
158
+ }
159
+ }
160
+
161
+ mcpJson.mcpServers['agent-master-devsecops'] = {
162
+ command: 'node',
163
+ args: [mcpServerPath]
164
+ };
165
+
166
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(mcpJson, null, 2), 'utf8');
167
+ files.push(mcpConfigPath);
168
+ }
169
+
170
+ return { platform: 'antigravity', filesCount: 1, files };
171
+ }
172
+
173
+ generateVsCodeProfile(targetDir, options = {}) {
174
+ const vscodeDir = path.join(targetDir, '.vscode');
175
+ const mcpConfigPath = path.join(vscodeDir, 'mcp.json');
176
+ const mcpConfig = {
177
+ mcpServers: {
178
+ 'agent-master-devsecops': {
179
+ command: 'node',
180
+ args: [options.mcpServerPath || path.resolve(this.baseDir, 'scripts', 'mcp_server.js')]
181
+ }
182
+ }
183
+ };
184
+
185
+ const files = [mcpConfigPath];
186
+ if (!options.dryRun) {
187
+ if (!fs.existsSync(vscodeDir)) fs.mkdirSync(vscodeDir, { recursive: true });
188
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(mcpConfig, null, 2), 'utf8');
189
+ }
190
+
191
+ return { platform: 'vscode', filesCount: 1, files };
192
+ }
193
+
194
+ exportProfile(platform, targetDir, options = {}) {
195
+ const cleanPlatform = String(platform).toLowerCase();
196
+ switch (cleanPlatform) {
197
+ case 'cursor':
198
+ return this.generateCursorProfile(targetDir, options);
199
+ case 'windsurf':
200
+ return this.generateWindsurfProfile(targetDir, options);
201
+ case 'vscode':
202
+ case 'code':
203
+ return this.generateVsCodeProfile(targetDir, options);
204
+ case 'claude_desktop':
205
+ case 'claude':
206
+ return this.generateClaudeDesktopProfile(targetDir, options);
207
+ case 'chatgpt':
208
+ return this.generateChatGptProfile(targetDir, options);
209
+ case 'ollama':
210
+ return this.generateOllamaProfile(targetDir, options);
211
+ case 'antigravity':
212
+ case 'gemini':
213
+ return this.generateAntigravityConfig(targetDir, options);
214
+ case 'all': {
215
+ const r1 = this.generateCursorProfile(targetDir, options);
216
+ const r2 = this.generateWindsurfProfile(targetDir, options);
217
+ const r3 = this.generateClaudeDesktopProfile(targetDir, options);
218
+ const r4 = this.generateChatGptProfile(targetDir, options);
219
+ const r5 = this.generateOllamaProfile(targetDir, options);
220
+ const r6 = this.generateVsCodeProfile(targetDir, options);
221
+ const r7 = this.generateAntigravityConfig(targetDir, options);
222
+ return {
223
+ platform: 'all',
224
+ totalFiles: r1.filesCount + r2.filesCount + r3.filesCount + r4.filesCount + r5.filesCount + r6.filesCount + r7.filesCount,
225
+ results: [r1, r2, r3, r4, r5, r6, r7]
226
+ };
227
+ }
228
+ default:
229
+ throw new Error(`Plataforma não suportada: "${platform}". Plataformas suportadas: ${SUPPORTED_PLATFORMS.join(', ')}`);
230
+ }
231
+ }
232
+
233
+ auditToSarif(targetPlatform = 'all') {
234
+ const findings = [];
235
+ const supported = SUPPORTED_PLATFORMS.includes(String(targetPlatform).toLowerCase());
236
+
237
+ if (!supported) {
238
+ findings.push({
239
+ ruleId: 'RULE-PKG-001',
240
+ name: 'UnsupportedPackagingPlatform',
241
+ severity: 'WARNING',
242
+ message: `Plataforma "${targetPlatform}" não é suportada nativamente.`,
243
+ remediation: `Utilize uma das plataformas homologadas: ${SUPPORTED_PLATFORMS.join(', ')}.`
244
+ });
245
+ }
246
+
247
+ return createSarifReport({
248
+ toolName: 'agent-master-universal-packager',
249
+ rules: [
250
+ {
251
+ id: 'RULE-PKG-001',
252
+ name: 'UnsupportedPackagingPlatform',
253
+ description: 'Identifica tentativas de exportação para plataformas sem blueprint homologado',
254
+ severity: 'MEDIUM',
255
+ cwe: 'CWE-400'
256
+ }
257
+ ],
258
+ findings,
259
+ properties: {
260
+ platform: targetPlatform,
261
+ supportedPlatforms: SUPPORTED_PLATFORMS
262
+ }
263
+ });
264
+ }
265
+
266
+ formatReport() {
267
+ return [
268
+ '### Relatório de Empacotador Universal de Perfis & IDEs',
269
+ `- **Plataformas Homologadas:** \`${SUPPORTED_PLATFORMS.join('`, `')}\``,
270
+ `- **Modo MCP Padrão:** stdio via \`scripts/mcp_server.js\``,
271
+ `- **Suporte:** Cursor, Windsurf, Claude Desktop, Antigravity, VS Code, Ollama, ChatGPT`
272
+ ].join('\n');
273
+ }
274
+ }
275
+
276
+
277
+ function generateVsCodeSettings() {
278
+ return {
279
+ "mcp.servers": {
280
+ "agent-master-devsecops": {
281
+ "command": "node",
282
+ "args": ["${workspaceFolder}/node_modules/agent-master-devsecops/scripts/mcp_server.js"]
283
+ }
284
+ },
285
+ "customInstructions": [
286
+ {
287
+ "role": "system",
288
+ "content": "Siga rigorosamente as 15 Regras de Engenharia da suíte multi-agente e responda no formato de saída compacta com links diretos."
289
+ }
290
+ ],
291
+ "shortcuts": {
292
+ "orchestrator": "modo: orchestrator",
293
+ "devsecops": "modo: devsecops",
294
+ "qa": "modo: qa",
295
+ "scrum": "modo: scrum",
296
+ "sre": "modo: sre",
297
+ "full-dev": "modo: full-dev"
298
+ }
299
+ };
300
+ }
301
+
302
+ function generateJetBrainsConfig() {
303
+ return {
304
+ "agentMasterDevSecOps": {
305
+ "version": PKG_VERSION,
306
+ "mcpEnabled": true,
307
+ "mcpTransport": "stdio",
308
+ "mcpCommand": "node scripts/mcp_server.js",
309
+ "modes": ["orchestrator", "devsecops", "qa", "scrum", "sre", "full-dev"],
310
+ "ruleSet": "docs/ENGINEERING_RULES.md",
311
+ "dualLayerOutput": true
312
+ }
313
+ };
314
+ }
315
+
316
+ function exportIdeConfigs(targetDir, options = {}) {
317
+ const results = {
318
+ vscodeConfigured: false,
319
+ jetbrainsConfigured: false
320
+ };
321
+
322
+ const vscodeDir = path.join(targetDir, '.vscode');
323
+ const jetbrainsDir = path.join(targetDir, '.idea');
324
+
325
+ if (!options.dryRun) {
326
+ if (!fs.existsSync(vscodeDir)) fs.mkdirSync(vscodeDir, { recursive: true });
327
+ if (!fs.existsSync(jetbrainsDir)) fs.mkdirSync(jetbrainsDir, { recursive: true });
328
+
329
+ fs.writeFileSync(
330
+ path.join(vscodeDir, 'agent-master.json'),
331
+ JSON.stringify(generateVsCodeSettings(), null, 2),
332
+ 'utf8'
333
+ );
334
+ results.vscodeConfigured = true;
335
+
336
+ fs.writeFileSync(
337
+ path.join(jetbrainsDir, 'agent-master.json'),
338
+ JSON.stringify(generateJetBrainsConfig(), null, 2),
339
+ 'utf8'
340
+ );
341
+ results.jetbrainsConfigured = true;
342
+ } else {
343
+ results.vscodeConfigured = true;
344
+ results.jetbrainsConfigured = true;
345
+ }
346
+
347
+ return results;
348
+ }
349
+
350
+ module.exports = {
351
+ UniversalPackager,
352
+ SUPPORTED_PLATFORMS,
353
+ generateVsCodeSettings,
354
+ generateJetBrainsConfig,
355
+ exportIdeConfigs,
356
+ generateIdeConfigs: exportIdeConfigs
357
+ };