codeceptjs 4.0.0-rc.19 → 4.0.0-rc.20
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/bin/mcp-server.js +33 -20
- package/package.json +1 -1
package/bin/mcp-server.js
CHANGED
|
@@ -412,6 +412,23 @@ async function cancelRun() {
|
|
|
412
412
|
return true
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
+
async function waitForTestResult(runPromise, timeout) {
|
|
416
|
+
const pausedPromise = new Promise(resolve => pauseEvents.once('paused', () => resolve('paused')))
|
|
417
|
+
const completedPromise = runPromise.then(() => 'completed', () => 'completed')
|
|
418
|
+
let timeoutId
|
|
419
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
420
|
+
timeoutId = setTimeout(() => reject(new Error(`Timeout after ${timeout}ms`)), timeout)
|
|
421
|
+
})
|
|
422
|
+
try {
|
|
423
|
+
return { status: await Promise.race([completedPromise, pausedPromise, timeoutPromise]) }
|
|
424
|
+
} catch (err) {
|
|
425
|
+
await cancelRun()
|
|
426
|
+
return { status: 'aborted', error: err.message }
|
|
427
|
+
} finally {
|
|
428
|
+
clearTimeout(timeoutId)
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
415
432
|
async function closeBrowser() {
|
|
416
433
|
if (!containerInitialized) return
|
|
417
434
|
await cancelRun()
|
|
@@ -1025,18 +1042,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1025
1042
|
throw err
|
|
1026
1043
|
}
|
|
1027
1044
|
})()
|
|
1045
|
+
pendingRunPromise = runPromise
|
|
1028
1046
|
|
|
1029
|
-
const
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
pausedPromise,
|
|
1035
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout after ${timeout}ms`)), timeout)),
|
|
1036
|
-
])
|
|
1047
|
+
const result = await waitForTestResult(runPromise, timeout)
|
|
1048
|
+
if (result.status === 'aborted') {
|
|
1049
|
+
await startShellSession()
|
|
1050
|
+
return { content: [{ type: 'text', text: JSON.stringify({ status: 'failed', file: testFile, error: result.error }, null, 2) }] }
|
|
1051
|
+
}
|
|
1037
1052
|
|
|
1038
|
-
if (
|
|
1039
|
-
pendingRunPromise = runPromise
|
|
1053
|
+
if (result.status === 'paused') {
|
|
1040
1054
|
const page = await gatherPageBrief()
|
|
1041
1055
|
return {
|
|
1042
1056
|
content: [{
|
|
@@ -1046,6 +1060,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1046
1060
|
}
|
|
1047
1061
|
}
|
|
1048
1062
|
|
|
1063
|
+
pendingRunPromise = null
|
|
1049
1064
|
const final = collectRunCompletion(runError?.message)
|
|
1050
1065
|
await startShellSession()
|
|
1051
1066
|
return { content: [{ type: 'text', text: JSON.stringify({ ...final, file: testFile }, null, 2) }] }
|
|
@@ -1121,18 +1136,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1121
1136
|
throw err
|
|
1122
1137
|
}
|
|
1123
1138
|
})()
|
|
1139
|
+
pendingRunPromise = runPromise
|
|
1124
1140
|
|
|
1125
|
-
const
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
pausedPromise,
|
|
1131
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout after ${timeout}ms`)), timeout)),
|
|
1132
|
-
])
|
|
1141
|
+
const result = await waitForTestResult(runPromise, timeout)
|
|
1142
|
+
if (result.status === 'aborted') {
|
|
1143
|
+
await startShellSession()
|
|
1144
|
+
return { content: [{ type: 'text', text: JSON.stringify({ status: 'failed', file: testFile, error: result.error }, null, 2) }] }
|
|
1145
|
+
}
|
|
1133
1146
|
|
|
1134
|
-
if (
|
|
1135
|
-
pendingRunPromise = runPromise
|
|
1147
|
+
if (result.status === 'paused') {
|
|
1136
1148
|
const page = await gatherPageBrief()
|
|
1137
1149
|
return {
|
|
1138
1150
|
content: [{
|
|
@@ -1142,6 +1154,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1142
1154
|
}
|
|
1143
1155
|
}
|
|
1144
1156
|
|
|
1157
|
+
pendingRunPromise = null
|
|
1145
1158
|
const final = collectRunCompletion(runError?.message)
|
|
1146
1159
|
await startShellSession()
|
|
1147
1160
|
return { content: [{ type: 'text', text: JSON.stringify({ ...final, file: testFile }, null, 2) }] }
|