为 codexhost 新增 Harness 插件,或规划、审查、补全现有 Harness Adapter。按当前公共契约实现原生能力,区分插件后端、预装发行和 Desktop 产品接入;不用于单纯添加 Model、Provider 或账号。
中文简介正在准备中。当前显示原文说明。
Diagnose whether a Codex Desktop update changed codexhost Composer/CDP bindings, private Renderer DOM or React state, Host bridges, routing, the Codex usage submission gate, or injected UI. Use after an installed Codex update or when compatibility regresses and the affected surface is unknown.
中文简介正在准备中。当前显示原文说明。
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Audit before changing codexhost. Produce a verdict backed by bundle and live-Renderer evidence. Apply a fix only when the user explicitly requests one.
可先运行 npm run audit:codex-desktop 辅助检测;该命令不能替代下面的语义对比、ownership 追踪、真实 Renderer 探测和必要的行为验证,后续步骤仍须继续执行。
AGENTS.md and record git status; preserve unrelated dirty-worktree changes..codexhost/update-impact/. Never persist Thread IDs, request IDs, prompts, transcripts, tokens, credentials, URL query/hash values, or full DOM snapshots.Record the installed executable, Desktop version/build, Chromium version, and app.asar hash. Determine these distinct versions when possible:
Use the reviewed baseline for the compatibility decision. Use a direct predecessor only to localize the newest change. Never silently substitute a much older bundle for either role.
Search, in order, for prior evidence under .codexhost/update-impact/, Sparkle installation caches, compatibility fixtures, and other complete local installations. The official Sparkle appcast may establish release order and download locations, but downloading a full application is optional and must not block the audit when live evidence and a reviewed baseline are available.
Unpack each available app.asar into a temporary directory. After the audit, retain a minimal sanitized baseline at:
.codexhost/update-impact/<version>/
manifest.json
app-initial.js
app-initial.css
composer-utility-bar.js
marker-inventory.json
live-renderer.json
manifest.json should identify version/build, Chromium version, executable path, hashes, audit time, verdict, and which checks actually ran. Do not retain a full application or archive merely for the next comparison.
Completion criterion: the report names the reviewed baseline, direct predecessor if known, and current version without conflating them.
Compare relevant app-initial, composer-utility-bar, and relocated owning chunks. Hash and filename changes are not impact. Classify each observed difference as:
Inventory contracts by surface:
| Surface | Primary evidence |
|---|---|
| Composer identity | data-codex-composer-root, data-above-composer-portal, data-above-composer-conversation-id |
| Model | data-codex-intelligence-trigger, data-composer-navigation-target="reasoning", owning Fiber props |
| Permission | data-composer-navigation-target="permissions", permissionsHostId, permission-state Fiber props |
| Request/prewarm | executionTargetHostId, permissionsHostId, request-client and prewarm-manager API shape |
| Footer/layout | FooterInlineControls, Context radial indicator shape, trailing action ownership |
| Sidebar | data-app-action-sidebar-thread-row, data-thread-title-trigger, data-thread-title |
| Settings | data-testid="app-shell-header-context-menu-surface" and structural insertion slot |
| Fork | data-response-annotation-conversation, data-content-search-turn-key, owning callback/Fiber state |
| Codex usage gate | Composer owner props onLocalSubmitStart + boolean submitDisabled; boolean selectors reading authMethod → rate_limit.allowed and reserve hardBlocked; useSyncExternalStore hook layout |
Marker counts are triage signals, not conclusions. If a marker moves to another chunk with the same use and live relationship, classify it as relocation. If counts remain equal, still inspect changed relationships and API shape.
Completion criterion: every codexhost-consumed contract is accounted for, including relocation to a new chunk.
Read the current call sites and follow each surface independently from discovery through insertion or routing:
renderer-codex-usage-gate.ts, driven by renderComposerAgentControl's external-submission readiness);Prefer unique semantic candidates plus ownership checks. Record fail-closed behavior for absent or ambiguous candidates. Keep source relocation separate from an actual anchor or ownership change.
Completion criterion: each reported surface points to the exact codexhost file/line that consumes the contract.
If Codex is already running under codexhost, discover the active Inspector endpoint from the process arguments or runtime descriptor and attach through packages/desktop-control. Do not reload the Renderer or reinstall policies merely to read status.
Inspect only sanitized summaries:
app://-/index.html Renderer and element count;display, visibility, align-items, gap, and bounding rectangles;Interpret visibility in state. A Credits, Permission, Usage, or Model control hidden because the current Agent, phase, or data availability does not require it is not an impact. For visible controls, alignment and ownership matter more than a fixed pixel height. Equal heights alone do not prove correct placement.
Use tools/renderer-binding/run.mjs only when a clean controlled lifecycle, reload, observer, or submission boundary is required. On macOS pass the executable file:
/Applications/ChatGPT.app/Contents/MacOS/ChatGPT
The runner does not accept the .app directory. A controlled flow may verify Agent switching, stale-prewarm clearing, new Thread creation, title behavior, or Fork. State clearly when user interaction or creation boundaries were not exercised.
This surface lets an external Harness submit while the ChatGPT-signed-in Codex subscription is out of usage by projecting false for one Composer's two Desktop usage-gate subscriptions. It depends on private React/state-library internals, so check it on every update. npm run audit:codex-desktop reports its structure as the codex-usage-gate surface (see tools/codex-desktop-contract-audit/README.md); codex-usage-account-gate-dormant means the audit ran without a ChatGPT sign-in whose Account gate reads usage. The audit does not verify behavior.
Bundle evidence (evidence only, not contracts): the Composer owner combines submitDisabled from an Account rate-limit selector (authMethod !== "chatgpt" early return, then rate_limit.allowed === false, gated to host local) and a reserve hardBlocked selector. Confirm both still exist and still feed submitDisabled, and that no new Account-wide usage blocker was added beside them. If Desktop now exempts external models/Threads or stops blocking in the Renderer, report that the module can be removed.
Manual read-only live probe, when the audit surface is not no-impact or its counts need explaining, in a Composer inside the primary Renderer. Do not patch getSnapshot, subscribe to the store, or call effect functions:
onLocalSubmitStart and boolean submitDisabled, in both a new draft and an existing Thread.[store, atom] or Desktop 26.928's [signal, undefined], where the readonly signal exposes atom, store, get, and subscribe. The next hook has queue = { value: boolean, getSnapshot }, followed by effect { create, deps: [subscriber.subscribe] }, without atom.write, and createRender() returning nothing. An instance getter may equal the subscriber getter or be a lazy wrapper; for an unbound wrapper, both snapshots must equal the native boolean store.get(atom).atom.read with tracing proxies, following readonly boolean selector indirections with cycle and work bounds. Exactly one reads hardBlocked without active or Account gate fields (reserve). When signed in with ChatGPT, exactly one reads authMethod and rate_limit.allowed without reserve fields (Account). Each replayed boolean must equal its native value; reject mixed gates.store.sub, subscriber.getSnapshot, and the instance getSnapshot are writable.With codexhost running and an external Agent selected, bound gates show an instance getSnapshot of () => false for both hooks. The Agent control's hover title shows the "cannot separate from Codex usage" message when binding failed.
Behavioral check requires a ChatGPT account that is out of Codex usage; API-key sign-in never triggers the gate. With non-empty text and an external Agent, Send is enabled in a new draft and an existing Thread; after switching to Codex it returns to disabled. Do not submit a message unless the user asks. Remove any temporary text without touching text the user typed. Report unverified when no exhausted account is available.
Completion criterion: no surface receives a live verdict from bundle inspection alone.
Before proposing a fix, rank 3–5 falsifiable hypotheses by evidence and name the observation that would disprove each. Run the narrowest relevant tests first, for example:
npx vitest run <affected renderer tests> --config tests/vitest.config.js
npm run typecheck
npm run build:renderer
git diff --check
For a requested fix:
A test that proves only that a control exists or a mock was called does not prove visual alignment, ownership, or routing.
Completion criterion: a fix is tied to one confirmed failing boundary, not to a changed bundle name or broad suspicion.
The first line must answer the user's question directly:
结论:无影响 / 有确认影响 / 可能有影响 / 尚未验证。
Then give 3–5 decisive facts before detailed evidence. Classify every surface as:
no impact: bundle contract and relevant live boundary both agree;confirmed impact: a live or focused regression check demonstrates failure;possible impact: evidence changed materially but the decisive boundary is unavailable;unverified: the boundary was not exercised or observable.Include:
Do not bury the answer in the evidence. “Frontend changed” and “codexhost is impacted” are separate conclusions.
disabled; Desktop also guards Enter and the submit function with the same submitDisabled.还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
为 codexhost 新增 Harness 插件,或规划、审查、补全现有 Harness Adapter。按当前公共契约实现原生能力,区分插件后端、预装发行和 Desktop 产品接入;不用于单纯添加 Model、Provider 或账号。
中文简介正在准备中。当前显示原文说明。
审查 codexhost 的 Pull Request 或本地 diff 的正确性与边界。检查包与 Rust 所有权边界、官方 Thread 与外部 Harness Thread 的区分、Renderer 私有绑定、生命周期与测试强度。用于“review 这个 PR / diff”;一批 PR 的总览与推荐分请先用 codexhost-pr-overview,再对其中需深审的 PR 使用本 skill。
中文简介正在准备中。当前显示原文说明。
在 codexhost 中寻找有证据支撑的简化候选:无生产调用方的接口、镜像表示、为未来而设计的通用性、可由依赖或内置能力替代的手写代码。默认只读,输出带证据的候选清单;用于审计 AI 辅助开发造成的过度设计,不用于实现新功能。
中文简介正在准备中。当前显示原文说明。
把一批 codexhost PR 汇总成一张表:推荐分(1–5)、作者及已合并数、作用、范围、状态、关联、理由。带“暂缓”标签的 PR 只列出、不检查。用于“看一下现在的 PR”“这批 PR 怎么处理”;单个 PR 的代码缺陷审查请接着用 codexhost-code-review。
中文简介正在准备中。当前显示原文说明。
在推送、标记 PR 就绪或声称“检查通过”之前,按 diff 触及的面选择最小而充分的本地检查,不反射式跑全量。覆盖 TypeScript、Rust、Renderer、发布脚本与 Gate 的选择规则,以及改写历史推送的保护。
中文简介正在准备中。当前显示原文说明。
发布 codexhost 正式版、预览版,编写或确认 Release Notes,检查发布 CI,暂停、恢复或排查发布。支持正常正式发布,以及 npm latest + GitHub Prerelease、不给现有用户更新提示的预览发行。不用于普通代码提交或 Harness CLI 更新。
中文简介正在准备中。当前显示原文说明。