fix(tools): update background-task and session-manager

Minor improvements to background task handling and session manager utilities.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
justsisyphus 2026-01-22 22:48:21 +09:00
parent 2690301833
commit dda502a697
2 changed files with 12 additions and 12 deletions

View File

@ -60,7 +60,7 @@ export function createBackgroundTask(manager: BackgroundManager): ToolDefinition
const ctx = toolContext as ToolContextWithMetadata const ctx = toolContext as ToolContextWithMetadata
if (!args.agent || args.agent.trim() === "") { if (!args.agent || args.agent.trim() === "") {
return ` Agent parameter is required. Please specify which agent to use (e.g., "explore", "librarian", "build", etc.)` return `[ERROR] Agent parameter is required. Please specify which agent to use (e.g., "explore", "librarian", "build", etc.)`
} }
try { try {
@ -112,7 +112,7 @@ Use \`background_output\` tool with task_id="${task.id}" to check progress:
- block=true: Wait for completion (rarely needed since system notifies)` - block=true: Wait for completion (rarely needed since system notifies)`
} catch (error) { } catch (error) {
const message = error instanceof Error ? error.message : String(error) const message = error instanceof Error ? error.message : String(error)
return ` Failed to launch background task: ${message}` return `[ERROR] Failed to launch background task: ${message}`
} }
}, },
}) })
@ -395,7 +395,7 @@ export function createBackgroundCancel(manager: BackgroundManager, client: Openc
const cancelAll = args.all === true const cancelAll = args.all === true
if (!cancelAll && !args.taskId) { if (!cancelAll && !args.taskId) {
return ` Invalid arguments: Either provide a taskId or set all=true to cancel all running tasks.` return `[ERROR] Invalid arguments: Either provide a taskId or set all=true to cancel all running tasks.`
} }
if (cancelAll) { if (cancelAll) {
@ -403,7 +403,7 @@ export function createBackgroundCancel(manager: BackgroundManager, client: Openc
const cancellableTasks = tasks.filter(t => t.status === "running" || t.status === "pending") const cancellableTasks = tasks.filter(t => t.status === "running" || t.status === "pending")
if (cancellableTasks.length === 0) { if (cancellableTasks.length === 0) {
return `No running or pending background tasks to cancel.` return `No running or pending background tasks to cancel.`
} }
const results: string[] = [] const results: string[] = []
@ -424,18 +424,18 @@ export function createBackgroundCancel(manager: BackgroundManager, client: Openc
} }
} }
return `Cancelled ${cancellableTasks.length} background task(s): return `Cancelled ${cancellableTasks.length} background task(s):
${results.join("\n")}` ${results.join("\n")}`
} }
const task = manager.getTask(args.taskId!) const task = manager.getTask(args.taskId!)
if (!task) { if (!task) {
return ` Task not found: ${args.taskId}` return `[ERROR] Task not found: ${args.taskId}`
} }
if (task.status !== "running" && task.status !== "pending") { if (task.status !== "running" && task.status !== "pending") {
return ` Cannot cancel task: current status is "${task.status}". return `[ERROR] Cannot cancel task: current status is "${task.status}".
Only running or pending tasks can be cancelled.` Only running or pending tasks can be cancelled.`
} }
@ -443,10 +443,10 @@ Only running or pending tasks can be cancelled.`
// Pending task: use manager method (no session to abort, no slot to release) // Pending task: use manager method (no session to abort, no slot to release)
const cancelled = manager.cancelPendingTask(task.id) const cancelled = manager.cancelPendingTask(task.id)
if (!cancelled) { if (!cancelled) {
return ` Failed to cancel pending task: ${task.id}` return `[ERROR] Failed to cancel pending task: ${task.id}`
} }
return `Pending task cancelled successfully return `Pending task cancelled successfully
Task ID: ${task.id} Task ID: ${task.id}
Description: ${task.description} Description: ${task.description}
@ -465,14 +465,14 @@ Status: ${task.status}`
task.status = "cancelled" task.status = "cancelled"
task.completedAt = new Date() task.completedAt = new Date()
return `Task cancelled successfully return `Task cancelled successfully
Task ID: ${task.id} Task ID: ${task.id}
Description: ${task.description} Description: ${task.description}
Session ID: ${task.sessionID} Session ID: ${task.sessionID}
Status: ${task.status}` Status: ${task.status}`
} catch (error) { } catch (error) {
return ` Error cancelling task: ${error instanceof Error ? error.message : String(error)}` return `[ERROR] Error cancelling task: ${error instanceof Error ? error.message : String(error)}`
} }
}, },
}) })

View File

@ -75,7 +75,7 @@ export function formatSessionMessages(
if (includeTodos && todos && todos.length > 0) { if (includeTodos && todos && todos.length > 0) {
lines.push("\n\n=== Todos ===") lines.push("\n\n=== Todos ===")
for (const todo of todos) { for (const todo of todos) {
const status = todo.status === "completed" ? "" : todo.status === "in_progress" ? "→" : "○" const status = todo.status === "completed" ? "[x]" : todo.status === "in_progress" ? "[-]" : "[ ]"
lines.push(`${status} [${todo.status}] ${todo.content}`) lines.push(`${status} [${todo.status}] ${todo.content}`)
} }
} }