AgentKit Studio文档

Host 拆分:实施与验收

阶段 4 已通过适用的本地和 CI 验收。4A 服务组装、4B 全部 77 个操作及传输注册、4C 共享合同与真实 Host 验证,以及 macOS、Windows 无签名包的运行时 smoke 和包内模块检查均已通过。本记录分别保留受控 provider、开发宿主与无签名包的证据边界。

4A 改动范围

src/index.mjs 从 946 行缩至 73 行,仅挂载 Harness、延迟加载可信 Host bootstrap,并注入版本、启动会话信息和 favicon。公开插件名称、注入服务和导出保持不变。

src/host/services/index.mjs 为每个 Host 创建独立服务图。领域模块声明自己的依赖,晚到的模型、portable bundle 和 preset admission 通过明确的回调解析当前所属实例,没有新建进程全局服务。

模块 负责创建的服务
platform 全局配置、凭证服务引用、控制面及部署客户端
agents 本地 Agent/Revision 存储、Agent 目录、成功 Build 目标查询
resources Skill、本地 MCP、Probe 与受作用域管理的资源适配器
builds Build 存储及操作管理器
deployments 延迟创建的部署管理器,保留未配置云端时的本地使用路径
automation 本地计划、评测、观测、渠道及云端计划适配器
authoring 原生创作工具的进程内客户端

4A 交付时,src/host/bootstrap.mjs 组装模型、Runtime、preset 和恢复过程,并保留原 RPC/HTTP 注册及业务请求分支。随后 4B 将请求分支和传输注册迁入领域模块,入口与新模块没有同时注册同一路由。

4A 验证

  • 716 项源码及独立 Harness 源码测试通过,0 失败、0 跳过;公开面、当前快照及可达历史凭证检查、实际 Studio tarball 模块完整性检查通过。
  • 新增服务图行为测试使用两套临时配置及真实文件存储,验证 Agent、配置、MCP 目录及凭证服务引用的隔离。其 Context 是受控测试对象;真实 Host 卸载单独验证。
  • 同一真实 DSH Host 对实际安装的完整 Studio 连续加载卸载 20 次,监听器、路由和所属异步资源回到基线,重复卸载无异常。
  • 真实 Web 已通过持久化历史、重开、完整原生列表、搜索、归档、缓存及重连等 13 项,原生创作草稿 1 项,完整产品页面 9 项,共 23 项,渲染错误为 0。
  • 真实 Electron 开发宿主对同一安装插件完成上述 23 项复核,渲染错误为 0;原有持久化 Agent 会话可以在 Host 重启后重新打开。
  • 原 RPC/HTTP 实现迁移前后归一化 import 相对路径后的内容哈希相同。这证明本批未重写分派及传输代码,不能代替下一批每个操作的合同对照测试。
  • 浏览器 bundle 未变化,保持同一 SHA-256 和 5% 体积门禁;Host 模块未进入浏览器依赖图。

本地证据保存在忽略的 .artifacts/refactor/stage-4/:services-release-check.log、services-isolation-check.log、services-lifecycle-20.json、services-web-23.json、services-electron-23.json、services-transport-parity.json 和 services-client-admission.json。验收 UI 只操作独立 Profile 中带唯一标记的合成数据,不发送新模型消息或进行云端部署修改。Electron 为开发宿主,不能作为安装更新和 Windows 原生安装证据。

4B 首批路由

routes/resources.mjs 处理资源目录和 MCP 的 6 个操作,routes/credentials.mjs 处理凭证写入,routes/builds.mjs 处理 Build 与 operation 的 6 个操作。保留原参数、返回 envelope、错误码、资源删除范围和 Build 身份。异步调用在原分派错误边界内等待,异常继续转换成原 RPC 失败 envelope。

四个对应测试文件改为直接导入实际路由工厂,不再读取并截取业务源码或使用 new Function。77 个允许操作的集合与迁移前相同,没有增加或删除端点。

本地源码及发行输入检查为 716 项通过,0 失败、0 跳过。真实 Web 和 Electron 开发宿主各通过既有 23 项流程,以及凭证名称无效、凭证值为空、MCP 更新不存在、MCP 删除 ID 无效、Build 下载 ID 无效这 5 项失败合同,共 28 项。负例验证 HTTP 状态、RPC ID、错误码和凭证值不回显,没有执行凭证写入或资源删除。

失败记录保留。第一次创建流程缺少两个可选模型,检查确认隔离目录的模型配置缺失;补入现有模型配置后继续验收,没有复制云端凭证。另一个失败是新增负例把空 ID 的 MCP 更新预期写成了 MCP_ID_INVALID;真实存储的迁移前后对照均为 MCP_NOT_FOUND,因此修正测试预期,保留产品合同。产品页面验证增加模型目录前置检查,失败报告保留已完成的页面结果。

本批机器记录位于同一证据目录:routes-first-release-check.log、routes-first-operation-parity.json、routes-mcp-error-parity.json、routes-failure-code-{red,green}.json、routes-first-web-final-28.json、routes-first-electron-28.json 和 routes-first-lifecycle-20.json。之前的失败报告不覆盖。

4B 全部路由与传输注册

全部 77 个操作由 14 个领域处理器承接,公共分派层负责允许的操作集合、Host/请求取消信号及外层错误 envelope。contracts/operations.mjs 暂时集中操作 ID,完整参数、错误和客户端映射留待 4C。bootstrap 从 709 行降至 312 行,保留启动与作用域组装,不再包含 RPC 请求分支和 HTTP 注册代码。

HTTP/SSE 注册和 Connection Fetch 下载位于独立模块;旧本地会话入口通过每次请求创建的领域服务取得 handler。插件及 Session 导出依赖按需加载,保持官方 DSH 归属。preset 模型选择作为可直接导入的服务函数验证,不再截取其源码执行。已有两处 Agent 表面架构断言仍检查所属模块的文本;它们不替代行为测试。

验证 本地结果及范围
全量源码及发行输入 888 项通过,0 失败、0 跳过;公开面、快照和历史凭证扫描及 Studio tarball 检查通过
固定提交行为对照 从 c6f97fb 录制 77 个操作各一组成功及后端失败结果,共 154 例;返回 envelope、参数归一化和适配器调用相同。使用受控适配器,不是 77 次真实云端操作
真实 Node HTTP 401/403、非 POST、坏 JSON、1 MiB 限额、RPC ID、输入 EOF、SSE 字节、断开取消、GET/HEAD 下载和作用域卸载等边界通过
真实 DSH Host 官方 Connection/WebServer 的缺 Cookie 401、跨来源 403、官方浏览器 Cookie 200 通过;在真实 Cordis scope 卸载时,本地与云端 SSE 的受控上游均取消,注册回到基线
真实 Web / Electron 同一实际安装插件各 28 项通过,渲染错误为 0;Electron 仍为开发宿主
完整插件生命周期 同一真实 DSH Host 加载卸载 20 次,注册、监听器和所属异步资源回到基线
独立 Harness tarball 实际导出加载、类型检查、真实 DSH loop / 持久化与卸载通过,使用受控模型适配器
浏览器产物 与 4A、首批 4B 字节相同,保持原始 5% 包体门禁

补充测试发现并修复两类旧生命周期缺口:SSE 仅响应客户端断开,未绑定注册作用域;RPC 等待服务初始化后未重新检查 Host 是否已关闭。3 个回归场景先失败后通过。现在每个 HTTP 注册作用域拥有取消信号,晚到的本地 handler 和 RPC 不再在旧作用域启动后续调用;真实 DSH scope 的活跃流卸载也已验证。未改变已提交写操作的重试或回执语义。

机器证据保存为 routes-all-release-check.log、routes-all-real-dsh-http.json、routes-all-web-28.json、routes-all-electron-28.json、routes-all-lifecycle-20.json、routes-all-packed-harness.log 和 routes-lifetime-{red,green}.log。固定提交录制保存在 tests/fixtures/host-route-contracts.json,测试直接调用当前路由模块,不在运行时执行旧源码。

阶段验收范围

4C 的共享合同、四种启动状态、重启恢复、冻结 Build、工具续接及平台包结果见下文。阶段 4 的源码、真实 Host 与适用打包检查均已完成,接下来进入阶段 5 补丁收敛与宿主升级演练,最终交付可开源源码主分支。

4C 首批合同与启动隔离

操作清单、领域映射、JSON/envelope 边界、公共错误和取消合同集中于 src/contracts/。从清单派生客户端方法及操作 ID 类型,固定 TypeScript 6.0.3 的 checkJs 和正反类型探针进入 pnpm check。浏览器与 Node Connection 模式复用控制客户端;原 Node REST 模式保留,消费者及退出条件见 refactor-contracts.md。业务 DTO 的逐字段校验仍由领域实现负责。

新增只读 schedules/delivery-targets:前端原先已调用,旧 Host 允许清单遗漏。它复用已有云端查询实现,不执行创建、更新或删除。原 77 项的 154 个固定提交对照不改录,新查询有独立测试。

HTTP 控制请求也按响应连接及注册作用域取消;正常上传 EOF 不取消请求。新增 3 个测试先失败后通过,真实 DSH 官方 admission 上再验证浏览器断开及 scope 卸载。原 SSE 的作用域取消、Cookie 认证和来源限制继续通过。

可选资源适配器初始化失败后,不再拒绝整个 Host 挂载。绑定资源的调用返回 RESOURCE_SERVICE_UNAVAILABLE;无资源的原生回合、设置和本地 Agent 仍可运行。真实 DSH 对安装包中的 Host composition 验证本地配置可用、仅模型可用、云端未配置、资源初始化失败四种状态,均完成受控原生回合及本地 Agent 创建、读取,卸载注册回到基线。失败证据保留:初版验证脚本未传工作目录,DSH 标准 persona 在组装提示词时拒绝缺少 cwd;补上测试工作目录后通过,产品无此项改动。

Web 回归发现原验收脚本对分组渲染和默认六条分页的假设。修正后通过全部 28 项,未修改 DSH 的分组或分页行为。前端当前 gzip 为 92,071 字节,较原始 87,440 字节增长 5.296%,显式使用用户批准的 7% 预算,并记录原 5% 对照未通过;基线未重置。

该批完成时,冻结 Build 的真实 Host 执行、工具续接与适用平台包复核尚待完成;后续结果分别记录如下,整个阶段 4 通过后才进入阶段 5。

该批最终检查为 903 项源码测试通过,0 失败、0 跳过;公开面、快照及可达历史扫描、509 文件的实际 Studio tarball 检查通过。Web 与 Electron 开发宿主各 28 项通过,渲染错误均为 0;完整安装插件在同一真实 Host 加载卸载 20 次后回到基线;独立 Harness tarball 的实际加载、类型、DSH loop、持久化和卸载通过。安装插件的全部 212 个生产模块、类型文件、manifest 及浏览器产物与工作树字节相同。

机器证据位于忽略的 .artifacts/refactor/stage-4/:contracts-final-release-check.log、contracts-web-pagination-28.json、contracts-electron-28.json、contracts-lifecycle-20.json、contracts-startup-states-final.json、contracts-real-dsh-http.json、contracts-packed-harness.log、contracts-full-installed-parity.json 和 contracts-approved-client-final.json。连续构建的浏览器哈希相同。受控 provider、开发 Electron 与真实云端、原生安装更新的证据边界仍分别保留。

冻结 Build 的真实 Host 执行

新增 pnpm verify-studio-frozen-host,加载实际安装包中的 Host bootstrap。Agent Revision 1 绑定受控 MCP 与 model-a,构建真实 archive 后将当前 Agent 更新到 Revision 2 和 model-b;旧 Build 的实际请求仍使用 Revision 1 的指令和 model-a。通过原生 ToolRegistry 执行一次 MCP 工具,工具结果进入 DSH 持久化历史,再由 DSH loop 续接模型。

关闭整个真实 Host 并重新启动后,旧 Build preset 恢复,同一请求重放不产生模型调用;通过 previous_response_id 继续第二轮,保持 Session、Build 和模型绑定。拒绝把新 Agent 的 model-b 注入旧 Build。活跃流经取消接口和插件卸载两条路径终止,上游模型连接关闭,原生回合各恰好产生一个 aborted 终态。7 项集成检查通过,模型和 MCP 服务均为受控 provider。

失败证据保留。首次验证未通过 DSH 公共 Settings 发布模型 provider,得到 session/model-unavailable;随后复用现有 portable-model-bridge,并等待官方 Loader 就绪。历史读取还补上 DSH 要求的 AbortSignal。两项都是验收脚本修正,没有修改产品模型选择、持久化或 Runtime 实现。新增 provider 使用唯一标记,结束时只撤销本次注册。最终报告为 stage-4/frozen-real-host-final.json。

平台包复核

固定 Studio 95174f83c465ae799f076d903ceec0fe9b415304 和 DSH 639ed015397290b3745d163aafe02ffee4aa3f84,在本次独立工作树内运行官方 mac-arm64 无签名打包入口,构建版本为 0.2.0-rc.2.20261015.1。官方构建、原生依赖、Office 文档转换、Skill CLI 发现、Electron builder 与最终 packaged runtime smoke 均以退出码 0 完成。

实际 app.asar 中 208 个 Studio 运行时模块、manifest 及浏览器产物与工作树字节相同;DSH 官方 runtime file policy 排除的 4 个 TypeScript 声明文件单独记录。扩展包内模块检查支持 --studio,从 7 个 DSH 入口和 2 个 Studio 入口跟踪相对及动态 import,实际解析 143 个模块,未发现缺失文件。它检查归档内依赖完整性,不能代替 Host 行为验收。

node scripts/verify-desktop-module-graph.mjs "<AgentKit Studio.app 或 app.asar>" --studio
本地产物 字节 SHA-256
mac-arm64 unsigned DMG 501987772 d927bb8edc538c66a14ccd68bce5de75de575631e9b3c933d40e545bf5c7d0d8
mac-arm64 unsigned ZIP 507037243 f73faedf8040aeda6b90c29f857f79dc665316a7ebc18167ab34529dd3072072
win-x64 unsigned EXE 401201186 82edfabec4cb16976db73525feae11c28ec53587ba6f8651c54a74de3c6c5d01

新增包内动态 Host import 的缺失文件回归检查后,全量源码及发行输入检查为 904 项通过,0 失败、0 跳过,实际 Studio tarball 共 510 文件。上述平台证据仅为本地无签名包,未进行签名、公证、原生安装更新或二进制发布。

Windows 官方仓库诊断任务 38663780184 被 GitHub 账户付款或额度状态拒绝启动,实际执行步骤为 0;该结果不能记为 Windows 打包失败或通过。随后按用户选择,复用此前公开仓库的标准 Windows CI 通道。任务 38665466735 固定 Studio 56213286759f4470ea5ac0cf3e3d2239cebea483,源码门禁及 windows-2025 无签名打包均成功,Windows job 用时 21 分 43 秒。下载后的证据确认官方 packaged smoke 和实际 app.asar 的 9 个入口、143 个模块检查通过。该提交相对 macOS 输入只改变验证脚本、测试和本文档,生产代码字节保持一致。

公开 CI 的源码门禁再次通过 904 项测试,0 失败、0 跳过;Gitleaks 8.30.1 的快照及历史扫描、公开历史检查和 510 文件的 tarball 检查通过。临时公开 CI 分支只修改一个 workflow,使用已有源码读取凭证,上传诊断记录;Studio 仓库仍为 private。签名、公证、原生安装更新、云端行为及二进制发布不在本次无签名包证据中。

本批证据为 stage-4/mac-package-acceptance.json、mac-studio-module-graph.json、mac-package-cached.redacted.log、archive-graph-release-check.log、windows-current-run.json、windows-package-acceptance.json、public-windows-current-run.json、public-source-gate.log 和 acceptance-stage-4-final.json。首次将声明文件计入 Desktop parity 的报告也保留,按官方文件排除规则修正验收范围,没有修改产品包。