Files
SubMiner/vendor/hachidori/README.md
T
sudacode d9fdc7ef6d feat(dictionary): add Hachidori backend support
- Add backend selection, setup gating, Anki integration, and external host support
- Add launcher flags, documentation, packaging, and focused tests
- Open on-demand overlay modals on the first attempt
2026-09-22 00:21:19 -07:00

54 lines
3.1 KiB
Markdown

# Hachidori in SubMiner
This is a source snapshot of Hachidori at the revision in `SOURCE.json`.
`UPSTREAM-README.md` is the original project introduction. The extension,
WebAssembly bindings, engine source, build scripts and licenses are kept here
so host changes stay local to SubMiner.
`bun run build:hachidori` verifies the committed engine artifacts and
copies the extension to `build/hachidori`. The full app build includes this step,
and Electron packaging puts the result in `resources/hachidori`.
## Local changes
- `extension/overlay-mode.js` enables embedded host behavior. Custom
JavaScript is disabled because Electron does not provide `userScripts`.
- `extension/subminer-host.js` implements the existing SubMiner popup event and
command contract and prioritizes character-name results. `content.js` supplies
popup lifecycle and reader actions.
- `extension/anki-mining.js` marks initial add/overwrite requests for SubMiner's
AnkiConnect proxy. Later Hachidori pronunciation updates remain unmarked so
they do not repeat SubMiner media enrichment.
- `extension/anki.js` sends those private markers only to the exact configured
SubMiner proxy URL. Direct AnkiConnect requests use standard parameters.
- `extension/manifest.json` loads the host bridge and drops `userScripts`.
- The native `hdw_frequencies` binding and `hd_frequencies` engine message query
frequency dictionaries without requiring a term dictionary. Frequency values
retain their source reading, including whether a frequency was untagged.
- External dictionary links retain local Anki templates, audio sources, and custom buttons. Dictionary requests use the host; mining and media rendering use SubMiner. Setup uses Hachidori's native link/unlink messages and verifies the live host inventory.
## Rebuilding the engine
Ordinary app builds use the locally rebuilt WASM and JavaScript files with
SHA-256 checksums in `SOURCE.json`. The current engine uses Emscripten 6.0.9.
To rebuild them, install Emscripten and the
CMake prerequisites described in `docs/source-build.md`. Use a temporary checkout
of `https://github.com/bee-san/hachidori` at the exact `revision` in `SOURCE.json`,
then run `git submodule update --init --recursive`. Copy this snapshot's
`wasm/` and `third_party/hoshidicts/` sources into that temporary checkout,
preserving the initialized external submodules. Run `sh wasm/build.sh` and,
if changing the unused overlay capture encoder, `sh wasm/avif/build.sh`.
The snapshot's `third_party/hoshidicts` has its engine sources and `.gitmodules`;
its external submodules are retrieved by that recursive checkout. The
hoshidicts revision is pinned separately in `SOURCE.json`. The AVIF CMake file
pins libavif. Copy rebuilt files from that temporary checkout's
`extension/vendor/` only as an intentional source/artifact update and update
the corresponding checksums. Do not overwrite the locally adapted extension.
Hachidori and its modifications are GPL-3.0-or-later, see `LICENSE`.
The engine and bundled libraries retain their own license files.
The packaged `extension/vendor/hoshidicts-licenses/` includes dependency and
toolchain notices for the rebuilt engine.