Commit Graph

4031 Commits

Author SHA1 Message Date
Vincent Koc cc6b766079 fix(ui): guide users through missing or broken AI setup (#115716)
* fix(ui): block chat until inference is configured

* fix(ui): gate new sessions on configured inference

* fix(ui): gate custodian before inference starts

* fix(ui): clarify custodian setup navigation

* fix(ui): explain missing AI provider setup

* fix(ui): distinguish unavailable configured AI

* fix(ui): align inference setup fixtures

* test(ui): default mock gateway to working inference

* test(ui): align startup send gate coverage

* test(ui): inherit inference in gateway fixtures

* test(ui): normalize deferred gateway agents

* test(ui): update model setup sidebar fixture
2026-07-29 16:48:48 +08:00
Vincent Koc 0f9c702d8b fix(ui): collapse custodian startup error gap (#115720) 2026-07-29 16:43:30 +08:00
Vincent Koc 755eea5e97 fix(ui): localize remaining control surfaces (#115730)
* feat(ui): add localization keys for control surfaces

* fix(ui): localize relative time and durations

* fix(ui): localize update and recovery notices

* fix(ui): localize chat controls and command results

* fix(ui): localize memory management views

* fix(ui): localize shared tool surfaces

* fix(ui): localize settings and action notices

* chore(ui): tighten localization raw-copy baseline

* fix(ui): preserve localized status copy

* fix(ui): preserve compact sidebar time label

* fix(ui): preserve near-future sidebar direction

* test(ui): align screenshot localization assertion
2026-07-29 16:34:35 +08:00
Vincent Koc 87a66ddf2d fix(ui): unify sidebar thread density (#115646) 2026-07-29 16:12:54 +08:00
Peter Steinberger a2c88e2a18 feat(ui): path-based agent and panel URLs on Settings > Agents (#115673)
* feat(ui): add agent panel path URLs

* test(ui): clarify unknown agent route fallback

* fix(ui): reject agent URL dot segments

* test(ui): clarify agent panel switch proof

* chore(ui): localize panel id table and refresh docs map

* test(ui): keep agent panel cases test-local

* chore(ui): keep agent route path type local
2026-07-29 04:12:46 -04:00
Peter Steinberger d885f9175d feat(ui): move settings save feedback into the sidebar footer (#115679)
* feat(ui): move settings save feedback to sidebar

* test(ui): support stateful config writes in mock gateway

* test(ui): add save indicator to memory sidebar test
2026-07-29 04:10:56 -04:00
Peter Steinberger 4a108155c5 fix(ui): restore in-flight assistant replies after reconnect (#115691)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 04:09:29 -04:00
Peter Steinberger 62c71c7b23 fix(control-ui): defer local media checks until preview roots load (#115672)
Carry forward Brandon Zarnitz original bootstrap fix into the current Control UI owner modules. Keep the authenticated Gateway authoritative until preview roots arrive and preserve populated-root denials. Add fail-first regressions, real Chromium audio/image and denial flows, and ticket/authentication proof.

Fixes #67915

Co-authored-by: Brandon Zarnitz <bzarnitz13@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 03:55:24 -04:00
Vincent Koc 14940edf15 feat(skills): add Skill Workshop lifecycle hooks (#115606)
* feat(skills): add lifecycle hook contracts

* feat(plugins): expose skill hook contracts

* feat(plugins): identify skill evaluators

* feat(skills): persist proposal evaluation lifecycle

* feat(skills): add agent evaluation action

* feat(skills): emit committed skill lifecycle changes

* feat(gateway): expose skill proposal evaluation lifecycle

* feat(ui): add Skill Workshop evaluations

* fix(skills): bind lifecycle state to proposal revisions

* fix(skills): preserve lifecycle events without artifacts

* feat(cli): evaluate skill proposals

* fix(ui): bind evaluations to proposal revisions

* docs(skills): document lifecycle hook primitives

* chore(plugin-sdk): refresh skill hook surface

* fix(skills): harden proposal evaluator execution

* fix(plugins): isolate skill evaluator inputs

* fix(cli): align skill lifecycle deadlines

* fix(skills): preserve evaluation replay invariants

* test(ui): capture Skill Workshop evaluation proof

* fix(skills): bind apply to evaluated target tree

* fix(skills): preserve evaluation contract edges

* fix(skills): bound evaluation event storage

* chore(skills): keep lifecycle helpers internal

* refactor(skills): isolate evaluation persistence

* fix(skills): satisfy lifecycle validation gates

* chore(protocol): refresh Skill Workshop clients

* docs: refresh Skill Workshop map

* chore: keep release notes in PR metadata

* docs: refresh merged docs map

* fix(ci): type Code Mode catch errors

* fix(skills): freeze lifecycle observation payloads

* fix(protocol): keep proposal inspect backward-decodable

* fix(skills): enforce final evaluator bundle limits

* fix(skills): preserve lifecycle caller attribution

* chore: drop subsumed Code Mode formatting

* test(plugins): adapt lifecycle hook mocks
2026-07-29 15:49:44 +08:00
Peter Steinberger 7018a36d04 feat(ui): memory settings polish — inline add-on toggles, phase explanations, embedding test (#115557)
* feat(ui): toggle memory add-ons inline on the Settings tab

* feat(ui): improve memory overview and settings controls

* fix(ui): restore rejected settings toggles

* fix(ui): surface memory add-on restart requirements

* fix(ui): reconcile restart notices by gateway process

* fix(ui): preserve pending restart notices

* fix(ui): order memory add-on catalog reloads

* fix(ui): reload add-ons through current gateway

* fix(ui): respect plugin mutation availability

* test(ui): type the plugins.list mock fallback for mutationAllowed
2026-07-29 03:40:52 -04:00
Peter Steinberger 18535626ed test(ui): cover imported Claude history redaction (#115683)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 03:36:38 -04:00
Peter Steinberger 6fbaa4d232 ui: complete contextual Settings documentation links (#115665)
* feat(config): require docs decisions for root settings

* feat(ui): link settings pages to guides

* refactor(ui): keep model providers page compact

* fix(ui): style page subtitles and carry base hints in mock dev
2026-07-29 03:35:28 -04:00
Vincent Koc e31dc59250 fix(ui): clarify model picker state labels (#115632) 2026-07-29 15:25:47 +08:00
Peter Steinberger 4f428e6226 fix(ui): fall back when profile hero avatar fails (#115600) 2026-07-29 02:06:10 -04:00
Peter Steinberger 8fd49c84aa feat: make self-learning automatic by default (#115576)
* feat: make self-learning automatic by default

* fix: preserve capture authorization boundaries

* test: split autonomous capture coverage
2026-07-29 02:04:57 -04:00
Peter Steinberger 5b6d326567 refactor(chat): consolidate media and outbox lifecycle state (#115621) 2026-07-29 01:56:51 -04:00
Peter Steinberger 33ca26807a feat(ui): add plugin Discover path URL (#115587) 2026-07-29 01:28:13 -04:00
Peter Steinberger df9a940872 feat(chat): show live run telemetry across clients (#113084)
* feat(chat): show live run telemetry across clients

* fix(chat): satisfy native validation gates

* fix(chat): settle advertised terminal runs

* fix(android): clear stale run usage on gaps

* chore(i18n): align native source inventory

* fix(chat): reconcile telemetry with current projections

* refactor(chat): keep run state in owner extensions

* chore(i18n): refresh native source inventory

* test(ui): expect persistent working telemetry through streaming
2026-07-29 01:27:58 -04:00
Patrick Erichsen aaf9b3bc4a fix(ui): contain model picker scrolling (#115473) 2026-07-29 00:20:30 -05:00
Peter Steinberger 04eb57d299 feat(ui): add contextual Settings documentation links (#115560)
* feat(config): add contextual settings docs URLs

* feat(ui): add contextual settings guide links

* docs: add settings guide pages

* docs: refresh generated docs map

* docs: polish settings guide pages prose
2026-07-29 01:00:15 -04:00
Peter Steinberger 46dd03ad0a fix(talk): add GPT-Live consult safety parity (#115562) 2026-07-29 00:55:33 -04:00
Peter Steinberger 8ff566a24c fix(ui): clearly label beta releases in the update banner (#115518)
* fix(ui): identify beta channel in update banner

* fix(ui): preserve update-banner translation baseline
2026-07-29 00:19:31 -04:00
Po-Han Shih 0a2ca5dbe4 fix(ui): restore WCAG AA contrast for muted webchat text (AI-assisted) (#110195)
* fix(ui): restore WCAG AA contrast for muted webchat text

Dark theme --muted tokens already meet AA, but chat timestamps and
slash-arg hints applied opacity that composited below 4.5:1. Drop the
opacity dimming and add a token/composited contrast regression test.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ui): narrow theme contrast test types for strict TS

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ui): condense muted contrast comment

Shorten the dark-theme --muted WCAG rationale to the repo inline-comment style while keeping the no-opacity-dimming invariant.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: retrigger after unrelated tui-backend.test timeout

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 00:17:33 -04:00
Peter Steinberger ac7154eeb4 fix(ui): give Memory settings path-based tab URLs (#115515)
* fix(ui): add path-based memory tab URLs

* chore: remove release-owned changelog entry
2026-07-29 00:12:09 -04:00
Peter Steinberger b7ab8aa3da refactor(chat): consolidate browser and terminal history ownership (#115511)
* refactor(chat): consolidate session history lifecycle ownership

* fix(ui): share canonical isolated test registry
2026-07-29 00:00:13 -04:00
Peter Steinberger eee32eaf66 refactor(ui): remove duplicate dashboard widget paths (#115504) 2026-07-28 23:18:16 -04:00
Peter Steinberger 7bc1472846 test(ui): settle Workboard form state before assertions (#115496) 2026-07-28 22:55:23 -04:00
Peter Steinberger c092ec437c refactor: remove duplicate runtime and plugin paths (#115483) 2026-07-28 22:06:04 -04:00
Patrick Erichsen f0de25b3fd fix(ui): canonicalize agent model identity (#115480) 2026-07-28 21:05:11 -05:00
Patrick Erichsen e50a91cf55 fix(ui): preview model picker interactions live (#115477)
* fix(ui): preview model picker interactions live

* fix(ui): keep provider preview on native buttons
2026-07-28 21:00:52 -05:00
Patrick Erichsen b231de6809 fix(ui): match disabled microphone picker background (#115472) 2026-07-28 20:39:00 -05:00
Peter Steinberger 76c6ec0740 refactor(chat): remove duplicate session projection paths (#115461) 2026-07-28 21:05:17 -04:00
Peter Steinberger 6782eb7104 fix(ui): prevent unowned dashboard subscriptions (#115457) 2026-07-28 20:59:40 -04:00
Kagura d53261360f fix(agents): use lastSeenAtMs tie-break in canvas default-node selection (#112084)
* fix(agents): use lastSeenAtMs tie-break in canvas default-node selection

When multiple nodes share the same connectedAtMs (or are all disconnected),
the comparator now checks lastSeenAtMs before falling through to the stable
nodeId alphabetical ordering. This prevents the canvas from selecting a stale
node that was connected long ago but has since been replaced by a more recently
active device.

* fix(nodes): harden offline canvas target selection

Co-authored-by: Kagura <kagura.chen28@gmail.com>

* fix(nodes): keep offline target fix release-ready

Co-authored-by: Kagura <kagura.chen28@gmail.com>

* fix(nodes): ignore stale connection times offline

Co-authored-by: Kagura <kagura.chen28@gmail.com>

* test(ci): stabilize startup and memory UI assertions

* test(gateway): inject prepared manifest metadata

* test(gateway): isolate startup model log coverage

* test(gateway): reuse prepared model manifests

* test(ui): keep startup abort fixture cold

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 19:49:15 -04:00
Patrick Erichsen 89bdb2d1c0 fix(ui): explain empty agent session groups (#115407)
* fix(ui): explain empty agent session groups

* fix(ui): align empty session group hint
2026-07-28 18:06:04 -05:00
Peter Steinberger ad3f74f296 fix(chat): make web and terminal share one session state (#115429)
* fix(chat): consolidate web and terminal session state

* fix(chat): preserve live history across stale snapshots
2026-07-28 18:53:21 -04:00
Peter Steinberger d74e2214d3 feat(ui): add Memories search tab to Memory settings (#115419)
* feat(ui): add Memories search tab to Memory settings

* test(ui): pin a canonical lobster look in memory overview tests

lobsterPetSeed mixes a random per-load salt into the seed, so the hero's
palette—and palette-dependent sprite geometry like the sleeping eye
peek—varied per test process and failed ~1 in 3 runs.

* test(ui): satisfy memory overview palette typing
2026-07-28 18:09:16 -04:00
Peter Steinberger 74f3af9735 refactor(gateway): remove duplicate cron shutdown paths (#115417)
* refactor(gateway): consolidate cron shutdown lifecycle

* test(ui): stabilize sleeping mascot regression
2026-07-28 18:06:53 -04:00
Peter Steinberger 7a1aa4eb4f feat(ui): Talk settings page with catalog-driven realtime pickers (#115409)
* feat(talk): emit realtime models and voices in talk.catalog and mirror create-time readiness

* feat(ui): add curated Talk settings page with catalog-driven pickers

* docs(talk): correct stale claims and add one-page GPT-Live setup path

* fix(ui): refresh Talk catalog on config-hash advance and neutralize GPT-Live badge

* fix(ui): provider-aware Talk selection, atomic provider switch, focus refresh

* fix(ui): resolve Talk provider fallbacks via catalog and make Default a true reset

* fix(ui): provider-compatible transports and race-free Talk catalog loads

* fix(ui): never resolve an unknown explicit Talk provider to the active one

* docs(talk): note Android relay readiness caveat for browser-only models

* fix(ui): keep the relay transport when switching Talk provider to Auto

* fix(ui): align section-ownership test and drop unused export after rebase
2026-07-28 17:38:15 -04:00
Peter Steinberger d239a59d82 fix(ui): make Control UI ownership and permissions reliable (#115364)
* fix(ui): unify connection-owned gateway event dispatch

* fix(qa): keep hosted UI smoke evidence truthful

* fix(ui): make mobile navigation drawer an accessible modal

* refactor(ui): centralize settings search destinations

* fix(ui): own chat media resource lifecycles

* fix(ui): unify sidebar session scope ownership

* refactor(ui): remove obsolete navigation backdrop styles

* refactor(ui): isolate dashboard provider lease capabilities

* fix(ui): centralize gateway operator permissions

* style(ui): format gateway event regressions

* fix(ui): render live dashboard permissions immediately

* fix(ui): enforce approval grant authority

* fix(gateway): fence retired sockets after event gaps

* fix(ui): isolate sidebar gateway fixtures across shared workers

* test(ui): isolate singleton-sensitive browser suites

* fix(ui): retire stale catalog pagination on gateway reconnect

* fix(ui): restore drawer focus after native dialog dismissal

* fix(ui): seed drawer threads and preserve modal focus ownership

* fix(ui): isolate nested native drawer overlay lifecycle

* test(ui): prove isolated dashboard lease authorization

* fix(ui): bound settled managed image resources

* fix(ui): type native modal focus and shared test helper

* fix(ui): correct approval mock types and trim dead export

* fix(ui): keep settings section metadata private

* fix(qa): keep hosted coverage regression within lint limit

* refactor(ui): keep catalog presence in its session data owner

* fix(browser): regenerate bundled copilot runtime

* test(ui): split board lease authorization regressions

* fix(ui): snapshot gateway listener fanout without redundant spread

* fix(ui): bind chat media subscriptions to image lifetime

* fix(ui): extract overlay access lifecycle

* fix(ui): restore guarded media after Lit reconnection

* test(ui): localize board lease fixture title

* fix(ui): reuse system approval fixture labels

* test(ui): narrow managed media lifecycle source

* fix(ui): prevent retired board gateway clients from rolling back leases

* fix(ui): expose pairing to pairing-scoped operators

* fix(ui): preserve legacy device pairing access

* fix(ui): preserve responsive sidebar ownership

* fix(ui): preserve responsive navigation and prove media ownership

* fix(ui): retire revoked catalog and refresh pairing grants

* test(ui): align typed catalog fixtures with main
2026-07-28 16:42:05 -04:00
Peter Steinberger 18ecde3d9f refactor(chat): keep web and terminal sessions synchronized (#115377)
* refactor(chat): unify web and TUI session synchronization

* refactor(chat): extract canonical projection and transcript owners

* test(gateway): verify private transcript store identity

* test(agents): protect public transcript storage boundary

* fix(chat): harden cross-client identity and subscription lifecycles

* fix(gateway-client): preserve type-safe release callback rejection

* test(ui): complete shared sidebar gateway fixture
2026-07-28 16:08:10 -04:00
Peter Steinberger 5ae6e5fc58 fix(ui): order model picker by provider strength (#115380)
* fix(ui): improve model picker ordering

* fix(ui): preserve model picker provider width

* chore: leave model picker note to release flow

* fix(models): preserve unranked catalog order
2026-07-28 15:59:57 -04:00
Peter Steinberger 8574853375 feat(ui): make Memory settings a destination page with live overview and dreams (#115383)
* feat(ui): make Memory settings a destination page

* chore: drop changelog entry (release generation owns CHANGELOG.md)

* fix(ui): keep memory tab normalization private
2026-07-28 15:56:52 -04:00
Peter Steinberger c475209abc fix(ui): keep explicit navigation ahead of chat canonicalization (#115366)
* fix(ui): preserve navigation during chat canonicalization

* refactor(ui): extract chat canonicalization ownership

* style(ui): keep chat page within line budget

* refactor(ui): trim chat page layout helpers

* style(ui): format canonicalization changes
2026-07-28 15:39:19 -04:00
Peter Steinberger c536b0731e perf(ui): debounce event-driven session list refreshes and right-size child paging (#115374) 2026-07-28 15:16:28 -04:00
Peter Steinberger a8fb4872fb refactor: harden shell completion and shard Control UI E2E (#115332)
* refactor: harden CLI completion and shard Control UI E2E

* fix: keep completion command-tree result private

* fix: remove unused browser test helper exports

* test: cover sharded Control UI workflow contract
2026-07-28 14:35:27 -04:00
Peter Steinberger 87a7084e96 fix(ui): anchor the thread branches menu to its trigger button (#115352) 2026-07-28 14:34:33 -04:00
Peter Steinberger 642befa179 feat(ui): swap three plain Lobsterdex palettes for balloon, ascii, and portal (#115308) 2026-07-28 14:28:02 -04:00
Peter Steinberger 4683c752ed test(ui): stabilize browser route readiness (#115320) 2026-07-28 13:59:05 -04:00
Peter Steinberger d4c9c3c1a1 refactor(ui): derive page route specs from the route table (#115214)
* test(ui): guard route tree against route-table drift

* refactor(ui): derive page route specs from the route table
2026-07-28 13:25:38 -04:00