From 3ddf12a3c2150105b71717444260627119900434 Mon Sep 17 00:00:00 2001 From: tangkikodo Date: Wed, 1 Jul 2026 13:05:18 +0800 Subject: [PATCH 1/2] feat(voyager): About tab (docstring + Mermaid) and 2/3-width sidebar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为 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 +
折叠降级,链接强制 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 --- .specify/feature.json | 2 +- CHANGELOG.md | 27 ++ demo/enterprise_voyager/models.py | 96 ++++++ .../checklists/requirements.md | 36 +++ .../contracts/about-tab-component.md | 133 ++++++++ .../contracts/docstring-endpoint.md | 84 +++++ .../contracts/sidebar-width-clamp.md | 126 ++++++++ specs/006-voyager-about-tab/data-model.md | 126 ++++++++ specs/006-voyager-about-tab/plan.md | 98 ++++++ specs/006-voyager-about-tab/quickstart.md | 172 +++++++++++ specs/006-voyager-about-tab/research.md | 122 ++++++++ specs/006-voyager-about-tab/spec.md | 148 +++++++++ specs/006-voyager-about-tab/tasks.md | 229 ++++++++++++++ src/nexusx/voyager/create_voyager.py | 10 + src/nexusx/voyager/voyager_context.py | 20 ++ .../voyager/web/component/about-display.js | 287 ++++++++++++++++++ .../web/component/schema-code-display.js | 11 +- src/nexusx/voyager/web/index.html | 5 + src/nexusx/voyager/web/sw.js | 4 + src/nexusx/voyager/web/vue-main.js | 37 ++- tests/test_voyager_docstring.py | 69 +++++ 21 files changed, 1839 insertions(+), 3 deletions(-) create mode 100644 specs/006-voyager-about-tab/checklists/requirements.md create mode 100644 specs/006-voyager-about-tab/contracts/about-tab-component.md create mode 100644 specs/006-voyager-about-tab/contracts/docstring-endpoint.md create mode 100644 specs/006-voyager-about-tab/contracts/sidebar-width-clamp.md create mode 100644 specs/006-voyager-about-tab/data-model.md create mode 100644 specs/006-voyager-about-tab/plan.md create mode 100644 specs/006-voyager-about-tab/quickstart.md create mode 100644 specs/006-voyager-about-tab/research.md create mode 100644 specs/006-voyager-about-tab/spec.md create mode 100644 specs/006-voyager-about-tab/tasks.md create mode 100644 src/nexusx/voyager/web/component/about-display.js create mode 100644 tests/test_voyager_docstring.py diff --git a/.specify/feature.json b/.specify/feature.json index 2d308b8..58edaf5 100644 --- a/.specify/feature.json +++ b/.specify/feature.json @@ -1,3 +1,3 @@ { - "feature_directory": "specs/005-related-entities-tab" + "feature_directory": "specs/006-voyager-about-tab" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 7364612..34500a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## Unreleased + +### New Feature: Voyager ER 图新增 "About" tab(docstring + Mermaid 渲染)& 侧边栏宽度放宽 + +双击 entity 打开的侧边栏原先只有 Fields / Source Code / Related Entities 三个 tab,schema 模型类的 `__doc__` 完全没有入口。本次在最左新增 **About** tab,把类级 docstring 当作 GitHub-Flavored Markdown 渲染——含标题、列表、表格、代码块、引用块、水平线等元素;docstring 中的 ```mermaid 围栏块(`stateDiagram-v2` / `flowchart` / `sequenceDiagram` 等)就地渲染成可视化图表,方便在 docstring 里直接画"实体生命周期 / 状态转移 / 交互流程"。Mermaid 块语法错误时降级为"错误提示 + 默认折叠的原始源码",方便复制到外部工具调试,且单块失败不影响其它内容。 + +同时把侧边栏拖拽宽度上限从固定 **800px** 改为 **floor(viewport × 2/3)**,宽屏下也能给宽表格、宽 Mermaid 图、长 Python 行留足空间;视窗缩放时自动 clamp 到新的 2/3 上限,下限 300px 与默认初始宽度不变。 + +**关键设计:** +- 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` 预缓存列表以保证离线可用。 +- docstring 经 `DOMPurify.sanitize` 清洗后再注入,所有 `` 强制 `target="_blank" rel="noopener noreferrer"`,且不识别"实体引用"格式——About tab 与 Related Entities 子图一样**只读**。 +- 切换实体保留当前激活 tab(沿用 spec 005 FR-012 的策略,对四个 tab 一视同仁);About tab 在 tab 栏最左,但侧边栏首次打开默认激活 Fields 不变。 + +**Changes:** +- `src/nexusx/voyager/voyager_context.py`: 新增 `get_docstring(schema_name)` 方法,复用 `_resolve_object`、返回 `{"docstring": obj.__doc__ or ""}` +- `src/nexusx/voyager/create_voyager.py`: 新增 `POST /docstring` 路由,状态码映射与 `/source` 一致 +- `src/nexusx/voyager/web/component/about-display.js`: 新建组件,渲染管线 = marked → DOMPurify → innerHTML → 链接硬化 → mermaid.run(per-block try/catch + 错误降级) +- `src/nexusx/voyager/web/component/schema-code-display.js`: 加 `showAbout` prop;tab 栏最左加 About;content 区挂载 `` +- `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 三个 ` + + + +