agmem 0.1.5__py3-none-any.whl → 0.2.0__py3-none-any.whl

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.
@@ -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
@@ -1,5 +1,5 @@
1
- agmem-0.1.5.dist-info/licenses/LICENSE,sha256=X_S6RBErW-F0IDbM3FAEoDB-zxExFnl2m8640rTXphM,1067
2
- memvcs/__init__.py,sha256=mXwHTSlUPWo4ERqJLGJnxmxtGQQHPSbXb4IpO61l04M,193
1
+ agmem-0.2.0.dist-info/licenses/LICENSE,sha256=X_S6RBErW-F0IDbM3FAEoDB-zxExFnl2m8640rTXphM,1067
2
+ memvcs/__init__.py,sha256=pheWPxubHVcp2N6vk6M7hGXgkJQ06KajbWgCpOlUSJ8,193
3
3
  memvcs/cli.py,sha256=YF06oMNjKWUmiNahILmfjrIXgoXzU-5BJFmbunSb8Sc,6075
4
4
  memvcs/commands/__init__.py,sha256=A2D6xWaO6epU7iV4QSvqvF5TspnwRyDN7NojmGatPrE,510
5
5
  memvcs/commands/add.py,sha256=k9eM7qf2NFvneiJkFQNiAYFB2GgKmyPw_NXmkCxblQE,8736
@@ -11,10 +11,10 @@ memvcs/commands/checkout.py,sha256=xaYZSbCQ-MyLWPtwA2FdH6WqGMI3oF3R2JmCufGBVFg,3
11
11
  memvcs/commands/clean.py,sha256=e0OhSQdHfFnOPTRbyKbM8IcX4yJD5n_kaBKjIeoaRBo,1973
12
12
  memvcs/commands/clone.py,sha256=aB0LcugIWJE9IEez6y70KlpZu4eIF2EdXZxE24jXyac,3260
13
13
  memvcs/commands/commit.py,sha256=W4ulVZuEETJh1SHpscaQfNjyQMqeIE0AYZIbMbTrsq4,6801
14
- memvcs/commands/daemon.py,sha256=fV6aIz8bFP9VwB_MLudAb_lhhhBxSe2aV-Wjqe-nvPw,10708
14
+ memvcs/commands/daemon.py,sha256=FlPBh41v-S__QhC68FzRYbsumARQgLbP2904k7jaZ6k,12522
15
15
  memvcs/commands/decay.py,sha256=QcgOTMJZxrfw_AOz94YHA3LGoNXRMDn69TxWlUrpSw4,2421
16
16
  memvcs/commands/diff.py,sha256=KcgD57_fae4uvQ8G9ZbXmLpAYYIDiWiBuVcjsDtyE1U,5480
17
- memvcs/commands/distill.py,sha256=reOldqg0lMgqIlpYEIKYfN_TxNwsjU9RnI8Uah1VqTQ,3088
17
+ memvcs/commands/distill.py,sha256=eO9n2KxBaIhdvKBnqcrgYH5aoJ7dR5C2WNge_z6ITlw,3330
18
18
  memvcs/commands/federated.py,sha256=Zj4kxHnjdIs1xu4v7B8XosQXNYK8Alv4I0kJQpmJe6Y,1840
19
19
  memvcs/commands/fsck.py,sha256=AdJBMLA2myQ0cJJcjUgsYptsE3qvX4JQc9UAwVmSHlA,7772
20
20
  memvcs/commands/garden.py,sha256=8JiLe3JRkOhY-N-h-IDuvdJiECiSElnUzXVtxtU2QgY,4050
@@ -46,6 +46,8 @@ memvcs/commands/timeline.py,sha256=JkuhsQ-6wPWbsjlbJb_qM4mEkxkxcWWzniXXQB4Qtec,4
46
46
  memvcs/commands/tree.py,sha256=vdULq4vIXA_4gNfMnHn_Y78BwE0sJoeTBOnFJR3WsZ4,4927
47
47
  memvcs/commands/verify.py,sha256=04CVW5NYWkUlPJ5z1Kci6dfQFM6UmPTGZh9ZextFLMc,3887
48
48
  memvcs/commands/when.py,sha256=bxG_tEYnZNBTl2IPkoxpc2LUEbO_5ev1hRvEzxQQDmc,4773
49
+ memvcs/coordinator/__init__.py,sha256=XJEXEXJFvvhtRInPeyAC9bFNXGbshSrtuK6wZo3wS6g,139
50
+ memvcs/coordinator/server.py,sha256=-kCEyqUi7eLC45qqkH1KCk8zZk8T1NdJyffOY8133ec,7045
49
51
  memvcs/core/__init__.py,sha256=dkIC-4tS0GhwV2mZIbofEe8xR8uiFwrxslGf1aXwhYg,493
50
52
  memvcs/core/access_index.py,sha256=HhacnzSUASzRV2jhDHkwRFoPS3rtqh9n9yE1VV7JXpk,5596
51
53
  memvcs/core/audit.py,sha256=8APkm9Spl_-1rIdyRQz1elyxOeK3nlpwm0CLkpLlhTE,3732
@@ -55,8 +57,9 @@ memvcs/core/consistency.py,sha256=YOG8xhqZLKZCLbai2rdcP0KxYPNGFv5RRMwrQ6qCeyc,74
55
57
  memvcs/core/constants.py,sha256=WUjAb50BFcF0mbFi_GNteDLCxLihmViBm9Fb-JMPmbM,220
56
58
  memvcs/core/crypto_verify.py,sha256=DTuC7Kfx6z2b8UWOWziBTqP633LrjXbdtGmBBqrJTF0,10424
57
59
  memvcs/core/decay.py,sha256=ROGwnqngs7eJNkbKmwyOdij607m73vpmoJqzrIDLBzk,6581
60
+ memvcs/core/delta.py,sha256=obXzojUSc2HaEUqH3L_1LF-GcJ63Wr_yYvIPM8iyeSg,7865
58
61
  memvcs/core/diff.py,sha256=koEHTLciIUxYKVJVuvmY0GDXMgDgGZP_qg5RayhF-iE,13226
59
- memvcs/core/distiller.py,sha256=ZOmrwYYhOla8rZncQP_0y0Ab9jCl3GjtdoH82HkXlsw,12621
62
+ memvcs/core/distiller.py,sha256=QA4acLc005cLac09IvIaog1fJt5IGXWRiSdZq_Ya27g,14086
60
63
  memvcs/core/encryption.py,sha256=epny_nlW6ylllv1qxs1mAcFq-PrLIisgfot4llOoAqw,5289
61
64
  memvcs/core/federated.py,sha256=vUYMZ0xv80hqGDRKq645Od1i8N33l-pIAkklJbJUlVg,5445
62
65
  memvcs/core/gardener.py,sha256=lBWkyE72O-JMiHM-oqrnex9k_xSv7FvztjkOdLdB0Kk,18610
@@ -65,11 +68,11 @@ memvcs/core/ipfs_remote.py,sha256=xmEO14bn_7Ej-W5jhx2QJyBd-ljj9S2COOxMmcZBiTs,66
65
68
  memvcs/core/knowledge_graph.py,sha256=GY27e1rgraF2zMpz_jsumdUtpgTRk48yH5CAEQ3TDl4,16416
66
69
  memvcs/core/merge.py,sha256=x2eSaxr4f63Eq00FCJ6DDe2TZU8H5yHQpzKzMhYsaFw,19871
67
70
  memvcs/core/objects.py,sha256=Xgw1IpQnJLCG5o_7gDHVQ-TNGR9CSpDYWRXzLgLSuec,11006
68
- memvcs/core/pack.py,sha256=nTzpPNNk47e7_oN3z7bjaichpzI7q-ql2E8eI2UuGyM,9828
71
+ memvcs/core/pack.py,sha256=Kq0hyMNroT0MwiS4pVJVuJO9nZ04P3wssep2tADvnpQ,15950
69
72
  memvcs/core/pii_scanner.py,sha256=T6gQ1APFrSDk980fjnv4ZMF-UztbJgmUFSwGrwWixEw,10802
70
73
  memvcs/core/privacy_budget.py,sha256=fOPlxoKEAmsKtda-OJCrSaKjTyw7ekcqdN7KfRBw1CY,2113
71
74
  memvcs/core/refs.py,sha256=4Nx2ZVRa_DzfUZ4O1AwzOHEjoGAEICJKqSd9GxaiD_g,16754
72
- memvcs/core/remote.py,sha256=1PINc6qYBIHRkNLMS8MLWM5DJIrX81uIfRrV6fXwwro,19495
75
+ memvcs/core/remote.py,sha256=sZbAO9JEaDJM96PylB0CjpmR5UxWYdoXlq86sj3R2gU,22228
73
76
  memvcs/core/repository.py,sha256=NzC2UFPv6ePxi5lfiSKyZFLclH4bJpWJz88pY7tDiv4,20605
74
77
  memvcs/core/schema.py,sha256=_CrEWCdArc0yDJ04GT7fyvjHqkal7gegdFSsFOjVpBc,15287
75
78
  memvcs/core/staging.py,sha256=dptdGi_74lhDkcGqGVU39ZyTkb25j-Rnkz0GWi83W1k,7221
@@ -77,7 +80,7 @@ memvcs/core/temporal_index.py,sha256=81hZHlVElp2UpXjseFVCdDUwxGM45zIU-y1dDlOhFHI
77
80
  memvcs/core/test_runner.py,sha256=7-0jCvji63JRbVfy3LNQWIQ7VL5weulOoG7SY1-YJbw,11496
78
81
  memvcs/core/trust.py,sha256=msx80Cl3bxyQTY8mFUKWY9P6l3zb1s8FafympgHwtpo,3494
79
82
  memvcs/core/vector_store.py,sha256=yUAp5BlaAtjkrtsdY1I-vmAp_YIFgJykBoNlp5hcg0I,11063
80
- memvcs/core/zk_proofs.py,sha256=j9AyHucYe9tOSrlxDeUMGgpRHMvNFOl8s4Q0AQHLKP0,5514
83
+ memvcs/core/zk_proofs.py,sha256=tvJnj5oLTNQ_wFIGcMuuVF5faigIX_32U_HojNMoNp0,7623
81
84
  memvcs/core/llm/__init__.py,sha256=vnjtE9Xlv9a2pZV88DMT9JaINkZ30hC9VLPL5lJRlps,236
82
85
  memvcs/core/llm/anthropic_provider.py,sha256=O1eaCb9r464ajLJz-Gy8lGxBie5ojRUZ_5HdgRXO5KY,1540
83
86
  memvcs/core/llm/base.py,sha256=qPzg3KPAMeoyWGc_2JoVR4-plpdft5Rc2g9uO-Z4fJQ,623
@@ -88,6 +91,8 @@ memvcs/core/storage/base.py,sha256=IK4To8Cb-LHv5ltlaQLdB6LE-69euFK3hNqBtMCe7-g,9
88
91
  memvcs/core/storage/gcs.py,sha256=-cWuGw1jkFh-Xig-Abmwr9HGwjW5lWQJuF2xcAR1l78,10632
89
92
  memvcs/core/storage/local.py,sha256=JAik9nta6RMe4mD7aMtgdFi8M4iZCeTqiP8pPisaO6U,6028
90
93
  memvcs/core/storage/s3.py,sha256=tY5rfz8FfkRRNaHOPX7Wk6yXdBBBhKV0Ju2qnBtHxeU,13814
94
+ memvcs/health/__init__.py,sha256=YuxF8hVHJHNilAvVa0maptFLBWm4hcBymMjpA2dFJVU,546
95
+ memvcs/health/monitor.py,sha256=2JQqkR6n0e5L-gsU97FEB3rxjrCNAaGRNFpa7LKZtOg,15545
91
96
  memvcs/integrations/__init__.py,sha256=hVtJoFaXt6ErAZwctcSBDZLXRHFs1CNgtltIBQiroQ0,103
92
97
  memvcs/integrations/mcp_server.py,sha256=PxBYJnbzPs6bcFH6EmH5jQqbu_9Vy5eSAA8ruWTn2Q4,9061
93
98
  memvcs/integrations/web_ui/__init__.py,sha256=MQIfgDKDgPctlcTUjwkwueS_MDsDssVRmIUnpECGS0k,51
@@ -99,8 +104,8 @@ memvcs/retrieval/recaller.py,sha256=8KY-XjMUz5_vcKf46zI64uk1DEM__u7wM92ShukOtsY,
99
104
  memvcs/retrieval/strategies.py,sha256=26yxQQubQfjxWQXknfVMxuzPHf2EcZxJg_B99BEdl5c,11458
100
105
  memvcs/utils/__init__.py,sha256=8psUzz4Ntv2GzbRebkeVsoyC6Ck-FIwi0_lfYdj5oho,185
101
106
  memvcs/utils/helpers.py,sha256=37zg_DcQ2y99b9NSLqxFkglHe13rJXKhFDpEbQ7iLhM,4121
102
- agmem-0.1.5.dist-info/METADATA,sha256=q_9dsCFXbo9DGn6Hx4-7A9T3aHq9Sc5nS7ldEoazAdc,37487
103
- agmem-0.1.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
104
- agmem-0.1.5.dist-info/entry_points.txt,sha256=at7eWycgjqOo1wbUMECnXUsNo3gpCkJTU71OzrGLHu0,42
105
- agmem-0.1.5.dist-info/top_level.txt,sha256=HtMMsKuwLKLOdgF1GxqQztqFM54tTJctVdJuOec6B-4,7
106
- agmem-0.1.5.dist-info/RECORD,,
107
+ agmem-0.2.0.dist-info/METADATA,sha256=Oh9LOeoQR_A9ZXrdrkt-sTFoiYA-peWVHvpVaUYncns,42100
108
+ agmem-0.2.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
109
+ agmem-0.2.0.dist-info/entry_points.txt,sha256=at7eWycgjqOo1wbUMECnXUsNo3gpCkJTU71OzrGLHu0,42
110
+ agmem-0.2.0.dist-info/top_level.txt,sha256=HtMMsKuwLKLOdgF1GxqQztqFM54tTJctVdJuOec6B-4,7
111
+ agmem-0.2.0.dist-info/RECORD,,
memvcs/__init__.py CHANGED
@@ -4,6 +4,6 @@ agmem - Agentic Memory Version Control System
4
4
  A Git-inspired version control system for AI agent memory artifacts.
5
5
  """
6
6
 
7
- __version__ = "0.1.3"
7
+ __version__ = "0.1.6"
8
8
  __author__ = "agmem Team"
9
9
  __license__ = "MIT"
memvcs/commands/daemon.py CHANGED
@@ -227,11 +227,12 @@ class DaemonCommand:
227
227
  while running:
228
228
  time.sleep(1)
229
229
 
230
- # Periodic health check (Merkle/signature, optional). Alert only; no destructive action.
230
+ # Periodic health check (Merkle/signature + operational metrics). Alert only; no destructive action.
231
231
  if (
232
232
  health_check_interval
233
233
  and (time.time() - last_health_check) >= health_check_interval
234
234
  ):
235
+ # Cryptographic integrity check
235
236
  try:
236
237
  from ..core.crypto_verify import verify_commit, load_public_key
237
238
 
@@ -251,6 +252,41 @@ class DaemonCommand:
251
252
  sys.stderr.write("Run 'agmem fsck' for safe integrity check.\n")
252
253
  except Exception:
253
254
  pass
255
+
256
+ # Operational health checks (storage, redundancy, stale memory, graph consistency)
257
+ try:
258
+ from ..health.monitor import HealthMonitor
259
+
260
+ health_monitor = HealthMonitor(repo.root)
261
+ report = health_monitor.perform_all_checks()
262
+
263
+ if report.get("warnings"):
264
+ for warning in report["warnings"]:
265
+ sys.stderr.write(f"Health warning: {warning}\n")
266
+
267
+ # Log summary metrics
268
+ if report.get("storage"):
269
+ storage = report["storage"]
270
+ if "total_size_mb" in storage:
271
+ sys.stderr.write(
272
+ f"Storage: {storage['total_size_mb']:.1f}MB "
273
+ f"({storage['packed_objects']} packed objects)\n"
274
+ )
275
+ if report.get("redundancy"):
276
+ red = report["redundancy"]
277
+ if "redundancy_percentage" in red:
278
+ sys.stderr.write(
279
+ f"Redundancy: {red['redundancy_percentage']:.1f}%\n"
280
+ )
281
+ if report.get("stale_memory"):
282
+ stale = report["stale_memory"]
283
+ if "stale_percentage" in stale:
284
+ sys.stderr.write(
285
+ f"Stale memory: {stale['stale_percentage']:.1f}%\n"
286
+ )
287
+ except Exception:
288
+ pass
289
+
254
290
  last_health_check = time.time()
255
291
 
256
292
  if handler.pending:
@@ -46,6 +46,11 @@ class DistillCommand:
46
46
  action="store_true",
47
47
  help="Use differential privacy (spend epsilon from budget)",
48
48
  )
49
+ parser.add_argument(
50
+ "--no-compress",
51
+ action="store_true",
52
+ help="Disable compression pipeline preprocessing",
53
+ )
49
54
 
50
55
  @staticmethod
51
56
  def execute(args) -> int:
@@ -73,6 +78,7 @@ class DistillCommand:
73
78
  source_dir=args.source,
74
79
  target_dir=args.target,
75
80
  create_safety_branch=not args.no_branch,
81
+ use_compression_pipeline=not getattr(args, "no_compress", False),
76
82
  use_dp=use_dp,
77
83
  dp_epsilon=dp_epsilon,
78
84
  dp_delta=dp_delta,
@@ -0,0 +1,5 @@
1
+ """Coordinator package for federated collaboration."""
2
+
3
+ from .server import app, FASTAPI_AVAILABLE
4
+
5
+ __all__ = ["app", "FASTAPI_AVAILABLE"]