- Add Highlight struct to represent bookmarks with owned memory - Implement SHA-256 hashing for text and book identification - Update SQL query to extract clean book filenames (removes path and fragment) - Remove unused Annotation column from query - Add CLAUDE.md for repository documentation - Update .gitignore to exclude SQLite WAL files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2.4 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
A statically-linked Zig binary that extracts highlights from Kobo e-reader SQLite databases. The project builds for both x86_64 (development) and ARM (target Kobo device).
Build Commands
Local development (x86_64)
zig build
./zig-out/bin/kb_exfiltrator local-dev.sqlite
Run with arguments
zig build run -- path/to/database.sqlite
Testing
zig build test
For Kobo (ARM target)
./build-kobo.sh
# or manually:
zig build -Dtarget=arm-linux-musleabihf -Doptimize=ReleaseSmall
The ARM build creates kb_exfiltrator-kobo-arm in the project root.
Architecture
Module Structure
The project uses Zig's module system with two distinct modules:
- kb_exfiltrator module (
src/root.zig): Library module exposing reusable functionality - Executable module (
src/main.zig): CLI entry point that imports the library module
The executable depends on the library module via the imports mechanism in build.zig:87-91.
SQLite Integration
SQLite is vendored as an amalgamation build (vendor/sqlite-amalgamation-3480000/). The build.zig configuration:
- Links SQLite as a C source file (build.zig:87-93)
- Compiles with
SQLITE_THREADSAFE=0(no threading, smaller binary) - Compiles with
SQLITE_OMIT_LOAD_EXTENSION(security) - Uses
@cImportin main.zig:2-4 to import C headers
Static Linking
The binary is fully statically linked:
- Uses musl libc for ARM target (
arm-linux-musleabihf) - SQLite compiled directly into the binary
- No external dependencies required on target device
Database Schema
The program queries the Kobo Bookmark table:
Text: The highlighted text (non-NULL indicates a highlight)Annotation: User's notes on the highlight (nullable)DateCreated: TimestampContentID: Book identifier
Query implementation: src/main.zig:33-42
Build System Details
The build.zig uses Zig's build graph system:
- Target and optimization are configurable via CLI (
-Dtarget,-Doptimize) - The executable step (build.zig:60-84) creates the root module and wires dependencies
- Tests are split into module tests and executable tests (build.zig:132-154)
- Both test suites run in parallel when executing
zig build test
Requirements
- Zig 0.15.2 or later (specified in build.zig.zon:28)