You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: stable app-user identity across api-key rotation + workspace/chat UX
Identity:
- app_users (end-users provisioned via api_key) are now keyed on the api_key's
OWNER account, not the api_key id. SwitchToAppUser passes ident.UserID (the
owner, pre-switch) so the calling app can rotate/replace its api_key — a new
key row under the same account — without orphaning the end-user's sessions /
files / agents. Covers the X-Fastclaw-End-User header, the OpenAI `user`
field, and POST /v1/users (all route through SwitchToAppUser). The inbound
IM path was already owner-scoped. Collision-safe, idempotent, non-fatal
migration re-keys existing api_key-minted app_users onto their owner.
Workspace / chat UI:
- Resizable 3-pane layout: the platform sidebar is now drag-resizable (rail =
drag to resize / click to toggle, persisted, clamped); the workspace panel
caps at 70% of its container so expanding the sidebar auto-shrinks it and the
page never scrolls horizontally; opens at a comfortable width.
- File viewer: Files tab is a tree + inline viewer split (no modal); tree
default-expands one level; clicking a file shows highlighted SOURCE by
default, full-bleed, no card / copy / download chrome; "open in new tab" by
the close button; collapsible tree.
- Non-binary files (.env, Dockerfile, .sql, extension-less, unknown) render as
text instead of a download prompt; only genuine binaries offer download.
- Reset the viewer's file + content on conversation switch (no stale preview).
- Preview tab only shown for coding projects with a live dev server.
- Assistant messages use the full lane width on narrow panels; composer aligns
with the message rows (scrollbar gutter).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0 commit comments