sudacode
ffa183b1a1
feat(sync): headless --sync-cli mode so sync only needs the app installed
...
The Electron app now answers launcher-style sync argv (--sync-cli sync
[host|--snapshot|--merge] ... plus --help/--version) at entry, before any
window or display initialization, backed by a libsql binding of the shared
stats-sync engine. Works over SSH with no display server, so a remote
machine no longer needs the bun launcher. The launcher accepts --sync-cli
as a no-op so both invocation shapes stay equivalent.
2026-07-11 20:23:22 -07:00
sudacode
04095eebf7
refactor(sync): extract stats-sync engine behind a DB-driver interface
...
Move snapshot/merge/quiescence engine and ssh helpers from launcher/sync
into src/core/services/stats-sync, parameterized on a minimal SyncDb
driver. The launcher binds it to bun:sqlite via launcher/sync/bun-driver;
the sync command becomes a thin adapter over the shared sync flow.
2026-07-11 20:14:28 -07:00
sudacode
93d4bbe9a5
feat(sync-ui): default auto-sync interval 60 minutes
2026-07-11 19:49:48 -07:00
sudacode
cff164183a
style(sync-ui): drop last em-dash from launcher warning
2026-07-11 19:46:16 -07:00
sudacode
ac72c23dab
style(sync-ui): drop em-dashes from sync window copy
2026-07-11 19:45:47 -07:00
sudacode
187437b681
feat(sync-ui): sync window renderer, snapshots in /tmp/subminer-db-snapshots, docs + changelog
2026-07-11 18:28:21 -07:00
sudacode
97aaf44b3c
feat(sync-ui): main-process runtime, window, tray entry, CLI wiring for sync window
2026-07-11 18:07:48 -07:00
sudacode
0a3f76c0a8
feat(sync): add sync-hosts store, NDJSON --json mode, and --check to subminer sync
2026-07-11 17:45:27 -07:00
sudacode
8acc78cc1c
test(tokenizer): add golden-file regression corpus with 11 fixtures ( #157 )
2026-07-11 00:50:03 -07:00
sudacode
8712780d08
fix(tokenizer): keep frequency rank for lexicalized kana expressions ( #156 )
2026-07-10 00:54:17 -07:00
sudacode
7b1a005a65
feat(anki): mirror mpv software volume into generated sentence audio ( #155 )
2026-07-10 00:44:23 -07:00
sudacode
db4139ba0b
fix(tokenizer): block kanji reading collisions and name/generic length t
...
- Add allowReadingOnlyMatch:false to kanji token known-word lookups so 渓谷/けいこく no longer matches a mined 警告/けいこく card via reading-only index
- Greedy name pre-pass yields when a strictly longer generic word starts at the same position (空 no longer splits 空気; ties still go to the name)
2026-07-09 01:03:58 -07:00
sudacode
6c251502b3
fix(tokenizer): exclude unparsed-run tokens from annotations and N+1 ( #153 )
2026-07-09 00:28:38 -07:00
sudacode
ae40934d3a
fix(tokenizer): greedy name pre-pass to prevent generic matches swallowing character names ( #151 )
2026-07-08 23:53:45 -07:00
sudacode
a2e49b369b
fix(tokenizer): merge scanner metadata per token instead of all-or-nothi
...
- Replace hasSameTokenSpans + full-discard with mergeScannerTokensIntoParseTokens
- Grafts isNameMatch/frequencyRank/etc onto matching parse spans; filler chunks degrade only themselves
- Fixes name annotations dropping for entire subtitle lines containing unmatched interjections
2026-07-08 22:26:34 -07:00
sudacode
7f13aed50a
fix(overlay): keep frequency/JLPT highlight for kanji non-independent nouns ( #150 )
2026-07-08 22:25:32 -07:00
sudacode
8b21a2bca8
fix(overlay): remove content adverbs from annotation stop-word list
...
- 確かに and やはり no longer excluded from frequency/JLPT highlighting and vocab stats
- Stop-word list now covers only interjections, pronouns, and grammar fragments
2026-07-08 20:15:45 -07:00
sudacode
d0644ab2eb
fix(stats): parse v3 reading-aware known-word cache in stats server ( #149 )
2026-07-08 02:15:58 -07:00
sudacode
d253710c2e
fix(stats): fetch cover art eagerly at session start instead of on series page visit ( #148 )
2026-07-08 00:59:35 -07:00
sudacode
187f68e5b6
fix(tokenizer): prevent grammar tokens from borrowing known-word highlight via unrelated readings ( #147 )
2026-07-07 23:57:47 -07:00
sudacode
61f39d1e09
fix(overlay): resolve unspaced Japanese name splits and scan recovery ( #146 )
2026-07-07 02:33:46 -07:00
sudacode
e7739de51c
fix(tokenizer): keep unparsed Yomitan tokens hoverable ( #145 )
2026-07-07 02:01:04 -07:00
sudacode
ad1d240f20
refactor(tests): centralize lane definitions and add per-file isolation ( #143 )
2026-07-07 01:51:05 -07:00
sudacode
0a58c20ad7
fix(stats): start stats server on background app launch ( #144 )
2026-07-07 00:16:57 -07:00
sudacode
38ddb29aa0
feat(anki): reading-aware known-word matching (cache v3) ( #142 )
2026-07-07 00:13:10 -07:00
sudacode
8b9a70c5a6
feat(stats): Trends dashboard overhaul — title visibility, ranking modes, calendar-accurate windows, tooltips ( #140 )
2026-07-06 23:52:43 -07:00
sudacode
a042b04357
fix(overlay): prevent field grouping modal from freezing overlay on Hyprland ( #138 )
2026-07-06 22:13:14 -07:00
sudacode
35ca2afc6f
fix(overlay): collapse karaoke syllable spam in secondary subtitles ( #139 )
2026-07-06 01:09:06 -07:00
sudacode
b14f977e33
fix(tokenizer): stop partial furigana readings from marking words known ( #137 )
2026-07-05 17:02:44 -07:00
sudacode
73af1451b7
fix(anki): lower audio normalization target to -23 LUFS (EBU R128)
2026-07-05 01:13:54 -07:00
sudacode
36a3704815
fix(youtube): parse mpv EDL stream URLs with byte-length guards ( #134 )
2026-07-02 01:37:37 -07:00
sudacode
359cb0a301
Normalize generated Anki audio by default ( #135 )
2026-07-02 00:34:16 -07:00
sudacode
4b10e85053
chore(release): prepare v0.17.2
2026-06-28 23:03:18 -07:00
sudacode
c942a2cf2d
fFix(youtube): recover source URL for background media cache on direct mpv open ( #132 )
2026-06-28 22:46:11 -07:00
sudacode
f65afa6046
feat(youtube): notify on manual picker open and show success after track load ( #133 )
2026-06-28 22:43:16 -07:00
sudacode
36f94151b8
fix(logs): use local date for log filenames and expand export redaction ( #131 )
2026-06-27 21:08:11 -07:00
sudacode
5326ad32f5
feat(youtube): add mediaCache mode and safer stream media extraction ( #130 )
2026-06-27 19:20:18 -07:00
sudacode
70da3ee8bd
Fix Windows Anki startup and overlay regressions ( #128 )
2026-06-14 20:51:56 -07:00
sudacode
a117c5759c
fix(linux): auto-install managed plugin copy; include in asset updates ( #127 )
2026-06-14 17:25:28 -07:00
sudacode
ae7e6f82a8
fix(overlay): restore macOS Yomitan popup focus without breaking click-away ( #125 )
2026-06-14 16:46:13 -07:00
sudacode
33e767458f
refactor(main): split main.ts into focused runtime modules ( #123 )
2026-06-12 17:35:46 -07:00
sudacode
0a384a22c9
Replace subtitle delay actions with native mpv keybindings ( #120 )
2026-06-12 00:03:06 -07:00
sudacode
b3b45521b6
fix(release): preserve attribution placement; default update notifs to o
...
- Move What's Changed/New Contributors before Installation in release notes
- Preserve committed attribution when regenerating via writeReleaseNotesForVersion
- Change notificationType default from 'both' to 'overlay' for new installs
2026-06-10 23:53:31 -07:00
sudacode
131b23efa9
chore(release): prepare v0.16.0
2026-06-10 23:05:37 -07:00
sudacode
e2afceb492
fix(anki): write sentence card audio only to sentence audio field ( #118 )
2026-06-10 22:51:19 -07:00
sudacode
7be1843c41
feat(notifications): add overlay notifications with position config ( #110 )
2026-06-10 22:46:52 -07:00
sudacode
2007e28be8
feat(aniskip): move intro detection from mpv plugin to app runtime ( #117 )
2026-06-09 23:55:43 -07:00
sudacode
d5bfdcae7b
fix(stats): repair legacy combined-season anime rows on startup ( #116 )
2026-06-09 12:41:07 -07:00
sudacode
311f1e8ee5
feat(stats): speed up session maintenance and improve stats UI ( #111 )
2026-06-08 02:20:52 -07:00
sudacode
e6a16a069b
fix(anilist): mark entry completed when final episode is reached ( #115 )
2026-06-07 23:45:09 -07:00