brainlayer 1.4.2__tar.gz → 1.4.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. {brainlayer-1.4.2 → brainlayer-1.4.4}/PKG-INFO +4 -3
  2. {brainlayer-1.4.2 → brainlayer-1.4.4}/README.md +2 -2
  3. {brainlayer-1.4.2 → brainlayer-1.4.4}/pyproject.toml +7 -2
  4. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.drain.plist +5 -6
  5. brainlayer-1.4.4/scripts/launchd/com.brainlayer.p0-counter.plist +49 -0
  6. brainlayer-1.4.4/scripts/launchd/com.brainlayer.throughput-watchdog.plist +47 -0
  7. brainlayer-1.4.4/scripts/launchd/com.brainlayer.tier0-watchdog.plist +45 -0
  8. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/install.sh +125 -2
  9. brainlayer-1.4.4/scripts/launchd/throughput-watchdog.py +629 -0
  10. brainlayer-1.4.4/scripts/tier0-watchdog.sh +220 -0
  11. {brainlayer-1.4.2 → brainlayer-1.4.4}/server.json +3 -3
  12. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/__init__.py +1 -1
  13. brainlayer-1.4.4/src/brainlayer/agent_provenance.py +185 -0
  14. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/backup_daily.py +4 -2
  15. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/cli/__init__.py +492 -70
  16. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/cli_new.py +15 -15
  17. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/cloud_backfill.py +6 -4
  18. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/content_class.py +2 -2
  19. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/doctor.py +97 -14
  20. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/drain.py +80 -21
  21. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/embeddings.py +3 -3
  22. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/engine.py +5 -0
  23. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/enrichment_controller.py +42 -3
  24. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/health_check.py +574 -50
  25. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/index_new.py +22 -6
  26. brainlayer-1.4.4/src/brainlayer/ingest_denylist.py +167 -0
  27. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/jsonl_backup.py +207 -43
  28. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/__init__.py +32 -3
  29. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/_format.py +6 -1
  30. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/_shared.py +113 -18
  31. brainlayer-1.4.4/src/brainlayer/mcp/palette.py +71 -0
  32. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/search_handler.py +388 -201
  33. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/store_handler.py +8 -5
  34. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/migrate.py +16 -12
  35. brainlayer-1.4.4/src/brainlayer/p0_longitudinal_count.py +120 -0
  36. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/enrichment.py +5 -4
  37. brainlayer-1.4.4/src/brainlayer/pipeline/secret_scrub.py +222 -0
  38. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/queue_io.py +22 -15
  39. brainlayer-1.4.4/src/brainlayer/runtime_store.py +494 -0
  40. brainlayer-1.4.4/src/brainlayer/search_fanout.py +167 -0
  41. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/search_repo.py +97 -24
  42. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/store.py +29 -5
  43. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/vector_store.py +619 -218
  44. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/watcher.py +363 -6
  45. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/watcher_bridge.py +50 -2
  46. brainlayer-1.4.4/src/brainlayer/writer_telemetry.py +645 -0
  47. {brainlayer-1.4.2 → brainlayer-1.4.4}/.gitignore +0 -0
  48. {brainlayer-1.4.2 → brainlayer-1.4.4}/LICENSE +0 -0
  49. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/backup-daily.sh +0 -0
  50. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/brainlayer-env-run.sh +0 -0
  51. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/brainlayer.env.example +0 -0
  52. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.backup-daily.plist +0 -0
  53. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.decay.plist +0 -0
  54. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.enrichment.plist +0 -0
  55. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.health-check.plist +0 -0
  56. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.hotlane-brainbar.plist +0 -0
  57. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.index.plist +0 -0
  58. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.jsonl-backup.plist +0 -0
  59. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.maintenance-nightly.plist +0 -0
  60. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.maintenance-weekly.plist +0 -0
  61. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.repair-fts.plist +0 -0
  62. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.wal-checkpoint.plist +0 -0
  63. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.watch.plist +0 -0
  64. {brainlayer-1.4.2 → brainlayer-1.4.4}/scripts/launchd/jsonl-backup.sh +0 -0
  65. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/_helpers.py +0 -0
  66. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/agent_profiles.py +0 -0
  67. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/alarm.py +0 -0
  68. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/bitemporal.py +0 -0
  69. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/brainbar_hybrid_helper.py +0 -0
  70. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/calibrate.py +0 -0
  71. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/chunk_origin.py +0 -0
  72. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/chunk_origin_backfill.py +0 -0
  73. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/classify.py +0 -0
  74. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/claude_paths.py +0 -0
  75. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/cli/wizard.py +0 -0
  76. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/clustering.py +0 -0
  77. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/config.py +0 -0
  78. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/correction_judge.py +0 -0
  79. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/data/agents_registry.yaml +0 -0
  80. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/data/sandbox_seeds/skill-eval-baseline.json +0 -0
  81. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/db_shrink.py +0 -0
  82. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/decay.py +0 -0
  83. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/decay_backfill.py +0 -0
  84. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/decay_job.py +0 -0
  85. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/dedupe.py +0 -0
  86. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/deploy_drift.py +0 -0
  87. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/drain_liveness.py +0 -0
  88. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/__init__.py +0 -0
  89. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/abcde_enrich_runner.py +0 -0
  90. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/abcde_variants.py +0 -0
  91. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/abcde_variants.yaml +0 -0
  92. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/benchmark.py +0 -0
  93. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_gold.py +0 -0
  94. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_graders.py +0 -0
  95. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_judge.py +0 -0
  96. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_llm_judge.py +0 -0
  97. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_quality_benchmark.py +0 -0
  98. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/experiment_store.py +0 -0
  99. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/fixtures/README.md +0 -0
  100. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/labeling/enrichment-labeler.html +0 -0
  101. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/__init__.py +0 -0
  102. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/__main__.py +0 -0
  103. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/baseline_store.py +0 -0
  104. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/cli.py +0 -0
  105. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/models.py +0 -0
  106. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/phoenix_client.py +0 -0
  107. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/regression_gate.py +0 -0
  108. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/triggers.py +0 -0
  109. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/fallback_replay.py +0 -0
  110. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/git_learning.py +0 -0
  111. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/hooks/__init__.py +0 -0
  112. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/hooks/indexer.py +0 -0
  113. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/ingest/__init__.py +0 -0
  114. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/ingest/codex.py +0 -0
  115. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/ingest_guard.py +0 -0
  116. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/isolation_proof.py +0 -0
  117. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg/__init__.py +0 -0
  118. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg_cleanup.py +0 -0
  119. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg_judge.py +0 -0
  120. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg_promotion.py +0 -0
  121. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg_repo.py +0 -0
  122. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg_review_session.py +0 -0
  123. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg_session_finish.py +0 -0
  124. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/kg_session_harvest.py +0 -0
  125. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/launchd_primitive.py +0 -0
  126. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/lexical_defense.py +0 -0
  127. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/lexical_defense_dictionary.json +0 -0
  128. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/maintenance.py +0 -0
  129. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/enrich_handler.py +0 -0
  130. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/entity_handler.py +0 -0
  131. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp/tags_handler.py +0 -0
  132. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/mcp_stdio_bridge.py +0 -0
  133. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/memory_types.py +0 -0
  134. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/parent_death.py +0 -0
  135. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/paths.py +0 -0
  136. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/phonetic.py +0 -0
  137. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/__init__.py +0 -0
  138. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/agent_enrichment.py +0 -0
  139. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/analyze_communication.py +0 -0
  140. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/batch_extraction.py +0 -0
  141. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/brain_graph.py +0 -0
  142. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/chat_tags.py +0 -0
  143. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/chunk.py +0 -0
  144. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/classify.py +0 -0
  145. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/cluster_sampling.py +0 -0
  146. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/code_intelligence.py +0 -0
  147. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/correction_detection.py +0 -0
  148. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/correction_mining.py +0 -0
  149. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/digest.py +0 -0
  150. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/enrichment_tiers.py +0 -0
  151. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/entity_extraction.py +0 -0
  152. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/entity_resolution.py +0 -0
  153. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract.py +0 -0
  154. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_claude_desktop.py +0 -0
  155. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_corrections.py +0 -0
  156. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_markdown.py +0 -0
  157. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_whatsapp.py +0 -0
  158. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/frustration_mining.py +0 -0
  159. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/git_overlay.py +0 -0
  160. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/kg_extraction.py +0 -0
  161. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/kg_extraction_groq.py +0 -0
  162. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/longitudinal_analyzer.py +0 -0
  163. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/obsidian_export.py +0 -0
  164. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/operation_grouping.py +0 -0
  165. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/plan_linking.py +0 -0
  166. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/rate_limiter.py +0 -0
  167. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/sanitize.py +0 -0
  168. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/semantic_style.py +0 -0
  169. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/sentiment.py +0 -0
  170. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/session_enrichment.py +0 -0
  171. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/style_embed.py +0 -0
  172. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/style_index.py +0 -0
  173. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/tag_entity_promotion.py +0 -0
  174. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/temporal_chains.py +0 -0
  175. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/time_batcher.py +0 -0
  176. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/unified_timeline.py +0 -0
  177. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/pipeline/write_queue.py +0 -0
  178. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/provenance.py +0 -0
  179. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/provenance_autosupersede.py +0 -0
  180. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/provenance_integration.py +0 -0
  181. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/queue_merge.py +0 -0
  182. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/reembed_backfill.py +0 -0
  183. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/sandbox_db.py +0 -0
  184. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/scoping.py +0 -0
  185. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/search_profile.py +0 -0
  186. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/session_repo.py +0 -0
  187. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/setup.py +0 -0
  188. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/storage.py +0 -0
  189. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/system_prompt_guard.py +0 -0
  190. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/tag_normalization.py +0 -0
  191. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/taxonomy.json +0 -0
  192. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/telemetry.py +0 -0
  193. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/types.py +0 -0
  194. {brainlayer-1.4.2 → brainlayer-1.4.4}/src/brainlayer/wal_checkpoint.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brainlayer
3
- Version: 1.4.2
3
+ Version: 1.4.4
4
4
  Summary: Persistent memory MCP server for AI agents — 13 tools, semantic search, knowledge graph, on-device SQLite
5
5
  Project-URL: Homepage, https://brainlayer.etanheyman.com
6
6
  Project-URL: Repository, https://github.com/EtanHey/brainlayer
@@ -54,6 +54,7 @@ Requires-Dist: pytest>=7.0.0; extra == 'dev'
54
54
  Requires-Dist: ruff>=0.1.0; extra == 'dev'
55
55
  Requires-Dist: scikit-learn<1.6; extra == 'dev'
56
56
  Requires-Dist: setuptools<81,>=70.0.0; extra == 'dev'
57
+ Requires-Dist: tiktoken>=0.7.0; extra == 'dev'
57
58
  Requires-Dist: umap-learn>=0.5.0; extra == 'dev'
58
59
  Provides-Extra: docs
59
60
  Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
@@ -80,9 +81,9 @@ Description-Content-Type: text/markdown
80
81
  [![Tests](https://img.shields.io/badge/tests-1%2C848%20Python%20%2B%2054%20Swift-brightgreen.svg)](#testing)
81
82
  [![Website](https://img.shields.io/badge/site-brainlayer.etanheyman.com-d4956a.svg)](https://brainlayer.etanheyman.com)
82
83
 
83
- Every architecture decision, every debugging session, every preference you've expressed — **gone between sessions.** You repeat yourself constantly. Your agent rediscovers bugs it already fixed.
84
+ Every architecture decision, every debugging session, every preference you've expressed — **gone between sessions.** You repeat yourself constantly. Your agents rediscover bugs they already fixed, and re-make choices the team already reasoned through.
84
85
 
85
- BrainLayer gives any MCP-compatible AI agent persistent memory across conversations. One SQLite file. No cloud. No Docker. Just `pip install`.
86
+ BrainLayer gives any MCP-compatible AI agent persistent memory across conversations — and gives a whole **fleet** of agents a shared organizational memory: what one agent learns (a fix, a decision, what eroded and why) becomes experience the others inherit before they repeat the mistake. One SQLite file. No cloud. No Docker. Just `pip install`.
86
87
 
87
88
  ```text
88
89
  "What approach did I use for auth last month?" → brain_search
@@ -9,9 +9,9 @@
9
9
  [![Tests](https://img.shields.io/badge/tests-1%2C848%20Python%20%2B%2054%20Swift-brightgreen.svg)](#testing)
10
10
  [![Website](https://img.shields.io/badge/site-brainlayer.etanheyman.com-d4956a.svg)](https://brainlayer.etanheyman.com)
11
11
 
12
- Every architecture decision, every debugging session, every preference you've expressed — **gone between sessions.** You repeat yourself constantly. Your agent rediscovers bugs it already fixed.
12
+ Every architecture decision, every debugging session, every preference you've expressed — **gone between sessions.** You repeat yourself constantly. Your agents rediscover bugs they already fixed, and re-make choices the team already reasoned through.
13
13
 
14
- BrainLayer gives any MCP-compatible AI agent persistent memory across conversations. One SQLite file. No cloud. No Docker. Just `pip install`.
14
+ BrainLayer gives any MCP-compatible AI agent persistent memory across conversations — and gives a whole **fleet** of agents a shared organizational memory: what one agent learns (a fix, a decision, what eroded and why) becomes experience the others inherit before they repeat the mistake. One SQLite file. No cloud. No Docker. Just `pip install`.
15
15
 
16
16
  ```text
17
17
  "What approach did I use for auth last month?" → brain_search
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "brainlayer"
3
- version = "1.4.2"
3
+ version = "1.4.4"
4
4
  description = "Persistent memory MCP server for AI agents — 13 tools, semantic search, knowledge graph, on-device SQLite"
5
5
  license = {text = "Apache-2.0"}
6
6
  readme = "README.md"
@@ -82,6 +82,7 @@ dev = [
82
82
  "ruff>=0.1.0",
83
83
  "scikit-learn<1.6",
84
84
  "setuptools>=70.0.0,<81",
85
+ "tiktoken>=0.7.0",
85
86
  "umap-learn>=0.5.0",
86
87
  ]
87
88
  docs = [
@@ -124,15 +125,19 @@ markers = [
124
125
 
125
126
  [tool.hatch.build.targets.wheel]
126
127
  packages = ["src/brainlayer"]
127
- force-include = {"scripts/launchd" = "brainlayer/launchd"}
128
128
  exclude = [
129
129
  "src/brainlayer/dashboard",
130
130
  ]
131
131
 
132
+ [tool.hatch.build.targets.wheel.force-include]
133
+ "scripts/launchd" = "brainlayer/launchd"
134
+ "scripts/tier0-watchdog.sh" = "brainlayer/launchd/tier0-watchdog.sh"
135
+
132
136
  [tool.hatch.build.targets.sdist]
133
137
  only-include = [
134
138
  "src/brainlayer",
135
139
  "scripts/launchd",
140
+ "scripts/tier0-watchdog.sh",
136
141
  "README.md",
137
142
  "LICENSE",
138
143
  "server.json",
@@ -7,9 +7,11 @@
7
7
  <key>ProgramArguments</key>
8
8
  <array>
9
9
  <string>__BRAINLAYER_ENV_RUN__</string>
10
- <string>__PYTHON_BIN__</string>
11
- <string>-m</string>
12
- <string>brainlayer.drain</string>
10
+ <string>/usr/bin/env</string>
11
+ <string>BRAINLAYER_DRAIN_EMBED=0</string>
12
+ <string>__BRAINLAYER_BIN__</string>
13
+ <string>drain</string>
14
+ <string>--daemon</string>
13
15
  <string>--batch-size</string>
14
16
  <string>50</string>
15
17
  </array>
@@ -25,9 +27,6 @@
25
27
  <string>__BRAINLAYER_ENV_FILE__</string>
26
28
  <key>BRAINLAYER_LAUNCHD_SERVICE</key>
27
29
  <string>drain</string>
28
- <!-- Production leaves drain embedding enabled. Embeddings are precomputed
29
- before BEGIN IMMEDIATE, so vector coverage does not depend on hotlane
30
- liveness and the write-lock window stays bounded. -->
31
30
  </dict>
32
31
  <key>StandardOutPath</key>
33
32
  <string>__HOME__/Library/Logs/brainlayer/drain.out.log</string>
@@ -0,0 +1,49 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.brainlayer.p0-counter</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>__BRAINLAYER_ENV_RUN__</string>
10
+ <string>__BRAINLAYER_BIN__</string>
11
+ <string>p0-counter</string>
12
+ </array>
13
+ <key>EnvironmentVariables</key>
14
+ <dict>
15
+ <key>PATH</key>
16
+ <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:__HOME__/.local/bin</string>
17
+ <key>PYTHONUNBUFFERED</key>
18
+ <string>1</string>
19
+ <key>BRAINLAYER_REPO_ROOT</key>
20
+ <string>__BRAINLAYER_DIR__</string>
21
+ <key>BRAINLAYER_ENV_FILE</key>
22
+ <string>__BRAINLAYER_ENV_FILE__</string>
23
+ <key>BRAINLAYER_LAUNCHD_SERVICE</key>
24
+ <string>p0-counter</string>
25
+ </dict>
26
+ <key>StandardOutPath</key>
27
+ <string>__HOME__/Library/Logs/brainlayer/p0-counter.out.log</string>
28
+ <key>StandardErrorPath</key>
29
+ <string>__HOME__/Library/Logs/brainlayer/p0-counter.err.log</string>
30
+ <key>StartCalendarInterval</key>
31
+ <dict>
32
+ <key>Hour</key>
33
+ <integer>5</integer>
34
+ <key>Minute</key>
35
+ <integer>0</integer>
36
+ </dict>
37
+ <key>ProcessType</key>
38
+ <string>Background</string>
39
+ <key>ExitTimeOut</key>
40
+ <integer>60</integer>
41
+ <key>LowPriorityIO</key>
42
+ <true/>
43
+ <key>SoftResourceLimits</key>
44
+ <dict>
45
+ <key>NumberOfFiles</key>
46
+ <integer>4096</integer>
47
+ </dict>
48
+ </dict>
49
+ </plist>
@@ -0,0 +1,47 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.brainlayer.throughput-watchdog</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>__BRAINLAYER_ENV_RUN__</string>
10
+ <string>__PYTHON_BIN__</string>
11
+ <string>__THROUGHPUT_WATCHDOG_SCRIPT__</string>
12
+ <string>--json</string>
13
+ </array>
14
+ <key>EnvironmentVariables</key>
15
+ <dict>
16
+ <key>HOME</key>
17
+ <string>__HOME__</string>
18
+ <key>BRAINLAYER_ENV_FILE</key>
19
+ <string>__BRAINLAYER_ENV_FILE__</string>
20
+ <key>BRAINLAYER_LAUNCHD_SERVICE</key>
21
+ <string>watch</string>
22
+ <key>PATH</key>
23
+ <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
24
+ </dict>
25
+ <key>RunAtLoad</key>
26
+ <true/>
27
+ <key>StartInterval</key>
28
+ <integer>60</integer>
29
+ <key>ProcessType</key>
30
+ <string>Background</string>
31
+ <key>Nice</key>
32
+ <integer>10</integer>
33
+ <key>LowPriorityIO</key>
34
+ <true/>
35
+ <key>ExitTimeOut</key>
36
+ <integer>30</integer>
37
+ <key>SoftResourceLimits</key>
38
+ <dict>
39
+ <key>NumberOfFiles</key>
40
+ <integer>4096</integer>
41
+ </dict>
42
+ <key>StandardOutPath</key>
43
+ <string>__HOME__/Library/Logs/brainlayer/throughput-watchdog.out.log</string>
44
+ <key>StandardErrorPath</key>
45
+ <string>__HOME__/Library/Logs/brainlayer/throughput-watchdog.err.log</string>
46
+ </dict>
47
+ </plist>
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.brainlayer.tier0-watchdog</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>/bin/sh</string>
10
+ <string>__TIER0_WATCHDOG_SCRIPT__</string>
11
+ </array>
12
+ <key>EnvironmentVariables</key>
13
+ <dict>
14
+ <key>HOME</key>
15
+ <string>__HOME__</string>
16
+ <key>PATH</key>
17
+ <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
18
+ <key>TIER0_ALERT_STATE_PATH</key>
19
+ <string>__HOME__/.local/share/brainlayer/tier0-watchdog-alert-state</string>
20
+ <key>TIER0_REPEAT_ALERT_SECONDS</key>
21
+ <string>1800</string>
22
+ <key>TIER0_STALE_SECONDS</key>
23
+ <string>900</string>
24
+ </dict>
25
+ <key>StandardOutPath</key>
26
+ <string>__HOME__/Library/Logs/brainlayer/tier0-watchdog.out.log</string>
27
+ <key>StandardErrorPath</key>
28
+ <string>__HOME__/Library/Logs/brainlayer/tier0-watchdog.err.log</string>
29
+ <key>StartInterval</key>
30
+ <integer>300</integer>
31
+ <key>RunAtLoad</key>
32
+ <true/>
33
+ <key>Nice</key>
34
+ <integer>10</integer>
35
+ <key>ProcessType</key>
36
+ <string>Background</string>
37
+ <key>ExitTimeOut</key>
38
+ <integer>15</integer>
39
+ <key>SoftResourceLimits</key>
40
+ <dict>
41
+ <key>NumberOfFiles</key>
42
+ <integer>4096</integer>
43
+ </dict>
44
+ </dict>
45
+ </plist>
@@ -16,7 +16,10 @@
16
16
  # ./scripts/launchd/install.sh jsonl-backup # Install daily JSONL backup only
17
17
  # ./scripts/launchd/install.sh maintenance # Install recurring maintenance jobs
18
18
  # ./scripts/launchd/install.sh health-check # Install stability health check only
19
+ # ./scripts/launchd/install.sh tier0-watchdog # Install /bin/sh meta-watchdog only
20
+ # ./scripts/launchd/install.sh throughput-watchdog # Install watcher throughput watchdog only
19
21
  # ./scripts/launchd/install.sh hotlane # Install BrainBar hotlane embed/enrich daemon only
22
+ # ./scripts/launchd/install.sh p0-counter # Install daily P0 longitudinal counter only
20
23
  # ./scripts/launchd/install.sh remove # Unload and remove all
21
24
  set -euo pipefail
22
25
 
@@ -61,6 +64,8 @@ PYTHON_BIN="$(stable_brainlayer_path "${PYTHON_BIN:-$(command -v python3)}")"
61
64
  BRAINLAYER_PYTHON="$(stable_brainlayer_path "${BRAINLAYER_PYTHON:-$PYTHON_BIN}")"
62
65
  BRAINLAYER_ENV_FILE="${BRAINLAYER_ENV_FILE:-$HOME/.config/brainlayer/brainlayer.env}"
63
66
  BRAINLAYER_ENV_RUN="$BRAINLAYER_LIB_DIR/brainlayer-env-run.sh"
67
+ TIER0_WATCHDOG_DST="$BRAINLAYER_LIB_DIR/tier0-watchdog.sh"
68
+ THROUGHPUT_WATCHDOG_DST="$BRAINLAYER_LIB_DIR/throughput-watchdog.py"
64
69
 
65
70
  if [ -z "$PYTHON_BIN" ]; then
66
71
  echo "ERROR: python3 not found in PATH"
@@ -265,6 +270,104 @@ install_jsonl_backup_script() {
265
270
  echo "Installed: $dst"
266
271
  }
267
272
 
273
+ install_tier0_watchdog() {
274
+ local script_src="$SCRIPT_DIR/tier0-watchdog.sh"
275
+ local plist_src="$SCRIPT_DIR/com.brainlayer.tier0-watchdog.plist"
276
+ local plist_dst="$LAUNCH_DIR/com.brainlayer.tier0-watchdog.plist"
277
+ local escaped_home
278
+ local escaped_tier0_watchdog_dst
279
+
280
+ if [ ! -f "$script_src" ]; then
281
+ script_src="$SCRIPT_DIR/../tier0-watchdog.sh"
282
+ fi
283
+ if [ ! -f "$script_src" ]; then
284
+ echo "ERROR: tier0-watchdog.sh not found beside or above $SCRIPT_DIR"
285
+ return 1
286
+ fi
287
+ if [ ! -f "$plist_src" ]; then
288
+ echo "ERROR: $plist_src not found"
289
+ return 1
290
+ fi
291
+
292
+ escaped_home="$(
293
+ printf '%s' "$HOME" \
294
+ | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/[\\&|]/\\&/g'
295
+ )" || return 1
296
+ escaped_tier0_watchdog_dst="$(
297
+ printf '%s' "$TIER0_WATCHDOG_DST" \
298
+ | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/[\\&|]/\\&/g'
299
+ )" || return 1
300
+
301
+ install -m 0755 "$script_src" "$TIER0_WATCHDOG_DST" || return 1
302
+ sed \
303
+ -e "s|__HOME__|$escaped_home|g" \
304
+ -e "s|__TIER0_WATCHDOG_SCRIPT__|$escaped_tier0_watchdog_dst|g" \
305
+ "$plist_src" > "$plist_dst" || return 1
306
+
307
+ echo "Installed: $TIER0_WATCHDOG_DST"
308
+ echo "Installed: $plist_dst"
309
+ echo " Logs: $LOG_DIR/ and $BRAINLAYER_LOG_DIR/"
310
+ load_plist tier0-watchdog
311
+ }
312
+
313
+ install_throughput_watchdog() {
314
+ local script_src="$SCRIPT_DIR/throughput-watchdog.py"
315
+ local plist_src="$SCRIPT_DIR/com.brainlayer.throughput-watchdog.plist"
316
+ local plist_dst="$LAUNCH_DIR/com.brainlayer.throughput-watchdog.plist"
317
+ local escaped_env_file
318
+ local escaped_env_run
319
+ local escaped_home
320
+ local escaped_python_bin
321
+ local escaped_watchdog_dst
322
+
323
+ if [ ! -f "$script_src" ]; then
324
+ echo "ERROR: throughput-watchdog.py not found in $SCRIPT_DIR"
325
+ return 1
326
+ fi
327
+ if [ ! -f "$plist_src" ]; then
328
+ echo "ERROR: $plist_src not found"
329
+ return 1
330
+ fi
331
+
332
+ install_env_runner || return 1
333
+ verify_config_file || return 1
334
+
335
+ escaped_home="$(
336
+ printf '%s' "$HOME" \
337
+ | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/[\\&|]/\\&/g'
338
+ )" || return 1
339
+ escaped_env_file="$(
340
+ printf '%s' "$BRAINLAYER_ENV_FILE" \
341
+ | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/[\\&|]/\\&/g'
342
+ )" || return 1
343
+ escaped_env_run="$(
344
+ printf '%s' "$BRAINLAYER_ENV_RUN" \
345
+ | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/[\\&|]/\\&/g'
346
+ )" || return 1
347
+ escaped_watchdog_dst="$(
348
+ printf '%s' "$THROUGHPUT_WATCHDOG_DST" \
349
+ | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/[\\&|]/\\&/g'
350
+ )" || return 1
351
+ escaped_python_bin="$(
352
+ printf '%s' "$PYTHON_BIN" \
353
+ | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/[\\&|]/\\&/g'
354
+ )" || return 1
355
+
356
+ install -m 0755 "$script_src" "$THROUGHPUT_WATCHDOG_DST" || return 1
357
+ sed \
358
+ -e "s|__HOME__|$escaped_home|g" \
359
+ -e "s|__BRAINLAYER_ENV_FILE__|$escaped_env_file|g" \
360
+ -e "s|__BRAINLAYER_ENV_RUN__|$escaped_env_run|g" \
361
+ -e "s|__PYTHON_BIN__|$escaped_python_bin|g" \
362
+ -e "s|__THROUGHPUT_WATCHDOG_SCRIPT__|$escaped_watchdog_dst|g" \
363
+ "$plist_src" > "$plist_dst" || return 1
364
+
365
+ echo "Installed: $THROUGHPUT_WATCHDOG_DST"
366
+ echo "Installed: $plist_dst"
367
+ echo " Logs: $LOG_DIR/ and $BRAINLAYER_LOG_DIR/"
368
+ load_plist throughput-watchdog
369
+ }
370
+
268
371
  remove_plist() {
269
372
  local name="$1"
270
373
  local dst="$LAUNCH_DIR/com.brainlayer.${name}.plist"
@@ -326,10 +429,19 @@ case "${1:-all}" in
326
429
  health-check)
327
430
  install_plist health-check
328
431
  ;;
432
+ tier0|tier0-watchdog)
433
+ install_tier0_watchdog
434
+ ;;
435
+ throughput-watchdog)
436
+ install_throughput_watchdog
437
+ ;;
329
438
  hotlane|hotlane-brainbar)
330
439
  verify_gemini_env_file
331
440
  install_plist hotlane-brainbar
332
441
  ;;
442
+ p0-counter)
443
+ install_plist p0-counter
444
+ ;;
333
445
  all)
334
446
  install_env_runner
335
447
  verify_config_file
@@ -357,7 +469,13 @@ case "${1:-all}" in
357
469
  elif ! install_many jsonl-backup; then
358
470
  failures=1
359
471
  fi
360
- if ! install_many maintenance-nightly maintenance-weekly health-check; then
472
+ if ! install_many maintenance-nightly maintenance-weekly health-check p0-counter; then
473
+ failures=1
474
+ fi
475
+ if ! install_tier0_watchdog; then
476
+ failures=1
477
+ fi
478
+ if ! install_throughput_watchdog; then
361
479
  failures=1
362
480
  fi
363
481
  # Remove old enrich plist only after the replacement enrichment service loads.
@@ -382,12 +500,17 @@ case "${1:-all}" in
382
500
  remove_plist maintenance-nightly 2>/dev/null || true
383
501
  remove_plist maintenance-weekly 2>/dev/null || true
384
502
  remove_plist health-check 2>/dev/null || true
503
+ remove_plist tier0-watchdog 2>/dev/null || true
504
+ remove_plist throughput-watchdog 2>/dev/null || true
385
505
  remove_plist hotlane-brainbar 2>/dev/null || true
506
+ remove_plist p0-counter 2>/dev/null || true
386
507
  rm -f "$BRAINLAYER_LIB_DIR/backup-daily.sh"
387
508
  rm -f "$BRAINLAYER_LIB_DIR/jsonl-backup.sh"
509
+ rm -f "$TIER0_WATCHDOG_DST"
510
+ rm -f "$THROUGHPUT_WATCHDOG_DST"
388
511
  ;;
389
512
  *)
390
- echo "Usage: $0 [index|watch|enrich|enrichment|decay|drain|hotlane|repair-fts|load [name]|unload [name]|checkpoint|backup|jsonl-backup|maintenance|maintenance-nightly|maintenance-weekly|health-check|all|remove]"
513
+ echo "Usage: $0 [index|watch|enrich|enrichment|decay|drain|hotlane|repair-fts|load [name]|unload [name]|checkpoint|backup|jsonl-backup|maintenance|maintenance-nightly|maintenance-weekly|health-check|tier0-watchdog|throughput-watchdog|p0-counter|all|remove]"
391
514
  exit 1
392
515
  ;;
393
516
  esac