























@@ -60,6 +60,32 @@ function createContext() {
6060} as never;
6161}
626263+async function runTaskHandler(
64+method: "tasks.list" | "tasks.get" | "tasks.cancel",
65+params: Record<string, unknown>,
66+) {
67+const { calls, respond } = captureRespond();
68+await tasksHandlers[method]({
69+req: { type: "req", id: `req-${method}`, method },
70+ params,
71+ respond,
72+context: createContext(),
73+client: null,
74+isWebchatConnect: () => false,
75+});
76+return {
77+ calls,
78+payload: calls[0]?.[1] as TaskResponsePayload | undefined,
79+};
80+}
81+82+async function getTaskPayload(taskId: string) {
83+const { calls, payload } = await runTaskHandler("tasks.get", { taskId });
84+expect(calls[0]?.[0]).toBe(true);
85+expect(payload?.task?.id).toBe(taskId);
86+return { calls, payload };
87+}
88+6389describe("tasks gateway handlers", () => {
6490it("lists task summaries with SDK-facing statuses and filters", async () => {
6591const running = createTaskRecord({
@@ -86,22 +112,13 @@ describe("tasks gateway handlers", () => {
86112deliveryStatus: "pending",
87113});
8811489-const { calls, respond } = captureRespond();
90-await tasksHandlers["tasks.list"]({
91-req: { type: "req", id: "req-1", method: "tasks.list" },
92-params: {
93-status: "running",
94-agentId: "main",
95-sessionKey: "agent:main:main",
96-},
97- respond,
98-context: createContext(),
99-client: null,
100-isWebchatConnect: () => false,
115+const { calls, payload } = await runTaskHandler("tasks.list", {
116+status: "running",
117+agentId: "main",
118+sessionKey: "agent:main:main",
101119});
102120103121expect(calls[0]?.[0]).toBe(true);
104-const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
105122expect(payload?.tasks).toHaveLength(1);
106123const listedTask = payload?.tasks?.[0];
107124expect(listedTask?.id).toBe(running.taskId);
@@ -128,19 +145,8 @@ describe("tasks gateway handlers", () => {
128145deliveryStatus: "not_applicable",
129146});
130147131-const { calls, respond } = captureRespond();
132-await tasksHandlers["tasks.get"]({
133-req: { type: "req", id: "req-2", method: "tasks.get" },
134-params: { taskId: task.taskId },
135- respond,
136-context: createContext(),
137-client: null,
138-isWebchatConnect: () => false,
139-});
148+const { payload } = await getTaskPayload(task.taskId);
140149141-expect(calls[0]?.[0]).toBe(true);
142-const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
143-expect(payload?.task?.id).toBe(task.taskId);
144150expect(payload?.task?.status).toBe("completed");
145151expect(payload?.task?.title).toBe("Done task");
146152});
@@ -172,19 +178,8 @@ describe("tasks gateway handlers", () => {
172178error: "Tool failed\nOpenClaw runtime context (internal): Keep internal details private.",
173179});
174180175-const { calls, respond } = captureRespond();
176-await tasksHandlers["tasks.get"]({
177-req: { type: "req", id: "req-sanitized", method: "tasks.get" },
178-params: { taskId: task.taskId },
179- respond,
180-context: createContext(),
181-client: null,
182-isWebchatConnect: () => false,
183-});
181+const { calls, payload } = await getTaskPayload(task.taskId);
184182185-expect(calls[0]?.[0]).toBe(true);
186-const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
187-expect(payload?.task?.id).toBe(task.taskId);
188183expect(payload?.task?.title).toBe("Compile artifact");
189184expect(payload?.task?.terminalSummary).toBe("Failed after build");
190185expect(payload?.task?.error).toBe("Tool failed");
@@ -203,18 +198,12 @@ describe("tasks gateway handlers", () => {
203198deliveryStatus: "pending",
204199});
205200206-const { calls, respond } = captureRespond();
207-await tasksHandlers["tasks.cancel"]({
208-req: { type: "req", id: "req-3", method: "tasks.cancel" },
209-params: { taskId: task.taskId, reason: "user stopped task" },
210- respond,
211-context: createContext(),
212-client: null,
213-isWebchatConnect: () => false,
201+const { calls, payload } = await runTaskHandler("tasks.cancel", {
202+taskId: task.taskId,
203+reason: "user stopped task",
214204});
215205216206expect(calls[0]?.[0]).toBe(true);
217-const payload = calls[0]?.[1] as TaskResponsePayload | undefined;
218207expect(payload?.found).toBe(true);
219208expect(payload?.cancelled).toBe(true);
220209expect(payload?.task?.id).toBe(task.taskId);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。