Skip to content

Commit 7f3d664

Browse files
committed
Simplify bg task session waking
1 parent 17d3a50 commit 7f3d664

1 file changed

Lines changed: 8 additions & 16 deletions

File tree

packages/opencode/src/session/background.ts

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@ export namespace SessionBackground {
1111

1212
const state = Instance.state(
1313
() => {
14-
const finished = new Map<string, Session.BackgroundTask[]>()
14+
const wakeable = new Set<string>()
1515
const unsubscribes = [
1616
Bus.subscribe(Session.Event.BackgroundTaskCompleted, async (event) => {
1717
const sessionID = event.properties.sessionID
1818
const task = event.properties.task
1919

20-
await addFinishedTask(sessionID, task).catch((err) => {
21-
log.error("failed to stage background task", { sessionID, error: err })
20+
await updateTaskMessage(sessionID, task).then(() => {
21+
state().wakeable.add(sessionID)
22+
}).catch((err) => {
23+
log.error("failed to update background task session message", { sessionID, error: err })
2224
})
2325
await wake(sessionID).catch((err) => {
2426
log.error("failed to wake for finished tasks", { sessionID, error: err })
@@ -32,7 +34,7 @@ export namespace SessionBackground {
3234
})
3335
}),
3436
]
35-
return { finished, unsubscribes }
37+
return { wakeable, unsubscribes }
3638
},
3739
async (current) => {
3840
for (const unsubscribe of current.unsubscribes) {
@@ -55,8 +57,7 @@ export namespace SessionBackground {
5557
}
5658

5759
const s = state()
58-
const tasks = s.finished.get(sessionID)
59-
if (!tasks || tasks.length === 0) {
60+
if (!s.wakeable.has(sessionID)) {
6061
return
6162
}
6263

@@ -65,20 +66,11 @@ export namespace SessionBackground {
6566
return
6667
}
6768

68-
s.finished.delete(sessionID)
69+
s.wakeable.delete(sessionID)
6970
SessionStatus.set(sessionID, { type: "busy" })
7071
await SessionPrompt.loop({ sessionID })
7172
}
7273

73-
async function addFinishedTask(sessionID: string, task: Session.BackgroundTask) {
74-
await updateTaskMessage(sessionID, task)
75-
76-
const finished = state().finished
77-
const tasks = finished.get(sessionID) ?? []
78-
finished.set(sessionID, tasks)
79-
tasks.push(task)
80-
}
81-
8274
async function updateTaskMessage(sessionID: string, task: Session.BackgroundTask) {
8375
const msgID = Identifier.ascending("message")
8476
const output = [`Session ID: ${task.sessionID}`, "", "<task_result>", task.result, "</task_result>"].join("\n")

0 commit comments

Comments
 (0)