agmem 0.1.5__tar.gz → 0.2.0__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.5/agmem.egg-info → agmem-0.2.0}/PKG-INFO +231 -54
- {agmem-0.1.5 → agmem-0.2.0}/README.md +224 -52
- {agmem-0.1.5 → agmem-0.2.0/agmem.egg-info}/PKG-INFO +231 -54
- {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/SOURCES.txt +18 -0
- {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/requires.txt +6 -0
- agmem-0.2.0/docs/FINAL_COMPLETION_REPORT.md +613 -0
- agmem-0.2.0/docs/FINAL_STATUS_REPORT.md +295 -0
- agmem-0.2.0/docs/HEALTH_MONITORING.md +265 -0
- agmem-0.2.0/docs/IMPLEMENTATION_COMPLETE_SUMMARY.md +508 -0
- agmem-0.2.0/docs/PACKAGE_UPDATES_VERIFICATION.md +209 -0
- agmem-0.2.0/docs/QUICK_REFERENCE.md +339 -0
- agmem-0.2.0/docs/STEP10_SOLID_REFACTORING_COMPLETION.md +495 -0
- agmem-0.2.0/docs/STEP8_HEALTH_MONITORING_COMPLETION.md +293 -0
- agmem-0.2.0/docs/STEP9_DELTA_ENCODING_COMPLETION.md +233 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/__init__.py +1 -1
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/daemon.py +37 -1
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/distill.py +6 -0
- agmem-0.2.0/memvcs/coordinator/__init__.py +5 -0
- agmem-0.2.0/memvcs/coordinator/server.py +223 -0
- agmem-0.2.0/memvcs/core/delta.py +258 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/distiller.py +74 -50
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/pack.py +191 -33
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/remote.py +82 -2
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/zk_proofs.py +62 -5
- agmem-0.2.0/memvcs/health/__init__.py +25 -0
- agmem-0.2.0/memvcs/health/monitor.py +452 -0
- {agmem-0.1.5 → agmem-0.2.0}/pyproject.toml +12 -1
- {agmem-0.1.5 → agmem-0.2.0}/setup.py +1 -1
- agmem-0.2.0/tests/test_compression_pipeline.py +158 -0
- agmem-0.2.0/tests/test_delta_encoding.py +297 -0
- agmem-0.2.0/tests/test_health_monitor.py +393 -0
- agmem-0.2.0/tests/test_ipfs_integration.py +134 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_pack_gc.py +61 -0
- {agmem-0.1.5 → agmem-0.2.0}/LICENSE +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/MANIFEST.in +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/dependency_links.txt +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/entry_points.txt +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/top_level.txt +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/AGMEM_PUBLISHING_SETUP.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/CONFIG.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/FEDERATED.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/GTM.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/KNOWLEDGE_GRAPH.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/SEQUENTIAL_VALIDATION.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/TEST_REPORT.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/docs/aux/INSTALL.md +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/examples/basic_workflow.sh +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/cli.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/add.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/audit.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/base.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/blame.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/branch.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/checkout.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/clean.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/clone.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/commit.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/decay.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/diff.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/federated.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/fsck.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/garden.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/gc.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/graph.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/init.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/log.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/mcp.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/merge.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/pack.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/prove.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/pull.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/push.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/recall.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/reflog.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/remote.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/repair.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/reset.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/resolve.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/resurrect.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/search.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/serve.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/show.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/stash.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/status.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/tag.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/test.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/timeline.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/tree.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/verify.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/when.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/access_index.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/audit.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/compression_pipeline.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/config_loader.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/consistency.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/constants.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/crypto_verify.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/decay.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/diff.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/encryption.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/federated.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/gardener.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/hooks.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/ipfs_remote.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/knowledge_graph.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/anthropic_provider.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/base.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/factory.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/openai_provider.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/merge.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/objects.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/pii_scanner.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/privacy_budget.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/refs.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/repository.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/schema.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/staging.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/base.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/gcs.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/local.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/s3.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/temporal_index.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/test_runner.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/trust.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/vector_store.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/mcp_server.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/web_ui/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/web_ui/server.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/base.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/pack.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/recaller.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/strategies.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/utils/__init__.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/memvcs/utils/helpers.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/setup.cfg +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_access_index.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_advanced_commands.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_audit.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_commit_importance.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_consistency.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_crypto_verify.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_decay.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_edge_cases.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_encryption.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_federated.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_ipfs_remote.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_llm_provider.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_objects.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_pii.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_plan_features.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_privacy_budget.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_repository.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_resolve_helpers.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_retrieval.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_temporal_index.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_trust.py +0 -0
- {agmem-0.1.5 → agmem-0.2.0}/tests/test_zk_proofs.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agmem
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
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
|
|
@@ -10,7 +10,7 @@ Project-URL: Homepage, https://github.com/vivek-tiwari-vt/agmem
|
|
|
10
10
|
Project-URL: Documentation, https://github.com/vivek-tiwari-vt/agmem#readme
|
|
11
11
|
Project-URL: Repository, https://github.com/vivek-tiwari-vt/agmem
|
|
12
12
|
Project-URL: Bug Tracker, https://github.com/vivek-tiwari-vt/agmem/issues
|
|
13
|
-
Keywords: ai,agent,memory,version-control,git,vcs,llm,merkle,audit,encryption,differential-privacy,trust,multi-agent
|
|
13
|
+
Keywords: ai,agent,memory,version-control,git,vcs,llm,merkle,audit,encryption,differential-privacy,trust,multi-agent,health-monitoring,delta-encoding,ipfs,federated
|
|
14
14
|
Classifier: Development Status :: 3 - Alpha
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -71,6 +71,10 @@ Provides-Extra: ipfs
|
|
|
71
71
|
Requires-Dist: requests>=2.28.0; extra == "ipfs"
|
|
72
72
|
Provides-Extra: ipfs-daemon
|
|
73
73
|
Requires-Dist: ipfshttpclient>=0.8.0; extra == "ipfs-daemon"
|
|
74
|
+
Provides-Extra: coordinator
|
|
75
|
+
Requires-Dist: fastapi>=0.100.0; extra == "coordinator"
|
|
76
|
+
Requires-Dist: uvicorn[standard]>=0.22.0; extra == "coordinator"
|
|
77
|
+
Requires-Dist: pydantic>=2.0.0; extra == "coordinator"
|
|
74
78
|
Provides-Extra: all
|
|
75
79
|
Requires-Dist: mcp>=1.0.0; extra == "all"
|
|
76
80
|
Requires-Dist: cryptography>=41.0.0; extra == "all"
|
|
@@ -88,6 +92,7 @@ Requires-Dist: networkx>=3.0; extra == "all"
|
|
|
88
92
|
Requires-Dist: tiktoken>=0.5.0; extra == "all"
|
|
89
93
|
Requires-Dist: presidio-analyzer>=2.2.0; extra == "all"
|
|
90
94
|
Requires-Dist: requests>=2.28.0; extra == "all"
|
|
95
|
+
Requires-Dist: pydantic>=2.0.0; extra == "all"
|
|
91
96
|
Dynamic: author
|
|
92
97
|
Dynamic: home-page
|
|
93
98
|
Dynamic: license-file
|
|
@@ -137,11 +142,67 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
137
142
|
- ✅ **Multi-provider LLM** — OpenAI and Anthropic via `memvcs.core.llm`; config/repo or env; used by gardener, distiller, consistency, merge
|
|
138
143
|
- ✅ **Temporal querying** — Point-in-time and range queries in temporal index; frontmatter timestamps
|
|
139
144
|
- ✅ **Federated collaboration** — `agmem federated push|pull`; real summaries (topic counts, fact hashes); optional DP on outbound; coordinator API in docs/FEDERATED.md
|
|
140
|
-
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp)
|
|
141
|
-
- ✅ **Daemon health** —
|
|
145
|
+
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp). **Note:** Current implementation is proof-of-knowledge with known limitations; see docs for migration to true zk-SNARKs.
|
|
146
|
+
- ✅ **Daemon health** — 4-point health monitoring (storage, redundancy, staleness, graph consistency) with periodic checks; visible warnings and JSON reports
|
|
147
|
+
- ✅ **Delta encoding** — 5-10x compression for similar objects using Levenshtein distance and SequenceMatcher; optional feature in pack files
|
|
142
148
|
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
143
149
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
144
150
|
|
|
151
|
+
### Feature Coverage
|
|
152
|
+
|
|
153
|
+
```mermaid
|
|
154
|
+
graph TB
|
|
155
|
+
subgraph Core ["🔧 Core Features"]
|
|
156
|
+
Core1["✅ Git-like commands<br/>init, add, commit, log, branch, merge"]
|
|
157
|
+
Core2["✅ Content-addressable storage<br/>SHA-256, zlib, dedup"]
|
|
158
|
+
Core3["✅ Memory-type merge<br/>Episodic, Semantic, Procedural"]
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
subgraph Collab ["👥 Collaboration"]
|
|
162
|
+
Collab1["✅ Remote push/pull<br/>file:// URLs, conflict detection"]
|
|
163
|
+
Collab2["✅ Multi-agent trust<br/>Trust store, key verification"]
|
|
164
|
+
Collab3["✅ Federated sync<br/>Coordinator API"]
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
subgraph Safety ["🔒 Safety & Integrity"]
|
|
168
|
+
Safety1["✅ Cryptographic<br/>Merkle, Ed25519"]
|
|
169
|
+
Safety2["✅ Tamper detection<br/>Audit trail, hash-chain"]
|
|
170
|
+
Safety3["✅ Encryption at rest<br/>AES-256-GCM"]
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
subgraph Privacy ["🕵️ Privacy"]
|
|
174
|
+
Privacy1["✅ Differential privacy<br/>Epsilon/delta budget"]
|
|
175
|
+
Privacy2["✅ Zero-knowledge proofs<br/>Keyword, Freshness"]
|
|
176
|
+
Privacy3["✅ PII scanning<br/>Pre-commit hooks"]
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
subgraph Intelligence ["🧠 Intelligence"]
|
|
180
|
+
Intel1["✅ Semantic search<br/>Vector + Text fallback"]
|
|
181
|
+
Intel2["✅ Knowledge graph<br/>Wikilinks, Co-occurrence"]
|
|
182
|
+
Intel3["✅ LLM integration<br/>OpenAI, Anthropic"]
|
|
183
|
+
Intel4["✅ Temporal queries<br/>Point-in-time, Range"]
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
subgraph Ops ["⚙️ Operations"]
|
|
187
|
+
Ops1["✅ Pack/GC<br/>Object packing, cleanup"]
|
|
188
|
+
Ops2["✅ Daemon mode<br/>Watch + auto-commit"]
|
|
189
|
+
Ops3["✅ IPFS/S3/GCS<br/>Distributed storage"]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
Core --> Collab
|
|
193
|
+
Collab --> Safety
|
|
194
|
+
Safety --> Privacy
|
|
195
|
+
Privacy --> Intelligence
|
|
196
|
+
Intelligence --> Ops
|
|
197
|
+
|
|
198
|
+
style Core fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
199
|
+
style Collab fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
200
|
+
style Safety fill:#ffebee,stroke:#c62828,stroke-width:2px
|
|
201
|
+
style Privacy fill:#e1f5fe,stroke:#01579b,stroke-width:2px
|
|
202
|
+
style Intelligence fill:#f1f8e9,stroke:#558b2f,stroke-width:2px
|
|
203
|
+
style Ops fill:#fff3e0,stroke:#e65100,stroke-width:2px
|
|
204
|
+
```
|
|
205
|
+
|
|
145
206
|
## Quick Start
|
|
146
207
|
|
|
147
208
|
### Installation
|
|
@@ -342,8 +403,56 @@ Verifies objects, refs, and (if installed) the vector store. When commit metadat
|
|
|
342
403
|
|
|
343
404
|
---
|
|
344
405
|
|
|
406
|
+
## Security Architecture
|
|
407
|
+
|
|
408
|
+
agmem implements security in layers. Choose what you need:
|
|
409
|
+
|
|
410
|
+
```mermaid
|
|
411
|
+
graph TB
|
|
412
|
+
subgraph L1 ["🔒 Tier 1: Cryptographic Integrity"]
|
|
413
|
+
T1A["✅ Merkle tree<br/>over blobs"]
|
|
414
|
+
T1B["✅ Ed25519<br/>signatures"]
|
|
415
|
+
T1C["✅ Tamper<br/>detection"]
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
subgraph L2 ["🔐 Tier 2: Multi-Agent Trust"]
|
|
419
|
+
T2A["✅ Trust store<br/>per public key"]
|
|
420
|
+
T2B["✅ Multi-agent<br/>collaboration"]
|
|
421
|
+
T2C["✅ Conflict<br/>resolution"]
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
subgraph L3 ["🕵️ Tier 3: Privacy & Anonymity"]
|
|
425
|
+
T3A["✅ Differential<br/>Privacy budget"]
|
|
426
|
+
T3B["✅ Zero-Knowledge<br/>Proofs"]
|
|
427
|
+
T3C["✅ Encrypted<br/>at rest"]
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
subgraph L4 ["🌐 Tier 4: Distribution"]
|
|
431
|
+
T4A["✅ S3/GCS<br/>remotes"]
|
|
432
|
+
T4B["✅ IPFS<br/>support"]
|
|
433
|
+
T4C["✅ Pack files<br/>& GC"]
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
subgraph L5 ["📊 Tier 5: Audit & Compliance"]
|
|
437
|
+
T5A["✅ Append-only<br/>audit log"]
|
|
438
|
+
T5B["✅ Hash-chained<br/>verification"]
|
|
439
|
+
T5C["✅ Full history<br/>& blame"]
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
L1 --> L2 --> L3 --> L4 --> L5
|
|
443
|
+
|
|
444
|
+
style L1 fill:#ffebee,stroke:#c62828
|
|
445
|
+
style L2 fill:#ede7f6,stroke:#512da8
|
|
446
|
+
style L3 fill:#e1f5fe,stroke:#01579b
|
|
447
|
+
style L4 fill:#f3e5f5,stroke:#7b1fa2
|
|
448
|
+
style L5 fill:#e8f5e9,stroke:#1b5e20
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
345
453
|
## Security, trust & advanced features
|
|
346
454
|
|
|
455
|
+
|
|
347
456
|
The following 18 capabilities are implemented (or stubbed) per the agmem features implementation plan. They are grouped by tier.
|
|
348
457
|
|
|
349
458
|
### Tier 1 — Security and trust
|
|
@@ -366,8 +475,8 @@ The following 18 capabilities are implemented (or stubbed) per the agmem feature
|
|
|
366
475
|
|
|
367
476
|
| # | Feature | Description |
|
|
368
477
|
|---|---------|-------------|
|
|
369
|
-
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. |
|
|
370
|
-
| **8** | **
|
|
478
|
+
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. **Note:** Now correctly applied to actual facts during extraction, not metadata counts. |
|
|
479
|
+
| **8** | **Cryptographic proofs (proof-of-knowledge)** | Hash/signature-based proofs for keyword containment (Merkle set membership) and memory freshness (signed timestamp). **Command:** `agmem prove --memory <path> --property keyword\|freshness --value <v> [-o out]`. **IMPORTANT:** These are proof-of-knowledge, not true zero-knowledge proofs. Keyword proof leaks word count and allows verifier to test other words. Freshness proof relies on forgeable filesystem mtime. See `memvcs/core/zk_proofs.py` for details and migration path to zk-SNARKs. |
|
|
371
480
|
|
|
372
481
|
### Tier 4 — Storage and distribution
|
|
373
482
|
|
|
@@ -459,41 +568,88 @@ current/procedural/
|
|
|
459
568
|
|
|
460
569
|
### Memory Flow
|
|
461
570
|
|
|
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
|
-
|
|
571
|
+
```mermaid
|
|
572
|
+
graph LR
|
|
573
|
+
A["📂 Working Directory<br/>current/<br/>episodic/<br/>semantic/<br/>procedural/"]
|
|
574
|
+
B["📝 Staging Area<br/>index.json<br/>staged files"]
|
|
575
|
+
C["💾 Object Storage<br/>.mem/objects/<br/>blobs → trees → commits"]
|
|
576
|
+
D["📍 References<br/>.mem/refs/<br/>HEAD, branches, tags"]
|
|
577
|
+
|
|
578
|
+
A -->|agmem add| B
|
|
579
|
+
B -->|agmem commit| C
|
|
580
|
+
C --> D
|
|
581
|
+
|
|
582
|
+
style A fill:#e1f5ff,stroke:#01579b,stroke-width:2px
|
|
583
|
+
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
|
|
584
|
+
style C fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
|
|
585
|
+
style D fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
### Merge Strategies by Memory Type
|
|
589
|
+
|
|
590
|
+
```mermaid
|
|
591
|
+
graph TB
|
|
592
|
+
A["🌿 Branch A"] --> E{Memory Type?}
|
|
593
|
+
B["🌿 Branch B"] --> E
|
|
594
|
+
|
|
595
|
+
E -->|"<b>Episodic</b><br/>session logs"| F["⏰ Chronological<br/>Append"]
|
|
596
|
+
E -->|"<b>Semantic</b><br/>learned facts"| G["🤝 Conflict<br/>Markers"]
|
|
597
|
+
E -->|"<b>Procedural</b><br/>workflows"| H["✨ Prefer New<br/>with Flag"]
|
|
598
|
+
|
|
599
|
+
F --> I["✅ No Conflicts<br/>Deterministic merge"]
|
|
600
|
+
G --> J["⚠️ Manual Review<br/>Conflict markers"]
|
|
601
|
+
H --> J
|
|
602
|
+
|
|
603
|
+
style E fill:#ffebee,stroke:#b71c1c,stroke-width:2px
|
|
604
|
+
style F fill:#c8e6c9,stroke:#1b5e20,stroke-width:2px
|
|
605
|
+
style G fill:#ffe0b2,stroke:#e65100,stroke-width:2px
|
|
606
|
+
style H fill:#b3e5fc,stroke:#01579b,stroke-width:2px
|
|
607
|
+
style I fill:#81c784,stroke:#1b5e20,stroke-width:2px
|
|
608
|
+
style J fill:#ffb74d,stroke:#e65100,stroke-width:2px
|
|
487
609
|
```
|
|
488
610
|
|
|
489
611
|
### How Others Handle Memory vs agmem
|
|
490
612
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
613
|
+
```mermaid
|
|
614
|
+
graph LR
|
|
615
|
+
subgraph Cursor ["Cursor<br/>Ephemeral"]
|
|
616
|
+
C1["❌ No history"]
|
|
617
|
+
C2["❌ No branching"]
|
|
618
|
+
C3["❌ Session-based"]
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
subgraph Claude ["Claude Code<br/>File-based"]
|
|
622
|
+
Cl1["⚠️ Manual Git"]
|
|
623
|
+
Cl2["❌ Not memory-aware"]
|
|
624
|
+
Cl3["⚠️ At launch"]
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
subgraph Mem0 ["Mem0<br/>Cloud/Vector"]
|
|
628
|
+
M1["⚠️ Proprietary"]
|
|
629
|
+
M2["❌ No branching"]
|
|
630
|
+
M3["❌ Black box"]
|
|
631
|
+
end
|
|
632
|
+
|
|
633
|
+
subgraph agmem_box ["agmem<br/>Git for Memory"]
|
|
634
|
+
A1["✅ Full history"]
|
|
635
|
+
A2["✅ Branches & merge"]
|
|
636
|
+
A3["✅ Local-first"]
|
|
637
|
+
A4["✅ Type-aware"]
|
|
638
|
+
A5["✅ Open source"]
|
|
639
|
+
end
|
|
640
|
+
|
|
641
|
+
style Cursor fill:#ffebee,stroke:#c62828,stroke-width:2px
|
|
642
|
+
style Claude fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
643
|
+
style Mem0 fill:#ede7f6,stroke:#512da8,stroke-width:2px
|
|
644
|
+
style agmem_box fill:#c8e6c9,stroke:#1b5e20,stroke-width:3px
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
| Tool | Approach | agmem Advantage |
|
|
648
|
+
|------|----------|--------|
|
|
649
|
+
| **Cursor** | Ephemeral, session-based context | ✅ Full history, persistent, branching |
|
|
650
|
+
| **Claude Code** | File-based (CLAUDE.md); needs Git | ✅ Memory-type-aware merge strategies |
|
|
651
|
+
| **Mem0** | Cloud/API with vector persistence | ✅ Local-first, transparent, version control |
|
|
652
|
+
| **agmem** | 🎯 **Git for Agent Memory** | Version history, branching, merging, local-first, type-aware |
|
|
497
653
|
|
|
498
654
|
## Example: Multi-Agent Collaboration
|
|
499
655
|
|
|
@@ -594,23 +750,44 @@ Repo overrides user. **Never put secrets in config files.** Credentials are supp
|
|
|
594
750
|
|
|
595
751
|
agmem follows Git's proven architecture:
|
|
596
752
|
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
753
|
+
```mermaid
|
|
754
|
+
graph TB
|
|
755
|
+
subgraph Commands ["🎯 Commands - Porcelain (What you type)"]
|
|
756
|
+
A1["init, add, commit, status, log, diff, show, tag, reset, tree"]
|
|
757
|
+
A2["branch, checkout, merge, stash, clean, blame, reflog"]
|
|
758
|
+
A3["clone, push, pull, remote, fsck, verify, audit, resolve"]
|
|
759
|
+
A4["gc, prove, federated, search, graph, serve, daemon, garden"]
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
subgraph Core ["⚙️ Core Operations - Plumbing (What happens)"]
|
|
763
|
+
B1["Staging Area<br/>index.json"]
|
|
764
|
+
B2["Objects<br/>Blob, Tree, Commit, Tag"]
|
|
765
|
+
B3["References<br/>HEAD, Branches, Tags"]
|
|
766
|
+
B4["Memory-type Merge<br/>Episodic, Semantic, Procedural"]
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
subgraph Storage ["💾 Storage - Disk (Where data lives)"]
|
|
770
|
+
C1["SHA-256 Hashing"]
|
|
771
|
+
C2["zlib Compression"]
|
|
772
|
+
C3["Deduplication"]
|
|
773
|
+
C4["Validation<br/>Path, Ref, Hash"]
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
subgraph Features ["🔐 Advanced Features"]
|
|
777
|
+
D1["Crypto Verification<br/>Merkle, Ed25519"]
|
|
778
|
+
D2["Encryption at Rest<br/>AES-256-GCM"]
|
|
779
|
+
D3["Privacy<br/>Differential Privacy"]
|
|
780
|
+
D4["Trust & Audit<br/>Multi-agent, Hash-chain"]
|
|
781
|
+
end
|
|
782
|
+
|
|
783
|
+
Commands --> Core
|
|
784
|
+
Core --> Storage
|
|
785
|
+
Storage --> Features
|
|
786
|
+
|
|
787
|
+
style Commands fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
788
|
+
style Core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
789
|
+
style Storage fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
790
|
+
style Features fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
|
|
614
791
|
```
|
|
615
792
|
|
|
616
793
|
## Development
|