Files
mnote/design/06-mindmap/process/6-mindmap-kernel-phase6-projection-editor-v1.md
T

26 KiB
Raw Blame History

6 [process] Mindmap Kernel Phase 6:降级为 Projection / Editor v1

更新时间:2026-04-22

当前主线依据:

  • /mnt/Data1T/mnote/design/01-05-current-priority-overview.md
  • /mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-tree-first-graph-kernel-v1.md
  • /mnt/Data1T/mnote/design/04-tree-domain/process/4-sidebar-pagetree-filetree-rust-web-rebuild-v1.md
  • /mnt/Data1T/mnote/design/03-rust-web/process/3-rust-web-long-term-architecture-v1.md

历史参考:

  • /mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-1-tree-first-graph-kernel-checklist-v2.md
  • /mnt/Data1T/mnote/design/old/05-editor-mainline/process/ai-first-rust-block-editor-baseline-v1.md

1. 文档目的

这份文档用于重写 Kernel Phase 6 的落地口径。

这里仍沿用 Phase 6 命名,是为了保留与旧阶段拆分的一致性;当前执行依据应以 design/01-05-current-priority-overview.md 和相关现行主线文档为准,不再以 1-1-tree-first-graph-kernel-checklist-v2.md 作为唯一推进入口。

这里回答的不是:

  • “要不要马上把导图 UI 全量重写成 Rust”

而是:

在当前仓库代码现实下,Mindmap 如何从独立对象中心,降级成 tree-first graph kernel 的一种 projection / editor。

这份文档必须同时满足三件事:

  • 服从 tree-first graph kernel 主线
  • 对齐当前仓库里的真实实现,而不是抽象设想
  • 给出可迁移、可双写、可分阶段切流的方案

2. 先给结论

结论固定如下:

Mindmap 后续必须进行 Rust 内核化重构,但重构重点不是先替换 simple-mind-map 画布,而是先把“导图真相、导图命令、导图 projection、AI 工具入口”切到 Rust kernel。

换句话说:

  • 必须 Rust 化的部分
    • 导图事实源
    • 导图命令层
    • 导图 projection 层
    • AI / CLI 直接调用的导图工具层
  • 不必第一阶段 Rust 化的部分
    • 具体画布渲染器
    • 工具栏、缩略图、拖拽动画、局部 DOM 细节

因此:

Phase 6 的正确目标不是“把导图换个前端库”,而是“让导图不再以 simple-mind-map JSON 为系统真相”。


3. 当前代码现实

当前导图主链已经部分接入 Rust runtime,但整体仍然是“前端重交互壳 + blob 持久化 + Rust compat 工具”的形态,还不是 kernel truth。

3.1 前端主壳仍然由 simple-mind-map 驱动

当前主组件:

  • /mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx

现状特征:

  • 直接加载 simple-mind-map 与大量插件
  • 同时承担内嵌块、独立页、全屏态、工具栏、缩略图、右键菜单、图片处理、导入导出
  • 直接调用:
    • mindmap.setData(...)
    • mindmap.getData(...)
    • mindmap.execCommand(...)
  • 直接请求:
    • fetch(/api/mindmap/${docId}/${mindmapId})

这说明当前导图编辑器仍然以画布库数据结构为第一现场。

3.2 当前所谓 projection 仍然是前端摘要层,不是 kernel projection

当前文件:

  • /mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmap-projection.ts

当前 buildMindmapProjection(...) 的本质是:

  • 接受一份 raw mindmap blob
  • simple-mind-map 兼容归一化
  • 输出一个前端摘要对象
  • 同时保留 data 原始树

这意味着当前 projection 还是:

  • blob 的摘要

而不是:

  • kernel subtree / graph 的正式投影

3.3 当前持久化仍然是整棵导图 blob

当前持久化主链:

  • /mnt/Data1T/mnote/wolai-frontend/convex/mindmaps.ts
  • /mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts

现状特征:

  • mindmaps.get 返回整棵 data
  • mindmaps.put 写回整棵 data
  • mindmaps 表持有的是一份完整导图 JSON
  • 独立页服务端入口仍然走:
    • mindmaps.get
    • 然后在前端侧 buildMindmapProjection(...)

这说明当前“导图真相”依然是:

  • 可直接存取的一整棵导图 blob

而不是:

  • kernel node / edge / subtree

3.4 Rust runtime 已经介入,但仍是 compat mindmap 树语义

当前 Rust 侧相关实现:

  • /mnt/Data1T/mnote/rust/crates/core-protocol/src/mindmap.rs
  • /mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs

已存在的事实:

  • Rust 侧已经有:
    • MindmapTreeNode
    • MindmapOp
    • mindmap_get
    • mindmap_get_subtree
    • mindmap_put
    • mindmap_apply_ops
    • mindmap_outline_to_mindmap
  • bridge-runtime 已能在 Rust 内部应用 MindmapOp

但这些能力当前本质上仍然是:

  • 对一棵 MindmapTreeNode JSON 树做读取、修改、返回

不是:

  • KernelNode / KernelEdge / KernelSubtree 做正式操作

3.5 Kernel 协议已具备导图进入统一内核的入口

当前 kernel 类型:

  • /mnt/Data1T/mnote/rust/crates/core-protocol/src/kernel.rs

已经有:

  • KernelNodeType::Mindmap
  • KernelNodeType::MindmapNode
  • KernelProjectionKind::Mindmap

这说明协议层已经承认:

导图应该属于统一 kernel,而不是永远停留在专用 blob 协议。

问题不在方向,而在主线尚未切换完成。


4. 当前架构问题

如果继续维持当前模式,会有四类问题。

4.1 导图真相仍被视图库数据结构绑架

现在真正被保存、被读取、被回写的是:

  • simple-mind-map 兼容树

这会导致:

  • 领域模型被 UI 库字段形状反向约束
  • 导图语义无法稳定进入 kernel
  • 不同视图无法共享统一对象真相

4.2 AI 仍然不是直接操作 kernel

虽然已经有 mindmap_apply_ops 等工具,但它们当前语义仍然是:

  • 取出一棵树
  • 在 runtime 里改树
  • 返回新树

这仍然不是:

  • 直接创建 mindmap_node
  • 直接移动 subtree
  • 直接挂接 reference edge

因此 AI 还没有真正“直接写导图内核”。

4.3 导图还没有进入统一 projection 家族

当前 Sidebar / 页面树 / 文件树 正在往 kernel projection 收敛。

但导图仍然主要是:

  • 专用 route
  • 专用 blob
  • 专用前端大组件

这会让导图继续成为一个旁路系统。

4.4 前端壳过重,迁移边界不清

MindmapBlock.tsx 当前同时承担:

  • 读取
  • 兼容转换
  • 渲染
  • 编辑
  • 保存
  • 资产替换
  • 导入导出
  • 页面模式切换

这意味着:

只要导图真相还留在这里,Phase 6 就不会真正成立。


5. Phase 6 的正确目标

Phase 6 的正确目标固定为:

让 Mindmap 从“独立对象中心 + blob 真相 + 前端重壳”降级成“kernel subtree / graph 的一种 projection 与 editor”。

再收口成一句:

Mindmap 不是对象真相层,Mindmap 只是树/图真相的一种空间化编辑视图。

这意味着:

  • 导图不能再拥有第二份对象真相
  • 导图不能再以整棵 blob 作为长期 canonical model
  • 导图编辑器只能操作 kernel
  • 导图 route 只能消费 kernel projection

6. 目标分层

长期建议把导图域拆成四层。

6.1 Kernel Truth

这一层只存系统真相。

建议对象:

  • mindmap
    • 作为导图根容器节点
  • mindmap_node
    • 作为导图树节点
  • reference edge
    • 作为节点到页面、附件、PDF anchor、summary、ai_note 的横向关系

这层只负责:

  • 节点存在性
  • 父子结构
  • sibling 顺序
  • 节点稳定 ID
  • 节点元信息
  • 引用边
  • 审计与版本

6.2 Mindmap Projection Layer

这一层负责把 kernel truth 投影为导图视图可消费的数据。

长期至少应有两类 projection

  • mindmap_preview
    • 给文档内嵌卡片、轻量预览使用
  • mindmap_editor
    • 给导图独立页、沉浸编辑器使用

这层输出的应是:

  • 稳定 node id
  • parent / child 关系
  • sibling order
  • depth
  • child count
  • 引用摘要
  • capability flags
  • 视图提示信息

而不是直接把前端控件内部状态回吐出去。

6.3 Editor Adapter Layer

这一层负责:

  • 把 kernel projection 转成 simple-mind-map 当前所需的数据形状
  • 把画布交互翻译成 kernel command

这一层是 compat adapter,不是事实源。

6.4 View Shell

这一层只负责:

  • 画布
  • 工具栏
  • 右键菜单
  • 缩略图
  • 全屏壳
  • 交互状态

这里可以继续用 simple-mind-map 过渡,但不能再持有对象真相。


7. 哪些语义必须进入 kernel

下面这些语义必须进入 kernel,而不是继续停留在 simple-mind-map blob 中。

7.1 节点级稳定语义

  • mindmap 根节点
  • mindmap_node 子节点
  • title / text
  • note
  • hyperlink
  • refs
  • collapsed
  • sibling 排序键
  • 节点归档/删除状态

7.2 树语义

  • 创建子节点
  • 创建同级节点
  • 重命名
  • 移动 subtree
  • 重排顺序
  • 删除 subtree

7.3 图语义

  • 节点引用页面
  • 节点引用块
  • 节点引用附件
  • 节点引用 PDF 页码/anchor
  • AI 生成节点引用证据节点

7.4 审计语义

  • command id
  • trace id
  • actor id
  • revision / version

8. 哪些语义不应进入 kernel

下面这些内容不应进入 kernel truth。

  • 当前缩放比例
  • 当前视口位置
  • 当前选中节点
  • minimap 展开状态
  • 文本编辑框 DOM 状态
  • 鼠标拖拽中的临时态
  • 纯视图级动画状态
  • simple-mind-map 内部 history 栈
  • 仅服务当前画布库的缓存字段

这些内容属于:

  • editor session state
  • view shell state

不是 kernel truth。


9. 命令层重构口径

当前 mindmap_apply_opsmindmap_put 不能再继续被当作长期真相接口。

9.1 mindmap_put

长期应降级为:

  • 导入整图
  • 替换快照
  • 迁移回放
  • 故障恢复

不应再作为常规编辑主路径。

9.2 mindmap_apply_ops

长期应保留,但语义要改。

它应变成:

  • compat facade

内部行为应是:

  • MindmapOp 翻译成 kernel command 序列

例如:

  • addChild
    • kernel.node.create
  • addSiblingAfter
    • kernel.node.create + sibling order 调整
  • updateText
    • kernel.node.update
  • setHyperlink
    • kernel.node.update
  • setRefs
    • kernel.edge.attach / kernel.edge.detach
  • deleteNode
    • kernel.subtree.deletekernel.node.archive

也就是说:

mindmap_apply_ops 可以继续存在,但它不能继续直接修改一棵 compat 树。

9.3 新的正式命令面

Phase 6 后导图应以 kernel command 为正式写面:

  • create_node
  • update_node
  • move_subtree
  • reorder_siblings
  • archive_node
  • restore_node
  • attach_edge
  • detach_edge

如果 kernel 当前缺少某些命令,就应在 Phase 6 补入,而不是继续把缺口留给前端 blob。


10. Projection 重构口径

当前导图 route 仍然主要走:

  • mindmaps.get

然后前端:

  • buildMindmapProjection(...)

这条链必须调整。

10.1 正式读路径

长期正式读路径应是:

  • kernel.project_view
    • projection=mindmap

而不是:

  • mindmaps.get
    • 返回 raw blob

10.2 Projection 输出要求

导图 projection 输出至少应包括:

  • projection_id
  • root_node_id
  • items
  • edges
  • depth
  • sort_key
  • expand_hint
  • capability_flags
  • resource_meta

10.3 前端 adapter 的角色

前端可以继续存在一个:

  • projection -> simple-mind-map adapter

但这层只能是 view adapter。

它不能再同时承担:

  • canonical model
  • 持久化模型
  • AI 写入模型

11. AI / CLI 口径

如果目标是“AI 能直接编写思维导图,而不是外挂组件”,那 Phase 6 的 AI 路线必须明确。

11.1 AI 读取导图

AI 应读取:

  • kernel subtree
  • mindmap projection
  • node refs / evidence

而不是只读取一棵视图库 JSON。

11.2 AI 修改导图

AI 应直接发 kernel command,或通过 compat facade 发命令。

正确路径应是:

  • AI 意图
  • tool / command plan
  • kernel command
  • projection 刷新

不是:

  • AI 输出一整棵导图 JSON
  • 再整体覆盖保存

11.3 AI 生成导图

mindmap_outline_to_mindmap 这类能力可以保留,但输出应优先写入:

  • mindmap
  • mindmap_node
  • reference edge

而不是先生成一棵孤立 blob 再把它塞进存储。


12. 与当前代码对应的重构任务

12.1 Rust 协议层

需要重构或补充:

  • /mnt/Data1T/mnote/rust/crates/core-protocol/src/kernel.rs
  • /mnt/Data1T/mnote/rust/crates/core-protocol/src/mindmap.rs

建议动作:

  • 保留 MindmapOp 作为 compat DTO
  • 不再把 MindmapTreeNode 当长期 canonical model
  • 为导图补齐正式 projection / command 契约

12.2 Rust runtime

需要重构:

  • /mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs

建议动作:

  • 增加正式 mindmap projection builder
  • mindmap_apply_ops 改成 command translator
  • mindmaps.get 逐步降级为 compat query
  • 新增或补齐导图相关 kernel command

12.3 前端 mindmap adapter

需要重构:

  • /mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmap-projection.ts
  • /mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmapOps.ts

建议动作:

  • mindmap-projection.ts
    • 从“blob 摘要器”转成“kernel projection adapter”
  • mindmapOps.ts
    • 从“本地真相修改器”降级为 compat / fallback 层

12.4 前端视图壳

需要重构:

  • /mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx
  • /mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/page.tsx
  • /mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/mindmap-page-client.tsx

建议动作:

  • 将读取从 mindmaps.get 切到 kernel projection
  • 将写入从 getData()/POST whole blob 切到命令流
  • MindmapBlock.tsx 缩成 view shell + adapter

12.5 持久化与兼容层

需要重构:

  • /mnt/Data1T/mnote/wolai-frontend/convex/mindmaps.ts
  • /mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts

建议动作:

  • 迁移期允许双写
  • 长期让 mindmaps 表退到 compat snapshot / import-export 层
  • 正式真相切到 kernel backing store

13. 迁移分期

13.1 Phase 6-A:冻结边界

目标:

  • 停止在前端和 compat blob 上继续追加长期业务语义

详细 checklist

  • 冻结口径:
    • 明确 MindmapTreeNode 只作为 compat DTO
    • 明确 mindmaps blob 只作为过渡存储,不再新增长期业务语义
    • 明确 simple-mind-map 只作为 renderer / editor adapter,不再定义系统真相
  • 协议边界盘点:
    • 盘点 /mnt/Data1T/mnote/rust/crates/core-protocol/src/mindmap.rs 中哪些字段属于 compat 语义
    • 盘点 /mnt/Data1T/mnote/rust/crates/core-protocol/src/kernel.rs 中已有 mindmap / mindmap_node / projection 能力
    • 列出 Phase 6 后必须新增的 kernel command / projection 契约缺口
  • 前端边界盘点:
    • 盘点 /mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx 中哪些逻辑属于真相层
    • 将这些逻辑标记为后续待迁移:
      • 读主链
      • 写主链
      • 本地摘要
      • 引用回写
      • 资产 URL 反写
    • 明确哪些逻辑继续保留在 view shell:
      • 画布渲染
      • 右键菜单
      • 工具栏
      • 缩略图
      • 全屏壳
  • 持久化边界盘点:
    • 盘点 /mnt/Data1T/mnote/wolai-frontend/convex/mindmaps.ts 的现有字段与索引
    • 盘点 /mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts 的现有读写语义
    • 明确哪些接口后续降级为 compat:
      • mindmaps.get
      • mindmaps.put
      • mindmaps.delete
      • mindmaps.restore
  • AI / CLI 边界盘点:
    • 盘点 mindmap_get / mindmap_get_subtree / mindmap_put / mindmap_apply_ops
    • 标注哪些工具后续保留为 facade,哪些应切到 kernel command
    • 明确 AI 不再以“整图 JSON 覆盖”作为长期主路径
  • 文档口径冻结:
    • 当前文档作为 Phase 6 主文档继续维护
    • checklist / architecture / 后续任务拆分不再把导图描述为独立事实源
    • 新增导图相关设计时默认引用本文件,而不是继续围绕 simple-mind-map 数据结构展开
  • 代码约束冻结:
    • 在未完成 Phase 6-B 之前,不再给 MindmapTreeNode 增加新的长期业务字段
    • 在未完成 Phase 6-C 之前,不再新增新的“整图读取后本地改树再整体提交”的主路径
    • 在未完成 Phase 6-D 之前,不再新增绕过 kernel 的 AI 写入链路

出阶段判定:

  • 新导图语义默认先判断是否落 kernel,而不是先落前端 blob
  • MindmapBlock.tsx 不再继续承担新的长期对象真相职责
  • 团队已统一接受:
    • compat blob 不是长期真相
    • simple-mind-map 不是对象中心
    • Phase 6 后正式主线是 kernel truth + projection + adapter

13.2 Phase 6-B:先切读路径

目标:

  • 独立页与内嵌预览先读取正式 kernel projection

详细 checklist

  • 定义 projection 家族:
    • 定义 mindmap_preview projection
    • 定义 mindmap_editor projection
    • 明确两者共享的稳定字段:
      • projection_id
      • root_node_id
      • items
      • edges
      • capability_flags
      • resource_meta
  • 定义 projection item 结构:
    • 稳定 node id
    • parent_id
    • sort_key
    • depth
    • child_count
    • title/text
    • collapsed
    • refs summary
    • style hint
  • Rust runtime 补 projection builder
    • /mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs 中增加正式 mindmap projection builder
    • kernel.project_view 可返回 KernelProjectionKind::Mindmap
    • 明确 preview 与 editor 的输出差异,不再直接返回 compat 整树
  • 前端 adapter 改造:
    • /mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmap-projection.ts 从“blob 摘要器”改为“kernel projection adapter”
    • 把 adapter 输出限定为 simple-mind-map 所需最小数据形状
    • 不再让 adapter 同时承担 canonical model 职责
  • 独立页读路径切换:
    • /mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/page.tsx 改为优先读取 kernel projection
    • SSR 初始数据不再以 mindmaps.get raw blob 为主
    • mindmap-page-client.tsx 仅接收 projection / adapter 输出
  • 文档内嵌预览切换:
    • 内嵌卡片优先消费 mindmap_preview
    • 预览态不再默认依赖整棵 blob
    • 轻量预览和沉浸编辑使用不同 projection,避免主编辑壳过早挂载
  • 兼容回退策略:
    • kernel projection 不可用时,可临时回退到 compat mindmaps.get
    • 回退路径必须显式标记为 compat/fallback
    • 回退逻辑不得反向成为新主路径
  • 可观测性与追踪:
    • projection 响应带 request_id / trace_id
    • 前端记录当前页面命中的 projection 来源:
      • kernel
      • compat fallback
    • 为后续切流留出观测点
  • 测试与验收:
    • 增加 runtime 单测:mindmap_preview / mindmap_editor 输出稳定
    • 增加 adapter 单测:projection -> simple-mind-map data
    • 增加独立页 smoke:首屏读 projection 成功
    • 增加内嵌态 smoke:文档页不再依赖整图 blob 才能显示摘要

出阶段判定:

  • 独立页正式主读链已经是 kernel projection
  • 文档内嵌预览正式主读链已经是 preview projection
  • compat mindmaps.get 只作为 fallback,而不是默认主链
  • 前端已有清晰的 projection -> adapter -> renderer 三层边界

13.3 Phase 6-C:再切写路径

目标:

  • 常规编辑改为命令流

详细 checklist

  • 明确正式写面:
    • create_node
    • update_node
    • move_subtree
    • reorder_siblings
    • archive_node
    • restore_node
    • attach_edge
    • detach_edge
  • 补齐 kernel command 缺口:
    • 若当前 kernel 缺少 sibling reorder 命令,需补齐
    • 若当前 kernel 缺少 subtree archive/delete 语义,需补齐
    • 若当前 kernel 缺少导图节点 refs 的 attach/detach 语义,需补齐
  • compat MindmapOp 到 kernel command 的翻译表落地:
    • addChild
    • addSiblingAfter
    • updateText
    • setHyperlink
    • setRefs
    • appendNote
    • deleteNode
    • 为每个 op 指定唯一的 kernel command 映射与错误语义
  • Rust runtime 改造:
    • /mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs 中的 mindmap_apply_ops 改为 command translator
    • 不再直接对 compat 树做 canonical 修改
    • 执行完成后返回:
      • command 执行结果
      • 最新 projection 或 refresh token
      • trace / audit 信息
  • 前端保存链改造:
    • MindmapBlock.tsx 中工具栏操作不再默认走 getData()/POST whole blob
    • 节点编辑、移动、删除、引用更新都发命令,而不是整体回传 snapshot
    • 本地只保留短暂 optimistic state,不再作为长期真相
  • 导图 route 改造:
    • /api/mindmap/[docId]/[mindmapId]POST 从常规编辑主入口降级
    • 新增或切换到专用 command route / command envelope
    • mindmap_put 只保留:
      • 导入
      • 替换快照
      • 恢复
      • 迁移回放
  • 双写与迁移策略:
    • 迁移期允许 kernel truth + compat snapshot 双写
    • 双写失败时要有清晰告警,不得静默漂移
    • 明确哪一侧是主真相,哪一侧只是镜像
  • 冲突与审计:
    • 所有命令返回 revision / version
    • 写入链保留 command_id / request_id / trace_id
    • 并发冲突时优先按 kernel command 冲突规则处理,而不是前端最后一次整图覆盖
  • 测试与验收:
    • runtime 单测:各类 MindmapOp 均正确翻译为 kernel command
    • route 单测:常规编辑不再依赖整图 put
    • UI smoke:增删改拖拽节点后可稳定刷新 projection
    • 回归测试:导入/恢复仍可通过 mindmap_put 正常工作

出阶段判定:

  • 常规编辑链路已经以 kernel command 为主
  • mindmap_put 已从常规编辑主链退出
  • 前端不再依赖 getData() 作为长期提交真相
  • compat snapshot 即使保留,也只是双写镜像或导入导出格式

13.4 Phase 6-D:统一 AI / CLI

目标:

  • AI / CLI 改为直接操作 kernel truth

详细 checklist

  • AI 工具口径统一:
    • 明确 AI 读导图优先读取 kernel projection / subtree
    • 明确 AI 写导图优先发送 kernel command
    • 明确 AI 不再以“输出完整 mindmap JSON 并整体覆盖”作为主模式
  • compat tool 重构:
    • mindmap_get 降级为 compat read facade
    • mindmap_get_subtree 降级为 compat read facade
    • mindmap_apply_ops 降级为 compat write facade
    • mindmap_put 降级为导入/恢复工具
  • 新 kernel-aware tool 面补齐:
    • 面向 node / subtree / edge 的导图工具定义
    • 工具参数默认使用:
      • nodeId
      • rootNodeId
      • workspaceId
      • pageId
      • edgeType
    • 避免继续以 compat uid + whole tree 为中心
  • AI host/runtime 接缝改造:
    • 导图 agent route 优先走 kernel-aware tool
    • mindmap_outline_to_mindmap 的输出优先落 kernel truth
    • AI 修改后的刷新结果优先返回 projection,而不是 raw blob
  • CLI 改造:
    • CLI 新增或切换到导图 kernel command 子命令
    • 现有 mindmap get/put/op 标记 compat/legacy 语义
    • CLI smoke 优先验证 kernel command 与 projection 输出
  • 权限与审计:
    • AI / CLI 导图写入保留 actor / trace / command id
    • 区分:
      • 用户直接编辑
      • AI 代理修改
      • 导入/恢复
    • 确保后续 bridge log / audit 能区分来源
  • 结果返回规范:
    • AI / CLI 执行导图写命令后,默认返回:
      • command 执行结果
      • 受影响 node / edge
      • 最新 projection 摘要
    • 非必要不再回传整棵 compat 树
  • 迁移与兼容:
    • 迁移期 compat tools 仍可保留
    • 但默认优先级必须低于 kernel-aware tools
    • 新增 AI 能力时不得再优先扩写 compat blob 工具
  • 测试与验收:
    • AI tool 单测:至少一条创建节点、修改节点、挂接 refs 的链路走 kernel command
    • CLI smoke:至少一条真实导图操作链不依赖整图覆盖
    • 回归测试:compat tool 仍可用于迁移和紧急 fallback

出阶段判定:

  • AI 已能直接创建、修改、移动导图节点与引用边
  • CLI 已能直接操作导图 kernel truth
  • compat tools 只剩 facade / import-export / fallback 职责
  • 导图 AI / CLI 主链已经和 Sidebar / 页面树 / 阅读页一样,正式回到统一 kernel command / projection 体系

13.5 Phase 6-E:压缩旧壳

目标:

  • MindmapBlock.tsx 收缩为可替换 view shell

要求:

  • 真相、命令、projection 已完全外移
  • 前端只剩渲染与交互适配

14. 完成判定

只有同时满足下面几条,才能说 Kernel Phase 6 完成。

  • 导图正式事实源已经进入 kernel node / edge / subtree
  • 导图独立页读取的是 kernel projection,而不是 mindmaps.get raw blob
  • 文档内嵌导图读取的是 preview projection,而不是前端直接拼整棵树
  • 常规编辑操作已经回写 kernel command,而不是 POST 整棵 getData()
  • AI / CLI 可以直接创建、修改、移动导图节点,而不依赖整图覆盖
  • simple-mind-map 已经退到 renderer / adapter 层
  • mindmaps blob 存储已降级为 compat snapshot 或导入导出用途

15. 非目标

这阶段不以这些事情为主目标:

  • 立即把整个导图画布改写成 Rust 前端
  • 立即替换全部导图 UI 细节
  • simple-mind-map 的所有样式字段完整提升为 kernel 语义
  • 在第一阶段就清空全部历史兼容接口

Phase 6 的重点只有一个:

先把导图真相、导图命令、导图 projection 从前端 blob 体系里拔出来,正式并入 tree-first graph kernel