agmem 0.1.4__tar.gz → 0.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agmem-0.1.4/agmem.egg-info → agmem-0.1.6}/PKG-INFO +220 -49
- {agmem-0.1.4 → agmem-0.1.6}/README.md +219 -48
- {agmem-0.1.4 → agmem-0.1.6/agmem.egg-info}/PKG-INFO +220 -49
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/__init__.py +1 -1
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/daemon.py +1 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/gc.py +3 -1
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/prove.py +3 -1
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/timeline.py +1 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/when.py +1 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/compression_pipeline.py +12 -4
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/crypto_verify.py +2 -2
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/distiller.py +54 -6
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/federated.py +13 -3
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/gardener.py +64 -8
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/ipfs_remote.py +1 -2
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/knowledge_graph.py +3 -1
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/objects.py +2 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/pack.py +18 -4
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/remote.py +12 -3
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/zk_proofs.py +2 -0
- {agmem-0.1.4 → agmem-0.1.6}/pyproject.toml +1 -1
- {agmem-0.1.4 → agmem-0.1.6}/setup.py +1 -1
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_federated.py +6 -2
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_privacy_budget.py +21 -5
- {agmem-0.1.4 → agmem-0.1.6}/LICENSE +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/MANIFEST.in +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/agmem.egg-info/SOURCES.txt +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/agmem.egg-info/dependency_links.txt +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/agmem.egg-info/entry_points.txt +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/agmem.egg-info/requires.txt +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/agmem.egg-info/top_level.txt +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/AGMEM_PUBLISHING_SETUP.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/CONFIG.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/FEDERATED.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/GTM.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/KNOWLEDGE_GRAPH.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/SEQUENTIAL_VALIDATION.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/TEST_REPORT.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/docs/aux/INSTALL.md +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/examples/basic_workflow.sh +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/cli.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/add.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/audit.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/base.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/blame.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/branch.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/checkout.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/clean.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/clone.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/commit.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/decay.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/diff.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/distill.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/federated.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/fsck.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/garden.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/graph.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/init.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/log.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/mcp.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/merge.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/pack.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/pull.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/push.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/recall.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/reflog.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/remote.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/repair.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/reset.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/resolve.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/resurrect.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/search.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/serve.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/show.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/stash.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/status.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/tag.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/test.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/tree.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/commands/verify.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/access_index.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/audit.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/config_loader.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/consistency.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/constants.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/decay.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/diff.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/encryption.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/hooks.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/llm/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/llm/anthropic_provider.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/llm/base.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/llm/factory.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/llm/openai_provider.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/merge.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/pii_scanner.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/privacy_budget.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/refs.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/repository.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/schema.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/staging.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/storage/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/storage/base.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/storage/gcs.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/storage/local.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/storage/s3.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/temporal_index.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/test_runner.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/trust.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/core/vector_store.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/integrations/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/integrations/mcp_server.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/integrations/web_ui/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/integrations/web_ui/server.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/retrieval/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/retrieval/base.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/retrieval/pack.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/retrieval/recaller.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/retrieval/strategies.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/utils/__init__.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/memvcs/utils/helpers.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/setup.cfg +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_access_index.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_advanced_commands.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_audit.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_commit_importance.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_consistency.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_crypto_verify.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_decay.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_edge_cases.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_encryption.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_ipfs_remote.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_llm_provider.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_objects.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_pack_gc.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_pii.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_plan_features.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_repository.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_resolve_helpers.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_retrieval.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_temporal_index.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_trust.py +0 -0
- {agmem-0.1.4 → agmem-0.1.6}/tests/test_zk_proofs.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agmem
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: Agentic Memory Version Control System - Git for AI agent memories
|
|
5
5
|
Home-page: https://github.com/vivek-tiwari-vt/agmem
|
|
6
6
|
Author: agmem Team
|
|
@@ -142,6 +142,61 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
142
142
|
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
143
143
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
144
144
|
|
|
145
|
+
### Feature Coverage
|
|
146
|
+
|
|
147
|
+
```mermaid
|
|
148
|
+
graph TB
|
|
149
|
+
subgraph Core ["🔧 Core Features"]
|
|
150
|
+
Core1["✅ Git-like commands<br/>init, add, commit, log, branch, merge"]
|
|
151
|
+
Core2["✅ Content-addressable storage<br/>SHA-256, zlib, dedup"]
|
|
152
|
+
Core3["✅ Memory-type merge<br/>Episodic, Semantic, Procedural"]
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
subgraph Collab ["👥 Collaboration"]
|
|
156
|
+
Collab1["✅ Remote push/pull<br/>file:// URLs, conflict detection"]
|
|
157
|
+
Collab2["✅ Multi-agent trust<br/>Trust store, key verification"]
|
|
158
|
+
Collab3["✅ Federated sync<br/>Coordinator API"]
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
subgraph Safety ["🔒 Safety & Integrity"]
|
|
162
|
+
Safety1["✅ Cryptographic<br/>Merkle, Ed25519"]
|
|
163
|
+
Safety2["✅ Tamper detection<br/>Audit trail, hash-chain"]
|
|
164
|
+
Safety3["✅ Encryption at rest<br/>AES-256-GCM"]
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
subgraph Privacy ["🕵️ Privacy"]
|
|
168
|
+
Privacy1["✅ Differential privacy<br/>Epsilon/delta budget"]
|
|
169
|
+
Privacy2["✅ Zero-knowledge proofs<br/>Keyword, Freshness"]
|
|
170
|
+
Privacy3["✅ PII scanning<br/>Pre-commit hooks"]
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
subgraph Intelligence ["🧠 Intelligence"]
|
|
174
|
+
Intel1["✅ Semantic search<br/>Vector + Text fallback"]
|
|
175
|
+
Intel2["✅ Knowledge graph<br/>Wikilinks, Co-occurrence"]
|
|
176
|
+
Intel3["✅ LLM integration<br/>OpenAI, Anthropic"]
|
|
177
|
+
Intel4["✅ Temporal queries<br/>Point-in-time, Range"]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
subgraph Ops ["⚙️ Operations"]
|
|
181
|
+
Ops1["✅ Pack/GC<br/>Object packing, cleanup"]
|
|
182
|
+
Ops2["✅ Daemon mode<br/>Watch + auto-commit"]
|
|
183
|
+
Ops3["✅ IPFS/S3/GCS<br/>Distributed storage"]
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
Core --> Collab
|
|
187
|
+
Collab --> Safety
|
|
188
|
+
Safety --> Privacy
|
|
189
|
+
Privacy --> Intelligence
|
|
190
|
+
Intelligence --> Ops
|
|
191
|
+
|
|
192
|
+
style Core fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
193
|
+
style Collab fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
194
|
+
style Safety fill:#ffebee,stroke:#c62828,stroke-width:2px
|
|
195
|
+
style Privacy fill:#e1f5fe,stroke:#01579b,stroke-width:2px
|
|
196
|
+
style Intelligence fill:#f1f8e9,stroke:#558b2f,stroke-width:2px
|
|
197
|
+
style Ops fill:#fff3e0,stroke:#e65100,stroke-width:2px
|
|
198
|
+
```
|
|
199
|
+
|
|
145
200
|
## Quick Start
|
|
146
201
|
|
|
147
202
|
### Installation
|
|
@@ -342,8 +397,56 @@ Verifies objects, refs, and (if installed) the vector store. When commit metadat
|
|
|
342
397
|
|
|
343
398
|
---
|
|
344
399
|
|
|
400
|
+
## Security Architecture
|
|
401
|
+
|
|
402
|
+
agmem implements security in layers. Choose what you need:
|
|
403
|
+
|
|
404
|
+
```mermaid
|
|
405
|
+
graph TB
|
|
406
|
+
subgraph L1 ["🔒 Tier 1: Cryptographic Integrity"]
|
|
407
|
+
T1A["✅ Merkle tree<br/>over blobs"]
|
|
408
|
+
T1B["✅ Ed25519<br/>signatures"]
|
|
409
|
+
T1C["✅ Tamper<br/>detection"]
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
subgraph L2 ["🔐 Tier 2: Multi-Agent Trust"]
|
|
413
|
+
T2A["✅ Trust store<br/>per public key"]
|
|
414
|
+
T2B["✅ Multi-agent<br/>collaboration"]
|
|
415
|
+
T2C["✅ Conflict<br/>resolution"]
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
subgraph L3 ["🕵️ Tier 3: Privacy & Anonymity"]
|
|
419
|
+
T3A["✅ Differential<br/>Privacy budget"]
|
|
420
|
+
T3B["✅ Zero-Knowledge<br/>Proofs"]
|
|
421
|
+
T3C["✅ Encrypted<br/>at rest"]
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
subgraph L4 ["🌐 Tier 4: Distribution"]
|
|
425
|
+
T4A["✅ S3/GCS<br/>remotes"]
|
|
426
|
+
T4B["✅ IPFS<br/>support"]
|
|
427
|
+
T4C["✅ Pack files<br/>& GC"]
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
subgraph L5 ["📊 Tier 5: Audit & Compliance"]
|
|
431
|
+
T5A["✅ Append-only<br/>audit log"]
|
|
432
|
+
T5B["✅ Hash-chained<br/>verification"]
|
|
433
|
+
T5C["✅ Full history<br/>& blame"]
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
L1 --> L2 --> L3 --> L4 --> L5
|
|
437
|
+
|
|
438
|
+
style L1 fill:#ffebee,stroke:#c62828
|
|
439
|
+
style L2 fill:#ede7f6,stroke:#512da8
|
|
440
|
+
style L3 fill:#e1f5fe,stroke:#01579b
|
|
441
|
+
style L4 fill:#f3e5f5,stroke:#7b1fa2
|
|
442
|
+
style L5 fill:#e8f5e9,stroke:#1b5e20
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
345
447
|
## Security, trust & advanced features
|
|
346
448
|
|
|
449
|
+
|
|
347
450
|
The following 18 capabilities are implemented (or stubbed) per the agmem features implementation plan. They are grouped by tier.
|
|
348
451
|
|
|
349
452
|
### Tier 1 — Security and trust
|
|
@@ -459,41 +562,88 @@ current/procedural/
|
|
|
459
562
|
|
|
460
563
|
### Memory Flow
|
|
461
564
|
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
565
|
+
```mermaid
|
|
566
|
+
graph LR
|
|
567
|
+
A["📂 Working Directory<br/>current/<br/>episodic/<br/>semantic/<br/>procedural/"]
|
|
568
|
+
B["📝 Staging Area<br/>index.json<br/>staged files"]
|
|
569
|
+
C["💾 Object Storage<br/>.mem/objects/<br/>blobs → trees → commits"]
|
|
570
|
+
D["📍 References<br/>.mem/refs/<br/>HEAD, branches, tags"]
|
|
571
|
+
|
|
572
|
+
A -->|agmem add| B
|
|
573
|
+
B -->|agmem commit| C
|
|
574
|
+
C --> D
|
|
575
|
+
|
|
576
|
+
style A fill:#e1f5ff,stroke:#01579b,stroke-width:2px
|
|
577
|
+
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
|
|
578
|
+
style C fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
|
|
579
|
+
style D fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
### Merge Strategies by Memory Type
|
|
583
|
+
|
|
584
|
+
```mermaid
|
|
585
|
+
graph TB
|
|
586
|
+
A["🌿 Branch A"] --> E{Memory Type?}
|
|
587
|
+
B["🌿 Branch B"] --> E
|
|
588
|
+
|
|
589
|
+
E -->|"<b>Episodic</b><br/>session logs"| F["⏰ Chronological<br/>Append"]
|
|
590
|
+
E -->|"<b>Semantic</b><br/>learned facts"| G["🤝 Conflict<br/>Markers"]
|
|
591
|
+
E -->|"<b>Procedural</b><br/>workflows"| H["✨ Prefer New<br/>with Flag"]
|
|
592
|
+
|
|
593
|
+
F --> I["✅ No Conflicts<br/>Deterministic merge"]
|
|
594
|
+
G --> J["⚠️ Manual Review<br/>Conflict markers"]
|
|
595
|
+
H --> J
|
|
596
|
+
|
|
597
|
+
style E fill:#ffebee,stroke:#b71c1c,stroke-width:2px
|
|
598
|
+
style F fill:#c8e6c9,stroke:#1b5e20,stroke-width:2px
|
|
599
|
+
style G fill:#ffe0b2,stroke:#e65100,stroke-width:2px
|
|
600
|
+
style H fill:#b3e5fc,stroke:#01579b,stroke-width:2px
|
|
601
|
+
style I fill:#81c784,stroke:#1b5e20,stroke-width:2px
|
|
602
|
+
style J fill:#ffb74d,stroke:#e65100,stroke-width:2px
|
|
487
603
|
```
|
|
488
604
|
|
|
489
605
|
### How Others Handle Memory vs agmem
|
|
490
606
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
607
|
+
```mermaid
|
|
608
|
+
graph LR
|
|
609
|
+
subgraph Cursor ["Cursor<br/>Ephemeral"]
|
|
610
|
+
C1["❌ No history"]
|
|
611
|
+
C2["❌ No branching"]
|
|
612
|
+
C3["❌ Session-based"]
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
subgraph Claude ["Claude Code<br/>File-based"]
|
|
616
|
+
Cl1["⚠️ Manual Git"]
|
|
617
|
+
Cl2["❌ Not memory-aware"]
|
|
618
|
+
Cl3["⚠️ At launch"]
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
subgraph Mem0 ["Mem0<br/>Cloud/Vector"]
|
|
622
|
+
M1["⚠️ Proprietary"]
|
|
623
|
+
M2["❌ No branching"]
|
|
624
|
+
M3["❌ Black box"]
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
subgraph agmem_box ["agmem<br/>Git for Memory"]
|
|
628
|
+
A1["✅ Full history"]
|
|
629
|
+
A2["✅ Branches & merge"]
|
|
630
|
+
A3["✅ Local-first"]
|
|
631
|
+
A4["✅ Type-aware"]
|
|
632
|
+
A5["✅ Open source"]
|
|
633
|
+
end
|
|
634
|
+
|
|
635
|
+
style Cursor fill:#ffebee,stroke:#c62828,stroke-width:2px
|
|
636
|
+
style Claude fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
637
|
+
style Mem0 fill:#ede7f6,stroke:#512da8,stroke-width:2px
|
|
638
|
+
style agmem_box fill:#c8e6c9,stroke:#1b5e20,stroke-width:3px
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
| Tool | Approach | agmem Advantage |
|
|
642
|
+
|------|----------|--------|
|
|
643
|
+
| **Cursor** | Ephemeral, session-based context | ✅ Full history, persistent, branching |
|
|
644
|
+
| **Claude Code** | File-based (CLAUDE.md); needs Git | ✅ Memory-type-aware merge strategies |
|
|
645
|
+
| **Mem0** | Cloud/API with vector persistence | ✅ Local-first, transparent, version control |
|
|
646
|
+
| **agmem** | 🎯 **Git for Agent Memory** | Version history, branching, merging, local-first, type-aware |
|
|
497
647
|
|
|
498
648
|
## Example: Multi-Agent Collaboration
|
|
499
649
|
|
|
@@ -594,23 +744,44 @@ Repo overrides user. **Never put secrets in config files.** Credentials are supp
|
|
|
594
744
|
|
|
595
745
|
agmem follows Git's proven architecture:
|
|
596
746
|
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
747
|
+
```mermaid
|
|
748
|
+
graph TB
|
|
749
|
+
subgraph Commands ["🎯 Commands - Porcelain (What you type)"]
|
|
750
|
+
A1["init, add, commit, status, log, diff, show, tag, reset, tree"]
|
|
751
|
+
A2["branch, checkout, merge, stash, clean, blame, reflog"]
|
|
752
|
+
A3["clone, push, pull, remote, fsck, verify, audit, resolve"]
|
|
753
|
+
A4["gc, prove, federated, search, graph, serve, daemon, garden"]
|
|
754
|
+
end
|
|
755
|
+
|
|
756
|
+
subgraph Core ["⚙️ Core Operations - Plumbing (What happens)"]
|
|
757
|
+
B1["Staging Area<br/>index.json"]
|
|
758
|
+
B2["Objects<br/>Blob, Tree, Commit, Tag"]
|
|
759
|
+
B3["References<br/>HEAD, Branches, Tags"]
|
|
760
|
+
B4["Memory-type Merge<br/>Episodic, Semantic, Procedural"]
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
subgraph Storage ["💾 Storage - Disk (Where data lives)"]
|
|
764
|
+
C1["SHA-256 Hashing"]
|
|
765
|
+
C2["zlib Compression"]
|
|
766
|
+
C3["Deduplication"]
|
|
767
|
+
C4["Validation<br/>Path, Ref, Hash"]
|
|
768
|
+
end
|
|
769
|
+
|
|
770
|
+
subgraph Features ["🔐 Advanced Features"]
|
|
771
|
+
D1["Crypto Verification<br/>Merkle, Ed25519"]
|
|
772
|
+
D2["Encryption at Rest<br/>AES-256-GCM"]
|
|
773
|
+
D3["Privacy<br/>Differential Privacy"]
|
|
774
|
+
D4["Trust & Audit<br/>Multi-agent, Hash-chain"]
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
Commands --> Core
|
|
778
|
+
Core --> Storage
|
|
779
|
+
Storage --> Features
|
|
780
|
+
|
|
781
|
+
style Commands fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
782
|
+
style Core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
783
|
+
style Storage fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
784
|
+
style Features fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
|
|
614
785
|
```
|
|
615
786
|
|
|
616
787
|
## Development
|
|
@@ -47,6 +47,61 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
47
47
|
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
48
48
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
49
49
|
|
|
50
|
+
### Feature Coverage
|
|
51
|
+
|
|
52
|
+
```mermaid
|
|
53
|
+
graph TB
|
|
54
|
+
subgraph Core ["🔧 Core Features"]
|
|
55
|
+
Core1["✅ Git-like commands<br/>init, add, commit, log, branch, merge"]
|
|
56
|
+
Core2["✅ Content-addressable storage<br/>SHA-256, zlib, dedup"]
|
|
57
|
+
Core3["✅ Memory-type merge<br/>Episodic, Semantic, Procedural"]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
subgraph Collab ["👥 Collaboration"]
|
|
61
|
+
Collab1["✅ Remote push/pull<br/>file:// URLs, conflict detection"]
|
|
62
|
+
Collab2["✅ Multi-agent trust<br/>Trust store, key verification"]
|
|
63
|
+
Collab3["✅ Federated sync<br/>Coordinator API"]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
subgraph Safety ["🔒 Safety & Integrity"]
|
|
67
|
+
Safety1["✅ Cryptographic<br/>Merkle, Ed25519"]
|
|
68
|
+
Safety2["✅ Tamper detection<br/>Audit trail, hash-chain"]
|
|
69
|
+
Safety3["✅ Encryption at rest<br/>AES-256-GCM"]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
subgraph Privacy ["🕵️ Privacy"]
|
|
73
|
+
Privacy1["✅ Differential privacy<br/>Epsilon/delta budget"]
|
|
74
|
+
Privacy2["✅ Zero-knowledge proofs<br/>Keyword, Freshness"]
|
|
75
|
+
Privacy3["✅ PII scanning<br/>Pre-commit hooks"]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
subgraph Intelligence ["🧠 Intelligence"]
|
|
79
|
+
Intel1["✅ Semantic search<br/>Vector + Text fallback"]
|
|
80
|
+
Intel2["✅ Knowledge graph<br/>Wikilinks, Co-occurrence"]
|
|
81
|
+
Intel3["✅ LLM integration<br/>OpenAI, Anthropic"]
|
|
82
|
+
Intel4["✅ Temporal queries<br/>Point-in-time, Range"]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
subgraph Ops ["⚙️ Operations"]
|
|
86
|
+
Ops1["✅ Pack/GC<br/>Object packing, cleanup"]
|
|
87
|
+
Ops2["✅ Daemon mode<br/>Watch + auto-commit"]
|
|
88
|
+
Ops3["✅ IPFS/S3/GCS<br/>Distributed storage"]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
Core --> Collab
|
|
92
|
+
Collab --> Safety
|
|
93
|
+
Safety --> Privacy
|
|
94
|
+
Privacy --> Intelligence
|
|
95
|
+
Intelligence --> Ops
|
|
96
|
+
|
|
97
|
+
style Core fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
98
|
+
style Collab fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
99
|
+
style Safety fill:#ffebee,stroke:#c62828,stroke-width:2px
|
|
100
|
+
style Privacy fill:#e1f5fe,stroke:#01579b,stroke-width:2px
|
|
101
|
+
style Intelligence fill:#f1f8e9,stroke:#558b2f,stroke-width:2px
|
|
102
|
+
style Ops fill:#fff3e0,stroke:#e65100,stroke-width:2px
|
|
103
|
+
```
|
|
104
|
+
|
|
50
105
|
## Quick Start
|
|
51
106
|
|
|
52
107
|
### Installation
|
|
@@ -247,8 +302,56 @@ Verifies objects, refs, and (if installed) the vector store. When commit metadat
|
|
|
247
302
|
|
|
248
303
|
---
|
|
249
304
|
|
|
305
|
+
## Security Architecture
|
|
306
|
+
|
|
307
|
+
agmem implements security in layers. Choose what you need:
|
|
308
|
+
|
|
309
|
+
```mermaid
|
|
310
|
+
graph TB
|
|
311
|
+
subgraph L1 ["🔒 Tier 1: Cryptographic Integrity"]
|
|
312
|
+
T1A["✅ Merkle tree<br/>over blobs"]
|
|
313
|
+
T1B["✅ Ed25519<br/>signatures"]
|
|
314
|
+
T1C["✅ Tamper<br/>detection"]
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
subgraph L2 ["🔐 Tier 2: Multi-Agent Trust"]
|
|
318
|
+
T2A["✅ Trust store<br/>per public key"]
|
|
319
|
+
T2B["✅ Multi-agent<br/>collaboration"]
|
|
320
|
+
T2C["✅ Conflict<br/>resolution"]
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
subgraph L3 ["🕵️ Tier 3: Privacy & Anonymity"]
|
|
324
|
+
T3A["✅ Differential<br/>Privacy budget"]
|
|
325
|
+
T3B["✅ Zero-Knowledge<br/>Proofs"]
|
|
326
|
+
T3C["✅ Encrypted<br/>at rest"]
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
subgraph L4 ["🌐 Tier 4: Distribution"]
|
|
330
|
+
T4A["✅ S3/GCS<br/>remotes"]
|
|
331
|
+
T4B["✅ IPFS<br/>support"]
|
|
332
|
+
T4C["✅ Pack files<br/>& GC"]
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
subgraph L5 ["📊 Tier 5: Audit & Compliance"]
|
|
336
|
+
T5A["✅ Append-only<br/>audit log"]
|
|
337
|
+
T5B["✅ Hash-chained<br/>verification"]
|
|
338
|
+
T5C["✅ Full history<br/>& blame"]
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
L1 --> L2 --> L3 --> L4 --> L5
|
|
342
|
+
|
|
343
|
+
style L1 fill:#ffebee,stroke:#c62828
|
|
344
|
+
style L2 fill:#ede7f6,stroke:#512da8
|
|
345
|
+
style L3 fill:#e1f5fe,stroke:#01579b
|
|
346
|
+
style L4 fill:#f3e5f5,stroke:#7b1fa2
|
|
347
|
+
style L5 fill:#e8f5e9,stroke:#1b5e20
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
250
352
|
## Security, trust & advanced features
|
|
251
353
|
|
|
354
|
+
|
|
252
355
|
The following 18 capabilities are implemented (or stubbed) per the agmem features implementation plan. They are grouped by tier.
|
|
253
356
|
|
|
254
357
|
### Tier 1 — Security and trust
|
|
@@ -364,41 +467,88 @@ current/procedural/
|
|
|
364
467
|
|
|
365
468
|
### Memory Flow
|
|
366
469
|
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
470
|
+
```mermaid
|
|
471
|
+
graph LR
|
|
472
|
+
A["📂 Working Directory<br/>current/<br/>episodic/<br/>semantic/<br/>procedural/"]
|
|
473
|
+
B["📝 Staging Area<br/>index.json<br/>staged files"]
|
|
474
|
+
C["💾 Object Storage<br/>.mem/objects/<br/>blobs → trees → commits"]
|
|
475
|
+
D["📍 References<br/>.mem/refs/<br/>HEAD, branches, tags"]
|
|
476
|
+
|
|
477
|
+
A -->|agmem add| B
|
|
478
|
+
B -->|agmem commit| C
|
|
479
|
+
C --> D
|
|
480
|
+
|
|
481
|
+
style A fill:#e1f5ff,stroke:#01579b,stroke-width:2px
|
|
482
|
+
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
|
|
483
|
+
style C fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
|
|
484
|
+
style D fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### Merge Strategies by Memory Type
|
|
488
|
+
|
|
489
|
+
```mermaid
|
|
490
|
+
graph TB
|
|
491
|
+
A["🌿 Branch A"] --> E{Memory Type?}
|
|
492
|
+
B["🌿 Branch B"] --> E
|
|
493
|
+
|
|
494
|
+
E -->|"<b>Episodic</b><br/>session logs"| F["⏰ Chronological<br/>Append"]
|
|
495
|
+
E -->|"<b>Semantic</b><br/>learned facts"| G["🤝 Conflict<br/>Markers"]
|
|
496
|
+
E -->|"<b>Procedural</b><br/>workflows"| H["✨ Prefer New<br/>with Flag"]
|
|
497
|
+
|
|
498
|
+
F --> I["✅ No Conflicts<br/>Deterministic merge"]
|
|
499
|
+
G --> J["⚠️ Manual Review<br/>Conflict markers"]
|
|
500
|
+
H --> J
|
|
501
|
+
|
|
502
|
+
style E fill:#ffebee,stroke:#b71c1c,stroke-width:2px
|
|
503
|
+
style F fill:#c8e6c9,stroke:#1b5e20,stroke-width:2px
|
|
504
|
+
style G fill:#ffe0b2,stroke:#e65100,stroke-width:2px
|
|
505
|
+
style H fill:#b3e5fc,stroke:#01579b,stroke-width:2px
|
|
506
|
+
style I fill:#81c784,stroke:#1b5e20,stroke-width:2px
|
|
507
|
+
style J fill:#ffb74d,stroke:#e65100,stroke-width:2px
|
|
392
508
|
```
|
|
393
509
|
|
|
394
510
|
### How Others Handle Memory vs agmem
|
|
395
511
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
512
|
+
```mermaid
|
|
513
|
+
graph LR
|
|
514
|
+
subgraph Cursor ["Cursor<br/>Ephemeral"]
|
|
515
|
+
C1["❌ No history"]
|
|
516
|
+
C2["❌ No branching"]
|
|
517
|
+
C3["❌ Session-based"]
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
subgraph Claude ["Claude Code<br/>File-based"]
|
|
521
|
+
Cl1["⚠️ Manual Git"]
|
|
522
|
+
Cl2["❌ Not memory-aware"]
|
|
523
|
+
Cl3["⚠️ At launch"]
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
subgraph Mem0 ["Mem0<br/>Cloud/Vector"]
|
|
527
|
+
M1["⚠️ Proprietary"]
|
|
528
|
+
M2["❌ No branching"]
|
|
529
|
+
M3["❌ Black box"]
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
subgraph agmem_box ["agmem<br/>Git for Memory"]
|
|
533
|
+
A1["✅ Full history"]
|
|
534
|
+
A2["✅ Branches & merge"]
|
|
535
|
+
A3["✅ Local-first"]
|
|
536
|
+
A4["✅ Type-aware"]
|
|
537
|
+
A5["✅ Open source"]
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
style Cursor fill:#ffebee,stroke:#c62828,stroke-width:2px
|
|
541
|
+
style Claude fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
542
|
+
style Mem0 fill:#ede7f6,stroke:#512da8,stroke-width:2px
|
|
543
|
+
style agmem_box fill:#c8e6c9,stroke:#1b5e20,stroke-width:3px
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
| Tool | Approach | agmem Advantage |
|
|
547
|
+
|------|----------|--------|
|
|
548
|
+
| **Cursor** | Ephemeral, session-based context | ✅ Full history, persistent, branching |
|
|
549
|
+
| **Claude Code** | File-based (CLAUDE.md); needs Git | ✅ Memory-type-aware merge strategies |
|
|
550
|
+
| **Mem0** | Cloud/API with vector persistence | ✅ Local-first, transparent, version control |
|
|
551
|
+
| **agmem** | 🎯 **Git for Agent Memory** | Version history, branching, merging, local-first, type-aware |
|
|
402
552
|
|
|
403
553
|
## Example: Multi-Agent Collaboration
|
|
404
554
|
|
|
@@ -499,23 +649,44 @@ Repo overrides user. **Never put secrets in config files.** Credentials are supp
|
|
|
499
649
|
|
|
500
650
|
agmem follows Git's proven architecture:
|
|
501
651
|
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
652
|
+
```mermaid
|
|
653
|
+
graph TB
|
|
654
|
+
subgraph Commands ["🎯 Commands - Porcelain (What you type)"]
|
|
655
|
+
A1["init, add, commit, status, log, diff, show, tag, reset, tree"]
|
|
656
|
+
A2["branch, checkout, merge, stash, clean, blame, reflog"]
|
|
657
|
+
A3["clone, push, pull, remote, fsck, verify, audit, resolve"]
|
|
658
|
+
A4["gc, prove, federated, search, graph, serve, daemon, garden"]
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
subgraph Core ["⚙️ Core Operations - Plumbing (What happens)"]
|
|
662
|
+
B1["Staging Area<br/>index.json"]
|
|
663
|
+
B2["Objects<br/>Blob, Tree, Commit, Tag"]
|
|
664
|
+
B3["References<br/>HEAD, Branches, Tags"]
|
|
665
|
+
B4["Memory-type Merge<br/>Episodic, Semantic, Procedural"]
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
subgraph Storage ["💾 Storage - Disk (Where data lives)"]
|
|
669
|
+
C1["SHA-256 Hashing"]
|
|
670
|
+
C2["zlib Compression"]
|
|
671
|
+
C3["Deduplication"]
|
|
672
|
+
C4["Validation<br/>Path, Ref, Hash"]
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
subgraph Features ["🔐 Advanced Features"]
|
|
676
|
+
D1["Crypto Verification<br/>Merkle, Ed25519"]
|
|
677
|
+
D2["Encryption at Rest<br/>AES-256-GCM"]
|
|
678
|
+
D3["Privacy<br/>Differential Privacy"]
|
|
679
|
+
D4["Trust & Audit<br/>Multi-agent, Hash-chain"]
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
Commands --> Core
|
|
683
|
+
Core --> Storage
|
|
684
|
+
Storage --> Features
|
|
685
|
+
|
|
686
|
+
style Commands fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
687
|
+
style Core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
688
|
+
style Storage fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
689
|
+
style Features fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
|
|
519
690
|
```
|
|
520
691
|
|
|
521
692
|
## Development
|