luminary-memory 0.2.0__tar.gz → 0.2.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.
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/workflows/publish.yml +5 -5
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.gitignore +3 -0
- luminary_memory-0.2.2/CHANGELOG.md +99 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/PKG-INFO +39 -4
- luminary_memory-0.2.2/PLAN-v0.2.1.md +749 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/README.md +37 -3
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/ROADMAP.md +15 -1
- luminary_memory-0.2.2/benchmarks/README.md +52 -0
- luminary_memory-0.2.2/benchmarks/RESULTS.md +62 -0
- luminary_memory-0.2.2/benchmarks/hermes_provider_bench.py +131 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/run_benchmarks.py +2 -2
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/synthetic.py +0 -1
- luminary_memory-0.2.2/docs/hermes-integration.md +116 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/index.md +1 -0
- luminary_memory-0.2.2/hermes/README.md +104 -0
- luminary_memory-0.2.2/hermes/SKILL.md +171 -0
- luminary_memory-0.2.2/hermes/hooks/luminary-activity/HOOK.yaml +4 -0
- luminary_memory-0.2.2/hermes/hooks/luminary-activity/README.md +47 -0
- luminary_memory-0.2.2/hermes/hooks/luminary-activity/handler.py +90 -0
- luminary_memory-0.2.2/hermes/install.sh +126 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/pyproject.toml +7 -1
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/__init__.py +1 -1
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/api.py +5 -5
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/sqlite.py +49 -9
- luminary_memory-0.2.2/src/luminary_memory/hermes/__init__.py +15 -0
- luminary_memory-0.2.2/src/luminary_memory/hermes/config.py +80 -0
- luminary_memory-0.2.2/src/luminary_memory/hermes/config_schema.py +48 -0
- luminary_memory-0.2.2/src/luminary_memory/hermes/plugin.yaml +8 -0
- luminary_memory-0.2.2/src/luminary_memory/hermes/provider.py +791 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/ingest/llm.py +24 -5
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/graph.py +69 -27
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/temporal.py +22 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/schema.py +3 -0
- luminary_memory-0.2.2/tests/conftest.py +29 -0
- luminary_memory-0.2.2/tests/hermes/test_backup_paths.py +29 -0
- luminary_memory-0.2.2/tests/hermes/test_config.py +60 -0
- luminary_memory-0.2.2/tests/hermes/test_entrypoint.py +21 -0
- luminary_memory-0.2.2/tests/hermes/test_hooks.py +71 -0
- luminary_memory-0.2.2/tests/hermes/test_lifecycle.py +69 -0
- luminary_memory-0.2.2/tests/hermes/test_provider_import.py +29 -0
- luminary_memory-0.2.2/tests/hermes/test_recall.py +78 -0
- luminary_memory-0.2.2/tests/hermes/test_session_boundaries.py +67 -0
- luminary_memory-0.2.2/tests/hermes/test_sync_turn.py +73 -0
- luminary_memory-0.2.2/tests/hermes/test_system_prompt.py +39 -0
- luminary_memory-0.2.2/tests/hermes/test_tools.py +71 -0
- luminary_memory-0.2.2/tests/hermes_stubs/agent/memory_provider.py +93 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/index.html +13 -1
- luminary_memory-0.2.0/CHANGELOG.md +0 -55
- luminary_memory-0.2.0/benchmarks/README.md +0 -17
- luminary_memory-0.2.0/docs/hermes-integration.md +0 -37
- luminary_memory-0.2.0/hermes/README.md +0 -36
- luminary_memory-0.2.0/hermes/SKILL.md +0 -85
- luminary_memory-0.2.0/website/plan.md +0 -366
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/workflows/ci.yml +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/workflows/pages.yml +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/CODE_OF_CONDUCT.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/CONTRIBUTING.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/LICENSE +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/PLAN-v0.2.0.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/PLAN.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/SECURITY.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/__init__.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/metrics.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/api.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/architecture.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/backends.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/cli.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/lifecycle.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/quickstart.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/recall.md +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/__init__.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/base.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/pgvector.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/budget.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/cli.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/config.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/embeddings/__init__.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/embeddings/fastembed.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/export.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/ingest/__init__.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/ingest/whitelist.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/__init__.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/cleanup.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/consolidate.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/prune.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/runner.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/__init__.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/dedup.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/fusion.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/keyword.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/planner.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/semantic.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/snippets.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/types.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/__init__.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_api.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_api_extended.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_backend_pgvector.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_backend_sqlite.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_budget.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_cli.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_dedup_jaccard.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_embeddings.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_fusion_rrf.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_ingest_whitelist.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_lifecycle.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_graph.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_keyword.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_orchestrator.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_semantic.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_temporal.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_schema.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t10_export.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t11_limit_zero.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t1_hnsw.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t3_planner.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t4_batch.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t5_enricher.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t6_tag_scoped.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t7_updated_at.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t8_snippets.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t9_cli_json.py +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/.nojekyll +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/css/luminary.css +0 -0
- {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/js/luminary.js +0 -0
|
@@ -3,6 +3,7 @@ name: Publish
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
tags: ["v*"]
|
|
6
|
+
workflow_dispatch:
|
|
6
7
|
|
|
7
8
|
permissions:
|
|
8
9
|
contents: write
|
|
@@ -29,9 +30,9 @@ jobs:
|
|
|
29
30
|
python -m build
|
|
30
31
|
- name: Build Hermes skill artifact
|
|
31
32
|
run: |
|
|
32
|
-
mkdir -p
|
|
33
|
-
zip -j
|
|
34
|
-
ls -lh
|
|
33
|
+
mkdir -p skill_asset
|
|
34
|
+
zip -j skill_asset/luminary-memory-skill.zip hermes/SKILL.md hermes/README.md
|
|
35
|
+
ls -lh skill_asset/luminary-memory-skill.zip
|
|
35
36
|
- name: Publish to PyPI (trusted publishing / OIDC)
|
|
36
37
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
37
38
|
# Requires one-time setup on PyPI: configure this repo as a trusted
|
|
@@ -40,5 +41,4 @@ jobs:
|
|
|
40
41
|
- name: Attach skill asset to GitHub Release
|
|
41
42
|
uses: softprops/action-gh-release@v2
|
|
42
43
|
with:
|
|
43
|
-
files:
|
|
44
|
-
generate_release_notes: true
|
|
44
|
+
files: skill_asset/luminary-memory-skill.zip
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/), and the project adheres to [Semantic Versioning](https://semver.org/).
|
|
4
|
+
|
|
5
|
+
## [0.2.2] - 2026-08-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **LLM memory curation** — with `ingest_llm: true`, the provider's enricher evaluates every retained turn:
|
|
10
|
+
- `worth_saving` — chit-chat, greetings, and trivial turns are **dropped** instead of polluting the store.
|
|
11
|
+
- `summary` — kept turns are stored as concise factual summaries (e.g. `"Deploy target is the staging cluster."`) instead of raw `User: ... / Assistant: ...` transcripts.
|
|
12
|
+
- `entities` / `tags` — attached for richer recall.
|
|
13
|
+
- **Transparency log** — provider writes `$HERMES_HOME/luminary/luminary.log` recording initialize/recall/retain/errors.
|
|
14
|
+
- **`OpenAICompatibleEnricher` User-Agent header** — required by some OpenAI-compatible gateways (e.g. Command Code 403s without it).
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **Shutdown SQLite thread-affinity crash** — the writer thread now closes its own client (closing from the main thread raised `sqlite3.ProgrammingError`).
|
|
19
|
+
- **Hermes installer** — `hermes/install.sh` gains `--llm` (enables memory curation), handles a missing `config.yaml`, and no longer warns about the missing `[hermes]` extra (now declared).
|
|
20
|
+
|
|
21
|
+
## [0.2.1] - 2026-08-18
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **Hermes Memory Provider** — `LuminaryMemoryProvider` plugging into Hermes via the `hermes_agent.memory_providers` entry-point group; registered as a standalone package.
|
|
26
|
+
- **Auto-recall every turn** — warm background prefetch (`queue_prefetch` → cached `prefetch`) or synchronous recall (`recall_sync`), formatted as a deterministic context block.
|
|
27
|
+
- **Auto-save every session** — buffered `sync_turn` on a single writer thread, batched by `retain_every_n_turns`, with session/parent/platform/agent lineage tags.
|
|
28
|
+
- **Session-boundary handling** — `on_session_end` flush + `on_session_switch` rebind with reset guard.
|
|
29
|
+
- **Explicit tools** — `luminary_recall`, `luminary_ingest`, `luminary_list` (OpenAI-format schemas, JSON dispatch, local error helper).
|
|
30
|
+
- **Deterministic indicator** — `RecallStatus("Luminary", count, 🌙)` surfaced via `recall_status()`.
|
|
31
|
+
- **Config layer** — `$HERMES_HOME/luminary/config.json` (0600, atomic write), `get_config_schema()`, dashboard `config_schema.py` (pure data).
|
|
32
|
+
- **Lifecycle hooks** — `is_available`, `initialize`, `shutdown`, `system_prompt_block`, `on_memory_write`, `on_delegation`, `on_pre_compress`, `backup_paths`.
|
|
33
|
+
- **Packaging** — entry point + `plugin.yaml` directory-install fallback.
|
|
34
|
+
- **Test harness** — `tests/hermes_stubs/agent/memory_provider.py` ABC stub injected via `tests/conftest.py` so tests run without a hermes-agent install.
|
|
35
|
+
- **`MemoryClient.ingest(metadata=...)`** — optional metadata dict merged into stored memory metadata (backward compatible).
|
|
36
|
+
|
|
37
|
+
### Performance (identical results, no approximation)
|
|
38
|
+
|
|
39
|
+
- **Vectorized cosine similarity** — per-row numpy loop → single matmul; recall @ 5k memories **3,400 ms → 832 ms (4.1×)**.
|
|
40
|
+
- **SQL graph aggregation** — 210k relation rows → `SUM/COUNT ... GROUP BY` in the database.
|
|
41
|
+
- **`temporal_scan()`** — temporal recall fetches only `(id, created_at, access_count)`; **486 ms → 62 ms (7.8×)**.
|
|
42
|
+
- **Relation cap (8/memory) + indexes** — dense graph (280k rows) → sparse (80k); store 3.5× smaller; ingest 1.6× faster.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- `config_schema.py` import fallback — module now imports standalone (no hermes runtime) so CI is green on 3.11/3.12.
|
|
47
|
+
- Publish workflow — skill zip moved out of `dist/` (invalid distribution); dropped `generate_release_notes` (permission).
|
|
48
|
+
|
|
49
|
+
## [0.2.0] - 2026-08-18
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
|
|
53
|
+
- **Query planner** — skips graph/temporal strategies when not needed (conservative v1; semantic + keyword never skipped).
|
|
54
|
+
- **Batch ingest** — `ingest_batch()` with single `embed_batch` call and per-item whitelist/enrichment.
|
|
55
|
+
- **Export / import** — versioned JSON backup/restore (`export`, `import_memories`, `--include-embeddings`).
|
|
56
|
+
- **LLM enricher (provider-agnostic)** — `OpenAICompatibleEnricher` over any OpenAI-compatible endpoint; stdlib-only, passthrough on failure.
|
|
57
|
+
- **Result snippets** — matched-fragment highlights attached to recall results.
|
|
58
|
+
- **Tag-scoped recall** — `recall(query, tags=[...])`.
|
|
59
|
+
- **HNSW index** for pgvector (`pg_hnsw_*` settings, idempotent `build_index()`).
|
|
60
|
+
- **Benchmark suite** — `benchmarks/` (latency p50/p95 per strategy + recall@k/MRR, deterministic).
|
|
61
|
+
- **CLI JSON output** for `search` and `list` (parity with `recall --json`).
|
|
62
|
+
- **`--limit 0` semantics** — unlimited; negative values raise.
|
|
63
|
+
- **`updated_at` auto-bump** in `update()`.
|
|
64
|
+
- **API docs** generated from docstrings (pdoc → `docs/api/`).
|
|
65
|
+
- **GitHub Pages workflow** (`pages.yml` → `/website`).
|
|
66
|
+
- **PyPI auto-publish workflow** (`publish.yml`, trusted publishing/OIDC, tag `v*`) + Hermes skill zip release asset.
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
|
|
70
|
+
- Ruff lint: unused-variable in HNSW tests, missing `noqa` on intentional defensive excepts (CI now green).
|
|
71
|
+
|
|
72
|
+
## [0.1.1] - 2026-08-17
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- `MemoryClient.ingest` crashed when `ingest_llm=True` (enricher could be `None`). Now always falls back to a no-op enricher.
|
|
77
|
+
- `_parse_dt` crashed on corrupt/non-ISO timestamps in lifecycle and temporal recall. Now falls back safely.
|
|
78
|
+
- FTS5 keyword search accepted raw query syntax (`*`, `NEAR`, `OR`, quotes) which could alter query semantics or raise. Queries are now sanitized to plain terms.
|
|
79
|
+
- `list()` loaded and sorted all memories in memory; now uses SQL-level pagination (`recent()`).
|
|
80
|
+
- CLI commands could print raw tracebacks on backend errors; now caught with a clean error message. `--limit` values are clamped to `>= 1`.
|
|
81
|
+
- `WhitelistFilter` crashed on an invalid regex pattern; invalid patterns are now skipped.
|
|
82
|
+
- pgvector integration smoke test was a no-op; now a real add/get/search/delete round-trip.
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
|
|
86
|
+
- Test coverage for pgvector backend raised from 51% to 82% (get/update/delete/count/row parsing).
|
|
87
|
+
|
|
88
|
+
## [0.1.0] - 2026-08-17
|
|
89
|
+
|
|
90
|
+
### Added
|
|
91
|
+
|
|
92
|
+
- SQLite backend with FTS5 keyword search and in-process vector search.
|
|
93
|
+
- Optional pgvector backend (HNSW-ready).
|
|
94
|
+
- Four-strategy recall: semantic, keyword, temporal, graph.
|
|
95
|
+
- Reciprocal Rank Fusion (RRF) + Jaccard dedup + token budget.
|
|
96
|
+
- Ingest pipeline with whitelist filter and optional LLM enrichment.
|
|
97
|
+
- Lifecycle: TTL cleanup, near-duplicate consolidation, low-value pruning.
|
|
98
|
+
- Python API (`MemoryClient`) and CLI (`luminary-memory`).
|
|
99
|
+
- Environment-variable configuration (`LUMINARY_*`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: luminary-memory
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: A lightweight, self-hosted memory layer for AI agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/alertxsto/luminary-memory
|
|
6
6
|
Project-URL: Repository, https://github.com/alertxsto/luminary-memory
|
|
@@ -29,6 +29,7 @@ Requires-Dist: pdoc>=14; extra == 'dev'
|
|
|
29
29
|
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
30
30
|
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
31
31
|
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
32
|
+
Provides-Extra: hermes
|
|
32
33
|
Description-Content-Type: text/markdown
|
|
33
34
|
|
|
34
35
|
<div align="center">
|
|
@@ -41,8 +42,8 @@ Description-Content-Type: text/markdown
|
|
|
41
42
|
[](https://pypi.org/project/luminary-memory)
|
|
42
43
|
[](https://github.com/alertxsto/luminary-memory/blob/main/LICENSE)
|
|
43
44
|
[](https://github.com/alertxsto/luminary-memory/actions)
|
|
44
|
-
[](https://github.com/alertxsto/luminary-memory/actions)
|
|
46
|
+
[](https://github.com/alertxsto/luminary-memory)
|
|
46
47
|
[](https://github.com/alertxsto/luminary-memory)
|
|
47
48
|
|
|
48
49
|
**Self-hosted · Private · Budget-aware · Self-maintaining**
|
|
@@ -68,6 +69,40 @@ Agents are only as good as what they remember. A stateless agent re-learns the s
|
|
|
68
69
|
|
|
69
70
|
---
|
|
70
71
|
|
|
72
|
+
## Hermes Agent — first-class memory provider
|
|
73
|
+
|
|
74
|
+
luminary-memory ships a native **Hermes Agent memory provider** (`luminary-memory[hermes]`): drop-in, auto-recall every turn, auto-save every session — with **zero LLM tokens per turn**.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pip install "luminary-memory[hermes]"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Enable it in your Hermes `config.yaml`:
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
memory:
|
|
84
|
+
provider: luminary
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
That's it. From the next session:
|
|
88
|
+
|
|
89
|
+
- 🌙 **Auto-recall** — relevant memories are retrieved in the background and injected into agent context every turn
|
|
90
|
+
- 💾 **Auto-save** — completed turns are persisted automatically; session boundaries flush buffered turns
|
|
91
|
+
- 🛠️ **Explicit tools** — the model can call `luminary_recall` / `luminary_ingest` / `luminary_list` on demand
|
|
92
|
+
- 📋 **Deterministic indicator** — a `🌙 Luminary — recalled N memories` status line surfaces memory use
|
|
93
|
+
|
|
94
|
+
Registers via the standard `hermes_agent.memory_providers` entry point — no Hermes source changes, no cloud, no LLM API keys. See `docs/hermes-integration.md` for the full configuration table.
|
|
95
|
+
|
|
96
|
+
**LLM memory curation (optional):** set `ingest_llm: true` in
|
|
97
|
+
`~/.hermes/luminary/config.json` (plus `llm_base_url` / `llm_model` /
|
|
98
|
+
`llm_api_key`) to have the provider evaluate every turn before saving —
|
|
99
|
+
chit-chat and trivial turns are dropped, and kept turns are stored as concise
|
|
100
|
+
factual summaries (e.g. `"Deploy target is the staging cluster."`) instead of
|
|
101
|
+
raw `User: ... / Assistant: ...` transcripts. One small LLM call per retained
|
|
102
|
+
turn; any OpenAI-compatible endpoint works.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
71
106
|
## Quickstart
|
|
72
107
|
|
|
73
108
|
### Install
|
|
@@ -227,7 +262,7 @@ Contributions welcome — see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
227
262
|
|
|
228
263
|
## Roadmap
|
|
229
264
|
|
|
230
|
-
See [ROADMAP.md](ROADMAP.md) for the full product roadmap — v0.2.
|
|
265
|
+
See [ROADMAP.md](ROADMAP.md) for the full product roadmap — v0.2.1 (Hermes memory provider), v0.3.0 (intelligence), and v1.0.0 (stable).
|
|
231
266
|
|
|
232
267
|
---
|
|
233
268
|
|