fix(background-agent): use compaction-aware prompt context in manager
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -41,7 +41,10 @@ import {
|
|||||||
} from "./error-classifier"
|
} from "./error-classifier"
|
||||||
import { tryFallbackRetry } from "./fallback-retry-handler"
|
import { tryFallbackRetry } from "./fallback-retry-handler"
|
||||||
import { registerManagerForCleanup, unregisterManagerForCleanup } from "./process-cleanup"
|
import { registerManagerForCleanup, unregisterManagerForCleanup } from "./process-cleanup"
|
||||||
import { isCompactionAgent, findNearestMessageExcludingCompaction } from "./compaction-aware-message-resolver"
|
import {
|
||||||
|
findNearestMessageExcludingCompaction,
|
||||||
|
resolvePromptContextFromSessionMessages,
|
||||||
|
} from "./compaction-aware-message-resolver"
|
||||||
import { handleSessionIdleBackgroundEvent } from "./session-idle-event-handler"
|
import { handleSessionIdleBackgroundEvent } from "./session-idle-event-handler"
|
||||||
import { MESSAGE_STORAGE } from "../hook-message-injector"
|
import { MESSAGE_STORAGE } from "../hook-message-injector"
|
||||||
import { join } from "node:path"
|
import { join } from "node:path"
|
||||||
@@ -1316,20 +1319,20 @@ Use \`background_output(task_id="${task.id}")\` to retrieve this result when rea
|
|||||||
tools?: Record<string, boolean | "allow" | "deny" | "ask">
|
tools?: Record<string, boolean | "allow" | "deny" | "ask">
|
||||||
}
|
}
|
||||||
}>)
|
}>)
|
||||||
for (let i = messages.length - 1; i >= 0; i--) {
|
const promptContext = resolvePromptContextFromSessionMessages(
|
||||||
const info = messages[i].info
|
messages,
|
||||||
if (isCompactionAgent(info?.agent)) {
|
task.parentSessionID,
|
||||||
continue
|
)
|
||||||
}
|
const normalizedTools = isRecord(promptContext?.tools)
|
||||||
const normalizedTools = isRecord(info?.tools)
|
? normalizePromptTools(promptContext.tools)
|
||||||
? normalizePromptTools(info.tools as Record<string, boolean | "allow" | "deny" | "ask">)
|
: undefined
|
||||||
|
|
||||||
|
if (promptContext?.agent || promptContext?.model || normalizedTools) {
|
||||||
|
agent = promptContext?.agent ?? task.parentAgent
|
||||||
|
model = promptContext?.model?.providerID && promptContext.model.modelID
|
||||||
|
? { providerID: promptContext.model.providerID, modelID: promptContext.model.modelID }
|
||||||
: undefined
|
: undefined
|
||||||
if (info?.agent || info?.model || (info?.modelID && info?.providerID) || normalizedTools) {
|
tools = normalizedTools ?? tools
|
||||||
agent = info?.agent ?? task.parentAgent
|
|
||||||
model = info?.model ?? (info?.providerID && info?.modelID ? { providerID: info.providerID, modelID: info.modelID } : undefined)
|
|
||||||
tools = normalizedTools ?? tools
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (isAbortedSessionError(error)) {
|
if (isAbortedSessionError(error)) {
|
||||||
@@ -1339,7 +1342,9 @@ Use \`background_output(task_id="${task.id}")\` to retrieve this result when rea
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
const messageDir = join(MESSAGE_STORAGE, task.parentSessionID)
|
const messageDir = join(MESSAGE_STORAGE, task.parentSessionID)
|
||||||
const currentMessage = messageDir ? findNearestMessageExcludingCompaction(messageDir) : null
|
const currentMessage = messageDir
|
||||||
|
? findNearestMessageExcludingCompaction(messageDir, task.parentSessionID)
|
||||||
|
: null
|
||||||
agent = currentMessage?.agent ?? task.parentAgent
|
agent = currentMessage?.agent ?? task.parentAgent
|
||||||
model = currentMessage?.model?.providerID && currentMessage?.model?.modelID
|
model = currentMessage?.model?.providerID && currentMessage?.model?.modelID
|
||||||
? { providerID: currentMessage.model.providerID, modelID: currentMessage.model.modelID }
|
? { providerID: currentMessage.model.providerID, modelID: currentMessage.model.modelID }
|
||||||
|
|||||||
Reference in New Issue
Block a user