64 lines
2.7 KiB
Markdown
64 lines
2.7 KiB
Markdown
# 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.js`
|
|||
|
|
- `rust/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 的依赖:
|
|||
|
|
- `currentSourceKind`
|
|||
|
|
- `currentRootUri`
|
|||
|
|
- `currentDocumentId`
|
|||
|
|
- `editorRootFromUploadOptions`
|
|||
|
|
- `appendUploadedAssetRow`
|
|||
|
|
- `refreshLocalFolderSidebarSnapshot`
|
|||
|
|
- 需要时注入 `dispatchEvent` / `CustomEvent`
|
|||
|
|
- 保持事件不变:
|
|||
|
|
- local folder:`wolai:local-assets-changed`
|
|||
|
|
- non-local media:`wolai:assets-changed`
|
|||
|
|
- 保持 `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。
|
|||
|
|
|
|||
|
|
## 验收命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
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`。
|