memorykit 0.8.0__tar.gz → 0.8.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.
- {memorykit-0.8.0 → memorykit-0.8.2}/CHANGELOG.md +15 -0
- {memorykit-0.8.0 → memorykit-0.8.2}/PKG-INFO +1 -1
- {memorykit-0.8.0 → memorykit-0.8.2}/pyproject.toml +1 -1
- {memorykit-0.8.0 → memorykit-0.8.2}/src/memorykit/__init__.py +1 -1
- {memorykit-0.8.0 → memorykit-0.8.2}/src/memorykit/mcp.py +1 -1
- {memorykit-0.8.0 → memorykit-0.8.2}/src/memorykit/provider.py +33 -6
- {memorykit-0.8.0 → memorykit-0.8.2}/.gitignore +0 -0
- {memorykit-0.8.0 → memorykit-0.8.2}/LICENSE +0 -0
- {memorykit-0.8.0 → memorykit-0.8.2}/README.md +0 -0
- {memorykit-0.8.0 → memorykit-0.8.2}/src/memorykit/__main__.py +0 -0
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.2 — 2026-10-25
|
|
4
|
+
|
|
5
|
+
- The `rag` provider finds a sibling indexkit inside Claude Code's versioned
|
|
6
|
+
plugin cache (`cache/<marketplace>/indexkit/<version>/`), choosing the
|
|
7
|
+
highest installed version. Since indexkit 0.6.4 no longer puts a launcher on
|
|
8
|
+
`PATH`, provider operations otherwise reported indexkit as not installed.
|
|
9
|
+
|
|
10
|
+
## 0.8.1 — 2026-10-25
|
|
11
|
+
|
|
12
|
+
- The `rag` provider finds the sibling indexkit launcher at its new
|
|
13
|
+
`scripts/indexkit` location and falls back to `bin/` for an older checkout.
|
|
14
|
+
- Drop the `$schema` key from `plugin.json`. The claude.ai-hosted plugin sync
|
|
15
|
+
(Claude Desktop) does not recognize it and stripped it with a warning on
|
|
16
|
+
every sync. No change to the plugin's behavior.
|
|
17
|
+
|
|
3
18
|
## 0.8.0 — 2026-08-30
|
|
4
19
|
|
|
5
20
|
- Add safe automatic project detection for GitHub Copilot plugin installs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: memorykit
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.2
|
|
4
4
|
Summary: Provenance-bound durable memory: an immutable record contract, a validator, append-only review state, and a standard-library stdio MCP server. No Python dependencies; requires git on PATH.
|
|
5
5
|
Project-URL: Homepage, https://github.com/mbeacom/context-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/mbeacom/context-kit
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "memorykit"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.2"
|
|
4
4
|
description = "Provenance-bound durable memory: an immutable record contract, a validator, append-only review state, and a standard-library stdio MCP server. No Python dependencies; requires git on PATH."
|
|
5
5
|
requires-python = ">=3.10"
|
|
6
6
|
keywords = [
|
|
@@ -26,7 +26,7 @@ from pathlib import Path
|
|
|
26
26
|
from typing import Any
|
|
27
27
|
|
|
28
28
|
SERVER_NAME = "context-kit-memory"
|
|
29
|
-
SERVER_VERSION = "0.8.
|
|
29
|
+
SERVER_VERSION = "0.8.2"
|
|
30
30
|
# Newest first. The client's requested version is echoed when supported.
|
|
31
31
|
SUPPORTED_PROTOCOLS = ("2025-06-18", "2025-03-26", "2024-11-05")
|
|
32
32
|
# The provider is this package's sibling module, so one path is correct in both
|
|
@@ -1510,7 +1510,7 @@ def _provider_executable(spec: ProviderSpec) -> str:
|
|
|
1510
1510
|
)
|
|
1511
1511
|
|
|
1512
1512
|
|
|
1513
|
-
def _indexkit_root() -> Path | None:
|
|
1513
|
+
def _indexkit_root(origin: Path | None = None) -> Path | None:
|
|
1514
1514
|
"""The sibling indexkit plugin root, when deployed alongside `memory`.
|
|
1515
1515
|
|
|
1516
1516
|
`memory` hard-depends on `indexkit`, so both are installed together and
|
|
@@ -1526,15 +1526,38 @@ def _indexkit_root() -> Path | None:
|
|
|
1526
1526
|
Only a directory that actually contains the launcher counts, so a packaged
|
|
1527
1527
|
install finds nothing and degrades to PATH resolution, which is the right
|
|
1528
1528
|
answer there.
|
|
1529
|
+
|
|
1530
|
+
Claude Code's plugin cache adds a version level
|
|
1531
|
+
(`cache/<marketplace>/indexkit/<version>/`), so a sibling directory without
|
|
1532
|
+
a bootstrap of its own is searched one level down for the highest version
|
|
1533
|
+
that has one. GitHub Copilot CLI installs unversioned and matches directly.
|
|
1529
1534
|
"""
|
|
1530
|
-
for ancestor in Path(__file__).resolve().parents[1:5]:
|
|
1535
|
+
for ancestor in (origin or Path(__file__)).resolve().parents[1:5]:
|
|
1531
1536
|
for name in ("indexkit", "local-rag"):
|
|
1532
1537
|
candidate = ancestor / name
|
|
1533
1538
|
if (candidate / "scripts" / "bootstrap.sh").is_file():
|
|
1534
1539
|
return candidate
|
|
1540
|
+
versioned = _highest_versioned_root(candidate)
|
|
1541
|
+
if versioned is not None:
|
|
1542
|
+
return versioned
|
|
1535
1543
|
return None
|
|
1536
1544
|
|
|
1537
1545
|
|
|
1546
|
+
def _highest_versioned_root(directory: Path) -> Path | None:
|
|
1547
|
+
"""The highest `<directory>/<version>/` that contains an indexkit bootstrap."""
|
|
1548
|
+
if not directory.is_dir():
|
|
1549
|
+
return None
|
|
1550
|
+
best: tuple[tuple[int, ...], Path] | None = None
|
|
1551
|
+
for child in directory.iterdir():
|
|
1552
|
+
match = re.fullmatch(r"v?(\d+(?:\.\d+)*)", child.name)
|
|
1553
|
+
if match is None or not (child / "scripts" / "bootstrap.sh").is_file():
|
|
1554
|
+
continue
|
|
1555
|
+
key = tuple(int(part) for part in match.group(1).split("."))
|
|
1556
|
+
if best is None or key > best[0]:
|
|
1557
|
+
best = (key, child)
|
|
1558
|
+
return None if best is None else best[1]
|
|
1559
|
+
|
|
1560
|
+
|
|
1538
1561
|
def _bundled_executable(spec: ProviderSpec) -> Path | None:
|
|
1539
1562
|
"""Resolve a sibling context-kit plugin launcher that is not on PATH."""
|
|
1540
1563
|
if spec.name != "rag":
|
|
@@ -1542,10 +1565,14 @@ def _bundled_executable(spec: ProviderSpec) -> Path | None:
|
|
|
1542
1565
|
root = _indexkit_root()
|
|
1543
1566
|
if root is None:
|
|
1544
1567
|
return None
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1568
|
+
# indexkit >= 0.6.4 ships its launcher under `scripts/`, because hosted
|
|
1569
|
+
# plugin sync skips any plugin with a top-level `bin/`. `bin/` stays as a
|
|
1570
|
+
# fallback for an older sibling checkout.
|
|
1571
|
+
for directory in ("scripts", "bin"):
|
|
1572
|
+
for name in (spec.executable, *spec.legacy_executables):
|
|
1573
|
+
candidate = root / directory / name
|
|
1574
|
+
if candidate.is_file() and os.access(candidate, os.X_OK):
|
|
1575
|
+
return candidate
|
|
1549
1576
|
return None
|
|
1550
1577
|
|
|
1551
1578
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|