hermes-scope-recall 1.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.
- hermes_scope_recall-1.1.2/.env.example +9 -0
- hermes_scope_recall-1.1.2/.github/workflows/ci.yml +41 -0
- hermes_scope_recall-1.1.2/.github/workflows/pypi.yml +55 -0
- hermes_scope_recall-1.1.2/.github/workflows/release.yml +60 -0
- hermes_scope_recall-1.1.2/CHANGELOG.md +327 -0
- hermes_scope_recall-1.1.2/CONTRIBUTING.md +56 -0
- hermes_scope_recall-1.1.2/DESIGN.md +377 -0
- hermes_scope_recall-1.1.2/LICENSE +21 -0
- hermes_scope_recall-1.1.2/MANIFEST.in +15 -0
- hermes_scope_recall-1.1.2/PKG-INFO +959 -0
- hermes_scope_recall-1.1.2/README.md +929 -0
- hermes_scope_recall-1.1.2/SECURITY.md +40 -0
- hermes_scope_recall-1.1.2/__init__.py +19 -0
- hermes_scope_recall-1.1.2/aliases.py +51 -0
- hermes_scope_recall-1.1.2/artifacts.py +178 -0
- hermes_scope_recall-1.1.2/capture.py +153 -0
- hermes_scope_recall-1.1.2/capture_filters.py +155 -0
- hermes_scope_recall-1.1.2/capture_llm.py +371 -0
- hermes_scope_recall-1.1.2/config.json +131 -0
- hermes_scope_recall-1.1.2/config.py +165 -0
- hermes_scope_recall-1.1.2/docs/differences-from-memory-lancedb-pro.md +103 -0
- hermes_scope_recall-1.1.2/docs/external-shared-memory.md +137 -0
- hermes_scope_recall-1.1.2/docs/hermes-upstream-recommendation-plan.md +143 -0
- hermes_scope_recall-1.1.2/docs/memory.stack.contract.md +174 -0
- hermes_scope_recall-1.1.2/docs/migration.md +158 -0
- hermes_scope_recall-1.1.2/docs/naming.md +71 -0
- hermes_scope_recall-1.1.2/docs/plans/2026.05.17.memory.quality.refactor.md +478 -0
- hermes_scope_recall-1.1.2/docs/stability.md +159 -0
- hermes_scope_recall-1.1.2/embedders.py +538 -0
- hermes_scope_recall-1.1.2/gating.py +186 -0
- hermes_scope_recall-1.1.2/governance.py +440 -0
- hermes_scope_recall-1.1.2/graph.py +328 -0
- hermes_scope_recall-1.1.2/hermes_scope_recall.egg-info/PKG-INFO +959 -0
- hermes_scope_recall-1.1.2/hermes_scope_recall.egg-info/SOURCES.txt +160 -0
- hermes_scope_recall-1.1.2/hermes_scope_recall.egg-info/dependency_links.txt +1 -0
- hermes_scope_recall-1.1.2/hermes_scope_recall.egg-info/entry_points.txt +2 -0
- hermes_scope_recall-1.1.2/hermes_scope_recall.egg-info/requires.txt +13 -0
- hermes_scope_recall-1.1.2/hermes_scope_recall.egg-info/top_level.txt +1 -0
- hermes_scope_recall-1.1.2/http_utils.py +44 -0
- hermes_scope_recall-1.1.2/hygiene.py +150 -0
- hermes_scope_recall-1.1.2/installer.py +296 -0
- hermes_scope_recall-1.1.2/journal.py +1526 -0
- hermes_scope_recall-1.1.2/memory_ops.py +797 -0
- hermes_scope_recall-1.1.2/migration.py +42 -0
- hermes_scope_recall-1.1.2/models.py +127 -0
- hermes_scope_recall-1.1.2/nightly_digest.py +1469 -0
- hermes_scope_recall-1.1.2/plugin.yaml +7 -0
- hermes_scope_recall-1.1.2/prompting.py +88 -0
- hermes_scope_recall-1.1.2/provider.py +777 -0
- hermes_scope_recall-1.1.2/py.typed +0 -0
- hermes_scope_recall-1.1.2/pyproject.toml +73 -0
- hermes_scope_recall-1.1.2/recall.py +337 -0
- hermes_scope_recall-1.1.2/schemas.py +296 -0
- hermes_scope_recall-1.1.2/scope.py +247 -0
- hermes_scope_recall-1.1.2/scope_recall.py +25 -0
- hermes_scope_recall-1.1.2/scoring.py +164 -0
- hermes_scope_recall-1.1.2/scripts/check.release.py +332 -0
- hermes_scope_recall-1.1.2/scripts/doctor.py +576 -0
- hermes_scope_recall-1.1.2/scripts/extract-changelog.py +37 -0
- hermes_scope_recall-1.1.2/scripts/import.openclaw.memory_lancedb_pro.py +272 -0
- hermes_scope_recall-1.1.2/scripts/journal-digest.py +28 -0
- hermes_scope_recall-1.1.2/scripts/migrate.legacy_hygiene.py +208 -0
- hermes_scope_recall-1.1.2/scripts/nightly-digest.py +28 -0
- hermes_scope_recall-1.1.2/scripts/repair.vector_index.py +233 -0
- hermes_scope_recall-1.1.2/scripts/report.hygiene.py +214 -0
- hermes_scope_recall-1.1.2/secret_index.py +114 -0
- hermes_scope_recall-1.1.2/setup.cfg +4 -0
- hermes_scope_recall-1.1.2/sql_store.py +416 -0
- hermes_scope_recall-1.1.2/sqlite_vector_store.py +258 -0
- hermes_scope_recall-1.1.2/storage_views.py +300 -0
- hermes_scope_recall-1.1.2/tests/test_audit_regressions.py +91 -0
- hermes_scope_recall-1.1.2/tests/test_capture_filters.py +150 -0
- hermes_scope_recall-1.1.2/tests/test_capture_llm_manual.py +257 -0
- hermes_scope_recall-1.1.2/tests/test_conflict_governance.py +146 -0
- hermes_scope_recall-1.1.2/tests/test_embedders.py +312 -0
- hermes_scope_recall-1.1.2/tests/test_governance_contract_regressions.py +243 -0
- hermes_scope_recall-1.1.2/tests/test_hygiene.py +92 -0
- hermes_scope_recall-1.1.2/tests/test_installer.py +222 -0
- hermes_scope_recall-1.1.2/tests/test_journal_digest.py +858 -0
- hermes_scope_recall-1.1.2/tests/test_legacy_hygiene_migration.py +125 -0
- hermes_scope_recall-1.1.2/tests/test_memory_classification.py +95 -0
- hermes_scope_recall-1.1.2/tests/test_nightly_digest.py +471 -0
- hermes_scope_recall-1.1.2/tests/test_optional_vector_deps.py +107 -0
- hermes_scope_recall-1.1.2/tests/test_provider.py +2271 -0
- hermes_scope_recall-1.1.2/tests/test_release.py +1129 -0
- hermes_scope_recall-1.1.2/tests/test_report_hygiene_script.py +186 -0
- hermes_scope_recall-1.1.2/tests/test_retrieval_policy.py +141 -0
- hermes_scope_recall-1.1.2/tests/test_retrieval_rrf_graph.py +51 -0
- hermes_scope_recall-1.1.2/tests/test_roadmap_graph_relations.py +121 -0
- hermes_scope_recall-1.1.2/tests/test_roadmap_observability.py +100 -0
- hermes_scope_recall-1.1.2/tests/test_roadmap_retrieval.py +112 -0
- hermes_scope_recall-1.1.2/tests/test_scoring.py +64 -0
- hermes_scope_recall-1.1.2/tests/test_sql_store_fts.py +72 -0
- hermes_scope_recall-1.1.2/tests/test_sqlite_vector_store.py +122 -0
- hermes_scope_recall-1.1.2/tests/test_storage_views.py +135 -0
- hermes_scope_recall-1.1.2/tests/test_tool_hygiene.py +85 -0
- hermes_scope_recall-1.1.2/tests/test_v1015_audit_regressions.py +440 -0
- hermes_scope_recall-1.1.2/tests/test_vector_policy.py +154 -0
- hermes_scope_recall-1.1.2/tooling.py +457 -0
- hermes_scope_recall-1.1.2/vector_runtime.py +275 -0
- hermes_scope_recall-1.1.2/vector_store.py +306 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# scope-recall does not require external credentials for local bootstrap.
|
|
2
|
+
# Without an embedding API key, it falls back to the deterministic local-hash embedder.
|
|
3
|
+
|
|
4
|
+
# Optional: Gemini/OpenAI-compatible embedding endpoint used by config.json defaults.
|
|
5
|
+
# Use a real value only in your private environment, never commit it.
|
|
6
|
+
SCOPE_RECALL_GEMINI_EMBEDDING_API_KEY=public-test-token
|
|
7
|
+
|
|
8
|
+
# Optional: override the OpenAI-compatible base URL in a custom config.
|
|
9
|
+
# SCOPE_RECALL_GEMINI_EMBEDDING_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
name: Python ${{ matrix.python-version }}
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
python-version: ['3.11', '3.12']
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Check out scope-recall
|
|
21
|
+
uses: actions/checkout@v6
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v6
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
|
|
28
|
+
- name: Install Hermes runtime for plugin tests
|
|
29
|
+
run: |
|
|
30
|
+
git clone --depth 1 https://github.com/NousResearch/hermes-agent.git .hermes-agent-src
|
|
31
|
+
python -m pip install --upgrade pip
|
|
32
|
+
python -m pip install -e .hermes-agent-src
|
|
33
|
+
|
|
34
|
+
- name: Install scope-recall test dependencies
|
|
35
|
+
run: |
|
|
36
|
+
python -m pip install -e ".[lancedb,dev]"
|
|
37
|
+
|
|
38
|
+
- name: Run full V1 release gate
|
|
39
|
+
env:
|
|
40
|
+
PYTHONPATH: ${{ github.workspace }}/.hermes-agent-src:${{ github.workspace }}
|
|
41
|
+
run: python scripts/check.release.py
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
tag:
|
|
7
|
+
description: 'Git tag to publish, e.g. v1.1.2'
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
release:
|
|
11
|
+
types: [published]
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
publish:
|
|
18
|
+
name: Build and publish distribution
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
environment:
|
|
21
|
+
name: pypi
|
|
22
|
+
url: https://pypi.org/p/hermes-scope-recall
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
id-token: write
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- name: Resolve ref
|
|
29
|
+
id: ref
|
|
30
|
+
run: |
|
|
31
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
32
|
+
echo "ref=${{ inputs.tag }}" >> "$GITHUB_OUTPUT"
|
|
33
|
+
else
|
|
34
|
+
echo "ref=${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
- name: Check out release tag
|
|
38
|
+
uses: actions/checkout@v6
|
|
39
|
+
with:
|
|
40
|
+
ref: ${{ steps.ref.outputs.ref }}
|
|
41
|
+
persist-credentials: false
|
|
42
|
+
|
|
43
|
+
- name: Set up Python
|
|
44
|
+
uses: actions/setup-python@v6
|
|
45
|
+
with:
|
|
46
|
+
python-version: '3.12'
|
|
47
|
+
|
|
48
|
+
- name: Install build frontend
|
|
49
|
+
run: python -m pip install --upgrade build
|
|
50
|
+
|
|
51
|
+
- name: Build sdist and wheel
|
|
52
|
+
run: python -m build --sdist --wheel
|
|
53
|
+
|
|
54
|
+
- name: Publish to PyPI
|
|
55
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ['v*']
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: 'Tag to release (e.g. v1.0.5)'
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release:
|
|
14
|
+
name: Create GitHub Release
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Check out
|
|
21
|
+
uses: actions/checkout@v6
|
|
22
|
+
|
|
23
|
+
- name: Resolve tag
|
|
24
|
+
id: tag
|
|
25
|
+
run: |
|
|
26
|
+
if [ -n "${{ github.event.inputs.tag }}" ]; then
|
|
27
|
+
echo "tag=${{ github.event.inputs.tag }}" >> "$GITHUB_OUTPUT"
|
|
28
|
+
else
|
|
29
|
+
echo "tag=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT"
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
- name: Extract changelog entry
|
|
33
|
+
id: changelog
|
|
34
|
+
run: |
|
|
35
|
+
TAG="${{ steps.tag.outputs.tag }}"
|
|
36
|
+
VERSION="${TAG#v}"
|
|
37
|
+
|
|
38
|
+
python3 scripts/extract-changelog.py "$VERSION" CHANGELOG.md release-notes.md
|
|
39
|
+
|
|
40
|
+
echo 'notes<<EOF' >> "$GITHUB_OUTPUT"
|
|
41
|
+
cat release-notes.md >> "$GITHUB_OUTPUT"
|
|
42
|
+
echo 'EOF' >> "$GITHUB_OUTPUT"
|
|
43
|
+
|
|
44
|
+
- name: Create or update GitHub Release
|
|
45
|
+
env:
|
|
46
|
+
GH_TOKEN: ${{ github.token }}
|
|
47
|
+
run: |
|
|
48
|
+
TAG="${{ steps.tag.outputs.tag }}"
|
|
49
|
+
TITLE="scope-recall ${TAG}"
|
|
50
|
+
|
|
51
|
+
if gh release view "$TAG" >/dev/null 2>&1; then
|
|
52
|
+
gh release edit "$TAG" \
|
|
53
|
+
--title "$TITLE" \
|
|
54
|
+
--notes-file release-notes.md
|
|
55
|
+
else
|
|
56
|
+
gh release create "$TAG" \
|
|
57
|
+
--title "$TITLE" \
|
|
58
|
+
--notes-file release-notes.md \
|
|
59
|
+
--verify-tag
|
|
60
|
+
fi
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `scope-recall` will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [1.1.2] - 2026-06-14
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- Sanitized gateway image attachment markers before capture/journal storage, removing local `image_cache/img_*` paths and inline image placeholders while preserving the user's surrounding text.
|
|
9
|
+
- Added regression coverage so screenshot-only payloads are rejected as empty and screenshot questions are journaled without local image paths.
|
|
10
|
+
|
|
11
|
+
## [1.1.1] - 2026-06-14
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- Treated short assistant acknowledgement messages such as `Understood.`, `Noted.`, and common Chinese ACKs as trivial capture input so they cannot enter the journal.
|
|
15
|
+
- Prevented assistant-only journal rows from being promoted by heuristic or LLM journal digest, including legacy rows created before the ACK filter.
|
|
16
|
+
- Added memory-quality regression tests proving assistant-only acknowledgements are skipped rather than becoming durable memories.
|
|
17
|
+
|
|
18
|
+
## [1.1.0] - 2026-06-14
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- Added the `hermes-scope-recall` standalone distribution shape with a `hermes-scope-recall` console script.
|
|
22
|
+
- Added `hermes-scope-recall install` to copy the provider into `$HERMES_HOME/plugins/scope-recall/` without touching provider-owned data under `$HERMES_HOME/scope-recall/`.
|
|
23
|
+
- Added `hermes-scope-recall verify` plus installer tests covering dry-run, forced replacement safety, Hermes memory-provider discovery, and CLI round trips.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- Renamed the Python distribution package from `scope-recall` to `hermes-scope-recall` while preserving the Hermes provider ID `scope-recall` and Python import package `scope_recall`.
|
|
27
|
+
- Packaged plugin metadata, docs, and operator scripts inside the wheel package so the installer can register a complete unpacked Hermes provider from site-packages.
|
|
28
|
+
- Updated README install guidance for the supported standalone-provider path proposed for Hermes upstream documentation.
|
|
29
|
+
|
|
30
|
+
## [1.0.16] - 2026-06-14
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- Probed LanceDB/PyArrow native imports in a child process before importing them inside Hermes, so no-AVX/AVX2 hosts that hit `Illegal instruction` are treated as unsupported instead of crashing the agent process.
|
|
34
|
+
- Added automatic `sqlite-bruteforce` vector fallback when the configured LanceDB companion is absent or unsafe and `vector.fallback_backend=sqlite-bruteforce` is set.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- Added `vector.fallback_backend` to the default config and setup schema.
|
|
38
|
+
- Documented the native-safe vector path for non-AVX hosts and bumped package, plugin, release-check metadata, README, and stability docs to `1.0.16`.
|
|
39
|
+
|
|
40
|
+
## [1.0.15] - 2026-06-13
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
- Reused one chat-completions endpoint builder across capture, journal, and nightly digest paths so provider-specific endpoints and `append_v1=false` are honored consistently.
|
|
44
|
+
- Redacted sensitive HTTP/SSE error bodies before provider exceptions surface from Codex responses or streaming response parsing.
|
|
45
|
+
- Kept pure `role=tool` journal traces in provenance only; heuristic digest no longer promotes raw tool output into durable memory.
|
|
46
|
+
- Changed empty-store nightly scope inference to use an explicit or CLI fallback instead of silently defaulting to Telegram.
|
|
47
|
+
- Split readable aliases from writable scopes so legacy cross-platform platform scopes remain read-only unless an explicit migration writes them.
|
|
48
|
+
- Preserved the updated row's real `scope_id` when nightly digest updates vectors for legacy rows.
|
|
49
|
+
- Redacted secret scanner findings in the release gate while still reporting file, line, and rule evidence.
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
- Added regression coverage for the v1.0.15 audit findings and updated the provider tool-trace test to assert journal-only provenance behavior.
|
|
53
|
+
- Bumped package, plugin, release-check metadata, README, and stability docs to `1.0.15`.
|
|
54
|
+
|
|
55
|
+
## [1.0.14] - 2026-06-13
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
- Added opt-in canonical identity mapping for cross-platform durable recall. When `identity.cross_platform_shared_scope=true` and explicit `identity.user_aliases` map platform accounts to one canonical user, `user`/`memory`/`project`/`ops` rows share a canonical durable scope while `general` scratch remains local to the platform/account/chat/session scope.
|
|
59
|
+
- Added query-time compatibility for legacy platform-specific durable shared scopes so mapped identities can still read existing rows before any explicit migration.
|
|
60
|
+
- Added digest transport controls for provider-specific OpenAI-compatible endpoints: `endpoint` / `chat_endpoint` and `append_v1=false`, including CLI support for `scripts/nightly-digest.py --endpoint` and `--no-append-v1`.
|
|
61
|
+
- Added regression coverage for default isolation, unmapped-account isolation, mapped durable sharing, scratch non-sharing, legacy shared-scope aliases, endpoint construction, and redacted provider HTTP errors.
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
- Fixed journal/nightly digest chat-completions calls that incorrectly forced `/v1/chat/completions` onto provider-specific roots such as Ark Coding Plan.
|
|
65
|
+
- Fixed maintenance tool schema registration so `maintenance_tools_enabled=true` is visible before provider `initialize()`, matching Hermes tool registration order.
|
|
66
|
+
- Preserved built-in curated memory default behavior for CLI sessions without an explicit user id while still allowing configured `cli_user_id_fallback` for canonical identity mapping.
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
- Newly written provider, journal digest, and nightly digest rows include audit metadata for `raw_platform`, `raw_user_id`, and, when mapped, `canonical_user` / `scope_identity_mode`.
|
|
70
|
+
- Bumped package, plugin, release-check metadata, README, and stability docs to `1.0.14`.
|
|
71
|
+
|
|
72
|
+
## [1.0.13] - 2026-06-12
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
- Added lifecycle-aware conflict review: newly inserted contradictory durable memories now record bidirectional `contradicts` relations plus `needs_conflict_review` metadata without automatically superseding or hiding older rows.
|
|
76
|
+
- Added governance review candidates for local scratch rows, conflict-review rows, superseded/obsolete/rejected lifecycle rows, raw turn-source rows, low-confidence rows, and archive candidates so historical dirty data can be reviewed without automatic deletion.
|
|
77
|
+
- Added `scripts/migrate.legacy_hygiene.py`, a dry-run-first legacy hygiene migrator that backs up SQLite truth, archives historical `general`/raw/scratch rows without deleting content, and normalizes missing durable lifecycle/category metadata.
|
|
78
|
+
- Added regression coverage proving automatic conflict detection does not hide older rows, exact-id forget behavior matches docs, lifecycle metadata survives governance runs, dirty-history candidates are reported for operator review, LLM digest retries transient failures before quarantine, and legacy hygiene migration is backup-backed and read-only by default.
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
- Recall still suppresses explicitly `superseded`, `obsolete`, `rejected`, and now `archived` rows by default, but automatic contradiction detection no longer writes `lifecycle=superseded`; operators must use explicit update/merge/delete actions after review.
|
|
82
|
+
- Journal LLM digest now classifies provider failures and retries transient timeout/rate-limit/network/server errors before quarantining; auth/quota/parse failures fail closed without wasteful retry loops.
|
|
83
|
+
- Governance classification now preserves existing lifecycle and conflict-review metadata instead of overwriting it with a fresh generic classification.
|
|
84
|
+
- Bumped package, plugin, release-check metadata, README, and stability docs to `1.0.13`.
|
|
85
|
+
|
|
86
|
+
## [1.0.12] - 2026-06-12
|
|
87
|
+
|
|
88
|
+
### Added
|
|
89
|
+
- Added journal-first provenance capture with `journal_entries`, `journal_digest_runs`, and `memory_journal_sources` tables. Eligible turn text is staged as provenance instead of being written directly as durable recall memory.
|
|
90
|
+
- Added `scripts/journal-digest.py`, a background digest entrypoint that groups related journal turns, creates high-density memory candidates, merge-upserts existing rows, links source journal evidence, and syncs the configured vector companion only for durable memory rows.
|
|
91
|
+
- Added weighted reciprocal-rank fusion (RRF) and entity-distance scoring primitives so lexical, vector, BM25, curated-memory, and entity-neighborhood signals can be combined without trusting incompatible raw score scales.
|
|
92
|
+
- Added regression coverage for journal/provenance storage, provider long-turn chunking, digest evidence links, same-topic merge/upsert behavior, LLM-first extractor defaults, non-silent LLM failure handling, background digest scheduling, doctor `.env` isolation, RRF promotion of cross-signal hits, and entity-distance reranking.
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
- `sync_turn()` now defaults to journal-first staging and routes long eligible turns into the journal chunking path instead of dropping them at the outer capture-length gate. Legacy per-turn regex durable extraction is explicitly gated behind `per_turn_extraction.enabled=false` by default, and raw user fallback remains disabled by default.
|
|
96
|
+
- `on_session_end()` now captures compact tool execution traces into journal provenance; synchronous durable promotion is not the default, and LLM session-end digest requires explicit `journal.allow_session_end_llm=true`.
|
|
97
|
+
- Journal digest now defaults to LLM-first extraction, groups by conversation session/topic, runs from a non-blocking background scheduler controlled by `journal.digest_interval_hours`, honors `journal.max_entries_per_digest`, records skipped candidates in `journal_rejections`, preserves provenance by default (`retention_days=0`), and requires explicit `journal.allow_heuristic_fallback=true` or `--extractor heuristic` before degraded heuristic fallback can consume journal evidence.
|
|
98
|
+
- Hybrid retrieval now includes bounded BM25 final-score contribution and RRF metadata blending while preserving current-turn recall, scope isolation, and lexical/vector fallback behavior.
|
|
99
|
+
- Bumped package, plugin, release-check metadata, README, DESIGN, and stability docs to `1.0.12`.
|
|
100
|
+
|
|
101
|
+
### Fixed
|
|
102
|
+
- Fixed unrelated journal tasks over-merging through a global `scope-recall` bucket, while preserving same-session merge/upsert behavior for continuing work.
|
|
103
|
+
- Fixed `scope_recall_forget`/dedupe deletion leaving orphan `memory_journal_sources` provenance rows.
|
|
104
|
+
- Extended `scripts/doctor.py` to validate journal/provenance schema, backlog, digest run, rejection, and orphan-link health without leaking profile `.env` values into process-global `os.environ`.
|
|
105
|
+
|
|
106
|
+
## [1.0.11] - 2026-06-11
|
|
107
|
+
|
|
108
|
+
### Added
|
|
109
|
+
- Added a `MiniMaxEmbedder` (provider: `minimax`) and a `build_embedder` route for the MiniMax `embo-01` embedding endpoint. The endpoint is non-OpenAI-compatible (`texts` plural, `type: "db" | "query"`, `vectors` reply), so the embedder talks to it directly via `urllib`.
|
|
110
|
+
- Added MiniMax document/query request-type separation: vector indexing/upserts use `db`, while vector search uses `query` through the embedder query path.
|
|
111
|
+
- Added optional MiniMax `GroupId` support for accounts that still require it, with `group_id` / `group_id_env` configuration.
|
|
112
|
+
|
|
113
|
+
### Changed
|
|
114
|
+
- Bumped package, plugin, release-check metadata, README, and stability docs to `1.0.11`.
|
|
115
|
+
|
|
116
|
+
## [1.0.10] - 2026-06-10
|
|
117
|
+
|
|
118
|
+
### Added
|
|
119
|
+
- Added deterministic external-artifact enrichment for direct memory writes and nightly digest candidates. GitHub issues, PRs, commits, releases, repositories, and URLs now get a human-readable `Artifact anchors:` block plus structured `artifacts` metadata, derived entities, and tags.
|
|
120
|
+
- Added `scope_recall_store_secret_index`, an explicit credential-index tool that stores searchable service/account/purpose/vault-reference metadata without storing plaintext secret values in SQLite, FTS, vector text, exports, logs, or chat replies.
|
|
121
|
+
- Added regression coverage for direct GitHub issue anchors, nightly digest artifact preservation, and secret-index export hygiene.
|
|
122
|
+
|
|
123
|
+
### Changed
|
|
124
|
+
- Bumped package, plugin, README, stability contract, and release-check metadata to `1.0.10`.
|
|
125
|
+
- Updated project URLs to the Hermes-specific repository slug `410979729/scope-recall-hermes` while keeping the runtime package and plugin ID as `scope-recall`.
|
|
126
|
+
- Strengthened nightly digest extraction instructions so external artifacts retain repo/name, issue/PR/release/commit identifiers, exact URLs, and available status/date/author/next-step anchors.
|
|
127
|
+
|
|
128
|
+
### Fixed
|
|
129
|
+
- Fixed vague memory records that mentioned external work without durable lookup anchors, forcing later sessions to rediscover issue/PR/release URLs from scratch.
|
|
130
|
+
- Fixed a secret-index false positive where multiline credential metadata such as a label ending in `credential` followed by `Kind: api_key` could be rejected as `secret-like-content` even though no plaintext secret was stored.
|
|
131
|
+
|
|
132
|
+
## [1.0.9] - 2026-06-09
|
|
133
|
+
|
|
134
|
+
### Added
|
|
135
|
+
- Added the `sqlite-bruteforce` vector backend for non-AVX or native-dependency-sensitive hosts. It stores rebuildable vector companion rows in `$HERMES_HOME/scope-recall/vector.sqlite3` while keeping `$HERMES_HOME/scope-recall/memory.sqlite3` as the truth source.
|
|
136
|
+
- Added `docs/naming.md` to define the public `scope-recall` spelling versus Python/tool/config identifiers that use `scope_recall`.
|
|
137
|
+
- Added `docs/hermes-upstream-recommendation-plan.md` with the standalone-provider checklist and Hermes upstream recommendation route.
|
|
138
|
+
- Added regression coverage for native-free vector imports, `sqlite-bruteforce` runtime sync/search, doctor reporting, and repair-script rebuilds.
|
|
139
|
+
|
|
140
|
+
### Changed
|
|
141
|
+
- Moved `lancedb`/`pyarrow` to the `lancedb` optional dependency extra. Default package import no longer requires native vector dependencies, while CI and LanceDB installs use `.[lancedb]`.
|
|
142
|
+
- Extended `vector.backend` configuration, runtime dispatch, doctor diagnostics, release checks, and repair tooling to cover both `lancedb` and `sqlite-bruteforce` companions.
|
|
143
|
+
- Updated installation docs to distinguish the recommended LanceDB path from the native-free SQLite fallback path.
|
|
144
|
+
|
|
145
|
+
### Fixed
|
|
146
|
+
- Fixed the no-AVX/native-import failure mode where importing vector runtime modules could fail before the operator had a chance to select a safer backend.
|
|
147
|
+
- Fixed the #4 naming ambiguity by documenting where each spelling is authoritative instead of performing a risky whole-repository rename.
|
|
148
|
+
|
|
149
|
+
## [1.0.8] - 2026-06-03
|
|
150
|
+
|
|
151
|
+
### Added
|
|
152
|
+
- Added deterministic Chinese entity fallback hints so compound input-method terms such as `自然码` and `双拼` are extracted even when Jieba is unavailable or segments differently in CI/runtime environments.
|
|
153
|
+
- Added `docs/external-shared-memory.md` to document safe bridge boundaries for deployments with a central shared backend such as PostgreSQL.
|
|
154
|
+
|
|
155
|
+
### Changed
|
|
156
|
+
- Bumped package, plugin, release-check metadata, README, and stability docs to `1.0.8`.
|
|
157
|
+
- Reworded the V1 scope documentation around the positive architecture: local-first recall, SQLite truth storage, LanceDB companion retrieval, explicit bridge boundaries for external shared backends, Hermes-native skill ownership for procedural knowledge, and deployment-driven observability.
|
|
158
|
+
- Included the external shared-memory integration document in release-gate source and wheel checks.
|
|
159
|
+
|
|
160
|
+
### Fixed
|
|
161
|
+
- Fixed the GitHub Actions regression where the Chinese entity test could fail because `自然码` was not extracted when Jieba was not installed or did not split the compound phrase as expected.
|
|
162
|
+
|
|
163
|
+
## [1.0.7] - 2026-06-03
|
|
164
|
+
|
|
165
|
+
### Added
|
|
166
|
+
- Added `scripts/doctor.py`, a read-only source/runtime health report that checks release metadata alignment, SQLite truth availability, LanceDB companion readability, and repair recommendations.
|
|
167
|
+
- Added BM25 as an optional final-score component for hybrid retrieval, while preserving candidate-local SQLite FTS5 `bm25()` normalization and raw-score metadata for explainability.
|
|
168
|
+
- Added optional Jieba-backed Chinese entity extraction and broader code-ish entity extraction for mixed Chinese/English project memory.
|
|
169
|
+
- Added explicit temporal-decay scoring, deterministic source-trust priors, typed `memory_relations`, and conservative contradiction marking with feedback/metadata evidence.
|
|
170
|
+
- Added opt-in shared-pool scope stats plus `scope_recall_inspect`, `scope_recall_explain`, and `scope_recall_benchmark` observability tools.
|
|
171
|
+
|
|
172
|
+
### Changed
|
|
173
|
+
- Bumped package, plugin, release-check metadata, README, and stability docs to `1.0.7`.
|
|
174
|
+
- Extended the release gate stable-tool check to cover the full public V1 default tool surface and new observability tools.
|
|
175
|
+
|
|
176
|
+
### Fixed
|
|
177
|
+
- Aligned the README public version text with package/plugin metadata and documented the Hermes venv + `PYTHONPATH` test command so plain `pytest` from an unrelated environment is not mistaken for release evidence.
|
|
178
|
+
- Preserved pure lexical recall in default hybrid mode when BM25 metadata exists but `bm25_weight` is still zero, avoiding accidental dampening of local/general matches.
|
|
179
|
+
- Reduced generic English entity noise so related-entity results keep explicit caller-provided entities such as `yuheng` visible.
|
|
180
|
+
|
|
181
|
+
## [1.0.6] - 2026-06-01
|
|
182
|
+
|
|
183
|
+
### Added
|
|
184
|
+
- Added `capture_llm` module: LLM-powered semantic extraction of user+assistant turns into classified durable memory (preference, workflow, pitfall, decision, etc.) with user-configurable model and endpoint.
|
|
185
|
+
- Added `capture_llm` configuration block (`capture_llm.enabled`, `capture_llm.model`, `capture_llm.base_url`, etc.) with safe defaults (disabled by default, requires API key).
|
|
186
|
+
- LLM extraction runs in `sync_turn` before legacy regex extraction; if LLM succeeds, regex and raw-user fallback are skipped to avoid noise.
|
|
187
|
+
- LLM extraction preserves entity and tag metadata on stored candidates for better recall targeting.
|
|
188
|
+
|
|
189
|
+
### Changed
|
|
190
|
+
- `sync_turn` now has a four-tier capture pipeline: LLM semantic extraction → regex extraction → raw user capture → raw assistant capture (legacy).
|
|
191
|
+
- Bumped package, plugin, and release-check metadata to `1.0.6`.
|
|
192
|
+
- Synced public README/stability/OpenClaw comparison wording with the v1.0.4/v1.0.5 entity, feedback, and nightly digest features.
|
|
193
|
+
- Extended the public `scope_recall_store` tool schema `memory_type` enum to include workflow-oriented digest types already accepted by the governance layer.
|
|
194
|
+
|
|
195
|
+
## [1.0.5] - 2026-06-01
|
|
196
|
+
|
|
197
|
+
### Added
|
|
198
|
+
- Added `scripts/nightly-digest.py`, a profile-scoped daily conversation digest that reads Hermes `state.db`/legacy `lcm.db`, extracts durable memories, writes through the SQLite truth store, syncs the LanceDB companion when enabled, and records digest run/source ledgers.
|
|
199
|
+
- Added task-session workflow extraction so successful tool-heavy work can be retained as reusable `workflow`/tool-chain memory without storing raw tool or system output.
|
|
200
|
+
- Added digest safeguards for secret redaction, task-vs-normal session classification, dry-run planning, exact duplicate cleanup, and semantic skip/update/insert decisions against existing scope-recall rows.
|
|
201
|
+
- Added regression coverage for nightly digest session loading, sensitive-value redaction, workflow memory writes, digest ledgers, duplicate skips, and dry-run no-write behavior.
|
|
202
|
+
|
|
203
|
+
### Changed
|
|
204
|
+
- Bumped package and plugin metadata to `1.0.5`.
|
|
205
|
+
- Extended accepted `memory_type` values with workflow-oriented digest types such as `workflow`, `tool_trace`, `summary`, `pitfall`, and `decision`.
|
|
206
|
+
|
|
207
|
+
## [1.0.4] - 2026-05-31
|
|
208
|
+
|
|
209
|
+
### Added
|
|
210
|
+
- Added a local SQLite graph layer with `memory_entities` and `memory_feedback` tables.
|
|
211
|
+
- Added deterministic entity extraction and backfill for existing SQLite truth rows.
|
|
212
|
+
- Added `scope_recall_context`, `scope_recall_probe`, `scope_recall_related`, and `scope_recall_feedback` tools.
|
|
213
|
+
- Added memory type, importance, trust, entity, and tag metadata support for explicit `scope_recall_store` calls.
|
|
214
|
+
- Added recall ranking support for metadata quality and entity overlap while preserving lexical/vector gates.
|
|
215
|
+
- Added BM25 ordering for SQLite FTS5 candidates before recency tie-breaking, so older exact lexical matches are not cut from the candidate pool by newer weak hits.
|
|
216
|
+
- Added regression coverage for entity probe, related lookup, compact context rendering, feedback trust updates, and stats.
|
|
217
|
+
|
|
218
|
+
### Changed
|
|
219
|
+
- Bumped package and plugin metadata to `1.0.4`.
|
|
220
|
+
- Extended stats with scoped entity and feedback counts.
|
|
221
|
+
- Made `retrieval.candidate_pool` apply inside SQLite lexical candidate selection.
|
|
222
|
+
|
|
223
|
+
### Fixed
|
|
224
|
+
- Reject generic `[System note: ...]` gateway/runtime wrappers, interrupted-turn recovery prompts, and preserved task-list wrappers before they can enter automatic capture or manual write surfaces.
|
|
225
|
+
- Added regression coverage for the stale restored-message failure mode where an interrupted-turn system note could preserve an older user request and contaminate recall.
|
|
226
|
+
- Tightened hybrid vector-only automatic recall so mid-confidence semantic-neighbor drift does not inject unrelated durable memories when there is no lexical evidence.
|
|
227
|
+
- Added regression coverage for length-framed scope identifiers so delimiter-bearing `user_id` values cannot collide with split `user_id` + `chat_id` scope components.
|
|
228
|
+
- Added regression coverage for operator `scope_recall_dedupe(scope_only=false)` to ensure cross-scope duplicate cleanup matches the documented maintenance-tool semantics.
|
|
229
|
+
|
|
230
|
+
### Changed
|
|
231
|
+
- Refined the operator dedupe regression so it creates duplicate fixture rows through the provider write path while keeping vector sync disabled for deterministic storage-only setup.
|
|
232
|
+
- Reworded DESIGN operational follow-up from reviewer-specific cleanup into public deployment guidance.
|
|
233
|
+
|
|
234
|
+
## [1.0.3] - 2026-05-20
|
|
235
|
+
|
|
236
|
+
### Added
|
|
237
|
+
- Added structured memory classification metadata for new writes, including category, tier, kind, lifecycle, authority, confidence, sensitivity, expiry, entity, tag, and scope-mode fields.
|
|
238
|
+
- Added FTS hygiene repair coverage so missing, stale, or duplicate SQLite FTS rows are detected and repaired deterministically.
|
|
239
|
+
- Added hygiene-report coverage for structured metadata presence and release-time regression coverage for the expanded governance layer.
|
|
240
|
+
|
|
241
|
+
### Changed
|
|
242
|
+
- Isolated the default Gemini embedding credential to `SCOPE_RECALL_GEMINI_EMBEDDING_API_KEY`, avoiding accidental reuse of general OpenAI or Google API keys.
|
|
243
|
+
- Kept the OpenAI-compatible Gemini endpoint as the hosted default while retaining `local-hash` as the no-credential fallback.
|
|
244
|
+
|
|
245
|
+
## [1.0.2] - 2026-05-18
|
|
246
|
+
|
|
247
|
+
### Added
|
|
248
|
+
- Added `capture_filters.py` to centralize automatic capture hygiene and block runtime-wrapper text such as recent Telegram context, context-compaction handoffs, skill-review meta prompts, and secret-like literals before they enter SQLite or vector storage.
|
|
249
|
+
- Added regression coverage for capture filtering, structured content capture, context-wrapper rejection, and default assistant-response non-capture.
|
|
250
|
+
- Added storage receipts to `scope_recall_store`, `scope_recall_update`, and successful `scope_recall_merge` responses so governance companions can close promotion/merge/rejection loops against concrete write evidence.
|
|
251
|
+
- Added conservative curated-memory policy controls: global `USER.md` / `MEMORY.md` recall now requires opt-in for explicit gateway `user_id` contexts unless an allowlist/profile-global mode is configured.
|
|
252
|
+
- Added stable OpenClaw import fingerprint material for missing/invalid legacy timestamps so dry-run/import reruns remain idempotent.
|
|
253
|
+
|
|
254
|
+
### Changed
|
|
255
|
+
- Changed default automatic capture posture to reduce raw `general` noise: `capture_assistant=false`, `min_capture_length=40`, and `capture_hard_max_chars=2500`.
|
|
256
|
+
- Kept short extracted durable candidates eligible for capture even when raw-turn capture uses a higher minimum length, so concise user preferences and ops facts are not lost.
|
|
257
|
+
- Treat exact semantic-merge matches as duplicates rather than no-op merges, preserving existing memory ids without rewriting content.
|
|
258
|
+
|
|
259
|
+
## [1.0.1] - 2026-05-16
|
|
260
|
+
|
|
261
|
+
### Security
|
|
262
|
+
- Scoped all ID-based write paths (`scope_recall_update`, `scope_recall_merge`, query-driven delete plumbing, and dedupe deletes) to the current accessible scope set so a caller that learns an inaccessible memory id cannot update, merge, or delete that row from a different user, sibling agent, or local chat/thread/session scratch scope. Ordinary merge calls now fail if any requested source id is missing or inaccessible, including explicit-content merges that would otherwise silently overwrite the target. Ordinary update/merge calls now also reject shared/local mode changes, preventing durable rows from becoming cross-window `general` scratch or local merges from swallowing shared durable memory.
|
|
263
|
+
- Restricted maintenance tools behind explicit `maintenance_tools_enabled=true`. `scope_recall_dedupe`, `scope_recall_govern`, and `scope_recall_repair` are hidden from the default tool schema and fail closed unless operator mode is enabled; `scope_recall_export(scope_only=false)` also requires operator mode.
|
|
264
|
+
- Changed `scope_recall_dedupe` default behavior to current-scope-only. Cross-scope dedupe remains available only as an operator maintenance action.
|
|
265
|
+
|
|
266
|
+
### Changed
|
|
267
|
+
- Reframed the scope model as permanent shared memory plus local scratch scope: durable `user`/`memory`/`project`/`ops` rows follow the same user + agent identity across windows/chats, while `general` rows stay local.
|
|
268
|
+
- Aligned package metadata, plugin metadata, release checker, README, stability contract, and design docs with the public `v1.0.1` tag.
|
|
269
|
+
- Added `CONTRIBUTING.md` to verified wheel data files so installed release docs match the README documentation table.
|
|
270
|
+
|
|
271
|
+
## [1.0.0] - 2026-05-15
|
|
272
|
+
|
|
273
|
+
### Added
|
|
274
|
+
- Declared the first stable V1 release line with explicit provider identity, storage, tool, retrieval, migration, and runtime-freshness contracts in `docs/stability.md`.
|
|
275
|
+
- Added V1-grade release checks for stable metadata, required documentation, wheel contents, and public-facing version consistency.
|
|
276
|
+
- Kept release-tree scanning focused on `scope-recall` sources when CI clones Hermes into `.hermes-agent-src` for runtime compatibility tests.
|
|
277
|
+
- Added a public README structure with badges, quick start, architecture diagram, tool quick reference, troubleshooting notes, and release-gate guidance.
|
|
278
|
+
|
|
279
|
+
### Changed
|
|
280
|
+
- Promoted package and plugin metadata from `0.2.0` to `1.0.0`, while keeping the public package classifier at beta/release-candidate maturity until broader field use.
|
|
281
|
+
- Aligned the public Python support floor and CI matrix with the current Hermes runtime requirement of Python 3.11+.
|
|
282
|
+
- Tightened V1 documentation around SQLite truth ownership, LanceDB companion-cache rebuildability, and OpenClaw migration/compatibility boundaries.
|
|
283
|
+
- Changed GitHub Actions to run `scripts/check.release.py` as the remote CI gate so CI matches the local V1 release audit.
|
|
284
|
+
- Replaced agent-specific author/copyright wording with project contributor wording and added `SECURITY.md` plus a `py.typed` marker for public-release hygiene.
|
|
285
|
+
- Fixed scope id serialization to avoid delimiter-collision between user/chat/thread/session components and aligned `scope_recall_dedupe(scope_only=false)` with its documented cross-scope semantics.
|
|
286
|
+
|
|
287
|
+
## [0.2.0] - 2026-05-12
|
|
288
|
+
|
|
289
|
+
### Added
|
|
290
|
+
- Added vector audit stats for physical LanceDB row count, unique id count, and duplicate extra row count.
|
|
291
|
+
- Added regression coverage for duplicate vector row repair, stale vector row cleanup, vector upsert failure degradation, light top-level package import, and the intentional `on_memory_write` no-op boundary.
|
|
292
|
+
- Renamed public provider from `lancepro` to `scope-recall` with a deprecated compatibility shim left in place for the old plugin directory.
|
|
293
|
+
- Added SQLite truth store + LanceDB vector companion architecture for hybrid current-turn recall.
|
|
294
|
+
- Added scope isolation coverage for `chat_id`, `thread_id`, and `gateway_session_key`.
|
|
295
|
+
- Added focused release docs: migration notes, upstream differences, and OpenClaw import guidance.
|
|
296
|
+
- Added idempotent OpenClaw import tooling with stable source fingerprints and an `import_ledger`.
|
|
297
|
+
- Added release bootstrap files: `pyproject.toml`, `.gitignore`, and `CONTRIBUTING.md`.
|
|
298
|
+
- Added GitHub Actions CI and a local `scripts/check.release.py` gate for test/build/secret/path/artifact verification.
|
|
299
|
+
- Added `scripts/repair.vector_index.py` to rebuild the LanceDB companion from SQLite truth with backup support.
|
|
300
|
+
|
|
301
|
+
### Changed
|
|
302
|
+
- Switched active Hermes memory provider to `scope-recall`.
|
|
303
|
+
- Refactored provider internals by splitting migration logic, recall fusion, capture flow, storage views, and tool handling into dedicated modules.
|
|
304
|
+
- Changed vector maintenance from init-time full rebuild toward incremental sync by stable row id and `updated_at`, including stale-row cleanup and duplicate physical-row repair.
|
|
305
|
+
- Clarified README and DESIGN documentation to describe the real runtime architecture, configured Gemini OpenAI-compatible default embedder, and local fallback boundary.
|
|
306
|
+
- Updated release regression coverage so the default runtime path explicitly verifies fallback to `local-hash` when API embeddings are unavailable, while dimension-rebuild coverage uses an explicit local-hash config override.
|
|
307
|
+
- Fixed wheel packaging so the published artifact installs as an importable `scope_recall` package instead of scattering provider modules at site-packages top level.
|
|
308
|
+
- Restored Python 3.10/3.11 compatibility in `vector_store.py` by removing 3.12-only f-string quoting syntax.
|
|
309
|
+
- Included the OpenClaw import script in wheel data files for public release completeness.
|
|
310
|
+
- Preserved SQLite truth writes when LanceDB delete/upsert fails and marked the vector layer `needs_repair` for later repair.
|
|
311
|
+
- Kept top-level `import scope_recall` free of Hermes runtime imports; `register()` lazy-loads provider code.
|
|
312
|
+
- Documented `on_memory_write` as an intentional observational no-op because curated memory files are live-read instead of mirrored.
|
|
313
|
+
- Replaced dynamic `ALTER TABLE` f-string construction with an explicit allowlisted migration mapping and changed test placeholder keys to obvious non-secrets.
|
|
314
|
+
|
|
315
|
+
### Compatibility
|
|
316
|
+
- Legacy `lancepro_store`, `lancepro_search`, and `lancepro_stats` aliases remain accepted during transition.
|
|
317
|
+
- Legacy `$HERMES_HOME/lancepro/` SQLite/config storage is migrated forward on first initialization.
|
|
318
|
+
|
|
319
|
+
### Known limitations
|
|
320
|
+
- Vector repair/rebuild is available through `scripts/repair.vector_index.py`, but live gateway runtime freshness still requires an explicit service restart / human-triggered verification after deployment.
|
|
321
|
+
- OpenClaw historical imports still require an explicit one-shot import step; they are not automatically reused.
|
|
322
|
+
## 2026-05-20 — Retrieval hygiene regression
|
|
323
|
+
|
|
324
|
+
- Removed arbitrary recent-memory backfill from lexical SQLite retrieval. This prevents unrelated ordinary turns from recalling fresh durable ops rows (for example OpenClaw / 凌晨 task context) solely because of source/target bonus.
|
|
325
|
+
- Added a `vector_only_min_score` gate so weak vector-only matches cannot auto-recall unrelated durable ops rows without lexical evidence.
|
|
326
|
+
- Added alias-expanded SQL discovery so lexical-only recall still finds intended alias matches such as `response style` → `replies` without broad recency scans.
|
|
327
|
+
- Added regression coverage for unrelated-query suppression, high-confidence semantic hits, relevant lexical hits, and alias-expanded discovery.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Contributing to scope-recall
|
|
2
|
+
|
|
3
|
+
Thanks for helping with `scope-recall`.
|
|
4
|
+
|
|
5
|
+
## Release-quality rules
|
|
6
|
+
|
|
7
|
+
Before opening a PR or publishing a fork:
|
|
8
|
+
|
|
9
|
+
- keep README wording honest about the actual backend and capability boundary
|
|
10
|
+
- keep SQLite as the authoritative truth layer unless the design doc is updated deliberately
|
|
11
|
+
- treat OpenClaw reuse as explicit import/migration, not transparent drop-in compatibility
|
|
12
|
+
- do not remove the `lancepro` compatibility shim until downstream users and configs are cleaned up
|
|
13
|
+
- preserve an explicit vector repair path via `scripts/repair.vector_index.py`
|
|
14
|
+
- `scope-recall` uses a SQLite truth layer plus a rebuildable vector companion (LanceDB by default, sqlite-bruteforce for native-free hosts); see the architecture and stability contract for details
|
|
15
|
+
- keep `queue_prefetch()` as a no-op unless you also prove cross-turn topic bleed protections another way
|
|
16
|
+
|
|
17
|
+
## Local development
|
|
18
|
+
|
|
19
|
+
From a Hermes profile with the plugin installed:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
./hermes-agent/venv/bin/pytest -q /path/to/plugins/scope-recall/tests/test_provider.py
|
|
23
|
+
python3 -m py_compile /path/to/plugins/scope-recall/*.py /path/to/plugins/scope-recall/scripts/*.py
|
|
24
|
+
./hermes-agent/venv/bin/hermes memory status
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## What to test before merge
|
|
28
|
+
|
|
29
|
+
Minimum gate:
|
|
30
|
+
|
|
31
|
+
- plugin loads from `$HERMES_HOME/plugins`
|
|
32
|
+
- current-turn recall still uses the current query only
|
|
33
|
+
- `chat_id`, `thread_id`, and `gateway_session_key` isolation still hold
|
|
34
|
+
- curated memory add/replace/remove still reflect live file truth
|
|
35
|
+
- hybrid/vector stats remain sane
|
|
36
|
+
- legacy `lancepro_*` aliases still work during the deprecation window
|
|
37
|
+
|
|
38
|
+
## Packaging expectations
|
|
39
|
+
|
|
40
|
+
If you publish a standalone repo or wheel:
|
|
41
|
+
|
|
42
|
+
- keep `pyproject.toml`, `LICENSE`, `CHANGELOG.md`, `README.md`, and `DESIGN.md` in sync
|
|
43
|
+
- exclude runtime artifacts like `__pycache__/`, `lancedb/`, `vector.sqlite3`, and `*.sqlite3`
|
|
44
|
+
- verify `pip wheel . --no-deps` succeeds from a clean checkout
|
|
45
|
+
- run `python scripts/check.release.py` before publishing
|
|
46
|
+
- remember that current Hermes runtime discovery for user plugins is directory-based (`$HERMES_HOME/plugins/<name>/`); wheel success is build hygiene, not by itself a proof of discoverable runtime installation for this plugin layout
|
|
47
|
+
|
|
48
|
+
## Documentation expectations
|
|
49
|
+
|
|
50
|
+
If behavior changes, update these together:
|
|
51
|
+
|
|
52
|
+
- `README.md`
|
|
53
|
+
- `DESIGN.md`
|
|
54
|
+
- `docs/migration.md`
|
|
55
|
+
- `docs/differences-from-memory-lancedb-pro.md`
|
|
56
|
+
- `CHANGELOG.md`
|