Published to npm as @bitkyc08/opencodex@2.12.0 with dist-tag latest.
New Features
- Lab: CL-01 deterministic protocol conformance harness; CL-02 immutable evidence ledger and projection; CL-03 bounded live-route probes; CL-04 CLI and management read surfaces; CL-05 compatibility matrix UI (#1320, #1333, #1352, #1378, #1384)
- Filter sidecar describers by real image-input capability (#1326)
- Publish vision describers and refuse the blind ones (#1327)
- Show only usable vision describers in the delegation card shape (#1328)
- Add Turkish translation for Web Dashboard UI & README (#1235)
- User-configurable per-model cost overlay (providers..modelCosts) (#1010)
- Providers: Add Chutes preset; Add Featherless preset (#1315, #1317)
Bug Fixes
- Keep Ready blocked while deterministic hygiene fails (#1329)
- Providers: Surface OpenCode Zen short-window rate limits; Bound quota response parsing (#1330, #1387)
- Keep failover combos when live discovery omits members (#1331)
- CL-02 post-merge hardening (#1343)
- Bound cli-help spawnSync so shard 3 cannot hang CI (#1370)
- Parse Sources headers linearly (#1342)
- Stop console popups from proxy-internal PowerShell lookups (#1278) (#1347)
- Guard local token expiry parsing against NaN (#1369)
- Bound tool schema expansion (#1355)
- Preserve native fallback without catalog (#1374)
- Propagate native uninstall failures (#1351)
- Claude: Contain main credentials to canonical forward routes; Honor Desktop native model opt-out; Apply fast mode updates atomically; Bound streamed reasoning identity; Bind proxy admission tokens to local destinations (#1358, #1363, #1356, #1377, #1360)
- Codex: Pin Darwin process utility path; Keep unreadable shim checks advisory; Tolerate malformed account plan values; Retain quota cooldown after account retry; Bound reset-credit lookup responses (#1362, #1372, #1373, #1353, #1396)
- Bound reproduction matching cost (#1364)
- Safely render prototype-named providers (#1371)
- Server: Bound search and image response bodies; Bound live sideband websocket frames (#1346, #1398)
- Pin PID identity probes to trusted binaries (#1359)
- Avoid model suffix regex backtracking (#1339)
- Bound streamed response bytes (#1376)
- Re-arm finalize after completion-only tool frames (#1341)
- Pin combo child routes to concrete targets (#1379)
- Preserve service repair on scan failure (#1375)
- Preserve bodyless responses with size headers (#1386)
- Enforce routed tool choice policy (#1382)
- Follow up source-preservation hardening for #1365 (#1392)
- Clear stripped service tier from logs (#1368)
- Close logs detail dialog on outside click (#1403)
- Fix GUI screenshot gate to use gui/ diff paths (#1405)
- Complete unknown cost-cap operator contract (#1181) (#1404)
- Pair tool results and synthesize missing-result errors (#1411)
Documentation
- Record the layer-3 merge commit in the vision filter outcome (#1340)
Chores
- Close final #1109 path-contract review gap (#1323)
- Bump react-doctor to 0.9.11 and clear new findings; [WRONG BRANCH] chore: rebase scratch for #1392 (#1336, #1393)
- Close CL-02 hardening gate (#1348)
- Cover bodyless 304 content length (#1389)
Changelog
Full Changelog: v2.11.1...v2.12.0
- #1010 feat(usage): user-configurable per-model cost overlay (providers..modelCosts) @harryzhou2000
- #1235 feat(i18n): add Turkish translation for Web Dashboard UI & README @ardakrt
- #1315 feat(providers): add Chutes preset @olddonkey
- #1317 feat(providers): add Featherless preset @olddonkey
- #1320 feat(lab): CL-01 deterministic protocol conformance harness @Wibias
- #1323 test(omp): close final #1109 path-contract review gap @Wibias
- #1326 feat(vision): filter sidecar describers by real image-input capability @lidge-jun
- #1327 feat(management): publish vision describers and refuse the blind ones @lidge-jun
- #1328 feat(gui): show only usable vision describers in the delegation card shape @lidge-jun
- #1329 fix(ci): keep Ready blocked while deterministic hygiene fails @Wibias
- #1330 fix(providers): surface OpenCode Zen short-window rate limits @Wibias
- #1331 fix(catalog): keep failover combos when live discovery omits members @Wibias
- #1333 feat(lab): CL-02 immutable evidence ledger and projection @Wibias
- #1336 chore: bump react-doctor to 0.9.11 and clear new findings @Wibias
- #1339 fix(openai-chat): avoid model suffix regex backtracking @luvs01
- #1340 docs(devlog): record the layer-3 merge commit in the vision filter outcome @lidge-jun
- #1341 fix(cursor): re-arm finalize after completion-only tool frames @luvs01
- #1342 fix(web-search): parse Sources headers linearly @luvs01
- #1343 fix(lab): CL-02 post-merge hardening @Wibias
- #1346 fix(server): bound search and image response bodies @luvs01
- #1347 fix(windows): stop console popups from proxy-internal PowerShell lookups (#1278) @wade19990814-hue
- #1348 test(lab): close CL-02 hardening gate @Wibias
- #1351 fix(service): propagate native uninstall failures @luvs01
- #1352 feat(lab): CL-03 bounded live-route probes @Wibias
- #1353 fix(codex): retain quota cooldown after account retry @luvs01
- #1355 fix(google): bound tool schema expansion @luvs01
- #1356 fix(claude): apply fast mode updates atomically @luvs01
- #1358 fix(claude): contain main credentials to canonical forward routes @luvs01
- #1359 fix(config): pin PID identity probes to trusted binaries @luvs01
- #1360 fix(claude): bind proxy admission tokens to local destinations @luvs01
- #1362 fix(codex): pin Darwin process utility path @luvs01
- #1363 fix(claude): honor Desktop native model opt-out @luvs01
- #1364 fix(issue-quality): bound reproduction matching cost @luvs01
- #1368 fix(responses): clear stripped service tier from logs @luvs01
- #1369 fix(oauth): guard local token expiry parsing against NaN @Bruce-Yii
- #1370 fix(test): bound cli-help spawnSync so shard 3 cannot hang CI @lidge-jun
- #1371 fix(dashboard): safely render prototype-named providers @luvs01
- #1372 fix(codex): keep unreadable shim checks advisory @luvs01
- #1373 fix(codex): tolerate malformed account plan values @luvs01
- #1374 fix(codex-catalog): preserve native fallback without catalog @luvs01
- #1375 fix(update): preserve service repair on scan failure @luvs01
- #1376 fix(sidecars): bound streamed response bytes @luvs01
- #1377 fix(claude): bound streamed reasoning identity @luvs01
- #1378 feat(lab): CL-04 CLI and management read surfaces @Wibias
- #1379 fix(router): pin combo child routes to concrete targets @luvs01
- #1382 fix(tools): enforce routed tool choice policy @luvs01
- #1384 feat(lab): CL-05 compatibility matrix UI @Wibias
- #1386 fix(images): preserve bodyless responses with size headers @luvs01
- #1387 fix(providers): bound quota response parsing @luvs01
- #1389 test(images): cover bodyless 304 content length @Wibias
- #1392 fix(omp): follow up source-preservation hardening for #1365 @Wibias
- #1393 [WRONG BRANCH] chore: rebase scratch for #1392 @Wibias
- #1396 fix(codex): bound reset-credit lookup responses @luvs01
- #1398 fix(server): bound live sideband websocket frames @Wibias
- #1403 fix(gui): close logs detail dialog on outside click @Wibias
- #1404 fix(routing): complete unknown cost-cap operator contract (#1181) @Wibias
- #1405 Fix GUI screenshot gate to use gui/ diff paths @Wibias
- #1411 fix(command-code): pair tool results and synthesize missing-result errors @Wibias