Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
TypeScript
12345678910111213141516171819202122232425262728293031323334353637383940414243444546export * as SubagentCompletion from "./subagent-completion.js"
import { Effect } from "effect"import type { Job } from "../job.js"import type { Session } from "../session.js"import type { SessionMessage } from "./message.js"
export const NO_TEXT = "Subagent completed without a text response."
export function text(message: SessionMessage.Info | undefined) { if (message?.type !== "assistant") return NO_TEXT return ( message.content .filter((part) => part.type === "text") .map((part) => part.text) .join("") || NO_TEXT )}
export const deliver = Effect.fnUntraced(function* ( sessions: Pick<Session.Interface, "synthetic">, jobs: Pick<Job.Interface, "completeBackground">, input: Pick<Job.Info, "status" | "output" | "error" | "notificationID"> & { recovery: Extract<Job.Recovery, { kind: "subagent" }> resume?: boolean },) { if (input.status === "running") return const recovery = input.recovery const text = input.status === "completed" ? (input.output ?? NO_TEXT) : input.status === "error" ? (input.error ?? "Subagent failed") : "Subagent cancelled" yield* sessions.synthetic({ ...(input.notificationID ? { id: input.notificationID } : {}), sessionID: recovery.parentSessionID, ...(input.resume === false ? { resume: false } : {}), description: recovery.description, text: `<subagent sessionID="${recovery.childSessionID}" state="${input.status}" description="${recovery.description}">\n${text}\n</subagent>`, metadata: { source: "subagent", childID: recovery.childSessionID, agent: recovery.agent, state: input.status }, }) if (input.notificationID) yield* jobs.completeBackground(input.notificationID)})