Skip to content

Commit a64e1f6

Browse files
committed
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
1 parent 14c54c1 commit a64e1f6

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

src/tools/sisyphus-task/tools.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ function getMessageDir(sessionID: string): string | null {
3838
return null
3939
}
4040

41+
async function getParentAgentFromSdk(client: OpencodeClient, sessionID: string): Promise<string | undefined> {
42+
try {
43+
const messagesResp = await client.session.messages({ path: { id: sessionID } })
44+
const messages = (messagesResp.data ?? []) as Array<{ info?: { agent?: string } }>
45+
for (let i = messages.length - 1; i >= 0; i--) {
46+
if (messages[i].info?.agent) {
47+
return messages[i].info?.agent
48+
}
49+
}
50+
} catch {}
51+
return undefined
52+
}
53+
4154
function formatDuration(start: Date, end?: Date): string {
4255
const duration = (end ?? new Date()).getTime() - start.getTime()
4356
const seconds = Math.floor(duration / 1000)
@@ -144,13 +157,14 @@ export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefini
144157
skillContent = Array.from(resolved.values()).join("\n\n")
145158
}
146159

160+
const sdkParentAgent = await getParentAgentFromSdk(client, ctx.sessionID)
147161
const messageDir = getMessageDir(ctx.sessionID)
148162
const prevMessage = messageDir ? findNearestMessageWithFields(messageDir) : null
163+
const parentAgent = sdkParentAgent ?? prevMessage?.agent
149164
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
150165
? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID }
151166
: undefined
152167

153-
// Handle resume case first
154168
if (args.resume) {
155169
if (runInBackground) {
156170
try {
@@ -160,7 +174,7 @@ export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefini
160174
parentSessionID: ctx.sessionID,
161175
parentMessageID: ctx.messageID,
162176
parentModel,
163-
parentAgent: prevMessage?.agent,
177+
parentAgent,
164178
})
165179

166180
ctx.metadata?.({
@@ -327,7 +341,7 @@ ${textContent || "(No text output)"}`
327341
parentSessionID: ctx.sessionID,
328342
parentMessageID: ctx.messageID,
329343
parentModel,
330-
parentAgent: prevMessage?.agent,
344+
parentAgent,
331345
model: categoryModel,
332346
skills: args.skills,
333347
skillContent: systemContent,

0 commit comments

Comments
 (0)