superlocalmemory 3.6.23 → 3.7.0
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.
- package/CHANGELOG.md +52 -0
- package/README.md +271 -71
- package/bin/slm-npm +43 -89
- package/ide/configs/antigravity-mcp.json +2 -2
- package/ide/configs/chatgpt-desktop-mcp.json +1 -1
- package/ide/configs/claude-desktop-mcp.json +2 -2
- package/ide/configs/windsurf-mcp.json +2 -2
- package/ide/hooks/context-hook.js +6 -2
- package/ide/hooks/post-recall-hook.js +7 -3
- package/ide/hooks/tool-event-hook.sh +2 -1
- package/package.json +18 -10
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/_GENERATED.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/rules/AGENTS.md +1 -1
- package/pyproject.toml +40 -8
- package/scripts/postinstall-interactive.js +17 -94
- package/scripts/postinstall.js +185 -258
- package/scripts/preuninstall.js +9 -50
- package/src/superlocalmemory/__init__.py +2 -2
- package/src/superlocalmemory/attribution/mathematical_dna.py +1 -1
- package/src/superlocalmemory/attribution/signer.py +34 -19
- package/src/superlocalmemory/attribution/watermark.py +1 -1
- package/src/superlocalmemory/cli/_lazy_init.py +3 -5
- package/src/superlocalmemory/cli/commands.py +453 -191
- package/src/superlocalmemory/cli/context_commands.py +5 -4
- package/src/superlocalmemory/cli/daemon.py +282 -187
- package/src/superlocalmemory/cli/db_migrate.py +3 -1
- package/src/superlocalmemory/cli/diagnostics_cmd.py +28 -0
- package/src/superlocalmemory/cli/evidence_cmd.py +103 -0
- package/src/superlocalmemory/cli/ingest_cmd.py +7 -3
- package/src/superlocalmemory/cli/main.py +128 -31
- package/src/superlocalmemory/cli/pending_store.py +54 -38
- package/src/superlocalmemory/cli/scale_engine_cmd.py +37 -0
- package/src/superlocalmemory/cli/service_installer.py +57 -52
- package/src/superlocalmemory/cli/setup_wizard.py +142 -88
- package/src/superlocalmemory/cli/version_banner.py +2 -1
- package/src/superlocalmemory/code_graph/config.py +3 -1
- package/src/superlocalmemory/core/backend_orchestrator.py +81 -21
- package/src/superlocalmemory/core/config.py +65 -20
- package/src/superlocalmemory/core/consolidation_engine.py +9 -7
- package/src/superlocalmemory/core/context_cache.py +56 -8
- package/src/superlocalmemory/core/derivation_lineage.py +246 -0
- package/src/superlocalmemory/core/embedding_worker.py +32 -20
- package/src/superlocalmemory/core/embeddings.py +54 -18
- package/src/superlocalmemory/core/engine.py +150 -104
- package/src/superlocalmemory/core/engine_ingestion.py +513 -0
- package/src/superlocalmemory/core/engine_wiring.py +2 -0
- package/src/superlocalmemory/core/evidence_bundle.py +526 -0
- package/src/superlocalmemory/core/fact_consolidator.py +5 -11
- package/src/superlocalmemory/core/graph_analyzer.py +2 -2
- package/src/superlocalmemory/core/health_monitor.py +4 -2
- package/src/superlocalmemory/core/ingestion_command.py +636 -0
- package/src/superlocalmemory/core/injection.py +69 -18
- package/src/superlocalmemory/core/lifecycle_state.py +153 -0
- package/src/superlocalmemory/core/maintenance.py +1 -1
- package/src/superlocalmemory/core/maintenance_scheduler.py +51 -35
- package/src/superlocalmemory/core/mutations.py +143 -0
- package/src/superlocalmemory/core/platform_utils.py +7 -4
- package/src/superlocalmemory/core/ram_lock.py +16 -5
- package/src/superlocalmemory/core/rate_limit.py +1 -1
- package/src/superlocalmemory/core/recall_pipeline.py +60 -101
- package/src/superlocalmemory/core/recall_worker.py +76 -59
- package/src/superlocalmemory/core/registry.py +1 -1
- package/src/superlocalmemory/core/scale_engine.py +293 -0
- package/src/superlocalmemory/core/score_contract.py +62 -0
- package/src/superlocalmemory/core/security_primitives.py +3 -1
- package/src/superlocalmemory/core/slm_disabled.py +3 -5
- package/src/superlocalmemory/core/store_pipeline.py +172 -40
- package/src/superlocalmemory/core/tier_manager.py +32 -20
- package/src/superlocalmemory/core/worker_pool.py +13 -4
- package/src/superlocalmemory/dynamics/activation_guided_quantization.py +1 -1
- package/src/superlocalmemory/dynamics/eap_scheduler.py +10 -3
- package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +1 -1
- package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +1 -1
- package/src/superlocalmemory/encoding/auto_linker.py +1 -1
- package/src/superlocalmemory/encoding/cognitive_consolidator.py +7 -16
- package/src/superlocalmemory/encoding/consolidator.py +22 -5
- package/src/superlocalmemory/encoding/fact_extractor.py +1 -1
- package/src/superlocalmemory/encoding/foresight.py +2 -0
- package/src/superlocalmemory/encoding/graph_builder.py +1 -1
- package/src/superlocalmemory/encoding/temporal_parser.py +2 -0
- package/src/superlocalmemory/evaluation/__init__.py +13 -0
- package/src/superlocalmemory/evaluation/calibration.py +308 -0
- package/src/superlocalmemory/evolution/skill_evolver.py +2 -1
- package/src/superlocalmemory/graph/cozo_backend.py +256 -23
- package/src/superlocalmemory/hooks/_outcome_common.py +21 -11
- package/src/superlocalmemory/hooks/antigravity_adapter.py +10 -31
- package/src/superlocalmemory/hooks/auto_invoker.py +25 -27
- package/src/superlocalmemory/hooks/auto_recall.py +31 -6
- package/src/superlocalmemory/hooks/auto_recall_hook.py +13 -33
- package/src/superlocalmemory/hooks/before_web_hook.py +9 -7
- package/src/superlocalmemory/hooks/claude_code_hooks.py +123 -35
- package/src/superlocalmemory/hooks/codex_assets.py +59 -0
- package/src/superlocalmemory/hooks/codex_hooks.py +186 -0
- package/src/superlocalmemory/hooks/context_payload.py +1 -1
- package/src/superlocalmemory/hooks/copilot_adapter.py +9 -24
- package/src/superlocalmemory/hooks/cursor_adapter.py +10 -32
- package/src/superlocalmemory/hooks/hook_daemon.py +4 -2
- package/src/superlocalmemory/hooks/hook_handlers.py +219 -32
- package/src/superlocalmemory/hooks/memory_protocol.py +5 -3
- package/src/superlocalmemory/hooks/post_tool_async_hook.py +4 -2
- package/src/superlocalmemory/hooks/session_registry.py +15 -8
- package/src/superlocalmemory/hooks/stop_outcome_hook.py +10 -6
- package/src/superlocalmemory/hooks/topic_shift_hook.py +42 -12
- package/src/superlocalmemory/hooks/user_prompt_hook.py +9 -14
- package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +19 -11
- package/src/superlocalmemory/infra/auth_middleware.py +38 -5
- package/src/superlocalmemory/infra/backup.py +7 -5
- package/src/superlocalmemory/infra/cloud_backup.py +18 -8
- package/src/superlocalmemory/infra/daemon_identity.py +248 -0
- package/src/superlocalmemory/infra/data_root.py +199 -0
- package/src/superlocalmemory/infra/event_bus.py +3 -1
- package/src/superlocalmemory/infra/local_diagnostics.py +327 -0
- package/src/superlocalmemory/infra/process_reaper.py +23 -0
- package/src/superlocalmemory/ingestion/adapter_manager.py +27 -9
- package/src/superlocalmemory/ingestion/base_adapter.py +25 -31
- package/src/superlocalmemory/ingestion/calendar_adapter.py +13 -4
- package/src/superlocalmemory/ingestion/credentials.py +14 -7
- package/src/superlocalmemory/ingestion/gmail_adapter.py +13 -4
- package/src/superlocalmemory/ingestion/transcript_adapter.py +7 -2
- package/src/superlocalmemory/learning/consolidation_quantization_worker.py +1 -1
- package/src/superlocalmemory/learning/ensemble.py +11 -0
- package/src/superlocalmemory/learning/entity_compiler.py +1 -1
- package/src/superlocalmemory/learning/feedback.py +1 -1
- package/src/superlocalmemory/learning/forgetting_scheduler.py +12 -7
- package/src/superlocalmemory/learning/quantization_scheduler.py +1 -1
- package/src/superlocalmemory/learning/ranker.py +4 -1
- package/src/superlocalmemory/learning/source_quality.py +1 -1
- package/src/superlocalmemory/learning/trigram_index.py +3 -2
- package/src/superlocalmemory/llm/backbone.py +1 -1
- package/src/superlocalmemory/math/ebbinghaus.py +1 -1
- package/src/superlocalmemory/math/fisher.py +1 -1
- package/src/superlocalmemory/math/fisher_quantized.py +1 -1
- package/src/superlocalmemory/math/hopfield.py +1 -1
- package/src/superlocalmemory/math/langevin.py +1 -1
- package/src/superlocalmemory/math/polar_quant.py +3 -4
- package/src/superlocalmemory/math/qjl.py +1 -1
- package/src/superlocalmemory/math/sheaf.py +1 -1
- package/src/superlocalmemory/math/turbo_quant.py +3 -2
- package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -11
- package/src/superlocalmemory/mcp/_pool_adapter.py +27 -0
- package/src/superlocalmemory/mcp/http_transport.py +53 -0
- package/src/superlocalmemory/mcp/server.py +39 -13
- package/src/superlocalmemory/mcp/shared.py +69 -3
- package/src/superlocalmemory/mcp/tools_active.py +141 -31
- package/src/superlocalmemory/mcp/tools_core.py +128 -29
- package/src/superlocalmemory/mcp/tools_evolution.py +5 -7
- package/src/superlocalmemory/mcp/tools_learning.py +42 -2
- package/src/superlocalmemory/mcp/tools_mesh.py +7 -23
- package/src/superlocalmemory/mcp/tools_optimize.py +8 -1
- package/src/superlocalmemory/mcp/tools_v28.py +23 -2
- package/src/superlocalmemory/mcp/tools_v3.py +26 -1
- package/src/superlocalmemory/mcp/tools_v33.py +56 -17
- package/src/superlocalmemory/mesh/broker.py +2 -0
- package/src/superlocalmemory/mesh/remote_sync.py +50 -12
- package/src/superlocalmemory/optimize/cache/manager.py +77 -1
- package/src/superlocalmemory/optimize/cache/semantic.py +23 -3
- package/src/superlocalmemory/optimize/compress/ccr.py +4 -0
- package/src/superlocalmemory/optimize/compress/router.py +6 -1
- package/src/superlocalmemory/optimize/config/__init__.py +5 -0
- package/src/superlocalmemory/optimize/config/store.py +6 -4
- package/src/superlocalmemory/optimize/proxy/_helpers.py +15 -5
- package/src/superlocalmemory/optimize/proxy/capture.py +3 -2
- package/src/superlocalmemory/optimize/proxy/server.py +2 -2
- package/src/superlocalmemory/optimize/storage/db.py +12 -12
- package/src/superlocalmemory/retrieval/agentic.py +1 -1
- package/src/superlocalmemory/retrieval/ann_index.py +1 -1
- package/src/superlocalmemory/retrieval/bm25_channel.py +35 -11
- package/src/superlocalmemory/retrieval/bridge_discovery.py +73 -8
- package/src/superlocalmemory/retrieval/engine.py +169 -79
- package/src/superlocalmemory/retrieval/entity_channel.py +289 -67
- package/src/superlocalmemory/retrieval/forgetting_filter.py +1 -1
- package/src/superlocalmemory/retrieval/fusion.py +1 -1
- package/src/superlocalmemory/retrieval/hopfield_channel.py +118 -30
- package/src/superlocalmemory/retrieval/profile_channel.py +1 -1
- package/src/superlocalmemory/retrieval/quantization_aware_search.py +16 -10
- package/src/superlocalmemory/retrieval/reranker.py +56 -20
- package/src/superlocalmemory/retrieval/scope_policy.py +85 -0
- package/src/superlocalmemory/retrieval/semantic_channel.py +122 -14
- package/src/superlocalmemory/retrieval/spreading_activation.py +141 -25
- package/src/superlocalmemory/retrieval/strategy.py +1 -1
- package/src/superlocalmemory/retrieval/temporal_channel.py +30 -15
- package/src/superlocalmemory/retrieval/vector_store.py +1 -1
- package/src/superlocalmemory/server/api.py +10 -7
- package/src/superlocalmemory/server/bandit_loops.py +4 -2
- package/src/superlocalmemory/server/recall_serializer.py +24 -0
- package/src/superlocalmemory/server/route_mutations.py +84 -0
- package/src/superlocalmemory/server/routes/agents.py +8 -6
- package/src/superlocalmemory/server/routes/brain.py +14 -12
- package/src/superlocalmemory/server/routes/chat.py +29 -12
- package/src/superlocalmemory/server/routes/data_io.py +55 -24
- package/src/superlocalmemory/server/routes/helpers.py +8 -63
- package/src/superlocalmemory/server/routes/ingest.py +53 -36
- package/src/superlocalmemory/server/routes/memories.py +104 -43
- package/src/superlocalmemory/server/routes/mesh.py +31 -0
- package/src/superlocalmemory/server/routes/profiles.py +26 -4
- package/src/superlocalmemory/server/routes/tiers.py +43 -11
- package/src/superlocalmemory/server/routes/timeline.py +5 -1
- package/src/superlocalmemory/server/routes/v3_api.py +76 -21
- package/src/superlocalmemory/server/security_middleware.py +1 -1
- package/src/superlocalmemory/server/unified_daemon.py +680 -293
- package/src/superlocalmemory/server/write_identity.py +147 -0
- package/src/superlocalmemory/storage/access_log.py +4 -3
- package/src/superlocalmemory/storage/database.py +118 -25
- package/src/superlocalmemory/storage/migration_runner.py +84 -1
- package/src/superlocalmemory/storage/migration_v33.py +1 -1
- package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +6 -60
- package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +120 -0
- package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +54 -0
- package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +52 -0
- package/src/superlocalmemory/storage/migrations/__init__.py +5 -0
- package/src/superlocalmemory/storage/models.py +16 -0
- package/src/superlocalmemory/storage/quantized_store.py +20 -3
- package/src/superlocalmemory/storage/v2_migrator.py +5 -3
- package/src/superlocalmemory/ui/favicon.svg +5 -0
- package/src/superlocalmemory/ui/index.html +1 -0
- package/src/superlocalmemory/ui/js/compliance.js +1 -1
- package/src/superlocalmemory/ui/js/core.js +49 -8
- package/src/superlocalmemory/ui/js/dashboard.js +23 -2
- package/src/superlocalmemory/ui/js/feedback.js +1 -1
- package/src/superlocalmemory/ui/js/graph-filters.js +1 -1
- package/src/superlocalmemory/ui/js/graph-ui.js +1 -1
- package/src/superlocalmemory/ui/js/lifecycle.js +1 -1
- package/src/superlocalmemory/ui/js/ng-mesh.js +15 -49
- package/src/superlocalmemory/ui/js/settings.js +4 -2
- package/src/superlocalmemory/vector/lancedb_backend.py +57 -9
- package/bin/slm +0 -59
- package/bin/slm.bat +0 -77
- package/bin/slm.cmd +0 -5
- package/ide/integrations/langchain/README.md +0 -106
- package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +0 -9
- package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +0 -201
- package/ide/integrations/langchain/pyproject.toml +0 -38
- package/ide/integrations/langchain/tests/__init__.py +0 -3
- package/ide/integrations/langchain/tests/test_chat_message_history.py +0 -215
- package/ide/integrations/langchain/tests/test_security.py +0 -117
- package/ide/integrations/llamaindex/README.md +0 -81
- package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +0 -9
- package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +0 -316
- package/ide/integrations/llamaindex/pyproject.toml +0 -43
- package/ide/integrations/llamaindex/tests/__init__.py +0 -3
- package/ide/integrations/llamaindex/tests/test_chat_store.py +0 -294
- package/ide/integrations/llamaindex/tests/test_security.py +0 -241
- package/plugin-src/.mcp.json +0 -12
- package/plugin-src/agents/slm-memory-advisor.md +0 -44
- package/plugin-src/agents/slm-optimize-advisor.md +0 -38
- package/plugin-src/hooks/.gitkeep +0 -0
- package/plugin-src/hooks/hooks.json +0 -23
- package/plugin-src/manifest.json +0 -25
- package/plugin-src/requirements.txt +0 -1
- package/plugin-src/rules/CLAUDE.md.fragment +0 -44
- package/plugin-src/scripts/ensure-venv.bat +0 -122
- package/plugin-src/scripts/ensure-venv.sh +0 -105
- package/plugin-src/scripts/slm-launch +0 -15
- package/plugin-src/scripts/slm-launch.bat +0 -17
- package/plugin-src/settings.json +0 -16
- package/plugin-src/skills/slm-cache/SKILL.md +0 -140
- package/plugin-src/skills/slm-compress/SKILL.md +0 -143
- package/plugin-src/skills/slm-graph/SKILL.md +0 -300
- package/plugin-src/skills/slm-recall/SKILL.md +0 -204
- package/plugin-src/skills/slm-remember/SKILL.md +0 -194
- package/plugin-src/skills/slm-session/SKILL.md +0 -207
- package/plugin-src/skills/slm-status/SKILL.md +0 -149
- package/scripts/__tests__/build-plugin.test.mjs +0 -613
- package/scripts/_savings_math.py +0 -270
- package/scripts/build-dmg.sh +0 -417
- package/scripts/build-plugin.js +0 -742
- package/scripts/build-slm-hook.ps1 +0 -40
- package/scripts/build-slm-hook.sh +0 -45
- package/scripts/build_entry.py +0 -452
- package/scripts/ci/stage5b_gate.sh +0 -50
- package/scripts/dogfood_savings.py +0 -490
- package/scripts/generate-thumbnails.py +0 -218
- package/scripts/install-skills.ps1 +0 -4
- package/scripts/install-skills.sh +0 -5
- package/scripts/install.ps1 +0 -701
- package/scripts/install.sh +0 -1015
- package/scripts/postinstall_binary.js +0 -287
- package/scripts/prepack.js +0 -33
- package/scripts/release_manifest.py +0 -273
- package/scripts/slm-hook.spec +0 -56
- package/scripts/start-dashboard.ps1 +0 -52
- package/scripts/start-dashboard.sh +0 -41
- package/scripts/sync-wiki.ps1 +0 -127
- package/scripts/sync-wiki.sh +0 -82
- package/scripts/test-dmg.sh +0 -161
- package/scripts/test-npm-package.ps1 +0 -252
- package/scripts/test-npm-package.sh +0 -207
- package/scripts/verify-install.ps1 +0 -294
- package/scripts/verify-install.sh +0 -266
- package/scripts/verify-v27.ps1 +0 -301
- package/scripts/verify-v27.sh +0 -233
- package/src/superlocalmemory.egg-info/PKG-INFO +0 -516
- package/src/superlocalmemory.egg-info/SOURCES.txt +0 -529
- package/src/superlocalmemory.egg-info/dependency_links.txt +0 -1
- package/src/superlocalmemory.egg-info/entry_points.txt +0 -2
- package/src/superlocalmemory.egg-info/requires.txt +0 -71
- package/src/superlocalmemory.egg-info/top_level.txt +0 -1
|
@@ -9,10 +9,10 @@ from __future__ import annotations
|
|
|
9
9
|
import json
|
|
10
10
|
import logging
|
|
11
11
|
import os
|
|
12
|
-
from
|
|
13
|
-
from fastapi import APIRouter, Request
|
|
12
|
+
from fastapi import APIRouter, HTTPException, Request
|
|
14
13
|
from fastapi.responses import JSONResponse
|
|
15
14
|
from superlocalmemory.server.routes.helpers import SLM_VERSION
|
|
15
|
+
from superlocalmemory.server.route_mutations import authorize_route_mutation
|
|
16
16
|
|
|
17
17
|
logger = logging.getLogger(__name__)
|
|
18
18
|
|
|
@@ -678,17 +678,16 @@ async def recall_trace(request: Request):
|
|
|
678
678
|
)
|
|
679
679
|
elapsed_ms = round((_time.monotonic() - t0) * 1000, 1)
|
|
680
680
|
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
})
|
|
681
|
+
from superlocalmemory.server.recall_serializer import (
|
|
682
|
+
recall_response_metadata,
|
|
683
|
+
serialize_recall_response,
|
|
684
|
+
)
|
|
685
|
+
results, no_confident_match = serialize_recall_response(
|
|
686
|
+
response,
|
|
687
|
+
limit=limit,
|
|
688
|
+
per_fact_max=300,
|
|
689
|
+
total_max=max(300, limit * 300),
|
|
690
|
+
)
|
|
692
691
|
|
|
693
692
|
# Record learning signals (non-blocking, non-critical)
|
|
694
693
|
try:
|
|
@@ -704,6 +703,8 @@ async def recall_trace(request: Request):
|
|
|
704
703
|
"retrieval_time_ms": elapsed_ms,
|
|
705
704
|
"results": results,
|
|
706
705
|
"synthesis": "",
|
|
706
|
+
"no_confident_match": no_confident_match,
|
|
707
|
+
**recall_response_metadata(response),
|
|
707
708
|
}
|
|
708
709
|
except Exception as e:
|
|
709
710
|
return JSONResponse({"error": str(e)}, status_code=500)
|
|
@@ -713,7 +714,8 @@ def _record_learning_signals(query: str, results: list) -> None:
|
|
|
713
714
|
"""Record feedback + co-retrieval + confidence boost for any recall."""
|
|
714
715
|
from superlocalmemory.core.config import SLMConfig
|
|
715
716
|
|
|
716
|
-
|
|
717
|
+
from superlocalmemory.infra.data_root import canonical_data_root
|
|
718
|
+
slm_dir = canonical_data_root()
|
|
717
719
|
config = SLMConfig.load()
|
|
718
720
|
pid = config.active_profile
|
|
719
721
|
fact_ids = [r.get("fact_id", "") for r in results[:10] if r.get("fact_id")]
|
|
@@ -970,6 +972,12 @@ async def run_consolidation(request: Request):
|
|
|
970
972
|
|
|
971
973
|
config = SLMConfig.load()
|
|
972
974
|
learning_db = DB_PATH.parent / "learning.db"
|
|
975
|
+
authorization = authorize_route_mutation(
|
|
976
|
+
request,
|
|
977
|
+
operation="update",
|
|
978
|
+
source_agent_id="http-learning-consolidate",
|
|
979
|
+
profile_id=config.active_profile,
|
|
980
|
+
)
|
|
973
981
|
result = await run_in_threadpool(
|
|
974
982
|
run_consolidation_isolated,
|
|
975
983
|
str(DB_PATH),
|
|
@@ -988,7 +996,10 @@ async def run_consolidation(request: Request):
|
|
|
988
996
|
except Exception:
|
|
989
997
|
pass
|
|
990
998
|
stats = result.get("stats") or {}
|
|
999
|
+
authorization.complete()
|
|
991
1000
|
return {"success": True, **stats}
|
|
1001
|
+
except HTTPException:
|
|
1002
|
+
raise
|
|
992
1003
|
except Exception as exc:
|
|
993
1004
|
return {"success": False, "error": str(exc)}
|
|
994
1005
|
|
|
@@ -1383,6 +1394,12 @@ async def trigger_consolidation(request: Request):
|
|
|
1383
1394
|
|
|
1384
1395
|
from superlocalmemory.server.routes.helpers import get_active_profile
|
|
1385
1396
|
pid = profile or get_active_profile()
|
|
1397
|
+
authorization = authorize_route_mutation(
|
|
1398
|
+
request,
|
|
1399
|
+
operation="update",
|
|
1400
|
+
source_agent_id="http-consolidation-trigger",
|
|
1401
|
+
profile_id=pid,
|
|
1402
|
+
)
|
|
1386
1403
|
|
|
1387
1404
|
# Use WorkerPool to run consolidation in the worker subprocess (Rule 18)
|
|
1388
1405
|
try:
|
|
@@ -1394,6 +1411,7 @@ async def trigger_consolidation(request: Request):
|
|
|
1394
1411
|
"lightweight": lightweight,
|
|
1395
1412
|
})
|
|
1396
1413
|
if result and result.get("ok"):
|
|
1414
|
+
authorization.complete()
|
|
1397
1415
|
return {"success": True, **result}
|
|
1398
1416
|
except Exception:
|
|
1399
1417
|
pass
|
|
@@ -1422,7 +1440,10 @@ async def trigger_consolidation(request: Request):
|
|
|
1422
1440
|
except Exception as exc:
|
|
1423
1441
|
logger.debug("Pattern mining after consolidation failed: %s", exc)
|
|
1424
1442
|
|
|
1443
|
+
authorization.complete()
|
|
1425
1444
|
return {"success": True, **result}
|
|
1445
|
+
except HTTPException:
|
|
1446
|
+
raise
|
|
1426
1447
|
except Exception as e:
|
|
1427
1448
|
return JSONResponse({"error": str(e)}, status_code=500)
|
|
1428
1449
|
|
|
@@ -1490,7 +1511,7 @@ async def update_core_memory_block(block_id: str, request: Request):
|
|
|
1490
1511
|
status_code=400,
|
|
1491
1512
|
)
|
|
1492
1513
|
|
|
1493
|
-
from superlocalmemory.server.routes.helpers import DB_PATH
|
|
1514
|
+
from superlocalmemory.server.routes.helpers import DB_PATH, get_active_profile
|
|
1494
1515
|
import sqlite3
|
|
1495
1516
|
from datetime import datetime, timezone
|
|
1496
1517
|
|
|
@@ -1500,14 +1521,24 @@ async def update_core_memory_block(block_id: str, request: Request):
|
|
|
1500
1521
|
status_code=404,
|
|
1501
1522
|
)
|
|
1502
1523
|
|
|
1524
|
+
pid = get_active_profile()
|
|
1525
|
+
authorization = authorize_route_mutation(
|
|
1526
|
+
request,
|
|
1527
|
+
operation="update",
|
|
1528
|
+
source_agent_id="http-core-memory-update",
|
|
1529
|
+
profile_id=pid,
|
|
1530
|
+
fact_id=block_id,
|
|
1531
|
+
content_preview=str(content),
|
|
1532
|
+
)
|
|
1533
|
+
|
|
1503
1534
|
conn = sqlite3.connect(str(DB_PATH))
|
|
1504
1535
|
conn.row_factory = sqlite3.Row
|
|
1505
1536
|
|
|
1506
1537
|
# Verify block exists
|
|
1507
1538
|
existing = conn.execute(
|
|
1508
1539
|
"SELECT block_id, profile_id, block_type, version "
|
|
1509
|
-
"FROM core_memory_blocks WHERE block_id = ?",
|
|
1510
|
-
(block_id,),
|
|
1540
|
+
"FROM core_memory_blocks WHERE block_id = ? AND profile_id = ?",
|
|
1541
|
+
(block_id, pid),
|
|
1511
1542
|
).fetchone()
|
|
1512
1543
|
|
|
1513
1544
|
if not existing:
|
|
@@ -1524,8 +1555,8 @@ async def update_core_memory_block(block_id: str, request: Request):
|
|
|
1524
1555
|
conn.execute(
|
|
1525
1556
|
"UPDATE core_memory_blocks SET content = ?, char_count = ?, "
|
|
1526
1557
|
"version = ?, compiled_by = 'manual', updated_at = ? "
|
|
1527
|
-
"WHERE block_id = ?",
|
|
1528
|
-
(content, len(content), new_version, now, block_id),
|
|
1558
|
+
"WHERE block_id = ? AND profile_id = ?",
|
|
1559
|
+
(content, len(content), new_version, now, block_id, pid),
|
|
1529
1560
|
)
|
|
1530
1561
|
conn.commit()
|
|
1531
1562
|
|
|
@@ -1533,12 +1564,15 @@ async def update_core_memory_block(block_id: str, request: Request):
|
|
|
1533
1564
|
updated = conn.execute(
|
|
1534
1565
|
"SELECT block_id, block_type, content, char_count, version, "
|
|
1535
1566
|
"compiled_by, updated_at FROM core_memory_blocks "
|
|
1536
|
-
"WHERE block_id = ?",
|
|
1537
|
-
(block_id,),
|
|
1567
|
+
"WHERE block_id = ? AND profile_id = ?",
|
|
1568
|
+
(block_id, pid),
|
|
1538
1569
|
).fetchone()
|
|
1539
1570
|
conn.close()
|
|
1540
1571
|
|
|
1572
|
+
authorization.complete()
|
|
1541
1573
|
return dict(updated) if updated else {"block_id": block_id, "updated": True}
|
|
1574
|
+
except HTTPException:
|
|
1575
|
+
raise
|
|
1542
1576
|
except Exception as e:
|
|
1543
1577
|
return JSONResponse({"error": str(e)}, status_code=500)
|
|
1544
1578
|
|
|
@@ -1664,6 +1698,12 @@ async def run_forgetting(request: Request):
|
|
|
1664
1698
|
if not DB_PATH.exists():
|
|
1665
1699
|
return {"success": False, "error": "Database not found"}
|
|
1666
1700
|
|
|
1701
|
+
authorization = authorize_route_mutation(
|
|
1702
|
+
request,
|
|
1703
|
+
operation="update",
|
|
1704
|
+
source_agent_id="http-forgetting-run",
|
|
1705
|
+
profile_id=pid,
|
|
1706
|
+
)
|
|
1667
1707
|
conn = _sqlite3.connect(str(DB_PATH))
|
|
1668
1708
|
conn.row_factory = _sqlite3.Row
|
|
1669
1709
|
|
|
@@ -1707,13 +1747,19 @@ async def run_forgetting(request: Request):
|
|
|
1707
1747
|
(pid,),
|
|
1708
1748
|
)
|
|
1709
1749
|
|
|
1750
|
+
from superlocalmemory.core.lifecycle_state import reconcile_profile_lifecycle
|
|
1751
|
+
reconcile_profile_lifecycle(conn, pid)
|
|
1752
|
+
|
|
1710
1753
|
conn.commit()
|
|
1711
1754
|
except Exception as exc:
|
|
1712
1755
|
conn.close()
|
|
1713
1756
|
return {"success": False, "error": str(exc)}
|
|
1714
1757
|
|
|
1715
1758
|
conn.close()
|
|
1759
|
+
authorization.complete()
|
|
1716
1760
|
return {"success": True, "facts_decayed": updated, "profile": pid}
|
|
1761
|
+
except HTTPException:
|
|
1762
|
+
raise
|
|
1717
1763
|
except Exception as e:
|
|
1718
1764
|
return JSONResponse({"error": str(e)}, status_code=500)
|
|
1719
1765
|
|
|
@@ -2083,12 +2129,21 @@ async def run_community_detection(request: Request):
|
|
|
2083
2129
|
from superlocalmemory.core.graph_analyzer import GraphAnalyzer
|
|
2084
2130
|
|
|
2085
2131
|
pid = get_active_profile()
|
|
2132
|
+
authorization = authorize_route_mutation(
|
|
2133
|
+
request,
|
|
2134
|
+
operation="update",
|
|
2135
|
+
source_agent_id="http-community-detection",
|
|
2136
|
+
profile_id=pid,
|
|
2137
|
+
)
|
|
2086
2138
|
db = DatabaseManager(DB_PATH)
|
|
2087
2139
|
db.initialize(_schema)
|
|
2088
2140
|
|
|
2089
2141
|
analyzer = GraphAnalyzer(db)
|
|
2090
2142
|
result = analyzer.compute_and_store(pid)
|
|
2143
|
+
authorization.complete()
|
|
2091
2144
|
return {"success": True, **result}
|
|
2145
|
+
except HTTPException:
|
|
2146
|
+
raise
|
|
2092
2147
|
except Exception as e:
|
|
2093
2148
|
return JSONResponse({"error": str(e)}, status_code=500)
|
|
2094
2149
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# SPDX-License-Identifier:
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
3
|
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
4
4
|
# Part of Qualixar | Author: Varun Pratap Bhardwaj (qualixar.com | varunpratap.com)
|
|
5
5
|
"""Security headers middleware for FastAPI servers.
|