AIDAWORK / SEQUENCE

失败链:426 interaction_protocol_upgrade_required

独立图页 ↗

先看「视图」里的主路径;每条失败链都有同名成功对偶(fail-x ↔ ok-x)。

机制说明(SoT)图是辅读 · 结论以说明与证据为准

信任边界由身份、能力广告、本机路径与协议硬门共同围成:

本页可直接往下读完整机制说明,不需要「演示 / 播放故事」。术语不熟先看 术语表。

先读机制说明,结论以说明与证据为准 · 基于固定代码版本核验 · 部署状态另行确认

机制说明(全文)

安全与信任边界总览

一层图读边界,细节链出去

信任边界由身份、能力广告、本机路径与协议硬门共同围成:

  1. 租户 / 身份:Aida JWT → TenantContext;Server session 与 Desktop session 不是同一授权标识(见 auth-tenant)。
  2. 能力广告(Desktop 协议 v3,钉点 Agent e2adc9a3c325 / Desktop 8eecd12081db):握手帧只剩 { type, protocolVersion: 3, invocationId },不再冻结 negotiatedCapabilities;本轮可用的本机能力以会话载荷 capabilities.supportedPrimitives 为准,localFileCapability / executorReadiness 只表达就绪。版本即能力:v3 蕴含全部旧 feature token。
  3. Path-free LF:绝对路径只在 Main;Agent 只见 relativePath / saveDestinationId(见 local-file-v5)。
  4. Plugin 信任:不可变包 + 投影绑定 + receipt digest;Host 在 Desktop Main,不在服务端 Runtime。
  5. 426 硬门族:Desktop 协议门统一为 DESKTOP_UPGRADE_REQUIRED(X-AIDA-Protocol 有值且 ≠ 3、任何 localExecutor.version ≠ 3,或 chat 提交没带头却携带本机执行载荷;ADR-0093 起无头且无本机载荷的 chat 提交可受理;此协议放行本身不授予本机执行能力;覆盖 chat 提交、validate-local-executor、本机执行回执、Local File 回执/投递、durable recovery、桌面分发),旧码 LOCAL_FILE_PROTOCOL_UPGRADE_REQUIRED、desktop_protocol_version_required、local_execution_recovery_protocol_upgrade_required 已删除。另有两扇独立的门:Interaction Kernel 的 interaction_protocol_upgrade_required(Kernel 协议 2)与 Runtime Work 的 RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED。完整表见 desktop-runtime。
  6. 本机凭证落盘(钉点 Desktop 8eecd12081db):Main 只认强加密的 safeStorage;Linux basic_text / unknown 后端视为不可用,凭证退回 session-only、不写伪加密密文(见 desktop-client)。代码已核;未在真实 Linux 桌面运行,等 Stanley 真机验证。
  7. 原生路径隐私(钉点 Desktop 8eecd12081db,e2fdc7c7 / f54b63ce / 736ba9e9):用户消息里的本机绝对路径在 Main 换成 [LocalMaterial:…] 标记再发 Agent(projectNativeMessage,需要选择时 NATIVE_PATH_SELECTION_REQUIRED,发送前对同一来源版本再复核一次);原路径只留在 Main 的加密 message-overlay(LocalSecureEnvelope,见 storage-planes)。证据:aida-desktop · apps/desktop/electron/agent-loop/enterprise-adapter.ts L65–84 · projectNativeMessage · 4346d79eb364;aida-desktop · apps/desktop/electron/native-path/native-path-message-overlay.ts L1–39 · LocalMaterialMarker · 4346d79eb364
  8. 安装包执行信任(Desktop 4346d79eb364):不再保存 pluginId/toolId 的「始终允许」授权;Main 对 Plugin 与已安装 Skill 使用 authorizeInstalledCapability,冻结身份、请求摘要、执行实例与原任务有效性,不适用 ClientAccessMode 或通用逐次确认。目录选择、Computer Use 目标窗口、连接授权、typed user action 与本地文件操作权限仍是独立边界。证据:aida-desktop · apps/desktop/electron/installed-capability-authorization.ts L18–70 · authorizeInstalledCapability · 4346d79eb364;apps/desktop/electron/main.ts L1251–1259 / L1862–1883 · 4346d79eb364

能力广告回答「本轮允许什么」;执行信任回答「谁持有路径/回执/绑定」。两层不可互相替代(见视图 layers)。

原生路径识别修复(Desktop 398e3301):引号内含 .. 父目录段的相对路径整段作为私有定位符交给 Main 校验(之前中文和部分 ASCII 前缀会漏识别),http(s):// 改为大小写无关识别且不跳过同一引号里后面的本机路径。证据:aida-desktop · apps/desktop/shared/native-path-contract.ts L35–40 · quotedRelativePathParts · 4346d79eb364;aida-desktop · apps/desktop/shared/native-path-contract.ts L54–72 · parts?.includes('..') · 4346d79eb364

失败 / 非目标

  • 协议不匹配 → 整入口 426,不降级半开。
  • 非目标:不复述桌面 runtime 全量错误码表;不做渗透测试级威胁建模。
  • 相关:auth-tenant、desktop-runtime、local-file-v5、capability-plugins、vertical-plugin-mount。

视图

  • main — 边界总览。

  • layers — 能力广告 vs 执行信任分层。

  • fail-426-lf — Desktop 协议不是 v3 → DESKTOP_UPGRADE_REQUIRED(整次提交;视图 id 沿用旧名)。

  • fail-426-ix — interaction_protocol_upgrade_required。

  • fail-426-runtime — RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,与 DESKTOP_UPGRADE_REQUIRED 并列。

  • ok-426-lf — Desktop 协议 v3 放行(对偶 fail-426-lf)。

  • ok-426-ix — Interaction 协议头放行(对偶 fail-426-ix)。

  • ok-426-runtime — Runtime 协议 runtime-work-v1 放行(对偶 fail-426-runtime)。

  • ok-chat-headerless — ADR-0093:无 X-AIDA-Protocol 的 chat 提交(如移动端)按「有没有本机执行载荷」分流。

成功对偶(与失败链入口相同)

  1. ok-426-lf:X-AIDA-Protocol=3 且 localExecutor.version=3 → 门放行 → 创建 Run;有合法 localFileCapability 时本轮才注册 Local File V4 工具(localFileV4Admitted),没有也不 426。另一条放行(ADR-0093,见视图 ok-chat-headerless):没带协议头且无本机执行载荷 → 可受理;本机工具仍需执行域、能力与原绑定等各自准入前提;没带协议头却带了本机执行载荷 → 仍 426。
  2. ok-426-ix:协议头=2 → middleware await next → Kernel。
  3. ok-426-runtime:提交头缺省/空值或 work-v1 且无 policy,或 skill-v2 与 policy 匹配,才通过这一门;runtime-v2.1 拒绝。各路由差异见 协议地图。

失败链(深挖)

  1. fail-426-lf:协议头有值且不是 3、载荷 version 不是 3,或没带协议头却携带本机执行载荷 → 426 DESKTOP_UPGRADE_REQUIRED(body 带 expectedProtocolVersion: 3);不创建 Run;整次提交阻断,Desktop 映射到升级提示。version 缺失按 schema 违规,不算升级信号。
  2. fail-426-ix:IX 中间件头不接受 → 426;Kernel 未进。
  3. fail-426-runtime:Runtime 协议串不匹配 → 426;并列的 Desktop 协议门是 DESKTOP_UPGRADE_REQUIRED(见 desktop-runtime)。

证据与范围

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L520–524 · desktopPayloadVersionUnsupported · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L374–412 · DESKTOP_UPGRADE_REQUIRED_BODY · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L489–529 · chatBodyCarriesLocalExecution · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/request-schemas.ts L74–91 · LOCAL_EXECUTION_CHAT_BODY_FIELDS · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/transport/handshake.ts L9–17 · buildHandshakeFrame · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/api-conversation-interactions.ts L465–495 · interaction_protocol_upgrade_required · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/api-durable-local-execution-recovery.ts L66–72 · DESKTOP_UPGRADE_REQUIRED_BODY · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/protocol-version.ts L1–38 · desktopPayloadVersionUnsupported · e2adc9a3c325

  • aida-agent · packages/agent/src/runtime/local/local-file-v4-negotiation.ts L26–52 · localFileV4Admitted · e2adc9a3c325

  • aida-desktop · apps/desktop/shared/generated/protocol-version.ts L1–8 · DESKTOP_PROTOCOL_VERSION · 4346d79eb364

  • aida-desktop · apps/desktop/electron/plugin-host/plugin-host.ts L195–199 · PluginHost · 4346d79eb364

  • aida-desktop · apps/desktop/electron/security/safe-storage-policy.ts L1–52 · basic_text · 4346d79eb364

  • aida-agent · packages/agent/src/gateway/session-binding.ts L91–120 · resolveSessionBinding · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L381–421 · RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L373–386 · desktopPayloadVersionUnsupported · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/api-conversation-interactions.ts L248–278 · protocolAccepted · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L381–421 · RUNTIME_EXECUTION_PROTOCOL · e2adc9a3c325

结论来自固定版本的静态源码与合同阅读;实现存在、默认开关和生产启用分别判断。本站代码证据面板列出声明状态与具体限制。

邮箱连接与 Computer Use 本机边界(本钉点)

  • 邮箱:公开 connect 与 JWT 认证邮箱读取分离;authorization ticket 只授予浏览器连接建立元数据,永不授予邮箱读;支持 IMAP/OAuth 与代理 origin。见视图 mailbox-connect。
  • Computer Use:Desktop computerUse bridge + ComputerUsePanel 窗口授权;需 OS helper / 包签名;旧 Desktop 不应接收新能力投影(真机未核)。
  • 证据:aida-agent · packages/agent/src/gateway/api-mailbox.ts L307–314 · connect-only · e2adc9a3c325;aida-desktop · apps/desktop/src/local-executor/ComputerUsePanel.tsx L18 · computerUse · 4346d79eb364;aida-agent · docs/reference/computer-use.md · aida.computer-use · e2adc9a3c325

安装即授权(当前 Desktop 代码复核)

  • 删除 PluginExecutionGrantStore / execution-grants.json 及遗留 PluginExecutionApprovalGate(plugin-execution-approval.ts 随目录批任务移除)。「始终允许」持久授权与逐次目录批任务弹窗不再存在。
  • 实际 Main wiring:Skill authorizeExecution 与 Plugin authorizeResource 都调用 authorizeInstalledCapability,产生 source=installed_plugin / modeRevision=0 的 Desktop-local decision;检查 identity、requestDigest、executor generation 和 task current,不以 Ask/Full 模式或通用逐次确认决定执行。
  • 包完整性/版本与原 pending Work 检查仍保留;安装信任不是 Computer Use 窗口、连接授权或本地文件写权限的替代,也不是 OS sandbox。
  • 证据:aida-desktop · apps/desktop/electron/installed-capability-authorization.ts L39–97 · 4346d79eb364;aida-desktop · apps/desktop/electron/main.ts L1666–1706 / L2519–2557 · 4346d79eb364。

邮箱续查的授权拒绝与正文/附件接口(2026-11-03)

邮箱续查保留原 connectionId 绑定;越界工具调用在派发连接器之前以 PLUGIN_CONNECTOR_READ_SCOPE_VIOLATION 拒绝,不代表邮箱查询失败,也不能尝试其他账号。IMAP 传输层另行处理缺省 UIDNEXT:空邮箱返回空页;有 beforeUid 时使用原游标,否则读取末位序号的 UID 推导上界;已提供但畸形的 UIDNEXT 仍失败,UIDVALIDITY 绑定和分页边界不放宽。api-mailbox.ts 新增 POST /:connectionId/message(解析头、限长正文、附件清单)与 POST /:connectionId/attachment(单个附件原始字节,上限 25MiB,供 aida.mail 转存 Artifact)。

  • aida-agent · packages/agent/src/gateway/delegated-desktop-capabilities.ts L253–262 · 7f2e519936b5
  • aida-agent · packages/agent/src/connectors/email/imap-mailbox-client.ts L414–447 · 7f2e519936b5
  • aida-agent · packages/agent/src/gateway/api-mailbox.ts L744–845 · 7f2e519936b5

Runtime 提交 wire 与原 Work identity

chat POST 的 Runtime 提交门接受缺省/空值(无 policy)、runtime-work-v1(无 policy),以及 runtime-work-skill-v2 且携带合法 skillExecutionPolicy;其他非空头为 RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,头与 policy 不匹配为 RUNTIME_WORK_SKILL_POLICY_MISMATCH,均返回 426。原 Work binding 仍是 runtime-work-v1;取消提交、补充材料等路由单独判定,见协议地图。

证据:提交门 与 实际 chat POST 调用。

跨仓协议地图:API、IPC、wire revision 与升级边界

固定源码:Agent 7f2e519936b53035646a70f152e734298abed2fb;Desktop 4346d79eb364b502ef87c0869a494dfed7964419。版本号必须带上所属边界:Desktop 协议 3、Interaction 协议 2、Work identity v1、Skill 提交 wire v2 并不冲突。

本页是当前代码合同地图;信任边界解释权限,Desktop Runtime解释宿主,恢复矩阵解释失败动作。接口存在不代表目标环境已升级或真机互操作已通过。

当前合同地图

边界 / 生产者 → 消费者 入口 / 合同 版本与兼容规则 不代表什么 / 源码
Renderer/preload → Desktop Main aida-runtime-work:prepare-submission、submit-submission、view-submission、inspect-submission、stop-submission、reconcile-submission 等 IPC 当前 Main 注册表;此处没有发现独立协商的 IPC wire 版本。与同一 Desktop 构建的 schema/实现配套,不把 channel 名当 HTTP endpoint Renderer 不是 Work owner;多窗口观察不授予取消权。IPC 注册、Main delivery owner
Agent tool-client → Desktop generated types packages/tool-client/src/types/* → apps/desktop/shared/generated/* Desktop/local-capability 常量 DESKTOP_PROTOCOL_VERSION = 3;生成文件标记来自 Agent;同步检查见下节 generated 镜像不是另一份可独立演进的 SoT。源常量、镜像
Desktop Main → Agent chat POST /api/chat;X-AIDA-Protocol 与本机载荷 声明的 Desktop 版本必须为 3;无头但带本机执行载荷拒绝;无头且无本机载荷不因 Desktop 门被拒。缺 payload version 是 schema 违规,不等同升级信号 Desktop 门通过不授予本机工具权限。版本判定、chat 本机载荷门
Main → Agent chat 提交 wire X-AIDA-Runtime-Protocol + skillExecutionPolicy;Idempotency-Key 为原 commandId 无 policy:头缺省/空值或 runtime-work-v1 可通过此门;有 policy:必须 runtime-work-skill-v2。skill-v2 与 policy 有无不一致 → RUNTIME_WORK_SKILL_POLICY_MISMATCH;其它非空值 → RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,均 426 无头的 helper 返回 hostWork=false,不应据此声称获得 Work binding。Desktop 实际根据 policy 选择 v1/skill-v2。Agent 判定、426 映射、Desktop 发送
Main → Agent 取消排队提交 POST /api/chat/submissions/:clientRequestId/cancel 此端点允许头缺省/空值或 work-v1;非空其它值(含 skill-v2)426。按原 tenant/user/endpoint/clientRequestId 取消排队项 不等于已运行 Root 的 Stop;queue_closed 返回,unknown 404,其余结果409。取消提交独立门
Agent → Desktop Work binding bindingVersion 1,runtimeProtocolVersion=runtime-work-v1、profile file-work-v1、originalWorkRef skill-v2 是提交 wire revision,不改变原 Work identity;历史 binding 缺 skillExecutionPolicy 时不能推断补上 business_task 是领域引用,不支持 Task 级控制;当前 binding refine 要求 root_run。Work identity
Main → Agent Work 补证 POST /:runId/work-supplement,头 X-AIDA-Runtime-Protocol 必须 runtime-work-supplement-v2;缺头或不同值 426。路径 rootRunId 是权威,body echo 不能覆盖 补证 wire revision 不是新任务、新 owner 或原效果自动重试。补证入口
Agent → Desktop 流握手 {type:'handshake', protocolVersion:3, invocationId} 无 negotiatedCapabilities;v3 隐含退役 feature tokens,当前能力由 capabilities.supportedPrimitives 广告、readiness 字段描述 传输事件不是统一的业务事件日志,也不是可跨设备复制的 workspace authority。握手、v3 定义
Main → Agent 本机读恢复 / receipt 家族 Local File operation 与 durable local execution 各自原绑定;恢复 header Aida-Local-Execution-Protocol-Version 属 Desktop v3 硬门,不重新引入独立 LF v4/v5 wire 协商;非 3 返回 DESKTOP_UPGRADE_REQUIRED local-files-v4 文件/架构名不等于 wire version=4;恢复不是再派发新副作用。恢复端点示例,完整家族见Desktop Runtime
Desktop / 客户端 → Agent Interaction Kernel Aida-Interaction-Protocol-Version;对话 Interaction API middleware 当前 2,必须匹配;否则 426 interaction_protocol_upgrade_required 与 Desktop v3、Work revision 分开;协议通过后仍需 actor/answer/原交互校验。常量、硬门
Plugin 包 / Worker → Desktop Main → Agent 原调用 不可变包、manifest/tool identity、原 pending binding、request/result/receipt 摘要 安装信任决策 source=installed_plugin 是 Desktop-local journal schema,源码明确不是 generated LF protocol。Plugin v2 合同细节链到Plugin 挂载 不得把 local decision 添加为跨仓统一授权票据;安装信任不替代文件/连接/窗口权限。本地合同声明

兼容性不是“降级到能跑”

  • 当前实现:chat 的 skill-v2+policy 配对、补证 supplement-v2 专门门、Desktop v3 与 Interaction v2 独立硬门。旧客户端或旧服务端不能通过删除控制字段来“兼容”;明确不匹配应停在入口,不进入半执行。
  • 历史:runtime-v2.1 常量及内部处理仍可存在,但当前 chat helper 拒绝该非空 header。runtime-v2/ 旧目录、feature-token 协商、独立 LF wire 版本的历史请读冷路径,不能把残留类型当现行受理许可。
  • ADR 与代码分开:ADR-0093 的状态文字是 Proposed,但无头且无本机载荷的 chat 分流已有代码;ADR-0098 的可回访卡方向不能推导成已实现 parked workspace/统一任务日志,详见主路径提案状态。本页不新增这类合同。

建议的升级与验证顺序(运维建议,不是已经执行的发布记录)

  1. 冻结双方版本及合同差异:先记录 Agent / Desktop SHA、DB schema、目标使用的 API。把 Desktop v3、Work 提交、补证、Interaction 分开列兼容矩阵;不要只比较应用 semver。
  2. 生成与静态检查:以 Agent tool-client 为源重新生成 Desktop 镜像,不手工改 generated 文件。ADR-0087 指定 Desktop pnpm -w fixtures:sync:check 与 Agent pnpm contract:check;这是上游仓命令,不是本站的测试结果。同步约定
  3. 准备服务端前置条件:v3 迁移 178 / schema guard 的要求见同 ADR;部署前独立确认目标环境确已具备,不能从源码存在推断迁移已跑。迁移约定
  4. 按兼容窗口安排双方更新:先在隔离环境验证 server 能接受目标 wire,再允许客户端发该 wire;若旧客户端会被新 server v3 硬拒,应安排协调更新/升级提示窗口,而非宣称滚动升级无停顿。本文没有证据证明生产存在双版本过渡。
  5. 正反配对验收:Desktop 3 / 非3 / 无头±本机载荷;Work v1 无policy、skill-v2 有policy及两种错配;supplement-v2 与旧值/缺头;Interaction 2 与旧值。错误码、HTTP status、未进入效果执行应同时验证。
  6. 再测恢复而非重放:unknown submission、丢 ACK、Stop、切账号、撤权按恢复矩阵执行。只在原 owner 事实与观察一致后结束;记录未运行的真机与故障注入项。

任何回滚都须保留原 command / binding / effect 归属与 schema 解释能力;不能以回退二进制为理由重置 unknown 或清掉 receipt 记录。此处是安全约束建议,不声称已有自动回滚机制。

机制说明

安全与信任边界总览

一层图读边界,细节链出去

信任边界由身份、能力广告、本机路径与协议硬门共同围成:

  1. 租户 / 身份:Aida JWT → TenantContext;Server session 与 Desktop session 不是同一授权标识(见 auth-tenant)。
  2. 能力广告(Desktop 协议 v3,钉点 Agent e2adc9a3c325 / Desktop 8eecd12081db):握手帧只剩 { type, protocolVersion: 3, invocationId },不再冻结 negotiatedCapabilities;本轮可用的本机能力以会话载荷 capabilities.supportedPrimitives 为准,localFileCapability / executorReadiness 只表达就绪。版本即能力:v3 蕴含全部旧 feature token。
  3. Path-free LF:绝对路径只在 Main;Agent 只见 relativePath / saveDestinationId(见 local-file-v5)。
  4. Plugin 信任:不可变包 + 投影绑定 + receipt digest;Host 在 Desktop Main,不在服务端 Runtime。
  5. 426 硬门族:Desktop 协议门统一为 DESKTOP_UPGRADE_REQUIRED(X-AIDA-Protocol 有值且 ≠ 3、任何 localExecutor.version ≠ 3,或 chat 提交没带头却携带本机执行载荷;ADR-0093 起无头且无本机载荷的 chat 提交可受理;此协议放行本身不授予本机执行能力;覆盖 chat 提交、validate-local-executor、本机执行回执、Local File 回执/投递、durable recovery、桌面分发),旧码 LOCAL_FILE_PROTOCOL_UPGRADE_REQUIRED、desktop_protocol_version_required、local_execution_recovery_protocol_upgrade_required 已删除。另有两扇独立的门:Interaction Kernel 的 interaction_protocol_upgrade_required(Kernel 协议 2)与 Runtime Work 的 RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED。完整表见 desktop-runtime。
  6. 本机凭证落盘(钉点 Desktop 8eecd12081db):Main 只认强加密的 safeStorage;Linux basic_text / unknown 后端视为不可用,凭证退回 session-only、不写伪加密密文(见 desktop-client)。代码已核;未在真实 Linux 桌面运行,等 Stanley 真机验证。
  7. 原生路径隐私(钉点 Desktop 8eecd12081db,e2fdc7c7 / f54b63ce / 736ba9e9):用户消息里的本机绝对路径在 Main 换成 [LocalMaterial:…] 标记再发 Agent(projectNativeMessage,需要选择时 NATIVE_PATH_SELECTION_REQUIRED,发送前对同一来源版本再复核一次);原路径只留在 Main 的加密 message-overlay(LocalSecureEnvelope,见 storage-planes)。证据:aida-desktop · apps/desktop/electron/agent-loop/enterprise-adapter.ts L65–84 · projectNativeMessage · 4346d79eb364;aida-desktop · apps/desktop/electron/native-path/native-path-message-overlay.ts L1–39 · LocalMaterialMarker · 4346d79eb364
  8. 安装包执行信任(Desktop 4346d79eb364):不再保存 pluginId/toolId 的「始终允许」授权;Main 对 Plugin 与已安装 Skill 使用 authorizeInstalledCapability,冻结身份、请求摘要、执行实例与原任务有效性,不适用 ClientAccessMode 或通用逐次确认。目录选择、Computer Use 目标窗口、连接授权、typed user action 与本地文件操作权限仍是独立边界。证据:aida-desktop · apps/desktop/electron/installed-capability-authorization.ts L18–70 · authorizeInstalledCapability · 4346d79eb364;apps/desktop/electron/main.ts L1251–1259 / L1862–1883 · 4346d79eb364

能力广告回答「本轮允许什么」;执行信任回答「谁持有路径/回执/绑定」。两层不可互相替代(见视图 layers)。

原生路径识别修复(Desktop 398e3301):引号内含 .. 父目录段的相对路径整段作为私有定位符交给 Main 校验(之前中文和部分 ASCII 前缀会漏识别),http(s):// 改为大小写无关识别且不跳过同一引号里后面的本机路径。证据:aida-desktop · apps/desktop/shared/native-path-contract.ts L35–40 · quotedRelativePathParts · 4346d79eb364;aida-desktop · apps/desktop/shared/native-path-contract.ts L54–72 · parts?.includes('..') · 4346d79eb364

失败 / 非目标

  • 协议不匹配 → 整入口 426,不降级半开。
  • 非目标:不复述桌面 runtime 全量错误码表;不做渗透测试级威胁建模。
  • 相关:auth-tenant、desktop-runtime、local-file-v5、capability-plugins、vertical-plugin-mount。

视图

  • main — 边界总览。

  • layers — 能力广告 vs 执行信任分层。

  • fail-426-lf — Desktop 协议不是 v3 → DESKTOP_UPGRADE_REQUIRED(整次提交;视图 id 沿用旧名)。

  • fail-426-ix — interaction_protocol_upgrade_required。

  • fail-426-runtime — RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,与 DESKTOP_UPGRADE_REQUIRED 并列。

  • ok-426-lf — Desktop 协议 v3 放行(对偶 fail-426-lf)。

  • ok-426-ix — Interaction 协议头放行(对偶 fail-426-ix)。

  • ok-426-runtime — Runtime 协议 runtime-work-v1 放行(对偶 fail-426-runtime)。

  • ok-chat-headerless — ADR-0093:无 X-AIDA-Protocol 的 chat 提交(如移动端)按「有没有本机执行载荷」分流。

成功对偶(与失败链入口相同)

  1. ok-426-lf:X-AIDA-Protocol=3 且 localExecutor.version=3 → 门放行 → 创建 Run;有合法 localFileCapability 时本轮才注册 Local File V4 工具(localFileV4Admitted),没有也不 426。另一条放行(ADR-0093,见视图 ok-chat-headerless):没带协议头且无本机执行载荷 → 可受理;本机工具仍需执行域、能力与原绑定等各自准入前提;没带协议头却带了本机执行载荷 → 仍 426。
  2. ok-426-ix:协议头=2 → middleware await next → Kernel。
  3. ok-426-runtime:提交头缺省/空值或 work-v1 且无 policy,或 skill-v2 与 policy 匹配,才通过这一门;runtime-v2.1 拒绝。各路由差异见 协议地图。

失败链(深挖)

  1. fail-426-lf:协议头有值且不是 3、载荷 version 不是 3,或没带协议头却携带本机执行载荷 → 426 DESKTOP_UPGRADE_REQUIRED(body 带 expectedProtocolVersion: 3);不创建 Run;整次提交阻断,Desktop 映射到升级提示。version 缺失按 schema 违规,不算升级信号。
  2. fail-426-ix:IX 中间件头不接受 → 426;Kernel 未进。
  3. fail-426-runtime:Runtime 协议串不匹配 → 426;并列的 Desktop 协议门是 DESKTOP_UPGRADE_REQUIRED(见 desktop-runtime)。

证据与范围

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L520–524 · desktopPayloadVersionUnsupported · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L374–412 · DESKTOP_UPGRADE_REQUIRED_BODY · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L489–529 · chatBodyCarriesLocalExecution · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/request-schemas.ts L74–91 · LOCAL_EXECUTION_CHAT_BODY_FIELDS · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/transport/handshake.ts L9–17 · buildHandshakeFrame · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/api-conversation-interactions.ts L465–495 · interaction_protocol_upgrade_required · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/api-durable-local-execution-recovery.ts L66–72 · DESKTOP_UPGRADE_REQUIRED_BODY · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/protocol-version.ts L1–38 · desktopPayloadVersionUnsupported · e2adc9a3c325

  • aida-agent · packages/agent/src/runtime/local/local-file-v4-negotiation.ts L26–52 · localFileV4Admitted · e2adc9a3c325

  • aida-desktop · apps/desktop/shared/generated/protocol-version.ts L1–8 · DESKTOP_PROTOCOL_VERSION · 4346d79eb364

  • aida-desktop · apps/desktop/electron/plugin-host/plugin-host.ts L195–199 · PluginHost · 4346d79eb364

  • aida-desktop · apps/desktop/electron/security/safe-storage-policy.ts L1–52 · basic_text · 4346d79eb364

  • aida-agent · packages/agent/src/gateway/session-binding.ts L91–120 · resolveSessionBinding · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L381–421 · RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L373–386 · desktopPayloadVersionUnsupported · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/api-conversation-interactions.ts L248–278 · protocolAccepted · e2adc9a3c325

  • aida-agent · packages/agent/src/gateway/chat-routes.ts L381–421 · RUNTIME_EXECUTION_PROTOCOL · e2adc9a3c325

结论来自固定版本的静态源码与合同阅读;实现存在、默认开关和生产启用分别判断。本站代码证据面板列出声明状态与具体限制。

邮箱连接与 Computer Use 本机边界(本钉点)

  • 邮箱:公开 connect 与 JWT 认证邮箱读取分离;authorization ticket 只授予浏览器连接建立元数据,永不授予邮箱读;支持 IMAP/OAuth 与代理 origin。见视图 mailbox-connect。
  • Computer Use:Desktop computerUse bridge + ComputerUsePanel 窗口授权;需 OS helper / 包签名;旧 Desktop 不应接收新能力投影(真机未核)。
  • 证据:aida-agent · packages/agent/src/gateway/api-mailbox.ts L307–314 · connect-only · e2adc9a3c325;aida-desktop · apps/desktop/src/local-executor/ComputerUsePanel.tsx L18 · computerUse · 4346d79eb364;aida-agent · docs/reference/computer-use.md · aida.computer-use · e2adc9a3c325

安装即授权(当前 Desktop 代码复核)

  • 删除 PluginExecutionGrantStore / execution-grants.json 及遗留 PluginExecutionApprovalGate(plugin-execution-approval.ts 随目录批任务移除)。「始终允许」持久授权与逐次目录批任务弹窗不再存在。
  • 实际 Main wiring:Skill authorizeExecution 与 Plugin authorizeResource 都调用 authorizeInstalledCapability,产生 source=installed_plugin / modeRevision=0 的 Desktop-local decision;检查 identity、requestDigest、executor generation 和 task current,不以 Ask/Full 模式或通用逐次确认决定执行。
  • 包完整性/版本与原 pending Work 检查仍保留;安装信任不是 Computer Use 窗口、连接授权或本地文件写权限的替代,也不是 OS sandbox。
  • 证据:aida-desktop · apps/desktop/electron/installed-capability-authorization.ts L39–97 · 4346d79eb364;aida-desktop · apps/desktop/electron/main.ts L1666–1706 / L2519–2557 · 4346d79eb364。

邮箱续查的授权拒绝与正文/附件接口(2026-11-03)

邮箱续查保留原 connectionId 绑定;越界工具调用在派发连接器之前以 PLUGIN_CONNECTOR_READ_SCOPE_VIOLATION 拒绝,不代表邮箱查询失败,也不能尝试其他账号。IMAP 传输层另行处理缺省 UIDNEXT:空邮箱返回空页;有 beforeUid 时使用原游标,否则读取末位序号的 UID 推导上界;已提供但畸形的 UIDNEXT 仍失败,UIDVALIDITY 绑定和分页边界不放宽。api-mailbox.ts 新增 POST /:connectionId/message(解析头、限长正文、附件清单)与 POST /:connectionId/attachment(单个附件原始字节,上限 25MiB,供 aida.mail 转存 Artifact)。

  • aida-agent · packages/agent/src/gateway/delegated-desktop-capabilities.ts L253–262 · 7f2e519936b5
  • aida-agent · packages/agent/src/connectors/email/imap-mailbox-client.ts L414–447 · 7f2e519936b5
  • aida-agent · packages/agent/src/gateway/api-mailbox.ts L744–845 · 7f2e519936b5

Runtime 提交 wire 与原 Work identity

chat POST 的 Runtime 提交门接受缺省/空值(无 policy)、runtime-work-v1(无 policy),以及 runtime-work-skill-v2 且携带合法 skillExecutionPolicy;其他非空头为 RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,头与 policy 不匹配为 RUNTIME_WORK_SKILL_POLICY_MISMATCH,均返回 426。原 Work binding 仍是 runtime-work-v1;取消提交、补充材料等路由单独判定,见协议地图。

证据:提交门 与 实际 chat POST 调用。

跨仓协议地图:API、IPC、wire revision 与升级边界

固定源码:Agent 7f2e519936b53035646a70f152e734298abed2fb;Desktop 4346d79eb364b502ef87c0869a494dfed7964419。版本号必须带上所属边界:Desktop 协议 3、Interaction 协议 2、Work identity v1、Skill 提交 wire v2 并不冲突。

本页是当前代码合同地图;信任边界解释权限,Desktop Runtime解释宿主,恢复矩阵解释失败动作。接口存在不代表目标环境已升级或真机互操作已通过。

当前合同地图

边界 / 生产者 → 消费者 入口 / 合同 版本与兼容规则 不代表什么 / 源码
Renderer/preload → Desktop Main aida-runtime-work:prepare-submission、submit-submission、view-submission、inspect-submission、stop-submission、reconcile-submission 等 IPC 当前 Main 注册表;此处没有发现独立协商的 IPC wire 版本。与同一 Desktop 构建的 schema/实现配套,不把 channel 名当 HTTP endpoint Renderer 不是 Work owner;多窗口观察不授予取消权。IPC 注册、Main delivery owner
Agent tool-client → Desktop generated types packages/tool-client/src/types/* → apps/desktop/shared/generated/* Desktop/local-capability 常量 DESKTOP_PROTOCOL_VERSION = 3;生成文件标记来自 Agent;同步检查见下节 generated 镜像不是另一份可独立演进的 SoT。源常量、镜像
Desktop Main → Agent chat POST /api/chat;X-AIDA-Protocol 与本机载荷 声明的 Desktop 版本必须为 3;无头但带本机执行载荷拒绝;无头且无本机载荷不因 Desktop 门被拒。缺 payload version 是 schema 违规,不等同升级信号 Desktop 门通过不授予本机工具权限。版本判定、chat 本机载荷门
Main → Agent chat 提交 wire X-AIDA-Runtime-Protocol + skillExecutionPolicy;Idempotency-Key 为原 commandId 无 policy:头缺省/空值或 runtime-work-v1 可通过此门;有 policy:必须 runtime-work-skill-v2。skill-v2 与 policy 有无不一致 → RUNTIME_WORK_SKILL_POLICY_MISMATCH;其它非空值 → RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,均 426 无头的 helper 返回 hostWork=false,不应据此声称获得 Work binding。Desktop 实际根据 policy 选择 v1/skill-v2。Agent 判定、426 映射、Desktop 发送
Main → Agent 取消排队提交 POST /api/chat/submissions/:clientRequestId/cancel 此端点允许头缺省/空值或 work-v1;非空其它值(含 skill-v2)426。按原 tenant/user/endpoint/clientRequestId 取消排队项 不等于已运行 Root 的 Stop;queue_closed 返回,unknown 404,其余结果409。取消提交独立门
Agent → Desktop Work binding bindingVersion 1,runtimeProtocolVersion=runtime-work-v1、profile file-work-v1、originalWorkRef skill-v2 是提交 wire revision,不改变原 Work identity;历史 binding 缺 skillExecutionPolicy 时不能推断补上 business_task 是领域引用,不支持 Task 级控制;当前 binding refine 要求 root_run。Work identity
Main → Agent Work 补证 POST /:runId/work-supplement,头 X-AIDA-Runtime-Protocol 必须 runtime-work-supplement-v2;缺头或不同值 426。路径 rootRunId 是权威,body echo 不能覆盖 补证 wire revision 不是新任务、新 owner 或原效果自动重试。补证入口
Agent → Desktop 流握手 {type:'handshake', protocolVersion:3, invocationId} 无 negotiatedCapabilities;v3 隐含退役 feature tokens,当前能力由 capabilities.supportedPrimitives 广告、readiness 字段描述 传输事件不是统一的业务事件日志,也不是可跨设备复制的 workspace authority。握手、v3 定义
Main → Agent 本机读恢复 / receipt 家族 Local File operation 与 durable local execution 各自原绑定;恢复 header Aida-Local-Execution-Protocol-Version 属 Desktop v3 硬门,不重新引入独立 LF v4/v5 wire 协商;非 3 返回 DESKTOP_UPGRADE_REQUIRED local-files-v4 文件/架构名不等于 wire version=4;恢复不是再派发新副作用。恢复端点示例,完整家族见Desktop Runtime
Desktop / 客户端 → Agent Interaction Kernel Aida-Interaction-Protocol-Version;对话 Interaction API middleware 当前 2,必须匹配;否则 426 interaction_protocol_upgrade_required 与 Desktop v3、Work revision 分开;协议通过后仍需 actor/answer/原交互校验。常量、硬门
Plugin 包 / Worker → Desktop Main → Agent 原调用 不可变包、manifest/tool identity、原 pending binding、request/result/receipt 摘要 安装信任决策 source=installed_plugin 是 Desktop-local journal schema,源码明确不是 generated LF protocol。Plugin v2 合同细节链到Plugin 挂载 不得把 local decision 添加为跨仓统一授权票据;安装信任不替代文件/连接/窗口权限。本地合同声明

兼容性不是“降级到能跑”

  • 当前实现:chat 的 skill-v2+policy 配对、补证 supplement-v2 专门门、Desktop v3 与 Interaction v2 独立硬门。旧客户端或旧服务端不能通过删除控制字段来“兼容”;明确不匹配应停在入口,不进入半执行。
  • 历史:runtime-v2.1 常量及内部处理仍可存在,但当前 chat helper 拒绝该非空 header。runtime-v2/ 旧目录、feature-token 协商、独立 LF wire 版本的历史请读冷路径,不能把残留类型当现行受理许可。
  • ADR 与代码分开:ADR-0093 的状态文字是 Proposed,但无头且无本机载荷的 chat 分流已有代码;ADR-0098 的可回访卡方向不能推导成已实现 parked workspace/统一任务日志,详见主路径提案状态。本页不新增这类合同。

建议的升级与验证顺序(运维建议,不是已经执行的发布记录)

  1. 冻结双方版本及合同差异:先记录 Agent / Desktop SHA、DB schema、目标使用的 API。把 Desktop v3、Work 提交、补证、Interaction 分开列兼容矩阵;不要只比较应用 semver。
  2. 生成与静态检查:以 Agent tool-client 为源重新生成 Desktop 镜像,不手工改 generated 文件。ADR-0087 指定 Desktop pnpm -w fixtures:sync:check 与 Agent pnpm contract:check;这是上游仓命令,不是本站的测试结果。同步约定
  3. 准备服务端前置条件:v3 迁移 178 / schema guard 的要求见同 ADR;部署前独立确认目标环境确已具备,不能从源码存在推断迁移已跑。迁移约定
  4. 按兼容窗口安排双方更新:先在隔离环境验证 server 能接受目标 wire,再允许客户端发该 wire;若旧客户端会被新 server v3 硬拒,应安排协调更新/升级提示窗口,而非宣称滚动升级无停顿。本文没有证据证明生产存在双版本过渡。
  5. 正反配对验收:Desktop 3 / 非3 / 无头±本机载荷;Work v1 无policy、skill-v2 有policy及两种错配;supplement-v2 与旧值/缺头;Interaction 2 与旧值。错误码、HTTP status、未进入效果执行应同时验证。
  6. 再测恢复而非重放:unknown submission、丢 ACK、Stop、切账号、撤权按恢复矩阵执行。只在原 owner 事实与观察一致后结束;记录未运行的真机与故障注入项。

任何回滚都须保留原 command / binding / effect 归属与 schema 解释能力;不能以回退二进制为理由重置 unknown 或清掉 receipt 记录。此处是安全约束建议,不声称已有自动回滚机制。

代码证据

引用核验检查固定 commit 的文件与范围;实现结论来自代码阅读。自动检查不证明生产环境已启用。

已核验实现

Desktop 协议 v3 硬门(ADR-0093 起只约束本机执行):chat POST 带了 X-AIDA-Protocol 且不等于 3 时,在解析请求体之前审计 desktop_protocol_version_rejected 并返回 426 DESKTOP_UPGRADE_REQUIRED(body 带 expectedProtocolVersion=3);没带这个头时先解析请求体,只有载荷里有本机执行字段(localExecutor、localFileAttachments、pluginTask、pluginTools、userSkill,清单为 LOCAL_EXECUTION_CHAT_BODY_FIELDS)才同样 426;两者都没有的请求进入 Runtime Work 协议检查和后续受理,不能仅据此断言最终工具集合为空。旧的 LOCAL_FILE_PROTOCOL_UPGRADE_REQUIRED 与 desktop_protocol_version_required 两个码已删除。

aida-agentpackages/agent/src/gateway/chat-routes.ts:326–3647f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/gateway/chat-routes.ts:509–5127f2e519936b57902d4907ed8026fe1ecdd146e82符号:chatBodyCarriesLocalExecution
aida-agentpackages/agent/src/gateway/request-schemas.ts:93–1107f2e519936b57902d4907ed8026fe1ecdd146e82符号:LOCAL_EXECUTION_CHAT_BODY_FIELDS
aida-agentpackages/agent/src/gateway/protocol-version.ts:1–167f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED
已核验实现

localExecutor 载荷 version 有值且不等于 3 时,chat POST 与 /validate-local-executor 同样返回 426 DESKTOP_UPGRADE_REQUIRED;version 缺失按 schema 违规处理,不算升级信号。path-free Local File 仍要求绝对路径只留在 Desktop Main。

aida-agentpackages/agent/src/gateway/chat-routes.ts:608–6127f2e519936b57902d4907ed8026fe1ecdd146e82符号:desktopPayloadVersionUnsupported
aida-agentpackages/agent/src/gateway/chat-routes.ts:325–3387f2e519936b57902d4907ed8026fe1ecdd146e82符号:desktopPayloadVersionUnsupported
aida-agentpackages/agent/src/gateway/protocol-version.ts:28–387f2e519936b57902d4907ed8026fe1ecdd146e82符号:desktopPayloadVersionUnsupported
aida-desktopapps/desktop/electron/local-files-v4/capability.ts:12–194346d79eb36402355e51118df0edf1f98586880c符号:assembleLocalFileV4Capability
已核验实现

Protocol v3 握手帧只剩 { type: "handshake", protocolVersion: 3, invocationId },不再携带 negotiatedCapabilities;本轮可用的本机能力以会话载荷 capabilities.supportedPrimitives 为准(localFileCapability / executorReadiness 只表达就绪),载荷 version 必须等于 3。

aida-agentpackages/agent/src/gateway/transport/handshake.ts:1–177f2e519936b57902d4907ed8026fe1ecdd146e82符号:buildHandshakeFrame
aida-agentpackages/tool-client/src/types/desktop-tools.ts:156–1707f2e519936b57902d4907ed8026fe1ecdd146e82符号:desktopCapabilitiesSchema
aida-agentpackages/tool-client/src/types/desktop-tools.ts:192–1947f2e519936b57902d4907ed8026fe1ecdd146e82符号:z.literal(DESKTOP_PROTOCOL_VERSION)
已核验实现

Interaction API 协议头不匹配仍返回 426 interaction_protocol_upgrade_required(Kernel 协议独立于 Desktop 协议 v3);Local Execution Recovery GET /pending 的 Aida-Local-Execution-Protocol-Version 头现绑定 DESKTOP_PROTOCOL_VERSION(3),不匹配返回统一的 426 DESKTOP_UPGRADE_REQUIRED(旧码 local_execution_recovery_protocol_upgrade_required 已删除)。

aida-agentpackages/agent/src/gateway/api-conversation-interactions.ts:369–3997f2e519936b57902d4907ed8026fe1ecdd146e82符号:interaction_protocol_upgrade_required
aida-agentpackages/agent/src/gateway/api-durable-local-execution-recovery.ts:78–847f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/shared/durable-local-execution.ts:20–267f2e519936b57902d4907ed8026fe1ecdd146e82符号:LOCAL_EXECUTION_RECOVERY_PROTOCOL_VERSION
已核验实现

PluginHost 位于 Desktop Main;SessionBinding 描述 Gateway 层 Agent 绑定,与本机 session 不可混为同一授权标识。

aida-desktopapps/desktop/electron/plugin-host/plugin-host.ts:96–1274346d79eb36402355e51118df0edf1f98586880c符号:export class PluginHost
aida-agentpackages/agent/src/gateway/session-binding.ts:118–1477f2e519936b57902d4907ed8026fe1ecdd146e82符号:resolveSessionBinding
已核验实现

失败链:Desktop 协议头有值且不是 3、localExecutor.version 不是 3,或没带协议头却携带本机执行载荷 → 426 DESKTOP_UPGRADE_REQUIRED,阻断整次提交且不创建 Run;Agent 不做容错解码,也不降级成「只禁用文件工具」。没带协议头也没有本机执行载荷的请求不走这条失败链(ADR-0093)。

aida-agentpackages/agent/src/gateway/chat-routes.ts:326–3647f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/gateway/chat-routes.ts:608–6127f2e519936b57902d4907ed8026fe1ecdd146e82符号:desktopPayloadVersionUnsupported
aida-agentpackages/agent/src/gateway/chat-routes.ts:509–5127f2e519936b57902d4907ed8026fe1ecdd146e82符号:chatBodyCarriesLocalExecution
已核验实现

失败链:Interaction API 中间件协议头未接受时返回 426 interaction_protocol_upgrade_required,不进入 Kernel。

aida-agentpackages/agent/src/gateway/api-conversation-interactions.ts:369–3997f2e519936b57902d4907ed8026fe1ecdd146e82符号:interaction_protocol_upgrade_required
已核验实现

chat POST 的 Runtime 提交门接受缺省/空值(无 policy)、runtime-work-v1(无 policy),以及 runtime-work-skill-v2 且携带合法 skillExecutionPolicy;其他非空头为 RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,头与 policy 不匹配为 RUNTIME_WORK_SKILL_POLICY_MISMATCH,均返回 426。原 Work binding 仍是 runtime-work-v1;取消提交、补充材料等路由单独判定,见协议地图。 这是独立的 Runtime Work 协议门;与之并列的 Desktop 协议 v3 门统一返回 426 DESKTOP_UPGRADE_REQUIRED,覆盖 chat 头(有值且≠3)/ 无头却带本机执行载荷 / localExecutor 载荷、本机执行回执、Local File 回执与投递、durable recovery 和桌面分发。

aida-agentpackages/agent/src/gateway/chat-routes.ts:326–3647f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/gateway/api-local-execution-receipts.ts:47–527f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/gateway/api-local-file-v4.ts:86–917f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/gateway/api-desktop-distribution.ts:57–617f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/gateway/api-durable-local-execution-recovery.ts:78–847f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/gateway/chat-work-admission.ts:15–247f2e519936b57902d4907ed8026fe1ecdd146e82符号:runtimeWorkSubmissionProtocol
aida-agentpackages/agent/src/gateway/chat-routes.ts:531–5357f2e519936b57902d4907ed8026fe1ecdd146e82符号:submissionProtocol
已核验实现

成功对偶:X-AIDA-Protocol=3 且 localExecutor.version=3(或没有 localExecutor)时协议门放行;本轮是否给模型 Local File V4 工具只看载荷里有没有合法的 localFileCapability(localFileV4Admitted),没有时只是不注册 V4 工具,不返回 426。ADR-0093 起,没带协议头、也没有任何本机执行载荷的请求同样放行,该分支只证明通过协议门,最终工具集合另行核验。

aida-agentpackages/agent/src/gateway/chat-routes.ts:326–3647f2e519936b57902d4907ed8026fe1ecdd146e82符号:DESKTOP_UPGRADE_REQUIRED_BODY
aida-agentpackages/agent/src/runtime/local/local-file-v4-negotiation.ts:30–567f2e519936b57902d4907ed8026fe1ecdd146e82符号:localFileV4Admitted
aida-agentpackages/agent/src/gateway/chat-routes.ts:509–5127f2e519936b57902d4907ed8026fe1ecdd146e82符号:chatBodyCarriesLocalExecution
已核验实现

IX API middleware 在 protocolAccepted(协议头) 为真时 await next() 进入后续 Kernel 路由。

aida-agentpackages/agent/src/gateway/api-conversation-interactions.ts:5–357f2e519936b57902d4907ed8026fe1ecdd146e82符号:protocolAccepted
已核验实现

chat POST 的 Runtime 提交门接受缺省/空值(无 policy)、runtime-work-v1(无 policy),以及 runtime-work-skill-v2 且携带合法 skillExecutionPolicy;其他非空头为 RUNTIME_EXECUTION_PROTOCOL_UNSUPPORTED,头与 policy 不匹配为 RUNTIME_WORK_SKILL_POLICY_MISMATCH,均返回 426。原 Work binding 仍是 runtime-work-v1;取消提交、补充材料等路由单独判定,见协议地图。

aida-agentpackages/agent/src/gateway/chat-routes.ts:400–4077f2e519936b57902d4907ed8026fe1ecdd146e82符号:RUNTIME_WORK_PROTOCOL
aida-agentpackages/tool-client/src/types/runtime-work-identity.ts:4–137f2e519936b57902d4907ed8026fe1ecdd146e82符号:RUNTIME_WORK_PROTOCOL
aida-agentpackages/agent/src/gateway/chat-work-admission.ts:15–247f2e519936b57902d4907ed8026fe1ecdd146e82符号:runtimeWorkSubmissionProtocol
aida-agentpackages/agent/src/gateway/chat-routes.ts:531–5357f2e519936b57902d4907ed8026fe1ecdd146e82符号:submissionProtocol
已核验实现

本机凭证落盘边界:Desktop Main 以 strictSafeStorage 包装 safeStorage,Linux basic_text / unknown 后端视为无强加密;凭证库退回 session-only,不把伪加密密文写盘。

分层:代码与单测文本已读(静态核验);本轮未运行 Desktop 单测;未在真实 Linux 桌面(GNOME/KDE、有/无 Secret Service)运行 Electron 验证 basic_text 判定与 session-only 退回——等 Stanley 真机验证。

aida-desktopapps/desktop/electron/security/safe-storage-policy.ts:1–524346d79eb36402355e51118df0edf1f98586880c符号:basic_text
aida-desktopapps/desktop/electron/auth/credential-vault.ts:89–1004346d79eb36402355e51118df0edf1f98586880c符号:session-only
aida-desktopapps/desktop/electron/main.ts:680–6934346d79eb36402355e51118df0edf1f98586880c符号:strictSafeStorage
aida-desktopapps/desktop/electron/security/safe-storage-policy.test.ts:84–954346d79eb36402355e51118df0edf1f98586880c符号:session-only
aida-desktopapps/desktop/electron/auth/credential-vault.test.ts:118–1274346d79eb36402355e51118df0edf1f98586880c符号:session-only
已核验实现

Plugin 与已安装 Skill 的安装执行信任:Main 实际调用 authorizeInstalledCapability,decision source=installed_plugin、modeRevision=0;冻结身份、请求摘要、执行实例/generation 和原任务,不适用 ClientAccessMode 或通用逐次确认(旧 PluginExecutionApprovalGate 已随 directory-batch 能力一并移除)。Computer Use 目标窗口、连接和本地文件权限仍独立,不存在旧 PluginExecutionGrantStore 的 always-allow 持久授权语义。

静态读码;撤销入口的界面位置与 E2E 未在本轮核验。

aida-desktopapps/desktop/electron/installed-capability-authorization.ts:18–704346d79eb36402355e51118df0edf1f98586880c符号:authorizeInstalledCapability
aida-desktopapps/desktop/electron/main.ts:2541–25814346d79eb36402355e51118df0edf1f98586880c符号:authorizeInstalledCapability
aida-desktopapps/desktop/electron/main.ts:2561–25824346d79eb36402355e51118df0edf1f98586880c符号:authorizeInstalledCapability
已核验实现

ADR-0093(Proposed,2026-10-20,代码已落地):本机执行协议只约束本机执行。为不做本机执行的客户端(如移动端)去掉 chat 受理对 X-AIDA-Protocol 的依赖:判定矩阵为「头≠3 → 426;头=3 → 原逻辑;无头+本机载荷 → 426;无头+无本机载荷 → 受理,Run 无本机工具」。ADR 写明第 2 条(无本机载荷的 Run 本机工具集合为空)由现有绑定构造满足、本次未改代码;本机执行回执、Local File、durable recovery、桌面分发入口仍按 ADR-0090 D4 硬切;本 ADR 修订 ADR-0090 D4 中 chat admission 一项。

aida-agentdocs/adr/0093-chat-admission-separates-runtime-and-local-execution-protocols.md:26–587f2e519936b57902d4907ed8026fe1ecdd146e82符号:本机执行协议只约束本机执行
aida-agentpackages/agent/src/gateway/chat-routes.ts:463–5037f2e519936b57902d4907ed8026fe1ecdd146e82符号:rejectLocalExecutionProtocol
aida-agentpackages/agent/src/gateway/chat-routes.ts:509–5127f2e519936b57902d4907ed8026fe1ecdd146e82符号:chatBodyCarriesLocalExecution
aida-agentpackages/agent/src/gateway/request-schemas.ts:93–1107f2e519936b57902d4907ed8026fe1ecdd146e82符号:LOCAL_EXECUTION_CHAT_BODY_FIELDS
已核验实现

Desktop 原生路径隐私(desktop e2fdc7c7 / f54b63ce / 736ba9e9):用户消息里的本机绝对路径在 Main 由 projectNativeMessage 换成 [LocalMaterial:…] 标记再发给 Agent,需要用户选择时抛 NATIVE_PATH_SELECTION_REQUIRED;Skill / 插件 / 附件准备完成后发送前再复核一次同一来源版本。标记只含 candidateId、displayName、scopeDigest、availability 与可选 attachmentId,原路径与选择只留在 Main 的加密 message-overlay(LocalSecureEnvelope)里。

aida-desktopapps/desktop/electron/agent-loop/enterprise-adapter.ts:133–1524346d79eb36402355e51118df0edf1f98586880c符号:projectNativeMessage
aida-desktopapps/desktop/electron/agent-loop/enterprise-adapter.ts:226–2384346d79eb36402355e51118df0edf1f98586880c符号:[LocalMaterial:
aida-desktopapps/desktop/electron/native-path/native-path-message-overlay.ts:1–394346d79eb36402355e51118df0edf1f98586880c符号:LocalMaterialMarker
aida-desktopapps/desktop/electron/main.ts:1306–13094346d79eb36402355e51118df0edf1f98586880c符号:NativePathMessageOverlay
已核验实现

原生路径隐私修复(398e3301):引号内的本地相对路径只要含 .. 父目录段,整段作为私有定位符交给 Main 校验(修复中文与 ASCII 前缀漏识别);正常点段与含点名称保留;http(s) scheme 按大小写无关前缀消费,不跳过同一引号中后续的本机路径。

aida-desktopapps/desktop/shared/native-path-contract.ts:45–504346d79eb36402355e51118df0edf1f98586880c符号:quotedRelativePathParts
aida-desktopapps/desktop/shared/native-path-contract.ts:79–974346d79eb36402355e51118df0edf1f98586880c符号:parts?.includes('..')
已核验实现

邮箱连接授权边界:公开 connect 与 JWT 认证邮箱读取分离;authorization ticket 只授予浏览器连接建立元数据,永不授予邮箱读;支持 generic IMAP / OAuth 与经代理的 browser origin。

aida-agentpackages/agent/src/gateway/api-mailbox.ts:334–3417f2e519936b57902d4907ed8026fe1ecdd146e82符号:connect-only
aida-agentpackages/agent/src/gateway/api-mailbox.ts:676–6807f2e519936b57902d4907ed8026fe1ecdd146e82符号:never mailbox reads
条件路径

Computer Use 本机边界(Desktop):窗口授权与原生操作经 computerUse bridge 与 ComputerUsePanel;需 OS helper / 包签名;旧 Desktop 不应接收新能力投影。

真机 macOS/Windows 授权与截图链路本站岗未跑;代码与合同已核。

aida-desktopapps/desktop/src/local-executor/ComputerUsePanel.tsx:34–414346d79eb36402355e51118df0edf1f98586880c符号:computerUse
aida-agentdocs/reference/computer-use.md:35–377f2e519936b57902d4907ed8026fe1ecdd146e82符号:aida.computer-use
aida-desktopapps/desktop/electron/computer-use/computer-use-host.ts:32–334346d79eb36402355e51118df0edf1f98586880c符号:ComputerUseMethod
已核验实现

Computer Use 视觉回执合同:Agent 仅接受成功且具 computer-observe 能力的回执;verifyComputerObservation 校验 canonical base64、SHA-256、PNG/JPEG 与尺寸;每回执最多 1 帧;公开投影剥离图像 base64;旧截图不作下一轮视觉上下文。

aida-agentpackages/agent/src/runtime/local/computer-observation.ts:32–447f2e519936b57902d4907ed8026fe1ecdd146e82符号:verifyComputerObservation
aida-agentpackages/agent/src/orchestrator/computer-observation-model.ts:12–257f2e519936b57902d4907ed8026fe1ecdd146e82符号:Only the original Plugin receipt consumer
aida-agentdocs/reference/computer-use.md:9–137f2e519936b57902d4907ed8026fe1ecdd146e82符号:computer-observe
已核验实现

邮箱续查保留原 connectionId 绑定;越界工具调用在派发连接器之前以 PLUGIN_CONNECTOR_READ_SCOPE_VIOLATION 拒绝,不代表邮箱查询失败,也不能尝试其他账号。IMAP 传输层另行处理缺省 UIDNEXT:空邮箱返回空页;有 beforeUid 时使用原游标,否则读取末位序号的 UID 推导上界;已提供但畸形的 UIDNEXT 仍失败,UIDVALIDITY 绑定和分页边界不放宽。

aida-agentpackages/agent/src/gateway/delegated-desktop-capabilities.ts:201–2107f2e519936b57902d4907ed8026fe1ecdd146e82符号:PLUGIN_CONNECTOR_READ_SCOPE_VIOLATION
aida-agentpackages/agent/src/connectors/email/imap-mailbox-client.ts:486–5197f2e519936b57902d4907ed8026fe1ecdd146e82符号:uidNext
已核验实现

开发者指南 protocol:查跨仓协议,按当前固定源码与关联主题定位责任和边界;建议操作与验收计划不是已执行结果。

只核对当前代码与文档结构;生产配置、所有真实客户端、清理作业及原生/浏览器验收另行举证。PR状态仅为读取时快照。

aida-agentpackages/agent/src/gateway/chat-routes.ts:402–4517f2e519936b57902d4907ed8026fe1ecdd146e82
aida-desktopapps/desktop/electron/agent-loop/register-runtime-work-ipc.ts:1832–18644346d79eb36402355e51118df0edf1f98586880c
aida-desktopapps/desktop/electron/agent-loop/runtime-work-delivery.ts:22–614346d79eb36402355e51118df0edf1f98586880c
aida-agentpackages/tool-client/src/types/protocol-version.ts:1–77f2e519936b57902d4907ed8026fe1ecdd146e82
aida-desktopapps/desktop/shared/generated/protocol-version.ts:1–84346d79eb36402355e51118df0edf1f98586880c
aida-agentpackages/agent/src/gateway/protocol-version.ts:1–387f2e519936b57902d4907ed8026fe1ecdd146e82
aida-agentpackages/agent/src/gateway/chat-routes.ts:481–5427f2e519936b57902d4907ed8026fe1ecdd146e82
aida-agentpackages/agent/src/gateway/chat-work-admission.ts:14–337f2e519936b57902d4907ed8026fe1ecdd146e82
aida-desktopapps/desktop/electron/agent-loop/runtime-work-submission-client.ts:39–714346d79eb36402355e51118df0edf1f98586880c
aida-agentpackages/tool-client/src/types/runtime-work-identity.ts:4–557f2e519936b57902d4907ed8026fe1ecdd146e82
aida-agentpackages/agent/src/gateway/api-runs.ts:384–4047f2e519936b57902d4907ed8026fe1ecdd146e82
aida-agentpackages/agent/src/gateway/transport/handshake.ts:3–177f2e519936b57902d4907ed8026fe1ecdd146e82
aida-agentpackages/agent/src/gateway/api-durable-local-execution-recovery.ts:68–1187f2e519936b57902d4907ed8026fe1ecdd146e82
aida-agentpackages/agent/src/interaction-kernel/contract.ts:28–377f2e519936b57902d4907ed8026fe1ecdd146e82
aida-agentpackages/agent/src/gateway/api-conversation-interactions.ts:364–3757f2e519936b57902d4907ed8026fe1ecdd146e82
aida-desktopapps/desktop/electron/installed-capability-authorization.ts:12–314346d79eb36402355e51118df0edf1f98586880c
aida-desktopdocs/adr/0087-local-capability-convergence-and-protocol-v3.md:30–364346d79eb36402355e51118df0edf1f98586880c
aida-desktopdocs/adr/0087-local-capability-convergence-and-protocol-v3.md:38–404346d79eb36402355e51118df0edf1f98586880c