feat(downloads): fold download plans into download panel (DL-3)

- Waiting plans (approval / disk space / automation off / queued) are
  active-segment rows on /download-tasks/board, merged by created_at,
  counted, with approve / cancel actions; ?plan= deep links and legacy
  /downloads/plans routes redirect to the panel
- Download detail shows "why this download" (source, purpose, replaced
  version, reasons); raw evaluation in tech info
- Failed / cancelled / expired plans appear in the entity download
  history; rejected / revoked / expired approvals close draft plans
- New GET /acquisition-plans/{id}/why, POST /acquisition-plans/{id}/cancel
- User-facing copy no longer says 下载计划; glossary updated

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-30 01:15:25 +08:00
1 parent c0522f2531
commit a9147e647d
50 files changed
+1535 -348

No files matched your search

+3 -3
View File
@@ -144,7 +144,7 @@ export const MCP_PROMPTS: readonly McpPromptDef[] = [
{
name: "acquire_title",
title: "收录一部作品",
description: "从查作品到生成下载计划;提交下载要有授权。",
description: "从查作品到准备下载;提交下载要有授权。",
arguments: [
{ name: "title", description: "作品标题", required: true },
{ name: "year", description: "年份(可选)", required: false },
@@ -154,8 +154,8 @@ export const MCP_PROMPTS: readonly McpPromptDef[] = [
`目标:收录「${a.title ?? ""}」${a.year ? `(${a.year})` : ""}。`,
"1. catalog__lookup 确认作品,拿不准时列出候选,不要猜;",
"2. release__search 找资源,release__inspect 看细节;",
"3. download__plan 生成下载计划并说明选择理由;",
"4. 有持续授权时再调用 download__submit;返回 unauthorized 就停下,给出计划 ID 等审批。",
"3. download__plan 准备下载(返回 planId)并说明选择理由;",
"4. 有持续授权时再调用 download__submit;返回 unauthorized 就停下,给出 planId 等审批。",
].join("\n"),
},
{