fix(plugin): dispatch openclaw lifecycle events from handlers

This commit is contained in:
GeonWoo Jeon (Jay)
2026-04-07 22:49:37 +09:00
parent 9491bede5b
commit 21ab1a6475
4 changed files with 283 additions and 10 deletions
+50
View File
@@ -33,6 +33,7 @@ import { clearSessionModel, getSessionModel, setSessionModel } from "../shared/s
import { clearSessionPromptParams } from "../shared/session-prompt-params-state";
import { deleteSessionTools } from "../shared/session-tools-store";
import { lspManager } from "../tools";
import { dispatchOpenClawEvent } from "../openclaw/runtime-dispatch";
import type { CreatedHooks } from "../create-hooks";
import type { Managers } from "../create-managers";
@@ -341,6 +342,17 @@ export function createEventHandler(args: {
}
recentSyntheticIdles.set(sessionID, Date.now());
await dispatchToHooks(syntheticIdle as EventInput);
if (pluginConfig.openclaw) {
await dispatchOpenClawEvent({
config: pluginConfig.openclaw,
rawEvent: "session.idle",
context: {
sessionId: sessionID,
projectPath: pluginContext.directory,
tmuxPaneId: managers.tmuxSessionManager.getTrackedPaneId?.(sessionID) ?? process.env.TMUX_PANE,
},
});
}
}
const { event } = input;
@@ -369,6 +381,18 @@ export function createEventHandler(args: {
},
);
}
if (pluginConfig.openclaw && sessionInfo?.id) {
await dispatchOpenClawEvent({
config: pluginConfig.openclaw,
rawEvent: event.type,
context: {
sessionId: sessionInfo.id,
projectPath: pluginContext.directory,
tmuxPaneId: managers.tmuxSessionManager.getTrackedPaneId?.(sessionInfo.id) ?? process.env.TMUX_PANE,
},
});
}
}
if (event.type === "session.deleted") {
@@ -392,6 +416,17 @@ export function createEventHandler(args: {
clearSessionModel(sessionInfo.id);
clearSessionPromptParams(sessionInfo.id);
syncSubagentSessions.delete(sessionInfo.id);
if (pluginConfig.openclaw) {
await dispatchOpenClawEvent({
config: pluginConfig.openclaw,
rawEvent: event.type,
context: {
sessionId: sessionInfo.id,
projectPath: pluginContext.directory,
tmuxPaneId: managers.tmuxSessionManager.getTrackedPaneId?.(sessionInfo.id) ?? process.env.TMUX_PANE,
},
});
}
if (wasSyncSubagentSession) {
subagentSessions.delete(sessionInfo.id);
}
@@ -412,6 +447,21 @@ export function createEventHandler(args: {
restoreBackgroundOutputConsumption(sessionID, messageID);
}
if (event.type === "session.idle" && pluginConfig.openclaw) {
const sessionID = props?.sessionID as string | undefined;
if (sessionID) {
await dispatchOpenClawEvent({
config: pluginConfig.openclaw,
rawEvent: event.type,
context: {
sessionId: sessionID,
projectPath: pluginContext.directory,
tmuxPaneId: managers.tmuxSessionManager.getTrackedPaneId?.(sessionID) ?? process.env.TMUX_PANE,
},
});
}
}
if (event.type === "message.updated") {
const info = props?.info as Record<string, unknown> | undefined;
const sessionID = info?.sessionID as string | undefined;