Add Antigravity CLI (agy) as a managed app: provider switching for the native login and API-key modes, MCP and Skills sync through ~/.gemini/config, session browsing and session-log usage import.
Co-authored-by: peterLwk888 <lwk1124@outlook.com>
The icon picker gets an "Upload Image" button (PNG, JPG, WebP or SVG, up
to 2 MB and 4096 px). The image is redrawn on a canvas into a 96x96 PNG
and stored as a data URI in the existing `icon` column, so it travels
with the row through cloud sync, duplication and profiles. No new column,
no files on disk, nothing keyed by provider id (ids are shared across
apps). Opaque square images fill the icon box; anything else is padded to
the size of a built-in transparent logo. Uploading only changes the form;
nothing is written until Save.
The original file never reaches the database: SVG is loaded through
<img> (no scripts, no external requests) and rasterized, and re-encoding
drops EXIF. Custom icons are only ever rendered with <img>; remote URLs
are never loaded as icons.
Validation at every way in:
- Saving a provider or a universal provider, and syncing a universal
provider to its apps, fully decodes the PNG with the `png` crate
(already in the tree via `image`) under a 1 MiB decode limit and caps
it at 64 KiB and 256x256. Other strings still pass as icon names so old
rows stay editable.
- SQL import and cloud sync bypass saving, so the staging database drops
invalid custom icons from both `providers` and the universal provider
JSON before it replaces the main one. The rest of the backup imports
normally.
- Rendering checks the length and reads the PNG signature, IHDR length
and dimensions from the header before showing an image, and falls back
to initials if it fails to decode. Browsers sniff image formats, so
without the signature check a disguised GIF could slip past the size
limit.
Also:
- Uploads still being processed are dropped once the user removes the
icon, picks a built-in one, uploads again or closes the picker.
- Aggregation mode no longer derives model key prefixes from a custom
icon; it falls back to the provider name.
- The deep-link `icon` parameter only accepts built-in icon names; other
values are dropped instead of failing the link, so links cannot put a
data URI straight into the database.
Refs #8117
Add a GitHub Copilot preset for Codex that uses a managed GitHub account.
The local route resolves each request's model against the account's live
Copilot /models catalogue and picks the upstream protocol the model
advertises (native Responses first, Chat Completions as fallback in auto
mode), with an optional explicit protocol override.
- Response handling, the opaque-state rectifier and Stack web_search
stripping follow the transport actually used for each request rather
than the stored apiFormat.
- Fetching models fills the catalogue from the account's live prompt
limit, parallel tool calls and reasoning levels; presets keep
conservative fallbacks.
- Codex only treats a card as managed Copilot by its provider type, so
self-hosted relays keep their own key and endpoint.
- Copilot request identity headers are shared between the Claude and
Codex paths.
Co-authored-by: yuwk <52391318+ump45nose@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Jason <farion1231@gmail.com>
Rebuild the session page around structured transcripts.
- Session list: project groups start collapsed and remember the ones
expanded by hand; unchanged session files reuse their parsed metadata.
- Backend: all nine agents' transcripts parse into structured blocks
(text, thinking, tool call / result, image, event, step); the Codex
rollout parser is rewritten. New commands stream transcripts over a
Channel, serve full block content, image bytes and Finder reveal behind
validated content refs, and export a session as a Markdown file; a
transcript cache (8 entries / 96 MB) keyed by source fingerprints.
open_external now only allows http, https and mailto.
- Reader: turns laid out as prompt -> execution steps -> final reply, with
steps folded into a one-line summary, failures always shown, each
agent's native symbols and verbs, all / conversation / changes filters,
a conversation outline, in-session find, Markdown rendering (ported
from #6332), image lightbox and copy / export as Markdown.
- Review follow-ups: clippy, Codex 0.119-0.128 duplicate steps and late
failure status, Grok Build in-progress refresh, full arguments for long
shell commands, and shared block helpers across the parsers.
Co-authored-by: bigben446 <bigben446@users.noreply.github.com>
Co-authored-by: Jason <farion1231@gmail.com>