
























@@ -156,6 +156,17 @@ describe("active-memory plugin", () => {
156156vi
157157.mocked(api.logger.warn)
158158.mock.calls.some((call: unknown[]) => String(call[0]).includes(needle));
159+const expectPrependContextResult = (result: unknown) => {
160+expect(result).toMatchObject({
161+prependContext: expect.any(String),
162+});
163+};
164+const requireNonEmptyString = (value: unknown, message: string): string => {
165+if (typeof value !== "string" || value.length === 0) {
166+throw new Error(message);
167+}
168+return value;
169+};
159170160171beforeEach(async () => {
161172vi.clearAllMocks();
@@ -931,7 +942,7 @@ describe("active-memory plugin", () => {
931942);
932943933944expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(1);
934-expect(result).toBeDefined();
945+expectPrependContextResult(result);
935946});
936947937948it("skips sessions whose conversation id is in deniedChatIds even when chat type is allowed", async () => {
@@ -1033,7 +1044,7 @@ describe("active-memory plugin", () => {
10331044);
1034104510351046expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(1);
1036-expect(result).toBeDefined();
1047+expectPrependContextResult(result);
10371048});
1038104910391050it("matches per-peer direct session keys (agent:<id>:direct:<peer>)", async () => {
@@ -1057,7 +1068,7 @@ describe("active-memory plugin", () => {
10571068);
1058106910591070expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(1);
1060-expect(result).toBeDefined();
1071+expectPrependContextResult(result);
10611072});
1062107310631074it("matches per-account-channel-peer direct session keys (agent:<id>:<channel>:<account>:direct:<peer>)", async () => {
@@ -1082,7 +1093,7 @@ describe("active-memory plugin", () => {
10821093);
1083109410841095expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(1);
1085-expect(result).toBeDefined();
1096+expectPrependContextResult(result);
10861097});
1087109810881099it("strips :thread:<id> suffix before matching allowedChatIds (group)", async () => {
@@ -1109,7 +1120,7 @@ describe("active-memory plugin", () => {
11091120);
1110112111111122expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(1);
1112-expect(result).toBeDefined();
1123+expectPrependContextResult(result);
11131124});
1114112511151126it("strips :thread:<id> suffix before matching deniedChatIds (direct)", async () => {
@@ -1630,13 +1641,13 @@ describe("active-memory plugin", () => {
16301641const deprecationMessage = warnCalls
16311642.map(([first]) => (typeof first === "string" ? first : ""))
16321643.find((message) => message.includes("config.modelFallbackPolicy is deprecated"));
1633-expect(deprecationMessage).toBeDefined();
1644+const message = requireNonEmptyString(deprecationMessage, "deprecation warning missing");
16341645// Positive: the warning describes chain-resolution last-resort behavior.
1635-expect(deprecationMessage).toContain("chain-resolution");
1636-expect(deprecationMessage).toContain("last-resort");
1646+expect(message).toContain("chain-resolution");
1647+expect(message).toContain("last-resort");
16371648// Negative: the warning explicitly disclaims runtime failover, since
16381649// that's the wrong mental model the previous wording invited.
1639-expect(deprecationMessage).toMatch(/NOT a runtime failover/i);
1650+expect(message).toMatch(/NOT a runtime failover/i);
16401651});
1641165216421653it("does not use a built-in fallback model even when default-remote is configured", async () => {
@@ -1760,9 +1771,9 @@ describe("active-memory plugin", () => {
17601771const debugLine = entries?.[0]?.lines.find((line) =>
17611772line.startsWith("🔎 Active Memory Debug:"),
17621773);
1763-expect(debugLine).toBeDefined();
1764-expect(debugLine).toContain("backend=qmd");
1765-expect(debugLine).toContain("hits=3");
1774+const line = requireNonEmptyString(debugLine, "active memory debug line missing");
1775+expect(line).toContain("backend=qmd");
1776+expect(line).toContain("hits=3");
17661777});
1767177817681779it("replaces stale structured active-memory lines on a later empty run", async () => {
@@ -2033,6 +2044,7 @@ describe("active-memory plugin", () => {
20332044it("returns partial transcript text on timeout when transcripts are temporary by default", async () => {
20342045__testing.setMinimumTimeoutMsForTests(1);
20352046__testing.setSetupGraceTimeoutMsForTests(0);
2047+__testing.setTimeoutPartialDataGraceMsForTests(100);
20362048api.pluginConfig = {
20372049agents: ["main"],
20382050timeoutMs: 250,
@@ -2299,9 +2311,9 @@ describe("active-memory plugin", () => {
22992311maxBytes: 10 * 1024 * 1024,
23002312});
230123132302-expect(result).toBeTruthy();
2303-expect(result?.length).toBeLessThanOrEqual(128);
2304-expect(result).toContain("alpha beta gamma");
2314+const partialText = requireNonEmptyString(result, "partial assistant text missing");
2315+expect(partialText.length).toBeLessThanOrEqual(128);
2316+expect(partialText).toContain("alpha beta gamma");
23052317expect(readFileSpy).not.toHaveBeenCalled();
23062318});
23072319@@ -2953,9 +2965,9 @@ describe("active-memory plugin", () => {
29532965.mocked(api.logger.info)
29542966.mock.calls.map((call: unknown[]) => String(call[0]));
29552967const startLine = infoLines.find((line: string) => line.includes(" start timeoutMs="));
2956-expect(startLine).toBeTruthy();
2957-expect(startLine && startLine.length < 500).toBe(true);
2958-expect(startLine).toContain("...");
2968+const line = requireNonEmptyString(startLine, "active memory start log line missing");
2969+expect(line.length).toBeLessThan(500);
2970+expect(line).toContain("...");
29592971});
2960297229612973it("uses a canonical agent session key when only sessionId is available", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。