78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import type { AgentEvent } from "@mariozechner/pi-agent-core";
|
|
import { emitAgentEvent } from "../infra/agent-events.js";
|
|
import { getGlobalHookRunner } from "../plugins/hook-runner-global.js";
|
|
import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js";
|
|
|
|
export function handleAutoCompactionStart(ctx: EmbeddedPiSubscribeContext) {
|
|
ctx.state.compactionInFlight = true;
|
|
ctx.incrementCompactionCount();
|
|
ctx.ensureCompactionPromise();
|
|
ctx.log.debug(`embedded run compaction start: runId=${ctx.params.runId}`);
|
|
emitAgentEvent({
|
|
runId: ctx.params.runId,
|
|
stream: "compaction",
|
|
data: { phase: "start" },
|
|
});
|
|
void ctx.params.onAgentEvent?.({
|
|
stream: "compaction",
|
|
data: { phase: "start" },
|
|
});
|
|
|
|
// Run before_compaction plugin hook (fire-and-forget)
|
|
const hookRunner = getGlobalHookRunner();
|
|
if (hookRunner?.hasHooks("before_compaction")) {
|
|
void hookRunner
|
|
.runBeforeCompaction(
|
|
{
|
|
messageCount: ctx.params.session.messages?.length ?? 0,
|
|
},
|
|
{},
|
|
)
|
|
.catch((err) => {
|
|
ctx.log.warn(`before_compaction hook failed: ${String(err)}`);
|
|
});
|
|
}
|
|
}
|
|
|
|
export function handleAutoCompactionEnd(
|
|
ctx: EmbeddedPiSubscribeContext,
|
|
evt: AgentEvent & { willRetry?: unknown },
|
|
) {
|
|
ctx.state.compactionInFlight = false;
|
|
const willRetry = Boolean(evt.willRetry);
|
|
if (willRetry) {
|
|
ctx.noteCompactionRetry();
|
|
ctx.resetForCompactionRetry();
|
|
ctx.log.debug(`embedded run compaction retry: runId=${ctx.params.runId}`);
|
|
} else {
|
|
ctx.maybeResolveCompactionWait();
|
|
}
|
|
emitAgentEvent({
|
|
runId: ctx.params.runId,
|
|
stream: "compaction",
|
|
data: { phase: "end", willRetry },
|
|
});
|
|
void ctx.params.onAgentEvent?.({
|
|
stream: "compaction",
|
|
data: { phase: "end", willRetry },
|
|
});
|
|
|
|
// Run after_compaction plugin hook (fire-and-forget)
|
|
if (!willRetry) {
|
|
const hookRunnerEnd = getGlobalHookRunner();
|
|
if (hookRunnerEnd?.hasHooks("after_compaction")) {
|
|
void hookRunnerEnd
|
|
.runAfterCompaction(
|
|
{
|
|
messageCount: ctx.params.session.messages?.length ?? 0,
|
|
compactedCount: ctx.getCompactionCount(),
|
|
},
|
|
{},
|
|
)
|
|
.catch((err) => {
|
|
ctx.log.warn(`after_compaction hook failed: ${String(err)}`);
|
|
});
|
|
}
|
|
}
|
|
}
|