File size: 3,221 Bytes
5c2a829 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | import { describe, expect, it } from "vitest";
import { AgentSelectionRequiredError } from "../agents/agent-scope-config.js";
import type { OpenClawConfig } from "../config/types.js";
import {
resolveSessionAgentId,
resolveSessionAgentIdStrict,
resolveSessionAgentIds,
resolveSessionAgentIdsStrict,
} from "./agent-scope-runtime.js";
describe("agent-scope-runtime compatibility", () => {
const config = {
agents: {
ownership: "explicit",
defaults: { systemAgent: { agentId: "beta" } },
entries: { main: {}, beta: {} },
},
} satisfies OpenClawConfig;
it("resolves the configured system agent for ownerless shipped calls", () => {
expect(resolveSessionAgentIds({ config })).toEqual({
defaultAgentId: "beta",
sessionAgentId: "beta",
});
expect(resolveSessionAgentId({ config })).toBe("beta");
});
it("keeps strict resolution ownerless", () => {
expect(() => resolveSessionAgentIdsStrict({ config })).toThrow(AgentSelectionRequiredError);
expect(() => resolveSessionAgentIdStrict({ config })).toThrow(AgentSelectionRequiredError);
});
it.each([
{
name: "explicit agent",
params: { config, agentId: "main" },
expected: "main",
},
{
name: "prepared fallback agent",
params: { config, fallbackAgentId: "main" },
expected: "main",
},
{
name: "agent-scoped session key",
params: { config, sessionKey: "agent:main:main" },
expected: "main",
},
{
name: "persisted fixed-store owner",
params: {
config: {
...config,
session: { store: "/tmp/shared.sqlite" },
agents: {
...config.agents,
defaults: {
...config.agents.defaults,
sessionStore: { agentId: "main" },
},
},
},
sessionKey: "global",
},
expected: "main",
},
])("does not override $name", ({ params, expected }) => {
expect(resolveSessionAgentIds(params).sessionAgentId).toBe(expected);
});
it.each([
{
name: "conflicting explicit and agent-scoped owners",
params: { config, agentId: "beta", sessionKey: "agent:main:main" },
},
{
name: "conflicting explicit and persisted owners",
params: {
config: {
...config,
session: { store: "/tmp/shared.sqlite" },
agents: {
...config.agents,
defaults: {
...config.agents.defaults,
sessionStore: { agentId: "main" },
},
},
},
agentId: "beta",
sessionKey: "global",
},
},
{
name: "retired persisted owner",
params: {
config: {
...config,
session: { store: "/tmp/shared.sqlite" },
agents: {
...config.agents,
defaults: {
...config.agents.defaults,
sessionStore: { agentId: "retired" },
},
},
},
sessionKey: "global",
},
},
])("preserves $name failures", ({ params }) => {
expect(() => resolveSessionAgentIds(params)).toThrow(AgentSelectionRequiredError);
});
});
|