























@@ -83,6 +83,24 @@ function buildContext(params?: {
8383} satisfies Parameters<typeof handleSubagentsSpawnAction>[0];
8484}
858586+function latestSpawnCall(): {
87+options: Record<string, unknown>;
88+context: Record<string, unknown>;
89+} {
90+const call = spawnSubagentDirectMock.mock.calls.at(-1);
91+if (!call) {
92+throw new Error("expected spawnSubagentDirect call");
93+}
94+const [options, context] = call;
95+if (!options || typeof options !== "object" || !context || typeof context !== "object") {
96+throw new Error("expected spawnSubagentDirect object args");
97+}
98+return {
99+options: options as Record<string, unknown>,
100+context: context as Record<string, unknown>,
101+};
102+}
103+86104describe("subagents spawn action", () => {
87105beforeEach(() => {
88106vi.clearAllMocks();
@@ -119,22 +137,18 @@ describe("subagents spawn action", () => {
119137text: "Spawned subagent beta (session agent:beta:subagent:test-uuid, run run-spaw).",
120138},
121139});
122-expect(spawnSubagentDirectMock).toHaveBeenCalledWith(
123-expect.objectContaining({
124-agentId: "beta",
125-task: "do the thing",
126-mode: "run",
127-cleanup: "keep",
128-expectsCompletionMessage: true,
129-}),
130-expect.objectContaining({
131-agentSessionKey: "agent:main:main",
132-agentChannel: "whatsapp",
133-agentAccountId: "default",
134-agentTo: "channel:origin",
135-agentThreadId: "thread-1",
136-}),
137-);
140+expect(spawnSubagentDirectMock).toHaveBeenCalledOnce();
141+const { options, context } = latestSpawnCall();
142+expect(options.agentId).toBe("beta");
143+expect(options.task).toBe("do the thing");
144+expect(options.mode).toBe("run");
145+expect(options.cleanup).toBe("keep");
146+expect(options.expectsCompletionMessage).toBe(true);
147+expect(context.agentSessionKey).toBe("agent:main:main");
148+expect(context.agentChannel).toBe("whatsapp");
149+expect(context.agentAccountId).toBe("default");
150+expect(context.agentTo).toBe("channel:origin");
151+expect(context.agentThreadId).toBe("thread-1");
138152});
139153140154it("passes --model through to spawnSubagentDirect", async () => {
@@ -144,13 +158,9 @@ describe("subagents spawn action", () => {
144158restTokens: ["beta", "do", "the", "thing", "--model", "openai/gpt-4o"],
145159}),
146160);
147-expect(spawnSubagentDirectMock).toHaveBeenCalledWith(
148-expect.objectContaining({
149-model: "openai/gpt-4o",
150-task: "do the thing",
151-}),
152-expect.anything(),
153-);
161+const { options } = latestSpawnCall();
162+expect(options.model).toBe("openai/gpt-4o");
163+expect(options.task).toBe("do the thing");
154164});
155165156166it("passes --thinking through to spawnSubagentDirect", async () => {
@@ -160,13 +170,9 @@ describe("subagents spawn action", () => {
160170restTokens: ["beta", "do", "the", "thing", "--thinking", "high"],
161171}),
162172);
163-expect(spawnSubagentDirectMock).toHaveBeenCalledWith(
164-expect.objectContaining({
165-thinking: "high",
166-task: "do the thing",
167-}),
168-expect.anything(),
169-);
173+const { options } = latestSpawnCall();
174+expect(options.thinking).toBe("high");
175+expect(options.task).toBe("do the thing");
170176});
171177172178it("passes group context from the session entry", async () => {
@@ -182,14 +188,10 @@ describe("subagents spawn action", () => {
182188},
183189}),
184190);
185-expect(spawnSubagentDirectMock).toHaveBeenCalledWith(
186-expect.anything(),
187-expect.objectContaining({
188-agentGroupId: "group-1",
189-agentGroupChannel: "#group-channel",
190-agentGroupSpace: "workspace-1",
191-}),
192-);
191+const { context } = latestSpawnCall();
192+expect(context.agentGroupId).toBe("group-1");
193+expect(context.agentGroupChannel).toBe("#group-channel");
194+expect(context.agentGroupSpace).toBe("workspace-1");
193195});
194196195197it("uses the requester key chosen by earlier routing", async () => {
@@ -205,14 +207,10 @@ describe("subagents spawn action", () => {
205207},
206208}),
207209);
208-expect(spawnSubagentDirectMock).toHaveBeenCalledWith(
209-expect.anything(),
210-expect.objectContaining({
211-agentSessionKey: "agent:main:target",
212-agentChannel: "discord",
213-agentTo: "channel:12345",
214-}),
215-);
210+const { context } = latestSpawnCall();
211+expect(context.agentSessionKey).toBe("agent:main:target");
212+expect(context.agentChannel).toBe("discord");
213+expect(context.agentTo).toBe("channel:12345");
216214});
217215218216it("prefers the requester-key session entry for group metadata", async () => {
@@ -229,15 +227,11 @@ describe("subagents spawn action", () => {
229227},
230228}),
231229);
232-const call = spawnSubagentDirectMock.mock.calls.at(-1);
233-expect(call?.[1]).toEqual(
234-expect.objectContaining({
235-agentSessionKey: "agent:main:target",
236-agentGroupId: "wrapper-group",
237-agentGroupChannel: "#wrapper",
238-agentGroupSpace: "wrapper-space",
239-}),
240-);
230+let context = latestSpawnCall().context;
231+expect(context.agentSessionKey).toBe("agent:main:target");
232+expect(context.agentGroupId).toBe("wrapper-group");
233+expect(context.agentGroupChannel).toBe("#wrapper");
234+expect(context.agentGroupSpace).toBe("wrapper-space");
241235242236spawnSubagentDirectMock.mockClear();
243237await handleSubagentsSpawnAction({
@@ -274,15 +268,11 @@ describe("subagents spawn action", () => {
274268},
275269});
276270277-expect(spawnSubagentDirectMock).toHaveBeenCalledWith(
278-expect.anything(),
279-expect.objectContaining({
280-agentSessionKey: "agent:main:target",
281-agentGroupId: "target-group",
282-agentGroupChannel: "#target",
283-agentGroupSpace: "target-space",
284-}),
285-);
271+context = latestSpawnCall().context;
272+expect(context.agentSessionKey).toBe("agent:main:target");
273+expect(context.agentGroupId).toBe("target-group");
274+expect(context.agentGroupChannel).toBe("#target");
275+expect(context.agentGroupSpace).toBe("target-space");
286276});
287277288278it("falls back to OriginatingTo when command.to is missing", async () => {
@@ -297,12 +287,7 @@ describe("subagents spawn action", () => {
297287},
298288}),
299289);
300-expect(spawnSubagentDirectMock).toHaveBeenCalledWith(
301-expect.anything(),
302-expect.objectContaining({
303-agentTo: "channel:manual",
304-}),
305-);
290+expect(latestSpawnCall().context.agentTo).toBe("channel:manual");
306291});
307292308293it("formats forbidden spawn failures", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。