feat(hooks): add cleanup params and integrate hook-run-registry into dispatchAgentHook

This commit is contained in:
Trevin Chow 2026-01-29 09:19:18 -08:00 committed by Trevin Chow
parent d60f9b920f
commit 8984bc4779

View File

@ -9,6 +9,7 @@ import { requestHeartbeatNow } from "../../infra/heartbeat-wake.js";
import { enqueueSystemEvent } from "../../infra/system-events.js";
import type { createSubsystemLogger } from "../../logging/subsystem.js";
import type { HookMessageChannel, HooksConfigResolved } from "../hooks.js";
import { markHookRunComplete, registerHookRun } from "../hook-run-registry.js";
import { createHooksRequestHandler } from "../server-http.js";
type SubsystemLogger = ReturnType<typeof createSubsystemLogger>;
@ -42,6 +43,8 @@ export function createGatewayHooksRequestHandler(params: {
thinking?: string;
timeoutSeconds?: number;
allowUnsafeExternalContent?: boolean;
cleanup?: "delete" | "keep";
cleanupDelayMinutes?: number;
}) => {
const sessionKey = value.sessionKey.trim() ? value.sessionKey.trim() : `hook:${randomUUID()}`;
const mainSessionKey = resolveMainSessionKeyFromConfig();
@ -71,6 +74,13 @@ export function createGatewayHooksRequestHandler(params: {
};
const runId = randomUUID();
registerHookRun({
runId,
sessionKey,
jobName: value.name,
cleanup: value.cleanup,
cleanupDelayMinutes: value.cleanupDelayMinutes,
});
void (async () => {
try {
const cfg = loadConfig();
@ -88,10 +98,12 @@ export function createGatewayHooksRequestHandler(params: {
enqueueSystemEvent(`${prefix}: ${summary}`.trim(), {
sessionKey: mainSessionKey,
});
markHookRunComplete(runId);
if (value.wakeMode === "now") {
requestHeartbeatNow({ reason: `hook:${jobId}` });
}
} catch (err) {
markHookRunComplete(runId);
logHooks.warn(`hook agent failed: ${String(err)}`);
enqueueSystemEvent(`Hook ${value.name} (error): ${String(err)}`, {
sessionKey: mainSessionKey,