























@@ -32,7 +32,8 @@ describe("runBootOnce", () => {
3232const sessionKey = resolveMainSessionKey(cfg);
3333const agentId = resolveAgentIdFromSessionKey(sessionKey);
3434const storePath = resolveStorePath(cfg.session?.store, { agentId });
35-return { sessionKey, storePath };
35+const bootSessionKey = `agent:${agentId}:boot`;
36+return { sessionKey, bootSessionKey, storePath };
3637};
37383839beforeEach(async () => {
@@ -68,8 +69,12 @@ describe("runBootOnce", () => {
6869}
6970};
707171-const mockAgentUpdatesMainSession = (storePath: string, sessionKey: string) => {
72-agentCommand.mockImplementation(async (opts: { sessionId?: string }) => {
72+const mockAgentUpdatesRequestedSession = (storePath: string) => {
73+agentCommand.mockImplementation(async (opts: { sessionId?: string; sessionKey?: string }) => {
74+const sessionKey = opts.sessionKey ?? "";
75+if (!sessionKey) {
76+throw new Error("expected sessionKey");
77+}
7378const current = loadSessionStore(storePath, { skipCache: true });
7479current[sessionKey] = {
7580sessionId: String(opts.sessionId),
@@ -87,7 +92,7 @@ describe("runBootOnce", () => {
8792return call as Record<string, unknown>;
8893};
899490-const expectMainSessionRestored = (params: {
95+const expectSessionMapping = (params: {
9196storePath: string;
9297sessionKey: string;
9398expectedSessionId?: string;
@@ -145,7 +150,8 @@ describe("runBootOnce", () => {
145150expect(agentCommand).toHaveBeenCalledTimes(1);
146151const call = requireAgentCall();
147152expect(call.deliver).toBe(false);
148-expect(call.sessionKey).toBe(resolveMainSessionKey({}));
153+expect(call.sessionKey).toBe("agent:main:boot");
154+expect(call.suppressPromptPersistence).toBe(true);
149155expect(call.message).toContain("BOOT.md:");
150156expect(call.message).toContain(content);
151157expect(call.message).toContain("NO_REPLY");
@@ -173,7 +179,26 @@ describe("runBootOnce", () => {
173179});
174180175181expect(agentCommand).toHaveBeenCalledTimes(1);
176-expect(requireAgentCall().sessionKey).toBe(resolveAgentMainSessionKey({ cfg, agentId }));
182+const mainSessionKey = resolveAgentMainSessionKey({ cfg, agentId });
183+expect(requireAgentCall().sessionKey).toBe(
184+`agent:${resolveAgentIdFromSessionKey(mainSessionKey)}:boot`,
185+);
186+});
187+});
188+189+it("keeps boot session isolation when the main session key is configured", async () => {
190+await withBootWorkspace({ bootContent: "Check status." }, async (workspaceDir) => {
191+agentCommand.mockResolvedValue(undefined);
192+const cfg = { session: { mainKey: "primary" } };
193+const agentId = "ops";
194+await expect(runBootOnce({ cfg, deps: makeDeps(), workspaceDir, agentId })).resolves.toEqual({
195+status: "ran",
196+});
197+198+expect(agentCommand).toHaveBeenCalledTimes(1);
199+const mainSessionKey = resolveAgentMainSessionKey({ cfg, agentId });
200+expect(mainSessionKey).toBe("agent:ops:primary");
201+expect(requireAgentCall().sessionKey).toBe("agent:ops:boot");
177202});
178203});
179204@@ -200,7 +225,7 @@ describe("runBootOnce", () => {
200225const content = "Say hello when you wake up.";
201226await withBootWorkspace({ bootContent: content }, async (workspaceDir) => {
202227const cfg = {};
203-const { sessionKey, storePath } = resolveMainStore(cfg);
228+const { bootSessionKey, sessionKey, storePath } = resolveMainStore(cfg);
204229const existingSessionId = "main-session-abc123";
205230206231await saveSessionStore(storePath, {
@@ -222,15 +247,16 @@ describe("runBootOnce", () => {
222247expect(call.sessionId).toMatch(
223248/^boot-\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}-\d{3}-[0-9a-f]{8}$/,
224249);
225-expect(call.sessionKey).toBe(sessionKey);
250+expect(call.sessionKey).toBe(bootSessionKey);
251+expectSessionMapping({ storePath, sessionKey, expectedSessionId: existingSessionId });
226252});
227253});
228254229-it("restores the original main session mapping after the boot run", async () => {
255+it("does not mutate the original main session mapping after the boot run", async () => {
230256const content = "Check if the system is healthy.";
231257await withBootWorkspace({ bootContent: content }, async (workspaceDir) => {
232258const cfg = {};
233-const { sessionKey, storePath } = resolveMainStore(cfg);
259+const { bootSessionKey, sessionKey, storePath } = resolveMainStore(cfg);
234260const existingSessionId = "main-session-xyz789";
235261236262await saveSessionStore(storePath, {
@@ -240,27 +266,29 @@ describe("runBootOnce", () => {
240266},
241267});
242268243-mockAgentUpdatesMainSession(storePath, sessionKey);
269+mockAgentUpdatesRequestedSession(storePath);
244270await expect(runBootOnce({ cfg, deps: makeDeps(), workspaceDir })).resolves.toEqual({
245271status: "ran",
246272});
247273248-expectMainSessionRestored({ storePath, sessionKey, expectedSessionId: existingSessionId });
274+expectSessionMapping({ storePath, sessionKey, expectedSessionId: existingSessionId });
275+expectSessionMapping({ storePath, sessionKey: bootSessionKey });
249276});
250277});
251278252-it("removes a boot-created main-session mapping when none existed before", async () => {
279+it("removes a boot-created boot-session mapping when none existed before", async () => {
253280await withBootWorkspace({ bootContent: "health check" }, async (workspaceDir) => {
254281const cfg = {};
255-const { sessionKey, storePath } = resolveMainStore(cfg);
282+const { bootSessionKey, sessionKey, storePath } = resolveMainStore(cfg);
256283257-mockAgentUpdatesMainSession(storePath, sessionKey);
284+mockAgentUpdatesRequestedSession(storePath);
258285259286await expect(runBootOnce({ cfg, deps: makeDeps(), workspaceDir })).resolves.toEqual({
260287status: "ran",
261288});
262289263-expectMainSessionRestored({ storePath, sessionKey });
290+expectSessionMapping({ storePath, sessionKey });
291+expectSessionMapping({ storePath, sessionKey: bootSessionKey });
264292});
265293});
266294});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。