daemon: background job orchestration for memory maintenance

Replace fragile cron+shell approach with `poc-memory daemon` — a single
long-running process using jobkit for worker pool, status tracking,
retry, cancellation, and resource pools.

Jobs:
  - session-watcher: detects ended Claude sessions, triggers extraction
  - scheduler: runs daily decay, consolidation, knowledge loop, digests
  - health: periodic graph metrics check
  - All Sonnet API calls serialized through a ResourcePool(1)

Status queryable via `poc-memory daemon status`, structured log via
`poc-memory daemon log`. Phase 1: shells out to existing subcommands.

Co-Authored-By: ProofOfConcept <poc@bcachefs.org>
This commit is contained in:
ProofOfConcept 2026-03-05 13:18:00 -05:00
parent c085679a0f
commit e37f819dd2
4 changed files with 499 additions and 1 deletions

32
Cargo.lock generated
View file

@ -755,6 +755,17 @@ version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
[[package]]
name = "jobkit"
version = "0.1.0"
dependencies = [
"crossbeam-deque",
"log",
"profiling",
"serde",
"serde_json",
]
[[package]]
name = "js-sys"
version = "0.3.91"
@ -1069,7 +1080,9 @@ dependencies = [
"capnpc",
"chrono",
"faer",
"jobkit",
"libc",
"log",
"memmap2",
"paste",
"peg",
@ -1125,6 +1138,25 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "profiling"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773"
dependencies = [
"profiling-procmacros",
]
[[package]]
name = "profiling-procmacros"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
dependencies = [
"quote",
"syn 2.0.117",
]
[[package]]
name = "ptr_meta"
version = "0.1.4"