Skip to content

Releases

kindling v0.4.1

Choose a tag to compare

@joshuaboys joshuaboys released this 10 Nov 08:59

kindling 0.4.1

Security

  • Bundled SQLite follows rusqlite 0.41 (RUSTSEC-2026-0459).
    kindling, kindling-store, and kindling-provider depend on rusqlite
    0.41 with the bundled feature, which builds libsqlite3-sys 0.39
    (SQLite 3.54.1). The 0.40 line bundled SQLite before 3.54.0. That SQLite can
    return uninitialized page-cache memory when a process opens a database
    together with a sibling -wal file whose page size differs. The workspace
    MSRV is 1.89, which is rusqlite 0.41's minimum.

Fixed

  • Failed capsule closes and observation attachments roll back (GH-165, GH-204).
    A close that fails while storing its summary leaves the capsule without that
    summary, and a failed attachment removes an observation inserted for that
    attempt. An observation that already existed stays in place and can be
    retried.
  • A failed capsule import rolls back that capsule (GH-203).
    When linking observations fails, the import removes the new capsule and its
    links so a repaired bundle can be imported again. Other entities in the same
    import still commit.
  • validate_db_path accepts harmless adjacent dots in database paths.
    Parent-directory rejection now matches .. as a whole / or \ component
    (../x, a/../b, ..\\x, a bare ..), so names such as my..db and
    archive..old/kindling.db can be opened.
  • Hook secret masking redacts padded Basic and Bearer credentials in full (GH-169).
    Base64 padding = is no longer treated as a key/value separator, which kept
    the credential and appended =[REDACTED].
  • Daemon socket cleanup no longer deletes a regular file at the socket path (GH-168).
    Startup removes a leftover Unix socket only, and shutdown unlinks the bound
    socket's inode. A regular file already at that path, or one that replaces
    the socket after bind, is left in place.
  • Hook tool capture and service ingestion sanitize secrets across content, provenance, and scope metadata (GH-170).
    format_tool_content and extract_tool_use_provenance now filter tool
    arguments, errors, shell variable assignments, and URL credentials/query
    parameters; Bash provenance skips leading variable assignments (and omits
    command when only assignments or secrets are present); and
    append_observation_at sanitizes provenance and scope_ids alongside
    content.

Changed

  • Public SQLite errors use rusqlite 0.41.
    StoreError::Sqlite, ProviderError::Sqlite, and CliError::Sqlite keep
    their names. Matching those variants yields rusqlite 0.41's Error.
  • kindling search defaults its repo scope to the current git repository
    (C3).
    Without --repo, search filters on the enclosing git working-tree
    root (git rev-parse --show-toplevel), from any subdirectory; outside a git
    repository no repo filter is applied. A new --all-repos flag searches every
    repository, and an explicit --repo always overrides detection. The log
    and capsule open verbs default their recorded repo scope to the same root
    so CLI round trips stay consistent. The applied scope is shown in
    the text output and in provenance.scopeIds in --json output. The demo's
    suggested search now passes --all-repos, since demo memory has its own
    sample repo ID.

kindling v0.4.0

Choose a tag to compare

@joshuaboys joshuaboys released this 21 Oct 08:27

kindling 0.4.0

Integration-hardening release. Closes out the post-0.3 downstream-integration
work the daemon/client contract needed before anvil could depend on it in
anger: redaction evidence, published fixtures, an authenticated TCP transport,
atomic capsule close, honest --db routing, outage spooling that stays flat
under a deep backlog, and composite scope indexes for keyset reads. It also
carries the CodeQL path-injection fix and the cleartext-logging triage.

Breaking for kindling-server (build_router gains a tcp_secret
argument), for mixed-version TCP deployments (the daemon now requires a
bearer token on loopback TCP), and for the schema contract (v5 to v6).
Pre-1.0, a breaking change bumps the minor, hence 0.4.0.

npm publishing discontinued. kindling no longer publishes to npm (D-010).
This is the first GitHub Release since v0.1.2, and it ships as Release assets
(the 7 prebuilt kindling binaries, attached to a Release for the first
time, and the VS Code / Cursor / Windsurf VSIX), the Homebrew tap, and
crates.io. The npm packages @eddacraft/kindling,
@eddacraft/kindling-adapter-opencode and
@eddacraft/kindling-adapter-pocketflow stay at the retired 0.1.2
TypeScript engine and are being deprecated with a notice pointing at the
binary install. Their source stays in the repository: the thin client is
bundled into the VSIX, and the adapters can be used from a clone.

Highlights

  • Authenticated loopback-TCP transport (KINTEG-010). The daemon mints a
    per-daemon secret, stores it in an owner-only token file beside the port
    file, and rejects every request except GET /v1/health that does not carry
    it as a bearer token. The client reads the token automatically. UDS is
    unchanged.
  • Redaction evidence (KINTEG-006). Append responses report how many
    secret matches were masked and which classes matched, never the values, so a
    consumer can prove sensitive content was handled without re-leaking it.
  • Published hook-payload fixtures (KINTEG-007). A versioned
    fixtures/hook-payloads/claude-code.json, also exported from
    @eddacraft/kindling as ./fixtures, gives adapter authors a stable
    artefact to test against. The export-bundle compatibility guarantee is now
    documented in docs/data-model.md.
  • Flat outage spooling (KINTEG-013). SpooledClient no longer rescans or
    rewrites the whole backlog per append, and backs off a known-unavailable
    daemon instead of retrying on every observation.
  • Composite scope indexes (KINTEG-014, schema v6). Keyset list queries over
    a repo or session no longer sort through a temporary B-tree.
  • Correctness fixes: capsule close is atomic when the summary is missing
    (KINTEG-011); --via-daemon with --db is rejected instead of silently
    routing to a different project's database (KINTEG-012).
  • Security: database paths are validated before anything is created on
    disk (CodeQL rust/path-injection #15); the rust/cleartext-logging alerts
    #11 to #14 are triaged as false positives with a CodeQL model pack and a
    written disposition in SECURITY.md.

Breaking changes and upgrade

  • TCP transport requires a bearer token. A 0.3 client talking to a 0.4
    daemon over TCP (the Windows default) receives 401. Upgrade the client and
    the daemon together. No configuration changes: the token file is derived
    from the existing port-file rendezvous.
  • kindling_server::build_router(state, tcp_secret). Pass None when
    embedding the router over UDS only.
  • Schema v5 to v6. Read-write opens migrate in place on first open.
    Read-only opens of v5 databases still work. A v6 database cannot be opened
    by a 0.3 engine, so do not downgrade after the first open.

Install

# Rust SDK (daemon-backed), with the durable-emit spool
cargo add kindling-client@0.4 --features spool

# one-dependency embedded runtime
cargo add kindling-runtime@0.4

# CLI binary
cargo install eddacraft-kindling@0.4

# Homebrew (macOS/Linux)
brew install eddacraft/tap/kindling

# install script (resolves the latest GitHub Release)
curl -fsSL https://raw.githubusercontent.com/eddacraft/kindling/main/install.sh | sh

The editor extension is the kindling-0.4.0.vsix asset on this Release; see
the Cursor and Windsurf quickstart.

Notes

  • The Rust crates are published to crates.io separately via
    scripts/publish.sh in dependency order (types, store, provider, service,
    server, client, runtime, kindling). kindling-bench is publish = false.
  • Publishing this GitHub Release triggers release.yml (binary archives and
    the VSIX attached to the Release, plus the automated homebrew-tap PR, which
    needs the HOMEBREW_TAP_TOKEN secret). Nothing is published to npm.

Changelog: see CHANGELOG.md ·
Full diff: v0.3.0...v0.4.0

v0.1.2

v0.1.2 Pre-release
Pre-release

Choose a tag to compare

@joshuaboys joshuaboys released this 16 Feb 14:45
090611a

What's Changed

Full Changelog: v0.1.1...v0.1.2

v0.1.1

v0.1.1 Pre-release
Pre-release

Choose a tag to compare

@joshuaboys joshuaboys released this 13 Feb 04:39

What's Changed

Security

  • Fix SQL injection vector in database export — validate limit parameter before interpolation into queries (#2) by @joshuaboys
  • Add permissions to GitHub publish workflow — restrict token scope (#24) by @joshuaboys

Bug Fixes

  • Fix Claude Code plugin for standalone installation — remove workspace:* devDependencies that broke npm install outside the monorepo, bump auto-install timeout to 120s, improve stdio handling and debug logging (#21) by @joshuaboys
  • Fix private: true preventing npm publish by @joshuaboys
  • Fix KindlingClient → KindlingApiClient class name in README example (#19) by @joshuaboys

Features

  • Add Claude Code plugin marketplace manifest for github:EddaCraft/kindling installation by @joshuaboys

Documentation

  • Add README for the main @eddacraft/kindling npm package — quick start, bundled exports, entry points, lightweight alternatives (#19) by @joshuaboys
  • Add installation links to root README by @joshuaboys

Chores

Full Changelog: v0.1.0...v0.1.1

Kindling Beta Release

Kindling Beta Release Pre-release
Pre-release

Choose a tag to compare

@joshuaboys joshuaboys released this 12 Feb 02:15

What's Changed

  • docs(plan): Implement Anvil Plan Spec structure for Kindling by @joshuaboys in #4 & #1
  • feat: Implement M2 Phase 1 - TypeScript monorepo with core packages by @joshuaboys in #2
  • feat: scaffold M1 package structure and core documentation by @joshuaboys in #3
  • feat: Pocketflow Adapter - vendoring solution and doc updates by @joshuaboys in #5
  • feat: add KindlingService, API server, and expanded CLI commands by @joshuaboys in #6
  • feat: prepare all packages for npm publishing by @joshuaboys in #7
  • chore: add code quality tooling: Prettier, ESLint, Husky, and lint-staged by @joshuaboys in #9
  • chore: approve build scripts for better-sqlite3 and esbuild by @joshuaboys in #11
  • docs: add active development warning to README by @joshuaboys in #12
  • ci: add lightweight CI workflow for PRs and main branch by @joshuaboys in #8
  • feat(plugin): migrate Claude Code plugin from flat files to SQLite by @joshuaboys in #10
  • fix: DX hardening - security, error handling, docs by @joshuaboys in #14
  • feat: rework Claude Code plugin with SQLite engine by @joshuaboys in #15
  • chore: npm publishing readiness by @joshuaboys in #16
  • chore: rename packages from @kindling/* to @eddacraft/* scope by @joshuaboys in #17
  • chore: eddacraft scope rename by @joshuaboys in #18

Full Changelog: https://github.com/EddaCraft/kindling/commits/v0.1.0