Purpose of this page: name every adapter, the vendor each one wraps, and the rule that only main.ts may construct them.
Layer 8

services/ — implementations

Vendor-named adapters. Only main.ts names them; everything else sees an interface.

SQLite family

SqliteStorage (+ migrations 0001–0008)

Owns the database file, its schema migrations, and the transaction context every other store accepts.

SqliteEventLog · SqliteLease · SqliteExecution

Append-only events, lease hierarchy state, execution records — all inside the caller's transaction.

SqlitePlanStore · SqliteBlobStore

Plan documents and large payloads under canonical serialization.

Git family

BinaryGit

Speaks to the git binary through runner · journal · probe · worktree · ref-update · seed · sweep, guarded against outside writers.

Adapters

GraphologyGraph · YamlDocumentReader

Graph algorithms and YAML parsing behind their interfaces.

NodeWriteRevision · DependencyReadiness

Revision checks and dependency readiness evaluation.

UlidIdGenerator · SystemClock

Identity and time, injected so domain stays pure and tests stay deterministic.

AesGcmCrypto · NodeCryptoSecret

Encryption of credential material at rest.

PiAiModelCatalog · ConvictConfig

Model provider catalog and configuration loading.

SqliteHomeLock + StatfsProbe

Exclusive access to a home directory.

Inbound edges

FromMeaning
interfacesimplemented by
main.tsconstructs + injects each one once

Outbound edges

FromToMeaning
SQLite familyhome/kanthord.dball persistent state
BinaryGitgit binaryspawns git processes
BinaryGithome/worktrees · journal · run/
adaptersconfig file · master keyreads secret material
adaptersmodel-provider APIspi-ai network calls

Rules

  1. An implementation imports only its own capability's interface and implementations. Another capability's implementation is out of bounds.
  2. Vendors live here and nowhere above Layer 7.