Summary
Android Web Share Target (merged #933 / #932) lands on /share with a session picker titled "Recent active sessions". The operator can only pick from active sessions in list order — there is no search, and inactive sessions are excluded entirely.
On a busy hub with dozens of sessions, the target session is often not in the visible recent set. Operator must spawn a new session or hunt elsewhere instead of attaching the shared file to an existing thread.
Current behavior
web/src/routes/share/index.tsx:
- Loads sessions via
useSessions() (full list from GET /api/sessions)
- Snapshots active only, sorted by
updatedAt desc
- Renders flat list — no query/filter UI
- No way to reach an older or inactive session from the share sheet flow
Main session sidebar already has search (SessionListSearch, sessionMatchesQuery, normalizeSearch in SessionList.tsx) — share picker does not reuse it.
Expected behavior
- Search field on the share session picker (mobile-first; autofocus optional on desktop only).
- Empty query: keep current UX — recent active sessions (sorted by
updatedAt).
- Non-empty query: filter all sessions (active + inactive) using the same matching rules as sidebar search (title, path, id, flavor, summary, machine label).
- Clear empty-state copy when search has no hits (
sessions.search.noResults or share-specific i18n).
- Optional polish: show inactive badge on search hits; cap default recent list with hint "Search for more sessions" if list > N (reuse
DEFAULT_SESSION_PREVIEW_LIMIT or explicit share constant — pick one, document in PR).
Acceptance criteria
References
Summary
Android Web Share Target (merged #933 / #932) lands on
/sharewith a session picker titled "Recent active sessions". The operator can only pick from active sessions in list order — there is no search, and inactive sessions are excluded entirely.On a busy hub with dozens of sessions, the target session is often not in the visible recent set. Operator must spawn a new session or hunt elsewhere instead of attaching the shared file to an existing thread.
Current behavior
web/src/routes/share/index.tsx:useSessions()(full list fromGET /api/sessions)updatedAtdescMain session sidebar already has search (
SessionListSearch,sessionMatchesQuery,normalizeSearchinSessionList.tsx) — share picker does not reuse it.Expected behavior
updatedAt).sessions.search.noResultsor share-specific i18n).DEFAULT_SESSION_PREVIEW_LIMITor explicit share constant — pick one, document in PR).Acceptance criteria
SessionList.tsx(no duplicate matching logic)en.ts+zh-CN.tsReferences
web/src/routes/share/index.tsxweb/src/components/SessionList.tsx—sessionMatchesQuery,SessionListSearch