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.
Files changed (163) hide show
  1. {agmem-0.1.5/agmem.egg-info → agmem-0.2.0}/PKG-INFO +231 -54
  2. {agmem-0.1.5 → agmem-0.2.0}/README.md +224 -52
  3. {agmem-0.1.5 → agmem-0.2.0/agmem.egg-info}/PKG-INFO +231 -54
  4. {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/SOURCES.txt +18 -0
  5. {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/requires.txt +6 -0
  6. agmem-0.2.0/docs/FINAL_COMPLETION_REPORT.md +613 -0
  7. agmem-0.2.0/docs/FINAL_STATUS_REPORT.md +295 -0
  8. agmem-0.2.0/docs/HEALTH_MONITORING.md +265 -0
  9. agmem-0.2.0/docs/IMPLEMENTATION_COMPLETE_SUMMARY.md +508 -0
  10. agmem-0.2.0/docs/PACKAGE_UPDATES_VERIFICATION.md +209 -0
  11. agmem-0.2.0/docs/QUICK_REFERENCE.md +339 -0
  12. agmem-0.2.0/docs/STEP10_SOLID_REFACTORING_COMPLETION.md +495 -0
  13. agmem-0.2.0/docs/STEP8_HEALTH_MONITORING_COMPLETION.md +293 -0
  14. agmem-0.2.0/docs/STEP9_DELTA_ENCODING_COMPLETION.md +233 -0
  15. {agmem-0.1.5 → agmem-0.2.0}/memvcs/__init__.py +1 -1
  16. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/daemon.py +37 -1
  17. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/distill.py +6 -0
  18. agmem-0.2.0/memvcs/coordinator/__init__.py +5 -0
  19. agmem-0.2.0/memvcs/coordinator/server.py +223 -0
  20. agmem-0.2.0/memvcs/core/delta.py +258 -0
  21. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/distiller.py +74 -50
  22. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/pack.py +191 -33
  23. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/remote.py +82 -2
  24. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/zk_proofs.py +62 -5
  25. agmem-0.2.0/memvcs/health/__init__.py +25 -0
  26. agmem-0.2.0/memvcs/health/monitor.py +452 -0
  27. {agmem-0.1.5 → agmem-0.2.0}/pyproject.toml +12 -1
  28. {agmem-0.1.5 → agmem-0.2.0}/setup.py +1 -1
  29. agmem-0.2.0/tests/test_compression_pipeline.py +158 -0
  30. agmem-0.2.0/tests/test_delta_encoding.py +297 -0
  31. agmem-0.2.0/tests/test_health_monitor.py +393 -0
  32. agmem-0.2.0/tests/test_ipfs_integration.py +134 -0
  33. {agmem-0.1.5 → agmem-0.2.0}/tests/test_pack_gc.py +61 -0
  34. {agmem-0.1.5 → agmem-0.2.0}/LICENSE +0 -0
  35. {agmem-0.1.5 → agmem-0.2.0}/MANIFEST.in +0 -0
  36. {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/dependency_links.txt +0 -0
  37. {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/entry_points.txt +0 -0
  38. {agmem-0.1.5 → agmem-0.2.0}/agmem.egg-info/top_level.txt +0 -0
  39. {agmem-0.1.5 → agmem-0.2.0}/docs/AGMEM_PUBLISHING_SETUP.md +0 -0
  40. {agmem-0.1.5 → agmem-0.2.0}/docs/CONFIG.md +0 -0
  41. {agmem-0.1.5 → agmem-0.2.0}/docs/FEDERATED.md +0 -0
  42. {agmem-0.1.5 → agmem-0.2.0}/docs/GTM.md +0 -0
  43. {agmem-0.1.5 → agmem-0.2.0}/docs/KNOWLEDGE_GRAPH.md +0 -0
  44. {agmem-0.1.5 → agmem-0.2.0}/docs/SEQUENTIAL_VALIDATION.md +0 -0
  45. {agmem-0.1.5 → agmem-0.2.0}/docs/TEST_REPORT.md +0 -0
  46. {agmem-0.1.5 → agmem-0.2.0}/docs/aux/INSTALL.md +0 -0
  47. {agmem-0.1.5 → agmem-0.2.0}/examples/basic_workflow.sh +0 -0
  48. {agmem-0.1.5 → agmem-0.2.0}/memvcs/cli.py +0 -0
  49. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/__init__.py +0 -0
  50. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/add.py +0 -0
  51. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/audit.py +0 -0
  52. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/base.py +0 -0
  53. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/blame.py +0 -0
  54. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/branch.py +0 -0
  55. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/checkout.py +0 -0
  56. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/clean.py +0 -0
  57. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/clone.py +0 -0
  58. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/commit.py +0 -0
  59. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/decay.py +0 -0
  60. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/diff.py +0 -0
  61. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/federated.py +0 -0
  62. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/fsck.py +0 -0
  63. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/garden.py +0 -0
  64. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/gc.py +0 -0
  65. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/graph.py +0 -0
  66. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/init.py +0 -0
  67. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/log.py +0 -0
  68. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/mcp.py +0 -0
  69. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/merge.py +0 -0
  70. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/pack.py +0 -0
  71. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/prove.py +0 -0
  72. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/pull.py +0 -0
  73. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/push.py +0 -0
  74. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/recall.py +0 -0
  75. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/reflog.py +0 -0
  76. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/remote.py +0 -0
  77. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/repair.py +0 -0
  78. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/reset.py +0 -0
  79. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/resolve.py +0 -0
  80. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/resurrect.py +0 -0
  81. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/search.py +0 -0
  82. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/serve.py +0 -0
  83. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/show.py +0 -0
  84. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/stash.py +0 -0
  85. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/status.py +0 -0
  86. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/tag.py +0 -0
  87. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/test.py +0 -0
  88. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/timeline.py +0 -0
  89. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/tree.py +0 -0
  90. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/verify.py +0 -0
  91. {agmem-0.1.5 → agmem-0.2.0}/memvcs/commands/when.py +0 -0
  92. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/__init__.py +0 -0
  93. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/access_index.py +0 -0
  94. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/audit.py +0 -0
  95. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/compression_pipeline.py +0 -0
  96. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/config_loader.py +0 -0
  97. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/consistency.py +0 -0
  98. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/constants.py +0 -0
  99. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/crypto_verify.py +0 -0
  100. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/decay.py +0 -0
  101. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/diff.py +0 -0
  102. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/encryption.py +0 -0
  103. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/federated.py +0 -0
  104. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/gardener.py +0 -0
  105. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/hooks.py +0 -0
  106. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/ipfs_remote.py +0 -0
  107. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/knowledge_graph.py +0 -0
  108. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/__init__.py +0 -0
  109. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/anthropic_provider.py +0 -0
  110. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/base.py +0 -0
  111. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/factory.py +0 -0
  112. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/llm/openai_provider.py +0 -0
  113. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/merge.py +0 -0
  114. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/objects.py +0 -0
  115. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/pii_scanner.py +0 -0
  116. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/privacy_budget.py +0 -0
  117. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/refs.py +0 -0
  118. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/repository.py +0 -0
  119. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/schema.py +0 -0
  120. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/staging.py +0 -0
  121. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/__init__.py +0 -0
  122. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/base.py +0 -0
  123. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/gcs.py +0 -0
  124. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/local.py +0 -0
  125. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/storage/s3.py +0 -0
  126. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/temporal_index.py +0 -0
  127. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/test_runner.py +0 -0
  128. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/trust.py +0 -0
  129. {agmem-0.1.5 → agmem-0.2.0}/memvcs/core/vector_store.py +0 -0
  130. {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/__init__.py +0 -0
  131. {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/mcp_server.py +0 -0
  132. {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/web_ui/__init__.py +0 -0
  133. {agmem-0.1.5 → agmem-0.2.0}/memvcs/integrations/web_ui/server.py +0 -0
  134. {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/__init__.py +0 -0
  135. {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/base.py +0 -0
  136. {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/pack.py +0 -0
  137. {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/recaller.py +0 -0
  138. {agmem-0.1.5 → agmem-0.2.0}/memvcs/retrieval/strategies.py +0 -0
  139. {agmem-0.1.5 → agmem-0.2.0}/memvcs/utils/__init__.py +0 -0
  140. {agmem-0.1.5 → agmem-0.2.0}/memvcs/utils/helpers.py +0 -0
  141. {agmem-0.1.5 → agmem-0.2.0}/setup.cfg +0 -0
  142. {agmem-0.1.5 → agmem-0.2.0}/tests/test_access_index.py +0 -0
  143. {agmem-0.1.5 → agmem-0.2.0}/tests/test_advanced_commands.py +0 -0
  144. {agmem-0.1.5 → agmem-0.2.0}/tests/test_audit.py +0 -0
  145. {agmem-0.1.5 → agmem-0.2.0}/tests/test_commit_importance.py +0 -0
  146. {agmem-0.1.5 → agmem-0.2.0}/tests/test_consistency.py +0 -0
  147. {agmem-0.1.5 → agmem-0.2.0}/tests/test_crypto_verify.py +0 -0
  148. {agmem-0.1.5 → agmem-0.2.0}/tests/test_decay.py +0 -0
  149. {agmem-0.1.5 → agmem-0.2.0}/tests/test_edge_cases.py +0 -0
  150. {agmem-0.1.5 → agmem-0.2.0}/tests/test_encryption.py +0 -0
  151. {agmem-0.1.5 → agmem-0.2.0}/tests/test_federated.py +0 -0
  152. {agmem-0.1.5 → agmem-0.2.0}/tests/test_ipfs_remote.py +0 -0
  153. {agmem-0.1.5 → agmem-0.2.0}/tests/test_llm_provider.py +0 -0
  154. {agmem-0.1.5 → agmem-0.2.0}/tests/test_objects.py +0 -0
  155. {agmem-0.1.5 → agmem-0.2.0}/tests/test_pii.py +0 -0
  156. {agmem-0.1.5 → agmem-0.2.0}/tests/test_plan_features.py +0 -0
  157. {agmem-0.1.5 → agmem-0.2.0}/tests/test_privacy_budget.py +0 -0
  158. {agmem-0.1.5 → agmem-0.2.0}/tests/test_repository.py +0 -0
  159. {agmem-0.1.5 → agmem-0.2.0}/tests/test_resolve_helpers.py +0 -0
  160. {agmem-0.1.5 → agmem-0.2.0}/tests/test_retrieval.py +0 -0
  161. {agmem-0.1.5 → agmem-0.2.0}/tests/test_temporal_index.py +0 -0
  162. {agmem-0.1.5 → agmem-0.2.0}/tests/test_trust.py +0 -0
  163. {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.1.5
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** — Periodic Merkle verification in daemon loop; safe auto-remediation hooks
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** | **Zero-knowledge proofs** | zk-SNARK-style proofs for keyword containment and memory freshness. **Command:** `agmem prove --memory <path> --property keyword|freshness --value <v> [-o out]` (stub). |
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
- current/ staging .mem/
464
- ╭────────────────────┐ ╭─────────────┐ ╭──────────────────────┐
465
- episodic/ │ │ │ │ objects/ │
466
- │ session logs │ │ index.json │ │ blobs → trees →
467
- semantic/ │───►│ (staged) │───►│ commits │
468
- │ facts, prefs │ │ │ │ (content-addressable)│
469
- procedural/ │ │ │ │ │
470
- │ workflows │ ╰─────────────╯ ╰──────────────────────╯
471
- ╰────────────────────┘
472
- │ │
473
- agmem add agmem commit
474
- ```
475
-
476
- ### Merge Strategies
477
-
478
- ```
479
- Episodic Branch A ──╮
480
- (append) Branch B ──╯──► chronological append ──► ✓ no conflicts
481
-
482
- Semantic Branch A ──╮
483
- (consolidate) Branch B ──╯──► conflict markers ──► ⚠ manual review
484
-
485
- Procedural Branch A ──╮
486
- (prefer new) Branch B ──╯──► newer wins ──► ⚠ flag for review
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
- | Tool | Approach | Gap |
492
- |------|----------|-----|
493
- | **Cursor** | Ephemeral, session-based context; no persistent version control | No history, branching, or merge for agent memory |
494
- | **Claude Code** | File-based (CLAUDE.md, .claude/rules); loaded at launch | No built-in version control; Git is not memory-type-aware |
495
- | **Mem0** | Cloud/API; vector-based persistence | No branching, merging, or "git log" for what the agent learned |
496
- | **agmem** | Git-like version control for memory | Version history, branching, merging, local-first, memory-type-aware |
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
- ║ PORCELAIN · What you type
600
- ╠═══════════════════════════════════════════════════════════════════════╣
601
- ║ init add commit status log · branch checkout merge
602
- ║ diff show tag reset tree · stash clean blame reflog ║
603
- ║ clone push pull remote fsck · graph search serve daemon
604
- ╠═══════════════════════════════════════════════════════════════════════╣
605
- ║ PLUMBING · What happens under the hood ║
606
- ╠═══════════════════════════════════════════════════════════════════════╣
607
- ║ objects (blob, tree, commit) · refs (HEAD, branches, tags) ║
608
- ║ staging area ║
609
- ╠═══════════════════════════════════════════════════════════════════════╣
610
- ║ STORAGE · On disk ║
611
- ╠═══════════════════════════════════════════════════════════════════════╣
612
- SHA-256 hashing · zlib compression · deduplication ║
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