da251c9b30
Rename BackgroundTask and attempt ID fields to camelCase across background-agent consumers while moving BackgroundManager construction to a single config object. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import type { BackgroundTask } from "../../features/background-agent"
|
|
import { formatDuration } from "./time-format"
|
|
import { truncateText } from "./truncate-text"
|
|
|
|
export function formatTaskStatus(task: BackgroundTask): string {
|
|
let duration: string
|
|
if (task.status === "pending" && task.queuedAt) {
|
|
duration = formatDuration(task.queuedAt, undefined)
|
|
} else if (task.startedAt) {
|
|
duration = formatDuration(task.startedAt, task.completedAt)
|
|
} else {
|
|
duration = "N/A"
|
|
}
|
|
|
|
const promptPreview = truncateText(task.prompt, 500)
|
|
|
|
let progressSection = ""
|
|
if (task.progress?.lastTool) {
|
|
progressSection = `\n| Last tool | ${task.progress.lastTool} |`
|
|
}
|
|
|
|
let lastMessageSection = ""
|
|
if (task.progress?.lastMessage) {
|
|
const truncated = truncateText(task.progress.lastMessage, 500)
|
|
const messageTime = task.progress.lastMessageAt ? task.progress.lastMessageAt.toISOString() : "N/A"
|
|
lastMessageSection = `
|
|
|
|
## Last Message (${messageTime})
|
|
|
|
\`\`\`
|
|
${truncated}
|
|
\`\`\``
|
|
}
|
|
|
|
let statusNote = ""
|
|
if (task.status === "pending") {
|
|
statusNote = `
|
|
|
|
> **Queued**: Task is waiting for a concurrency slot to become available.`
|
|
} else if (task.status === "running") {
|
|
statusNote = `
|
|
|
|
> **Note**: No need to wait explicitly - the system will notify you when this task completes.`
|
|
} else if (task.status === "error") {
|
|
statusNote = `
|
|
|
|
> **Failed**: The task encountered an error. Check the last message for details.`
|
|
} else if (task.status === "interrupt") {
|
|
statusNote = `
|
|
|
|
> **Interrupted**: The task was interrupted by a prompt error. The session may contain partial results.`
|
|
}
|
|
|
|
const durationLabel = task.status === "pending" ? "Queued for" : "Duration"
|
|
|
|
return `# Task Status
|
|
|
|
| Field | Value |
|
|
|-------|-------|
|
|
| Task ID | \`${task.id}\` |
|
|
| Description | ${task.description} |
|
|
| Agent | ${task.agent} |
|
|
| Status | **${task.status}** |
|
|
| ${durationLabel} | ${duration} |
|
|
| Session ID | \`${task.sessionId}\` |${progressSection}
|
|
${statusNote}
|
|
## Original Prompt
|
|
|
|
\`\`\`
|
|
${promptPreview}
|
|
\`\`\`${lastMessageSection}`
|
|
}
|