feat(desktop): add Gemini CLI agent host - #317
Conversation
PeterGuy326
left a comment
There was a problem hiding this comment.
Gate decision
REQUEST CHANGES — current head 8059ef8 is not merge-ready.
Blocking findings
- The packaged runtime omits the new Gemini resolver. apps/desktop/packaging/runtime-layout.cjs does not add src/gemini-binary.js or dist/src/gemini-binary.js to SERVER_RUNTIME_FILES, although apps/server/bin/qoder-engine.mjs and dist/src/routes/health.js import them. After npm run build and npm run prepare:updater, I reproduced this with:
node --test --test-timeout=120000 scripts/test/package-layout.test.mjs
Result: 7 passed, 2 failed. The failures are the compiled inventory mismatch for gemini-binary.js and the two unpackaged relative imports. The same omission explains the current verify run's Ubuntu package-layout failure and the macOS/Windows staging smoke failures. The latest main verify run is green, so this is not a baseline failure. Add both runtime entries and rerun the package and staging checks.
- The new resolver tests are not portable on macOS. apps/server/test/gemini-binary.test.ts:20,22,36 compare the resolver result with the raw path returned by os.tmpdir(). The implementation intentionally calls fs.realpathSync; on macOS the temp alias /var resolves to /private/var, so the exact server suite failed these two newly added tests locally. The reproduced result was 507 passed, 2 failed, 3 skipped. Canonicalize the fixture expectation with fs.realpath (or otherwise assert the canonical executable path), then rerun on both Linux and macOS.
Other gate blockers
- This is a user-visible Host addition, but the PR has no CHANGELOG.md entry under ## [Unreleased] and does not document a reason for omitting one.
- The PR body claims 510 passed, 2 skipped, 0 failed, but the current exact server command is not green on macOS; update the validation ledger after fixing the tests.
- Live authenticated agy execution and the running desktop health report were not independently verifiable in this review environment; retain them as environment-specific evidence rather than as a substitute for the failed packaging gate.
Reproduced checks
- PASS — npm run build
- PASS — npm run typecheck:renderer
- PASS — npm run test:renderer (525 passed)
- PASS — npm run test:desktop-main after the repository's required npm run prepare:updater step (352 passed, 8 skipped)
- PASS — git diff --check
- FAIL — server suite: 507 passed, 2 failed, 3 skipped
- FAIL — package-layout: 7 passed, 2 failed
- FAIL — GitHub verify run 35236554504: Node 24 Ubuntu/macOS and macOS/Windows staging smoke failed
Please update the runtime manifest, make the resolver tests path-canonicalization-safe, add/update the CHANGELOG and validation results, then request re-review.
|
已按原审查项完成并推送到最新主干:打包 runtime manifest、macOS realpath 测试、CHANGELOG、Gemini 配置/Host/API 文档与旧配置兼容测试均已补齐。新 head |
|
状态更新:当前 exact head 为 |
PeterGuy326
left a comment
There was a problem hiding this comment.
Re-review on merge head 7b18342: the blocking packaging omission is fixed. apps/desktop/packaging/runtime-layout.cjs now lists both src/gemini-binary.js and dist/src/gemini-binary.js in SERVER_RUNTIME_FILES, so the imports from qoder-engine.mjs and routes/health.js resolve inside the packaged runtime and the layout inventory matches the compiled output. Branch synced with main.
Approving; merge will follow once CI is green on this head.
Closes #315
Adds Gemini CLI and Antigravity CLI support alongside Qoder, Claude Code, Codex, and WorkBuddy across the desktop host picker, encrypted credentials, health preflight, turn adapter, model selection, WSL transport, reports/group streaming, and configuration UI.
The bundled adapter discovers
gemini,agy, orantigravity, supports eitherGEMINI_API_KEYor the client cached login, runs the selected client in headless JSON mode with disposable settings and deny-all tool permissions, and preserves only the bounded authentication/model state required for local Antigravity sessions. Proxy and certificate settings cross the same allowlisted boundary so Google provider calls do not stall behind a required proxy. Cancellation and timeout now reap the detached Google client process tree.Validation:
npm run buildnpm run typecheck:rendereragyturn completed in 9 seconds with usage and terminal events