ChatWalaʻau v0.106.0
This release rebuilds the chat sidebar for scale and makes the startup path honest: 「a compact, collapsible sidebar that loads hundreds of conversations as you scroll, operator-controlled model order, and an app that tells you when the backend is not up instead of pretending it is」.
Highlights
A sidebar that scales to hundreds of chats (v0.106.0)
- The chat list now loads a page at a time as you scroll instead of fetching every conversation at once. A folder's chats load when you open it.
- Listing your chats is dramatically cheaper. The server used to open and fully parse every conversation file -- message bodies and all -- on every sidebar load, just to read eleven metadata fields. It now keeps a small metadata index and re-parses only the files that actually changed. On a 300-chat store this cut a listing from ~43 ms to ~5 ms; the saving grows with the size of your history, because the old cost was proportional to the total bytes of every conversation you have ever had.
- The index (
.sessions/index.json) is derived, disposable state: it is reconciled against your files on every read, so a hand-edit, an external tool, or a crash mid-write all self-correct. Deleting it is always safe -- the next listing rebuilds it. - Pinned chats always sort first, then the most recently updated. That ordering now comes from the server, so the web UI and
chatwalaau sessions listfinally agree. - Typing in a rename box no longer re-renders every row in the list.
A denser, more legible sidebar (v0.106.0)
- The Folders and Chats sections each collapse from their header, so you can fold one away and give the other the whole panel. Both start expanded, and the choice is remembered per device.
- Rows are ~30% shorter (~57px to ~41px) while keeping both lines of text, so noticeably more chats fit on screen.
- The
msgs/imgslabels are now icons on the same line as the timestamp -- the row does not grow, and screen readers still hear "12 messages". - Times read as
YYYY/MM/DD HH:mmin 24-hour form, the same on every machine regardless of the browser's language. (Previously anen-USmachine and aja-JPmachine showed the same chat differently, and one of them with AM/PM.)
You choose the order models appear in (v0.106.0)
- Drag to reorder chat offerings in the Model Settings screen. That order is exactly what the chat model selector shows, so you can put your most-used model first.
- Offering cards collapse to a compact row (id, provider, model, default) and expand on click, so setting the order of many models is quick.
- The
defaultflag now means only "this model is preselected". It no longer forces that model to the top of the list. See BREAKING below.
The app no longer pretends an unreachable backend is fine (v0.106.0)
- If the API server is not up yet, the app now shows a readiness screen with the attempt count and elapsed time, and gets out of the way the moment the backend answers. If it never answers, it says so plainly and stops, with a Retry button.
- Previously, a failed startup check was reported internally as "signed in, everything is open", so the full chat UI rendered against a dead server: an empty chat list, no model selector, no settings icon, and sends that failed silently -- with nothing anywhere naming the real cause. That is fixed.
- Once the backend has answered once, no polling of any kind happens. A healthy deployment sees no change at all.
Fixed (v0.105.1)
- The Model Settings screen crashed in deployed builds with
Uncaught ReferenceError: VAR is not defined. The help text used a template-literal trick to display a literal${VAR}placeholder, which the production bundler folded into a real template literal. Development builds were unaffected -- only minified builds crashed. - The model catalog was baked into the Docker image.
backend/model_offerings.jsoncis git-ignored but was not excluded from the Docker build context, so a local copy shipped inside the image and could be served instead of your configured path. Put the catalog on persistent storage (e.g.MODEL_OFFERINGS_FILE=/home/data/model_offerings.jsonc) so it survives redeploys.
Fixed (v0.106.0)
- Saving Model Settings silently erased
auth_profiles. The save sent only the offerings; because an absentauth_profilesis treated as empty and an empty block is omitted when writing, a hand-authoredauth_profilesmap was destroyed -- and any offering referencing it viaauth_profile:then failed validation on the next load. The save now round-trips the block untouched.
>> BREAKING
No migration is required. Nothing on disk changes format, and no API response shape changes. But two things will look different immediately after upgrading:
>> BREAKING 1 -- The default model is no longer pinned to the top of the model selector
Until now, whichever offering carried default: true was hoisted to the top of the chat model dropdown, wherever it sat in model_offerings.jsonc. That hoist is removed -- the dropdown now shows models in the order they appear in the file, which is the order you can drag in Model Settings.
- Affected: anyone whose
defaultoffering is not already first inmodel_offerings.jsonc. Their dropdown order changes on upgrade. - Unchanged: the default model is still the preselected model, and the model that answers a request is the same as before. Only its position in the list moves.
- To restore the old look: drag the default model to position 1 in Model Settings -- which now does exactly what it says.
>> BREAKING 2 -- chatwalaau sessions list now returns pinned chats first
GET /api/sessions now guarantees its order server-side: pinned first, then most recently updated. Previously the server returned raw updated_at descending and only the web UI applied pinned-first, so the CLI and the web UI disagreed.
- Affected: any script or integration that depends on the previous raw
updated_atordering ofchatwalaau sessions listorGET /api/sessions. - Unchanged: the response shape. With no query parameters,
GET /api/sessionsstill returns every session as a bare JSON array, exactly as before. The newlimit/offset/folder_idparameters are optional and additive -- omit them and you get the pre-0.106.0 response byte-for-byte.
Not breaking, but new on disk
A new file appears: .sessions/index.json, a metadata cache that makes listing your chats fast. It is derived, disposable state -- deleting it is always safe, and it never appears as a chat.
Included in this release
This release includes implementation work from:
- v0.105.1 through v0.106.0
Notes
- Internal design management content and architecture control artifacts are intentionally omitted from this release note.
- No new environment variable is introduced in this release.
Installation
See the repository README for setup and usage instructions.
Version
- Release version:
0.106.0 - Previous release:
0.105.0