4.8 KiB
4.8 KiB
[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_blockinsert_block_afterdelete_blocksplit_blockmerge_with_previousmove_blockindent_blockoutdent_blocktoggle_heading_collapseattach_reference_tokendetach_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 commandinsert_block_after映射到 insert / create blockdelete_block映射到 delete blockmove_block映射到 move blockattach_reference_token/detach_reference_token先映射到块内容 patch,而不是单独扩出新的 kernel mutation
第一阶段允许 lossless 或 lossy mapping,但必须显式记录:
editor_commandkernel_command_namelossynotes
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成为第一阶段必须可用的基础能力