gateway.controlUi.basePath 会作为下面每个路径的前缀。例如,当基础路径为 /openclaw 时,/chat/main
会变成 /openclaw/chat/main。
会话和仪表盘 URL
聊天和仪表盘视图是并行路由命名空间:<namespace> 要么是 /chat,要么是 /dashboard。第一种形式会打开该
agent 的主会话。其他形式通过两种方式之一编码一个不可变会话键。
当会话键的剩余部分(即 agent:<agentId>: 之后的全部内容)以 UUID 结尾时,适用短 ID 形式。<sessionRef> 是一个可选的显示名 slug 加一个短 ID,例如 deploy-monitor-6db92d48。短 ID 是权威部分:它是键尾随 UUID 起始处至少八个小写十六进制字符,并省略了 UUID 中的连字符。接受更长的前缀,最长可达全部 32 个十六进制字符。行的轮转 sessionId 不属于 URL 身份的一部分。
其他所有键都使用字面键形式。agent:<agentId>: 之后每个以冒号分隔的段都会变成一个经过 URL 编码的路径段。例如,
agent:main:telegram:12345 会变成 /chat/main/telegram/12345,而 agent:main:cron:nightly:run:8821 会变成
/chat/main/cron/nightly/run/8821。
完全等于 . 或 .. 的字面剩余段会使用 ~dot 和 ~dotdot,这样浏览器就不会把它们折叠为相对路径段。以 ~ 开头的字面段会把这个前导字符加倍,以保持编码可逆。当一个原本字面的一段剩余内容可能被误认为短 ID 时,构建器会在其前面插入 ~key,例如
agent:main:release-deadbeef 会变成
/chat/main/~key/release-deadbeef。这个标记会强制按字面解释,并且只会在未转义形式存在歧义时出现。
保留的单段字面剩余名称是 main、global、boot 和 sessions。配置的 session.mainKey 会在运行时加入这个集合。当 agent id 后只有一个段时,如果它是保留项或不包含有效短 ID,则它是字面值;否则它是短引用。agent id 后有两个或更多段时,始终按字面值处理。
只有配置的 session.mainKey 才会折叠为仅包含 agent 的主会话路径。若 session.mainKey: "workspace",则 agent:research:workspace 会变成 /chat/research,而不同的键 agent:research:main 仍保持为字面路径 /chat/research/main。
稳定性约定
以下部分是稳定的 URL 约定:/chat和/dashboard这两个命名空间词。- 短 ID URL 中的键 UUID 短 ID。
- 上述的参数个数以及短/字面解析规则。
/<namespace>/<agentId>/<slug>-<shortId> 引用替换。如果多个会话共享同一个 slug,UI 会显示与短 ID 平局时相同的消歧视图,而不是猜测。精确的短 ID 和字面键引用总是优先于 slug 匹配。
如果一个短 ID 匹配多个会话,且 slug 无法解决歧义,UI 不会进行猜测。它会显示一个简短的消歧视图,其中包含匹配的显示名称、agent 以及更长的 ID 前缀。使用更长的前缀来使 URL 唯一。当前 Gateways 最多返回十个最近的候选项;达到这一上限时,视图会将结果视为不完整,而不是进行猜测。对于早于短 ID 解析支持的旧版 Gateway,UI 会回退到之前的有界列表搜索,最多扫描五页结果。当该回退方式无法证明唯一性时,它同样会报告搜索结果不完整,而不是进行猜测。
如需在终端中继续使用其中一个链接或附加编码 harness,请参阅
会话同步和附加。
规范链接不使用 ?session= 或 ?face=。诸如
/chat?session=<sessionKey> 这样的已发布链接,仅在应用边界处作为迁移辅助方式接受,并会立即重写为规范路径,且不会添加浏览器历史记录。已发布的 ?face=dashboard 配套参数会在该重写过程中选择 /dashboard 命名空间。加载器和页面代码从不读取查询形式的身份信息,新链接不得输出该形式。Sessions 列表保留其自身的 ?session= 参数,因为该参数会展开一行;它不是会话深层链接。一次性的编辑器值 ?draft= 仍在聊天和仪表盘会话路径上受支持。
路由表
此表列出了每个 Control UI 应用路由。破折号表示该路由没有特定于路由的 URL 参数。
使用基于 schema 的深链接的设置路由接受
?section=<section>、
?advanced=1 和 #<setting-id>。这些值用于选择页面内的内容;
它们不会改变路由标识。
已弃用的常规路由及其 /config 别名会被一次性替换为
/settings/appearance?section=__appearance__#settings-language。历史上的
#settings-general-model 目标则会跳转到“模型”行为部分。
记忆标签页使用表中的路径,而不是 ?tab=。带有
?tab=memories|dreams|settings、?tab=dreaming、?tab=search 或
?section=memory 的旧版记忆链接会被一次性替换为相应路径,同时保留任何设置锚点。
插件目录标签页也使用路径,而不是 ?tab=。带有
?tab=discover|installed 的旧版链接会被一次性替换为相应路径,同时保留其他查询参数和片段。
代理选择及其 overview|files|tools|skills|channels|cron|memory
面板使用路径。带有 ?agent=<agentId> 的旧版链接会被一次性替换为代理路径,同时保留其他查询参数和片段。
特殊文档和启动模式
这些由 Gateway 提供的文档位于应用路由表之外:/?onboarding=1打开首次运行引导演示。/terminal打开面向用户的全屏终端。使用基础路径时,请使用<basePath>/terminal。/?view=terminal在移动应用使用的 WebView/embed 形式中打开相同的仅终端文档。无论采用哪种形式,终端可用性仍需要gateway.terminal.enabled和operator.admin。/approve/<approvalId>打开独立的审批文档。使用基础路径时,请使用<basePath>/approve/<approvalId>。该 id 用于标识审批,但永远不会为其授权;正常的 Gateway 身份验证仍然适用。
404,而不是继续匹配到插件路由。
远程 Gateway 交接
Vite 开发界面可以连接到不同的 Gateway:ws:// 或 wss:// 值进行 URL 编码。gatewayUrl 仅在顶层窗口中接受,会在加载后存储,并从地址栏中移除。优先使用 #token=,因为片段不会进入 HTTP 请求日志或 Referer 头。旧的 ?token= 交接仍然作为仅用于引导的凭据回退方式,并会立即被剥离。密码仅保留在内存中。
当 gatewayUrl 选择另一个 Gateway 时,UI 不会回退到本地配置或环境凭据。请显式提供远程 Gateway 的 token 或密码,并在 TLS 后面使用 wss://。