Repository navigation
feat(sessions): archive and restore native conversations - #1406
Conversation
Use OpenCode's existing archive API to keep completed conversations without deleting their history. Add row archive/restore actions and an Unarchived/Archived/All filter in session search, with native archived badges. Hide idle archived branches during ordinary browsing and keyboard cycling, while keeping selected conversations, running work and pending-question ancestor paths reachable. Child archive flags remain native and independent. Serialize archive writes with session actions, refresh authoritative inventory and verify the returned flag. Preserve newer archive events against metadata reads started earlier. Retain complete inventory for ownership and recovery; never synthesize local archive state or replay uncertain writes. Runtime minimum and dependency pins stay unchanged. Add native minimum/latest archive probes for persistence, filtered cursors, idempotent events, transcript preservation and unchanged children; store and real-browser coverage for actions, filtering, failures and stale reads. Update technical docs and user help in all ten locales. Focused UI regressions, proxy tests, typechecks and native 2.2.3/2.2.6 checks pass.
…tles Use a naturally overflowing session title to exercise the compact menu and wait for measured row geometry before keyboard selection. Verify both archive and restore through native keyboard menu activation without forced pointer actions. Keep archive-tree activity checks explicit and calculate latest activity without spreading arbitrarily large child arrays.
Gatekeeper reviewReviewed head: Reviewed the existing generated client and proxy ownership path, mutation queue, native event projection, session metadata merge, normal hierarchy/list cycling, flat search and retained inventory. The archive state comes only from native Normal browsing hides idle archived branches, preserving the selected conversation and paths to running work or pending input. Child flags are not rewritten; flat search filters each session independently. Full inventory remains available for ownership, recovery, transcript reads and search. No data deletion, prompt, shared-service restart, minimum/pin change or local archive store is introduced. Validation
Existing repository failure retainedThe fixture-wiring checker fails on two unchanged WebKit test files ( Large existing source files touched: |
Full CI follow-upRun 42538167720, attempt 1 finished red. Both native archive probes explicitly pass on OpenCode 2.2.3 and 2.2.6, and both archive browser journeys pass in shard 2, including keyboard compact-menu archive/restore. All observed failures were inspected:
The failing files are unchanged between this PR's base and reviewed head. Its workflow diff only adds the archive native script and store test, without changing build prerequisites. The main tests job stops early, so later unit steps are not claimed to have passed CI. No observed failure implicates the archive paths, but the complete release candidate remains unqualified until integrated final-head CI and builds pass. Existing fixes are being tracked rather than duplicated. No unchanged-head rerun or release publication was requested by this triage; #1395 remains draft with no auto-merge. |
Summary
Closes #929 and #1207 by using the native archive/restore API already present in OpenCode 2.2.3. The 2.2.6
run --archivedannouncement adds CLI convenience; no minimum or dependency bump is required.Validation
automation-webkit-geometry.test.ts,automation-webkit-page.test.ts); the new browser fixture uses the shared daemon and navigation budget.Native probes use synthetic private databases and a local provider, never the shared daemon or user state. Large existing touched files:
session-list.tsx(~1168 lines),session-events.ts(~732),session-state.ts(~1343).