@litmers/cursorflow-orchestrator 0.1.40 → 0.2.3
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/CHANGELOG.md +0 -2
- package/README.md +8 -3
- package/commands/cursorflow-init.md +0 -4
- package/dist/cli/index.js +0 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/logs.js +108 -9
- package/dist/cli/logs.js.map +1 -1
- package/dist/cli/models.js +20 -3
- package/dist/cli/models.js.map +1 -1
- package/dist/cli/monitor.d.ts +7 -10
- package/dist/cli/monitor.js +1103 -1239
- package/dist/cli/monitor.js.map +1 -1
- package/dist/cli/resume.js +21 -1
- package/dist/cli/resume.js.map +1 -1
- package/dist/cli/run.js +28 -9
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/signal.d.ts +6 -1
- package/dist/cli/signal.js +99 -13
- package/dist/cli/signal.js.map +1 -1
- package/dist/cli/tasks.js +3 -46
- package/dist/cli/tasks.js.map +1 -1
- package/dist/core/agent-supervisor.d.ts +23 -0
- package/dist/core/agent-supervisor.js +42 -0
- package/dist/core/agent-supervisor.js.map +1 -0
- package/dist/core/auto-recovery.d.ts +3 -117
- package/dist/core/auto-recovery.js +4 -482
- package/dist/core/auto-recovery.js.map +1 -1
- package/dist/core/failure-policy.d.ts +0 -53
- package/dist/core/failure-policy.js +7 -175
- package/dist/core/failure-policy.js.map +1 -1
- package/dist/core/git-lifecycle-manager.d.ts +284 -0
- package/dist/core/git-lifecycle-manager.js +778 -0
- package/dist/core/git-lifecycle-manager.js.map +1 -0
- package/dist/core/git-pipeline-coordinator.d.ts +21 -0
- package/dist/core/git-pipeline-coordinator.js +205 -0
- package/dist/core/git-pipeline-coordinator.js.map +1 -0
- package/dist/core/intervention.d.ts +170 -0
- package/dist/core/intervention.js +408 -0
- package/dist/core/intervention.js.map +1 -0
- package/dist/core/lane-state-machine.d.ts +423 -0
- package/dist/core/lane-state-machine.js +890 -0
- package/dist/core/lane-state-machine.js.map +1 -0
- package/dist/core/orchestrator.d.ts +4 -1
- package/dist/core/orchestrator.js +39 -65
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/runner/agent.d.ts +7 -1
- package/dist/core/runner/agent.js +54 -36
- package/dist/core/runner/agent.js.map +1 -1
- package/dist/core/runner/pipeline.js +283 -123
- package/dist/core/runner/pipeline.js.map +1 -1
- package/dist/core/runner/task.d.ts +4 -5
- package/dist/core/runner/task.js +6 -80
- package/dist/core/runner/task.js.map +1 -1
- package/dist/core/runner.js +8 -2
- package/dist/core/runner.js.map +1 -1
- package/dist/core/stall-detection.d.ts +11 -4
- package/dist/core/stall-detection.js +64 -27
- package/dist/core/stall-detection.js.map +1 -1
- package/dist/hooks/contexts/index.d.ts +104 -0
- package/dist/hooks/contexts/index.js +134 -0
- package/dist/hooks/contexts/index.js.map +1 -0
- package/dist/hooks/data-accessor.d.ts +86 -0
- package/dist/hooks/data-accessor.js +410 -0
- package/dist/hooks/data-accessor.js.map +1 -0
- package/dist/hooks/flow-controller.d.ts +136 -0
- package/dist/hooks/flow-controller.js +351 -0
- package/dist/hooks/flow-controller.js.map +1 -0
- package/dist/hooks/index.d.ts +68 -0
- package/dist/hooks/index.js +105 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/manager.d.ts +129 -0
- package/dist/hooks/manager.js +389 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +463 -0
- package/dist/hooks/types.js +45 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/services/logging/buffer.d.ts +2 -2
- package/dist/services/logging/buffer.js +95 -42
- package/dist/services/logging/buffer.js.map +1 -1
- package/dist/services/logging/console.js +6 -1
- package/dist/services/logging/console.js.map +1 -1
- package/dist/services/logging/formatter.d.ts +9 -4
- package/dist/services/logging/formatter.js +64 -18
- package/dist/services/logging/formatter.js.map +1 -1
- package/dist/services/logging/index.d.ts +0 -1
- package/dist/services/logging/index.js +0 -1
- package/dist/services/logging/index.js.map +1 -1
- package/dist/services/logging/paths.d.ts +8 -0
- package/dist/services/logging/paths.js +48 -0
- package/dist/services/logging/paths.js.map +1 -0
- package/dist/services/logging/raw-log.d.ts +6 -0
- package/dist/services/logging/raw-log.js +37 -0
- package/dist/services/logging/raw-log.js.map +1 -0
- package/dist/services/process/index.js +1 -1
- package/dist/services/process/index.js.map +1 -1
- package/dist/types/agent.d.ts +15 -0
- package/dist/types/config.d.ts +22 -1
- package/dist/types/event-categories.d.ts +601 -0
- package/dist/types/event-categories.js +233 -0
- package/dist/types/event-categories.js.map +1 -0
- package/dist/types/events.d.ts +0 -20
- package/dist/types/flow.d.ts +10 -6
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js +17 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/lane.d.ts +1 -1
- package/dist/types/logging.d.ts +1 -1
- package/dist/types/task.d.ts +12 -1
- package/dist/ui/log-viewer.d.ts +3 -0
- package/dist/ui/log-viewer.js +3 -0
- package/dist/ui/log-viewer.js.map +1 -1
- package/dist/utils/config.js +10 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/cursor-agent.d.ts +11 -1
- package/dist/utils/cursor-agent.js +63 -16
- package/dist/utils/cursor-agent.js.map +1 -1
- package/dist/utils/enhanced-logger.d.ts +5 -1
- package/dist/utils/enhanced-logger.js +98 -19
- package/dist/utils/enhanced-logger.js.map +1 -1
- package/dist/utils/event-registry.d.ts +222 -0
- package/dist/utils/event-registry.js +463 -0
- package/dist/utils/event-registry.js.map +1 -0
- package/dist/utils/events.d.ts +1 -13
- package/dist/utils/events.js.map +1 -1
- package/dist/utils/flow.d.ts +10 -0
- package/dist/utils/flow.js +75 -0
- package/dist/utils/flow.js.map +1 -1
- package/dist/utils/log-constants.d.ts +1 -0
- package/dist/utils/log-constants.js +2 -1
- package/dist/utils/log-constants.js.map +1 -1
- package/dist/utils/log-formatter.d.ts +2 -1
- package/dist/utils/log-formatter.js +10 -10
- package/dist/utils/log-formatter.js.map +1 -1
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.js +82 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/repro-thinking-logs.js +0 -13
- package/dist/utils/repro-thinking-logs.js.map +1 -1
- package/dist/utils/run-service.js +1 -1
- package/dist/utils/run-service.js.map +1 -1
- package/examples/README.md +0 -2
- package/examples/demo-project/README.md +1 -2
- package/package.json +13 -34
- package/scripts/setup-security.sh +0 -1
- package/scripts/test-log-parser.ts +171 -0
- package/scripts/verify-change.sh +272 -0
- package/src/cli/index.ts +0 -6
- package/src/cli/logs.ts +121 -10
- package/src/cli/models.ts +20 -3
- package/src/cli/monitor.ts +1273 -1342
- package/src/cli/resume.ts +27 -1
- package/src/cli/run.ts +29 -11
- package/src/cli/signal.ts +120 -18
- package/src/cli/tasks.ts +2 -59
- package/src/core/agent-supervisor.ts +64 -0
- package/src/core/auto-recovery.ts +14 -590
- package/src/core/failure-policy.ts +7 -229
- package/src/core/git-lifecycle-manager.ts +1011 -0
- package/src/core/git-pipeline-coordinator.ts +221 -0
- package/src/core/intervention.ts +463 -0
- package/src/core/lane-state-machine.ts +1097 -0
- package/src/core/orchestrator.ts +48 -64
- package/src/core/runner/agent.ts +77 -39
- package/src/core/runner/pipeline.ts +318 -138
- package/src/core/runner/task.ts +12 -97
- package/src/core/runner.ts +8 -2
- package/src/core/stall-detection.ts +74 -27
- package/src/hooks/contexts/index.ts +256 -0
- package/src/hooks/data-accessor.ts +488 -0
- package/src/hooks/flow-controller.ts +425 -0
- package/src/hooks/index.ts +154 -0
- package/src/hooks/manager.ts +434 -0
- package/src/hooks/types.ts +544 -0
- package/src/services/logging/buffer.ts +104 -43
- package/src/services/logging/console.ts +7 -1
- package/src/services/logging/formatter.ts +74 -18
- package/src/services/logging/index.ts +0 -2
- package/src/services/logging/paths.ts +14 -0
- package/src/services/logging/raw-log.ts +43 -0
- package/src/services/process/index.ts +1 -1
- package/src/types/agent.ts +15 -0
- package/src/types/config.ts +23 -1
- package/src/types/event-categories.ts +663 -0
- package/src/types/events.ts +0 -25
- package/src/types/flow.ts +10 -6
- package/src/types/index.ts +50 -4
- package/src/types/lane.ts +1 -2
- package/src/types/logging.ts +2 -1
- package/src/types/task.ts +12 -1
- package/src/ui/log-viewer.ts +3 -0
- package/src/utils/config.ts +11 -1
- package/src/utils/cursor-agent.ts +68 -16
- package/src/utils/enhanced-logger.ts +105 -19
- package/src/utils/event-registry.ts +595 -0
- package/src/utils/events.ts +0 -16
- package/src/utils/flow.ts +83 -0
- package/src/utils/log-constants.ts +2 -1
- package/src/utils/log-formatter.ts +10 -11
- package/src/utils/logger.ts +49 -3
- package/src/utils/repro-thinking-logs.ts +0 -15
- package/src/utils/run-service.ts +1 -1
- package/dist/cli/prepare.d.ts +0 -7
- package/dist/cli/prepare.js +0 -690
- package/dist/cli/prepare.js.map +0 -1
- package/dist/services/logging/file-writer.d.ts +0 -71
- package/dist/services/logging/file-writer.js +0 -516
- package/dist/services/logging/file-writer.js.map +0 -1
- package/dist/types/review.d.ts +0 -17
- package/dist/types/review.js +0 -6
- package/dist/types/review.js.map +0 -1
- package/scripts/ai-security-check.js +0 -233
- package/src/cli/prepare.ts +0 -777
- package/src/services/logging/file-writer.ts +0 -526
- package/src/types/review.ts +0 -20
package/dist/types/review.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Review-related type definitions
|
|
3
|
-
*/
|
|
4
|
-
export interface ReviewIssue {
|
|
5
|
-
severity: 'critical' | 'major' | 'minor';
|
|
6
|
-
description: string;
|
|
7
|
-
file?: string;
|
|
8
|
-
suggestion?: string;
|
|
9
|
-
}
|
|
10
|
-
export interface ReviewResult {
|
|
11
|
-
status: 'approved' | 'needs_changes';
|
|
12
|
-
buildSuccess: boolean;
|
|
13
|
-
issues: ReviewIssue[];
|
|
14
|
-
suggestions: string[];
|
|
15
|
-
summary: string;
|
|
16
|
-
raw: string;
|
|
17
|
-
}
|
package/dist/types/review.js
DELETED
package/dist/types/review.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/types/review.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* AI 기반 보안 검사 스크립트
|
|
5
|
-
* OpenAI API를 사용하여 코드의 보안 취약점을 분석합니다.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const { spawnSync } = require('child_process');
|
|
10
|
-
|
|
11
|
-
// 색상 정의
|
|
12
|
-
const colors = {
|
|
13
|
-
red: '\x1b[31m',
|
|
14
|
-
green: '\x1b[32m',
|
|
15
|
-
yellow: '\x1b[33m',
|
|
16
|
-
blue: '\x1b[34m',
|
|
17
|
-
reset: '\x1b[0m'
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
// OpenAI API 키 확인
|
|
21
|
-
const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
|
|
22
|
-
if (!OPENAI_API_KEY) {
|
|
23
|
-
console.log(`${colors.yellow}⚠️ OPENAI_API_KEY not set. Skipping AI security check.${colors.reset}`);
|
|
24
|
-
process.exit(0);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// 변경된 파일 가져오기 (PR인 경우)
|
|
28
|
-
function getChangedFiles() {
|
|
29
|
-
try {
|
|
30
|
-
const baseBranch = process.env.GITHUB_BASE_REF || 'main';
|
|
31
|
-
const result = spawnSync('git', ['diff', '--name-only', `origin/${baseBranch}...HEAD`], { encoding: 'utf-8' });
|
|
32
|
-
if (result.status !== 0) throw new Error(result.stderr);
|
|
33
|
-
|
|
34
|
-
const files = result.stdout
|
|
35
|
-
.split('\n')
|
|
36
|
-
.filter(f => f.endsWith('.js') || f.endsWith('.ts') || f.endsWith('.jsx') || f.endsWith('.tsx'))
|
|
37
|
-
.filter(f => f && fs.existsSync(f));
|
|
38
|
-
return files;
|
|
39
|
-
} catch (error) {
|
|
40
|
-
// PR이 아닌 경우 최근 커밋의 파일들
|
|
41
|
-
try {
|
|
42
|
-
const result = spawnSync('git', ['diff-tree', '--no-commit-id', '--name-only', '-r', 'HEAD'], { encoding: 'utf-8' });
|
|
43
|
-
if (result.status !== 0) return [];
|
|
44
|
-
|
|
45
|
-
const files = result.stdout
|
|
46
|
-
.split('\n')
|
|
47
|
-
.filter(f => f.endsWith('.js') || f.endsWith('.ts') || f.endsWith('.jsx') || f.endsWith('.tsx'))
|
|
48
|
-
.filter(f => f && fs.existsSync(f));
|
|
49
|
-
return files;
|
|
50
|
-
} catch {
|
|
51
|
-
return [];
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// AI 보안 검사 프롬프트
|
|
57
|
-
function createSecurityPrompt(code, filename) {
|
|
58
|
-
return `You are a security expert analyzing code for vulnerabilities. Analyze the following code and identify any security issues.
|
|
59
|
-
|
|
60
|
-
File: ${filename}
|
|
61
|
-
|
|
62
|
-
Code:
|
|
63
|
-
\`\`\`javascript
|
|
64
|
-
${code}
|
|
65
|
-
\`\`\`
|
|
66
|
-
|
|
67
|
-
Please analyze for:
|
|
68
|
-
1. **Injection vulnerabilities** (SQL, NoSQL, Command, XSS, etc.)
|
|
69
|
-
2. **Authentication/Authorization issues**
|
|
70
|
-
3. **Sensitive data exposure** (hardcoded secrets, credentials, API keys)
|
|
71
|
-
4. **Insecure dependencies or imports**
|
|
72
|
-
5. **Path traversal vulnerabilities**
|
|
73
|
-
6. **Insecure randomness or cryptography**
|
|
74
|
-
7. **Unsafe deserialization**
|
|
75
|
-
8. **Rate limiting or DoS vulnerabilities**
|
|
76
|
-
9. **CSRF/SSRF vulnerabilities**
|
|
77
|
-
10. **Any OWASP Top 10 issues**
|
|
78
|
-
11. **CodeQL-specific patterns** (tainted data flow, improper input validation, dangerous sinks like eval or child_process.exec)
|
|
79
|
-
12. **Code quality issues** that might trigger CodeQL's "Security and Quality" queries
|
|
80
|
-
|
|
81
|
-
Respond in JSON format:
|
|
82
|
-
{
|
|
83
|
-
"has_issues": true/false,
|
|
84
|
-
"severity": "critical" | "high" | "medium" | "low" | "none",
|
|
85
|
-
"issues": [
|
|
86
|
-
{
|
|
87
|
-
"type": "vulnerability type",
|
|
88
|
-
"severity": "critical/high/medium/low",
|
|
89
|
-
"line": "approximate line number or area",
|
|
90
|
-
"description": "detailed description",
|
|
91
|
-
"recommendation": "how to fix"
|
|
92
|
-
}
|
|
93
|
-
],
|
|
94
|
-
"summary": "overall security assessment"
|
|
95
|
-
}`;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// OpenAI API 호출
|
|
99
|
-
async function analyzeCodeWithAI(code, filename) {
|
|
100
|
-
const prompt = createSecurityPrompt(code, filename);
|
|
101
|
-
|
|
102
|
-
try {
|
|
103
|
-
// SECURITY NOTE: Intentionally sending code to OpenAI API for security analysis.
|
|
104
|
-
// This is the expected behavior - the script's purpose is AI-powered code review.
|
|
105
|
-
// Code is sent over HTTPS to OpenAI's secure API endpoint.
|
|
106
|
-
const response = await fetch('https://api.openai.com/v1/chat/completions', {
|
|
107
|
-
method: 'POST',
|
|
108
|
-
headers: {
|
|
109
|
-
'Content-Type': 'application/json',
|
|
110
|
-
'Authorization': `Bearer ${OPENAI_API_KEY}`
|
|
111
|
-
},
|
|
112
|
-
body: JSON.stringify({
|
|
113
|
-
model: 'gpt-4o',
|
|
114
|
-
messages: [
|
|
115
|
-
{
|
|
116
|
-
role: 'system',
|
|
117
|
-
content: 'You are a security expert specializing in code security analysis. Provide detailed, actionable security assessments in JSON format.'
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
role: 'user',
|
|
121
|
-
content: prompt
|
|
122
|
-
}
|
|
123
|
-
],
|
|
124
|
-
temperature: 0.3,
|
|
125
|
-
response_format: { type: "json_object" }
|
|
126
|
-
})
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
if (!response.ok) {
|
|
130
|
-
throw new Error(`OpenAI API error: ${response.status} ${response.statusText}`);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const data = await response.json();
|
|
134
|
-
const content = data.choices[0].message.content;
|
|
135
|
-
return JSON.parse(content);
|
|
136
|
-
} catch (error) {
|
|
137
|
-
console.error(`${colors.red}Error calling OpenAI API: ${error.message}${colors.reset}`);
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// 보안 이슈 출력
|
|
143
|
-
function printSecurityIssues(filename, analysis) {
|
|
144
|
-
if (!analysis.has_issues) {
|
|
145
|
-
console.log(`${colors.green}✓ ${filename}: No security issues found${colors.reset}`);
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
console.log(`\n${colors.red}⚠️ Security issues found in ${filename}${colors.reset}`);
|
|
150
|
-
console.log(`${colors.yellow}Severity: ${analysis.severity.toUpperCase()}${colors.reset}`);
|
|
151
|
-
console.log(`\n${analysis.summary}\n`);
|
|
152
|
-
|
|
153
|
-
analysis.issues.forEach((issue, index) => {
|
|
154
|
-
const severityColor = {
|
|
155
|
-
critical: colors.red,
|
|
156
|
-
high: colors.red,
|
|
157
|
-
medium: colors.yellow,
|
|
158
|
-
low: colors.blue
|
|
159
|
-
}[issue.severity] || colors.reset;
|
|
160
|
-
|
|
161
|
-
console.log(`${index + 1}. ${severityColor}[${issue.severity.toUpperCase()}]${colors.reset} ${issue.type}`);
|
|
162
|
-
console.log(` Location: ${issue.line}`);
|
|
163
|
-
console.log(` ${issue.description}`);
|
|
164
|
-
console.log(` ${colors.green}Fix: ${issue.recommendation}${colors.reset}\n`);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
return analysis.severity === 'critical' || analysis.severity === 'high';
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// 메인 실행
|
|
171
|
-
async function main() {
|
|
172
|
-
console.log(`${colors.blue}🔍 Starting AI Security Analysis...${colors.reset}\n`);
|
|
173
|
-
|
|
174
|
-
const changedFiles = getChangedFiles();
|
|
175
|
-
|
|
176
|
-
if (changedFiles.length === 0) {
|
|
177
|
-
console.log(`${colors.yellow}No code files changed. Skipping AI security check.${colors.reset}`);
|
|
178
|
-
process.exit(0);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
console.log(`Analyzing ${changedFiles.length} file(s):\n`);
|
|
182
|
-
changedFiles.forEach(f => console.log(` - ${f}`));
|
|
183
|
-
console.log('');
|
|
184
|
-
|
|
185
|
-
let hasBlockingIssues = false;
|
|
186
|
-
let totalIssues = 0;
|
|
187
|
-
|
|
188
|
-
for (const file of changedFiles) {
|
|
189
|
-
try {
|
|
190
|
-
const code = fs.readFileSync(file, 'utf-8');
|
|
191
|
-
|
|
192
|
-
// 파일이 너무 크면 스킵
|
|
193
|
-
if (code.length > 50000) {
|
|
194
|
-
console.log(`${colors.yellow}⚠️ ${file}: File too large, skipping${colors.reset}`);
|
|
195
|
-
continue;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
console.log(`Analyzing ${file}...`);
|
|
199
|
-
const analysis = await analyzeCodeWithAI(code, file);
|
|
200
|
-
|
|
201
|
-
if (analysis) {
|
|
202
|
-
const hasIssues = printSecurityIssues(file, analysis);
|
|
203
|
-
if (hasIssues) {
|
|
204
|
-
hasBlockingIssues = true;
|
|
205
|
-
totalIssues += analysis.issues.length;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
} catch (error) {
|
|
209
|
-
console.error(`${colors.red}Error analyzing ${file}: ${error.message}${colors.reset}`);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
console.log(`\n${colors.blue}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`);
|
|
214
|
-
console.log(`${colors.blue}📊 Security Analysis Summary${colors.reset}`);
|
|
215
|
-
console.log(`${colors.blue}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`);
|
|
216
|
-
console.log(`Files analyzed: ${changedFiles.length}`);
|
|
217
|
-
console.log(`Security issues found: ${totalIssues}`);
|
|
218
|
-
|
|
219
|
-
if (hasBlockingIssues) {
|
|
220
|
-
console.log(`\n${colors.red}❌ CRITICAL/HIGH severity security issues found!${colors.reset}`);
|
|
221
|
-
console.log(`${colors.red}Deployment blocked. Please fix the issues above.${colors.reset}\n`);
|
|
222
|
-
process.exit(1);
|
|
223
|
-
} else {
|
|
224
|
-
console.log(`\n${colors.green}✅ No blocking security issues found${colors.reset}\n`);
|
|
225
|
-
process.exit(0);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
main().catch(error => {
|
|
230
|
-
console.error(`${colors.red}Fatal error: ${error.message}${colors.reset}`);
|
|
231
|
-
process.exit(1);
|
|
232
|
-
});
|
|
233
|
-
|