Adds a shared JAV-ID fixture corpus at the Python repo root (conceptually joint with this extension). Three JSON files: filename-extraction.json 12 cases — Python extract_id contract query-extraction.json 10 cases — extension content.js normalizeId shared-normalization.json 5 cases — both sides must agree Plus a README.md documenting format, ownership, and one intentional cross-side divergence (the compact `FC2PPV1841460` form: extension normalizes it from page titles, Python `extract_id` does not — it doesn't realistically appear in filenames on disk). A self-contained Python runner at fixtures/run.py exercises extract_id and normalize_id against the relevant corpora. No third-party deps, loads rc-jav.py in place. All 17 Python-side cases pass against the current rc-jav.py. Output uses ASCII separators (`->`, `|`) instead of unicode arrows/middots so the runner works on Windows cp1252 consoles. No Node-side runner today: content.js lives inside an injected IIFE and a Node runner would have to duplicate the regexes. The JSON corpus is the canonical spec until content.js is refactored to be importable. This commit only updates AGENTS.md in this repo — the fixture files themselves live in the Python repo at D:\DEV\Project\rclone-jav\fixtures\ which is not currently git-tracked. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
rclone-jav
Brave extension that extracts JAV IDs from the active page and checks them against your local rc-jav library via a native-messaging Python host.
Setup: see
INSTALL.md. This file documents how it works once installed.
Architecture
Brave tab title (e.g. "MILK-257")
─► content/background script extracts ID
─► chrome.runtime.connectNative("com.rcjav.host")
─► rcjav-host.bat → rcjav-host.py
─► python rc-jav.py --search MILK-257 --basic --no-color
─► result back through the port
─► popup / notification / badge
Long-lived port: Brave keeps the host process alive while the connection is open, so subsequent lookups don't pay Python startup cost.
Triggers (all available, enable any combination in Options)
| Trigger | Behavior |
|---|---|
| Auto-check every page load | Fires chrome.tabs.onUpdated. Badge shows hit count or ? when no JAV ID detected. Noisy. |
| Auto-check on known JAV sites | Same as above but gated by host patterns (e.g. *.javdb.com). |
| Toolbar icon popup | Click the icon → popup can run a check on the active tab. The Scan Behavior toggle gates popup auto-check. |
| Right-click context menu | "rclone-jav: check this page". Shows a desktop notification. |
| Keyboard shortcut (Alt+J) | Rebind at brave://extensions/shortcuts. |
Enable them all to compare — they don't conflict.
ID extraction
Uses site adapters, URL text, and the page title plus ID normalizers. Common title forms include:
MILK-257→MILK-257MILK257→MILK-257Some site - MILK-257 [4K]→MILK-257
Search behavior
By default the extension passes --quick to rc-jav (single-ID live rclone lsjson --include, ~1–2s, fresh data, no cache). Uncheck Use --quick mode in options to use the cache (faster on warm cache, may be stale).
Files
manifest.json MV3 manifest
background.js service worker, native-messaging port, triggers
content.js page extraction, element picker, and in-page overlays
popup.html / .css / .js click-the-icon UI
options.html / .js trigger toggles + known-site patterns
icons/ extension icons
host/
rcjav-host.py native messaging host (length-prefixed JSON)
rcjav-host.bat shim so the manifest path is stable
install-host.ps1 writes the manifest into Brave's NM dir
register-host.bat prompts for ID, calls install-host.ps1
com.rcjav.host.json generated by install-host.ps1 (UTF-8 no BOM)
logs/ host logs and delete audit log
state/ scan progress state
docs/
INSTALL.md setup guide
README.md this file
EXTENSION_ID.md extension ID stability notes
Security
- The host manifest's
allowed_originsis pinned to your extension ID. Only that extension can connect. - No network ports opened.
- Host only spawns
python rc-jav.py …; no shell, no arbitrary code execution.
Troubleshooting
Quick reference — full troubleshooting in INSTALL.md.
- Badge
?→ no JAV ID in title. - Badge
!→ host error. Readhost\logs\rcjav-host-stderr.log. - "host unreachable" → re-run
install-host.ps1, fully restart Brave.