下载盘、页面验证、站点页、交给智能体、后台任务、提供方、凭证、其他、抓取间隔、 需要处理的事项、候选作品 / 匹配到多部作品、作品(不叫条目)、挂载点、下载中; 识别查询不再说「远端」,回收站与收录版本提示去掉公文腔;数据保留标签与设置页一致;同步断言。 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
135 lines
4.2 KiB
TypeScript
135 lines
4.2 KiB
TypeScript
import { z } from "zod";
|
|
import { Id, IdParam } from "../common.ts";
|
|
import * as board from "../download-board.ts";
|
|
import * as execution from "../execution.ts";
|
|
import { crud, ep, R } from "./shared.ts";
|
|
|
|
export const executionApi = {
|
|
// ── 执行 ──
|
|
tasks: {
|
|
...crud(
|
|
"/tasks",
|
|
"任务",
|
|
{
|
|
row: execution.Task,
|
|
filters: {
|
|
status: execution.TaskStatus.optional(),
|
|
kind: execution.TaskKind.optional(),
|
|
subjectId: Id.optional(),
|
|
},
|
|
},
|
|
R,
|
|
),
|
|
cancel: ep({
|
|
method: "post",
|
|
path: "/tasks/{id}/cancel",
|
|
scope: "organize.execute",
|
|
summary: "取消任务(停止未来步骤)",
|
|
params: IdParam,
|
|
body: execution.TaskCancelRequest,
|
|
response: execution.Task,
|
|
}),
|
|
retry: ep({
|
|
method: "post",
|
|
path: "/tasks/{id}/retry",
|
|
scope: "organize.execute",
|
|
summary: "重试失败任务",
|
|
params: IdParam,
|
|
response: execution.Task,
|
|
}),
|
|
operations: ep({
|
|
method: "get",
|
|
path: "/tasks/{id}/operations",
|
|
scope: "read",
|
|
summary: "任务的操作记录(业务时间线)",
|
|
params: IdParam,
|
|
response: z.object({ items: z.array(execution.AssetOperation) }),
|
|
}),
|
|
},
|
|
acquisitionPlans: {
|
|
...crud(
|
|
"/acquisition-plans",
|
|
"下载计划",
|
|
{
|
|
row: execution.AcquisitionPlan,
|
|
filters: { slotId: Id.optional(), status: execution.PlanStatus.optional() },
|
|
},
|
|
R,
|
|
),
|
|
create: ep({
|
|
method: "post",
|
|
path: "/acquisition-plans",
|
|
scope: "organize.execute",
|
|
summary: "独立手动下载:不要求订阅,支持未知资源确认、下载器与目录选择,以及本次正常整理或洗版",
|
|
body: execution.ManualAcquisitionRequest,
|
|
response: execution.ManualAcquisitionResult,
|
|
}),
|
|
savePaths: ep({
|
|
method: "get",
|
|
path: "/download-save-paths",
|
|
scope: "read",
|
|
summary: "手动下载可选的下载器与保存目录(默认保存目录 + 路径映射),以及「自动」会用哪个下载器",
|
|
query: execution.DownloadSavePathQuery,
|
|
response: execution.DownloadSavePaths,
|
|
}),
|
|
why: ep({
|
|
method: "get",
|
|
path: "/acquisition-plans/{id}/why",
|
|
scope: "read",
|
|
summary:
|
|
"下载的来由:来源(订阅 / 智能体会话 / 手动)、目的(补缺 / 升级 / 换源)、被替换的版本、选中理由要点与原始评估",
|
|
params: IdParam,
|
|
response: board.DownloadWhy,
|
|
}),
|
|
cancel: ep({
|
|
method: "post",
|
|
path: "/acquisition-plans/{id}/cancel",
|
|
scope: "organize.execute",
|
|
summary:
|
|
"取消还没提交到下载器的计划(等你批准 / 已预留):释放收录版本与预算预留;已有下载任务的返回 409。等你批准的计划用拒绝审批(拒绝后计划自动取消)",
|
|
params: IdParam,
|
|
response: execution.AcquisitionPlan,
|
|
}),
|
|
},
|
|
downloadTasks: {
|
|
...crud(
|
|
"/download-tasks",
|
|
"下载任务",
|
|
{
|
|
row: execution.DownloadTask,
|
|
filters: {
|
|
instanceId: Id.optional(),
|
|
status: execution.DownloadStatus.optional(),
|
|
managed: z.enum(["true", "false"]).optional(),
|
|
},
|
|
},
|
|
R,
|
|
),
|
|
board: ep({
|
|
method: "get",
|
|
path: "/download-tasks/board",
|
|
scope: "read",
|
|
summary:
|
|
"下载面板:按进行中 / 已完成分组列出下载任务(进行中含还没提交、在等批准或下载盘空间的计划,kind=plan),附每个种子的实时速度、剩余时间、连接数与下载器总速度(实时数据短时缓存)",
|
|
query: board.DownloadBoardQuery,
|
|
response: board.DownloadBoard,
|
|
}),
|
|
pause: ep({
|
|
method: "post",
|
|
path: "/download-tasks/{id}/pause",
|
|
scope: "organize.execute",
|
|
summary: "暂停(记为用户暂停,阈值恢复不会自动恢复)",
|
|
params: IdParam,
|
|
response: execution.DownloadTask,
|
|
}),
|
|
resume: ep({
|
|
method: "post",
|
|
path: "/download-tasks/{id}/resume",
|
|
scope: "organize.execute",
|
|
summary: "恢复下载",
|
|
params: IdParam,
|
|
response: execution.DownloadTask,
|
|
}),
|
|
},
|
|
} as const;
|