fix: align sync fallback chain, fix model-fallback test determinism

- Hoist resolveFallbackChainForCallOmoAgent before sync/background branch
  so sync executor also receives the fallback chain
- Add fallbackChain parameter to sync-executor with setSessionFallbackChain
- Mock connected-providers-cache in event.model-fallback tests for
  deterministic behavior (no dependency on local cache files)
- Update test expectations to account for no-op fallback skip when
  normalized current model matches first fallback entry
- Add cache spy isolation for subagent-resolver fallback_models tests
This commit is contained in:
YeonGyu-Kim
2026-03-09 13:11:03 +09:00
parent c598afa521
commit 7d1607dc16
5 changed files with 92 additions and 20 deletions
+10 -1
View File
@@ -1,7 +1,9 @@
import type { CallOmoAgentArgs } from "./types"
import type { PluginInput } from "@opencode-ai/plugin"
import { log } from "../../shared"
import type { FallbackEntry } from "../../shared/model-requirements"
import { getAgentToolRestrictions } from "../../shared"
import { setSessionFallbackChain } from "../../hooks/model-fallback/hook"
import { createOrGetSession } from "./session-creator"
import { waitForCompletion } from "./completion-poller"
import { processMessages } from "./message-processor"
@@ -14,12 +16,14 @@ type ExecuteSyncDeps = {
createOrGetSession: typeof createOrGetSession
waitForCompletion: typeof waitForCompletion
processMessages: typeof processMessages
setSessionFallbackChain: typeof setSessionFallbackChain
}
const defaultDeps: ExecuteSyncDeps = {
createOrGetSession,
waitForCompletion,
processMessages,
setSessionFallbackChain,
}
export async function executeSync(
@@ -32,10 +36,15 @@ export async function executeSync(
metadata?: (input: { title?: string; metadata?: Record<string, unknown> }) => void
},
ctx: PluginInput,
deps: ExecuteSyncDeps = defaultDeps
deps: ExecuteSyncDeps = defaultDeps,
fallbackChain?: FallbackEntry[],
): Promise<string> {
const { sessionID } = await deps.createOrGetSession(args, toolContext, ctx)
if (fallbackChain && fallbackChain.length > 0) {
deps.setSessionFallbackChain(sessionID, fallbackChain)
}
await toolContext.metadata?.({
title: args.description,
metadata: { sessionId: sessionID },