memgit 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.
- {memgit-0.1.1 → memgit-0.1.2}/PKG-INFO +8 -4
- {memgit-0.1.1 → memgit-0.1.2}/README.md +7 -3
- {memgit-0.1.1 → memgit-0.1.2}/memgit/cli.py +103 -10
- {memgit-0.1.1 → memgit-0.1.2}/memgit.egg-info/PKG-INFO +8 -4
- {memgit-0.1.1 → memgit-0.1.2}/pyproject.toml +1 -1
- {memgit-0.1.1 → memgit-0.1.2}/LICENSE +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/__init__.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/graph.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/http_server.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/importer.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/mcp_server.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/models.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/repo.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/scorer.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/store.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/tokens.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit/toon.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit.egg-info/SOURCES.txt +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit.egg-info/dependency_links.txt +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit.egg-info/entry_points.txt +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit.egg-info/requires.txt +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/memgit.egg-info/top_level.txt +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/setup.cfg +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/tests/test_advanced.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/tests/test_store_repo.py +0 -0
- {memgit-0.1.1 → memgit-0.1.2}/tests/test_toon.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memgit
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Git for AI memory — version-controlled context persistence across Claude, GPT, Gemini, Cursor, Windsurf, and more
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://memgit.dev
|
|
@@ -27,14 +27,18 @@ Requires-Dist: pytest>=8.0; extra == "dev"
|
|
|
27
27
|
Requires-Dist: pytest-anyio>=0.0.0; extra == "dev"
|
|
28
28
|
Dynamic: license-file
|
|
29
29
|
|
|
30
|
+
<p align="center">
|
|
31
|
+
<img src="assets/logo.png" alt="memgit logo" width="120" />
|
|
32
|
+
</p>
|
|
33
|
+
|
|
30
34
|
# memgit — git for AI memory
|
|
31
35
|
|
|
32
36
|
**Version-controlled, cross-AI context that persists, diffs, rolls back, and syncs like code.**
|
|
33
37
|
|
|
34
38
|
```bash
|
|
35
39
|
pip install memgit
|
|
36
|
-
memgit init
|
|
37
|
-
memgit setup
|
|
40
|
+
memgit init # auto-detects best location for your setup
|
|
41
|
+
memgit setup # step-by-step: pick which AI tools to register
|
|
38
42
|
memgit stats # see your token savings vs claude.md / other plugins
|
|
39
43
|
```
|
|
40
44
|
|
|
@@ -441,7 +445,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
441
445
|
- [x] Flat `memories/` directory — grep/diff/blame your memories
|
|
442
446
|
- [x] D3.js graph visualization of memory relationships
|
|
443
447
|
- [x] Multi-platform distribution (PyPI, Homebrew, npm, Chocolatey, winget)
|
|
444
|
-
- [
|
|
448
|
+
- [x] PyPI published (v0.1.1)
|
|
445
449
|
- [ ] VS Code extension (Phase 3)
|
|
446
450
|
- [ ] JetBrains plugin (Phase 3)
|
|
447
451
|
- [ ] Semantic search via embeddings (Phase 4)
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/logo.png" alt="memgit logo" width="120" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
# memgit — git for AI memory
|
|
2
6
|
|
|
3
7
|
**Version-controlled, cross-AI context that persists, diffs, rolls back, and syncs like code.**
|
|
4
8
|
|
|
5
9
|
```bash
|
|
6
10
|
pip install memgit
|
|
7
|
-
memgit init
|
|
8
|
-
memgit setup
|
|
11
|
+
memgit init # auto-detects best location for your setup
|
|
12
|
+
memgit setup # step-by-step: pick which AI tools to register
|
|
9
13
|
memgit stats # see your token savings vs claude.md / other plugins
|
|
10
14
|
```
|
|
11
15
|
|
|
@@ -412,7 +416,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
412
416
|
- [x] Flat `memories/` directory — grep/diff/blame your memories
|
|
413
417
|
- [x] D3.js graph visualization of memory relationships
|
|
414
418
|
- [x] Multi-platform distribution (PyPI, Homebrew, npm, Chocolatey, winget)
|
|
415
|
-
- [
|
|
419
|
+
- [x] PyPI published (v0.1.1)
|
|
416
420
|
- [ ] VS Code extension (Phase 3)
|
|
417
421
|
- [ ] JetBrains plugin (Phase 3)
|
|
418
422
|
- [ ] Semantic search via embeddings (Phase 4)
|
|
@@ -29,8 +29,15 @@ def _require_repo() -> Repository:
|
|
|
29
29
|
|
|
30
30
|
# ── Root group ────────────────────────────────────────────────────────────────
|
|
31
31
|
|
|
32
|
+
try:
|
|
33
|
+
from importlib.metadata import version as _pkg_version
|
|
34
|
+
_version = _pkg_version('memgit')
|
|
35
|
+
except Exception:
|
|
36
|
+
_version = '0.1.2'
|
|
37
|
+
|
|
38
|
+
|
|
32
39
|
@click.group()
|
|
33
|
-
@click.version_option(
|
|
40
|
+
@click.version_option(_version, prog_name='memgit')
|
|
34
41
|
def cli():
|
|
35
42
|
"""memgit — git for AI memory.
|
|
36
43
|
|
|
@@ -41,16 +48,41 @@ def cli():
|
|
|
41
48
|
|
|
42
49
|
# ── init ──────────────────────────────────────────────────────────────────────
|
|
43
50
|
|
|
51
|
+
def _default_store_path() -> Path:
|
|
52
|
+
"""Pick the best default store location based on what's installed."""
|
|
53
|
+
home = Path.home()
|
|
54
|
+
if (home / '.claude').exists():
|
|
55
|
+
return home / '.claude' / 'memgit-store'
|
|
56
|
+
if (home / '.cursor').exists():
|
|
57
|
+
return home / '.cursor' / 'memgit-store'
|
|
58
|
+
if (home / '.windsurf').exists():
|
|
59
|
+
return home / '.windsurf' / 'memgit-store'
|
|
60
|
+
return home / '.memgit-store'
|
|
61
|
+
|
|
62
|
+
|
|
44
63
|
@cli.command()
|
|
45
|
-
@click.argument('directory', default=
|
|
64
|
+
@click.argument('directory', default=None, required=False, type=click.Path())
|
|
46
65
|
def init(directory):
|
|
47
|
-
"""Initialize a memgit
|
|
48
|
-
|
|
66
|
+
"""Initialize a memgit store.
|
|
67
|
+
|
|
68
|
+
If no path is given, picks the best location automatically:
|
|
69
|
+
· ~/.claude/memgit-store (if Claude Code is installed)
|
|
70
|
+
· ~/.cursor/memgit-store (if Cursor is installed)
|
|
71
|
+
· ~/.windsurf/memgit-store (if Windsurf is installed)
|
|
72
|
+
· ~/.memgit-store (fallback)
|
|
73
|
+
"""
|
|
74
|
+
if directory is None:
|
|
75
|
+
path = _default_store_path()
|
|
76
|
+
console.print(f'[dim]Using[/dim] [cyan]{path}[/cyan] [dim](auto-detected)[/dim]')
|
|
77
|
+
else:
|
|
78
|
+
path = Path(directory).resolve()
|
|
79
|
+
|
|
49
80
|
if (path / '.memgit').exists():
|
|
50
81
|
console.print(f'[yellow]Already initialized:[/yellow] {path / ".memgit"}')
|
|
51
82
|
return
|
|
52
83
|
repo = Repository.init(path)
|
|
53
|
-
console.print(f'[green]Initialized[/green] memgit
|
|
84
|
+
console.print(f'[green]Initialized[/green] memgit store in [cyan]{repo.path}[/cyan]')
|
|
85
|
+
console.print(f'[dim]Run [bold]memgit setup[/bold] to register with your AI tools.[/dim]')
|
|
54
86
|
|
|
55
87
|
|
|
56
88
|
# ── add ───────────────────────────────────────────────────────────────────────
|
|
@@ -1134,14 +1166,75 @@ def _all_targets():
|
|
|
1134
1166
|
]
|
|
1135
1167
|
|
|
1136
1168
|
|
|
1137
|
-
|
|
1138
|
-
|
|
1169
|
+
def _setup_wizard() -> None:
|
|
1170
|
+
"""Interactive step-by-step tool picker for `memgit setup` (bare)."""
|
|
1171
|
+
targets = _all_targets()
|
|
1172
|
+
|
|
1173
|
+
detected, missing = [], []
|
|
1174
|
+
for label, config_path, patch_fn in targets:
|
|
1175
|
+
(detected if config_path.exists() or config_path.parent.exists() else missing).append(
|
|
1176
|
+
(label, config_path, patch_fn)
|
|
1177
|
+
)
|
|
1178
|
+
|
|
1179
|
+
console.print('[bold]memgit setup[/bold] — interactive tool registration\n')
|
|
1180
|
+
|
|
1181
|
+
if not detected:
|
|
1182
|
+
console.print('[yellow]No AI tools detected on this machine.[/yellow]')
|
|
1183
|
+
console.print('Install Claude Code, Cursor, Windsurf, Cline, or Continue.dev first,')
|
|
1184
|
+
console.print('then run [bold]memgit setup all[/bold] or [bold]memgit setup <tool>[/bold].')
|
|
1185
|
+
return
|
|
1186
|
+
|
|
1187
|
+
console.print('[green]Detected on this machine:[/green]')
|
|
1188
|
+
for i, (label, config_path, _) in enumerate(detected, 1):
|
|
1189
|
+
note = 'config exists' if config_path.exists() else 'dir exists'
|
|
1190
|
+
console.print(f' [bold]{i}[/bold]. {label} [dim]({note})[/dim]')
|
|
1191
|
+
|
|
1192
|
+
if missing:
|
|
1193
|
+
console.print('\n[dim]Not detected (will be skipped):[/dim]')
|
|
1194
|
+
for label, _, _ in missing:
|
|
1195
|
+
console.print(f' [dim]· {label}[/dim]')
|
|
1196
|
+
|
|
1197
|
+
console.print()
|
|
1198
|
+
choice = click.prompt('Register which tools? (all / 1,2,3 / none)', default='all')
|
|
1199
|
+
choice = choice.strip().lower()
|
|
1200
|
+
|
|
1201
|
+
if choice in ('none', 'n', 'q'):
|
|
1202
|
+
console.print('[dim]Cancelled.[/dim]')
|
|
1203
|
+
return
|
|
1204
|
+
|
|
1205
|
+
if choice == 'all':
|
|
1206
|
+
selected = detected
|
|
1207
|
+
else:
|
|
1208
|
+
try:
|
|
1209
|
+
indices = [int(x.strip()) - 1 for x in choice.split(',')]
|
|
1210
|
+
selected = [detected[i] for i in indices if 0 <= i < len(detected)]
|
|
1211
|
+
except ValueError:
|
|
1212
|
+
console.print('[red]Invalid selection — enter "all", "none", or numbers like 1,2[/red]')
|
|
1213
|
+
return
|
|
1214
|
+
|
|
1215
|
+
console.print()
|
|
1216
|
+
for label, config_path, patch_fn in selected:
|
|
1217
|
+
_run_target(label, config_path, patch_fn, dry_run=False)
|
|
1218
|
+
|
|
1219
|
+
if selected:
|
|
1220
|
+
console.print('[dim]\nRestart each AI tool for changes to take effect.[/dim]')
|
|
1221
|
+
|
|
1222
|
+
|
|
1223
|
+
@cli.group(invoke_without_command=True)
|
|
1224
|
+
@click.pass_context
|
|
1225
|
+
def setup(ctx):
|
|
1139
1226
|
"""Register memgit with AI coding tools (MCP).
|
|
1140
1227
|
|
|
1141
|
-
|
|
1142
|
-
|
|
1228
|
+
Run bare for an interactive picker, or use a subcommand:
|
|
1229
|
+
|
|
1230
|
+
memgit setup # step-by-step: pick which tools to register
|
|
1231
|
+
memgit setup all # auto-register every detected tool
|
|
1232
|
+
memgit setup claude-code # register one specific tool
|
|
1233
|
+
|
|
1234
|
+
Safe to re-run — only updates what's missing.
|
|
1143
1235
|
"""
|
|
1144
|
-
|
|
1236
|
+
if ctx.invoked_subcommand is None:
|
|
1237
|
+
_setup_wizard()
|
|
1145
1238
|
|
|
1146
1239
|
|
|
1147
1240
|
def _run_target(label: str, config_path: Path, patch_fn, dry_run: bool) -> None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memgit
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Git for AI memory — version-controlled context persistence across Claude, GPT, Gemini, Cursor, Windsurf, and more
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://memgit.dev
|
|
@@ -27,14 +27,18 @@ Requires-Dist: pytest>=8.0; extra == "dev"
|
|
|
27
27
|
Requires-Dist: pytest-anyio>=0.0.0; extra == "dev"
|
|
28
28
|
Dynamic: license-file
|
|
29
29
|
|
|
30
|
+
<p align="center">
|
|
31
|
+
<img src="assets/logo.png" alt="memgit logo" width="120" />
|
|
32
|
+
</p>
|
|
33
|
+
|
|
30
34
|
# memgit — git for AI memory
|
|
31
35
|
|
|
32
36
|
**Version-controlled, cross-AI context that persists, diffs, rolls back, and syncs like code.**
|
|
33
37
|
|
|
34
38
|
```bash
|
|
35
39
|
pip install memgit
|
|
36
|
-
memgit init
|
|
37
|
-
memgit setup
|
|
40
|
+
memgit init # auto-detects best location for your setup
|
|
41
|
+
memgit setup # step-by-step: pick which AI tools to register
|
|
38
42
|
memgit stats # see your token savings vs claude.md / other plugins
|
|
39
43
|
```
|
|
40
44
|
|
|
@@ -441,7 +445,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
441
445
|
- [x] Flat `memories/` directory — grep/diff/blame your memories
|
|
442
446
|
- [x] D3.js graph visualization of memory relationships
|
|
443
447
|
- [x] Multi-platform distribution (PyPI, Homebrew, npm, Chocolatey, winget)
|
|
444
|
-
- [
|
|
448
|
+
- [x] PyPI published (v0.1.1)
|
|
445
449
|
- [ ] VS Code extension (Phase 3)
|
|
446
450
|
- [ ] JetBrains plugin (Phase 3)
|
|
447
451
|
- [ ] Semantic search via embeddings (Phase 4)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "memgit"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.2"
|
|
8
8
|
description = "Git for AI memory — version-controlled context persistence across Claude, GPT, Gemini, Cursor, Windsurf, and more"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|