feat(FN-4393): complete Step 1 — add memory inclusion mode settings and resolver
Fusion-Task-Id: FN-4393 Fusion-Task-Lineage: 3615215d-9caa-4402-9258-a5a5de137dd6
This commit is contained in:
58
packages/core/src/__tests__/agent-memory-mode.test.ts
Normal file
58
packages/core/src/__tests__/agent-memory-mode.test.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { Agent, GlobalSettings, ProjectSettings } from "../types.js";
|
||||
import { resolveAgentMemoryInclusionMode } from "../agent-memory-mode.js";
|
||||
|
||||
function makeAgent(mode?: unknown): Agent {
|
||||
return {
|
||||
id: "agent-1",
|
||||
name: "Agent 1",
|
||||
role: "executor",
|
||||
state: "idle",
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
metadata: {},
|
||||
runtimeConfig: mode === undefined ? {} : { agentMemoryInclusionMode: mode },
|
||||
};
|
||||
}
|
||||
|
||||
describe("resolveAgentMemoryInclusionMode", () => {
|
||||
it("prefers per-agent override over project and global", () => {
|
||||
const result = resolveAgentMemoryInclusionMode({
|
||||
agent: makeAgent("off"),
|
||||
projectSettings: { agentMemoryInclusionMode: "index" } as ProjectSettings,
|
||||
globalSettings: { agentMemoryInclusionMode: "full" } as GlobalSettings,
|
||||
});
|
||||
expect(result).toEqual({ mode: "off", source: "agent" });
|
||||
});
|
||||
|
||||
it("prefers project over global", () => {
|
||||
const result = resolveAgentMemoryInclusionMode({
|
||||
agent: makeAgent(),
|
||||
projectSettings: { agentMemoryInclusionMode: "index" } as ProjectSettings,
|
||||
globalSettings: { agentMemoryInclusionMode: "off" } as GlobalSettings,
|
||||
});
|
||||
expect(result).toEqual({ mode: "index", source: "project" });
|
||||
});
|
||||
|
||||
it("prefers global over default", () => {
|
||||
const result = resolveAgentMemoryInclusionMode({
|
||||
agent: makeAgent(),
|
||||
globalSettings: { agentMemoryInclusionMode: "off" } as GlobalSettings,
|
||||
});
|
||||
expect(result).toEqual({ mode: "off", source: "global" });
|
||||
});
|
||||
|
||||
it("falls back to full default", () => {
|
||||
const result = resolveAgentMemoryInclusionMode({ agent: makeAgent() });
|
||||
expect(result).toEqual({ mode: "full", source: "default" });
|
||||
});
|
||||
|
||||
it("ignores invalid values and falls through", () => {
|
||||
const result = resolveAgentMemoryInclusionMode({
|
||||
agent: makeAgent("bad"),
|
||||
projectSettings: { agentMemoryInclusionMode: "nope" as never } as ProjectSettings,
|
||||
globalSettings: { agentMemoryInclusionMode: "index" } as GlobalSettings,
|
||||
});
|
||||
expect(result).toEqual({ mode: "index", source: "global" });
|
||||
});
|
||||
});
|
||||
@@ -69,6 +69,8 @@ describe("settings key parity", () => {
|
||||
expect(isProjectSettingsKey("persistAgentThinkingLogEphemeral")).toBe(false);
|
||||
expect(isGlobalOnlySettingsKey("persistAgentThinkingLogEphemeral")).toBe(true);
|
||||
expect(isGlobalSettingsKey("researchSettings")).toBe(false);
|
||||
expect(isGlobalSettingsKey("agentMemoryInclusionMode")).toBe(true);
|
||||
expect(isProjectSettingsKey("agentMemoryInclusionMode")).toBe(true);
|
||||
});
|
||||
|
||||
it("defaults persisted thinking logs to disabled", () => {
|
||||
@@ -162,7 +164,7 @@ describe("settings key parity", () => {
|
||||
it("only intentional shared keys appear in both global and project scopes", () => {
|
||||
const projectKeySet = new Set(PROJECT_SETTINGS_KEYS as readonly string[]);
|
||||
const overlap = (GLOBAL_SETTINGS_KEYS as readonly string[]).filter((key) => projectKeySet.has(key));
|
||||
expect(overlap).toEqual(["githubTrackingDefaultRepo"]);
|
||||
expect(overlap).toEqual(["githubTrackingDefaultRepo", "agentMemoryInclusionMode"]);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user