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-07 08:40:22 -04:00
2026-04-14 21:20:37 -07:00
2026-03-17 02:33:12 -07:00
2026-04-20 15:54:43 +00:00
2026-03-31 08:48:54 +09:00
2026-03-23 07:43:12 -07:00
2026-04-16 01:35:49 +00:00
2026-04-15 22:17:16 -04:00
2026-04-08 02:24:32 -07:00
2026-04-01 04:18:50 -07:00
2026-04-10 03:44:43 -07:00
2026-04-21 05:33:32 +00:00
2026-04-22 13:36:20 +00:00
2026-04-08 02:24:32 -07:00
2026-04-11 14:50:44 -07:00
2026-04-07 13:36:38 -07:00
2026-04-20 15:46:23 +00:00
2026-04-15 22:56:32 -04:00
2026-04-11 13:59:52 -07:00
2026-04-17 05:21:25 +00:00
2026-04-15 21:00:06 -04:00
2026-04-15 04:57:55 -07:00
2026-04-07 10:25:31 -07:00
2026-04-12 00:54:35 -07:00
2026-04-13 16:32:04 -07:00
2026-04-13 23:54:45 -07:00
2026-04-22 02:55:04 +00:00
2026-04-10 16:47:44 -07:00
2026-04-21 00:29:12 +00:00
2026-04-13 04:45:07 -07:00
2026-04-13 16:32:04 -07:00
2026-04-11 14:02:58 -07:00
2026-04-22 03:01:37 +00:00
2026-04-22 10:15:21 -04:00
2026-04-02 12:40:03 +11:00
2026-04-10 03:05:04 -07:00
2026-04-14 21:12:29 -07:00
2026-04-22 10:15:21 -04:00
2026-04-13 16:32:04 -07:00
2026-03-18 02:55:30 -07:00
2026-03-11 20:02:36 -07:00
2026-04-05 12:46:07 -07:00
2026-04-10 16:47:44 -07:00
2026-04-21 22:26:54 -04:00
2026-04-11 13:59:52 -07:00
2026-04-21 11:59:25 +00:00
2026-04-12 00:36:22 -07:00
2026-04-15 22:17:16 -04:00
2026-04-07 10:25:31 -07:00
2026-04-22 03:15:17 +00:00
2026-04-15 04:16:06 -07:00
2026-04-13 04:54:42 -07:00
2026-04-20 15:56:26 +00:00
2026-04-21 11:37:55 -04:00
2026-04-13 16:32:04 -07:00
2026-04-12 16:39:04 -07:00
2026-04-11 01:21:20 -07:00
2026-04-15 04:57:55 -07:00
2026-04-22 13:28:31 +00:00
2026-04-22 03:07:40 +00:00
2026-04-22 13:28:25 +00:00
2026-04-22 03:02:02 +00:00
2026-04-22 03:00:44 +00:00
2026-04-13 16:32:04 -07:00
2026-03-25 19:47:58 -07:00
2026-04-11 16:22:50 -07:00
2026-03-31 08:48:54 +09:00
2026-04-16 02:10:39 +00:00
2026-04-11 14:26:11 -07:00
2026-04-21 05:38:22 +00:00
2026-04-13 16:32:04 -07:00
2026-04-15 04:57:55 -07:00
2026-04-15 22:14:16 -04:00
2026-04-10 05:04:28 -07:00
2026-04-22 02:56:33 +00:00
2026-04-13 16:32:04 -07:00
2026-04-13 16:32:04 -07:00
2026-04-21 05:34:22 +00:00
2026-04-13 16:32:04 -07:00
2026-04-07 10:25:31 -07:00