Context Layer API
fmemory provides durable state and transcript persistence for Fiddlesticks.
It is the persistence layer used by fharness for initializer/coding-run artifacts and by fchat (through an adapter) for conversation history.
Responsibilities
- Persist session bootstrap artifacts (manifest, feature list, progress, run checkpoints)
- Persist transcript messages
- Expose a
MemoryBackendcontract for harness logic - Adapt memory transcript storage to
fchat::ConversationStore
fmemory does not:
- Execute model calls (
fprovider) - Orchestrate turns (
fchat) - Execute tools (
ftooling) - Decide multi-run harness strategy (
fharness)
Add dependency
[]
= { = "../fmemory" }
Core types
MemoryBackend: async persistence traitSqliteMemoryBackend: default durable backend implementationPostgresMemoryBackend: durable backend using PostgreSQLFilesystemMemoryBackend: JSON-file durable backend implementationInMemoryMemoryBackend: ephemeral test-oriented backend implementationMemoryBackendConfig: backend selection configurationMemoryConversationStore: adapter implementingfchat::ConversationStoreSessionManifest: harness session metadata (+ schema/harness versions)FeatureRecord: feature checklist itemProgressEntry: per-run progress log entryRunCheckpoint: run lifecycle status recordBootstrapState: manifest + feature/progress/checkpoint aggregate
Session initialization guards
MemoryBackend includes explicit initializer-safe methods:
is_initialized(session_id)initialize_session_if_missing(...)
initialize_session_if_missing(...) is idempotent:
- returns
truewhen it creates state for the first time - returns
falsewhen state already exists (no overwrite)
Basic backend usage
use SessionId;
use *;
async
Backend selection
fmemory supports configurable backend construction:
use ;
let sqlite_default = create_default_memory_backend?;
let in_memory = create_memory_backend?;
let sqlite_custom = create_memory_backend?;
let postgres = create_memory_backend?;
let filesystem = create_memory_backend?;
let _ = ;
# Ok::
Default backend path is ~/.fiddlesticks/fmemory.sqlite3 (or %USERPROFILE%/.fiddlesticks/fmemory.sqlite3 on Windows). Override it with FMEMORY_SQLITE_PATH.
fchat integration adapter
MemoryConversationStore lets fchat use fmemory without direct store duplication:
use Arc;
use *;
let backend: = new;
let store = new;
let _ = store;
Versioning fields
SessionManifest includes:
schema_version(default:1)harness_version(default:"v0")
These support forward migration for future harness behaviors.
Error model
MemoryErrorKind variants:
StorageNotFoundInvalidRequestOther