运维 Runbook
本 Runbook 覆盖 AgentHub 公开站点、文档、本地预览和集成证据。它刻意保持 secret-free:生产主机路径、回滚命令、key 和私有日志属于私有运维 workspace。
日常检查
| 检查 | 命令或路由 | 预期结果 |
|---|---|---|
| 公开首页 | https://hub.vectorcontrol.tech/zh 和 /en | 当前首页,无旧 hero 文案,无旧紫色强调 |
| 文档入口 | /zh/docs 和 /en/docs | 有样式的 docs 页面,包含 sidebar、TOC 和正文 |
| 深层文档 | /zh/docs/workflows、/en/docs/desktop、/zh/docs/hub-edge | 正文正确、本地化导航正确、无 404 |
| 公开发现 | /robots.txt、/sitemap.xml、/llms.txt | 新路由存在且不含 secret |
| 登录入口 | /zh/login 或 nav 登录按钮 | 跳转 TokenDance ID,不自行实现独立产品登录 |
验证近期部署时使用 cache-busting:
powershell
curl.exe -I "https://hub.vectorcontrol.tech/zh/docs/desktop?v=YYYYMMDDTHHMMSS"
curl.exe "https://hub.vectorcontrol.tech/llms.txt?v=YYYYMMDDTHHMMSS"
本地构建门禁
在登记的发布源 worktree 中运行:
powershell
pnpm build
pnpm test
pnpm lint
预期结果:
out/中存在 static export;- 本地化 docs 同时导出到
out/en/docs/...和out/zh/docs/...; - tests 覆盖 docs registry、i18n routes、search index、nav、footer 和 hero 行为;
- lint 没有新增 warning。
Docs 发布门禁
每个新增 docs route 必须更新:
| 文件或系统 | 必须更新 |
|---|---|
| 英文 MDX | src/content/docs/<slug>.mdx |
| 中文 MDX | src/content/docs/zh/<slug>.mdx |
| 导航 | src/lib/docs-data.ts 的 group 和 label |
| TOC | PAGE_HEADINGS 和 PAGE_HEADINGS_ZH |
| 搜索 | src/lib/search-index.ts 正文文本 |
| 公开发现 | public/sitemap.xml 和 public/llms.txt |
| 读者文档 | README Documentation IA 和 changelog |
| 测试 | 必要时补 docs registry/search 断言 |
漏掉任一项都可能导致页面能渲染,但 search、sidebar、prev/next、crawler discovery 或 zh/en parity 出现漂移。
视觉 QA 门禁
UI 或 docs layout 改动后检查:
- 桌面视口约 1440 x 900;
- 移动视口约 390 x 844;
/zh、/en、/zh/docs、/en/docs;- 本次变更的 docs route;
- 页面包含 Desktop mock 时的主题切换状态;
- mock 文案可见时的语言切换状态。
重点观察:
- pill、button、nav、footer 内文字是否换行或溢出;
- 是否残留旧紫色强调,而不是 TokenDance Blue;
- 是否出现纯黑 footer 背景;
- Desktop mock 的 hover 阴影是否过重;
- 非交互 mock preview 内是否出现浏览器默认 focus 框;
- docs 正文是否回退成无样式文本。
产品运行信号
验证 AgentHub 产品行为时,记录公开安全的信号,不要复制私有日志:
| 区域 | 信号 | 健康形状 |
|---|---|---|
| Hub session | auth/session check | TokenDance ID subject 映射到 Hub 本地 session;被拒绝动作带 request id |
| Project routing | task target selection | work 入队前先确认目标 Edge 已授权 |
| Edge presence | heartbeat 或 health shape | Edge 报告 reachable state、version、workspace policy 和 runtime inventory |
| Run lifecycle | event stream | created -> preparing -> running -> completed/failed/cancelled,event 单调推进 |
| Runtime adapter | adapter readiness | 先验证 mock;真实 CLI 报告 installed/authenticated/available 或明确 runtime_unavailable |
| Artifact 与 diff | review surfaces | 使用相对路径、base/target metadata、approval id,且无私有绝对路径 |
| Queue/integration | async work | webhook/card 路径快速确认,耗时工作进入 queue/retry 状态 |
| Audit | action record | actor、project、target、run id、action、result、timestamp 和脱敏失败原因 |
Smoke 报告和 issue 分流可使用这张表。不要把完整 prompt、raw provider output、私有文件内容、access token 或 host-specific log 粘进公开文档。
线上 Smoke 形状
一条线上 smoke 记录应包含:
Text
site: hub.vectorcontrol.tech
version: cache-busting timestamp
routes: /zh, /en, /zh/docs, /en/docs, changed deep docs route
checks: body keyword, status code, discovery files, no stale old hero
result: pass/fail
公开 changelog 只写变化内容,不写服务器文件位置。
故障分流
| 故障 | 第一动作 |
|---|---|
| 仍看到旧首页 | 检查发布源、CDN/浏览器缓存,以及是否从错误 worktree 构建 |
| Docs 空白或像纯文本 | 检查 MDX export、static route、CSS assets 和浏览器缓存 |
| 新 docs 页面不在 sidebar | 更新 src/lib/docs-data.ts 和测试 |
| Search 搜不到新页面 | 更新 src/lib/search-index.ts |
| Sitemap 缺路由 | 更新 public/sitemap.xml 并重跑 public-surface 检查 |
llms.txt 过期 | 更新关键链接和当前状态文案 |
| Login page 像独立登录页 | 静态站登录只能作为 TokenDance ID redirect shell |
| Web route 无法访问 Edge target | 先检查 Hub 授权、Edge presence、target id 和 audit denial,再改 Web UI |
| Event stream 中途停止 | 检查 run state、queue backlog、adapter process state 和 schema validation failure |
unauthorized_target | 确认 user/project membership 和 device target binding |
workspace_outside_allowlist | 确认 workspace 已登记到选中的 Edge |
runtime_unavailable | 先验证 mock runtime,再查本地 CLI install/auth/profile compatibility |
| 真实 runtime 失败 | 先用 mock 复现,再检查本地 CLI auth 和 Edge adapter 日志 |
Runtime 事故分流
公开站点本身健康、但产品行为失败时,使用这张表分流:
| 症状 | 严重度 | 第一检查 | Owner | 公开安全证据 | 私有证据 |
|---|---|---|---|---|---|
| Edge 不可达 | High | 选中 target 的 Edge health URL | Edge Server | status code、request id、target id | 本地进程日志和 host 细节 |
| Web target 未授权 | High | 该 target route 的 Hub audit/request id | Hub Server | error code、request id、project id placeholder | 授权 trace 和成员记录 |
| Workspace 被拒绝 | Medium | selected workspace 是否在 Edge allowlist 内 | Edge Server | workspace_outside_allowlist、target id | 本地 allowlist 和 path 细节 |
| Runtime 不可用 | Medium | 先查 mock runtime,再查 CLI install/auth state | Edge adapter | runtime_unavailable、adapter id | 本地 CLI 输出和 credential 状态 |
| Event stream 卡住 | Medium | 最后一个单调 event 和 queue/run state | Edge + Hub | run id、last event type、request id | adapter log 和 queue trace |
| 飞书/Lark callback 过慢 | High | callback ack latency | Integration Gateway | event type、action id、latency bucket | raw provider payload 和 retry log |
| Audit 缺失 | High | task/run 对应 Hub action record | Hub Server | actor placeholder、run id、action、result | 完整 audit row 和内部 correlation id |
公开 issue 只记录 error code、request id、route class 和脱敏 id。local log、host path、queue name、callback payload、raw runtime output 只能留在私有 operator workspace。
状态词
使用保守状态词:
| 词 | 含义 |
|---|---|
| Live / 已上线 | 公开站点或路由可访问 |
| Preview-ready / 可预览 | 本地或受控预览有明确证据 |
| Contract shaped / 契约已定 | 接口已文档化,但公开 SDK/package 仍可能变化 |
| In progress / 进行中 | 已有实现或正在集成 |
| In development / 开发中 | 规划或部分实现;不要写成可用 |
不确定时使用更保守的词,并链接到 roadmap 或 changelog。