alma-memory 0.5.0__py3-none-any.whl → 0.5.1__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.
- alma/__init__.py +33 -1
- alma/core.py +124 -16
- alma/extraction/auto_learner.py +4 -3
- alma/graph/__init__.py +26 -1
- alma/graph/backends/__init__.py +14 -0
- alma/graph/backends/kuzu.py +624 -0
- alma/graph/backends/memgraph.py +432 -0
- alma/integration/claude_agents.py +22 -10
- alma/learning/protocols.py +3 -3
- alma/mcp/tools.py +9 -11
- alma/observability/__init__.py +84 -0
- alma/observability/config.py +302 -0
- alma/observability/logging.py +424 -0
- alma/observability/metrics.py +583 -0
- alma/observability/tracing.py +440 -0
- alma/retrieval/engine.py +65 -4
- alma/storage/__init__.py +29 -0
- alma/storage/azure_cosmos.py +343 -132
- alma/storage/base.py +58 -0
- alma/storage/constants.py +103 -0
- alma/storage/file_based.py +3 -8
- alma/storage/migrations/__init__.py +21 -0
- alma/storage/migrations/base.py +321 -0
- alma/storage/migrations/runner.py +323 -0
- alma/storage/migrations/version_stores.py +337 -0
- alma/storage/migrations/versions/__init__.py +11 -0
- alma/storage/migrations/versions/v1_0_0.py +373 -0
- alma/storage/postgresql.py +185 -78
- alma/storage/sqlite_local.py +149 -50
- alma/testing/__init__.py +46 -0
- alma/testing/factories.py +301 -0
- alma/testing/mocks.py +389 -0
- {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/METADATA +42 -8
- {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/RECORD +36 -19
- {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/WHEEL +0 -0
- {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alma-memory
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Agent Learning Memory Architecture - Persistent memory for AI agents
|
|
5
5
|
Author-email: RBKunnela <aiagentsprompt@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -41,6 +41,10 @@ Requires-Dist: pinecone>=3.0.0; extra == "pinecone"
|
|
|
41
41
|
Provides-Extra: mcp
|
|
42
42
|
Requires-Dist: pydantic>=2.0.0; extra == "mcp"
|
|
43
43
|
Requires-Dist: aiohttp>=3.9.0; extra == "mcp"
|
|
44
|
+
Provides-Extra: observability
|
|
45
|
+
Requires-Dist: opentelemetry-api>=1.20.0; extra == "observability"
|
|
46
|
+
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == "observability"
|
|
47
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.20.0; extra == "observability"
|
|
44
48
|
Provides-Extra: dev
|
|
45
49
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
46
50
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
@@ -52,7 +56,7 @@ Requires-Dist: black>=24.0.0; extra == "dev"
|
|
|
52
56
|
Requires-Dist: bandit[toml]>=1.7.0; extra == "dev"
|
|
53
57
|
Requires-Dist: numpy>=1.24.0; extra == "dev"
|
|
54
58
|
Provides-Extra: all
|
|
55
|
-
Requires-Dist: alma-memory[azure,chroma,dev,local,mcp,pinecone,postgres,qdrant]; extra == "all"
|
|
59
|
+
Requires-Dist: alma-memory[azure,chroma,dev,local,mcp,observability,pinecone,postgres,qdrant]; extra == "all"
|
|
56
60
|
|
|
57
61
|
# ALMA - Agent Learning Memory Architecture
|
|
58
62
|
|
|
@@ -79,7 +83,7 @@ ALMA isn't just another memory framework. Here's what sets it apart from alterna
|
|
|
79
83
|
| **Event System** | Webhooks + in-process callbacks | None | React to memory changes in real-time |
|
|
80
84
|
| **TypeScript SDK** | Full-featured client library | None | First-class JavaScript/TypeScript support |
|
|
81
85
|
| **Vector DB Support** | 6 backends (PostgreSQL, Qdrant, Pinecone, Chroma, SQLite, Azure) | Limited | Deploy anywhere |
|
|
82
|
-
| **Graph Memory** | Pluggable backends (Neo4j, In-memory) | Limited | Entity relationship tracking |
|
|
86
|
+
| **Graph Memory** | Pluggable backends (Neo4j, Memgraph, Kuzu, In-memory) | Limited | Entity relationship tracking |
|
|
83
87
|
| **Harness Pattern** | Decouples agent from domain memory | None | Reusable agent architecture |
|
|
84
88
|
| **MCP Integration** | Native stdio/HTTP server | None | Direct Claude Code integration |
|
|
85
89
|
| **Domain Memory Factory** | 6 pre-built schemas | None | Instant setup for any domain |
|
|
@@ -111,9 +115,16 @@ ALMA isn't just another memory framework. Here's what sets it apart from alterna
|
|
|
111
115
|
- **Graph Database Abstraction** (`alma/graph/`)
|
|
112
116
|
- Pluggable `GraphBackend` interface
|
|
113
117
|
- Neo4j backend for production
|
|
118
|
+
- Memgraph backend for high-performance in-memory graphs
|
|
119
|
+
- Kuzu backend for embedded graph storage (no server required)
|
|
114
120
|
- In-memory backend for testing
|
|
115
121
|
- Factory function `create_graph_backend()` for easy setup
|
|
116
122
|
|
|
123
|
+
- **Testing Module** (`alma/testing/`)
|
|
124
|
+
- `MockStorage` - In-memory storage backend for isolated testing
|
|
125
|
+
- `MockEmbedder` - Deterministic fake embedding provider
|
|
126
|
+
- Factory functions for creating test data with sensible defaults
|
|
127
|
+
|
|
117
128
|
### Phase 1: Core Features
|
|
118
129
|
|
|
119
130
|
- **Memory Consolidation Engine** (`alma/consolidation/`)
|
|
@@ -434,14 +445,23 @@ Capture entity relationships for complex reasoning:
|
|
|
434
445
|
```python
|
|
435
446
|
from alma.graph import create_graph_backend, BackendGraphStore, EntityExtractor
|
|
436
447
|
|
|
437
|
-
# Create graph backend
|
|
448
|
+
# Create graph backend - multiple options available:
|
|
449
|
+
|
|
450
|
+
# Neo4j (production, hosted)
|
|
438
451
|
backend = create_graph_backend(
|
|
439
452
|
"neo4j",
|
|
440
453
|
uri="neo4j+s://xxx.databases.neo4j.io",
|
|
441
454
|
username="neo4j",
|
|
442
455
|
password="your-password"
|
|
443
456
|
)
|
|
444
|
-
|
|
457
|
+
|
|
458
|
+
# Memgraph (high-performance, in-memory)
|
|
459
|
+
# backend = create_graph_backend("memgraph", uri="bolt://localhost:7687")
|
|
460
|
+
|
|
461
|
+
# Kuzu (embedded, no server required)
|
|
462
|
+
# backend = create_graph_backend("kuzu", database_path="./my_graph_db")
|
|
463
|
+
|
|
464
|
+
# In-memory (testing)
|
|
445
465
|
# backend = create_graph_backend("memory")
|
|
446
466
|
|
|
447
467
|
# Create store with backend
|
|
@@ -693,9 +713,12 @@ print(f"Recommendation: {signal.recommendation}")
|
|
|
693
713
|
| +---------------+ +------------------+ +---------------+ |
|
|
694
714
|
+-------------------------------------------------------------------------+
|
|
695
715
|
| GRAPH LAYER |
|
|
696
|
-
| +---------------+ +------------------+
|
|
697
|
-
| | Neo4j | |
|
|
698
|
-
| +---------------+ +------------------+
|
|
716
|
+
| +---------------+ +------------------+ +---------------+ |
|
|
717
|
+
| | Neo4j | | Memgraph | | Kuzu | |
|
|
718
|
+
| +---------------+ +------------------+ +---------------+ |
|
|
719
|
+
| +---------------+ |
|
|
720
|
+
| | In-Memory | |
|
|
721
|
+
| +---------------+ |
|
|
699
722
|
+-------------------------------------------------------------------------+
|
|
700
723
|
| INTEGRATION LAYER |
|
|
701
724
|
| +-------------------------------------------------------------------+ |
|
|
@@ -819,6 +842,7 @@ chroma:
|
|
|
819
842
|
| Pinecone Backend | Serverless vector DB | Done |
|
|
820
843
|
| Chroma Backend | Lightweight vector DB | Done |
|
|
821
844
|
| Graph Abstraction | Pluggable graph backends | Done |
|
|
845
|
+
| Testing Module | Mocks and factories for testing | Done |
|
|
822
846
|
|
|
823
847
|
---
|
|
824
848
|
|
|
@@ -850,6 +874,16 @@ docker run -p 6333:6333 qdrant/qdrant
|
|
|
850
874
|
- Ensure `embedding_dim` in config matches your embedding provider
|
|
851
875
|
- Local: 384, Azure text-embedding-3-small: 1536
|
|
852
876
|
|
|
877
|
+
**Memgraph connection refused**
|
|
878
|
+
```bash
|
|
879
|
+
# Start Memgraph with Docker
|
|
880
|
+
docker run -p 7687:7687 memgraph/memgraph-mage
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
**Kuzu database locked**
|
|
884
|
+
- Ensure only one process accesses the database at a time
|
|
885
|
+
- Use `read_only=True` for concurrent read access
|
|
886
|
+
|
|
853
887
|
### Debug Logging
|
|
854
888
|
|
|
855
889
|
```python
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
alma/__init__.py,sha256=
|
|
2
|
-
alma/core.py,sha256=
|
|
1
|
+
alma/__init__.py,sha256=kki36AOOriED4U04-qvRSgjrZLGiz7NPdoKFXesQGZc,4770
|
|
2
|
+
alma/core.py,sha256=4JhEMh-xDZnU84hXtZXHd4uHuo-JWFzzOSEVcCnCVbI,13276
|
|
3
3
|
alma/exceptions.py,sha256=chGNPmOUWJnx-9-fAtBZIBLBeFmINTHuzqsejt_rrk4,873
|
|
4
4
|
alma/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
alma/types.py,sha256=708rjkZwOfI7PgvfK0N2UyIMpjzi6Jf0vVilfEyWKbM,8167
|
|
@@ -21,13 +21,15 @@ alma/events/storage_mixin.py,sha256=t4Y1BCv3CTz_0FoJtAblf4s_qIWK3hrNAH4CLqc2DTo,
|
|
|
21
21
|
alma/events/types.py,sha256=DGJe8W5DNs8SHYRbwdgV7OoRF952HoEVz0T9dv5A-LA,3795
|
|
22
22
|
alma/events/webhook.py,sha256=eavcXDTYKYu3GueDrAd0L8JFUkLczjNgmZJpiia0Rvw,12983
|
|
23
23
|
alma/extraction/__init__.py,sha256=2ZYxMAjjbgvWvtMn4flCsFla7OSR45bMtuUDuRRlG9E,597
|
|
24
|
-
alma/extraction/auto_learner.py,sha256=
|
|
24
|
+
alma/extraction/auto_learner.py,sha256=SzB1bnUvza7zQ4c62e2uCv0BH4SGk89Pt7Qvp6sihMo,9145
|
|
25
25
|
alma/extraction/extractor.py,sha256=2VC4tcnHAF1zjax7MI09jb9Q3dUmWxFeBLOMd-7Aj1E,13160
|
|
26
|
-
alma/graph/__init__.py,sha256=
|
|
26
|
+
alma/graph/__init__.py,sha256=pvX_r8Ss8vahFbJGCLbqXPCEmJ8V7pTimta0WPteIV8,2673
|
|
27
27
|
alma/graph/base.py,sha256=A3yqNI4DiY0D3MuNaa6Sv41hfzzqwrs38ahs6qcaD-g,4042
|
|
28
28
|
alma/graph/extraction.py,sha256=Esb4jRHAJxE3QRutSpasMmRKq_MMDQtcMOnHeahLcZY,6063
|
|
29
29
|
alma/graph/store.py,sha256=V9KjfFaKagOxD2FYITrjnQgDdu9U2z4wetHBnXhqROc,28450
|
|
30
|
-
alma/graph/backends/__init__.py,sha256=
|
|
30
|
+
alma/graph/backends/__init__.py,sha256=RdrLSwZGeG5MGBrb9uGI-lAzl_90ggnih1yNbtYupts,870
|
|
31
|
+
alma/graph/backends/kuzu.py,sha256=F3cnRI7V-HdMQ0duXBFZmLrUhx-Fd5kAIWy5kQvvvYw,21172
|
|
32
|
+
alma/graph/backends/memgraph.py,sha256=m3m0Ajoqof_eFTgwH7B5JeV3a2EWGd0axpat93mhGyo,15245
|
|
31
33
|
alma/graph/backends/memory.py,sha256=qdb8ixGHZKMqs6673sCJORteD6KaTLDpXhs8fJS2oQs,8218
|
|
32
34
|
alma/graph/backends/neo4j.py,sha256=gSL813Et0lEx8zrLv6R5mgq651ZMcnJPN__iPhF561o,14347
|
|
33
35
|
alma/harness/__init__.py,sha256=ZuORMt41ArCXlLcrpaCuHW3BUvH27YcxWRnqQ6ZXiMo,684
|
|
@@ -37,40 +39,55 @@ alma/initializer/__init__.py,sha256=VhG5hSgdselyToBnvixcyjrTtsnNhVvWdi7kfUVc0RM,
|
|
|
37
39
|
alma/initializer/initializer.py,sha256=2SyHgreopClPQ0loyA29lcJp_pK1ssubK2529cQk8hc,13204
|
|
38
40
|
alma/initializer/types.py,sha256=ADeWwyqiG9uI0DkukDNGA81JNeCPfY6m__LsKgXQmZA,7875
|
|
39
41
|
alma/integration/__init__.py,sha256=YhJSurb10eOlh227HqqgCtzayDljbmjI2dn347HVua0,1276
|
|
40
|
-
alma/integration/claude_agents.py,sha256
|
|
42
|
+
alma/integration/claude_agents.py,sha256=cJTDgidqTX5no92yPG2ZXSzCJjcP1tbvaEAO-7VT784,13647
|
|
41
43
|
alma/integration/helena.py,sha256=BcTvac8vGmbHwogAbNMQsZssMOlBT-DxwLKWPfPXie4,12099
|
|
42
44
|
alma/integration/victor.py,sha256=DR_6RLj1hpNHnTUC5jhWo59WQr7qDF6VOtn98cyxhoo,13527
|
|
43
45
|
alma/learning/__init__.py,sha256=XH3H-vEMY1TOBQxiC3H6c_iWtzR8xrQH9PqQL1vv6b4,1870
|
|
44
46
|
alma/learning/forgetting.py,sha256=TSBZ0Ad8hJEIPXteXse78czyPQBDEiPgNAvkH__e9bg,46546
|
|
45
47
|
alma/learning/heuristic_extractor.py,sha256=FO-TIS1NQZUdQXuD924-2odw7GQETRxchxjxk-fzYGs,12084
|
|
46
|
-
alma/learning/protocols.py,sha256=
|
|
48
|
+
alma/learning/protocols.py,sha256=OSYAo5r9o3Zx6wGyKGcN_4qq0QOJQfj5Y_2awlArvPw,12239
|
|
47
49
|
alma/learning/validation.py,sha256=i_-TmoDyBXVHjAiEQnb1QtliuLxNsbxwud3C0IoaHjY,11065
|
|
48
50
|
alma/mcp/__init__.py,sha256=Qr913n8XG02abbBs78mMKKLo3VzVJMt71TehAhuhqrE,947
|
|
49
51
|
alma/mcp/__main__.py,sha256=ySdPB2MK-Mau6ofOlAsIv-jIXuyMpUpJuoNbj-GEqwA,3954
|
|
50
52
|
alma/mcp/resources.py,sha256=5YxoTCgzBzFoP07US_ZuBPnrL7F0t9WAX5Cins7XJf8,3499
|
|
51
53
|
alma/mcp/server.py,sha256=5qBk35JDvWwh6e8xNl7mj_L7O3NpfeRkPqo_Mm7k7pk,21541
|
|
52
|
-
alma/mcp/tools.py,sha256=
|
|
54
|
+
alma/mcp/tools.py,sha256=wbHJ9-fyz_mH9F-kfFpP6JDtxBPMjTflWTwpdUtWuPk,14566
|
|
55
|
+
alma/observability/__init__.py,sha256=nnWZ5jKNW45fageF6y0rm6CDA4dcqqvChAWAhORiRlI,1831
|
|
56
|
+
alma/observability/config.py,sha256=Kphbd5j6voJMcgpKWZHZuM6oJt_XIrUozde0sgtkXw0,10423
|
|
57
|
+
alma/observability/logging.py,sha256=v-K1nviFwwIVPIgtwzqAUJizFQ_60nq04KkoaJV-cXI,12275
|
|
58
|
+
alma/observability/metrics.py,sha256=GJdtIefL7k_WzHZO2FIJ6NoIs_zDeu2olM8_LZCRQx4,17707
|
|
59
|
+
alma/observability/tracing.py,sha256=7hplIcF0-kw_2tq6kFK6DBA6qLl_ziQiRbVVTRVZ6FA,13300
|
|
53
60
|
alma/progress/__init__.py,sha256=0VqMDlICHRHrYFAp-HzNVaN1JikST--kFGDd7803WGk,371
|
|
54
61
|
alma/progress/tracker.py,sha256=0E7YghcEHiw1Gorm28ON7SBOlVb7SXSHUHy8cGeMg0k,19290
|
|
55
62
|
alma/progress/types.py,sha256=sxouhkNO6OLmDuhrPnn6uqEEwOj6nLZeRh-krgTh4nA,7026
|
|
56
63
|
alma/retrieval/__init__.py,sha256=htuoJ-jiaUooA3bdc9DEcgfpNHlqlqGqiKgdjwq9y1Y,1006
|
|
57
64
|
alma/retrieval/cache.py,sha256=l1VY2k6OzvrFxJfzkZ1rch9zWfl2-80pttgW_11sxbc,34585
|
|
58
65
|
alma/retrieval/embeddings.py,sha256=XwTjPnnfW4VB9FGN3FQ_nWZ1hAaJLufXNZYbWMwkct0,6496
|
|
59
|
-
alma/retrieval/engine.py,sha256=
|
|
66
|
+
alma/retrieval/engine.py,sha256=cEtUd4ih9PnMPttpDGpIwznEdhRLiklMit1NDXI6fCE,15346
|
|
60
67
|
alma/retrieval/scoring.py,sha256=WaMu4HN5ui9y0yV8AKEcix0xvav4mvXV7rn8ihAYURw,10350
|
|
61
68
|
alma/session/__init__.py,sha256=4LWuYdF8N5XxcmVZA8verJV5XF_eRCgU-M_0Hkfovgg,352
|
|
62
69
|
alma/session/manager.py,sha256=U_a2_1VySD_QwJY6tyukko4pHDcxQaLzUZmgUH4I2W4,12638
|
|
63
70
|
alma/session/types.py,sha256=VIIE330GiWAkWN4SaJhUa_BrpEdLMWIbUvTRciT6C8I,9501
|
|
64
|
-
alma/storage/__init__.py,sha256=
|
|
65
|
-
alma/storage/azure_cosmos.py,sha256=
|
|
66
|
-
alma/storage/base.py,sha256=
|
|
71
|
+
alma/storage/__init__.py,sha256=pz21kK-BshEFUePhbZJXJrxG8XZpV9x25S92rCUMMeg,2190
|
|
72
|
+
alma/storage/azure_cosmos.py,sha256=l9w9-3rV12QMszilJvB_7aOiAp3ZyTOW0c61tutzHaY,44856
|
|
73
|
+
alma/storage/base.py,sha256=NyLW6FJ-B24Ui13PEtAWNFN3u_cmsdj1EOpHTxlTojU,15914
|
|
67
74
|
alma/storage/chroma.py,sha256=Csim64cbtX_z6g2fsy91xEpnsRGQ_Llb8vu7QOOJ-lE,51218
|
|
68
|
-
alma/storage/
|
|
75
|
+
alma/storage/constants.py,sha256=dL7AycQvGbMZkXaDUFeSHiTBQdm8bhAPEdzSijaqnxM,2870
|
|
76
|
+
alma/storage/file_based.py,sha256=cbvL50-p3bnTQF2XcIOZY0q3J7K42pPKhptwRRBlE94,22046
|
|
69
77
|
alma/storage/pinecone.py,sha256=dGgncFgLZUsMRAt6nnlFISDNbsTU0ZFahiTXle08eRk,37904
|
|
70
|
-
alma/storage/postgresql.py,sha256=
|
|
78
|
+
alma/storage/postgresql.py,sha256=H1QWUpi3ZfVzsjKxiMXI-mM9LV298QJexqvAIZVLXwc,59966
|
|
71
79
|
alma/storage/qdrant.py,sha256=We74ewKkGdLpfpsZC-40MVLkzrjJHP49xcg7t7aF1Gg,43460
|
|
72
|
-
alma/storage/sqlite_local.py,sha256=
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
alma/storage/sqlite_local.py,sha256=IiIdpP4cfqPyJsRcyCP9FH2DwI3BnvfImG4GmJ0h5dc,52688
|
|
81
|
+
alma/storage/migrations/__init__.py,sha256=32NDopwU1uz2uubUHQrbFrRD4_Xa8gGzxNjtHUtAO8M,422
|
|
82
|
+
alma/storage/migrations/base.py,sha256=HGzgoaek52dkLNxlcA7j3tFi2__55kF-XlE-WPVtOYo,8968
|
|
83
|
+
alma/storage/migrations/runner.py,sha256=CVdxsnyizXW66PwRGXWfpmfIwDtFIw9qablYxkY8llg,10197
|
|
84
|
+
alma/storage/migrations/version_stores.py,sha256=WGgCMR0v0ebcYM6gEr6BaH6jajckbOUVqvHgPmLFFvc,11402
|
|
85
|
+
alma/storage/migrations/versions/__init__.py,sha256=QbusluTjsupbcMoPi37Gr8G4ceTrlhLQJGkDGvw1-EA,300
|
|
86
|
+
alma/storage/migrations/versions/v1_0_0.py,sha256=YhCmlVZPb_Ble1_xmPzpKYCHXCymMDzey8Kmaj1o5I8,12753
|
|
87
|
+
alma/testing/__init__.py,sha256=JOqZWPEBgBGIbhoDWurpDbCxNYDxmFv7iVAV_DU0Ak8,1320
|
|
88
|
+
alma/testing/factories.py,sha256=jUOrYywFg9flyaD2Dqds3NpszOC9ewmaMQxYI3DuGbM,9746
|
|
89
|
+
alma/testing/mocks.py,sha256=KCu5uvSjramki5F3DVICP1wOoAUbjCp4yK5jn2NSL2o,12321
|
|
90
|
+
alma_memory-0.5.1.dist-info/METADATA,sha256=iYoRCbVf8f-ctI3Dy8Xjvkmdv1QaEq0fFMyfXW3ztVM,29681
|
|
91
|
+
alma_memory-0.5.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
92
|
+
alma_memory-0.5.1.dist-info/top_level.txt,sha256=5oN68LXctTl8a8i1LA-5WqSaP-pDA-J0x1AfCFfLm4A,5
|
|
93
|
+
alma_memory-0.5.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|