Files
wesandClaude 22602bebf9 Add Highlight struct with SHA-256 hashing and improve query
- 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>
2025-12-01 16:42:58 -05:00

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 @cImport in 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: Timestamp
  • ContentID: 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)