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