@@ -16,6 +16,7 @@ import {
1616 IpcMessageType ,
1717 TaskCommandName ,
1818 rooCodeDefaults ,
19+ EvalEventName ,
1920} from "@evals/types"
2021import {
2122 type Run ,
@@ -34,7 +35,7 @@ import { IpcServer, IpcClient } from "@evals/ipc"
3435import { __dirname , extensionDevelopmentPath , exercisesPath } from "./paths.js"
3536import { getExercises } from "./exercises.js"
3637
37- type TaskResult = { success : boolean ; retry : boolean }
38+ type TaskResult = { success : boolean }
3839type TaskPromise = Promise < TaskResult >
3940
4041const TASK_START_DELAY = 10 * 1_000
@@ -116,24 +117,25 @@ const run = async (toolbox: GluegunToolbox) => {
116117
117118 const runningPromises : TaskPromise [ ] = [ ]
118119
119- // Retries aren't implemented yet, but the return values are set up to
120- // support them.
121120 const processTask = async ( task : Task , delay = 0 ) => {
122121 if ( task . finishedAt === null ) {
123122 await new Promise ( ( resolve ) => setTimeout ( resolve , delay ) )
124- const { retry } = await runExercise ( { run, task, server } )
125-
126- if ( retry ) {
127- return { success : false , retry : true }
128- }
123+ await runExercise ( { run, task, server } )
129124 }
130125
131126 if ( task . passed === null ) {
132127 const passed = await runUnitTest ( { task } )
133128 await updateTask ( task . id , { passed } )
134- return { success : passed , retry : false }
129+
130+ server . broadcast ( {
131+ type : IpcMessageType . TaskEvent ,
132+ origin : IpcOrigin . Server ,
133+ data : { eventName : passed ? EvalEventName . Pass : EvalEventName . Fail , taskId : task . id } ,
134+ } )
135+
136+ return { success : passed }
135137 } else {
136- return { success : task . passed , retry : false }
138+ return { success : task . passed }
137139 }
138140 }
139141
@@ -200,7 +202,7 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server
200202 } catch ( error ) {
201203 console . log ( `${ Date . now ( ) } [cli#runExercise | ${ language } / ${ exercise } ] unable to connect` )
202204 client . disconnect ( )
203- return { success : false , retry : false }
205+ return { success : false }
204206 }
205207
206208 let taskStartedAt = Date . now ( )
@@ -209,16 +211,15 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server
209211 let rooTaskId : string | undefined
210212 let isClientDisconnected = false
211213
212- const ignoreEvents : RooCodeEventName [ ] = [
213- RooCodeEventName . Message ,
214- RooCodeEventName . TaskTokenUsageUpdated ,
215- RooCodeEventName . TaskAskResponded ,
216- ]
214+ const ignoreEvents : Record < "broadcast" | "log" , ( RooCodeEventName | EvalEventName ) [ ] > = {
215+ broadcast : [ RooCodeEventName . Message ] ,
216+ log : [ RooCodeEventName . Message , RooCodeEventName . TaskTokenUsageUpdated , RooCodeEventName . TaskAskResponded ] ,
217+ }
217218
218219 client . on ( IpcMessageType . TaskEvent , async ( taskEvent ) => {
219220 const { eventName, payload } = taskEvent
220221
221- if ( taskEvent . eventName !== RooCodeEventName . Message ) {
222+ if ( ! ignoreEvents . broadcast . includes ( eventName ) ) {
222223 server . broadcast ( {
223224 type : IpcMessageType . TaskEvent ,
224225 origin : IpcOrigin . Server ,
@@ -227,7 +228,7 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server
227228 } )
228229 }
229230
230- if ( ! ignoreEvents . includes ( eventName ) ) {
231+ if ( ! ignoreEvents . log . includes ( eventName ) ) {
231232 console . log (
232233 `${ Date . now ( ) } [cli#runExercise | ${ language } / ${ exercise } ] taskEvent -> ${ eventName } ` ,
233234 payload ,
@@ -320,11 +321,10 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server
320321 data : { commandName : TaskCommandName . CancelTask , data : rooTaskId } ,
321322 } )
322323
323- // Give the server some time to cancel the task.
324+ // Allow some time for the task to cancel .
324325 await new Promise ( ( resolve ) => setTimeout ( resolve , 5_000 ) )
325326 }
326327
327- // TODO: Notify clients that the task timed out.
328328 await updateTask ( task . id , { finishedAt : new Date ( ) } )
329329 }
330330
@@ -336,12 +336,15 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server
336336 clientId : client . clientId ! ,
337337 data : { commandName : TaskCommandName . CloseTask , data : rooTaskId } ,
338338 } )
339+
340+ // Allow some time for the window to close.
341+ await new Promise ( ( resolve ) => setTimeout ( resolve , 2_000 ) )
339342 }
340343
341344 client . disconnect ( )
342345 }
343346
344- return { success : ! ! taskFinishedAt , retry : false }
347+ return { success : ! ! taskFinishedAt }
345348}
346349
347350const runUnitTest = async ( { task } : { task : Task } ) => {
@@ -372,7 +375,7 @@ const runUnitTest = async ({ task }: { task: Task }) => {
372375 } )
373376
374377 console . log (
375- `${ Date . now ( ) } [cli#runUnitTest | ${ task . language } / ${ task . exercise } ] "${ command . join ( " " ) } ": ${ subprocess . pid } -> ${ JSON . stringify ( descendants ) } ` ,
378+ `${ Date . now ( ) } [cli#runUnitTest | ${ task . language } / ${ task . exercise } ] "${ command . join ( " " ) } ": unit tests timed out, killing ${ subprocess . pid } + ${ JSON . stringify ( descendants ) } ` ,
376379 )
377380
378381 if ( descendants . length > 0 ) {
@@ -384,7 +387,10 @@ const runUnitTest = async ({ task }: { task: Task }) => {
384387
385388 await execa `kill -9 ${ descendant } `
386389 } catch ( error ) {
387- console . error ( "Error killing descendant processes:" , error )
390+ console . error (
391+ `${ Date . now ( ) } [cli#runUnitTest | ${ task . language } / ${ task . exercise } ] Error killing descendant processes:` ,
392+ error ,
393+ )
388394 }
389395 }
390396 }
@@ -396,7 +402,10 @@ const runUnitTest = async ({ task }: { task: Task }) => {
396402 try {
397403 await execa `kill -9 ${ subprocess . pid ! } `
398404 } catch ( error ) {
399- console . error ( "Error killing process:" , error )
405+ console . error (
406+ `${ Date . now ( ) } [cli#runUnitTest | ${ task . language } / ${ task . exercise } ] Error killing process:` ,
407+ error ,
408+ )
400409 }
401410 } , UNIT_TEST_TIMEOUT )
402411
0 commit comments