Title: Add searchable filtering to the settings navigator by DragonnZhang · Pull Request #40 · modelstudioai/openwork · GitHub
Open Graph Title: Add searchable filtering to the settings navigator by DragonnZhang · Pull Request #40 · modelstudioai/openwork
X Title: Add searchable filtering to the settings navigator by DragonnZhang · Pull Request #40 · modelstudioai/openwork
Description: Closes #39 What & why The settings navigator rendered a flat, unfilterable list of 16 sections (General, Appearance, App, AI, Input, Shortcuts, Memory, MCP Servers, Hooks, Extensions, Permissions, Labels, Messaging, Server, Workspace, Preferences). Comparable desktop apps (Claude Code Desktop, VS Code, Codex desktop) all let you search settings; OpenWork's session list, sources list, model picker and tools list already have search, so settings was the conspicuous gap. This adds a search box at the top of SettingsNavigator that filters sections by title + description (case-insensitive substring), with: the existing session-search styling (search icon, clear button, focus ring), a "No results found" empty state, Esc to clear. Frontend-only — the navigator already holds all section metadata in the renderer, so filtering is pure React state. No backend / qwen-code change. Reuses the existing common.search and common.noResultsFound i18n keys, so no locale strings are added or reordered. Changes SettingsNavigator.tsx — search box + client-side filter + empty state. LeftSidebar.tsx — emit data-testid={link.id} on nav buttons so the Settings entry point is addressable from e2e (per the harness README's "add a data-testid in the same PR" guidance). e2e/assertions/settings-search.assert.ts — new CDP assertion (below). e2e/app.ts — harness robustness so more than one assertion can run headless: each launch gets its own profile dir (keyed on the unique debug port), and on headless Linux the app launches under setsid so teardown reaps the whole xvfb-run tree. Previously a lingering Electron instance held the single-instance lock and the second assertion's launch could never find a renderer target. Verification (DoD) bun run typecheck:all — ✅ passes. bun test — no new failures vs. main (the repo has pre-existing, unrelated failures — e.g. BrowserCDP, BrowserPaneManager, i18n locale parity sorted checks; this change introduces none and touches none of them). Electron build — ✅ (electron:build). App boots — ✅ (app-boots assertion). Feature CDP assertion — ✅ 2/2 passed: 🧪 Running 2 e2e assertion(s) • app boots and main window renders ... ✅ (2599ms) • settings navigator search filters sections ... ✅ (2924ms) ✅ 2/2 passed The settings-search assertion drives the real built app over CDP: opens Settings from the sidebar, types the first section's title and asserts the list narrows to exactly the predicted matches (every visible row contains the query and the list shrinks), types a no-match query and asserts the empty state with zero rows, then clears and asserts the full list is restored. 🤖 Generated with Claude Code Generated by Claude Code
Open Graph Description: Closes #39 What & why The settings navigator rendered a flat, unfilterable list of 16 sections (General, Appearance, App, AI, Input, Shortcuts, Memory, MCP Servers, Hooks, Extensions, Permissio...
X Description: Closes #39 What & why The settings navigator rendered a flat, unfilterable list of 16 sections (General, Appearance, App, AI, Input, Shortcuts, Memory, MCP Servers, Hooks, Extensions, Permi...
Opengraph URL: https://github.com/modelstudioai/openwork/pull/40
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:7fe36c3d-b4ae-b3ef-ce58-c478f80fdd9e |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | E45A:29B71F:4AB177:6429E9:6A527973 |
| html-safe-nonce | 6f683cee67a0723cb2315c5ee997a9ffcda982fbe4873192d62735daa623d5ea |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFNDVBOjI5QjcxRjo0QUIxNzc6NjQyOUU5OjZBNTI3OTczIiwidmlzaXRvcl9pZCI6IjQwNzI3NzI0MDAyOTAzNjM3NjMiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | a445176dd3008fa8187af3230919a69dee21dfa9ccec33094e5ba408548eece9 |
| hovercard-subject-tag | pull_request:3963393235 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/modelstudioai/openwork/pull/40/files |
| twitter:image | https://avatars.githubusercontent.com/u/52599892?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/52599892?s=400&v=4 |
| og:image:alt | Closes #39 What & why The settings navigator rendered a flat, unfilterable list of 16 sections (General, Appearance, App, AI, Input, Shortcuts, Memory, MCP Servers, Hooks, Extensions, Permissio... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/modelstudioai/openwork git https://github.com/modelstudioai/openwork.git |
| octolytics-dimension-user_id | 283556804 |
| octolytics-dimension-user_login | modelstudioai |
| octolytics-dimension-repository_id | 1256697754 |
| octolytics-dimension-repository_nwo | modelstudioai/openwork |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1256697754 |
| octolytics-dimension-repository_network_root_nwo | modelstudioai/openwork |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width