-
Notifications
You must be signed in to change notification settings - Fork 973
[WRONG BRANCH] promote dev onto preview for v2.39.0-preview.20260901 #3123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
44 commits
Select commit
Hold shift + click to select a range
5cec0a3
test(gui): guard the properties the Aside and Integrations work relie…
lidge-jun 71bd7be
chore(release): move dev to 2.39.0 after the v2.38.0 release (#3076)
lidge-jun 873d08e
docs(devlog): plan the remaining marks, page-wide logos and conflict …
lidge-jun 44b4de3
feat(gui): give the last three export clients their real marks (#3082)
lidge-jun d86ec3e
feat(gui): put the client's logo on every Integrations surface (#3083)
lidge-jun 2a90cda
feat(integrations): let the user overwrite a conflicted config on pur…
lidge-jun 06d6880
docs(devlog): close the Aside + Integrations unit with what the plan …
lidge-jun 0cc7341
fix(gui): stop the Grok mark disappearing on the dark theme (#3086)
lidge-jun 3982bb7
docs(devlog): scan the priority-70 backlog for round 2 and lock the r…
lidge-jun b4303bb
docs(devlog): record the wp6/wp5/wp4 entitlement stack outcome (#3079)
lidge-jun 91b2c4e
feat(cli): let the terminal resolve a conflict too (#3088)
lidge-jun 6e3abe8
docs(devlog): record the two defects the audit found after the unit c…
lidge-jun 5ef84b6
docs(devlog): plan brand marks for the 38 providers that render bare …
lidge-jun a0d386b
fix(responses): always carry query on web_search_call for Console Go …
lidge-jun a11038c
fix(gui): wire the provider marks that were already committed (#3093)
lidge-jun dcbc280
fix(gui): give every provider card the same control row (#3096)
lidge-jun 910b4c7
feat(gui): source brand marks for 23 providers that rendered a letter…
lidge-jun 5f0b390
fix(responses): bound the durable spill directory with an aggregate b…
lidge-jun 15f92e3
fix(gui): make every provider mark survive both themes (#3098)
lidge-jun d71aa07
feat(gui): give the Add-Provider catalog its logos (#3099)
lidge-jun 9d122dd
docs(devlog): close the provider-marks unit with what the plan got wr…
lidge-jun 6123be3
fix(history): resolve a rollout's session_meta by thread id (#3026) (…
lidge-jun d98d22c
fix(oauth): clear the refresh intent after a transient Anthropic failure
luvs01 dd7b6ab
fix(oauth): preserve Anthropic intent across uncertain refresh outcomes
luvs01 8728c0f
fix(oauth): resume retry-safe Anthropic intent cleanup
luvs01 e476acd
fix(oauth): keep post-commit intent cleanup from masking a durable cr…
luvs01 ab2f716
test(oauth): use declared cleanup operation
luvs01 5bb4113
test(oauth): preserve refresh-intent spy hooks
luvs01 a41b799
fix(oauth): adopt newer disk credentials before cleanup
luvs01 c418819
fix(oauth): retry refresh intent marker contention
luvs01 42ad9c4
fix(routing): treat a live full burst window as exhausted, not unknow…
lidge-jun 330470e
fix(stop): typed stop outcome so a history-only failure does not abor…
lidge-jun b46164e
fix(catalog): widen the dated-variant fold and guard its direction at…
lidge-jun a3656a9
fix(cursor): retry pre-header discovery eof (#3102)
lidge-jun 0ef04e6
fix(cli): stop start shadowing a live configured-port proxy, and retr…
lidge-jun e9d198a
fix(responses): strip Codex-private item metadata at the noncanonical…
lidge-jun 2869ec0
Merge pull request #3111 from lidge-jun/codex/2989-anthropic-refresh-…
lidge-jun 5c0c131
fix(responses): notice an unreadable MESSAGE reply, not just NEW_TASK…
lidge-jun a73a4c9
fix(codex): refresh a stored token before quarantining it on a WHAM 4…
lidge-jun 6d03687
docs(devlog): rescan the bug backlog after wp5 and wp6 (#3120)
lidge-jun b6e53d8
fix(gui): give restore focus somewhere to land when its trigger is go…
lidge-jun 0db8066
feat(gui): let Logs be filtered by model or provider (#3115)
lidge-jun 9af3a7b
fix(catalog): advertise image input for modalities-declared sidecar r…
lidge-jun 230cb19
Merge remote-tracking branch 'origin/dev' into codex/promote-preview-…
lidge-jun File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
97 changes: 97 additions & 0 deletions
97
.../_fin/260831_aside_client_and_integrations_ux/005_remaining_marks_provenance.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,97 @@ | ||
| # The three clients still on a monogram | ||
|
|
||
| Continuation of `004_brand_mark_provenance.md`, which closed six clients. After | ||
| that pass `CLIENT_MARKS` covers nine of twelve; `hermes`, `gajae` and `mcode` | ||
| still render `label.slice(0, 1)`. | ||
|
|
||
| 004 recorded `gajae` and `hermes` as monogram-only because neither publishes an | ||
| SVG with path geometry. That verdict stands on its own terms and is now | ||
| superseded by a wider rule: raster-to-vector conversion is authorized, so "the | ||
| vendor ships no SVG" no longer ends the search. Every mark below is traced from | ||
| the product's own raster asset rather than redrawn. | ||
|
|
||
| All three were located 2026-08-31 through the `aside-jun` skill driving a | ||
| signed-in Aside browser, then re-fetched and verified locally. | ||
|
|
||
| ## mcode — MiniMax Code | ||
|
|
||
| A genuine first-party SVG exists and 004 simply had not found it. | ||
|
|
||
| - Source: `https://raw.githubusercontent.com/MiniMax-AI/MiniMax-01/main/figures/minimax.svg` | ||
| - 1255 bytes, `viewBox="0 0 490.16 411.7"`, one `<path>` filled by a three-stop | ||
| linear gradient (`#e4177f` to `#e73562` to `#e94e4a`). | ||
| - It is the standalone symbol — the interlocking wave glyph with no wordmark | ||
| beside it. The docs-site asset (`mintcdn.com/minimax-zh/.../logo/light.svg`) | ||
| is the 129x32 horizontal lockup and was rejected for that reason: a wordmark | ||
| in a 20px square renders as unreadable letter mush. | ||
| - Publisher mark rather than product mark. MiniMax Code ships no mark of its | ||
| own and MiniMax is its publisher, so this is the closest first-party asset. | ||
| - Committed unmodified apart from dropping the Chinese-language `<title>` and | ||
| layer-name metadata the authoring tool left behind. The gradient id is | ||
| renamed: `未命名的渐变_6` means "unnamed gradient 6", it collides across | ||
| inlined documents, and a non-ASCII id in a shared namespace is a trap. | ||
| - Multi-color, so it must NOT enter `MONOCHROME_CLIENT_MARKS`: masking would | ||
| flatten the gradient to one ink. | ||
|
|
||
| ## hermes — Hermes agent | ||
|
|
||
| No usable SVG upstream; traced from the product's own application icon. | ||
|
|
||
| - Rejected first: `website/static/img/favicon.svg` is 113 bytes and its whole | ||
| body is one `<text>` element. 004 already recorded this. | ||
| - Rejected second: `https://nousresearch.com/safari-pinned-tab.svg` (12746 | ||
| bytes, potrace output). Its first path is `M40 2560 l0 -2560 2520 0 2520 0 0 | ||
| 2560 0 2560 -2520 0 -2520 0 0 -2560z` — the full 512-unit frame. Rendered at | ||
| 20px that is a black square with a hairline hole, which is worse than a | ||
| monogram. | ||
| - Accepted: `apps/desktop/assets/icon.png` from `NousResearch/hermes-agent`, | ||
| 574273 bytes, 1024x1024 RGBA, artwork bounded at (101,108)-(924,914). This is | ||
| the icon the Hermes desktop application ships, so it is the product's own | ||
| mark, not the publisher's. | ||
| - Quantizing the opaque pixels shows two inks: a light plate (340877 px) and | ||
| black art (241765 px), with ~20k px of antialiasing between them. It is a | ||
| single-ink illustration on a rounded plate. | ||
| - Traced with `potrace -s --flat --turdsize 8 --alphamax 1.0 --opttolerance | ||
| 0.2` over the mask `alpha > 128 AND mean(rgb) < 110`, which keeps the black | ||
| art and discards the plate. One path, squared to `viewBox="0 0 823 823"` by | ||
| centering the 823x806 trace. | ||
| - `fill="currentColor"`, and it MUST join `MONOCHROME_CLIENT_MARKS`. A 20px | ||
| render on `#0d1117` confirmed the untinted mark is invisible in dark mode — | ||
| the same failure `prime`, `opencode` and `kimi` already have. | ||
|
|
||
| ## gajae — Gajae Code | ||
|
|
||
| No SVG anywhere upstream, confirmed twice; traced from the mascot. | ||
|
|
||
| - Searched and found empty: `assets/`, `public/` (404), `docs/`, plus | ||
| `assets/logo.svg`, `assets/favicon.svg`, `public/logo.svg`, | ||
| `public/favicon.svg`, `docs/logo.svg` (all 404), and every published | ||
| `@gajae-code/*` npm tarball at 0.15.6 (no SVG entries). `docs/brand-assets.md` | ||
| lists the active marks as PNG only. | ||
| - Accepted source: `assets/character.png`, 3190496 bytes, 1550x2048 RGBA, | ||
| transparent background. | ||
| - It is a vertical lockup: the mascot occupies y < 1650 and the `gajae-code` | ||
| wordmark sits below it. Rows 1650-1682 are fully transparent, which is the | ||
| seam the crop uses. Only the mascot is traced; a wordmark would not survive | ||
| 20px. | ||
| - The artwork is upscaled pixel art, so tracing at source resolution follows | ||
| every staircase and produced a 1.3 MB SVG. Downsampling to a 128px box with | ||
| Lanczos plus a 0.6px Gaussian first, then tracing, gives ~31 KB. That is | ||
| larger than any existing mark (`zcode.svg`, 11037 bytes) because this one is | ||
| an illustration rather than a glyph. | ||
| - Seven color layers, k-means++ seeded at 3 for determinism, painted | ||
| largest-area first. The committed file's fills are `#1d0a04`, `#561203`, | ||
| `#981001`, `#e3770c`, `#d32e02`, `#8f3a04` and `#02ac61` — read off | ||
| `gajae-code.svg` rather than off an earlier tuning run, whose centers differed | ||
| because it quantized at a different target size. The smallest layer is the | ||
| visor green and a fixed area floor would have dropped it, so the floor is a | ||
| fraction of the opaque area instead. | ||
| - Multi-color, so NOT in `MONOCHROME_CLIENT_MARKS`. | ||
|
|
||
| ## Rule this pass establishes | ||
|
|
||
| A mark may be traced from the product's own raster asset when no vector exists, | ||
| provided the trace follows the source pixels rather than redrawing them, the | ||
| conversion parameters are recorded, and the result is verified by rendering at | ||
| the size it will actually be used. Tracing a wordmark into a square slot is | ||
| still refused, and so is a full-frame silhouette plate. |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
devlog/_fin/260831_aside_client_and_integrations_ux/060_wp7_remaining_marks.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| # wp7 — the three remaining marks | ||
|
|
||
| Depends on nothing in this unit that is not already merged. Provenance and | ||
| conversion parameters are in 005; this document is the diff. | ||
|
|
||
| ## New assets | ||
|
|
||
| `gui/public/provider-icons/minimax.svg` — the MiniMax symbol, fetched not | ||
| traced. Two edits to the upstream file: the `<title>资源 2</title>` and the | ||
| `data-name` layer wrappers go (authoring-tool residue), and the gradient id | ||
| becomes `minimax-wave` so it cannot collide and carries no non-ASCII. | ||
|
|
||
| `gui/public/provider-icons/hermes-agent.svg` — one `currentColor` path, | ||
| `viewBox="0 0 823 823"`. Named `hermes-agent` rather than `hermes` because | ||
| Hermes is also a provider name in this repo and `provider-icons/` is one flat | ||
| namespace. | ||
|
|
||
| `gui/public/provider-icons/gajae-code.svg` — seven fill layers, largest area | ||
| first, `viewBox="0 0 128 128"`-class square box produced by centering the | ||
| traced bounds. | ||
|
|
||
| ## gui/public/provider-icons/README.md | ||
|
|
||
| The "Two export clients deliberately have NO mark" section is now false and is | ||
| replaced. `gajae` and `hermes` move into the provenance list with their trace | ||
| parameters; `mcode` joins them. The section that remains explains the tracing | ||
| rule from 005 — a raster may be traced, a wordmark may not be squeezed into a | ||
| square slot, and a full-frame silhouette is rejected. | ||
|
|
||
| ## gui/src/components/apikeys-workspace/client-config-clients.ts | ||
|
|
||
| `CLIENT_MARKS` gains three entries: | ||
|
|
||
| ```ts | ||
| hermes: "/provider-icons/hermes-agent.svg", | ||
| gajae: "/provider-icons/gajae-code.svg", | ||
| mcode: "/provider-icons/minimax.svg", | ||
| ``` | ||
|
|
||
| `MONOCHROME_CLIENT_MARKS` gains `hermes` only. `gajae` is seven inks and | ||
| `mcode` is a gradient; masking either would flatten it. | ||
|
|
||
| The block comment above `CLIENT_MARKS` currently says two clients are absent on | ||
| purpose. That is now wrong in a way a reader would trust, so it is rewritten to | ||
| state the tracing rule and that every client has a mark. | ||
|
|
||
| ## Tests | ||
|
|
||
| `gui/tests/client-marks-assets.test.ts` already covers more than the plan | ||
| originally credited it with. It asserts file existence, README provenance, the | ||
| no-`<text>`/no-`<image>`/must-have-geometry rule, that no multi-color mark is | ||
| masked, that the four known-invisible marks ARE masked, and that `dsh` is not. | ||
| Every one of those extends to the three new files without an edit, so the | ||
| "new guard: no `<text>` element" the plan proposed would have been a duplicate | ||
| of an existing test rather than new coverage. | ||
|
|
||
| What is genuinely uncovered is the completeness of the map. Nothing asserts that | ||
| every id in `CLIENTS` has a mark, so an entry dropped in a merge degrades to a | ||
| monogram silently and looks identical to a client that never had one. That guard | ||
| is new, and it was driven red by removing the `mcode` entry. | ||
|
|
||
| Second new guard: a traced mark must record its raster source and its tracer | ||
| invocation in the README. A fetched mark has a URL to check; a traced one has | ||
| nothing to reproduce it from unless the parameters are written down. Driven red | ||
| by replacing the word `potrace` in the README. | ||
|
|
||
| The mask-set expectations do need extending: `hermes` joins the pinned list of | ||
| marks that must be masked, while `gajae` and `mcode` are caught by the existing | ||
| multi-color assertion the moment they are added to the set by mistake. | ||
|
|
||
| ## Verification | ||
|
|
||
| `cd gui && bun test tests/client-marks-assets.test.ts` plus the mask guard. | ||
| A 20px render of each new mark on `#ffffff` and on `#0d1117`, which is the check | ||
| that caught the Hermes dark-mode invisibility in the first place. |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
🔎 Supported by static analysis
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 50375
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 27151
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 50376
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 47411
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 15715
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 50376
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 10733
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 5230
Probe all captured runtime endpoints before package replacement.
When
runtimeTrustedis false,src/update/index.ts:240-246uses only the configured endpoint. The npm lane similarly falls back to configuration when the runtime PID is not alive. Ifocx stopcannot identify the runtime endpoint, its no-PID branch can return success after stale-state cleanup. The updater then probes only the configured endpoint, so a live or unclear proxy on the runtime endpoint can be missed and package replacement can proceed.Probe every distinct pre-stop endpoint and abort when any probe returns
liveorunknown. Add a regression covering a stale or mismatched runtime PID, a different runtime endpoint, and a live proxy that must block both updater lanes.📍 Affects 3 files
bin/ocx.mjs#L395-L395(this comment)src/update/index.ts#L273-L281tests/update-stop-classification.test.ts#L199-L229🤖 Prompt for AI Agents