luminary-memory 0.3.3__tar.gz → 0.3.4__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.
Files changed (280) hide show
  1. luminary_memory-0.3.4/.mailmap +1 -0
  2. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/CHANGELOG.md +35 -0
  3. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/PKG-INFO +10 -5
  4. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/README.md +9 -4
  5. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/docs/agent-integrations.md +97 -31
  6. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/package-lock.json +3 -3
  7. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/omp/README.md +3 -5
  8. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/omp/package.json +1 -1
  9. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/opencode/README.md +8 -10
  10. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/opencode/package.json +1 -1
  11. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/pi/README.md +3 -5
  12. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/pi/package.json +1 -1
  13. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/pyproject.toml +1 -1
  14. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/__init__.py +1 -1
  15. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/backends/base.py +27 -0
  16. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/backends/inspector.py +67 -0
  17. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/config.py +7 -0
  18. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/plugin.yaml +2 -2
  19. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/__init__.py +104 -16
  20. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/omp/index.js +2 -2
  21. luminary_memory-0.3.4/src/luminary_memory/integrations/assets/compiled/opencode/index.js +1 -0
  22. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/pi/index.js +2 -2
  23. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/omp/luminary.ts +29 -12
  24. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/opencode/luminary-memory.ts +20 -10
  25. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/pi/luminary.ts +29 -12
  26. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/lifecycle/runner.py +24 -0
  27. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_inspector_process.py +3 -0
  28. luminary_memory-0.3.4/tests/plugins/context.test.mjs +457 -0
  29. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_agent_integrations.py +230 -3
  30. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_backend_sqlite.py +62 -0
  31. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_lifecycle.py +41 -0
  32. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/docs.html +2 -2
  33. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/index.html +2 -2
  34. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/js/docs-guides.js +1 -1
  35. luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/opencode/index.js +0 -1
  36. luminary_memory-0.3.3/tests/plugins/context.test.mjs +0 -123
  37. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  38. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  39. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  40. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/workflows/ci.yml +0 -0
  41. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/workflows/contributor-check.yml +0 -0
  42. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/workflows/pages.yml +0 -0
  43. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/workflows/publish.yml +0 -0
  44. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/workflows/stale.yml +0 -0
  45. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.github/workflows/triage.yml +0 -0
  46. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/.gitignore +0 -0
  47. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/AGENTS.md +0 -0
  48. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/CODE_OF_CONDUCT.md +0 -0
  49. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/CONTRIBUTING.md +0 -0
  50. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/DESIGN.md +0 -0
  51. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/LICENSE +0 -0
  52. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/PRODUCT.md +0 -0
  53. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/SECURITY.md +0 -0
  54. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/README.md +0 -0
  55. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/RESULTS.md +0 -0
  56. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/__init__.py +0 -0
  57. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/baselines/README.md +0 -0
  58. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/baselines/gold-real-v1.json +0 -0
  59. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/baselines/gold-real-v2.json +0 -0
  60. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/baselines/gold-real-v3.json +0 -0
  61. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/build_gold_extended.py +0 -0
  62. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/gold.py +0 -0
  63. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/gold_extended.jsonl +0 -0
  64. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/gold_micro.jsonl +0 -0
  65. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/hermes_provider_bench.py +0 -0
  66. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/metrics.py +0 -0
  67. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/run_benchmarks.py +0 -0
  68. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/benchmarks/synthetic.py +0 -0
  69. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hatch_build.py +0 -0
  70. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hermes/README.md +0 -0
  71. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hermes/SKILL.md +0 -0
  72. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hermes/hooks/luminary-activity/HOOK.yaml +0 -0
  73. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hermes/hooks/luminary-activity/README.md +0 -0
  74. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hermes/hooks/luminary-activity/handler.py +0 -0
  75. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hermes/install.sh +0 -0
  76. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/hermes/test.sh +0 -0
  77. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/opencode/SKILL.md +0 -0
  78. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/package.json +0 -0
  79. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/hermes/__init__.py +0 -0
  80. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/hermes/dashboard/manifest.json +0 -0
  81. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/hermes/dashboard/plugin_api.py +0 -0
  82. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/hermes/desktop/plugin.js +0 -0
  83. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/plugins/hermes/plugin.yaml +0 -0
  84. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/build-plugins.mjs +0 -0
  85. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/build-uis.mjs +0 -0
  86. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/bump-version.sh +0 -0
  87. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/check-opencode-types.mjs +0 -0
  88. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/opencode-gui.vite.mjs +0 -0
  89. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/pack-plugins.mjs +0 -0
  90. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/repair_memory_authority.py +0 -0
  91. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/smoke-real-model.py +0 -0
  92. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/soak-test.py +0 -0
  93. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/test-hermes-sdk.py +0 -0
  94. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/scripts/test-installed-inspector.mjs +0 -0
  95. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/api.py +0 -0
  96. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/backends/__init__.py +0 -0
  97. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/backends/inspector_features.py +0 -0
  98. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/backends/pgvector.py +0 -0
  99. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/backends/sqlite.py +0 -0
  100. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/budget.py +0 -0
  101. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/cli.py +0 -0
  102. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/embeddings/__init__.py +0 -0
  103. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/embeddings/fastembed.py +0 -0
  104. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/export.py +0 -0
  105. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/__init__.py +0 -0
  106. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/activation.py +0 -0
  107. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/activity.py +0 -0
  108. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/cli.py +0 -0
  109. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/config.py +0 -0
  110. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/config_schema.py +0 -0
  111. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/inspector.py +0 -0
  112. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/inspector_settings.py +0 -0
  113. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/hermes/provider.py +0 -0
  114. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/ingest/__init__.py +0 -0
  115. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/ingest/llm.py +0 -0
  116. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/ingest/rules.py +0 -0
  117. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/ingest/whitelist.py +0 -0
  118. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/__init__.py +0 -0
  119. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/activity.py +0 -0
  120. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/assets/browser/app.js +0 -0
  121. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/assets/browser/index.html +0 -0
  122. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/assets/browser/style.css +0 -0
  123. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/authorization.py +0 -0
  124. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/contracts.py +0 -0
  125. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/explanations.py +0 -0
  126. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/features.py +0 -0
  127. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/identity.py +0 -0
  128. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/mutations.py +0 -0
  129. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/queries.py +0 -0
  130. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/service.py +0 -0
  131. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/settings.py +0 -0
  132. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/summary.py +0 -0
  133. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/transfer.py +0 -0
  134. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/inspector/web.py +0 -0
  135. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/__main__.py +0 -0
  136. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/common/bridge-source.ts +0 -0
  137. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/common/console-actions.ts +0 -0
  138. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/common/console-contract.ts +0 -0
  139. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/common/console-controller.ts +0 -0
  140. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/common/inspector-transport.ts +0 -0
  141. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/common/terminal-view.ts +0 -0
  142. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/hermes/__init__.py +0 -0
  143. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/hermes/dashboard/dist/index.js +0 -0
  144. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/hermes/dashboard/manifest.json +0 -0
  145. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/hermes/dashboard/plugin_api.py +0 -0
  146. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/hermes/desktop/plugin.js +0 -0
  147. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/hermes/plugin.yaml +0 -0
  148. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/opencode/gui-experimental.cjs +0 -0
  149. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/opencode/rpc.js +0 -0
  150. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/compiled/opencode/tui.js +0 -0
  151. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/omp/inspector.ts +0 -0
  152. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/opencode/dialogs.tsx +0 -0
  153. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/opencode/gui.tsx +0 -0
  154. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/opencode/package.json +0 -0
  155. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/opencode/rpc.ts +0 -0
  156. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/opencode/tui.tsx +0 -0
  157. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/assets/pi/inspector.ts +0 -0
  158. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/cli.py +0 -0
  159. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/integrations/inspector_cli.py +0 -0
  160. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/lifecycle/__init__.py +0 -0
  161. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/lifecycle/cleanup.py +0 -0
  162. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/lifecycle/consolidate.py +0 -0
  163. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/lifecycle/importance.py +0 -0
  164. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/lifecycle/prune.py +0 -0
  165. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/__init__.py +0 -0
  166. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/dedup.py +0 -0
  167. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/filters.py +0 -0
  168. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/fusion.py +0 -0
  169. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/graph.py +0 -0
  170. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/keyword.py +0 -0
  171. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/planner.py +0 -0
  172. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/semantic.py +0 -0
  173. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/snippets.py +0 -0
  174. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/recall/temporal.py +0 -0
  175. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/schema.py +0 -0
  176. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/scope.py +0 -0
  177. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/src/luminary_memory/types.py +0 -0
  178. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/__init__.py +0 -0
  179. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/conftest.py +0 -0
  180. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/conftest.py +0 -0
  181. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_activation.py +0 -0
  182. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_activity_hook.py +0 -0
  183. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_authority_lifecycle.py +0 -0
  184. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_autonomous_review.py +0 -0
  185. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_backup_paths.py +0 -0
  186. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_cli_owner_commands.py +0 -0
  187. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_config.py +0 -0
  188. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_context_continuity.py +0 -0
  189. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_core_memory.py +0 -0
  190. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_entrypoint.py +0 -0
  191. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_hooks.py +0 -0
  192. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_inspector_api.py +0 -0
  193. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_inspector_settings.py +0 -0
  194. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_lifecycle.py +0 -0
  195. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_long_term_stability.py +0 -0
  196. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_native_contract.py +0 -0
  197. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_native_execution.py +0 -0
  198. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_pre_compress.py +0 -0
  199. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_provider_context.py +0 -0
  200. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_provider_import.py +0 -0
  201. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_recall.py +0 -0
  202. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_recall_smartness.py +0 -0
  203. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_session_boundaries.py +0 -0
  204. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_session_resolution.py +0 -0
  205. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_sync_turn.py +0 -0
  206. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_system_prompt.py +0 -0
  207. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_tools.py +0 -0
  208. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/test_transparency_log.py +0 -0
  209. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes/ui.test.mjs +0 -0
  210. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/hermes_stubs/agent/memory_provider.py +0 -0
  211. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/conftest.py +0 -0
  212. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_activity.py +0 -0
  213. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_embedded_service.py +0 -0
  214. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_explanations.py +0 -0
  215. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_identity.py +0 -0
  216. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_mutations.py +0 -0
  217. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_permissions.py +0 -0
  218. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_queries.py +0 -0
  219. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_relations.py +0 -0
  220. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_settings.py +0 -0
  221. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_summary.py +0 -0
  222. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_transfer.py +0 -0
  223. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_transport.py +0 -0
  224. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_web.py +0 -0
  225. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/inspector/test_web_transport.py +0 -0
  226. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/plugins/packages.test.mjs +0 -0
  227. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_accuracy_safety.py +0 -0
  228. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_api.py +0 -0
  229. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_api_extended.py +0 -0
  230. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_backend_contract.py +0 -0
  231. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_backend_pgvector.py +0 -0
  232. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_budget.py +0 -0
  233. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_cli.py +0 -0
  234. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_config_file.py +0 -0
  235. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_dedup_jaccard.py +0 -0
  236. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_embeddings.py +0 -0
  237. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_fusion.py +0 -0
  238. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_fusion_rrf.py +0 -0
  239. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_gold_benchmark.py +0 -0
  240. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_importance.py +0 -0
  241. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_ingest_llm.py +0 -0
  242. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_ingest_whitelist.py +0 -0
  243. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_integration_cli.py +0 -0
  244. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_llm_enricher.py +0 -0
  245. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_long_term_stability.py +0 -0
  246. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_memory_authority_migration.py +0 -0
  247. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_query_expansion.py +0 -0
  248. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_recall_adaptive.py +0 -0
  249. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_recall_graph.py +0 -0
  250. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_recall_keyword.py +0 -0
  251. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_recall_orchestrator.py +0 -0
  252. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_recall_semantic.py +0 -0
  253. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_recall_temporal.py +0 -0
  254. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_schema.py +0 -0
  255. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_scope_boundaries.py +0 -0
  256. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_soak_behaviour.py +0 -0
  257. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_strict_recall_calibration.py +0 -0
  258. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t10_export.py +0 -0
  259. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t11_limit_zero.py +0 -0
  260. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t3_planner.py +0 -0
  261. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t4_batch.py +0 -0
  262. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t5_enricher.py +0 -0
  263. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t6_tag_scoped.py +0 -0
  264. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t7_updated_at.py +0 -0
  265. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t8_snippets.py +0 -0
  266. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_t9_cli_json.py +0 -0
  267. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/test_validity_window.py +0 -0
  268. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/ui/controller.test.mjs +0 -0
  269. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/tests/ui/installed-consumer.ts +0 -0
  270. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/ui/browser/app.ts +0 -0
  271. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/ui/hermes/console.mjs +0 -0
  272. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/ui/hermes/dashboard.mjs +0 -0
  273. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/ui/hermes/desktop.mjs +0 -0
  274. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/.nojekyll +0 -0
  275. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/assets/full-moon.jpg +0 -0
  276. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/css/docs.css +0 -0
  277. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/css/luminary.css +0 -0
  278. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/js/docs-content.js +0 -0
  279. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/js/docs-page.js +0 -0
  280. {luminary_memory-0.3.3 → luminary_memory-0.3.4}/website/js/luminary.js +0 -0
@@ -0,0 +1 @@
1
+ alertxsto <alertxsto@users.noreply.github.com> OpenAI Codex <noreply@openai.com>
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## [Unreleased]
4
+
5
+ ## [0.3.4] - 2026-11-14
6
+
7
+ Coordinated Python and native-plugin release from one source revision.
8
+ This replaces the mismatched npm `0.3.3` builds without overwriting them.
9
+
10
+ ### Fixed
11
+
12
+ - Isolate the inspector's default-store test from the operator's home on
13
+ Windows by setting `USERPROFILE` as well as `HOME`.
14
+ - Native core memory is now a separate, query-independent DB-backed baseline
15
+ loaded through the bridge's new `core` action, which takes no query. Query
16
+ recall stays pure evidence: it removes rows already present in the loaded
17
+ baseline and returns `abstain` with `matches_already_in_core` when only core
18
+ rows matched, instead of reporting them as a successful query result. The
19
+ OpenCode, pi, and omp adapters refresh their own marked request-local baseline
20
+ each admitted user run, so explicit remember/forget/retraction becomes visible
21
+ without a session restart and repeated turns do not append duplicate
22
+ transcript entries. Core and recall keep separate row and character budgets,
23
+ rows are serialized once without adapters slicing or double-encoding them, and
24
+ empty or failed recall injects no model-bound context or status payload.
25
+ Baseline loading remains disabled by `LUMINARY_CORE_TOP_N=0`.
26
+ - Long-lived stores now bound their append-only ledgers. `run_lifecycle()`
27
+ keeps the newest scoped rows for episodes (`LUMINARY_EPISODE_MAX_ROWS`,
28
+ default 10,000), audit events (`LUMINARY_EVENT_MAX_ROWS`, default 50,000),
29
+ and evidence (`LUMINARY_EVIDENCE_MAX_ROWS`, default 50,000); `0` disables a
30
+ ledger's pruning. Current-session continuity and recent audit remain intact.
31
+
3
32
  ## [0.3.3] - 2026-11-10
4
33
 
5
34
  Interactive memory inspection, explicit owner controls and safer native recall.
@@ -16,6 +45,12 @@ companion; the interactive UI roadmap is incomplete.
16
45
 
17
46
  ### Added
18
47
 
48
+ - Published the Python bridge and all three native npm packages at `0.3.3`.
49
+ The npm packages were published later from `develop`, not the `v0.3.3`
50
+ tag, and their built entry points differ from the downloadable release
51
+ tarballs. Matching version numbers do not establish compatibility or
52
+ identical provenance. Use the tagged GitHub tarballs with Python `0.3.3`
53
+ until a coordinated replacement release is available.
19
54
  - Optional operator config file (`~/.luminary/luminary.env`) shared by native
20
55
  integrations and the CLI. Env-style `LUMINARY_*` settings load before
21
56
  `Settings` is constructed; process environment wins, `LUMINARY_CONFIG_FILE`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: luminary-memory
3
- Version: 0.3.3
3
+ Version: 0.3.4
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
@@ -118,8 +118,8 @@ at [`opencode/SKILL.md`](opencode/SKILL.md); install it under
118
118
 
119
119
  The `0.3.3` source includes native interactive inspectors for the verified
120
120
  surfaces: OpenCode CLI/Desktop, pi and omp, Hermes Desktop/dashboard and an
121
- explicitly launched loopback companion. The `0.3.2` registry packages do not
122
- include the inspector; see the installation guide for current availability.
121
+ explicitly launched loopback companion. The `0.3.3` registry packages include
122
+ the inspector; see the installation guide for current availability.
123
123
  Two native targets remain blocked on upstream
124
124
  contracts and are recorded in the roadmap: OpenCode Web GUI contribution
125
125
  discovery and Hermes terminal/TUI authority plus scope lifecycle. See
@@ -146,8 +146,10 @@ The three installable tarballs are written to `artifacts/plugins/`. Set
146
146
  Choose the native package **or** the copied hook, never both.
147
147
 
148
148
  Registry names are `luminary-memory-pi`, `luminary-memory-opencode`, and
149
- `luminary-memory-omp`. All three npm packages and the Python bridge are
150
- published at `0.3.2`; npm `latest` points to that version.
149
+ `luminary-memory-omp`. Use version-matched Python and plugin artifacts from
150
+ the same tagged release. The npm `0.3.3` builds were published from a later
151
+ `develop` revision and differ from the `v0.3.3` GitHub tarballs; use those
152
+ tagged tarballs with Python `0.3.3`, not the npm builds.
151
153
  The pi manifest includes `pi-package` for eligibility in the
152
154
  [official package catalog](https://pi.dev/packages). OpenCode's existing
153
155
  Ecosystem PR targets legacy V1 docs, not a verified V2 listing; no V2 website
@@ -244,6 +246,9 @@ Every setting has a `LUMINARY_*` env var or a `Settings` object.
244
246
  | `dedup_jaccard_threshold` | `LUMINARY_DEDUP_JACCARD_THRESHOLD` | `0.85` |
245
247
  | `token_budget` | `LUMINARY_TOKEN_BUDGET` | `4096` |
246
248
  | `max_memories` | `LUMINARY_MAX_MEMORIES` | `1000` |
249
+ | `episode_max_rows` | `LUMINARY_EPISODE_MAX_ROWS` | `10000` |
250
+ | `event_max_rows` | `LUMINARY_EVENT_MAX_ROWS` | `50000` |
251
+ | `evidence_max_rows` | `LUMINARY_EVIDENCE_MAX_ROWS` | `50000` |
247
252
  | `ttl_default_seconds` | `LUMINARY_TTL_DEFAULT_SECONDS` | `null` |
248
253
  | `prune_min_importance` | `LUMINARY_PRUNE_MIN_IMPORTANCE` | `0.2` |
249
254
  | `consolidate_jaccard_threshold` | `LUMINARY_CONSOLIDATE_JACCARD_THRESHOLD` | `0.9` |
@@ -83,8 +83,8 @@ at [`opencode/SKILL.md`](opencode/SKILL.md); install it under
83
83
 
84
84
  The `0.3.3` source includes native interactive inspectors for the verified
85
85
  surfaces: OpenCode CLI/Desktop, pi and omp, Hermes Desktop/dashboard and an
86
- explicitly launched loopback companion. The `0.3.2` registry packages do not
87
- include the inspector; see the installation guide for current availability.
86
+ explicitly launched loopback companion. The `0.3.3` registry packages include
87
+ the inspector; see the installation guide for current availability.
88
88
  Two native targets remain blocked on upstream
89
89
  contracts and are recorded in the roadmap: OpenCode Web GUI contribution
90
90
  discovery and Hermes terminal/TUI authority plus scope lifecycle. See
@@ -111,8 +111,10 @@ The three installable tarballs are written to `artifacts/plugins/`. Set
111
111
  Choose the native package **or** the copied hook, never both.
112
112
 
113
113
  Registry names are `luminary-memory-pi`, `luminary-memory-opencode`, and
114
- `luminary-memory-omp`. All three npm packages and the Python bridge are
115
- published at `0.3.2`; npm `latest` points to that version.
114
+ `luminary-memory-omp`. Use version-matched Python and plugin artifacts from
115
+ the same tagged release. The npm `0.3.3` builds were published from a later
116
+ `develop` revision and differ from the `v0.3.3` GitHub tarballs; use those
117
+ tagged tarballs with Python `0.3.3`, not the npm builds.
116
118
  The pi manifest includes `pi-package` for eligibility in the
117
119
  [official package catalog](https://pi.dev/packages). OpenCode's existing
118
120
  Ecosystem PR targets legacy V1 docs, not a verified V2 listing; no V2 website
@@ -209,6 +211,9 @@ Every setting has a `LUMINARY_*` env var or a `Settings` object.
209
211
  | `dedup_jaccard_threshold` | `LUMINARY_DEDUP_JACCARD_THRESHOLD` | `0.85` |
210
212
  | `token_budget` | `LUMINARY_TOKEN_BUDGET` | `4096` |
211
213
  | `max_memories` | `LUMINARY_MAX_MEMORIES` | `1000` |
214
+ | `episode_max_rows` | `LUMINARY_EPISODE_MAX_ROWS` | `10000` |
215
+ | `event_max_rows` | `LUMINARY_EVENT_MAX_ROWS` | `50000` |
216
+ | `evidence_max_rows` | `LUMINARY_EVIDENCE_MAX_ROWS` | `50000` |
212
217
  | `ttl_default_seconds` | `LUMINARY_TTL_DEFAULT_SECONDS` | `null` |
213
218
  | `prune_min_importance` | `LUMINARY_PRUNE_MIN_IMPORTANCE` | `0.2` |
214
219
  | `consolidate_jaccard_threshold` | `LUMINARY_CONSOLIDATE_JACCARD_THRESHOLD` | `0.9` |
@@ -8,9 +8,9 @@ continues to use its public `MemoryProvider` lifecycle.
8
8
  | Adapter | Contract | Interaction surface |
9
9
  | --- | --- | --- |
10
10
  | Hermes | Public `MemoryProvider`, existing installer | Provider tools/status in supported Hermes clients; read-only scoped Telegram activity hook |
11
- | OpenCode V2 | `@opencode/cli` and `@opencode/plugin` 2.1.4, `Plugin.define` server API | Native tools/progress/results in connected clients; automatic recall and curated retention |
12
- | pi | Extension API verified against `@earendil-works/pi-coding-agent` 1.4.0 | `/luminary`, model tool, TUI dialogs/status, serializable session messages for RPC consumers |
13
- | omp | Extension API verified against v18.12.6; installed **18.18.5** acceptance re-verified | `/luminary`, model tool, TUI dialogs/status, serializable session messages for RPC consumers |
11
+ | OpenCode V2 | `@opencode/cli` and `@opencode/plugin` 2.1.4, `Plugin.define` server API | Native tools/progress/results in connected clients; core baseline, automatic recall, and curated retention |
12
+ | pi | Extension API verified against `@earendil-works/pi-coding-agent` 1.4.0 | `/luminary`, model tool, TUI dialogs/status, core baseline and automatic recall, serializable session messages for RPC consumers |
13
+ | omp | Extension API verified against v18.12.6; installed **18.18.5** acceptance re-verified | `/luminary`, model tool, TUI dialogs/status, core baseline and automatic recall, serializable session messages for RPC consumers |
14
14
 
15
15
  OpenCode V2 uses the plural `plugins` config, a default `Plugin.define` export,
16
16
  and Promise domain APIs. The older Luminary npm `0.3.1` adapter targets V1;
@@ -25,13 +25,15 @@ and omp. That means ownership by this project, not endorsement or listing
25
25
  approval by the harness maintainers. All three compile the canonical adapter
26
26
  source under `src/luminary_memory/integrations/assets/`; no second memory engine
27
27
  or separate adapter fork is maintained.
28
- Python and all three native npm packages are published at `0.3.2`, with npm
29
- `latest` pointing to that version. The OpenCode adapter targets V2; the older
30
- npm `0.3.1` adapter is V1-only. Install the Python bridge into the environment
28
+ Python and all three native npm packages list `0.3.3`, but the later npm
29
+ builds differ from the tagged GitHub tarballs. Use those tagged tarballs
30
+ with Python `0.3.3` until a coordinated replacement is published.
31
+ The OpenCode adapter targets V2; the older npm `0.3.1` adapter is V1-only.
32
+ Install the Python bridge into the environment
31
33
  the host will use:
32
34
 
33
35
  ```bash
34
- python -m pip install --upgrade "luminary-memory==0.3.2"
36
+ python -m pip install --upgrade "luminary-memory==0.3.3"
35
37
  export LUMINARY_PYTHON=/absolute/venv/bin/python
36
38
  ```
37
39
 
@@ -63,7 +65,7 @@ path. No package install hook silently installs Python dependencies.
63
65
  | --- | --- | --- |
64
66
  | pi | `pi install /absolute/repo/plugins/pi` | `pi install npm:luminary-memory-pi` |
65
67
  | omp | `omp plugin link /absolute/repo/plugins/omp` | `omp plugin install luminary-memory-omp` |
66
- | OpenCode V2 | `{"plugins":["/absolute/repo/plugins/opencode/dist"]}`; configured local paths must be directories | `opencode plugin add luminary-memory-opencode@0.3.2`, or `{"plugins":["luminary-memory-opencode@0.3.2"]}` |
68
+ | OpenCode V2 | `{"plugins":["/absolute/repo/plugins/opencode/dist"]}`; configured local paths must be directories | `opencode plugin add luminary-memory-opencode@0.3.3`, or `{"plugins":["luminary-memory-opencode@0.3.3"]}` |
67
69
 
68
70
  Local pi/omp packages load in place, so keep the installed directory. An
69
71
  extracted tarball works independently of this repository. See the host READMEs
@@ -110,12 +112,21 @@ The first publication requires maintainer npm authorization. Use
110
112
  the next coordinated release; do not overwrite an already-published Python tag.
111
113
  See [contributor release instructions](../CONTRIBUTING.md).
112
114
 
113
- Publication verified on 2026-10-25: Python and all three npm packages are
114
- available at `0.3.2`:
115
+ Publication verified on 2026-11-14: Python and all three npm packages are
116
+ available at `0.3.3`:
115
117
  [pi](https://www.npmjs.com/package/luminary-memory-pi),
116
118
  [OpenCode](https://www.npmjs.com/package/luminary-memory-opencode), and
117
119
  [omp](https://www.npmjs.com/package/luminary-memory-omp).
118
- All npm `latest` tags and SHA-512 checksums match the validated release assets.
120
+ All npm `latest` tags point to `0.3.3`. Verified SHA-1 shasums:
121
+ pi `a5c613417ef20c4e178e53a5e56e5b9e4e0c121d`,
122
+ OpenCode `ee8ffe5a4089b5441dde52af9a90d4f0ce37fe9b`,
123
+ omp `82d18ba70ebba95d3566c1f394561000a76d34c5`.
124
+
125
+ These npm shasums do not match the `v0.3.3` GitHub release tarballs. The npm
126
+ entry points match later `develop` builds, which use the new `core` bridge
127
+ action. Do not treat npm and PyPI `0.3.3` as one validated release. Existing
128
+ published versions and tags are immutable; recovery uses a new coordinated
129
+ version built and gated by the tag workflow.
119
130
  Installing all three from npm succeeded. The real V2 CLI also installed the
120
131
  OpenCode package and an actual native session stored a fact through the
121
132
  published PyPI wheel. That wheel's CLI installer and remember/recall/forget
@@ -141,7 +152,7 @@ proof of a live website listing.
141
152
  ## Interactive inspectors
142
153
 
143
154
  The `0.3.3` source includes the inspector in the Python and native npm
144
- packages. The published `0.3.2` packages do not include it. Installing the
155
+ packages. The published `0.3.3` packages include it. Installing the
145
156
  inspector does not enable saving, start a server on import, or call an AI model.
146
157
  Exact tested native hosts and the two remaining blocked surfaces are recorded
147
158
  in the [roadmap matrix](ROADMAP.md#target-support-matrix).
@@ -241,7 +252,7 @@ This remains an alternative to native package installation. Install the
241
252
  published Python bridge, then copy only the adapter for the host you use:
242
253
 
243
254
  ```bash
244
- python -m pip install --upgrade "luminary-memory==0.3.2"
255
+ python -m pip install --upgrade "luminary-memory==0.3.3"
245
256
  luminary-memory hook install opencode
246
257
  luminary-memory hook install pi
247
258
  luminary-memory hook install omp
@@ -370,16 +381,61 @@ or to a project's `.opencode/skills/luminary-memory/SKILL.md`. OpenCode
370
381
  discovers both locations automatically; no `opencode.json` entry is required.
371
382
  The skill is documentation only and does not change plugin behavior.
372
383
 
373
- ## Automatic recall and retention
374
-
375
- Before a normal user run, adapters recall strictly relevant, evidence-bearing
376
- memory. Core-tagged rows must pass the same retrieval gate; unrelated core
377
- rows do not override abstention. This differs from Hermes's separate pinned-core
378
- surface. Historical data is a request-local, non-system reference before the
379
- live user message, not a persistent transcript entry. Empty recall injects
380
- nothing. Whole JSON records are serialized once within the bridge's 8000-character
381
- budget; adapters do not slice or double-encode that reference. Aborted/error/
382
- tool-only responses are not automatically retained. Compaction is not a write.
384
+ ## Core baseline
385
+
386
+ Core memory is a separate, database-backed baseline, not part of query recall.
387
+ Confirmed core-tagged rows load independently of the current query before the
388
+ live user message. `core` is a bridge action with no query or text field: it
389
+ takes the usual agent, workspace, and session binding and returns status `ok`
390
+ with the currently valid core rows and one labeled `<luminary-core-memory>`
391
+ context block. Empty core is `ok` with `memories: []` and `context: ""`; it is
392
+ not an error, does not call query recall, and does not mutate access or ranking
393
+ state.
394
+
395
+ Core selection binds the exact adapter scope without global rows and keeps only
396
+ active, currently valid rows. Rows follow their stable core-tag insertion order;
397
+ `LUMINARY_CORE_TOP_N` (default 12, capped at 12; `0` disables baseline loading)
398
+ limits how many rows are used and `LUMINARY_CORE_BUDGET` (default 8000)
399
+ bounds the total content characters across the selected rows, not the rendered
400
+ block including JSON, IDs, tags, or labels. A row that does not fit whole is
401
+ skipped, never truncated. Adapters fetch core afresh at the start of each
402
+ admitted user run, so an explicit remember, forget, or retraction is visible
403
+ without restarting the host. The block is request-local, non-system reference
404
+ data: adapters replace their own marked baseline instead of appending duplicate
405
+ transcript entries. Its label says confirmed durable identity, preferences, and
406
+ rules are subordinate default context; current system instructions, verified
407
+ runtime state, and an explicit current user correction take precedence without
408
+ silently editing stored memory. A failed core request injects no fabricated
409
+ baseline.
410
+
411
+ pi and omp prepend the core block and then a non-empty successful recall
412
+ reference as request-only custom messages in their `context` hook; OpenCode
413
+ unshifts the matching request-local parts before the live user message in its
414
+ `context` hook. All three filter out their own previously injected baseline and
415
+ recall entries so repeated turns do not grow the visible conversation. Hosts
416
+ may resend baseline when their model API requires it, equivalent to resending
417
+ `AGENTS.md`; the adapter does not create a duplicate transcript entry.
418
+
419
+ ## Query recall
420
+
421
+ Before a normal user run, adapters recall only query-relevant,
422
+ evidence-bearing memory. Recall is pure: a returned row already represented in
423
+ the loaded core baseline by ID or normalized content is removed, so it never
424
+ appears twice. If only core rows matched, recall returns `abstain` with
425
+ `reason: matches_already_in_core`, empty `memories`, and empty `context`; core
426
+ never turns abstention into success. An engine `ok` result whose rows are all
427
+ invalid, already in core, or otherwise not deliverable becomes `abstain` with
428
+ `reason: no_deliverable_candidate` (or `matches_already_in_core` when only core
429
+ matched), with empty `memories` and `context`. Other results keep the engine's
430
+ status and reason. Recall uses its own row cap and 8000-character whole-row
431
+ serialization budget; the core budget is separate and neither expands the other.
432
+
433
+ The recall result is a request-local, non-system reference before the live user
434
+ message, not a persistent transcript entry. Empty, abstained, or failed recall
435
+ injects nothing: pi/omp add no custom message and OpenCode adds no recall part.
436
+ Historical data is untrusted; adapters attach the bridge's context string as-is
437
+ without slicing or double JSON encoding. Aborted/error/tool-only responses are
438
+ not automatically retained. Compaction is not a write.
383
439
 
384
440
  Automatic durable capture is disabled unless configured:
385
441
 
@@ -410,19 +466,29 @@ Run `python -m luminary_memory.integrations bridge` (or
410
466
  `luminary-memory hook bridge`) with **one UTF-8 JSON object on stdin**, then
411
467
  close stdin. Never interpolate user text into a shell command:
412
468
 
469
+ Query recall:
470
+
413
471
  ```json
414
472
  {"agent":"another-supported-host","workspace":"/absolute/project","session_id":"native-session-42","action":"recall","query":"deploy target"}
415
473
  ```
416
474
 
475
+ Baseline load (no query):
476
+
477
+ ```json
478
+ {"agent":"another-supported-host","workspace":"/absolute/project","session_id":"native-session-42","action":"core"}
479
+ ```
480
+
417
481
  The stable harness identifier accepts `[a-z][a-z0-9._-]{0,63}`; it is an ownership
418
- key, not a dynamically loaded plugin name. Actions: `recall` (`query`), `remember`
419
- (`text`, `evidence_quote`, optional `tags`), `forget` (`memory_id`), `activity`, and `turn` (`user`,
420
- `assistant`, optional lineage `tags`). Every action requires absolute workspace,
421
- agent ID, and native session ID. Maximum request: 128 KiB; each text field:
422
- 32,768 characters. A response is a UTF-8 JSON object containing `ok`, `status`,
423
- `reason`, `message`, `context`, `memories`, `stored`, and `deleted`; errors exit
424
- nonzero. Keep stdout reserved for that response and treat recalled data as
425
- untrusted. Native adapters bound process lifetime/output and use no shell.
482
+ key, not a dynamically loaded plugin name. Actions: `core` (no query or text),
483
+ `recall` (`query`), `remember` (`text`, `evidence_quote`, optional `tags`),
484
+ `forget` (`memory_id`), `activity`, and `turn` (`user`, `assistant`, optional
485
+ lineage `tags`). Every action requires absolute workspace, agent ID, and native
486
+ session ID. Maximum request: 128 KiB; each text field: 32,768 characters. A
487
+ response is a UTF-8 JSON object containing `ok`, `status`, `reason`, `message`,
488
+ `context`, `memories`, `stored`, and `deleted`; errors exit nonzero. `core`
489
+ returns status `ok` even when it has no valid rows, in which case `memories` and
490
+ `context` are empty. Keep stdout reserved for that response and treat recalled
491
+ data as untrusted. Native adapters bound process lifetime/output and use no shell.
426
492
 
427
493
  For remember, the **trusted adapter**, never model arguments, supplies a fresh
428
494
  `LUMINARY_BRIDGE_SOURCE` environment value to that one child process:
@@ -6544,7 +6544,7 @@
6544
6544
  },
6545
6545
  "plugins/omp": {
6546
6546
  "name": "luminary-memory-omp",
6547
- "version": "0.3.3",
6547
+ "version": "0.3.4",
6548
6548
  "license": "Apache-2.0",
6549
6549
  "engines": {
6550
6550
  "bun": ">=1.3.14",
@@ -6565,7 +6565,7 @@
6565
6565
  },
6566
6566
  "plugins/opencode": {
6567
6567
  "name": "luminary-memory-opencode",
6568
- "version": "0.3.3",
6568
+ "version": "0.3.4",
6569
6569
  "license": "Apache-2.0",
6570
6570
  "dependencies": {
6571
6571
  "zod": "4.6.7"
@@ -6600,7 +6600,7 @@
6600
6600
  },
6601
6601
  "plugins/pi": {
6602
6602
  "name": "luminary-memory-pi",
6603
- "version": "0.3.3",
6603
+ "version": "0.3.4",
6604
6604
  "license": "Apache-2.0",
6605
6605
  "engines": {
6606
6606
  "node": ">=22.19.0"
@@ -9,16 +9,14 @@ embedded Bun runtime to load extensions.
9
9
 
10
10
  ## Registry installation
11
11
 
12
- The registry commands below install `0.3.2`, which has no inspector. For the
13
- `0.3.3` inspector, use the matching Python bridge and native package built from
14
- this checkout or obtained from the GitHub release when available.
12
+ The registry commands below install `0.3.3`, which includes the inspector.
15
13
 
16
14
  Install the published Python bridge from PyPI, then install the omp package:
17
15
 
18
16
  ```sh
19
- python -m pip install --upgrade "luminary-memory==0.3.2"
17
+ python -m pip install --upgrade "luminary-memory==0.3.3"
20
18
  export LUMINARY_PYTHON=/absolute/path/to/venv/bin/python
21
- omp plugin install luminary-memory-omp@0.3.2
19
+ omp plugin install luminary-memory-omp@0.3.3
22
20
  ```
23
21
 
24
22
  No npm install script installs Python for you. Set `LUMINARY_PYTHON` to the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luminary-memory-omp",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "Luminary-maintained scoped memory extension for oh-my-pi, backed by the Luminary Python bridge",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -6,35 +6,33 @@ and **`@opencode/plugin` 2.2.0**. This is an official Luminary package,
6
6
 
7
7
  **Development scope:** the `0.3.3` source includes this inspector
8
8
  for OpenCode CLI and Desktop on `@opencode/cli` and `@opencode/plugin`
9
- **2.2.0**. The published `0.3.2` bridge contains no inspector and was verified
10
- on OpenCode 2.1.4; `0.3.1` targets the separate V1 API. Native Web GUI
9
+ **2.2.0**. The published `0.3.3` bridge includes the inspector; `0.3.2` was
10
+ verified on OpenCode 2.1.4, and `0.3.1` targets the separate V1 API. Native Web GUI
11
11
  contribution discovery remains
12
12
  blocked upstream. See the [target matrix](https://github.com/alertxsto/luminary-memory/blob/develop/docs/ROADMAP.md#target-support-matrix)
13
13
  for exact scope, lifecycle and release limitations.
14
14
 
15
15
  ## Install
16
16
 
17
- The registry commands below install `0.3.2`, which has no inspector. For the
18
- `0.3.3` inspector, use the matching Python bridge and native package built from
19
- this checkout or obtained from the GitHub release when available.
17
+ The registry commands below install `0.3.3`, which includes the inspector.
20
18
 
21
19
  Install the published Python bridge from PyPI:
22
20
 
23
21
  ```sh
24
- python -m pip install --upgrade "luminary-memory==0.3.2"
22
+ python -m pip install --upgrade "luminary-memory==0.3.3"
25
23
  export LUMINARY_PYTHON=/absolute/path/to/venv/bin/python
26
24
  ```
27
25
 
28
26
  Install the V2 npm package through OpenCode:
29
27
 
30
28
  ```sh
31
- opencode plugin add luminary-memory-opencode@0.3.2
29
+ opencode plugin add luminary-memory-opencode@0.3.3
32
30
  ```
33
31
 
34
32
  Alternatively, add it to your existing `opencode.json` or `opencode.jsonc`:
35
33
 
36
34
  ```json
37
- {"plugins": ["luminary-memory-opencode@0.3.2"]}
35
+ {"plugins": ["luminary-memory-opencode@0.3.3"]}
38
36
  ```
39
37
 
40
38
  V2 uses **`plugins`**, not V1's singular `plugin`. The host provides the SDK and
@@ -150,7 +148,7 @@ Compatible clients consume the server's native tools/results. This package does
150
148
  not add a universal client toolbar or a standalone desktop app. Before enabling
151
149
  it, remove only the old copied Luminary adapter and its explicit config entry;
152
150
  do not run both installation forms. To remove the package, use
153
- `opencode plugin remove luminary-memory-opencode@0.3.2` or remove its config
151
+ `opencode plugin remove luminary-memory-opencode@0.3.3` or remove its config
154
152
  entry. Reload/restart the server as needed. Stored memory is not deleted.
155
153
 
156
154
  ## Compatibility evidence
@@ -176,7 +174,7 @@ review. This is not a verified V2 catalog or a live website listing.
176
174
  The obsolete local listing patch is no longer shipped.
177
175
 
178
176
  [Source PR #17](https://github.com/alertxsto/luminary-memory/pull/17) has merged.
179
- Python and all three native npm packages are published at `0.3.2`.
177
+ Python and all three native npm packages are published at `0.3.3`.
180
178
 
181
179
  [Configuration and ownership](https://github.com/alertxsto/luminary-memory/blob/main/docs/agent-integrations.md)
182
180
  · [OpenCode V2 plugin contract](https://opencode.ai/v2/docs/plugins/)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luminary-memory-opencode",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "Luminary-maintained scoped memory plugin for OpenCode V2",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -9,16 +9,14 @@ versions accepted by the root manifest).
9
9
 
10
10
  ## Registry installation
11
11
 
12
- The registry commands below install `0.3.2`, which has no inspector. For the
13
- `0.3.3` inspector, use the matching Python bridge and native package built from
14
- this checkout or obtained from the GitHub release when available.
12
+ The registry commands below install `0.3.3`, which includes the inspector.
15
13
 
16
14
  Install the published Python bridge from PyPI, then install the pi package:
17
15
 
18
16
  ```sh
19
- python -m pip install --upgrade "luminary-memory==0.3.2"
17
+ python -m pip install --upgrade "luminary-memory==0.3.3"
20
18
  export LUMINARY_PYTHON=/absolute/path/to/venv/bin/python
21
- pi install npm:luminary-memory-pi@0.3.2
19
+ pi install npm:luminary-memory-pi@0.3.3
22
20
  ```
23
21
 
24
22
  No npm install script installs Python for you. Set `LUMINARY_PYTHON` to the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luminary-memory-pi",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "Luminary-maintained scoped memory extension for pi, backed by the Luminary Python bridge",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "luminary-memory"
7
- version = "0.3.3"
7
+ version = "0.3.4"
8
8
  description = "A lightweight, self-hosted memory layer for AI agents"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -1,4 +1,4 @@
1
1
  from luminary_memory.api import MemoryClient
2
2
 
3
- __version__ = "0.3.3"
3
+ __version__ = "0.3.4"
4
4
  __all__ = ["MemoryClient", "__version__"]
@@ -120,6 +120,33 @@ class MemoryBackend(ABC):
120
120
  """Return insertion/duplicate acknowledgement, or None without a ledger."""
121
121
  return
122
122
 
123
+ def prune_episodes(
124
+ self,
125
+ max_rows: int,
126
+ scope: dict | None = None,
127
+ include_global: bool = True,
128
+ ) -> int:
129
+ """Delete oldest scoped episodes beyond *max_rows*; 0 disables."""
130
+ return 0
131
+
132
+ def prune_events(
133
+ self,
134
+ max_rows: int,
135
+ scope: dict | None = None,
136
+ include_global: bool = True,
137
+ ) -> int:
138
+ """Delete oldest scoped audit events beyond *max_rows*; 0 disables."""
139
+ return 0
140
+
141
+ def prune_evidence(
142
+ self,
143
+ max_rows: int,
144
+ scope: dict | None = None,
145
+ include_global: bool = True,
146
+ ) -> int:
147
+ """Delete oldest scoped evidence rows beyond *max_rows*; 0 disables."""
148
+ return 0
149
+
123
150
  def recent_episodes(
124
151
  self,
125
152
  limit: int = 10,
@@ -180,6 +180,73 @@ class InspectorSQL:
180
180
  *(scope[field] for field in fields)))
181
181
  self._commit()
182
182
 
183
+ def _prune_ledger(self, table: str, max_rows: int, scope, include_global: bool) -> int:
184
+ """Delete oldest scoped rows beyond a hard row cap.
185
+
186
+ The cap is deterministic and keeps the newest rows, so current-session
187
+ continuity and recent audit remain available. 0 disables pruning.
188
+ """
189
+ from luminary_memory.scope import scope_sql
190
+
191
+ cap = max(0, int(max_rows))
192
+ if cap == 0:
193
+ return 0
194
+ where, params = scope_sql(
195
+ scope, alias="e", include_global=include_global, active_only=False
196
+ )
197
+ total = int(self._sql(
198
+ f"SELECT COUNT(*) FROM {table} e WHERE {where}", tuple(params)
199
+ ).fetchone()[0])
200
+ excess = total - cap
201
+ if excess <= 0:
202
+ return 0
203
+ order = "e.created_at ASC, e.id ASC"
204
+ if table == "episodes" and not hasattr(self, "_psycopg"):
205
+ order = "e.created_at ASC, e.rowid ASC"
206
+ self._sql(
207
+ f"DELETE FROM {table} WHERE id IN "
208
+ f"(SELECT e.id FROM {table} e WHERE {where} ORDER BY {order} LIMIT ?)",
209
+ (*params, excess),
210
+ )
211
+ self._commit()
212
+ return excess
213
+
214
+ def prune_episodes(self, max_rows: int, scope=None, include_global: bool = True) -> int:
215
+ return self._prune_ledger("episodes", max_rows, scope, include_global)
216
+
217
+ def prune_events(self, max_rows: int, scope=None, include_global: bool = True) -> int:
218
+ return self._prune_ledger("memory_events", max_rows, scope, include_global)
219
+
220
+ def prune_evidence(self, max_rows: int, scope=None, include_global: bool = True) -> int:
221
+ """Prune evidence by its owning memory's scope; evidence has no scope columns."""
222
+ from luminary_memory.scope import scope_sql
223
+
224
+ cap = max(0, int(max_rows))
225
+ if cap == 0:
226
+ return 0
227
+ memory_where, params = scope_sql(
228
+ scope, alias="m", include_global=include_global, active_only=False
229
+ )
230
+ where = f"e.memory_id IN (SELECT m.id FROM memories m WHERE {memory_where})"
231
+ if scope is None and include_global:
232
+ # Orphaned evidence has no owner left to scope it; only an
233
+ # unscoped/global lifecycle pass may reclaim it.
234
+ where = f"(e.memory_id IS NULL OR {where})"
235
+ total = int(self._sql(
236
+ f"SELECT COUNT(*) FROM memory_evidence e WHERE {where}", tuple(params)
237
+ ).fetchone()[0])
238
+ excess = total - cap
239
+ if excess <= 0:
240
+ return 0
241
+ self._sql(
242
+ "DELETE FROM memory_evidence WHERE id IN "
243
+ f"(SELECT e.id FROM memory_evidence e WHERE {where} "
244
+ "ORDER BY e.created_at ASC, e.id ASC LIMIT ?)",
245
+ (*params, excess),
246
+ )
247
+ self._commit()
248
+ return excess
249
+
183
250
  def inspector_get(self, key, default=None):
184
251
  row = self._sql("SELECT value FROM inspector_metadata WHERE key = ?", (key,)).fetchone()
185
252
  return json.loads(row[0]) if row else default
@@ -229,6 +229,10 @@ class Settings:
229
229
  )
230
230
  token_budget: int = field(default_factory=lambda: _env_int("LUMINARY_TOKEN_BUDGET", 4096))
231
231
  max_memories: int | None = field(default_factory=lambda: _env_int("LUMINARY_MAX_MEMORIES", 1000))
232
+ # Append-only ledger retention. 0 disables pruning for that ledger.
233
+ episode_max_rows: int = field(default_factory=lambda: _env_int("LUMINARY_EPISODE_MAX_ROWS", 10000))
234
+ event_max_rows: int = field(default_factory=lambda: _env_int("LUMINARY_EVENT_MAX_ROWS", 50000))
235
+ evidence_max_rows: int = field(default_factory=lambda: _env_int("LUMINARY_EVIDENCE_MAX_ROWS", 50000))
232
236
  # Safety policy. Legacy direct clients keep permissive recall unless
233
237
  # enabled, while Hermes/CLI accuracy paths opt into strict abstention.
234
238
  strict_recall: bool = field(default_factory=lambda: _env_bool("LUMINARY_STRICT_RECALL", False))
@@ -300,6 +304,9 @@ class Settings:
300
304
  "recall_min_score": self.recall_min_score,
301
305
  "token_budget": self.token_budget,
302
306
  "max_memories": self.max_memories,
307
+ "episode_max_rows": self.episode_max_rows,
308
+ "event_max_rows": self.event_max_rows,
309
+ "evidence_max_rows": self.evidence_max_rows,
303
310
  "strict_recall": self.strict_recall,
304
311
  "scope_include_global": self.scope_include_global,
305
312
  "abstention_min_confidence": self.abstention_min_confidence,