Skip to content

Commit f60cc93

Browse files
author
Tommy
committed
Merge branch 'feat/local-search-index'
2 parents bc2afb9 + fb6a26e commit f60cc93

45 files changed

Lines changed: 6258 additions & 75 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,70 @@ All notable changes to Earth Reclaim are documented here.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.1.0] - 2026-06-30
9+
10+
### Added
11+
12+
- **Local search index — "Google, but completely local."** Type a query and get
13+
fast results that are scraped, indexed, and grep-able on your device. It fuses the
14+
local SearXNG meta-search, the web scraper, and the AI curator behind one
15+
`local_search` command plus a new unified **FTS5 + vector** index with a fusion
16+
ranker. The first search for a topic is slow (live discover → scrape → index);
17+
every search after is instant off a warm local index — and the index only ever
18+
contains things you actually searched (strong privacy property).
19+
- **Two-speed streaming:** SearXNG-speed snippets paint immediately, then scraped
20+
+ indexed results stream in, then the list re-orders to a fused ranking.
21+
- **Hybrid ranking:** FTS5/BM25 ⊕ vector cosine ⊕ SearXNG position ⊕ a private
22+
click-log, fused with Reciprocal Rank Fusion.
23+
- **Lifecycle ladder & retention tiers:** browse → auto-cache (TTL'd, no curation
24+
cost) → favorite/pin (permanent, curated) → archived (summary kept, body/FTS/
25+
embeddings dropped) → forgotten. Auto-GC only ever touches ephemeral/cache;
26+
pinned/archived are protected. Login/credential pages are never cached or indexed.
27+
- **Favorites = pins, one source of truth:** a pin control (distinct from the
28+
bookmark star) in the address bar, History rows, and search results, all reading
29+
the same retention tier. Bookmarks stay separate (URL-only, no indexing).
30+
- **Review-pinned panel:** the curator *proposes* prune candidates (disuse, age,
31+
semantic redundancy; a dead upstream is protected, not pruned) and *you dispose*
32+
nothing pinned is ever silently removed; the default destructive action is archive.
33+
- **Crawler results in unified search.** Pages from the web scraper's crawl jobs now
34+
appear in search results, fused via the same RRF — read-only, capped per domain,
35+
with a "from crawl: \<job\>" badge. Crawler storage is never modified.
36+
- **Comments & discussions search.** A typed-content filter (All / Comments &
37+
discussions / Comments only) with per-platform adapters that pull posts and comments
38+
from Reddit and forums (Discourse / Stack Exchange / generic) by default, plus
39+
YouTube and TikTok via yt-dlp. Instagram/Facebook are best-effort and **off by
40+
default** (public, logged-out only). An optional **opt-in** "use my own session"
41+
toggle (default off, with a blunt Terms-of-Service warning) exists for the social
42+
adapters — no credential automation, ever.
43+
- **Pagination** — "More results / next page" fetches a genuinely different page of
44+
results (SearXNG `pageno`).
45+
- **Per-profile Local-AI settings** — the knowledge curator and assistant toggles now
46+
persist per profile in the database.
47+
- README screenshots (hero + gallery).
48+
49+
### Changed
50+
51+
- **Search page UX:** the search controls (retention, kinds, sources, ranking-signals
52+
debug, DuckDuckGo) are now an always-visible bar — selectable *before* a search. The
53+
domain manager collapses while searching to keep results in focus, and the address
54+
bar placeholder is now "Search or enter a URL to visit".
55+
- **Feature naming:** EarthMemory → **Journal**, EarthMultiMedia → **Media**, and the
56+
local AI is now **Sage** (summarizes what you read into your Journal and answers from
57+
it & the web, fully offline). The About panel is now a right-side drawer.
58+
59+
### Fixed
60+
61+
- **Secondary windows rendered as a blank "The URL can't be shown" box in packaged
62+
builds.** Programmatic windows now match the main window's incognito web context, so
63+
the app's asset protocol resolves (regression from the v1.0.8 single-instance change).
64+
- **The knowledge curator switched itself back on after every restart.** Its on/off
65+
state was kept in the incognito WebView's localStorage (wiped each launch); it's now
66+
persisted per profile in the database.
67+
- **Crawled pages polluted unrelated searches** (e.g. "best grapheneos phone" surfaced a
68+
crawled site with none of those words). The crawler fan-in now requires *all* query
69+
terms, is capped per domain, and live results are kept after ranking completes.
70+
- A GC scheduler panic on startup (background task spawned outside the Tokio runtime).
71+
872
## [1.0.8] - 2026-06-29
973

1074
### Security

README.md

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@
66
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
77
[![Rust](https://img.shields.io/badge/rust-%23000000.svg?style=flat&logo=rust&logoColor=white)](https://www.rust-lang.org/)
88
[![Tauri](https://img.shields.io/badge/tauri-%2324C8DB.svg?style=flat&logo=tauri&logoColor=%23FFFFFF)](https://tauri.app/)
9+
10+
<br>
11+
12+
<img src="docs/Main.png" alt="Reclaim — privacy-first desktop browser" width="90%">
13+
14+
<table>
15+
<tr>
16+
<td width="50%"><img src="docs/Search.png" alt="Local search index"></td>
17+
<td width="50%"><img src="docs/Nobara.png" alt="Reclaim running on Linux"></td>
18+
</tr>
19+
</table>
920
</div>
1021

1122
---
@@ -27,9 +38,17 @@ Everything below runs **on your machine**. The only outbound traffic is the page
2738
- **Password‑protected bookmarks** — bookmarks are encrypted at rest, with an optional Argon2id password gate for a private set.
2839
- **NoScript** — JavaScript is blocked by default and trusted **per site** (persistent or session‑only); a web‑process extension blocks untrusted third‑party requests.
2940
- **Privacy protection** — third‑party cookie blocking, tracking prevention (ITP), user‑agent spoofing, and incognito (ephemeral, nothing on disk).
30-
- **Your own search engine** — build a private index from the sites *you* curate and **scrape**, plus community trust/bias ratings on domains (EarthSearch). Search your own corpus, not an ad network.
41+
- **Your own search engine** — build a private index from the sites *you* curate and **scrape**, plus community trust/bias ratings on domains. Search your own corpus, not an ad network.
42+
43+
### 🔍 Local Search — "Google, but completely local"
44+
- **Query‑driven local index** — type a query and get fast results that are **scraped, indexed, and grep‑able on your device**. It fuses local SearXNG meta‑search, the web scraper, and the AI curator behind one index (**FTS5 full‑text ⊕ vector embeddings**) with a fusion ranker. The index only ever contains things *you actually searched* — strong privacy by construction.
45+
- **Two‑speed results** — SearXNG‑speed snippets paint instantly, then scraped + indexed results stream in, then the list re‑orders to a **fused ranking** (BM25 ⊕ vector cosine ⊕ SearXNG position ⊕ a private click‑log, via Reciprocal Rank Fusion). The first search for a topic is slow; every search after is instant.
46+
- **Retention ladder** — browse → auto‑cache (TTL'd, no curation cost) → **favorite/pin** (permanent, curated) → archived (summary kept, body dropped) → forgotten. Auto‑GC only ever touches the cheap tiers; pins are protected. Login/credential pages are never cached or indexed.
47+
- **Favorites = pins, one source of truth** — a pin control (distinct from the bookmark star) in the address bar, History, and results, all reading the same tier. A **review‑pinned** panel where the curator *proposes* prune candidates (disuse, age, semantic redundancy) and *you* dispose — pins are never silently removed.
48+
- **Comments & discussions** — filter to comments/discussions and pull posts + comments from **Reddit** and **forums** (Discourse / Stack Exchange / generic) by default, plus **YouTube** and **TikTok** via yt‑dlp. (Instagram/Facebook are best‑effort and **off by default** — public, logged‑out only; an optional, default‑off "use my own session" toggle carries a blunt Terms‑of‑Service warning. No credential automation.)
49+
- **Crawler fan‑in** — pages from your Web Scraper crawl jobs join the same results (read‑only, capped per domain, badged "from crawl").
3150

32-
### 🎬 Media (EarthMultiMedia)
51+
### 🎬 Media
3352
- **Multi‑pane viewing** — single, split (horizontal/vertical), or quad; each pane is an independent native player.
3453
- **Workspace tabs** — browser‑style media tabs, each with its own queue, panes, and layout.
3554
- **Queue** — drag‑to‑reorder, **shuffle**, repeat, and consecutive autoplay (next item plays in the pane that just finished).
@@ -43,9 +62,9 @@ Everything below runs **on your machine**. The only outbound traffic is the page
4362
- **Live status** — jobs run on creation (or via ▶ Run), streaming `pending → running → completed` with a live page count.
4463
- **Opt‑in “Add to AI memory”** — per job, also summarize each scraped page into your knowledge graph so the assistant can use it.
4564

46-
### 🧠 Local AI (Ollama)
47-
- **Knowledge Curator** — summarizes **what you actually read** (an in‑page viewed‑content bridge captures only text you scrolled into view — comments included only if you reach them), not a blind re‑fetch. Skips homepages/feeds, de‑duplicates, writes a rich summary + a small excerpt. Transparent, unbiased, skips incognito.
48-
- **AI Assistant** — a private, streaming, multi‑session chat (ChatGPT‑style) grounded in your saved pages, media notes, and past conversations. Model auto‑selected by your GPU tier, or pick any installed model.
65+
### 🧠 Sage — Local AI (Ollama)
66+
- **Knowledge Curator** — summarizes **what you actually read** (an in‑page viewed‑content bridge captures only text you scrolled into view — comments included only if you reach them), not a blind re‑fetch, into your **Journal** (knowledge graph). Skips homepages/feeds, de‑duplicates, writes a rich summary + a small excerpt. Transparent, unbiased, skips incognito. Its on/off state is remembered **per profile**.
67+
- **AI Assistant** — a private, streaming, multi‑session chat (ChatGPT‑style) grounded in your Journal, media notes, and past conversations. Model auto‑selected by your GPU tier, or pick any installed model.
4968
- **🔬 Web Research mode** — agentic **search + read**: the assistant uses local tool‑calling to `web_search` and `fetch_url`, shows each step (🔎 searching / 📄 reading), then streams a grounded answer that **cites the URLs it actually read**. Searches route through a local **SearXNG** instance when available (fully private), or **DuckDuckGo** as a fallback. All reasoning stays on‑device.
5069
- **Password‑protected tab** — lock the whole Local AI / History tab behind its own unique Argon2id password (separate from the vault, media, and bookmark passwords).
5170

apps/reclaim/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "reclaim",
3-
"version": "1.0.8",
3+
"version": "1.1.0",
44
"private": true,
55
"type": "module",
66
"scripts": {

apps/reclaim/src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "reclaim"
3-
version = "1.0.8"
3+
version = "1.1.0"
44
description = "Earth Reclaim - Privacy-first browser with local AI"
55
authors = ["EarthServers"]
66
license = "MIT"

apps/reclaim/src-tauri/gen/schemas/acl-manifests.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)