Skip to content

feat(voyager): About tab (docstring + Mermaid) and 2/3-width sidebar#95

Merged
allmonday merged 2 commits into
masterfrom
feat/006-voyager-about-tab
Jul 1, 2026
Merged

feat(voyager): About tab (docstring + Mermaid) and 2/3-width sidebar#95
allmonday merged 2 commits into
masterfrom
feat/006-voyager-about-tab

Conversation

@allmonday

Copy link
Copy Markdown
Collaborator

Summary

  • 为 ER-diagram 侧边栏新增最左的 About tab,渲染 schema 模型类 __doc__ 为 GitHub-Flavored Markdown;docstring 中的 ```mermaid 围栏块(stateDiagram-v2 / flowchart / sequenceDiagram)就地渲染为可视化图表,语法错误块降级为"错误提示 + 默认折叠源码"。
  • 把侧边栏拖拽上限从固定 800px 改为 floor(viewport × 2/3),视窗缩放时主动 clamp 到新上限;下限 300px 与默认初始宽度不变。
  • docstring 经 DOMPurify 清洗,所有 <a> 强制 target="_blank" rel="noopener noreferrer";About tab 与 Related Entities 子图一样只读——不识别实体引用、不导航。
  • 切换实体保留当前激活 tab(沿用 spec 005 FR-012 策略,对四个 tab 一视同仁);About tab 在最左,但侧边栏首次打开默认激活 Fields 不变。

设计要点

  • docstring 走独立端点 POST /docstring(与 /source / /vscode-link 对称),不改 SchemaNode、不改 /source 契约——避免 er-diagram 初始 payload 膨胀与 service worker 缓存键失效。
  • 前端依赖 marked / dompurify / mermaid 走 CDN(cdn.jsdelivr.net),匹配现有 Vue/d3/jQuery 模式;三个 URL 加入 sw.js 的 CDN_ASSETS 预缓存以保证离线可用。
  • mermaid v11 Promise-form parse:渲染管线用 async/await 统一处理 sync (v10-) 与 Promise (v10+/v11) 两种返回形态,避免成功路径上提前退出导致 pending 数组为空的 bug(converge 阶段发现并修复)。

Changes

文件 改动
src/nexusx/voyager/voyager_context.py 新增 get_docstring(schema_name) 方法
src/nexusx/voyager/create_voyager.py 新增 POST /docstring 路由,状态码与 /source 一致
src/nexusx/voyager/web/component/about-display.js 新建组件:marked + DOMPurify + mermaid.run 管线,per-block try/catch + <details> 折叠降级,链接强制 noopener,stale-fetch 守卫
src/nexusx/voyager/web/component/schema-code-display.js showAbout prop;tab 栏最左加 About;content 区挂载 <about-display>
src/nexusx/voyager/web/vue-main.js 引入 AboutDisplay 全局组件;mermaid.initialize({ startOnLoad: false, theme: "default" })startDragDrawer clamp 改为 Math.max(300, Math.min(floor(innerWidth × 2/3), ...))onMounted 注册 window.resize 监听器
src/nexusx/voyager/web/index.html 引入 marked / dompurify / mermaid 三个 <script><schema-code-display>:show-about="store.state.mode === 'er-diagram'"
src/nexusx/voyager/web/sw.js CDN_ASSETS 预缓存列表追加三个 CDN URL
tests/test_voyager_docstring.py 新增 5 条 pytest 用例(happy / 空 docstring / 非法格式 / module 缺失 / class 缺失)
demo/enterprise_voyager/models.py Employee 加 docstring,覆盖 FR-003 全部 Markdown 元素 + FR-004 三种 Mermaid 类型,便于人工验证
CHANGELOG.md 新增 Unreleased 章节描述本期变更
specs/006-voyager-about-tab/ 全套 spec-kit 产物(spec / plan / tasks / research / data-model / contracts / quickstart / checklists),中文撰写

Test plan

后端自动化(已通过)

  • uv run pytest tests/test_voyager_docstring.py -v → 5/5 PASSED
  • uv run pytest --no-cov -q1128 passed, 6 skipped,无回归
  • node --check 三个修改/新增 JS 文件全过
  • curl e2e:HTML 服务、3 个新 script 标签注入、show-about 接线、Employee docstring 含 3 种 mermaid 类型、空 docstring 返回 {"docstring":""}、非法 schema_name → 400

浏览器手动验证(按 specs/006-voyager-about-tab/quickstart.md §3 路径 A-G)

启动:uv run uvicorn demo.enterprise_voyager.voyager_demo:app --port 8010,开 http://localhost:8010/voyager强刷一次(Ctrl+Shift+R)让 service worker 拉新缓存。

  • 路径 A:双击 Employee → 切到 About tab → 看到标题/段落/列表/表格/代码块/引用块/水平线/链接的合理排版(无 ##/**/` 标记泄露)
  • 路径 B:滚动到"状态机/入职流程/离职交互"小节 → 看到 3 张可视化 mermaid 图(不是源码)
  • 路径 C:临时把 Employee docstring 中某段 mermaid 改坏(如删 --> 的尖括号),重启服务 → 看到错误提示 + 可展开"查看源码"折叠区,其它内容正常
  • 路径 D:双击 Organization(无 docstring)→ 看到"该实体暂无 docstring。";DevTools Network 阻断 /docstring → 看到红色错误文案;Slow 3G 节流 → 看到 <q-linear-progress> 加载条
  • 路径 E:视窗拉到 1920px → 拖手柄向左到极限 → 宽度 ~1280px;缩到 1200px → 自动 clamp 到 ~800px;向右拖到下限 → ~300px
  • 路径 F:当前在 Employee 的 About tab → 单击 Department → 侧边栏停留在 About tab、内容刷新为 Department
  • 路径 G:点 docstring 底部的 [SQLModel 关系文档] 链接 → 在新 tab 打开;主画布选中状态仍是 Employee;侧边栏仍停留 About tab

Mermaid 渲染专项(路径 B 的细化,converge T022 修复后)

  • 3 种 mermaid 类型(stateDiagram-v2 / flowchart / sequenceDiagram)全部渲染为可视化图表,不是源码
  • 同一 docstring 中 python 围栏代码块仍按等宽字体原样展示,不被误判为图表

🤖 Generated with Claude Code

allmonday and others added 2 commits July 1, 2026 13:05
为 ER-diagram 双击打开的侧边栏新增最左的 About tab,渲染 schema 模型类
__doc__ 为 GitHub-Flavored Markdown,docstring 中的 ```mermaid 围栏块
(stateDiagram-v2 / flowchart / sequenceDiagram)就地渲染为可视化图表;
语法错误块降级为"错误提示 + 默认折叠源码"。同时把侧边栏拖拽上限从
固定 800px 改为 floor(viewport × 2/3),视窗缩放时主动 clamp 到新上限。

- 后端:新增 POST /docstring 端点 + VoyagerContext.get_docstring 方法,
  与 /source /vscode-link 对称,不改 SchemaNode、不改现有端点契约
- 前端:新建 about-display.js(marked + DOMPurify + mermaid.run 管线,
  per-block try/catch + <details> 折叠降级,链接强制 noopener);
  schema-code-display.js 加 About tab(最左,默认激活仍是 Fields);
  vue-main.js mermaid.initialize + 拖拽 clamp + resize 监听
- 依赖:marked@15 / dompurify@3 / mermaid@11 走 CDN(cdn.jsdelivr.net),
  匹配现有 Vue/d3/jQuery 模式;三个 URL 加入 sw.js CDN_ASSETS 预缓存
- 测试:tests/test_voyager_docstring.py 5 条 pytest 用例
- demo:Employee docstring 覆盖 FR-003 全元素矩阵 + FR-004 三种 mermaid 类型

Spec-kit 产物在 specs/006-voyager-about-tab/,全中文撰写(项目约定)。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@allmonday allmonday merged commit 50f7208 into master Jul 1, 2026
6 checks passed
allmonday added a commit that referenced this pull request Jul 1, 2026
…-width sidebar

Version bump for PR #95 (Voyager About tab + sidebar width clamp).
Updates CHANGELOG, pyproject.toml, uv.lock.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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