memgit 0.7.0__tar.gz → 0.8.0__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.7.0 → memgit-0.8.0}/PKG-INFO +36 -4
- {memgit-0.7.0 → memgit-0.8.0}/README.md +35 -3
- {memgit-0.7.0 → memgit-0.8.0}/memgit/__init__.py +1 -1
- {memgit-0.7.0 → memgit-0.8.0}/memgit/cli.py +552 -32
- {memgit-0.7.0 → memgit-0.8.0}/memgit/delivery.py +92 -8
- memgit-0.8.0/memgit/evaluate.py +344 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/hooks.py +75 -36
- {memgit-0.7.0 → memgit-0.8.0}/memgit/http_server.py +3 -1
- {memgit-0.7.0 → memgit-0.8.0}/memgit/links.py +87 -1
- {memgit-0.7.0 → memgit-0.8.0}/memgit/mcp_server.py +146 -3
- memgit-0.8.0/memgit/metrics.py +197 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/models.py +8 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/project.py +57 -1
- {memgit-0.7.0 → memgit-0.8.0}/memgit/repo.py +90 -29
- memgit-0.8.0/memgit/sanitize.py +60 -0
- memgit-0.8.0/memgit/scorer.py +351 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/toon.py +8 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit.egg-info/PKG-INFO +36 -4
- {memgit-0.7.0 → memgit-0.8.0}/memgit.egg-info/SOURCES.txt +6 -1
- {memgit-0.7.0 → memgit-0.8.0}/pyproject.toml +1 -1
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_delivery.py +1 -1
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_v060.py +19 -3
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_v070.py +50 -1
- memgit-0.8.0/tests/test_v080.py +301 -0
- memgit-0.8.0/tests/test_v081.py +472 -0
- memgit-0.7.0/memgit/scorer.py +0 -158
- {memgit-0.7.0 → memgit-0.8.0}/LICENSE +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/cloud/__init__.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/cloud/client.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/cloud/commands.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/cloud/crypto.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/cloud/state.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/cloud/sync.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/gitdigest.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/graph.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/importer.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/store.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/tokens.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit/usage.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit.egg-info/dependency_links.txt +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit.egg-info/entry_points.txt +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit.egg-info/requires.txt +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/memgit.egg-info/top_level.txt +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/setup.cfg +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_accrue.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_advanced.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_aliases.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_core.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_setup.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_store_repo.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_toon.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_v020.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_v030.py +0 -0
- {memgit-0.7.0 → memgit-0.8.0}/tests/test_v040.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memgit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
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
|
|
@@ -44,7 +44,7 @@ Version-controlled, cross-AI context that persists, diffs, rolls back, and syncs
|
|
|
44
44
|
|
|
45
45
|
[](https://pypi.org/project/memgit/)
|
|
46
46
|
[](LICENSE)
|
|
47
|
-
[](tests/)
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
@@ -292,6 +292,21 @@ A project's hardest onboarding problem isn't *what* it does — it's *how to wor
|
|
|
292
292
|
|
|
293
293
|
And it **learns**: a sidecar usage ledger tracks which memories actually get recalled, and the most-used ones are auto-promoted as pointers into the guide over time (budget-capped, decaying, and always subordinate to the repo's own rules — it never restates or overrides them). Drifted? `memgit core heal` rebuilds it.
|
|
294
294
|
|
|
295
|
+
Since 0.8.0 it also **starts itself**: a project's first guide is created automatically once it holds a handful of memories, so the loop no longer waits on someone remembering to run `core seed`. The guide leads with what the project actually holds — "this project has N saved memories covering *topics*" — because a stated count of real prior work is evidence a model can act on, where an abstract instruction to check memory is something it can weigh against its own confidence and skip.
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Ranking you can prove
|
|
300
|
+
|
|
301
|
+
Retrieval quality used to be adjusted on intuition. `memgit eval` replaces that with a measurement, using two frozen sets mined from the store itself:
|
|
302
|
+
|
|
303
|
+
- **recall** — real prompts and the memories memgit actually surfaced for them. Measures *stability*: did a change break what used to work?
|
|
304
|
+
- **synthetic** — each memory queried by its own `why`, expecting itself back, with the slug's own words stripped out of the query. Measures *correctness*, independently of any past ranking. (The recall set alone is circular — its answers came from the ranking under test.)
|
|
305
|
+
|
|
306
|
+
Both report hit@1, recall@3/5/10 and MRR against a pinned baseline. There is deliberately no single blended score, and no fabricated "tokens saved" number.
|
|
307
|
+
|
|
308
|
+
It earns its keep immediately. Two changes built for 0.8.0 looked obviously right and were measured wrong: a recency multiplier (cut — real-prompt hit@1 −0.020, MRR −0.018) and destructive stemming, which fixed its motivating query while costing hit@1 −0.038 overall (rebuilt as an additive field, then +0.020/+0.041/+0.019). A BM25 normalisation bug introduced in the same release was caught the same way.
|
|
309
|
+
|
|
295
310
|
---
|
|
296
311
|
|
|
297
312
|
## Depth advertisement, trackers & supersession (v0.6.0)
|
|
@@ -330,6 +345,15 @@ memgit core seed # draft a guide from this project's skills + r
|
|
|
330
345
|
memgit core sync # deliver it into each AI host's own rules file (additive)
|
|
331
346
|
memgit core show / edit # view / curate the guide
|
|
332
347
|
memgit core heal # self-repair a guide that has drifted
|
|
348
|
+
# (a project's FIRST guide is created automatically
|
|
349
|
+
# once it holds 5+ memories — no command needed)
|
|
350
|
+
|
|
351
|
+
# Retrieval evaluation — prove a ranking change helped
|
|
352
|
+
memgit eval mine # freeze a regression set from real recall events
|
|
353
|
+
memgit eval mine --synthetic # non-circular set: query each memory by its own `why`
|
|
354
|
+
memgit eval run --set recall # hit@1 / recall@3,5,10 / MRR vs the pinned baseline
|
|
355
|
+
memgit eval run --baseline # pin the current result as the comparison point
|
|
356
|
+
memgit eval run --misses 10 # inspect the cases where nothing relevant surfaced
|
|
333
357
|
|
|
334
358
|
# Scale & proof
|
|
335
359
|
memgit squash # compress old history (archives what it collapses)
|
|
@@ -386,6 +410,9 @@ memgit thread list / switch / create
|
|
|
386
410
|
| **Windsurf** | MCP stdio | `memgit setup windsurf` |
|
|
387
411
|
| **Cline / Roo-Code** | MCP stdio | `memgit setup cline` |
|
|
388
412
|
| **Continue.dev** | MCP stdio | `memgit setup continue` |
|
|
413
|
+
| **Codex** | MCP stdio (TOML) | `memgit setup codex` |
|
|
414
|
+
| **Antigravity** | MCP stdio | `memgit setup antigravity` |
|
|
415
|
+
| **Gemini CLI** | MCP stdio | `memgit setup gemini-cli` |
|
|
389
416
|
| **ChatGPT (Custom Actions)** | HTTP + OpenAPI | `memgit serve --http` → import `http://localhost:7474/openapi.json` |
|
|
390
417
|
| **Gemini API** | HTTP function calling | `memgit serve --http` + `llm-tool-definitions.json` |
|
|
391
418
|
| **Any MCP tool** | MCP stdio | Add `{"command": "memgit", "args": ["serve"]}` to config |
|
|
@@ -446,7 +473,7 @@ git clone https://github.com/code4161/memgit.git
|
|
|
446
473
|
cd memgit
|
|
447
474
|
python -m venv .venv && source .venv/bin/activate
|
|
448
475
|
pip install -e ".[dev]"
|
|
449
|
-
pytest #
|
|
476
|
+
pytest # 404 tests, all passing, < 5 seconds
|
|
450
477
|
```
|
|
451
478
|
|
|
452
479
|
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
@@ -477,8 +504,13 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
477
504
|
- [x] Lossless memories — full `body` alongside the compact rule (v0.3.0)
|
|
478
505
|
- [x] Project-scoped memories + `memgit onboard` mid-project bootstrap (v0.3.0)
|
|
479
506
|
- [x] VS Code extension (v0.1.5, Marketplace: code416-memgit.memgit)
|
|
507
|
+
- [x] Codex + Antigravity support — MCP registration + `AGENTS.md` core guide (v0.8.0)
|
|
508
|
+
- [x] `memgit eval` — measured retrieval quality, real + non-circular sets (v0.8.0)
|
|
509
|
+
- [x] Usage-aware ranking — the recall ledger feeds relevance, not just the guide (v0.8.0)
|
|
510
|
+
- [x] Automatic core-guide bootstrap — the self-improving loop starts itself (v0.8.0)
|
|
480
511
|
- [ ] JetBrains plugin (Phase 3)
|
|
481
|
-
- [ ] Semantic search via embeddings (Phase 4)
|
|
512
|
+
- [ ] Semantic search via embeddings — gated on `memgit eval` showing a real gain (Phase 4)
|
|
513
|
+
- [ ] Public benchmark numbers (LongMemEval, LoCoMo) (Phase 4)
|
|
482
514
|
- [x] memgit.dev website (live)
|
|
483
515
|
- [ ] Memory compression / auto-summarization (Phase 5)
|
|
484
516
|
- [ ] Team access control + audit trail (Phase 5)
|
|
@@ -10,7 +10,7 @@ Version-controlled, cross-AI context that persists, diffs, rolls back, and syncs
|
|
|
10
10
|
|
|
11
11
|
[](https://pypi.org/project/memgit/)
|
|
12
12
|
[](LICENSE)
|
|
13
|
-
[](tests/)
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
@@ -258,6 +258,21 @@ A project's hardest onboarding problem isn't *what* it does — it's *how to wor
|
|
|
258
258
|
|
|
259
259
|
And it **learns**: a sidecar usage ledger tracks which memories actually get recalled, and the most-used ones are auto-promoted as pointers into the guide over time (budget-capped, decaying, and always subordinate to the repo's own rules — it never restates or overrides them). Drifted? `memgit core heal` rebuilds it.
|
|
260
260
|
|
|
261
|
+
Since 0.8.0 it also **starts itself**: a project's first guide is created automatically once it holds a handful of memories, so the loop no longer waits on someone remembering to run `core seed`. The guide leads with what the project actually holds — "this project has N saved memories covering *topics*" — because a stated count of real prior work is evidence a model can act on, where an abstract instruction to check memory is something it can weigh against its own confidence and skip.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Ranking you can prove
|
|
266
|
+
|
|
267
|
+
Retrieval quality used to be adjusted on intuition. `memgit eval` replaces that with a measurement, using two frozen sets mined from the store itself:
|
|
268
|
+
|
|
269
|
+
- **recall** — real prompts and the memories memgit actually surfaced for them. Measures *stability*: did a change break what used to work?
|
|
270
|
+
- **synthetic** — each memory queried by its own `why`, expecting itself back, with the slug's own words stripped out of the query. Measures *correctness*, independently of any past ranking. (The recall set alone is circular — its answers came from the ranking under test.)
|
|
271
|
+
|
|
272
|
+
Both report hit@1, recall@3/5/10 and MRR against a pinned baseline. There is deliberately no single blended score, and no fabricated "tokens saved" number.
|
|
273
|
+
|
|
274
|
+
It earns its keep immediately. Two changes built for 0.8.0 looked obviously right and were measured wrong: a recency multiplier (cut — real-prompt hit@1 −0.020, MRR −0.018) and destructive stemming, which fixed its motivating query while costing hit@1 −0.038 overall (rebuilt as an additive field, then +0.020/+0.041/+0.019). A BM25 normalisation bug introduced in the same release was caught the same way.
|
|
275
|
+
|
|
261
276
|
---
|
|
262
277
|
|
|
263
278
|
## Depth advertisement, trackers & supersession (v0.6.0)
|
|
@@ -296,6 +311,15 @@ memgit core seed # draft a guide from this project's skills + r
|
|
|
296
311
|
memgit core sync # deliver it into each AI host's own rules file (additive)
|
|
297
312
|
memgit core show / edit # view / curate the guide
|
|
298
313
|
memgit core heal # self-repair a guide that has drifted
|
|
314
|
+
# (a project's FIRST guide is created automatically
|
|
315
|
+
# once it holds 5+ memories — no command needed)
|
|
316
|
+
|
|
317
|
+
# Retrieval evaluation — prove a ranking change helped
|
|
318
|
+
memgit eval mine # freeze a regression set from real recall events
|
|
319
|
+
memgit eval mine --synthetic # non-circular set: query each memory by its own `why`
|
|
320
|
+
memgit eval run --set recall # hit@1 / recall@3,5,10 / MRR vs the pinned baseline
|
|
321
|
+
memgit eval run --baseline # pin the current result as the comparison point
|
|
322
|
+
memgit eval run --misses 10 # inspect the cases where nothing relevant surfaced
|
|
299
323
|
|
|
300
324
|
# Scale & proof
|
|
301
325
|
memgit squash # compress old history (archives what it collapses)
|
|
@@ -352,6 +376,9 @@ memgit thread list / switch / create
|
|
|
352
376
|
| **Windsurf** | MCP stdio | `memgit setup windsurf` |
|
|
353
377
|
| **Cline / Roo-Code** | MCP stdio | `memgit setup cline` |
|
|
354
378
|
| **Continue.dev** | MCP stdio | `memgit setup continue` |
|
|
379
|
+
| **Codex** | MCP stdio (TOML) | `memgit setup codex` |
|
|
380
|
+
| **Antigravity** | MCP stdio | `memgit setup antigravity` |
|
|
381
|
+
| **Gemini CLI** | MCP stdio | `memgit setup gemini-cli` |
|
|
355
382
|
| **ChatGPT (Custom Actions)** | HTTP + OpenAPI | `memgit serve --http` → import `http://localhost:7474/openapi.json` |
|
|
356
383
|
| **Gemini API** | HTTP function calling | `memgit serve --http` + `llm-tool-definitions.json` |
|
|
357
384
|
| **Any MCP tool** | MCP stdio | Add `{"command": "memgit", "args": ["serve"]}` to config |
|
|
@@ -412,7 +439,7 @@ git clone https://github.com/code4161/memgit.git
|
|
|
412
439
|
cd memgit
|
|
413
440
|
python -m venv .venv && source .venv/bin/activate
|
|
414
441
|
pip install -e ".[dev]"
|
|
415
|
-
pytest #
|
|
442
|
+
pytest # 404 tests, all passing, < 5 seconds
|
|
416
443
|
```
|
|
417
444
|
|
|
418
445
|
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
@@ -443,8 +470,13 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
443
470
|
- [x] Lossless memories — full `body` alongside the compact rule (v0.3.0)
|
|
444
471
|
- [x] Project-scoped memories + `memgit onboard` mid-project bootstrap (v0.3.0)
|
|
445
472
|
- [x] VS Code extension (v0.1.5, Marketplace: code416-memgit.memgit)
|
|
473
|
+
- [x] Codex + Antigravity support — MCP registration + `AGENTS.md` core guide (v0.8.0)
|
|
474
|
+
- [x] `memgit eval` — measured retrieval quality, real + non-circular sets (v0.8.0)
|
|
475
|
+
- [x] Usage-aware ranking — the recall ledger feeds relevance, not just the guide (v0.8.0)
|
|
476
|
+
- [x] Automatic core-guide bootstrap — the self-improving loop starts itself (v0.8.0)
|
|
446
477
|
- [ ] JetBrains plugin (Phase 3)
|
|
447
|
-
- [ ] Semantic search via embeddings (Phase 4)
|
|
478
|
+
- [ ] Semantic search via embeddings — gated on `memgit eval` showing a real gain (Phase 4)
|
|
479
|
+
- [ ] Public benchmark numbers (LongMemEval, LoCoMo) (Phase 4)
|
|
448
480
|
- [x] memgit.dev website (live)
|
|
449
481
|
- [ ] Memory compression / auto-summarization (Phase 5)
|
|
450
482
|
- [ ] Team access control + audit trail (Phase 5)
|