agmem 0.1.1__tar.gz → 0.1.2__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.1/agmem.egg-info → agmem-0.1.2}/PKG-INFO +20 -3
- {agmem-0.1.1 → agmem-0.1.2}/README.md +12 -0
- {agmem-0.1.1 → agmem-0.1.2/agmem.egg-info}/PKG-INFO +20 -3
- {agmem-0.1.1 → agmem-0.1.2}/agmem.egg-info/SOURCES.txt +28 -1
- {agmem-0.1.1 → agmem-0.1.2}/agmem.egg-info/requires.txt +10 -1
- agmem-0.1.2/docs/AGMEM_PUBLISHING_SETUP.md +62 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/__init__.py +1 -1
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/cli.py +35 -31
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/__init__.py +9 -9
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/add.py +77 -76
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/blame.py +46 -53
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/branch.py +13 -33
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/checkout.py +27 -32
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/clean.py +18 -23
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/clone.py +4 -1
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/commit.py +40 -39
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/daemon.py +81 -76
- agmem-0.1.2/memvcs/commands/decay.py +77 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/diff.py +56 -57
- agmem-0.1.2/memvcs/commands/distill.py +74 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/fsck.py +55 -61
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/garden.py +28 -37
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/graph.py +41 -48
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/init.py +16 -24
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/log.py +25 -40
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/merge.py +16 -28
- agmem-0.1.2/memvcs/commands/pack.py +129 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/pull.py +4 -1
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/push.py +4 -2
- agmem-0.1.2/memvcs/commands/recall.py +145 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/reflog.py +13 -22
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/remote.py +1 -0
- agmem-0.1.2/memvcs/commands/repair.py +66 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/reset.py +23 -33
- agmem-0.1.2/memvcs/commands/resurrect.py +82 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/search.py +3 -4
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/serve.py +2 -1
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/show.py +66 -36
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/stash.py +34 -34
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/status.py +27 -35
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/tag.py +23 -47
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/test.py +30 -44
- agmem-0.1.2/memvcs/commands/timeline.py +111 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/tree.py +26 -27
- agmem-0.1.2/memvcs/commands/verify.py +59 -0
- agmem-0.1.2/memvcs/commands/when.py +115 -0
- agmem-0.1.2/memvcs/core/access_index.py +167 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/config_loader.py +3 -1
- agmem-0.1.2/memvcs/core/consistency.py +214 -0
- agmem-0.1.2/memvcs/core/decay.py +185 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/diff.py +158 -143
- agmem-0.1.2/memvcs/core/distiller.py +277 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/gardener.py +164 -132
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/hooks.py +48 -14
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/knowledge_graph.py +134 -138
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/merge.py +248 -171
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/objects.py +95 -96
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/pii_scanner.py +147 -146
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/refs.py +132 -115
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/repository.py +174 -164
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/schema.py +155 -113
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/staging.py +60 -65
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/storage/__init__.py +20 -18
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/storage/base.py +74 -70
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/storage/gcs.py +70 -68
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/storage/local.py +42 -40
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/storage/s3.py +105 -110
- agmem-0.1.2/memvcs/core/temporal_index.py +112 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/test_runner.py +101 -93
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/vector_store.py +41 -35
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/integrations/mcp_server.py +1 -3
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/integrations/web_ui/server.py +25 -26
- agmem-0.1.2/memvcs/retrieval/__init__.py +22 -0
- agmem-0.1.2/memvcs/retrieval/base.py +54 -0
- agmem-0.1.2/memvcs/retrieval/pack.py +128 -0
- agmem-0.1.2/memvcs/retrieval/recaller.py +105 -0
- agmem-0.1.2/memvcs/retrieval/strategies.py +314 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/utils/__init__.py +3 -3
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/utils/helpers.py +52 -52
- {agmem-0.1.1 → agmem-0.1.2}/pyproject.toml +14 -6
- agmem-0.1.2/setup.py +64 -0
- agmem-0.1.2/tests/test_access_index.py +67 -0
- agmem-0.1.2/tests/test_advanced_commands.py +157 -0
- agmem-0.1.2/tests/test_commit_importance.py +47 -0
- agmem-0.1.2/tests/test_consistency.py +49 -0
- agmem-0.1.2/tests/test_decay.py +59 -0
- {agmem-0.1.1 → agmem-0.1.2}/tests/test_objects.py +39 -39
- {agmem-0.1.1 → agmem-0.1.2}/tests/test_plan_features.py +15 -2
- agmem-0.1.2/tests/test_repository.py +88 -0
- agmem-0.1.2/tests/test_retrieval.py +134 -0
- agmem-0.1.2/tests/test_temporal_index.py +54 -0
- agmem-0.1.1/setup.py +0 -64
- agmem-0.1.1/tests/test_repository.py +0 -90
- {agmem-0.1.1 → agmem-0.1.2}/LICENSE +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/MANIFEST.in +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/agmem.egg-info/dependency_links.txt +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/agmem.egg-info/entry_points.txt +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/agmem.egg-info/top_level.txt +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/CONFIG.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/GTM.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/KNOWLEDGE_GRAPH.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/TEST_REPORT.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/aux/INSTALL.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/aux/MARKET_POSITIONING.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/aux/README.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/docs/aux/STRESS_TEST_REPORT.md +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/examples/basic_workflow.sh +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/base.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/commands/mcp.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/__init__.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/constants.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/core/remote.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/integrations/__init__.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/memvcs/integrations/web_ui/__init__.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/setup.cfg +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/tests/test_edge_cases.py +0 -0
- {agmem-0.1.1 → agmem-0.1.2}/tests/test_pii.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.2
|
|
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
|
|
@@ -16,7 +16,6 @@ Classifier: Intended Audience :: Developers
|
|
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -30,7 +29,7 @@ Requires-Dist: PyYAML>=6.0.0
|
|
|
30
29
|
Provides-Extra: dev
|
|
31
30
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
32
31
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
33
|
-
Requires-Dist: black
|
|
32
|
+
Requires-Dist: black==24.10.0; extra == "dev"
|
|
34
33
|
Requires-Dist: flake8>=5.0.0; extra == "dev"
|
|
35
34
|
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
36
35
|
Provides-Extra: mcp
|
|
@@ -53,6 +52,12 @@ Provides-Extra: daemon
|
|
|
53
52
|
Requires-Dist: watchdog>=3.0.0; extra == "daemon"
|
|
54
53
|
Provides-Extra: graph
|
|
55
54
|
Requires-Dist: networkx>=3.0; extra == "graph"
|
|
55
|
+
Provides-Extra: pack
|
|
56
|
+
Requires-Dist: tiktoken>=0.5.0; extra == "pack"
|
|
57
|
+
Provides-Extra: distill
|
|
58
|
+
Requires-Dist: openai>=1.0.0; extra == "distill"
|
|
59
|
+
Provides-Extra: verify
|
|
60
|
+
Requires-Dist: openai>=1.0.0; extra == "verify"
|
|
56
61
|
Provides-Extra: all
|
|
57
62
|
Requires-Dist: mcp>=1.0.0; extra == "all"
|
|
58
63
|
Requires-Dist: sqlite-vec>=0.1.0; extra == "all"
|
|
@@ -72,6 +77,7 @@ Dynamic: requires-python
|
|
|
72
77
|
|
|
73
78
|
# agmem - Agentic Memory Version Control System
|
|
74
79
|
|
|
80
|
+
[](https://pypi.org/project/agmem/)
|
|
75
81
|
[](https://www.python.org/downloads/)
|
|
76
82
|
[](https://opensource.org/licenses/MIT)
|
|
77
83
|
[](https://github.com/psf/black)
|
|
@@ -109,6 +115,8 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
109
115
|
|
|
110
116
|
### Installation
|
|
111
117
|
|
|
118
|
+
**From PyPI** ([pypi.org/project/agmem](https://pypi.org/project/agmem/)):
|
|
119
|
+
|
|
112
120
|
```bash
|
|
113
121
|
pip install agmem
|
|
114
122
|
```
|
|
@@ -639,6 +647,15 @@ Or connect via MCP and call `memory_add` from your agent.
|
|
|
639
647
|
3. Write via `agmem add` + `agmem commit` or MCP `memory_add`
|
|
640
648
|
4. Optional: Use `agmem search` for semantic retrieval
|
|
641
649
|
|
|
650
|
+
## Links
|
|
651
|
+
|
|
652
|
+
- **PyPI:** [pypi.org/project/agmem](https://pypi.org/project/agmem/) — `pip install agmem`
|
|
653
|
+
|
|
654
|
+
**GitHub repo (About):** Use this description and topics in your repo’s **About** (gear → Description & topics):
|
|
655
|
+
|
|
656
|
+
- **Description:** Git for AI agent memories. Version control for episodic logs, semantic knowledge, and procedural workflows.
|
|
657
|
+
- **Topics:** `ai` `agent` `memory` `version-control` `git` `vcs` `llm` `python`
|
|
658
|
+
|
|
642
659
|
## Contributing
|
|
643
660
|
|
|
644
661
|
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# agmem - Agentic Memory Version Control System
|
|
2
2
|
|
|
3
|
+
[](https://pypi.org/project/agmem/)
|
|
3
4
|
[](https://www.python.org/downloads/)
|
|
4
5
|
[](https://opensource.org/licenses/MIT)
|
|
5
6
|
[](https://github.com/psf/black)
|
|
@@ -37,6 +38,8 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
37
38
|
|
|
38
39
|
### Installation
|
|
39
40
|
|
|
41
|
+
**From PyPI** ([pypi.org/project/agmem](https://pypi.org/project/agmem/)):
|
|
42
|
+
|
|
40
43
|
```bash
|
|
41
44
|
pip install agmem
|
|
42
45
|
```
|
|
@@ -567,6 +570,15 @@ Or connect via MCP and call `memory_add` from your agent.
|
|
|
567
570
|
3. Write via `agmem add` + `agmem commit` or MCP `memory_add`
|
|
568
571
|
4. Optional: Use `agmem search` for semantic retrieval
|
|
569
572
|
|
|
573
|
+
## Links
|
|
574
|
+
|
|
575
|
+
- **PyPI:** [pypi.org/project/agmem](https://pypi.org/project/agmem/) — `pip install agmem`
|
|
576
|
+
|
|
577
|
+
**GitHub repo (About):** Use this description and topics in your repo’s **About** (gear → Description & topics):
|
|
578
|
+
|
|
579
|
+
- **Description:** Git for AI agent memories. Version control for episodic logs, semantic knowledge, and procedural workflows.
|
|
580
|
+
- **Topics:** `ai` `agent` `memory` `version-control` `git` `vcs` `llm` `python`
|
|
581
|
+
|
|
570
582
|
## Contributing
|
|
571
583
|
|
|
572
584
|
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agmem
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
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
|
|
@@ -16,7 +16,6 @@ Classifier: Intended Audience :: Developers
|
|
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -30,7 +29,7 @@ Requires-Dist: PyYAML>=6.0.0
|
|
|
30
29
|
Provides-Extra: dev
|
|
31
30
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
32
31
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
33
|
-
Requires-Dist: black
|
|
32
|
+
Requires-Dist: black==24.10.0; extra == "dev"
|
|
34
33
|
Requires-Dist: flake8>=5.0.0; extra == "dev"
|
|
35
34
|
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
36
35
|
Provides-Extra: mcp
|
|
@@ -53,6 +52,12 @@ Provides-Extra: daemon
|
|
|
53
52
|
Requires-Dist: watchdog>=3.0.0; extra == "daemon"
|
|
54
53
|
Provides-Extra: graph
|
|
55
54
|
Requires-Dist: networkx>=3.0; extra == "graph"
|
|
55
|
+
Provides-Extra: pack
|
|
56
|
+
Requires-Dist: tiktoken>=0.5.0; extra == "pack"
|
|
57
|
+
Provides-Extra: distill
|
|
58
|
+
Requires-Dist: openai>=1.0.0; extra == "distill"
|
|
59
|
+
Provides-Extra: verify
|
|
60
|
+
Requires-Dist: openai>=1.0.0; extra == "verify"
|
|
56
61
|
Provides-Extra: all
|
|
57
62
|
Requires-Dist: mcp>=1.0.0; extra == "all"
|
|
58
63
|
Requires-Dist: sqlite-vec>=0.1.0; extra == "all"
|
|
@@ -72,6 +77,7 @@ Dynamic: requires-python
|
|
|
72
77
|
|
|
73
78
|
# agmem - Agentic Memory Version Control System
|
|
74
79
|
|
|
80
|
+
[](https://pypi.org/project/agmem/)
|
|
75
81
|
[](https://www.python.org/downloads/)
|
|
76
82
|
[](https://opensource.org/licenses/MIT)
|
|
77
83
|
[](https://github.com/psf/black)
|
|
@@ -109,6 +115,8 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
109
115
|
|
|
110
116
|
### Installation
|
|
111
117
|
|
|
118
|
+
**From PyPI** ([pypi.org/project/agmem](https://pypi.org/project/agmem/)):
|
|
119
|
+
|
|
112
120
|
```bash
|
|
113
121
|
pip install agmem
|
|
114
122
|
```
|
|
@@ -639,6 +647,15 @@ Or connect via MCP and call `memory_add` from your agent.
|
|
|
639
647
|
3. Write via `agmem add` + `agmem commit` or MCP `memory_add`
|
|
640
648
|
4. Optional: Use `agmem search` for semantic retrieval
|
|
641
649
|
|
|
650
|
+
## Links
|
|
651
|
+
|
|
652
|
+
- **PyPI:** [pypi.org/project/agmem](https://pypi.org/project/agmem/) — `pip install agmem`
|
|
653
|
+
|
|
654
|
+
**GitHub repo (About):** Use this description and topics in your repo’s **About** (gear → Description & topics):
|
|
655
|
+
|
|
656
|
+
- **Description:** Git for AI agent memories. Version control for episodic logs, semantic knowledge, and procedural workflows.
|
|
657
|
+
- **Topics:** `ai` `agent` `memory` `version-control` `git` `vcs` `llm` `python`
|
|
658
|
+
|
|
642
659
|
## Contributing
|
|
643
660
|
|
|
644
661
|
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
@@ -9,6 +9,7 @@ agmem.egg-info/dependency_links.txt
|
|
|
9
9
|
agmem.egg-info/entry_points.txt
|
|
10
10
|
agmem.egg-info/requires.txt
|
|
11
11
|
agmem.egg-info/top_level.txt
|
|
12
|
+
docs/AGMEM_PUBLISHING_SETUP.md
|
|
12
13
|
docs/CONFIG.md
|
|
13
14
|
docs/GTM.md
|
|
14
15
|
docs/KNOWLEDGE_GRAPH.md
|
|
@@ -30,7 +31,9 @@ memvcs/commands/clean.py
|
|
|
30
31
|
memvcs/commands/clone.py
|
|
31
32
|
memvcs/commands/commit.py
|
|
32
33
|
memvcs/commands/daemon.py
|
|
34
|
+
memvcs/commands/decay.py
|
|
33
35
|
memvcs/commands/diff.py
|
|
36
|
+
memvcs/commands/distill.py
|
|
34
37
|
memvcs/commands/fsck.py
|
|
35
38
|
memvcs/commands/garden.py
|
|
36
39
|
memvcs/commands/graph.py
|
|
@@ -38,11 +41,15 @@ memvcs/commands/init.py
|
|
|
38
41
|
memvcs/commands/log.py
|
|
39
42
|
memvcs/commands/mcp.py
|
|
40
43
|
memvcs/commands/merge.py
|
|
44
|
+
memvcs/commands/pack.py
|
|
41
45
|
memvcs/commands/pull.py
|
|
42
46
|
memvcs/commands/push.py
|
|
47
|
+
memvcs/commands/recall.py
|
|
43
48
|
memvcs/commands/reflog.py
|
|
44
49
|
memvcs/commands/remote.py
|
|
50
|
+
memvcs/commands/repair.py
|
|
45
51
|
memvcs/commands/reset.py
|
|
52
|
+
memvcs/commands/resurrect.py
|
|
46
53
|
memvcs/commands/search.py
|
|
47
54
|
memvcs/commands/serve.py
|
|
48
55
|
memvcs/commands/show.py
|
|
@@ -50,11 +57,18 @@ memvcs/commands/stash.py
|
|
|
50
57
|
memvcs/commands/status.py
|
|
51
58
|
memvcs/commands/tag.py
|
|
52
59
|
memvcs/commands/test.py
|
|
60
|
+
memvcs/commands/timeline.py
|
|
53
61
|
memvcs/commands/tree.py
|
|
62
|
+
memvcs/commands/verify.py
|
|
63
|
+
memvcs/commands/when.py
|
|
54
64
|
memvcs/core/__init__.py
|
|
65
|
+
memvcs/core/access_index.py
|
|
55
66
|
memvcs/core/config_loader.py
|
|
67
|
+
memvcs/core/consistency.py
|
|
56
68
|
memvcs/core/constants.py
|
|
69
|
+
memvcs/core/decay.py
|
|
57
70
|
memvcs/core/diff.py
|
|
71
|
+
memvcs/core/distiller.py
|
|
58
72
|
memvcs/core/gardener.py
|
|
59
73
|
memvcs/core/hooks.py
|
|
60
74
|
memvcs/core/knowledge_graph.py
|
|
@@ -66,6 +80,7 @@ memvcs/core/remote.py
|
|
|
66
80
|
memvcs/core/repository.py
|
|
67
81
|
memvcs/core/schema.py
|
|
68
82
|
memvcs/core/staging.py
|
|
83
|
+
memvcs/core/temporal_index.py
|
|
69
84
|
memvcs/core/test_runner.py
|
|
70
85
|
memvcs/core/vector_store.py
|
|
71
86
|
memvcs/core/storage/__init__.py
|
|
@@ -77,10 +92,22 @@ memvcs/integrations/__init__.py
|
|
|
77
92
|
memvcs/integrations/mcp_server.py
|
|
78
93
|
memvcs/integrations/web_ui/__init__.py
|
|
79
94
|
memvcs/integrations/web_ui/server.py
|
|
95
|
+
memvcs/retrieval/__init__.py
|
|
96
|
+
memvcs/retrieval/base.py
|
|
97
|
+
memvcs/retrieval/pack.py
|
|
98
|
+
memvcs/retrieval/recaller.py
|
|
99
|
+
memvcs/retrieval/strategies.py
|
|
80
100
|
memvcs/utils/__init__.py
|
|
81
101
|
memvcs/utils/helpers.py
|
|
102
|
+
tests/test_access_index.py
|
|
103
|
+
tests/test_advanced_commands.py
|
|
104
|
+
tests/test_commit_importance.py
|
|
105
|
+
tests/test_consistency.py
|
|
106
|
+
tests/test_decay.py
|
|
82
107
|
tests/test_edge_cases.py
|
|
83
108
|
tests/test_objects.py
|
|
84
109
|
tests/test_pii.py
|
|
85
110
|
tests/test_plan_features.py
|
|
86
|
-
tests/test_repository.py
|
|
111
|
+
tests/test_repository.py
|
|
112
|
+
tests/test_retrieval.py
|
|
113
|
+
tests/test_temporal_index.py
|
|
@@ -23,10 +23,13 @@ watchdog>=3.0.0
|
|
|
23
23
|
[dev]
|
|
24
24
|
pytest>=7.0.0
|
|
25
25
|
pytest-cov>=4.0.0
|
|
26
|
-
black
|
|
26
|
+
black==24.10.0
|
|
27
27
|
flake8>=5.0.0
|
|
28
28
|
mypy>=1.0.0
|
|
29
29
|
|
|
30
|
+
[distill]
|
|
31
|
+
openai>=1.0.0
|
|
32
|
+
|
|
30
33
|
[gardener]
|
|
31
34
|
scikit-learn>=1.3.0
|
|
32
35
|
openai>=1.0.0
|
|
@@ -37,6 +40,9 @@ networkx>=3.0
|
|
|
37
40
|
[mcp]
|
|
38
41
|
mcp>=1.0.0
|
|
39
42
|
|
|
43
|
+
[pack]
|
|
44
|
+
tiktoken>=0.5.0
|
|
45
|
+
|
|
40
46
|
[pii]
|
|
41
47
|
presidio-analyzer>=2.2.0
|
|
42
48
|
|
|
@@ -44,6 +50,9 @@ presidio-analyzer>=2.2.0
|
|
|
44
50
|
sqlite-vec>=0.1.0
|
|
45
51
|
sentence-transformers>=2.0.0
|
|
46
52
|
|
|
53
|
+
[verify]
|
|
54
|
+
openai>=1.0.0
|
|
55
|
+
|
|
47
56
|
[web]
|
|
48
57
|
fastapi>=0.100.0
|
|
49
58
|
uvicorn>=0.22.0
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# PyPI Trusted Publishing Setup
|
|
2
|
+
|
|
3
|
+
The `ci-and-publish.yml` workflow uses **PyPI Trusted Publishing** (OIDC) to publish packages without API tokens. You need to configure this on PyPI to allow your GitHub repository to upload releases.
|
|
4
|
+
|
|
5
|
+
## 1. If the project `agmem` ALREADY exists on PyPI
|
|
6
|
+
|
|
7
|
+
1. Log in to [pypi.org](https://pypi.org/).
|
|
8
|
+
2. Go to your project's publishing settings: `https://pypi.org/manage/project/agmem/settings/publishing/`
|
|
9
|
+
3. Scroll to **"Add a new publisher"** and select **GitHub**.
|
|
10
|
+
4. Fill in the details:
|
|
11
|
+
- **Owner**: `vivek-tiwari-vt`
|
|
12
|
+
- **Repository name**: `agmem`
|
|
13
|
+
- **Workflow name**: `ci-and-publish.yml`
|
|
14
|
+
- **Environment name**: *Leave this blank* (unless you uncommented `environment: pypi` in the YAML).
|
|
15
|
+
5. Click **Add**.
|
|
16
|
+
|
|
17
|
+
## 2. If the project does NOT exist on PyPI yet
|
|
18
|
+
|
|
19
|
+
You cannot "register" a package via OIDC directly for the very first upload *unless* you use "Pending Publishers".
|
|
20
|
+
|
|
21
|
+
### Option A: Use Pending Publishers (Recommended)
|
|
22
|
+
1. Go to [https://pypi.org/manage/account/publishing/](https://pypi.org/manage/account/publishing/)
|
|
23
|
+
2. Click **Add a new pending publisher**.
|
|
24
|
+
3. Fill in the details:
|
|
25
|
+
- **Project name**: `agmem`
|
|
26
|
+
- **Owner**: `vivek-tiwari-vt`
|
|
27
|
+
- **Repository name**: `agmem`
|
|
28
|
+
- **Workflow name**: `ci-and-publish.yml`
|
|
29
|
+
- **Environment name**: *Leave blank*.
|
|
30
|
+
4. Click **Add**.
|
|
31
|
+
5. The next time your GitHub Action runs for a release, PyPI will create the project for you.
|
|
32
|
+
|
|
33
|
+
### Option B: Manual First Release
|
|
34
|
+
1. Build the package locally:
|
|
35
|
+
```bash
|
|
36
|
+
pip install build twine
|
|
37
|
+
python -m build
|
|
38
|
+
```
|
|
39
|
+
2. Upload manually (requires your username/password or an API token):
|
|
40
|
+
```bash
|
|
41
|
+
twine upload dist/*
|
|
42
|
+
```
|
|
43
|
+
3. Once created, follow the steps in **Section 1** to enable automation for future releases.
|
|
44
|
+
|
|
45
|
+
## 3. Triggering the Release
|
|
46
|
+
|
|
47
|
+
The workflow runs when a **GitHub Release** is published.
|
|
48
|
+
|
|
49
|
+
1. **Tag**: Push a tag starting with `v` (e.g., `v0.1.2`).
|
|
50
|
+
```bash
|
|
51
|
+
git tag v0.1.2
|
|
52
|
+
git push origin v0.1.2
|
|
53
|
+
```
|
|
54
|
+
*(This triggers the `release-on-tag.yml` workflow, which creates the GitHub Release)*
|
|
55
|
+
|
|
56
|
+
2. **Release**: The `release-on-tag` workflow will create a GitHub Release.
|
|
57
|
+
3. **Publish**: The creation of that Release triggers `ci-and-publish.yml`, which runs tests and then uploads to PyPI (if the Trusted Publisher is set up).
|
|
58
|
+
|
|
59
|
+
## Troubleshooting
|
|
60
|
+
|
|
61
|
+
- **"OpenID Connect not supported"**: You forgot to set up the Trusted Publisher on PyPI.
|
|
62
|
+
- **"File already exists"**: You are trying to publish a version (`0.1.0` or `0.1.1`) that is already on PyPI. Bump the version in `pyproject.toml` and `memvcs/__init__.py` before tagging.
|
|
@@ -49,6 +49,15 @@ from .commands.fsck import FsckCommand
|
|
|
49
49
|
from .commands.graph import GraphCommand
|
|
50
50
|
from .commands.daemon import DaemonCommand
|
|
51
51
|
from .commands.garden import GardenCommand
|
|
52
|
+
from .commands.recall import RecallCommand
|
|
53
|
+
from .commands.when import WhenCommand
|
|
54
|
+
from .commands.timeline import TimelineCommand
|
|
55
|
+
from .commands.pack import PackCommand
|
|
56
|
+
from .commands.distill import DistillCommand
|
|
57
|
+
from .commands.decay import DecayCommand
|
|
58
|
+
from .commands.resurrect import ResurrectCommand
|
|
59
|
+
from .commands.verify import VerifyCommand
|
|
60
|
+
from .commands.repair import RepairCommand
|
|
52
61
|
|
|
53
62
|
|
|
54
63
|
# List of available commands
|
|
@@ -82,14 +91,23 @@ COMMANDS = [
|
|
|
82
91
|
GraphCommand,
|
|
83
92
|
DaemonCommand,
|
|
84
93
|
GardenCommand,
|
|
94
|
+
RecallCommand,
|
|
95
|
+
WhenCommand,
|
|
96
|
+
TimelineCommand,
|
|
97
|
+
PackCommand,
|
|
98
|
+
DistillCommand,
|
|
99
|
+
DecayCommand,
|
|
100
|
+
ResurrectCommand,
|
|
101
|
+
VerifyCommand,
|
|
102
|
+
RepairCommand,
|
|
85
103
|
]
|
|
86
104
|
|
|
87
105
|
|
|
88
106
|
def create_parser() -> argparse.ArgumentParser:
|
|
89
107
|
"""Create the main argument parser."""
|
|
90
108
|
parser = argparse.ArgumentParser(
|
|
91
|
-
prog=
|
|
92
|
-
description=
|
|
109
|
+
prog="agmem",
|
|
110
|
+
description="agmem - Agentic Memory Version Control System",
|
|
93
111
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
94
112
|
epilog="""
|
|
95
113
|
Examples:
|
|
@@ -110,36 +128,21 @@ Examples:
|
|
|
110
128
|
agmem tree Show directory tree visually
|
|
111
129
|
|
|
112
130
|
For more information: https://github.com/vivek-tiwari-vt/agmem
|
|
113
|
-
"""
|
|
131
|
+
""",
|
|
114
132
|
)
|
|
115
|
-
|
|
116
|
-
parser.add_argument(
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
parser.add_argument(
|
|
123
|
-
'--verbose',
|
|
124
|
-
action='store_true',
|
|
125
|
-
help='Enable verbose output'
|
|
126
|
-
)
|
|
127
|
-
|
|
133
|
+
|
|
134
|
+
parser.add_argument("--version", "-v", action="version", version="%(prog)s 0.1.0")
|
|
135
|
+
|
|
136
|
+
parser.add_argument("--verbose", action="store_true", help="Enable verbose output")
|
|
137
|
+
|
|
128
138
|
# Create subparsers for commands
|
|
129
|
-
subparsers = parser.add_subparsers(
|
|
130
|
-
|
|
131
|
-
help='Available commands',
|
|
132
|
-
metavar='COMMAND'
|
|
133
|
-
)
|
|
134
|
-
|
|
139
|
+
subparsers = parser.add_subparsers(dest="command", help="Available commands", metavar="COMMAND")
|
|
140
|
+
|
|
135
141
|
# Add each command
|
|
136
142
|
for cmd_class in COMMANDS:
|
|
137
|
-
cmd_parser = subparsers.add_parser(
|
|
138
|
-
cmd_class.name,
|
|
139
|
-
help=cmd_class.help
|
|
140
|
-
)
|
|
143
|
+
cmd_parser = subparsers.add_parser(cmd_class.name, help=cmd_class.help)
|
|
141
144
|
cmd_class.add_arguments(cmd_parser)
|
|
142
|
-
|
|
145
|
+
|
|
143
146
|
return parser
|
|
144
147
|
|
|
145
148
|
|
|
@@ -147,12 +150,12 @@ def main(args: List[str] = None) -> int:
|
|
|
147
150
|
"""Main entry point."""
|
|
148
151
|
parser = create_parser()
|
|
149
152
|
parsed_args = parser.parse_args(args)
|
|
150
|
-
|
|
153
|
+
|
|
151
154
|
# No command specified
|
|
152
155
|
if not parsed_args.command:
|
|
153
156
|
parser.print_help()
|
|
154
157
|
return 0
|
|
155
|
-
|
|
158
|
+
|
|
156
159
|
# Find and execute the command
|
|
157
160
|
for cmd_class in COMMANDS:
|
|
158
161
|
if cmd_class.name == parsed_args.command:
|
|
@@ -164,15 +167,16 @@ def main(args: List[str] = None) -> int:
|
|
|
164
167
|
except Exception as e:
|
|
165
168
|
if parsed_args.verbose:
|
|
166
169
|
import traceback
|
|
170
|
+
|
|
167
171
|
traceback.print_exc()
|
|
168
172
|
else:
|
|
169
173
|
print(f"Error: {e}")
|
|
170
174
|
return 1
|
|
171
|
-
|
|
175
|
+
|
|
172
176
|
# Unknown command
|
|
173
177
|
print(f"Unknown command: {parsed_args.command}")
|
|
174
178
|
return 1
|
|
175
179
|
|
|
176
180
|
|
|
177
|
-
if __name__ ==
|
|
181
|
+
if __name__ == "__main__":
|
|
178
182
|
sys.exit(main())
|
|
@@ -11,13 +11,13 @@ from .merge import MergeCommand
|
|
|
11
11
|
from .diff import DiffCommand
|
|
12
12
|
|
|
13
13
|
__all__ = [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
"InitCommand",
|
|
15
|
+
"AddCommand",
|
|
16
|
+
"CommitCommand",
|
|
17
|
+
"StatusCommand",
|
|
18
|
+
"LogCommand",
|
|
19
|
+
"BranchCommand",
|
|
20
|
+
"CheckoutCommand",
|
|
21
|
+
"MergeCommand",
|
|
22
|
+
"DiffCommand",
|
|
23
23
|
]
|