# [recycle] Rust Block Editor Command Contract v0 > 更新时间:2026-04-18 > > 关联文档: > - `/mnt/Data1T/mnote/design/old/05-editor-mainline/process/ai-first-rust-block-editor-baseline-v1.md` > - `/mnt/Data1T/mnote/design/old/05-editor-mainline/process/rust-block-editor-model-v0.md` > - `/mnt/Data1T/mnote/rust/crates/core-protocol/src/editor/command.rs` > - `/mnt/Data1T/mnote/rust/crates/core-protocol/src/editor/markdown.rs` ## 1. 目的 本文冻结 `task-054` 的第一阶段命令契约: - editor command 列表 - editor 到 kernel command 的映射边界 - `Markdown import` / `Markdown export` 的责任边界 第一阶段目标不是一次定义所有高级交互,而是先把最小可执行命令面固定下来。 ## 2. 第一阶段 command 列表 第一阶段固定以下命令进入 editor command contract: - `replace_block` - `insert_block_after` - `delete_block` - `split_block` - `merge_with_previous` - `move_block` - `indent_block` - `outdent_block` - `toggle_heading_collapse` - `attach_reference_token` - `detach_reference_token` ## 3. 命令语义 ### 3.1 `replace_block` 用途: - 替换块的 `block_type` - 替换块的 `BlockProps` - 替换块的 `content_nodes` 第一阶段要求: - 支持单块粒度更新 - 不要求整页重算 ### 3.2 `insert_block_after` 用途: - 在目标块后插入同级块 第一阶段要求: - Enter 拆块、加号插入、slash 插入都先归一到 `insert_block_after` ### 3.3 `delete_block` 用途: - 删除目标块 第一阶段要求: - 支持是否保留子块的最小策略 ### 3.4 `split_block` 用途: - 在指定 `content_node` 位置拆分当前块 第一阶段要求: - 支持可选 `text_offset` - 支持指定 trailing block type ### 3.5 `merge_with_previous` 用途: - 当前块为空或满足合并条件时,把内容合并到上一块 ### 3.6 `move_block` 用途: - 块重排 - 调整父块 - 调整 after block 第一阶段要求: - 先承接有限移动与局部重排 ### 3.7 `indent_block` 用途: - 调整有限缩进层级 ### 3.8 `outdent_block` 用途: - 回退一层有限缩进 ### 3.9 `toggle_heading_collapse` 用途: - 切换标题折叠状态 ### 3.10 `attach_reference_token` 用途: - 在指定块内容位置挂接引用 token ### 3.11 `detach_reference_token` 用途: - 移除指定引用 token ## 4. editor command 到 kernel command 的映射 第一阶段固定口径: - editor command 是人层和 AI/CLI 的直接操作面 - kernel command 仍是系统底层事实变更面 映射原则: - `replace_block` 优先映射到块 patch / content update 类 kernel command - `insert_block_after` 映射到 insert / create block - `delete_block` 映射到 delete block - `move_block` 映射到 move block - `attach_reference_token` / `detach_reference_token` 先映射到块内容 patch,而不是单独扩出新的 kernel mutation 第一阶段允许 lossless 或 lossy mapping,但必须显式记录: - `editor_command` - `kernel_command_name` - `lossy` - `notes` ## 5. `Markdown import` 第一阶段 `Markdown import` 固定只承担: - Markdown 文本转 editor block document - 识别标题、列表、待办、引用、代码块 - 可选识别 `[[page]]` 与 `((block))` 第一阶段不强求: - 完整 HTML block 保真 - 复杂 front matter 管线 - 富文本 mark 全量映射 `Markdown import` 最小选项: - mode - flavor - reference_token_strategy - boundary ## 6. `Markdown export` 第一阶段 `Markdown export` 固定只承担: - 把 editor block document 转成可读 Markdown - 保留标题、列表、待办、引用、代码块 - 尽量保留 `[[page]]` / `((block))` 第一阶段允许: - 对未知块做 paragraph fallback - 对暂不支持块做 lossy export,但要记录 warning `Markdown export` 最小选项: - mode - flavor - reference_token_strategy - boundary ## 7. 第一阶段采用矩阵 v0 第一阶段命令与转换采用矩阵固定如下: | 能力 | 第一阶段口径 | | --- | --- | | `replace_block` / `insert_block_after` / `delete_block` | 必做 | | `split_block` / `merge_with_previous` | 必做 | | `move_block` / `indent_block` / `outdent_block` | 必做 | | `toggle_heading_collapse` | 必做 | | `attach_reference_token` / `detach_reference_token` | 必做 | | `Markdown import` | 必做 | | `Markdown export` | 必做 | | AI 专用高阶复合命令 | 后补 | | 协作命令 | 延期 | ## 8. 结论 `task-054` 的固定口径是: - 把 `replace_block`、`insert_block_after`、`delete_block`、`split_block`、`merge_with_previous`、`move_block`、`indent_block`、`outdent_block`、`toggle_heading_collapse`、`attach_reference_token`、`detach_reference_token` 冻结成第一阶段 command contract - 让 editor command 成为人层、CLI、AI 的统一写接口 - 让 `Markdown import` 和 `Markdown export` 成为第一阶段必须可用的基础能力