From 32a838ad3cadf309598816963a20f4eb3026f01c Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 22 Feb 2026 17:19:31 +0900 Subject: [PATCH] feat(hooks): add compaction-model-resolver utility for session agent model lookup --- src/hooks/shared/compaction-model-resolver.ts | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/hooks/shared/compaction-model-resolver.ts diff --git a/src/hooks/shared/compaction-model-resolver.ts b/src/hooks/shared/compaction-model-resolver.ts new file mode 100644 index 00000000..b21cc980 --- /dev/null +++ b/src/hooks/shared/compaction-model-resolver.ts @@ -0,0 +1,35 @@ +import type { OhMyOpenCodeConfig } from "../../config" +import { getSessionAgent } from "../../features/claude-code-session-state" +import { getAgentConfigKey } from "../../shared/agent-display-names" + +export function resolveCompactionModel( + pluginConfig: OhMyOpenCodeConfig, + sessionID: string, + originalProviderID: string, + originalModelID: string +): { providerID: string; modelID: string } { + const sessionAgentName = getSessionAgent(sessionID) + + if (!sessionAgentName || !pluginConfig.agents) { + return { providerID: originalProviderID, modelID: originalModelID } + } + + const agentConfigKey = getAgentConfigKey(sessionAgentName) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const agentConfig = (pluginConfig.agents as any)[agentConfigKey] + const compactionConfig = agentConfig?.compaction + + if (!compactionConfig?.model) { + return { providerID: originalProviderID, modelID: originalModelID } + } + + const modelParts = compactionConfig.model.split("/") + if (modelParts.length < 2) { + return { providerID: originalProviderID, modelID: originalModelID } + } + + return { + providerID: modelParts[0], + modelID: modelParts.slice(1).join("/"), + } +}