@@ -48,6 +48,7 @@ const NOOP_LOGGER: FastifyBaseLogger = {
4848} ;
4949
5050type SessionLifecycleEvent = Extract < DomainEvent , { type : "session.lifecycle" } > ;
51+ type SupervisorEvaluateResult = Extract < SupervisorEvaluationResult , { mode : "evaluate" } > ;
5152
5253/**
5354 * Internal handoff between the synchronous `beginCycle` and the async
@@ -85,7 +86,7 @@ interface SupervisorCycleRuntimeSnapshot {
8586}
8687
8788interface CompletedCycleEvaluation {
88- evaluation : SupervisorEvaluationResult ;
89+ evaluation : SupervisorEvaluateResult ;
8990 injected : boolean ;
9091 injectedText ?: string ;
9192 targetMemory : SupervisorTargetMemory ;
@@ -188,9 +189,9 @@ function isDecomposeResult(
188189}
189190
190191function isEvaluateStopResult (
191- result : SupervisorEvaluationResult | { status ?: string }
192- ) : result is Extract < SupervisorEvaluationResult , { mode : "evaluate" ; status : "stop" } > {
193- return result . status === "stop" ;
192+ result : SupervisorEvaluateResult | { status ?: string }
193+ ) : result is Extract < SupervisorEvaluateResult , { status : "stop" } > {
194+ return "status" in result && result . status === "stop" ;
194195}
195196
196197export class SupervisorManager {
@@ -1227,13 +1228,14 @@ export class SupervisorManager {
12271228 const currentSupervisor =
12281229 this . supervisors . get ( activeCycle . supervisorId ) ??
12291230 this . requireSupervisor ( activeCycle . supervisorId ) ;
1231+ const evaluation = result . evaluation ;
12301232 const finalStatus : CycleStatus = result . injected ? "injected" : "completed" ;
1231- const cycleReason = isEvaluateStopResult ( result . evaluation )
1232- ? result . evaluation . reason
1233+ const cycleReason = isEvaluateStopResult ( evaluation )
1234+ ? evaluation . reason
12331235 : result . injected
12341236 ? result . injectedText
1235- : result . evaluation . guidance
1236- ? `Skipped duplicate: ${ result . evaluation . guidance } `
1237+ : evaluation . guidance
1238+ ? `Skipped duplicate: ${ evaluation . guidance } `
12371239 : undefined ;
12381240
12391241 const finishedCycle = this . deps . cycleRepo . update ( activeCycle . id , {
@@ -1250,19 +1252,18 @@ export class SupervisorManager {
12501252 } ;
12511253 await this . deps . targetStore . saveTargetMemory ( workspace . path , targetId , nextTargetMemory ) ;
12521254
1253- const cycleRecord : SupervisorCycleTargetRecord = isEvaluateStopResult ( result . evaluation )
1255+ const cycleRecord : SupervisorCycleTargetRecord = isEvaluateStopResult ( evaluation )
12541256 ? {
12551257 cycleId : activeCycle . id ,
12561258 targetId,
12571259 startedAt : activeCycle . createdAt ,
12581260 completedAt : finishedCycle . completedAt ?? Date . now ( ) ,
12591261 result : "stop" ,
1260- stopReason : result . evaluation . stopReason ,
1261- reason : result . evaluation . reason ,
1262- progressSummary : result . evaluation . progressSummary ?? nextTargetMemory . progressSummary ,
1262+ stopReason : evaluation . stopReason ,
1263+ reason : evaluation . reason ,
1264+ progressSummary : nextTargetMemory . progressSummary ,
12631265 decompositionMode : nextTargetMemory . decompositionMode ,
1264- activeItemId : result . evaluation . activeItemId ?? nextTargetMemory . activeItemId ,
1265- itemUpdates : result . evaluation . itemUpdates ,
1266+ activeItemId : nextTargetMemory . activeItemId ,
12661267 injected : false ,
12671268 attemptCount : this . deps . cycleAttemptRepo . listForCycle ( activeCycle . id ) . length ,
12681269 }
@@ -1272,20 +1273,20 @@ export class SupervisorManager {
12721273 startedAt : activeCycle . createdAt ,
12731274 completedAt : finishedCycle . completedAt ?? Date . now ( ) ,
12741275 result : "continue" ,
1275- reason : result . evaluation . reason ,
1276- guidance : result . injected ? result . injectedText : result . evaluation . guidance ,
1276+ reason : evaluation . reason ,
1277+ guidance : result . injected ? result . injectedText : evaluation . guidance ,
12771278 progressSummary : nextTargetMemory . progressSummary ,
12781279 decompositionMode : nextTargetMemory . decompositionMode ,
12791280 activeItemId : nextTargetMemory . activeItemId ,
1280- itemUpdates : result . evaluation . itemUpdates ,
1281+ itemUpdates : evaluation . itemUpdates ,
12811282 injected : result . injected ,
12821283 attemptCount : this . deps . cycleAttemptRepo . listForCycle ( activeCycle . id ) . length ,
12831284 } ;
12841285 await this . deps . targetStore . appendTargetCycleRecord ( workspace . path , targetId , cycleRecord ) ;
12851286
1286- if ( isEvaluateStopResult ( result . evaluation ) ) {
1287+ if ( isEvaluateStopResult ( evaluation ) ) {
12871288 await this . updateTargetMetaStatus ( workspace . path , targetId , {
1288- status : result . evaluation . stopReason === "objective_complete" ? "completed" : "cancelled" ,
1289+ status : evaluation . stopReason === "objective_complete" ? "completed" : "cancelled" ,
12891290 completedAt : finishedCycle . completedAt ?? Date . now ( ) ,
12901291 } ) ;
12911292 }
@@ -1307,7 +1308,7 @@ export class SupervisorManager {
13071308 state : isEvaluateStopResult ( result . evaluation ) ? "stopped" : "idle" ,
13081309 completedSupervisionCount :
13091310 ( this . supervisors . get ( activeCycle . supervisorId ) ?. completedSupervisionCount ?? 0 ) + 1 ,
1310- stopReason : isEvaluateStopResult ( result . evaluation ) ? result . evaluation . stopReason : null ,
1311+ stopReason : isEvaluateStopResult ( evaluation ) ? evaluation . stopReason : null ,
13111312 lastCycleAt : finishedCycle . completedAt ,
13121313 lastEvaluatedTurnId : context . lastTurnId ?? undefined ,
13131314 errorReason : null ,
@@ -1513,6 +1514,20 @@ export class SupervisorManager {
15131514 } ;
15141515 }
15151516
1517+ if ( isEvaluateStopResult ( evaluation ) ) {
1518+ return {
1519+ ...memory ,
1520+ decompositionGenerated : memory . decompositionGenerated ,
1521+ decompositionMode : memory . decompositionMode ,
1522+ items : memory . items ,
1523+ activeItemId : memory . activeItemId ,
1524+ progressSummary : memory . progressSummary ,
1525+ lastGuidance : memory . lastGuidance ,
1526+ stalledCount : 0 ,
1527+ updatedAt,
1528+ } ;
1529+ }
1530+
15161531 let items = memory . items ;
15171532 if ( evaluation . itemUpdates ?. length ) {
15181533 const updates = new Map ( evaluation . itemUpdates . map ( ( item ) => [ item . id , item . status ] ) ) ;
@@ -1522,16 +1537,9 @@ export class SupervisorManager {
15221537 }
15231538
15241539 const progressSummary = evaluation . progressSummary ?? memory . progressSummary ;
1525- const lastGuidance =
1526- evaluation . status === "continue"
1527- ? ( injectedText ?? evaluation . guidance ?? memory . lastGuidance )
1528- : memory . lastGuidance ;
1540+ const lastGuidance = injectedText ?? evaluation . guidance ?? memory . lastGuidance ;
15291541 const stalledCount =
1530- evaluation . status === "continue" &&
1531- ! evaluation . progressSummary &&
1532- ! evaluation . itemUpdates ?. length
1533- ? memory . stalledCount + 1
1534- : 0 ;
1542+ ! evaluation . progressSummary && ! evaluation . itemUpdates ?. length ? memory . stalledCount + 1 : 0 ;
15351543
15361544 return {
15371545 ...memory ,
0 commit comments