任务提供方身份 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