Provides reactive model fallback for foreground (interactive) sessions when rate-limit or provider-limit signals are observed in event streams.
index.ts exports:
ForegroundFallbackManagerisRateLimitError(error)sessionModel)sessionAgent)sessionTried)lastTrigger)inProgress)message, statusCode, data.message, data.responseBody).resolveChain(agentName, currentModel) with ordered
priority:
client.session.promptAsync with last-user message parts and
parsed { providerID, modelID } target.handleEvent receives each plugin event.message.updated, session.error, and retry session.status, it checks
rate-limit markers and calls tryFallback(sessionID) when matched.subagent.session.created updates session-to-agent mappings for better chain
resolution.tryFallback(sessionID) enforces:
DEDUP_WINDOW_MS = 5000).session.messages, aborts the active prompt via
session.abort(), waits 500ms, and re-prompts with promptAsync.session.deleted cleanup removes all per-session bookkeeping to avoid memory
growth.event hook in src/index.ts.ctx.client.session APIs (messages, abort, promptAsync) and
depends on runtime fallback chains provided from configuration.