mirror of
https://github.com/thedotmack/claude-mem.git
synced 2026-09-20 04:23:02 +08:00
fd0ecf0233
Raw tool I/O had no durable home. `pending_messages` is the generation queue -- rows are claimed, summarized, and deleted -- so once an observation existed the original tool_input/tool_response were gone. Adds `tool_uses` (schema v51) as a by-reference side index for those bodies, written from the one ingest choke point both the PostToolUse hook route and the transcript-watch processor already share. The JSONL transcripts and `src/services/transcripts/*` remain the spine and are untouched. Schema (Receipt freeze 2026-09-06): UNIQUE(content_session_id, tool_use_id), nullable `or_generation_id` / `or_session_id` as join keys back to an OpenRouter spend line, and deliberately no cost_usd/micros -- this table carries tool identity, dollars stay on the OR stamp. No FK on session_db_id/observation_id: a FK there can abort the constructor migration chain (#3378), and observation_id is linked late by design. Write path dual-writes alongside -- never instead of -- the pending_messages enqueue, and swallows its own failures so an observation is never lost to a backup-index error. `toolUseId` now actually reaches the worker from hooks: it was missing from NormalizedHookInput and every hook adapter, so only the transcript path supplied it. ResponseProcessor links the batch's claimed ids to the first stored observation. Read path is progressive-disclosure layer 4: POST /api/tool-uses/batch requires explicit ids (never a full-table scan), GET /api/tool-uses returns a cheap index shape with size hints and never the payloads, and the `get_tool_uses` MCP tool is described as a last resort. claude-mem's own read tools are skipped by the writer -- without that, every call to get_tool_uses would store the bodies it just returned. Payloads are stored in-row with a 64 KB soft cap and a UTF-8-safe truncation marker; content_hash is computed over the original. Join contract for Receipt: RECEIPT-JOIN.md Claude-Session: https://claude.ai/code/session_01QgdJ6gExgBirDoAxknt94m Co-authored-by: Claude Opus 5 <noreply@anthropic.com>