Skip to content

Releases: QingyaoAi/InfoGrep

InfoGrep 0.0.6

Choose a tag to compare

@QingyaoAi QingyaoAi released this 25 Aug 07:02

Now available as a DMG

Releases now ship InfoGrep.dmg — open it and drag InfoGrep to Applications — alongside
the usual InfoGrep.app.zip. Same bundle, take whichever you prefer.

To be clear about what this does not change: the app is ad-hoc signed rather than
notarized, so macOS still quarantines it on download and first launch still needs
right-click → Open once, or:

xattr -dr com.apple.quarantine /Applications/InfoGrep.app

A DMG can't skip that step — only a Developer ID signature plus notarization would.

Files with uppercase extensions are now indexed

The include/exclude globs were matched case-sensitively, so a config listing **/*.png
skipped PHOTO.PNG entirely. On macOS and Windows the filesystem doesn't distinguish the
two, and cameras, scanners, and phones routinely emit .JPG / .HEIC / .PDF. On a real
54k-file corpus this had silently hidden 169 files — including 9 .DOC, 7 .DOCX and 6
.PDF whose contents were never extracted, not merely their names.

Your next infogrep index will pick them up; no reindex flag needed.

Releases are verified before they go out

Packaging is now followed by a step that unzips the zip, mounts the DMG, and verifies the
code signature inside each. A bundle whose seal breaks during packaging is rejected as
"damaged" on every other Mac, and until now nothing caught that until someone downloaded
it — which is exactly how 0.0.4's de-quarantine bug escaped.

The bundled-backend smoke test also now runs with the launcher's own environment, so it
can no longer write .pyc into the bundle and invalidate the signature it just made.

Also

  • Ruff is pinned to one minor series in both CI and the dev dependency. CI installed the
    newest ruff while the dev pin floated, so the two linted against different rules and the
    build had been red since 13 Aug on code nobody had touched.

InfoGrep 0.0.5

Choose a tag to compare

@QingyaoAi QingyaoAi released this 25 Aug 03:28

Fixes the download problem in 0.0.4

If you downloaded 0.0.4 and xattr -dr com.apple.quarantine InfoGrep.app failed with a
wall of Permission denied errors, that is fixed here. The bundled Java runtime shipped
with read-only legal/ files, so the de-quarantine command exited non-zero and looked
like it had not worked. The fix missed the 0.0.4 tag by seven minutes; this is the first
release that contains it.

The app is ad-hoc signed (no Apple Developer account), so macOS still quarantines it on
download. First launch needs right-click → Open once, or:

xattr -dr com.apple.quarantine InfoGrep.app

Deleted files now release their disk space

Removing a file already dropped it from search results, but neither backend gave the
space back — Lucene tombstoned documents without rewriting segments, and SQLite parked
freed pages on a freelist. An index that churned grew forever. A real 74k-file index was
carrying 110k tombstoned documents (14%) and 2.6 GiB of free pages (42% of the manifest);
compacting took it from 10.4 GB to 5.1 GB.

Compaction is driven by the measured dead fraction rather than the current run's deletion
count, so an index that churned in the past and has since gone quiet still gets reclaimed.
Tune or disable it per directory:

[compact]
enabled = true
threshold = 0.2

infogrep learn

Searches your indexed files for a topic and writes interlinked Obsidian notes into the
vault's agent folder — a hub note per topic plus one per extracted entity — so later
searches expand along the links. Entity extraction is model-free and local.

Also

  • infogrep status no longer reports files as permanently pending deletion when they are
    indexed by name only (no content extractor for the suffix, e.g. .svg / .heic).

InfoGrep 0.0.4

Choose a tag to compare

@QingyaoAi QingyaoAi released this 13 Aug 09:04

Standalone macOS app that stays validly signed, plus working ⌘V in the search bar.

Install (macOS, Apple Silicon)

Download InfoGrep.app.zip below, unzip it, and move InfoGrep.app to /Applications. It is self-contained — a Python runtime, the InfoGrep backend and a trimmed Java runtime are bundled, and the app starts its own server. Nothing else to install.

One-time Gatekeeper step. The app is ad-hoc signed (this project has no paid Apple Developer ID, so it can't be notarized), and macOS quarantines anything downloaded from the web. Clear the quarantine flag once:

xattr -dr com.apple.quarantine /Applications/InfoGrep.app

Then open it normally. Right-click → Open also works on some systems, but the command above is reliable. After that, press ⌘⇧Space to search.

Fixed

  • The app no longer invalidates its own code signature. The bundled backend shipped without precompiled bytecode, so the first launch wrote __pycache__/*.pyc into the signed bundle and broke its seal — the app was validly signed when you downloaded it and turned "damaged" on the next launch. Bytecode is now precompiled before signing, and the bundled interpreter runs with PYTHONDONTWRITEBYTECODE=1, so the bundle is never modified. The nightly reindex agent had the same problem and is fixed too. Signing failures are now fatal at build time and the signature is verified as a build step, so a broken seal can't ship unnoticed again.

  • ⌘V works in the search panel. Along with ⌘X/⌘C/⌘A and undo/redo. The launcher is a menu-bar agent app with no menu bar, and AppKit only routes ⌘-key equivalents to a text field through the main menu — with no main menu installed, ⌘V had nothing to resolve against and was silently dropped.

  • Version reporting. pyproject.toml, infogrep/__init__.py and the app bundle had drifted apart, so the web UI and API reported 0.0.2 while the release was 0.0.3. infogrep/__init__.py is now the single source of truth for all three.

Notes

  • The prebuilt app is Apple Silicon only. On an Intel Mac, install from source instead (git clone + ./install.sh).
  • Dense (embedding) search is not in the standalone bundle — torch is too large to ship. The bundled app searches with sparse (BM25) + knowledge-base + graph retrieval. For dense search, install from source with uv sync --extra dense.

InfoGrep 0.0.3

Choose a tag to compare

@QingyaoAi QingyaoAi released this 11 Jul 00:33

Standalone macOS app — download, open, search

InfoGrep.app.zip (attached below, Apple Silicon) is now self-contained: it bundles a Python runtime, the InfoGrep backend, and a trimmed Java runtime, and starts its own local server when the app launches — no Python, uv, or JDK install needed. Unzip, drag to /Applications, right-click → Open once (ad-hoc signed; or xattr -dr com.apple.quarantine InfoGrep.app), press ⌘⇧Space, and index a folder from the 🔎 menu. The server stops when the app quits. Dense/semantic search remains a pip extra (pip install 'infogrep[dense]') — torch is too big to ship.

Faster on big indexes

  • manifest.stats() caches file/passage counts per index run — /api/indexes (menu-bar folder list, web UI dropdown) went from ~10 s to ~3 ms on a 1.25M-passage index.
  • /api/status no longer walks the whole folder on every call; the staleness check (~19 s on 82K files) is opt-in and the web UI fetches it in the background after showing counts instantly.

No more silent empty searches

  • The API reports an indexed default folder even when the server's --dir was never indexed, and the app validates its remembered folder before searching.
  • The search panel now says "No results…", "No indexes yet…", or "Can't reach InfoGrep…" instead of showing a blank list.

Also

  • infogrep serve --exit-with-parent (used by the app) makes the server exit if its launcher dies, so no orphaned servers.
  • Daily-reindex launchd agents inherit PYTHONPATH/JAVA_HOME, so scheduling works from the bundled app.
  • New python -m infogrep entry point; docs site and app got the new logo assets.

🤖 Generated with Claude Code

InfoGrep 0.0.2

Choose a tag to compare

@QingyaoAi QingyaoAi released this 09 Jul 01:31

Highlights

Much smaller install — 1.3 GB → ~130 MB. InfoGrep no longer depends on the pyserini Python package (which pulled in torch, transformers, and friends). The sparse/BM25 backend now talks to Anserini/Lucene directly through pyjnius: the Anserini engine (a single ~112 MB jar) is downloaded once from Maven Central on first index, checksum-verified, and cached under ~/.infogrep/jars/. Semantic (embedding) search became an optional extra — install it with pip install 'infogrep[dense]' or uv sync --extra dense; without it, sparse/graph/kb search work as before and dense prints a one-line install hint.

Faster hybrid search. The retrievers now run concurrently, so a fused query costs as much as its slowest backend instead of the sum of all of them.

Daily incremental re-indexing, opt-in per folder. Toggle it from the web UI (the "⏰ daily" checkbox next to the folder selector) or the menu-bar app ("Daily Re-index of <folder> (3 AM)"), or from the CLI with infogrep schedule install/uninstall/list. Backed by a new /api/schedule endpoint; runs infogrep index daily at 03:00 via launchd (macOS), touching only files that changed.

Prebuilt macOS app. InfoGrep.app.zip is now built on GitHub runners and attached to every release (see Assets below) — no Xcode tools needed. It's ad-hoc signed, so on first launch right-click → Open (or xattr -d com.apple.quarantine InfoGrep.app). The app is the launcher UI; it needs the InfoGrep backend running locally (./install.sh sets that up).

Other changes

  • Linux support polish: JDK 21 auto-discovery now also covers /usr/lib/jvm, update-alternatives, and java on PATH, with distro-specific install hints; infogrep schedule explains cron/systemd alternatives instead of failing obscurely; the installer prints Linux-appropriate instructions.
  • macOS launcher polish: each result shows its full file path under the snippet; the panel keeps your last query/results when reopened (type to replace, like Spotlight).
  • Cleaner internals, easier to extend: one retriever registry + a single search dispatch shared by CLI/web/MCP (adding a retriever is one factory entry plus a config section); a uniform extractor registry (adding a file type is one entry); friendlier CLI errors for a missing JDK or missing dense extra.
  • uninstall.sh now also removes per-folder daily reindex agents.

Full changelog: v0.0.1...v0.0.2

v0.0.1

Choose a tag to compare

@QingyaoAi QingyaoAi released this 02 Jul 01:25