refactor(background-notification): remove chat.message handler

- Remove unused chat message notification handler
- Remove formatDuration and formatNotifications helpers
- Simplify to event-only handling
- Remove chat.message hook call from main plugin

Background task notifications now rely on event-based system only.

🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
This commit is contained in:
YeonGyu-Kim
2025-12-12 20:36:39 +09:00
parent efe37d4cfc
commit 5ba1d9f3c3
3 changed files with 2 additions and 83 deletions

1
.gitignore vendored
View File

@@ -27,3 +27,4 @@ yarn.lock
.env.local .env.local
test-injection/ test-injection/
notepad.md notepad.md
oauth-success.html

View File

@@ -1,4 +1,4 @@
import type { BackgroundManager, BackgroundTask } from "../../features/background-agent" import type { BackgroundManager } from "../../features/background-agent"
interface Event { interface Event {
type: string type: string
@@ -9,94 +9,13 @@ interface EventInput {
event: Event event: Event
} }
interface ChatMessageInput {
sessionID: string
[key: string]: unknown
}
interface ChatMessageOutput {
parts: Array<{ type: string; text?: string; [key: string]: unknown }>
[key: string]: unknown
}
function formatDuration(start: Date, end?: Date): string {
const duration = (end ?? new Date()).getTime() - start.getTime()
const seconds = Math.floor(duration / 1000)
const minutes = Math.floor(seconds / 60)
const hours = Math.floor(minutes / 60)
if (hours > 0) {
return `${hours}h ${minutes % 60}m ${seconds % 60}s`
} else if (minutes > 0) {
return `${minutes}m ${seconds % 60}s`
} else {
return `${seconds}s`
}
}
function formatNotifications(tasks: BackgroundTask[]): string {
if (tasks.length === 0) {
return ""
}
if (tasks.length > 1) {
let message = `**Background Tasks Complete (${tasks.length})**\n\n`
for (const task of tasks) {
const duration = formatDuration(task.startedAt, task.completedAt)
const toolCalls = task.progress?.toolCalls ?? 0
message += `• **${task.id}** - ${task.description}\n`
message += ` Duration: ${duration} | Tool calls: ${toolCalls}\n\n`
}
message += `Use \`background_output\` tool to retrieve results.`
return message
}
const task = tasks[0]
const duration = formatDuration(task.startedAt, task.completedAt)
const toolCalls = task.progress?.toolCalls ?? 0
return `**Background Task Complete**
**Task ID:** ${task.id}
**Description:** ${task.description}
**Duration:** ${duration}
**Tool calls:** ${toolCalls}
Use \`background_output\` tool with task_id="${task.id}" to retrieve the full result.`
}
export function createBackgroundNotificationHook(manager: BackgroundManager) { export function createBackgroundNotificationHook(manager: BackgroundManager) {
const eventHandler = async ({ event }: EventInput) => { const eventHandler = async ({ event }: EventInput) => {
manager.handleEvent(event) manager.handleEvent(event)
} }
const chatMessageHandler = async (
input: ChatMessageInput,
output: ChatMessageOutput
) => {
const notifications = manager.getPendingNotifications(input.sessionID)
if (notifications.length === 0) {
return
}
const message = formatNotifications(notifications)
output.parts.unshift({
type: "text",
text: message,
})
manager.clearNotifications(input.sessionID)
}
return { return {
event: eventHandler, event: eventHandler,
"chat.message": chatMessageHandler,
} }
} }

View File

@@ -180,7 +180,6 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
"chat.message": async (input, output) => { "chat.message": async (input, output) => {
await claudeCodeHooks["chat.message"]?.(input, output); await claudeCodeHooks["chat.message"]?.(input, output);
await backgroundNotificationHook["chat.message"](input, output);
}, },
config: async (config) => { config: async (config) => {