2026-02-08 13:57:26 +09:00
|
|
|
import type { ToolContextWithMetadata } from "./types"
|
2026-02-15 15:09:59 +09:00
|
|
|
import type { OpencodeClient } from "./types"
|
2026-02-08 13:57:26 +09:00
|
|
|
import type { ParentContext } from "./executor-types"
|
2026-02-16 18:20:27 +09:00
|
|
|
import { resolveMessageContext } from "../../features/hook-message-injector"
|
2026-02-08 13:57:26 +09:00
|
|
|
import { getSessionAgent } from "../../features/claude-code-session-state"
|
2026-02-08 18:03:15 +09:00
|
|
|
import { log } from "../../shared/logger"
|
2026-02-15 15:09:59 +09:00
|
|
|
import { getMessageDir } from "../../shared/opencode-message-dir"
|
2026-02-08 13:57:26 +09:00
|
|
|
|
2026-02-15 15:09:59 +09:00
|
|
|
export async function resolveParentContext(
|
|
|
|
|
ctx: ToolContextWithMetadata,
|
|
|
|
|
client: OpencodeClient
|
|
|
|
|
): Promise<ParentContext> {
|
2026-02-08 13:57:26 +09:00
|
|
|
const messageDir = getMessageDir(ctx.sessionID)
|
2026-02-16 18:20:27 +09:00
|
|
|
const { prevMessage, firstMessageAgent } = await resolveMessageContext(
|
|
|
|
|
ctx.sessionID,
|
|
|
|
|
client,
|
|
|
|
|
messageDir
|
|
|
|
|
)
|
2026-02-15 15:09:59 +09:00
|
|
|
|
2026-02-08 13:57:26 +09:00
|
|
|
const sessionAgent = getSessionAgent(ctx.sessionID)
|
|
|
|
|
const parentAgent = ctx.agent ?? sessionAgent ?? firstMessageAgent ?? prevMessage?.agent
|
|
|
|
|
|
|
|
|
|
log("[task] parentAgent resolution", {
|
|
|
|
|
sessionID: ctx.sessionID,
|
|
|
|
|
messageDir,
|
|
|
|
|
ctxAgent: ctx.agent,
|
|
|
|
|
sessionAgent,
|
|
|
|
|
firstMessageAgent,
|
|
|
|
|
prevMessageAgent: prevMessage?.agent,
|
|
|
|
|
resolvedParentAgent: parentAgent,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
|
|
|
|
? {
|
|
|
|
|
providerID: prevMessage.model.providerID,
|
|
|
|
|
modelID: prevMessage.model.modelID,
|
|
|
|
|
...(prevMessage.model.variant ? { variant: prevMessage.model.variant } : {}),
|
|
|
|
|
}
|
|
|
|
|
: undefined
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
sessionID: ctx.sessionID,
|
|
|
|
|
messageID: ctx.messageID,
|
|
|
|
|
agent: parentAgent,
|
|
|
|
|
model: parentModel,
|
|
|
|
|
}
|
|
|
|
|
}
|