Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
343 commits
Select commit Hold shift + click to select a range
9ad218a
Merge pull request #4002 from lidge-jun/codex/bug6-01a07e9d-6-recovery
lidge-jun Sep 8, 2026
660e0a7
docs: archive completed six-item bug stack delivery
invalid-email-address Sep 8, 2026
7797586
Merge pull request #4009 from lidge-jun/codex/bug6-01a07e9d-close
lidge-jun Sep 8, 2026
544ebee
release: promote 2.48.0 to main
invalid-email-address Sep 8, 2026
d24ff57
release: set main channel version 2.48.0
invalid-email-address Sep 8, 2026
9a27e86
Merge pull request #4011 from lidge-jun/codex/release-248-main
lidge-jun Sep 8, 2026
9ec9467
chore(release): open dev at 2.49.0 before releasing 2.48.0
invalid-email-address Sep 8, 2026
0372c43
Merge pull request #4019 from lidge-jun/codex/dev-bump-249
lidge-jun Sep 8, 2026
358e1ee
docs(devlog): archive the 2.48.0 release train record
invalid-email-address Sep 8, 2026
29bb221
Merge pull request #4021 from lidge-jun/codex/release-248-record
lidge-jun Sep 8, 2026
87b685d
feat(provider): add official CodeBuddy Global and CN providers
Flowershangfromthebranches Sep 3, 2026
e80f5a3
fix(provider): harden CodeBuddy CLI lifecycle
Flowershangfromthebranches Sep 3, 2026
1e3cd67
fix(provider): address CodeBuddy runtime review
Flowershangfromthebranches Sep 3, 2026
aa5404a
docs(codebuddy): document adapter factory and turn input contracts
Flowershangfromthebranches Sep 4, 2026
769e420
test(providers): place CodeBuddy tests in their layout domain
invalid-email-address Sep 8, 2026
124c57b
feat(provider): add Qoder Global PAT provider
Flowershangfromthebranches Sep 3, 2026
094cb93
test(providers): place Qoder tests in their layout domain
invalid-email-address Sep 8, 2026
5adf130
fix(qoder): carry captured alias through discovery and anchor auth er…
invalid-email-address Sep 8, 2026
615c5c6
feat(provider): add Qoder CN PAT provider
Flowershangfromthebranches Sep 3, 2026
a0e794d
feat(integrations): support source-preserving YAML for Hermes Agent (…
rrmlima Sep 8, 2026
14ce693
fix(google): guard model-tail histories with user continue nudge acro…
Sep 8, 2026
6ba1e67
feat(gui): give Qoder its brand mark and name the CLI providers
invalid-email-address Sep 8, 2026
295bcf8
docs(integrations): keep fr and zh-TW in step with Hermes source pres…
invalid-email-address Sep 8, 2026
16d49ce
fix(google): keep a single owner for the model-tail continue nudge
invalid-email-address Sep 8, 2026
b77b05a
Merge pull request #4026 from lidge-jun/codex/prs-l1-codebuddy
lidge-jun Sep 8, 2026
753ecb8
Merge pull request #4027 from lidge-jun/codex/prs-l2-qoder-global
lidge-jun Sep 8, 2026
07ac34b
Merge pull request #4028 from lidge-jun/codex/prs-l3-qoder-cn
lidge-jun Sep 8, 2026
9f07212
Merge pull request #4029 from lidge-jun/codex/prs-l4-marks-docs
lidge-jun Sep 8, 2026
5bb8faf
Merge pull request #4030 from lidge-jun/codex/prs-l5-hermes-yaml
lidge-jun Sep 8, 2026
e2bf167
Merge pull request #4031 from lidge-jun/codex/prs-l6-gemini-tail
lidge-jun Sep 8, 2026
ed66b6b
docs(devlog): record the provider runtime stack landing
invalid-email-address Sep 8, 2026
7dc7dc9
Merge pull request #4037 from lidge-jun/codex/prs-stack-record
lidge-jun Sep 8, 2026
cfff026
wp1: land the luvs01 fixture and bug-fix train (9 PRs) (#4049)
lidge-jun Sep 8, 2026
9587750
wp2: land seven contributor bug fixes (quota, catalog, streaming, sto…
lidge-jun Sep 8, 2026
164bd2b
wp3: land four small contributor changes and the missing feedback-cal…
lidge-jun Sep 8, 2026
b11cd84
test(stream): prove bare upstream error at EOF meters failed without …
chilung-cgu Sep 8, 2026
e12dfb1
fix(logs): persist transport finality evidence
chilung-cgu Sep 8, 2026
ff524ae
wp4: fix four reported bugs with no owning pull request (#4058)
lidge-jun Sep 8, 2026
6bd3274
test(server): verify exactly one failed terminal on upstream error
chilung-cgu Sep 8, 2026
02bc10e
wp6: pin Bun 1.4.2 and catch up the drifted workflow (#4064)
lidge-jun Sep 8, 2026
8026405
wp7: report the actual reason a proxy refused to stop (#4067)
lidge-jun Sep 8, 2026
a9192d4
fix(google): restore AI Studio model discovery
chilung-cgu Sep 8, 2026
7269be2
feat(codex): opt into client-side compaction
cb8010d6 Sep 8, 2026
3c3307e
test(gui): preserve client compaction on sync failure
cb8010d6 Sep 8, 2026
cc49bd6
fix(codex): keep client compaction future-only
cb8010d6 Sep 8, 2026
3c86cfd
docs(codex): tighten compaction guidance
cb8010d6 Sep 8, 2026
ad60bc0
docs(codex): add client compaction UI screenshot
cb8010d6 Sep 8, 2026
dce2b50
docs(codex): scope client compaction guidance
cb8010d6 Sep 8, 2026
178ba36
docs(codex): clarify V2 quota behavior
cb8010d6 Sep 8, 2026
d94c369
fix(codex): tighten compaction review coverage
cb8010d6 Sep 8, 2026
f2327ab
fix(stop): confirm shared teardown before skipping parent restoration
luvs01 Sep 9, 2026
8fe789b
fix(google): retain generic parser fallback for custom gateways and a…
chilung-cgu Sep 9, 2026
166309c
feat(doctor): explain ChatGPT public endpoint latency
chilung-cgu Sep 8, 2026
7bd7429
docs(codex-integration): clarify ChatGPT channel scope and verify doc…
chilung-cgu Sep 8, 2026
b8853a4
fix(doctor): restrict ChatGPT hint to canonical forward auth and clar…
chilung-cgu Sep 8, 2026
22420a7
fix(doctor): validate baseUrl hostname for ChatGPT public endpoint hint
chilung-cgu Sep 9, 2026
b93415e
fix(server): honor rejected identity checks during port reclaim
luvs01 Sep 8, 2026
7dc2405
test(stop): exercise parent restoration through the real CLI module g…
luvs01 Sep 9, 2026
87447a7
fix(openai): drop tool-schema patterns Python re cannot compile
Sep 9, 2026
875c457
fix(usage): validate token values and escape human output
luvs01 Sep 9, 2026
f3bf31b
fix(usage): retain invalid streamed usage state
luvs01 Sep 9, 2026
1dbf74b
fix(transport): pin manual redirects at upstream dispatch
luvs01 Sep 9, 2026
45a56cc
fix(transport): enforce manual redirects in OAuth override dispatch
luvs01 Sep 9, 2026
c46bd23
fix(responses): allow 90 seconds for Codex WS response prelude
S0RYUASUKA Sep 9, 2026
4e5d3ce
test(transport): clarify manual redirect compatibility and assertions
luvs01 Sep 9, 2026
11d6617
fix(doctor): gate ChatGPT hint on canonical forward provider, correct…
invalid-email-address Sep 9, 2026
47a9627
devlog: plan the xAI OAuth retry hardening unit (#4045, #4046, #4047,…
invalid-email-address Sep 9, 2026
f917d47
oauth/xai: honor Retry-After and stop retrying aborted token requests…
invalid-email-address Sep 9, 2026
034c1ee
oauth/xai: annotate the deliberate non-JSON catch in readTokenError
invalid-email-address Sep 9, 2026
35c0349
test(codex): lock voice-sideband and history-retag contracts for clie…
invalid-email-address Sep 9, 2026
aa9e30c
oauth/xai: parse all three RFC 9110 HTTP-date forms, strip unreleased…
invalid-email-address Sep 9, 2026
3bd66da
fix(doctor): hedge ChatGPT latency copy to what the classifier can su…
invalid-email-address Sep 9, 2026
50ad78f
chore(carry): record attribution for the #4063 carry
invalid-email-address Sep 9, 2026
29e6e78
chore(carry): record attribution for the #3987 carry
invalid-email-address Sep 9, 2026
4b379b9
feat(sponsors): OrcaRouter placement, overview introduction and links…
lidge-jun Sep 9, 2026
6bdfad3
oauth/xai: pin discovery endpoints to trusted auth hosts and reject u…
invalid-email-address Sep 9, 2026
589daec
fix(server): close expired dashboard selection streams quietly when n…
lidge-jun Sep 9, 2026
6097c67
test(openai): assert the chat wire drops uncompilable tool patterns
lidge-jun Sep 9, 2026
bd1b6c0
chore(carry): record attribution for the #4072 carry
lidge-jun Sep 9, 2026
91d75da
docs(claude-code): note Unicode-property pattern normalization in too…
lidge-jun Sep 9, 2026
52ad823
usage: open the custom date range on request instead of on arrival
lidge-jun Sep 9, 2026
f45d619
fix(codex): restore main policy binding after owned recovery
luvs01 Sep 8, 2026
ad576de
test(codex): preserve verified policy after unknown rebind
luvs01 Sep 8, 2026
b6bce51
fix(codex): reject conflicting startup token identities
luvs01 Sep 8, 2026
037137a
fix(readme): show the OrcaRouter sponsor logo on every branch (#4097)
lidge-jun Sep 9, 2026
0480891
devlog: name the language on the design-dial fence (#4098)
lidge-jun Sep 9, 2026
a79193f
fix(codex): bound the startup policy-binding credential read
lidge-jun Sep 9, 2026
3f5d141
test(config): give the config-lock holder child a platform-policy rea…
lidge-jun Sep 9, 2026
3822eff
docs(server): state that the reclaim allowlist narrows candidates but…
lidge-jun Sep 9, 2026
49b31be
docs(lifecycle): move the port-recovery note into the restart section
lidge-jun Sep 9, 2026
c7e7589
chore(carry): record attribution for the #4036 carry
lidge-jun Sep 9, 2026
b483a54
fix(auth): scope caller credentials to the selected route
luvs01 Sep 9, 2026
a093f1d
fix(auth): retain explicit OpenAI credentials within their destinatio…
luvs01 Sep 9, 2026
e6d8f09
fix(auth): keep ChatGPT-claimed and combined bearers off noncanonical…
invalid-email-address Sep 9, 2026
30d2b85
fix(auth): restore caller Direct credentials on canonical reroutes un…
invalid-email-address Sep 9, 2026
c9bbd64
fix(auth): require an account claim for Direct credential restore acr…
invalid-email-address Sep 9, 2026
f13f531
fix(auth): restore only provably ChatGPT-domain caller credentials ac…
lidge-jun Sep 9, 2026
945734c
docs(auth): note that the reroute restore is stricter than unchanged …
lidge-jun Sep 9, 2026
8663fef
test(auth): pin the canonical caller restore boundary
luvs01 Sep 9, 2026
545a8e4
test(auth): assert claimed bearer rejection outcomes
luvs01 Sep 9, 2026
11f575e
fix(codex): reject conflicting account-id claims within one startup t…
lidge-jun Sep 9, 2026
bf8f36f
fix(auth): distinguish ChatGPT-domain markers from generic org claims…
lidge-jun Sep 9, 2026
b499227
devlog: match the plan example to the implemented waitForOwnedChildRe…
lidge-jun Sep 9, 2026
7939ff3
fix(auth): treat a present ChatGPT marker key as marked regardless of…
lidge-jun Sep 9, 2026
616650b
fix(openai): drop patternProperties keys Python re cannot compile
lidge-jun Sep 9, 2026
b7666d5
docs(claude-code): scope the pattern normalization to the adapter paths
lidge-jun Sep 9, 2026
5748cdf
fix(doctor): classify the resolved openai destination and complete th…
lidge-jun Sep 9, 2026
ed89af5
fix(codex): keep existing threads routed when enabling client compaction
lidge-jun Sep 9, 2026
87efd10
docs(codex): name the full fenced admission set and prove the pinned …
lidge-jun Sep 9, 2026
1457884
fix(codex): fall back to caller main during pool cooldown
luvs01 Sep 8, 2026
e282d4d
fix(codex): keep the cooled subscription out of its own caller-main f…
lidge-jun Sep 9, 2026
2f3f826
feat(sponsors): PackyCode Standard sponsor preset, README row and doc…
lidge-jun Sep 9, 2026
0000689
test(doctor): a blank baseUrl is discarded, not unresolvable
lidge-jun Sep 9, 2026
22baa64
test(openai): compare surviving patternProperties keys as a set
lidge-jun Sep 9, 2026
3af5402
fix(auth): keep the ChatGPT-domain inspector total for non-object JWT…
lidge-jun Sep 9, 2026
8db0ab4
fix(auth): retain stored sidecar auth for caller-auth Chat
luvs01 Sep 9, 2026
4a201df
test(auth): avoid sidecar model migration in credential fixture
luvs01 Sep 9, 2026
1bb5e93
fix(codex): keep the root override beside the client-compaction table
lidge-jun Sep 9, 2026
066ce4c
docs(codex): scope the routing guarantee to the managed root override
lidge-jun Sep 9, 2026
65d5483
docs(codex): separate the compaction-only contract from the authless …
lidge-jun Sep 9, 2026
00b96bb
fix(codex): identify the cooled subscription by its stable user id
lidge-jun Sep 9, 2026
8a0b67f
fix(codex): journal the root override the compaction form retains
lidge-jun Sep 9, 2026
49efae6
docs(codex): condition the migrate-back claim on the form you return to
lidge-jun Sep 9, 2026
c247b9d
Merge pull request #4074 from luvs01/agent/usage-token-output-hardeni…
lidge-jun Sep 9, 2026
d77015f
Merge pull request #4082 from luvs01/agent/upstream-redirect-dispatch…
lidge-jun Sep 9, 2026
f5b5e7b
Merge pull request #4101 from lidge-jun/codex/pr4036-port-reclaim
lidge-jun Sep 9, 2026
567588a
Merge pull request #4087 from lidge-jun/codex/xai-oauth-retry-after
lidge-jun Sep 9, 2026
3057078
Merge pull request #4094 from lidge-jun/codex/xai-oauth-endpoint-vali…
lidge-jun Sep 9, 2026
4285b8b
Merge pull request #4095 from lidge-jun/codex/pr4069-quiet-selection-…
lidge-jun Sep 9, 2026
0c1d5dd
Merge pull request #4099 from lidge-jun/codex/ci-config-mutation-lock…
lidge-jun Sep 9, 2026
6be88f9
Merge pull request #4085 from lidge-jun/codex/pr4025-main-policy-binding
lidge-jun Sep 9, 2026
4a08c75
Merge pull request #4088 from lidge-jun/codex/pr3997-caller-main-cool…
lidge-jun Sep 9, 2026
4be3cb5
Merge pull request #4070 from luvs01/agent/stop-teardown-confirmation…
lidge-jun Sep 9, 2026
76b7ea7
Merge pull request #4061 from chilung-cgu/fix/issue-3657-persist-stre…
lidge-jun Sep 9, 2026
4de1ecc
Merge pull request #4102 from lidge-jun/codex/pr4081-credential-scope…
lidge-jun Sep 9, 2026
ab03162
docs(codex): scope the ChatGPT channel claim to the resolved destination
lidge-jun Sep 9, 2026
5e68c4e
fix(openai): only drop a patternProperties matcher where it cannot na…
lidge-jun Sep 9, 2026
97841a7
fix(codex): report the mixed compaction result instead of the root-on…
lidge-jun Sep 9, 2026
bb61007
Merge pull request #4091 from lidge-jun/codex/pr4063-chatgpt-latency-…
lidge-jun Sep 9, 2026
8213fad
Merge pull request #4092 from lidge-jun/codex/pr3987-client-compaction
lidge-jun Sep 9, 2026
b5c9833
Merge pull request #4096 from lidge-jun/codex/pr4072-tool-schema-regex
lidge-jun Sep 9, 2026
9240bde
fix(openai): preserve composed tool schema contracts
lidge-jun Sep 9, 2026
9c9207c
fix(codex): report operator-owned root routing truthfully
Ingwannu Sep 9, 2026
ad36c7b
Merge pull request #4113 from lidge-jun/codex/preserve-composed-tool-…
lidge-jun Sep 9, 2026
f92f4f4
chore(release): open dev at 2.50.0 before releasing 2.49.0
github-actions[bot] Sep 9, 2026
57077ca
Merge pull request #4115 from lidge-jun/codex/dev-version-2.50.0
lidge-jun Sep 9, 2026
62849df
release: promote verified 2.49.0 product tree to main
lidge-jun Sep 9, 2026
2f3f736
Merge pull request #4117 from lidge-jun/codex/release-249-main-01a08498
lidge-jun Sep 9, 2026
98087ae
docs(devlog): post-2.49 reconciliation — 101 units to _fin, cleanup r…
lidge-jun Sep 9, 2026
4936202
fix(responses): classify non-streaming provider input overflow
Ingwannu Sep 9, 2026
15c03e8
test(responses): assert classified overflow after bounded image retry
Ingwannu Sep 9, 2026
b214258
fix(codex): attribute Spark 5h header windows to the model limit, not…
lidge-jun Sep 9, 2026
cd41608
docs(devlog): dispatch roadmap for the post-2.49 delivery round
lidge-jun Sep 9, 2026
91db6c2
Merge pull request #4128 from lidge-jun/codex/spark-short-quota-4122
lidge-jun Sep 9, 2026
e3a4f0a
docs(devlog): move the closed Spark short-quota unit to _fin
lidge-jun Sep 9, 2026
5744b12
Merge remote-tracking branch 'origin/dev' into work4084
lidge-jun Sep 9, 2026
d1e6094
docs(security): document the private follow-up path for pending reports
lidge-jun Sep 9, 2026
dec8306
docs: bound the WS prelude deadline by connectTimeoutMs
lidge-jun Sep 9, 2026
fad2b8d
Merge remote-tracking branch 'origin/dev' into work4068
lidge-jun Sep 9, 2026
80eded0
Merge pull request #4114 from lidge-jun/ingw/fix-4110-owned-root-guid…
lidge-jun Sep 9, 2026
865082b
fix(responses): recover encrypted agent tasks on mid-thread model swi…
lidge-jun Sep 9, 2026
cf967c3
docs(security): make the public-or-private test disclosure, not sourc…
lidge-jun Sep 9, 2026
3b4d8c4
Merge pull request #4132 from lidge-jun/codex/spark-quota-devlog-fin
lidge-jun Sep 9, 2026
da9aef5
feat(logs): surface and filter the routed account label per request
lidge-jun Sep 9, 2026
6578cab
docs(provider): explain the opencode-free Zen lock-in instead of leak…
lidge-jun Sep 9, 2026
c122436
feat(proxy): make the inbound body admission limit configurable
lidge-jun Sep 9, 2026
df117bc
docs(agents): cover mid-thread switches in encrypted v2 task recovery
lidge-jun Sep 9, 2026
6a260ea
docs(devlog): record the docs sync and point the unit at PR #4135
lidge-jun Sep 9, 2026
92e6f5a
test(server): make the listener-limit regression robust to Bun's refu…
lidge-jun Sep 9, 2026
024e43d
feat(web-search): opt-in hosted web-search bridge for key-auth Respon…
lidge-jun Sep 9, 2026
40e183e
docs(provider): mirror the Zen lock-in note into the seven translated…
lidge-jun Sep 9, 2026
d693361
fix(skills): declare --account in the capability registry, not only t…
lidge-jun Sep 9, 2026
38fc4f6
test(web-search): pin the passthrough web-search bridge arming, strea…
lidge-jun Sep 9, 2026
5c74f76
fix(codex): persist a terminal validation verdict for a revoked pool …
lidge-jun Sep 9, 2026
2156fbe
devlog: open the codex credential health chain unit
lidge-jun Sep 9, 2026
5669b96
Merge pull request #4127 from lidge-jun/ingw/fix-4112-json-overflow
lidge-jun Sep 9, 2026
0e95eb7
docs(agents): state both combo recovery triggers in every locale
lidge-jun Sep 9, 2026
f982af4
Merge pull request #4133 from lidge-jun/codex/security-private-follow…
lidge-jun Sep 9, 2026
e748566
fix(responses): keep the passthrough relay source-oracle invariants i…
lidge-jun Sep 9, 2026
cd8fbb4
Merge pull request #4084 from S0RYUASUKA/fix/codex-ws-prelude-90s
lidge-jun Sep 9, 2026
f757a47
Merge pull request #4068 from chilung-cgu/fix/issue-3926-google-model…
lidge-jun Sep 9, 2026
9152450
Merge pull request #4136 from lidge-jun/codex/opencode-free-zen-locki…
lidge-jun Sep 9, 2026
7dd50ea
Merge pull request #4134 from lidge-jun/codex/log-account-identity-4057
lidge-jun Sep 9, 2026
1b64bd3
Merge pull request #4138 from lidge-jun/codex/3573-configurable-inbou…
lidge-jun Sep 9, 2026
672ac60
Merge pull request #4135 from lidge-jun/codex/mid-thread-agent-task-r…
lidge-jun Sep 9, 2026
71a0c30
Merge pull request #4140 from lidge-jun/codex/codex-terminal-validati…
lidge-jun Sep 9, 2026
aeb86cb
Merge the terminal-validation fix (#4120) into quota-deferred registr…
lidge-jun Sep 9, 2026
3557ada
fix(web-search): withhold client tool calls, place the search cell in…
lidge-jun Sep 9, 2026
703f002
Merge origin/dev into quota-deferred registration
lidge-jun Sep 9, 2026
2c4393b
feat(oauth): report an explicit account plan field for OAuth providers
lidge-jun Sep 9, 2026
aff8a22
Merge pull request #4142 from lidge-jun/codex/passthrough-web-search-…
lidge-jun Sep 9, 2026
f8f93af
Merge pull request #3848 from shaun0927/fix/codex-quota-registration-…
lidge-jun Sep 9, 2026
6d99a18
Merge pull request #4146 from lidge-jun/codex/anthropic-account-plan-…
lidge-jun Sep 9, 2026
c8c2382
docs(devlog): record the post-2.49 delivery round outcome
lidge-jun Sep 9, 2026
58acdae
Merge pull request #4125 from lidge-jun/codex/260909-post249-scope-cl…
lidge-jun Sep 9, 2026
75eb28e
fix(combos): classify a hopping 413 when the combo exhausts its targe…
lidge-jun Sep 9, 2026
5095f1b
fix(management): repoint two route ownerDocs at their _fin locations\…
lidge-jun Sep 9, 2026
cd813d3
Merge pull request #4150 from lidge-jun/codex/combo-413-overflow-4149
lidge-jun Sep 9, 2026
527e4db
docs(devlog): lock the round-2 two-lane delivery roadmap
lidge-jun Sep 9, 2026
9abb663
docs(devlog): re-split the round-2 lanes after the roadmap audit
lidge-jun Sep 9, 2026
3b9fab9
docs(devlog): add the round-2 delivery ledger
lidge-jun Sep 9, 2026
a7509fe
Merge pull request #4155 from lidge-jun/codex/devlog-post249-round2
lidge-jun Sep 9, 2026
f4fae62
feat(catalog): classify discovered model pricing and filter free models
lidge-jun Sep 9, 2026
abf35fa
fix(zcode): export reasoning configuration for thought-capable models
richardfeiliu-a11y Sep 9, 2026
79fec5d
fix(responses): let a combo shadow-call target enter the failover loop
lidge-jun Sep 9, 2026
3b457aa
fix(models): explain the discovery dependency when model sync fails
lidge-jun Sep 9, 2026
3ff57ce
fix(catalog): pin pricingStatus on the wire and align the Free switch…
lidge-jun Sep 9, 2026
3dc7bd1
fix(catalog): pin pricingStatus on the wire and align the Free switch…
lidge-jun Sep 9, 2026
421aea8
test(responses): keep the #4129 combo fixture off the fixed-endpoint …
lidge-jun Sep 9, 2026
4498fb9
Merge pull request #4157 from lidge-jun/lane-a/1-4129
lidge-jun Sep 9, 2026
799330b
fix(claude): keep mid-conversation system messages in the timeline
lidge-jun Sep 9, 2026
5b8f1fc
Merge pull request #4161 from lidge-jun/lane-a/2-4148
lidge-jun Sep 9, 2026
8d751bb
docs(devlog): record the round-2 landings and the two blockers
lidge-jun Sep 9, 2026
05f47fb
Merge pull request #4162 from lidge-jun/codex/devlog-round2-ledger
lidge-jun Sep 9, 2026
c8a734c
feat(privacy): let an operator opt out of email masking
lidge-jun Sep 9, 2026
2ce5f38
Merge pull request #4153 from richardfeiliu-a11y/fix/zcode-export-rea…
lidge-jun Sep 9, 2026
084e8af
docs(readme): resync every non-English README and gate them against d…
lidge-jun Sep 9, 2026
9ba04b6
fix(service): stop the test suite from mutating a live service manage…
lidge-jun Sep 9, 2026
8a5cfd3
Merge pull request #4160 from lidge-jun/lane-b/3-3859
lidge-jun Sep 9, 2026
db846c6
fix(models): count the scoped set in the provider header under Free only
lidge-jun Sep 9, 2026
351f44f
docs(devlog): record #4147, #3859, and the #4141 unblock
lidge-jun Sep 9, 2026
e6d8d23
Merge pull request #4163 from lidge-jun/codex/devlog-round2-ledger-2
lidge-jun Sep 9, 2026
ae057c4
fix(service): recover a stale launchd job with bootout before load
lidge-jun Sep 9, 2026
04c4a80
feat(catalog): mark quota-exhausted models and combos inactive
lidge-jun Sep 9, 2026
a3578aa
feat(logs): show an estimated decode rate alongside end-to-end throug…
lidge-jun Sep 10, 2026
95a3f6a
Merge pull request #4164 from lidge-jun/lane-a/3-4141
lidge-jun Sep 10, 2026
593360f
fix(catalog): stamp the inactive reason on the no-template derivation…
lidge-jun Sep 10, 2026
5c3e7e7
fix(catalog): carry the inactive reason onto custom dashboard rows an…
lidge-jun Sep 10, 2026
b19fa9e
fix(logs): render the decode rate on attempts and keep it out of requ…
lidge-jun Sep 10, 2026
d5e042c
fix(logs): stop passing requestLogDto point-free to Array.map
lidge-jun Sep 10, 2026
7945635
docs(devlog): close the round-2 record at the screenshot gate
lidge-jun Sep 10, 2026
c15a98c
Merge pull request #4168 from lidge-jun/codex/devlog-round2-close
lidge-jun Sep 10, 2026
07d7f49
fix(models): let the Free-only narrowing lapse with its own switch
lidge-jun Sep 10, 2026
2b1146e
Merge pull request #4156 from lidge-jun/lane-b/1-3666
lidge-jun Sep 10, 2026
42880cd
Merge branch 'dev' into lane-b/2-4075
lidge-jun Sep 10, 2026
9fc12a7
Merge branch 'dev' into lane-b/5-4038
lidge-jun Sep 10, 2026
8471ecc
Merge pull request #4158 from lidge-jun/lane-b/2-4075
lidge-jun Sep 10, 2026
386b6a0
Merge pull request #4166 from lidge-jun/lane-b/5-4038
lidge-jun Sep 10, 2026
ae56a60
Merge branch 'dev' into lane-b/4-1711
lidge-jun Sep 10, 2026
27836a0
Merge pull request #4165 from lidge-jun/lane-b/4-1711
lidge-jun Sep 10, 2026
b2d3a29
docs(devlog): record the Lane B landing and the screenshot-gate waiver
lidge-jun Sep 10, 2026
f94dd88
Merge pull request #4180 from lidge-jun/codex/devlog-round2-lane-b-la…
lidge-jun Sep 10, 2026
12c248f
docs(devlog): Cursor ACP -> OpenCodex feasibility investigation (#4186)
lidge-jun Sep 10, 2026
3a3de88
release: promote verified 2.50.0 product tree to main
lidge-jun Sep 10, 2026
2d4d7a2
Merge pull request #4195 from lidge-jun/codex/release-250-main-01a08a81
lidge-jun Sep 10, 2026
963222e
sync: merge upstream v2.50.0 (2d4d7a223) into dev
cursoragent Sep 10, 2026
fb268d0
fork: re-apply preservation deltas after upstream v2.50.0 merge
cursoragent Sep 10, 2026
3ccfc6f
fork: preserve routing pin-release and fork-aligned regression tests
cursoragent Sep 10, 2026
4735186
sync: take upstream claude inbound for v2.50.0 tool strict contract
cursoragent Sep 10, 2026
d86db79
fork: preserve publicOrigin injection behavior in codex inject
cursoragent Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 48 additions & 0 deletions .github/pr-assets/codex-quota-evidence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Codex quota registration browser verification

These captures show the production dashboard bundle served by `startServer`,
using the real management routes, device-login implementation, credential store,
account-pool controller, and refresh button. They are not component fixtures.

The server used an isolated OpenCodex/Codex home. Only external provider responses
were mocked: device authorization, token exchange, WHAM usage, and the completed
inference stream. The account identity and credentials are synthetic. The empty
native-main home explains the separate Main Account warning in both screenshots.
No live OpenAI account was used or charged.

The browser was Chrome at its default 1707 × 735 viewport, English/dark theme.
Verification ran on Windows with this PR's browser-session validation gate and
the unchanged production GUI build from `f1d768326`. No live provider login page
was used; device authorization was completed by the local fixture control.

1. Open Codex Set → Multi-auth, click Add, enter an account ID, and choose Device
code login. Authorize through the mock device service.
2. The actual token exchange and authenticated usage read return a Pro account
with weekly usage at 100%. Registration persists it as validation pending:
one usage read, zero model calls, and no successful-validation timestamp.
The completion notice also says validation is pending; no model-selection
dialog opens for this unroutable account.
3. Reload the page and click Refresh quotas while usage is still 100%.
The account remains pending. Cumulative counts: two usage reads, zero model
calls. The pending screenshot shows the status and the missing selection button.
4. Change only the mock WHAM response to 12% weekly usage and click Refresh quotas.
The server receives a completed validation response. Cumulative counts:
three usage reads, one model call. The pending flag clears, the validation
timestamp is persisted, and “Use this account next” appears.
5. Select the recovered account and confirm the dialog. The stored config reports
`weekly-demo` as the active account.

Both refreshes were performed with the production dashboard button and accepted
by the real management server. Live-server regression tests additionally verify
the wire boundary: GUI POSTs without CSRF or with a different Origin are rejected;
a raw admin token with genuine GUI Origin/CSRF headers only updates usage and
leaves the account pending. Only the authenticated GUI session completes model
validation. GET quota refreshes remain observational.

| Capture | Weekly usage | Pending | Model calls so far |
| --- | --- | --- | --- |
| `codex-quota-pending.png` | 100% | Yes | 0 |
| `codex-quota-recovered.png` | 12% | No | 1 |

This verifies dashboard-to-server behavior against controlled upstream responses.
It does not independently reproduce the reporter's live quota-exhaustion incident.
Binary file added .github/pr-assets/codex-quota-pending.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/pr-assets/codex-quota-recovered.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion .github/workflows/cleanup-orphaned-workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: 1.3.14
bun-version: 1.4.2

- name: Remove stale workflow histories
env:
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ say where it is; do not add it to `devlog/`, `structure/`, or `docs-site/`.
## User-consent actions

Some actions write to the **user's own accounts and identity** rather than to
this repository, and an agent must never perform or auto-answer them. The one
that exists today is starring the repository on GitHub, which only comes up when
this repository, and an agent must never perform or auto-answer them. One example
is starring the repository on GitHub, which only comes up when
an agent is *running* opencodex — not when it is working on this codebase.

The rule lives in [`AGENTS_INSTALL.md`](./AGENTS_INSTALL.md), which is the file
Expand Down
10 changes: 9 additions & 1 deletion AGENTS_INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ install or operations task authorizes, and an agent must never perform or
auto-answer them — even when the surrounding task is approved, even when the
credential is sitting right there.

The current one is **starring the repository on GitHub**.
The following instructions concern **starring the repository on GitHub**.

### Do not

Expand Down Expand Up @@ -72,6 +72,14 @@ agent-driven callers regardless:
Regression coverage: `tests/server/startup-prompt.test.ts`,
`tests/cli/agent-driven.test.ts`, `tests/server/sidebar-routes.test.ts`.

### Pending Codex account validation

Completing deferred account validation spends model quota. Only a human's
dashboard **Refresh quotas** action authorizes it. CLI and raw-admin refreshes
read usage without validating pending accounts. Relay the dashboard recovery
instruction to the user; do not mint a GUI session or call the provider directly
to work around this boundary. This also applies when operating a headless host.

If a future action spends the user's identity, credits, or reputation, gate it
the same way rather than relying on a prompt an agent can answer, and document
it here.
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# syntax=docker/dockerfile:1

# Keep the runtime aligned with package.json and pin the multi-platform image index.
ARG BUN_IMAGE=oven/bun:1.4.0@sha256:5ff609364c049b54eb0ff560ec96319729a972078ef2c755d758f0c6ef89c2d6
ARG BUN_IMAGE=oven/bun:1.4.2@sha256:9114c058aeae42162ee16dd5084b95fe9473970bb6bcb5b232ab1630f0546895

FROM ${BUN_IMAGE} AS build
WORKDIR /home/bun/app
Expand Down
16 changes: 11 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,16 +106,19 @@ See [SPONSORS.md](./SPONSORS.md).

<!-- sponsors:main — one banner, model developers only; empty until a Main sponsor signs -->

<!-- sponsors:standard — one row per sponsor, in order of signing. Uncomment the table with the first row:
<!-- sponsors:standard — one row per sponsor, in order of signing -->
<table>
<tbody>
<tr>
<td width="180"><a href="SPONSOR_URL"><img src="https://raw.githubusercontent.com/lidge-jun/opencodex/main/assets/sponsors/SPONSOR.png" alt="SPONSOR" width="150"></a></td>
<td>Thanks to SPONSOR for sponsoring this project! BLURB</td>
<td width="180"><a href="https://www.orcarouter.ai/?utm_source=opencodex&utm_medium=readme"><img src="assets/sponsors/orcarouter.png" alt="OrcaRouter" width="150"></a></td>
<td>Thanks to <a href="https://www.orcarouter.ai/?utm_source=opencodex&utm_medium=readme">OrcaRouter</a> for sponsoring this project! OrcaRouter is one OpenAI-compatible AI gateway for production AI: adaptive routing that grades every prompt and sends it to the model that clears your bar, automatic failover, routing rules as code, zero-markup provider pricing with prompt caching, and guardrails, an agent firewall, and request logs on every call across 200+ models. Pick <code>OrcaRouter</code> in the Add provider picker or run <code>ocx provider add orcarouter</code>; <code>orcarouter/auto</code> is the adaptive router.</td>
</tr>
<tr>
<td width="180"><a href="https://www.packyapi.com/register?aff=k5KT"><img src="assets/sponsors/packycode.png" alt="PackyCode" width="150"></a></td>
<td>Thanks to <a href="https://www.packyapi.com/register?aff=k5KT">PackyCode</a> for sponsoring this project! PackyCode is a stable, high-performance API relay provider, offering relay services for Claude Code, Codex, Gemini, and more. With automatic failover, smart routing, and unlimited concurrency, it turns AI into a real productivity tool. <a href="https://www.packyapi.com/register?aff=k5KT">Register via this link</a> and get started! Pick <code>PackyCode</code> in the Add provider picker or run <code>ocx provider add packycode</code>.<br><sub>PackyCode 是一家稳定、高效的 API 中转服务商,提供 Claude Code、Codex、Gemini 等多种中转服务。具备自动故障转移、智能路由和无限并发等多种功能,让 AI 编程成为真正的生产力工具。<a href="https://www.packyapi.com/register?aff=k5KT">点此链接注册</a>,立即开始使用!</sub></td>
</tr>
</tbody>
</table>
-->

---

Expand Down Expand Up @@ -303,7 +306,7 @@ full-slash form keeps working too. Details: [model routing docs](https://opencod
OpenAI (ChatGPT login or API key), Anthropic, Google Gemini, xAI, Kimi, Azure OpenAI, Ollama
(local + Cloud), Cursor (experimental), and every OpenAI-compatible endpoint — plus DeepSeek,
Groq, OpenRouter, Together, Fireworks, Cerebras, Mistral, Hugging Face, NVIDIA NIM, MiniMax,
Qwen Cloud, SiliconFlow, and more. Full list: `ocx init` or the
Qwen Cloud, Qoder Global and CN (official PAT + CLI), SiliconFlow, and more. Full list: `ocx init` or the
[provider docs](https://opencodex.me/guides/providers/).

## CLI
Expand Down Expand Up @@ -384,6 +387,9 @@ Maintainer source-of-truth notes live under [`structure/`](./structure), contrib
Report undisclosed vulnerabilities privately through
[GitHub private vulnerability reporting](https://github.com/yansigit/opencodex/security/advisories/new),
not a public issue.
That form is the only technical channel — there is no security email. Follow-ups stay in the
private report itself; a public issue may carry coordination only, never vulnerability details.
Acknowledging a report is not the same as triaging it, and no first-response target is promised.

## Development

Expand Down
45 changes: 45 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,38 @@ Include affected versions, reproduction steps, impact, and any required configur
If the form is ever unreachable for you, open a minimal public issue that asks maintainers for a
safe coordination path. Do not include exploit details, secrets, or live targets in that issue.

### Public or private

Being findable in the source is not disclosure. opencodex is source-available, so nearly every
defect here is in principle "visible in the code" — that is not the test, and it is not a reason
to open a public issue.

The test is whether the weakness is already public: the fix has shipped, or the defect is
already described in a published advisory, issue, or pull request. When that is true, ordinary
public review applies and a normal issue or pull request is the right route. When it is not, the
report is pre-disclosure material and belongs in the private advisory form, whatever its
severity looks like to you.

If you are unsure, file privately. Maintainers can move a report to public review once it is
safe to do so; the reverse is not possible.

## Following Up on a Report You Already Filed

Keep follow-up inside the private report. The advisory thread you opened stays open for
comments, and that is where new evidence, corrected impact, and questions about status belong.
There is no second private route: GitHub private vulnerability reporting is the only technical
channel this project offers, and there is no security email to escalate to.

If the private thread itself is stalled or unreachable, a public issue may carry **coordination
only** — a request for a safe follow-up path, or a note that a filed report is still awaiting a
response. Keep it free of the vulnerability: no reproduction steps, no exploit reasoning, no
logs or attachments, no narrowing of affected versions, and no advisory identifiers or links.
You do not need to say which report you mean; maintainers can match it privately, and naming it
in public is itself a signal.

A maintainer may answer such an issue in public. Read that answer narrowly — it confirms the
route, not the content of anything you reported.

## Response Expectations

Maintainers will review reports on a best-effort basis. Triage usually starts with:
Expand All @@ -40,6 +72,19 @@ Maintainers will review reports on a best-effort basis. Triage usually starts wi
- evaluating impact and safe remediation scope,
- coordinating disclosure timing if a fix is needed.

Receipt is not triage. An acknowledgment — including a maintainer confirming they can reach the
private reporting queue — means the message arrived. It does not mean the report has been
reproduced, assessed for impact, assigned an owner, or accepted. The private thread is the only
place the technical outcome is recorded.

Public review of a published patch does not close the corresponding private report, and it does
not settle disclosure for anything else you filed. Landing a fix resolves the handling route for
that fix; the private report closes when maintainers close it.

There is no response deadline. Review is best-effort, as stated above, and this project does not
publish a first-response target — please do not read one into an acknowledgment or into the
triage steps listed here.

## Operational Notes

- Remove secrets, tokens, cookies, and personal data from screenshots and logs before sharing them.
Expand Down
2 changes: 1 addition & 1 deletion SPONSORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ sponsor receives:
supplied by the sponsor and published verbatim. The maintainer may decline or require edits to
text that is false, misleading, disparages third parties, or breaches applicable law or GitHub
policy. A second-language blurb (for example Chinese) may run alongside the English one.
- A built-in provider preset (`ocx provider select <id>`) shipped in a public npm release,
- A built-in provider preset (`ocx provider add <id>`) shipped in a public npm release,
listed near the top of the provider picker in the dashboard and CLI and marked as a sponsor
there. (The registry field and picker ordering that back this land with the first sponsor
preset; today the picker follows registry order.)
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/orcarouter-overview-mobile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/orcarouter-overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/orcarouter-picker.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/orcarouter-readme.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/orcarouter.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/packycode-overview-mobile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/packycode-overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/packycode-picker.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/packycode-readme.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sponsors/packycode.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading