@ai-workbench/remote-agent 0.8.19 → 0.8.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +27 -134
  2. package/dist/acp.d.ts +23 -16
  3. package/dist/acp.js +209 -226
  4. package/dist/agents.d.ts +0 -1
  5. package/dist/agents.js +2 -2
  6. package/dist/broker-runtime.d.ts +3 -5
  7. package/dist/broker-runtime.js +45 -342
  8. package/dist/broker.d.ts +6 -31
  9. package/dist/broker.js +42 -113
  10. package/dist/catalog-ssh.d.ts +2 -31
  11. package/dist/catalog-ssh.js +9 -39
  12. package/dist/claude-local.d.ts +1 -1
  13. package/dist/claude-local.js +41 -105
  14. package/dist/client.js +34 -126
  15. package/dist/close-diagnostics.d.ts +6 -20
  16. package/dist/close-diagnostics.js +13 -57
  17. package/dist/connect-contract.d.ts +4 -8
  18. package/dist/conversation-details.d.ts +0 -29
  19. package/dist/conversation-details.js +8 -99
  20. package/dist/employee-endpoint.d.ts +1 -1
  21. package/dist/employee-endpoint.js +21 -19
  22. package/dist/employee-exec.d.ts +4 -3
  23. package/dist/employee-exec.js +25 -13
  24. package/dist/employee-info.d.ts +7 -1
  25. package/dist/employee-info.js +24 -3
  26. package/dist/employee-location.js +3 -4
  27. package/dist/employee-mcp.js +44 -69
  28. package/dist/employee-native.d.ts +1 -3
  29. package/dist/employee-native.js +6 -27
  30. package/dist/employee-presentation.d.ts +0 -5
  31. package/dist/employee-presentation.js +0 -15
  32. package/dist/employee-provider.d.ts +3 -11
  33. package/dist/employee-provider.js +69 -205
  34. package/dist/employee-reasons.js +1 -5
  35. package/dist/employee-shell.d.ts +2 -1
  36. package/dist/employee-shell.js +10 -13
  37. package/dist/employee-ssh.d.ts +1 -3
  38. package/dist/employee-ssh.js +13 -16
  39. package/dist/employee-tools.d.ts +5 -5
  40. package/dist/failure-evidence.d.ts +2 -10
  41. package/dist/failure-evidence.js +12 -61
  42. package/dist/host-workspace.d.ts +4 -2
  43. package/dist/host-workspace.js +6 -2
  44. package/dist/index.d.ts +13 -43
  45. package/dist/index.js +192 -484
  46. package/dist/input.js +2 -3
  47. package/dist/local-user-turn.js +5 -6
  48. package/dist/mapping.d.ts +5 -3
  49. package/dist/mapping.js +31 -36
  50. package/dist/model-catalog.d.ts +2 -41
  51. package/dist/model-catalog.js +24 -282
  52. package/dist/model-configuration.d.ts +0 -3
  53. package/dist/model-configuration.js +8 -47
  54. package/dist/model-presentation.d.ts +1 -0
  55. package/dist/model-presentation.js +2 -2
  56. package/dist/permissions.d.ts +15 -0
  57. package/dist/permissions.js +30 -0
  58. package/dist/preflight-diagnostic.js +11 -22
  59. package/dist/preflight-payload.d.ts +1 -1
  60. package/dist/preflight-payload.js +2 -2
  61. package/dist/presentation.js +21 -41
  62. package/dist/provider.d.ts +12 -34
  63. package/dist/provider.js +17 -92
  64. package/dist/readiness.js +1 -7
  65. package/dist/remote-details.d.ts +41 -17
  66. package/dist/remote-details.js +84 -381
  67. package/dist/workspace-source.d.ts +1 -25
  68. package/dist/workspace-source.js +1 -138
  69. package/package.json +11 -12
  70. package/dist/catalog-diagnostics.d.ts +0 -16
  71. package/dist/catalog-diagnostics.js +0 -108
  72. package/dist/host-layout.d.ts +0 -8
  73. package/dist/host-layout.js +0 -9
  74. package/dist/job.d.ts +0 -17
  75. package/dist/job.js +0 -57
  76. package/dist/model-defaults.d.ts +0 -29
  77. package/dist/model-defaults.js +0 -62
  78. package/dist/oneshot.d.ts +0 -13
  79. package/dist/oneshot.js +0 -78
  80. package/dist/protocol-boundary.d.ts +0 -13
  81. package/dist/protocol-boundary.js +0 -49
  82. package/dist/provider-locale.d.ts +0 -19
  83. package/dist/provider-locale.js +0 -73
  84. package/dist/recovery-checkpoint.d.ts +0 -6
  85. package/dist/recovery-checkpoint.js +0 -71
  86. package/dist/recovery.d.ts +0 -51
  87. package/dist/recovery.js +0 -61
  88. package/dist/sdk-ssh-wrapper.d.ts +0 -2
  89. package/dist/sdk-ssh-wrapper.js +0 -34
  90. package/dist/stage-timing.d.ts +0 -31
  91. package/dist/stage-timing.js +0 -61
  92. package/dist/workspace-notice.d.ts +0 -47
  93. package/dist/workspace-notice.js +0 -273
  94. package/dist/workspace-source-confirmation.d.ts +0 -4
  95. package/dist/workspace-source-confirmation.js +0 -12
package/README.md CHANGED
@@ -1,152 +1,45 @@
1
- **`@ai-workbench/remote-agent@0.8.19` 发布形态包。包含X2主机目录上下文与审批位置修正;本版以aw.4对齐原生本机MCP过滤、保留远端关闭首因并汇总成功连接核对。继承0.8.18的执行时序、去重复SSH和失败先交还。通过官方插件 → 添加插件安装;固定包由编排发布,X不publish。工程/包证明与leo产品验收分别记录,未运行的门保持NOT_RUN。**
1
+ # AI Workbench 远程助手 · @ai-workbench/remote-agent@0.8.23 · 插件 → 添加插件
2
2
 
3
- # 远程ACP插件
3
+ 通过官方 DSH 插件入口使用 Claude(远程主机)与 Codex(远程主机)。登录和工作区来源由“远程主机连接”组件提供;员工在原生工作区和模型菜单中选择文件夹与型号。
4
4
 
5
- 一个插件提供 **Claude(远程主机)** 和 **Codex(远程主机)**,通过员工主机上的官方CLI运行。Codex保留单次模式;Claude固定会话模式。只用官方模型列表、插件管理和配置入口,不提供自制面板、问答或登录按钮。登录和原生工作区绑定唯一归连接插件L。
5
+ 文件和命令在所选的本机或主机目录执行,订阅凭据留在主机。插件不改写 DSH 的默认模型,不为员工创建同名主机目录,不自动迁移旧会话的来源。
6
6
 
7
- 当前版本0.8.19,在0.8.18/aw.3基础上修复本机MCP过滤、关闭首因和连接核对降噪,需aw.4;包含X2主机目录上下文与审批位置修正;0.8.17的主机来源执行和L具体Need透传完整保留;包名采用`@ai-workbench/remote-agent`以涵盖两个品牌;本轮按编排放行准备发布形态包,供 leo 真机自验;X 不执行实际发布,由编排统一发布。开发fixture逐字节保留L0.7.20固定包,公开类型与SSH导出从该包消费。运行时仍要求L的`getContractInfo()`同时返回API0.7.0、implemented、native-local-v1;旧L包、draft.3或只有版本号的不完整实现会明确报缺项。依赖范围为`~0.7.20`,L由官方插件管理单独安装,不打进X。组件验证不代表真实开通、模型或leo E通过;HanaMesh另验。
7
+ ## 会话行为
8
8
 
9
- 已包含L0.7.18消费增量:来源确认、输入接纳、登录、本机接纳、输入准备、模型目录及运行时解析的早期失败,用正式`preflightDiagnostics:1` / `preflight-check`进入L「连接前技术详情(含登录与工作区确认)」。阶段、真实来源/状态和错误代码可展开;未知来源为null,旧login-check的完整安全原因保留。记录不选择来源、不接纳输入、不自动重发;无原生会话的菜单查询仍在模型设置报告。当前工程和设置组件验证不等于leo GUI验收。
9
+ 每轮启动一个新助手进程,按原生会话编号恢复上下文;不接回旧进程或重放上一轮输入。改变文件来源后请新建会话。
10
10
 
11
- 0.8.13包含L0.7.19消费增量:官方JSONL将省略的`delegationDepth`保存为`0`;X与L只在live/persisted header核对中承认这两种表示等价,实时身份、轮次和其他字段仍严格核验。`REMOTE_DETAIL_SCOPE_INVALID`说明本次输入与当前会话的关联无法核对,不再一律提示组件过旧。已确认的本地来源不重复询问;本轮leo只读取证,修复后的真机路径另验。
11
+ 断线会结束本轮;操作可能已部分执行,请先检查文件。恢复连接后可在原会话继续。旧进程清理和技术详情记录尽力而为,不阻止下一轮。原生本机会话恢复的兼容性及实际设备结果见本轮交付证据,未验证项不作为已通过。
12
12
 
13
- ## 员工路径
13
+ DSH 启动和打开模型菜单时读取一次主机型号列表。发送时不再查询目录或预核所选型号;所选型号不可用时,请在模型菜单重新选择。
14
14
 
15
- 从官方插件管理安装,照常使用默认工作区/会话/模型入口。L沿唯一“远程主机连接”设置节记录文件来源;L0.7.20新选主机位置由两品牌按已核验的规范目录执行,旧legacy主机绑定仍沿原规则;本地来源接入N0.4.4/S0.4.11员工端点。旧映射可在本轮官方一次确认中选择改用本机文件夹;拒绝、取消或输入/来源变化时不切换、不执行。也可在L设置逐工作区确认沿用原主机关联。缺正式host解析能力时明确说明所缺组件、保留原话,本轮不派发。本地六类工具经Claude公开toolAliases路由到员工电脑:cwd是员工选定目录,Git使用本机仓库,不回退主机同名目录。本地真实员工输入先取得官方当前轮次CAS预期,再调用L0.7.17 acceptLocalWorkspaceUserTurn;核回包后才打开D19和本轮主机目录/执行。每轮localAcceptanceId冻结进原详情sink,迟到结果不借新轮ID;LOCAL_USER_TURN_CHANGED立即停止本轮,不重接纳或退legacy。已用固定真包完成本地D19组件联测;编排已回证0.8.14 Claude/Opus5/Default在leo本地目录首轮写文件成功;该回证不覆盖本0.8.19或Codex,产品验收以各版本leo实际结果为准。本地文件不自动上传,X不猜目录、不选首项。首次说明使用官方普通回复;先经官方会话提交、持久化并读回核对,才向L确认。持久记录不等于员工已看见,GUI另验;日志丢失后的未知claim由L保留,不宣称端到端恰好一次。
15
+ ## 执行位置与权限
16
16
 
17
- 新主机位置允许当前SSH员工账号可访问的已选绝对目录、文件系统根目录、非Git或只读目录;不改写原projectRoot、不创建Git、不转本机同名文件夹。read/execute必须可核实,write=false不额外一刀切拒绝,实际写入服从主机系统权限。运行前必核来源UUID、连接代次、目录及链接入口dev/ino和权限;revision与内容增删导致的mtime/ctime变化不单独失效。此核对属于正确性条件,不可关闭。最后inspect到主机spawn之间仍有OS时序边界,不表示原子目录句柄租约。
17
+ - 员工选本机文件夹,就在员工电脑上执行;通道失败不会改在主机运行。
18
+ - 订阅凭据留在主机,不放进命令参数、日志或技术详情。
19
+ - 跟随 DSH 当前权限:完全权限不问、工作区内修改先问、仅可查看只读。需要审批时使用官方卡片。
20
+ - 一条会话对应一个工作区来源;换来源请新建会话。
18
21
 
19
- 文件来源或位置改变后,原会话不能改绑或重放,员工看到“文件来源已改,请新建会话继续”;原会话历史仍可查。L的具体Need保留message/actor/action和代码,员工正文显示原原因与实际文字动作;明确选择文件来源的动作给“设置 → 远程主机连接 → 工作区文件来源”,新建会话等动作保留原标签,不按错误码猜导航;不可用动作明确标记。技术原因officialReason不进正文,未提供按钮API时不编造可点击入口。
22
+ Codex 员工端只使用随包提供的原生组件,通道等待本次组件的启动标记后才完成开通,不逐通道执行摘要或版本校验。当前员工端支持范围以发布验证记录为准,不让员工手填执行器路径。
20
23
 
21
- 未登录时两个模型均回复:**需要登录,请到设置 → 远程主机连接 点登录**。无L或缺正式能力时直接说明缺项,不让员工填写主机、用户、路径或密钥。
24
+ 本机附加扩展本次不启用,不修改本机配置。能安全显示的扩展名称会用普通提示说明;协议细节只进技术详情,不能安全显示的名称不打印原文。
22
25
 
23
- ## 首版审批与能力边界
26
+ ## 管理员参数
24
27
 
25
- 只使用官方DSH审批:唯一的`allow_once`对应允许一次,唯一的`reject_once`对应拒绝。当前固定官方版本没有“本会话总是允许”结果;以后有公开能力才映射,不伪造。
28
+ 参数经官方 Config schema 编辑,显式值优先。只有会话运行方式,没有运行模式选项或单次执行路径。
26
29
 
27
- **首版不支持:`allow_always`、`reject_always`、同一种类有多个不同optionId的歧义选项。** 这些选项不出现在官方审批中;当前请求遇到时会在普通回复明确说明具体名称、标识与种类。无法映射的结果不授权,不取第一项、不静默降为允许一次、不使用userQuestions。取消或断线会撤销旧审批,迟到应答无效;只有真实本轮完成才结算其应答状态。
30
+ | 参数 | 默认值 | 作用 |
31
+ | --- | ---: | --- |
32
+ | acpMaxMessageBytes | 4194304 | 会话消息容量 |
33
+ | brokerMaxFrameBytes | 2097152 | 主机回传单段容量 |
34
+ | brokerControlMaxBytes | 1048576 | 主机会话管理回复容量 |
35
+ | employeeShellKillGraceMs | 1000 | 本机命令连接取消后的清理宽限毫秒 |
28
36
 
29
- 文本、思考、工具步骤/正文/补丁、计划、通知映射为官方普通流;远端工具不变成本机工具调用。图片输入由官方附件服务读取已核验字节,经ACP传给主机,不传员工文件路径。非文本输出无法得到官方持久附件引用时,明确说明收到的内容类型与所缺能力,不假造图片引用。远端结构化提问、未映射扩展会明确提示并取消,不静默丢弃。
37
+ 容量超限明确失败,不截断成有效消息。参数范围、生效时机和调整后果由官方 schema 与参数页显示;以上四条执行不变量不可关闭。
30
38
 
31
- 首次系统/开发者上下文按协商的ACP系统能力传入。**首版不支持:已有Claude会话中立即生效的系统/开发者上下文变更。** 固定适配器说明恢复后的变更要到下次上下文整理才生效;X按已有公开 resume/load 传送新要求,技术详情注明延迟生效,继续本轮;不宣称本轮已立即采用,不自动整理或重试。实际 RPC 拒绝或缺少公开更新能力仍会明确停止。未声明系统能力的agent会明确报缺项。
39
+ ## 技术详情与交付
32
40
 
33
- `usage_update`的used/size是上下文占用,不能当作本轮输入/输出计费量;远端真实prompt响应usage及Claude quota令牌计数是会话累计,按保存在当前实例/恢复标识中的可信基线减差后进入DSH本轮用量;重复值不重复结算。恢复缺少基线、计数缺失、回退或来源改变时明确不计入该轮,重建可信基线,不能把历史用量算成本轮。
41
+ 技术详情只写官方 profile 下本地私有日志,并由既有技术详情界面展开显示。写入失败不覆盖原始错误、不等待远端投递回执。每个运行环境只记录首次关闭原因;首先观察到的原因不自动等同跨层根因。
34
42
 
35
- 会话模式跨轮保留同一ACP客户端和主机进程;关闭实际agent/session或插件时精确清理。重开恢复优先协商resume,无能力时明确使用load,不静默新建。恢复标识绑定品牌、员工目标、DSH会话和L工作区;复制/分叉不能沿用父远端会话。主机来源沿用D24同实例自动恢复/安全重建。本地来源重开后原MCP socket失效,先由既有S同实例条件流程结束旧broker再重建,不代答旧审批;未获真实清理确认时保留未知,不自动重放。无TTL或隐式淘汰上限。缺私有恢复 pointer 只撤回恢复资格;只有原 slot 不存在已核实,或同 UUID 条件结束与 list 消失均确认,才新建并仅使用官方本次接纳的输入 ID。纯发送前失败经确认清理后不永久封住新轮;真实输入送达未知、dirty 或清理未知仍阻断重放。
43
+ 工程验证、独立审查、固定包摘要及实际设备验收分别记录在 `docs/evidence/2026-10-24-X-executor-readiness/` 和项目 X 回执中。插件不修改 DSH 核心,不添加启动器或自定义 profile。
36
44
 
37
- Codex单次模式首版仅文本,不转接中途审批;图片或系统/开发者上下文需使用会话模式。文件传输、远端VFS与自动同步不在本轮。其他模型不锁定、不拦截、不记录。
38
-
39
- ## 管理员配置
40
-
41
- 在官方 **设置 → 内置插件 → 远程助手参数** 查看和修改本插件全部八项参数。页面走官方ConfigForms与settings.plugins.tab,不新增连接设置节、不改DSH核心。每项列明默认值、范围、生效和调整后果;固定never及正确性约束明确列为不可关闭。当前profile不可写、服务未就绪或远程Web不支持持久写入时禁写并说明原因。保存携带编辑起点revision,冲突保留草稿、不自动重试;恢复继承值发unset,不写死默认。原生模型Edit卡未增加表单;“打开配置文件”仍可用,但不作为参数可见性的替代。
42
-
43
- | 设置 | 默认 | 范围与用途 |
44
- |---|---|---|
45
- | mode | session | Codex可选session/one-shot,切换后新建会话;Claude固定session |
46
- | acpMaxMessageBytes | 4194304 | 正整数,会话单条消息容量,默认4MiB;超限不截断 |
47
- | brokerMaxFrameBytes | 2097152 | 正整数,主机回传单帧容量,默认2MiB |
48
- | brokerControlMaxBytes | 1048576 | 正整数,主机会话管理回复容量,默认1MiB |
49
- | oneShotSandbox | workspace-write | Codex单次可选read-only/workspace-write/danger-full-access |
50
- | oneShotApproval | never | 当前单次通道无中途交互审批;不代表自动批准 |
51
- | employeeShellKillGraceMs | 1000 | 0至2147483647的整数;取消后外层SSH清理宽限毫秒。取消结果仍未知,不将宽限作为员工端退出证明 |
52
- | employeeHttpMcpPolicy | reject | reject / ignore;新连接生效,默认拒绝原生会采用的本机HTTP MCP;ignore仅剔除会话投影后继续。不改员工配置;stdio按原生规则忽略并可见说明名称 |
53
-
54
- 原六项默认保留;D20新增employeeShellKillGraceMs供管理员调节自己的SSH清理。非法值拒绝,删除覆盖遵循官方配置继承。SSH可执行程序从当前PATH发现,不写死某一系统路径。原始错误码保留在官方失败代码/技术详情,原始stderr、凭据和URL不展开。
55
-
56
- 提供方的中文文案保留已有英文名称及既有locale机制。提供方名称不附状态后缀,由原注册replace更新,不自造刷新或客户端品牌分支。
57
-
58
- ## 安装产物
59
-
60
- 包内已含`dist`中的JavaScript、类型和客户端产物及locale/官方patch,无TypeScript源码、测试、证据或主机诊断脚本。无需postinstall、prepare或下载/编译步骤;依赖使用已固定的公开npm版本并由官方安装器正常解析,不把第三方源码/测试夹入X包。`@deepseek-ai/*`均为已测精确peer,由客户端提供;连接插件L另装。原配置id/settingsNs与两个provider id保持,旧包升级需经官方管理先卸载再装新包,不并装两份X。
61
-
62
- ## 验证范围
63
-
64
- 早期npm准备结果与限制记入源码仓`docs/evidence/2026-10-21-X-npm-prep/`(不进npm包)。0.8.19组合工程结果见`docs/evidence/2026-10-24-X-aw4-0819/RESULT.md`。先前真实emp-a协议诊断及固定三件套GUI是不同轮次,不能代替本次新包安装门。L完整绑定/登录、真实模型、物理断网、HanaMesh及leo E以实际已执行证据为准。主机命令安装来自S,X不修改S仓/安装脚本或登录状态。
65
-
66
-
67
- ## 历史实现记录(0.8.1–0.8.16)
68
-
69
- 以下按版本保留当轮的设置数量、依赖、首红与验收状态;“本轮/当前”均指对应历史轮次。0.8.19当前配置以开头、管理员八项表及末节为准;这些历史工程记录不替代本版产品验收。
70
-
71
- D19(0.8.1):相邻正文增量合成连续文本块,工作区首次说明合入真实回复,按官方持久记录核对后才回报“已记入可核对回复”。这不代表界面已经显示。
72
-
73
- 技术详情由 L 0.7.11 的唯一“远程主机连接”设置节展示,正文只放模型文本。命令目录保留完整描述;未知事件和工具输入输出保留字段、JSON类型及处理结果,未获准原文明确脱敏,数字用量可核对。没有 `remoteConversationDetails:1` 时明确提示“技术详情暂不可用”,本轮不发送模型请求。X 在官方当前 profile 的 `ai-workbench-remote-agent/diagnostics/` 保存私有诊断日志(目录700、文件600、落盘同步);写入/归属/顺序/容量失败中止本轮,不自动重发、换代重投、过期或淘汰。结果未知时只读核对原事件完整回执,未找到仍保持未知。X本轮无新增设置/阈值;L的单事件容量和分页设置在L设置节可见。
74
-
75
-
76
- 0.8.2 登录检查原交付需要 L `~0.7.11`(本统一版peer为`~0.7.20`),失败来源及固定分支保留到 L“登录前技术详情”(`loginDiagnostics:1`),员工正文保持原文。按 L 明确的本品牌 queued/checking/authorizing 状态订阅等待;不以全局checking猜测在途,不新增刷新、轮询、超时或重试。每轮ensureReady仍是合同规定的显式检查,L的新可信结果可以替代旧检查,较早返回不得覆盖它。
77
-
78
- L安全规范的officialReason原串完整保留;旧/不支持格式明确记OFFICIAL_REASON_UNSUPPORTED与字节数/SHA,秘密原文不保存。L0.7.11的LOGIN_INSTANCE_MISMATCH记录通过observedLoginInstanceId与原始login.instanceId保存实际观测ID,事件及connection仍绑定当前可信ID/代次;L技术详情和X私有日志均保留真实双ID,不归一、不清空快照。复合未知官方原因以固定summary完整保存OFFICIAL_REASON_UNSUPPORTED及bytes/SHA,不交原文。X私有原快照先同步落盘,再追加L;ACK未知只读核实原事件,跨代不重写/重发。此版本的工程验证不替代leo员工路径复验,真实故障根因尚未证实。
79
-
80
- 0.8.3 会话恢复:正常关闭客户端保留原broker;重开仅在私有clean检查点、完整ACP消息边界、原broker UUID及官方最新持久回复一致时接续。否则记录原因、独占并确认结束旧会话后新建,正文说明一次;旧审批不代答,按官方当前步骤保留本批全部输入,不重发历史未确认输入。S0.4.10 的实际冻结controlMaxBytes用于分块,心跳/等待严格消费主机公开策略与remainingLeaseMs;没有新增X超时或重试设置。编排00:05决定:0.4.10以前的x/a仅为测试会话,X不接入、不代答也不结束它们,直接新建r会话并说明;旧进程由编排安装S0.4.10时一次性整理。重开续接只对S0.4.10新broker承诺。
81
-
82
- D22阶段耗时进入技术详情;D23文件审批用中文动作,原工具名和会话ID进入技术详情。恢复记录沿官方profile的ai-workbench-remote-agent/recovery,目录700/文件600/fsync,无过期或淘汰。当时产品设置为六项,无新增默认/阈值。含真实S进程的工程测试按文件串行运行,避免多个持久化/编译测试同时争用磁盘;测试观察期限和所有断言不变,工程证据不等于leo验收。
83
-
84
- D21(0.8.5):两个品牌的官方模型菜单从 L 的 `modelCatalogTarget:1` / `getModelCatalogTarget` 取得当前可信员工目标,再只读调用 S 的 `aw-model-catalog --provider codex|claude`。目录按 host-user 作用域展示完整模型与逐模型推理等级,保留远端标识原值;失败显示“无法获取模型列表:原因”,不登录、不创建项目、不返回替代模型。L 必须宣告该正式能力,S 必须安装保护入口;这两项未就绪时不能据组件测试声称菜单可用。
85
-
86
- 每轮先核对目录代次和所选模型,再经 ACP 逐项配置模型及推理等级,收到完整配置确认后才发送输入。Claude 别名每轮须有精确的模型配置成功回执,并由同一员工主机、同一连接代际的目录唯一映射到具体型号。具体型号注明来自主机目录,会话未单独回报;旧恢复记录不作本轮证据。目录缺项、映射不唯一、回执不符或身份/代际变化时不发送输入。所选值、远端确认值及型号来源仅在恢复标识与技术详情保留,插件不向真实回复追加技术参数,确认配置不等于验证推理效果。连接/身份/目录变化清除旧确认;远端清理待定或结果未知时阻止派发,不自动清理重试或另开替代会话。Codex 单次模式当前不能确认此选择,会在发送前明确拒绝。新增设置 0;本轮工程证据、真实只读链路与产品未验项见 `docs/evidence/2026-10-22-X2-D21/`。
87
-
88
- 0.8.5统一包原依赖L `~0.7.13`;0.8.16原对齐L `~0.7.19`;当前0.8.19对齐L `~0.7.20`。D8模型目录双事件长期监听保留;同epoch的recovery提示/失败消息变化不触发执行状态失效,真实实例/epoch/phase/可信目标/登录变化仍失效。完整D9两品牌正文/状态/就绪门呈现按编排00:50允许的范围记下一版,本版不宣称已消费完成;L的connectionMessages.administratorAfterMs仍只由L管理;X本版新增employeeHttpMcpPolicy见末节。
89
-
90
- D18(0.8.6):Codex 需要主机自有 adapter `2.2.2-aw.1` 的明确新建会话上下文政策,官方 CLI 仍为未改的0.160.1。系统/开发者要求仅在新建时生效;恢复时与初建摘要相同则正常恢复且省略新建专用字段,不声称恢复接口会更新指令。要求不同或清空时,在同一真实回复说明“会话要求已变化,已新建 Codex 会话继续处理,原会话仍保留。”,并新建远端承接公开对话,保留旧标识和查询记录;旧/非法初建摘要明确拒绝,不能猜测。
91
-
92
- 新会话承接公开用户/助手文本与核验图片,内部reasoning留在旧记录并记录排除数量,官方offload图片保持占位语义、不重读字节。工具角色、工具块、file和未知类型没有可靠公开投影时明确在新建/发送前拒绝;不序列化内部恢复或工具数据代替正文。新建后重新核对模型/等级并重置用量基线;技术详情只记原因、旧/新标识、摘要及承接范围,不保存系统上下文原文。该政策当前仅Codex,Claude保持上述原策略。新增设置0;证据及主机离线闭包见 `docs/evidence/2026-10-22-X2-D18/DELIVERY.md`。S安装和真实员工路径仍由编排安排。
93
-
94
- 0.8.6仅完成D18与既有恢复的集成,D9完整呈现仍待X后续交付;系统/开发者上下文只支持公开text,非text在任何远端生命周期前明确拒绝。
95
-
96
- ## D20 Claude范围与依赖
97
-
98
- Read/Write/Edit/Glob/Grep由员工DSH同UID后端执行;Bash经L严格SSH到S同代桥再经N员工SSH端点执行,命令正文只走stdin。每次调用核官方会话唯一工作区、L实例/epoch/绑定/目录身份、N真实prepare及S实时target。取消、SSH255或退出证明缺失记录UNKNOWN,不重放。只关闭自己的绑定执行器,不撤其他工作区或设备服务。cwd不是权限根,绝对路径和上级访问遵循真实OS权限;不增加目录白名单。
99
-
100
- 本机执行在每个DSH会话首次用一句“文件和命令在你的电脑上执行”说明;既有0.8.14说明也计为已显示。完整限制每轮记录在技术详情,遇到不支持的操作再明确提示:子代理和harness内部直接工具调用尚未证明可在员工端执行,可能仍在主机;已识别的原生未改道工具/Agent审批拒绝。PDF等二进制读取及后台命令明确不支持,不静默主机代跑。六类组件/MCP/配置转交证明不等于真实Claude原生alias执行或真实员工链路通过。实际Git依赖员工环境中已有Git,缺失会返回实际命令失败,不在主机替代,也不自动安装。
101
-
102
- 本地目前仅支持macOS(arm64/x64);Grep固定携带微软@vscode/ripgrep-universal1.18.0的两架构原字节并核SHA,无员工PATH搜索或安装下载。主机需S0.4.11,N可选peer~0.4.4(缺失明确报能力缺项),L当时~0.7.18,本地接纳与D19工程路径已接,真实员工端门仍开放。无DSH/CLI修改、额外设置节或npm发布。
103
-
104
- ## 合并保留的 Codex D20 路线
105
-
106
- D20(0.8.8开发记录):本地来源的Codex原生文件与命令通过固定官方CLI0.160.1的实验执行环境接口改到员工电脑,cwd来自员工已选择的原生工作区,Git使用本机现有仓库。模型、登录及全局CODEX_HOME助手配置仍由远程主机提供;工作区AGENTS与所测原生子代理跟随员工执行环境。员工执行组件随标准npm依赖安装后自动发现、核版本和SHA;当前只支持已验证的Apple芯片Mac,其他平台明确拒绝,没有PATH替代或让员工手填路径的步骤。
107
-
108
- 本地会话需要N0.4.4正式公共服务、S0.4.11员工SSH桥和自有主机适配器2.2.2-aw.2。S现有aw.1保护安装器不能直接消费aw.2,aw.2保护消费仍须提供方交付。已消费正式L0.7.17本地user-turn品牌接纳:仅实际本轮human输入可建立CAS预期,接纳先于ensureReady的主机状态命令及本轮模型目录;每轮详情sink固定自己的localAcceptanceId,append通过第二参数传递。换轮冲突立即停本轮,不重试或借历史/legacy接纳。本轮主机 aw.2 实装失败,原因是 UNSAFE_MODE_MISMATCH,S 正在修复;Codex 线待主机修复后另验。真实员工端链路仍为NOT_RUN,工程真包消费不代表真实路径或GUI通过。
109
-
110
- 当前明确不支持本地单次模式、断开后的冷恢复/load/fork、快捷命令、主机文件报告及附加MCP/hooks/plugins。主机同路径的启用项目配置、会话层项目发现/信任覆盖也会明确拒绝;配置检查不静默清空或改写原配置。普通原生shell/patch/fs使用所选员工环境,未覆盖的辅助入口保留具体原因到员工回复与技术详情。位置、身份或代次改变只撤回对应执行器,在途结果保持UNKNOWN,不自动重放。新增产品设置0,执行通道和桥队列沿已有`acpMaxMessageBytes`控制容量。当前工程进度、首红和开放门见`docs/evidence/2026-10-23-X2-D20-088/STATUS.md`。
111
-
112
- 0.8.10仅增加公开插件参数页,不改变上述七项执行语义。mode/ACP/frame/control/grace的修改不改变运行中当轮;保留会话下一轮配置签名不一致会停止,须新建会话。ACP容量还在下一次独立目录查询读取新值。sandbox与approval仅单次通道适用,当前单次仍明确拒绝执行。GUI与真实链路门仍NOT_RUN;本次由编排在 leo 验证 Claude 线、设置界面和 D24 重开,Codex 线另验。完整逐项盘点见 docs/evidence/2026-10-23-X-settings-0810/INVENTORY.md。
113
-
114
-
115
- ## 0.8.11 模型目录与选择
116
-
117
- 不提供推理档位的模型省略官方 reasoning 元数据;单项资料不合法时只剔除该项,在官方“设置 → 模型”页按模型名称显示中文原因和诊断代码。整组查询失败在菜单显示中文,可到同一设置页核对技术原因。没有会话的目录查询不写入其他会话的技术详情。
118
-
119
- 只修正属于本插件的旧版或失效全局默认:Claude 只取目录 value 为 default 的唯一别名,resolvedModel 原值包括 null 都保留;Codex 只取 source.isDefault 为 true 的唯一项。有效的员工明确选择保持不变。没有唯一默认时不选首项,发送前提示“请先选择模型”。官方默认设置只有字符串 model、没有 nullable 清除接口;此时写入空字符串,原生界面可能显示提供方加斜线,而无实际模型选中。通过官方 configEditor.entries/edit 找到唯一默认模型设置,在配置锁内重新核对员工选择后才更新;不使用缺少条件保护的 saveSelection。保存失败或选择已变化时在官方模型设置页明示。全局默认也会影响没有独立选择的旧空白会话,已有持久模型选择的老会话不改。
120
-
121
- 老会话存着 remote 时,请在该会话的模型菜单重新选择当前目录中的型号。插件不会替员工改写会话选择。
122
-
123
- 官方 loop 在 prepareCall 成功后才把原话追加到对话正文。插件不能更改此核心顺序;由实际 X 准备入口标记、同一错误对象及同一信号可核对的零发送准备失败,会在官方 agent 空闲后,把原话(原 ID、附件及顺序)恢复到官方持久待发送队列,核验落盘后在模型设置诊断中说明;员工可在原生输入区待发送队列查看。恢复本身不会唤醒、重试或再发模型请求;更换模型后由员工手动发送,新的外部输入仍可能触发官方队列消费。取消、卸载、未知错误、已进入模型派发、无法证明来自 X 的官方外围元数据/effort 校验错误,以及早于公开 pre-step 的附件准入/assembly 失败不盲目重排。没有承诺把这些失败直接补成正文气泡;这一能力位于官方 loop 的核心追加顺序,插件的最佳可用结果是持久待发送队列。恢复/持久化不能确认时显示明确诊断。
124
-
125
- 工程验证使用 emp-a 实际完整 Claude 13 项及 Codex 7 项只读目录,交官方 rc.2 校验;不代表本版 leo 菜单、输入显示或真实模型执行已经验收。新增设置、上限、阈值为 0;七项参数沿用 0.8.10。
126
-
127
-
128
- 0.8.11 同时包含 main f8cddc5 的旧来源一次确认:先确认唯一原生工作区、原始输入与连接代次,再按 L0.7.17 公开 CAS 选择本机来源,接纳后继续原本这一轮。不会自动保留主机作为替代,也不会重发旧任务。确认前后失败的私有耐久记录随本版提供;L 可见的前置诊断入口尚待 L0.7.18 后续交付,本版不宣称已显示该详情。
129
-
130
-
131
- 0.8.12目录诊断修复:入口为“设置 → 模型 → 模型目录诊断”,官方既有 settings.models.footer 公开扩展位直接显示;“内置插件 → 远程助手参数”也可只读查看,即使参数命名空间暂未提供也保留入口;参数编辑使用当前插件公开Loader entry id对应的官方ConfigForms。该页只读本机记录,刷新不查询主机、不登录、不发送待发送原话。模型页原错误行仍通过公开提供方目录发布,诊断数据不再调用directory.replace或发布适配器拓扑变化;changed只负责真实连接/目标代次变化,菜单提示指向上述实际入口。
132
-
133
- 每次目录SSH保独立事件ID、品牌、UTC起止、耗时、PID、L实例/epoch/phase、严格L argv/目标/known_hosts/ProxyCommand、退出码/信号、完整脱敏stderr与原字节数/SHA256、stdout字节数/SHA及主机typed错误;不记录凭据或整份模型目录。日志在官方profile的 `ai-workbench-remote-agent/catalog-diagnostics/<eventId>-started.json` 与 `-closed.json`,700目录/600文件、fsync;无自动过期,最新两品牌在界面可展开,旧调用保留不可变历史。容量沿现有`acpMaxMessageBytes`,超限停止并标记stderrComplete=false,UTF-8替换另显式标记,未返回部分模型;保存失败明确显示仅内存,不冒称耐久。旧0811丢失的stderr无法还原。同品牌、instanceId、epoch只合并仍在进行的查询;完成后不缓存,身份/代际/可信目标改变即作废。调用方各持独立lease/取消与错误身份,一个取消不会取消其他等待者;全员取消才撤销该次查询,取消中的旧进程结束前同作用域新调用等待清理。登录检查的显示变化不会取消无需登录的host-user目录。此次没有增加超时、重试、SSH连接复用或产品设置;不等于255、Claude主机错误及N层根因已修复,也未进行leo GUI验收。
134
-
135
- 0.8.14 不把空菜单、非穷举 picker、可选 UI category/label 或同值配置通知当作额外发送门槛;每轮仍要求可靠模型入口与 fresh exact setter ACK。本轮完成后的配置变化只记录 warning,保留真实回复与 finish,并明确未获单独的实际执行型号回报。同一身份、代际与可信目标的 needCode/诊断变化只记 info;真实身份、代际、目标或能力失效仍撤回。每次关闭/取消保留 caller、字段前后值和首次观测原因(不等于根因)。新增配置、阈值、超时、重试为 0。
136
-
137
- 0.8.16 不新增 Config、默认值、阈值、超时或重试。首因可见、旧代不重投、实际选择与绑定一致属于不可关闭的正确性不变量。目录完成结果不用于后续请求缓存;活跃租约仅保留更新观测的选择有效性证据,释放即撤登记。断连/错代仍保留原详情信封及未确认状态,仅按旧合同读 receipt 核验。`unconfirmed-<eventId>.json` 私有记录追加是否尝试及失败阶段/固定码,不能当作 L 的 ACK;员工可见原因沿官方错误消息,无新增面板。
138
-
139
- ## 本机执行的核验位置(继承0.8.18,不可关闭)
140
-
141
- L接纳每轮真实输入时核对实际目录和N端点/代次。X只在该代执行通道open时向S核对一次target,并继续验证员工执行器固定SHA和官方版本;原生注册发生在open完成之后。之后broker输入及每个native RPC只核对既有内存连接、工作区绑定和接纳事实,撤销来自已订阅的L连接/位置、N网络事件和执行SSH关闭。N实例/代次改变会重新接纳并建立新通道,旧流不会跨代迁移。
142
-
143
- 这属于执行位置与已接纳输入的一致性不变量,没有关闭设置。已取得owned keyed live的会话失败先交还官方会话并显示“正在确认主机清理”,详情落盘及条件kill/list随后在原清理promise进行;preflight、resolve、未取得live、无key/单次模式及detach/shutdown保持原await语义;同一会话仍由原cleanupFailure/未知送达门阻止不安全重发。没有新增超时、重试、模型限制或中止检查。技术详情事件EMPLOYEE_EXECUTION_VALIDATION_POLICY列出同一核验位置。
144
-
145
-
146
- ## 0.8.19 / aw.4 本机 MCP 与失败原因
147
-
148
- 按 Codex 0.160.1 原生层合并和 HTTP/header 能力过滤处理员工 MCP。stdio(例如 node_repl)不拒绝,显示“已忽略本机 stdio MCP: 名称”;不转发其 command、args、env 值,不修改员工文件。真正的 HTTP 条目使用具名设置 employeeHttpMcpPolicy:默认 reject 保留 AW_EMPLOYEE_EXECUTOR_MCP_UNSUPPORTED;ignore 只在会话投影剔除后继续。管理员可在现有远程助手参数页及官方配置文件入口编辑,范围、默认值、生效与后果均可见。此项在新连接冻结,修改不增加中止当前轮或旧会话的条件。stdio 的过滤来自固定原生协议,不是可调阈值。
149
-
150
- aw.4 仅在客户端声明 closeReason:1 后发送白名单 close.reason;旧端形状保持兼容。新版 X 接到明确远端 close 后释放员工 carrier,保留在途主机 session/new 回应,再由原本收尾释放 broker;非预期 EOF 仍按既有路径关闭。技术详情分别显示运行原因、首次观察和远端固定关闭原因;它们不因详情保存或清理失败而被替代。成功 connection-confirm 按阶段汇总次数和耗时,失败仍即时记录;实际确认操作不减少,无新增超时、重试、慢阈值或中止检查。
151
-
152
- 03:44 现场的 stdio 首因仍属强推断,主机当时原码没有落盘;离线回放不能补造现场证据。aw.4 由编排审后交 S 安装,客户端固定包不由 X 发布;真实 leo Sol/Luna“你好”及写文件验收单独记录,不能用离线或包门代替。
45
+ 远程助手参数页只显示官方 ConfigForms 当前值,不提供保存、放弃或恢复继承值;修改请使用 DSH 官方 Config“打开配置文件”入口。
package/dist/acp.d.ts CHANGED
@@ -3,22 +3,28 @@ import * as stable from '@agentclientprotocol/sdk';
3
3
  import * as acp from '@agentclientprotocol/sdk/unstable';
4
4
  import { NeedError, type Need } from './remote.ts';
5
5
  import type { BrokerTransport } from './broker.ts';
6
- import { StageTiming } from './stage-timing.ts';
7
- import { type AcpRecovery } from './recovery.ts';
8
6
  import { type SanitizedObservation } from './conversation-details.ts';
9
7
  import { type ModelConfigurationSnapshot } from './model-configuration.ts';
10
8
  import type { EmployeeRouting } from './employee-relay.ts';
11
9
  export type ApprovalOutcome = 'allowed-once' | 'rejected' | 'cancelled' | 'unavailable';
12
10
  export interface AcpHooks {
13
11
  closeDiagnostics?: CloseDiagnostics;
14
- timing?: StageTiming;
15
12
  onUpdate?: (notification: acp.SessionNotification) => void;
16
13
  onResponse?: (response: acp.PromptResponse) => void;
17
14
  approve?: (request: acp.RequestPermissionRequest, signal?: AbortSignal) => Promise<ApprovalOutcome>;
15
+ /** A grant belongs to the exact official permission generation that asked it. */
16
+ approvalGuard?: () => {
17
+ signal: AbortSignal;
18
+ isCurrent(): boolean;
19
+ };
20
+ promptGuard?: () => {
21
+ signal: AbortSignal;
22
+ isCurrent(): boolean;
23
+ };
18
24
  onNeed?: (need: Need) => void;
25
+ onEmployeeNotice?: (notice: string) => void;
19
26
  onDetail?: (detail: Readonly<SanitizedObservation>) => void;
20
27
  broker?: BrokerTransport;
21
- onEmployeeInfo?: (summary: string) => void;
22
28
  employeeExecution?: (params: unknown, signal?: AbortSignal) => Promise<Record<string, unknown>>;
23
29
  }
24
30
  export interface EmployeeExecutionMeta {
@@ -27,7 +33,6 @@ export interface EmployeeExecutionMeta {
27
33
  workspaceId: string;
28
34
  cwd: string;
29
35
  acpMaxMessageBytes: number;
30
- httpMcpPolicy?: 'reject' | 'ignore';
31
36
  }
32
37
  export interface AcpStartContext {
33
38
  systemPrompt?: string;
@@ -56,6 +61,7 @@ export declare class AcpSession {
56
61
  private codexNewSessionOnly;
57
62
  private creatingReplacement;
58
63
  private employeeMeta?;
64
+ private employeeRouting?;
59
65
  private employeeNegotiated;
60
66
  private configuration?;
61
67
  private configRevision;
@@ -63,6 +69,12 @@ export declare class AcpSession {
63
69
  private selecting;
64
70
  private pendingConfigurations;
65
71
  private dispatchedPrompts;
72
+ private readonly promptPermissions;
73
+ private nativeModeRevision;
74
+ private nativeModeId?;
75
+ private nativeModeSource?;
76
+ private selectedPermission?;
77
+ private validateNativePermission;
66
78
  get promptDispatchCount(): number;
67
79
  get modelConfiguration(): ModelConfigurationSnapshot | undefined;
68
80
  get models(): readonly import("./model-configuration.ts").ModelCatalogValue[];
@@ -71,16 +83,18 @@ export declare class AcpSession {
71
83
  private resetConfiguration;
72
84
  private lifecycleConfiguration;
73
85
  selectModel(model: string, effort?: string, signal?: AbortSignal): Promise<ModelConfigurationSnapshot>;
74
- assertModelSelection(model: string, effort?: string): void;
86
+ /** The permission selector controls real privilege, independently of model UX.
87
+ * Re-apply on every dispatch/restoration; a historical value is not an ACK.
88
+ * ACP permits a mode change while a prompt is active. */
89
+ selectPermissionMode(mode: string, signal: AbortSignal | undefined, brand: 'claude' | 'codex'): Promise<void>;
75
90
  private reports;
76
- private reportingFailure;
77
- private readonly timing;
78
91
  private stage;
79
92
  get diagnostics(): readonly Readonly<SanitizedObservation>[];
80
93
  private detail;
94
+ private employeeNoticeNames;
95
+ private employeeNoticeUnshown;
81
96
  private employeeInfo;
82
97
  private need;
83
- private checkReporting;
84
98
  constructor(transport: acp.Stream | acp.AgentApp | stable.AgentApp, hooks: AcpHooks);
85
99
  /** A rejected request on an already-closed SDK never reaches this write.
86
100
  * Once a transport write starts, failure remains delivery-unknown. */
@@ -89,18 +103,11 @@ export declare class AcpSession {
89
103
  get id(): string | undefined;
90
104
  get capabilities(): Readonly<acp.AgentCapabilities>;
91
105
  get startMethod(): AcpStartMethod | undefined;
92
- get checkpoint(): AcpRecovery | undefined;
93
- restore(cwd: string, saved: AcpRecovery, context: AcpStartContext, verifiedSameContext?: boolean): void;
94
106
  validatePrompt(prompt: acp.ContentBlock[]): void;
95
- validateContext(context: AcpStartContext): void;
96
- validateNewSessionContext(context: AcpStartContext): void;
97
107
  setHooks(hooks: AcpHooks): void;
98
108
  get closed(): Promise<void>;
99
- private validateNewContext;
100
109
  start(cwd: string, resumeId?: string, signal?: AbortSignal, context?: AcpStartContext, prompt?: acp.ContentBlock[]): Promise<string>;
101
110
  /** Codex context is immutable after creation; keep the old remote session intact. */
102
- newContextSession(context: AcpStartContext, signal?: AbortSignal): Promise<string>;
103
- updateContext(context: AcpStartContext, signal?: AbortSignal, force?: boolean): Promise<AcpStartMethod | undefined>;
104
111
  prompt(input: string | acp.ContentBlock[], signal?: AbortSignal): Promise<acp.StopReason>;
105
112
  close(cause?: CloseCause, error?: Error): void;
106
113
  }