2.7 KiB
2.7 KiB
Reasonix Batch D / Worker B:3-20 uploadFileToMediaAsset 编排壳外置候选
Project root:/mnt/Data1T/mnote-worktrees/0525-d-worker-b-3-20-upload-file-orchestrator
目标
在独立 worktree 中产出候选 patch:把 SIDEBAR_TREE_JS 中 uploadFileToMediaAsset(file, plan, options) 的编排壳同构迁入 rust/crates/mnote-web/browser/local-upload-runtime.js,layout.rs 只保留委托 wrapper 和完整 inline fallback。不得改变本地 Markdown 资源归属、非本地 media upload、editor 插入、sidebar refresh 或事件分发行为。
允许修改
rust/crates/mnote-web/browser/local-upload-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
必要时只更新同文件内字符串断言测试。
实现要求
local-upload-runtime.js新增并导出uploadFileToMediaAsset(file, plan, options, deps)。layout.rs中原uploadFileToMediaAsset(file, plan, options)优先委托localUploadRuntimeFunction('uploadFileToMediaAsset'),runtime 不存在时执行原 inline fallback。- runtime 可复用现有外置 helper:
uploadLocalFolderAsset、uploadMediaAsset、insertUploadedAssetIntoEditor。 - 通过
deps注入仍属于 shell 的依赖:currentSourceKindcurrentRootUricurrentDocumentIdeditorRootFromUploadOptionsappendUploadedAssetRowrefreshLocalFolderSidebarSnapshot- 需要时注入
dispatchEvent/CustomEvent
- 保持事件不变:
- local folder:
wolai:local-assets-changed - non-local media:
wolai:assets-changed
- local folder:
- 保持
data-mnote-last-upload-*由 editor 插入 helper 维护,不新增第二套状态。
禁止事项
- 不迁
resolveFileTreeUploadTarget。 - 不改
/api/local-folder/assets/upload或/api/media/upload合同。 - 不改 OnlyOffice URL / resource open 语义。
- 不修改 editor island、document conflict runtime、AGENTS、design、bugs 或 git 状态。
- 不提交 git。
验收命令
node --check rust/crates/mnote-web/browser/local-upload-runtime.js
cargo fmt --manifest-path rust/Cargo.toml --all --check
cargo check --manifest-path rust/Cargo.toml -p mnote-web
cargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1
cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1
NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
输出要求
handoff 必须列出:
- 修改文件。
- 委托 deps 清单。
- 是否保留 fallback。
- 验收命令和结果。
- 浏览器 smoke 证据路径。
- 未覆盖风险。
git diff --stat。