CLI/Sessions: honor default agent for implicit store path

This commit is contained in:
Vignesh Natarajan
2026-02-22 22:46:59 -08:00
parent af4330ef75
commit de96f5fed2
3 changed files with 76 additions and 1 deletions

View File

@@ -0,0 +1,72 @@
import { describe, expect, it, vi } from "vitest";
import type { RuntimeEnv } from "../runtime.js";
const loadConfigMock = vi.hoisted(() =>
vi.fn(() => ({
agents: {
defaults: {
model: { primary: "pi:opus" },
models: { "pi:opus": {} },
contextTokens: 32000,
},
list: [
{ id: "main", default: false },
{ id: "voice", default: true },
],
},
session: {
store: "/tmp/sessions-{agentId}.json",
},
})),
);
const resolveStorePathMock = vi.hoisted(() =>
vi.fn((_store: string | undefined, opts?: { agentId?: string }) => {
return `/tmp/sessions-${opts?.agentId ?? "missing"}.json`;
}),
);
vi.mock("../config/config.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../config/config.js")>();
return {
...actual,
loadConfig: loadConfigMock,
};
});
vi.mock("../config/sessions.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../config/sessions.js")>();
return {
...actual,
resolveStorePath: resolveStorePathMock,
loadSessionStore: vi.fn(() => ({})),
};
});
import { sessionsCommand } from "./sessions.js";
function createRuntime(): { runtime: RuntimeEnv; logs: string[] } {
const logs: string[] = [];
return {
runtime: {
log: (msg: unknown) => logs.push(String(msg)),
error: vi.fn(),
exit: vi.fn(),
},
logs,
};
}
describe("sessionsCommand default store agent selection", () => {
it("uses configured default agent id when resolving implicit session store path", async () => {
resolveStorePathMock.mockClear();
const { runtime, logs } = createRuntime();
await sessionsCommand({}, runtime);
expect(resolveStorePathMock).toHaveBeenCalledWith("/tmp/sessions-{agentId}.json", {
agentId: "voice",
});
expect(logs[0]).toContain("Session store: /tmp/sessions-voice.json");
});
});

View File

@@ -1,3 +1,4 @@
import { resolveDefaultAgentId } from "../agents/agent-scope.js";
import { lookupContextTokens } from "../agents/context.js";
import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js";
import { resolveConfiguredModelRef } from "../agents/model-selection.js";
@@ -181,7 +182,8 @@ export async function sessionsCommand(
lookupContextTokens(resolved.model) ??
DEFAULT_CONTEXT_TOKENS;
const configModel = resolved.model ?? DEFAULT_MODEL;
const storePath = resolveStorePath(opts.store ?? cfg.session?.store);
const defaultAgentId = resolveDefaultAgentId(cfg);
const storePath = resolveStorePath(opts.store ?? cfg.session?.store, { agentId: defaultAgentId });
const store = loadSessionStore(storePath);
let activeMinutes: number | undefined;