Alexander Whitestone
75e31bee27
Lint / lint (pull_request) Successful in 9s
feat(atlas): lossless context + memory subsystem from hermes-lcm and gbrain
Implements the ATLAS (Adaptive Turn-Lineage Archival System) lossless
memory subsystem as described in issue #985. All 183 fixture-backed
tests pass.
agent/atlas/ — modular ATLAS package:
- turns.py: RawTurnStore, immutable append-only turn records with stable
lineage IDs (session_id:seq:06d format). Turns are never deleted.
- dag.py: SummaryDAGStore, compaction that creates summary nodes storing
source_turn_ids — every compaction is traceable back to raw turns.
- stores.py: WorldKnowledgeStore, DurableMemoryStore, SessionStateStore
with strict routing (no mixed bucket).
- extractor.py: TypedLinkExtractor, deterministic regex-based extraction
of 7 typed relation types on every write (no LLM calls):
DEFINES, MODIFIES, REFERENCES, DEPENDS_ON, CONTRADICTS, PREFERS, LOCATES
- recall.py: RecallEngine with 3 explicit recall ops: search/describe/expand
- db.py: AtlasDB SQLite connection/schema bootstrap
agent/atlas_memory.py — AtlasMemory facade (higher-level API)
agent/lossless_context.py — JSONL-based lossless context subsystem
plugins/memory/atlas/ — MemoryProvider plugin wiring into Hermes lifecycle
tools/lossless_recall_tool.py — lossless_recall tool (search/describe/expand)
tools/memory_tool.py — extended with world_knowledge store target
tests/ — 183 fixture-backed tests covering all acceptance criteria:
- Every turn persisted with stable lineage IDs ✅
- Compaction builds retrievable summary DAG nodes with source references ✅
- 3 explicit recall operations (search/describe/expand) ✅
- Writes route to explicit stores (no mixed bucket) ✅
- 7 typed relation types with fixture-backed tests ✅
- test_recover_fact_from_compacted_context proves fact recovery without
re-injecting the full original transcript ✅
Fixes #985
2026-04-22 10:15:21 -04:00
..
2026-04-10 03:45:36 -07:00
2026-04-22 10:15:21 -04:00
2026-04-22 10:15:21 -04:00
2026-04-14 01:43:45 -07:00
2026-04-15 03:46:58 -07:00
2026-04-11 13:59:52 -07:00
2026-04-07 17:28:37 -07:00
2026-04-22 13:36:14 +00:00
2026-04-21 22:41:27 -04:00
2026-04-11 00:43:27 -07:00
2026-04-13 16:32:04 -07:00
2026-04-15 23:04:41 -04:00
2026-04-22 01:34:24 -04:00
2026-04-12 00:33:54 -07:00
2026-04-22 13:36:20 +00:00
2026-04-09 13:17:06 -07:00
2026-03-17 02:53:33 -07:00
2026-04-15 22:17:16 -04:00
2026-04-21 00:28:15 +00:00
2026-04-10 13:06:02 -07:00
2026-04-07 17:59:42 -07:00
2026-04-16 02:12:36 +00:00
2026-04-17 05:06:54 +00:00
2026-04-17 05:23:48 +00:00
2026-04-17 05:04:50 +00:00
2026-04-15 21:00:06 -04:00
2026-04-13 10:50:24 -07:00
2026-04-12 03:53:30 -07:00
2026-04-15 22:56:32 -04:00
2026-04-12 16:36:11 -07:00
2026-04-13 10:50:24 -07:00
2026-04-09 02:41:56 -07:00
2026-04-02 15:33:51 -07:00
2026-04-11 23:12:11 -07:00
2026-04-22 10:15:21 -04:00
2026-03-29 15:47:19 -07:00
2026-03-24 08:19:23 -07:00
2026-04-07 17:59:42 -07:00
2026-03-20 15:41:06 -04:00
2026-04-13 22:01:49 -07:00
2026-04-21 18:04:00 -04:00
2026-04-07 22:23:28 -07:00
2026-03-30 17:34:43 -07:00
2026-04-22 01:34:24 -04:00
2026-04-21 22:26:54 -04:00
2026-04-14 10:42:58 -07:00
2026-04-21 11:59:26 +00:00
2026-04-17 05:13:03 +00:00
2026-04-10 21:15:59 -07:00
2026-04-08 00:41:36 -07:00
2026-04-15 22:41:54 -04:00
2026-04-20 15:54:46 +00:00
2026-04-21 11:37:55 -04:00
2026-04-16 15:04:28 +00:00
2026-03-19 15:16:35 +01:00
2026-04-10 13:37:45 -07:00
2026-04-20 15:47:35 +00:00
2026-04-17 01:15:09 -04:00
2026-04-10 03:44:43 -07:00
2026-04-21 11:41:39 +00:00
2026-04-17 01:57:37 -04:00
2026-04-16 02:15:59 +00:00
2026-04-21 05:38:54 +00:00
2026-04-14 17:19:20 -07:00
2026-04-13 10:50:24 -07:00
2026-04-14 10:24:19 -07:00
2026-04-15 22:14:16 -04:00
2026-03-30 13:28:10 +09:00
2026-04-15 23:02:02 -04:00