diff --git a/src/tools/sisyphus-task/tools.ts b/src/tools/sisyphus-task/tools.ts index ebe72e4b5..f7d38eaed 100644 --- a/src/tools/sisyphus-task/tools.ts +++ b/src/tools/sisyphus-task/tools.ts @@ -38,6 +38,19 @@ function getMessageDir(sessionID: string): string | null { return null } +async function getParentAgentFromSdk(client: OpencodeClient, sessionID: string): Promise { + 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 { const duration = (end ?? new Date()).getTime() - start.getTime() const seconds = Math.floor(duration / 1000) @@ -144,13 +157,14 @@ export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefini skillContent = Array.from(resolved.values()).join("\n\n") } + const sdkParentAgent = await getParentAgentFromSdk(client, ctx.sessionID) const messageDir = getMessageDir(ctx.sessionID) const prevMessage = messageDir ? findNearestMessageWithFields(messageDir) : null + const parentAgent = sdkParentAgent ?? prevMessage?.agent const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID ? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID } : undefined - // Handle resume case first if (args.resume) { if (runInBackground) { try { @@ -160,7 +174,7 @@ export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefini parentSessionID: ctx.sessionID, parentMessageID: ctx.messageID, parentModel, - parentAgent: prevMessage?.agent, + parentAgent, }) ctx.metadata?.({ @@ -327,7 +341,7 @@ ${textContent || "(No text output)"}` parentSessionID: ctx.sessionID, parentMessageID: ctx.messageID, parentModel, - parentAgent: prevMessage?.agent, + parentAgent, model: categoryModel, skills: args.skills, skillContent: systemContent,