文档 HTML 展示与编写规范
本文面向维护产品和实现文档的贡献者。所有发布页面都以 HTML 展示,共享导航、搜索和主题控件。源码按内容选择:需要可视化的实现与设计文档使用原生 HTML,简短用法与参考文字保留 Markdown。
渲染方式#
| 源码 | 发布结果 | 作者负责的内容 |
|---|---|---|
| Markdown | 文档站布局中的 HTML 正文 | 标题、说明、命令和相对文档链接。 |
| HTML 片段 | 同一布局中的 HTML 正文 | 语义化章节、图示和必要的原生交互;使用站点主题变量。 |
| 独立 HTML | 包含 iframe 的站点页面和 .raw.html 正文 |
自身的响应式布局、主题和内部导航;外层站点控件仍然可用。 |
需要共享文档站布局的实现文档优先使用 HTML 片段。可视化需要独立视口时使用完整 HTML 页面。iframe 用于隔离布局,不是不可信脚本的安全沙箱。
实现位置#
| 所属文件 | 职责 |
|---|---|
scripts/docs_site/nav.py |
源文件发现、语言配对、九个 Tab、分组和 PAGE_ORDER。 |
scripts/docs_site/build.py |
渲染、相对链接转换、静态资源、搜索记录和构建产物原子替换。 |
scripts/docs_site/template.py |
共享页面布局和元数据。 |
scripts/docs_site/search.py |
搜索索引构建。 |
scripts/docs_site/assets/site.css |
字体、间距、响应式布局和深浅主题变量。 |
scripts/docs_site/assets/site.js |
导航、主题与语言控件、搜索、全屏和代码复制。 |
apps/server/openprogram_server/_webui/routes/docs.py |
源码或打包文档的选择,以及默认 worker 的 /docs/ 挂载。 |
阅读结构与视觉规范#
开头说明文档回答的问题、读者、范围和实现边界。先解释公开入口与数据、状态变化,再展开实现细节。代码映射表用于说明所有权,图示用于说明控制或数据流,文末“实现状态”集中列出剩余工作和证据缺口。
HTML 片段使用现有的 --bg、--bg-code、--tx、--tx-soft、--acc 和 --bd 变量。站点采用与 Web 应用一致的暖中性色和橙色强调色,不在正文内另设固定的浅色配色。
标题使用语义化层级和稳定的 id,让 HTML 章节进入本页导航。表格在窄屏无法容纳全部列时使用局部滚动容器。图示提供可访问的标题和说明。原生折叠控件用于区分详细证据与主要解释。键盘焦点、减少动态效果设置和手机阅读都属于文档验收范围。
站点主题偏好保存为 op-docs-theme,切换时在站点窗口派发 documentThemeChange。iframe 有独立文档,不会自动接收该事件。独立页面需要明确维护自己的主题行为,或使用片段继承共享主题。
共享阅读层为宽表格提供可通过键盘操作的局部横向滚动,并保留可读的列宽。独立 HTML 同样获得表格支持和图示滚动区域;源码未指定背景时,阅读层补充不透明底色,避免文字与外层主题冲突。这些处理保留正文和页面自身配色,不代表页面所述实现已经通过验收。
导航与双语源码#
九个 Tab 为 start、install、capabilities、interfaces、models、integrations、server、reference 和虚拟的 design。设计源码位于 docs/reference/design/,不存在 docs/design/ 源码目录。
TAB_SECTIONS 定义产品阅读顺序,PAGE_ORDER 定义显式页面顺序。其余页面按目录分组,目录标题使用配置名称或 README 标题。不能把侧栏理解为文件树的直接复制,也不能假定所有页面都按文件名排序。
英文为默认版本。topic.zh.md 与 topic.md 配对,topic.zh.html 与 topic.html 配对。中文源码通过语言控件访问,不单独占用第二个侧栏入口。修改双语主题时同步两种语言。
构建器兼容已有的同名 Markdown/HTML 配对,为 HTML 附属页分配 .viz.html 输出。相对 topic.md 链接指向正文输出,相对 topic.html 链接指向 HTML 附属页的 topic.viz.html 输出,并保留章节锚点。中文 HTML 附属页输出为 topic.zh.viz.html,中文 Markdown 正文仍为 topic.zh.html;语言控件分别指向这些独立地址。这项兼容机制不意味着应维护两份相同说明。合并前比较内容,保留独立图示和证据,并更新引用链接。
构建产物和仅用于静态资源的目录不参与页面发现,docs/superpowers/ 被显式排除。仅以下划线开头不会自动排除:主动性研究归档当前仍会被发现。
构建与本地展示#
python -m scripts.docs_site.build
python -m scripts.docs_site.checklinks
python -m scripts.docs_site.checklang
python -m scripts.docs_site.check_landing
在仓库根目录、具有文档构建依赖的环境中运行上述命令。贡献指南列出 uv run 环境。链接检查读取构建后的 HTML,因此必须先构建再检查。
checklang 目前只检查产品区默认 Markdown,排除了设计目录,也不扫描 HTML 源码。该命令通过不能证明所有设计页面都满足双语约定;修订的 HTML 需要单独检查语言与对应版本。
构建器重新生成由代码派生的 CLI、配置和 Provider 参考页,先写入 docs/_site.tmp/,成功后替换 docs/_site/。docs/_site/ 被 Git 忽略。docs/_static_root/ 中的文件发布到站点根,不进入导航或搜索。
源码实例读取其 docs/_site/。已安装 runtime 可以读取 Server _frontend/docs/ 中的打包文档;构建另一个 checkout 不会更新该目录。声明本地验收完成前,要比较实际响应内容与预期产物。默认本地验收地址为 http://localhost:18100/docs/。完成应用更新时,遵循仓库本地 App 规则使用 scripts/refresh-local-app.sh。
源码 worker 在注册文档路由时检查是否需要重建,普通 HTTP 读取不会扫描或重建源码树。当前没有持续 watch 模式。
方案比较#
现有设计选择仓库内的 Python 渲染器,以保留原生 HTML、SVG 和脚本内容,并接入单端口 worker。以下比较针对本项目需求,不作为外部产品最新能力调查。
| 考虑项 | 当前 Python 渲染器 | VitePress 方案 | MkDocs 方案 |
|---|---|---|---|
| 已有原生可视化文档 | 保留为片段或独立页面 | 需要评估组件与布局系统的接入方式 | 需要评估原始 HTML 与主题接入方式 |
| 共享导航与搜索 | 由本仓库维护 | 对照项目需求评估内置导航和搜索 | 对照项目需求评估内置导航和搜索 |
| 工具链 | Python 渲染与静态浏览器资源 | 增加基于 Node 的文档构建 | 基于 Python 的文档构建与主题配置 |
| 维护职责 | 项目维护布局、导航和可访问性 | 框架配置与升级维护 | 框架和主题配置及升级维护 |
渲染器使用 markdown-it-py、mdit-py-plugins 和 Pygments,产出静态资源,不引入客户端框架或编辑器/CMS。本次文档优化不迁移站点框架。
阅读导航
分组导航使用一条从首行延伸到当前行的连续虚线,末端弯角对齐文字中心;同组切换页面时指示线高度连续变化。鼠标悬停和键盘焦点显示独立的中性预览指示,不改变当前页面选中状态。键盘焦点使用文字下划线与轻微背景区分,不给整行增加大边框。章节目录采用相同指示方式。过滤、文字换行、语言切换和窗口调整均重新计算位置。首页概览提供明确的中英文标题,不显示由文件名推导的标签。
阅读界面保留九个分类与静态 HTML 路由。顶部显示分类,左侧按组显示页面,中央为正文,右侧为章节目录。窄屏使用页面目录抽屉,并通过可展开的阅读进度控件访问章节。
交互参考 Rare UI Hook Sidebar、Scroll Progress 和 Code Block,采用分组选中指示、带章节跳转的进度和带标签的代码复制。现有静态资源独立实现这些行为,不包含 Rare UI 源码或 React 依赖;直接复用组件源码有单独的许可要求。不采用装饰球、邻近缩放和变形导航,以保持文字目标的位置稳定。
视觉变量沿用应用配色:正文背景 #faf9f5、侧栏 #f5f4ed、代码 #f0eee6、文字 #3d3d3a、强调色 #b8651f,并保留深色对应值。导航和正文使用本地 Inter,代码使用系统等宽字体,内容左对齐。分组通过连接指示区分层级,正文保持主要阅读位置。
滚动根据当前容器更新章节与进度。展开进度控件显示真实锚点链接,选择章节后关闭并定位;Escape 和外部点击关闭控件。SPA 切页重新收集标题并重置进度;全屏使用正文滚动容器。独立 iframe 自行负责内部阅读状态,外层隐藏进度控件。窗口与正文尺寸变化重新计算状态,减少动态效果偏好关闭滚动动画。
代码块增加语言标题与始终可用的复制按钮,按钮位于横向滚动区域外。复制只读取代码文字,显示成功或失败并保留语法高亮;已有的作者自定义复制控件保持不变。搜索、主题、语言配对、相对链接和自动生成参考页维持原有行为,不增加外部运行时请求。
验收覆盖深层链接、分类及页面切换、浏览历史、语言切换、键盘关闭目录、代码复制、长短正文、全屏、移动端溢出和 iframe 隔离。在独立审查及构建、链接、语言、首页、仓库和浏览器检查通过之前,实现证据保持待验收状态。
设计文档的信息结构
设计目录采用“领域 → 子模块 → 页面”三级导航。一级仅保留七个入口:架构总览、Agent 与工作流、上下文与记忆、界面与交互、模型与外部接入、安全与工程、补充材料。子模块在所属领域内展开,不再将所有分组并列。总览直接列出入口页,不增加重复的总览层。
每个页面只属于一个子模块。直接访问和站内切页时展开当前页的全部祖先分类。过滤匹配页面及分类名称,展开并保留匹配路径;清空后逐级恢复原先展开状态。层级使用原生 details 和 summary,支持键盘操作。新页面在待分类入口保持可见。英文与中文共用相同层级、顺序和 URL 映射。目录首页使用相同的七个领域。
分类只改变导航结构,保留详细正文、图示、URL、实现状态与证据。原型、实施记录与研究材料在补充材料下分开,不表示当前产品行为。验收覆盖完整且唯一的页面归属、七个一级入口、父子展开与过滤恢复、双语、移动端和其他产品 Tab 的兼容性。
侧栏视觉层级:领域标题 13px、子模块标题 12px、页面标题 13px;子模块只增加 12px 缩进,页面保持统一对齐与自然换行。一级保留页数,二级不重复显示页数。选中页仅使用连续指示线和强调文字,不显示背景块;页面项和分类标题在鼠标悬停时也不显示背景块,键盘焦点使用独立的内侧边框,不对整段标题加下划线。移除重复的竖直边框,保留当前组的连续指示线。所有规则只作用于设计导航,兼容深浅主题和窄屏。
唯一正文与稳定网址
每个主题只维护一份正文。合并保留独有图示、约束、实现状态和验收证据;用途不同的使用指南与 API 参考继续分开。主题文件名使用描述性的英文小写与连字符,不带日期、TODO 或 PROBLEM 前缀;未实现提案在标题中明确状态。
同一主题的设计理由和模型选型分析直接放在设计正文,不再单独维护第二份文档。Runtime 合并介绍与生命周期取舍,DAG 设计包含备选模型及采用结论。合并时依据当前 schema 消除过时结论,保留独有约束和参考比较,通过章节锚点保留旧链接。使用指南和 API 参考回答不同读者问题,继续独立维护。
构建器维护退役输出路径到唯一正文的显式映射,生成仅跳转的 HTML,不加入导航、搜索或 sitemap。跳转保留查询参数和章节片段;同源外部脚本在 worker 的 CSP 下执行跳转,不使用内联跳转脚本。SPA 遇到仅跳转页面时执行完整加载;浏览器历史已切到该地址时显式刷新。目标必须存在,旧网址不能覆盖真实页面或再指向另一条旧网址。映射无效时原子构建失败。存在中文正文时中文旧网址继续进入中文;独立 HTML 的 raw 地址和 Markdown/HTML companion 地址也纳入兼容映射。
验收包括正文唯一归属、全部旧网址直接进入有效目标、合并后独有内容仍在、链接与语言检查,以及默认本地文档入口的导航和跳转。文档整理不改变运行时行为,也不把未实现设计标为已实现。
子系统目录内的名字省略重复的子系统前缀,例如 context/statistics.html、memory/editor.html、runtime/dag/layout.html。页面标题同样直接写组成、压缩、统计口径;所属范围由父级目录、面包屑和开头正文说明。保留具有独立含义的技术术语与跨子系统名称。短名字已被文字页占用时,用 diagram 明确区分图解。保留旧标题锚点,旧网址直接指向最新输出,不形成多次跳转。
实现状态#
| 范围 | 状态 | 边界 |
|---|---|---|
| Markdown、片段和独立 HTML 渲染 | 源码已具备 | 不同内容格式承担不同布局职责。 |
| 双语路由与九个 Tab | 源码已具备 | 配对机制不会翻译正文。 |
| 原子构建与打包资源服务 | 源码已具备 | 构建成功与更新已安装资源是不同状态。 |
| 统一文档设计 | 已应用到本次重做的实现页面 | 既有独立页面仍需逐项视觉检查。 |
frontmatter scripts / styles 资源注入 |
未实现 | 使用已支持的 HTML 方式保存代码与资源,不应描述为现有功能。 |
| 持续监视源码 | 未实现 | 修改后显式重建。 |
语言一致性
每份作者维护的文档提供完整中英文正文。无语言后缀的源文件为英文,.zh 源文件为中文。翻译完整保留解释、图、代码、标识符、链接与实现状态边界,标题和图内可见说明使用对应语言。侧栏、面包屑、上一篇和下一篇及搜索采用对应语言的标题和目标地址。语言检查覆盖 design、HTML、SVG 与可访问标签,同时保留技术标识符和兼容锚点。交互页面还需检查脚本生成的可见文案。功能矩阵的中英文页面使用同一套数值、明细和图表一致性校验。
目录命名
目录名称采用简短名词短语,与正文中的完整说明标题分开。英文优先使用 2–3 个单词;含义明确时可以只用一个词,最多 4 个单词、26 个字符。中文最多 12 个字符。英文使用句首大写,保留专名与技术缩写的原有大小写。省略重复的产品名或父分类名称,以及完整性声明、代码签名和括号说明。需要区分内容类型时,统一使用图解、对比、原型等名称。同一末级分类内名称不能重复。用一份按文档源路径登记的双语名称表统一提供目录、面包屑、搜索和前后页名称;自动生成的参考页继续使用代码生成的名称。正文、URL、锚点、层级和 RareUI 样式保持不变,验收时检查名称在侧栏实际宽度内显示完整,不使用截断或省略号。
文档完整性
仓库 README 介绍项目、经过核实的入口命令、示例和引用信息,中文版使用相同结构。文档站首页按九个主题栏目提供阅读入口,避免重复仓库介绍。参考页总览同时链接使用指南与自动生成的命令、配置、模型服务明细。现有文档 URL 和兼容锚点保持稳定。
参考页从同一份 argparse 命令树、配置 schema 和模型服务清单生成中英文对照。命令名、参数、配置键、默认值和协议值保持准确。以源文本为键的翻译表提供中文说明和标题;缺少翻译时生成失败,不以英文说明静默替代。两种语言遍历全部命令层级、保留相同参数,仅在内容变化时写入文件。已删除命令的生成页同时从两种语言移除。翻译表不包含凭据,生成器只读 schema 默认值,不读取用户配置。生成器在站点发现页面之前完成,失败即终止构建。自动生成页同样采用简短名词短语作为导航名称,保持 RareUI 样式。
验收包括全部参考页的双语对应、递归命令及参数一致性、缺失翻译报错、重复构建不改写、过期页清理、首页语言链接、短名称、站内链接、语言检查和默认本地实例的可视语言切换。
主题偏好
共享页面支持跟随系统、浅色和深色三种偏好。没有保存值或保存值无效时默认跟随系统;已有的浅色或深色选择继续有效,可从页头菜单改回跟随系统。跟随系统时监听 prefers-color-scheme 的实时变化。跨标签页的存储事件更新偏好但不重复写入。存储不可用时,仍可在当前页面切换并跟随系统。
同源 theme.js 在 head 中同步执行,在解析正文前应用实际配色、浏览器 color-scheme 和代码高亮样式,替换被本地 script-src self 策略拒绝的内联初始化,保持安全策略不变。单一控制器负责初始状态、媒体查询监听和提供三种选项的可访问双语菜单。站内导航保留控制器及主题偏好。变化通过当前页面窗口的 documentThemeChange 事件通知已有使用方。控制器不修改独立 iframe 文档或操作系统的外观设置。
验收覆盖系统两种配色下首次加载、不刷新时的实时跟随、手动覆盖与恢复自动、旧偏好与无效值、存储不可用、跨标签页同步、菜单键盘及语言行为、代码配色和站内导航。浏览器媒体模拟仅用于临时验收,完成后恢复;按用户要求将本地文档偏好保留为跟随系统。
标题层级
没有本页目录的页面隐藏右侧空列,将空间交给正文,并将全屏按钮放在右边缘。有本页目录的页面保留该列;站内切页时按目标页面更新布局状态。
右侧本页目录用嵌套列表表达 h2 至 h6 标题。每个标题归属前面最近的较浅标题,跳级不生成空分组。保留原始顺序、文字和锚点。每层子分组有独立缩进的虚线,沿用现有 RareUI 弧线与颜色。当前标题及其祖先路径分别使用所在分组的指示线,不用一条线跨越不同深度。子分组的浅色引导线在未选中时仍表示父子关系,有子标题的节点使用与左侧相同的原生 details/summary 小箭头。箭头只控制该子树的折叠,标题链接仍负责定位;叶节点没有箭头。默认展开,滚动时保留用户的折叠选择。当前子标题被折叠后,父级仍显示路径,目录定位使用最近的可见祖先。父标题用箭头表示路径,叶标题保留弧形连接线终点,不增加悬停或选中行背景。
指示线终点按换行后的实际标题行测量,悬停和键盘预览限定在同级分组。阅读状态仍只有一个 aria-current 位置,祖先指示线仅表示层级。窗口变化和 SPA 跳转重新计算位置,并清理旧观察器。标题跳转、紧凑阅读导航、双语文字和主题颜色保持兼容。验收覆盖多个父分组、跳级、深层标题、长标题换行、祖先指示线、悬停、窗口变化和默认本地实例的页面跳转。