fix(sisyphus-task): use SDK session.messages API for parent agent lookup
Background task notifications were showing 'build' agent instead of the actual parent agent (e.g., 'Sisyphus'). The hook-injected message storage only contains limited info; the actual agent name is in the SDK session. Changes: - Add getParentAgentFromSdk() to query SDK messages API - Look up agent from SDK first, fallback to hook-injected messages - Ensures background tasks correctly preserve parent agent context
This commit is contained in:
parent
14c54c1941
commit
a64e1f6100
@ -38,6 +38,19 @@ function getMessageDir(sessionID: string): string | null {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getParentAgentFromSdk(client: OpencodeClient, sessionID: string): Promise<string | undefined> {
|
||||||
|
try {
|
||||||
|
const messagesResp = await client.session.messages({ path: { id: sessionID } })
|
||||||
|
const messages = (messagesResp.data ?? []) as Array<{ info?: { agent?: string } }>
|
||||||
|
for (let i = messages.length - 1; i >= 0; i--) {
|
||||||
|
if (messages[i].info?.agent) {
|
||||||
|
return messages[i].info?.agent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
function formatDuration(start: Date, end?: Date): string {
|
function formatDuration(start: Date, end?: Date): string {
|
||||||
const duration = (end ?? new Date()).getTime() - start.getTime()
|
const duration = (end ?? new Date()).getTime() - start.getTime()
|
||||||
const seconds = Math.floor(duration / 1000)
|
const seconds = Math.floor(duration / 1000)
|
||||||
@ -144,13 +157,14 @@ export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefini
|
|||||||
skillContent = Array.from(resolved.values()).join("\n\n")
|
skillContent = Array.from(resolved.values()).join("\n\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const sdkParentAgent = await getParentAgentFromSdk(client, ctx.sessionID)
|
||||||
const messageDir = getMessageDir(ctx.sessionID)
|
const messageDir = getMessageDir(ctx.sessionID)
|
||||||
const prevMessage = messageDir ? findNearestMessageWithFields(messageDir) : null
|
const prevMessage = messageDir ? findNearestMessageWithFields(messageDir) : null
|
||||||
|
const parentAgent = sdkParentAgent ?? prevMessage?.agent
|
||||||
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
||||||
? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID }
|
? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID }
|
||||||
: undefined
|
: undefined
|
||||||
|
|
||||||
// Handle resume case first
|
|
||||||
if (args.resume) {
|
if (args.resume) {
|
||||||
if (runInBackground) {
|
if (runInBackground) {
|
||||||
try {
|
try {
|
||||||
@ -160,7 +174,7 @@ export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefini
|
|||||||
parentSessionID: ctx.sessionID,
|
parentSessionID: ctx.sessionID,
|
||||||
parentMessageID: ctx.messageID,
|
parentMessageID: ctx.messageID,
|
||||||
parentModel,
|
parentModel,
|
||||||
parentAgent: prevMessage?.agent,
|
parentAgent,
|
||||||
})
|
})
|
||||||
|
|
||||||
ctx.metadata?.({
|
ctx.metadata?.({
|
||||||
@ -327,7 +341,7 @@ ${textContent || "(No text output)"}`
|
|||||||
parentSessionID: ctx.sessionID,
|
parentSessionID: ctx.sessionID,
|
||||||
parentMessageID: ctx.messageID,
|
parentMessageID: ctx.messageID,
|
||||||
parentModel,
|
parentModel,
|
||||||
parentAgent: prevMessage?.agent,
|
parentAgent,
|
||||||
model: categoryModel,
|
model: categoryModel,
|
||||||
skills: args.skills,
|
skills: args.skills,
|
||||||
skillContent: systemContent,
|
skillContent: systemContent,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user