superlocalmemory 4.1.13 → 4.1.14

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 (740) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +48 -0
  3. package/README.md +3 -3
  4. package/package.json +1 -8
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/CLAUDE.md +3 -3
  7. package/plugin/agents/slm-governance-advisor.md +1 -1
  8. package/plugin/agents/slm-loop-runner.md +1 -1
  9. package/plugin/agents/slm-memory-advisor.md +1 -1
  10. package/plugin/agents/slm-optimize-advisor.md +1 -1
  11. package/plugin/requirements.txt +1 -1
  12. package/plugin/skills/slm-cache/SKILL.md +1 -1
  13. package/plugin/skills/slm-compress/SKILL.md +1 -1
  14. package/plugin/skills/slm-governance/SKILL.md +1 -1
  15. package/plugin/skills/slm-graph/SKILL.md +1 -1
  16. package/plugin/skills/slm-loop/SKILL.md +1 -1
  17. package/plugin/skills/slm-mesh/SKILL.md +1 -1
  18. package/plugin/skills/slm-profile/SKILL.md +1 -1
  19. package/plugin/skills/slm-recall/SKILL.md +1 -1
  20. package/plugin/skills/slm-remember/SKILL.md +1 -1
  21. package/plugin/skills/slm-scope/SKILL.md +1 -1
  22. package/plugin/skills/slm-session/SKILL.md +1 -1
  23. package/plugin/skills/slm-status/SKILL.md +1 -1
  24. package/plugin-src/agents/slm-memory-advisor.md +1 -1
  25. package/plugin-src/agents/slm-optimize-advisor.md +1 -1
  26. package/plugin-src/rules/AGENTS.md +1 -1
  27. package/plugin-src/skills/slm-cache/SKILL.md +1 -1
  28. package/plugin-src/skills/slm-compress/SKILL.md +1 -1
  29. package/plugin-src/skills/slm-governance/SKILL.md +1 -1
  30. package/plugin-src/skills/slm-graph/SKILL.md +1 -1
  31. package/plugin-src/skills/slm-loop/SKILL.md +1 -1
  32. package/plugin-src/skills/slm-mesh/SKILL.md +1 -1
  33. package/plugin-src/skills/slm-profile/SKILL.md +1 -1
  34. package/plugin-src/skills/slm-recall/SKILL.md +1 -1
  35. package/plugin-src/skills/slm-remember/SKILL.md +1 -1
  36. package/plugin-src/skills/slm-scope/SKILL.md +1 -1
  37. package/plugin-src/skills/slm-session/SKILL.md +1 -1
  38. package/plugin-src/skills/slm-status/SKILL.md +1 -1
  39. package/scripts/postinstall.js +71 -2
  40. package/pyproject.toml +0 -250
  41. package/src/superlocalmemory/__init__.py +0 -82
  42. package/src/superlocalmemory/access/__init__.py +0 -3
  43. package/src/superlocalmemory/access/rbac.py +0 -575
  44. package/src/superlocalmemory/attribution/__init__.py +0 -9
  45. package/src/superlocalmemory/attribution/signer.py +0 -173
  46. package/src/superlocalmemory/attribution/watermark.py +0 -189
  47. package/src/superlocalmemory/brain/__init__.py +0 -5
  48. package/src/superlocalmemory/brain/truth.py +0 -418
  49. package/src/superlocalmemory/cli/__init__.py +0 -5
  50. package/src/superlocalmemory/cli/__main__.py +0 -17
  51. package/src/superlocalmemory/cli/_lazy_init.py +0 -115
  52. package/src/superlocalmemory/cli/cache_cmd.py +0 -198
  53. package/src/superlocalmemory/cli/commands.py +0 -4710
  54. package/src/superlocalmemory/cli/compress_cmd.py +0 -151
  55. package/src/superlocalmemory/cli/context_commands.py +0 -193
  56. package/src/superlocalmemory/cli/daemon.py +0 -909
  57. package/src/superlocalmemory/cli/db_migrate.py +0 -150
  58. package/src/superlocalmemory/cli/diagnostics_cmd.py +0 -101
  59. package/src/superlocalmemory/cli/escape_hatch.py +0 -220
  60. package/src/superlocalmemory/cli/evidence_cmd.py +0 -103
  61. package/src/superlocalmemory/cli/gdpr_cmd.py +0 -792
  62. package/src/superlocalmemory/cli/gdpr_io.py +0 -109
  63. package/src/superlocalmemory/cli/help_cmd.py +0 -197
  64. package/src/superlocalmemory/cli/host_upgrades.py +0 -189
  65. package/src/superlocalmemory/cli/ingest_cmd.py +0 -327
  66. package/src/superlocalmemory/cli/json_output.py +0 -81
  67. package/src/superlocalmemory/cli/loop_cmd.py +0 -187
  68. package/src/superlocalmemory/cli/main.py +0 -1145
  69. package/src/superlocalmemory/cli/mesh_cmd.py +0 -38
  70. package/src/superlocalmemory/cli/migrate_cmd.py +0 -55
  71. package/src/superlocalmemory/cli/ops_cmd.py +0 -281
  72. package/src/superlocalmemory/cli/optimize_cmd.py +0 -179
  73. package/src/superlocalmemory/cli/optimize_constants.py +0 -31
  74. package/src/superlocalmemory/cli/pending_store.py +0 -296
  75. package/src/superlocalmemory/cli/proxy_cmd.py +0 -108
  76. package/src/superlocalmemory/cli/scale_engine_cmd.py +0 -56
  77. package/src/superlocalmemory/cli/service_installer.py +0 -373
  78. package/src/superlocalmemory/cli/setup_wizard.py +0 -1162
  79. package/src/superlocalmemory/cli/summary_cmd.py +0 -215
  80. package/src/superlocalmemory/cli/version_banner.py +0 -202
  81. package/src/superlocalmemory/cli/wizard_v3426_options.py +0 -129
  82. package/src/superlocalmemory/code_graph/__init__.py +0 -46
  83. package/src/superlocalmemory/code_graph/blast_radius.py +0 -177
  84. package/src/superlocalmemory/code_graph/bridge/__init__.py +0 -36
  85. package/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -490
  86. package/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -206
  87. package/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -159
  88. package/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -170
  89. package/src/superlocalmemory/code_graph/bridge/maintenance.py +0 -220
  90. package/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -152
  91. package/src/superlocalmemory/code_graph/changes.py +0 -363
  92. package/src/superlocalmemory/code_graph/communities.py +0 -299
  93. package/src/superlocalmemory/code_graph/config.py +0 -154
  94. package/src/superlocalmemory/code_graph/database.py +0 -526
  95. package/src/superlocalmemory/code_graph/extractors/__init__.py +0 -95
  96. package/src/superlocalmemory/code_graph/extractors/python.py +0 -413
  97. package/src/superlocalmemory/code_graph/extractors/typescript.py +0 -556
  98. package/src/superlocalmemory/code_graph/flows.py +0 -350
  99. package/src/superlocalmemory/code_graph/git_hooks.py +0 -226
  100. package/src/superlocalmemory/code_graph/graph_engine.py +0 -295
  101. package/src/superlocalmemory/code_graph/graph_store.py +0 -335
  102. package/src/superlocalmemory/code_graph/incremental.py +0 -200
  103. package/src/superlocalmemory/code_graph/models.py +0 -130
  104. package/src/superlocalmemory/code_graph/parser.py +0 -687
  105. package/src/superlocalmemory/code_graph/resolver.py +0 -321
  106. package/src/superlocalmemory/code_graph/search.py +0 -460
  107. package/src/superlocalmemory/code_graph/service.py +0 -95
  108. package/src/superlocalmemory/code_graph/watcher.py +0 -207
  109. package/src/superlocalmemory/compliance/__init__.py +0 -0
  110. package/src/superlocalmemory/compliance/abac.py +0 -204
  111. package/src/superlocalmemory/compliance/audit.py +0 -385
  112. package/src/superlocalmemory/compliance/eu_ai_act.py +0 -101
  113. package/src/superlocalmemory/compliance/gdpr.py +0 -1479
  114. package/src/superlocalmemory/compliance/lifecycle.py +0 -158
  115. package/src/superlocalmemory/compliance/retention.py +0 -415
  116. package/src/superlocalmemory/compliance/scheduler.py +0 -217
  117. package/src/superlocalmemory/contracts/__init__.py +0 -1
  118. package/src/superlocalmemory/contracts/schemas/agent-experience-v1.schema.json +0 -92
  119. package/src/superlocalmemory/contracts/schemas/agent-integration-contract-v2.schema.json +0 -46
  120. package/src/superlocalmemory/contracts/schemas/cognitive-turn-receipt-v1.schema.json +0 -59
  121. package/src/superlocalmemory/contracts/v402.py +0 -62
  122. package/src/superlocalmemory/core/__init__.py +0 -0
  123. package/src/superlocalmemory/core/actor_context.py +0 -166
  124. package/src/superlocalmemory/core/admission.py +0 -769
  125. package/src/superlocalmemory/core/backend_orchestrator.py +0 -637
  126. package/src/superlocalmemory/core/block_hygiene.py +0 -147
  127. package/src/superlocalmemory/core/community_summary.py +0 -267
  128. package/src/superlocalmemory/core/component_healer.py +0 -144
  129. package/src/superlocalmemory/core/component_registry.py +0 -514
  130. package/src/superlocalmemory/core/config.py +0 -2204
  131. package/src/superlocalmemory/core/consolidation_engine.py +0 -983
  132. package/src/superlocalmemory/core/context_cache.py +0 -574
  133. package/src/superlocalmemory/core/derivation_lineage.py +0 -246
  134. package/src/superlocalmemory/core/embedding_worker.py +0 -208
  135. package/src/superlocalmemory/core/embeddings.py +0 -1052
  136. package/src/superlocalmemory/core/engine.py +0 -1395
  137. package/src/superlocalmemory/core/engine_capabilities.py +0 -24
  138. package/src/superlocalmemory/core/engine_ingestion.py +0 -983
  139. package/src/superlocalmemory/core/engine_lock.py +0 -75
  140. package/src/superlocalmemory/core/engine_wiring.py +0 -776
  141. package/src/superlocalmemory/core/entity_community.py +0 -178
  142. package/src/superlocalmemory/core/error_envelope.py +0 -60
  143. package/src/superlocalmemory/core/evidence_bundle.py +0 -528
  144. package/src/superlocalmemory/core/fact_consolidator.py +0 -812
  145. package/src/superlocalmemory/core/file_lock.py +0 -92
  146. package/src/superlocalmemory/core/graph_analyzer.py +0 -456
  147. package/src/superlocalmemory/core/graph_metrics.py +0 -597
  148. package/src/superlocalmemory/core/graph_pruner.py +0 -939
  149. package/src/superlocalmemory/core/health_monitor.py +0 -338
  150. package/src/superlocalmemory/core/hooks.py +0 -65
  151. package/src/superlocalmemory/core/ingest_gate.py +0 -133
  152. package/src/superlocalmemory/core/ingest_policy.py +0 -38
  153. package/src/superlocalmemory/core/ingestion_command.py +0 -1042
  154. package/src/superlocalmemory/core/injection.py +0 -434
  155. package/src/superlocalmemory/core/install_detector.py +0 -131
  156. package/src/superlocalmemory/core/key_expander.py +0 -138
  157. package/src/superlocalmemory/core/lifecycle_state.py +0 -153
  158. package/src/superlocalmemory/core/maintenance.py +0 -777
  159. package/src/superlocalmemory/core/maintenance_scheduler.py +0 -507
  160. package/src/superlocalmemory/core/materialization_control.py +0 -20
  161. package/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -89
  162. package/src/superlocalmemory/core/memory_health.py +0 -266
  163. package/src/superlocalmemory/core/mode_capability.py +0 -111
  164. package/src/superlocalmemory/core/modes.py +0 -168
  165. package/src/superlocalmemory/core/mutations.py +0 -688
  166. package/src/superlocalmemory/core/ollama_embedder.py +0 -266
  167. package/src/superlocalmemory/core/ollama_validator.py +0 -315
  168. package/src/superlocalmemory/core/operation_policy.py +0 -92
  169. package/src/superlocalmemory/core/operation_policy_registry.py +0 -542
  170. package/src/superlocalmemory/core/operation_request.py +0 -127
  171. package/src/superlocalmemory/core/ops_remediation.py +0 -542
  172. package/src/superlocalmemory/core/pii.py +0 -105
  173. package/src/superlocalmemory/core/platform_utils.py +0 -138
  174. package/src/superlocalmemory/core/profiles.py +0 -234
  175. package/src/superlocalmemory/core/progressive_abstraction.py +0 -208
  176. package/src/superlocalmemory/core/projection_drain.py +0 -380
  177. package/src/superlocalmemory/core/queue_consumer.py +0 -168
  178. package/src/superlocalmemory/core/ram_lock.py +0 -160
  179. package/src/superlocalmemory/core/rate_limit.py +0 -151
  180. package/src/superlocalmemory/core/recall_gate.py +0 -95
  181. package/src/superlocalmemory/core/recall_pipeline.py +0 -1337
  182. package/src/superlocalmemory/core/recall_queue.py +0 -377
  183. package/src/superlocalmemory/core/recall_worker.py +0 -414
  184. package/src/superlocalmemory/core/registry.py +0 -121
  185. package/src/superlocalmemory/core/remember_admission.py +0 -161
  186. package/src/superlocalmemory/core/remember_runtime.py +0 -1190
  187. package/src/superlocalmemory/core/remote_mode.py +0 -214
  188. package/src/superlocalmemory/core/reranker_worker.py +0 -338
  189. package/src/superlocalmemory/core/safe_fs.py +0 -108
  190. package/src/superlocalmemory/core/scale_autopromote.py +0 -196
  191. package/src/superlocalmemory/core/scale_engine.py +0 -915
  192. package/src/superlocalmemory/core/score_contract.py +0 -82
  193. package/src/superlocalmemory/core/security_primitives.py +0 -672
  194. package/src/superlocalmemory/core/session_identity.py +0 -98
  195. package/src/superlocalmemory/core/shadow_router.py +0 -319
  196. package/src/superlocalmemory/core/slm_disabled.py +0 -85
  197. package/src/superlocalmemory/core/status_contract.py +0 -108
  198. package/src/superlocalmemory/core/store_pipeline.py +0 -1404
  199. package/src/superlocalmemory/core/summarizer.py +0 -200
  200. package/src/superlocalmemory/core/tier_manager.py +0 -461
  201. package/src/superlocalmemory/core/topic_signature.py +0 -156
  202. package/src/superlocalmemory/core/transactions/__init__.py +0 -78
  203. package/src/superlocalmemory/core/transactions/concrete_owners.py +0 -604
  204. package/src/superlocalmemory/core/transactions/erasure.py +0 -825
  205. package/src/superlocalmemory/core/transactions/manifest.py +0 -255
  206. package/src/superlocalmemory/core/transactions/manifest_key.py +0 -155
  207. package/src/superlocalmemory/core/transactions/obligations.py +0 -272
  208. package/src/superlocalmemory/core/transactions/owners.py +0 -114
  209. package/src/superlocalmemory/core/transactions/reconciler.py +0 -285
  210. package/src/superlocalmemory/core/transactions/service.py +0 -330
  211. package/src/superlocalmemory/core/worker_pool.py +0 -377
  212. package/src/superlocalmemory/core/working_memory.py +0 -288
  213. package/src/superlocalmemory/dynamics/__init__.py +0 -0
  214. package/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -374
  215. package/src/superlocalmemory/dynamics/eap_scheduler.py +0 -294
  216. package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -171
  217. package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -227
  218. package/src/superlocalmemory/encoding/__init__.py +0 -0
  219. package/src/superlocalmemory/encoding/auto_linker.py +0 -308
  220. package/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -899
  221. package/src/superlocalmemory/encoding/consolidator.py +0 -472
  222. package/src/superlocalmemory/encoding/context_generator.py +0 -175
  223. package/src/superlocalmemory/encoding/emotional.py +0 -189
  224. package/src/superlocalmemory/encoding/entity_reflexion.py +0 -200
  225. package/src/superlocalmemory/encoding/entity_resolver.py +0 -687
  226. package/src/superlocalmemory/encoding/entropy_gate.py +0 -101
  227. package/src/superlocalmemory/encoding/fact_extractor.py +0 -877
  228. package/src/superlocalmemory/encoding/foresight.py +0 -93
  229. package/src/superlocalmemory/encoding/graph_builder.py +0 -346
  230. package/src/superlocalmemory/encoding/observation_builder.py +0 -177
  231. package/src/superlocalmemory/encoding/prospective_markers.py +0 -262
  232. package/src/superlocalmemory/encoding/scene_builder.py +0 -410
  233. package/src/superlocalmemory/encoding/signal_inference.py +0 -90
  234. package/src/superlocalmemory/encoding/temporal_parser.py +0 -432
  235. package/src/superlocalmemory/encoding/temporal_validator.py +0 -572
  236. package/src/superlocalmemory/encoding/type_router.py +0 -237
  237. package/src/superlocalmemory/evaluation/__init__.py +0 -13
  238. package/src/superlocalmemory/evaluation/calibration.py +0 -308
  239. package/src/superlocalmemory/evolution/__init__.py +0 -29
  240. package/src/superlocalmemory/evolution/blind_verifier.py +0 -122
  241. package/src/superlocalmemory/evolution/budget.py +0 -356
  242. package/src/superlocalmemory/evolution/evolution_store.py +0 -619
  243. package/src/superlocalmemory/evolution/llm_dispatch.py +0 -559
  244. package/src/superlocalmemory/evolution/model_selection.py +0 -175
  245. package/src/superlocalmemory/evolution/mutation_generator.py +0 -226
  246. package/src/superlocalmemory/evolution/skill_activator.py +0 -270
  247. package/src/superlocalmemory/evolution/skill_evolver.py +0 -928
  248. package/src/superlocalmemory/evolution/triggers.py +0 -376
  249. package/src/superlocalmemory/evolution/types.py +0 -114
  250. package/src/superlocalmemory/graph/__init__.py +0 -9
  251. package/src/superlocalmemory/graph/cozo_adjacency.py +0 -122
  252. package/src/superlocalmemory/graph/cozo_backend.py +0 -751
  253. package/src/superlocalmemory/hooks/__init__.py +0 -3
  254. package/src/superlocalmemory/hooks/_outcome_common.py +0 -523
  255. package/src/superlocalmemory/hooks/adapter_base.py +0 -347
  256. package/src/superlocalmemory/hooks/antigravity_adapter.py +0 -171
  257. package/src/superlocalmemory/hooks/auto_capture.py +0 -133
  258. package/src/superlocalmemory/hooks/auto_invoker.py +0 -521
  259. package/src/superlocalmemory/hooks/auto_parameterize.py +0 -147
  260. package/src/superlocalmemory/hooks/auto_recall.py +0 -191
  261. package/src/superlocalmemory/hooks/auto_recall_hook.py +0 -251
  262. package/src/superlocalmemory/hooks/before_web_hook.py +0 -131
  263. package/src/superlocalmemory/hooks/claude_code_hooks.py +0 -637
  264. package/src/superlocalmemory/hooks/codex_assets.py +0 -251
  265. package/src/superlocalmemory/hooks/codex_hooks.py +0 -186
  266. package/src/superlocalmemory/hooks/context_payload.py +0 -311
  267. package/src/superlocalmemory/hooks/copilot_adapter.py +0 -208
  268. package/src/superlocalmemory/hooks/cross_platform_connector.py +0 -90
  269. package/src/superlocalmemory/hooks/cursor_adapter.py +0 -173
  270. package/src/superlocalmemory/hooks/hook_daemon.py +0 -295
  271. package/src/superlocalmemory/hooks/hook_handlers.py +0 -822
  272. package/src/superlocalmemory/hooks/ide_connector.py +0 -246
  273. package/src/superlocalmemory/hooks/memory_protocol.py +0 -158
  274. package/src/superlocalmemory/hooks/portable_kit.py +0 -755
  275. package/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -183
  276. package/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -351
  277. package/src/superlocalmemory/hooks/prewarm_auth.py +0 -187
  278. package/src/superlocalmemory/hooks/rules_engine.py +0 -99
  279. package/src/superlocalmemory/hooks/session_registry.py +0 -330
  280. package/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -138
  281. package/src/superlocalmemory/hooks/sync_loop.py +0 -114
  282. package/src/superlocalmemory/hooks/topic_shift_hook.py +0 -302
  283. package/src/superlocalmemory/hooks/user_prompt_hook.py +0 -131
  284. package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -210
  285. package/src/superlocalmemory/infra/__init__.py +0 -3
  286. package/src/superlocalmemory/infra/auth_middleware.py +0 -145
  287. package/src/superlocalmemory/infra/backup.py +0 -974
  288. package/src/superlocalmemory/infra/backup_obligations.py +0 -423
  289. package/src/superlocalmemory/infra/cache_manager.py +0 -267
  290. package/src/superlocalmemory/infra/cloud_backup.py +0 -788
  291. package/src/superlocalmemory/infra/daemon_identity.py +0 -300
  292. package/src/superlocalmemory/infra/data_root.py +0 -238
  293. package/src/superlocalmemory/infra/event_bus.py +0 -637
  294. package/src/superlocalmemory/infra/local_diagnostics.py +0 -327
  295. package/src/superlocalmemory/infra/pid_manager.py +0 -193
  296. package/src/superlocalmemory/infra/process_identity.py +0 -180
  297. package/src/superlocalmemory/infra/process_reaper.py +0 -624
  298. package/src/superlocalmemory/infra/rate_limiter.py +0 -228
  299. package/src/superlocalmemory/infra/self_heal.py +0 -401
  300. package/src/superlocalmemory/infra/version_integrity.py +0 -229
  301. package/src/superlocalmemory/ingestion/__init__.py +0 -13
  302. package/src/superlocalmemory/ingestion/adapter_manager.py +0 -255
  303. package/src/superlocalmemory/ingestion/base_adapter.py +0 -171
  304. package/src/superlocalmemory/ingestion/calendar_adapter.py +0 -349
  305. package/src/superlocalmemory/ingestion/credentials.py +0 -125
  306. package/src/superlocalmemory/ingestion/gmail_adapter.py +0 -378
  307. package/src/superlocalmemory/ingestion/parsers.py +0 -100
  308. package/src/superlocalmemory/ingestion/transcript_adapter.py +0 -161
  309. package/src/superlocalmemory/integrations/__init__.py +0 -1
  310. package/src/superlocalmemory/integrations/bounded_loops_mcp.py +0 -431
  311. package/src/superlocalmemory/integrations/bounded_loops_v051.py +0 -236
  312. package/src/superlocalmemory/learning/__init__.py +0 -0
  313. package/src/superlocalmemory/learning/adaptive.py +0 -172
  314. package/src/superlocalmemory/learning/arm_catalog.py +0 -97
  315. package/src/superlocalmemory/learning/assertion_miner.py +0 -403
  316. package/src/superlocalmemory/learning/bandit.py +0 -654
  317. package/src/superlocalmemory/learning/bandit_cache.py +0 -131
  318. package/src/superlocalmemory/learning/behavioral.py +0 -542
  319. package/src/superlocalmemory/learning/bootstrap.py +0 -298
  320. package/src/superlocalmemory/learning/consolidation_cycle.py +0 -398
  321. package/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -115
  322. package/src/superlocalmemory/learning/consolidation_worker.py +0 -261
  323. package/src/superlocalmemory/learning/cross_project.py +0 -408
  324. package/src/superlocalmemory/learning/database.py +0 -698
  325. package/src/superlocalmemory/learning/dedup_hnsw.py +0 -413
  326. package/src/superlocalmemory/learning/engagement.py +0 -487
  327. package/src/superlocalmemory/learning/engagement_features.py +0 -279
  328. package/src/superlocalmemory/learning/ensemble.py +0 -309
  329. package/src/superlocalmemory/learning/entity_compiler.py +0 -356
  330. package/src/superlocalmemory/learning/fact_outcome_joins.py +0 -207
  331. package/src/superlocalmemory/learning/features.py +0 -138
  332. package/src/superlocalmemory/learning/feedback.py +0 -724
  333. package/src/superlocalmemory/learning/forgetting_scheduler.py +0 -375
  334. package/src/superlocalmemory/learning/hnsw_dedup.py +0 -69
  335. package/src/superlocalmemory/learning/labeler.py +0 -85
  336. package/src/superlocalmemory/learning/legacy_migration.py +0 -316
  337. package/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -236
  338. package/src/superlocalmemory/learning/memory_merge.py +0 -175
  339. package/src/superlocalmemory/learning/model_cache.py +0 -267
  340. package/src/superlocalmemory/learning/model_rollback.py +0 -281
  341. package/src/superlocalmemory/learning/outcome_queue.py +0 -306
  342. package/src/superlocalmemory/learning/outcomes.py +0 -286
  343. package/src/superlocalmemory/learning/pattern_miner.py +0 -465
  344. package/src/superlocalmemory/learning/pattern_miner_constants.py +0 -90
  345. package/src/superlocalmemory/learning/pcos.py +0 -291
  346. package/src/superlocalmemory/learning/project_context.py +0 -366
  347. package/src/superlocalmemory/learning/propensity.py +0 -131
  348. package/src/superlocalmemory/learning/ranker.py +0 -300
  349. package/src/superlocalmemory/learning/ranker_common.py +0 -163
  350. package/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -210
  351. package/src/superlocalmemory/learning/ranker_retrain_online.py +0 -423
  352. package/src/superlocalmemory/learning/reward.py +0 -888
  353. package/src/superlocalmemory/learning/reward_archive.py +0 -223
  354. package/src/superlocalmemory/learning/reward_boost.py +0 -211
  355. package/src/superlocalmemory/learning/reward_from_outcomes.py +0 -365
  356. package/src/superlocalmemory/learning/reward_model.py +0 -144
  357. package/src/superlocalmemory/learning/reward_proxy.py +0 -578
  358. package/src/superlocalmemory/learning/shadow_test.py +0 -524
  359. package/src/superlocalmemory/learning/signal_kinds.py +0 -79
  360. package/src/superlocalmemory/learning/signal_worker.py +0 -268
  361. package/src/superlocalmemory/learning/signals.py +0 -646
  362. package/src/superlocalmemory/learning/skill_performance_miner.py +0 -422
  363. package/src/superlocalmemory/learning/source_quality.py +0 -828
  364. package/src/superlocalmemory/learning/trigram_index.py +0 -548
  365. package/src/superlocalmemory/learning/workflows.py +0 -309
  366. package/src/superlocalmemory/llm/__init__.py +0 -0
  367. package/src/superlocalmemory/llm/backbone.py +0 -364
  368. package/src/superlocalmemory/loops/__init__.py +0 -58
  369. package/src/superlocalmemory/loops/budget.py +0 -58
  370. package/src/superlocalmemory/loops/engine.py +0 -174
  371. package/src/superlocalmemory/loops/ledger.py +0 -298
  372. package/src/superlocalmemory/loops/models.py +0 -152
  373. package/src/superlocalmemory/loops/rules.py +0 -52
  374. package/src/superlocalmemory/math/__init__.py +0 -0
  375. package/src/superlocalmemory/math/ebbinghaus.py +0 -352
  376. package/src/superlocalmemory/math/fisher.py +0 -356
  377. package/src/superlocalmemory/math/fisher_quantized.py +0 -255
  378. package/src/superlocalmemory/math/hopfield.py +0 -282
  379. package/src/superlocalmemory/math/langevin.py +0 -411
  380. package/src/superlocalmemory/math/polar_quant.py +0 -414
  381. package/src/superlocalmemory/math/qjl.py +0 -115
  382. package/src/superlocalmemory/math/sheaf.py +0 -261
  383. package/src/superlocalmemory/math/turbo_quant.py +0 -318
  384. package/src/superlocalmemory/mcp/__init__.py +0 -0
  385. package/src/superlocalmemory/mcp/_daemon_proxy.py +0 -203
  386. package/src/superlocalmemory/mcp/_pool_adapter.py +0 -181
  387. package/src/superlocalmemory/mcp/_stdin_guard.py +0 -60
  388. package/src/superlocalmemory/mcp/agent_context.py +0 -115
  389. package/src/superlocalmemory/mcp/cli_fallback.py +0 -602
  390. package/src/superlocalmemory/mcp/http_transport.py +0 -85
  391. package/src/superlocalmemory/mcp/profiles.py +0 -154
  392. package/src/superlocalmemory/mcp/resources.py +0 -281
  393. package/src/superlocalmemory/mcp/server.py +0 -480
  394. package/src/superlocalmemory/mcp/session_binding.py +0 -98
  395. package/src/superlocalmemory/mcp/shared.py +0 -112
  396. package/src/superlocalmemory/mcp/tools.py +0 -18
  397. package/src/superlocalmemory/mcp/tools_active.py +0 -958
  398. package/src/superlocalmemory/mcp/tools_brain.py +0 -298
  399. package/src/superlocalmemory/mcp/tools_code_graph.py +0 -1717
  400. package/src/superlocalmemory/mcp/tools_context.py +0 -239
  401. package/src/superlocalmemory/mcp/tools_core.py +0 -1112
  402. package/src/superlocalmemory/mcp/tools_evolution.py +0 -343
  403. package/src/superlocalmemory/mcp/tools_learning.py +0 -393
  404. package/src/superlocalmemory/mcp/tools_loops.py +0 -345
  405. package/src/superlocalmemory/mcp/tools_mesh.py +0 -429
  406. package/src/superlocalmemory/mcp/tools_ops.py +0 -115
  407. package/src/superlocalmemory/mcp/tools_optimize.py +0 -322
  408. package/src/superlocalmemory/mcp/tools_summaries.py +0 -147
  409. package/src/superlocalmemory/mcp/tools_v28.py +0 -292
  410. package/src/superlocalmemory/mcp/tools_v3.py +0 -398
  411. package/src/superlocalmemory/mcp/tools_v33.py +0 -507
  412. package/src/superlocalmemory/mesh/__init__.py +0 -12
  413. package/src/superlocalmemory/mesh/broker.py +0 -812
  414. package/src/superlocalmemory/mesh/broker_security.py +0 -470
  415. package/src/superlocalmemory/mesh/discovery.py +0 -365
  416. package/src/superlocalmemory/mesh/lock_protocol.py +0 -313
  417. package/src/superlocalmemory/mesh/node_identity.py +0 -97
  418. package/src/superlocalmemory/mesh/outbox_remote.py +0 -429
  419. package/src/superlocalmemory/mesh/remote_sync.py +0 -829
  420. package/src/superlocalmemory/mesh/state_sync.py +0 -286
  421. package/src/superlocalmemory/migrations/__init__.py +0 -5
  422. package/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -144
  423. package/src/superlocalmemory/optimize/NOTICE +0 -6
  424. package/src/superlocalmemory/optimize/__init__.py +0 -0
  425. package/src/superlocalmemory/optimize/adapters/__init__.py +0 -68
  426. package/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -120
  427. package/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -112
  428. package/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -122
  429. package/src/superlocalmemory/optimize/adapters/wrap.py +0 -228
  430. package/src/superlocalmemory/optimize/cache/__init__.py +0 -31
  431. package/src/superlocalmemory/optimize/cache/boundary_store.py +0 -488
  432. package/src/superlocalmemory/optimize/cache/centroid_store.py +0 -199
  433. package/src/superlocalmemory/optimize/cache/context_key.py +0 -67
  434. package/src/superlocalmemory/optimize/cache/exact.py +0 -88
  435. package/src/superlocalmemory/optimize/cache/invalidation.py +0 -36
  436. package/src/superlocalmemory/optimize/cache/key_builder.py +0 -111
  437. package/src/superlocalmemory/optimize/cache/manager.py +0 -737
  438. package/src/superlocalmemory/optimize/cache/semantic.py +0 -637
  439. package/src/superlocalmemory/optimize/cache/stampede.py +0 -50
  440. package/src/superlocalmemory/optimize/compress/__init__.py +0 -17
  441. package/src/superlocalmemory/optimize/compress/align.py +0 -159
  442. package/src/superlocalmemory/optimize/compress/ccr.py +0 -116
  443. package/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -71
  444. package/src/superlocalmemory/optimize/compress/router.py +0 -667
  445. package/src/superlocalmemory/optimize/config/__init__.py +0 -56
  446. package/src/superlocalmemory/optimize/config/defaults.py +0 -43
  447. package/src/superlocalmemory/optimize/config/schema.py +0 -327
  448. package/src/superlocalmemory/optimize/config/store.py +0 -270
  449. package/src/superlocalmemory/optimize/metrics/__init__.py +0 -8
  450. package/src/superlocalmemory/optimize/metrics/counters.py +0 -155
  451. package/src/superlocalmemory/optimize/metrics/estimator.py +0 -87
  452. package/src/superlocalmemory/optimize/metrics/exporters.py +0 -77
  453. package/src/superlocalmemory/optimize/metrics/persistence.py +0 -115
  454. package/src/superlocalmemory/optimize/proxy/__init__.py +0 -28
  455. package/src/superlocalmemory/optimize/proxy/_helpers.py +0 -730
  456. package/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -375
  457. package/src/superlocalmemory/optimize/proxy/capture.py +0 -550
  458. package/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -528
  459. package/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -126
  460. package/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -465
  461. package/src/superlocalmemory/optimize/proxy/server.py +0 -199
  462. package/src/superlocalmemory/optimize/proxy/vertex_surface.py +0 -246
  463. package/src/superlocalmemory/optimize/storage/__init__.py +0 -0
  464. package/src/superlocalmemory/optimize/storage/db.py +0 -1185
  465. package/src/superlocalmemory/optimize/storage/schema.py +0 -205
  466. package/src/superlocalmemory/parameterization/__init__.py +0 -47
  467. package/src/superlocalmemory/parameterization/cross_project.py +0 -12
  468. package/src/superlocalmemory/parameterization/pattern_extractor.py +0 -584
  469. package/src/superlocalmemory/parameterization/pii_filter.py +0 -106
  470. package/src/superlocalmemory/parameterization/prompt_injector.py +0 -219
  471. package/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -281
  472. package/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -542
  473. package/src/superlocalmemory/parameterization/workflow_miner.py +0 -17
  474. package/src/superlocalmemory/reliability/__init__.py +0 -45
  475. package/src/superlocalmemory/reliability/join_liveness.py +0 -301
  476. package/src/superlocalmemory/reliability/prior_distance.py +0 -243
  477. package/src/superlocalmemory/retrieval/__init__.py +0 -0
  478. package/src/superlocalmemory/retrieval/agentic.py +0 -367
  479. package/src/superlocalmemory/retrieval/ann_index.py +0 -235
  480. package/src/superlocalmemory/retrieval/bm25_channel.py +0 -451
  481. package/src/superlocalmemory/retrieval/bridge_discovery.py +0 -253
  482. package/src/superlocalmemory/retrieval/channel_registry.py +0 -154
  483. package/src/superlocalmemory/retrieval/channel_status.py +0 -117
  484. package/src/superlocalmemory/retrieval/engine.py +0 -1615
  485. package/src/superlocalmemory/retrieval/entity_channel.py +0 -994
  486. package/src/superlocalmemory/retrieval/forgetting_filter.py +0 -160
  487. package/src/superlocalmemory/retrieval/fusion.py +0 -81
  488. package/src/superlocalmemory/retrieval/graph_adjacency.py +0 -219
  489. package/src/superlocalmemory/retrieval/hopfield_channel.py +0 -465
  490. package/src/superlocalmemory/retrieval/profile_channel.py +0 -105
  491. package/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -147
  492. package/src/superlocalmemory/retrieval/remote_reranker.py +0 -758
  493. package/src/superlocalmemory/retrieval/reranker.py +0 -674
  494. package/src/superlocalmemory/retrieval/scope_policy.py +0 -126
  495. package/src/superlocalmemory/retrieval/semantic_channel.py +0 -638
  496. package/src/superlocalmemory/retrieval/spreading.py +0 -288
  497. package/src/superlocalmemory/retrieval/spreading_activation.py +0 -616
  498. package/src/superlocalmemory/retrieval/strategy.py +0 -248
  499. package/src/superlocalmemory/retrieval/temporal_channel.py +0 -433
  500. package/src/superlocalmemory/retrieval/temporal_frame.py +0 -102
  501. package/src/superlocalmemory/retrieval/temporal_utils.py +0 -122
  502. package/src/superlocalmemory/retrieval/temporal_validity_filter.py +0 -499
  503. package/src/superlocalmemory/retrieval/time_window.py +0 -181
  504. package/src/superlocalmemory/retrieval/vector_store.py +0 -863
  505. package/src/superlocalmemory/server/__init__.py +0 -1
  506. package/src/superlocalmemory/server/api.py +0 -310
  507. package/src/superlocalmemory/server/asset_versions.py +0 -171
  508. package/src/superlocalmemory/server/bandit_loops.py +0 -158
  509. package/src/superlocalmemory/server/config_file.py +0 -90
  510. package/src/superlocalmemory/server/consolidation_runner.py +0 -140
  511. package/src/superlocalmemory/server/egress_policy.py +0 -258
  512. package/src/superlocalmemory/server/loopback.py +0 -85
  513. package/src/superlocalmemory/server/middleware/__init__.py +0 -11
  514. package/src/superlocalmemory/server/middleware/security_headers.py +0 -144
  515. package/src/superlocalmemory/server/origin.py +0 -55
  516. package/src/superlocalmemory/server/profile_runtime.py +0 -515
  517. package/src/superlocalmemory/server/rbac_enforce.py +0 -194
  518. package/src/superlocalmemory/server/recall_health.py +0 -343
  519. package/src/superlocalmemory/server/recall_serializer.py +0 -320
  520. package/src/superlocalmemory/server/route_mutations.py +0 -104
  521. package/src/superlocalmemory/server/routes/__init__.py +0 -4
  522. package/src/superlocalmemory/server/routes/abstraction.py +0 -314
  523. package/src/superlocalmemory/server/routes/adapters.py +0 -63
  524. package/src/superlocalmemory/server/routes/agents.py +0 -303
  525. package/src/superlocalmemory/server/routes/backup.py +0 -869
  526. package/src/superlocalmemory/server/routes/behavioral.py +0 -659
  527. package/src/superlocalmemory/server/routes/brain.py +0 -1892
  528. package/src/superlocalmemory/server/routes/chat.py +0 -393
  529. package/src/superlocalmemory/server/routes/compliance.py +0 -533
  530. package/src/superlocalmemory/server/routes/config_api.py +0 -703
  531. package/src/superlocalmemory/server/routes/data_io.py +0 -329
  532. package/src/superlocalmemory/server/routes/entity.py +0 -237
  533. package/src/superlocalmemory/server/routes/events.py +0 -214
  534. package/src/superlocalmemory/server/routes/evolution.py +0 -510
  535. package/src/superlocalmemory/server/routes/helpers.py +0 -499
  536. package/src/superlocalmemory/server/routes/ingest.py +0 -137
  537. package/src/superlocalmemory/server/routes/insights.py +0 -366
  538. package/src/superlocalmemory/server/routes/learning.py +0 -834
  539. package/src/superlocalmemory/server/routes/learning_telemetry.py +0 -154
  540. package/src/superlocalmemory/server/routes/lifecycle.py +0 -184
  541. package/src/superlocalmemory/server/routes/memories.py +0 -1661
  542. package/src/superlocalmemory/server/routes/mesh.py +0 -517
  543. package/src/superlocalmemory/server/routes/mesh_lock.py +0 -54
  544. package/src/superlocalmemory/server/routes/mesh_state.py +0 -63
  545. package/src/superlocalmemory/server/routes/optimize.py +0 -197
  546. package/src/superlocalmemory/server/routes/prewarm.py +0 -173
  547. package/src/superlocalmemory/server/routes/profiles.py +0 -292
  548. package/src/superlocalmemory/server/routes/ratelimit.py +0 -132
  549. package/src/superlocalmemory/server/routes/rbac.py +0 -366
  550. package/src/superlocalmemory/server/routes/stats.py +0 -385
  551. package/src/superlocalmemory/server/routes/tiers.py +0 -222
  552. package/src/superlocalmemory/server/routes/timeline.py +0 -258
  553. package/src/superlocalmemory/server/routes/token.py +0 -90
  554. package/src/superlocalmemory/server/routes/v3_api.py +0 -3023
  555. package/src/superlocalmemory/server/routes/ws.py +0 -171
  556. package/src/superlocalmemory/server/security_middleware.py +0 -89
  557. package/src/superlocalmemory/server/ui.py +0 -354
  558. package/src/superlocalmemory/server/unified_daemon.py +0 -6326
  559. package/src/superlocalmemory/server/write_identity.py +0 -195
  560. package/src/superlocalmemory/storage/__init__.py +0 -0
  561. package/src/superlocalmemory/storage/_migration_internals.py +0 -638
  562. package/src/superlocalmemory/storage/_schema_version.py +0 -174
  563. package/src/superlocalmemory/storage/access_log.py +0 -170
  564. package/src/superlocalmemory/storage/admission_codec.py +0 -129
  565. package/src/superlocalmemory/storage/admission_journal.py +0 -843
  566. package/src/superlocalmemory/storage/agent_experience.py +0 -546
  567. package/src/superlocalmemory/storage/backup.py +0 -531
  568. package/src/superlocalmemory/storage/correction_cases.py +0 -670
  569. package/src/superlocalmemory/storage/database.py +0 -3180
  570. package/src/superlocalmemory/storage/deferred_writes.py +0 -209
  571. package/src/superlocalmemory/storage/embedding_codec.py +0 -200
  572. package/src/superlocalmemory/storage/embedding_migrator.py +0 -672
  573. package/src/superlocalmemory/storage/erasure_fence.py +0 -45
  574. package/src/superlocalmemory/storage/execution_learning.py +0 -285
  575. package/src/superlocalmemory/storage/external_evidence.py +0 -359
  576. package/src/superlocalmemory/storage/generation_fence.py +0 -63
  577. package/src/superlocalmemory/storage/lineage_retention.py +0 -236
  578. package/src/superlocalmemory/storage/logical_edges.py +0 -86
  579. package/src/superlocalmemory/storage/memory_write.py +0 -115
  580. package/src/superlocalmemory/storage/migration_runner.py +0 -895
  581. package/src/superlocalmemory/storage/migration_v33.py +0 -140
  582. package/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -67
  583. package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -107
  584. package/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -38
  585. package/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -46
  586. package/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -75
  587. package/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -75
  588. package/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -63
  589. package/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -94
  590. package/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -80
  591. package/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -87
  592. package/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -72
  593. package/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -55
  594. package/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -45
  595. package/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -58
  596. package/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +0 -120
  597. package/src/superlocalmemory/storage/migrations/M017_ccq_scope_column.py +0 -79
  598. package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +0 -120
  599. package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +0 -54
  600. package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +0 -52
  601. package/src/superlocalmemory/storage/migrations/M021_ingestion_log_profile.py +0 -108
  602. package/src/superlocalmemory/storage/migrations/M022_entity_aliases_profile.py +0 -86
  603. package/src/superlocalmemory/storage/migrations/M023_mesh_profile_isolation.py +0 -194
  604. package/src/superlocalmemory/storage/migrations/M024_rbac_users_roles.py +0 -87
  605. package/src/superlocalmemory/storage/migrations/M025_perf_indexes.py +0 -90
  606. package/src/superlocalmemory/storage/migrations/M026_rbac_memberships_fk.py +0 -136
  607. package/src/superlocalmemory/storage/migrations/M027_transferable_patterns_profile.py +0 -163
  608. package/src/superlocalmemory/storage/migrations/M028_fact_entity_associations.py +0 -305
  609. package/src/superlocalmemory/storage/migrations/M029_behavioral_history_indexes.py +0 -137
  610. package/src/superlocalmemory/storage/migrations/M030_entity_explorer_indexes.py +0 -93
  611. package/src/superlocalmemory/storage/migrations/M031_dead_letter_operations.py +0 -80
  612. package/src/superlocalmemory/storage/migrations/M032_write_coordinator_admission.py +0 -188
  613. package/src/superlocalmemory/storage/migrations/M033_projection_transactions.py +0 -148
  614. package/src/superlocalmemory/storage/migrations/M034_obligation_integrity.py +0 -58
  615. package/src/superlocalmemory/storage/migrations/M035_erasure_receipts.py +0 -113
  616. package/src/superlocalmemory/storage/migrations/M036_vector_row_map.py +0 -107
  617. package/src/superlocalmemory/storage/migrations/M037_manifest_hmac_version.py +0 -162
  618. package/src/superlocalmemory/storage/migrations/M038_learning_feedback_channel.py +0 -77
  619. package/src/superlocalmemory/storage/migrations/M039_scene_fact_members.py +0 -137
  620. package/src/superlocalmemory/storage/migrations/M040_agent_experience_receipts.py +0 -254
  621. package/src/superlocalmemory/storage/migrations/M041_external_evidence_receipts.py +0 -189
  622. package/src/superlocalmemory/storage/migrations/M042_correction_case_ledger.py +0 -245
  623. package/src/superlocalmemory/storage/migrations/M043_quarantine_display_summaries.py +0 -512
  624. package/src/superlocalmemory/storage/migrations/M044_play_carries_its_own_evidence.py +0 -127
  625. package/src/superlocalmemory/storage/migrations/M045_fact_outcome_score.py +0 -158
  626. package/src/superlocalmemory/storage/migrations/M046_prospective_memory_has_its_own_name.py +0 -620
  627. package/src/superlocalmemory/storage/migrations/M047_fisher_vectors_are_stored_like_every_other_vector.py +0 -306
  628. package/src/superlocalmemory/storage/migrations/M048_upcoming_holds_only_what_is_upcoming.py +0 -229
  629. package/src/superlocalmemory/storage/migrations/M049_a_schema_version_marker_is_one_row.py +0 -201
  630. package/src/superlocalmemory/storage/migrations/M050_execution_learning_v2.py +0 -70
  631. package/src/superlocalmemory/storage/migrations/__init__.py +0 -103
  632. package/src/superlocalmemory/storage/migrations.py +0 -333
  633. package/src/superlocalmemory/storage/models.py +0 -500
  634. package/src/superlocalmemory/storage/projection_outbox.py +0 -346
  635. package/src/superlocalmemory/storage/quantized_store.py +0 -280
  636. package/src/superlocalmemory/storage/read_connection.py +0 -115
  637. package/src/superlocalmemory/storage/retention_policy.py +0 -860
  638. package/src/superlocalmemory/storage/schema.py +0 -1108
  639. package/src/superlocalmemory/storage/schema_code_graph.py +0 -282
  640. package/src/superlocalmemory/storage/schema_v32.py +0 -382
  641. package/src/superlocalmemory/storage/schema_v3410.py +0 -159
  642. package/src/superlocalmemory/storage/schema_v3411.py +0 -149
  643. package/src/superlocalmemory/storage/schema_v343.py +0 -315
  644. package/src/superlocalmemory/storage/schema_v345.py +0 -109
  645. package/src/superlocalmemory/storage/schema_v347.py +0 -140
  646. package/src/superlocalmemory/storage/sqlite_vectors.py +0 -169
  647. package/src/superlocalmemory/storage/v2_migrator.py +0 -466
  648. package/src/superlocalmemory/storage/write_coordinator.py +0 -949
  649. package/src/superlocalmemory/storage/write_lock.py +0 -88
  650. package/src/superlocalmemory/summaries/__init__.py +0 -37
  651. package/src/superlocalmemory/summaries/base.py +0 -267
  652. package/src/superlocalmemory/summaries/daily_reflection.py +0 -340
  653. package/src/superlocalmemory/summaries/non_answer.py +0 -223
  654. package/src/superlocalmemory/summaries/project_work_log.py +0 -440
  655. package/src/superlocalmemory/summaries/session_summary.py +0 -311
  656. package/src/superlocalmemory/trust/__init__.py +0 -0
  657. package/src/superlocalmemory/trust/gate.py +0 -171
  658. package/src/superlocalmemory/trust/provenance.py +0 -124
  659. package/src/superlocalmemory/trust/scorer.py +0 -413
  660. package/src/superlocalmemory/trust/signals.py +0 -153
  661. package/src/superlocalmemory/ui/assets/slm-icon-white.svg +0 -64
  662. package/src/superlocalmemory/ui/assets/slm-icon.svg +0 -36
  663. package/src/superlocalmemory/ui/css/brain.css +0 -409
  664. package/src/superlocalmemory/ui/css/design-system.css +0 -696
  665. package/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -663
  666. package/src/superlocalmemory/ui/css/neural-glass.css +0 -1599
  667. package/src/superlocalmemory/ui/css/od-bridge.css +0 -158
  668. package/src/superlocalmemory/ui/favicon.svg +0 -36
  669. package/src/superlocalmemory/ui/index.html +0 -1638
  670. package/src/superlocalmemory/ui/js/agents.js +0 -192
  671. package/src/superlocalmemory/ui/js/auto-settings.js +0 -624
  672. package/src/superlocalmemory/ui/js/brain.js +0 -1400
  673. package/src/superlocalmemory/ui/js/clusters.js +0 -326
  674. package/src/superlocalmemory/ui/js/compliance.js +0 -307
  675. package/src/superlocalmemory/ui/js/core.js +0 -566
  676. package/src/superlocalmemory/ui/js/dashboard.js +0 -503
  677. package/src/superlocalmemory/ui/js/event-delegation.js +0 -113
  678. package/src/superlocalmemory/ui/js/events.js +0 -178
  679. package/src/superlocalmemory/ui/js/fact-detail.js +0 -142
  680. package/src/superlocalmemory/ui/js/feedback.js +0 -339
  681. package/src/superlocalmemory/ui/js/graph-event-bus.js +0 -83
  682. package/src/superlocalmemory/ui/js/graph-filters.js +0 -220
  683. package/src/superlocalmemory/ui/js/graph-ui.js +0 -214
  684. package/src/superlocalmemory/ui/js/ide-status.js +0 -115
  685. package/src/superlocalmemory/ui/js/init.js +0 -54
  686. package/src/superlocalmemory/ui/js/knowledge-graph.js +0 -945
  687. package/src/superlocalmemory/ui/js/lifecycle.js +0 -387
  688. package/src/superlocalmemory/ui/js/math-health.js +0 -114
  689. package/src/superlocalmemory/ui/js/memories.js +0 -394
  690. package/src/superlocalmemory/ui/js/memory-chat.js +0 -371
  691. package/src/superlocalmemory/ui/js/memory-timeline.js +0 -265
  692. package/src/superlocalmemory/ui/js/modal.js +0 -733
  693. package/src/superlocalmemory/ui/js/ng-entities.js +0 -298
  694. package/src/superlocalmemory/ui/js/ng-health.js +0 -208
  695. package/src/superlocalmemory/ui/js/ng-ingestion.js +0 -203
  696. package/src/superlocalmemory/ui/js/ng-mesh.js +0 -374
  697. package/src/superlocalmemory/ui/js/ng-shell.js +0 -524
  698. package/src/superlocalmemory/ui/js/ng-skills.js +0 -663
  699. package/src/superlocalmemory/ui/js/od-agents.js +0 -588
  700. package/src/superlocalmemory/ui/js/od-auth-gate.js +0 -257
  701. package/src/superlocalmemory/ui/js/od-backup.js +0 -878
  702. package/src/superlocalmemory/ui/js/od-boundedloops.js +0 -324
  703. package/src/superlocalmemory/ui/js/od-brain.js +0 -1095
  704. package/src/superlocalmemory/ui/js/od-compliance-ext.js +0 -301
  705. package/src/superlocalmemory/ui/js/od-components.js +0 -147
  706. package/src/superlocalmemory/ui/js/od-entities.js +0 -622
  707. package/src/superlocalmemory/ui/js/od-graph.js +0 -776
  708. package/src/superlocalmemory/ui/js/od-health.js +0 -579
  709. package/src/superlocalmemory/ui/js/od-mcp.js +0 -508
  710. package/src/superlocalmemory/ui/js/od-memories.js +0 -1499
  711. package/src/superlocalmemory/ui/js/od-mesh.js +0 -645
  712. package/src/superlocalmemory/ui/js/od-operations.js +0 -1268
  713. package/src/superlocalmemory/ui/js/od-ops-health.js +0 -417
  714. package/src/superlocalmemory/ui/js/od-optimize.js +0 -828
  715. package/src/superlocalmemory/ui/js/od-settings.js +0 -1275
  716. package/src/superlocalmemory/ui/js/od-shell.js +0 -819
  717. package/src/superlocalmemory/ui/js/od-skills.js +0 -600
  718. package/src/superlocalmemory/ui/js/od-team.js +0 -265
  719. package/src/superlocalmemory/ui/js/optimize.js +0 -191
  720. package/src/superlocalmemory/ui/js/profiles.js +0 -362
  721. package/src/superlocalmemory/ui/js/quick-actions.js +0 -334
  722. package/src/superlocalmemory/ui/js/recall-lab.js +0 -373
  723. package/src/superlocalmemory/ui/js/search.js +0 -86
  724. package/src/superlocalmemory/ui/js/settings.js +0 -556
  725. package/src/superlocalmemory/ui/js/timeline.js +0 -62
  726. package/src/superlocalmemory/ui/js/trust-dashboard.js +0 -225
  727. package/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -2018
  728. package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  729. package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  730. package/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -7
  731. package/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -6
  732. package/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -2
  733. package/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -2
  734. package/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -2
  735. package/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -8
  736. package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
  737. package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
  738. package/src/superlocalmemory/ui/vendor/sigma.min.js +0 -1
  739. package/src/superlocalmemory/vector/__init__.py +0 -9
  740. package/src/superlocalmemory/vector/lancedb_backend.py +0 -366
@@ -1,1145 +0,0 @@
1
- # Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
2
- # Licensed under AGPL-3.0-or-later - see LICENSE file
3
- # Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
4
-
5
- """SuperLocalMemory V3 — CLI entry point.
6
-
7
- Usage: slm <command> [options]
8
-
9
- Part of Qualixar | Author: Varun Pratap Bhardwaj
10
- """
11
-
12
- from __future__ import annotations
13
-
14
- # CRITICAL: Set BEFORE any torch/transformers import to prevent Metal/MPS
15
- # GPU memory reservation on Apple Silicon. Without this, macOS Activity
16
- # Monitor shows 3-6 GB for what is actually a 40 MB process.
17
- import os as _os
18
- _os.environ.setdefault('PYTORCH_MPS_HIGH_WATERMARK_RATIO', '0.0')
19
- _os.environ.setdefault('PYTORCH_MPS_MEM_LIMIT', '0')
20
- _os.environ.setdefault('PYTORCH_ENABLE_MPS_FALLBACK', '1')
21
- _os.environ.setdefault('TOKENIZERS_PARALLELISM', 'false')
22
- _os.environ.setdefault('TORCH_DEVICE', 'cpu')
23
-
24
- import argparse
25
- import sys
26
-
27
- from superlocalmemory.core.config import (
28
- CANONICAL_LIST_LIMIT,
29
- CANONICAL_RECALL_LIMIT,
30
- )
31
-
32
- _HELP_EPILOG = """\
33
- operating modes:
34
- Mode A Local Guardian — No model-provider call in the core memory path.
35
- Optional integrations, backup, and downloads have separate network
36
- behavior; assess the complete deployment for privacy requirements.
37
-
38
- Mode B Smart Local — Uses a local Ollama LLM for summarization and
39
- enrichment. The Ollama endpoint and enabled integrations determine
40
- the data path. Requires: ollama running with a model pulled.
41
-
42
- Mode C Full Power — Uses a cloud LLM (OpenAI, Anthropic, etc.) for
43
- provider-assisted enrichment and retrieval behavior.
44
-
45
- quick start:
46
- slm setup Interactive first-time setup
47
- slm remember "some fact" Store a memory
48
- slm recall "search query" Semantic search across memories
49
- slm list -n 20 Show 20 most recent memories
50
- slm dashboard Open web dashboard at localhost:8765
51
-
52
- ide integration:
53
- slm mcp Start MCP server (used by IDEs)
54
- slm connect Auto-configure all detected IDEs
55
- slm connect cursor Configure a specific IDE
56
-
57
- examples:
58
- slm remember "Project X uses PostgreSQL 16" --tags "project-x,db"
59
- slm recall "which database does project X use"
60
- slm list -n 50
61
- slm mode a Switch to zero-LLM mode
62
- slm trace "auth flow" Recall with per-channel score breakdown
63
- slm health Check math layer status
64
- slm dashboard --port 9000 Dashboard on custom port
65
- slm recall "query" --json Agent-native JSON output (for scripts, CI/CD)
66
-
67
- documentation:
68
- Website: https://superlocalmemory.com
69
- GitHub: https://github.com/qualixar/superlocalmemory
70
- Paper: https://arxiv.org/abs/2608.08253
71
- """
72
-
73
-
74
- _NO_DAEMON_COMMANDS = {
75
- "setup", "mode", "provider", "connect", "upgrade-hosts", "migrate", "mcp", "warmup", "hooks", "codex",
76
- "config", "evolve", "db",
77
- # v3.4.22 escape hatches — never auto-start the daemon on these.
78
- "disable", "enable", "clear-cache", "reconfigure", "benchmark",
79
- "rotate-token",
80
- "evidence",
81
- # v4.0.2 receipt summary is a direct read-only learning.db query.
82
- "brain",
83
- "diagnostics",
84
- # LLD-06 — agents launched through wrap start the daemon on demand.
85
- "wrap",
86
- # V3.6 Optimize commands that are config read/write only.
87
- "optimize", "cache", "compress", "help-optimize",
88
- # Bounded loops use an in-process engine store, not the daemon.
89
- "loop",
90
- # v3.8.2 super-help is pure text — never touch the daemon.
91
- "help",
92
- # Lifecycle orchestration must run before any global auto-start hook.
93
- "serve", "restart",
94
- # V4.0.6: GDPR CLI accesses the DB directly; no daemon required.
95
- "gdpr",
96
- # V4.0.7: summaries read memory.db directly and are extractive by default,
97
- # so they need neither the daemon nor a language model.
98
- "summary",
99
- }
100
-
101
-
102
- def _command_requires_daemon(args: argparse.Namespace) -> bool:
103
- """Return whether global dispatch should ensure the daemon first.
104
-
105
- All ``serve`` actions and ``restart`` own daemon inspection or mutation;
106
- global dispatch must not race or duplicate those handlers.
107
- """
108
- if args.command in _NO_DAEMON_COMMANDS:
109
- return False
110
- return True
111
-
112
-
113
- def main() -> None:
114
- """Parse CLI arguments and dispatch to command handlers."""
115
- # Fast path: hook invocations bypass argparse entirely (stdlib only, ~30ms)
116
- if len(sys.argv) >= 3 and sys.argv[1] == "hook":
117
- from superlocalmemory.hooks.hook_handlers import handle_hook
118
- handle_hook(sys.argv[2])
119
- return
120
-
121
- # Metadata inspection is activation-free. Package managers, users, and CI
122
- # must be able to inspect a newly installed executable without creating an
123
- # SLM data root, config, version marker, daemon, hooks, or models.
124
- _is_metadata_cmd = (
125
- len(sys.argv) == 1
126
- or any(arg in {"-h", "--help"} for arg in sys.argv[1:])
127
- or (len(sys.argv) == 2 and sys.argv[1] in {"-v", "--version"})
128
- )
129
- _is_connect_dry_run = (
130
- len(sys.argv) >= 2
131
- and sys.argv[1] == "connect"
132
- and "--dry-run" in sys.argv[2:]
133
- )
134
- _is_host_upgrade_preview = (
135
- len(sys.argv) >= 2
136
- and sys.argv[1] == "upgrade-hosts"
137
- and "--apply" not in sys.argv[2:]
138
- )
139
-
140
- # lazy first-run init — runs after hook/mcp fast-paths so stdout
141
- # is never polluted on those paths (CRIT-3, MCP JSON-RPC purity).
142
- # Guarded: any failure must not crash the CLI (AC4).
143
- _is_mcp_cmd = len(sys.argv) >= 2 and sys.argv[1] == "mcp"
144
- if not _is_mcp_cmd and not _is_metadata_cmd and not _is_connect_dry_run and not _is_host_upgrade_preview:
145
- try:
146
- from superlocalmemory.cli._lazy_init import _ensure_initialized
147
- _ensure_initialized()
148
- except Exception:
149
- pass
150
-
151
- from superlocalmemory.cli.json_output import _get_version
152
- _ver = _get_version()
153
-
154
- # v3.6.13 (CRITICAL): the `mcp` stdio transport requires stdout to carry
155
- # ONLY JSON-RPC. The post-upgrade banner + migration notice below must NEVER
156
- # run on that path, or the first post-upgrade `slm mcp` launch pollutes
157
- # stdout and the MCP client (Claude Desktop / Cursor) rejects the stream as
158
- # "not valid JSON". Skip the whole block for `mcp`; the next human `slm`
159
- # command emits the banner (to stderr) and writes the version marker.
160
- _is_mcp_stdio = len(sys.argv) >= 2 and sys.argv[1] == "mcp"
161
-
162
- # One-time post-upgrade banner — silent for fresh installs and
163
- # same-version runs. Guarded against I/O errors internally.
164
- if not _is_mcp_stdio and not _is_metadata_cmd and not _is_connect_dry_run and not _is_host_upgrade_preview:
165
- from superlocalmemory.cli.version_banner import check_and_emit_upgrade_banner
166
- if check_and_emit_upgrade_banner(_ver):
167
- # First post-upgrade invocation: apply the data-dir migration if
168
- # it's safe. When the previous-version daemon is still running
169
- # we defer — the next daemon start picks it up.
170
- try:
171
- import logging as _logging
172
- from superlocalmemory.migrations.v3_4_25_to_v3_4_26 import (
173
- migrate_if_safe as _migrate_if_safe,
174
- )
175
- # route through slm_home() so all 3 env aliases are honoured.
176
- from superlocalmemory.cli._lazy_init import slm_home as _slm_home
177
- _data = _slm_home()
178
- _res = _migrate_if_safe(_data)
179
- if _res.get("status") == "deferred":
180
- print(
181
- " note: data migration deferred — the running SLM "
182
- "daemon will apply it on its next restart.",
183
- file=sys.stderr,
184
- )
185
- except Exception as _mig_exc:
186
- import logging as _logging
187
- _logging.getLogger(__name__).warning(
188
- "v3.4.26 migrate_if_safe failed: %s — run `slm doctor`", _mig_exc,
189
- )
190
- print(
191
- " note: data migration check failed — run `slm doctor` to diagnose.",
192
- file=sys.stderr,
193
- )
194
-
195
- parser = argparse.ArgumentParser(
196
- prog="slm",
197
- description=f"SuperLocalMemory V4 ({_ver}) — AI agent memory with mathematical foundations",
198
- epilog=_HELP_EPILOG,
199
- formatter_class=argparse.RawDescriptionHelpFormatter,
200
- )
201
- parser.add_argument(
202
- "-v", "--version", action="version", version=f"superlocalmemory {_ver}",
203
- )
204
- sub = parser.add_subparsers(dest="command", title="commands")
205
-
206
- # -- Setup & Config ------------------------------------------------
207
- init_p = sub.add_parser("init", help="One-command setup: mode + hooks + IDE + warmup")
208
- init_p.add_argument(
209
- "--force", action="store_true", help="Re-run full setup even if already configured",
210
- )
211
- init_p.add_argument(
212
- "--gate", action="store_true",
213
- help="Enable PreToolUse gate (experimental — blocks tools until session_init)",
214
- )
215
- # non-interactive auto setup (pip post-install, CI, scripts).
216
- init_p.add_argument(
217
- "--auto", action="store_true",
218
- help="Non-interactive setup: mode A + hooks (no TTY required, for CI/scripts)",
219
- )
220
-
221
- setup_p = sub.add_parser("setup", help="Interactive first-time setup wizard")
222
- setup_p.add_argument(
223
- "--auto", action="store_true",
224
- help="Non-interactive mode: use defaults (for CI/scripts)",
225
- )
226
-
227
- mode_p = sub.add_parser("mode", help="Get or set operating mode (a/b/c)")
228
- mode_p.add_argument(
229
- "value", nargs="?", choices=["a", "b", "c", "A", "B", "C"], help="Mode to set",
230
- )
231
- mode_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
232
-
233
- provider_p = sub.add_parser("provider", help="Get or set LLM provider for Mode B/C")
234
- provider_p.add_argument(
235
- "action", nargs="?", choices=["set"], help="Action",
236
- )
237
- provider_p.add_argument(
238
- "provider", nargs="?",
239
- choices=["openai", "anthropic", "azure", "ollama", "openrouter"],
240
- help="Provider to configure; omit to use the interactive selector",
241
- )
242
-
243
- connect_p = sub.add_parser("connect", help="Auto-configure a supported IDE integration")
244
- connect_p.add_argument("ide", nargs="?", help="Specific IDE to configure (e.g. cursor, codex, continue)")
245
- connect_p.add_argument(
246
- "--list", action="store_true", help="List all supported IDEs",
247
- )
248
- connect_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
249
- # declare missing flags so cmd_connect can read them without getattr fallback
250
- connect_p.add_argument(
251
- "--here", action="store_true", default=False,
252
- help="Write config relative to current working directory (project scope)",
253
- )
254
- connect_p.add_argument(
255
- "--cross-platform", action="store_true", dest="cross_platform", default=False,
256
- help="Use LLD-05 cross-platform adapter orchestrator",
257
- )
258
- connect_p.add_argument(
259
- "--disable", metavar="ADAPTER", default=None,
260
- help="Disable a specific cross-platform adapter by name",
261
- )
262
- connect_p.add_argument(
263
- "--profile", metavar="PROFILE", default=None,
264
- help="Inject SLM_MCP_PROFILE env var into the MCP server block (named profile selection)",
265
- )
266
- connect_p.add_argument(
267
- "--dry-run", action="store_true", dest="dry_run", default=False,
268
- help="Show what would be written without making changes",
269
- )
270
- # Workstream C — transport flexibility (3.8.4)
271
- connect_p.add_argument(
272
- "--transport",
273
- choices=["stdio", "http", "http-mcp-remote"],
274
- default="stdio",
275
- dest="transport",
276
- help=(
277
- "MCP transport to write into the IDE config. "
278
- "stdio (default, zero regression) | "
279
- "http (native Streamable-HTTP, requires SLM daemon) | "
280
- "http-mcp-remote (stdio bridge via mcp-remote for stdio-only clients)"
281
- ),
282
- )
283
- connect_p.add_argument(
284
- "--port",
285
- type=int,
286
- default=8765,
287
- dest="daemon_port",
288
- help="SLM daemon port for http/http-mcp-remote transport (default: 8765)",
289
- )
290
- connect_p.add_argument(
291
- "--verify",
292
- action="store_true",
293
- default=False,
294
- dest="verify",
295
- help=(
296
- "After writing the config, probe the daemon health endpoint to confirm "
297
- "the transport is reachable (only meaningful for --transport http)"
298
- ),
299
- )
300
-
301
- upgrade_p = sub.add_parser(
302
- "upgrade-hosts",
303
- help="Preview or explicitly refresh installed SLM host integrations",
304
- )
305
- upgrade_p.add_argument(
306
- "--host", action="append", dest="hosts", default=[],
307
- help="Explicit host to refresh (repeatable; for example: codex, cursor)",
308
- )
309
- upgrade_p.add_argument(
310
- "--all-detected", action="store_true", default=False,
311
- help="Target only hosts that already contain an SLM integration",
312
- )
313
- upgrade_p.add_argument(
314
- "--apply", action="store_true", default=False,
315
- help="Apply the previewed changes; default is read-only preview",
316
- )
317
-
318
- migrate_p = sub.add_parser("migrate", help="Migrate data from V2 to V3 schema")
319
- migrate_p.add_argument(
320
- "--rollback", action="store_true", help="Rollback migration",
321
- )
322
-
323
- # LLD-06 §7.2 — `slm db migrate` wraps LLD-07's additive schema migrations.
324
- db_p = sub.add_parser("db", help="Database maintenance commands (v3.4.22)")
325
- db_sub = db_p.add_subparsers(dest="db_command", title="db subcommands")
326
- db_mig_p = db_sub.add_parser(
327
- "migrate",
328
- help="Apply additive schema migrations (LLD-07)",
329
- )
330
- db_mig_p.add_argument(
331
- "--status", action="store_true",
332
- help="Print migration status from migration_log; no writes",
333
- )
334
- db_mig_p.add_argument(
335
- "--dry-run", action="store_true",
336
- help="Report what would change without applying",
337
- )
338
- db_scale_p = db_sub.add_parser(
339
- "scale",
340
- help="Safely stage and promote optional CozoDB/LanceDB projections",
341
- )
342
- db_scale_p.add_argument(
343
- "scale_action",
344
- choices=("status", "adopt", "prepare", "verify", "promote", "rollback"),
345
- help="Lifecycle action. Adopt confirms a detected legacy projection; prepare and verify never mutate active paths.",
346
- )
347
- db_scale_p.add_argument("--stage-id", help="Stage identifier required by verify/promote")
348
- db_scale_p.add_argument("--backup-id", help="Backup identifier required by rollback")
349
-
350
- db_regraph_p = db_sub.add_parser(
351
- "regraph",
352
- help="Re-derive the graph copy of your memories from the store",
353
- )
354
- db_regraph_p.add_argument(
355
- "--check", action="store_true",
356
- help="Report how far the graph copy has drifted; change nothing",
357
- )
358
- db_regraph_p.add_argument(
359
- "--profile", default="",
360
- help="Workspace to re-derive. Default: all of them",
361
- )
362
-
363
- db_reembed_p = db_sub.add_parser(
364
- "reembed",
365
- help="Backfill NULL embeddings (facts never embedded)",
366
- )
367
- db_reembed_p.add_argument(
368
- "--missing-only",
369
- action="store_true",
370
- default=True,
371
- dest="missing_only",
372
- help="Only embed facts with NULL embedding (default and only mode)",
373
- )
374
- db_reembed_p.add_argument(
375
- "--all-profiles",
376
- action="store_true",
377
- default=False,
378
- dest="all_profiles",
379
- help="Process all profiles (default: active profile only)",
380
- )
381
- db_reembed_p.add_argument(
382
- "--limit",
383
- type=int,
384
- default=None,
385
- metavar="N",
386
- help="Maximum facts to embed per run (default: no limit)",
387
- )
388
- db_reembed_p.add_argument(
389
- "--json",
390
- action="store_true",
391
- help="Output structured JSON",
392
- )
393
-
394
- # -- Mesh inspection (v3.7.9, M-03) --------------------------------
395
- mesh_p = sub.add_parser("mesh", help="Inspect the local agent mesh (status/peers)")
396
- mesh_p.add_argument(
397
- "mesh_action",
398
- choices=("status", "peers"),
399
- help="status: broker health + stats; peers: active peer sessions",
400
- )
401
-
402
- # -- Memory Operations ---------------------------------------------
403
- remember_p = sub.add_parser("remember", help="Store a memory (extracts facts, builds graph)")
404
- remember_p.add_argument("content", help="Content to remember")
405
- remember_p.add_argument("--tags", default="", help="Comma-separated tags")
406
- remember_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
407
- remember_p.add_argument(
408
- "--sync", dest="sync_mode", action="store_true",
409
- help="Wait for completion (default: async background processing)",
410
- )
411
- remember_p.add_argument(
412
- "--scope", default=None, choices=("personal", "shared", "global"),
413
- help="Memory scope: personal, shared, or global. Unset uses the "
414
- "configured default_scope (personal). Shared memory is opt-in.",
415
- )
416
- remember_p.add_argument(
417
- "--shared-with", default=None,
418
- help="Comma-separated profile IDs for shared scope",
419
- )
420
-
421
- # v3.6.12 (parity-3): `search` is an alias of `recall` so the CLI has the
422
- # same search verb the MCP exposes (handlers dict maps both to cmd_recall).
423
- recall_p = sub.add_parser("recall", aliases=["search"], help="Multi-channel memory retrieval")
424
- recall_p.add_argument("query", help="Search query")
425
- recall_p.add_argument(
426
- "--limit", type=int, default=CANONICAL_RECALL_LIMIT,
427
- help=f"Max results (default {CANONICAL_RECALL_LIMIT})",
428
- )
429
- recall_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
430
- recall_p.add_argument(
431
- "--window", default="",
432
- help="Restrict results to an event-time range: a relative span "
433
- "(24h, 7d, 30d, 1y) or an explicit range (2026-07-01..2026-07-31). "
434
- "Default: no time filter.",
435
- )
436
- recall_p.add_argument(
437
- "--as-of", dest="as_of", default="",
438
- help="Point-in-time recall: an ISO-8601 timestamp "
439
- "(2026-01-01T00:00:00+00:00) that pins retrieval to a temporal "
440
- "snapshot. Default: current-state recall.",
441
- )
442
- recall_p.add_argument(
443
- "--known-as-of", dest="known_as_of", default="",
444
- help="Strict transaction-time boundary: return only facts SLM knew by this ISO-8601 time.",
445
- )
446
- recall_p.add_argument(
447
- "--valid-at", dest="valid_at", default="",
448
- help="Strict event-time boundary: return only facts valid at this ISO-8601 time.",
449
- )
450
- recall_p.add_argument(
451
- "--include-unknown", action="store_true",
452
- help="Include pre-4.0.2 facts with unknown temporal provenance in strict time-travel.",
453
- )
454
- recall_p.add_argument(
455
- "--fast", action="store_true",
456
- help="Force-skip the internal agentic verification round (all six retrieval "
457
- "channels + reranker still run). This is already the default (client-driven "
458
- "agentic): SLM returns fast local results + confidence signals and lets the "
459
- "calling LLM re-query on low confidence. Pass --fast to guarantee the fast "
460
- "path even where the server is configured for internal agentic.",
461
- )
462
- # v3.6.15: shared memory is opt-in. Unset (None) → resolve the configured
463
- # default (recall_include_global/shared, both False by default). Explicit
464
- # flags override per-call. default=None on BOTH members of each pair so the
465
- # store_false's implicit default=True can't sneak back in.
466
- recall_p.add_argument(
467
- "--include-global", dest="include_global", action="store_true", default=None,
468
- help="Include global-scope facts in retrieval (opt-in; default off)",
469
- )
470
- recall_p.add_argument(
471
- "--no-global", dest="include_global", action="store_false", default=None,
472
- help="Exclude global-scope facts from retrieval",
473
- )
474
- recall_p.add_argument(
475
- "--include-shared", dest="include_shared", action="store_true", default=None,
476
- help="Include facts shared with this profile (opt-in; default off)",
477
- )
478
- recall_p.add_argument(
479
- "--no-shared", dest="include_shared", action="store_false", default=None,
480
- help="Exclude shared-scope facts from retrieval",
481
- )
482
- # v3.8.2 client-driven agentic: agents parsing --json should ACT on the
483
- # confidence signals rather than expect a server-side LLM to reformulate.
484
- recall_p.epilog = (
485
- "AGENT GUIDANCE (--json): recall returns fast local results plus "
486
- "confidence signals. If 'no_confident_match' is true or "
487
- "'answer_confidence' is low, rewrite the query into 1-3 more specific "
488
- "sub-queries and call recall again before concluding nothing was found. "
489
- "Confident match -> use it directly."
490
- )
491
-
492
- forget_p = sub.add_parser("forget", help="Delete memories matching a query (fuzzy)")
493
- forget_p.add_argument("query", nargs="?", default=None, help="Query to match for deletion. Optional with --dry-run (previews all memories).")
494
- forget_p.add_argument("--dry-run", action="store_true", default=False, help="Preview matches without deleting. With no query, previews every memory.")
495
- forget_p.add_argument("--yes", "-y", action="store_true", help="Skip confirmation prompt")
496
- forget_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
497
-
498
- delete_p = sub.add_parser("delete", help="Delete a specific memory by ID (precise)")
499
- delete_p.add_argument("fact_id", help="Exact fact ID to delete")
500
- delete_p.add_argument("--yes", "-y", action="store_true", help="Skip confirmation")
501
- delete_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
502
-
503
- update_p = sub.add_parser("update", help="Edit the content of a specific memory by ID")
504
- update_p.add_argument("fact_id", help="Exact fact ID to update")
505
- update_p.add_argument("content", help="New content for the memory")
506
- update_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
507
-
508
- correction_p = sub.add_parser(
509
- "review-correction", help="Apply, reject, or roll back a reviewed correction case"
510
- )
511
- correction_p.add_argument("case_id", help="Correction case ID returned by slm update")
512
- correction_p.add_argument("action", choices=("apply", "reject", "rollback"))
513
- correction_p.add_argument("expected_version", type=int, help="Current case version (CAS guard)")
514
- correction_p.add_argument(
515
- "--event-valid-until",
516
- help="Optional reviewer-approved RFC3339 event-time boundary (apply only)",
517
- )
518
- correction_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
519
-
520
- list_p = sub.add_parser("list", help="List recent memories chronologically (shows IDs for delete/update)")
521
- list_p.add_argument(
522
- "--limit", "-n", type=int, default=CANONICAL_LIST_LIMIT,
523
- help=f"Number of entries (default {CANONICAL_LIST_LIMIT})",
524
- )
525
- list_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
526
-
527
- # -- Diagnostics ---------------------------------------------------
528
- status_p = sub.add_parser("status", help="System status (mode, profile, DB size)")
529
- status_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
530
- status_p.add_argument(
531
- "--verbose", "-v", action="store_true",
532
- help="Show extended status: migration log, daemon port, disabled marker, last version",
533
- )
534
-
535
- health_p = sub.add_parser("health", help="Math layer health (scoring, consistency, and lifecycle layers)")
536
- health_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
537
-
538
- trace_p = sub.add_parser("trace", help="Recall with per-channel score breakdown")
539
- trace_p.add_argument("query", help="Search query")
540
- trace_p.add_argument("--limit", type=int, default=10, help="Max results (default 10)")
541
- trace_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
542
-
543
- # -- Diagnostics (continued) ----------------------------------------
544
- doctor_p = sub.add_parser("doctor", help="Pre-flight check: deps, embedding worker, connectivity")
545
- doctor_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
546
- doctor_p.add_argument(
547
- "--quick", action="store_true",
548
- help="Run only the fast checks (deps + config); skip daemon/embedding probes",
549
- )
550
- doctor_p.add_argument(
551
- "--deep", action="store_true",
552
- help="Read every database page (PRAGMA integrity_check) instead of the "
553
- "structural check; slow on a large store",
554
- )
555
- doctor_p.add_argument(
556
- "--fix", action="store_true",
557
- help="Auto-repair fixable components (re-download missing models, "
558
- "install sqlite-vec) before checking, then report",
559
- )
560
-
561
- # v3.8.2 super-help — grouped overview of every command + focused topics.
562
- help_p = sub.add_parser(
563
- "help",
564
- help="Grouped overview of all commands + topics (modes, config, self-heal)",
565
- )
566
- help_p.add_argument(
567
- "topic", nargs="?",
568
- help="Optional topic: modes | config | self-heal",
569
- )
570
-
571
- # LLD-06 §6.6 — `slm wrap <agent> [args...]` activates the Optimize
572
- # proxy for a specific agent. Supported agents: claude, claude-settings,
573
- # codex, aider, cline, generic, etc. See optimize.adapters._agent_registry.
574
- wrap_p = sub.add_parser(
575
- "wrap",
576
- help="Activate Optimize proxy for a specific agent (claude, codex, aider, ...)",
577
- )
578
- wrap_p.add_argument(
579
- "--list", action="store_true",
580
- help="List all registered agents and their mechanisms",
581
- )
582
- wrap_p.add_argument(
583
- "--persistent", action="store_true",
584
- help="Persist env vars to the agent's config file (~/.claude/settings.json) instead of launching",
585
- )
586
- wrap_p.add_argument(
587
- "--dry-run", action="store_true",
588
- help="Print the action that would be taken without executing it",
589
- )
590
- wrap_p.add_argument("agent", nargs="?", default=None, help="Agent key (run `slm wrap --list` to see all)")
591
- wrap_p.add_argument("agent_args", nargs=argparse.REMAINDER, help="Args passed to the agent binary")
592
-
593
- # -- Services ------------------------------------------------------
594
- sub.add_parser("mcp", help="Start MCP server (stdio transport for IDE integration)")
595
- sub.add_parser("warmup", help="Pre-download embedding model (~500MB, one-time)")
596
-
597
- dashboard_p = sub.add_parser("dashboard", help="Open web dashboard")
598
- dashboard_p.add_argument(
599
- "--port", type=int, default=8765, help="Port (default 8765)",
600
- )
601
-
602
- # V3.3.21: Daemon serve mode
603
- serve_p = sub.add_parser("serve", help="Start/stop daemon for instant CLI response (~600MB RAM)")
604
- serve_p.add_argument(
605
- "action", nargs="?", default="start",
606
- choices=["start", "stop", "status", "install", "uninstall"],
607
- help="start (default), stop, status, install (OS service), uninstall",
608
- )
609
-
610
- # V3.4.9: Full system restart with health verification
611
- restart_p = sub.add_parser(
612
- "restart",
613
- help="Nuclear restart: kill orphans, clean state, start fresh, verify health",
614
- )
615
- restart_p.add_argument(
616
- "--dashboard", action="store_true",
617
- help="Open dashboard after restart",
618
- )
619
- restart_p.add_argument("--json", action="store_true", help="Output structured JSON")
620
-
621
- # -- Profiles ------------------------------------------------------
622
- profile_p = sub.add_parser("profile", help="Profile management (list/switch/create)")
623
- profile_p.add_argument(
624
- "action", choices=["list", "switch", "create"], help="Action",
625
- )
626
- profile_p.add_argument("name", nargs="?", help="Profile name")
627
- profile_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
628
-
629
- # -- Active Memory (V3.1) ------------------------------------------
630
- hooks_p = sub.add_parser("hooks", help="Manage additive Claude Code or Codex hooks")
631
- hooks_p.add_argument(
632
- "action", nargs="?", default="status",
633
- choices=["install", "remove", "status"], help="Action (default: status)",
634
- )
635
- hooks_p.add_argument(
636
- "--gate", action="store_true",
637
- help="Enable PreToolUse gate (experimental — blocks tools until session_init)",
638
- )
639
- hooks_p.add_argument(
640
- "--agent", choices=["claude", "codex"], default="claude",
641
- help="Target agent (default: claude)",
642
- )
643
- hooks_p.add_argument(
644
- "--dry-run", action="store_true",
645
- help="Show whether the additive change is valid without writing files",
646
- )
647
-
648
- codex_p = sub.add_parser("codex", help="Install or inspect explicit Codex SLM add-ons")
649
- codex_p.add_argument("action", nargs="?", default="status", choices=["install", "remove", "status"])
650
- codex_p.add_argument("--dry-run", action="store_true", help="Validate without writing user files")
651
-
652
- ctx_p = sub.add_parser("session-context", help="Print session context (for hooks)")
653
- ctx_p.add_argument("query", nargs="?", default="", help="Optional context query")
654
- ctx_p.add_argument(
655
- "--max-age-days", type=int, default=30,
656
- help="Suppress memories older than N days unless score ≥ 0.7 (default: 30). "
657
- "Set 0 to disable age filter.",
658
- )
659
- ctx_p.add_argument(
660
- "--full", action="store_true",
661
- help="Use full engine path (slower, requires Ollama). Default is fast SQLite path.",
662
- )
663
- ctx_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
664
-
665
- # #49: local session open/close (for hooks; no model roundtrip)
666
- session_p = sub.add_parser(
667
- "session", help="Open/close a session locally (for hooks; no model roundtrip)"
668
- )
669
- session_sub = session_p.add_subparsers(dest="session_command", title="session actions")
670
- sopen_p = session_sub.add_parser("open", help="Warm session context")
671
- sopen_p.add_argument("--project-path", default="", help="Project path to derive the warm query")
672
- sopen_p.add_argument("--query", default="", help="Explicit warm query")
673
- sopen_p.add_argument("--max-results", type=int, default=10, help="Max memories to warm (default 10)")
674
- sclose_p = session_sub.add_parser(
675
- "close", help="Close session, create temporal summaries"
676
- )
677
- sclose_p.add_argument(
678
- "--session-id", default="", help="Session to close (default: most recent)"
679
- )
680
-
681
- obs_p = sub.add_parser("observe", help="Auto-capture content (pipe or argument)")
682
- obs_p.add_argument("content", nargs="?", default="", help="Content to evaluate")
683
-
684
- brain_p = sub.add_parser(
685
- "brain", help="Show the local, profile-scoped Living Brain evidence summary"
686
- )
687
- brain_p.add_argument(
688
- "action", nargs="?", default="status", choices=["status"],
689
- help="Read-only Brain action (default: status)",
690
- )
691
- brain_p.add_argument("--json", action="store_true", help="Output structured JSON")
692
-
693
- # -- V3.3 Commands -------------------------------------------------
694
- decay_p = sub.add_parser("decay", help="Run Ebbinghaus forgetting decay cycle")
695
- decay_p.add_argument(
696
- "--dry-run", action="store_true", default=True,
697
- help="Preview without applying (default)",
698
- )
699
- decay_p.add_argument(
700
- "--execute", dest="dry_run", action="store_false",
701
- help="Apply zone transitions",
702
- )
703
- decay_p.add_argument("--profile", default="", help="Target profile")
704
- decay_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
705
-
706
- quantize_p = sub.add_parser("quantize", help="Run EAP embedding quantization cycle")
707
- quantize_p.add_argument(
708
- "--dry-run", action="store_true", default=True,
709
- help="Preview without applying (default)",
710
- )
711
- quantize_p.add_argument(
712
- "--execute", dest="dry_run", action="store_false",
713
- help="Apply precision changes",
714
- )
715
- quantize_p.add_argument("--profile", default="", help="Target profile")
716
- quantize_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
717
-
718
- consolidate_p = sub.add_parser("consolidate", help="Run memory consolidation pipeline")
719
- consolidate_p.add_argument(
720
- "--cognitive", action="store_true",
721
- help="Run CCQ cognitive consolidation",
722
- )
723
- consolidate_p.add_argument(
724
- "--dry-run", action="store_true", default=False,
725
- help="Preview without applying",
726
- )
727
- consolidate_p.add_argument("--profile", default="", help="Target profile")
728
- consolidate_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
729
-
730
- sp_p = sub.add_parser("soft-prompts", help="List active soft prompts (auto-learned patterns)")
731
- sp_p.add_argument("--profile", default="", help="Target profile")
732
- sp_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
733
-
734
- reap_p = sub.add_parser("reap", help="Find and kill orphaned SLM processes")
735
- reap_p.add_argument(
736
- "--force", action="store_true",
737
- help="Kill orphans (default: dry run only)",
738
- )
739
- reap_p.add_argument(
740
- "--all", action="store_true", dest="all",
741
- help="Kill ALL slm mcp processes regardless of orphan status (use after IDE switch)",
742
- )
743
- reap_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
744
-
745
- # V3.4.3: Ingestion adapters
746
- adapters_p = sub.add_parser(
747
- "adapters",
748
- help="Manage ingestion adapters (Gmail, Calendar, Transcript)",
749
- )
750
- adapters_p.add_argument(
751
- "rest", nargs="*", default=[],
752
- help="Subcommand: list, enable, disable, start, stop, status [name]",
753
- )
754
-
755
- # V3.4.8: External observation ingestion
756
- ingest_p = sub.add_parser(
757
- "ingest",
758
- help="Import external observations (ECC, JSONL) into SLM learning",
759
- )
760
- ingest_p.add_argument(
761
- "--source", default="ecc",
762
- choices=["ecc", "jsonl"],
763
- help="Source type: ecc (Claude Code sessions), jsonl (generic)",
764
- )
765
- ingest_p.add_argument(
766
- "--file", default="",
767
- help="Specific file to ingest (auto-discovers if not set)",
768
- )
769
- ingest_p.add_argument(
770
- "--dry-run", action="store_true", default=False,
771
- help="Preview without writing",
772
- )
773
- ingest_p.add_argument("--json", action="store_true", help="Output structured JSON")
774
-
775
- # V3.4.11: Config get/set (dot-notation)
776
- config_p = sub.add_parser(
777
- "config",
778
- help="Get or set config values (e.g. slm config set evolution.enabled true)",
779
- )
780
- config_p.add_argument(
781
- "action", choices=["get", "set"], help="Action: get or set",
782
- )
783
- config_p.add_argument("key", help="Config key in dot notation (e.g. evolution.enabled)")
784
- config_p.add_argument("value", nargs="?", default=None, help="Value to set (for 'set' action)")
785
- config_p.add_argument("--json", action="store_true", help="Output structured JSON")
786
-
787
- # V3.4.11: Skill evolution (called from Stop hook, fire-and-forget)
788
- evolve_p = sub.add_parser(
789
- "evolve",
790
- help="Run post-session skill evolution (internal, called by Stop hook)",
791
- )
792
- evolve_p.add_argument("--session", default="", help="Session ID to process")
793
- evolve_p.add_argument("--profile", default="default", help="Profile ID")
794
-
795
- # v3.4.22 — MASTER-PLAN §8 escape hatches (Stage 8 SB-5).
796
- disable_p = sub.add_parser(
797
- "disable",
798
- help="Disable SLM globally (writes ~/.superlocalmemory/.disabled, stops daemon)",
799
- )
800
- disable_p.add_argument(
801
- "--reason", default="",
802
- help="Optional reason string written into the marker for audit",
803
- )
804
-
805
- sub.add_parser(
806
- "enable",
807
- help="Remove the .disabled marker; print command to start daemon",
808
- )
809
-
810
- sub.add_parser(
811
- "clear-cache",
812
- help="Wipe regenerable caches (memory.db + learning.db are preserved)",
813
- )
814
-
815
- recon_p = sub.add_parser(
816
- "reconfigure",
817
- help="Re-run the interactive postinstall (changes profile/knobs)",
818
- )
819
- recon_p.add_argument(
820
- "extras", nargs="*", default=[],
821
- help="Extra flags passed to postinstall-interactive.js",
822
- )
823
-
824
- bench_p = sub.add_parser(
825
- "benchmark",
826
- help="Run evo-memory benchmark against an isolated tmp DB (never touches user data)",
827
- )
828
- bench_p.add_argument(
829
- "--json", action="store_true",
830
- help="Emit JSON result instead of human-readable summary",
831
- )
832
-
833
- evidence_p = sub.add_parser(
834
- "evidence",
835
- help="Export, verify, import, or rebuild versioned memory evidence",
836
- )
837
- evidence_sub = evidence_p.add_subparsers(
838
- dest="evidence_command", title="evidence subcommands",
839
- )
840
- evidence_export = evidence_sub.add_parser(
841
- "export", help="Write a deterministic checksummed JSONL bundle",
842
- )
843
- evidence_export.add_argument("destination")
844
- evidence_export.add_argument("--profile", default="default")
845
- evidence_export.add_argument("--json", action="store_true")
846
- evidence_verify = evidence_sub.add_parser(
847
- "verify", help="Verify checksums and source reconciliation",
848
- )
849
- evidence_verify.add_argument("bundle")
850
- evidence_verify.add_argument("--json", action="store_true")
851
- evidence_import = evidence_sub.add_parser(
852
- "import", help="Import relational truth (dry-run unless --execute)",
853
- )
854
- evidence_import.add_argument("bundle")
855
- evidence_import.add_argument("--profile", default="default")
856
- evidence_import.add_argument("--replace", action="store_true")
857
- evidence_import.add_argument("--rollback-dir", default=None)
858
- evidence_import.add_argument("--execute", action="store_true")
859
- evidence_import.add_argument("--json", action="store_true")
860
- evidence_rebuild = evidence_sub.add_parser(
861
- "rebuild", help="Rebuild derived lexical state (dry-run unless --execute)",
862
- )
863
- evidence_rebuild.add_argument("--profile", default="default")
864
- evidence_rebuild.add_argument("--execute", action="store_true")
865
- evidence_rebuild.add_argument("--json", action="store_true")
866
-
867
- diagnostics_p = sub.add_parser(
868
- "diagnostics",
869
- help="Export bounded local operational aggregates (manual only)",
870
- )
871
- diagnostics_sub = diagnostics_p.add_subparsers(
872
- dest="diagnostics_command", title="diagnostics subcommands",
873
- )
874
- diagnostics_export = diagnostics_sub.add_parser(
875
- "export", help="Write a deterministic content-free JSON report",
876
- )
877
- diagnostics_export.add_argument("destination")
878
- diagnostics_reliability = diagnostics_sub.add_parser(
879
- "reliability",
880
- help=(
881
- "Ask whether wired mechanisms are actually effective: has each "
882
- "Bayesian learner moved off its prior, and has each schema-guarded "
883
- "path ever executed against this store"
884
- ),
885
- )
886
- diagnostics_reliability.add_argument(
887
- "--min-observations", type=int, default=None,
888
- help="Observation floor below which an unmoved posterior is not reported",
889
- )
890
- diagnostics_export.add_argument(
891
- "--json", action="store_true", help="Output structured JSON",
892
- )
893
-
894
- # S-M07: install-token rotation.
895
- sub.add_parser(
896
- "rotate-token",
897
- help="Rotate the SLM install token (run `slm restart` afterwards)",
898
- )
899
-
900
- # ---- SLM v3.6 Optimize subcommands (additive, never modify above) ----
901
-
902
- # slm optimize status|on|off|savings
903
- opt_p = sub.add_parser("optimize", help="Optimize module control (cache + compress)")
904
- opt_sub = opt_p.add_subparsers(dest="opt_command", title="optimize subcommands")
905
- opt_sub.add_parser("status", help="Show Optimize status")
906
- opt_sub.add_parser("on", help="Enable cache + compress")
907
- opt_sub.add_parser("off", help="Disable cache + compress")
908
- savings_p = opt_sub.add_parser("savings", help="Token/cost savings report")
909
- savings_p.add_argument("--since", type=int, default=7, help="Days to look back (default 7)")
910
- savings_p.add_argument("--provider", default=None,
911
- choices=["anthropic", "openai", "gemini"],
912
- help="Filter by provider")
913
- for _sp in opt_sub.choices.values():
914
- if not any(a.option_strings == ["--json"] for a in _sp._actions):
915
- _sp.add_argument("--json", action="store_true",
916
- help="Output structured JSON (agent-native)")
917
-
918
- # slm cache status|clear|invalidate|ttl|semantic
919
- cache_p = sub.add_parser("cache", help="Cache control (TTL, clear, invalidate, semantic)")
920
- cache_sub = cache_p.add_subparsers(dest="cache_command", title="cache subcommands")
921
- cache_sub.add_parser("status", help="Show cache state")
922
- cache_sub.add_parser("clear", help="Delete all entries for tenant")
923
- cache_inv_p = cache_sub.add_parser("invalidate", help="Delete entries by tag")
924
- cache_inv_p.add_argument("--tag", required=True, help="Tag string to match")
925
- cache_ttl_p = cache_sub.add_parser("ttl", help="Set cache TTL in seconds")
926
- cache_ttl_p.add_argument("--set", dest="ttl_set", type=int, default=None,
927
- help="Exact-cache TTL (seconds, >0)")
928
- cache_ttl_p.add_argument("--semantic", dest="ttl_semantic", type=int, default=None,
929
- help="Semantic-cache TTL (seconds, >0)")
930
- cache_sem_p = cache_sub.add_parser("semantic", help="Enable/disable semantic cache")
931
- cache_sem_p.add_argument("semantic_value", choices=["on", "off"], help="on or off")
932
- for _sp in cache_sub.choices.values():
933
- if not any(a.option_strings == ["--json"] for a in _sp._actions):
934
- _sp.add_argument("--json", action="store_true",
935
- help="Output structured JSON (agent-native)")
936
- if not any(a.option_strings == ["--tenant"] for a in _sp._actions):
937
- _sp.add_argument("--tenant", default="default", help="Tenant ID (default: 'default')")
938
-
939
- # slm compress status|mode|code|prose|ccr
940
- compress_p = sub.add_parser("compress", help="Compression control (mode, code, prose, CCR)")
941
- comp_sub = compress_p.add_subparsers(dest="compress_command", title="compress subcommands")
942
- comp_sub.add_parser("status", help="Show compression state")
943
- comp_mode_p = comp_sub.add_parser("mode", help="Set compression mode")
944
- comp_mode_p.add_argument("mode_value", choices=["safe", "aggressive"],
945
- help="safe (default) or aggressive")
946
- comp_code_p = comp_sub.add_parser("code", help="Enable/disable code compression")
947
- comp_code_p.add_argument("code_value", choices=["on", "off"], help="on or off")
948
- comp_prose_p = comp_sub.add_parser("prose", help="Enable/disable prose compression")
949
- comp_prose_p.add_argument("prose_value", choices=["on", "off"], help="on or off")
950
- comp_ccr_p = comp_sub.add_parser("ccr", help="Enable/disable CCR")
951
- comp_ccr_p.add_argument("ccr_value", choices=["on", "off"], help="on or off")
952
- comp_align_p = comp_sub.add_parser("align", help="Enable/disable alignment compression")
953
- comp_align_p.add_argument("align_value", choices=["on", "off"], help="on or off")
954
- for _sp in comp_sub.choices.values():
955
- if not any(a.option_strings == ["--json"] for a in _sp._actions):
956
- _sp.add_argument("--json", action="store_true",
957
- help="Output structured JSON (agent-native)")
958
-
959
- # slm proxy
960
- proxy_p = sub.add_parser("proxy", help="Start SLM optimization proxy (Anthropic + OpenAI)")
961
- proxy_p.add_argument("--port", type=int, default=8765, help="Port (default: 8765)")
962
- proxy_p.add_argument("--provider", default="anthropic",
963
- choices=["anthropic", "openai", "gemini"],
964
- help="Target provider (default: anthropic)")
965
- proxy_p.add_argument("--no-compress", action="store_true", dest="no_compress",
966
- help="Disable compression for this session")
967
- proxy_p.add_argument("--semantic", action="store_true",
968
- help="Enable semantic cache for this session")
969
- proxy_p.add_argument("--json", action="store_true",
970
- help="Output structured JSON (agent-native)")
971
-
972
- # slm help-optimize
973
- help_opt_p = sub.add_parser(
974
- "help-optimize",
975
- help="Full Optimize reference: subcommands + agent recipes + safety notes",
976
- )
977
- help_opt_p.add_argument(
978
- "topic", nargs="?", default=None,
979
- choices=["cache", "compress", "optimize", "proxy", "agents", "safety"],
980
- help="Topic to display (default: all)",
981
- )
982
- help_opt_p.add_argument(
983
- "--no-pager", action="store_true", dest="no_pager", default=False,
984
- help="Print to stdout instead of piping through a pager",
985
- )
986
-
987
- # ---- end SLM v3.6 Optimize subcommands ----
988
-
989
- # slm loop demo|history|show — bounded, gate-verified agent loops (v3.8.0)
990
- loop_p = sub.add_parser(
991
- "loop",
992
- help="Bounded loops: gate-verified agent loops with an SLM-backed ledger",
993
- )
994
- loop_sub = loop_p.add_subparsers(dest="loop_command", title="loop subcommands")
995
- loop_demo_p = loop_sub.add_parser(
996
- "demo", help="Run the keyless convergence demo (proves engine + ledger)")
997
- loop_demo_p.add_argument(
998
- "--iterations", type=int, default=10, help="Max iterations (default: 10)")
999
- loop_hist_p = loop_sub.add_parser("history", help="List recorded loop runs")
1000
- loop_hist_p.add_argument(
1001
- "--name", default=None, help="Loop name (default: convergence-demo)")
1002
- loop_show_p = loop_sub.add_parser("show", help="Show every lap of one run")
1003
- loop_show_p.add_argument("run_id", help="Run id (from history)")
1004
- for _sp in loop_sub.choices.values():
1005
- _sp.add_argument("--json", action="store_true",
1006
- help="Output structured JSON (agent-native)")
1007
-
1008
- # V4.0.7: the readable summary layer from issue #113. The generators shipped
1009
- # in 4.0.6 with no caller; this is the surface that makes them reachable.
1010
- from superlocalmemory.cli.summary_cmd import register_summary_parser
1011
-
1012
- register_summary_parser(sub)
1013
-
1014
- # V4.0.6: GDPR subject-rights CLI (Art.15/17/20)
1015
- gdpr_p = sub.add_parser(
1016
- "gdpr",
1017
- help="GDPR subject rights: status, export (Art.15/20), erase (Art.17), verify",
1018
- )
1019
- gdpr_sub = gdpr_p.add_subparsers(dest="gdpr_command", title="gdpr subcommands")
1020
-
1021
- gdpr_status_p = gdpr_sub.add_parser(
1022
- "status",
1023
- help="Compliance posture: receipts, audit events, known gaps (read-only)",
1024
- )
1025
- gdpr_status_p.add_argument(
1026
- "--profile", default=None, metavar="PROFILE",
1027
- help="Scope to a specific profile (default: report all)",
1028
- )
1029
- gdpr_status_p.add_argument(
1030
- "--json", action="store_true", help="Output structured JSON (agent-native)",
1031
- )
1032
-
1033
- gdpr_export_p = gdpr_sub.add_parser(
1034
- "export",
1035
- help="Art.15/20 subject access / data portability export",
1036
- )
1037
- gdpr_export_p.add_argument(
1038
- "--profile", required=True, metavar="PROFILE",
1039
- help="Profile to export (required)",
1040
- )
1041
- gdpr_export_p.add_argument(
1042
- "--output", default=None, metavar="FILE",
1043
- help="Write export JSON to FILE (default: stdout)",
1044
- )
1045
- gdpr_export_p.add_argument(
1046
- "--json", action="store_true", help="Output structured JSON envelope",
1047
- )
1048
-
1049
- gdpr_erase_p = gdpr_sub.add_parser(
1050
- "erase",
1051
- help=(
1052
- "Art.17 right to erasure — IRREVERSIBLE. "
1053
- "Requires --profile PROFILE AND --yes."
1054
- ),
1055
- )
1056
- gdpr_erase_p.add_argument(
1057
- "--profile", default=None, metavar="PROFILE",
1058
- help="Profile to erase (required for live erasure)",
1059
- )
1060
- gdpr_erase_p.add_argument(
1061
- "--yes", action="store_true",
1062
- help="Confirm irreversible erasure (required together with --profile)",
1063
- )
1064
- gdpr_erase_p.add_argument(
1065
- "--dry-run", action="store_true", dest="dry_run",
1066
- help="Preview what would be erased without deleting anything",
1067
- )
1068
- gdpr_erase_p.add_argument(
1069
- "--json", action="store_true", help="Output structured JSON",
1070
- )
1071
-
1072
- gdpr_verify_p = gdpr_sub.add_parser(
1073
- "verify",
1074
- help="Verify HMAC integrity of an erasure receipt (exit 0=ok, 1=tampered, 2=not-found)",
1075
- )
1076
- gdpr_verify_p.add_argument(
1077
- "--receipt-id", dest="receipt_id", default=None, metavar="ID",
1078
- help="Erasure receipt ID to verify",
1079
- )
1080
- gdpr_verify_p.add_argument(
1081
- "--profile", default=None, metavar="PROFILE",
1082
- help="Scope receipt lookup to a specific profile",
1083
- )
1084
- gdpr_verify_p.add_argument(
1085
- "--json", action="store_true", help="Output structured JSON",
1086
- )
1087
-
1088
- # Operational recovery & admin remediation
1089
- ops_p = sub.add_parser(
1090
- "ops",
1091
- help="Operational recovery: list failures, resolve stuck ops, check status",
1092
- )
1093
- ops_sub = ops_p.add_subparsers(dest="ops_command", title="ops subcommands")
1094
- ops_list_p = ops_sub.add_parser(
1095
- "list", help="List all failed, stuck, or degraded operations (admin)")
1096
- ops_list_p.add_argument(
1097
- "--profile", default=None, metavar="PROFILE",
1098
- help="Filter results to a specific profile (default: all)")
1099
- ops_list_p.add_argument(
1100
- "--json", action="store_true", help="Output structured JSON (agent-native)")
1101
- ops_resolve_p = ops_sub.add_parser(
1102
- "resolve", help="Admin action: retry / force-reconcile / cancel a stuck op")
1103
- ops_resolve_p.add_argument("operation_id", help="Operation ID from slm ops list")
1104
- ops_resolve_p.add_argument(
1105
- "--action", required=True,
1106
- choices=["retry", "force_reconcile", "cancel"],
1107
- help="Remediation action to apply")
1108
- ops_resolve_p.add_argument(
1109
- "--json", action="store_true", help="Output structured JSON (agent-native)")
1110
- ops_status_p = ops_sub.add_parser(
1111
- "status", help="Quick failure count + writer stall overview")
1112
- ops_status_p.add_argument(
1113
- "--json", action="store_true", help="Output structured JSON (agent-native)")
1114
-
1115
- args = parser.parse_args()
1116
-
1117
- if not args.command:
1118
- parser.print_help()
1119
- sys.exit(0)
1120
-
1121
- # V3.3.19: Auto-trigger setup wizard on first use
1122
- if not (
1123
- (args.command == "connect" and getattr(args, "dry_run", False))
1124
- or (args.command == "upgrade-hosts" and not getattr(args, "apply", False))
1125
- ):
1126
- from superlocalmemory.cli.setup_wizard import check_first_use
1127
- check_first_use(args.command)
1128
-
1129
- # V3.4.4: Auto-start daemon for all commands that need it.
1130
- # SLM is always-on — close laptop, reboot, crash: daemon auto-recovers.
1131
- # Cross-platform: macOS + Windows + Linux.
1132
- if _command_requires_daemon(args):
1133
- try:
1134
- from superlocalmemory.cli.daemon import ensure_daemon
1135
- ensure_daemon() # Starts daemon if not running; no-op if already up
1136
- except Exception:
1137
- pass # Don't block CLI if daemon start fails — commands have fallbacks
1138
-
1139
- from superlocalmemory.cli.commands import dispatch
1140
-
1141
- dispatch(args)
1142
-
1143
-
1144
- if __name__ == "__main__":
1145
- main()