跳转至

任务提供方身份 RPC 验证

自动化 RPC 身份模式遵循 src/shared/task-provider-identity.ts,并由 src/shared/task-source-context.ts 重新导出。只有 GitHub 要求 provider 之外的字段:owner 和 repo 是字符串,host 可选。GitLab、Linear 和 Jira 字段是可选的可空字符串。要求 GitLab 项目或 Linear 工作区/Jira 站点将与领域类型和账户范围相矛盾。

可辨识联合验证这些现有字段类型,不会修剪、强制转换或剥离身份字段。未知字段会像 z.custom 下那样透传,包括来自较新客户端的字段。缺失身份和显式 null 身份保持区分。该模式不会根据 owner/repo 推断 provider,也不会要求源上下文必须具有 git worktree、repository slug 或本地执行主机。

生产者清点

以下路径相对于仓库根目录。搜索覆盖了桌面端、共享代码、移动端和 CLI 中生产环境 providerIdentity、TaskProviderIdentity、sourceContext 和 linkedTaskSourceContext 的使用。

生产者或转发路径 填充结论
src/shared/project-host-setup-projection.ts:getProjectProviderIdentity GitHub owner/repo 一起填充,或无身份。提供桌面端和迁移使用的项目身份。
src/renderer/src/components/task-page-source-context.tsx:getTaskPageRepoSourceContext GitHub 字段通过投影填充,或为 null。GitLab 使用显式 provider 和 buildGitLabProviderIdentity;projectId/project/webUrl 已填充,namespace 可以为 null。
同一文件:buildGitLabProviderIdentity GitLab 字段来自项目 path/host;缺失的路径组件变为 null。不会虚构必需的 GitLab 字段。
src/renderer/src/hooks/composer-state/source-context-state.ts 派生的 GitHub 上下文携带完整的项目身份或 null。Jira 文件夹/项目组上下文显式具有 null 身份。草稿/关联上下文被转发。
src/renderer/src/components/use-task-page-source-availability.ts 对于账户范围选择,Linear workspaceId/name 和 Jira siteId/URL 可以为 null;team/project 字段未填充。在现有可选字段契约下有效。
src/renderer/src/components/task-page-jira-item-source-context.ts 绑定的 issue 上下文填充 siteId、siteUrl、projectKey。
src/renderer/src/components/new-workspace/use-jira-url-source.ts 绑定的 URL issue 上下文填充 siteId、siteUrl、projectKey。
src/renderer/src/components/worktree-jump-palette-create-worktree.ts Linear teamId/key 已填充;workspaceId/name 可能为 null。
src/shared/task-source-context.ts:normalize/build 函数 GitHub 缺失 owner/repo 时变为 null 身份;其他 provider 的缺失字段变为 null。provider 不匹配时变为 null,绝不会推断出 provider。
src/cli/handlers/automation-handler-flags.ts、src/cli/handlers/automations.ts 显式 JSON 源上下文输入在创建/更新前被规范化。GitHub 字段已填充或为 null 身份;其他字段可空。省略/null 上下文由 flag 处理保留。
src/main/persistence/scheduling-automations/automation-context-migration.ts 从投影的完整 GitHub 身份构建源上下文,或为 null 上下文。
桌面自动化保存/范围列表/主机客户端以及 web 传输 转发现有源上下文,而不是新的身份构造函数。automation-orca-save.ts 转发当前自动化上下文或 null。旧版任意格式错误的 RPC 输入会被新模式有意拒绝。
移动端 未发现任务提供方身份/源上下文构造函数或发送方。mobile/src/components/new-workspace-project-targets.ts 仅将项目身份用于显示。

兼容性证据与限制

在更改验证之前,请阅读 docs/reference/remote-wire-compatibility.md。 针对发布标签 v1.4.199 的源码搜索也未发现移动端 sourceContext/linkedTaskSourceContext 发送方;其唯一的 providerIdentity 使用 就是上述仅用于显示的项目目标。已发布的 CLI flag 读取器也会调用 normalizeTaskSourceContext。这是针对已检查发布的源码级证据, 而不是声称已执行每一个历史移动端二进制文件。

未发现已发布的移动端生产者存在新被拒绝的载荷。领域契约未新增必填 字段。GitLab、Linear 和 Jira 的仅判别字段身份仍然有效。文件夹工作区的 null/缺失身份在本地和 SSH 主机上均保持有效。执行/状态逻辑或客户端解析均未改变。

回归证据

src/main/runtime/rpc/methods/task-provider-identity.test.ts 检查所有四个提供者的未变更有效 身份、必填 GitHub 字段、每个已声明字段的类型、非 GitHub 字段的可选/null 情况、未知字段保留、 存在 owner/repo 时的显式 GitLab 判别、本地/SSH 文件夹上下文,以及更新补丁。

聚焦运行通过了 81 个测试。临时将 GitHub 的字段验证器 替换为可选的 z.unknown() 验证器(仅接受判别字段)导致 17 个失败和 64 个通过。在运行门禁之前已恢复该变异。

在空白字段提交新增七个测试后,计数已在 cf4f77f 重新测量; 此前的 74/16/58 数字描述的是其之前的提交。

门禁结果

所有命令均在 ORCA_BACKGROUND_LAUNCH=1 下运行。

  • pnpm tc:退出码 0;完成了仓库类型检查运行器。
  • pnpm exec vitest run src/main/runtime/rpc:退出码 1;277 个文件通过, 1 个失败;2,462 个测试通过,1 个失败,1 个跳过。唯一失败是 无关的 structured-agent-session-adoption-replay.test.ts 触发其 5,000 ms 超时。所有身份测试均通过。
  • pnpm --dir mobile typecheck:退出码 0;tsc --noEmit 通过。
  • pnpm run check:code-quality:changed:退出码 0;在两个已更改的代码文件中, 没有新增代码质量、类型感知或 React Doctor 发现。
  • 对 structured-agent-session-adoption-replay.test.ts 的隔离重试:退出码 0; 一个测试通过,测试主体在 358 ms 内完成。
  • 使用 pnpm exec vitest run src/main/runtime/rpc --maxWorkers=4 的完整 RPC 重试: 退出码 0;全部 278 个文件通过,2,470 个测试通过,1 个跳过(97.24 秒)。 有界并发重跑在不更改测试代码的情况下解决了超时问题。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca