64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import {
|
|
handleAgentEnd,
|
|
handleAgentStart,
|
|
handleAutoCompactionEnd,
|
|
handleAutoCompactionStart,
|
|
} from "./pi-embedded-subscribe.handlers.lifecycle.js";
|
|
import {
|
|
handleMessageEnd,
|
|
handleMessageStart,
|
|
handleMessageUpdate,
|
|
} from "./pi-embedded-subscribe.handlers.messages.js";
|
|
import {
|
|
handleToolExecutionEnd,
|
|
handleToolExecutionStart,
|
|
handleToolExecutionUpdate,
|
|
} from "./pi-embedded-subscribe.handlers.tools.js";
|
|
import type {
|
|
EmbeddedPiSubscribeContext,
|
|
EmbeddedPiSubscribeEvent,
|
|
} from "./pi-embedded-subscribe.handlers.types.js";
|
|
|
|
export function createEmbeddedPiSessionEventHandler(ctx: EmbeddedPiSubscribeContext) {
|
|
return (evt: EmbeddedPiSubscribeEvent) => {
|
|
switch (evt.type) {
|
|
case "message_start":
|
|
handleMessageStart(ctx, evt as never);
|
|
return;
|
|
case "message_update":
|
|
handleMessageUpdate(ctx, evt as never);
|
|
return;
|
|
case "message_end":
|
|
handleMessageEnd(ctx, evt as never);
|
|
return;
|
|
case "tool_execution_start":
|
|
// Async handler - best-effort typing indicator, avoids blocking tool summaries.
|
|
// Catch rejections to avoid unhandled promise rejection crashes.
|
|
handleToolExecutionStart(ctx, evt as never).catch((err) => {
|
|
ctx.log.debug(`tool_execution_start handler failed: ${String(err)}`);
|
|
});
|
|
return;
|
|
case "tool_execution_update":
|
|
handleToolExecutionUpdate(ctx, evt as never);
|
|
return;
|
|
case "tool_execution_end":
|
|
handleToolExecutionEnd(ctx, evt as never);
|
|
return;
|
|
case "agent_start":
|
|
handleAgentStart(ctx);
|
|
return;
|
|
case "auto_compaction_start":
|
|
handleAutoCompactionStart(ctx);
|
|
return;
|
|
case "auto_compaction_end":
|
|
handleAutoCompactionEnd(ctx, evt as never);
|
|
return;
|
|
case "agent_end":
|
|
handleAgentEnd(ctx);
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
};
|
|
}
|