From b343dddbf6689b6d77a8833cfcb2576ba93258b9 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 2 Oct 2026 16:08:09 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B8=85=E7=90=86=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E6=96=87=E6=A1=A3,CHANGELOG=20=E8=A1=A5=E9=BD=90=200.3.8?= =?UTF-8?q?=E2=80=930.3.14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 docs/plan 下 00–18 的计划、评审、验收、发布记录与升级证据,docs/spikes 与 spikes 验证代码 (保留 spikes/movieclaw-src 本地克隆),以及 4 份一次性审查 / 调研;全部可在 ceb66f8 查到 - MP 对照移到 docs/porting/moviepilot-v3-comparison.md;经验教训改为 docs/plan/lessons.md(补第 25 条) - docs/plan/README.md:文档放哪、当前状态、待办 - 引用改写:代码注释指向在维护的文档,其余注明已删除与 git 位置;清掉原有 6 个失效链接 - README 开头改为当前状态与入口;CHANGELOG 补齐 0.3.8–0.3.14 与工程变更 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 72 ++++++++++++++++--- README.md | 27 ++----- .../services/subscriptions.ts | 2 +- apps/server/src/modules/file-manager/index.ts | 2 +- apps/web/app/api/files.ts | 2 +- apps/web/app/components/console/nav.ts | 2 +- docs/adr/ADR-001-runtime-node-not-deno.md | 2 +- docs/adr/ADR-002-task-engine.md | 2 +- docs/adr/ADR-003-pi-integration.md | 4 +- docs/adr/ADR-004-deno-runtime.md | 2 +- docs/design/browser-provider.md | 2 +- docs/design/console-ia.md | 4 +- docs/design/file-manager-v2.md | 2 +- docs/design/interface-materials.md | 2 +- docs/design/naming-template.md | 2 +- .../openworkflow-dashboard-reference.md | 2 +- docs/design/pi-providers.md | 2 +- docs/design/site-center.md | 2 +- docs/design/subscriptions.md | 4 +- docs/design/ui-controls.md | 6 +- docs/design/webtop-remote-browser.md | 2 +- docs/plan/README.md | 36 ++++++++++ docs/plan/lessons.md | 3 + docs/porting/license-and-provenance.md | 2 +- docs/porting/moviepilot-filemanager.md | 2 +- docs/porting/moviepilot-subscribe.md | 2 +- docs/porting/moviepilot-transfer.md | 2 +- docs/porting/moviepilot-v3-comparison.md | 14 ++-- docs/runbook/browser.md | 6 +- docs/runbook/files.md | 2 +- docs/runbook/organize.md | 4 +- docs/runbook/subscriptions.md | 4 +- packages/contracts/src/api.ts | 2 +- packages/contracts/src/files.ts | 2 +- packages/db/migrations/0024_trash.ts | 2 +- .../db/migrations/0025_subscription_units.ts | 2 +- 36 files changed, 156 insertions(+), 76 deletions(-) create mode 100644 docs/plan/README.md diff --git a/CHANGELOG.md b/CHANGELOG.md index ee215e0e..422b87ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,60 @@ ## [Unreleased] +### 工程 +- `deno task test:all`:逐包跑完再汇总,连不上测试库直接失败(不再让数据库用例静默跳过);`deno task ci` 改用它。 +- `deno task dev:up`:起开发库并迁移到最新。开发 API 端口改为 4390(4380 留给本机部署版)。 +- `deno task release`(`scripts/release.sh`):要求工作区干净与 CHANGELOG 条目,打 tag、构建、只替换 app、核对健康版本。 + +## [0.3.14] - 2026-10-02 + +v0.3.8~v0.3.13 当时由未提交的工作区构建部署,源码在本版统一提交(`ceb66f8`)。各版细节见 `18-organize-release`(已删除,见 git `ceb66f8`)。 + +### 新增 +- 原地入库:已登记媒体库内的文件保留位置与名称登记为资产(视频、字幕、季集覆盖、版本),不复制 / 移动;可选只刮削本次成功的主视频。迁移 `0061_organize_in_place`。 + +### 修复 +- 识别升级链只在结果更确定时采用,不再用无匹配顶替原有歧义候选(歧义事项照常开)。 +- 刮削入队:重放去重时不再返回已删除的记录;任务已入队但关联写回失败时保持排队,由处理器补关联。 +- `bluray_dir` 资产以原盘目录本身为刮削根。 +- 通知铃铛弹层与用户菜单统一样式;站点卡片共用卡头、底栏贴底,分页不贴卡片。 + +## [0.3.13] - 2026-10-02 + +### 变更 +- 手动、文件管理、下载详情、历史重整共用一个整理弹窗(电影 / 剧集、TMDB 搜索或 ID、来源配置、复制 / 移动、目标路径、本次刮削、预览),只「加入整理队列」。整理页分队列与记录。 +- 成功历史跳过对齐 MP;成功移动的记录从媒体库目标重整。 + +## [0.3.12] - 2026-10-02 + +### 新增 +- 列表统一分页(10 / 20 / 50 / 100 条,默认 50,记住选择;游标接口按需拉取)。 +- 搜索历史(按账号保存最近 30 个关键词,搜索页与 Ctrl / ⌘ K 共用)。 +- 首页存储与下载器概况卡。 + +## [0.3.11] - 2026-10-01 + +### 新增 +- 搜索结果标题可点开资源详情抽屉(与站点工作台同一实现),关闭后保留搜索词、筛选与分页。 + +### 修复 +- 原站视图桌面窗口未最大化导致的上下黑边(浏览器镜像 `1.18.0-umt.1`)。 + +## [0.3.10] - 2026-10-01 + +### 新增 +- 独立手动下载、串流外详情页资源下载;TMDB / Local 元数据兜底(`metadata.resolve_organize`);正常多版本与一次性洗版。迁移 `0060_manual_acquisition`。 + +## [0.3.9] - 2026-10-01 + +### 新增 +- 分类规则、整理来源与持久目录快照、手动存量整理、文件管理整理入口。迁移 `0059_organize_source_snapshot`。 + +## [0.3.8] - 2026-10-01 + +### 变更 +- 全面依赖升级:workspace 直接依赖到当时 latest(Router 8、Vite 8、TypeScript 7 等)、camofox 1.18.0 / Node 24、PostgreSQL 16 → 18.6、备份客户端 18.6、演示 qB 5.2.4。见 `17-full-upgrade`(已删除,见 git `ceb66f8`)。 + ## [0.3.7] - 2026-10-01 ### 新增(HIS-1 整理记录对齐 MP 历史记录页) @@ -156,7 +210,7 @@ - 搜索快速筛选(SEARCH-3 / POLISH-1):搜索结果与站点资源列表共用一行多选筛选——分辨率、编码、版本、站点、促销、HDR、H&R、制作组、季 / 集,选项带计数,同维度"或"、跨维度"且",记住上次选择;`qf` 参数见 `docs/runbook/search.md`。 - 入库版本可见(LIBV-1):作品详情每集显示入库版本规格(分辨率 · 来源 · 编码 · HDR · 制作组 · 大小),一集多个版本并列;季 / 作品汇总;配了收录版本时标出符合 / 缺失 / 可升级;`GET /library/{id}/versions`;旧文件规格回填脚本(缺省只读)。 - 下载面板(DL-2):总速度、每个种子的 ↓/↑ 速度与剩余时间;「进行中 / 已完成」分段,默认进行中;已完成显示分享率与整理结果;`GET /download-tasks/board`。 -- 文件管理(FM-2):宽布局,目录树贴左、可拖宽、可收起;预览文本 / NFO(GBK、UTF-16 自动识别)、字幕前 200 行、.torrent 文件列表(隐藏 passkey)、图片;调研见 `docs/design/file-preview-research.md`。 +- 文件管理(FM-2):宽布局,目录树贴左、可拖宽、可收起;预览文本 / NFO(GBK、UTF-16 自动识别)、字幕前 200 行、.torrent 文件列表(隐藏 passkey)、图片;调研见 `file-preview-research`(已删除,见 git `ceb66f8`)。 - 种子详情可读(DETAIL-1):简介拆成信息块与正文,MediaInfo / BDInfo 转规格概要,截图画廊,文件清单目录树;旧缓存现算,不重抓。 - qB 兼容(QB-1):qB 5.0–5.2 登录(200 / 204、Cookie 名取自响应),认证方式可选账号密码 / API Key / 不认证;接管任务按文件名与种子名识别,识别不出建带候选的待处理;冲突可选替换 / 保留两者 / 跳过;下载历史(迁移 0054)。 - 数据整理(DH-1):full 刷新含季 0(`metadata.includeSpecials`,缺省开);对上 TMDB 结构的临时单元转正式(迁移 0053);重复单元合并(`identity-cleanup.ts --merge-duplicates`,缺省只读),懒建加锁。 @@ -200,7 +254,7 @@ ### 已知限制 -需求逐条覆盖见 `docs/plan/11-requirements-coverage.md`:当前相当于 REQ 的 M0 大部分 + M1(仅 mock 环境)+ M2 约三分之一。 +需求逐条覆盖见 `11-requirements-coverage`(已删除,见 git `ceb66f8`):当前相当于 REQ 的 M0 大部分 + M1(仅 mock 环境)+ M2 约三分之一。 - 综艺只识别内容类型与上 / 下分段,不计算正片覆盖,也没有节目级附加内容策略。 - `require_distinct_asset` 只保存设置,同一个文件仍可同时满足两个版本目标。 @@ -249,7 +303,7 @@ ## [0.2.0] - 2026-09-28 -Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任务看板、全站文案第二轮审校;W9 与前端波补上站点中心、订阅重做、统一规则、命名模板、全局搜索、文件管理 v2 与统一任务页。基线见 `docs/plan/08-v0.2-closeout.md`(W8-A 与"W10 集成记录")、`docs/plan/09-visual-qa.md`、`docs/design/{console-ia,site-center,subscriptions,naming-template,file-manager-v2,pi-providers,agent-ui-reference}.md`、`docs/runbook/{schedules,agent,sites,rules}.md`。 +Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任务看板、全站文案第二轮审校;W9 与前端波补上站点中心、订阅重做、统一规则、命名模板、全局搜索、文件管理 v2 与统一任务页。基线见 `08-v0.2-closeout`(已删除,见 git `ceb66f8`)(W8-A 与"W10 集成记录")、`09-visual-qa`(已删除,见 git `ceb66f8`)、`docs/design/{console-ia,site-center,subscriptions,naming-template,file-manager-v2,pi-providers,agent-ui-reference}.md`、`docs/runbook/{schedules,agent,sites,rules}.md`。 ### Agent @@ -348,7 +402,7 @@ Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任 - 设置页深链改用分区 hash 定位,不再依赖 `?tab=` 查询参数(旧链接仍可打开,经重定向落到新分区)。 - Agent 汇报的下载任务链接直接指向下载详情页,不再先探测业务任务详情再判断是否为下载任务。 - 生产容器静态 ffprobe 升级到 9.0.2;`.gitignore` 忽略 compose override 文件。 -- 视觉走查 17 项(`docs/plan/09-visual-qa.md`):改密时旧密码错误不再被踢回登录页;预览失败时不能再执行整理;手机上 Feed 表不再把操作列挤出屏幕;操作者、原因、用途等不再显示内部 id 与英文代码。 +- 视觉走查 17 项(`09-visual-qa`(已删除,见 git `ceb66f8`)):改密时旧密码错误不再被踢回登录页;预览失败时不能再执行整理;手机上 Feed 表不再把操作列挤出屏幕;操作者、原因、用途等不再显示内部 id 与英文代码。 - 手动整理成功入库后,处于"需处理"的版本目标回到核验,再按实际入库资产落定;同一下载任务的整理冲突事项自动关闭。 - 自定义 Base URL 的 Agent 上游"测试"不再把状态改成可用,提示用"最小补全"确认端点可达。 - 新作品首次下载的计划用途记为"补缺",不再是"升级"。 @@ -359,7 +413,7 @@ Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任 ### 已知限制 -完整清单见 `docs/plan/08-v0.2-closeout.md`"仍遗留"节。 +完整清单见 `08-v0.2-closeout`(已删除,见 git `ceb66f8`)"仍遗留"节。 - 41 个 provider 里只有 fake 与 OpenAI 兼容本地端点有自动化覆盖;8 种订阅登录只测了 fake 的 OAuth 状态机;Codex `_randomBytes` 在 Deno 下的行为待 spike(`docs/design/pi-providers.md`)。 - `agent.spawn {await:true}` 仍在进程内轮询等待,占 worker 槽到超时;要挂起需要和 `agent.await` 相同的关闭会话 + 重放机制,但 spawn 是 replay=never,重放会得到"结果未知",需另行设计。 @@ -378,7 +432,7 @@ Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任 ## [0.1.0] - 2026-09-28 -第一个可用版本:REQ v0.7 的 M0 + M1 纵切。全链路在没有真实 PT 账号的情况下用 mock(RSS / 站点 / TMDB / qBittorrent / Emby)验证。范围与验收依据见 `docs/plan/00-first-version-plan.md` §3.1 和 `docs/plan/04-v0.1-acceptance.md`。 +第一个可用版本:REQ v0.7 的 M0 + M1 纵切。全链路在没有真实 PT 账号的情况下用 mock(RSS / 站点 / TMDB / qBittorrent / Emby)验证。范围与验收依据见 `00-first-version-plan`(已删除,见 git `ceb66f8`) §3.1 和 `04-v0.1-acceptance`(已删除,见 git `ceb66f8`)。 ### W0 底座 @@ -430,7 +484,7 @@ Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任 - 前端:目录树、虚拟滚动网格、面包屑、排序与 glob 搜索、多选 / 右键菜单 / 拖拽后 dryRun 预览、键盘操作(F2 / Del / Shift 区间 / Ctrl+A)、离线与空态、移动端布局;改名 / 移动 / 复制 / 删除对话框,4 步整理向导(未决项挡住下一步),回收站页;SSE `files.changed` 触发刷新。`?mock=1` 内存后端只在 DEV 构建生效。 - 运行手册 `docs/runbook/files.md`。 -### 订阅增强(对照 MoviePilot,`docs/plan/05-subscription-gap.md`) +### 订阅增强(对照 MoviePilot,`05-subscription-gap`(已删除,见 git `ceb66f8`)) - 总集数账本:季单元记录 `episode_total` 及来源 / 锁定 / 时间(迁移 0025);`resolveEpisodeTotal` 只增不减,TMDB 回退时以已覆盖的最大集号为下限,手动值可锁定。 - 完成判定按账本:总集数未知时不结束并记疑似缺集;`pending`(元数据未就绪)的订阅可搜可评估但不会完成;once 与持续订阅的当季完成都写 `subscription_history`。 @@ -469,7 +523,7 @@ Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任 - 完成判定只保留 `applySlotEvent(verify_passed)` 一条路径,整理流程不再自行把订阅置为完成。 - server 测试分为并行的 unit 组和文件级串行的 pg 组,`packages/tasks` 同样串行;`deno task ci` 连续 3 次全绿(约 340–370 秒)。 -### 发布前安全修复(W6-B,`docs/plan/07-v0.1-final-review.md` §1.2) +### 发布前安全修复(W6-B,`07-v0.1-final-review`(已删除,见 git `ceb66f8`) §1.2) - 多源 Move 授权:`/files/move` 与 `/files/organize`(action=move)按**每个源**所属作品(声明作品 ∪ 源下已登记资产的作品)逐一核对持续授权,任一不覆盖整体 403 并列出未授权项;无法归属作品的源只接受一次性审批;organize 先整体预检,不会只执行一部分组。 - `GET /files/download`、`POST /files/trash/purge` 在注册表标 `auth:"session"`,由中间件统一只放行管理员会话(DEV key 与 admin scope 的 API Key 一律 403);永久删除同口径;`api-registry.test` 新增反向断言,未标 session 的端点不得对 admin scope 返回 403。 @@ -482,7 +536,7 @@ Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任 ### 已知限制 -完整清单与出处见 `docs/plan/07-v0.1-final-review.md` §8;范围外内容以 `docs/plan/00-first-version-plan.md` §3.2 与 §6 为准。 +完整清单与出处见 `07-v0.1-final-review`(已删除,见 git `ceb66f8`) §8;范围外内容以 `00-first-version-plan`(已删除,见 git `ceb66f8`) §3.2 与 §6 为准。 **范围外(00 §3.2 / 02 后置)** diff --git a/README.md b/README.md index 10c53a1b..70adf543 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,12 @@ # UHD Media Tool -内部使用、Agent 自动化优先的媒体整理入库平台。需求基线见 [media_automation_requirements_architecture_v0.7.md](media_automation_requirements_architecture_v0.7.md),v0.1 工程任务书见 [docs/plan/00-first-version-plan.md](docs/plan/00-first-version-plan.md)。 +内部使用、Agent 自动化优先的媒体整理入库平台。需求基线见 [media_automation_requirements_architecture_v0.7.md](media_automation_requirements_architecture_v0.7.md)。 -当前部署为 v0.3.13,媒体整理与手动下载入口见 [发布记录](docs/plan/18-organize-release.md)。依赖与容器升级见 [完整升级记录](docs/plan/17-full-upgrade.md);[开发情况基线](docs/plan/13-development-baseline.md) 保留升级前 v0.3.7 的证据,早期计划和验收表不作为当前完成度统计。恢复与验收调整见 [工程检查](docs/plan/14-engineering-review.md)。 - -逐项业务核对见 [MoviePilot v3 对照](docs/plan/15-moviepilot-v3-comparison.md):固定参考版本,按用户确认的需求实施。新一批独立手动下载、串流外详情页下载、TMDB/Local 元数据与一次性洗版已于 2026-10-01 部署为 v0.3.10;实现与验收见该文第 5.6 节,关联迁移 `0060`。 - -依赖、容器与运行程序的版本检查见 [依赖与程序版本报告](docs/plan/16-dependency-version-review.md):包含完整依赖清单、安全公告适用性、PG 18 迁移和 Pi 原生 MCP 的评估建议;本轮没有执行升级。 - -v0.3.13 将手动、文件管理、下载详情与历史重整统一为 MP 风格整理弹窗;支持电影/剧集、TMDB 搜索与 ID 定位、复制/移动、目标路径及本次刮削选项,仅加入后台整理队列。整理页分队列与记录,成功历史默认不跳过,成功移动后从目标重整;同时统一分页条数选择器并调整通知数字角标。 - -v0.3.14 已补充原地入库代码与迁移,保留路径/文件名,可选就地刮削;当前会话受权限限制尚未部署,生产仍为上述 v0.3.13。见 [发布记录](docs/plan/18-organize-release.md)。 +当前版本 v0.3.14,本机测试环境已部署;各版变化见 [CHANGELOG.md](CHANGELOG.md)。业务逻辑以 MoviePilot v3 为参考,逐项对照见 [MoviePilot v3 对照](docs/porting/moviepilot-v3-comparison.md)。正在推进的计划与待办见 [docs/plan](docs/plan/README.md),开发与发布约定见 [CLAUDE.md](CLAUDE.md)。 ## 功能 -已实现(有自动化回归及部分真实环境 / 脱敏样本记录,四站与真实下载、媒体服务器的完整验收尚未完成;验证边界见 [开发情况基线](docs/plan/13-development-baseline.md)): +已实现(有自动化回归及部分真实环境 / 脱敏样本记录,四站与真实下载、媒体服务器的完整验收尚未完成): - 来源:多 RSS(条件请求、重叠窗口、多层去重、补漏)、站点中心(观众 / 馒头 / HHClub / CHD 等 23 个站点定义,凭证、账号数据、健康检查)、站点快照与实时补查、全局搜索。 - 识别:MP 对齐的标题解析、TMDB + 本地别名召回、本地实体优先、临时季集单元、待识别池、人工纠错与字段锁。 @@ -35,13 +27,12 @@ v0.3.14 已补充原地入库代码与迁移,保留路径/文件名,可选 ```sh cp .env.example .env -deno task db:up # postgres:18.6-alpine,端口 55433 deno install # 按 deno.lock 安装依赖到 node_modules -deno task db:migrate -deno task dev # API http://localhost:4380 控制台 http://localhost:5180 +deno task dev:up # 开发库 postgres:18.6(端口 55433)+ 迁移到最新;拉代码后也跑一次 +deno task dev # API http://localhost:4390 控制台 http://localhost:5180 ``` -提交前:`deno task ci`(typecheck:tsc 7.0.2 + deno check → biome → vitest → check:tokens → check:copy → web 构建 + server 编译 → check:binary)。 +提交前:`deno task ci`(typecheck:tsc 7.0.2 + deno check → biome → test:all(逐包跑完汇总,要求测试库可连)→ check:tokens → check:copy → web 构建 + server 编译 → check:binary)。 ### 前端冒烟(`deno task test:web:smoke`) @@ -93,10 +84,6 @@ docker compose --env-file .env.deploy exec app umt backup # 备份 | `config/` | tsc 7 用的 tsconfig 基座(根目录不放 tsconfig.json,否则 `deno check` 丢 Deno 全局) | | `docker/` | 容器入口脚本、compose 环境变量示例 | | `scripts/` | 备份 / 恢复脚本(镜像内 `/app/scripts/`) | -| `spikes/` | 独立兼容性验证(不属于 workspace) | +| `spikes/movieclaw-src/` | MovieClaw 只读源码克隆(不进 git;`scripts/mp-sync/movieclaw-import.mjs` 导入站点定义用) | 技术选型:Deno 2.9.7(锁定)+ TypeScript 7.0.2 strict,deno.json workspace(`nodeModulesDir: auto`,npm 依赖版本统一登记在根 `deno.json` 的 `imports`,`deno.lock` 锁定)。前端 Vite 8 + React Router 8 由 Deno 执行。决策见 [ADR-004](docs/adr/ADR-004-deno-runtime.md)(取代 ADR-001)。 - -首页现展示存储和下载器概况,记录列表统一支持每页条数和翻页,搜索页与快捷搜索共用历史,右上角通知与控制台样式一致,见 [v0.3.12 发布记录](docs/plan/18-organize-release.md#v0312-列表分页搜索历史与首页概况)。 - -源站视图上下黑边与搜索资源详情入口已在 v0.3.11 发布中修复:浏览器窗口自动铺满桌面,搜索结果标题打开同一站点详情抽屉,见 [发布记录](docs/plan/18-organize-release.md#v0311-搜索详情与桌面黑边修复)。 diff --git a/apps/server/src/modules/acquisition-organize/services/subscriptions.ts b/apps/server/src/modules/acquisition-organize/services/subscriptions.ts index 25577a09..4e795fac 100644 --- a/apps/server/src/modules/acquisition-organize/services/subscriptions.ts +++ b/apps/server/src/modules/acquisition-organize/services/subscriptions.ts @@ -19,7 +19,7 @@ import { errMessage, jsonb, toApi } from "../util.ts"; import { type AoDeps, type Exec, upsertDecision } from "./common.ts"; // W5-C 订阅业务:季总集数账本、缺集/在途、完成判定与历史、Slot 重评调度、分集质量账本、主动搜索调度。 -// 对照 docs/porting/moviepilot-subscribe.md §3/§7/§8/§9;差距清单 docs/plan/05-subscription-gap.md。 +// 对照 docs/porting/moviepilot-subscribe.md §3/§7/§8/§9。 /** 在途计划状态(等价 MP note:提交成功即计入,失败/移除释放) */ export const INFLIGHT_PLAN_STATUSES = ["reserved", "submitted"] as const; diff --git a/apps/server/src/modules/file-manager/index.ts b/apps/server/src/modules/file-manager/index.ts index 0f99f2dd..b3d9e1b2 100644 --- a/apps/server/src/modules/file-manager/index.ts +++ b/apps/server/src/modules/file-manager/index.ts @@ -16,7 +16,7 @@ import { queueDueSourceScans, scanOrganizeSource } from "./source-monitor.ts"; import { purgeTrash } from "./trash.ts"; /** - * W5-A 文件管理(/files,docs/plan/06-file-manager-spec.md):只浏览已登记根(库根 + 下载器路径映射), + * W5-A 文件管理(/files,docs/runbook/files.md):只浏览已登记根(库根 + 下载器路径映射), * 行内业务状态、改名同步资产与路径绑定修订、移动/复制两段式 planId、整理走 planImport、回收站 + 引用检查、识别/探测/刮削。 * 复用 acquisition-organize 的服务导出(planImport / 路径守卫 / Move 授权 / H&R),不改其文件。 * 持久任务 purgeTrash:每日清理过期回收站项(FILES_TRASH_RETENTION_DAYS,默认 7 天);周期登记为定时任务 trash.purge。 diff --git a/apps/web/app/api/files.ts b/apps/web/app/api/files.ts index c6b9ede2..9fdf076b 100644 --- a/apps/web/app/api/files.ts +++ b/apps/web/app/api/files.ts @@ -53,7 +53,7 @@ import type { z } from "zod"; import type { FetcherArg } from "~/lib/api.ts"; import { ApiRequestError, apiParsed } from "./parse.ts"; -// 文件管理(W5-A:/files*;规格 docs/plan/06-file-manager-spec.md §2,形状取 contracts/files.ts)。 +// 文件管理(W5-A:/files*;说明 docs/runbook/files.md,形状取 contracts/files.ts)。 // ?mock=1 只在开发构建生效:不连后端,用 components/files/mock.ts 的内存文件树演示交互。 export type { diff --git a/apps/web/app/components/console/nav.ts b/apps/web/app/components/console/nav.ts index c4240bfb..b547729f 100644 --- a/apps/web/app/components/console/nav.ts +++ b/apps/web/app/components/console/nav.ts @@ -39,7 +39,7 @@ export function consolePath(...segments: (string | number)[]): string { export const ACQUIRE_GROUP_TITLE = "获取"; /** - * 侧栏 4 组 14 项(IA-2,docs/plan/00-first-version-plan.md 末尾 IA-2 条目):概览 → 获取 → 整理 → 系统。 + * 侧栏 4 组 14 项(IA-2,docs/design/console-ia.md):概览 → 获取 → 整理 → 系统。 * 任务归系统;RSS 属于站点(站点详情的 RSS Tab),不再单独占一项。 * 待处理不进侧栏,由顶栏收件箱打开;移动端抽屉用同一份表。 */ diff --git a/docs/adr/ADR-001-runtime-node-not-deno.md b/docs/adr/ADR-001-runtime-node-not-deno.md index adb19e40..8f09df0c 100644 --- a/docs/adr/ADR-001-runtime-node-not-deno.md +++ b/docs/adr/ADR-001-runtime-node-not-deno.md @@ -3,7 +3,7 @@ > **Superseded by [ADR-004](ADR-004-deno-runtime.md)**(2026-09-27,W1.5 已迁移到 Deno 2.9.7 + TypeScript 7.0.2)。以下内容仅作历史记录。 - 状态:已被 ADR-004 取代(2026-09-27);原状态:已采纳(2026-09-27) -- 关联:REQ §9(技术架构选择)、docs/plan/00-first-version-plan.md §1 +- 关联:REQ §9(技术架构选择)、`00-first-version-plan`(已删除,见 git `ceb66f8`) §1 ## 背景 diff --git a/docs/adr/ADR-002-task-engine.md b/docs/adr/ADR-002-task-engine.md index b18dd37a..a21ba53a 100644 --- a/docs/adr/ADR-002-task-engine.md +++ b/docs/adr/ADR-002-task-engine.md @@ -1,7 +1,7 @@ # ADR-002:持久任务引擎采用 OpenWorkflow 0.10.1(锁版本),封装在 `TaskEngine` 端口之后 - 状态:已采纳(2026-09-27,W0-B spike 后) -- 关联:REQ §11、docs/plan/00-first-version-plan.md §1 与 §3.1-8、验证记录 `docs/spikes/w0b-openworkflow.md`、代码 `spikes/openworkflow/` +- 关联:REQ §11、`00-first-version-plan`(已删除,见 git `ceb66f8`) §1 与 §3.1-8、验证记录 spike `w0b-openworkflow`(已删除,见 git `ceb66f8`)、代码 `spikes/openworkflow/`(已删除,见 git `ceb66f8`) ## 决定 diff --git a/docs/adr/ADR-003-pi-integration.md b/docs/adr/ADR-003-pi-integration.md index e967c9f8..697009c1 100644 --- a/docs/adr/ADR-003-pi-integration.md +++ b/docs/adr/ADR-003-pi-integration.md @@ -1,7 +1,7 @@ # ADR-003:Pi 接入采用 pi-agent-core `AgentHarness`,封装在 `AgentRuntimePort` 之后 - 状态:已采纳(2026-09-27,W0-B spike 后) -- 关联:REQ §10、§11.4;plan §1、§3.1-9;验证记录 `docs/spikes/w0b-pi.md`;代码 `spikes/pi/` +- 关联:REQ §10、§11.4;plan §1、§3.1-9;验证记录 spike `w0b-pi`(已删除,见 git `ceb66f8`);代码 `spikes/pi/`(已删除,见 git `ceb66f8`) ## 决定 @@ -86,7 +86,7 @@ faux.setResponses([ ## 已知限制 -- 0.x 版本,存储格式 4 仍是 WIP,可能原地改变。锁精确版本,升级前重跑 `spikes/pi`。 +- 0.x 版本,存储格式 4 仍是 WIP,可能原地改变。锁精确版本,升级后跑 agent 与 server 的 Pi 相关测试(`deno task test:all`)。 - 没有子代理,没有 PG 会话存储,`watchSession` 未实现。 - Pi 不提供权限系统(REQ §10.2)。进程、容器、网络白名单要在部署层落实。 - 模型流中途崩溃后按"合成 error + 重试"恢复,只读了规范,未实测;v0.1 的 e2e 要补上。 diff --git a/docs/adr/ADR-004-deno-runtime.md b/docs/adr/ADR-004-deno-runtime.md index 5d25d6fd..b9162dd8 100644 --- a/docs/adr/ADR-004-deno-runtime.md +++ b/docs/adr/ADR-004-deno-runtime.md @@ -1,7 +1,7 @@ # ADR-004:运行时切换为 Deno 2.9.7(锁定)+ TypeScript 7.0.2 - 状态:提议(2026-09-27,Deno 准入 spike 完成后)。采纳后替代 ADR-001,ADR-001 的状态措辞由协调者修改。 -- 关联:REQ §9、§10.2;plan §1;验证记录 `docs/spikes/deno-2.9.7.md`;代码 `spikes/deno/` +- 关联:REQ §9、§10.2;plan §1;验证记录 spike `deno-2.9.7`(已删除,见 git `ceb66f8`);代码 `spikes/deno/`(已删除,见 git `ceb66f8`) ## 背景 diff --git a/docs/design/browser-provider.md b/docs/design/browser-provider.md index 6f43f693..2718bf50 100644 --- a/docs/design/browser-provider.md +++ b/docs/design/browser-provider.md @@ -1,6 +1,6 @@ # BrowserProvider 合同与 camofox-browser 适配 -对应 REQ v0.7 §4.4、§4.7.2–4.7.4、§12.1 浏览器实体、附录 S18–S20;计划 `docs/plan/00-first-version-plan.md` §3.2:v0.1 只落接口,浏览器接入与原站视图在 M2。 +对应 REQ v0.7 §4.4、§4.7.2–4.7.4、§12.1 浏览器实体、附录 S18–S20;计划 `00-first-version-plan`(已删除,见 git `ceb66f8`) §3.2:v0.1 只落接口,浏览器接入与原站视图在 M2。 代码位置: diff --git a/docs/design/console-ia.md b/docs/design/console-ia.md index cde633b4..13a2e33c 100644 --- a/docs/design/console-ia.md +++ b/docs/design/console-ia.md @@ -265,7 +265,7 @@ ### 6.4 遗留 -- ~~"没有匹配 / 查询失败"的待识别资源不生成待处理事项~~:W8-A 已为这两类开 `identity_unresolved` 事项(手动指定 TMDB ID / 选本地作品 / 忽略),见 `docs/plan/08-v0.2-closeout.md`。 +- ~~"没有匹配 / 查询失败"的待识别资源不生成待处理事项~~:W8-A 已为这两类开 `identity_unresolved` 事项(手动指定 TMDB ID / 选本地作品 / 忽略),见 `08-v0.2-closeout`(已删除,见 git `ceb66f8`)。 - ~~`agent-conversation.tsx` 仍链到 `/console/tasks/:下载任务ID`~~:W8-A 已改为 `/console/downloads/:id`。 - `components/agent/quick-goals.ts` 里的"待识别池"文案(W7-B 范围)。 - 原站视图仍是占位。 @@ -291,7 +291,7 @@ ## 7. IA-3 已实施对照(FE-1,2026-09-28) -依据 `docs/plan/00-first-version-plan.md` §8"IA-3 最终定稿"。定稿文字写"共 12 项",逐项清单是 14 项,按清单实施。 +依据 `00-first-version-plan`(已删除,见 git `ceb66f8`) §8"IA-3 最终定稿"。定稿文字写"共 12 项",逐项清单是 14 项,按清单实施。 ### 7.1 侧栏(`components/console/nav.ts`,5 组 14 项) diff --git a/docs/design/file-manager-v2.md b/docs/design/file-manager-v2.md index a50eb8a3..a36062c0 100644 --- a/docs/design/file-manager-v2.md +++ b/docs/design/file-manager-v2.md @@ -1,6 +1,6 @@ # 文件管理 v2(对照 MP 逐功能 + 按我们的逻辑重整前端) -> 基础:`docs/plan/06-file-manager-spec.md`(下称"规格 06",后端 17 个 `/files` 端点已实现);行为账本 `docs/porting/moviepilot-filemanager.md`(痛点 P1–P12)。 +> 基础:`06-file-manager-spec`(已删除,见 git `ceb66f8`)(下称"规格 06",后端 17 个 `/files` 端点已实现);行为账本 `docs/porting/moviepilot-filemanager.md`(痛点 P1–P12)。 > 上游:MoviePilot-Frontend `17b9d51` —— `views/reorganize/FileBrowserView.vue`、`components/filebrowser/{FileBrowser,FileToolbar,FileNavigator,FileList}.vue`、`components/dialog/{ReorganizeDialog,FileRenameDialog,ScrapeDialog,MediaInfoDialog,FileNewFolderDialog,ProgressDialog}.vue`、`cards/MediaInfoCard.vue`、`cards/DirectoryCard.vue`(覆盖模式)、`locales/zh-CN.ts`。只参考行为,不抄源码/模板/文案(GPLv3)。 > 本文只改前端信息架构与交互,加少量后端缺口(§15)。IA-3 已取消"身份与元数据"页,这直接影响整理向导(§6.1)。 diff --git a/docs/design/interface-materials.md b/docs/design/interface-materials.md index 720aced8..42f9d1a8 100644 --- a/docs/design/interface-materials.md +++ b/docs/design/interface-materials.md @@ -101,4 +101,4 @@ - 侧栏的选中项由滑块(`seg-thumb`)承担主要形态,导航文字与 hover 保持清晰;分组展开、滚动和路由变化都会影响滑块位置。 - 改支付界面的样式时,要覆盖确认、二维码、错误与返回路径。套餐的优惠金额从价格推导,不写死。交易摘要用现有的 RemarkText 展示,不为排版改写后端摘要的含义。 -主动使用 Taste 的触发条件和项目适配见[前端规范](../architecture.md)。 +主动使用 Taste 的触发条件和项目适配见前端规范。 diff --git a/docs/design/naming-template.md b/docs/design/naming-template.md index 66cfbe2d..963edf1f 100644 --- a/docs/design/naming-template.md +++ b/docs/design/naming-template.md @@ -1,6 +1,6 @@ # 整理命名模板(对标 MoviePilot 重命名格式) -> 需求来源:`docs/plan/00-first-version-plan.md` §8 第 5 条。行为对照:`docs/porting/moviepilot-transfer.md` §2.4。上游 `jxxghp/MoviePilot` v3 @ `e6820a8`,只记录行为,不复制源码(GPLv3)。 +> 需求来源:`00-first-version-plan`(已删除,见 git `ceb66f8`) §8 第 5 条。行为对照:`docs/porting/moviepilot-transfer.md` §2.4。上游 `jxxghp/MoviePilot` v3 @ `e6820a8`,只记录行为,不复制源码(GPLv3)。 > 现状:`packages/domain/src/path/{template,binding,sanitize}.ts`。模板语法是自研的 `{var}` + `[[可选段]]`;模板集 `DEFAULT_TEMPLATES` 在 `services/organize.ts:434` 写死,没有设置项、没有预览,变量只有 16 个,名字和 MP 对不上。 ## 1. MP 怎么做(结论) diff --git a/docs/design/openworkflow-dashboard-reference.md b/docs/design/openworkflow-dashboard-reference.md index 91123957..22cdf995 100644 --- a/docs/design/openworkflow-dashboard-reference.md +++ b/docs/design/openworkflow-dashboard-reference.md @@ -1,7 +1,7 @@ # OpenWorkflow 面板调研 → `/console/engine` 复刻方案 - 调研对象:本机锁定版本 `openworkflow@0.10.1`(`spikes/openworkflow/node_modules/openworkflow`,`node_modules/.pnpm/openworkflow@0.10.1*`)+ GitHub `openworkflowdev/openworkflow`(main 分支源码,含 `apps/dashboard`、`apps/cli`)+ `npm view`。 -- 关联:ADR-002(`docs/adr/ADR-002-task-engine.md`)、`docs/spikes/w0b-openworkflow.md`。 +- 关联:ADR-002(`docs/adr/ADR-002-task-engine.md`)、spike 记录 `w0b-openworkflow`(已删除,见 git `ceb66f8`)。 - 结论先说:**核心库(Apache-2.0)不含任何面板代码**;面板是两个独立、**无开源许可**的 npm 包;面板架构极简(2 个页面、无 workers 表、无鉴权、无手动重试原语);我们要做的是"参考信息架构 + 直连同一份 schema + 用自己的组件重写",不是"抄源码"。 ## 1. 面板怎么来的、技术栈、鉴权现状 diff --git a/docs/design/pi-providers.md b/docs/design/pi-providers.md index 849f2b2a..a6de1c04 100644 --- a/docs/design/pi-providers.md +++ b/docs/design/pi-providers.md @@ -1,6 +1,6 @@ # Pi 模型上游与订阅登录(pi-ai / pi-coding-agent 0.87.1) -> 2026-10-01 升级补充:当前接入目标已更新为 pi-agent-core/pi-ai 0.99.2,执行结果见 [全面升级记录](../plan/17-full-upgrade.md)。下文保留 0.87.1 的研究基线,不用历史计数验收新版。 +> 2026-10-01 升级补充:当前接入目标已更新为 pi-agent-core/pi-ai 0.99.2,执行结果见 全面升级记录(已删除,见 git `ceb66f8`)。下文保留 0.87.1 的研究基线,不用历史计数验收新版。 > > 新版实际目录为 42 个内置 provider(新增 TypeSafe 分类服务),合同和目录回归已同步;TypeSafe 没有 Agent 聊天模型,目录说明已标明。OAuth 共 9 个 provider:新增 `openai` 原生 Sign in with ChatGPT,浏览器流程与回调端口 1455;现有 `openai-codex` 仍保留 device/browser 两种模式。新版 `openai` 是动态注册的公开客户端流程,没有照搬旧 Codex 客户端身份提示。来源:[0.99.2 OpenAI provider](https://github.com/earendil-works/pi/blob/v0.99.2/packages/ai/src/providers/openai.ts)、[原生 ChatGPT OAuth](https://github.com/earendil-works/pi/blob/v0.99.2/packages/ai/src/auth/oauth/openai-chatgpt.ts)。 > diff --git a/docs/design/site-center.md b/docs/design/site-center.md index af63796e..47b5194f 100644 --- a/docs/design/site-center.md +++ b/docs/design/site-center.md @@ -1,6 +1,6 @@ # 站点中心与仪表盘调整(v0.2.1) -> 依据:`docs/plan/00-first-version-plan.md` §8(用户 2026-09-28 上午)。状态:待审阅。只读调研 + 规格,不含代码改动。 +> 依据:`00-first-version-plan`(已删除,见 git `ceb66f8`) §8(用户 2026-09-28 上午)。状态:待审阅。只读调研 + 规格,不含代码改动。 > 参考:MoviePilot v3(`/opt/moviepilot-plus/upstream`)、MovieClaw v0.27.0(`spikes/movieclaw-src/repo`)。 ## 1. 用户要求(原文要点) diff --git a/docs/design/subscriptions.md b/docs/design/subscriptions.md index 39b0e3c1..aa521183 100644 --- a/docs/design/subscriptions.md +++ b/docs/design/subscriptions.md @@ -1,7 +1,7 @@ # 订阅重做 + 规则页(对标 MoviePilot v3) -> 需求来源:`docs/plan/00-first-version-plan.md` §8 第 3、4 条(订阅重做、收录策略 + 偏好标签合一)。命名模板另见 `naming-template.md`。 -> 上游行为账本:`docs/porting/moviepilot-subscribe.md`;差距清单:`docs/plan/05-subscription-gap.md`;规则关键字核对:`docs/porting/mp-rust-logic-parity.md` §6。上游 `jxxghp/MoviePilot` v3 @ `e6820a8`,只记行为,不复制源码。 +> 需求来源:`00-first-version-plan`(已删除,见 git `ceb66f8`) §8 第 3、4 条(订阅重做、收录策略 + 偏好标签合一)。命名模板另见 `naming-template.md`。 +> 上游行为账本:`docs/porting/moviepilot-subscribe.md`;差距清单:`05-subscription-gap`(已删除,见 git `ceb66f8`);规则关键字核对:`docs/porting/mp-rust-logic-parity.md` §6。上游 `jxxghp/MoviePilot` v3 @ `e6820a8`,只记行为,不复制源码。 ## 0. MP 要点与我们的现状 diff --git a/docs/design/ui-controls.md b/docs/design/ui-controls.md index cffe448a..535bd1fd 100644 --- a/docs/design/ui-controls.md +++ b/docs/design/ui-controls.md @@ -20,7 +20,7 @@ 两边的底、边、字色、投影都引用 `--mat-pill-*`,改外观只改参数。调用处只给布局(宽度、高度、间距、定位),不改圆角、底色、边框、投影和字色;不是 `