@luchenglong/cli-bridge 0.2.11 → 0.2.12
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/CHANGELOG.md +29 -0
- package/dynamic/codex.host.js +7 -1
- package/mcp/cli-bridge-mcp.mjs +1 -1
- package/package.json +1 -1
- package/providers/codex.mjs +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,35 @@ GitHub Release(`scripts/verify.mjs` 在 CI 与 prepack 双重锁一致)。
|
|
|
9
9
|
> - CodeBuddy 线:[docs/history/codebuddy/CHANGELOG.md](docs/history/codebuddy/CHANGELOG.md)(终版 1.6.2)
|
|
10
10
|
> - MiMo 线:[docs/history/mimo/CHANGELOG.md](docs/history/mimo/CHANGELOG.md)(终版 1.2.9)
|
|
11
11
|
|
|
12
|
+
## [0.2.12] - 2026-10-20
|
|
13
|
+
|
|
14
|
+
> 起因是用户问「现在所有 CLI 都是默认无需用户点确认的模式吗」。核对后发现 **codex 不是** ——
|
|
15
|
+
> 它此前完全依赖用户自己的 `~/.codex/config.toml`。
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- **codex 在非交互场景可能等一个没人能点的批准,一路挂到超时**。`codex exec` 没有 TTY,
|
|
19
|
+
此前 provider 的 `approvalPolicy` 默认留空 → 不传 `-c approval_policy` → 完全由用户的
|
|
20
|
+
`~/.codex/config.toml` 决定。本机因为恰好写了 `approval_policy = "never"`(实测 stderr 报
|
|
21
|
+
`approval: never`)才没炸;换台机器或用户改配置就会静默变成"每次都等批准"。
|
|
22
|
+
现在:用户显式配了就用;没配则在 accept-edits/bypass 语义下**强制**
|
|
23
|
+
`-c approval_policy="never"`(plan 态不注入,保留人工确认的语义)。
|
|
24
|
+
四家免批准方式现已一致且显式:
|
|
25
|
+
agy `--dangerously-skip-permissions --mode accept-edits` / claude
|
|
26
|
+
`--dangerously-skip-permissions` / codex `-c approval_policy="never"` / opencode `--auto`。
|
|
27
|
+
|
|
28
|
+
### Added(验收工具,不参与 `node --test`)
|
|
29
|
+
- `tests/e2e/cli-connectivity.mjs`:逐家真实跑**两轮**,第一轮要求记住暗号、第二轮续聊同一
|
|
30
|
+
会话问暗号。只有暗号回来才算"持续沟通正常"——**只看有没有回 sessionId 是不够的**。
|
|
31
|
+
四家实测全通过(agy `--conversation` / claude `--resume` / codex `exec resume` /
|
|
32
|
+
opencode `--session`)。顺带修了脚本里 `opencode` 直接写裸名导致的 ENOENT(真名
|
|
33
|
+
`opencode-cli.exe`,装在 `ai.opencode.desktop\cli\<ver>\`、不在 PATH)。
|
|
34
|
+
- `tests/e2e/lamp-live-check.mjs`:用 preset 形态 + 模拟宿主 ctx 真跑一次任务,捕获
|
|
35
|
+
`<id>/status` 事件,验证「灯会亮」。四家均实测 `running → ok`。
|
|
36
|
+
过程中踩到一个**桩自身的坑**(值得记下):模拟宿主 `subprocess.spawn` 时必须遵守
|
|
37
|
+
`spec.stdio.stdin === 'ignore'`。桩里不管 stdio 时 stdin 是一直开着的 pipe,CLI 会等 stdin,
|
|
38
|
+
最终被打超时杀死 → `exitCode=null` → 明明答对了却被判 `CLI_ERROR`。
|
|
39
|
+
对照实验:`stdin=ignore` → exit 0/SUCCESS;`stdin=pipe 不关` → exit null/CLI_ERROR。
|
|
40
|
+
|
|
12
41
|
## [0.2.11] - 2026-10-20
|
|
13
42
|
|
|
14
43
|
> 用户反馈:「claude 我是用 cc-switch 改的配置,你现在获取的模型不对」。查证后不是列表写错,
|
package/dynamic/codex.host.js
CHANGED
|
@@ -714,9 +714,15 @@ function defineProvider (deps = {}) {
|
|
|
714
714
|
if (resume) argv.push('-c', 'sandbox_mode="' + sandbox + '"')
|
|
715
715
|
else argv.push('-s', sandbox)
|
|
716
716
|
|
|
717
|
-
|
|
717
|
+
// 审批策略:非交互(-p/exec 无 TTY)场景**必须**显式给 never,否则 codex 会按自身
|
|
718
|
+
// 配置(或内置默认 on-request)请求批准 —— 没人能点,进程一路挂到超时。
|
|
719
|
+
// 此前这里默认留空、完全依赖用户 ~/.codex/config.toml(本机恰好写了 never 才没炸),
|
|
720
|
+
// 属于隐式依赖:换台机器或用户改配置就会静默变成"每次都等批准"。
|
|
721
|
+
// 现规则:用户显式配了就用;没配则 accept-edits/bypass 语义下强制 never。
|
|
722
|
+
const configuredApproval = (settings && settings.approvalPolicy && APPROVAL_POLICIES.indexOf(String(settings.approvalPolicy)) >= 0)
|
|
718
723
|
? String(settings.approvalPolicy)
|
|
719
724
|
: ''
|
|
725
|
+
const approval = configuredApproval || (mode === 'plan' ? '' : 'never')
|
|
720
726
|
// exec 没有 -a/--ask-for-approval;等价效果只能经 -c 覆盖(TOML 字符串值)。
|
|
721
727
|
if (approval) argv.push('-c', 'approval_policy="' + approval + '"')
|
|
722
728
|
|
package/mcp/cli-bridge-mcp.mjs
CHANGED
|
@@ -33,7 +33,7 @@ import * as claudeMcp from './providers/claude.mjs'
|
|
|
33
33
|
import * as codexMcp from './providers/codex.mjs'
|
|
34
34
|
|
|
35
35
|
const SERVER_NAME = 'cli-bridge-mcp'
|
|
36
|
-
const SERVER_VERSION = '0.2.
|
|
36
|
+
const SERVER_VERSION = '0.2.12'
|
|
37
37
|
const PROTOCOL = '2024-11-05'
|
|
38
38
|
|
|
39
39
|
const PROVIDERS = [agyMcp, codebuddyMcp, mimoMcp, opencodeMcp, claudeMcp, codexMcp]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luchenglong/cli-bridge",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.12",
|
|
4
4
|
"description": "CLI Bridge for DeepSeek Harness (DSH): one package bridging six local coding-CLI agents — agy (Google Antigravity CLI), Tencent CodeBuddy Code, Xiaomi MiMo (MiMoCode), OpenCode, Claude Code, and OpenAI Codex CLI. Each provider keeps its own agent preset (cordis-agy / codebuddy-first / cordis-mimo / opencode-first / claude-first / codex-first), tools (<id>_run / <id>_continue / <id>_status, plus per-provider model listing), rate-limit/network fallback dialog, and zero-dependency MCP server, unified under a single home-level status light, one settings file, and one bundle patch. Merges agy-first-bridge, codebuddy-first-bridge and mimo-first-bridge.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
package/providers/codex.mjs
CHANGED
|
@@ -154,9 +154,15 @@ export default function defineProvider(deps = {}) {
|
|
|
154
154
|
if (resume) argv.push('-c', 'sandbox_mode="' + sandbox + '"')
|
|
155
155
|
else argv.push('-s', sandbox)
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
// 审批策略:非交互(-p/exec 无 TTY)场景**必须**显式给 never,否则 codex 会按自身
|
|
158
|
+
// 配置(或内置默认 on-request)请求批准 —— 没人能点,进程一路挂到超时。
|
|
159
|
+
// 此前这里默认留空、完全依赖用户 ~/.codex/config.toml(本机恰好写了 never 才没炸),
|
|
160
|
+
// 属于隐式依赖:换台机器或用户改配置就会静默变成"每次都等批准"。
|
|
161
|
+
// 现规则:用户显式配了就用;没配则 accept-edits/bypass 语义下强制 never。
|
|
162
|
+
const configuredApproval = (settings && settings.approvalPolicy && APPROVAL_POLICIES.indexOf(String(settings.approvalPolicy)) >= 0)
|
|
158
163
|
? String(settings.approvalPolicy)
|
|
159
164
|
: ''
|
|
165
|
+
const approval = configuredApproval || (mode === 'plan' ? '' : 'never')
|
|
160
166
|
// exec 没有 -a/--ask-for-approval;等价效果只能经 -c 覆盖(TOML 字符串值)。
|
|
161
167
|
if (approval) argv.push('-c', 'approval_policy="' + approval + '"')
|
|
162
168
|
|