refactor(core): 任务与模型协议治理 - 拆分服务职责并禁止已发起任务取消

This commit is contained in:
ddCat
2026-08-22 09:52:09 +08:00
parent 7418ddfa9c
commit 633560a5d8
91 changed files with 6380 additions and 4247 deletions

View File

@@ -37,20 +37,26 @@ describe("media fallback", () => {
});
describe("task cancellation policy", () => {
test("offers cancellation only while a task is queued", () => {
const shared = source("../src/pages/tasks/task-shared.tsx");
test("does not expose cancellation after a task is created", () => {
const list = source("../src/pages/tasks/task-list-row.tsx");
const grid = source("../src/pages/tasks/task-grid-card.tsx");
const page = source("../src/pages/tasks/index.tsx");
expect(shared).toContain('return task.status === "queued";');
expect(list).toContain("const isCancellable = isTaskCancellable(task);");
expect(list).toContain("{isCancellable ? (");
expect(grid).toContain("const isCancellable = isTaskCancellable(task);");
expect(grid).toContain("{isCancellable ? (");
expect(page).toContain('if (action === "cancel" && currentTask && !isTaskCancellable(currentTask))');
expect(page).toContain('message.warning("任务已开始生成,无法取消")');
expect(page).toContain('detailTask.provider === "dreamina-cli" && isTaskCancellable(detailTask)');
expect(page).not.toContain('detailTask.status === "queued" || detailTask.status === "running"');
expect(list).not.toContain("isTaskCancellable");
expect(list).not.toContain("取消任务");
expect(grid).not.toContain("isTaskCancellable");
expect(grid).not.toContain("取消任务");
expect(page).not.toContain("cancelGenerationTask");
expect(page).not.toContain('runAction(detailTask.id, "cancel")');
expect(page).toContain('if (task.status === "queued" || task.status === "running")');
expect(page).toContain("任务正在执行,不能删除本机记录");
});
test("batch stop only applies to items still waiting locally", () => {
const batches = source("../src/pages/canvas/use-canvas-generation-batches.ts");
expect(batches).toContain('item.status === "waiting" && !nodeById.get(item.nodeId)?.metadata?.taskId');
expect(batches).toContain('item.status === "waiting" && stoppableItems.some((candidate) => candidate.id === item.id)');
expect(batches).not.toContain('item.status === "waiting" || item.status === "submitting"');
});
});