docs: 清理过程文档,CHANGELOG 补齐 0.3.8–0.3.14
- 删除 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 <[email protected]>
This commit is contained in:
1 parent
11ca2f01ff
commit
b343dddbf6
36 files changed
+156
-76
No files matched your search
+63
-9
@@ -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 后置)**
|
||||
|
||||
|
||||
@@ -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-搜索详情与桌面黑边修复)。
|
||||
@@ -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;
|
||||
|
||||
@@ -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。
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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),不再单独占一项。
|
||||
* 待处理不进侧栏,由顶栏收件箱打开;移动端抽屉用同一份表。
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
## 背景
|
||||
|
||||
|
||||
@@ -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`)
|
||||
|
||||
## 决定
|
||||
|
||||
|
||||
@@ -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 要补上。
|
||||
|
||||
@@ -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`)
|
||||
|
||||
## 背景
|
||||
|
||||
|
||||
@@ -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。
|
||||
|
||||
代码位置:
|
||||
|
||||
|
||||
@@ -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 项)
|
||||
|
||||
|
||||
@@ -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)。
|
||||
|
||||
|
||||
@@ -101,4 +101,4 @@
|
||||
- 侧栏的选中项由滑块(`seg-thumb`)承担主要形态,导航文字与 hover 保持清晰;分组展开、滚动和路由变化都会影响滑块位置。
|
||||
- 改支付界面的样式时,要覆盖确认、二维码、错误与返回路径。套餐的优惠金额从价格推导,不写死。交易摘要用现有的 RemarkText 展示,不为排版改写后端摘要的含义。
|
||||
|
||||
主动使用 Taste 的触发条件和项目适配见[前端规范](../architecture.md)。
|
||||
主动使用 Taste 的触发条件和项目适配见前端规范。
|
||||
@@ -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 怎么做(结论)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# OpenWorkflow 面板调研 → `/console/engine` 复刻方案
|
||||
|
||||
- 调研对象:本机锁定版本 `[email protected]`(`spikes/openworkflow/node_modules/openworkflow`,`node_modules/.pnpm/[email protected]*`)+ 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. 面板怎么来的、技术栈、鉴权现状
|
||||
|
||||
@@ -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)。
|
||||
>
|
||||
|
||||
@@ -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. 用户要求(原文要点)
|
||||
|
||||
@@ -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 要点与我们的现状
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
两边的底、边、字色、投影都引用 `--mat-pill-*`,改外观只改参数。调用处只给布局(宽度、高度、间距、定位),不改圆角、底色、边框、投影和字色;不是 `<button>` 的元素(`Link`、`a`)用 `buttonVariants()` 拿同一套类名。分段标签、菜单行、列表行不算按钮,按各自控件规范;分页当前页、角标、选中的季 / 集 / 选项、日历选中日用静态的 `pill-selected`,不借主按钮样式;分段控件(侧栏、SegmentedTabs、求片页的分段)的滑块用 `seg-thumb`。放胶囊或分段控件的横向滚动容器加 `scroll-bleed`:`overflow-x-auto` 会连带裁掉纵向溢出,不加的话胶囊的阴影和描边会被切成直边。
|
||||
|
||||
右上角账户模块全站共用 [`account-popover.tsx`](../../apps/web/app/components/account-popover.tsx):用户中心用头像 + 名字的胶囊,流媒体与测速用圆头像;菜单里是另外两块的跳转(当前所在的不列,流媒体与测速需有生效订阅)与退出登录。
|
||||
右上角账户模块全站共用 `account-popover.tsx`:用户中心用头像 + 名字的胶囊,流媒体与测速用圆头像;菜单里是另外两块的跳转(当前所在的不列,流媒体与测速需有生效订阅)与退出登录。
|
||||
|
||||
其余控件仍分两处实现:门户原语在 `app/components/ui/`(shadcn 语义 token),流媒体控件在 `app/routes/stream/_sub/`、`app/routes/stream/player/controls.tsx`(浏览页 `content` / `wash`,播放器 `on-media` 族)。需要相同行为时各自实现。
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
## 大写小标签
|
||||
|
||||
`SectionLabel`([section-label.tsx](../../apps/web/app/components/section-label.tsx)),三种口味:`portal`(门户表单字段名与分组,`text-xs font-semibold uppercase text-muted-foreground`)、`page`(浏览页,`text-label uppercase tracking-[0.18em] text-content-muted`)、`media`(播放器弹层,同上换 on-media)。`as` 指定元素(label / span / p)。
|
||||
`SectionLabel`(section-label.tsx),三种口味:`portal`(门户表单字段名与分组,`text-xs font-semibold uppercase text-muted-foreground`)、`page`(浏览页,`text-label uppercase tracking-[0.18em] text-content-muted`)、`media`(播放器弹层,同上换 on-media)。`as` 指定元素(label / span / p)。
|
||||
|
||||
还有几种写法没收进来,值不同、收进来就是像素变化,待设计决定:门户里 `text-xs font-medium uppercase tracking-wider`(团队订单弹窗)、`text-micro … tracking-[0.15em]`(侧栏分组、邀请页)、`tracking-widest` 一处;落地页 hero 的 `tracking-[0.32em] text-white/45` 与分区标题的 `text-meta font-bold tracking-[.22em] text-brand-strong` 是刻意的装饰用法,单列为 hero kicker 与 section kicker。
|
||||
|
||||
@@ -59,4 +59,4 @@
|
||||
- 同一份 class 串出现在两处以上就抽原语,抽的时候 class 串逐字不改,渲染不变。
|
||||
- 参数只到必要:尺寸档、是否激活、标签、图标;不把整页状态传给控件。
|
||||
- 只有一处用的局部组件留在页面文件里,不为了"以后复用"提前抽。
|
||||
- 两个页面展示同一种信息时共用零件:套餐卡用 [plan-card-parts.tsx](../../apps/web/app/components/plan-card-parts.tsx)(名称价格、规格表、线路提醒、共有权益),电影与剧集详情用 [DetailExtras.tsx](../../apps/web/app/routes/stream/_sub/DetailExtras.tsx)(规格徽章、影片信息、可播放版本、更多推荐)。
|
||||
- 两个页面展示同一种信息时共用零件:套餐卡用 plan-card-parts.tsx(名称价格、规格表、线路提醒、共有权益),电影与剧集详情用 DetailExtras.tsx(规格徽章、影片信息、可播放版本、更多推荐)。
|
||||
@@ -25,7 +25,7 @@
|
||||
| 渲染 | 有 GPU 时 EGL/DMABUF 零拷贝;无 GPU 用 Pixman + Mesa llvmpipe[W1] |
|
||||
| 传输 | 缺省 **WebSocket**(`SELKIES_MODE=websockets`);WebRTC 为可选,才需要 STUN/TURN[W3] |
|
||||
| 编码 | `SELKIES_ENCODER` 缺省 `h264enc,h265enc,vp8enc,vp9enc,av1enc,jpeg`;`SELKIES_USE_CPU` 强制软编;VAAPI/NVENC 需 `/dev/dri` 或 NVIDIA 运行时[W3] |
|
||||
| 性能 | 官方演示:N97 迷你机 1080p/60fps 多应用[W1](有核显);**纯 CPU 下 1080p 帧率未见官方数据,需 P0 实测** |
|
||||
| 性能 | 官方演示:N97 迷你机 1080p/60fps 多应用W1;**纯 CPU 下 1080p 帧率未见官方数据,需 P0 实测** |
|
||||
| 端口 | 3000 HTTP(只给反代)、3001 HTTPS 自签;Selkies 进程在容器内 `localhost:8082`,nginx 反代 `SUBFOLDER` 与 `SUBFOLDERapi`[W2][W7] |
|
||||
| 变体 | webtop `latest`=Alpine XFCE;Wayland 支持的 Debian 变体只有 `debian-i3`(sway);`debian-xfce/kde/mate` 不支持 Wayland[W2] |
|
||||
| 底座 | baseimage-selkies `master` 分支 = tag `debiantrixie`,Selkies 2.0.0、pixelflux 2.1.0,**已装 `fonts-noto-cjk`、labwc、xwayland**;`HOME=/config`、运行用户 `abc`(PUID/PGID)[W7] |
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# 计划与待办
|
||||
|
||||
这里只放**正在推进**的计划和待办。做完的计划、验收和发布记录直接删除,版本变化只记在 CHANGELOG;需要追溯时查 git 历史(2026-10-02 清理前的全部过程文档在 `ceb66f8`)。
|
||||
|
||||
## 文档放哪
|
||||
|
||||
| 内容 | 位置 |
|
||||
| --- | --- |
|
||||
| 需求基线 | [media_automation_requirements_architecture_v0.7.md](../../media_automation_requirements_architecture_v0.7.md) |
|
||||
| 架构决策 | [docs/adr/](../adr/) |
|
||||
| 设计规范(界面、领域) | [docs/design/](../design/) |
|
||||
| 怎么用、怎么运维 | [docs/runbook/](../runbook/)(开发环境见 [dev.md](../runbook/dev.md),部署见 [deploy.md](../runbook/deploy.md)) |
|
||||
| 与 MoviePilot 的业务对照(持续维护) | [docs/porting/moviepilot-v3-comparison.md](../porting/moviepilot-v3-comparison.md) 及同目录各移植文档 |
|
||||
| 版本变化 | 仓库根 [CHANGELOG.md](../../CHANGELOG.md),每个版本几行;发布前必须写好(`deno task release` 会检查) |
|
||||
| 经验教训 | [lessons.md](lessons.md) |
|
||||
| 证据、截图、构建日志 | `.local/`(不进 git) |
|
||||
|
||||
## 当前状态
|
||||
|
||||
- 版本 v0.3.14(`ceb66f8`),本机测试环境已部署。此前 v0.3.8~v0.3.13 由未提交工作区部署,源码已在 v0.3.14 统一提交。
|
||||
- 开发与发布约定见仓库根 [CLAUDE.md](../../CLAUDE.md)。
|
||||
|
||||
## 待办
|
||||
|
||||
按需要再挑,挑中后在这里写清:从哪触发、最终看到什么、哪些失败需要人工处理、用什么样本验收。
|
||||
|
||||
### 工程
|
||||
|
||||
- 任务恢复的三处边界:升级前未结束任务的版本处置(发布前查在途任务版本,没有在途旧任务就不保留旧处理器);业务结果提交、run 关联、事件派发三个时点分别注入失败确认最终状态;引擎查询异常时只记录并跳过本轮,仅在明确查无 run 或终态时补投。
|
||||
- 生产模块装配的处理器来源断言(防止漏注册的任务静默回显 todo),下次改任务注册时补。
|
||||
- 大文件拆分候选,改到相关功能时顺手拆,不单独重构:`packages/contracts/src/api.ts`(~2700 行)、`acquisition-organize/services/organize.ts`(~2600)、`browser/service.ts`(~2400)、`web/app/components/organize-wizard/organize-wizard.tsx`。
|
||||
|
||||
### 业务
|
||||
|
||||
- 与 MP 对照里仍未定的项,见 [对照 §6.4/6.5](../porting/moviepilot-v3-comparison.md#64-用户反馈与后续讨论2026-10-02)。
|
||||
- 需求里仍是"部分实现"的:R06 通用 HTTP 失败转浏览器、真实 Cloudflare 挑战验收;R21 缓存阈值里未纳管占用的专项验收;四站与真实下载、媒体服务器的完整验收。
|
||||
@@ -35,3 +35,6 @@
|
||||
22. 清理脚本 `--apply` 前没看 dry-run 清单(子代理的 dry-run 只在测试库跑过)→ 在用户库删了 92 个"孤立单元",其中含 TMDB 季集账本单元,需回刷恢复 → **规则**:任何对真实库的删除类脚本,先对真实库跑 dry-run 并由协调者逐类目过目再 `--apply`,即使用户授权"直接干";删除判定必须按来源区分(临时 vs 元数据来源),默认只删临时数据。
|
||||
23. **主工作区跑过 `deno install` 后先 `git status`**:宿主机 `deno install` 会把 `deno.lock` 改写(删掉一批 npm 条目),而镜像构建 `COPY . .` 带着工作区里的锁文件跑 `deno install --frozen`,直接失败。构建前 `git checkout deno.lock`(或确认工作区干净)再 `docker compose build`。(v0.3.2 发布时遇到)
|
||||
24. **主工作区不留常驻进程**:子代理在主工作区起的 `deno task dev`(--watch)结束后没停,挂了两三天,每次改文件都重写 `deno.lock`(即 #23 的根因)。派活时要求子代理结束前 `pkill` 自己起的 dev 进程;协调者发布前 `pgrep -a deno` 看一眼。
|
||||
|
||||
## 发布与检查(2026-10-02 补充)
|
||||
25. v0.3.8~v0.3.13 六个版本都由未提交工作区构建部署,发布记录写"检查通过",实际 agent / db / contracts 测试与类型检查一直是红的:`deno task test` 在第一个失败的包就停、后面的包根本没跑;连不上库时数据库用例静默跳过也算通过;开发库落后 9 个迁移没人发现 → **规则**:发布只走 `deno task release`(工作区不干净直接拒绝,tag 即镜像版本);检查只认 `deno task test:all` 的汇总(逐包跑完、连不上库即失败);拉代码后 `deno task dev:up`。
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
## 2. 本项目的迁移边界
|
||||
|
||||
任务书 `docs/plan/00-first-version-plan.md` §1 规定:"MoviePilot:GPLv3,**只做行为对照与 TS 重写,不复制文件**"。REQ §14.1 允许"以具体实现为参考迁移业务逻辑"。两条放在一起执行时,按下表办。
|
||||
任务书 `00-first-version-plan`(已删除,见 git `ceb66f8`) §1 规定:"MoviePilot:GPLv3,**只做行为对照与 TS 重写,不复制文件**"。REQ §14.1 允许"以具体实现为参考迁移业务逻辑"。两条放在一起执行时,按下表办。
|
||||
|
||||
| 允许 | 不允许 |
|
||||
| --- | --- |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# MoviePilot v3 文件管理:行为对照记录
|
||||
|
||||
> 格式:REQ §14.1.2 迁移交付规范。只记录行为、接口形状和交互,**不复制 MP 源码或前端模板**(MP 后端 GPLv3、前端同属 jxxghp 组织,按 `license-and-provenance.md` 一律"只参考行为")。
|
||||
> 对应规格:`docs/plan/06-file-manager-spec.md`;需求:REQ §2.1、§7.1/§7.1.1、§8.2/§8.3。
|
||||
> 对应规格:`06-file-manager-spec`(已删除,见 git `ceb66f8`);需求:REQ §2.1、§7.1/§7.1.1、§8.2/§8.3。
|
||||
|
||||
## 0. 上游版本与核验范围
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# MoviePilot 订阅业务逻辑:迁移对照记录
|
||||
|
||||
> 格式:REQ §14.1.2 迁移交付规范。只记录行为对照与 TS 重写建议,**不复制 MP 源码**(GPLv3,见 `license-and-provenance.md`)。
|
||||
> 对应需求:REQ §5.4(本地集账本)、§5.5(正片完整性)、§6.1–6.8(Slot/升级/三模式/预算/选片追踪/偏好/优先级)。任务书:`docs/plan/00-first-version-plan.md` §3.1 第 5 条。差距与实施清单见 `docs/plan/05-subscription-gap.md`。
|
||||
> 对应需求:REQ §5.4(本地集账本)、§5.5(正片完整性)、§6.1–6.8(Slot/升级/三模式/预算/选片追踪/偏好/优先级)。任务书:`00-first-version-plan`(已删除,见 git `ceb66f8`) §3.1 第 5 条。差距与实施清单见 `05-subscription-gap`(已删除,见 git `ceb66f8`)。
|
||||
|
||||
## 0. 上游版本与核验范围
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# MoviePilot 视频文件转移入库:迁移对照记录
|
||||
|
||||
> 格式:REQ §14.1.2 迁移交付规范。本文件只记录行为对照和 TS 重写建议,**不复制 MP 源码**(MP 为 GPLv3,见 `license-and-provenance.md`)。
|
||||
> 对应需求:REQ §7.1 / §7.1.1(稳定路径)、§8.3(Copy/Move 与缓存清理)、§8.4(qB 标签接管)、§14.1.1(多文件/整季包/目标冲突/中断恢复/源数据清理专项)、§14.1.3(转移入库优先专项)。任务书:`docs/plan/00-first-version-plan.md` §3.1 第 7、8 条。
|
||||
> 对应需求:REQ §7.1 / §7.1.1(稳定路径)、§8.3(Copy/Move 与缓存清理)、§8.4(qB 标签接管)、§14.1.1(多文件/整季包/目标冲突/中断恢复/源数据清理专项)、§14.1.3(转移入库优先专项)。任务书:`00-first-version-plan`(已删除,见 git `ceb66f8`) §3.1 第 7、8 条。
|
||||
|
||||
## 0. 上游版本与核验范围
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
继续开发前,先逐项核对现有业务与 MoviePilot v3 的处理逻辑。每项同时说明业务结果、失败边界、本项目差异和需要补的证据;完成对照后再讨论实现调整。本文是当前对照记录,尚未完成的项目明确列为待核对。
|
||||
|
||||
日期:2026-10-01。本项目业务代码基线:`8013196e3f5e6a8c4ea0cd26cf77294a82a13ddd`,`v0.3.7`。前置材料:[开发情况基线](13-development-baseline.md)、[工程检查](14-engineering-review.md)。初始对照阶段只读源码并更新文档;后续用户授权的实现状态见第 4、5 节。
|
||||
日期:2026-10-01。本项目业务代码基线:`8013196e3f5e6a8c4ea0cd26cf77294a82a13ddd`,`v0.3.7`。前置材料:开发情况基线(已删除,见 git `ceb66f8`)、工程检查(已删除,见 git `ceb66f8`)。初始对照阶段只读源码并更新文档;后续用户授权的实现状态见第 4、5 节。
|
||||
|
||||
## 1 参考基线和判定方法
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
| 参考发布版本 | `v3.0.10-1`,提交 [`0aa857173f77de31c7c8d9d2e12052d99f37bcc1`](https://github.com/jxxghp/MoviePilot/tree/0aa857173f77de31c7c8d9d2e12052d99f37bcc1),2026-09-28;`version.py` 已核对 |
|
||||
| 分支查询 | 本轮只读查询时 `v3` 分支为 `5741d3c56d761d87868d4f2d0515ac5c498f94d6`;本报告采用上面的发布标签,后续逐项核对不随分支移动 |
|
||||
| 本地参考位置 | `/tmp/umt-moviepilot-v3-review-20261001`,独立浅克隆,未改上游源码 |
|
||||
| 旧资料 | [既有移植文档](../porting/moviepilot-transfer.md)使用 `e6820a8`/早期 v3.0.0;原参考仓库保持不变,旧样本结论不直接升级为本轮结论 |
|
||||
| 旧资料 | [既有移植文档](moviepilot-transfer.md)使用 `e6820a8`/早期 v3.0.0;原参考仓库保持不变,旧样本结论不直接升级为本轮结论 |
|
||||
| 证据范围 | 阅读当前源码、迁移和测试断言;没有启动 MP 服务或运行上游测试,也没有对本项目新增故障注入 |
|
||||
|
||||
MP 是优先采用的业务参考;用户已确认尽量复用其成熟业务逻辑和实现,存在明确需求差异时再讨论调整。最终行为仍由本项目需求和用户确认决定。两边使用不同任务和数据机制,只比较同一场景的业务结果,不因模块名字相近就认定能力相同。已有 MP 差分样本、运行记录和有意偏离登记继续保留,按各自提交解释。
|
||||
|
||||
每项记录五件事:触发场景;MP 的明确处理分支;本项目正式调用路径;差异属于实现缺口、验收缺口、有意调整还是暂不适用;拟采用的规则及最小验证场景。源码结论、未复现影响和讨论建议分开。参考行为与来源登记沿用 [移植规范](../porting/license-and-provenance.md)。
|
||||
每项记录五件事:触发场景;MP 的明确处理分支;本项目正式调用路径;差异属于实现缺口、验收缺口、有意调整还是暂不适用;拟采用的规则及最小验证场景。源码结论、未复现影响和讨论建议分开。参考行为与来源登记沿用 [移植规范](license-and-provenance.md)。
|
||||
|
||||
## 2 顺序和进度
|
||||
|
||||
@@ -57,7 +57,7 @@ MP 是优先采用的业务参考;用户已确认尽量复用其成熟业务
|
||||
|
||||
升级兼容也有明确范围:MP 的分类检查点 v1→v2 迁移遇到已有执行状态、执行载荷或步骤证据时不重写旧计划,继续使用已知旧版本解码路径。这支持「保留已经产生的执行证据」的规则,不能据此承诺任意旧 handler 都能继续执行。见 [检查点迁移](https://github.com/jxxghp/MoviePilot/blob/0aa857173f77de31c7c8d9d2e12052d99f37bcc1/database/versions/d8f2b6a4c1e7_3_0_28.py#L290)。
|
||||
|
||||
本项目刮削双写控制流已确认,但本轮没有故障注入证明实际受影响。上一轮线上只读检查未发现未结束的旧版刮削 run,也没有 `scrape_record` 记录;该时点结论不代替升级策略。见 [工程检查 §2](14-engineering-review.md#2-建议优先核对的恢复边界)。
|
||||
本项目刮削双写控制流已确认,但本轮没有故障注入证明实际受影响。上一轮线上只读检查未发现未结束的旧版刮削 run,也没有 `scrape_record` 记录;该时点结论不代替升级策略。见 工程检查 §2(已删除,见 git `ceb66f8`)。
|
||||
|
||||
### 3.2 精确来源
|
||||
|
||||
@@ -112,7 +112,7 @@ MP 还在 [test_transfer_planning_checkpoint.py](https://github.com/jxxghp/Movie
|
||||
|
||||
目录接管参考 MP `app/application/transfer/monitor/snapshot.py`、`poller.py`:先快照现状,再比对新增/变化;完整存量作为单独手动操作。我们采用数据库持久快照、已有识别与整理计划,一条配置一个来源路径。同分类可配置多条不同来源,综艺归 tv;只有复制与移动。qB 标签继续使用现有任务管理和实例范围。
|
||||
|
||||
当前源码已接入分类编辑和测试、来源选择、自动/固定分类、qB 配置标签、快照与存量向导。已有路径绑定保留,不按新规则迁移旧库;源离线保留基线,已知 qB 任务不被目录扫描重复接管。具体入口和分批限制见 [整理手册](../runbook/organize.md)。测试使用本项目临时目录与隔离 PG,不是运行 MP 服务;未完成浏览器截图审查;后续 v0.3.9 已发布,见 [发布记录](18-organize-release.md)。
|
||||
当前源码已接入分类编辑和测试、来源选择、自动/固定分类、qB 配置标签、快照与存量向导。已有路径绑定保留,不按新规则迁移旧库;源离线保留基线,已知 qB 任务不被目录扫描重复接管。具体入口和分批限制见 [整理手册](../runbook/organize.md)。测试使用本项目临时目录与隔离 PG,不是运行 MP 服务;未完成浏览器截图审查;后续 v0.3.9 已发布,见 发布记录(已删除,见 git `ceb66f8`)。
|
||||
|
||||
其他主题仍按第 2 节逐项讨论。这轮只补齐与已讨论整理功能有关的分类、标签与目录接管行为,不宣称整个下载隔离、清理、订阅和智能体业务对照已完成。
|
||||
|
||||
@@ -228,11 +228,11 @@ MP 手动添加入口识别失败时返回 `requires_confirmation`;前端 `Add
|
||||
- 用本机 Chromium 与真实 React 组件验证单旧版默认选择、无选择禁用洗版、勾选洗版、切回正常、未知资源二次确认、串流外按钮交接;API 为 fixture,未产生真实下载,页面无未捕获异常。
|
||||
- web production build、server compile 与空环境二进制模块自检通过。局部证据存于本机 `.local/manual-download-ui/`。
|
||||
|
||||
以上业务回归主要为源码与隔离环境验证。随后于 2026-10-01 发布 v0.3.10,线上 `0060` 迁移、HTTP/HTTPS、管理员接口及 6 个生产页面冒烟通过,未触发真实下载或媒体整理;镜像、备份与验证证据见 [发布记录](18-organize-release.md#v0310-手动下载与入库发布)。
|
||||
以上业务回归主要为源码与隔离环境验证。随后于 2026-10-01 发布 v0.3.10,线上 `0060` 迁移、HTTP/HTTPS、管理员接口及 6 个生产页面冒烟通过,未触发真实下载或媒体整理;镜像、备份与验证证据见 发布记录(已删除,见 git `ceb66f8`)。
|
||||
|
||||
### 5.7 v0.3.11 体验修复
|
||||
|
||||
搜索资源标题接入与站点工作台同一详情抽屉与读取接口,复用按需详情抓取和缓存,不增加第二套解析器。详情抽屉仍提供下载选项、库存和 Agent 入口。桌面浏览器的最大化规则修复后,上下黑边消失。已部署并经过组件交互、生产真实缓存详情接口与 HTTPS 页面验证,范围和证据见 [发布记录](18-organize-release.md#v0311-搜索详情与桌面黑边修复)。
|
||||
搜索资源标题接入与站点工作台同一详情抽屉与读取接口,复用按需详情抓取和缓存,不增加第二套解析器。详情抽屉仍提供下载选项、库存和 Agent 入口。桌面浏览器的最大化规则修复后,上下黑边消失。已部署并经过组件交互、生产真实缓存详情接口与 HTTPS 页面验证,范围和证据见 发布记录(已删除,见 git `ceb66f8`)。
|
||||
|
||||
## 6 整理使用方式与文件管理器专项研究(2026-10-02)
|
||||
|
||||
|
||||
@@ -484,7 +484,7 @@ camofox 容器重启(`docker compose up -d` 重建、OOM、手动 restart)后,
|
||||
|
||||
同一个站点账号的登录态在浏览器(camofox / Firefox)和 HTTP 端(Deno)之间互注(§9),所以两端要**看起来是同一台设备**:
|
||||
同一个 UA、稳定的指纹、同一个出口 IP。用户决定(2026-09-30):对外伪装 **Windows**;全实例**一套固定指纹**;
|
||||
浏览器与 HTTP **按站点统一出口**。调研见 `docs/design/browser-ua-research.md`。
|
||||
浏览器与 HTTP **按站点统一出口**。调研见 `browser-ua-research`(已删除,见 git `ceb66f8`)。
|
||||
|
||||
代码:插件 `docker/browser-desktop/root/opt/camofox/plugins/umt-cookies/{index.js,identity.js}`;
|
||||
`apps/server/src/modules/sources-identity/{runtime.ts,service/user-agent.ts,service/credentials.ts,service/account.ts}`;
|
||||
@@ -695,8 +695,8 @@ camofox 按 **API 调用**判断活动,有三道空闲回收(`docker-compose.yml
|
||||
|
||||
用生产 profile 与桌面配置的独立副本验证了鉴权、原身份保持、Cookie 正常重启落盘、上下文/页面、evaluate、快照、PNG、选择器与可信坐标点击、profile 隔离。现有真实 BrowserService/Agent 能力核验脚本 `scripts/browser-verify/verify.ts` 的 setup/a/b/idle/c/d 共 25 项严格通过,包含登录、脱敏、提取、下载文件哈希及资源关联、正常重启与空闲回收自动重连、旧引用拒绝、SIGKILL 未落盘登录丢失识别。适配器能力表现已登记 1.18.0 的原十项能力,未知版本不继承核验结果。
|
||||
|
||||
完整执行与恢复/清理状态见 [升级记录](../plan/17-full-upgrade.md),机器可读结果见 [验证证据](../plan/evidence/2026-10-01-dependencies/upgrade-verification.json)。这些检查不增加真实 PT 挑战、ARM64 或精确 URL 恢复的验收声明。SIGKILL/OOM 后仅能使用上次落盘状态的限制继续保留。
|
||||
完整执行与恢复/清理状态见 升级记录(已删除,见 git `ceb66f8`),机器可读结果见 验证证据(已删除,见 git `ceb66f8`)。这些检查不增加真实 PT 挑战、ARM64 或精确 URL 恢复的验收声明。SIGKILL/OOM 后仅能使用上次落盘状态的限制继续保留。
|
||||
|
||||
### 桌面上下黑边排查记录
|
||||
|
||||
2026-10-01 已修复底座初始化脚本生成无效 labwc XML 的问题;部署镜像为 `umt-browser-desktop:1.18.0-umt.1`。初始化在 `init-selkies-config` 完成后写入完整 XML,浏览器窗口自动最大化。实际视频尺寸与前端 iframe 同为 1280×900;前后串流截图确认上下黑边消失。若需要调整桌面尺寸,可改 `BROWSER_DESKTOP_WIDTH/HEIGHT`,不要以拉伸或裁剪视频修正窗口布局。证据见 [发布记录](../plan/18-organize-release.md#v0311-搜索详情与桌面黑边修复)。
|
||||
2026-10-01 已修复底座初始化脚本生成无效 labwc XML 的问题;部署镜像为 `umt-browser-desktop:1.18.0-umt.1`。初始化在 `init-selkies-config` 完成后写入完整 XML,浏览器窗口自动最大化。实际视频尺寸与前端 iframe 同为 1280×900;前后串流截图确认上下黑边消失。若需要调整桌面尺寸,可改 `BROWSER_DESKTOP_WIDTH/HEIGHT`,不要以拉伸或裁剪视频修正窗口布局。证据见 发布记录(已删除,见 git `ceb66f8`)。
|
||||
@@ -1,6 +1,6 @@
|
||||
# 文件管理(`/files`,W5-A)
|
||||
|
||||
实现:`apps/server/src/modules/file-manager/`(路由 `routes.ts`,服务按操作分文件),契约 `packages/contracts/src/files.ts`(端点登记在 `api.ts` 的 `Api.files`),迁移 `0024_trash`。规格见 `docs/plan/06-file-manager-spec.md`。
|
||||
实现:`apps/server/src/modules/file-manager/`(路由 `routes.ts`,服务按操作分文件),契约 `packages/contracts/src/files.ts`(端点登记在 `api.ts` 的 `Api.files`),迁移 `0024_trash`。规格见 `06-file-manager-spec`(已删除,见 git `ceb66f8`)。
|
||||
复用 acquisition-organize 的服务导出(`planImport`、`sourceGuard`、`authorizeMove`、`hnrBlockForMove`、`managedTasksUnder`、`emitRecord`、H&R 判定)。W5-A2 给 `planImport` 加了可选参数(`fileOverrides` / `targetDir` / `slotId` / `transfer`,老调用不变),原样搬运的计划与终态在 `acquisition-organize/services/organize-transfer.ts`(`planTransfer` / `finalizeTransfer` / `relocate`)。
|
||||
|
||||
## 根与路径
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
## 来源、分类与存量整理
|
||||
|
||||
设置 → 媒体库与目录中维护分类 YAML 和整理来源。新功能已于 2026-10-01 部署为 v0.3.9,迁移 `0059_organize_source_snapshot` 已执行,见 [发布记录](../plan/18-organize-release.md)。
|
||||
设置 → 媒体库与目录中维护分类 YAML 和整理来源。新功能已于 2026-10-01 部署为 v0.3.9,迁移 `0059_organize_source_snapshot` 已执行,见 发布记录(已删除,见 git `ceb66f8`)。
|
||||
|
||||
- 一条来源配置选一个来源目录、一个媒体库目标目录、复制或移动方式。通过弹窗浏览已登记的目录选择,不需要填写宿主机任意路径。不同来源可以使用相同分类,规则只维护一次。
|
||||
- 分类一级固定为 `movie` / `tv`。规则按顺序首次匹配;同一规则的字段同时满足,同字段逗号值为任一匹配,`!` 排除。`release_year` 支持年份或区间;原始 TMDB 详情的一级字段也可使用。
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
洗版在本次冻结计划中保存选中的旧文件。新文件核验登记成功后才清理所选旧版本,剧集只处理成功对应的季集与 Part;覆盖不完整的合并集保留。相同目标路径会先暂存旧文件,失败后恢复。旧版的私有字幕等随之清理,共享 NFO/图片、未选版本及下载缓存保留;按现有文件替换设置移入回收站或删除。
|
||||
|
||||
关联迁移 `0060_manual_acquisition`,已于 2026-10-01 随 v0.3.10 发布执行。业务依据与验收见 [MP 对照 §5.6](../plan/15-moviepilot-v3-comparison.md#56-本轮实现与验收已部署-v0310)。
|
||||
关联迁移 `0060_manual_acquisition`,已于 2026-10-01 随 v0.3.10 发布执行。业务依据与验收见 [MP 对照 §5.6](../porting/moviepilot-v3-comparison.md#56-本轮实现与验收已部署-v0310)。
|
||||
|
||||
## 与 MP 的对照
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
`packages/domain/src/{slot/overview.ts, acquisition/fill.ts}`、contracts `policy.ts`(`SubscriptionOverviewItem` `SubscriptionCoverage` `SubscriptionCalendar` `SubscriptionResetResult` 等)、迁移 `0035_subscriptions_v2`、`0036_subscription_private_rules`;
|
||||
集播出日期写入在 `sources-identity/service/metadata-totals.ts`(`applyEpisodeAirDates`),关键词检索在 `sources-identity/tasks.ts`(`searchSubscription`)。
|
||||
前端:`apps/web/app/routes/console/subscriptions.tsx`(`?view=calendar`)、`components/subscriptions/{calendar.tsx, actions.tsx, subscription-form.tsx, model.ts}`。
|
||||
设计:`docs/design/subscriptions.md` §1–§3、§5;规则组见 `docs/runbook/rules.md`;W5-C 账本/完成/搜索见 `docs/plan/05-subscription-gap.md` §4。
|
||||
设计:`docs/design/subscriptions.md` §1–§3、§5;规则组见 `docs/runbook/rules.md`;W5-C 账本/完成/搜索见 `05-subscription-gap`(已删除,见 git `ceb66f8`) §4。
|
||||
|
||||
## 入口(SEARCH-2)
|
||||
|
||||
@@ -184,4 +184,4 @@ PATCH `status` 仍可直接改(旧行为),完成写 `subscription_history` 的
|
||||
|
||||
普通订阅按下载器确认接收和目标覆盖判断完成,完成原因 `download_accepted`;Slot 与下载/整理任务仍继续记录实际下载、核验和入库状态。多目标必须全部满足,剧集只有明确季集范围才能计覆盖,未知总集数不按整个季的通配预留伪造完成。洗版订阅仍按入库结果判断。
|
||||
|
||||
手动搜索、工作台和原站详情下载独立于订阅,不创建假订阅,也不会占用原订阅 Slot。要对现有订阅补全仍使用上面的 Slot 补全或自动评估入口。来源与验证见 [MP 对照 §5](../plan/15-moviepilot-v3-comparison.md#5-下载入口与浏览器详情页交接讨论记录)。
|
||||
手动搜索、工作台和原站详情下载独立于订阅,不创建假订阅,也不会占用原订阅 Slot。要对现有订阅补全仍使用上面的 Slot 补全或自动评估入口。来源与验证见 [MP 对照 §5](../porting/moviepilot-v3-comparison.md#5-下载入口与浏览器详情页交接讨论记录)。
|
||||
@@ -1459,7 +1459,7 @@ export const Api = {
|
||||
}),
|
||||
},
|
||||
|
||||
// ── 文件管理(docs/plan/06-file-manager-spec.md;只浏览已登记根,写操作两段式 dryRun → planId) ──
|
||||
// ── 文件管理(docs/runbook/files.md;只浏览已登记根,写操作两段式 dryRun → planId) ──
|
||||
classification: {
|
||||
get: ep({
|
||||
method: "get",
|
||||
|
||||
@@ -7,7 +7,7 @@ import { OrganizationStatus, PublicOrganizationRecord } from "./organization.ts"
|
||||
import { SlotStatus } from "./policy.ts";
|
||||
import { ScrapeMode, ScrapeRecord } from "./scrape.ts";
|
||||
|
||||
// 文件管理(`/files`,docs/plan/06-file-manager-spec.md)。
|
||||
// 文件管理(`/files`,docs/runbook/files.md)。
|
||||
// 只能浏览已登记的库根与下载根;路径一律用 {root, path}:root 为 FileRootId,path 为根内相对路径("" = 根)。
|
||||
// 所有写请求带 idempotencyKey(前端生成 UUID),同键重放返回首次结果。
|
||||
// 移动/复制/整理/删除都是两段式:dryRun=true 取得 planId 与前后路径清单,执行时回传 planId;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Kysely } from "kysely";
|
||||
import { dropTables, entityTable, execDdl } from "../src/migration-helpers.ts";
|
||||
|
||||
// W5-A 文件管理(docs/plan/06-file-manager-spec.md §2.3.3):
|
||||
// W5-A 文件管理(docs/runbook/files.md):
|
||||
// - trash_item:删除进回收站的记录(原根/原相对路径/回收站内路径/到期时间/关联资产快照);
|
||||
// 还原或清除后删行(历史留在 audit_event)。root_id 为文件管理的根 id(lib:<uuid> / dl:<uuid>:<n>)。
|
||||
// - artifact_files_idem_key:文件管理写操作的幂等键(artifact title='files_idem',content.key)唯一。
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Kysely } from "kysely";
|
||||
import { dropTables, entityTable, execDdl, oneOf } from "../src/migration-helpers.ts";
|
||||
|
||||
// W5-C 订阅增强(docs/plan/05-subscription-gap.md §3):
|
||||
// W5-C 订阅增强(docs/porting/moviepilot-subscribe.md):
|
||||
// - subscription:pending 状态(TMDB 未就绪:可搜索/评估,不可完成);主动搜索的上次/下次时间;
|
||||
// - content_unit(季):总集数账本 episode_total(只升;回退不低于已覆盖最高集;可人工锁定);
|
||||
// - acquisition_plan:unit_keys 记录计划预留的内容单元(Slot×单元预留,等价 MP note);file_selection 记录季包选文件;
|
||||
|
||||
Reference in new issue
Block a user