Skip to content

v10.4

Choose a tag to compare

@paracoding-ai paracoding-ai released this 18 Aug 19:46
· 17 commits to main since this release

Install or upgrade with ./install.sh — it adopts an existing install and refuses a downgrade. MANIFEST.txt lists every file and its digest. 125 files, 27 executable.

The chat's transport is now visible, and it reaches models it could not before

Vertex is the default transport for both Claude and Gemini and needs no API key. That was already true and almost nothing said so — Settings showed an empty key box, which reads as "unconfigured, paste a key". Each provider now prints what actually resolved: transport, region, model, and when something is wrong, the blocker and the one setting that moves you to the other transport. Read the line, not the box.

Claude gained the global-endpoint handling Gemini has had for months. Some published models are served only on the global Vertex endpoint, and asking a regional host for one does not 404 — it answers:

HTTP 429 Quota exceeded ... base model: anthropic-claude-opus-5

which reads as a quota problem, and the quota tables agree, because the per-base-model metric enumerates regional buckets only and has no row for a model that is not served regionally. The model is fine, the quota is fine, the endpoint is wrong. Both providers now detect this and override the configured region, logging the model that caused it. If you see a 429 naming a base model, check the endpoint before you file a quota request.

The opus-5 floor stopped eating newer models. It force-upgraded anything matching the prefix claude-opus-4 — right when that meant 4.0 and 4.1, wrong once the family gained 4-5, 4-6 and 4-8, which postdate the floor and are often the models a project actually has quota for. Genuinely stale ids still upgrade; newer ones are yours to pin with CHAT_API_OPUS.

A light theme, and chrome you can rebrand without forking

Six palettes: purple (still the default), green, orange, blue, dark, and light. The light one is 24 token values and no rule changes — every colour the chrome uses reads a CSS custom property, so a palette is data rather than a patch.

Two things worth knowing before you change any of it:

  • The hue is a token; the alpha stays at the call site. Colours are written rgba(var(--ink-rgb),.28) rather than collapsed into flat tokens, because the accent appears at five different alphas, recessed surfaces at eight, and the ink at twenty-one. Collapsing each family to one token is the obvious refactor and it silently restyles panel depth and border weight everywhere while looking like a cleanup.
    • The logo is data too. The shipped mark is a 96×96 square that the stock filter chain paints gold, so the defaults crop to a circle and recolour — fine for that asset, ruinous for a wide lockup, which gets cropped to its first two letters. --logo-filter, --logo-radius, --logo-fit-*, --logo-w-*, --logo-h-*, --logo-maxw and --logo-shadow-* carry the treatment, so a finished asset is a list of overrides instead of an edit.
      Mushroom mode is a switch rather than something to delete: window.PC_BRAND.whimsy = false turns it off and hides its four toggles. It overrides the stored preference rather than seeding a default, because anyone who has ever clicked the toggle carries pc_mush=1, and moving only the default would leave it on for exactly the people who use it.

Known limit, stated rather than implied: chrome strings are still authored in harness.html, not read from data. Changing them means carrying a patch you re-apply on upgrade. Colours and logo treatment are data; text is not, yet.

One self-test was red on a working console

install.sh step 10/10 grepped /harness for a page title this installer never serves: it ships PC_REQUIRE_PASSKEY=0, which serves login.html, and that string is only in locked.html. The check now asserts pc-locked-stage, a structural marker present in both documents — so it says "an anonymous caller reaches the locked stage" without asserting which posture is deployed, and without breaking when somebody renames a brand word.


Apache-2.0. Your project, your bill, your key.