





















@@ -2031,7 +2031,7 @@ describe("active-memory plugin", () => {
20312031{ pluginId: "other-plugin", lines: ["Other Plugin: keep me"] },
20322032{
20332033pluginId: "active-memory",
2034-lines: [expect.stringContaining("🧩 Active Memory: status=empty")],
2034+lines: [expect.stringContaining("🧩 Active Memory: status=no_relevant_memory")],
20352035},
20362036]);
20372037});
@@ -2073,8 +2073,7 @@ describe("active-memory plugin", () => {
20732073expect(hasDebugLine("no configured memory tools available")).toBe(true);
20742074expect(hasWarnLine("No callable tools remain")).toBe(false);
20752075const lines = getActiveMemoryLines(sessionKey);
2076-expect(lines).toEqual([expect.stringContaining("🧩 Active Memory: status=empty")]);
2077-expect(lines.join("\n")).not.toContain("status=unavailable");
2076+expect(lines).toEqual([expect.stringContaining("🧩 Active Memory: status=unavailable")]);
20782077});
2079207820802079it("skips missing memory tools when the allowlist error includes inherited sources", async () => {
@@ -2099,7 +2098,7 @@ describe("active-memory plugin", () => {
20992098expect(hasDebugLine("no configured memory tools available")).toBe(true);
21002099expect(hasWarnLine("No callable tools remain")).toBe(false);
21012100expect(getActiveMemoryLines(sessionKey)).toEqual([
2102-expect.stringContaining("🧩 Active Memory: status=empty"),
2101+expect.stringContaining("🧩 Active Memory: status=unavailable"),
21032102]);
21042103});
21052104@@ -2131,7 +2130,7 @@ describe("active-memory plugin", () => {
21312130expect(result).toBeUndefined();
21322131expect(hasDebugLine("no configured memory tools available")).toBe(true);
21332132expect(getActiveMemoryLines(sessionKey)).toEqual([
2134-expect.stringContaining("🧩 Active Memory: status=empty"),
2133+expect.stringContaining("🧩 Active Memory: status=unavailable"),
21352134]);
21362135});
21372136@@ -2157,7 +2156,7 @@ describe("active-memory plugin", () => {
21572156expect(hasDebugLine("no configured memory tools available")).toBe(true);
21582157expect(hasWarnLine("No callable tools remain")).toBe(false);
21592158expect(getActiveMemoryLines(sessionKey)).toEqual([
2160-expect.stringContaining("🧩 Active Memory: status=empty"),
2159+expect.stringContaining("🧩 Active Memory: status=unavailable"),
21612160]);
21622161});
21632162@@ -2185,7 +2184,7 @@ describe("active-memory plugin", () => {
21852184expect(hasDebugLine("no configured memory tools available")).toBe(false);
21862185expect(hasWarnLine(reason)).toBe(true);
21872186expect(getActiveMemoryLines(sessionKey)).toEqual([
2188-expect.stringContaining("🧩 Active Memory: status=empty"),
2187+expect.stringContaining("🧩 Active Memory: status=failed"),
21892188]);
21902189},
21912190);
@@ -2521,7 +2520,7 @@ describe("active-memory plugin", () => {
2521252025222521expect(result).toBeUndefined();
25232522expect(getActiveMemoryLines(sessionKey)).toEqual([
2524-expect.stringContaining("🧩 Active Memory: status=empty"),
2523+expect.stringContaining("🧩 Active Memory: status=failed"),
25252524]);
25262525expect(getActiveMemoryLines(sessionKey).join("\n")).not.toContain(
25272526"must not be surfaced from generic errors",
@@ -2625,7 +2624,7 @@ describe("active-memory plugin", () => {
26252624).resolves.toMatchObject({ backend: "qmd", hits: 1 });
26262625});
262726262628-it("caches ok and empty results but not timeout_partial results", () => {
2627+it("caches ok summaries but not empty, no-relevant, or timeout_partial results", () => {
26292628expect(
26302629__testing.shouldCacheResult({
26312630status: "timeout_partial",
@@ -2647,10 +2646,17 @@ describe("active-memory plugin", () => {
26472646elapsedMs: 1,
26482647summary: null,
26492648}),
2650-).toBe(true);
2649+).toBe(false);
2650+expect(
2651+__testing.shouldCacheResult({
2652+status: "no_relevant_memory",
2653+elapsedMs: 1,
2654+summary: null,
2655+}),
2656+).toBe(false);
26512657});
265226582653-it("caches empty recall results", async () => {
2659+it("does not cache no-relevant-memory recall results", async () => {
26542660api.pluginConfig = {
26552661agents: ["main"],
26562662logging: true,
@@ -2679,16 +2685,11 @@ describe("active-memory plugin", () => {
26792685},
26802686);
268126872682-expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(1);
2688+expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(2);
26832689const infoLines = vi
26842690.mocked(api.logger.info)
26852691.mock.calls.map((call: unknown[]) => String(call[0]));
2686-expect(
2687-infoLines.some(
2688-(line: string) =>
2689-line.includes(" cached status=empty ") || line.includes(" cached status=empty"),
2690-),
2691-).toBe(true);
2692+expect(infoLines.some((line: string) => line.includes("cached status="))).toBe(false);
26922693});
2693269426942695it("surfaces timeout_partial summaries in status lines, metadata, and prompt prefixes", () => {
@@ -2911,7 +2912,7 @@ describe("active-memory plugin", () => {
29112912expect(wallClockMs).toBeLessThan(CONFIGURED_TIMEOUT_MS + HARD_DEADLINE_MARGIN_MS);
29122913});
291329142914-it("fast-fails terminal zero-hit memory_search results without waiting for recall timeout", async () => {
2915+it("does not fast-fail terminal zero-hit memory_search results as empty", async () => {
29152916const CONFIGURED_TIMEOUT_MS = 1_000;
29162917__testing.setMinimumTimeoutMsForTests(1);
29172918__testing.setSetupGraceTimeoutMsForTests(0);
@@ -2947,10 +2948,10 @@ describe("active-memory plugin", () => {
29472948const infoLines = vi
29482949.mocked(api.logger.info)
29492950.mock.calls.map((call: unknown[]) => String(call[0]));
2950-expectLinesToContain(infoLines, "done status=empty");
2951-expectLinesNotToContain(infoLines, "done status=timeout");
2951+expectLinesToContain(infoLines, "done status=timeout");
2952+expectLinesNotToContain(infoLines, "done status=empty");
29522953expect(getActiveMemoryLines(sessionKey)).toEqual([
2953-expect.stringContaining("🧩 Active Memory: status=empty"),
2954+expect.stringContaining("🧩 Active Memory: status=timeout"),
29542955expect.stringContaining("🔎 Active Memory Debug: backend=qmd searchMs=8 hits=0"),
29552956]);
29562957});
@@ -3039,10 +3040,10 @@ describe("active-memory plugin", () => {
30393040const infoLines = vi
30403041.mocked(api.logger.info)
30413042.mock.calls.map((call: unknown[]) => String(call[0]));
3042-expectLinesToContain(infoLines, "done status=empty");
3043+expectLinesToContain(infoLines, "done status=unavailable");
30433044expectLinesNotToContain(infoLines, "done status=timeout");
30443045expect(getActiveMemoryLines(sessionKey)).toEqual([
3045-expect.stringContaining("🧩 Active Memory: status=empty"),
3046+expect.stringContaining("🧩 Active Memory: status=unavailable"),
30463047expect.stringContaining(
30473048"🔎 Active Memory Debug: Memory search is unavailable due to an embedding/provider error. Check the embedding provider configuration, then retry memory_search.",
30483049),
@@ -3301,7 +3302,7 @@ describe("active-memory plugin", () => {
33013302{
33023303pluginId: "active-memory",
33033304lines: [
3304-expect.stringContaining("🧩 Active Memory: status=empty"),
3305+expect.stringContaining("🧩 Active Memory: status=unavailable"),
33053306expect.stringContaining(
33063307"🔎 Active Memory Debug: Memory search is unavailable because the embedding provider quota is exhausted. Top up or switch embedding provider, then retry memory_search.",
33073308),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。