97379e9658
session-memory: error-body mining into digest (WP-0006 T01)
...
build_digest now extracts normalized error fingerprints + samples from failed
events (error kind + failing tool_result bodies) into a durable error_snippets
list — paths/numbers/uuids/addrs stripped so the same error collapses to one
fingerprint with a count; Python traceback header skipped in favour of the real
exception line. Durable in Tier 2 (survives Tier 1 eviction). SCHEMA_VERSION ->
2 (re-ingest needed to populate). 7 new tests; suite 95/95 green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 12:45:01 +02:00
436a96dcd8
session-memory Phase 1: Detect pipeline (T04-T07)
...
- detect/signals.py: pure extractors over digests (retry storm, repeated
errors, budget overrun vs corpus p90, abandoned, clean pass, recovery)
- detect/cluster.py: deterministic clustering into candidate Patterns with
evidence (sessions/repos/flavors/cost impact) + cross-flavor flagging
- detect/__main__.py: python -m session_memory.detect, ranked report
(cross-flavor first) + --json; persists candidates to Tier 2 patterns table
- core/store.py: list_digests + save_patterns
- tests for signals, cluster, detect entrypoint
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-06 22:31:13 +02:00
bc11cb9aec
session-memory Phase 1: Codex adapter (T01) + multi-file merge (T03)
...
- adapters/common.py: shared Normalized + helpers (resolve_repo, classify_tool,
jsonl iter, etc.); claude.py refactored to use it (Normalized re-exported)
- adapters/codex.py: rollout {timestamp,type,payload} parser; session_meta/
response_item/event_msg mapping; flat call_id join; token_count cost;
registered in ingest dispatch
- core/store.py: ingest() now merges multi-file sessions by content
fingerprint, appends new events with offset seq (design OQ6); idempotent
- tests/test_codex_adapter.py, tests/test_merge.py
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-06 21:55:32 +02:00
586ed90948
session-memory Phase 0: ingest cursor + sweep entrypoint + config (T06)
...
- session_memory/core/cursor.py: size/mtime change detection sidecar
- session_memory/config.toml: store paths, retention caps, per-source
globs (claude on, codex/grok off for Phase 1), repo->domain map
- session_memory/ingest.py: discover->normalize->store->digest->evict;
--dry-run creates/writes nothing; python -m session_memory.ingest
- tests/test_ingest.py; live dry-run parsed 84/85 real local sessions
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-06 21:41:59 +02:00
451fb8f1f3
session-memory Phase 0: budget-based retention sweep (T05)
...
- session_memory/core/retention.py: RetentionConfig + sweep() with backstop,
budget (oldest-analyzed-first, never touches un-analyzed), and hard-cap
overflow (analyze-now then reported last-resort data_loss); EvictionReport
- tests/test_retention.py covers all four branches
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-06 21:37:40 +02:00
abb888f3ef
session-memory Phase 0: session digest + outcome heuristic (T04)
...
- session_memory/core/digest.py: build_digest (cost totals, kind/tool
histograms, markers, snippets) + cross-flavor infer_outcome heuristic;
analyze() promotes Tier1->Tier2 and sets analyzed_at (-> evictable)
- tests/test_digest.py
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-06 20:03:04 +02:00
29fc211a14
session-memory Phase 0: Tier1/Tier2 store (T03)
...
- session_memory/core/store.py: SQLite rows + blob-dir bodies, idempotent
ingest on (session_uid,seq), Tier1/Tier2 usage accounting, evict_raw that
drops raw but preserves the digest; watermark columns authoritative
- tests/test_store.py: ingest idempotency, accounting, eviction invariant
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-06 19:10:02 +02:00
1c29a94fa9
session-memory Phase 0: normalized schema (T01) + Claude adapter (T02)
...
- session_memory/core/schema.py: Session/SessionEvent/Cost dataclasses,
flavor-prefixed uids, watermarks, kind/outcome validation (T01)
- session_memory/adapters/claude.py: JSONL -> Normalized bundle, turn DAG
via uuid/parentUuid, kind mapping, cost from message.usage (T02)
- tests: schema round-trip + adapter (synthetic + real local session)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-06 19:06:10 +02:00