Viewer Manual
oasis7 Viewer 使用手册
覆盖启动方式、交互说明、自动聚焦、自动步骤、Web 闭环调试与常见问题,适用于 `oasis7_viewer` 联调与回归。
快速开始
1) 启动 live server(推荐)
env -u RUSTC_WRAPPER cargo run -p oasis7 --bin oasis7_viewer_live -- llm_bootstrap --bind 127.0.0.1:5023 --web-bind 127.0.0.1:5011
`oasis7_viewer_live` 当前默认走 LLM 模式;正式 gameplay 需要已配置且可连通的 LLM provider。
env -u RUSTC_WRAPPER cargo run -p oasis7 --bin oasis7_viewer_live -- llm_bootstrap --no-llm --bind 127.0.0.1:5023 --web-bind 127.0.0.1:5011
`--no-llm` 仅用于观战/调试;`gameplay_action/prompt/chat` 会直接返回 `llm_mode_required` 或 `llm_init_failed`,`step/play` 则会返回带 `Blocked + error_code/error_message` 的 `ControlCompletionAck`。
2) 启动 viewer
env -u RUSTC_WRAPPER cargo run -p oasis7_viewer -- 127.0.0.1:5023
3) 离线模式(不连服务端)
OASIS7_VIEWER_OFFLINE=1 env -u RUSTC_WRAPPER cargo run -p oasis7_viewer
4) 浏览器模式(Bevy + wasm)
env -u NO_COLOR ./scripts/run-viewer-web.sh --address 127.0.0.1 --port 4173
访问:`http://127.0.0.1:4173/?ws=ws://127.0.0.1:5011`。
5) 发行模式(P2P 推荐)
`oasis7_viewer_live` 当前为纯 Viewer live 服务,不再承载 `--release-config`、`--runtime-world` 与 `--node-*` 控制面参数。
P2P 发行建议使用 `oasis7_chain_runtime`(可由 `oasis7_game_launcher` / `oasis7_web_launcher` / `oasis7_client_launcher` 托管)锁定链参数,Viewer 仅保留 `--bind`、`--web-bind`、`--llm/--no-llm`;其中 `--no-llm` 只用于 observer/debug。
常用交互
- 鼠标拖拽:旋转/平移观察视角。
- 滚轮:缩放。
- `W/A/S/D`:移动相机视角(2D/3D 均可,需位于 3D 视口且未占用文本输入)。
- `2D/3D`:顶部按钮切换视角模式。
- 控制区(观察模式):默认仅显示 `播放/暂停` 单按钮;点击 `高级调试` 后展开 `单步` 与 `跳转 0`。
- `F`:聚焦当前选中对象。
- 右侧综合面板:查看控制、状态、事件、分块、诊断等模块信息。
- 最右侧 Chat 面板:独立承载 Agent Chat,不与综合面板混排;仅在观察模式且顶部区域展开时显示。
- Chat 输入:输入框聚焦时,`Enter` 发送;`Shift+Enter` 换行。
自动聚焦(Auto Focus)
启动时可通过环境变量自动定位目标:
- `OASIS7_VIEWER_AUTO_FOCUS=1`
- `OASIS7_VIEWER_AUTO_FOCUS_TARGET=<target>`
- `OASIS7_VIEWER_AUTO_FOCUS_FORCE_3D=1|0`(默认 `1`)
- `OASIS7_VIEWER_AUTO_FOCUS_RADIUS=<number>`(可选)
支持语法:`first_fragment`、`first_location`、`first_agent`、`location:<id>`、`agent:<id>`(兼容简写 `fragment/location/agent`)。
自动聚焦目标仅支持 Agent / Location / Fragment 三类。
自动步骤(Auto Select / Automation Steps)
- `--auto-select-target`:启动后自动选中目标(推荐 `first_agent`,兼容 `first:agent`)。
- `--automation-steps`:执行一组自动步骤(如 `mode=3d;focus=first_agent;zoom=0.8;select=asset:asset-0`)。
./scripts/capture-viewer-frame.sh \
--scenario llm_bootstrap \
--addr 127.0.0.1:5131 \
--auto-select-target first_agent \
--automation-steps "mode=3d;focus=first_agent;zoom=0.8;select=fragment:frag-0"
Web 闭环(默认推荐)
前置要求
- Node.js 20+(`npx` 可用)
- `trunk`(`cargo install trunk`)
- `wasm32-unknown-unknown`(`rustup target add wasm32-unknown-unknown`)
标准流程
终端 A:启动 live server。
env -u RUSTC_WRAPPER cargo run -p oasis7 --bin oasis7_viewer_live -- llm_bootstrap --bind 127.0.0.1:5023 --web-bind 127.0.0.1:5011
默认链路要求 active LLM access;若显式切到 `--no-llm`,该 Web 路径只能用于 observer/debug 诊断,不计入正式可玩性证据。
终端 B:启动 Web Viewer。
env -u NO_COLOR ./scripts/run-viewer-web.sh --address 127.0.0.1 --port 4173
终端 C:执行 agent-browser 闭环采样。
command -v agent-browser >/dev/null || { echo "missing agent-browser" >&2; exit 1; }
mkdir -p output/playwright/viewer
agent-browser --headed open "http://127.0.0.1:4173/?ws=ws://127.0.0.1:5011&test_api=1"
agent-browser wait --load networkidle
agent-browser snapshot -i
agent-browser eval "JSON.stringify(window.__AW_TEST__?.getState?.() ?? null)"
agent-browser console | tee output/playwright/viewer/console.log
agent-browser screenshot output/playwright/viewer/viewer-web.png
agent-browser close
注:产物目录当前沿用历史路径 output/playwright/viewer/。`render_mode` 默认为 auto:硬件 WebGL 正常时进入标准 Viewer;检测到 SwiftShader / software renderer / 无 WebGL 时会自动切到 software_safe。若要强制安全模式,可在 URL 后追加 &render_mode=software_safe。
`sendControl(\"step\")` 语义校验
可在浏览器控制台或 agent-browser evaluate 中执行以下调用,验证逐步推进生效:
window.__AW_TEST__.sendControl("step");
window.__AW_TEST__.sendControl("step", { count: 3 });
window.__AW_TEST__.sendPromptControl("preview", { agentId: "agent-0", shortTermGoal: "software-safe preview" });
window.__AW_TEST__.sendPromptControl("apply", { agentId: "agent-0", shortTermGoal: "software-safe apply" });
window.__AW_TEST__.sendAgentChat("agent-0", "hello from software_safe");
window.__AW_TEST__.getState();
当页面由 oasis7_game_launcher 提供并注入 viewer auth bootstrap 时,software_safe 还会开放选中 Agent 的最小 prompt/chat 控制面;对应自动化接口为 sendPromptControl(mode, payload) 与 sendAgentChat(agentId, message)。
Prompt Overrides 已改为默认收起的“高级 Prompt 设置”项;选中 Agent 后手动展开,才会显示 preview/apply/rollback 编辑表单。该开关会记住本地浏览器上一次的展开状态,但不影响 __AW_TEST__.sendPromptControl(...)。
输出目录与最小验收
- 输出:`output/playwright/viewer/*.png`、`output/playwright/viewer/console.log`(或等价重定向日志)。
- 验收:页面加载成功,且 `window.__AW_TEST__.getState().renderMode` 明确为 `standard` 或 `software_safe`;至少 1 张截图,且 `step` 调用可推动 tick 前进。
- 若 `rendererClass=software`,允许进入 `software_safe` 做最小闭环;此时不再要求页面必须渲染 `canvas`。
native fallback(仅 Web 无法复现时)
./scripts/capture-viewer-frame.sh --scenario asteroid_fragment_detail_bootstrap --addr 127.0.0.1:5131 --viewer-wait 12 --auto-focus-target first_fragment --auto-focus-radius 18
常用增强参数:`--capture-max-wait`、`--no-prewarm`、`--keep-tmp`、`--auto-focus-keep-2d`。
右侧综合面板与 Chat 面板
模块显隐与本地缓存
- 支持按模块单独显示/隐藏:控制、总览、覆盖层、诊断、事件联动、时间轴、状态明细。
- `Chat` 开关控制独立最右侧 Chat 面板显隐;关闭时不渲染且不占用右侧宽度。
- Chat 内容已从综合右侧面板拆分,不再混排。
- 开关状态会落盘并在重启后恢复。
- 默认路径:`$HOME/.oasis7_viewer/right_panel_modules.json`。
- 可覆盖路径:`OASIS7_VIEWER_MODULE_VISIBILITY_PATH`。
选中详情面板
- 支持对象:Agent、Location、Asset、PowerPlant、Chunk。
- LLM 场景下可查看最近决策 I/O 摘要。
快速定位 Agent
- 入口:`事件联动` 区域 `定位 Agent` 按钮。
- 优先定位当前选中 Agent,否则定位字典序第一个 Agent。
全览图缩放切换(2D)
- 2D 视角支持细节态 / 全览图态自动切换。
- 默认细节态;缩放到阈值后切换到全览图态并简化显示层。
文本可选中/复制面板
- 可打开文本面板复制状态、事件、诊断与详情文本。
- 使用系统快捷键复制(macOS `Cmd+C` / Windows/Linux `Ctrl+C`)。
UI 语言切换
- 支持中文 / 英文 UI。
- 通过顶部语言控件切换并即时生效。
推荐调试场景
- `asteroid_fragment_detail_bootstrap`:细粒度 location 渲染观察。
- `llm_bootstrap`:常规在线联调。
- `twin_region_bootstrap`:双区域协作对比。
开采损耗可视化
- 含 `fragment_budget` 的 location 会按剩余质量比例缩放体量。
- 剩余越少,视觉半径越小;存在最小可视半径保护。
- 详情面板显示:`Fragment Depletion: mined=<x>% remaining=<a>/<b>`。
常见问题排查
- Web 页面空白:先等 `trunk` 首轮编译完成,检查端口与 URL 是否一致。
- `agent-browser` 启动失败:检查 `agent-browser --version` 与浏览器依赖。
- Console 出现 wasm 报错:先修复运行时错误,再判断视觉问题。
- 看不到细节:切换 3D,放大并移动视角,或按 `F` 聚焦。
- 自动聚焦无效:先用 `first_fragment` 排除目标 ID 输入问题。
- 连接失败:检查 `oasis7_viewer_live` 运行状态与端口一致性。
参考文档
- viewer-location-fine-grained-rendering.prd.md
- viewer-auto-focus-capture.prd.md
- viewer-web-closure-testing-policy.prd.md
- viewer-selection-details.prd.md
- viewer-right-panel-module-visibility.prd.md
- viewer-overview-map-zoom.prd.md
- viewer-agent-quick-locate.prd.md
- viewer-copyable-text.prd.md
- viewer-generic-focus-targets.prd.md
- viewer-web-test-api-step-control-2026-02-24.prd.md
- capture-viewer-frame.prd.md
Fragment 元素分块渲染(默认开启)
- 目标:location 的 fragment 分块默认显示,并按主导元素渲染颜色。
- 当前行为:不渲染 location 外层几何与标签,仅保留逻辑锚点;frag 分块始终渲染。
- 交互:点击 frag 后,详情面板显示所属 `location`(ID 与名称)。
- 配置:已移除 frag 渲染开关和环境变量,不再支持按开关隐藏 frag。