路由图
应用外壳
标题为“应用外壳”的部分应用外壳(ControlCenterLayout)通过 ShellRoute 包裹工作区内的每一条路由。外壳内的每个目的地都带工作区前缀——/workspaces/:workspaceId/…——而 URL 中的工作区 id 是活动工作区的唯一事实来源。 只有上下文建立之前的界面没有前缀:/splash、/onboarding、/signed-out 以及裸的 /workspaces 选择器,它们都是全屏的,位于外壳之外。
当已登录用户至少连接了一个代码托管平台,并且至少存在一个工作区时,这道门槛才算通过。
缺少凭据与缺少设置是两个不同的界面,区分依据是 users.onboarding_finished_at,它读自调用者自己的 identity.me——绝不是“工作区存在”这一条件,因为一旦有人被邀请进一个并非自己创建的工作区,该条件立刻就错了。在未连接任何代码托管平台时,已完成入门的账户会前往 /signed-out 重新认证;尚未完成的则前往 /onboarding。在该标志仍未知期间,守卫会停留在启动画面上,而不是凭空猜测,因为它绝不会把人从入门流程中重定向出去。
无前缀路由
标题为“无前缀路由”的部分| 路径 | 界面 |
|---|---|
/splash |
启动画面,用于判定入门门槛 |
/onboarding |
连接代码托管平台、创建或加入工作区、沙盒、默认适配器,然后是语音。当账户已属于某个工作区时,会跳过工作区这一步 |
/signed-out |
重新认证:与设置渲染的代码托管连接卡片相同,但没有步骤条,也没有继续按钮——一旦有代码托管平台上报,路由器会自行离开 |
/workspaces |
工作区列表与选择器 |
/workspaces/:workspaceId |
重定向到 /workspaces/:workspaceId/inbox |
工作区路由
标题为“工作区路由”的部分下表中的路径省略了 /workspaces/:workspaceId 前缀。
| 路径 | 查询参数 | 界面 |
|---|---|---|
/inbox |
— | 统一收件箱:按审查生命周期分类的 PR,以及阻塞操作员的非 PR 工作。通过守卫后的落地路由;裸的 /workspaces/:workspaceId 会重定向到这里 |
/spaces |
— | 空间界面,未选择任何空间 |
/spaces/:spaceId |
?m=<messageId>, ?tab=<key> |
单个空间;m 深度链接到某条消息,并在打开时被消费一次 |
/tickets |
— | 工单看板 |
/tickets/:ticketId |
— | 工单主从视图 |
/projects/:projectId |
— | 项目概览 |
/pull-requests |
?repo=<owner/name> |
PR 列表;repo 会在左侧栏中选中该仓库 |
/pull-requests/compose |
?space=<spaceId> |
撰写新的 pull request;space 指定由哪个空间的隔离工作树提供分支 |
/pull-requests/:owner/:repo/:prNumber |
?tab=<key>, ?comment=<id> |
PR 详情,带差异查看器;comment 是某条评论的数字 REST id |
/pipelines |
— | 流水线运行列表 |
/pipelines/run |
?templateId=<id> |
手动运行启动器 |
/pipelines/:runId |
— | 流水线运行详情(步骤时间线) |
/plans |
— | Plan Studio 中心:活动计划、计划文档、剧本 |
/plans/:kind/:id |
— | 单个计划的 Plan Studio;kind 为 orchestration 或 document |
/meetings |
— | 会议列表 |
/meetings/record |
— | 实时会议录制界面 |
/meetings/:meetingId |
— | 会议详情:笔记、转写、待办事项、决策 |
/calendar |
— | 日历:月、周和议程视图 |
/calendar/:eventId |
— | 日历事件详情(同级路由;共用日历页面键) |
/newsfeed |
— | 新闻流列表 |
/newsfeed/article/:articleId |
— | 文章阅读器 |
/observability |
— | 可观测性中心:覆盖工作区运行日志信息流的用量、洞察、实时和质量标签页。默认打开用量标签页 |
/users/:login |
— | GitHub 用户个人资料 |
/teams/:organization/:slug |
— | GitHub 组织团队个人资料 |
/api-keys |
— | API 密钥管理。没有导航入口——只能通过 URL 访问 |
/settings/… |
— | 设置界面(见下文) |
对话和线程没有自己的路由——线程是 /spaces/:spaceId 内部的一个对话,以编辑器标签页的形式打开,而不是通过 URL 寻址。
不存在 /dashboard 路由,也没有仪表盘界面。分析界面是 /observability,从侧边栏页脚进入。
侧边栏中没有“计划”条目。Plan Studio 会在产出该计划的对话中、从该计划所在的行以编辑器标签页打开;/plans 与 /plans/:kind/:id 是深层链接。
/observability 和 /pull-requests/compose 在路由标题注册表和面包屑注册表中都没有条目,因此两者在窗口标题里只显示应用名,也没有面包屑路径。
设置路由
标题为“设置路由”的部分/settings 会重定向到 /settings/you/appearance。侧边栏的设置按钮和 Cmd/Ctrl + , 都会前往 /settings/you/appearance。
设置路径按作用域划分命名空间——you/、workspace/、server/——因为该段说明了改动会影响谁。有两条路径早于这一命名空间划分,在 URL 中不带作用域:/settings/memory 和 /settings/pipelines。
| 路径 | 界面 |
|---|---|
/settings/you/appearance |
主题、语言、字体排印、编辑器主题(设置的落地页) |
/settings/you/notifications |
按事件开关、免打扰时段 |
/settings/you/keybindings |
键盘快捷键参考(只读) |
/settings/you/audio |
麦克风、听写、会议检测和声景输出 |
/settings/you/devices |
已配对的手机与远程控制 |
/settings/you/newsfeed |
信息流管理:订阅源、刷新、阅读状态 |
工作区
标题为“工作区”的部分| 路径 | 界面 |
|---|---|
/settings/workspace/profile |
此工作区中的个人资料与身份:姓名、git 作者、代码托管、日历 |
/settings/workspace/general |
名称、徽标、敏感 glob、审阅并发数、分支命名、同步健康状况、聊天桥接、危险区域 |
/settings/workspace/meetings |
会议笔记模板和保存的声纹档案 |
/settings/workspace/members |
名册、邀请、审计追踪。审计追踪用可选的 ?cursor= 分页 |
/settings/workspace/repositories |
此工作区中注册的仓库 |
/settings/workspace/agents |
已注册的智能体身份 |
/settings/workspace/skills |
技能配置 |
/settings/memory |
工作区记忆:事实、策略、知识图谱 |
/settings/workspace/permissions |
智能体权限:护栏矩阵和假设推演 |
/settings/pipelines |
流水线模板 |
/settings/pipelines/:templateId |
流水线模板编辑器(拖放式画布) |
服务器
标题为“服务器”的部分| 路径 | 界面 |
|---|---|
/settings/server/connection |
连接与状态 |
/settings/server/sso |
单点登录(SAML、OIDC、SCIM 预配) |
/settings/server/providers |
模型提供商与适配器 |
/settings/server/mcp |
内置与外部 MCP 服务器 |
/settings/server/voice |
语音与会议模型(ASR、说话人分离) |
/settings/server/rigs |
机台:此主机能启动什么、基础镜像、自定义镜像、运行中的机器 |
/settings/server/sandbox |
沙盒执行授权:智能体可从你仓库的工作副本中运行的程序 |
/settings/server/diagnostics |
诊断与隐私:沙盒、嵌入、日志记录、崩溃报告 |
/settings/server/backup |
备份与恢复:安装快照、按工作区导出、导入与删除 |
/settings/server/about |
关于与更新 |
lib/features/settings/settings_nav.dart 中的 kSettingsNav 是这份列表的唯一事实来源。settings_nav_test.dart 固定了唯一的 id、唯一的路由、展平后的 J/K 顺序以及这三个作用域。它不会遍历每一个已注册的 GoRoute。
路由配置
标题为“路由配置”的部分| 关注点 | 文件 |
|---|---|
| 路由器 | lib/router/app_router.dart |
| 路由构建器 | lib/router/routes.dart |
| 认证守卫 | lib/router/guards.dart |
| 入门门槛 | lib/features/auth/providers/onboarding_providers.dart |
| 设置导航 | lib/features/settings/settings_nav.dart |