






















@@ -62,6 +62,17 @@ function countMatching<T>(items: readonly T[], predicate: (item: T) => boolean):
6262return count;
6363}
646465+function expectAcceptedRunDetails(details: unknown): string {
66+const rec = details as { status?: string; runId?: unknown } | undefined;
67+const runId = rec?.runId;
68+expect(rec?.status).toBe("accepted");
69+expect(typeof runId).toBe("string");
70+if (typeof runId !== "string") {
71+throw new Error("missing accepted runId");
72+}
73+return runId;
74+}
75+6576function buildDiscordCleanupHooks(onDelete: (key: string | undefined) => void) {
6677return {
6778onAgentSubagentSpawn: (params: unknown) => {
@@ -97,10 +108,7 @@ async function executeSpawnAndExpectAccepted(params: {
97108 ...(params.label ? { label: params.label } : {}),
98109 ...(params.expectsCompletionMessage === false ? { expectsCompletionMessage: false } : {}),
99110});
100-expect(result.details).toMatchObject({
101-status: "accepted",
102-runId: expect.any(String),
103-});
111+expectAcceptedRunDetails(result.details);
104112return result;
105113}
106114@@ -130,7 +138,7 @@ async function executeBoundAccountSpawn(params: {
130138 ...(params.agentId ? { agentId: params.agentId } : {}),
131139cleanup: "keep",
132140});
133-expect(result.details).toMatchObject({ status: "accepted", runId: expect.any(String) });
141+expectAcceptedRunDetails(result.details);
134142return spawnAccountId;
135143}
136144@@ -293,10 +301,7 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => {
293301runTimeoutSeconds: 120,
294302});
295303296-expect(result.details).toMatchObject({
297-status: "accepted",
298-runId: expect.any(String),
299-});
304+expectAcceptedRunDetails(result.details);
300305const childAgentCall = ctx.calls.find((call) => {
301306const params = call.params as { lane?: string } | undefined;
302307return call.method === "agent" && params?.lane === "subagent";
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。