Repository navigation
feat(opds): add headless server on a Tauri-independent runtime - #151
phildenhoff wants to merge 1 commit into
Conversation
libcalibre Test Coverage ReportOverall coverage: 79.96% Coverage breakdown available in the artifacts. |
78e8fbb to
4a61b80
Compare
libcalibre Test Coverage ReportOverall coverage: 79.96% Coverage breakdown available in the artifacts. |
libcalibre Test Coverage ReportOverall coverage: 79.96% Coverage breakdown available in the artifacts. |
4a61b80 to
f6c7037
Compare
libcalibre Test Coverage ReportOverall coverage: 80.16% Coverage breakdown available in the artifacts. |
libcalibre Test Coverage ReportOverall coverage: 80.16% Coverage breakdown available in the artifacts. |
f6c7037 to
95564c6
Compare
libcalibre Test Coverage ReportOverall coverage: 80.16% Coverage breakdown available in the artifacts. |
libcalibre Test Coverage ReportOverall coverage: 80.16% Coverage breakdown available in the artifacts. |
95564c6 to
99a759b
Compare
libcalibre Test Coverage ReportOverall coverage: 80.16% Coverage breakdown available in the artifacts. |
feat(server): add headless OPDS host
99a759b to
35d490f
Compare
libcalibre Test Coverage ReportOverall coverage: 80.16% Coverage breakdown available in the artifacts. |
Rebuilds the sharing settings pane on the state-machine service and the credential surface from #161: - Mode choice, not a picker: Local network (exact private/ULA binds, never needs credentials) vs All networks (wildcard, enabled only once a credential set exists). The per-interface picker is gone. - Credentials: status / configure (hand-set) / generate-and-set / clear. Generated passwords are shown once, colour-chunked (word | digits+symbol | word, middle chunk bold) so they transcribe cleanly onto e-readers. - Status comes from the state-machine projection: Running shows catalog addresses; Waiting explains that sharing starts when a network appears; Failed surfaces the reason and returns to the form. - Copy per the agreed drafts; settings schema gains the sharing block (v2 -> v3 migration); web builds get no OPDS client at all. The old #151 branch is superseded by this one.
|
Following this stack with interest from the agent-tooling angle: a headless One roadmap question: is the headless runtime expected to stay OPDS-only, or is it the substrate for a broader programmatic surface (metadata query/edit over HTTP or CLI) eventually? Asking because I'd like to build agent tooling against it and want to know whether to watch this runtime or #102 for that. |
Why
Validating the OPDS stack currently means launching the full Tauri app — there's no way to exercise a packaged build's catalog without clicking through the GUI, and the runtime can't run anywhere Tauri can't.
What changed
OpdsBindTargetgained an explicitAddressesvariant, so a host can bind concrete sockets without enumerating OS network interfaces. The app's existing interface-based targets are untouched.citadel-servercrate: a headless host binary that loads a TOML config (library path, state directory, sharing target, optional Basic credentials read from an environment variable), validates it — absolute paths, port range, non-empty non-wildcard addresses, non-empty username — and runs the sameOpdsServicethe app uses, logging state transitions and shutting down cleanly on SIGINT/SIGTERM.example-config.tomlanddocs/headless-server.mddocument the shape.headless_process.rsspawns the real binary against a throwaway Calibre library and walks 401 → authorized catalog → acquisition download → signal shutdown.One honest cut: that process test is unix-only, so the Windows Ctrl-C shutdown path ships untested.
Validation: the stack tip runs 62 citadel-opds tests + 348 workspace tests, all green.
Stack: #146 → #147 → #148 → #149 → #150 → #151 (this) → #152 → #153 → #154 → #155