




















@@ -145,6 +145,24 @@ function expectFields(value: unknown, expected: Record<string, unknown>): void {
145145}
146146}
147147148+function requireHookCall(
149+mock: ReturnType<typeof vi.fn>,
150+label: string,
151+): readonly [Record<string, unknown>, Record<string, unknown> | undefined] {
152+const call = mock.mock.calls.at(0);
153+if (!call) {
154+throw new Error(`expected ${label} hook call`);
155+}
156+const [event, context] = call;
157+if (!event || typeof event !== "object") {
158+throw new Error(`expected ${label} hook event`);
159+}
160+if (context !== undefined && (!context || typeof context !== "object")) {
161+throw new Error(`expected ${label} hook context`);
162+}
163+return [event as Record<string, unknown>, context as Record<string, unknown> | undefined];
164+}
165+148166describe("session hook context wiring", () => {
149167beforeEach(() => {
150168hookRunnerMocks.hasHooks.mockReset();
@@ -177,7 +195,7 @@ describe("session hook context wiring", () => {
177195});
178196179197expect(hookRunnerMocks.runSessionStart).toHaveBeenCalledTimes(1);
180-const [event, context] = hookRunnerMocks.runSessionStart.mock.calls[0] ?? [];
198+const [event, context] = requireHookCall(hookRunnerMocks.runSessionStart, "session_start");
181199expectFields(event, { sessionKey });
182200expectFields(context, { sessionKey, agentId: "main", sessionId: event?.sessionId });
183201});
@@ -199,7 +217,7 @@ describe("session hook context wiring", () => {
199217200218expect(hookRunnerMocks.runSessionEnd).toHaveBeenCalledTimes(1);
201219expect(hookRunnerMocks.runSessionStart).toHaveBeenCalledTimes(1);
202-const [event, context] = hookRunnerMocks.runSessionEnd.mock.calls[0] ?? [];
220+const [event, context] = requireHookCall(hookRunnerMocks.runSessionEnd, "session_end");
203221expectFields(event, {
204222 sessionKey,
205223reason: "new",
@@ -208,7 +226,10 @@ describe("session hook context wiring", () => {
208226expectFields(context, { sessionKey, agentId: "main", sessionId: event?.sessionId });
209227expect(event?.sessionFile).toContain(".jsonl.reset.");
210228211-const [startEvent, startContext] = hookRunnerMocks.runSessionStart.mock.calls[0] ?? [];
229+const [startEvent, startContext] = requireHookCall(
230+hookRunnerMocks.runSessionStart,
231+"session_start",
232+);
212233expectFields(startEvent, { resumedFrom: "old-session" });
213234expect(event?.nextSessionId).toBe(startEvent?.sessionId);
214235expectFields(startContext, { sessionId: startEvent?.sessionId });
@@ -230,7 +251,7 @@ describe("session hook context wiring", () => {
230251commandAuthorized: true,
231252});
232253233-const [event] = hookRunnerMocks.runSessionEnd.mock.calls[0] ?? [];
254+const [event] = requireHookCall(hookRunnerMocks.runSessionEnd, "session_end");
234255expectFields(event, { reason: "reset" });
235256});
236257@@ -255,7 +276,7 @@ describe("session hook context wiring", () => {
255276commandAuthorized: true,
256277});
257278258-const [event] = hookRunnerMocks.runSessionEnd.mock.calls[0] ?? [];
279+const [event] = requireHookCall(hookRunnerMocks.runSessionEnd, "session_end");
259280expectFields(event, { reason: "new" });
260281});
261282@@ -272,8 +293,8 @@ describe("session hook context wiring", () => {
272293updatedAt: new Date(2026, 0, 18, 3, 0, 0).getTime(),
273294});
274295275-const [event] = hookRunnerMocks.runSessionEnd.mock.calls[0] ?? [];
276-const [startEvent] = hookRunnerMocks.runSessionStart.mock.calls[0] ?? [];
296+const [event] = requireHookCall(hookRunnerMocks.runSessionEnd, "session_end");
297+const [startEvent] = requireHookCall(hookRunnerMocks.runSessionStart, "session_start");
277298expectFields(event, {
278299reason: "daily",
279300transcriptArchived: true,
@@ -302,7 +323,7 @@ describe("session hook context wiring", () => {
302323},
303324});
304325305-const [event] = hookRunnerMocks.runSessionEnd.mock.calls[0] ?? [];
326+const [event] = requireHookCall(hookRunnerMocks.runSessionEnd, "session_end");
306327expectFields(event, { reason: "idle" });
307328} finally {
308329vi.useRealTimers();
@@ -327,7 +348,7 @@ describe("session hook context wiring", () => {
327348},
328349});
329350330-const [event] = hookRunnerMocks.runSessionEnd.mock.calls[0] ?? [];
351+const [event] = requireHookCall(hookRunnerMocks.runSessionEnd, "session_end");
331352expectFields(event, { reason: "idle" });
332353} finally {
333354vi.useRealTimers();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。