agmem 0.1.2__tar.gz → 0.1.4__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.2/agmem.egg-info → agmem-0.1.4}/PKG-INFO +144 -14
- {agmem-0.1.2 → agmem-0.1.4}/README.md +124 -12
- {agmem-0.1.2 → agmem-0.1.4/agmem.egg-info}/PKG-INFO +144 -14
- {agmem-0.1.2 → agmem-0.1.4}/agmem.egg-info/SOURCES.txt +34 -4
- {agmem-0.1.2 → agmem-0.1.4}/agmem.egg-info/requires.txt +22 -0
- {agmem-0.1.2 → agmem-0.1.4}/docs/CONFIG.md +12 -0
- agmem-0.1.4/docs/FEDERATED.md +73 -0
- agmem-0.1.4/docs/SEQUENTIAL_VALIDATION.md +22 -0
- {agmem-0.1.2 → agmem-0.1.4}/docs/TEST_REPORT.md +17 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/cli.py +10 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/add.py +6 -0
- agmem-0.1.4/memvcs/commands/audit.py +59 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/clone.py +7 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/daemon.py +45 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/distill.py +24 -0
- agmem-0.1.4/memvcs/commands/federated.py +59 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/fsck.py +31 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/garden.py +22 -0
- agmem-0.1.4/memvcs/commands/gc.py +66 -0
- agmem-0.1.4/memvcs/commands/merge.py +130 -0
- agmem-0.1.4/memvcs/commands/prove.py +66 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/pull.py +27 -0
- agmem-0.1.4/memvcs/commands/resolve.py +130 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/timeline.py +27 -0
- agmem-0.1.4/memvcs/commands/verify.py +110 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/when.py +27 -0
- agmem-0.1.4/memvcs/core/audit.py +124 -0
- agmem-0.1.4/memvcs/core/compression_pipeline.py +157 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/consistency.py +9 -9
- agmem-0.1.4/memvcs/core/crypto_verify.py +291 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/distiller.py +47 -29
- agmem-0.1.4/memvcs/core/encryption.py +169 -0
- agmem-0.1.4/memvcs/core/federated.py +147 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/gardener.py +47 -29
- agmem-0.1.4/memvcs/core/ipfs_remote.py +200 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/knowledge_graph.py +77 -5
- agmem-0.1.4/memvcs/core/llm/__init__.py +10 -0
- agmem-0.1.4/memvcs/core/llm/anthropic_provider.py +50 -0
- agmem-0.1.4/memvcs/core/llm/base.py +27 -0
- agmem-0.1.4/memvcs/core/llm/factory.py +30 -0
- agmem-0.1.4/memvcs/core/llm/openai_provider.py +36 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/merge.py +36 -23
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/objects.py +39 -19
- agmem-0.1.4/memvcs/core/pack.py +278 -0
- agmem-0.1.4/memvcs/core/privacy_budget.py +63 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/remote.py +229 -3
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/repository.py +82 -2
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/temporal_index.py +9 -0
- agmem-0.1.4/memvcs/core/trust.py +103 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/vector_store.py +15 -1
- agmem-0.1.4/memvcs/core/zk_proofs.py +158 -0
- {agmem-0.1.2 → agmem-0.1.4}/pyproject.toml +42 -2
- agmem-0.1.4/tests/test_audit.py +96 -0
- agmem-0.1.4/tests/test_crypto_verify.py +120 -0
- agmem-0.1.4/tests/test_encryption.py +102 -0
- agmem-0.1.4/tests/test_federated.py +64 -0
- agmem-0.1.4/tests/test_ipfs_remote.py +66 -0
- agmem-0.1.4/tests/test_llm_provider.py +57 -0
- agmem-0.1.4/tests/test_pack_gc.py +107 -0
- agmem-0.1.4/tests/test_privacy_budget.py +138 -0
- agmem-0.1.4/tests/test_resolve_helpers.py +53 -0
- agmem-0.1.4/tests/test_trust.py +76 -0
- agmem-0.1.4/tests/test_zk_proofs.py +60 -0
- agmem-0.1.2/docs/aux/MARKET_POSITIONING.md +0 -168
- agmem-0.1.2/docs/aux/README.md +0 -7
- agmem-0.1.2/docs/aux/STRESS_TEST_REPORT.md +0 -47
- agmem-0.1.2/memvcs/commands/merge.py +0 -76
- agmem-0.1.2/memvcs/commands/verify.py +0 -59
- {agmem-0.1.2 → agmem-0.1.4}/LICENSE +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/MANIFEST.in +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/agmem.egg-info/dependency_links.txt +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/agmem.egg-info/entry_points.txt +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/agmem.egg-info/top_level.txt +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/docs/AGMEM_PUBLISHING_SETUP.md +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/docs/GTM.md +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/docs/KNOWLEDGE_GRAPH.md +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/docs/aux/INSTALL.md +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/examples/basic_workflow.sh +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/base.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/blame.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/branch.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/checkout.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/clean.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/commit.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/decay.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/diff.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/graph.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/init.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/log.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/mcp.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/pack.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/push.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/recall.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/reflog.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/remote.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/repair.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/reset.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/resurrect.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/search.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/serve.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/show.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/stash.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/status.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/tag.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/test.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/commands/tree.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/access_index.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/config_loader.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/constants.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/decay.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/diff.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/hooks.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/pii_scanner.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/refs.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/schema.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/staging.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/storage/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/storage/base.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/storage/gcs.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/storage/local.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/storage/s3.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/core/test_runner.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/integrations/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/integrations/mcp_server.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/integrations/web_ui/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/integrations/web_ui/server.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/retrieval/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/retrieval/base.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/retrieval/pack.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/retrieval/recaller.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/retrieval/strategies.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/utils/__init__.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/memvcs/utils/helpers.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/setup.cfg +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/setup.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_access_index.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_advanced_commands.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_commit_importance.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_consistency.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_decay.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_edge_cases.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_objects.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_pii.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_plan_features.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_repository.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_retrieval.py +0 -0
- {agmem-0.1.2 → agmem-0.1.4}/tests/test_temporal_index.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.4
|
|
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
|
|
13
|
+
Keywords: ai,agent,memory,version-control,git,vcs,llm,merkle,audit,encryption,differential-privacy,trust,multi-agent
|
|
14
14
|
Classifier: Development Status :: 3 - Alpha
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
23
|
Classifier: Topic :: Software Development :: Version Control
|
|
24
24
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
25
|
+
Classifier: Topic :: Security :: Cryptography
|
|
25
26
|
Requires-Python: >=3.8
|
|
26
27
|
Description-Content-Type: text/markdown
|
|
27
28
|
License-File: LICENSE
|
|
@@ -32,6 +33,10 @@ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
|
32
33
|
Requires-Dist: black==24.10.0; extra == "dev"
|
|
33
34
|
Requires-Dist: flake8>=5.0.0; extra == "dev"
|
|
34
35
|
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: bandit[toml]>=1.7.0; extra == "dev"
|
|
37
|
+
Provides-Extra: llm
|
|
38
|
+
Requires-Dist: openai>=1.0.0; extra == "llm"
|
|
39
|
+
Requires-Dist: anthropic>=0.18.0; extra == "llm"
|
|
35
40
|
Provides-Extra: mcp
|
|
36
41
|
Requires-Dist: mcp>=1.0.0; extra == "mcp"
|
|
37
42
|
Provides-Extra: vector
|
|
@@ -46,6 +51,8 @@ Requires-Dist: google-cloud-storage>=2.0.0; extra == "cloud"
|
|
|
46
51
|
Provides-Extra: gardener
|
|
47
52
|
Requires-Dist: scikit-learn>=1.3.0; extra == "gardener"
|
|
48
53
|
Requires-Dist: openai>=1.0.0; extra == "gardener"
|
|
54
|
+
Provides-Extra: anthropic
|
|
55
|
+
Requires-Dist: anthropic>=0.18.0; extra == "anthropic"
|
|
49
56
|
Provides-Extra: pii
|
|
50
57
|
Requires-Dist: presidio-analyzer>=2.2.0; extra == "pii"
|
|
51
58
|
Provides-Extra: daemon
|
|
@@ -58,8 +65,15 @@ Provides-Extra: distill
|
|
|
58
65
|
Requires-Dist: openai>=1.0.0; extra == "distill"
|
|
59
66
|
Provides-Extra: verify
|
|
60
67
|
Requires-Dist: openai>=1.0.0; extra == "verify"
|
|
68
|
+
Provides-Extra: crypto
|
|
69
|
+
Requires-Dist: cryptography>=41.0.0; extra == "crypto"
|
|
70
|
+
Provides-Extra: ipfs
|
|
71
|
+
Requires-Dist: requests>=2.28.0; extra == "ipfs"
|
|
72
|
+
Provides-Extra: ipfs-daemon
|
|
73
|
+
Requires-Dist: ipfshttpclient>=0.8.0; extra == "ipfs-daemon"
|
|
61
74
|
Provides-Extra: all
|
|
62
75
|
Requires-Dist: mcp>=1.0.0; extra == "all"
|
|
76
|
+
Requires-Dist: cryptography>=41.0.0; extra == "all"
|
|
63
77
|
Requires-Dist: sqlite-vec>=0.1.0; extra == "all"
|
|
64
78
|
Requires-Dist: sentence-transformers>=2.0.0; extra == "all"
|
|
65
79
|
Requires-Dist: fastapi>=0.100.0; extra == "all"
|
|
@@ -68,8 +82,12 @@ Requires-Dist: boto3>=1.34.0; extra == "all"
|
|
|
68
82
|
Requires-Dist: google-cloud-storage>=2.0.0; extra == "all"
|
|
69
83
|
Requires-Dist: scikit-learn>=1.3.0; extra == "all"
|
|
70
84
|
Requires-Dist: openai>=1.0.0; extra == "all"
|
|
85
|
+
Requires-Dist: anthropic>=0.18.0; extra == "all"
|
|
71
86
|
Requires-Dist: watchdog>=3.0.0; extra == "all"
|
|
72
87
|
Requires-Dist: networkx>=3.0; extra == "all"
|
|
88
|
+
Requires-Dist: tiktoken>=0.5.0; extra == "all"
|
|
89
|
+
Requires-Dist: presidio-analyzer>=2.2.0; extra == "all"
|
|
90
|
+
Requires-Dist: requests>=2.28.0; extra == "all"
|
|
73
91
|
Dynamic: author
|
|
74
92
|
Dynamic: home-page
|
|
75
93
|
Dynamic: license-file
|
|
@@ -105,10 +123,23 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
105
123
|
- ✅ **Branch/tag names with `/`** — Git-style refs: `feature/test`, `releases/v1` (path-validated)
|
|
106
124
|
- ✅ **Content-addressable storage** — SHA-256 deduplication like Git
|
|
107
125
|
- ✅ **Memory-type-aware merging** — Episodic append, semantic consolidate, procedural prefer-new
|
|
108
|
-
- ✅ **Remote (file://)** — `clone`, `push`, `pull`, `remote`; pull merges into current branch
|
|
126
|
+
- ✅ **Remote (file://)** — `clone`, `push`, `pull`, `remote`; pull merges into current branch; push conflict detection (non–fast-forward reject)
|
|
109
127
|
- ✅ **Search** — Semantic with `agmem[vector]`, or plain text over `current/` when vector deps missing
|
|
110
128
|
- ✅ **Knowledge graph** — `agmem graph` from wikilinks/tags; `--no-similarity`, `--format d3`, `--serve` (optional `agmem[web]`)
|
|
111
|
-
- ✅ **Integrity** — `agmem fsck`; path/ref/hash validation
|
|
129
|
+
- ✅ **Integrity** — `agmem fsck` (objects, refs, vector store, Merkle/signature); `agmem verify --crypto`; path/ref/hash validation (no path traversal)
|
|
130
|
+
- ✅ **Cryptographic commit verification** — Merkle tree over blobs; Ed25519 signing of root; verify on checkout, pull, `verify`, `fsck`; Merkle proofs for single-blob verification
|
|
131
|
+
- ✅ **Encryption at rest** — Optional AES-256-GCM with Argon2id key derivation; hash-then-encrypt preserves deduplication
|
|
132
|
+
- ✅ **Tamper-evident audit trail** — Append-only hash-chained log (init, add, commit, checkout, merge, push, pull, config); `agmem audit` and `agmem audit --verify`
|
|
133
|
+
- ✅ **Multi-agent trust** — Trust store (full / conditional / untrusted) per public key; applied on pull/merge; clone copies remote keys
|
|
134
|
+
- ✅ **Conflict resolution** — `agmem resolve` with ours/theirs/both; conflicts persisted in `.mem/merge/`; path-safe
|
|
135
|
+
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise applied to counts and frontmatter
|
|
136
|
+
- ✅ **Pack files & GC** — `agmem gc [--repack]` (reachable from refs, prune loose, optional pack file + index); ObjectStore reads from pack when loose missing
|
|
137
|
+
- ✅ **Multi-provider LLM** — OpenAI and Anthropic via `memvcs.core.llm`; config/repo or env; used by gardener, distiller, consistency, merge
|
|
138
|
+
- ✅ **Temporal querying** — Point-in-time and range queries in temporal index; frontmatter timestamps
|
|
139
|
+
- ✅ **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
|
|
142
|
+
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
112
143
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
113
144
|
|
|
114
145
|
## Quick Start
|
|
@@ -227,12 +258,18 @@ All commands are listed below. Highlights: **`agmem blame <file>`** (who changed
|
|
|
227
258
|
|
|
228
259
|
| Command | Description |
|
|
229
260
|
|---------|-------------|
|
|
230
|
-
| `agmem clone <url> [dir]` | Clone repo (file:// URLs); path-validated |
|
|
261
|
+
| `agmem clone <url> [dir]` | Clone repo (file:// URLs); path-validated; copies remote public keys |
|
|
231
262
|
| `agmem remote add <name> <url>` | Add remote |
|
|
232
263
|
| `agmem remote show` | List remotes |
|
|
233
|
-
| `agmem push <remote> <branch>` | Push branch (refs validated) |
|
|
234
|
-
| `agmem pull [--remote <name>] [--branch <b>]` | Fetch and merge into current branch |
|
|
235
|
-
| `agmem fsck` | Check objects, refs, optional vector store |
|
|
264
|
+
| `agmem push <remote> <branch>` | Push branch (refs validated); rejects non–fast-forward |
|
|
265
|
+
| `agmem pull [--remote <name>] [--branch <b>]` | Fetch and merge into current branch; optional crypto/trust checks |
|
|
266
|
+
| `agmem fsck` | Check objects, refs, optional vector store, Merkle roots and signatures |
|
|
267
|
+
| `agmem verify [ref]` | Belief consistency (contradictions); use `--crypto` to verify commit Merkle/signature |
|
|
268
|
+
| `agmem audit [--verify] [--max n]` | Show tamper-evident audit log; `--verify` checks hash chain |
|
|
269
|
+
| `agmem resolve [path]` | Resolve merge conflicts (ours/theirs/both); path under `current/` |
|
|
270
|
+
| `agmem gc [--dry-run] [--repack] [--prune-days n]` | Garbage collection: delete unreachable loose objects; optional pack file creation |
|
|
271
|
+
| `agmem prove --memory <path> --property keyword\|freshness --value <v> [-o out]` | Generate ZK proofs (keyword: Merkle set membership; freshness: signed timestamp) |
|
|
272
|
+
| `agmem federated push\|pull` | Federated collaboration (real summaries, optional DP; requires coordinator in config) |
|
|
236
273
|
|
|
237
274
|
### Optional (install extras)
|
|
238
275
|
|
|
@@ -301,7 +338,84 @@ Configure in `.mem/config.json` (e.g. `archive_dir`, consolidation thresholds).
|
|
|
301
338
|
agmem fsck
|
|
302
339
|
```
|
|
303
340
|
|
|
304
|
-
Verifies objects, refs, and (if installed) the vector store. Run after cloning or if something looks wrong.
|
|
341
|
+
Verifies objects, refs, and (if installed) the vector store. When commit metadata includes `merkle_root` and optionally `signature`, fsck also runs cryptographic verification. Run after cloning or if something looks wrong.
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Security, trust & advanced features
|
|
346
|
+
|
|
347
|
+
The following 18 capabilities are implemented (or stubbed) per the agmem features implementation plan. They are grouped by tier.
|
|
348
|
+
|
|
349
|
+
### Tier 1 — Security and trust
|
|
350
|
+
|
|
351
|
+
| # | Feature | Description |
|
|
352
|
+
|---|---------|-------------|
|
|
353
|
+
| **1** | **Cryptographic commit verification** | Merkle tree over commit blobs; Ed25519 signing of Merkle root; verification on checkout, pull, `agmem verify --crypto`, and `agmem fsck`. Merkle proofs for single-blob verification. Keys: `.mem/keys/`; private key from env `AGMEM_SIGNING_PRIVATE_KEY` or `AGMEM_SIGNING_PRIVATE_KEY_FILE`. Old commits without `merkle_root` are unverified. |
|
|
354
|
+
| **2** | **Encryption at rest** | Optional AES-256-GCM for object contents; key from passphrase via Argon2id; hash-then-encrypt preserves deduplication. Config in `.mem/encryption.json` or repo config; opt-in. |
|
|
355
|
+
| **3** | **Tamper-evident audit trail** | Append-only, hash-chained log in `.mem/audit/` for init, add, commit, checkout, merge, push, pull, config. **Commands:** `agmem audit` (show entries), `agmem audit --verify` (verify chain). |
|
|
356
|
+
|
|
357
|
+
### Tier 2 — Multi-agent collaboration
|
|
358
|
+
|
|
359
|
+
| # | Feature | Description |
|
|
360
|
+
|---|---------|-------------|
|
|
361
|
+
| **4** | **Multi-agent trust and identity** | Trust store (full / conditional / untrusted) per public key; applied on pull and merge. Clone copies remote public keys; user adds them to trust store. Identity = keypair (same as commit signing). |
|
|
362
|
+
| **5** | **Federated memory collaboration** | Agents share summaries or aggregated updates via a coordinator. **Command:** `agmem federated push` / `agmem federated pull` (stub). Config: `federated.enabled`, `coordinator_url`. |
|
|
363
|
+
| **6** | **Conflict resolution interface** | Structured resolution: ours / theirs / both per path. **Command:** `agmem resolve [path]`. Conflicts persisted in `.mem/merge/conflicts.json`; path traversal protected. |
|
|
364
|
+
|
|
365
|
+
### Tier 3 — Privacy
|
|
366
|
+
|
|
367
|
+
| # | Feature | Description |
|
|
368
|
+
|---|---------|-------------|
|
|
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). |
|
|
371
|
+
|
|
372
|
+
### Tier 4 — Storage and distribution
|
|
373
|
+
|
|
374
|
+
| # | Feature | Description |
|
|
375
|
+
|---|---------|-------------|
|
|
376
|
+
| **9** | **Decentralized storage (IPFS)** | Push/pull via gateway (POST /api/v0/add, GET /ipfs/<cid>). Bundle/unbundle in `memvcs.core.ipfs_remote`; optional `agmem[ipfs]`. |
|
|
377
|
+
| **10** | **Pack files and garbage collection** | Pack loose objects into pack file + index; GC deletes unreachable; ObjectStore reads from pack. **Command:** `agmem gc [--dry-run] [--repack] [--prune-days n]`. |
|
|
378
|
+
| **11** | **Enhanced cloud remote operations** | Push conflict detection; S3/GCS remotes with distributed locking (acquire before push/fetch, release in finally). Config: `lock_table` for S3. |
|
|
379
|
+
|
|
380
|
+
### Tier 5 — Intelligence and retrieval
|
|
381
|
+
|
|
382
|
+
| # | Feature | Description |
|
|
383
|
+
|---|---------|-------------|
|
|
384
|
+
| **12** | **Multi-provider LLM** | `memvcs.core.llm`: OpenAI and Anthropic; factory by config or env. Used by gardener, distiller, consistency checker, merge. Credentials via env (e.g. `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`). |
|
|
385
|
+
| **13** | **Enhanced semantic compression** | Multi-stage pipeline in `memvcs.core.compression_pipeline`: chunk, fact extraction, dedup by hash; hybrid retrieval in strategies. |
|
|
386
|
+
| **14** | **Temporal querying and time-travel** | Point-in-time and range in `memvcs.core.temporal_index`; CLI: `agmem when --from/--to`, `agmem timeline --from/--to`. |
|
|
387
|
+
| **15** | **Cross-memory relationship graph** | Knowledge graph: co-occurrence, causal edges; incremental-update docstring in `knowledge_graph.py`. |
|
|
388
|
+
|
|
389
|
+
### Tier 6 — Operations and maintenance
|
|
390
|
+
|
|
391
|
+
| # | Feature | Description |
|
|
392
|
+
|---|---------|-------------|
|
|
393
|
+
| **16** | **Automated memory health monitoring** | Daemon: configurable `daemon.health_check_interval_seconds` and `AGMEM_DAEMON_HEALTH_INTERVAL`; alert only on verify failure; suggest `agmem fsck`. |
|
|
394
|
+
| **17** | **GPU-accelerated operations** | Vector store `_device()` returns cuda/mps/cpu; model loaded with that device. |
|
|
395
|
+
| **18** | **Test suite and quality** | Tests: crypto (tampered blob, key missing), encryption (wrong key, corrupted ciphertext), privacy budget, pack/GC, ZK prove/verify, federated mock, IPFS bundle; see docs/TEST_REPORT.md. |
|
|
396
|
+
|
|
397
|
+
### New files and config (summary)
|
|
398
|
+
|
|
399
|
+
| Addition | Purpose |
|
|
400
|
+
|----------|---------|
|
|
401
|
+
| `memvcs/core/crypto_verify.py` | Merkle build/verify, Ed25519 sign/verify, Merkle proofs |
|
|
402
|
+
| `memvcs/core/audit.py` | Tamper-evident audit append and verify |
|
|
403
|
+
| `memvcs/core/trust.py` | Trust store (key → level) |
|
|
404
|
+
| `memvcs/core/privacy_budget.py` | Epsilon/delta budget for DP |
|
|
405
|
+
| `memvcs/core/pack.py` | Pack format, index, GC, repack |
|
|
406
|
+
| `memvcs/core/compression_pipeline.py` | Chunk, fact extraction, dedup; hybrid retrieval |
|
|
407
|
+
| `memvcs/core/zk_proofs.py` | Hash/signature-based proofs (keyword, freshness) |
|
|
408
|
+
| `docs/FEDERATED.md` | Coordinator API for federated push/pull |
|
|
409
|
+
| `memvcs/core/encryption.py` | AES-256-GCM, Argon2id, config |
|
|
410
|
+
| `memvcs/core/llm/` | LLM provider interface and OpenAI/Anthropic |
|
|
411
|
+
| `memvcs/core/zk_proofs.py` | ZK proof stubs |
|
|
412
|
+
| `memvcs/core/federated.py` | Federated push/pull stubs |
|
|
413
|
+
| `.mem/audit/` | Audit log |
|
|
414
|
+
| `.mem/keys/` | Public (and optional private) keys |
|
|
415
|
+
| `.mem/trust/` or config | Trust store |
|
|
416
|
+
| `.mem/privacy_budget.json` | DP budget state |
|
|
417
|
+
| `.mem/merge/conflicts.json` | Unresolved merge conflicts |
|
|
418
|
+
| Commit `metadata` | `merkle_root`, `signature` |
|
|
305
419
|
|
|
306
420
|
---
|
|
307
421
|
|
|
@@ -450,10 +564,20 @@ Repository configuration is stored in `.mem/config.json`:
|
|
|
450
564
|
"summarizer_model": "default",
|
|
451
565
|
"max_episode_size": 1048576,
|
|
452
566
|
"consolidation_threshold": 100
|
|
567
|
+
},
|
|
568
|
+
"differential_privacy": {
|
|
569
|
+
"max_epsilon": 1.0,
|
|
570
|
+
"delta": 1e-5
|
|
571
|
+
},
|
|
572
|
+
"federated": {
|
|
573
|
+
"enabled": false,
|
|
574
|
+
"coordinator_url": ""
|
|
453
575
|
}
|
|
454
576
|
}
|
|
455
577
|
```
|
|
456
578
|
|
|
579
|
+
Optional sections: **`differential_privacy`** (for `--private` on distill/garden); **`federated`** (for `agmem federated`); **`signing`** (public key for commit verification); trust store under `.mem/trust/` or config; encryption in `.mem/encryption.json` when enabled.
|
|
580
|
+
|
|
457
581
|
### agmem config (cloud and PII)
|
|
458
582
|
|
|
459
583
|
Optional user/repo config for S3/GCS and PII hooks:
|
|
@@ -515,13 +639,17 @@ mypy memvcs/
|
|
|
515
639
|
- [x] Basic commands (init, add, commit, status, log, diff, show, reset, tag, stash, reflog, blame, tree, clean)
|
|
516
640
|
- [x] HEAD~n resolution; branch/tag names with `/` (Git-style)
|
|
517
641
|
- [x] Branching and checkout; merging with memory-type-aware strategies
|
|
518
|
-
- [x] Remote operations (clone, push, pull, remote) — file:// URLs; pull merges into current branch
|
|
642
|
+
- [x] Remote operations (clone, push, pull, remote) — file:// URLs; pull merges into current branch; push conflict detection
|
|
519
643
|
- [x] Search — semantic with `agmem[vector]`, plain text fallback
|
|
520
644
|
- [x] Knowledge graph (`agmem graph`) — wikilinks, tags, optional similarity; `--no-similarity`, `--serve`
|
|
521
|
-
- [x] Integrity (`agmem fsck`); path/ref/hash validation
|
|
645
|
+
- [x] Integrity (`agmem fsck`); path/ref/hash validation; Merkle/signature verification
|
|
522
646
|
- [x] Web UI (`agmem serve`); MCP server (`agmem mcp`); daemon (`agmem daemon`); garden (`agmem garden`)
|
|
523
|
-
- [
|
|
524
|
-
- [
|
|
647
|
+
- [x] Cryptographic commit verification (Merkle tree, Ed25519 signing, verify on checkout/pull/fsck)
|
|
648
|
+
- [x] Tamper-evident audit trail (`agmem audit`); multi-agent trust store; conflict resolution (`agmem resolve`)
|
|
649
|
+
- [x] Encryption at rest (optional AES-256-GCM); differential privacy budget (`--private` on distill/garden)
|
|
650
|
+
- [x] Pack files and garbage collection (`agmem gc`); ZK proofs and federated stubs (`agmem prove`, `agmem federated`)
|
|
651
|
+
- [x] Multi-provider LLM (OpenAI, Anthropic); temporal range queries; daemon health checks; GPU detection; test suite and CI
|
|
652
|
+
- [ ] IPFS remote (stub in place); full ZK circuits and federated coordinator
|
|
525
653
|
|
|
526
654
|
## Integrations
|
|
527
655
|
|
|
@@ -614,8 +742,10 @@ agmem graph --serve # Serve knowledge graph UI (same extra)
|
|
|
614
742
|
|
|
615
743
|
- **Full history:** `agmem log`, `agmem reflog`
|
|
616
744
|
- **Line-level attribution:** `agmem blame <file>` — see which commit and author last changed each line (e.g. `agmem blame current/semantic/user-preferences.md`)
|
|
745
|
+
- **Tamper-evident audit:** `agmem audit` and `agmem audit --verify` for hash-chained operation log
|
|
746
|
+
- **Cryptographic verification:** `agmem verify --crypto` and `agmem fsck` for Merkle roots and Ed25519 signatures
|
|
617
747
|
- **Visual audit:** `agmem serve` for browser-based history and diff viewer
|
|
618
|
-
- **Integrity:** `agmem fsck` to verify objects and
|
|
748
|
+
- **Integrity:** `agmem fsck` to verify objects, refs, and commit signatures
|
|
619
749
|
|
|
620
750
|
## Ecosystem Plugin Patterns
|
|
621
751
|
|
|
@@ -28,10 +28,23 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
28
28
|
- ✅ **Branch/tag names with `/`** — Git-style refs: `feature/test`, `releases/v1` (path-validated)
|
|
29
29
|
- ✅ **Content-addressable storage** — SHA-256 deduplication like Git
|
|
30
30
|
- ✅ **Memory-type-aware merging** — Episodic append, semantic consolidate, procedural prefer-new
|
|
31
|
-
- ✅ **Remote (file://)** — `clone`, `push`, `pull`, `remote`; pull merges into current branch
|
|
31
|
+
- ✅ **Remote (file://)** — `clone`, `push`, `pull`, `remote`; pull merges into current branch; push conflict detection (non–fast-forward reject)
|
|
32
32
|
- ✅ **Search** — Semantic with `agmem[vector]`, or plain text over `current/` when vector deps missing
|
|
33
33
|
- ✅ **Knowledge graph** — `agmem graph` from wikilinks/tags; `--no-similarity`, `--format d3`, `--serve` (optional `agmem[web]`)
|
|
34
|
-
- ✅ **Integrity** — `agmem fsck`; path/ref/hash validation
|
|
34
|
+
- ✅ **Integrity** — `agmem fsck` (objects, refs, vector store, Merkle/signature); `agmem verify --crypto`; path/ref/hash validation (no path traversal)
|
|
35
|
+
- ✅ **Cryptographic commit verification** — Merkle tree over blobs; Ed25519 signing of root; verify on checkout, pull, `verify`, `fsck`; Merkle proofs for single-blob verification
|
|
36
|
+
- ✅ **Encryption at rest** — Optional AES-256-GCM with Argon2id key derivation; hash-then-encrypt preserves deduplication
|
|
37
|
+
- ✅ **Tamper-evident audit trail** — Append-only hash-chained log (init, add, commit, checkout, merge, push, pull, config); `agmem audit` and `agmem audit --verify`
|
|
38
|
+
- ✅ **Multi-agent trust** — Trust store (full / conditional / untrusted) per public key; applied on pull/merge; clone copies remote keys
|
|
39
|
+
- ✅ **Conflict resolution** — `agmem resolve` with ours/theirs/both; conflicts persisted in `.mem/merge/`; path-safe
|
|
40
|
+
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise applied to counts and frontmatter
|
|
41
|
+
- ✅ **Pack files & GC** — `agmem gc [--repack]` (reachable from refs, prune loose, optional pack file + index); ObjectStore reads from pack when loose missing
|
|
42
|
+
- ✅ **Multi-provider LLM** — OpenAI and Anthropic via `memvcs.core.llm`; config/repo or env; used by gardener, distiller, consistency, merge
|
|
43
|
+
- ✅ **Temporal querying** — Point-in-time and range queries in temporal index; frontmatter timestamps
|
|
44
|
+
- ✅ **Federated collaboration** — `agmem federated push|pull`; real summaries (topic counts, fact hashes); optional DP on outbound; coordinator API in docs/FEDERATED.md
|
|
45
|
+
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp)
|
|
46
|
+
- ✅ **Daemon health** — Periodic Merkle verification in daemon loop; safe auto-remediation hooks
|
|
47
|
+
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
35
48
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
36
49
|
|
|
37
50
|
## Quick Start
|
|
@@ -150,12 +163,18 @@ All commands are listed below. Highlights: **`agmem blame <file>`** (who changed
|
|
|
150
163
|
|
|
151
164
|
| Command | Description |
|
|
152
165
|
|---------|-------------|
|
|
153
|
-
| `agmem clone <url> [dir]` | Clone repo (file:// URLs); path-validated |
|
|
166
|
+
| `agmem clone <url> [dir]` | Clone repo (file:// URLs); path-validated; copies remote public keys |
|
|
154
167
|
| `agmem remote add <name> <url>` | Add remote |
|
|
155
168
|
| `agmem remote show` | List remotes |
|
|
156
|
-
| `agmem push <remote> <branch>` | Push branch (refs validated) |
|
|
157
|
-
| `agmem pull [--remote <name>] [--branch <b>]` | Fetch and merge into current branch |
|
|
158
|
-
| `agmem fsck` | Check objects, refs, optional vector store |
|
|
169
|
+
| `agmem push <remote> <branch>` | Push branch (refs validated); rejects non–fast-forward |
|
|
170
|
+
| `agmem pull [--remote <name>] [--branch <b>]` | Fetch and merge into current branch; optional crypto/trust checks |
|
|
171
|
+
| `agmem fsck` | Check objects, refs, optional vector store, Merkle roots and signatures |
|
|
172
|
+
| `agmem verify [ref]` | Belief consistency (contradictions); use `--crypto` to verify commit Merkle/signature |
|
|
173
|
+
| `agmem audit [--verify] [--max n]` | Show tamper-evident audit log; `--verify` checks hash chain |
|
|
174
|
+
| `agmem resolve [path]` | Resolve merge conflicts (ours/theirs/both); path under `current/` |
|
|
175
|
+
| `agmem gc [--dry-run] [--repack] [--prune-days n]` | Garbage collection: delete unreachable loose objects; optional pack file creation |
|
|
176
|
+
| `agmem prove --memory <path> --property keyword\|freshness --value <v> [-o out]` | Generate ZK proofs (keyword: Merkle set membership; freshness: signed timestamp) |
|
|
177
|
+
| `agmem federated push\|pull` | Federated collaboration (real summaries, optional DP; requires coordinator in config) |
|
|
159
178
|
|
|
160
179
|
### Optional (install extras)
|
|
161
180
|
|
|
@@ -224,7 +243,84 @@ Configure in `.mem/config.json` (e.g. `archive_dir`, consolidation thresholds).
|
|
|
224
243
|
agmem fsck
|
|
225
244
|
```
|
|
226
245
|
|
|
227
|
-
Verifies objects, refs, and (if installed) the vector store. Run after cloning or if something looks wrong.
|
|
246
|
+
Verifies objects, refs, and (if installed) the vector store. When commit metadata includes `merkle_root` and optionally `signature`, fsck also runs cryptographic verification. Run after cloning or if something looks wrong.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Security, trust & advanced features
|
|
251
|
+
|
|
252
|
+
The following 18 capabilities are implemented (or stubbed) per the agmem features implementation plan. They are grouped by tier.
|
|
253
|
+
|
|
254
|
+
### Tier 1 — Security and trust
|
|
255
|
+
|
|
256
|
+
| # | Feature | Description |
|
|
257
|
+
|---|---------|-------------|
|
|
258
|
+
| **1** | **Cryptographic commit verification** | Merkle tree over commit blobs; Ed25519 signing of Merkle root; verification on checkout, pull, `agmem verify --crypto`, and `agmem fsck`. Merkle proofs for single-blob verification. Keys: `.mem/keys/`; private key from env `AGMEM_SIGNING_PRIVATE_KEY` or `AGMEM_SIGNING_PRIVATE_KEY_FILE`. Old commits without `merkle_root` are unverified. |
|
|
259
|
+
| **2** | **Encryption at rest** | Optional AES-256-GCM for object contents; key from passphrase via Argon2id; hash-then-encrypt preserves deduplication. Config in `.mem/encryption.json` or repo config; opt-in. |
|
|
260
|
+
| **3** | **Tamper-evident audit trail** | Append-only, hash-chained log in `.mem/audit/` for init, add, commit, checkout, merge, push, pull, config. **Commands:** `agmem audit` (show entries), `agmem audit --verify` (verify chain). |
|
|
261
|
+
|
|
262
|
+
### Tier 2 — Multi-agent collaboration
|
|
263
|
+
|
|
264
|
+
| # | Feature | Description |
|
|
265
|
+
|---|---------|-------------|
|
|
266
|
+
| **4** | **Multi-agent trust and identity** | Trust store (full / conditional / untrusted) per public key; applied on pull and merge. Clone copies remote public keys; user adds them to trust store. Identity = keypair (same as commit signing). |
|
|
267
|
+
| **5** | **Federated memory collaboration** | Agents share summaries or aggregated updates via a coordinator. **Command:** `agmem federated push` / `agmem federated pull` (stub). Config: `federated.enabled`, `coordinator_url`. |
|
|
268
|
+
| **6** | **Conflict resolution interface** | Structured resolution: ours / theirs / both per path. **Command:** `agmem resolve [path]`. Conflicts persisted in `.mem/merge/conflicts.json`; path traversal protected. |
|
|
269
|
+
|
|
270
|
+
### Tier 3 — Privacy
|
|
271
|
+
|
|
272
|
+
| # | Feature | Description |
|
|
273
|
+
|---|---------|-------------|
|
|
274
|
+
| **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`. |
|
|
275
|
+
| **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). |
|
|
276
|
+
|
|
277
|
+
### Tier 4 — Storage and distribution
|
|
278
|
+
|
|
279
|
+
| # | Feature | Description |
|
|
280
|
+
|---|---------|-------------|
|
|
281
|
+
| **9** | **Decentralized storage (IPFS)** | Push/pull via gateway (POST /api/v0/add, GET /ipfs/<cid>). Bundle/unbundle in `memvcs.core.ipfs_remote`; optional `agmem[ipfs]`. |
|
|
282
|
+
| **10** | **Pack files and garbage collection** | Pack loose objects into pack file + index; GC deletes unreachable; ObjectStore reads from pack. **Command:** `agmem gc [--dry-run] [--repack] [--prune-days n]`. |
|
|
283
|
+
| **11** | **Enhanced cloud remote operations** | Push conflict detection; S3/GCS remotes with distributed locking (acquire before push/fetch, release in finally). Config: `lock_table` for S3. |
|
|
284
|
+
|
|
285
|
+
### Tier 5 — Intelligence and retrieval
|
|
286
|
+
|
|
287
|
+
| # | Feature | Description |
|
|
288
|
+
|---|---------|-------------|
|
|
289
|
+
| **12** | **Multi-provider LLM** | `memvcs.core.llm`: OpenAI and Anthropic; factory by config or env. Used by gardener, distiller, consistency checker, merge. Credentials via env (e.g. `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`). |
|
|
290
|
+
| **13** | **Enhanced semantic compression** | Multi-stage pipeline in `memvcs.core.compression_pipeline`: chunk, fact extraction, dedup by hash; hybrid retrieval in strategies. |
|
|
291
|
+
| **14** | **Temporal querying and time-travel** | Point-in-time and range in `memvcs.core.temporal_index`; CLI: `agmem when --from/--to`, `agmem timeline --from/--to`. |
|
|
292
|
+
| **15** | **Cross-memory relationship graph** | Knowledge graph: co-occurrence, causal edges; incremental-update docstring in `knowledge_graph.py`. |
|
|
293
|
+
|
|
294
|
+
### Tier 6 — Operations and maintenance
|
|
295
|
+
|
|
296
|
+
| # | Feature | Description |
|
|
297
|
+
|---|---------|-------------|
|
|
298
|
+
| **16** | **Automated memory health monitoring** | Daemon: configurable `daemon.health_check_interval_seconds` and `AGMEM_DAEMON_HEALTH_INTERVAL`; alert only on verify failure; suggest `agmem fsck`. |
|
|
299
|
+
| **17** | **GPU-accelerated operations** | Vector store `_device()` returns cuda/mps/cpu; model loaded with that device. |
|
|
300
|
+
| **18** | **Test suite and quality** | Tests: crypto (tampered blob, key missing), encryption (wrong key, corrupted ciphertext), privacy budget, pack/GC, ZK prove/verify, federated mock, IPFS bundle; see docs/TEST_REPORT.md. |
|
|
301
|
+
|
|
302
|
+
### New files and config (summary)
|
|
303
|
+
|
|
304
|
+
| Addition | Purpose |
|
|
305
|
+
|----------|---------|
|
|
306
|
+
| `memvcs/core/crypto_verify.py` | Merkle build/verify, Ed25519 sign/verify, Merkle proofs |
|
|
307
|
+
| `memvcs/core/audit.py` | Tamper-evident audit append and verify |
|
|
308
|
+
| `memvcs/core/trust.py` | Trust store (key → level) |
|
|
309
|
+
| `memvcs/core/privacy_budget.py` | Epsilon/delta budget for DP |
|
|
310
|
+
| `memvcs/core/pack.py` | Pack format, index, GC, repack |
|
|
311
|
+
| `memvcs/core/compression_pipeline.py` | Chunk, fact extraction, dedup; hybrid retrieval |
|
|
312
|
+
| `memvcs/core/zk_proofs.py` | Hash/signature-based proofs (keyword, freshness) |
|
|
313
|
+
| `docs/FEDERATED.md` | Coordinator API for federated push/pull |
|
|
314
|
+
| `memvcs/core/encryption.py` | AES-256-GCM, Argon2id, config |
|
|
315
|
+
| `memvcs/core/llm/` | LLM provider interface and OpenAI/Anthropic |
|
|
316
|
+
| `memvcs/core/zk_proofs.py` | ZK proof stubs |
|
|
317
|
+
| `memvcs/core/federated.py` | Federated push/pull stubs |
|
|
318
|
+
| `.mem/audit/` | Audit log |
|
|
319
|
+
| `.mem/keys/` | Public (and optional private) keys |
|
|
320
|
+
| `.mem/trust/` or config | Trust store |
|
|
321
|
+
| `.mem/privacy_budget.json` | DP budget state |
|
|
322
|
+
| `.mem/merge/conflicts.json` | Unresolved merge conflicts |
|
|
323
|
+
| Commit `metadata` | `merkle_root`, `signature` |
|
|
228
324
|
|
|
229
325
|
---
|
|
230
326
|
|
|
@@ -373,10 +469,20 @@ Repository configuration is stored in `.mem/config.json`:
|
|
|
373
469
|
"summarizer_model": "default",
|
|
374
470
|
"max_episode_size": 1048576,
|
|
375
471
|
"consolidation_threshold": 100
|
|
472
|
+
},
|
|
473
|
+
"differential_privacy": {
|
|
474
|
+
"max_epsilon": 1.0,
|
|
475
|
+
"delta": 1e-5
|
|
476
|
+
},
|
|
477
|
+
"federated": {
|
|
478
|
+
"enabled": false,
|
|
479
|
+
"coordinator_url": ""
|
|
376
480
|
}
|
|
377
481
|
}
|
|
378
482
|
```
|
|
379
483
|
|
|
484
|
+
Optional sections: **`differential_privacy`** (for `--private` on distill/garden); **`federated`** (for `agmem federated`); **`signing`** (public key for commit verification); trust store under `.mem/trust/` or config; encryption in `.mem/encryption.json` when enabled.
|
|
485
|
+
|
|
380
486
|
### agmem config (cloud and PII)
|
|
381
487
|
|
|
382
488
|
Optional user/repo config for S3/GCS and PII hooks:
|
|
@@ -438,13 +544,17 @@ mypy memvcs/
|
|
|
438
544
|
- [x] Basic commands (init, add, commit, status, log, diff, show, reset, tag, stash, reflog, blame, tree, clean)
|
|
439
545
|
- [x] HEAD~n resolution; branch/tag names with `/` (Git-style)
|
|
440
546
|
- [x] Branching and checkout; merging with memory-type-aware strategies
|
|
441
|
-
- [x] Remote operations (clone, push, pull, remote) — file:// URLs; pull merges into current branch
|
|
547
|
+
- [x] Remote operations (clone, push, pull, remote) — file:// URLs; pull merges into current branch; push conflict detection
|
|
442
548
|
- [x] Search — semantic with `agmem[vector]`, plain text fallback
|
|
443
549
|
- [x] Knowledge graph (`agmem graph`) — wikilinks, tags, optional similarity; `--no-similarity`, `--serve`
|
|
444
|
-
- [x] Integrity (`agmem fsck`); path/ref/hash validation
|
|
550
|
+
- [x] Integrity (`agmem fsck`); path/ref/hash validation; Merkle/signature verification
|
|
445
551
|
- [x] Web UI (`agmem serve`); MCP server (`agmem mcp`); daemon (`agmem daemon`); garden (`agmem garden`)
|
|
446
|
-
- [
|
|
447
|
-
- [
|
|
552
|
+
- [x] Cryptographic commit verification (Merkle tree, Ed25519 signing, verify on checkout/pull/fsck)
|
|
553
|
+
- [x] Tamper-evident audit trail (`agmem audit`); multi-agent trust store; conflict resolution (`agmem resolve`)
|
|
554
|
+
- [x] Encryption at rest (optional AES-256-GCM); differential privacy budget (`--private` on distill/garden)
|
|
555
|
+
- [x] Pack files and garbage collection (`agmem gc`); ZK proofs and federated stubs (`agmem prove`, `agmem federated`)
|
|
556
|
+
- [x] Multi-provider LLM (OpenAI, Anthropic); temporal range queries; daemon health checks; GPU detection; test suite and CI
|
|
557
|
+
- [ ] IPFS remote (stub in place); full ZK circuits and federated coordinator
|
|
448
558
|
|
|
449
559
|
## Integrations
|
|
450
560
|
|
|
@@ -537,8 +647,10 @@ agmem graph --serve # Serve knowledge graph UI (same extra)
|
|
|
537
647
|
|
|
538
648
|
- **Full history:** `agmem log`, `agmem reflog`
|
|
539
649
|
- **Line-level attribution:** `agmem blame <file>` — see which commit and author last changed each line (e.g. `agmem blame current/semantic/user-preferences.md`)
|
|
650
|
+
- **Tamper-evident audit:** `agmem audit` and `agmem audit --verify` for hash-chained operation log
|
|
651
|
+
- **Cryptographic verification:** `agmem verify --crypto` and `agmem fsck` for Merkle roots and Ed25519 signatures
|
|
540
652
|
- **Visual audit:** `agmem serve` for browser-based history and diff viewer
|
|
541
|
-
- **Integrity:** `agmem fsck` to verify objects and
|
|
653
|
+
- **Integrity:** `agmem fsck` to verify objects, refs, and commit signatures
|
|
542
654
|
|
|
543
655
|
## Ecosystem Plugin Patterns
|
|
544
656
|
|