






















@@ -63,6 +63,23 @@ async function waitForAssertion(
6363}
6464}
656566+function requireRecord(value: unknown, label: string): Record<string, unknown> {
67+if (!value || typeof value !== "object" || Array.isArray(value)) {
68+throw new Error(`expected ${label}`);
69+}
70+return value as Record<string, unknown>;
71+}
72+73+function expectRecordFields(record: Record<string, unknown>, expected: Record<string, unknown>) {
74+for (const [key, value] of Object.entries(expected)) {
75+expect(record[key]).toBe(value);
76+}
77+}
78+79+function expectSystemEventContaining(sessionKey: string, text: string) {
80+expect(peekSystemEvents(sessionKey).some((event) => event.includes(text))).toBe(true);
81+}
82+6683vi.mock("./context-engine-capabilities.js", () => ({
6784resolveContextEngineCapabilities: () => ({ llm: undefined }),
6885}));
@@ -307,21 +324,16 @@ describe("runContextEngineMaintenance", () => {
307324bytesFreed: 0,
308325rewrittenEntries: 0,
309326});
310-expect(maintain).toHaveBeenCalledWith(
311-expect.objectContaining({
312-sessionId: "session-1",
313-sessionKey: "agent:main:session-1",
314-sessionFile: "/tmp/session.jsonl",
315-runtimeContext: expect.objectContaining({
316-workspaceDir: "/tmp/workspace",
317-}),
318-}),
319-);
320-const runtimeContext = (
321-maintain.mock.calls[0]?.[0] as
322-| { runtimeContext?: { rewriteTranscriptEntries?: (request: unknown) => Promise<unknown> } }
323-| undefined
324-)?.runtimeContext as
327+const maintainParams = requireRecord(maintain.mock.calls[0]?.[0], "maintain params");
328+expectRecordFields(maintainParams, {
329+sessionId: "session-1",
330+sessionKey: "agent:main:session-1",
331+sessionFile: "/tmp/session.jsonl",
332+});
333+expect(
334+requireRecord(maintainParams.runtimeContext, "maintain runtime context").workspaceDir,
335+).toBe("/tmp/workspace");
336+const runtimeContext = maintainParams.runtimeContext as
325337| { rewriteTranscriptEntries?: (request: unknown) => Promise<unknown> }
326338| undefined;
327339if (!runtimeContext?.rewriteTranscriptEntries) {
@@ -479,7 +491,8 @@ describe("runContextEngineMaintenance", () => {
479491(task) => task.taskKind === TURN_MAINTENANCE_TASK_KIND,
480492);
481493expect(queuedTasks).toHaveLength(1);
482-expect(queuedTasks[0]).toMatchObject({
494+const queuedTask = requireRecord(queuedTasks[0], "queued task");
495+expectRecordFields(queuedTask, {
483496runtime: "acp",
484497scopeKind: "session",
485498ownerKey: sessionKey,
@@ -494,16 +507,17 @@ describe("runContextEngineMaintenance", () => {
494507}
495508releaseForeground();
496509await waitForAssertion(() => expect(maintain).toHaveBeenCalledTimes(1));
497-expect(maintain.mock.calls[0]?.[0]).toMatchObject({
510+const maintainParams = requireRecord(maintain.mock.calls[0]?.[0], "maintain params");
511+expectRecordFields(maintainParams, {
498512sessionId: "session-1",
499513 sessionKey,
500514sessionFile: "/tmp/session.jsonl",
501- runtimeContext: expect.objectContaining({
502- workspaceDir: "/tmp/workspace",
503- allowDeferredCompactionExecution: true,
504- tokenBudget: 2048,
505- currentTokenCount: 1536,
506-}),
515+});
516+expectRecordFields(requireRecord(maintainParams.runtimeContext, "runtime context"), {
517+workspaceDir: "/tmp/workspace",
518+allowDeferredCompactionExecution: true,
519+tokenBudget: 2048,
520+currentTokenCount: 1536,
507521});
508522expect(rewriteTranscriptEntriesInSessionFileMock).toHaveBeenCalledWith({
509523sessionFile: "/tmp/session.jsonl",
@@ -525,10 +539,11 @@ describe("runContextEngineMaintenance", () => {
525539});
526540527541const completedTask = getTaskById(queuedTasks[0].taskId);
528-expect(completedTask).toMatchObject({
529-status: "succeeded",
530-progressSummary: expect.stringContaining("Deferred maintenance completed"),
531-});
542+const completedTaskRecord = requireRecord(completedTask, "completed task");
543+expect(completedTaskRecord.status).toBe("succeeded");
544+expect(String(completedTaskRecord.progressSummary)).toContain(
545+"Deferred maintenance completed",
546+);
532547533548await foregroundTurn;
534549} finally {
@@ -748,7 +763,8 @@ describe("runContextEngineMaintenance", () => {
748763(task) => task.taskKind === TURN_MAINTENANCE_TASK_KIND,
749764);
750765expect(tasks).toHaveLength(2);
751-expect(getTaskById(legacyTask.taskId)).toMatchObject({
766+const cancelledLegacyTask = requireRecord(getTaskById(legacyTask.taskId), "legacy task");
767+expectRecordFields(cancelledLegacyTask, {
752768status: "cancelled",
753769notifyPolicy: "silent",
754770});
@@ -807,10 +823,9 @@ describe("runContextEngineMaintenance", () => {
807823(task) => task.taskKind === TURN_MAINTENANCE_TASK_KIND,
808824);
809825expect(tasks).toHaveLength(1);
810-expect(tasks[0]).toMatchObject({
811-status: "cancelled",
812-terminalSummary: expect.stringContaining("gateway draining"),
813-});
826+const task = requireRecord(tasks[0], "cancelled task");
827+expect(task.status).toBe("cancelled");
828+expect(String(task.terminalSummary)).toContain("gateway draining");
814829expect(maintain).not.toHaveBeenCalled();
815830} finally {
816831enqueueSpy.mockRestore();
@@ -1103,10 +1118,9 @@ describe("runContextEngineMaintenance", () => {
1103111811041119await vi.advanceTimersByTimeAsync(11_000);
11051120await waitForAssertion(() =>
1106-expect(peekSystemEvents(sessionKey)).toEqual(
1107-expect.arrayContaining([
1108-expect.stringContaining("Background task update: Context engine turn maintenance."),
1109-]),
1121+expectSystemEventContaining(
1122+sessionKey,
1123+"Background task update: Context engine turn maintenance.",
11101124),
11111125);
11121126@@ -1115,10 +1129,9 @@ describe("runContextEngineMaintenance", () => {
11151129}
11161130releaseForeground();
11171131await waitForAssertion(() =>
1118-expect(peekSystemEvents(sessionKey)).toEqual(
1119-expect.arrayContaining([
1120-expect.stringContaining("Background task done: Context engine turn maintenance"),
1121-]),
1132+expectSystemEventContaining(
1133+sessionKey,
1134+"Background task done: Context engine turn maintenance",
11221135),
11231136);
11241137@@ -1244,10 +1257,9 @@ describe("runContextEngineMaintenance", () => {
12441257reason: "turn",
12451258});
12461259await waitForAssertion(() =>
1247-expect(peekSystemEvents(sessionKey)).toEqual(
1248-expect.arrayContaining([
1249-expect.stringContaining("Background task failed: Context engine turn maintenance"),
1250-]),
1260+expectSystemEventContaining(
1261+sessionKey,
1262+"Background task failed: Context engine turn maintenance",
12511263),
12521264);
12531265} finally {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。