<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Banyan</title><link>https://banyan.swaw.com/zh/</link><description>Recent content on Banyan</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Tue, 20 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://banyan.swaw.com/zh/index.xml" rel="self" type="application/rss+xml"/><item><title>本地开发</title><link>https://banyan.swaw.com/zh/docs/development/local-development/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/local-development/</guid><description>&lt;h2 id="仓库结构"&gt;仓库结构&lt;/h2&gt;
&lt;p&gt;仓库根目录是文档站点，也是本地主题 Module 的使用方。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;banyan/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── hugo.toml, go.mod #文档站点配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── content/docs/ #使用指南和开发资料
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── content/changelog/ #主题和 Skill 变更记录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── data/ #站点数据
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── module/ #发布的 Hugo Module 和默认文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .agents/skills/swaw-banyan/ #本地工具和检查任务
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── tests/ #主题和工具源码测试
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;根 &lt;code&gt;go.mod&lt;/code&gt; 使用 &lt;code&gt;replace ... =&amp;gt; ./module&lt;/code&gt;，因此预览不需要已发布的 Module。
站点定制留在根目录，可复用主题行为放入 &lt;code&gt;module/&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="预览"&gt;预览&lt;/h2&gt;
&lt;p&gt;克隆仓库后进入根目录。下文 &lt;code&gt;swban&lt;/code&gt; 代表
&lt;code&gt;.\.agents\skills\swaw-banyan\swban.cmd&lt;/code&gt;，使用时按路径调用。
命令行目前支持 Windows x64。
直接执行预览命令；入口会复用兼容工具，并按需下载 JS 运行时、Git、Go 和 Hugo。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban base/hugo server -D --disableFastRender --port 13241 #预览站点
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;打开 &lt;code&gt;http://127.0.0.1:13241/&lt;/code&gt;。Hugo 监听本地 Module，模板和资源变化会触发重建。
开发构建默认不压缩；若站点在开发环境也启用压缩，可用 &lt;code&gt;--minify=false&lt;/code&gt; 关闭。
不需要在站点安装 npm 包。工具选择和依赖位置见
&lt;a href="https://github.com/SwawHQ/banyan/blob/main/.agents/skills/swaw-banyan/SKILL.md"&gt;Skill 使用说明&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>开始使用</title><link>https://banyan.swaw.com/zh/docs/guide/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/getting-started/</guid><description>&lt;p&gt;Banyan 分为两部分：Hugo Module 提供主题，&lt;code&gt;swaw-banyan&lt;/code&gt; Agent Skill
提供本地工具和检查。站点内容、配置和品牌资料由使用主题的站点维护。&lt;/p&gt;
&lt;h2 id="安装前"&gt;安装前&lt;/h2&gt;
&lt;p&gt;本项目正在准备首次发布。下面的 &lt;code&gt;v0.1.0&lt;/code&gt; 是首发版本示例；
远程安装须等对应标签发布。发布前可按 Skill 的
&lt;a href="https://github.com/SwawHQ/banyan/blob/main/.agents/skills/swaw-banyan/references/install.md#test-an-unpublished-module"&gt;本地 Module 示例&lt;/a&gt;
验证临时站点，或&lt;a href="https://banyan.swaw.com/zh/docs/development/local-development/"&gt;预览本仓库&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;主题要求 Hugo 0.157.0 或更新版本。Skill 命令行目前支持 Windows x64，
优先复用兼容的系统工具，缺少时下载便携工具。Skill 使用 Node 运行，
JS 依赖由 npm 按需准备，无需在站点根目录添加 &lt;code&gt;package.json&lt;/code&gt; 或执行 &lt;code&gt;npm install&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="选择安装入口"&gt;选择安装入口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;先装 Skill：&lt;/strong&gt; 从仓库的 &lt;code&gt;v0.1.0&lt;/code&gt; 标签提取 &lt;code&gt;.agents/skills/swaw-banyan/&lt;/code&gt;，
放到站点的同名目录。也可使用支持指定 ref 的 Skill 安装器。
让 Agent 按 Skill 配置站点并安装匹配的 Module。复制 Skill 本身不会运行命令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;已有 Module：&lt;/strong&gt; 在站点中查看 &lt;code&gt;hugo mod graph&lt;/code&gt;，从对应仓库标签安装 Skill。
仅安装配套 Skill 不需要升级 Module。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;两者均已安装：&lt;/strong&gt; 从站点根目录运行 &lt;code&gt;swban doctor&lt;/code&gt;。
版本不匹配时，使用配套 Skill，或按计划升级 Module。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以 &lt;code&gt;theme = &amp;quot;banyan&amp;quot;&lt;/code&gt; 加载本地主题目录时，&lt;code&gt;doctor&lt;/code&gt; 也会检查其
&lt;code&gt;theme.toml&lt;/code&gt; 版本；缺少版本时报告 &lt;code&gt;unverified&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>站点配置</title><link>https://banyan.swaw.com/zh/docs/guide/site-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/site-configuration/</guid><description>&lt;h2 id="根配置"&gt;根配置&lt;/h2&gt;
&lt;p&gt;在站点根 &lt;code&gt;hugo.toml&lt;/code&gt; 中设置 &lt;code&gt;baseURL&lt;/code&gt;、&lt;code&gt;title&lt;/code&gt; 和语言。
Hugo 的 &lt;code&gt;[outputs]&lt;/code&gt;、&lt;code&gt;[taxonomies]&lt;/code&gt; 和 &lt;code&gt;[permalinks]&lt;/code&gt; 也须由站点声明。
Banyan 提供 &lt;code&gt;[outputFormats]&lt;/code&gt; 定义，站点仍须通过 &lt;code&gt;[outputs]&lt;/code&gt; 启用对应输出。&lt;/p&gt;
&lt;p&gt;保留以下设置。它防止 HTML 压缩改变用于 CSP 哈希的内联 JS：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;minify&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;disableJS&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;新站点使用 Skill 的&lt;a href="https://github.com/SwawHQ/banyan/blob/main/.agents/skills/swaw-banyan/references/install.md#configure-the-site-root"&gt;起始配置&lt;/a&gt;。
现有站点按需合并配置，保留自己的内容和 URL 规则。&lt;/p&gt;
&lt;h2 id="站点说明与语言"&gt;站点说明与语言&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Your site description.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;en&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;en_US&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;icon&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;EN&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;zh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;站点中文说明。&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;zh_CN&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;params.description&lt;/code&gt; 提供全站说明。各语言可用
&lt;code&gt;languages.&amp;lt;lang&amp;gt;.params.description&lt;/code&gt; 覆盖。页面 front matter 的 &lt;code&gt;description&lt;/code&gt;
优先于站点说明，用于 SEO 和社交卡片；&lt;code&gt;llms.txt&lt;/code&gt; 的介绍和首页条目也使用站点说明。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;locale&lt;/code&gt; 用于 Open Graph。可选 &lt;code&gt;icon&lt;/code&gt; 为语言选择列表提供短标记；
未设置时使用语言图标。为每种启用的语言声明根配置，并创建对应的首页和分类 bundle。&lt;/p&gt;
&lt;h2 id="覆盖主题文件"&gt;覆盖主题文件&lt;/h2&gt;
&lt;p&gt;站点中的同路径内容、资源和数据覆盖 Module 默认文件。
品牌、账号和法律文本放在站点中；可复用主题行为放在 Module 中。
发布的主题只包含 &lt;code&gt;module/&lt;/code&gt;，不包含本仓库的文档内容和工具。&lt;/p&gt;</description></item><item><title>内容 - 全部</title><link>https://banyan.swaw.com/zh/all/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/all/</guid><description/></item><item><title>未发布</title><link>https://banyan.swaw.com/zh/changelog/unreleased/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0800</pubDate><guid>https://banyan.swaw.com/zh/changelog/unreleased/</guid><description>&lt;h2 id="新增"&gt;新增&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;官网提供中文使用指南和开发资料，站点生产地址为 &lt;code&gt;https://banyan.swaw.com/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;github.com/SwawHQ/banyan/module&lt;/code&gt; 发布 Hugo Module，
&lt;code&gt;swaw-banyan&lt;/code&gt; Skill 使用对应版本。&lt;code&gt;doctor [目录]&lt;/code&gt; 检查 Module 和
主题目录的版本配对、vendor 依赖及本地开发状态。
主题目录的版本读取自 &lt;code&gt;theme.toml&lt;/code&gt;。&lt;code&gt;doctor&lt;/code&gt; 同时检查已选工具和运行时启动器；
启动器或绑定文件损坏时仍可诊断，并提供手动恢复步骤。
普通任务不再检查配对。检查开关和修复提示由 &lt;code&gt;references/doctor.toml&lt;/code&gt; 维护。
整仓源码 ZIP 中的 Skill 与 &lt;code&gt;module/&lt;/code&gt; 按 &lt;code&gt;module/theme.toml&lt;/code&gt; 版本配对，无需 &lt;code&gt;.git&lt;/code&gt;。
修复提示包含项目地址、主题源码 ZIP 和 Module 版本调整命令。&lt;/li&gt;
&lt;li&gt;提供 Windows x64 命令行工具，支持 Node/npm、Git、Go、Hugo
和可选的 Bun、GitHub CLI。便携版下载使用校验和验证。
uv 和 Python 3.13 在 Skill 内隔离运行脚本和 CLI，支持站点已有 uv 项目，
不修改系统 PATH 或 Python 注册表。
&lt;code&gt;sync/ext&lt;/code&gt; 和内容检查用 npm 按需准备 Skill 内的解析依赖，与父工作区隔离；
站点构建不需要 npm 依赖。&lt;/li&gt;
&lt;li&gt;新增名称列表和产品列表，复用多列导航和排序。产品分类由站点定义。&lt;/li&gt;
&lt;li&gt;Powered by 页面显示实际主题版本、Hugo 版本、站点构建信息，
以及 PWA 状态和更新检查控件。&lt;/li&gt;
&lt;li&gt;演示站点按版本组织 &lt;code&gt;content/changelog/&lt;/code&gt; 下的发布记录。
&lt;code&gt;params.theme_changelog&lt;/code&gt; 设置 Powered by 页面的变更记录地址。&lt;/li&gt;
&lt;li&gt;浏览器检查覆盖导航、布局、语言设置、图片、预取和 PWA。
支持 Chromium，部分检查支持 WebKit。&lt;code&gt;check/browser/site&lt;/code&gt;
自动查找代表页面，并报告未检查的范围。&lt;/li&gt;
&lt;li&gt;静态检查和 HTTP 检查覆盖内容声明、HTML、站点地图、robots、LLMS、
图片、CSP、SRI、缓存响应头和预取。提供资源体积和页面数据体积报告。
HTML 检查也验证文章日期行、路径顺序、侧栏控制脚本和静态更新控件。
&lt;code&gt;check/delivery&lt;/code&gt; 检查生成的平台格式、指纹策略一致性和发布文件名，不读取资源正文。
子目录部署使用 &lt;code&gt;--base-path&lt;/code&gt; 指定 URL 前缀；路径字符和 EdgeOne 域名重定向按平台语法处理。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sync/ext&lt;/code&gt; 同步声明的外部资源；&lt;code&gt;deploy/edgeone/sync&lt;/code&gt;
同步构建生成的部署配置。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deploy/cloudflare/cli&lt;/code&gt; 和 &lt;code&gt;deploy/cloudflare/wrangler&lt;/code&gt; 运行固定版本的
Cloudflare CLI，透传原生参数；各自提供 &lt;code&gt;ensure [--force]&lt;/code&gt; 和本地 &lt;code&gt;check&lt;/code&gt;。
普通命令按需准备依赖，授权可使用各 CLI 的原生用户凭据，
或 Windows 凭据管理器中的共用 API Token。
原生配置、登录凭据及存储方式由 CLI 管理，可沿用系统中同一工具的已有登录。
&lt;code&gt;auth/token/check&lt;/code&gt; 也可检查用户手工添加的凭据。
修复资源名称和显式布尔参数值导致的凭据误选。
&lt;code&gt;auth whoami&lt;/code&gt; 与资源命令使用相同的凭据优先级。
cf 和 Wrangler 命令及授权页的登录和状态检查，分别使用固定的
&lt;code&gt;%TEMP%/swaw/banyan/cf/&lt;/code&gt; 和 &lt;code&gt;%TEMP%/swaw/banyan/wrangler/&lt;/code&gt; 工作目录，
保留目录及缓存。本地路径以这些目录为基准；文件参数用绝对路径，
Wrangler 项目用原生 &lt;code&gt;--cwd&lt;/code&gt; 指定绝对路径。
cf 资源管理命令使用空配置；开发和构建需要实际项目配置。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deploy/tencent/cli&lt;/code&gt; 在 Skill 独立环境中自动准备 uv/Python 和固定版本的 tccli，
提供 &lt;code&gt;ensure [--force]&lt;/code&gt; 与本地只读 &lt;code&gt;check&lt;/code&gt;，透传腾讯云和 EdgeOne 原生命令。
登录和凭据刷新强制校验 TLS 证书。
&lt;code&gt;auth/key/check&lt;/code&gt; 在本机凭据缺失时返回非零退出码。
配置和登录沿用 tccli 原生规则；授权页说明登录凭据明文存储，
推荐使用 Windows 保管的 API 密钥。
tccli 命令及授权页的登录和状态检查使用固定的
&lt;code&gt;%TEMP%/swaw/banyan/tccli/&lt;/code&gt; 目录并保留缓存；本地路径用绝对路径。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deploy/auth/setup&lt;/code&gt; 打开 Cloudflare 和腾讯云共用的本机授权页；
各平台的 &lt;code&gt;auth/setup&lt;/code&gt; 入口直接选中对应选项卡。页面支持原生登录、
Windows 保管的 API 凭据和只读环境变量状态，显示凭据优先级、
站点原色图标，并按系统语言显示中英文；标题栏可切换语言，保留输入和进度，
不保存语言选择，刷新后重新按系统语言显示。
授权页采用黑白灰配色，移除面板外框，保留两栏细分隔线；
优先级说明放在标题下，关闭按钮放在右上角。
补充说明统一放在操作区或变量表格后；登录和 API Token 说明用编号列表
列出设置步骤、授权范围和凭据保存方式。
进入登录授权页后后台准备工具，显示准备状态并支持重试；
准备完成后检查 cf 和 Wrangler 的已有登录，以及 tccli 原生凭据是否可用；
刷新或重开页面会重新检查，授权按钮即时显示请求进度。
tccli 登录与检查使用同一 profile，通过原生 STS 身份查询确认凭据可用；
不区分已保存的登录和密钥，也不检查业务权限。
下载和检查期间仍可设置 API Token，关闭页面会停止准备、检查和登录。
页面不再自动超时；各 CLI 的授权超时保持原生规则。
授权页避免使用浏览器禁用的端口。
保存连接断开时，取消仍会在凭据写入完成后结束会话。
窄屏上下排列，两个平台均使用 API Token 标签。腾讯云访问密钥使用
&lt;code&gt;swban/tencent/default&lt;/code&gt;；&lt;code&gt;auth/key/check&lt;/code&gt; 检查本机凭据是否存在。&lt;/li&gt;
&lt;li&gt;仓库、Module 和 Skill 均包含 MIT 许可证，并保留第三方许可声明。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="调整"&gt;调整&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Skill 基础工具使用 &lt;code&gt;base/&amp;lt;tool&amp;gt;&lt;/code&gt;、&lt;code&gt;base/&amp;lt;tool&amp;gt;/check&lt;/code&gt; 和
&lt;code&gt;base/&amp;lt;tool&amp;gt;/ensure&lt;/code&gt;。入口使用 Node，按需准备 Node/npm 和所需工具；
Bun 保留为独立工具。移除 &lt;code&gt;base/ensure&lt;/code&gt;。
Hugo 和 Go 按需准备 Git；主题不再启用未使用的 Git 页面信息。
GitHub CLI 在使用时准备；npm 和 npx 分别使用 &lt;code&gt;base/node/npm&lt;/code&gt; 和 &lt;code&gt;base/node/npx&lt;/code&gt;。
Python 命令使用 &lt;code&gt;base/uv/python&lt;/code&gt;、&lt;code&gt;base/uv/python/check&lt;/code&gt; 和
&lt;code&gt;base/uv/python/ensure&lt;/code&gt;；常用帮助将 uv 标为 Python 工具管理器。
离线使用前，可用 &lt;code&gt;base/packages/ensure&lt;/code&gt; 准备解析依赖；加 &lt;code&gt;--force&lt;/code&gt; 重新安装。
&lt;code&gt;doctor&lt;/code&gt; 只报告依赖缺失，不执行安装。
浏览器准备改用 &lt;code&gt;base/browser/ensure&lt;/code&gt; 和 &lt;code&gt;base/browser/ensure.webkit&lt;/code&gt;。
&lt;code&gt;help/en [depth|path [depth]]&lt;/code&gt; 和 &lt;code&gt;help/zh [depth|path [depth]]&lt;/code&gt; 按层级列出命令和分类，
支持从指定路径向下计算深度并保留完整路径，分类路径以 &lt;code&gt;/&lt;/code&gt; 结尾，
或显示指定路径的完整帮助；不带参数时显示常用命令，含构建、预览和发布示例。
&lt;code&gt;help&lt;/code&gt; 默认使用系统语言。帮助文件格式错误时，提示文件路径及 JSON 解析原因或具体字段。&lt;/p&gt;</description></item><item><title>可预测的内容模型</title><link>https://banyan.swaw.com/zh/p/example-note/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0800</pubDate><guid>https://banyan.swaw.com/zh/p/example-note/</guid><description>&lt;p&gt;这个页面刻意保持简短，用来验证一个干净的使用方站点能够正常渲染文章、元信息、分类链接和路径导航。&lt;/p&gt;
&lt;h2 id="结构先于装饰"&gt;结构先于装饰&lt;/h2&gt;
&lt;p&gt;Banyan 从真实页面和 taxonomy 推导导航。页面声明自己是什么，主题负责如何呈现这些结构。&lt;/p&gt;
&lt;p&gt;本文同时属于 AI 和开发工具两条独立标签路径，证明一篇文章无需复制内容也能进入多个分类。&lt;/p&gt;</description></item><item><title>Service Worker 回归检查</title><link>https://banyan.swaw.com/zh/docs/development/service-worker-regression-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/service-worker-regression-checklist/</guid><description>&lt;p&gt;本清单描述当前行为。使用根站点内容构建测试。&lt;/p&gt;
&lt;h2 id="页面与程序更新"&gt;页面与程序更新&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;普通页面只在 &lt;code&gt;load&lt;/code&gt; 后注册 SW。预渲染页面等到激活后再注册。&lt;/li&gt;
&lt;li&gt;普通页面不装配更新面板、不补缓存，也不拦截链接或发送主动激活消息。&lt;/li&gt;
&lt;li&gt;Powered by 页面自行读取 registration，显示状态并提供手动检查。
按钮只检查，不激活程序、不重载页面。&lt;/li&gt;
&lt;li&gt;程序自动更新检查和激活交给浏览器。waiting 程序保留默认等待行为，
不因站内链接、刷新或历史导航而提前激活。&lt;/li&gt;
&lt;li&gt;浏览器激活新程序时，不额外刷新已打开页面；滚动、历史和输入内容由页面与浏览器保留。&lt;/li&gt;
&lt;li&gt;已有活动程序时，新程序安装先准备离线页和指纹资源，不切换当前内容版本。
每次安装先清空本程序的暂存，并记录当时的内容版本；缺少版本时先请求 JSON。
激活时读取最终内容版本；仍无版本时，用暂存初始化。
等待期间内容版本已变化时，保留当前桶已有的有效离线页，仅从暂存补齐缺失路径。
内容版本未变化时，仍用暂存刷新离线页。
激活不等待网络；准备失败则保留旧程序。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="内容版本"&gt;内容版本&lt;/h2&gt;
&lt;p&gt;站点构建版本写入固定地址 &lt;code&gt;sw-version.json&lt;/code&gt;。仅内容版本改变时，&lt;code&gt;sw.js&lt;/code&gt; 字节不变，
不触发程序安装或激活。版本 JSON 必须与该版本内容一同部署；
若手动设置 &lt;code&gt;params.build.version&lt;/code&gt;，每次内容发布都需更新该值。&lt;/p&gt;
&lt;p&gt;在站点的 &lt;code&gt;data/delivery.toml&lt;/code&gt; 中设置最小检查间隔：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;service_worker&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;content_check_interval&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;offline_notice_path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;offline/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此表整体替换模块默认值。间隔单位为分钟，默认 5 分钟。
达到间隔后的首次成功导航响应会安排 15 秒后的检查；
后续导航不重复安排，也不重置延迟。没有导航时不检查。JSON 请求由 SW 发出，
不依赖页面通知，不阻塞导航响应。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当前内容版本与上次检查尝试时间持久保存；待执行任务仅保存在内存中。&lt;/li&gt;
&lt;li&gt;请求超时、失败或 JSON 无效时，保留原版本；下次检查仍受最小间隔限制。&lt;/li&gt;
&lt;li&gt;检查时间缺失、无效或晚于当前时间时，允许重新检查。&lt;/li&gt;
&lt;li&gt;存在 waiting 程序时，活动程序仍执行内容检查。&lt;/li&gt;
&lt;li&gt;发现新版本后，准备新缓存和离线页，再切换后续请求并清理旧内容缓存。
进行中的旧版本请求不得重新创建已删除的缓存。&lt;/li&gt;
&lt;li&gt;内容切换不刷新当前页面；新版本只影响后续请求。手动按钮仍只检查 SW 程序更新。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="页面脚本边界"&gt;页面脚本边界&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;assets/js/pwa/manager-entry.js.tmpl&lt;/code&gt; 只负责注册。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets/js/updates/page.js&lt;/code&gt; 只在 Powered by 页查询注册和装配面板。
三语言 &lt;code&gt;content/powered-by/index*.md&lt;/code&gt; 提供文案。&lt;/li&gt;
&lt;li&gt;页面不创建全局 &lt;code&gt;BanyanServiceWorkerManagerRuntime&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;待更新程序直接读取 &lt;code&gt;registration.waiting&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="缓存契约"&gt;缓存契约&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;缓存路径规则只来自 &lt;code&gt;data/delivery.toml&lt;/code&gt;。启用时，&lt;code&gt;sw-policy.json&lt;/code&gt; 复制
&lt;code&gt;sw.js&lt;/code&gt; 中实际使用的 path/bucket 数组，首个匹配项优先；关闭或停用时不输出副本。&lt;/li&gt;
&lt;li&gt;navigation：cache-first，缓存名按内容版本区分。&lt;/li&gt;
&lt;li&gt;导航缓存未命中时，HTTP 请求使用 &lt;code&gt;cache: no-cache&lt;/code&gt; 重新验证，避免旧 HTTP HTML 写入新版 SW 缓存。&lt;/li&gt;
&lt;li&gt;assets：cache-first，指纹资源跨版本保留。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sw.js&lt;/code&gt; 不进入 Cache Storage，&lt;code&gt;sw-version.json&lt;/code&gt; 不进入内容缓存桶；两者每次请求均校验。
&lt;code&gt;sw-content-state&lt;/code&gt; 单独保存当前版本和上次检查时间。&lt;/li&gt;
&lt;li&gt;内容版本切换清理旧 navigation/versioned 缓存；指纹缓存跨版本保留。&lt;/li&gt;
&lt;li&gt;首次访问发生在 SW 控制页面之前，页面不追加缓存预热。
后续受控导航由 SW 缓存 HTML，并预热其中引用的指纹 CSS/JS。&lt;/li&gt;
&lt;li&gt;未缓存页面离线时使用对应语言的离线页；缓存命中的页面离线可读。&lt;/li&gt;
&lt;li&gt;navigation preload 保持关闭。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="自动化场景"&gt;自动化场景&lt;/h2&gt;
&lt;p&gt;对已启用 SW 的生产构建运行 &lt;code&gt;swban check/browser/site &amp;lt;build&amp;gt; --updates&lt;/code&gt;。
脚本自动发现更新面板及相互连接的根入口，临时构建不同版本，并生成程序修订以检查 SW 更新。
内容版本变化单独检查。其他位置的源码通过 &lt;code&gt;--site&lt;/code&gt; 指定。缺少合适页面或配置时明确失败。
也可以直接调用下面的独立任务，按其 &lt;code&gt;--help&lt;/code&gt; 指定实际路径及前后两份构建：&lt;/p&gt;</description></item><item><title>UI 命名与职责</title><link>https://banyan.swaw.com/zh/docs/development/ui-naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/ui-naming/</guid><description>&lt;p&gt;名称按当前职责组织，不再描述已经退役的主菜单、顶部面包屑和下拉布局。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;实体&lt;/th&gt;
 &lt;th&gt;名称与位置&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;第一列根入口&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;browse/root-navigation.js&lt;/code&gt;、&lt;code&gt;feature-browse/navigation/root/model.html&lt;/code&gt; 与 &lt;code&gt;root/render.html&lt;/code&gt;；由真实页面的 &lt;code&gt;root_nav&lt;/code&gt; 声明产生&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;可见路径列&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;browse/path-render.js&lt;/code&gt;、&lt;code&gt;path-navigation.css&lt;/code&gt;；语义导航 &lt;code&gt;nav.path-navigation[data-slot=&amp;quot;breadcrumb&amp;quot;]&lt;/code&gt;、单列 &lt;code&gt;.path-column&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;集合页面&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;layouts/page-collection.html&lt;/code&gt;、&lt;code&gt;feature-browse/collection/render-page.html&lt;/code&gt;；列表内容由 &lt;code&gt;feature-browse/collection/render.html&lt;/code&gt; 渲染&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;公共列表与条目&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;system-ui/list/render.html&lt;/code&gt; 与 &lt;code&gt;item.html&lt;/code&gt; 装配完整列表和条目；&lt;code&gt;item.css&lt;/code&gt; 负责控件和状态，&lt;code&gt;list-layout.css&lt;/code&gt; 负责列表与固定字段宽度&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;文档元信息与章节目录&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;document-aside.css&lt;/code&gt;；负责 &lt;code&gt;.document-meta&lt;/code&gt;、&lt;code&gt;.document-toc&lt;/code&gt; 和辅助列内的列表条目适配，不属于正文组件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;正文右侧辅助列&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;page-shell.css&lt;/code&gt; 控制 &lt;code&gt;.document-aside&lt;/code&gt; 的尺寸与独立纵向滚动，&lt;code&gt;document-aside.css&lt;/code&gt; 控制列内内容&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;正文中的有序／无序列表&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;prose-lists.css&lt;/code&gt;；只作用于正文 &lt;code&gt;ul/ol/li&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;首页&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;layouts/page-home.html&lt;/code&gt;、&lt;code&gt;entry-page-home/model.html&lt;/code&gt;、&lt;code&gt;page-home.css&lt;/code&gt;；交互入口为 &lt;code&gt;js/pages/home.js&lt;/code&gt;，风向袋为 &lt;code&gt;assets/page-home/windsock.svg&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;区域开关&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_flags&lt;/code&gt;、&lt;code&gt;slotFlags&lt;/code&gt;；值是布尔值，不再是 fragment 来源&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;浏览来源与排序状态&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;browse/navigation-state.js&lt;/code&gt;、&lt;code&gt;browse/navigation-state.contract.js&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;语言和外观偏好&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;preferences/language-page.js&lt;/code&gt; 仅用于选择页；&lt;code&gt;preferences/language-return.js&lt;/code&gt; 与 &lt;code&gt;preferences/theme.js&lt;/code&gt; 负责跨页面行为；静态选项和返回链接在模板输出&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PWA 状态与检查&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;updates/page.js&lt;/code&gt; 查询本页 registration 并显示状态；模板为 &lt;code&gt;feature-updates/panel.html&lt;/code&gt;、&lt;code&gt;feature-updates/labels.html&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="内容声明"&gt;内容声明&lt;/h2&gt;
&lt;p&gt;集合页统一声明 &lt;code&gt;layout: page-collection&lt;/code&gt;。例如更新目录只显示名称：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;page-collection&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;layout&lt;/code&gt; 选择页面模板，&lt;code&gt;list&lt;/code&gt; 选择列表展示；集合成员来自 Hugo 的目录／分类结构，或 &lt;code&gt;aggregate&lt;/code&gt; 指向的集合。更名没有改变这三个职责，也没有提供 &lt;code&gt;article-list&lt;/code&gt; 旧模板别名。根站点与模块内容使用同一命名。&lt;/p&gt;</description></item><item><title>Web App Manifest 与图标</title><link>https://banyan.swaw.com/zh/docs/guide/web-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/web-app/</guid><description>&lt;h2 id="manifest"&gt;Manifest&lt;/h2&gt;
&lt;p&gt;Banyan 默认生成带指纹的 web app manifest，并在渲染关键资源之后输出链接。
在站点根 &lt;code&gt;hugo.toml&lt;/code&gt; 中选择模式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;web_app_manifest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;defer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;模式&lt;/th&gt;
 &lt;th&gt;行为&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;link&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在 head 中较早输出链接，尽早发现 manifest&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;defer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在 head 末尾输出链接，优先发现渲染关键资源&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;off&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不生成或链接 manifest&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Manifest 与 SW 缓存独立配置。SW 设置见&lt;a href="https://banyan.swaw.com/zh/docs/guide/delivery/"&gt;交付与缓存&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="图标"&gt;图标&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;源文件&lt;/th&gt;
 &lt;th&gt;用途&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;static/favicon.ico&lt;/code&gt;、&lt;code&gt;static/favicon.svg&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;发布为根路径 favicon，供浏览器回退使用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;assets/site/pwa/favicon.svg&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;页面显式链接的指纹 SVG favicon&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;assets/site/pwa/icon-180.png&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Apple touch 图标&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;assets/site/pwa/icon-192.png&lt;/code&gt;、&lt;code&gt;icon-256.png&lt;/code&gt;、&lt;code&gt;icon-512.png&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manifest 图标&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;assets/site/pwa/&lt;/code&gt; 中的文件由 Hugo 作为指纹资源发布。
在站点根目录提供同路径、同名文件，即可覆盖主题的 favicon 和 PWA 图标。&lt;/p&gt;</description></item><item><title>安全策略与 CSP</title><link>https://banyan.swaw.com/zh/docs/guide/security-csp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/security-csp/</guid><description>&lt;h2 id="生成与配置"&gt;生成与配置&lt;/h2&gt;
&lt;p&gt;Hugo 生成 HTML，并为已启用的平台生成 &lt;code&gt;_headers&lt;/code&gt; 或 &lt;code&gt;edgeone.json&lt;/code&gt;。
主题 JS 由 &lt;code&gt;js.Build&lt;/code&gt; 构建；
生产构建使用 esbuild 压缩。站点根 &lt;code&gt;hugo.toml&lt;/code&gt; 须保留：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;minify&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;disableJS&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;entry-baseof/inline-scripts.html&lt;/code&gt; 返回内联脚本的最终正文，
&lt;code&gt;system-delivery/deployment/csp-value.html&lt;/code&gt; 从同一份正文计算 SHA-256。
HTML 压缩不能再次改写 JS，否则 CSP 哈希失效。&lt;/p&gt;
&lt;h2 id="脚本边界"&gt;脚本边界&lt;/h2&gt;
&lt;p&gt;内联入口位于 &lt;code&gt;module/assets/js/inline/&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;theme-boot.js&lt;/code&gt; 同步首帧主题。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;breadcrumb-pending.js&lt;/code&gt;、&lt;code&gt;breadcrumb-skeleton.js&lt;/code&gt; 预留路径列。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root-navigation.js&lt;/code&gt; 同步根入口选中状态。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;canvas-position.js&lt;/code&gt; 保存和恢复横向画幅。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;新增内联脚本须在 &lt;code&gt;entry-baseof/inline-scripts.html&lt;/code&gt; 注册，并使用其返回正文。
自定义模板中的裸内联 JS 不会自动获得授权；优先使用外链 JS。
页面差异通过 &lt;code&gt;data-*&lt;/code&gt; 或 JSON 提供。&lt;code&gt;application/json&lt;/code&gt; 和
&lt;code&gt;application/ld+json&lt;/code&gt; 数据块不纳入可执行 JS 哈希。
更新面板用 &lt;code&gt;textContent&lt;/code&gt; 呈现页面文案，不把文案写入 HTML。&lt;/p&gt;
&lt;h2 id="策略来源"&gt;策略来源&lt;/h2&gt;
&lt;p&gt;默认 HTML 策略由 &lt;code&gt;system-delivery/deployment/csp-value.html&lt;/code&gt; 声明，
可执行内联 JS 使用哈希授权。外链 JS 提供 integrity。
&lt;code&gt;/*.xml&lt;/code&gt; 使用 cache policy 中的独立 CSP，允许 RSS/XSL 样式。&lt;/p&gt;</description></item><item><title>布局与 partial 架构</title><link>https://banyan.swaw.com/zh/docs/development/partial-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/partial-architecture/</guid><description>&lt;p&gt;Banyan 使用 Hugo 0.146 之后的模板目录结构。主题要求 Hugo 0.157.0 或更高版本：页面入口直接放在 &lt;code&gt;layouts/&lt;/code&gt;，可复用模板放在 &lt;code&gt;layouts/_partials/&lt;/code&gt;，短代码放在 &lt;code&gt;layouts/_shortcodes/&lt;/code&gt;，Markdown render hooks 放在 &lt;code&gt;layouts/_markup/&lt;/code&gt;。不再保留 &lt;code&gt;_default/&lt;/code&gt;、&lt;code&gt;partials/&lt;/code&gt;、&lt;code&gt;shortcodes/&lt;/code&gt; 的旧兼容目录。&lt;/p&gt;
&lt;h2 id="页面入口"&gt;页面入口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;layouts/&lt;/code&gt; 根目录只有 Hugo 自动选择的入口和 front matter 显式选择的页面布局：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;layouts/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ baseof.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-home.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-article.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-collection.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-language.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-appearance.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-my.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-offline.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-prefetch-debug.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ page-powered-by.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ home.llms.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ robots.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ sitemap.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ 404.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ _markup/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─ _partials/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└─ _shortcodes/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;内容通过 &lt;code&gt;layout: page-article&lt;/code&gt;、&lt;code&gt;layout: page-collection&lt;/code&gt; 等名称选择入口。&lt;code&gt;page-*&lt;/code&gt; 是本项目为自定义 layout 采用的命名前缀，不表示 Hugo 的 &lt;code&gt;page&lt;/code&gt; Kind；例如 &lt;code&gt;page-collection&lt;/code&gt; 同时供 section、taxonomy 和其他需要集合呈现的页面使用。入口负责装配，不重新实现集合、导航、文章或发布算法。只有入口确实拥有私有 helper 时才建立 &lt;code&gt;entry-*&lt;/code&gt; partial 目录；不能为了目录对称增加单行转发层。&lt;/p&gt;</description></item><item><title>导航状态协议</title><link>https://banyan.swaw.com/zh/docs/development/navigation-state/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/navigation-state/</guid><description>&lt;h2 id="目的"&gt;目的&lt;/h2&gt;
&lt;p&gt;这份文档只说明一件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当前 breadcrumb / collection browser 相关状态，应该如何理解&lt;/li&gt;
&lt;li&gt;哪些是页面语义&lt;/li&gt;
&lt;li&gt;哪些是运行时视图状态&lt;/li&gt;
&lt;li&gt;哪些是构建期产物&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它不是产品说明，而是后续维护时的“协议与边界备忘录”。&lt;/p&gt;
&lt;h2 id="核心判断"&gt;核心判断&lt;/h2&gt;
&lt;p&gt;当前导航体系分成 3 层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;页面语义层
&lt;ul&gt;
&lt;li&gt;当前页面在真实内容结构中属于哪个根入口&lt;/li&gt;
&lt;li&gt;breadcrumb 各层分别对应哪个 collection&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;页面数据层
&lt;ul&gt;
&lt;li&gt;当前页面把可进入来源的当前层与祖先层 collection payload 内嵌一次&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;运行时状态层
&lt;ul&gt;
&lt;li&gt;当前从哪条路径进入：&lt;code&gt;from&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前 collection 的排序：&lt;code&gt;sort&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前路径上每层冻结排序：&lt;code&gt;sorts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要把这 3 层混在一起。&lt;/p&gt;
&lt;h2 id="url-状态"&gt;URL 状态&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;from&lt;/code&gt;、&lt;code&gt;sort&lt;/code&gt;、&lt;code&gt;sorts&lt;/code&gt; 是前端视图状态，统一放在 URL 的 &lt;code&gt;#&lt;/code&gt; 后：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-txt" data-lang="txt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/p/example/#from=d/products&amp;amp;sort=name-asc&amp;amp;sorts=_,date-desc&amp;amp;anchor=installation
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;字段名是代码协议，不再通过 &lt;code&gt;navigation-state-default.toml&lt;/code&gt; 配置。
读取和写入共用 &lt;code&gt;navigation-state.contract.js&lt;/code&gt;。真实查询参数仍保留在 &lt;code&gt;?&lt;/code&gt; 后。
前端不读取旧查询参数中的导航状态，也不自动迁移旧地址。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;anchor&lt;/code&gt; 表示正文目标元素的 ID。没有其他状态时，仍使用原生 &lt;code&gt;#installation&lt;/code&gt;。
带导航状态的章节链接使用 &lt;code&gt;&amp;amp;anchor=installation&lt;/code&gt;；JS 负责定位，同时保留来源和排序。
滚动正文只更新目录高亮，不改写 URL。&lt;/p&gt;
&lt;p&gt;同页片段导航通过 &lt;code&gt;hashchange&lt;/code&gt; 更新来源列、根入口、排序和章节位置。
排序控件继续使用 &lt;code&gt;history.replaceState()&lt;/code&gt;，并主动刷新受影响的列；
该接口不会触发 &lt;code&gt;hashchange&lt;/code&gt;，也不会增加历史记录。&lt;/p&gt;
&lt;p&gt;片段不进入 HTTP 请求，HTTP 和 SW 缓存不需要再忽略这些参数。
真实查询参数仍属于缓存地址。章节和导航状态由每个标签页的 URL 保存。&lt;/p&gt;</description></item><item><title>发布版本</title><link>https://banyan.swaw.com/zh/docs/development/releasing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/releasing/</guid><description>&lt;h2 id="变更记录"&gt;变更记录&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;content/changelog/unreleased/index.md&lt;/code&gt; 记录用户可见的变化、配置要求和实际修复。
合并同类条目，不记录内部重构、测试细节或仅属于消费站点的变化。&lt;/p&gt;
&lt;p&gt;发布时将该 bundle 移至 &lt;code&gt;content/changelog/vX.Y.Z/index.md&lt;/code&gt;，
把 &lt;code&gt;title&lt;/code&gt; 和 &lt;code&gt;slug&lt;/code&gt; 设为 &lt;code&gt;vX.Y.Z&lt;/code&gt;，把 &lt;code&gt;date&lt;/code&gt; 和 &lt;code&gt;lastmod&lt;/code&gt; 设为发布日期。
新建 unreleased bundle。集合布局会自动列出版本页面。&lt;/p&gt;
&lt;h2 id="配套标签"&gt;配套标签&lt;/h2&gt;
&lt;p&gt;将 &lt;code&gt;SKILL.md&lt;/code&gt; 的 &lt;code&gt;metadata.version&lt;/code&gt; 和 &lt;code&gt;module/theme.toml&lt;/code&gt; 的 &lt;code&gt;version&lt;/code&gt;
更新为同一本次版本号并提交。
在同一提交上创建两个标签；下面以 &lt;code&gt;0.1.0&lt;/code&gt; 和当前 &lt;code&gt;HEAD&lt;/code&gt; 为例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban base/git tag v0.1.0 HEAD #标记项目版本
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban base/git tag module/v0.1.0 HEAD #标记 Go Module 版本
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban base/git push --atomic --no-follow-tags origin tag v0.1.0 tag module/v0.1.0 #发布两个标签
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此处 &lt;code&gt;swban&lt;/code&gt; 代表已准备的 Skill 入口。
两个标签都指向整个仓库的同一提交。&lt;code&gt;v0.1.0&lt;/code&gt; 用于项目发布和提取 Skill；
&lt;code&gt;module/v0.1.0&lt;/code&gt; 供 Go 将子目录 Module 识别为 &lt;code&gt;v0.1.0&lt;/code&gt;。
因为 Module 根目录是 &lt;code&gt;module/&lt;/code&gt;，仅有项目标签不能提供该 Module 的语义版本。
这是 &lt;a href="https://go.dev/ref/mod#vcs-version"&gt;Go 的子目录 Module 标签规则&lt;/a&gt;。
GitHub Release 使用 &lt;code&gt;v0.1.0&lt;/code&gt;，无需再为 &lt;code&gt;module/v0.1.0&lt;/code&gt; 创建 Release。
若附带 Skill ZIP，包含 Skill 目录和许可证，排除 &lt;code&gt;.tools&lt;/code&gt;、&lt;code&gt;node_modules&lt;/code&gt; 和缓存。&lt;/p&gt;</description></item><item><title>分类法</title><link>https://banyan.swaw.com/zh/docs/guide/taxonomies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/taxonomies/</guid><description>&lt;h2 id="默认模型"&gt;默认模型&lt;/h2&gt;
&lt;p&gt;Banyan 推荐用两层结构组织内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;目录树 / section：主结构，回答“它放在哪一枝上”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags&lt;/code&gt;：主题分类，回答“它涉及哪些领域”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;站点根配置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;taxonomies&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;tag&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tags&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;tool&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tools&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;tools&lt;/code&gt; 使用平面分类，根配置位于 &lt;code&gt;content/tools/_index*.md&lt;/code&gt;，文章声明 &lt;code&gt;tools: [free, first-party]&lt;/code&gt;。&lt;code&gt;content/all-tools/&lt;/code&gt; 以 &lt;code&gt;aggregate: /tools&lt;/code&gt; 汇总成员；&lt;code&gt;list: products&lt;/code&gt; 只控制价格／用途列，与分类法名称无关。具体约定见 &lt;a href="https://banyan.swaw.com/zh/docs/guide/collection-lists/#%E6%80%8E%E6%A0%B7%E6%94%B6%E5%BD%95%E5%B7%A5%E5%85%B7"&gt;列表与产品声明&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;一篇文章可以属于多条独立路径：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ai&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;tooling/devtools/windows&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hugo 原生把每个 taxonomy term 当成独立字符串。Banyan 约定用 &lt;code&gt;/&lt;/code&gt; 表达路径，并在界面中把这些字符串渲染成树。&lt;/p&gt;
&lt;h2 id="就地定义"&gt;就地定义&lt;/h2&gt;
&lt;p&gt;Banyan 不提供 taxonomy 名称或渲染配置的通用兜底。每个 taxonomy 由站点自己的 branch bundle 定义：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;content/&amp;lt;plural&amp;gt;/_index.&amp;lt;lang&amp;gt;.md&lt;/code&gt;：定义 taxonomy 根页及 Banyan 渲染参数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content/&amp;lt;plural&amp;gt;/&amp;lt;term&amp;gt;/_index.&amp;lt;lang&amp;gt;.md&lt;/code&gt;：定义 term 页的标题、正文和页面资源&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;taxonomy 必须先在站点根 &lt;code&gt;hugo.toml&lt;/code&gt; 的 &lt;code&gt;[taxonomies]&lt;/code&gt; 中声明。仅创建同名内容目录只会得到普通 section。&lt;/p&gt;
&lt;p&gt;根 bundle 契约：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;必须提供非空 &lt;code&gt;title&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;可选 &lt;code&gt;linkTitle&lt;/code&gt; 作为导航、breadcrumb、列表和文章元信息中的短名称；未填写时回退到 &lt;code&gt;title&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;必须提供 &lt;code&gt;[banyan_taxonomy]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;必须显式填写 &lt;code&gt;mode&lt;/code&gt;、&lt;code&gt;article_weight&lt;/code&gt;、&lt;code&gt;normalize&lt;/code&gt;、&lt;code&gt;article_mode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;第一列是否显示来自页面的 &lt;code&gt;root_nav&lt;/code&gt;，顺序来自页面 &lt;code&gt;weight&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例：&lt;/p&gt;</description></item><item><title>交付与缓存</title><link>https://banyan.swaw.com/zh/docs/guide/delivery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/delivery/</guid><description>&lt;h2 id="配置来源"&gt;配置来源&lt;/h2&gt;
&lt;p&gt;在站点的 &lt;code&gt;data/delivery.toml&lt;/code&gt; 中设置交付策略，Module 默认文件为
&lt;code&gt;module/data/delivery.toml&lt;/code&gt;。Hugo 按顶层字段替换，嵌套表不继承遗漏字段。
修改某个表时复制完整的顶层表；站点声明 &lt;code&gt;routes&lt;/code&gt; 后会替换整个默认数组，
&lt;code&gt;routes = []&lt;/code&gt; 表示清空。运行时配置应用到所有语言。&lt;/p&gt;
&lt;h2 id="部署平台"&gt;部署平台&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cloudflare&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edgeone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;makers&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;installCommand&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;buildCommand&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hugo --minify --gc --cleanDestinationDir&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;outputDirectory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;public&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nodeVersion&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;22.11.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;声明 &lt;code&gt;platform&lt;/code&gt; 会替换所有平台设置；未列出的平台被关闭。
Cloudflare Pages 启用时生成 &lt;code&gt;_headers&lt;/code&gt; 和 &lt;code&gt;_redirects&lt;/code&gt;；
EdgeOne Makers 启用时生成 &lt;code&gt;edgeone.json&lt;/code&gt;。
EdgeOne 的 &lt;code&gt;hugoVersion&lt;/code&gt; 默认来自构建所用的 Hugo 版本，也可在平台表中指定。
修改源配置，不直接编辑生成文件。&lt;/p&gt;
&lt;p&gt;托管构建使用平台自己的 Hugo、Go 和 Git，不安装 Skill。
本地构建、检查与 EdgeOne 配置同步见&lt;a href="https://banyan.swaw.com/zh/docs/development/local-development/"&gt;本地开发&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="路由和-http-响应头"&gt;路由和 HTTP 响应头&lt;/h2&gt;
&lt;p&gt;通用规则在前，例外在后。以下只展示路由格式；编辑站点时保留所需的全部默认路由：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cache-Control&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;public, max-age=900, must-revalidate&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;versioned&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/js/*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Cache-Control&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;public, max-age=31536000, immutable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cloudflare&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;unset&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Cache-Control&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fingerprinted&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/sw.js&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;off&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;path&lt;/code&gt; 可为精确路径，或在任意位置包含一个 &lt;code&gt;*&lt;/code&gt;，例如 &lt;code&gt;/*.xml&lt;/code&gt;。
通配符可匹配空字符串，也可跨越 &lt;code&gt;/&lt;/code&gt;。
SW 匹配区分大小写的 URL pathname，保留百分号编码，不含查询参数和片段；
非 ASCII 路径使用编码形式。&lt;/p&gt;</description></item><item><title>列表与产品声明</title><link>https://banyan.swaw.com/zh/docs/guide/collection-lists/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/collection-lists/</guid><description>&lt;p&gt;页面的 &lt;code&gt;list&lt;/code&gt; 只声明子项怎么展示。内容集合的成员来自页面本身的目录或 Hugo 分类关系；选择页的选项由对应布局提供。入口归属继续由真实根页面及有效 &lt;code&gt;from&lt;/code&gt; 决定，不在内容 front matter 中写菜单。&lt;/p&gt;
&lt;p&gt;第一列名称使用页面的 &lt;code&gt;linkTitle&lt;/code&gt;，未声明时使用 &lt;code&gt;title&lt;/code&gt;。语言、外观、我的的三语言主题页面直接使用无“系统－／系統－／System -”前缀的 &lt;code&gt;title&lt;/code&gt;，入口与页内标题共用同一名称，无需重复声明 &lt;code&gt;linkTitle&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;第一列采用显式加入：只有根页面顶层声明布尔值 &lt;code&gt;root_nav: true&lt;/code&gt; 才显示；未声明、&lt;code&gt;false&lt;/code&gt; 或字符串 &lt;code&gt;&amp;quot;true&amp;quot;&lt;/code&gt; 均不显示。首页自身也遵守该规则。此字段只对首页及其直接子页／分类根生效，不能把深层文章提升成根入口；不要放入 &lt;code&gt;cascade&lt;/code&gt;。项目覆盖主题页面时，每种语言各自保留该声明。&lt;/p&gt;
&lt;p&gt;入口名称和顺序由站点各语言页面的 &lt;code&gt;title&lt;/code&gt;／&lt;code&gt;linkTitle&lt;/code&gt; 与 &lt;code&gt;weight&lt;/code&gt; 决定。&lt;/p&gt;
&lt;p&gt;使用工具分类时，在站点 &lt;code&gt;hugo.toml&lt;/code&gt; 注册 &lt;code&gt;tool = &amp;quot;tools&amp;quot;&lt;/code&gt;，文章用 &lt;code&gt;tools: [free, first-party]&lt;/code&gt; 归类，全部入口声明 &lt;code&gt;aggregate: /tools&lt;/code&gt;。主题默认入口位于 &lt;code&gt;content/tools/&lt;/code&gt;、&lt;code&gt;content/all-tools/&lt;/code&gt;。&lt;code&gt;list: products&lt;/code&gt;、&lt;code&gt;offer&lt;/code&gt;、&lt;code&gt;products_*&lt;/code&gt; 文案键与 &lt;code&gt;product&lt;/code&gt; 图标保留通用产品展示语义，与分类法名称独立。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/d/&lt;/code&gt; 不声明 &lt;code&gt;root_nav&lt;/code&gt;。它继续渲染目录页，文章的目录来源、集合成员、排序、&lt;code&gt;from&lt;/code&gt; 及路径列均保留。隐藏来源没有对应的第一列选中项；直接访问正文时若实际根为隐藏的 &lt;code&gt;/d/&lt;/code&gt;，同样不选中第一列。可见入口过滤发生在 &lt;code&gt;feature-browse/navigation/root/model.html&lt;/code&gt;，&lt;code&gt;root/pages.html&lt;/code&gt; 保留完整结构供归属与来源模型使用；&lt;code&gt;root/render.html&lt;/code&gt; 装配导航和公共列表。&lt;/p&gt;
&lt;h2 id="在哪里改列表"&gt;在哪里改列表&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;文件（每种语言分别配置）&lt;/th&gt;
 &lt;th&gt;当前声明&lt;/th&gt;
 &lt;th&gt;列出的对象&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;主题 &lt;code&gt;content/d/_index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: directory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;目录的直接子目录、文章&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;项目 &lt;code&gt;content/d/wsl/_index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;未声明，继承 &lt;code&gt;/d/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;WSL 目录的直接子项&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;项目 &lt;code&gt;content/tags/_index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: directory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;现有标签树的子项&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;项目 &lt;code&gt;content/tools/_index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: directory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Hugo 的工具分类词项，包含显式空分类&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;上述文件的 &lt;code&gt;cascade&lt;/code&gt;，目标 &lt;code&gt;kind: term&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: products&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;每个分类的 &lt;code&gt;.Pages&lt;/code&gt;，无需逐类写来源&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;项目 &lt;code&gt;content/all/index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: all&lt;/code&gt;、&lt;code&gt;aggregate: /d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/d/&lt;/code&gt; 下全部内容&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;项目 &lt;code&gt;content/all-tools/_index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: products&lt;/code&gt;、&lt;code&gt;aggregate: /tools&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;工具分类成员的去重并集&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;主题 &lt;code&gt;content/language/index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: choice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;hugo.toml&lt;/code&gt; 已启用的语言&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;主题 &lt;code&gt;content/appearance/index.zh.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list: choice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;跟随系统、浅色、深色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;比如要让 WSL 目录使用产品表，在项目 &lt;code&gt;content/d/wsl/_index.zh.md&lt;/code&gt; 原有 front matter 内加一行：&lt;/p&gt;</description></item><item><title>浏览器检查</title><link>https://banyan.swaw.com/zh/docs/development/browser-regression/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/browser-regression/</guid><description>&lt;p&gt;在目标站点根目录调用已安装的 &lt;code&gt;swban.cmd&lt;/code&gt;。参数、默认值和页面要求以任务的
&lt;code&gt;--help&lt;/code&gt; 为准，检查范围见 Skill 的&lt;a href="https://github.com/SwawHQ/banyan/blob/main/.agents/skills/swaw-banyan/references/browser-site.md"&gt;浏览器说明&lt;/a&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban base/browser/ensure #准备 Chromium
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban check/browser/site &amp;lt;build&amp;gt; #检查代表页面
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban check/browser/site &amp;lt;build&amp;gt; --updates #检查 SW 更新
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban check/browser/site &amp;lt;build&amp;gt; --updates --site &amp;lt;source&amp;gt; #指定更新构建源码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban check/browser/site &amp;lt;build&amp;gt; --trace --out &amp;lt;report&amp;gt; #保存报告和 trace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban check/browser/pwa/disable &amp;lt;enabled&amp;gt; --next &amp;lt;disabled&amp;gt; #检查 SW 停用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban check/browser/csp &amp;lt;build&amp;gt; --page &amp;lt;path&amp;gt; #检查指定页面 CSP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swban check/browser/site --help #查看参数
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;检查服务已完成的构建，并应用其生成的 &lt;code&gt;_headers&lt;/code&gt;。报告列出所选路径、失败项和
跳过范围；代表页面检查不覆盖每个页面或全部任务。普通 UI 检查阻止 SW，
需要实际 worker 的 PWA 和预取检查单独启用。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--updates&lt;/code&gt; 读取源码站点的正常配置，只覆盖构建版本，临时构建新版。
源码和受检产物须来自同一站点及配置。测试两次实际代码变化时，给单项 PWA
任务传入两份构建。默认临时产物在结束时清理；报告按 &lt;code&gt;--out&lt;/code&gt; 选择保留位置。&lt;/p&gt;</description></item><item><title>路径导航模型</title><link>https://banyan.swaw.com/zh/docs/development/breadcrumb-models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/development/breadcrumb-models/</guid><description>&lt;h2 id="第一列与进入路径"&gt;第一列与进入路径&lt;/h2&gt;
&lt;p&gt;第一列是当前语言站点的真实根页面列表。&lt;code&gt;feature-browse/navigation/root/pages.html&lt;/code&gt; 将 Home、&lt;code&gt;Home.Pages&lt;/code&gt; 与直接属于 Home 的 taxonomy 根页面取并集，再按页面 &lt;code&gt;weight&lt;/code&gt; 排序，保留完整结构供归属与来源模型使用。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;feature-browse/navigation/root/model.html&lt;/code&gt; 从结构根页面生成可见入口，负责 &lt;code&gt;root_nav: true&lt;/code&gt; 过滤、名称、地址、图标和默认选中状态。名称取 &lt;code&gt;LinkTitle&lt;/code&gt; / &lt;code&gt;Title&lt;/code&gt;，地址取 &lt;code&gt;RelPermalink&lt;/code&gt;；&lt;code&gt;build.list: local&lt;/code&gt; 的系统页面也可以参与。&lt;code&gt;root/render.html&lt;/code&gt; 只装配 &lt;code&gt;nav&lt;/code&gt; 与公共列表。&lt;/p&gt;
&lt;p&gt;首页自身作为普通根入口，名称与图标由站点首页声明。页面不声明主菜单归属，也没有独立的菜单项目白名单。
新增入口时，创建真实的根页面并设置 &lt;code&gt;root_nav: true&lt;/code&gt;、名称和权重；新增某个入口的子项时，把它放在相应内容目录中。&lt;/p&gt;
&lt;h2 id="选中规则"&gt;选中规则&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;feature-browse/navigation/root/selected.html&lt;/code&gt; 从当前页面及真实内容祖先中找根入口，提供静态 HTML 的默认选中项。
公开 URL 可以与内容路径不同，因此不能根据 URL 前缀猜所属入口。例如 &lt;code&gt;content/d/products/xvenv/&lt;/code&gt; 发布在 &lt;code&gt;/p/xvenv/&lt;/code&gt;，仍属于真实目录；目录隐藏时第一列不选中。&lt;code&gt;content/powered-by/&lt;/code&gt; 是独立根页面，选中自己的入口，无子页路径列。&lt;/p&gt;
&lt;p&gt;有效的 &lt;code&gt;from&lt;/code&gt; 指向当前页面已发布的来源集合。运行时根据浏览器来源的 &lt;code&gt;rootItem&lt;/code&gt; 调整第一列选中项，完整入口列表始终保留。
从“标签”进入同一篇文章就选中“标签”，从“产品－全部”进入就选中“产品－全部”。不存在或不属于当前文章的来源不参与选中，继续使用内容祖先。
系统页面选中自己的根入口，使用普通页面网址；返回按钮使用浏览器历史记录，不另存原阅读地址。语言选择后的返回行为见 &lt;a href="https://banyan.swaw.com/zh/docs/development/navigation-state/#%E7%B3%BB%E7%BB%9F%E9%A1%B5%E9%9D%A2%E4%B8%8E%E8%BF%94%E5%9B%9E"&gt;导航状态协议&lt;/a&gt;。首页作为显式根入口时选中自己；没有根入口祖先的内部页不强制选中一项。&lt;/p&gt;
&lt;h2 id="路径模型"&gt;路径模型&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;feature-browse/navigation/path/model.html&lt;/code&gt; 根据普通页面、首页或 taxonomy 的真实结构构建模型。该模型只用于构建期：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;root_item&lt;/code&gt;：第一列应选中的根页面。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schema_items&lt;/code&gt;：结构化数据中的页面路径。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nodes&lt;/code&gt;：根页面之后的结构节点，每项为 &lt;code&gt;{item, owner}&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;nodes[].item&lt;/code&gt; 是纯路径项，&lt;code&gt;owner&lt;/code&gt; 是提供兄弟条目的 Hugo Page；没有所属页面时为空。两者的地址含义不同。例如“WSL”项目指向 &lt;code&gt;/d/wsl/&lt;/code&gt;，其兄弟列表来自 owner &lt;code&gt;/d/&lt;/code&gt;。Hugo Page 不进入浏览器投影。&lt;/p&gt;</description></item><item><title>页面区域与布局</title><link>https://banyan.swaw.com/zh/docs/guide/layout-slots/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/layout-slots/</guid><description>&lt;h2 id="当前约定"&gt;当前约定&lt;/h2&gt;
&lt;p&gt;第一列入口由内容树生成，页面无需声明菜单归属。&lt;code&gt;slots&lt;/code&gt; 只控制路径和元信息是否装配；框架负责布局。正文 &lt;code&gt;main&lt;/code&gt; 是内建区域，不通过 front matter 指向 fragment。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;slots.breadcrumb&lt;/code&gt; 装配 shell 内的 &lt;code&gt;nav.slot.path-navigation[data-slot=&amp;quot;breadcrumb&amp;quot;]&lt;/code&gt;，其子节点是路径列。&lt;code&gt;data-slot=&amp;quot;breadcrumb&amp;quot;&lt;/code&gt; 保留区域语义；屏幕上 nav 使用 &lt;code&gt;display: contents&lt;/code&gt;，各列直接参与 &lt;code&gt;.page-shell&lt;/code&gt; 的横向 Grid。列尺寸和打印分组见 &lt;a href="https://banyan.swaw.com/zh/docs/development/ui-naming/#%E5%85%AC%E5%85%B1%E9%A1%B5%E9%9D%A2%E5%88%97"&gt;公共页面列&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;布局、路径列、集合与更新模块的命名见 &lt;a href="https://banyan.swaw.com/zh/docs/development/ui-naming/"&gt;UI 命名与职责&lt;/a&gt;。内部 &lt;code&gt;slot_flags&lt;/code&gt; 保存区域开关，不再表示片段来源。&lt;/p&gt;
&lt;h2 id="第一列入口"&gt;第一列入口&lt;/h2&gt;
&lt;p&gt;当前语言的根页面集合包含首页自身及直接子页 &lt;code&gt;Home.Pages&lt;/code&gt;，再合并父页面为首页的 taxonomy 根页；这份结构集合完整保留，用于路径归属。第一列只显示其中顶层声明布尔值 &lt;code&gt;root_nav: true&lt;/code&gt; 的页面，默认不显示。名称取 &lt;code&gt;LinkTitle&lt;/code&gt;／&lt;code&gt;Title&lt;/code&gt;，网址取 &lt;code&gt;RelPermalink&lt;/code&gt;，顺序取页面 &lt;code&gt;weight&lt;/code&gt;。来源变化只更新选中项，不替换可见入口列表。&lt;/p&gt;
&lt;p&gt;入口可在自己的 front matter 中用 &lt;code&gt;icon: folder&lt;/code&gt; 声明 SVG，或用 &lt;code&gt;icon: { text: &amp;quot;©&amp;quot; }&lt;/code&gt; 声明字符图标；省略时使用 &lt;code&gt;folder&lt;/code&gt;，不存在的图标会让构建失败。当前语言、外观、我的入口分别声明 &lt;code&gt;language&lt;/code&gt;、&lt;code&gt;theme&lt;/code&gt;、&lt;code&gt;my&lt;/code&gt;，更新入口声明 &lt;code&gt;icon: { text: &amp;quot;↻&amp;quot; }&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不能只取 &lt;code&gt;Home.Sections&lt;/code&gt;，因为语言、外观、我的和 &lt;code&gt;/all/&lt;/code&gt; 入口是普通页面。&lt;/li&gt;
&lt;li&gt;不能只取 &lt;code&gt;Site.Pages&lt;/code&gt;，因为 &lt;code&gt;build.list: local&lt;/code&gt; 的系统页只列在其父页集合中。&lt;/li&gt;
&lt;li&gt;taxonomy 根需要单独合并，不能假定它们都在 &lt;code&gt;Home.Pages&lt;/code&gt; 中。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build.list: never&lt;/code&gt; 的内部节点不作为入口。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;weight&lt;/code&gt; 只需在入口本身定义，不应 cascade 到所有文章。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;首页在 &lt;code&gt;content/_index*.md&lt;/code&gt; 声明 &lt;code&gt;root_nav: true&lt;/code&gt;、&lt;code&gt;linkTitle&lt;/code&gt;、&lt;code&gt;icon&lt;/code&gt; 和 &lt;code&gt;weight&lt;/code&gt;，使用普通条目组件，正文使用 &lt;code&gt;page-home&lt;/code&gt;。站点自己的根页面决定可见入口和文案。&lt;/p&gt;</description></item><item><title>预取配置</title><link>https://banyan.swaw.com/zh/docs/guide/prefetch-stacks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/prefetch-stacks/</guid><description>&lt;p&gt;在站点的 &lt;code&gt;data/delivery.toml&lt;/code&gt; 中配置。模块默认值在
&lt;code&gt;module/data/delivery.toml&lt;/code&gt;。Hugo 按顶层字段替换；站点声明 &lt;code&gt;[prefetch]&lt;/code&gt; 后，
须填写完整的预取表，未填写的图标和范围不继承模块值。配置应用到所有语言。&lt;/p&gt;
&lt;p&gt;预取按条目主图标名称和列范围匹配。Hugo 生成一份共享 CSS 选择器：
Speculation Rules 直接匹配文档；自实现 JS 用同一选择器收集链接。
链接不输出预取属性，导航数据不再包含预取分类。&lt;/p&gt;
&lt;h2 id="图标与列范围"&gt;图标与列范围&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;folder&lt;/code&gt; 表示集合入口策略，&lt;code&gt;file&lt;/code&gt; 表示内容页面策略。
这些名称是预取提示；更换条目图标也会改变策略。
只匹配条目链接内的主 SVG 图标，正文装饰图标不参与图标分类。
未配置图标、文字、图片和其他页面链接使用 &lt;code&gt;default&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;普通链接可直接输出 &lt;code&gt;&amp;lt;a href=&amp;quot;…&amp;quot;&amp;gt;&lt;/code&gt;，无需调用预取专用片段或添加预取属性。
图标和列范围策略读取已有条目结构：主链接带 &lt;code&gt;data-list-entry&lt;/code&gt;，
主 SVG 图标位于其直接子元素 &lt;code&gt;.item-icon&lt;/code&gt; 中。
共享列表片段负责样式、选中态和可访问属性，模板也可直接输出相同结构。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;范围&lt;/th&gt;
 &lt;th&gt;含义&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;root&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;根导航，第 0 列&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;tail&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;最后的条目列；集合页为主集合列表，文章页为最右路径列表&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;root+N&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;从根导航向右 N 个条目列&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;tail-N&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;从尾列向左 N 个条目列&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;all&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;此图标未被其他范围覆盖的条目链接&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;只计算导航和集合条目列。文章正文、章节和元信息不参与编号。
横向滚动不改变编号。没有路径列的文章页，根导航同时是尾列。
N 使用正整数；偏移到根导航时可匹配它，超出实际列数时不匹配。
偏移键统一加引号；&lt;code&gt;+&lt;/code&gt; 不能用于 TOML 裸键。&lt;/p&gt;
&lt;p&gt;重叠优先级固定为：&lt;code&gt;root &amp;gt; tail &amp;gt; tail-N &amp;gt; root+N &amp;gt; all &amp;gt; default&lt;/code&gt;。
例如三列页面的 &lt;code&gt;root+1&lt;/code&gt; 和 &lt;code&gt;tail-1&lt;/code&gt; 指向同一列，使用 &lt;code&gt;tail-1&lt;/code&gt;。
两端的明确配置优先；显式 &lt;code&gt;off&lt;/code&gt; 阻止回落，配置声明顺序不影响结果。
基础预取和预渲染分别解析。基础预取为 &lt;code&gt;off&lt;/code&gt; 的链接不参与预渲染。
两份规则各自生成互斥选择器，共用列定位方法，不需要手写选择器。&lt;/p&gt;</description></item><item><title>站点发现与来源链接</title><link>https://banyan.swaw.com/zh/docs/guide/discovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://banyan.swaw.com/zh/docs/guide/discovery/</guid><description>&lt;h2 id="sitemap"&gt;Sitemap&lt;/h2&gt;
&lt;p&gt;Sitemap 收录已渲染且可索引的 HTML 页面，包括 &lt;code&gt;build.list: local&lt;/code&gt; 和
&lt;code&gt;build.list: never&lt;/code&gt; 页面。页面 front matter 可用以下设置排除收录：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;sitemap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;disable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在 section bundle 使用 &lt;code&gt;cascade.sitemap.disable: true&lt;/code&gt;，可排除该目录和后代。
该设置不阻止 HTML 渲染或搜索引擎索引。
&lt;code&gt;robots: noindex&lt;/code&gt;、&lt;code&gt;robots: none&lt;/code&gt;、翻译占位页和 404 页自动排除，
也不会进入其他页面的替代语言链接。&lt;/p&gt;
&lt;p&gt;预览时使用 &lt;code&gt;hugo server --disableFastRender&lt;/code&gt; 检查 sitemap 变化，
快速预览可能保留旧 XML。自定义 HTML 布局须继承 Banyan 的 &lt;code&gt;baseof.html&lt;/code&gt;，
由它登记已渲染页面。&lt;/p&gt;
&lt;h2 id="agent-索引"&gt;Agent 索引&lt;/h2&gt;
&lt;p&gt;多语言站点的默认语言位于根路径时，&lt;code&gt;/llms.txt&lt;/code&gt; 为全局索引。
Banyan 同时发布 &lt;code&gt;/&amp;lt;default-language&amp;gt;/llms.txt&lt;/code&gt;，路径形式与多语言 sitemap 一致。&lt;/p&gt;
&lt;p&gt;各语言索引直接链接规范 HTML 页面，收录语言首页、&lt;code&gt;/about/&lt;/code&gt;
和 &lt;code&gt;d&lt;/code&gt; 内容 section 的普通文章。工具页和分类索引不进入精选索引，
无需为每页设置输出开关。站点说明配置见&lt;a href="https://banyan.swaw.com/zh/docs/guide/site-configuration/"&gt;站点配置&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="github-来源"&gt;GitHub 来源&lt;/h2&gt;
&lt;p&gt;在站点根 &lt;code&gt;hugo.toml&lt;/code&gt; 中指定内容仓库：&lt;/p&gt;</description></item></channel></rss>