fix(model-fallback): expose session fallback chains to background tasks

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
Choi Kijin / 최 기진 / チョイ キジン
2026-04-28 15:27:34 +09:00
parent 034744cbf2
commit cc3cca7cb7
4 changed files with 23 additions and 2 deletions
+2 -2
View File
@@ -58,6 +58,7 @@ export function createManagers(args: {
deps.markServerRunningInProcessFn()
}
const tmuxSessionManager = new deps.TmuxSessionManagerClass(ctx, tmuxConfig)
const modelFallbackControllerAccessor = createModelFallbackControllerAccessor()
deps.registerManagerForCleanupFn({
shutdown: async () => {
@@ -110,6 +111,7 @@ export function createManagers(args: {
})
},
enableParentSessionNotifications: backgroundNotificationHookEnabled,
modelFallbackControllerAccessor,
},
)
@@ -122,8 +124,6 @@ export function createManagers(args: {
pluginConfig,
modelCacheState,
})
const modelFallbackControllerAccessor = createModelFallbackControllerAccessor()
return {
tmuxSessionManager,
backgroundManager,
@@ -4,6 +4,7 @@ import type { ModelFallbackStateController } from "./fallback-state-controller"
export type ModelFallbackControllerAccessor = {
register: (controller: ModelFallbackStateController) => void
setSessionFallbackChain: (sessionID: string, fallbackChain: FallbackEntry[] | undefined) => void
getSessionFallbackChain: (sessionID: string) => FallbackEntry[] | undefined
clearSessionFallbackChain: (sessionID: string) => void
}
@@ -18,6 +19,10 @@ export function createModelFallbackControllerAccessor(): ModelFallbackController
controller?.setSessionFallbackChain(sessionID, fallbackChain)
}
function getSessionFallbackChain(sessionID: string): FallbackEntry[] | undefined {
return controller?.getSessionFallbackChain(sessionID)
}
function clearSessionFallbackChain(sessionID: string): void {
controller?.clearSessionFallbackChain(sessionID)
}
@@ -25,6 +30,7 @@ export function createModelFallbackControllerAccessor(): ModelFallbackController
return {
register,
setSessionFallbackChain,
getSessionFallbackChain,
clearSessionFallbackChain,
}
}
@@ -15,6 +15,7 @@ type ModelFallbackStateLike = {
export type ModelFallbackStateController = {
lastToastKey: Map<string, string>
setSessionFallbackChain: (sessionID: string, fallbackChain: FallbackEntry[] | undefined) => void
getSessionFallbackChain: (sessionID: string) => FallbackEntry[] | undefined
clearSessionFallbackChain: (sessionID: string) => void
setPendingModelFallback: (
sessionID: string,
@@ -45,6 +46,10 @@ export function createModelFallbackStateController(input: {
sessionFallbackChains.delete(sessionID)
}
function getSessionFallbackChain(sessionID: string): FallbackEntry[] | undefined {
return sessionFallbackChains.get(sessionID)
}
function setPendingModelFallback(
sessionID: string,
agentName: string,
@@ -123,6 +128,7 @@ export function createModelFallbackStateController(input: {
return {
lastToastKey,
setSessionFallbackChain,
getSessionFallbackChain,
clearSessionFallbackChain,
setPendingModelFallback,
getNextFallback,
+9
View File
@@ -33,6 +33,7 @@ type ModelFallbackControllerWithState = Pick<
ModelFallbackStateController,
| "lastToastKey"
| "setSessionFallbackChain"
| "getSessionFallbackChain"
| "clearSessionFallbackChain"
| "setPendingModelFallback"
| "getNextFallback"
@@ -70,6 +71,13 @@ export function clearSessionFallbackChain(
controller.clearSessionFallbackChain(sessionID)
}
export function getSessionFallbackChain(
controller: Pick<ModelFallbackStateController, "getSessionFallbackChain">,
sessionID: string,
): FallbackEntry[] | undefined {
return controller.getSessionFallbackChain(sessionID)
}
/**
* Sets a pending model fallback for a session.
* Called when a model error is detected in session.error handler.
@@ -152,6 +160,7 @@ export function createModelFallbackHook(args?: ModelFallbackHookArgs): ModelFall
return {
lastToastKey: controller.lastToastKey,
setSessionFallbackChain: controller.setSessionFallbackChain,
getSessionFallbackChain: controller.getSessionFallbackChain,
clearSessionFallbackChain: controller.clearSessionFallbackChain,
setPendingModelFallback: controller.setPendingModelFallback,
getNextFallback: controller.getNextFallback,