fix(ralph-loop): return typed ContinuationResult from continueIteration
Replace silent returns in continueIteration with a discriminated union\n(dispatched | session_creation_rejected | dispatch_rejected). Wraps\ninjectContinuationPrompt in try/catch so reset-strategy createIterationSession\nreturning null and promptAsync rejections both surface as typed failures\nthe caller can react to.
This commit is contained in:
@@ -15,11 +15,16 @@ type ContinuationOptions = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ContinuationResult =
|
||||||
|
| { status: "dispatched" }
|
||||||
|
| { status: "session_creation_rejected" }
|
||||||
|
| { status: "dispatch_rejected"; error: unknown }
|
||||||
|
|
||||||
export async function continueIteration(
|
export async function continueIteration(
|
||||||
ctx: PluginInput,
|
ctx: PluginInput,
|
||||||
state: RalphLoopState,
|
state: RalphLoopState,
|
||||||
options: ContinuationOptions,
|
options: ContinuationOptions,
|
||||||
): Promise<void> {
|
): Promise<ContinuationResult> {
|
||||||
const strategy = state.strategy ?? "continue"
|
const strategy = state.strategy ?? "continue"
|
||||||
const continuationPrompt = buildContinuationPrompt(state)
|
const continuationPrompt = buildContinuationPrompt(state)
|
||||||
|
|
||||||
@@ -30,16 +35,20 @@ export async function continueIteration(
|
|||||||
options.directory,
|
options.directory,
|
||||||
)
|
)
|
||||||
if (!newSessionID) {
|
if (!newSessionID) {
|
||||||
return
|
return { status: "session_creation_rejected" }
|
||||||
}
|
}
|
||||||
|
|
||||||
await injectContinuationPrompt(ctx, {
|
try {
|
||||||
sessionID: newSessionID,
|
await injectContinuationPrompt(ctx, {
|
||||||
inheritFromSessionID: options.previousSessionID,
|
sessionID: newSessionID,
|
||||||
prompt: continuationPrompt,
|
inheritFromSessionID: options.previousSessionID,
|
||||||
directory: options.directory,
|
prompt: continuationPrompt,
|
||||||
apiTimeoutMs: options.apiTimeoutMs,
|
directory: options.directory,
|
||||||
})
|
apiTimeoutMs: options.apiTimeoutMs,
|
||||||
|
})
|
||||||
|
} catch (error: unknown) {
|
||||||
|
return { status: "dispatch_rejected", error }
|
||||||
|
}
|
||||||
|
|
||||||
await selectSessionInTui(ctx.client, newSessionID)
|
await selectSessionInTui(ctx.client, newSessionID)
|
||||||
|
|
||||||
@@ -49,16 +58,22 @@ export async function continueIteration(
|
|||||||
previousSessionID: options.previousSessionID,
|
previousSessionID: options.previousSessionID,
|
||||||
newSessionID,
|
newSessionID,
|
||||||
})
|
})
|
||||||
return
|
return { status: "dispatched" }
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return { status: "dispatched" }
|
||||||
}
|
}
|
||||||
|
|
||||||
await injectContinuationPrompt(ctx, {
|
try {
|
||||||
sessionID: options.previousSessionID,
|
await injectContinuationPrompt(ctx, {
|
||||||
prompt: continuationPrompt,
|
sessionID: options.previousSessionID,
|
||||||
directory: options.directory,
|
prompt: continuationPrompt,
|
||||||
apiTimeoutMs: options.apiTimeoutMs,
|
directory: options.directory,
|
||||||
})
|
apiTimeoutMs: options.apiTimeoutMs,
|
||||||
|
})
|
||||||
|
} catch (error: unknown) {
|
||||||
|
return { status: "dispatch_rejected", error }
|
||||||
|
}
|
||||||
|
|
||||||
|
return { status: "dispatched" }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user