2026-02-08 16:20:52 +09:00
import type { BackgroundTask } from "./types"
2026-03-27 15:48:07 +09:00
export type BackgroundTaskNotificationStatus = "COMPLETED" | "CANCELLED" | "INTERRUPTED" | "ERROR"
2026-02-08 16:20:52 +09:00
export function buildBackgroundTaskNotificationText ( input : {
task : BackgroundTask
duration : string
statusText : BackgroundTaskNotificationStatus
allComplete : boolean
remainingCount : number
completedTasks : BackgroundTask [ ]
} ) : string {
const { task , duration , statusText , allComplete , remainingCount , completedTasks } = input
const errorInfo = task . error ? ` \ n**Error:** ${ task . error } ` : ""
if ( allComplete ) {
2026-03-27 15:48:07 +09:00
const succeededTasks = completedTasks . filter ( ( t ) = > t . status === "completed" )
const failedTasks = completedTasks . filter ( ( t ) = > t . status !== "completed" )
const succeededText = succeededTasks . length > 0
? succeededTasks . map ( ( t ) = > ` - \` ${ t . id } \` : ${ t . description } ` ) . join ( "\n" )
: ""
const failedText = failedTasks . length > 0
? failedTasks . map ( ( t ) = > ` - \` ${ t . id } \` : ${ t . description } [ ${ t . status . toUpperCase ( ) } ] ${ t . error ? ` - ${ t . error } ` : "" } ` ) . join ( "\n" )
: ""
const hasFailures = failedTasks . length > 0
const header = hasFailures
? ` [ALL BACKGROUND TASKS FINISHED - ${ failedTasks . length } FAILED] `
: "[ALL BACKGROUND TASKS COMPLETE]"
let body = ""
if ( succeededText ) {
body += ` **Completed:** \ n ${ succeededText } \ n `
}
if ( failedText ) {
body += ` \ n**Failed:** \ n ${ failedText } \ n `
}
if ( ! body ) {
body = ` - \` ${ task . id } \` : ${ task . description } [ ${ task . status . toUpperCase ( ) } ] ${ task . error ? ` - ${ task . error } ` : "" } \ n `
}
2026-02-08 16:20:52 +09:00
return ` <system-reminder>
2026-03-27 15:48:07 +09:00
${ header }
2026-02-08 16:20:52 +09:00
2026-03-27 15:48:07 +09:00
${ body . trim ( ) }
2026-02-08 16:20:52 +09:00
2026-03-27 15:48:07 +09:00
Use \` background_output(task_id="<id>") \` to retrieve each result. ${ hasFailures ? ` \ n \ n**ACTION REQUIRED:** ${ failedTasks . length } task(s) failed. Check errors above and decide whether to retry or proceed. ` : "" }
2026-02-08 16:20:52 +09:00
</system-reminder> `
}
const agentInfo = task . category ? ` ${ task . agent } ( ${ task . category } ) ` : task . agent
2026-03-27 15:48:07 +09:00
const isFailure = statusText !== "COMPLETED"
2026-02-08 16:20:52 +09:00
return ` <system-reminder>
[BACKGROUND TASK ${ statusText } ]
**ID:** \` ${ task . id } \`
**Description:** ${ task . description }
**Agent:** ${ agentInfo }
**Duration:** ${ duration } ${ errorInfo }
** ${ remainingCount } task ${ remainingCount === 1 ? "" : "s" } still in progress.** You WILL be notified when ALL complete.
2026-03-27 15:48:07 +09:00
${ isFailure ? "**ACTION REQUIRED:** This task failed. Check the error and decide whether to retry, cancel remaining tasks, or continue." : "Do NOT poll - continue productive work." }
2026-02-08 16:20:52 +09:00
Use \` background_output(task_id=" ${ task . id } ") \` to retrieve this result when ready.
</system-reminder> `
}