Merge pull request #3711 from mrosnerr/fix/notification-scheduler-platform
fix(notification): session-idle notifications never fire due to stale platform
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
import type { PluginInput } from "@opencode-ai/plugin"
|
import type { PluginInput } from "@opencode-ai/plugin"
|
||||||
import type { Platform } from "./session-notification-sender"
|
|
||||||
|
|
||||||
type SessionNotificationConfig = {
|
type SessionNotificationConfig = {
|
||||||
playSound: boolean
|
playSound: boolean
|
||||||
@@ -13,11 +12,10 @@ type SessionNotificationConfig = {
|
|||||||
|
|
||||||
export function createIdleNotificationScheduler(options: {
|
export function createIdleNotificationScheduler(options: {
|
||||||
ctx: PluginInput
|
ctx: PluginInput
|
||||||
platform: Platform
|
|
||||||
config: SessionNotificationConfig
|
config: SessionNotificationConfig
|
||||||
hasIncompleteTodos: (ctx: PluginInput, sessionID: string) => Promise<boolean>
|
hasIncompleteTodos: (ctx: PluginInput, sessionID: string) => Promise<boolean>
|
||||||
send: (ctx: PluginInput, platform: Platform, sessionID: string) => Promise<void>
|
send: (ctx: PluginInput, sessionID: string) => Promise<void>
|
||||||
playSound: (ctx: PluginInput, platform: Platform, soundPath: string) => Promise<void>
|
playSound: (ctx: PluginInput, soundPath: string) => Promise<void>
|
||||||
}) {
|
}) {
|
||||||
const notifiedSessions = new Set<string>()
|
const notifiedSessions = new Set<string>()
|
||||||
const pendingTimers = new Map<string, ReturnType<typeof setTimeout>>()
|
const pendingTimers = new Map<string, ReturnType<typeof setTimeout>>()
|
||||||
@@ -136,10 +134,10 @@ export function createIdleNotificationScheduler(options: {
|
|||||||
|
|
||||||
notifiedSessions.add(sessionID)
|
notifiedSessions.add(sessionID)
|
||||||
|
|
||||||
await options.send(options.ctx, options.platform, sessionID)
|
await options.send(options.ctx, sessionID)
|
||||||
|
|
||||||
if (options.config.playSound && options.config.soundPath) {
|
if (options.config.playSound && options.config.soundPath) {
|
||||||
await options.playSound(options.ctx, options.platform, options.config.soundPath)
|
await options.playSound(options.ctx, options.config.soundPath)
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
executingNotifications.delete(sessionID)
|
executingNotifications.delete(sessionID)
|
||||||
|
|||||||
@@ -47,10 +47,10 @@ export function createSessionNotification(ctx: PluginInput, config: SessionNotif
|
|||||||
|
|
||||||
const scheduler = createIdleNotificationScheduler({
|
const scheduler = createIdleNotificationScheduler({
|
||||||
ctx,
|
ctx,
|
||||||
platform: "unsupported",
|
|
||||||
config: mergedConfig,
|
config: mergedConfig,
|
||||||
hasIncompleteTodos,
|
hasIncompleteTodos,
|
||||||
send: async (hookCtx, platform, sessionID) => {
|
send: async (hookCtx, sessionID) => {
|
||||||
|
const platform = ensureNotificationPlatform()
|
||||||
if (typeof hookCtx.client.session.get !== "function" && typeof hookCtx.client.session.messages !== "function") {
|
if (typeof hookCtx.client.session.get !== "function" && typeof hookCtx.client.session.messages !== "function") {
|
||||||
await sessionNotificationSender.sendSessionNotification(hookCtx, platform, mergedConfig.title, mergedConfig.message)
|
await sessionNotificationSender.sendSessionNotification(hookCtx, platform, mergedConfig.title, mergedConfig.message)
|
||||||
return
|
return
|
||||||
@@ -64,7 +64,10 @@ export function createSessionNotification(ctx: PluginInput, config: SessionNotif
|
|||||||
|
|
||||||
await sessionNotificationSender.sendSessionNotification(hookCtx, platform, content.title, content.message)
|
await sessionNotificationSender.sendSessionNotification(hookCtx, platform, content.title, content.message)
|
||||||
},
|
},
|
||||||
playSound: sessionNotificationSender.playSessionNotificationSound,
|
playSound: async (hookCtx, soundPath) => {
|
||||||
|
const platform = ensureNotificationPlatform()
|
||||||
|
await sessionNotificationSender.playSessionNotificationSound(hookCtx, platform, soundPath)
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const QUESTION_TOOLS = new Set(["question", "ask_user_question", "askuserquestion"])
|
const QUESTION_TOOLS = new Set(["question", "ask_user_question", "askuserquestion"])
|
||||||
|
|||||||
Reference in New Issue
Block a user