Skip to content

Update from upstream 2.80.0 while preserving fork integrations - #9

Merged
ar4ft merged 5284 commits into
mainfrom
codex/update-upstream
Oct 7, 2026
Merged

ar4ft merged 5284 commits into
mainfrom
codex/update-upstream

Conversation

@ar4ft

@ar4ft ar4ft commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Summary

Update the existing integration PR to upstream stable 2.80.0 (250f17afd) and merge the current fork main (7b8b5f59c, preview.4). Both tips are ancestors of this branch; merge commits retain attribution and the fork fixes added after the original PR. The fork package version stays 0.0.10-preview.4.

Preserved fork behavior:

  • GitHub Copilot discovery advertises only chat models enabled in the authenticated subscription picker. Empty live results stay authoritative; configured seeds and combos cannot resurrect unavailable models. The Copilot API version header and credential destination restrictions remain.
  • ocx sync / sync-cache refresh the proxy and enabled Grok/Claude integrations. Claude Desktop profile assignments and the Claude Code gateway cache refresh even when agent injection is disabled. Cold requests using the old claude-opus-4-8-20260330 Fable slot retain the Fable route instead of becoming Opus.
  • Native Codex CLI, Codex Desktop and ChatGPT integration remains disabled, including old ON configs. Upstream remote connect/sync/disconnect catalog writes, hidden restart/filter helpers and native restart scopes are blocked. Startup does not start the native routing healer. Legacy proxies are refused before their old sync/shutdown hooks can run.
  • Standalone POSIX installer, oxc / ocx aliases, checksum verification, atomic updates, and update-pre remain. scripts/install.sh, src/update/github-prerelease.ts and .github/workflows/tag-release.yml match fork main exactly.
  • Only the fork tag-release workflow exists. Upstream CI, repository automation and workflow files are not restored, as requested. Documentation links describe upstream automation without claiming those files exist in this fork.

Upstream improvements retained include Claude ToolSearch references, expanded Desktop slots and non-date wire aliases with real Anthropic collision protection, Cursor Claude tool wording/redirects, Devin linear tool declarations/results, Jev effort handling, web-search pacing deadlines, service/lifecycle fixes, and the MCP SDK 1.31.0 security update. Claude first-party mode and sibling ownership are checked before gateway writes. Exact operator maps and explicitly Copilot-qualified dateless migration maps retain precedence. Broad non-Copilot fallbacks cannot claim unknown managed Desktop slots.

The broader verification found and fixed a Claude compatibility regression: cold recovery now applies to Copilot aliases without replacing an existing non-Copilot registry. Unknown managed slots retain upstream's unavailable response, and unrelated large provider catalogs do not consume the legacy Copilot date namespace. The endpoint tests cover the fork's disabled native enrichment while confirming that routed requests still work and never receive native credentials. All seven translated READMEs now carry the canonical fork notice and standalone installer instructions; their source hashes and structural parity are current.

Verification

Focused verification for b9263d17b06435b74b032c8fb5da478eb2c15d9c:

  • 764 passed, 0 failed, across 41 runtime/regression files, including the complete Claude Messages endpoint tests, Copilot routing/discovery, native isolation, installer/prerelease handling, README parity, test layout, file-size ratchet, and core/Lab boundaries.
  • 2,943 passed, 0 failed, across all 330 GUI test files with bun test --isolate --parallel=2 tests (127.24s).
  • 6 passed, 0 failed in the compiled-binary native isolation regressions.
  • Typecheck, privacy scan, structure check, generated skill check and diff whitespace checks: passed.
  • Earlier GUI build/lint, documentation build (569 pages / 79,027 internal links), frozen installs and root/GUI high-severity dependency audits passed. Their inputs are unchanged by this verification follow-up; the GUI still matches upstream stable exactly.
  • Installer, prerelease updater and tag-release workflow remain byte-identical to fork main. Both fork main and upstream stable remain ancestors of this head.

Broader runtime results and limitations

The full runtime suite is not green and this PR remains draft:

  • bun run test at the previous head 293ec1873 hit the runner's 900-second limit, exit 124. The report listed 209 unstarted files and four interrupted files; no successful full-suite result is claimed.
  • Continued the 209 unstarted files and three interrupted files through the isolated wrapper: 4,323 passed, 6 skipped, 223 failed, 4,552 tests / 212 files, exit 1 (297.83s). The interrupted legacy native hard-lock file remains incompletely verified.
  • Ran all 20 serial-lane files separately through the wrapper: 654 passed, 23 skipped, 67 failed. Failures were in Codex shim/injection/toggle tests (65) and service tests (2). The same two service failures reproduce on unchanged upstream. Native Grok toggle (24 tests), release helper (40), live server (55), update stop-first (26), and the other passing lanes completed successfully.
  • Many runtime failures expect native Codex writes, native credentials/claims, or upstream GitHub workflow files that this fork deliberately excludes. Native support and removed automation were not restored to satisfy those expectations.
  • Compared 15 non-native/runtime failure files against unchanged upstream 250f17afd: 380 passed, 3 skipped, 24 failed, 1 error. Kiro model evidence, catalog-route and other failures also reproduce there. This is representative baseline evidence; not every remaining runtime failure has been fully classified.

The standard GUI command bun test tests failed with 2,767 passes / 176 failures. All observed failure names also reproduced in an unchanged-upstream run (2,766 passes / 177 failures). Isolating test files removed the cross-file React state/warning cascade. The first isolated run had one timing failure; its file passed separately on both branches, and the complete final isolated run passed all 2,943 tests.

React Doctor previously completed with exit 0 but reported 19 errors and 1 warning, all in unchanged upstream GUI test fixtures. That diagnostic result remains recorded; it is not described as clean.

No native macOS/Windows runtime or manual desktop/browser verification was performed in this Linux workspace. Only the release workflow is retained, so no PR CI result is claimed. The full suite has not been rerun from scratch after the focused fixes, and broader completion/readiness remains outstanding.

Exact focused regression command
bun test \
  tests/test-layout.test.ts \
  tests/test-layout-tooling.test.ts \
  tests/server/server-jev-combo-e2e.test.ts \
  tests/server/combo-requested-effort.test.ts \
  tests/claude-integration/claude-desktop-picker.test.ts \
  tests/claude-integration/claude-copilot-model.test.ts \
  tests/claude-integration/claude-desktop-policy.test.ts \
  tests/claude-integration/claude-desktop-picker-routes.test.ts \
  tests/claude-integration/claude-desktop-request-model.test.ts \
  tests/claude-integration/claude-inbound-tool-reference.test.ts \
  tests/claude-integration/claude-desktop-first-party-guards.test.ts \
  tests/claude-integration/claude-desktop-1m.test.ts \
  tests/claude-integration/messages-native-scope.test.ts \
  tests/claude-integration/claude-desktop-native-context.test.ts \
  tests/claude-integration/claude-desktop-discovery.test.ts \
  tests/claude-integration/claude-fork-copilot-wire.test.ts \
  tests/claude-integration/claude-desktop-first-party.test.ts \
  tests/claude-integration/claude-desktop-picker-profile.test.ts \
  tests/ci-workflows/file-size-ratchet.test.ts \
  tests/ci-workflows/tag-release-prerelease.test.ts \
  tests/ci-workflows/standalone-installer.test.ts \
  tests/codex-integration/github-copilot-model-discovery.test.ts \
  tests/codex-integration/fork-native-client-isolation.test.ts \
  tests/routing/jev-decision.test.ts \
  tests/cli/fork-live-policy.test.ts \
  tests/service/autostart-health.test.ts \
  tests/lab/core-lab-boundary.test.ts \
  tests/web-search/web-search-pacing-deadline.test.ts \
  tests/providers/devin-chat-wire-fixes.test.ts \
  tests/adapters/openai/openai-chat-qwen38-leading-system.test.ts \
  tests/providers/cursor/cursor-blob-claude-client-tools.test.ts \
  tests/providers/cursor/cursor-tool-definitions.test.ts \
  tests/providers/cursor/cursor-tool-wording.test.ts \
  tests/providers/github-copilot/github-copilot-oauth.test.ts \
  tests/providers/github-copilot/github-copilot-wire-defaults.test.ts \
  tests/providers/github-copilot/github-copilot-sse-rewrite.test.ts \
  tests/providers/github-copilot/github-copilot-account-origin.test.ts \
  tests/providers/github-copilot/github-copilot-context-tier.test.ts \
  tests/providers/github-copilot/github-copilot-stream-contract.test.ts \
  tests/claude-integration/claude-messages-endpoint.test.ts \
  tests/ci-workflows/docs-readme-translation-parity.test.ts

Additional validation commands:

bun run typecheck
bun run privacy:scan
bun run structure:check
bun run skill:surface:check
bun build --compile ./src/cli/index.ts --outfile /tmp/oxc-pr9-binary
OXC_TEST_BINARY=/tmp/oxc-pr9-binary bun test tests/codex-integration/fork-native-client-isolation.test.ts
(cd gui && bun test --isolate --parallel=2 tests)
# Earlier successful checks; these inputs are unchanged by this follow-up:
bun install --frozen-lockfile
bun audit --audit-level=high
(cd gui && bun install --frozen-lockfile && bun run build && bun run lint && bun audit --audit-level=high && bun run doctor)
(cd docs-site && bun install --frozen-lockfile && bun run build)
git diff --check
git merge-base --is-ancestor origin/main HEAD
git merge-base --is-ancestor upstream/main HEAD
git diff --exit-code origin/main -- scripts/install.sh src/update/github-prerelease.ts .github/workflows/tag-release.yml

The timed-out run's remaining-file list was taken directly from its report; it was executed as bun run test --parallel=2 <209 unstarted files plus three interrupted files>. Serial lanes were executed one file at a time as bun run test --parallel=1 <file>, using the 20 entries in SERIAL_FULL_SUITE_FILES from scripts/test.ts. Comparison runs used a separate detached worktree at upstream stable with the same Bun 1.4.0 and installed dependency versions. The unchanged build/audit commands and their results are recorded above.

Checklist

  • Latest reviewed fork main and upstream stable included; native-client exclusion and release-only automation preserved.
  • Integration regressions found during broader verification fixed and covered by passing focused tests.
  • Complete isolated GUI suite passed; runtime failures and limits documented without claiming a full pass.
  • Full runtime integration suite green / all remaining failures classified.
  • Native platform/manual validation completed.
  • Ready for review / merge.

lidge-jun and others added 30 commits October 4, 2026 04:50
…ization-public

docs: record scoped release stabilization and verification gates
…-b-nested-http

fix(combo): preserve bounded nested HTTP refusal semantics
…-c-fixture-isolation

test: isolate release fixtures and release holder leases cooperatively
lidge-jun and others added 23 commits October 6, 2026 23:01
…spaced ids (lidge-jun#6685)

* docs(devlog): plan the provider compat lane

* fix(openai-chat): apply the Qwen3.8-27B template rule to gateway-namespaced ids

LiteLLM serves the model as openai/Qwen3.8-27B, which the leading-system matcher did not accept, so the developer reminder went out as developer and the pinned template answered 400. Accept any leading path segments while the last segment still has to name the checkpoint.

Closes lidge-jun#6674
…r new advisories

release.yml's dependency audit refused 2.79.0 on a critical advisory
published after the candidate was cut: proxy-addr <2.0.8 is vulnerable to
IP spoofing via IPv4-mapped IPv6 trust subnets (GHSA-jqcg-44mw-7w3h),
reached through @modelcontextprotocol/sdk > express. gui/ reports
source-map-js <1.2.2 (GHSA-68fv-2mgg-jv7q, vite > postcss).

bun audit fix, lockfiles only, every bump inside its declared range:
proxy-addr 2.0.7 -> 2.0.8, fast-uri 3.1.7 -> 3.1.8, ip-address 10.4.0 ->
10.7.1, and in gui/ source-map-js 1.2.1 -> 1.2.2. Both audits now report
no vulnerabilities at --audit-level=high.
…-audit-fix

release: 2.79.0 dependency audit fix
…lidge-jun#6640)

* fix(cursor): preserve bare client tool names for Claude Code sessions

When Claude Code connects via /v1/messages using a Cursor-backed model, bare tools (Bash, Read, Write, Edit, Grep, Glob, Task, etc.) were previously aliased with the ocx_client_ prefix.

This caused catalog/prompt contradiction with Claude Code's system prompt, triggering fallback to Cursor-native execution frames. OpenCodex's redirect hint (Re-issue this operation NOW through one of the tools: ocx_client_*...) was then flagged by frontier Claude models as prompt-injection, causing refusal loops and halting execution.

- Conditionally exempt Claude bare tool names from ocx_client_ aliasing when no Codex shell bridge (exec_command/shell_command) is present in the turn.
- Pass the turn's catalog to cursorToolWireName across tool definitions, guidance notes, native exec hints, and request building.
- Suppress neighboring-agent tool name warnings in tool guidance when running without a Codex shell bridge.
- Add unit tests verifying Claude Code tool preservation and Codex shell bridge aliasing.

* fix(cursor): address CodeRabbit review feedback on tool naming and replay

- Pass request visible catalog through conversationTurns to toolCallStep so replayed calls use consistent wire names.
- Remove overly broad regex from isClaudeClientBareToolName, strictly matching known Claude tools.
- Restrict unavailable neighboring-agent warning suppression in tool guidance to catalogs containing Claude bare tools.
- Add regression tests for catalog-aware replay, MCP-only neighboring-agent warnings, and response name mapping.

* fix(cursor): import OcxTool for catalog-aware replay signatures

* test(cursor): move Claude client replay coverage under size cap

* fix(cursor): budget Claude client aliases with catalog context

* fix(cursor): resolve client tool choices before catalog filtering

---------

Co-authored-by: JUN <jun@lidgeai.com>
…fact is group-writable (lidge-jun#6680)

* fix(codex-shim): name the path and chmod fix when a private shim artifact is group-writable

* test(codex): cover quoted legacy shim chmod recovery

---------

Co-authored-by: JUN <jun@lidgeai.com>
…on in doctor (lidge-jun#6679)

* fix(service): credit Linux desktop Start at Login as restart protection in doctor

* fix(service): validate Linux desktop startup evidence conservatively

* fix(service): leave a relocated XDG_CONFIG_HOME uncredited for Linux desktop startup

auto-launch 0.5.0 writes the login entry under ~/.config/autostart. When
XDG_CONFIG_HOME points elsewhere the session searches another autostart
directory, so that entry proves registration but not login startup.

* test(service): run the Linux desktop startup fixtures only off Windows

The fixtures build POSIX paths with execute bits and symlinks, and the
diagnostic itself only runs on Linux, so the Windows shard cannot exercise it.

* fix(service): compare XDG_CONFIG_HOME to ~/.config after path resolution

---------

Co-authored-by: JUN <jun@lidgeai.com>
…recovery (lidge-jun#6686)

* fix(codex): stay quiet on no-op journal recovery and warn on incomplete recovery

Co-authored-by: agentHits <140916359+agentHits@users.noreply.github.com>

* fix(server): answer a restart drain with a retryable server_restarting code

Closes lidge-jun#6642.

* docs(server): qualify the Codex retry behavior behind server_restarting

* fix(codex): warn when a no-op journal recovery cannot remove the journal

---------

Co-authored-by: agentHits <140916359+agentHits@users.noreply.github.com>
…r new advisories (lidge-jun#6687)

release.yml's dependency audit refused 2.79.0 on a critical advisory
published after the candidate was cut: proxy-addr <2.0.8 is vulnerable to
IP spoofing via IPv4-mapped IPv6 trust subnets (GHSA-jqcg-44mw-7w3h),
reached through @modelcontextprotocol/sdk > express. gui/ reports
source-map-js <1.2.2 (GHSA-68fv-2mgg-jv7q, vite > postcss).

bun audit fix, lockfiles only, every bump inside its declared range:
proxy-addr 2.0.7 -> 2.0.8, fast-uri 3.1.7 -> 3.1.8, ip-address 10.4.0 ->
10.7.1, and in gui/ source-map-js 1.2.1 -> 1.2.2. Both audits now report
no vulnerabilities at --audit-level=high.
…n#6663)

* fix(jev): preserve applied effort transitions in combo logs

Preserve the caller-to-JEV effort transition in request and attempt requestedEffort labels for the Responses child.
Native Chat children keep the caller effort label since they do not apply the JEV override.
Telemetry-only change; outbound effort, routing and retry policy are unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(layout): keep the combo-requested-effort registration under the layout file-size threshold

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: JUN <jun@lidgeai.com>
…ge-jun#6664)

* fix(cursor): use factual tool redirects for Claude-family models

Explicit Claude-family Cursor targets now receive factual tool guidance and native-tool refusals,
without instructions to conceal the redirect. The routing-commentary sniffer is no longer armed for them.
Empty catalogs report no available tools; other model families keep their legacy wording.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(layout): keep the cursor-tool-wording registration under the layout file-size threshold

* fix(cursor): name redirect tools with the request catalog

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: JUN <jun@lidgeai.com>
…s MAX_PATH (lidge-jun#6694)

The ocx-recover-compaction-state- mkdtemp prefix pushed the private-backup
path past 260 chars on machines with a deep TMPDIR; openSync handles long
paths but the icacls spawn does not, failing with EICACLS 'path not found'.
Integrate lidge-jun/opencodex main at beba8b7. Resolve older squashed upstream copies in favor of current upstream, then port subscription-aware Copilot discovery into the new catalog modules. Preserve the standalone installer, oxc alias, binary release workflow, Copilot API version, workspace tooling, and fork automation policy.
Carry fork main 41db97b while preserving upstream lifecycle reconciliation and documentation. Declare update-pre in upstream capability discovery and regenerate the operating reference. Keep the fork-only automation policy and upstream removal of the stale npm lockfile.
…-audit-fix

[WRONG BRANCH] release: 2.80.0 dependency audit fix
@ar4ft ar4ft changed the title Update from upstream 2.79.0 while preserving fork features Update from upstream 2.80.0 while preserving fork integrations Oct 7, 2026
@ar4ft
ar4ft marked this pull request as ready for review October 7, 2026 16:26
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-07T16:32:44.058659Z b9263d1 Draft marked ready
🔒 Security Review ✅ Completed 2026-10-07T16:34:20.083712Z b9263d1 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@ar4ft
ar4ft merged commit 5b3f78a into main Oct 7, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

if (["restore", "recover-history", "codex-shim", "codex-log-guard", "chatgpt", "connect", "disconnect", "catalog"].includes(resolveDispatchCommand(command) ?? command)) {
console.error("Native Codex and ChatGPT client integration is disabled in this fork.");
return 2;

P2 Badge Preserve the documented remote-hub commands

This blanket guard makes every ocx connect invocation—including connect status and --clients claude—and every ocx disconnect exit with status 2 before their handlers run. However, this same commit adds docs-site/src/content/docs/guides/remote-hub.md, which instructs users to enroll, inspect, rotate, and disconnect remote clients with those commands, so the newly documented remote-hub workflow is unusable in this fork. Either remove that advertised surface or narrow the guard to operations that actually mutate native Codex state.

AGENTS.md reference: src/AGENTS.md:L28-L29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.