Files
tutti/packages/agent/gui/agent-gui/agentGuiNode/model/agentGuiSessionNavigationMemory.spec.ts
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

141 lines
4.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { AgentGUINodeData } from "../../../types";
import {
forgetAgentGUISessionMemories,
rememberAgentGUIActiveConversation,
resolveAgentGUIRememberedSessionSelection,
resolveAgentGUISessionMemoryTarget
} from "./agentGuiSessionNavigationMemory";
describe("agent GUI session navigation memory", () => {
it("remembers the last selected session independently for each agent target", () => {
const initial: AgentGUINodeData = {
agentTargetId: "local:codex",
lastActiveAgentSessionId: "codex-1",
provider: "codex"
};
const codex = rememberAgentGUIActiveConversation(
initial,
"codex-1",
"local:codex"
);
const claude = rememberAgentGUIActiveConversation(
codex,
"claude-1",
"local:claude-code"
);
const home = rememberAgentGUIActiveConversation(claude, null);
expect(home.lastActiveAgentSessionId).toBeNull();
expect(home.lastActiveAgentSessionIdByAgentTargetId).toEqual({
"local:claude-code": "claude-1",
"local:codex": "codex-1"
});
});
it("forgets deleted sessions without removing other target memories", () => {
const current: AgentGUINodeData = {
agentTargetId: "local:claude-code",
lastActiveAgentSessionId: "claude-1",
lastActiveAgentSessionIdByAgentTargetId: {
"local:claude-code": "claude-1",
"local:codex": "codex-1"
},
provider: "claude-code"
};
expect(
forgetAgentGUISessionMemories(current, new Set(["claude-1"]))
).toEqual({
...current,
lastActiveAgentSessionId: null,
lastActiveAgentSessionIdByAgentTargetId: {
"local:codex": "codex-1"
}
});
});
it("uses only canonical, projected, or matching pending target evidence", () => {
expect(
resolveAgentGUISessionMemoryTarget({
agentSessionId: "session-1",
canonicalAgentTargetId: "local:codex",
pendingActivation: {
agentSessionId: "session-1",
agentTargetId: "local:claude-code"
},
projectedAgentTargetId: "local:opencode"
})
).toBe("local:codex");
expect(
resolveAgentGUISessionMemoryTarget({
agentSessionId: "session-1",
pendingActivation: {
agentSessionId: "session-1",
agentTargetId: "local:claude-code"
}
})
).toBe("local:claude-code");
expect(
resolveAgentGUISessionMemoryTarget({
agentSessionId: "session-1",
pendingActivation: {
agentSessionId: "other-session",
agentTargetId: "local:claude-code"
}
})
).toBeNull();
});
});
describe("remembered provider session selection", () => {
const data = {
lastActiveAgentSessionId: null,
lastActiveAgentSessionIdByAgentTargetId: {
"local:codex": "codex-session"
},
provider: "codex"
} as const;
it("restores the window-local session remembered for the exact target", () => {
expect(
resolveAgentGUIRememberedSessionSelection({
data,
deleted: false,
knownAgentTargetId: "local:codex",
targetAgentTargetId: "local:codex"
})
).toEqual({ agentSessionId: "codex-session", kind: "restore" });
});
it("restores a remembered bounded-history session before it is loaded", () => {
expect(
resolveAgentGUIRememberedSessionSelection({
data,
deleted: false,
knownAgentTargetId: null,
targetAgentTargetId: "local:codex"
})
).toEqual({ agentSessionId: "codex-session", kind: "restore" });
});
it("rejects deleted or target-mismatched memories", () => {
expect(
resolveAgentGUIRememberedSessionSelection({
data,
deleted: true,
knownAgentTargetId: "local:codex",
targetAgentTargetId: "local:codex"
})
).toEqual({ agentSessionId: "codex-session", kind: "stale" });
expect(
resolveAgentGUIRememberedSessionSelection({
data,
deleted: false,
knownAgentTargetId: "local:claude-code",
targetAgentTargetId: "local:codex"
})
).toEqual({ agentSessionId: "codex-session", kind: "stale" });
});
});