Skip to content

V3 - Big Overhaul#5

Merged
CanPixel merged 15 commits into
masterfrom
overhaul
Jul 25, 2026
Merged

V3 - Big Overhaul#5
CanPixel merged 15 commits into
masterfrom
overhaul

Conversation

@CanPixel

@CanPixel CanPixel commented Jul 25, 2026

Copy link
Copy Markdown
Owner

This PR is a major ÆTHER overhaul spanning the native Tauri backend, local AI workflows, browser shell, research surfaces, reliability, accessibility, packaging, and documentation.

Local research and AI

  • Adds persistent Knowledge Hubs, page capture, bulk URL/open-tab capture, source movement between hubs, saved portals, and hub search.
  • Builds a local retrieval pipeline with readable-page extraction, chunking, embeddings, scoped semantic search, cited answers, per-hub/current-page conversation history, and retrieval evaluation fixtures.
  • Introduces AiON local model setup and downloads:
    • MiST embedding model is the only required model.
    • LiTE and WiSE chat models are optional, with graceful fallback when no chat model is installed.
  • Adds iCE concept atlases, saved/reopenable icebergs, semantic Flow trails, and AiR dossier generation.

Storage, performance, and resilience

  • Replaces inline embedding storage with append-only chunks.vec sidecar vectors plus lightweight JSON metadata.
  • Adds migration from the previous vector format, safe write ordering, missing-sidecar recovery, dimension mismatch handling, and compaction of dead vector slots.
  • Adds diagnostics, backup/recovery behavior, model and index status, library re-indexing, and broader backend stability work.

Browser and desktop shell

  • Introduces native per-tab webviews, browser tab management, native history/find support, download handling, session restoration, window geometry restoration, and resizable/collapsible AiON panel support.
  • Adds tab drag-and-drop reordering with persisted order.
  • Improves browser chrome layout, content bounds, capture controls, hub drop targets, and start-page/dashboard interactions.
  • Fixes native webview placement so pages clear the browser chrome.

UI, accessibility, and appearance

  • Broad visual redesign across Dashboard, AiON, iCE, Flow, AiR, browser chrome, settings, model setup, captures, and mobile shell.
  • Adds Light, Dark, and System appearance modes, with Light as the first-run default and no dark startup flicker for Light users.
  • Improves WCAG color contrast and dark-mode behavior.
  • Refines settings and model setup modals, release notes rendering, empty states, buttons, portals, tooltips, and responsive layouts.

Security, releases, and developer workflow

  • Adds a restrictive production/dev CSP.
  • Adds updater configuration, signing-key support, signed release artifacts, updater manifest generation, and CI packaging improvements across macOS, Linux, and Windows.
  • Updates dependencies and adds automated Rust test execution in CI.
  • Adds licensing, security, signing, packaging, local-data, and troubleshooting documentation.

Validation

  • Expanded Rust test coverage for storage recovery, vector integrity/migration/compaction, retrieval ranking, settings, updater configuration, accessibility theme channels, session restoration, downloads, and local AI workflows.
  • Current branch verification includes TypeScript typecheck, ESLint, Vite production build, Cargo checks, and Rust unit tests.

CanPixel added 13 commits July 25, 2026 10:56
…e-endian f32 at a fixed dim * 4 stride.

Appends are now O(new chunks). Capturing a page writes only its own vectors instead of re-serializing the whole library. That's the quadratic fix — and note that moving a capture between hubs now touches zero vector bytes, since only collectionId changes in the metadata.
Crash ordering is deliberate: the sidecar is written and sync_all()'d before the metadata lands. Orphaned vector bytes are harmless; metadata pointing at slots that don't exist would be corruption. That ordering is the whole safety argument.
push_chunks is the only slot allocator. The old code did vectors.chunks.extend(...) directly; any caller doing that now would desynchronize the stride index, so allocation lives in one place with a comment saying so.
Deletes leave dead slots, reclaimed by compaction once they exceed half the file (with a 512-slot floor, so routine deletes stay cheap).
Migration: a v1 store is detected by peeking version before deserializing — necessary because vector is now #[serde(skip)], so the v2 deserializer would have silently discarded every embedding. The v1 file is kept as .bak.
Degradation is graceful: a missing or truncated sidecar drops the affected chunks with a warning rather than failing the load, so a damaged sidecar costs re-indexing, not the library.
6 new tests on the risky parts: byte-exact round-trip (plus asserting no vector numbers remain in the JSON), append-only growth (16 → 32 bytes, not a rewrite), v1 migration preserving vectors with .bak retained, missing-sidecar survival, compaction correctly renumbering slots and keeping each vector matched to its chunk, and dimension-mismatch rejection.
@CanPixel CanPixel self-assigned this Jul 25, 2026
@CanPixel
CanPixel merged commit edfba32 into master Jul 25, 2026
6 checks passed
@CanPixel
CanPixel deleted the overhaul branch July 25, 2026 19:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant