



















@@ -12,6 +12,11 @@ const hookRunnerMocks = vi.hoisted(() => ({
1212runSessionStart: vi.fn<HookRunner["runSessionStart"]>(),
1313runSessionEnd: vi.fn<HookRunner["runSessionEnd"]>(),
1414}));
15+const sessionCleanupMocks = vi.hoisted(() => ({
16+closeTrackedBrowserTabsForSessions: vi.fn(async () => 0),
17+resetRegisteredAgentHarnessSessions: vi.fn(async () => undefined),
18+retireSessionMcpRuntime: vi.fn(async () => false),
19+}));
15201621vi.mock("../../plugins/hook-runner-global.js", () => ({
1722getGlobalHookRunner: () =>
@@ -22,6 +27,39 @@ vi.mock("../../plugins/hook-runner-global.js", () => ({
2227}) as unknown as HookRunner,
2328}));
242930+vi.mock("../../agents/harness/registry.js", () => ({
31+resetRegisteredAgentHarnessSessions: sessionCleanupMocks.resetRegisteredAgentHarnessSessions,
32+}));
33+34+vi.mock("../../agents/pi-bundle-mcp-tools.js", () => ({
35+retireSessionMcpRuntime: sessionCleanupMocks.retireSessionMcpRuntime,
36+}));
37+38+vi.mock("../../plugin-sdk/browser-maintenance.js", () => ({
39+closeTrackedBrowserTabsForSessions: sessionCleanupMocks.closeTrackedBrowserTabsForSessions,
40+}));
41+42+vi.mock("../../agents/session-write-lock.js", async () => {
43+const actual = await vi.importActual<typeof import("../../agents/session-write-lock.js")>(
44+"../../agents/session-write-lock.js",
45+);
46+return {
47+ ...actual,
48+acquireSessionWriteLock: vi.fn(async () => ({ release: async () => {} })),
49+resolveSessionLockMaxHoldFromTimeout: vi.fn(
50+({
51+ timeoutMs,
52+ graceMs = 2 * 60 * 1000,
53+ minMs = 5 * 60 * 1000,
54+}: {
55+timeoutMs: number;
56+graceMs?: number;
57+minMs?: number;
58+}) => Math.max(minMs, timeoutMs + graceMs),
59+),
60+};
61+});
62+2563async function createStorePath(prefix: string): Promise<string> {
2664const root = await fs.mkdtemp(path.join(os.tmpdir(), `${prefix}-`));
2765return path.join(root, "sessions.json");
@@ -102,6 +140,9 @@ describe("session hook context wiring", () => {
102140hookRunnerMocks.hasHooks.mockReset();
103141hookRunnerMocks.runSessionStart.mockReset();
104142hookRunnerMocks.runSessionEnd.mockReset();
143+sessionCleanupMocks.closeTrackedBrowserTabsForSessions.mockClear();
144+sessionCleanupMocks.resetRegisteredAgentHarnessSessions.mockClear();
145+sessionCleanupMocks.retireSessionMcpRuntime.mockClear();
105146hookRunnerMocks.runSessionStart.mockResolvedValue(undefined);
106147hookRunnerMocks.runSessionEnd.mockResolvedValue(undefined);
107148hookRunnerMocks.hasHooks.mockImplementation(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。