Files
mnote/design/old/05-editor-mainline/done/rust-block-editor-command-contract-v0.md
T

4.8 KiB
Raw Blame History

[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_blockinsert_block_afterdelete_blocksplit_blockmerge_with_previousmove_blockindent_blockoutdent_blocktoggle_heading_collapseattach_reference_tokendetach_reference_token 冻结成第一阶段 command contract
  • 让 editor command 成为人层、CLI、AI 的统一写接口
  • Markdown importMarkdown export 成为第一阶段必须可用的基础能力