Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
327 commits
Select commit Hold shift + click to select a range
4397079
fix(storage): publish cleanup manifests atomically (#3786) [skip ci]
lidge-jun Sep 6, 2026
ad5285e
fix(container): persist Codex home separately (#3788) [skip ci]
lidge-jun Sep 6, 2026
26fa364
docs(skill): keep plaintext keys out of agent recipes (#3789) [skip ci]
lidge-jun Sep 6, 2026
c2b4dc0
fix(diagnostics): distinguish spill ACL timeout origins (#3790) [skip…
lidge-jun Sep 6, 2026
443310e
fix(config): add exclusive initial configuration publication (#3796) …
lidge-jun Sep 6, 2026
f89b815
fix(cli): preserve existing config during setup (#3802) [skip ci]
lidge-jun Sep 6, 2026
4a75971
test: own Windows shim advisory process deadline [skip ci]
invalid-email-address Sep 6, 2026
ac4a765
Merge pull request #3803: preserve Chat JSON streaming semantics [ski…
lidge-jun Sep 6, 2026
0a4e4bc
Merge pull request #3804: bound proven custom reasoning efforts [skip…
lidge-jun Sep 6, 2026
eccbdc4
Merge pull request #3805: preserve Chat refusal semantics [skip ci]
lidge-jun Sep 6, 2026
9dc8988
Merge current dev with verified track2 integration tree [skip ci]
invalid-email-address Sep 6, 2026
5759d9e
Merge pull request #3808: integrate Claude compatibility and Windows …
lidge-jun Sep 6, 2026
cf9f662
docs(credits): record four-track contributor attribution (#3811) [ski…
lidge-jun Sep 6, 2026
137d6a7
chore(release): open dev at 2.46.0 before releasing 2.45.0 (#3812)
github-actions[bot] Sep 6, 2026
bcdf559
chore(release): promote validated 2.45.0 to main [skip ci]
invalid-email-address Sep 6, 2026
b0900e5
chore(release): promote 2.45.0 to main (#3813)
lidge-jun Sep 6, 2026
e963aa6
docs: plan platform validation follow-up
invalid-email-address Sep 6, 2026
eabe7ce
docs: plan axis1 bounded bug fixes [skip ci]
invalid-email-address Sep 6, 2026
58fcb09
fix(claude): preserve reasoning and tool result envelopes
lidge-jun Sep 6, 2026
b2703f8
fix(grok): filter Codex control frames for strict Responses clients
lidge-jun Sep 6, 2026
0d42efa
docs(plan): define axis five display and CLI delivery
invalid-email-address Sep 6, 2026
ef54e82
docs: describe BigModel and Raycast integration contracts
invalid-email-address Sep 6, 2026
6a51f04
test(oauth): drain ACL flights before fixture teardown [skip ci]
invalid-email-address Sep 6, 2026
336c621
fix(grok): honor SSE event order and empty resets
lidge-jun Sep 6, 2026
9cde6e7
test(responses): cover established task delivery and compaction
lidge-jun Sep 6, 2026
cb8ac02
fix(diagnostics): distinguish inbound size measurement provenance [sk…
invalid-email-address Sep 6, 2026
c7f6ba7
feat(providers): carry static BigModel Responses preset from #3641
invalid-email-address Sep 6, 2026
130be8d
feat(catalog): carry native display labels with normalization contrac…
invalid-email-address Sep 6, 2026
1ee829d
feat(cli): carry provider list JSONL output [skip ci]
invalid-email-address Sep 6, 2026
e00d5c3
test(container): verify build startup and volume recreation [skip ci]
invalid-email-address Sep 6, 2026
92c95fa
feat(gui): carry discovered model name editor with recoverable saves
invalid-email-address Sep 6, 2026
f215f79
fix(anthropic): attribute quota headers and honor measured reset dead…
invalid-email-address Sep 6, 2026
12b174e
fix(claude): preserve signed and opaque replay block boundaries
lidge-jun Sep 6, 2026
8f8790e
docs(devlog): record axis three protocol delivery plan
lidge-jun Sep 6, 2026
9d775fa
fix(gui): preserve display name receipts across recovery failures
invalid-email-address Sep 6, 2026
d523990
fix(providers): repair static BigModel login and Responses effort
invalid-email-address Sep 6, 2026
9336a27
test(providers): distinguish BigModel upstream and bridge modalities
invalid-email-address Sep 6, 2026
e352ede
fix(gui): balance name editor helper text on narrow screens
invalid-email-address Sep 6, 2026
c721b94
fix(claude): report terminal closure buffer overflow once
lidge-jun Sep 6, 2026
513391e
test(container): isolate synthetic inference without internal network…
invalid-email-address Sep 6, 2026
76e667f
test(responses): account for ordinary tool catalog guidance
lidge-jun Sep 6, 2026
9b5b670
test(claude): correct replay and closure overflow oracles
lidge-jun Sep 6, 2026
619f7a7
test(container): declare the synthetic loopback destination [skip ci]
invalid-email-address Sep 6, 2026
4c1d9af
fix(gui): reconcile display name draft during snapshot render
invalid-email-address Sep 6, 2026
d6cf876
feat(integrations): carry Raycast client from #3733
invalid-email-address Sep 6, 2026
ea3d03a
fix(integrations): repair Raycast #3733 ownership and plan guidance
invalid-email-address Sep 6, 2026
387d787
fix(raycast): honor live export admission and defer ensure refresh (#…
invalid-email-address Sep 6, 2026
22f39ff
test(responses): exercise empty effort ladder through valid ingress
invalid-email-address Sep 6, 2026
95edd0a
fix(export): preserve live CLI destination despite saved listener dri…
invalid-email-address Sep 6, 2026
d175335
test(container): verify first-start migrations before persistence bas…
invalid-email-address Sep 6, 2026
ab2bbc6
Merge pull request #3828 from lidge-jun/codex/axis2-bigmodel-stack-11fe
lidge-jun Sep 6, 2026
b65b9d8
Merge pull request #3829 from lidge-jun/codex/axis2-raycast-stack-11fe
lidge-jun Sep 6, 2026
68d90aa
docs(claude): describe redacted reasoning replay
lidge-jun Sep 6, 2026
2269e07
Merge pull request #3830 from lidge-jun/codex/axis3-protocol-foundation
lidge-jun Sep 6, 2026
07f8d70
Merge pull request #3831 from lidge-jun/codex/axis3-grok-control-frames
lidge-jun Sep 6, 2026
4349cf3
Merge pull request #3832 from lidge-jun/codex/axis3-protocol-combined
lidge-jun Sep 6, 2026
e873008
docs(devlog): record verified protocol delivery and remainders
lidge-jun Sep 6, 2026
943e5a7
merge verified runtime landing into documentation closeout
lidge-jun Sep 6, 2026
e337374
Merge current dev into axis five native labels [skip ci]
invalid-email-address Sep 6, 2026
e862b86
Merge refreshed native label base into JSONL layer [skip ci]
invalid-email-address Sep 6, 2026
f51ec24
Merge refreshed axis five base for final integrated validation
invalid-email-address Sep 6, 2026
a5f9c34
Merge pull request #3834 from lidge-jun/codex/axis3-protocol-docs
lidge-jun Sep 6, 2026
91fba4b
ci: gate source-build Docker lifecycle verification [skip ci]
invalid-email-address Sep 6, 2026
15fa571
fix(container): retain routed catalog across managed recreation [skip…
invalid-email-address Sep 6, 2026
6f2ad1e
ci: select explicit-file typecheck mode for TypeScript 7 [skip ci]
invalid-email-address Sep 6, 2026
a3c2eb5
fix(anthropic): expire retained quota measurements at known resets [s…
invalid-email-address Sep 7, 2026
54fcc68
test(anthropic): keep probe fixtures inside live reset windows [skip ci]
invalid-email-address Sep 7, 2026
d3c70f9
fix(anthropic): normalize retained quota metadata and guard test tran…
invalid-email-address Sep 7, 2026
872f0e5
fix(cli): explain which side of a version mismatch is older [skip ci]
invalid-email-address Sep 6, 2026
2e8ef03
fix(responses): classify encrypted task recovery failures
invalid-email-address Sep 6, 2026
6388ec7
Merge pull request #3818 from lidge-jun/codex/platform-lane4-oauth
lidge-jun Sep 7, 2026
da18da4
Merge pull request #3819 from lidge-jun/codex/platform-lane4-body
lidge-jun Sep 7, 2026
5dee8cf
Merge pull request #3822 from lidge-jun/codex/platform-lane4-docker
lidge-jun Sep 7, 2026
7fdb0e9
Merge pull request #3823 from lidge-jun/codex/platform-lane4-final
lidge-jun Sep 7, 2026
1e16fe4
Merge axis five native display names (#3820)
lidge-jun Sep 7, 2026
be24986
Merge axis five provider JSONL output (#3821)
lidge-jun Sep 7, 2026
44c69fd
Merge axis five discovered model name editor (#3824)
lidge-jun Sep 7, 2026
2c8ec0b
docs(devlog): close axis five display and CLI delivery
invalid-email-address Sep 7, 2026
e894dcb
Close axis five delivery record (#3835)
lidge-jun Sep 7, 2026
0ccc6bd
docs: keep delivery attribution without contact addresses [skip ci]
invalid-email-address Sep 7, 2026
bf85e67
Merge PR #3836: repair delivery-note privacy scan [skip ci]
lidge-jun Sep 7, 2026
b29bbb4
fix(clients): preserve exact Aside file identities [skip ci]
invalid-email-address Sep 7, 2026
85fbdb5
Merge pull request #3825: verified axis1 bug fix [skip ci]
lidge-jun Sep 7, 2026
860baaf
Merge pull request #3826: verified axis1 bug fix [skip ci]
lidge-jun Sep 7, 2026
5a97db9
Merge pull request #3827: verified axis1 bug fix [skip ci]
lidge-jun Sep 7, 2026
5fdf9bb
Merge pull request #3842: verified axis1 bug fix [skip ci]
lidge-jun Sep 7, 2026
be112e4
docs: close axis1 bug-fix delivery record [skip ci]
invalid-email-address Sep 7, 2026
0d8b0cd
Merge PR #3847: close axis1 delivery record [skip ci]
lidge-jun Sep 7, 2026
2dd7b43
chore(release): open dev at 2.47.0 before releasing 2.46.0
github-actions[bot] Sep 7, 2026
3970601
chore(release): prepare 2.46.0 stable promotion
invalid-email-address Sep 7, 2026
6cf38b5
Merge pull request #3850 from lidge-jun/codex/dev-version-2.47.0
lidge-jun Sep 7, 2026
bba6322
Merge pull request #3851 from lidge-jun/codex/release-246-main
lidge-jun Sep 7, 2026
ec799db
docs(devlog): plan code-mode host contract for routed models
lidge-jun Sep 7, 2026
041aec0
docs(devlog): fold audit round 1 into the code-mode host contract roa…
lidge-jun Sep 7, 2026
d375916
docs(devlog): fold audit round 2 into the code-mode host contract roa…
lidge-jun Sep 7, 2026
3bcb9aa
docs(devlog): fold audit round 3 into the code-mode host contract roa…
lidge-jun Sep 7, 2026
5b70ddd
docs(devlog): record live Codex host probe evidence for the code-mode…
lidge-jun Sep 7, 2026
adafd12
fix(code-mode): state the host contract for nested helpers before the…
lidge-jun Sep 7, 2026
1633780
fix(code-mode): name the broken host rule on exec results that carry …
lidge-jun Sep 7, 2026
6bdcba5
docs: record the routed code-mode host contract
lidge-jun Sep 7, 2026
ece556a
Merge pull request #3854 from lidge-jun/codex/code-mode-host-contract
lidge-jun Sep 7, 2026
f1604c6
docs(devlog): make CI completion check fail closed [skip ci]
Ingwannu Sep 4, 2026
3e4a01c
fix(kiro): gate request diagnostics behind the debug check [skip ci]
luvs01 Sep 7, 2026
98564bd
fix(copilot): route Responses-only GPT, Grok and MAI models correctly…
invalid-email-address Sep 7, 2026
6061dcc
test(kiro): isolate and restore every debug setting the diagnostics g…
invalid-email-address Sep 7, 2026
25689e1
fix(responses): bound the streaming citation marker span [skip ci]
luvs01 Sep 7, 2026
00b74c7
fix(responses): keep an oversized citation span verbatim before a lat…
invalid-email-address Sep 7, 2026
924b657
fix(providers): refuse keychain restore across provider ownership [sk…
luvs01 Sep 7, 2026
6eadb16
fix(management): expose the effective web-search sidecar enabled state
invalid-email-address Sep 7, 2026
7f2fb92
Merge pull request #3865: release-train M layer 1 [skip ci]
lidge-jun Sep 7, 2026
dcec717
Merge pull request #3866: release-train M layer 2 [skip ci]
lidge-jun Sep 7, 2026
0ef7d29
Merge pull request #3867: release-train M layer 3 [skip ci]
lidge-jun Sep 7, 2026
99451df
Merge pull request #3868: release-train M layer 4 [skip ci]
lidge-jun Sep 7, 2026
0719457
Merge pull request #3869: release-train M layer 5 [skip ci]
lidge-jun Sep 7, 2026
d00615d
Merge pull request #3870: release-train M layer 6 [skip ci]
lidge-jun Sep 7, 2026
61a775c
docs: record lane B manual delivery roadmap [skip ci]
invalid-email-address Sep 7, 2026
1386e3d
fix(codex): sustain quota window activation [skip ci]
terrytan95 Sep 7, 2026
c386770
test(codex): cover quota activation regressions [skip ci]
terrytan95 Sep 7, 2026
6bcf864
fix(transport): admit Mihomo IPv6 fake-IP under TUN transparency exce…
hualiny Sep 7, 2026
bdd4e46
fix(transport): retain IPv6 pinning across proxy mismatches [skip ci]
invalid-email-address Sep 7, 2026
a814dd3
test(transport): run DNS fixture in the Bun test loader [skip ci]
invalid-email-address Sep 7, 2026
3955e10
fix(codex): fence main quota activation recovery [skip ci]
invalid-email-address Sep 7, 2026
b67f452
test(transport): pass the test-run lease to the child fixture [skip ci]
invalid-email-address Sep 7, 2026
62fe747
Merge pull request #3871: sustain Codex quota window activation (carr…
lidge-jun Sep 7, 2026
ddee5e8
Merge pull request #3872: admit Mihomo IPv6 fake-IP under TUN (carry …
lidge-jun Sep 7, 2026
edd396c
fix(opencode-go): carry session affinity through Pi native chat [skip…
makesomethingshit Sep 7, 2026
effba4c
test(opencode-go): define inbound opaque session identity contract [s…
makesomethingshit Sep 7, 2026
5b3df2e
fix: admit reasoning envelope allocations before materialization [ski…
Ingwannu Sep 7, 2026
eb8cc9a
fix(pi): scope generated session affinity to the Pi client [skip ci]
makesomethingshit Sep 7, 2026
7541517
fix: admit final Claude request copies before serialization [skip ci]
lidge-jun Sep 7, 2026
697a500
test: pin Go affinity identity and header precedence [skip ci]
lidge-jun Sep 7, 2026
e0e8d26
fix: fall back from native compact 404 to routed compaction [skip ci]
lidge-jun Sep 7, 2026
d8b18b1
fix: share envelope admission budgets and release transient request c…
lidge-jun Sep 7, 2026
feb1855
docs: include Pi session affinity in every guide example [skip ci]
lidge-jun Sep 7, 2026
c84cc3b
docs: describe native compact 404 fallback in route table [skip ci]
lidge-jun Sep 7, 2026
b0bcb4b
Merge pull request #3879: admit reasoning-envelope allocations before…
lidge-jun Sep 7, 2026
dac7e28
Merge pull request #3880: carry Pi/OpenCode Go session affinity throu…
lidge-jun Sep 7, 2026
76436a3
Merge pull request #3881: routed compaction fallback for native compa…
lidge-jun Sep 7, 2026
e96b5c5
fix(responses): make whole-string citation stripping agree with the s…
invalid-email-address Sep 7, 2026
413600d
docs(providers): describe OpenCode Go session affinity and the Pi com…
invalid-email-address Sep 7, 2026
6389787
Merge pull request #3882: align whole-string citation stripping with …
lidge-jun Sep 7, 2026
522ce5f
Merge pull request #3888: providers guide OpenCode Go affinity docs […
lidge-jun Sep 7, 2026
451fbff
feat gui: expose subagent fallback settings [skip ci]
x3M3x Sep 1, 2026
2e6ef45
docs: record lane C manual-chain roadmap [skip ci]
invalid-email-address Sep 7, 2026
eb5ff6c
feat(gui): add opt-in Codex Desktop sign-in toggle [skip ci]
RobinBially Sep 7, 2026
2b14053
docs: add subagent fallback settings screenshot [skip ci]
x3M3x Sep 2, 2026
a815f23
fix(web-search): bound the Anthropic sidecar SSE and error bodies [sk…
luvs01 Sep 7, 2026
c1f96f0
fix(gui): retain pending Desktop preference when sync is skipped [ski…
invalid-email-address Sep 7, 2026
f8d3545
fix(gui): preserve fallback choices and explain native-parent V2 comp…
invalid-email-address Sep 7, 2026
7131528
docs: pin lane C health wiring handoff [skip ci]
invalid-email-address Sep 7, 2026
2b158e9
fix(vision): bound the Anthropic vision sidecar SSE and error bodies …
luvs01 Sep 7, 2026
9d8d11a
fix(service): carry startup-health cache portion of #3863 [skip ci]
x3M3x Sep 7, 2026
734d41c
fix(gui): retain unapplied Desktop status across settings polls [skip…
invalid-email-address Sep 7, 2026
ffcd7ab
fix(gui): guard fallback hydration races and preserve row focus [skip…
invalid-email-address Sep 7, 2026
51b4437
test(web-search): cover bounded partial frames and detached cancellat…
invalid-email-address Sep 7, 2026
8eaa564
test(vision): pin capped descriptions and non-settling error-body can…
invalid-email-address Sep 7, 2026
91b54b7
fix(service): preserve fresh health and contain detached probe failur…
invalid-email-address Sep 7, 2026
abbdb22
docs: translate code-mode host rules; docs handoff from lane E [skip ci]
invalid-email-address Sep 7, 2026
f1b8f2d
fix(gui): keep fallback render identities in state [skip ci]
invalid-email-address Sep 7, 2026
f46a7f4
Merge pull request #3873: bound Anthropic web-search sidecar bodies (…
lidge-jun Sep 7, 2026
3f07e09
Merge pull request #3874: bound Anthropic vision sidecar bodies (carr…
lidge-jun Sep 7, 2026
686cb12
Merge pull request #3875: unblock settings load from the Windows heal…
lidge-jun Sep 7, 2026
2eec04f
Merge pull request #3876: default-off Codex Desktop sign-in preferenc…
lidge-jun Sep 7, 2026
d0fca4a
Merge pull request #3878: sub-agent fallback settings GUI with V2 com…
lidge-jun Sep 7, 2026
1ca1a56
fix(release): recover registry reads after acknowledged publication […
invalid-email-address Sep 7, 2026
56f356d
fix(release): bind registry checks to package metadata [skip ci]
invalid-email-address Sep 7, 2026
f4a4b46
Merge pull request #3864: recover release registry smoke after an acc…
lidge-jun Sep 7, 2026
609105c
docs: plan lane D manual release chain [skip ci]
invalid-email-address Sep 7, 2026
b462cc5
docs: record lane D roadmap audit decisions [skip ci]
invalid-email-address Sep 7, 2026
bf15366
fix(usage): resolve account prices through provider identity [skip ci]
invalid-email-address Sep 7, 2026
c35b5a6
fix(claude): preserve legacy thinking block order [skip ci]
invalid-email-address Sep 7, 2026
c5fb7e3
fix(models): guard edits during unknown receipt recovery [skip ci]
invalid-email-address Sep 7, 2026
c44c6de
test(usage): use approved synthetic email domains [skip ci]
invalid-email-address Sep 7, 2026
341d71d
feat(models): edit manual token prices and preserve explicit zero [sk…
invalid-email-address Sep 7, 2026
062e9cb
fix(models): validate price receipts and redact CLI failures [skip ci]
invalid-email-address Sep 7, 2026
a6e1227
fix(models): start price reload state from user actions [skip ci]
invalid-email-address Sep 7, 2026
568a3e8
docs: record code-mode delivery and qualify Desktop model switching […
invalid-email-address Sep 7, 2026
e0a1a88
docs: complete Raycast status and model-name recovery guidance [skip ci]
invalid-email-address Sep 7, 2026
f8c8f6d
docs: qualify Desktop model switching in translated guides [skip ci]
invalid-email-address Sep 7, 2026
209c88b
fix(models): isolate async price-read state callbacks [skip ci]
invalid-email-address Sep 7, 2026
c492474
feat(usage): add inclusive custom time windows [skip ci]
invalid-email-address Sep 7, 2026
089320e
docs: define lane D verification and handoff [skip ci]
invalid-email-address Sep 7, 2026
e346d7a
fix(usage): preserve dates across timezone calendar gaps [skip ci]
invalid-email-address Sep 7, 2026
5669413
test(models): scope price errors to their dialog [skip ci]
invalid-email-address Sep 7, 2026
fe94603
fix(usage): encode custom report identity as a tuple [skip ci]
invalid-email-address Sep 7, 2026
4fe4ad8
Merge pull request #3877: preserve signed and redacted thinking order…
lidge-jun Sep 7, 2026
d05250d
Merge pull request #3902: guard unknown display-name receipt recovery…
lidge-jun Sep 7, 2026
cb1113f
Merge pull request #3903: resolve account labels through pricing iden…
lidge-jun Sep 7, 2026
29405d3
Merge pull request #3904: edit manual prices and honor explicit zero …
lidge-jun Sep 7, 2026
da707cc
Merge pull request #3905: select inclusive custom usage time windows …
lidge-jun Sep 7, 2026
1649247
Merge pull request #3883: release-246 docs follow-ups (Raycast copy, …
lidge-jun Sep 7, 2026
74089fd
Merge pull request #3884: code-mode delivery record, Desktop /model c…
lidge-jun Sep 7, 2026
8ecf91f
feat(gui): add guarded routed model picker drag ordering [skip ci]
invalid-email-address Sep 7, 2026
dd8fb50
fix(gui): reconcile picker lifecycle outside synchronous effects [ski…
invalid-email-address Sep 7, 2026
3fb08ec
test(gui): preserve read-after-write picker fixture state [skip ci]
invalid-email-address Sep 7, 2026
1e188b7
Merge pull request #3887: drag-and-drop model picker ordering (#3774 …
lidge-jun Sep 7, 2026
524985f
feat(router): add per-model pinned reasoning effort overrides [skip ci]
Sep 3, 2026
331e68f
fix(router): unify effort validation with isDeclaredReasoningEffort, …
Sep 3, 2026
24149f3
fix(router): enforce effort cap after pin in native chat and normaliz…
Sep 3, 2026
5865367
fix: adapt pinned effort carry to current config and wire contracts […
invalid-email-address Sep 7, 2026
c145a70
fix: preserve price writes across concurrent provider replacement [sk…
invalid-email-address Sep 7, 2026
eeb5501
test: use a valid provider config for effort-cap API fixtures [skip ci]
invalid-email-address Sep 7, 2026
f802f71
Merge pull request #3892: per-model pinned reasoning effort overrides…
lidge-jun Sep 7, 2026
8bc9e4e
docs: publish the sponsorship rule set (SPONSORS.md + README section)…
lidge-jun Sep 7, 2026
6744571
docs(devlog): rank 27 next-release landing recommendations for dev af…
invalid-email-address Sep 7, 2026
93abd0f
docs(devlog): plan release train 260907 lanes and merge protocol [ski…
invalid-email-address Sep 7, 2026
0fbfcf8
docs(devlog): amend release-train ownership for i18n and how-it-works…
invalid-email-address Sep 7, 2026
8c5cf59
docs(devlog): record release-train wp1 dispatch and main chain [skip ci]
invalid-email-address Sep 7, 2026
c1419de
docs(devlog): record M chain landing on dev [skip ci]
invalid-email-address Sep 7, 2026
6415f4d
docs(devlog): record B landing and CI serialization policy [skip ci]
invalid-email-address Sep 7, 2026
0d419a2
docs(devlog): record A and M7/M8 landings [skip ci]
invalid-email-address Sep 7, 2026
6a788c6
docs(devlog): record C and E#3864 landings [skip ci]
invalid-email-address Sep 7, 2026
d79e6e7
docs(devlog): record D landing [skip ci]
invalid-email-address Sep 7, 2026
2fbaf48
docs(devlog): record E docs landing [skip ci]
invalid-email-address Sep 7, 2026
4c0f46e
docs(devlog): record #3887 landing [skip ci]
invalid-email-address Sep 7, 2026
768c7d1
docs(devlog): record final chain landing and train-head CI [skip ci]
invalid-email-address Sep 7, 2026
f502afd
docs(devlog): release-train readiness record for dev after v2.46.0 [s…
invalid-email-address Sep 7, 2026
273a3ab
Merge pull request #3913: 260907 release-train devlog record [skip ci]
lidge-jun Sep 7, 2026
aeefb3a
docs(readme): one-line Sponsors slot, sponsorship summary and contact…
lidge-jun Sep 7, 2026
c41232a
feat(providers): OrcaRouter PKCE account login and live catalog (carr…
lidge-jun Sep 7, 2026
17d2a17
docs(readme): one sponsor line pointing at SPONSORS.md (#3923)
lidge-jun Sep 7, 2026
c4725b2
fix(pricing): preserve concurrent rates when resetting the last live …
invalid-email-address Sep 7, 2026
0aef26c
fix(adapters): require host error context before recovery guidance
invalid-email-address Sep 7, 2026
e9d72e0
fix(oauth): accept documented Orca key grants and clarify private end…
invalid-email-address Sep 7, 2026
cb24485
fix(gui): serialize OAuth restarts behind pending cancellation
invalid-email-address Sep 7, 2026
09f669a
chore(release): open dev at 2.48.0 before releasing 2.47.0 (#3925)
github-actions[bot] Sep 7, 2026
7768800
fix(cursor): preserve tool results outside verified code-mode errors
invalid-email-address Sep 7, 2026
e7173ed
fix(gui): retain unapplied Desktop preference state across refreshes
invalid-email-address Sep 7, 2026
3baad73
fix(usage): reject custom reports with missing or mismatched window r…
invalid-email-address Sep 7, 2026
7d8082c
fix(gui): keep subagent roster usable when fallback settings fail
invalid-email-address Sep 7, 2026
ba5e4e8
docs: record release regression persistence and response contracts
invalid-email-address Sep 7, 2026
7df1b9e
Merge remote-tracking branch 'origin/dev' into codex/release-247-regr…
invalid-email-address Sep 7, 2026
18b8890
docs: explain custom report confirmation and price reset scope
invalid-email-address Sep 7, 2026
713be5c
refactor(gui): chain cancellation barriers without an await loop
invalid-email-address Sep 7, 2026
4437cd8
test(gui): observe dashboard hook state after React commits
invalid-email-address Sep 7, 2026
3d53e5f
release: prepare 2.47.0 from audited regression candidate
invalid-email-address Sep 7, 2026
42f2afd
refactor(gui): give settings polling and mutation explicit reducer ow…
invalid-email-address Sep 7, 2026
48ab3e1
fix(gui): guard polling input and precompute model membership
invalid-email-address Sep 7, 2026
eda8754
Merge commit '48ab3e1e66cfa6e0c873de2fafa4540ac61d6c7d' into codex/re…
invalid-email-address Sep 7, 2026
5725219
test(gui): follow the shared OAuth cancellation request owner
invalid-email-address Sep 7, 2026
f9e3515
Merge commit '57252193b' into codex/release-247-main
invalid-email-address Sep 7, 2026
6f71931
release: promote 2.47.0 to main (#3929)
lidge-jun Sep 7, 2026
d0737cf
fix(gui): isolate fallback choices from refreshed subagent roster
invalid-email-address Sep 7, 2026
9a60256
Merge commit 'd0737cff3' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
f48c322
fix(gui): keep unknown fallback availability explicitly empty
invalid-email-address Sep 7, 2026
9e9b1d3
Merge commit 'f48c322c0' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
0d7652a
test(gui): seed fallback availability in stale-response fixtures
invalid-email-address Sep 7, 2026
947bae9
Merge commit '0d7652ad1' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
f7f890f
release: apply final roster correction to main (#3933)
lidge-jun Sep 7, 2026
3ec056e
sync: merge upstream v2.47.0 and preserve fork hotspots
cursoragent Sep 7, 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
  •  
  •  
  •  
940 changes: 473 additions & 467 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

344 changes: 107 additions & 237 deletions .github/workflows/release.yml

Large diffs are not rendered by default.

149 changes: 147 additions & 2 deletions CREDITS.md

Large diffs are not rendered by default.

18 changes: 11 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,23 @@ RUN cd gui && bun install --frozen-lockfile

COPY --chown=bun:bun src ./src
COPY --chown=bun:bun scripts/model-metadata.source.json ./scripts/model-metadata.source.json
COPY --chown=bun:bun docker/bootstrap-tls.ts docker/bootstrap-token.ts docker/config.json docker/healthcheck.ts docker/verify-compatibility.ts ./docker/
COPY --chown=bun:bun docker ./docker
COPY --chown=bun:bun gui ./gui
RUN cd gui && bun run build

FROM ${BUN_IMAGE} AS runtime
WORKDIR /home/bun/app

# Docker supervises this foreground process; retain routed state on stop/recreate.
# This uses the existing service lifecycle mode and does not install a service manager.
ENV NODE_ENV=production \
OCX_SERVICE=1 \
OPENCODEX_HOME=/home/bun/.opencodex \
CODEX_HOME=/home/bun/.codex \
OCX_API_TOKEN_FILE=/home/bun/.opencodex/service-api-token

RUN install -d -m 0700 -o bun -g bun /home/bun/.opencodex
# These homes have incompatible auth.json formats; persist them without combining them.
RUN install -d -m 0700 -o bun -g bun /home/bun/.opencodex /home/bun/.codex
COPY --chown=bun:bun --chmod=0600 docker/config.json /home/bun/.opencodex/config.json

COPY --from=build --chown=bun:bun /home/bun/app/package.json ./package.json
Expand All @@ -44,13 +49,12 @@ COPY --from=build --chown=bun:bun /home/bun/app/docker ./docker
COPY --from=build --chown=bun:bun /home/bun/app/gui/dist ./gui/dist

USER bun
RUN ["bun", "docker/verify-compatibility.ts", "--runtime"]
RUN ["bun", "docker/verify-compatibility.ts"]
RUN ["bun", "-e", "import { readOpenCodexCompatibilityVersion } from './src/routing/compatibility/version.ts'; if (!/^[0-9a-f]{64}$/.test(readOpenCodexCompatibilityVersion() ?? '')) throw new Error('Missing or invalid generated compatibility manifest');"]
RUN ["/usr/bin/openssl", "version"]
VOLUME ["/home/bun/.opencodex"]
VOLUME ["/home/bun/.opencodex", "/home/bun/.codex"]
EXPOSE 10100

HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD ["bun", "docker/healthcheck.ts"]
CMD ["bun", "-e", "const r=await fetch('http://127.0.0.1:10100/healthz');if(!r.ok)process.exit(1)"]

CMD ["sh", "-c", "bun run docker/bootstrap-tls.ts && exec bun run src/cli/index.ts start --port 10100"]
CMD ["bun", "run", "src/cli/index.ts", "start", "--port", "10100"]
22 changes: 22 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,26 @@ account exclusion, affinity expiry, or 401/403 and 429 recovery can rebind them.
selection order when one of them — usually your Codex Desktop login — should only be reached for
once the others are drained.

### Sponsors

Sponsors keep opencodex maintained across every upstream protocol change. Interested?
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:
<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>
</tr>
</tbody>
</table>
-->

---

<details>
<summary>Docker Compose</summary>

Expand Down Expand Up @@ -226,6 +246,7 @@ see the [installation docs](https://opencodex.me/getting-started/installation/).
- **Sub-agents on any model** — feature routed models in Codex's sub-agent picker, with v1/v2
surface control and fallback chains. See the
[sub-agent guide](https://opencodex.me/guides/sub-agent-surface/).
<!-- sponsors:main-first-mention -->
- **Log in once, skip the API key** — OAuth for xAI, Anthropic, and Kimi; or forward
`codex login`, paste a key, or use `${ENV_VAR}` references.
- **Web search & vision sidecars** — non-OpenAI models get real web search and image understanding
Expand Down Expand Up @@ -278,6 +299,7 @@ full-slash form keeps working too. Details: [model routing docs](https://opencod

## Providers & adapters

<!-- sponsors:main-first-mention -->
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,
Expand Down
105 changes: 105 additions & 0 deletions SPONSORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Sponsors

opencodex is an independent, MIT-licensed project maintained without company backing. Provider
sponsorships fund maintenance and keep the proxy current with every upstream protocol change.
This page is the public rule set: what a sponsor gets, who qualifies for which tier, and how to
ask. It is written so that a sponsor, a contributor, and a user reading the README all see the
same terms.

"Sponsor" here means a paying provider sponsor. It is unrelated to the `maintainer-sponsored`
label in [`MAINTAINERS.md`](./MAINTAINERS.md), which is about a maintainer vouching for a
contributor's change to a restricted surface.

Sponsorship buys placement and maintenance attention. It never buys a change in routing behavior,
a default model, a weaker security default, or an exception to the review policy in
[`MAINTAINERS.md`](./MAINTAINERS.md). A sponsored preset goes through the same registry
pattern, typecheck, tests, and review as any other provider.

## Tiers

Two tiers, split by what the sponsor is.

### Main — model developers

Reserved for organizations that train or host their own foundation models (the OpenAI,
Anthropic, Google, Moonshot, MiniMax class). API relays and gateways are never sold Main
regardless of budget.

Every model developer is supported as a first-class provider whether or not it sponsors; that
part does not change. A Main sponsor additionally receives:

- The single banner slot above the sponsor table in the README (one at a time; see
[Placement](#placement)).
- First mention in the README login and provider lines (the "Log in once" OAuth paragraph and
the Providers & adapters summary, both marked with a `sponsors:main-first-mention` comment)
and priority ordering in the built-in provider picker.
- Everything in the Standard tier below.

### Standard — relays, gateways, and API resellers

For OpenAI-compatible relays, routers, gateways, and other resellers of model access. A Standard
sponsor receives:

- One row in the sponsor table: logo (about 150px wide, linking to the sponsor URL), a
"Thanks to X for sponsoring this project!" line, and a blurb of up to about 80 English words
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,
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.)
- A detailed entry on the [providers page](https://opencodex.me/guides/providers/) of the docs
site.
- Maintenance: if a release breaks the preset or its adapter, the maintainer fixes it; issues
filed against that provider are triaged first. There is no response-time SLA.

## Placement

The README sponsor section sits directly under **Quick start**, before the Docker Compose
details, so it is on screen before a first-time visitor scrolls. It carries one line of context
and the placements themselves:

1. One Main banner (empty until a Main sponsor signs).
2. The Standard table, one row per sponsor, in order of signing date.

The README says nothing else about sponsorship; tiers, pricing, and contact channels live only on
this page.

The translated READMEs under [`readme/`](./readme) carry one linking line right after their
own quick-start block instead of duplicating the section, so a sponsor change is one edit in
English.

## Pricing

Pricing is by inquiry; there is no public rate card. Sponsors who sign before the repository
reaches 20,000 GitHub stars lock in their rate for the length of their agreement. Rates rise
once that mark is passed.

Agreements are integration-scoped: they name the deliverables above, anchor the term to the npm
release that ships them, and carry no marketing obligations on either side. Both sides can walk
away with a pro-rated refund of unused months if the integration cannot be delivered.

## How to ask

- X: DM [@claudeebum](https://x.com/claudeebum)
- Discord: [discord.gg/JEaPEtkHwh](https://discord.gg/JEaPEtkHwh), channel `#sponsors`
- Email: jun@lidgeai.com

Send what you are (model developer or relay), the base URL and model list of your
OpenAI-compatible endpoint, and the tier you want. The maintainer replies with terms and a
draft agreement.

## What sponsors do not get

- No influence on routing defaults, failover order, quota policy, or which provider a user's
request reaches.
- No relaxation of the [security review](./MAINTAINERS.md) that applies to authentication,
credentials, or workflow changes.
- No access to user data, request logs, or telemetry; opencodex does not collect any.
- No say over unrelated issues, pull requests, or the release schedule.

## Current sponsors

Listed in the README sponsor section. This page carries the rules; the README carries the
names.
5 changes: 5 additions & 0 deletions compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,17 @@ services:
target: runtime
init: true
read_only: true
environment:
# A custom CODEX_HOME also requires a matching writable volume target below.
CODEX_HOME: /home/bun/.codex
ports:
- "${OPENCODEX_BIND_ADDRESS:-127.0.0.1}:${OPENCODEX_PORT:-10100}:10100"
environment:
OCX_CONTAINER_PUBLIC_PORT: "${OPENCODEX_PORT:-10100}"
OCX_CONTAINER_PUBLIC_ORIGIN: "${OPENCODEX_PUBLIC_ORIGIN:-}"
volumes:
- ocx-state:/home/bun/.opencodex
- codex-state:/home/bun/.codex
tmpfs:
- /tmp:size=64m,mode=1777
security_opt:
Expand All @@ -27,3 +31,4 @@ services:

volumes:
ocx-state:
codex-state:
2 changes: 1 addition & 1 deletion devlog/_fin/260905_always_on_429_failover/090_outcome.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ the tree rather than against the plan — the plan's own criteria were satisfied
Two were defects the fix itself created (#3499, #3503), three were surfaces still describing the
old contract (#3517, #3520, #3523), one closed the structural gap that let this unit ship two
subset-rotator loops (#3512), and one cleaned up after a collision with concurrent maintainer
work (#3526). All are recorded in `091`.
work (#3526). The runtime post-merge findings and CI lessons are recorded in `091`.

## What changed

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,37 @@ The post-merge run on `dev` then showed `ci failure`, which was a genuinely alar
out. It turned out to be cancellation by the maintainer's next merge two minutes later, not a
real failure — every job read `cancelled`, not `failure`.

**Rule:** verify with the check-runs API and require zero `null` conclusions, not a pass count:
**Rule:** use the exact head SHA, require every expected aggregate or policy gate by name, and
also require zero non-terminal check runs. A missing check is not success. Paginate before treating
the returned set as complete:

```bash
gh api repos/<owner>/<repo>/commits/<sha>/check-runs \
--jq '[.check_runs[] | .conclusion] | group_by(.) | map({(.[0]//"null"): length}) | add'
set -o pipefail
gh api --paginate repos/<owner>/<repo>/commits/<sha>/check-runs \
| jq -se '
[.[].check_runs[]] as $runs
| ["ci", "enforce-target", "hygiene", "react-doctor"] as $expected
| ($expected - [
$runs[]
| select(.status == "completed" and .conclusion == "success")
| .name
]) as $missing
| [
$runs[]
| select(.status != "completed" or .conclusion == null)
| .name
] as $pending
| if ($missing | length) == 0 and ($pending | length) == 0
then {ready: true, expected: $expected}
else error("missing=\($missing) pending=\($pending)")
end'
```

A clean result looks like `{"skipped":3,"success":24}` — no `null` key at all.
A clean result is `{"ready":true,...}` with exit status 0. This does not replace review-policy
checks such as confirming the approval belongs to the same head. Every `$expected` value is an
exact Checks API `.check_runs[].name`, not a workflow title or workflow-run name. If those required
check-run names change, update this list with the policy; silently accepting an absent name
recreates the original bug.

The near-miss paid for itself: sweeping `dev` afterwards found a real defect. #3511 and #3513
landed concurrently, one moving `anthropic-quorum-cache.test.ts` into `tests/routing/` and the
Expand Down
24 changes: 24 additions & 0 deletions devlog/_fin/260907_axis1_bugfixes/000_plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Axis 1: measured bug fixes and failure diagnostics

Completed: see [031_delivery_record.md](031_delivery_record.md) for merged commits, final CI, attribution and deferrals.

Archetype: satisfy existing contracts. Trigger: owner assigned axis 1 (#3809, #3464, #3661). Goal: deliver reviewable fixes through a manual PR chain and merge the verified scope. Non-goals: new account/retry policy, auth defaults, multipart recovery, releases, native stacks, sibling edits. Stop: merged feasible scope plus explicit unresolved dispositions. Escalation: defer a policy-dependent or unreproducible slice; reclaim a worker slice after two failed packets. Evidence: this unit plus ignored `.tmp/axis1/` and `.codexclaw` receipts. Resources: task-owned worktree/branches and GitHub repository access; Astra high leaves within host capacity; no caller-specified token or wall-clock budget.

Baseline: origin/dev 137d6a727; source PR #3809 at 4a1012359a522ddd6d7ff77203c9e5f3632d605c. Assigned 5cc8 checkout has pre-existing changes and remains untouched. Code lives in /tmp/ocx-axis1-20260907.

## Cycle map
1. wp0: docs-only scope, source audit and dependency roadmap; no runtime changes.
2. wp1: bounded quota, version-guidance and recovery-diagnostic changes; independent source/security review and structural checks. Runtime verification deferred explicitly to wp2.
3. wp2: publish ordinary PR chain, run final cumulative hosted CI, resolve findings, admin merge bottom-up and verify dev ancestry. Lower CI only if final CI fails.

## Delivery contract
The owner explicitly requests a manual delivery chain even where units are independent: quota -> CLI guidance -> recovery reasons, with each layer carrying its own tests and credit. This order is an integration order, not a fabricated runtime dependency. No native registration. Lower commits carry [skip ci] to defer duplicate workflow runs; final head does not. Skipped lower runs are never called passing. No local tests/typecheck/build suites and no hook-triggered suites; task pushes use --no-verify. Hosted ci.yml on the final head must cover all changed runtime/tests; lower-level runs are diagnostic only after final failure. Merge with --admin under the explicit owner exception; preserve original commits/trailers with merge commits, retarget each child to dev, and check integration trees against final evidence. Concurrent dev changes require fresh combined verification.

## Work boundaries
- Quota: src/providers/quota.ts, src/oauth/anthropic-routing.ts, src/oauth/health.ts, src/server/responses/core.ts, src/images/loop.ts, src/web-search/loop.ts, focused quota tests/layout, provider documentation.
- CLI: src/cli/version-skew.ts and relevant status/doctor consumers, tests/cli/cli-version-skew.test.ts, troubleshooting documentation. No service restart or repair behavior changes.
- Recovery: src/server/responses/agent-task-recovery.ts, agent-task-recovery-cache.ts, src/lib/bounded-body.ts and existing focused tests, Responses error projection if needed, recovery documentation. No expanded admission/retry.
- Main owns shared core.ts integration and test-layout files. Workers must not touch each other's paths or git index.

## Verification and acceptance
No local suite commands are executed. Source mapping, git diff --check and documentation structural checks are local evidence only. Hosted Cross-platform CI at final head provides runtime/typecheck/privacy and affected platform proof; inspect jobs for skipped coverage. Build completion is provisional until that run and independent audit succeed. Original PR author(s) must be named in commit Co-authored-by trailers, sourced from original commits/API; report authors may also be acknowledged accurately. Source-of-truth sync uses relevant existing structure and docs-site pages.
3 changes: 3 additions & 0 deletions devlog/_fin/260907_axis1_bugfixes/010_roadmap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# wp0: scope roadmap

Read current source, prior issue disposition and PR #3809 before choosing changes. Independent Astra high reviewers map each bounded issue. Confirm existing launcher behavior and bounded recovery reasons are already in dev; plan only residual fixes. Record exact file boundaries and acceptance scenarios in 020. Success: all three slices have verifiable requirements, main-owned shared files, original author anchors and explicit policy exclusions. Local evidence is documentation and source inspection; no runtime claim.
5 changes: 5 additions & 0 deletions devlog/_fin/260907_axis1_bugfixes/011_audit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# wp0 audit disposition

Independent Astra high reviewer Hooke: VERDICT: GO-WITH-FIXES (blockers=1). Shared-flight failure propagation was the blocker. Accepted: 000/020 now assign cache and bounded-body ownership and define shared typed outcomes, success-only cache, caller-local cancellation and capacity semantics. Source scouts independently identified and confirmed these requirements. Fixed stale CLI test path. Windows runtime proof requires final workflow_dispatch, now explicit in 030.

No runtime code changed. Documentation source/ownership inspection and git diff --check are the wp0 evidence. Runtime verification remains wp2.
5 changes: 5 additions & 0 deletions devlog/_fin/260907_axis1_bugfixes/012_roadmap_lock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Roadmap lock

The second independent audit returned VERDICT: PASS with no remaining blockers. The three accepted slices are ready for scoped implementation. Original quota author: Éverton Toffanetto (everton-dgn), commit identity from 4f3779c04753 and 3ef0ade296c3. Issue reporters: garysassano (10464497) and Hu9956 (282876394). Reporter acknowledgement is separate from code authorship.

Preserve raw unequal version diagnostics. Detailed recovery outcomes must travel in the shared flight, not caller-local closures. Quota observations use immutable dispatch identity. Final verification is hosted workflow_dispatch for full Windows coverage; local suites remain prohibited.
Loading
Loading