Records the approved four-part design (store, collection, BFF API, bell
UI) and the current implementation status.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Covers the remaining piece of the per-user error-log feature: unread
cursor module, useErrorLogs hook, ErrorLogBell component, header mount.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
routeErrorResponse gains an optional actor; every route that resolves an
actor now passes it, so API failures survive the toast. Unauthenticated
failures and the error-logs route itself are never logged.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add errorReporter (errorToast = toast.error + fire-and-forget POST to
/api/error-logs) and wire it into the operational error toasts across
chat, threads, tasks, agents, models, files and clipboard. Pure form
validation hints stay on toast.error.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Three mechanisms, merged in ThreadList: a 10s heartbeat polling the new
?status=busy filter (out-of-band runs: scheduled tasks, other clients),
a module-level running store fed by useChat's own run lifecycle (zero
latency for this client's runs), and a spinner replacing the status dot
while either source marks the thread busy. The BFF list route now
validates and forwards the status filter, which also unbreaks the
previously ignored status dropdown.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Thread state carried ~1.9MB of internal runtime data
(_quickjs_snapshot_payload, skills_metadata) that no WebUI code reads,
and opening a conversation fired three independent fetches of it. The
BFF now strips those keys (1.9MB -> ~15KB) and getConversation shares
one in-flight request across concurrent callers.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The list route forwarded each thread's full values.messages to the
browser (~47MB for 20 threads), blocking the main thread on JSON.parse
and making the list appear suddenly after a long wait. The BFF now
derives title/description/pinned/needsUserInput server-side via the
shared conversationSummary module and never sends values or interrupts;
useThreads consumes the slim shape directly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Matches the backend split: usage attribution no longer shares
EVOSCIENTIST_DEPLOYMENT_ID with workspace scope partitioning.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Every conversation-list load fanned out getByThread per visible thread;
legacy threads without a scope each logged a 404 warning and added a
round-trip. A thread whose metadata claims no workspace_scope_id can
never pass the scope assertion, so skip the probe and filter it directly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds a GenerationParamSlider next to the reasoning-effort slider so a
per-thread temperature/top_p override can be set from the chat bar.
Unset sliders rest at the registry-catalog default in a muted style;
dragging commits an override, and clicking the value resets to the
default. Hidden below the sm breakpoint, and disabled while the
thread inherits the registry model.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ThreadModelSelection is now "inherit" or { primary, reasoning_effort };
the BFF validator tolerates and drops legacy auxiliary keys, the runs
route no longer snapshots an auxiliary ref, and the Registry Editor's
default-auxiliary field is removed, matching the backend's single-role
snapshot resolution.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Editing a large registry draft is easy to lose to a stray click; the
dialog now only closes via the X or Close button.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Saved models start collapsed to a compact status row (key, availability,
enabled, Test); new unsaved models start expanded for editing. Test
outcomes stay visible regardless of collapse state.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Saving no longer runs live provider tests: changed enabled models are
saved as disabled (defaults repointed when needed) and the user
re-verifies manually with the per-model Test button, then re-enables and
saves again. A successful test now refreshes the local availability so
re-enabling is a plain save.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Editing an enabled model invalidated its verification record, so the
backend rejected the save with MODEL_NOT_AVAILABLE. The editor now
detects changed enabled models (mirroring configuration_hash inputs plus
credential rotation) and runs the documented disable & save -> test ->
enable & save sequence as one click, temporarily repointing defaults
when the edited model is the default primary.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
With multiple providers configured, the vertical stack required long
scrolling. The left pane now lists providers with enabled markers and
per-model availability dots plus the template picker; the right pane
shows the selected provider's editor, auto-selecting newly added
providers and clamping selection on remove.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add the six phase-1 templates (智谱 GLM, OpenAI, Anthropic,
OpenAI-compatible, Anthropic-compatible, Ollama) that prefill adapter,
Base URL, auth mode, and suggested models; saved providers remain
ordinary profiles. Verified in browser against the live dev server.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- New RegistryEditor renders providers, models, runtime parameters and
capabilities from the backend's AdapterParameterSpec contract, with
ModelAvailability badges, write-once credential staging, provider tests
showing effective_request_options, revision CAS on save, and 422 detail
paths surfaced verbatim (design doc sections 9, 11.8)
- ConfigDialog now hosts the Registry Editor (admin-only; non-admins see a
notice from the 403 path)
- AccountDialog shows the session role and embeds an admin user-management
section (list/create/promote/demote/password reset/delete, last-admin
guard enforced server-side)
- Deleted legacy ProviderProfiles/BuiltinProviders/RegistryBuiltinProviders
editors, providerProfiles/legacyLlmConfig libs, the admin-token proxy and
the /api/provider-profiles, /api/provider-actions, /api/default-model and
/api/config BFF routes (design doc section 10 legacy removals)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>