brainlayer 1.5.71__tar.gz → 1.5.72__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. {brainlayer-1.5.71 → brainlayer-1.5.72}/PKG-INFO +1 -1
  2. {brainlayer-1.5.71 → brainlayer-1.5.72}/pyproject.toml +1 -1
  3. {brainlayer-1.5.71 → brainlayer-1.5.72}/server.json +2 -2
  4. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/__init__.py +1 -1
  5. brainlayer-1.5.72/src/brainlayer/_build.py +1 -0
  6. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/spotlight.py +48 -1
  7. brainlayer-1.5.71/src/brainlayer/_build.py +0 -1
  8. {brainlayer-1.5.71 → brainlayer-1.5.72}/.gitignore +0 -0
  9. {brainlayer-1.5.71 → brainlayer-1.5.72}/LICENSE +0 -0
  10. {brainlayer-1.5.71 → brainlayer-1.5.72}/README.md +0 -0
  11. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/hotlane_brainbar_daemon.py +0 -0
  12. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/backup-daily.sh +0 -0
  13. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/brainlayer-env-run.sh +0 -0
  14. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/brainlayer.env.example +0 -0
  15. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.backup-daily.plist +0 -0
  16. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.daemon.plist +0 -0
  17. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.decay.plist +0 -0
  18. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.drain.plist +0 -0
  19. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.health-check.plist +0 -0
  20. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.hotlane-brainbar.plist +0 -0
  21. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.index.plist +0 -0
  22. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.jsonl-backup.plist +0 -0
  23. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.log-cap.plist +0 -0
  24. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.maintenance-nightly.plist +0 -0
  25. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.maintenance-weekly.plist +0 -0
  26. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.maintenance.plist +0 -0
  27. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.observability.plist +0 -0
  28. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.p0-counter.plist +0 -0
  29. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.repair-fts.plist +0 -0
  30. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.t3-ingest.plist +0 -0
  31. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.throughput-watchdog.plist +0 -0
  32. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.tier0-watchdog.plist +0 -0
  33. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.wal-checkpoint.plist +0 -0
  34. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.brainlayer.watch.plist +0 -0
  35. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/com.etanhey.brainlayer-fleet-watchdog.plist +0 -0
  36. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/fleet-watchdog.sh +0 -0
  37. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/install.sh +0 -0
  38. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/jsonl-backup.sh +0 -0
  39. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/launchd/throughput-watchdog.py +0 -0
  40. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/release-verify-signatures.sh +0 -0
  41. {brainlayer-1.5.71 → brainlayer-1.5.72}/scripts/tier0-watchdog.sh +0 -0
  42. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/__main__.py +0 -0
  43. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/_helpers.py +0 -0
  44. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/agent_profiles.py +0 -0
  45. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/agent_provenance.py +0 -0
  46. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/alarm.py +0 -0
  47. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/archive_collapse.py +0 -0
  48. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/archive_lifecycle.py +0 -0
  49. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/backup_daily.py +0 -0
  50. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/backup_retention_invariant.py +0 -0
  51. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/badge_state.py +0 -0
  52. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/bitemporal.py +0 -0
  53. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/brainbar_activation.py +0 -0
  54. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/brainbar_auto_activation.py +0 -0
  55. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/brainbar_hybrid_helper.py +0 -0
  56. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/brainbar_identity.py +0 -0
  57. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/cachedelete_purge.swift +0 -0
  58. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/calibrate.py +0 -0
  59. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/chunk_origin.py +0 -0
  60. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/chunk_origin_backfill.py +0 -0
  61. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/chunk_origin_wipe.py +0 -0
  62. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/chunk_write.py +0 -0
  63. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/classify.py +0 -0
  64. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/claude_paths.py +0 -0
  65. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/cli/__init__.py +0 -0
  66. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/cli/wizard.py +0 -0
  67. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/cli_jobs.py +0 -0
  68. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/cli_new.py +0 -0
  69. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/cloud_backfill.py +0 -0
  70. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/clustering.py +0 -0
  71. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/component_jobs.py +0 -0
  72. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/config.py +0 -0
  73. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/consolidation_plan.py +0 -0
  74. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/content_class.py +0 -0
  75. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/correction_judge.py +0 -0
  76. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/data/agents_registry.yaml +0 -0
  77. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/data/sandbox_seeds/skill-eval-baseline.json +0 -0
  78. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/db_shrink.py +0 -0
  79. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/decay.py +0 -0
  80. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/decay_backfill.py +0 -0
  81. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/decay_job.py +0 -0
  82. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/dedupe.py +0 -0
  83. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/dedupe_merge.py +0 -0
  84. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/deploy_drift.py +0 -0
  85. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/doctor.py +0 -0
  86. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/drain.py +0 -0
  87. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/drain_liveness.py +0 -0
  88. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/drive_credentials.py +0 -0
  89. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/embeddings.py +0 -0
  90. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/engine.py +0 -0
  91. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/enrichment_replay.py +0 -0
  92. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/__init__.py +0 -0
  93. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/abcde_enrich_runner.py +0 -0
  94. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/abcde_variants.py +0 -0
  95. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/abcde_variants.yaml +0 -0
  96. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/benchmark.py +0 -0
  97. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/enrichment_gold.py +0 -0
  98. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/enrichment_graders.py +0 -0
  99. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/enrichment_judge.py +0 -0
  100. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/enrichment_llm_judge.py +0 -0
  101. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/enrichment_quality_benchmark.py +0 -0
  102. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/experiment_store.py +0 -0
  103. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/fixtures/README.md +0 -0
  104. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/labeling/enrichment-labeler.html +0 -0
  105. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/__init__.py +0 -0
  106. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/__main__.py +0 -0
  107. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/baseline_store.py +0 -0
  108. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/cli.py +0 -0
  109. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/models.py +0 -0
  110. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/phoenix_client.py +0 -0
  111. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/regression_gate.py +0 -0
  112. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/phoenix_gate/triggers.py +0 -0
  113. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/eval/pilot_artifact_report.py +0 -0
  114. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/fallback_replay.py +0 -0
  115. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/git_learning.py +0 -0
  116. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/health_check.py +0 -0
  117. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/hook_python.py +0 -0
  118. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/hooks/__init__.py +0 -0
  119. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/hooks/indexer.py +0 -0
  120. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/import_sweep.py +0 -0
  121. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/index_admission.py +0 -0
  122. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/index_budget.py +0 -0
  123. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/index_completeness.py +0 -0
  124. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/index_new.py +0 -0
  125. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/index_watchdog.py +0 -0
  126. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/ingest/__init__.py +0 -0
  127. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/ingest/codex.py +0 -0
  128. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/ingest/t3.py +0 -0
  129. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/ingest_denylist.py +0 -0
  130. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/ingest_guard.py +0 -0
  131. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/isolation_proof.py +0 -0
  132. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/job_alerts.py +0 -0
  133. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/job_lifecycle_health.py +0 -0
  134. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/jobs.py +0 -0
  135. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/jsonl_backup.py +0 -0
  136. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg/__init__.py +0 -0
  137. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg_cleanup.py +0 -0
  138. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg_judge.py +0 -0
  139. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg_promotion.py +0 -0
  140. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg_repo.py +0 -0
  141. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg_review_session.py +0 -0
  142. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg_session_finish.py +0 -0
  143. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/kg_session_harvest.py +0 -0
  144. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/launchd_consolidation.py +0 -0
  145. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/launchd_install.py +0 -0
  146. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/launchd_primitive.py +0 -0
  147. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/launchd_revert.py +0 -0
  148. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/lexical_defense.py +0 -0
  149. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/lexical_defense_dictionary.json +0 -0
  150. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/log_cap.py +0 -0
  151. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/maintenance.py +0 -0
  152. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/maintenance_calendar.py +0 -0
  153. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/maintenance_control.py +0 -0
  154. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/__init__.py +0 -0
  155. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/_format.py +0 -0
  156. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/_shared.py +0 -0
  157. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/enrich_handler.py +0 -0
  158. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/entity_handler.py +0 -0
  159. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/palette.py +0 -0
  160. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/search_handler.py +0 -0
  161. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/store_handler.py +0 -0
  162. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp/tags_handler.py +0 -0
  163. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp_socket_config.py +0 -0
  164. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/mcp_stdio_bridge.py +0 -0
  165. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/memory_types.py +0 -0
  166. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/migrate.py +0 -0
  167. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/migration_custody.py +0 -0
  168. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/migration_journal.py +0 -0
  169. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/migration_runtime.py +0 -0
  170. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/notification_policy.py +0 -0
  171. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/observability_backup.py +0 -0
  172. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/observability_surface.py +0 -0
  173. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/observability_transport.py +0 -0
  174. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/p0_longitudinal_count.py +0 -0
  175. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/parent_death.py +0 -0
  176. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/paths.py +0 -0
  177. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pause.py +0 -0
  178. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/phonetic.py +0 -0
  179. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/__init__.py +0 -0
  180. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/agent_enrichment.py +0 -0
  181. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/analyze_communication.py +0 -0
  182. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/batch_extraction.py +0 -0
  183. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/brain_graph.py +0 -0
  184. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/chat_tags.py +0 -0
  185. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/chunk.py +0 -0
  186. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/classify.py +0 -0
  187. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/cloud_scrub.py +0 -0
  188. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/cluster_sampling.py +0 -0
  189. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/code_intelligence.py +0 -0
  190. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/correction_detection.py +0 -0
  191. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/correction_mining.py +0 -0
  192. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/digest.py +0 -0
  193. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/enrichment_prompts.py +0 -0
  194. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/enrichment_results.py +0 -0
  195. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/enrichment_tiers.py +0 -0
  196. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/entity_extraction.py +0 -0
  197. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/entity_resolution.py +0 -0
  198. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/extract.py +0 -0
  199. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/extract_claude_desktop.py +0 -0
  200. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/extract_corrections.py +0 -0
  201. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/extract_markdown.py +0 -0
  202. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/extract_whatsapp.py +0 -0
  203. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/frustration_mining.py +0 -0
  204. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/git_overlay.py +0 -0
  205. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/kg_extraction.py +0 -0
  206. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/kg_extraction_groq.py +0 -0
  207. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/longitudinal_analyzer.py +0 -0
  208. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/obsidian_export.py +0 -0
  209. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/operation_grouping.py +0 -0
  210. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/plan_linking.py +0 -0
  211. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/rate_limiter.py +0 -0
  212. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/relation_backfill.py +0 -0
  213. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/relation_verification.py +0 -0
  214. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/sanitize.py +0 -0
  215. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/secret_scrub.py +0 -0
  216. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/semantic_style.py +0 -0
  217. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/sentiment.py +0 -0
  218. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/session_history.py +0 -0
  219. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/style_embed.py +0 -0
  220. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/style_index.py +0 -0
  221. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/tag_entity_promotion.py +0 -0
  222. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/temporal_chains.py +0 -0
  223. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/time_batcher.py +0 -0
  224. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/unified_timeline.py +0 -0
  225. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/pipeline/write_queue.py +0 -0
  226. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/provenance.py +0 -0
  227. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/provenance_autosupersede.py +0 -0
  228. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/provenance_integration.py +0 -0
  229. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/queue_io.py +0 -0
  230. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/queue_merge.py +0 -0
  231. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/reembed_backfill.py +0 -0
  232. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/retired_services.py +0 -0
  233. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/runtime_store.py +0 -0
  234. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/sandbox_db.py +0 -0
  235. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/scoping.py +0 -0
  236. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/scrub_at_rest.py +0 -0
  237. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/search_fanout.py +0 -0
  238. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/search_profile.py +0 -0
  239. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/search_repo.py +0 -0
  240. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/service_supervisor.py +0 -0
  241. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/session_repo.py +0 -0
  242. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/setup.py +0 -0
  243. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/socket_hygiene.py +0 -0
  244. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/source_class_migration.py +0 -0
  245. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/storage.py +0 -0
  246. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/store.py +0 -0
  247. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/supervisor_adapters.py +0 -0
  248. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/supervisor_child.py +0 -0
  249. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/supervisor_guard.py +0 -0
  250. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/supervisor_jobs.py +0 -0
  251. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/system_prompt_guard.py +0 -0
  252. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/t3_linkage_alarm.py +0 -0
  253. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/t3_provenance.py +0 -0
  254. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/t3_sources.py +0 -0
  255. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/tag_normalization.py +0 -0
  256. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/taxonomy.json +0 -0
  257. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/telemetry.py +0 -0
  258. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/timestamp_iso.py +0 -0
  259. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/types.py +0 -0
  260. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/vector_store.py +0 -0
  261. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/wal_checkpoint.py +0 -0
  262. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/watcher.py +0 -0
  263. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/watcher_bridge.py +0 -0
  264. {brainlayer-1.5.71 → brainlayer-1.5.72}/src/brainlayer/writer_telemetry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: brainlayer
3
- Version: 1.5.71
3
+ Version: 1.5.72
4
4
  Summary: Persistent local memory for AI agents — 16 BrainBar MCP tools, semantic search, knowledge graph, SQLite
5
5
  Project-URL: Homepage, https://brainlayer.etanheyman.com
6
6
  Project-URL: Repository, https://github.com/EtanHey/brainlayer
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "brainlayer"
3
- version = "1.5.71"
3
+ version = "1.5.72"
4
4
  description = "Persistent local memory for AI agents — 16 BrainBar MCP tools, semantic search, knowledge graph, SQLite"
5
5
  license = {text = "Apache-2.0"}
6
6
  readme = "README.md"
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.etanhey/brainlayer",
4
4
  "title": "BrainLayer",
5
5
  "description": "Persistent local memory for AI agents \u2014 semantic search, knowledge graph, and 16 BrainBar MCP tools with ToolAnnotations over SQLite.",
6
- "version": "1.5.71",
6
+ "version": "1.5.72",
7
7
  "websiteUrl": "https://brainlayer.etanheyman.com",
8
8
  "repository": {
9
9
  "url": "https://github.com/EtanHey/brainlayer",
@@ -14,7 +14,7 @@
14
14
  "registryType": "pypi",
15
15
  "registryBaseUrl": "https://pypi.org",
16
16
  "identifier": "brainlayer",
17
- "version": "1.5.71",
17
+ "version": "1.5.72",
18
18
  "runtimeHint": "pipx",
19
19
  "transport": {
20
20
  "type": "stdio"
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "1.5.71"
5
+ __version__ = "1.5.72"
6
6
  # Git sha the distributed package was built from; stamped by the release build, None in a source tree.
7
7
  # scripts/sprint_gate.py reads it in "keg" mode to prove the served package is the code under test.
8
8
  # No runtime `str | None` annotation: launchd/install.sh imports this under /usr/bin/python3 (3.9).
@@ -0,0 +1 @@
1
+ BUILD_SHA = "bfd456ed149a3b573153318a684f8e4fbc6babb8"
@@ -1,6 +1,7 @@
1
1
  """Lightweight Spotlight exclusion layout preflight."""
2
2
 
3
3
  import os
4
+ import stat
4
5
  from pathlib import Path
5
6
  from typing import Callable, Optional, Tuple
6
7
 
@@ -26,7 +27,6 @@ _UNSUPPORTED_RUNTIME_PATH_OVERRIDES = (
26
27
  "BRAINLAYER_DRAIN_LOG_PATH",
27
28
  "BRAINLAYER_ENRICH_COST_DIR",
28
29
  "BRAINLAYER_JSONL_BACKUP_LOG_PATH",
29
- "BRAINLAYER_JSONL_BACKUP_STAGING_DIR",
30
30
  "BRAINLAYER_JSONL_BACKUP_STATE_PATH",
31
31
  "BRAINLAYER_LOG_DIR",
32
32
  "BRAINLAYER_OFFSETS_PATH",
@@ -87,6 +87,52 @@ def _validate_disjoint_roots(roots: Tuple[Path, ...]) -> None:
87
87
  raise RuntimeError(f"Spotlight exclusion roots must not overlap: {other} and {root}")
88
88
 
89
89
 
90
+ def _validate_jsonl_staging_override(
91
+ env_file: Optional[Path], data_roots: Tuple[Path, ...], *, ismount: Callable[[Path], bool]
92
+ ) -> None:
93
+ from .config import configured_brainlayer_env_value
94
+
95
+ name = "BRAINLAYER_JSONL_BACKUP_STAGING_DIR"
96
+ configured = configured_brainlayer_env_value(name, env_file) if env_file is not None else None
97
+ # Validate both launchd's selected file and the current CLI's process-first value.
98
+ for value in dict.fromkeys((configured, os.environ.get(name, configured))):
99
+ if value in (None, ""):
100
+ continue
101
+ stage = Path(value)
102
+ if not stage.is_absolute() or ".." in stage.parts:
103
+ raise RuntimeError(f"{name} must be an absolute path without parent traversal: {stage}")
104
+ root = next(
105
+ (root for root in data_roots if root / "jsonl-backups" in stage.parents),
106
+ None,
107
+ )
108
+ if root is None:
109
+ raise RuntimeError(f"{name} must be a dedicated descendant of a managed jsonl-backups directory: {stage}")
110
+ for component in (*reversed(stage.parents), stage):
111
+ try:
112
+ info = component.lstat()
113
+ except FileNotFoundError:
114
+ continue
115
+ if not stat.S_ISDIR(info.st_mode):
116
+ raise RuntimeError(f"{name} ancestor must be a directory, never a symbolic link: {component}")
117
+ if info.st_uid not in (0, os.geteuid()) or info.st_mode & 0o022:
118
+ raise RuntimeError(f"{name} has an unsafe ancestor owner or mode: {component}")
119
+ if (component == root or root in component.parents) and ismount(component):
120
+ raise RuntimeError(f"{name} must not cross a mount boundary: {component}")
121
+ if component == stage and (info.st_uid != os.geteuid() or info.st_mode & 0o077):
122
+ raise RuntimeError(f"{name} must be a private directory owned by the current user: {stage}")
123
+ marker = root / SPOTLIGHT_EXCLUSION_MARKER
124
+ try:
125
+ marker_info = marker.lstat()
126
+ except FileNotFoundError as exc:
127
+ raise RuntimeError(f"{name} requires a marker-backed managed data root: {root}") from exc
128
+ if (
129
+ not stat.S_ISREG(marker_info.st_mode)
130
+ or marker_info.st_uid not in (0, os.geteuid())
131
+ or marker_info.st_mode & 0o022
132
+ ):
133
+ raise RuntimeError(f"{name} requires a safe regular exclusion marker: {marker}")
134
+
135
+
90
136
  def _ensure_spotlight_excluded_root(root: Path, children: Tuple[str, ...] = ()) -> Path:
91
137
  resolved = root.expanduser()
92
138
  resolved.mkdir(parents=True, exist_ok=True)
@@ -145,6 +191,7 @@ def ensure_spotlight_excluded_layout(
145
191
  if root.is_dir() and not marker.is_file() and next(root.iterdir(), None) is not None:
146
192
  raise RuntimeError(f"existing runtime tree {root} requires the Spotlight exclusion migration runbook")
147
193
 
194
+ _validate_jsonl_staging_override(env_file, tuple(resolved_roots[: len(data_roots)]), ismount=ismount_fn)
148
195
  data_root_count = len(data_roots)
149
196
  return (
150
197
  *(_ensure_spotlight_excluded_root(root, _DATA_CHILDREN) for root in resolved_roots[:data_root_count]),
@@ -1 +0,0 @@
1
- BUILD_SHA = "bdd90a907a55d35bba00b0618e2458dd21249c2d"
File without changes
File without changes
File without changes