@dsh-enhanced/coding-subscription-provider 0.1.3 → 0.1.5

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.
package/README.md CHANGED
@@ -1,255 +1,101 @@
1
1
  # @dsh-enhanced/coding-subscription-provider
2
2
 
3
- 将同一台机器、同一 OS 用户已经登录的 Codex、Claude Code、Cursor Agent 与 Grok Build 注册为 DeepSeek Harness 可选择的模型 provider。默认情况下,四条 route 会在经过 live Agent session 工作区校验的调用中,通过官方 CLI 的无 prompt 控制面观察当前账号可见模型;Codex、Claude 与 Grok 还会暴露逐模型 reasoning effort。调用消耗哪个套餐、是否允许额外用量,仍由对应官方客户端和账号决定。
3
+ 把同一台机器、同一 OS 用户已经登录的 Codex、Claude Code、Cursor Agent 与 Grok Build 注册为 DeepSeek Harness provider。发布 bundle 默认让 Codex 直接使用本机 ChatGPT/Codex 订阅的 Responses 通道;Codex CLI 是显式 fallback,其他 provider 使用各自的官方 CLI。
4
4
 
5
- 这是一个实验性的 **LLM 兼容层**。默认 `cli` transport 会把完整对话序列化为一次本地 coding-agent 任务,只取回最终助手文本;Codex 另有必须显式开启的 `direct-responses` transport,可绕过 Codex CLI / App Server,流式返回文本、原生 function tool call,并在 attachment service 可用时发送图片。现有 API Key / OpenAI-compatible provider 是另一条路径,本插件不重复实现。
5
+ 这是实验性的订阅兼容层。实际消耗哪个套餐、是否允许额外用量,仍由对应账号和上游服务决定。
6
6
 
7
- ## 当前 provider
7
+ ## 能力契约
8
8
 
9
- | DSH provider | 默认命令 | 成熟度 | 默认模型 |
10
- |---|---|---|---|
11
- | `codex-subscription` | `codex` | stable | `default` |
12
- | `claude-subscription` | `claude` | experimental | `default` |
13
- | `cursor-subscription` | `cursor-agent` | beta | `default` |
14
- | `grok-subscription` | `grok` | beta | `default` |
15
-
16
- 在默认 CLI 模式中,`default` 不会传 `--model`,因此保留官方 CLI 当前选择。`listModels` / `resolveModel` 始终是无进程的纯读取:启动后先显示配置中的静态别名;一次经过 live session 校验的调用观察到 CLI 目录后,再合并该 5 分钟缓存。不需要把每个模型手写进配置。目录是提示性的发现信息,不会阻止用户配置新模型,最终可用性仍由官方 CLI 校验。Codex direct 模式不启动 App Server、也不发现动态目录;其中 `default` 会明确映射到 `codex.directModel`。
17
-
18
- 安全默认值只启用 Codex 与 Cursor。Claude 因第三方分发政策边界默认关闭;Grok 因本地 per-model API Key 可覆盖 OAuth,默认关闭并要求用户先核验后显式确认。四条 connector 都包含在插件中。
19
-
20
- ## 快速开始(CLI transport,5 步)
21
-
22
- 以启用 Codex 为例,最短路径如下:
9
+ 模型 route 只负责提供推理 token,不是能力授权边界。同一 Agent/preset 下,所有模型都获得完全相同的 DSH 工具和 skill catalog,并共用 ToolRuntime、Policy、审批与审计;切换模型不会增删能力。
23
10
 
24
- 1. **登录官方 CLI**(在运行 DSH 的同一 OS 用户下):`codex login status` 应输出 `Logged in using ChatGPT`。没登录就先 `codex login`。
25
- 2. **安装插件**:`dsh plugin --profile web add @dsh-enhanced/coding-subscription-provider`。
26
- 3. **确认命令与工作目录**:`codex --version`。命令名不同就在 `~/.dsh/profiles/web/cordis.patch.yml` 里把 `codex.command` 改成实际路径;同时把 `cwd` 指向要处理的 Git 仓库(相对路径按 DSH 进程启动目录解析)。
27
- 4. **开启并落盘配置**:在配置中保持 `codex.enabled: true`(默认已开),执行 `dsh --profile web --dump-config` 检查生效值。
28
- 5. **选择模型与 effort**:首次可直接选配置中的 `default` 沿用 CLI 当前模型;经过一次 live-session 调用后,模型选择器会合并本次安全观察到的模型及 reasoning effort。目录初始化发生在 session/workspace 校验之后、提交 prompt 之前;真实生成调用会消耗你的订阅额度。
11
+ Codex direct 使用原生 function call,CLI route 使用严格的 `dsh-tool-calls/v1` 信封,但两者都只把工具请求交还 DSH Host。provider 自身不执行工具,也不能绕过策略。
29
12
 
30
- Claude / Grok 默认关闭,启用前请阅读下文「订阅认证优先」与「Claude 合规提示」。遇到报错先看下文「排查」表。
13
+ ## Provider
31
14
 
32
- 如果只使用显式 opt-in 的 Codex `direct-responses`,生成和模型目录都不会启动 Codex CLI/App Server,也不要求 `codex` 可执行文件存在;但运行 DSH 的同一 POSIX 用户必须已经拥有安全的 `CODEX_HOME/auth.json` 或 `~/.codex/auth.json`。这通常由官方 Codex 登录流程产生,插件自身不提供登录 UI。
33
-
34
- ## 安装
15
+ | DSH provider | 发布 bundle 默认 transport | 默认模型 | 状态 |
16
+ |---|---|---|---|
17
+ | `codex-subscription` | `direct-responses`(CLI fallback: `codex`) | `default` → `gpt-5.6-terra` | route stable;private wire 实验性 |
18
+ | `claude-subscription` | `claude` CLI | `default` | experimental,默认关闭 |
19
+ | `cursor-subscription` | `cursor-agent` CLI | `default` | beta |
20
+ | `grok-subscription` | `grok` CLI | `default` | beta,默认关闭 |
35
21
 
36
- CLI transport 先分别安装需要的官方客户端,并由当前 OS 用户在客户端中完成登录。Codex direct 可跳过客户端安装,但仍要求上述安全 auth 文件。插件不会替用户打开登录页或接管初始登录:
22
+ 安全默认值只启用 Codex 与 Cursor。Claude 存在第三方分发政策边界;Grok 需要用户先确认没有 per-model API Key 覆盖订阅登录,再显式启用。
37
23
 
38
- ```sh
39
- codex login status
40
- claude auth status --json
41
- cursor-agent status
42
- grok inspect
43
- grok models
44
- ```
24
+ ## 快速开始
45
25
 
46
- 随后安装 DSH bundle:
26
+ 1. 在运行 DSH 的同一 OS 用户下完成 ChatGPT/Codex 登录。Codex direct 需要安全的 `CODEX_HOME/auth.json`,未设置 `CODEX_HOME` 时读取 `~/.codex/auth.json`。
27
+ 2. 安装并检查 bundle:
47
28
 
48
29
  ```sh
49
30
  dsh plugin --profile web add @dsh-enhanced/coding-subscription-provider
50
31
  dsh --profile web --dump-config
51
32
  ```
52
33
 
53
- 只需安装准备使用的客户端;其余 provider 可以在配置中关闭。若系统上的命令名不同,应配置准确的可执行文件路径。例如某些 Grok Build 安装可能暴露 `agent`,但这个名称也可能属于 Cursor 或其他程序,必须先用 `--version` 核实,不能盲目复用。
34
+ 3. 在 provider/model 选择器中选择 `codex-subscription` / `default`;它会使用 `gpt-5.6-terra`。真实调用会消耗订阅额度。
54
35
 
55
- ## 配置
36
+ 发布 bundle 已配置 `codex.transport: direct-responses`,不要求 `codex` 可执行文件,也不会启动 CLI 或 App Server。插件不提供登录 UI;需要重新登录时可单独使用官方客户端。
56
37
 
57
- 下面展示完整配置。Cordis patch 覆盖不是深合并;修改嵌套 provider 时,建议保留该 provider 的完整对象。
38
+ ## 最小配置
39
+
40
+ 通常无需覆盖默认配置。若要显式固定 Codex direct:
58
41
 
59
42
  ```yaml
60
- - id: dsh-enhanced-coding-subscription-provider
61
- name: '@dsh-enhanced/coding-subscription-provider'
62
- config:
63
- cwd: .
64
- timeoutMs: 600000
65
- authProbeTimeoutMs: 10000
66
- maxAuthProbeBytes: 32768
67
- killGraceMs: 3000
68
- maxLineBytes: 262144
69
- maxOutputBytes: 2097152
70
- maxStderrBytes: 32768
71
- maxPromptBytes: 131072
72
- extraEnvNames: []
73
- logDiagnostics: false
74
- codex:
75
- enabled: true
76
- transport: cli
77
- command: codex
78
- models: [default]
79
- maxTurns: 1
80
- directModel: gpt-5.6-sol
81
- directReasoningEfforts: [low, medium, high, xhigh, max, ultra]
82
- directDefaultReasoningEffort: low
83
- maxRequestBytes: 33554432
84
- maxRequestImageBytes: 25165824
85
- claude:
86
- enabled: false
87
- command: claude
88
- models: [default]
89
- maxTurns: 1
90
- cursor:
91
- enabled: true
92
- command: cursor-agent
93
- models: [default]
94
- maxTurns: 1
95
- grok:
96
- enabled: false
97
- command: grok
98
- models: [default]
99
- maxTurns: 1
100
- userVerifiedSubscription: false
43
+ codex:
44
+ enabled: true
45
+ transport: direct-responses
46
+ directModel: gpt-5.6-terra
101
47
  ```
102
48
 
103
- 如需试用 Codex 私有直连,只把 Codex 的 transport 显式改为下列值;不要把它当成默认或稳定路径:
49
+ 若私有 Responses 协议漂移或当前平台不支持 direct,可显式回退到 CLI:
104
50
 
105
51
  ```yaml
106
52
  codex:
107
53
  enabled: true
108
- transport: direct-responses
54
+ transport: cli
55
+ command: codex
109
56
  models: [default]
110
- directModel: gpt-5.6-sol
111
- directReasoningEfforts: [low, medium, high, xhigh, max, ultra]
112
- directDefaultReasoningEffort: low
113
- maxRequestBytes: 33554432
114
- maxRequestImageBytes: 25165824
115
- ```
116
-
117
- - `codex.transport` 默认为 `cli`,维持官方 Codex CLI 的认证、沙箱和模型目录路径。只有显式设置为 `direct-responses` 才会启用下文说明的私有 Responses 协议;该模式绕过 Codex CLI 与 App Server,`command`、`maxTurns` 和 CLI 动态模型目录不参与生成。
118
- - `codex.directModel` 是 direct 模式选择 `default` 时发送给后端的具体模型 id;显式选择其他模型时仍使用所选 id。这个默认值只是本插件的实验性配置,不代表私有后端长期保证该模型可用。
119
- - `codex.directReasoningEfforts` 是 direct route 向 DSH 暴露的可选 effort 列表,`codex.directDefaultReasoningEffort` 是调用未指定 effort 时由 DSH 物化的默认值,并且必须属于前一列表。当前默认暴露 `low` 到 `ultra`;私有 wire 会按官方 Codex 当前行为把 `ultra` 规范化为 `max`,这同样不是稳定承诺。
120
- - `codex.maxRequestBytes` 限制序列化后的完整 direct 请求(包括 base64 图片),`codex.maxRequestImageBytes` 限制请求内累计图片负载,且后者不能大于前者。默认分别为 32 MiB 与 24 MiB;两项只影响 direct 模式。
121
- - `cwd` 是 CLI 子进程允许使用的工作目录,也是 direct 模式的本地 session 授权边界;相对路径按 DSH 进程启动目录解析,不是按 Web 会话显示的项目目录解析。对每个**带 prompt 的生成调用**,插件只接受 DSH Agent Loop 在本进程标记且深冻结的请求,使用其 live `sessionId` 从 host `sessions` 服务取 header cwd,对二者做 `realpath` 后要求与配置 cwd 完全相等。缺失、过期、伪造、未标记、路径不匹配或 symlink escape 都会在认证、网络请求或 CLI 启动前以 `LOCAL_SESSION_CWD_REQUIRED` 拒绝;CLI 模式收到的是该 canonical session cwd。Codex `exec` 要求这里是 Git 仓库;插件不会静默追加 `--skip-git-repo-check` 绕过该检查。Web profile 可在 `~/.dsh/profiles/web/cordis.patch.yml` 中覆盖此值,修改后需重启 DSH。
122
- - `listModels` / `resolveModel` 没有 `GenerateOptions` 或 live session identity,因此只读取配置和已经安全观察到的内存缓存,**绝不做认证、目录发现或启动子进程**。目录刷新只发生在 `stream` 已校验 live session、canonical cwd 并完成认证之后;认证后还会再次读取 session,阻止过期/替换 session 启动目录进程。
123
- - `timeoutMs` 是单次调用总时限;取消或超时先发 `SIGINT`,经过 `killGraceMs` 再发 `SIGKILL`,再等待一个等长窗口确认 `close`。仍未关闭时请求以 `teardown=timed-out` 错误结算,保留原始 abort/timeout 分类,并在后台继续引流并跟踪迟到的 `close`;不会伪称子进程已回收。
124
- - `authProbeTimeoutMs` / `maxAuthProbeBytes` 限制 CLI 模式 live-session 调用中的认证状态检查和无 prompt 模型目录发现;探针输出不会进入日志或模型响应。Codex direct 请求使用总调用的 `timeoutMs`,不运行这些 CLI 探针。
125
- - 三项输出限制和 prompt 限制都按 UTF-8 字节计算。
126
- - `maxTurns` 目前只映射到 Claude Code 和 Grok Build;Codex/Cursor 不会收到它们不支持的参数。
127
- - `models` 是启动时即可展示的静态别名列表;CLI route 会在一次安全调用观察目录后合并动态条目,Codex direct 模式只使用静态别名。通常保留 `[default]` 即可。
128
- - 启用 Grok 前先通过 browser/device flow 完成 `grok login`,确认 `grok models` 报告已登录,再用 `grok inspect` 确认所选模型没有 `api_key` / `env_key` override;随后同时设置 `enabled: true` 与 `userVerifiedSubscription: true`。`inspect` 本身不报告 active credential,该确认是本机用户的显式声明,不是插件读取凭据后的推断。
129
- - `command` 是单个命令名或路径,CLI 模式固定参数数组并使用 `shell: false`,不接受 shell 片段;Codex direct 模式不使用该字段。
130
- - `extraEnvNames` 只填写要额外继承的环境变量名,值只能来自启动 DSH 的环境,配置中不能直接写 secret。
131
- - `logDiagnostics` 默认只提示“CLI 写入了 stderr”,不记录内容;显式开启后才记录经过常见 key/token/邮箱规则脱敏的末尾 2,000 字符,仍不适合高敏感环境。独立于该开关,插件始终会在每次调用结算时记录一条**无凭据**的生命周期诊断(阶段、prompt 是否提交、结果分类、teardown 状态、exit/signal,以及能可靠测得的毫秒级延迟指标),成功走 `debug`、非成功走 `info`。该行不含 prompt、argv、stderr 原文或认证凭据。
132
-
133
- 加载后,在 DSH 的 provider/model 选择处选择上表中的 provider 和模型即可。真实订阅调用会消耗额度,自动化测试不会使用真实账号。
134
-
135
- ### 订阅认证优先
136
-
137
- CLI 子进程默认只继承运行客户端所需的最小环境,例如 `PATH`、`HOME`、XDG、代理/CA、`CODEX_HOME`、`CLAUDE_CONFIG_DIR` 和 `GROK_HOME`。以下 API 凭据即使写入 `extraEnvNames` 也不会传递:
138
-
139
- ```text
140
- CODEX_API_KEY
141
- OPENAI_API_KEY
142
- ANTHROPIC_API_KEY
143
- ANTHROPIC_AUTH_TOKEN
144
- CLAUDE_CODE_OAUTH_TOKEN
145
- CURSOR_API_KEY
146
- XAI_API_KEY
147
57
  ```
148
58
 
149
- 已知的自定义 base URL、Claude Bedrock/Vertex/Foundry 切换变量也会被排除;上述变量即使出现在 `extraEnvNames` 也不会传递。插件在每次调用前或调用初始化阶段执行 fail-closed 门禁:
150
-
151
- - Codex CLI 模式只有 `codex login status` 精确报告 `Logged in using ChatGPT` 才运行,并以 `--ignore-user-config` 禁止真实生成被本地配置改路由到其他 API。模型发现会另启短生命周期 App Server,强制 `model_provider="openai"`,只执行 `initialize` 与 `model/list`,不会创建 thread 或 turn。
152
- - Codex direct 模式不运行 `codex login status` 或 App Server,而是安全读取 `CODEX_HOME/auth.json`;未设置 `CODEX_HOME` 时读取 `~/.codex/auth.json`。认证路径在启动时固定为绝对路径;文件及其父目录必须由当前 POSIX 用户拥有,父目录不能向 group/other 开放写权限,文件必须是单链接普通文件、不能是 symlink、不能向 group/other 开放权限,并且 `auth_mode` 必须是 `chatgpt`。读取有字节上限并校验前后元数据一致。凭据只用于固定的 Codex Responses 请求;插件不会向调用方暴露 bearer token。
153
- - direct 请求使用与固定官方快照核对过的 `session-id`、`thread-id` 和 `x-client-request-id` 兼容头;originator/version/user-agent 属于本插件固定的 reconstruction dialect 标识,并不冒充官方二进制逐字节相同的 OS/终端 user-agent。
154
- - direct 请求收到 401 时,插件会先重新读取磁盘以复用其他进程已刷新的 session;仍是原 token 时,才向固定 OAuth token endpoint 发起一次 refresh。同一进程内相同认证身份共享一次刷新;写回采用元数据 CAS、同目录 `0600` 临时文件、`fsync` 和原子 rename。随后原请求只重试一次;其他 HTTP 状态不会触发刷新。插件自身并发写受 CAS 保护,但无法强制不遵循同一约定的外部 Codex 进程参与原子比较写,因此跨进程冲突处理是 best-effort。错误与诊断不记录 token。
155
- - Claude 只有 `auth status --json` 报告 first-party `claude.ai` / `oauth_token` 才运行;目录发现只发送 Agent SDK `initialize` 控制帧并读取 `models`,不发送 user message。这是订阅 OAuth 来源的强启发式,不代表插件能证明具体套餐 entitlement。
156
- - Cursor 先要求 `status` 成功,再以 `--list-models` 发现目录;本次生成仍要求 `stream-json` 的 `system/init.apiKeySource` 为 `login`,`env`、`flag` 或缺失字段都会中止。
157
- - Grok 目录发现只发送 ACP `initialize` 并读取 `_meta.modelState`,不创建 session 或提交 prompt。headless 生成暂时无法独立证明 effective credential,因此仍必须由本机用户核对配置并设置 `userVerifiedSubscription: true`。
59
+ CLI fallback 要求同一 OS 用户已经执行 `codex login`,且 `codex login status` 精确报告 ChatGPT 登录。Windows 当前必须使用 CLI,因为 direct auth 的所有权、链接数和权限检查依赖 POSIX 语义。
158
60
 
159
- 认证不满足时返回 `SUBSCRIPTION_AUTH_REQUIRED`,不会静默改走 API provider。API Key 调用继续使用 DSH 已有的独立 provider。
160
-
161
- > **兼容性警告:** `direct-responses` 使用的是 ChatGPT/Codex 当前的非公开、私有风格协议,不是 OpenAI 面向第三方承诺稳定性的公开 API。endpoint、认证文件、header、模型 id 与 SSE 事件都可能在没有兼容期的情况下变化或失效;该模式必须视为可随时中断的实验功能,不能宣传为 OpenAI 官方支持的集成。默认 `cli` 不依赖这条私有协议。
162
-
163
- ## 默认执行策略
164
-
165
- - Codex CLI(默认):`codex exec --json --ephemeral --ignore-user-config --sandbox read-only`;选择具体模型时追加 `--model <id>`,选择 effort 时追加 `--config model_reasoning_effort="<effort>"`。
166
- - Codex direct(显式 opt-in):不启动 CLI/App Server,固定向 `https://chatgpt.com/backend-api/codex/responses` 发送有界 SSE 请求。DSH tool schema 会映射为原生 function tools;插件只保留并返回后端给出的 tool name、原始 arguments 与 `call_id`,**不会自行执行工具**。实际工具调用由 DSH Agent Loop 交给 Policy 鉴权后执行,再以相同 `call_id` 的 tool result 进入下一轮模型请求。开启 attachment service 时可把 DSH image block 投影为图片输入;没有该服务时 provider 只声明 text。
167
- - Claude Code:`-p --output-format stream-json --include-partial-messages --safe-mode --permission-mode dontAsk --tools "" --no-session-persistence`;选择 effort 时追加 `--effort <level>`。
168
- - Cursor Agent:`--print --output-format stream-json`,不传 `--force`。
169
- - Grok Build:`-p <task> --output-format streaming-json --permission-mode dontAsk --no-auto-update --no-memory --no-subagents --disable-web-search --verbatim --tools search_tool --disallowed-tools search_tool,use_tool`;`--verbatim` 保留 DSH 的原始 prompt,后两项按 Grok 1.0.5 的过滤规则把最终生成工具集收敛为空(空 `--tools` 会被当作未过滤),避免兼容层意外探索仓库。选择 effort 时追加 `--reasoning-effort <level>`。解析器按官方原生流读取 `text.data`,以 `end` 确认成功终态、以 `error` 拒绝失败终态。
170
-
171
- 每次调用都是独立任务,不恢复外部 CLI session。插件不会在失败后自动切换 provider;Codex direct 仅为认证 401 做上述单次刷新与单次原请求重试,不对模型或工具轮次做通用重试。
61
+ Cordis patch 覆盖不是深合并;手工覆盖嵌套 provider 时,请保留该 provider 所需的完整对象。完整配置、认证门禁、模型目录、超时、输入上限和协议说明见[详细参考](../../docs/coding-subscription-provider-reference.md)。
172
62
 
173
63
  ## 权限与数据边界
174
64
 
175
- | 能力 | 行为 |
65
+ | 权限 | 插件行为 |
176
66
  |---|---|
177
- | 文件系统 | CLI 模式把经过 live-loop session 身份和 canonical `realpath` 精确校验的 cwd 交给外部 CLI;普通 `listModels` / `resolveModel` 不启动进程。Codex CLI 使用 read-only sandbox;Claude 禁用内置 tools;Grok 1.0.5 使用 allowlist + denylist 形成空生成工具集;Cursor/Grok 的最终强度仍取决于客户端版本、用户配置和 OS 隔离。Codex direct 不把 cwd 交给模型进程,但会读取并可能以 CAS + 原子替换更新 `CODEX_HOME/auth.json` 或 `~/.codex/auth.json`;与不使用同一 CAS 的外部写者并发时只能 best-effort 避免覆盖。图片字节只通过宿主提供的 attachment service 读取。 |
178
- | 网络 | CLI 模式下插件本身不请求模型端点,官方 CLI 会连接各自的登录、推理、更新或遥测服务。Codex direct 由插件固定请求 `https://chatgpt.com/backend-api/codex/responses`,仅在 401 刷新时请求 `https://auth.openai.com/oauth/token`;不能把凭据用于任意 URL。请求正文会把对话、tool schema/tool result,以及可用时的图片发送给该私有后端。 |
179
- | 子进程 | CLI 模式仅直接启动配置的单个可执行文件,`shell: false`;目录发现会短暂启动同一可执行文件的 App Server、SDK/ACP 初始化或列表模式。POSIX 上为生成调用建立进程组并整体取消;Windows 只能 best-effort 终止直接子进程。官方 CLI 仍可能自行创建脱离进程组的后代。Codex direct 不启动 Codex CLI 或 App Server。 |
180
- | 凭据 | CLI 模式不读取官方 auth 文件、不实现 OAuth,由官方客户端访问凭据。Codex direct 会按上述 POSIX 文件约束直接读取 ChatGPT session,在 401 时至多刷新一次,并以插件自身的 CAS + 原子替换流程写回;它不接受 API key fallback,也不把 token 写入响应或日志。 |
67
+ | 文件系统 | Codex direct 读取安全的 auth 文件,并可能在 401 刷新后以 CAS + 同目录原子替换写回;图片仅经宿主 attachment service 读取。CLI 模式校验 live session 与 canonical cwd 后把该 cwd 交给外部客户端;Codex CLI 使用 read-only sandbox。 |
68
+ | 网络 | Codex direct 固定请求 `https://chatgpt.com/backend-api/codex/responses`,仅在 401 刷新时请求 `https://auth.openai.com/oauth/token`。CLI 模式由官方客户端连接其登录、推理、更新或遥测服务。 |
69
+ | 子进程 | direct 不启动 Codex CLI/App Server。CLI 模式使用 `shell: false` 启动配置的单个客户端;模型目录探针不会提交 prompt。POSIX 取消整个进程组,Windows 只能 best-effort 终止直接子进程。 |
70
+ | 凭据 | direct 只接受本机 ChatGPT session,不回退 API Key,也不向响应或日志暴露 token。CLI 凭据由官方客户端管理;已知 API Key、第三方 base URL 和云路由变量不会传给子进程。 |
181
71
  | 浏览器 | 插件不会打开浏览器;用户单独执行官方 login 时可能打开。 |
182
- | 安装脚本 | 本 npm 包没有 install/postinstall 脚本,也不会安装或更新四个官方 CLI。 |
183
- | 日志 | stderr 有界且默认不记录内容。选择 `logDiagnostics` 后会脱敏常见 key、Bearer token 和邮箱,但无法识别任意业务秘密;插件本身不主动记录 prompt。每次调用结算记录一条无凭据生命周期诊断(阶段/提交状态/结果分类/teardown/exit/signal,以及可测得的毫秒级延迟指标),不含 prompt、argv、stderr 原文或认证凭据。 |
184
-
185
- CLI 模式的任务正文作为独立 argv 元素传给官方 CLI。它不会经过 shell,但仍受操作系统命令行长度限制,并且在某些系统上可能被同机高权限用户通过进程列表看到;敏感、多用户主机应增加 OS 级隔离。默认 prompt 上限因此保守设为 128 KiB。Codex direct 不把 prompt 放进进程 argv,而是受独立的 `codex.maxRequestBytes` 限制。
72
+ | DSH 工具 | 所有 route 接收相同工具/skill catalog,并共用 Host 执行器、Policy、审批和审计。provider 只返回工具请求,不在本机直接执行。 |
73
+ | 安装脚本 | npm 包没有 install/postinstall 脚本,也不会安装或更新任何官方 CLI。 |
74
+ | 日志 | 插件不主动记录 prompt 或 argv;目录探针 stderr 原文不进入诊断。可选 stderr 诊断有界并按常见规则脱敏,但无法识别任意业务秘密,高敏环境应保持关闭。 |
186
75
 
187
- DSH 的 skill catalog 更新是完整替换。CLI 模式序列化兼容 prompt 时,若最新目录明确带有 replacement 标记,插件只发送最新目录,不再重复发送它已经取代的旧目录;durable session 历史不会被改写。裁剪后仍超过 `maxPromptBytes` 时,插件返回标准 `CONTEXT_WINDOW_EXCEEDED`;宿主启用了自动 compaction 时,可据此先压缩历史再重试。Codex direct 则发送 typed Responses input,并对完整 JSON 请求和累计图片负载分别做字节限制。
76
+ Codex direct 会把对话、tool schema、tool result,以及 attachment service 提供的图片发送到固定私有后端。CLI transport 会把任务正文写入 stdin 或私有 prompt 文件,不写入 argv;同机高权限用户仍可能检查进程内存、管道或文件,敏感多用户主机应使用容器或独立 OS 账号隔离。
188
77
 
189
78
  ## 排查
190
79
 
191
- 调用失败时会返回稳定的 `LlmError` code。常见对应关系:
192
-
193
- | 错误码 | 含义 | 处理 |
80
+ | 错误码 | 常见原因 | 处理 |
194
81
  |---|---|---|
195
- | `SUBSCRIPTION_AUTH_REQUIRED` | 调用前的认证门禁未通过(未登录,或检测到 API key / 非订阅来源) | 在同一 OS 用户下重新 `login`;CLI 模式确认没有把 API key 写进 `extraEnvNames`;Codex direct 还要确认 auth 文件是当前用户拥有的普通文件且权限不向 group/other 开放;Grok 需另设 `userVerifiedSubscription: true`(见「订阅认证优先」)。 |
196
- | `LOCAL_SESSION_CWD_REQUIRED` | 请求没有匹配的 live loop session,或其 canonical cwd 与配置 cwd 不完全一致 | 从真实 DSH Agent Loop 发起调用;确认 session header cwd 与插件配置的 `cwd` 指向同一 realpath,且不要通过 symlink 跨出该目录。 |
197
- | `CLI_NOT_FOUND` | 找不到可执行文件(`ENOENT`) | 核对该 provider 的 `command` 是否为正确的命令名/绝对路径,并确认它在 DSH 进程的 `PATH` 中。 |
198
- | `CLI_WORKING_DIRECTORY` | Codex 拒绝了配置的工作目录,因为它不是可接受的 Git 仓库 | 把 profile 中的 `cwd` 改为目标 Git 仓库的绝对路径并重启 DSH;不要只根据 Web 会话显示的 cwd 推断子进程 cwd。 |
199
- | `CONTEXT_WINDOW_EXCEEDED` | CLI prompt 超过本地限制,或 Codex direct 明确返回 `context_length_exceeded` | 若宿主已启用自动 compaction,可让其压缩后重试;否则手动缩短历史、skill 描述或 tool schema。只有确认对应边界足够时才调大本地限制。 |
200
- | `CLI_TIMEOUT` | 单次 CLI 或 Codex direct 调用超过 `timeoutMs` | 简化 prompt,或调大 `timeoutMs`;CLI 模式还应确认官方客户端未卡在交互式提示上。 |
201
- | `CLI_PROTOCOL_ERROR` | CLI 输出或 Codex private SSE 不符合当前有界协议(含畸形事件、字段冲突或缺失终态) | CLI 模式可手动复现并采集 fixture;direct 模式优先怀疑私有协议漂移。 |
202
- | `CLI_FAILED` | 子进程非零退出或其他未归类失败 | 开 `logDiagnostics` 看脱敏 stderr 尾部;单独运行官方 CLI 复现。 |
203
- | `QUOTA` | Codex direct 明确返回 `insufficient_quota` | 检查当前 ChatGPT/Codex 账号的可用额度;插件不会自动切换 provider。 |
204
- | `EMPTY_RESPONSE` | direct 请求成功终止但没有文本、reasoning 或可执行 tool call | 重试前先检查私有协议是否发生变化;该错误不会伪装成空成功。 |
205
- | `CODEX_DIRECT_PROVIDER_HTTP` | Responses 或 refresh endpoint 返回非认证类 HTTP 错误 | 查看 `failure.status`(如 429/503),按服务状态处理;不会触发通用自动重试。 |
206
- | `CODEX_DIRECT_PROVIDER_FAILURE` | private SSE 明确报告未细分的 provider failure | 私有后端拒绝了本轮;诊断使用固定脱敏文案,不透传 provider message。 |
207
- | `CODEX_DIRECT_CONTENT_FILTER` | private SSE 明确报告内容过滤 | 调整输入;插件不会把过滤结果当作普通空输出。 |
208
- | `CODEX_DIRECT_TRANSPORT_ERROR` | 固定 endpoint 的 fetch/连接失败 | 检查网络、代理和 TLS;凭据与 prompt 不会写入错误。 |
209
- | `CODEX_DIRECT_RESPONSES_FAILED` | 其他未归类的 direct 请求失败 | 确认 `transport` 是有意开启;私有协议可能已变化,不能假定稳定兼容。 |
210
- | `INVALID_PROVIDER` | 选择了本插件未提供的 provider id | 只使用上表四个 `*-subscription` route。 |
211
-
212
- 插件**不会**在失败后自动切换 provider,也不做通用模型重试;唯一例外是 Codex direct 的 401 认证刷新后原请求单次重试。每次调用结算都会记录一条无凭据生命周期诊断(成功走 `debug`、失败走 `info`),可据此定位失败发生在哪个阶段。
213
-
214
- ### 采集真实 CLI fixture(维护者)
215
-
216
- 解析器按 `decode → 各 provider decoder → 归一化事件 → reducer` 分层,需要来自**明确 CLI 版本**的真实输出作为回归 golden。采集脚本已就绪:
217
-
218
- ```sh
219
- node plugins/coding-subscription-provider/scripts/capture-cli-fixtures.mjs --help
220
- ```
221
-
222
- 脚本默认脱敏、需显式确认会消耗额度,产物落到 `tests/fixtures/<provider>/<version>/<scenario>.json`,`tests/fixtures.spec.ts` 在样本落地后自动激活。细节与脱敏清单见 [`tests/fixtures/README.md`](tests/fixtures/README.md)。
223
-
224
- ## 已知限制
225
-
226
- - DSH `0.1.0-rc.8` 只有 `LlmAdapter` provider 接缝;本版因此是兼容适配,不是完整的 Agent Runtime。
227
- - Claude、Cursor、Grok 以及默认 Codex CLI route 仍是 text-only,不能发出 tool call。请求携带非空 `tools` 时,这些 CLI 路径会在启动子进程前以 `tool_calls_unsupported` 明确失败;对应 route capability 为 `toolCalls: none`。
228
- - 只有显式 opt-in 的 Codex direct route 发布 `toolCalls: native`。它只负责把原生 function call 交还 DSH;工具选择、参数审批、执行和结果回传仍受 Agent Loop / Policy 控制,provider 本身没有绕开策略执行本机工具的权限。
229
- - Codex direct 只有在可选 attachment service 实际可用时才声明 `text + image`;否则仍为 text-only。音频、视频和任意文件都不支持。其图片与完整 JSON 请求有独立字节上限。
230
- - Codex direct 的 auth 文件安全检查依赖 POSIX 所有权、链接数和权限位,因此当前不支持 Windows;Windows 仍使用默认 CLI transport。
231
- - CLI 路径不提供供应商 token usage;`assistant-automations` 的周期 token 预算会按全额预留结算,详见该插件 README。Codex direct 会读取私有 Responses 终态中的 usage,但该字段同样属于不稳定协议。
232
- - CLI 模式下,`temperature`、`stop`、`maxTokens` 等参数只能进入任务约束,不能保证与原生模型 API 等价。当前私有 Codex request schema 没有 `temperature` 或 `max_output_tokens`:direct route 对显式 `temperature` 和非空 `stop` fail closed;DSH Agent Loop 的 `maxTokens` 只作为宿主本地预算消费,不发送到私有 wire。
233
- - Codex JSONL 当前主要提供事件级文本;解析器允许已识别事件旁出现向后兼容扩展,但若整条流只有未知/畸形事件、没有 assistant 文本或缺少规定终态,会返回 `CLI_PROTOCOL_ERROR`,不会产生空成功。
234
- - 仅靠“不传 force / dontAsk / prompt 指令”不是强沙箱。需要处理不可信仓库时,应在容器、只读挂载或独立 OS 账号中运行 DSH。
235
- - 插件没有远程共享、公共 HTTP 代理、token 导入或浏览器抓取能力。Codex direct 只封装一个固定私有 endpoint 与固定 refresh endpoint,不是可配置的通用认证代理。
236
- - Cursor 目前只自动发现模型。其官方 headless CLI 尚未暴露可验证的 effort 参数;Max Mode/Thinking 变体不会伪装成 DSH effort,待上游提供机器可用控制面后再接入。
237
- - Codex CLI 模式的 App Server、Claude SDK control 与 Grok ACP 只用于模型目录发现;这些生成路径仍使用各自一次性 CLI。Codex direct 不使用 App Server,也不做动态模型发现。Grok effective credential 绑定、动态 CLI 版本探测和持久外部会话属于后续阶段。
238
-
239
- ### Claude 合规提示
240
-
241
- Anthropic 的技术文档允许 `claude -p` 使用订阅登录,但其法律与合规页面同时限制第三方产品代用户提供 Claude.ai 登录或路由 Free/Pro/Max 凭据。因此 Claude connector 只作为同机同用户的 experimental 委托:不提供登录、不托管 token、不做多租户。公开或商业部署前应自行取得适用授权;否则使用 DSH 已有的官方 API Key provider。
242
-
243
- ## 兼容性与调研
244
-
245
- - Node.js `^22.19.0 || >=24.0.0`
246
- - DeepSeek Harness / `@deepseek-ai/dsh-llm` `>=0.1.0-rc.8 <0.2.0`
247
- - Cordis `^4.0.1`
248
- - Codex CLI `0.147.0`(已验证;模型目录基于官方 [Codex App Server](https://developers.openai.com/codex/app-server) 的 `model/list`)
249
- - Codex `direct-responses`(实验性私有协议;不是 OpenAI 面向第三方承诺的公开 API,兼容基线见 [compatibility.md](../../docs/compatibility.md))
250
- - `@deepseek-ai/dsh-attachment` `>=0.1.0-rc.8 <0.2.0`(可选;Codex direct 图片输入依赖该服务)
251
- - Claude Code `2.1.218`(已验证;目录字段遵循官方 [Agent SDK `supportedModels()`](https://code.claude.com/docs/en/agent-sdk/typescript))
252
- - Grok Build `1.0.5`(已验证;目录与 effort 来自 ACP `initialize` 的 `modelState`,生成事件遵循官方 [headless `streaming-json`](https://github.com/xai-org/grok-build/blob/main/crates/codegen/xai-grok-pager/docs/user-guide/14-headless-mode.md#streaming-json))
253
- - Cursor CLI:目录使用官方 [`--list-models`](https://cursor.com/changelog/cli-jan-08-2026);本机未安装,依赖 fixture 验证
254
-
255
- 设计证据、官方文档链接以及 Hermes/OpenClaw 对比见 [调研报告](../../docs/coding-subscription-provider-research.md)。仓库兼容基线见 [compatibility.md](../../docs/compatibility.md)。
82
+ | `SUBSCRIPTION_AUTH_REQUIRED` | 未登录、登录来源不符或 auth 文件权限不安全 | 用运行 DSH 的同一 OS 用户重新登录;direct 检查 auth 文件所有者与权限。 |
83
+ | `LOCAL_SESSION_CWD_REQUIRED` | 请求不属于 live Agent Loop,或 cwd 的 canonical path 不一致 | 对齐 provider `cwd` 与 Delivery `defaultWorkspace`,重启后从真实会话重试。 |
84
+ | `CLI_NOT_FOUND` | CLI fallback 找不到客户端 | 检查 `command` 和 DSH 进程的 `PATH`。 |
85
+ | `CLI_WORKING_DIRECTORY` | CLI 仍拒绝当前非 Git 工作目录 | 检查 Codex 版本与脱敏诊断,确认固定 fallback 参数生效。 |
86
+ | `CLI_PROMPT_LIMIT` / `CONTEXT_WINDOW_EXCEEDED` | 本地序列化上限或模型上下文容量不足 | 先确认 `contextWindow` 与 Host compaction,再缩短历史或 schema。 |
87
+ | `CLI_TIMEOUT` | direct 或 CLI 调用超过总时限 | 检查网络/交互阻塞,必要时调整 `timeoutMs`。 |
88
+ | `CLI_PROTOCOL_ERROR` | CLI 输出或 Codex private Responses 事件发生协议漂移 | 采集脱敏 fixture;direct 可暂时切换到 CLI fallback。 |
89
+ | `CLI_FAILED` | CLI 非零退出且未命中专用分类 | 开启有界脱敏诊断,并在同一 OS 用户下单独复现官方 CLI。 |
90
+ | `QUOTA` / `CODEX_DIRECT_PROVIDER_HTTP` | 订阅额度不足或上游服务错误 | 检查账号额度、HTTP 状态和服务状态;插件不会自动切换 provider。 |
91
+
92
+ 完整错误码、CLI fixture 采集方法和已知限制见[详细参考](../../docs/coding-subscription-provider-reference.md#排查参考)。
93
+
94
+ ## 文档
95
+
96
+ - [详细配置、认证、协议与限制](../../docs/coding-subscription-provider-reference.md)
97
+ - [兼容基线](../../docs/compatibility.md)
98
+ - [Codex 路由调研](../../docs/grok-bot-codex-router-research.md)
99
+ - [插件生态与 Hermes/OpenClaw 对比](../../docs/dsh-personal-assistant-plugin-landscape.md)
100
+
101
+ 运行与发布验证统一使用仓库根目录的 `pnpm check`。
package/cordis.patch.yml CHANGED
@@ -1,3 +1,8 @@
1
1
  - insert:
2
2
  - id: dsh-enhanced-coding-subscription-provider
3
3
  name: '@dsh-enhanced/coding-subscription-provider'
4
+ config:
5
+ cwd: !!js dshHomePath('assistant-workspace')
6
+ codex:
7
+ transport: direct-responses
8
+ directModel: gpt-5.6-terra
package/lib/adapter.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { LlmAdapter, type GenerateOptions, type LlmModelInfo, type LlmProviderInfo, type LlmResolvedModelInfo, type ResolvedRetryPolicy, type StreamChunk } from '@deepseek-ai/dsh-llm';
2
+ import type { AgentLoopRequestAttestor } from '@dsh-enhanced/llm-route-capabilities';
2
3
  import { type SubscriptionAuthVerifier } from './auth.js';
3
4
  import { type CodexCatalog, type CodexCatalogInvocation, type DiscoverCodexModelsOptions } from './codex-catalog.js';
4
5
  import { CodexCredentialStore } from './codex-direct-auth.js';
@@ -52,13 +53,16 @@ export interface AdapterDependencies {
52
53
  onSettled?: (context: RouteFailureContext) => void;
53
54
  /** Host-owned live session lookup used to bind local process cwd to a loop request. */
54
55
  liveSessions?: LiveSessionLookup;
56
+ /** Scoped Host proof retained when LlmRuntime creates a legitimate adapter request clone. */
57
+ requestAttestor?: AgentLoopRequestAttestor;
58
+ /** Injectable monotonic-enough wall clock for deterministic catalog-cache tests. */
59
+ now?: () => number;
55
60
  }
56
61
  export declare const CODEX_DIRECT_PROVIDER_HTTP_CODE = "CODEX_DIRECT_PROVIDER_HTTP";
57
62
  export declare const CODEX_DIRECT_PROVIDER_FAILURE_CODE = "CODEX_DIRECT_PROVIDER_FAILURE";
58
63
  export declare const CODEX_DIRECT_CONTENT_FILTER_CODE = "CODEX_DIRECT_CONTENT_FILTER";
59
64
  export declare const CODEX_DIRECT_TRANSPORT_ERROR_CODE = "CODEX_DIRECT_TRANSPORT_ERROR";
60
- /** Stable code for a request that needs tool calls this text-only route cannot make. */
61
- export declare const TOOL_CALLS_UNSUPPORTED_CODE = "tool_calls_unsupported";
65
+ export declare const CLI_PROMPT_LIMIT_CODE = "CLI_PROMPT_LIMIT";
62
66
  /** Experimental LLM-compatible facade over local, already-authenticated coding agents. */
63
67
  export declare class CodingSubscriptionAdapter extends LlmAdapter {
64
68
  private readonly config;
@@ -75,9 +79,12 @@ export declare class CodingSubscriptionAdapter extends LlmAdapter {
75
79
  private readonly onDiagnostic;
76
80
  private readonly onSettled;
77
81
  private readonly liveSessions;
82
+ private readonly requestAttestor;
83
+ private readonly now;
78
84
  private readonly lifecycle;
79
85
  private codexCatalogCache;
80
86
  private readonly subscriptionCatalogCache;
87
+ private readonly catalogRefreshes;
81
88
  constructor(config: CodingSubscriptionProviderConfig, dependencies?: AdapterDependencies);
82
89
  private trustedCwd;
83
90
  private reportSettled;
@@ -86,14 +93,20 @@ export declare class CodingSubscriptionAdapter extends LlmAdapter {
86
93
  private peekCodexCatalog;
87
94
  private peekSubscriptionCatalog;
88
95
  /**
89
- * Observe the advisory CLI catalog only after stream has bound this operation to a
90
- * canonical live-session cwd. The caller owns the auth probe and must revalidate
91
- * the session immediately before crossing this subprocess boundary.
96
+ * Observe the advisory Codex CLI catalog with bounded, prompt-free control-plane I/O.
97
+ * Authentication is owned by `refreshCatalog`; this method only performs discovery.
92
98
  */
93
99
  private observeCodexCatalog;
94
100
  private observeSubscriptionCatalog;
95
101
  private observedCatalog;
96
102
  private observeCatalog;
103
+ /**
104
+ * Refresh one CLI catalog after the existing subscription-auth gate. Concurrent
105
+ * list callers share the complete auth + discovery operation, so a cold picker
106
+ * cannot fan out local probes. Generation never enters or waits on this path.
107
+ */
108
+ private refreshCatalog;
109
+ private reportCatalogRefreshFailure;
97
110
  listModels(provider: string): Promise<readonly LlmModelInfo[]>;
98
111
  resolveModel(provider: string, model: string, signal?: AbortSignal): Promise<LlmResolvedModelInfo>;
99
112
  stream(options: GenerateOptions): AsyncIterable<StreamChunk>;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}