Skip to content

feat(canvas): 新增会话画布,作为右侧工作区 Tab 呈现 - #1971

Open
wafo210715 wants to merge 1 commit into
proma-ai:mainfrom
wafo210715:feat/canvas-workspace-tab
Open

feat(canvas): 新增会话画布,作为右侧工作区 Tab 呈现#1971
wafo210715 wants to merge 1 commit into
proma-ai:mainfrom
wafo210715:feat/canvas-workspace-tab

Conversation

@wafo210715

Copy link
Copy Markdown
Contributor

功能

为 Agent 会话新增自由画布(Canvas),以右侧工作区的普通 Tab 呈现:

  • JSON Canvas 开源格式obsidianmd/jsoncanvas),与 Obsidian Canvas 互通
  • 通过右侧工作区加号菜单「打开画布」进入;作为可关闭 Tab,天然支持既有的并排分屏(画布+文件同屏)
  • 交互对齐 Figma/Miro:空白双击建节点、锚点拖连线、框选、⌘G 成组、⌘Z/⌘⇧Z 撤销重做、自动整理、空格/中键平移、⌘滚轮缩放
  • 按会话持久化:内容存为 <session-dir>/session-canvas.canvas,组件内防抖自动保存 + 卸载/beforeunload 同步兜底,带 loaded 守卫防止空内容覆盖磁盘
  • 选中簇可导出为独立 .canvas + .md 文件到 ~/.proma/canvas-exports/

实现要点

  • 画布 Tab 复用 WorkspaceComponentTab 打开状态机制(per-session 持久化、关闭回退),key={sessionId} remount 避免跨会话状态残留
  • effectiveActiveTab 中 canvas 豁免 workspaceSlug 要求(会话画布不依赖项目根)
  • IPC 四层契约:CANVAS_IPC_CHANNELS(export/load-session/save-session/save-session-sync)→ main handlers → preload bridge → renderer
  • 会话画布路径基于既有 getAgentSessionWorkspacePath,不引入新存储

截图

Screenshot 2026-09-03 at 03 16 36 2e39807fe62791275a0852987a3b1c58 画布目前的逻辑是与当前的working session绑定的,之后可以考虑与obsidian集成,实现跨会话。

个人使用场景

读文献、捋理论谱系的时候爱用
偶尔写游戏代码的时候也会用这个捋各个系统之间的沟通
可以截图给agent,也有助于边看思维导图边用语音描述给agent

测试

  • tsc --noEmit 通过;bun test 377 pass / 4 fail(4 个失败在未改动前的 upstream/main 基线上同样存在,与本 PR 无关)
  • vite build / preload / main esbuild 通过
  • 手测:打开画布 → 双击建节点 → 连线 → 重启回显 ✅

Made with Proma · GitHub

- 采用 JSON Canvas 开源格式(github.com/obsidianmd/jsoncanvas),与 Obsidian Canvas 互通
- CanvasView 自由画布:双击建节点、锚点拖连线、框选、成组、撤销重做、自动整理、缩放平移
- 通过右侧工作区加号菜单「打开画布」进入;作为普通可关闭 Tab,天然支持并排分屏
- 画布内容按会话持久化(session-canvas.canvas),组件内防抖自动保存 + 卸载/beforeunload 同步兜底
- 支持选中簇导出为独立 .canvas + .md 文件到 ~/.proma/canvas-exports/

Made-with: Proma
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant