




















@@ -117,6 +117,12 @@ describe("active-memory plugin", () => {
117117| undefined;
118118return entries?.find((entry) => entry.pluginId === "active-memory")?.lines ?? [];
119119};
120+const expectLinesToContain = (lines: string[], text: string) => {
121+expect(lines).toEqual(expect.arrayContaining([expect.stringContaining(text)]));
122+};
123+const expectLinesNotToContain = (lines: string[], text: string) => {
124+expect(lines).not.toEqual(expect.arrayContaining([expect.stringContaining(text)]));
125+};
120126const writeTranscriptJsonl = async (sessionFile: string, records: unknown[], suffix = "\n") => {
121127await fs.mkdir(path.dirname(sessionFile), { recursive: true });
122128await fs.writeFile(
@@ -2122,7 +2128,7 @@ describe("active-memory plugin", () => {
21222128expect(result).toBeUndefined();
21232129const lines = getActiveMemoryLines(sessionKey);
21242130expect(lines).toEqual([expect.stringContaining("🧩 Active Memory: status=timeout")]);
2125-expect(lines.some((line) => line.includes("timeout_partial"))).toBe(false);
2131+expectLinesNotToContain(lines, "timeout_partial");
21262132});
2127213321282134it("keeps timeout status when the timeout transcript path does not exist", async () => {
@@ -2152,7 +2158,7 @@ describe("active-memory plugin", () => {
21522158expect(result).toBeUndefined();
21532159const lines = getActiveMemoryLines(sessionKey);
21542160expect(lines).toEqual([expect.stringContaining("🧩 Active Memory: status=timeout")]);
2155-expect(lines.some((line) => line.includes("timeout_partial"))).toBe(false);
2161+expectLinesNotToContain(lines, "timeout_partial");
21562162});
2157216321582164it("does not inject embedded timeout boilerplate from partial transcripts", async () => {
@@ -2197,8 +2203,8 @@ describe("active-memory plugin", () => {
21972203expect(result).toBeUndefined();
21982204const lines = getActiveMemoryLines(sessionKey);
21992205expect(lines).toEqual([expect.stringContaining("🧩 Active Memory: status=timeout")]);
2200-expect(lines.some((line) => line.includes("timeout_partial"))).toBe(false);
2201-expect(lines.some((line) => line.includes("LLM request timed out"))).toBe(false);
2206+expectLinesNotToContain(lines, "timeout_partial");
2207+expectLinesNotToContain(lines, "LLM request timed out");
22022208});
2203220922042210it("returns partial transcript text when an aborted subagent rejects before the race timeout wins", async () => {
@@ -2521,7 +2527,7 @@ describe("active-memory plugin", () => {
25212527const infoLines = vi
25222528.mocked(api.logger.info)
25232529.mock.calls.map((call: unknown[]) => String(call[0]));
2524-expect(infoLines.some((line: string) => line.includes(" cached "))).toBe(false);
2530+expectLinesNotToContain(infoLines, " cached ");
25252531});
2526253225272533it("does not share cached recall results across session-id-only contexts", async () => {
@@ -2554,7 +2560,7 @@ describe("active-memory plugin", () => {
25542560const infoLines = vi
25552561.mocked(api.logger.info)
25562562.mock.calls.map((call: unknown[]) => String(call[0]));
2557-expect(infoLines.some((line: string) => line.includes(" cached "))).toBe(false);
2563+expectLinesNotToContain(infoLines, " cached ");
25582564});
2559256525602566it("ignores late subagent payloads once the active-memory timeout signal has fired", async () => {
@@ -2589,7 +2595,7 @@ describe("active-memory plugin", () => {
25892595const infoLines = vi
25902596.mocked(api.logger.info)
25912597.mock.calls.map((call: unknown[]) => String(call[0]));
2592-expect(infoLines.some((line: string) => line.includes("status=timeout"))).toBe(true);
2598+expectLinesToContain(infoLines, "status=timeout");
25932599expect(
25942600infoLines.some(
25952601(line: string) =>
@@ -2632,7 +2638,7 @@ describe("active-memory plugin", () => {
26322638const infoLines = vi
26332639.mocked(api.logger.info)
26342640.mock.calls.map((call: unknown[]) => String(call[0]));
2635-expect(infoLines.some((line: string) => line.includes("status=timeout"))).toBe(false);
2641+expectLinesNotToContain(infoLines, "status=timeout");
26362642});
2637264326382644it("returns timeout within a hard deadline even when the subagent never checks the abort signal", async () => {
@@ -2669,7 +2675,7 @@ describe("active-memory plugin", () => {
26692675const infoLines = vi
26702676.mocked(api.logger.info)
26712677.mock.calls.map((call: unknown[]) => String(call[0]));
2672-expect(infoLines.some((line: string) => line.includes("status=timeout"))).toBe(true);
2678+expectLinesToContain(infoLines, "status=timeout");
26732679// Hard deadline: wall-clock time must be near timeoutMs, not 30s.
26742680expect(wallClockMs).toBeLessThan(CONFIGURED_TIMEOUT_MS + HARD_DEADLINE_MARGIN_MS);
26752681});
@@ -2710,8 +2716,8 @@ describe("active-memory plugin", () => {
27102716const infoLines = vi
27112717.mocked(api.logger.info)
27122718.mock.calls.map((call: unknown[]) => String(call[0]));
2713-expect(infoLines.some((line: string) => line.includes("done status=empty"))).toBe(true);
2714-expect(infoLines.some((line: string) => line.includes("done status=timeout"))).toBe(false);
2719+expectLinesToContain(infoLines, "done status=empty");
2720+expectLinesNotToContain(infoLines, "done status=timeout");
27152721expect(getActiveMemoryLines(sessionKey)).toEqual([
27162722expect.stringContaining("🧩 Active Memory: status=empty"),
27172723expect.stringContaining("🔎 Active Memory Debug: backend=qmd searchMs=8 hits=0"),
@@ -2802,8 +2808,8 @@ describe("active-memory plugin", () => {
28022808const infoLines = vi
28032809.mocked(api.logger.info)
28042810.mock.calls.map((call: unknown[]) => String(call[0]));
2805-expect(infoLines.some((line: string) => line.includes("done status=empty"))).toBe(true);
2806-expect(infoLines.some((line: string) => line.includes("done status=timeout"))).toBe(false);
2811+expectLinesToContain(infoLines, "done status=empty");
2812+expectLinesNotToContain(infoLines, "done status=timeout");
28072813expect(getActiveMemoryLines(sessionKey)).toEqual([
28082814expect.stringContaining("🧩 Active Memory: status=empty"),
28092815expect.stringContaining(
@@ -2862,7 +2868,7 @@ describe("active-memory plugin", () => {
28622868const warnLines = vi
28632869.mocked(api.logger.warn)
28642870.mock.calls.map((call: unknown[]) => String(call[0]));
2865-expect(warnLines.some((line: string) => line.includes("before_prompt_build"))).toBe(true);
2871+expectLinesToContain(warnLines, "before_prompt_build");
28662872});
2867287328682874it("honors configured timeoutMs values above the former 60 000 ms ceiling", async () => {
@@ -3733,8 +3739,8 @@ describe("active-memory plugin", () => {
37333739const lines =
37343740(store[sessionKey]?.pluginDebugEntries as Array<{ lines?: string[] }> | undefined)?.[0]
37353741?.lines ?? [];
3736-expect(lines.some((line) => line.includes("\u001b"))).toBe(false);
3737-expect(lines.some((line) => line.includes("\r"))).toBe(false);
3742+expectLinesNotToContain(lines, "\u001b");
3743+expectLinesNotToContain(lines, "\r");
37383744});
3739374537403746it("caps the active-memory cache size and evicts the oldest entries", () => {
@@ -3829,7 +3835,7 @@ describe("active-memory plugin", () => {
38293835const infoLines = vi
38303836.mocked(api.logger.info)
38313837.mock.calls.map((call: unknown[]) => String(call[0]));
3832-expect(infoLines.some((line: string) => line.includes("circuit breaker open"))).toBe(true);
3838+expectLinesToContain(infoLines, "circuit breaker open");
38333839});
3834384038353841it("resets circuit breaker after a successful recall", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。