@perfai/mcp 1.0.24
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/LICENSE +21 -0
- package/README.md +352 -0
- package/dist/auth/authManager.d.ts +83 -0
- package/dist/auth/authManager.d.ts.map +1 -0
- package/dist/auth/authManager.js +555 -0
- package/dist/auth/sessionCache.d.ts +5 -0
- package/dist/auth/sessionCache.d.ts.map +1 -0
- package/dist/auth/sessionCache.js +29 -0
- package/dist/auth/sessionStorage.d.ts +53 -0
- package/dist/auth/sessionStorage.d.ts.map +1 -0
- package/dist/auth/sessionStorage.js +234 -0
- package/dist/auth/types.d.ts +28 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/config.d.ts +65 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +74 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +144 -0
- package/dist/setup-config.d.ts +4 -0
- package/dist/setup-config.d.ts.map +1 -0
- package/dist/setup-config.js +69 -0
- package/dist/tools/index.d.ts +361 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +275 -0
- package/dist/tools/protected/aiFixDesignIssue.d.ts +17 -0
- package/dist/tools/protected/aiFixDesignIssue.d.ts.map +1 -0
- package/dist/tools/protected/aiFixDesignIssue.js +205 -0
- package/dist/tools/protected/aiFixQualityIssue.d.ts +17 -0
- package/dist/tools/protected/aiFixQualityIssue.d.ts.map +1 -0
- package/dist/tools/protected/aiFixQualityIssue.js +188 -0
- package/dist/tools/protected/aiFixSecurityIssue.d.ts +17 -0
- package/dist/tools/protected/aiFixSecurityIssue.d.ts.map +1 -0
- package/dist/tools/protected/aiFixSecurityIssue.js +205 -0
- package/dist/tools/protected/checkDesignFixes.d.ts +17 -0
- package/dist/tools/protected/checkDesignFixes.d.ts.map +1 -0
- package/dist/tools/protected/checkDesignFixes.js +199 -0
- package/dist/tools/protected/checkQualityFixes.d.ts +17 -0
- package/dist/tools/protected/checkQualityFixes.d.ts.map +1 -0
- package/dist/tools/protected/checkQualityFixes.js +199 -0
- package/dist/tools/protected/checkSecurityFixes.d.ts +17 -0
- package/dist/tools/protected/checkSecurityFixes.d.ts.map +1 -0
- package/dist/tools/protected/checkSecurityFixes.js +177 -0
- package/dist/tools/protected/listApis.d.ts +28 -0
- package/dist/tools/protected/listApis.d.ts.map +1 -0
- package/dist/tools/protected/listApis.js +102 -0
- package/dist/tools/protected/logout.d.ts +11 -0
- package/dist/tools/protected/logout.d.ts.map +1 -0
- package/dist/tools/protected/logout.js +22 -0
- package/dist/tools/protected/manageOrganizations.d.ts +26 -0
- package/dist/tools/protected/manageOrganizations.d.ts.map +1 -0
- package/dist/tools/protected/manageOrganizations.js +147 -0
- package/dist/tools/protected/runDesignTest.d.ts +21 -0
- package/dist/tools/protected/runDesignTest.d.ts.map +1 -0
- package/dist/tools/protected/runDesignTest.js +132 -0
- package/dist/tools/protected/runQualityTest.d.ts +21 -0
- package/dist/tools/protected/runQualityTest.d.ts.map +1 -0
- package/dist/tools/protected/runQualityTest.js +150 -0
- package/dist/tools/protected/runSecurityTest.d.ts +21 -0
- package/dist/tools/protected/runSecurityTest.d.ts.map +1 -0
- package/dist/tools/protected/runSecurityTest.js +107 -0
- package/dist/tools/protected/selectApi.d.ts +24 -0
- package/dist/tools/protected/selectApi.d.ts.map +1 -0
- package/dist/tools/protected/selectApi.js +172 -0
- package/dist/tools/protected/setup.d.ts +11 -0
- package/dist/tools/protected/setup.d.ts.map +1 -0
- package/dist/tools/protected/setup.js +151 -0
- package/dist/tools/protected/showDesignIssues.d.ts +38 -0
- package/dist/tools/protected/showDesignIssues.d.ts.map +1 -0
- package/dist/tools/protected/showDesignIssues.js +201 -0
- package/dist/tools/protected/showFixedIssues.d.ts +11 -0
- package/dist/tools/protected/showFixedIssues.d.ts.map +1 -0
- package/dist/tools/protected/showFixedIssues.js +36 -0
- package/dist/tools/protected/showQualityIssues.d.ts +33 -0
- package/dist/tools/protected/showQualityIssues.d.ts.map +1 -0
- package/dist/tools/protected/showQualityIssues.js +225 -0
- package/dist/tools/protected/showSecurityIssues.d.ts +47 -0
- package/dist/tools/protected/showSecurityIssues.d.ts.map +1 -0
- package/dist/tools/protected/showSecurityIssues.js +212 -0
- package/dist/tools/protected/summarizeIssues.d.ts +11 -0
- package/dist/tools/protected/summarizeIssues.d.ts.map +1 -0
- package/dist/tools/protected/summarizeIssues.js +161 -0
- package/dist/tools/protected/userInfo.d.ts +11 -0
- package/dist/tools/protected/userInfo.d.ts.map +1 -0
- package/dist/tools/protected/userInfo.js +21 -0
- package/dist/tools/protected/visionAiAppLearning.d.ts +37 -0
- package/dist/tools/protected/visionAiAppLearning.d.ts.map +1 -0
- package/dist/tools/protected/visionAiAppLearning.js +122 -0
- package/dist/tools/public/authStatus.d.ts +11 -0
- package/dist/tools/public/authStatus.d.ts.map +1 -0
- package/dist/tools/public/authStatus.js +78 -0
- package/dist/tools/public/login.d.ts +12 -0
- package/dist/tools/public/login.d.ts.map +1 -0
- package/dist/tools/public/login.js +230 -0
- package/dist/types/api.d.ts +12 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +1 -0
- package/dist/utils/dockerRunner.d.ts +44 -0
- package/dist/utils/dockerRunner.d.ts.map +1 -0
- package/dist/utils/dockerRunner.js +300 -0
- package/dist/utils/formatters.d.ts +14 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/formatters.js +510 -0
- package/dist/utils/promptBuilder.d.ts +4 -0
- package/dist/utils/promptBuilder.d.ts.map +1 -0
- package/dist/utils/promptBuilder.js +132 -0
- package/package.json +67 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { spawn, execSync } from "child_process";
|
|
2
|
+
import { DOCKER_CONFIG, DOCKER_CONFIG_VISION_AI_APP_LEARNING, DESIGN_DOCKER_CONFIG, QUALITY_DOCKER_CONFIG, API_ENDPOINTS, DOCKER_HUB } from '../config.js';
|
|
3
|
+
function dockerLogin() {
|
|
4
|
+
if (!DOCKER_HUB.PAT)
|
|
5
|
+
return;
|
|
6
|
+
execSync(`docker login -u ${DOCKER_HUB.USERNAME} --password-stdin`, {
|
|
7
|
+
input: DOCKER_HUB.PAT,
|
|
8
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export async function runDockerSecurityTest(options) {
|
|
12
|
+
const { apiId, orgId, accessToken, specUrl, localBasePath } = options;
|
|
13
|
+
dockerLogin();
|
|
14
|
+
// Build Docker command arguments (matching extension implementation)
|
|
15
|
+
const dockerLocalBasePath = localBasePath.replace(/localhost/g, "host.docker.internal");
|
|
16
|
+
const dockerSpecUrl = specUrl.replace(/localhost/g, "host.docker.internal");
|
|
17
|
+
const dockerArgs = [
|
|
18
|
+
"run",
|
|
19
|
+
"--rm",
|
|
20
|
+
`--name=perfai-security-agent-container${Date.now()}`,
|
|
21
|
+
"-e", `WEBAPP_API=${API_ENDPOINTS.WEBAPP_API}`,
|
|
22
|
+
"-e", `ACCESS_TOKEN=${accessToken}`,
|
|
23
|
+
"-e", `MODE=${DOCKER_CONFIG.ENV_VARS.MODE}`,
|
|
24
|
+
"-e", `LOCAL_BASE_PATH=${dockerLocalBasePath}`,
|
|
25
|
+
"-e", `TASK_TYPE=${DOCKER_CONFIG.ENV_VARS.TASK_TYPE}`,
|
|
26
|
+
"-e", `APP_ID=${apiId}`,
|
|
27
|
+
"-e", `ORG_ID=${orgId}`,
|
|
28
|
+
"-e", `DASHBOARD_API=${API_ENDPOINTS.DASHBOARD_API}`,
|
|
29
|
+
"-e", `DASHBOARD_API_AUTH=${API_ENDPOINTS.DASHBOARD_API_AUTH}`,
|
|
30
|
+
"-e", `AGENT_ID=${DOCKER_CONFIG.ENV_VARS.AGENT_ID}`,
|
|
31
|
+
"-e", `LLM_API=${API_ENDPOINTS.LLM_API}`,
|
|
32
|
+
"-e", `LLM_GENERATE_API=${API_ENDPOINTS.LLM_GENERATE_API}`,
|
|
33
|
+
"-e", `PERF_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.PERF_CATEGORY_FILE}`,
|
|
34
|
+
"-e", `TEST_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.TEST_CATEGORY_FILE}`,
|
|
35
|
+
"-e", `PRIVACY_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.PRIVACY_CATEGORY_FILE}`,
|
|
36
|
+
"-e", `SPEC_VALIDATION_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.SPEC_VALIDATION_CATEGORY_FILE}`,
|
|
37
|
+
"-e", `SPEC_URL=${dockerSpecUrl}`,
|
|
38
|
+
DOCKER_CONFIG.IMAGE
|
|
39
|
+
];
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
const output = [];
|
|
42
|
+
const errors = [];
|
|
43
|
+
const dockerProcess = spawn("docker", dockerArgs);
|
|
44
|
+
dockerProcess.stdout?.on('data', (data) => {
|
|
45
|
+
const text = data.toString();
|
|
46
|
+
output.push(text);
|
|
47
|
+
console.error(`[Docker stdout]: ${text}`); // Log to stderr to avoid stdout corruption
|
|
48
|
+
});
|
|
49
|
+
dockerProcess.stderr?.on('data', (data) => {
|
|
50
|
+
const text = data.toString();
|
|
51
|
+
errors.push(text);
|
|
52
|
+
console.error(`[Docker stderr]: ${text}`);
|
|
53
|
+
});
|
|
54
|
+
dockerProcess.on('close', (code) => {
|
|
55
|
+
const fullOutput = output.join('').trim();
|
|
56
|
+
const fullErrors = errors.join('').trim();
|
|
57
|
+
resolve({
|
|
58
|
+
success: code === 0,
|
|
59
|
+
output: fullOutput,
|
|
60
|
+
errors: fullErrors,
|
|
61
|
+
exitCode: code
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
dockerProcess.on('error', (error) => {
|
|
65
|
+
resolve({
|
|
66
|
+
success: false,
|
|
67
|
+
output: '',
|
|
68
|
+
errors: error.message,
|
|
69
|
+
exitCode: null
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
// Set timeout for long-running tests
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
dockerProcess.kill();
|
|
75
|
+
resolve({
|
|
76
|
+
success: false,
|
|
77
|
+
output: '',
|
|
78
|
+
errors: 'Test exceeded timeout and was cancelled',
|
|
79
|
+
exitCode: null
|
|
80
|
+
});
|
|
81
|
+
}, DOCKER_CONFIG.TIMEOUT);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export async function runDockerVisionAiAppLearning(options) {
|
|
85
|
+
const { appId, orgId, accessToken, appUrl, userId, specUrl, chatId, modelConfig = "Advance", accountEmail, accountPassword, } = options;
|
|
86
|
+
dockerLogin();
|
|
87
|
+
const dockerAppUrl = appUrl
|
|
88
|
+
.replace(/localhost/gi, "host.docker.internal")
|
|
89
|
+
.replace(/127\.0\.0\.1/g, "host.docker.internal")
|
|
90
|
+
.replace(/0\.0\.0\.0/g, "host.docker.internal");
|
|
91
|
+
const dockerSpecUrl = specUrl
|
|
92
|
+
? specUrl
|
|
93
|
+
.replace(/localhost/gi, "host.docker.internal")
|
|
94
|
+
.replace(/127\.0\.0\.1/g, "host.docker.internal")
|
|
95
|
+
.replace(/0\.0\.0\.0/g, "host.docker.internal")
|
|
96
|
+
: "";
|
|
97
|
+
const dockerArgs = [
|
|
98
|
+
"run",
|
|
99
|
+
"--rm",
|
|
100
|
+
`--name=perfai-vision-ai-app-learning-container${Date.now()}`,
|
|
101
|
+
"-e", `WEBAPP_API=${API_ENDPOINTS.WEBAPP_API}`,
|
|
102
|
+
"-e", `ACCESS_TOKEN=${accessToken}`,
|
|
103
|
+
"-e", `MODE=LOCAL`,
|
|
104
|
+
"-e", `APP_ID=${appId}`,
|
|
105
|
+
"-e", `ORG_ID=${orgId}`,
|
|
106
|
+
"-e", `APP_URL=${dockerAppUrl}`,
|
|
107
|
+
"-e", `CURRENT_APP=${dockerAppUrl}`,
|
|
108
|
+
"-e", `MODEL_CONFIG=${modelConfig}`,
|
|
109
|
+
...(userId ? ["-e", `USER_ID=${userId}`] : []),
|
|
110
|
+
...(dockerSpecUrl ? ["-e", `SPEC_URL=${dockerSpecUrl}`] : []),
|
|
111
|
+
...(chatId ? ["-e", `CHAT_ID=${chatId}`] : []),
|
|
112
|
+
...(accountEmail ? ["-e", `APP_ACCOUNT_EMAIL=${accountEmail}`] : []),
|
|
113
|
+
...(accountPassword ? ["-e", `APP_ACCOUNT_PASSWORD=${accountPassword}`] : []),
|
|
114
|
+
DOCKER_CONFIG_VISION_AI_APP_LEARNING.IMAGE,
|
|
115
|
+
];
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
const output = [];
|
|
118
|
+
const errors = [];
|
|
119
|
+
const dockerProcess = spawn("docker", dockerArgs);
|
|
120
|
+
dockerProcess.stdout?.on("data", (data) => {
|
|
121
|
+
const text = data.toString();
|
|
122
|
+
output.push(text);
|
|
123
|
+
console.error(`[Docker vision-ai-app-learning stdout]: ${text}`);
|
|
124
|
+
});
|
|
125
|
+
dockerProcess.stderr?.on("data", (data) => {
|
|
126
|
+
const text = data.toString();
|
|
127
|
+
errors.push(text);
|
|
128
|
+
console.error(`[Docker vision-ai-app-learning stderr]: ${text}`);
|
|
129
|
+
});
|
|
130
|
+
dockerProcess.on("close", (code) => {
|
|
131
|
+
const fullOutput = output.join("").trim();
|
|
132
|
+
const fullErrors = errors.join("").trim();
|
|
133
|
+
resolve({
|
|
134
|
+
success: code === 0,
|
|
135
|
+
output: fullOutput,
|
|
136
|
+
errors: fullErrors,
|
|
137
|
+
exitCode: code,
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
dockerProcess.on("error", (error) => {
|
|
141
|
+
resolve({
|
|
142
|
+
success: false,
|
|
143
|
+
output: "",
|
|
144
|
+
errors: error.message,
|
|
145
|
+
exitCode: null,
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
setTimeout(() => {
|
|
149
|
+
dockerProcess.kill();
|
|
150
|
+
resolve({
|
|
151
|
+
success: false,
|
|
152
|
+
output: "",
|
|
153
|
+
errors: "Vision AI App Learning exceeded timeout and was cancelled",
|
|
154
|
+
exitCode: null,
|
|
155
|
+
});
|
|
156
|
+
}, DOCKER_CONFIG_VISION_AI_APP_LEARNING.TIMEOUT);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
export async function runDockerDesignTest(options) {
|
|
160
|
+
const { apiId, orgId, accessToken, specUrl, localBasePath } = options;
|
|
161
|
+
dockerLogin();
|
|
162
|
+
// Build Docker command arguments for design testing (matching extension implementation)
|
|
163
|
+
const dockerLocalBasePath = localBasePath.replace(/localhost/g, "host.docker.internal");
|
|
164
|
+
const dockerSpecUrl = specUrl.replace(/localhost/g, "host.docker.internal");
|
|
165
|
+
const dockerArgs = [
|
|
166
|
+
"run",
|
|
167
|
+
"--rm",
|
|
168
|
+
`--name=perfai-design-agent-container${Date.now()}`,
|
|
169
|
+
"-e", `WEBAPP_API=https://api.perfai.ai/api/v1`,
|
|
170
|
+
"-e", `ACCESS_TOKEN=${accessToken}`,
|
|
171
|
+
"-e", `MODE=LOCAL`,
|
|
172
|
+
"-e", `LOCAL_BASE_PATH=${dockerLocalBasePath}`,
|
|
173
|
+
"-e", `TASK_TYPE=GOVERNANCE`,
|
|
174
|
+
"-e", `APP_ID=${apiId}`,
|
|
175
|
+
"-e", `ORG_ID=${orgId}`,
|
|
176
|
+
"-e", `SPEC_URL=${dockerSpecUrl}`,
|
|
177
|
+
// Add config volume mount (matching extension)
|
|
178
|
+
"-v", `${process.cwd()}/config.json:/app/config.json`,
|
|
179
|
+
DESIGN_DOCKER_CONFIG.IMAGE
|
|
180
|
+
];
|
|
181
|
+
return new Promise((resolve) => {
|
|
182
|
+
const output = [];
|
|
183
|
+
const errors = [];
|
|
184
|
+
const dockerProcess = spawn("docker", dockerArgs);
|
|
185
|
+
dockerProcess.stdout?.on('data', (data) => {
|
|
186
|
+
const text = data.toString();
|
|
187
|
+
output.push(text);
|
|
188
|
+
console.error(`[Docker Design stdout]: ${text}`); // Log to stderr to avoid stdout corruption
|
|
189
|
+
});
|
|
190
|
+
dockerProcess.stderr?.on('data', (data) => {
|
|
191
|
+
const text = data.toString();
|
|
192
|
+
errors.push(text);
|
|
193
|
+
console.error(`[Docker Design stderr]: ${text}`);
|
|
194
|
+
});
|
|
195
|
+
dockerProcess.on('close', (code) => {
|
|
196
|
+
const fullOutput = output.join('').trim();
|
|
197
|
+
const fullErrors = errors.join('').trim();
|
|
198
|
+
resolve({
|
|
199
|
+
success: code === 0,
|
|
200
|
+
output: fullOutput,
|
|
201
|
+
errors: fullErrors,
|
|
202
|
+
exitCode: code
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
dockerProcess.on('error', (error) => {
|
|
206
|
+
resolve({
|
|
207
|
+
success: false,
|
|
208
|
+
output: '',
|
|
209
|
+
errors: error.message,
|
|
210
|
+
exitCode: null
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
// Set timeout for long-running tests
|
|
214
|
+
setTimeout(() => {
|
|
215
|
+
dockerProcess.kill();
|
|
216
|
+
resolve({
|
|
217
|
+
success: false,
|
|
218
|
+
output: '',
|
|
219
|
+
errors: 'Design test exceeded timeout and was cancelled',
|
|
220
|
+
exitCode: null
|
|
221
|
+
});
|
|
222
|
+
}, DESIGN_DOCKER_CONFIG.TIMEOUT);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
export async function runDockerQualityTest(options) {
|
|
226
|
+
const { apiId, orgId, accessToken, specUrl, localBasePath } = options;
|
|
227
|
+
dockerLogin();
|
|
228
|
+
// Build Docker command arguments for quality testing (matching extension implementation)
|
|
229
|
+
const dockerLocalBasePath = localBasePath.replace(/localhost/g, "host.docker.internal");
|
|
230
|
+
const dockerSpecUrl = specUrl.replace(/localhost/g, "host.docker.internal");
|
|
231
|
+
const dockerArgs = [
|
|
232
|
+
"run",
|
|
233
|
+
"--rm",
|
|
234
|
+
`--name=perfai-quality-agent-container${Date.now()}`,
|
|
235
|
+
"-e", `WEBAPP_API=${API_ENDPOINTS.WEBAPP_API}`,
|
|
236
|
+
"-e", `ACCESS_TOKEN=${accessToken}`,
|
|
237
|
+
"-e", `MODE=${QUALITY_DOCKER_CONFIG.ENV_VARS.MODE}`,
|
|
238
|
+
"-e", `LOCAL_BASE_PATH=${dockerLocalBasePath}`,
|
|
239
|
+
"-e", `TASK_TYPE=${QUALITY_DOCKER_CONFIG.ENV_VARS.TASK_TYPE}`,
|
|
240
|
+
"-e", `APP_ID=${apiId}`,
|
|
241
|
+
"-e", `ORG_ID=${orgId}`,
|
|
242
|
+
"-e", `DASHBOARD_API=${API_ENDPOINTS.DASHBOARD_API}`,
|
|
243
|
+
"-e", `DASHBOARD_API_AUTH=${API_ENDPOINTS.DASHBOARD_API_AUTH}`,
|
|
244
|
+
"-e", `AGENT_ID=${QUALITY_DOCKER_CONFIG.ENV_VARS.AGENT_ID}`,
|
|
245
|
+
"-e", `LLM_API=${API_ENDPOINTS.LLM_API}`,
|
|
246
|
+
"-e", `LLM_GENERATE_API=${API_ENDPOINTS.LLM_GENERATE_API}`,
|
|
247
|
+
"-e", `PERF_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.PERF_CATEGORY_FILE}`,
|
|
248
|
+
"-e", `TEST_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.TEST_CATEGORY_FILE}`,
|
|
249
|
+
"-e", `PRIVACY_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.PRIVACY_CATEGORY_FILE}`,
|
|
250
|
+
"-e", `SPEC_VALIDATION_CATEGORY_FILE=${DOCKER_CONFIG.ENV_VARS.SPEC_VALIDATION_CATEGORY_FILE}`,
|
|
251
|
+
"-e", `SPEC_URL=${dockerSpecUrl}`,
|
|
252
|
+
QUALITY_DOCKER_CONFIG.IMAGE
|
|
253
|
+
];
|
|
254
|
+
return new Promise((resolve) => {
|
|
255
|
+
const output = [];
|
|
256
|
+
const errors = [];
|
|
257
|
+
const dockerProcess = spawn("docker", dockerArgs);
|
|
258
|
+
dockerProcess.stdout?.on('data', (data) => {
|
|
259
|
+
const text = data.toString();
|
|
260
|
+
output.push(text);
|
|
261
|
+
console.error(`[Docker Quality stdout]: ${text}`); // Log to stderr to avoid stdout corruption
|
|
262
|
+
});
|
|
263
|
+
dockerProcess.stderr?.on('data', (data) => {
|
|
264
|
+
const text = data.toString();
|
|
265
|
+
errors.push(text);
|
|
266
|
+
console.error(`[Docker Quality stderr]: ${text}`);
|
|
267
|
+
});
|
|
268
|
+
dockerProcess.on('close', (code) => {
|
|
269
|
+
console.error(`[Docker Quality] Process exited with code ${code}`);
|
|
270
|
+
resolve({
|
|
271
|
+
success: code === 0,
|
|
272
|
+
output: output.join(''),
|
|
273
|
+
errors: errors.join(''),
|
|
274
|
+
exitCode: code
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
dockerProcess.on('error', (error) => {
|
|
278
|
+
console.error(`[Docker Quality] Process error:`, error);
|
|
279
|
+
resolve({
|
|
280
|
+
success: false,
|
|
281
|
+
output: output.join(''),
|
|
282
|
+
errors: errors.join('') + `\nProcess error: ${error.message}`,
|
|
283
|
+
exitCode: null
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
// Set timeout
|
|
287
|
+
setTimeout(() => {
|
|
288
|
+
if (!dockerProcess.killed) {
|
|
289
|
+
console.error(`[Docker Quality] Process timed out after ${QUALITY_DOCKER_CONFIG.TIMEOUT}ms`);
|
|
290
|
+
dockerProcess.kill('SIGTERM');
|
|
291
|
+
resolve({
|
|
292
|
+
success: false,
|
|
293
|
+
output: output.join(''),
|
|
294
|
+
errors: errors.join('') + '\nProcess timed out',
|
|
295
|
+
exitCode: null
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}, QUALITY_DOCKER_CONFIG.TIMEOUT);
|
|
299
|
+
});
|
|
300
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function formatSecurityIssues(issues: any[], userInfo: any, search?: string, hasMore?: boolean, nextCursor?: string): string;
|
|
2
|
+
export declare function formatAppList(apps: any[], orgId: string, userInfo: any, selectedAppId?: string, selectedAppData?: any, authManager?: any, filters?: {
|
|
3
|
+
search?: string;
|
|
4
|
+
environment?: string;
|
|
5
|
+
page?: number;
|
|
6
|
+
limit?: number;
|
|
7
|
+
totalCount?: number;
|
|
8
|
+
hasMore?: boolean;
|
|
9
|
+
}): string;
|
|
10
|
+
export declare function formatOrganizations(organizations: any[], selectedOrgId?: string): string;
|
|
11
|
+
export declare function formatFixedIssues(fixedIssues: any[], userInfo: any): string;
|
|
12
|
+
export declare function formatDesignIssues(issues: any[], userInfo: any, search?: string, hasMore?: boolean, nextCursor?: string): string;
|
|
13
|
+
export declare function formatQualityIssues(issues: any[], userInfo: any, search?: string, hasMore?: boolean, nextCursor?: string): string;
|
|
14
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA2HlI;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAoG7Q;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAuCxF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,MAAM,CAyC3E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAyHhI;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA2HjI"}
|