brainlayer 1.2.0__tar.gz → 1.4.0__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 (878) hide show
  1. {brainlayer-1.2.0 → brainlayer-1.4.0}/.github/workflows/ci.yml +6 -0
  2. {brainlayer-1.2.0 → brainlayer-1.4.0}/.gitignore +13 -0
  3. {brainlayer-1.2.0 → brainlayer-1.4.0}/PKG-INFO +1 -1
  4. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Package.swift +3 -0
  5. brainlayer-1.4.0/brain-bar/Sources/BrainBar/BrainBarDashboardPanelController.swift +158 -0
  6. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarServer.swift +34 -1
  7. brainlayer-1.4.0/brain-bar/Sources/BrainBar/BrainBarSettingsActions.swift +72 -0
  8. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarStatusPopoverController.swift +9 -6
  9. brainlayer-1.4.0/brain-bar/Sources/BrainBar/BrainBarWindowRootView.swift +2789 -0
  10. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainDatabase.swift +388 -15
  11. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/AgentActivityMonitor.swift +106 -7
  12. brainlayer-1.4.0/brain-bar/Sources/BrainBar/Dashboard/BrainBarDashboardFixture.swift +99 -0
  13. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/DashboardMetricFormatter.swift +8 -0
  14. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/PipelineState.swift +114 -4
  15. brainlayer-1.4.0/brain-bar/Sources/BrainBar/Dashboard/SparklineRenderer.swift +1259 -0
  16. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/StatsCollector.swift +102 -0
  17. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/DesignTokens.swift +16 -0
  18. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Formatting/TextFormatter.swift +9 -1
  19. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HybridSearchHelperClient.swift +27 -0
  20. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionFeedView.swift +18 -2
  21. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/MCPRouter.swift +65 -19
  22. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/AgentActivityMonitorTests.swift +197 -0
  23. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarDashboardPanelControllerTests.swift +11 -6
  24. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/BrainBarDashboardSnapshotTests.swift +169 -0
  25. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarStatusPopoverControllerTests.swift +6 -6
  26. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/BrainBarWindowRootViewVectorDetailLayoutTests.swift +46 -0
  27. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/BrainDatabaseWindowedBucketsTests.swift +184 -0
  28. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/DashboardRedesignSnapshotTests.swift +147 -0
  29. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DashboardTests.swift +503 -8
  30. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DatabaseTests.swift +153 -0
  31. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/HybridSearchHelperClientTests.swift +32 -0
  32. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/MCPRouterTests.swift +167 -0
  33. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/RENDER_VERIFICATION.md +78 -0
  34. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/SparklineRendererIconTests.swift +44 -0
  35. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/SparklineSnapshotTests.swift +170 -0
  36. brainlayer-1.4.0/brain-bar/Tests/BrainBarTests/StatsCollectorTests.swift +102 -0
  37. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/TextFormatterParityTests.swift +56 -0
  38. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/bundle/Info.plist +2 -2
  39. brainlayer-1.4.0/docs/brew-layer-conformance.md +66 -0
  40. brainlayer-1.4.0/docs/operations/brainlayer-health-check.md +38 -0
  41. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/brainlayer-prompt-search.py +36 -1
  42. {brainlayer-1.2.0 → brainlayer-1.4.0}/pyproject.toml +1 -1
  43. brainlayer-1.4.0/scripts/braintrust_ingest.py +354 -0
  44. brainlayer-1.4.0/scripts/db_shrink_eval.py +186 -0
  45. brainlayer-1.4.0/scripts/db_shrink_migrate.py +7 -0
  46. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/hotlane_brainbar_daemon.py +99 -47
  47. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/brainlayer-env-run.sh +64 -5
  48. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.drain.plist +9 -11
  49. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.enrichment.plist +3 -1
  50. brainlayer-1.4.0/scripts/launchd/com.brainlayer.health-check.plist +50 -0
  51. brainlayer-1.4.0/scripts/launchd/com.brainlayer.hotlane-brainbar.plist +74 -0
  52. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/install.sh +19 -3
  53. brainlayer-1.4.0/scripts/reembed_backfill_loop.py +363 -0
  54. {brainlayer-1.2.0 → brainlayer-1.4.0}/server.json +2 -2
  55. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/__init__.py +1 -1
  56. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/cli/__init__.py +491 -1
  57. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/cloud_backfill.py +267 -59
  58. brainlayer-1.4.0/src/brainlayer/db_shrink.py +709 -0
  59. brainlayer-1.4.0/src/brainlayer/doctor.py +384 -0
  60. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/drain.py +297 -88
  61. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/enrichment_controller.py +113 -4
  62. brainlayer-1.4.0/src/brainlayer/health_check.py +770 -0
  63. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/index_new.py +1 -1
  64. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/__init__.py +17 -0
  65. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/_format.py +21 -1
  66. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/_shared.py +7 -2
  67. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/search_handler.py +202 -42
  68. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/store_handler.py +216 -20
  69. brainlayer-1.4.0/src/brainlayer/memory_types.py +13 -0
  70. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/classify.py +18 -31
  71. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/sanitize.py +132 -13
  72. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/search_repo.py +40 -3
  73. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/store.py +47 -8
  74. brainlayer-1.4.0/src/brainlayer/system_prompt_guard.py +30 -0
  75. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/vector_store.py +127 -4
  76. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/watcher.py +180 -59
  77. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/watcher_bridge.py +205 -101
  78. brainlayer-1.4.0/tests/BrainBarWindowRootView.test.swift +19 -0
  79. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_3tool_aliases.py +24 -0
  80. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_adaptive_injection.py +43 -0
  81. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_arbitration.py +305 -0
  82. brainlayer-1.4.0/tests/test_braintrust_ingest.py +196 -0
  83. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_classify.py +35 -0
  84. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_cli_enrich.py +36 -0
  85. brainlayer-1.4.0/tests/test_cli_launchd_mode_a.py +132 -0
  86. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_cloud_backfill.py +230 -6
  87. brainlayer-1.4.0/tests/test_db_shrink.py +335 -0
  88. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_deferred_embedding.py +156 -0
  89. brainlayer-1.4.0/tests/test_doctor.py +211 -0
  90. brainlayer-1.4.0/tests/test_drain_health.py +24 -0
  91. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrich_supervisor.py +149 -0
  92. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_controller.py +2 -2
  93. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_flex_integration.py +1 -0
  94. brainlayer-1.4.0/tests/test_hotlane_brainbar_daemon.py +405 -0
  95. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_hybrid_helper_contract.py +4 -2
  96. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_hybrid_search.py +17 -0
  97. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_installable_build.py +24 -1
  98. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_jsonl_watcher.py +81 -2
  99. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_launchd_hygiene.py +115 -9
  100. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_format.py +14 -0
  101. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_sanitize.py +81 -0
  102. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_chunk_id.py +55 -1
  103. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_filter_params.py +32 -0
  104. brainlayer-1.4.0/tests/test_search_handler.py +672 -0
  105. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_profile.py +24 -1
  106. brainlayer-1.4.0/tests/test_stability_health_check.py +534 -0
  107. brainlayer-1.4.0/tests/test_store_handler.py +1179 -0
  108. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_watcher_bridge.py +71 -0
  109. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_write_queue.py +302 -1
  110. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_write_resilience_under_load.py +4 -2
  111. brainlayer-1.2.0/brain-bar/Sources/BrainBar/BrainBarDashboardPanelController.swift +0 -65
  112. brainlayer-1.2.0/brain-bar/Sources/BrainBar/BrainBarSettingsActions.swift +0 -9
  113. brainlayer-1.2.0/brain-bar/Sources/BrainBar/BrainBarWindowRootView.swift +0 -1508
  114. brainlayer-1.2.0/brain-bar/Sources/BrainBar/Dashboard/SparklineRenderer.swift +0 -405
  115. brainlayer-1.2.0/brain-bar/Tests/BrainBarTests/AgentActivityMonitorTests.swift +0 -58
  116. brainlayer-1.2.0/eval_results/abcde_results_summary.md +0 -13
  117. brainlayer-1.2.0/eval_results/db-shrink-2026-06-01.json +0 -116
  118. brainlayer-1.2.0/eval_results/kg-phase1-dryrun-2026-06-05.json +0 -2883
  119. brainlayer-1.2.0/eval_results/kg-phase1-flag-batch-2026-06-05.json +0 -21978
  120. brainlayer-1.2.0/tests/test_hotlane_brainbar_daemon.py +0 -139
  121. brainlayer-1.2.0/tests/test_search_handler.py +0 -247
  122. brainlayer-1.2.0/tests/test_store_handler.py +0 -313
  123. {brainlayer-1.2.0 → brainlayer-1.4.0}/.claude-plugin/marketplace.json +0 -0
  124. {brainlayer-1.2.0 → brainlayer-1.4.0}/.claude.local.md.example +0 -0
  125. {brainlayer-1.2.0 → brainlayer-1.4.0}/.gitattributes +0 -0
  126. {brainlayer-1.2.0 → brainlayer-1.4.0}/.githooks/pre-push +0 -0
  127. {brainlayer-1.2.0 → brainlayer-1.4.0}/.github/workflows/docs.yml +0 -0
  128. {brainlayer-1.2.0 → brainlayer-1.4.0}/.github/workflows/publish.yml +0 -0
  129. {brainlayer-1.2.0 → brainlayer-1.4.0}/.mcp.json.example +0 -0
  130. {brainlayer-1.2.0 → brainlayer-1.4.0}/AGENTS.md +0 -0
  131. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_ACTION_ITEMS.md +0 -0
  132. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_CRITICAL_ISSUES.md +0 -0
  133. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_FINAL_STATUS.md +0 -0
  134. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_PR_COMMENT_HELPER_FAST_PROFILE.md +0 -0
  135. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REREVIEW_P2_KG_CLEANUP.md +0 -0
  136. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW.md +0 -0
  137. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_352.md +0 -0
  138. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_BRAINBAR_HELPER_FAST_PROFILE.md +0 -0
  139. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_DEFLAKE_AGENT_PROFILES.md +0 -0
  140. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FINDINGS.md +0 -0
  141. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FIX_PYTHON_CI.md +0 -0
  142. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FTS_RECALL.md +0 -0
  143. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_HOOKS_FAIL_LOUD.md +0 -0
  144. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_P2_KG_CLEANUP.md +0 -0
  145. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_P6B.md +0 -0
  146. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_QUICK_CAPTURE.md +0 -0
  147. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_QUICK_CAPTURE_UX_FIX.md +0 -0
  148. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_RESTORE_CAPTURE_ACTIONS.md +0 -0
  149. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_SUMMARY.md +0 -0
  150. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_SUMMARY.md +0 -0
  151. {brainlayer-1.2.0 → brainlayer-1.4.0}/BUGBOT_SUMMARY_HELPER_FAST_PROFILE.md +0 -0
  152. {brainlayer-1.2.0 → brainlayer-1.4.0}/CHANGELOG.md +0 -0
  153. {brainlayer-1.2.0 → brainlayer-1.4.0}/CLAUDE.md +0 -0
  154. {brainlayer-1.2.0 → brainlayer-1.4.0}/CODEOWNERS +0 -0
  155. {brainlayer-1.2.0 → brainlayer-1.4.0}/CONTRIBUTING.md +0 -0
  156. {brainlayer-1.2.0 → brainlayer-1.4.0}/LICENSE +0 -0
  157. {brainlayer-1.2.0 → brainlayer-1.4.0}/README.md +0 -0
  158. {brainlayer-1.2.0 → brainlayer-1.4.0}/SLICE-B-BRIEF.md +0 -0
  159. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-combined.jsonl +0 -0
  160. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-retry1.jsonl +0 -0
  161. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy.jsonl +0 -0
  162. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-before-oldprompt-validation-off.jsonl +0 -0
  163. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined-summary.json +0 -0
  164. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined.jsonl +0 -0
  165. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1-summary.json +0 -0
  166. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1.jsonl +0 -0
  167. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-summary.json +0 -0
  168. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash.jsonl +0 -0
  169. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/recommended-36k-batch-backfill-plan.md +0 -0
  170. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-after-retry1.jsonl +0 -0
  171. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-cloudsafe-pilot50.jsonl +0 -0
  172. {brainlayer-1.2.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-judge-retry1.jsonl +0 -0
  173. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/.gitignore +0 -0
  174. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Package.resolved +0 -0
  175. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Scripts/brainbar_stdio_adapter.py +0 -0
  176. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarApp.swift +0 -0
  177. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarAppSupport.swift +0 -0
  178. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarCommandBar.swift +0 -0
  179. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarInstanceLock.swift +0 -0
  180. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarProcessControl.swift +0 -0
  181. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarRuntime.swift +0 -0
  182. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarSettingsView.swift +0 -0
  183. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarURLAction.swift +0 -0
  184. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarWindowState.swift +0 -0
  185. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBusClient.swift +0 -0
  186. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBusEvent.swift +0 -0
  187. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainLayerConfig.swift +0 -0
  188. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/BrainBarLivePulse.swift +0 -0
  189. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/DaemonHealthMonitor.swift +0 -0
  190. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/StatusPopoverView.swift +0 -0
  191. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/DegradationState.swift +0 -0
  192. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Formatters.swift +0 -0
  193. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HotkeyManager.swift +0 -0
  194. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HotkeyRouteStatus.swift +0 -0
  195. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionContinuation.swift +0 -0
  196. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionEvent.swift +0 -0
  197. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionPresentation.swift +0 -0
  198. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionStore.swift +0 -0
  199. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionSummaryView.swift +0 -0
  200. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/EntityCache.swift +0 -0
  201. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasLayout.swift +0 -0
  202. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasMode.swift +0 -0
  203. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
  204. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGCanvasView.swift +0 -0
  205. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdge.swift +0 -0
  206. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdgeView.swift +0 -0
  207. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNode.swift +0 -0
  208. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNodeView.swift +0 -0
  209. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGRelationPresentation.swift +0 -0
  210. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSidebarView.swift +0 -0
  211. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSimulationController.swift +0 -0
  212. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGViewModel.swift +0 -0
  213. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
  214. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/MCPFraming.swift +0 -0
  215. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/DigestResult.swift +0 -0
  216. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/EntityCard.swift +0 -0
  217. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/KGSearchResult.swift +0 -0
  218. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/KGTemporalDate.swift +0 -0
  219. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/SearchResult.swift +0 -0
  220. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/StatsResult.swift +0 -0
  221. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCaptureController.swift +0 -0
  222. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCapturePanel.swift +0 -0
  223. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCapturePanelState.swift +0 -0
  224. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchFilters.swift +0 -0
  225. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchPanelController.swift +0 -0
  226. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchProfileLogger.swift +0 -0
  227. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchQueryActor.swift +0 -0
  228. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchViewModel.swift +0 -0
  229. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/ChunkConversationSheet.swift +0 -0
  230. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultCard.swift +0 -0
  231. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultsList.swift +0 -0
  232. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/WrappingPillLayout.swift +0 -0
  233. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/ExpirationPill.swift +0 -0
  234. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarCommandBar.swift +0 -0
  235. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDaemonMain.swift +0 -0
  236. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDashboardPanelController.swift +0 -0
  237. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarInstanceLock.swift +0 -0
  238. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarProcessControl.swift +0 -0
  239. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarRuntime.swift +0 -0
  240. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarServer.swift +0 -0
  241. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarSettingsActions.swift +0 -0
  242. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarStatusPopoverController.swift +0 -0
  243. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarURLAction.swift +0 -0
  244. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowRootView.swift +0 -0
  245. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowState.swift +0 -0
  246. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBusClient.swift +0 -0
  247. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBusEvent.swift +0 -0
  248. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainDatabase.swift +0 -0
  249. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/AgentActivityMonitor.swift +0 -0
  250. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/BrainBarLivePulse.swift +0 -0
  251. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DaemonHealthMonitor.swift +0 -0
  252. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DashboardMetricFormatter.swift +0 -0
  253. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/PipelineState.swift +0 -0
  254. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/SparklineRenderer.swift +0 -0
  255. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatsCollector.swift +0 -0
  256. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatusPopoverView.swift +0 -0
  257. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/DegradationState.swift +0 -0
  258. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/DesignTokens.swift +0 -0
  259. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Formatters.swift +0 -0
  260. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Formatting/TextFormatter.swift +0 -0
  261. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HotkeyManager.swift +0 -0
  262. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HotkeyRouteStatus.swift +0 -0
  263. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HybridSearchHelperClient.swift +0 -0
  264. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionContinuation.swift +0 -0
  265. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionEvent.swift +0 -0
  266. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionFeedView.swift +0 -0
  267. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionPresentation.swift +0 -0
  268. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionStore.swift +0 -0
  269. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionSummaryView.swift +0 -0
  270. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/EntityCache.swift +0 -0
  271. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasLayout.swift +0 -0
  272. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasMode.swift +0 -0
  273. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
  274. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGCanvasView.swift +0 -0
  275. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdge.swift +0 -0
  276. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdgeView.swift +0 -0
  277. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNode.swift +0 -0
  278. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNodeView.swift +0 -0
  279. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGRelationPresentation.swift +0 -0
  280. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSidebarView.swift +0 -0
  281. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSimulationController.swift +0 -0
  282. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGViewModel.swift +0 -0
  283. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
  284. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/MCPFraming.swift +0 -0
  285. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/MCPRouter.swift +0 -0
  286. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/DigestResult.swift +0 -0
  287. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/EntityCard.swift +0 -0
  288. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/KGSearchResult.swift +0 -0
  289. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/KGTemporalDate.swift +0 -0
  290. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/SearchResult.swift +0 -0
  291. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/StatsResult.swift +0 -0
  292. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCaptureController.swift +0 -0
  293. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanel.swift +0 -0
  294. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanelState.swift +0 -0
  295. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchFilters.swift +0 -0
  296. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchPanelController.swift +0 -0
  297. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchProfileLogger.swift +0 -0
  298. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchQueryActor.swift +0 -0
  299. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchViewModel.swift +0 -0
  300. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/ChunkConversationSheet.swift +0 -0
  301. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultCard.swift +0 -0
  302. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultsList.swift +0 -0
  303. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/WrappingPillLayout.swift +0 -0
  304. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/ExpirationPill.swift +0 -0
  305. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarLifecycleWatchdog.swift +0 -0
  306. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarRestartHandoff.swift +0 -0
  307. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarDaemonTests/BrainBarDaemonLaunchModeTests.swift +0 -0
  308. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarReliabilityTests.swift +0 -0
  309. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarRuntimeWiringTests.swift +0 -0
  310. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsSnapshotTests.swift +0 -0
  311. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsViewModelTests.swift +0 -0
  312. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarStartupRecoveryTests.swift +0 -0
  313. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarUXLogicTests.swift +0 -0
  314. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarWindowStateTests.swift +0 -0
  315. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBusEventHubTests.swift +0 -0
  316. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainLayerConfigTests.swift +0 -0
  317. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/ChunkConversationTests.swift +0 -0
  318. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DegradationStateTests.swift +0 -0
  319. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DesignTokensTests.swift +0 -0
  320. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/FormattersTests.swift +0 -0
  321. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionContinuationTests.swift +0 -0
  322. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionConversationSelectionTests.swift +0 -0
  323. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionEventTests.swift +0 -0
  324. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionPresentationTests.swift +0 -0
  325. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionStoreTests.swift +0 -0
  326. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGAtlasLayoutTests.swift +0 -0
  327. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGAtlasPresentationTests.swift +0 -0
  328. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGBadgeConsistencyTests.swift +0 -0
  329. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGExpirationRenderingTests.swift +0 -0
  330. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGSidebarSynopsisTests.swift +0 -0
  331. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KnowledgeGraphTests.swift +0 -0
  332. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/MCPFramingTests.swift +0 -0
  333. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/PopoverTabTests.swift +0 -0
  334. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCaptureConversationTests.swift +0 -0
  335. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCapturePanelTests.swift +0 -0
  336. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCaptureTests.swift +0 -0
  337. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/RecordingHybridSearchClient.swift +0 -0
  338. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchFiltersTests.swift +0 -0
  339. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchPanelControllerTests.swift +0 -0
  340. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchQueryActorTests.swift +0 -0
  341. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchResultPresentationTests.swift +0 -0
  342. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchViewModelTests.swift +0 -0
  343. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SocketIntegrationTests.swift +0 -0
  344. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/StabilityFixTests.swift +0 -0
  345. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/build-app.sh +0 -0
  346. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/bundle/com.brainlayer.brainbar-daemon.plist +0 -0
  347. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/bundle/com.brainlayer.brainbar.plist +0 -0
  348. {brainlayer-1.2.0 → brainlayer-1.4.0}/brain-bar/karabiner/brainbar-f4.json +0 -0
  349. {brainlayer-1.2.0 → brainlayer-1.4.0}/bugbot-review-notes.md +0 -0
  350. {brainlayer-1.2.0 → brainlayer-1.4.0}/bugbot_pr_comment.md +0 -0
  351. {brainlayer-1.2.0 → brainlayer-1.4.0}/contracts/engine-ui-contract.md +0 -0
  352. {brainlayer-1.2.0 → brainlayer-1.4.0}/contracts/entity-types.yaml +0 -0
  353. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/abcde-experiment-isolation.md +0 -0
  354. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/adr/0000-template.md +0 -0
  355. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/adr/0001-sqlite-vec-over-dedicated-vector-db.md +0 -0
  356. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/adr/0002-reciprocal-rank-fusion-for-hybrid-search.md +0 -0
  357. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/arbitration.md +0 -0
  358. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/architecture/MODULE-MAP.md +0 -0
  359. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/architecture.md +0 -0
  360. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/archive/chat-based-analysis-design.md +0 -0
  361. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/archive/chat-tags-example.yaml +0 -0
  362. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/archive/communication-analysis.md +0 -0
  363. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/archive/hierarchical-clustering-deep-research.md +0 -0
  364. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/archive/hierarchical-clustering-research.txt +0 -0
  365. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/archive/research-chat-based-analysis.md +0 -0
  366. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/archive/research-prompt-embeddings.md +0 -0
  367. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/assets/logo.svg +0 -0
  368. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/backup-strategy.md +0 -0
  369. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/configuration.md +0 -0
  370. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/contributing.md +0 -0
  371. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/data-locations.md +0 -0
  372. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/embedding-setup.md +0 -0
  373. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/enrichment-provider-agnostic-design.md +0 -0
  374. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/enrichment-runbook.md +0 -0
  375. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/enrichment.md +0 -0
  376. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/index.md +0 -0
  377. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/kg-spec.md +0 -0
  378. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/local-models-guide.md +0 -0
  379. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/mcp-config.md +0 -0
  380. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/mcp-tools.md +0 -0
  381. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/orqi-batch-contract.md +0 -0
  382. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-02-25-phase-3-brain-digest.md +0 -0
  383. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-02-25-phase-6-sentiment.md +0 -0
  384. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-03-30-enrichment-launchagent.md +0 -0
  385. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-03-31-phase2-search-window-design.md +0 -0
  386. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-03-31-phase2-search-window.md +0 -0
  387. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-04-05-p1a-fts5-health.md +0 -0
  388. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-04-05-p1b-eval-framework.md +0 -0
  389. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-dashboard-flow-collab.md +0 -0
  390. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-dashboard-flow.md +0 -0
  391. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-injections-graph-hybrid.md +0 -0
  392. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-06-01-db-shrink-fts5-dedup.md +0 -0
  393. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-06-02-phoenix-eval-integration.md +0 -0
  394. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/plans/2026-06-14-reembed-unvectored-backlog.md +0 -0
  395. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/quickstart.md +0 -0
  396. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/launch-readiness-audit.md +0 -0
  397. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/session-enrichment/README.md +0 -0
  398. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/session-enrichment/auto-extracting-learnings.md +0 -0
  399. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/session-enrichment/brainstore-write-tools.md +0 -0
  400. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/session-enrichment/cli-ux-patterns.md +0 -0
  401. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/session-enrichment/conversation-reconstruction.md +0 -0
  402. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/session-enrichment/prompts.md +0 -0
  403. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/research/session-enrichment/session-enrichment-architecture.md +0 -0
  404. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/roadmap.md +0 -0
  405. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/showcase-claude-collab-discovery.md +0 -0
  406. {brainlayer-1.2.0 → brainlayer-1.4.0}/docs/stylesheets/extra.css +0 -0
  407. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.claude-plugin/plugin.json +0 -0
  408. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.gitignore +0 -0
  409. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.mcp.json +0 -0
  410. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/hooks.json +0 -0
  411. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/session-start.sh +0 -0
  412. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/session-stop.sh +0 -0
  413. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/tool-error.sh +0 -0
  414. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/tool-observe.sh +0 -0
  415. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/scripts/brainbar-hook.py +0 -0
  416. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/scripts/queue-flusher.py +0 -0
  417. {brainlayer-1.2.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/skills/memory/SKILL.md +0 -0
  418. {brainlayer-1.2.0 → brainlayer-1.4.0}/findings.md +0 -0
  419. {brainlayer-1.2.0 → brainlayer-1.4.0}/greptile.json +0 -0
  420. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/brainbar-postcompact.py +0 -0
  421. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/brainbar-prompt-capture.py +0 -0
  422. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/brainbar-stop-index.py +0 -0
  423. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/brainlayer-session-start.py +0 -0
  424. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/dedup_coordination.py +0 -0
  425. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/post-commit.py +0 -0
  426. {brainlayer-1.2.0 → brainlayer-1.4.0}/hooks/session-cleanup.py +0 -0
  427. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/index.html +0 -0
  428. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/brainlayer.svg +0 -0
  429. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/claude.svg +0 -0
  430. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/cursor.svg +0 -0
  431. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/gemini.svg +0 -0
  432. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/kiro.svg +0 -0
  433. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/openai.svg +0 -0
  434. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/vscode.svg +0 -0
  435. {brainlayer-1.2.0 → brainlayer-1.4.0}/landing/logos/zed.svg +0 -0
  436. {brainlayer-1.2.0 → brainlayer-1.4.0}/launchd/com.brainlayer.jsonl-backup.plist +0 -0
  437. {brainlayer-1.2.0 → brainlayer-1.4.0}/launchd/com.brainlayer.watch.plist +0 -0
  438. {brainlayer-1.2.0 → brainlayer-1.4.0}/launchd/install-newsyslog.sh +0 -0
  439. {brainlayer-1.2.0 → brainlayer-1.4.0}/launchd/newsyslog.d/README.md +0 -0
  440. {brainlayer-1.2.0 → brainlayer-1.4.0}/launchd/newsyslog.d/brainlayer.conf +0 -0
  441. {brainlayer-1.2.0 → brainlayer-1.4.0}/macroscope.md +0 -0
  442. {brainlayer-1.2.0 → brainlayer-1.4.0}/migrations/002_decay_columns.sql +0 -0
  443. {brainlayer-1.2.0 → brainlayer-1.4.0}/migrations/003_raw_entities_json.sql +0 -0
  444. {brainlayer-1.2.0 → brainlayer-1.4.0}/migrations/004_enrich_status.sql +0 -0
  445. {brainlayer-1.2.0 → brainlayer-1.4.0}/mkdocs.yml +0 -0
  446. {brainlayer-1.2.0 → brainlayer-1.4.0}/overrides/main.html +0 -0
  447. {brainlayer-1.2.0 → brainlayer-1.4.0}/prd-json/index.json +0 -0
  448. {brainlayer-1.2.0 → brainlayer-1.4.0}/prd-json/stories/BUG-005.json +0 -0
  449. {brainlayer-1.2.0 → brainlayer-1.4.0}/prd-json/stories/MP-003.json +0 -0
  450. {brainlayer-1.2.0 → brainlayer-1.4.0}/prd-json/stories/MP-004.json +0 -0
  451. {brainlayer-1.2.0 → brainlayer-1.4.0}/prd-json/stories/US-001.json +0 -0
  452. {brainlayer-1.2.0 → brainlayer-1.4.0}/prd-json/stories/US-002.json +0 -0
  453. {brainlayer-1.2.0 → brainlayer-1.4.0}/progress.txt +0 -0
  454. {brainlayer-1.2.0 → brainlayer-1.4.0}/results/abcde_n893_summary.json +0 -0
  455. {brainlayer-1.2.0 → brainlayer-1.4.0}/results/abcde_n893_summary.md +0 -0
  456. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/__init__.py +0 -0
  457. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/abcde_report.py +0 -0
  458. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill-context.py +0 -0
  459. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill-created-at.py +0 -0
  460. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill-metadata.py +0 -0
  461. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill_chunk_origin_provenance.py +0 -0
  462. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill_content_class.py +0 -0
  463. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill_data/.gitignore +0 -0
  464. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill_decay.py +0 -0
  465. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill_dedupe.py +0 -0
  466. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill_kg_promotion.py +0 -0
  467. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/backfill_orchestrate.sh +0 -0
  468. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/batch_submit_paced.py +0 -0
  469. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/build_qrels.py +0 -0
  470. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/calibrate_importance.py +0 -0
  471. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/classify-all.py +0 -0
  472. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/cleanup-profanity-chunks.py +0 -0
  473. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/cleanup_stale_mcp.py +0 -0
  474. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/cloud_backfill.py +0 -0
  475. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/cloud_stream.py +0 -0
  476. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/dedup_entities.py +0 -0
  477. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/diarize_episodes.py +0 -0
  478. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/drain_daemon.py +0 -0
  479. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/enrich_recent.py +0 -0
  480. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/enrichment_backfill.py +0 -0
  481. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/enrichment_llm_judge.py +0 -0
  482. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/enrichment_pilot.py +0 -0
  483. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/enrichment_quality_benchmark.py +0 -0
  484. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/export_lexical_defense_snapshot.py +0 -0
  485. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/generate-fixtures.sh +0 -0
  486. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/generate_abcde_variants.py +0 -0
  487. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/generate_style_card.py +0 -0
  488. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/hot_currentness_benchmark.py +0 -0
  489. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/index_youtube.py +0 -0
  490. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/install-karabiner-rule.sh +0 -0
  491. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_backfill.py +0 -0
  492. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_cleanup.py +0 -0
  493. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_cleanup_apply.py +0 -0
  494. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_cleanup_dryrun.py +0 -0
  495. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_dedup.py +0 -0
  496. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_entity_dedup.py +0 -0
  497. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_entity_judge.py +0 -0
  498. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_flag_batch.py +0 -0
  499. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_p2_crosstype_cleanup.py +0 -0
  500. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_p2_safe_cleanup.py +0 -0
  501. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_rebuild.py +0 -0
  502. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_review_session.py +0 -0
  503. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_session_finish.py +0 -0
  504. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/kg_session_harvest.py +0 -0
  505. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/label-chunks.py +0 -0
  506. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/backup-daily.sh +0 -0
  507. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/brainlayer.env.example +0 -0
  508. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.backup-daily.plist +0 -0
  509. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.decay.plist +0 -0
  510. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.index.plist +0 -0
  511. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.jsonl-backup.plist +0 -0
  512. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.maintenance-nightly.plist +0 -0
  513. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.maintenance-weekly.plist +0 -0
  514. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.repair-fts.plist +0 -0
  515. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.wal-checkpoint.plist +0 -0
  516. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.watch.plist +0 -0
  517. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/launchd/jsonl-backup.sh +0 -0
  518. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/maintenance/brainlayer_maintenance.py +0 -0
  519. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/merge_queue.py +0 -0
  520. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/mine_corrections.py +0 -0
  521. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/mine_failed_queries.py +0 -0
  522. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/mine_frustrations.py +0 -0
  523. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/monitor_batch_reenrichment.py +0 -0
  524. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/p0_longitudinal_count.py +0 -0
  525. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/phase-boundaries.py +0 -0
  526. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/pre-label.py +0 -0
  527. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/promote_tag_entities.py +0 -0
  528. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/purge_orphaned_vectors.py +0 -0
  529. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/quarantine_noise.py +0 -0
  530. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/rebuild_vec0_tables.py +0 -0
  531. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/reembed_bge_m3.py +0 -0
  532. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/reembed_bgem3.py +0 -0
  533. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/replay_brain_store_fallbacks.py +0 -0
  534. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/resimhash_dedupe.py +0 -0
  535. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/run-second-analysis-after-first.sh +0 -0
  536. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/run_abcde_enrich.py +0 -0
  537. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/run_benchmark.py +0 -0
  538. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/run_decay_job.py +0 -0
  539. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/run_evals.py +0 -0
  540. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/run_tests.sh +0 -0
  541. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/scope-config.py +0 -0
  542. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/score_entity_health.py +0 -0
  543. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/seed_agent_profiles.py +0 -0
  544. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/seed_aliases.py +0 -0
  545. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/smoke/README.md +0 -0
  546. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/smoke/firstturn-brainlayer-smoke.sh +0 -0
  547. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/smoke/repogolem_mcp_transport_smoke.py +0 -0
  548. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/tombstone_singleton_tags.py +0 -0
  549. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/train-setfit.py +0 -0
  550. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/verify_hebrew_search.py +0 -0
  551. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/vertex_poll_import.py +0 -0
  552. {brainlayer-1.2.0 → brainlayer-1.4.0}/scripts/wal_checkpoint.py +0 -0
  553. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/_helpers.py +0 -0
  554. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/agent_profiles.py +0 -0
  555. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/backup_daily.py +0 -0
  556. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/bitemporal.py +0 -0
  557. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/brainbar_hybrid_helper.py +0 -0
  558. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/calibrate.py +0 -0
  559. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/chunk_origin.py +0 -0
  560. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/chunk_origin_backfill.py +0 -0
  561. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/classify.py +0 -0
  562. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/claude_paths.py +0 -0
  563. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/cli/wizard.py +0 -0
  564. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/cli_new.py +0 -0
  565. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/clustering.py +0 -0
  566. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/config.py +0 -0
  567. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/content_class.py +0 -0
  568. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/correction_judge.py +0 -0
  569. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/decay.py +0 -0
  570. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/decay_backfill.py +0 -0
  571. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/decay_job.py +0 -0
  572. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/dedupe.py +0 -0
  573. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/embeddings.py +0 -0
  574. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/engine.py +0 -0
  575. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/__init__.py +0 -0
  576. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_enrich_runner.py +0 -0
  577. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_variants.py +0 -0
  578. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_variants.yaml +0 -0
  579. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/benchmark.py +0 -0
  580. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_gold.py +0 -0
  581. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_graders.py +0 -0
  582. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_judge.py +0 -0
  583. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_llm_judge.py +0 -0
  584. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_quality_benchmark.py +0 -0
  585. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/experiment_store.py +0 -0
  586. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/fixtures/README.md +0 -0
  587. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/labeling/enrichment-labeler.html +0 -0
  588. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/__init__.py +0 -0
  589. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/__main__.py +0 -0
  590. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/baseline_store.py +0 -0
  591. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/cli.py +0 -0
  592. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/models.py +0 -0
  593. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/phoenix_client.py +0 -0
  594. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/regression_gate.py +0 -0
  595. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/triggers.py +0 -0
  596. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/fallback_replay.py +0 -0
  597. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/git_learning.py +0 -0
  598. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/hooks/__init__.py +0 -0
  599. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/hooks/indexer.py +0 -0
  600. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/ingest/__init__.py +0 -0
  601. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/ingest/codex.py +0 -0
  602. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/ingest_guard.py +0 -0
  603. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/isolation_proof.py +0 -0
  604. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/jsonl_backup.py +0 -0
  605. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg/__init__.py +0 -0
  606. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg_cleanup.py +0 -0
  607. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg_judge.py +0 -0
  608. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg_promotion.py +0 -0
  609. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg_repo.py +0 -0
  610. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg_review_session.py +0 -0
  611. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg_session_finish.py +0 -0
  612. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/kg_session_harvest.py +0 -0
  613. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/lexical_defense.py +0 -0
  614. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/lexical_defense_dictionary.json +0 -0
  615. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/maintenance.py +0 -0
  616. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/enrich_handler.py +0 -0
  617. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/entity_handler.py +0 -0
  618. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/mcp/tags_handler.py +0 -0
  619. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/migrate.py +0 -0
  620. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/parent_death.py +0 -0
  621. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/paths.py +0 -0
  622. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/phonetic.py +0 -0
  623. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/__init__.py +0 -0
  624. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/agent_enrichment.py +0 -0
  625. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/analyze_communication.py +0 -0
  626. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/batch_extraction.py +0 -0
  627. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/brain_graph.py +0 -0
  628. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/chat_tags.py +0 -0
  629. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/chunk.py +0 -0
  630. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/cluster_sampling.py +0 -0
  631. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/code_intelligence.py +0 -0
  632. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/correction_detection.py +0 -0
  633. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/correction_mining.py +0 -0
  634. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/digest.py +0 -0
  635. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/enrichment.py +0 -0
  636. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/enrichment_tiers.py +0 -0
  637. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/entity_extraction.py +0 -0
  638. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/entity_resolution.py +0 -0
  639. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract.py +0 -0
  640. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_claude_desktop.py +0 -0
  641. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_corrections.py +0 -0
  642. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_markdown.py +0 -0
  643. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_whatsapp.py +0 -0
  644. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/frustration_mining.py +0 -0
  645. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/git_overlay.py +0 -0
  646. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/kg_extraction.py +0 -0
  647. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/kg_extraction_groq.py +0 -0
  648. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/longitudinal_analyzer.py +0 -0
  649. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/obsidian_export.py +0 -0
  650. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/operation_grouping.py +0 -0
  651. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/plan_linking.py +0 -0
  652. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/rate_limiter.py +0 -0
  653. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/semantic_style.py +0 -0
  654. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/sentiment.py +0 -0
  655. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/session_enrichment.py +0 -0
  656. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/style_embed.py +0 -0
  657. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/style_index.py +0 -0
  658. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/tag_entity_promotion.py +0 -0
  659. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/temporal_chains.py +0 -0
  660. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/time_batcher.py +0 -0
  661. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/unified_timeline.py +0 -0
  662. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/write_queue.py +0 -0
  663. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/provenance.py +0 -0
  664. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/provenance_autosupersede.py +0 -0
  665. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/provenance_integration.py +0 -0
  666. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/queue_io.py +0 -0
  667. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/queue_merge.py +0 -0
  668. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/reembed_backfill.py +0 -0
  669. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/scoping.py +0 -0
  670. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/search_profile.py +0 -0
  671. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/session_repo.py +0 -0
  672. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/setup.py +0 -0
  673. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/storage.py +0 -0
  674. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/tag_normalization.py +0 -0
  675. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/taxonomy.json +0 -0
  676. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/telemetry.py +0 -0
  677. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/types.py +0 -0
  678. {brainlayer-1.2.0 → brainlayer-1.4.0}/src/brainlayer/wal_checkpoint.py +0 -0
  679. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/__init__.py +0 -0
  680. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/conftest.py +0 -0
  681. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/eval/phoenix_gate/test_phoenix_gate.py +0 -0
  682. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/eval_baselines.json +0 -0
  683. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/eval_mcp_brainlayer.json +0 -0
  684. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/eval_pr3_relevance_qrels.json +0 -0
  685. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/eval_qrels.json +0 -0
  686. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/fixtures/README.md +0 -0
  687. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/fixtures/stale_index_query.json +0 -0
  688. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/mock_mcp/__init__.py +0 -0
  689. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/mock_mcp/assertions.py +0 -0
  690. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/mock_mcp/base.py +0 -0
  691. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_brainlayer.py +0 -0
  692. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_github.py +0 -0
  693. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_voicelayer.py +0 -0
  694. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/regression/__init__.py +0 -0
  695. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/regression/_stale_index_fixture.py +0 -0
  696. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/regression/test_drift_detection.py +0 -0
  697. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/regression/test_fts5_determinism.sh +0 -0
  698. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/stale_index_query.test.ts +0 -0
  699. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_6pm_entity_upgrades.py +0 -0
  700. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_abcde_enrich_runner.py +0 -0
  701. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_abcde_report.py +0 -0
  702. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_abcde_variants.py +0 -0
  703. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_agent_profiles.py +0 -0
  704. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_atomic_brick_schema.py +0 -0
  705. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_audit_recursion_filter.py +0 -0
  706. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_audit_search_quality.py +0 -0
  707. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_auto_enrich.py +0 -0
  708. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_backup_daily.py +0 -0
  709. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_batch_extraction.py +0 -0
  710. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_batch_reenrichment_setup.py +0 -0
  711. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_behavioral_pr_loop.py +0 -0
  712. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_bitemporal_phase1.py +0 -0
  713. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_brain_graph_compat.py +0 -0
  714. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_brain_tags.py +0 -0
  715. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_brainbar_build_app_guards.py +0 -0
  716. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_brainbar_helper_fast_profile.py +0 -0
  717. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_brainbar_hybrid_helper.py +0 -0
  718. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_brainstore.py +0 -0
  719. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_calibrate_importance.py +0 -0
  720. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_chat_list.py +0 -0
  721. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_chunk.py +0 -0
  722. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_chunk_lifecycle.py +0 -0
  723. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_chunk_origin_provenance.py +0 -0
  724. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_chunker.py +0 -0
  725. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_cleanup_profanity_chunks.py +0 -0
  726. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_cli_direct_sqlite.py +0 -0
  727. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_cli_provenance.py +0 -0
  728. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_code_intelligence.py +0 -0
  729. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_concurrent_enrichment.py +0 -0
  730. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_conditional_hooks.py +0 -0
  731. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_consumer_scoping.py +0 -0
  732. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_content_class.py +0 -0
  733. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_context_pipeline.py +0 -0
  734. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_correction_detection_gate.py +0 -0
  735. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_correction_judge.py +0 -0
  736. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_correction_mining.py +0 -0
  737. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_dashboard.py +0 -0
  738. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_db_lock_resilience.py +0 -0
  739. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_decay.py +0 -0
  740. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_dedup_coordination.py +0 -0
  741. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_dedupe.py +0 -0
  742. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_deferred_mcp_provenance_guard.py +0 -0
  743. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_dev_dependencies.py +0 -0
  744. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_digest_connect.py +0 -0
  745. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_digest_enrichment.py +0 -0
  746. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_digest_pipeline_v2.py +0 -0
  747. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_embedding_truncation.py +0 -0
  748. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_engine.py +0 -0
  749. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_engine_package_boundary.py +0 -0
  750. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrich_defaults.py +0 -0
  751. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_bounded_commit.py +0 -0
  752. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_data_integrity.py +0 -0
  753. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_entity_schema.py +0 -0
  754. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_fallback.py +0 -0
  755. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_gold.py +0 -0
  756. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_graders.py +0 -0
  757. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_judge.py +0 -0
  758. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_llm_judge.py +0 -0
  759. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_quality_benchmark.py +0 -0
  760. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_reliability.py +0 -0
  761. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_threshold.py +0 -0
  762. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_tiers.py +0 -0
  763. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_tiers_agent_sources.py +0 -0
  764. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_enrichment_v2.py +0 -0
  765. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_entity_contracts.py +0 -0
  766. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_entity_dedup.py +0 -0
  767. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_entity_extraction.py +0 -0
  768. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_entity_fact_correction_judge.py +0 -0
  769. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_entity_parent_relations.py +0 -0
  770. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_entity_type_gate.py +0 -0
  771. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_entity_type_sync.py +0 -0
  772. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_eval_baselines.py +0 -0
  773. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_eval_framework.py +0 -0
  774. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_experiment_store.py +0 -0
  775. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_extract_markdown.py +0 -0
  776. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_fallback_replay.py +0 -0
  777. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_follow_up_rewrite.py +0 -0
  778. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_frustration_mining.py +0 -0
  779. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_fts5_health.py +0 -0
  780. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_git_learning.py +0 -0
  781. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_groq_backend.py +0 -0
  782. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_groq_rate_limit.py +0 -0
  783. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_hebrew_alias.py +0 -0
  784. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_hook_slim.py +0 -0
  785. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_hot_currentness_benchmark.py +0 -0
  786. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_hybrid_search_decay.py +0 -0
  787. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_ingest_codex.py +0 -0
  788. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_ingest_guard.py +0 -0
  789. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_isolation_proof_harness.py +0 -0
  790. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_issue_type.py +0 -0
  791. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_jsonl_backup.py +0 -0
  792. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_boost_reconnect.py +0 -0
  793. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_cleanup.py +0 -0
  794. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_entity_dedup.py +0 -0
  795. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_extraction.py +0 -0
  796. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_hybrid_retrieval.py +0 -0
  797. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_judge.py +0 -0
  798. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_p2_crosstype_cleanup.py +0 -0
  799. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_p2_safe_cleanup.py +0 -0
  800. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_promotion.py +0 -0
  801. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_quality.py +0 -0
  802. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_rebuild.py +0 -0
  803. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_relations.py +0 -0
  804. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_review_session.py +0 -0
  805. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_schema.py +0 -0
  806. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_session_finish.py +0 -0
  807. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_session_harvest.py +0 -0
  808. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_kg_standard.py +0 -0
  809. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_lexical_defense.py +0 -0
  810. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_lifecycle.py +0 -0
  811. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_maintenance_routine.py +0 -0
  812. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_digest_modes.py +0 -0
  813. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_input_schema_limits.py +0 -0
  814. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_labeled_field_output.py +0 -0
  815. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_lazy_startup.py +0 -0
  816. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_socket_config_templates.py +0 -0
  817. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_timeout.py +0 -0
  818. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mcp_warm_route.py +0 -0
  819. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mine_queries.py +0 -0
  820. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mlx_health_recovery.py +0 -0
  821. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_mmr_default_off.py +0 -0
  822. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_ner_eval.py +0 -0
  823. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_newsyslog_config.py +0 -0
  824. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_normalize_project.py +0 -0
  825. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_p0_longitudinal_count.py +0 -0
  826. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_parent_death.py +0 -0
  827. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_paths.py +0 -0
  828. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase2.py +0 -0
  829. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase2_plugin_manifest.py +0 -0
  830. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase2_plugin_queue.py +0 -0
  831. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase3_digest.py +0 -0
  832. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase3_qa.py +0 -0
  833. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase5.py +0 -0
  834. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase6_critical.py +0 -0
  835. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_phase6_sentiment.py +0 -0
  836. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_post_commit_hook.py +0 -0
  837. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_precompact_chunk_origin.py +0 -0
  838. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_prompt_classification.py +0 -0
  839. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_provenance.py +0 -0
  840. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_provenance_autosupersede.py +0 -0
  841. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_provenance_integration.py +0 -0
  842. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_quarantine_noise.py +0 -0
  843. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_queue_merge.py +0 -0
  844. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_rate_limiter.py +0 -0
  845. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_realtime_hooks.py +0 -0
  846. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_recent_enrichment.py +0 -0
  847. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_reembed_backfill.py +0 -0
  848. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_reembed_bgem3.py +0 -0
  849. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_release_version_sync.py +0 -0
  850. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_run_tests_script.py +0 -0
  851. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_alias_expansion.py +0 -0
  852. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_exact_chunk_id.py +0 -0
  853. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_gaps.py +0 -0
  854. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_quality.py +0 -0
  855. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_routing.py +0 -0
  856. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_trigram_fts.py +0 -0
  857. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_search_validation.py +0 -0
  858. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_semantic_style.py +0 -0
  859. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_session_enrichment.py +0 -0
  860. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_session_enrichment_candidates.py +0 -0
  861. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_smart_search_entity_dedup.py +0 -0
  862. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_stale_index_fixture.py +0 -0
  863. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_stop_hook_created_at.py +0 -0
  864. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_storage.py +0 -0
  865. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_tag_entity_promotion.py +0 -0
  866. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_telemetry.py +0 -0
  867. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_think_recall_integration.py +0 -0
  868. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_tool_annotations.py +0 -0
  869. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_tool_description_quality.py +0 -0
  870. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_transport_replay_attribution.py +0 -0
  871. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_truncation.py +0 -0
  872. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_vector_store.py +0 -0
  873. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_vector_store_pragma_tuning.py +0 -0
  874. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_vector_store_readonly.py +0 -0
  875. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_vector_store_schema_flags.py +0 -0
  876. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_wal_checkpoint_module.py +0 -0
  877. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_wizard.py +0 -0
  878. {brainlayer-1.2.0 → brainlayer-1.4.0}/tests/test_writer_pidfile_mutex.py +0 -0
@@ -76,6 +76,12 @@ jobs:
76
76
  --ignore=tests/test_follow_up_rewrite.py
77
77
  --ignore=tests/test_prompt_classification.py
78
78
 
79
+ - name: Doctor fixture gate
80
+ env:
81
+ HF_HUB_OFFLINE: "1"
82
+ TRANSFORMERS_OFFLINE: "1"
83
+ run: pytest tests/test_doctor.py -v --tb=short
84
+
79
85
  - name: Isolated eval and hook routing tests
80
86
  env:
81
87
  HF_HUB_OFFLINE: "1"
@@ -75,6 +75,16 @@ tests/eval_results/
75
75
  # Aggregate metrics go in results/ instead; raw rows archived to Brain Drive.
76
76
  eval_results/*.jsonl
77
77
 
78
+ # Generated local eval/graph outputs
79
+ eval_results/
80
+ graphify-out/
81
+ *.bak-*
82
+ *.json.lock
83
+
84
+ # Local agent/graph tooling state
85
+ .agents/
86
+ .graphifyignore
87
+
78
88
  # Progress trackers (ephemeral)
79
89
  scripts/.kg_rebuild_progress.json
80
90
 
@@ -82,3 +92,6 @@ scripts/.kg_rebuild_progress.json
82
92
  .claude.local.md
83
93
  .vercel
84
94
  site/
95
+
96
+ # render-verification ephemeral logs
97
+ brain-bar/.render-logs/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brainlayer
3
- Version: 1.2.0
3
+ Version: 1.4.0
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
@@ -21,6 +21,9 @@ let package = Package(
21
21
  .product(name: "GRDB", package: "GRDB.swift"),
22
22
  ],
23
23
  path: "Sources/BrainBar",
24
+ swiftSettings: [
25
+ .define("BRAINBAR_UI"),
26
+ ],
24
27
  linkerSettings: [
25
28
  .linkedLibrary("sqlite3"),
26
29
  ]
@@ -0,0 +1,158 @@
1
+ import AppKit
2
+ import SwiftUI
3
+
4
+ final class BrainBarDashboardPanel: NSPanel {
5
+ override var canBecomeKey: Bool { true }
6
+ override var canBecomeMain: Bool { false }
7
+ }
8
+
9
+ @MainActor
10
+ final class BrainBarDashboardPanelController: NSObject, NSWindowDelegate {
11
+ static let defaultSize = NSSize(
12
+ width: BrainBarWindowPlacement.defaultSize.width,
13
+ height: BrainBarWindowPlacement.defaultSize.height
14
+ )
15
+ static let minSize = NSSize(
16
+ width: BrainBarWindowPlacement.minimumSize.width,
17
+ height: BrainBarWindowPlacement.minimumSize.height
18
+ )
19
+ static let maxSize = NSSize(width: 1_600, height: 1_200)
20
+
21
+ let panelForTesting: NSPanel
22
+ let contentViewControllerForTesting: NSViewController
23
+ var isShownForTesting: Bool { panel.isVisible }
24
+
25
+ private let panel: NSPanel
26
+ private var clickOutsideMonitor: Any?
27
+ private var localClickMonitor: Any?
28
+ private var shownAt: Date = .distantPast
29
+ weak var statusItemButton: NSView?
30
+
31
+ init(runtime: BrainBarRuntime) {
32
+ let hostingController = NSHostingController(
33
+ rootView: BrainBarWindowRootView(runtime: runtime, managesWindowFrame: false)
34
+ .frame(minWidth: Self.minSize.width, minHeight: Self.minSize.height)
35
+ .frame(maxWidth: .infinity, maxHeight: .infinity)
36
+ )
37
+ hostingController.view.frame = NSRect(origin: .zero, size: Self.defaultSize)
38
+ hostingController.view.autoresizingMask = [.width, .height]
39
+
40
+ contentViewControllerForTesting = hostingController
41
+ panel = Self.makePanel(contentViewController: hostingController)
42
+ panelForTesting = panel
43
+ super.init()
44
+ panel.delegate = self
45
+ }
46
+
47
+ func toggle(anchoredTo anchorView: NSView? = nil) {
48
+ if panel.isVisible {
49
+ dismiss()
50
+ } else {
51
+ show(anchoredTo: anchorView)
52
+ }
53
+ }
54
+
55
+ func show(anchoredTo anchorView: NSView? = nil) {
56
+ guard let anchorView else { return }
57
+ positionPanel(below: anchorView)
58
+ NSApp.activate(ignoringOtherApps: true)
59
+ panel.makeKeyAndOrderFront(nil)
60
+ panel.orderFrontRegardless()
61
+ shownAt = Date()
62
+ installClickOutsideMonitor()
63
+ }
64
+
65
+ func dismiss() {
66
+ removeClickOutsideMonitor()
67
+ panel.orderOut(nil)
68
+ }
69
+
70
+ private func installClickOutsideMonitor() {
71
+ removeClickOutsideMonitor()
72
+ let mask: NSEvent.EventTypeMask = [.leftMouseDown, .rightMouseDown, .otherMouseDown]
73
+ clickOutsideMonitor = NSEvent.addGlobalMonitorForEvents(matching: mask) { [weak self] _ in
74
+ Task { @MainActor in self?.dismissIfClickOutside() }
75
+ }
76
+ localClickMonitor = NSEvent.addLocalMonitorForEvents(matching: mask) { [weak self] event in
77
+ Task { @MainActor in self?.dismissIfLocalClickOutside(event) }
78
+ return event
79
+ }
80
+ }
81
+
82
+ private func removeClickOutsideMonitor() {
83
+ if let clickOutsideMonitor { NSEvent.removeMonitor(clickOutsideMonitor) }
84
+ if let localClickMonitor { NSEvent.removeMonitor(localClickMonitor) }
85
+ clickOutsideMonitor = nil
86
+ localClickMonitor = nil
87
+ }
88
+
89
+ private func dismissIfClickOutside() {
90
+ guard panel.isVisible, Date().timeIntervalSince(shownAt) > 0.20 else { return }
91
+ guard !BrainBarSettingsActions.suppressDashboardResignDismiss else { return }
92
+ dismiss()
93
+ }
94
+
95
+ private func dismissIfLocalClickOutside(_ event: NSEvent) {
96
+ guard panel.isVisible, Date().timeIntervalSince(shownAt) > 0.20 else { return }
97
+ guard !BrainBarSettingsActions.suppressDashboardResignDismiss else { return }
98
+ if event.window === panel { return }
99
+ if let button = statusItemButton, event.window === button.window { return } // let toggle() own the menubar click
100
+ dismiss()
101
+ }
102
+
103
+ func windowDidResignKey(_ notification: Notification) {
104
+ guard panel.isVisible, Date().timeIntervalSince(shownAt) > 0.20 else { return }
105
+ guard !BrainBarSettingsActions.suppressDashboardResignDismiss else { return }
106
+ dismiss()
107
+ }
108
+
109
+ func windowWillClose(_ notification: Notification) {
110
+ removeClickOutsideMonitor()
111
+ }
112
+
113
+ private static func makePanel(contentViewController: NSViewController) -> NSPanel {
114
+ let panel = BrainBarDashboardPanel(
115
+ contentRect: NSRect(origin: .zero, size: defaultSize),
116
+ styleMask: [.titled, .fullSizeContentView, .closable, .resizable],
117
+ backing: .buffered,
118
+ defer: false
119
+ )
120
+ panel.title = "BrainBar"
121
+ panel.titleVisibility = .hidden
122
+ panel.titlebarAppearsTransparent = true
123
+ panel.isReleasedWhenClosed = false
124
+ panel.isFloatingPanel = true
125
+ panel.hidesOnDeactivate = false
126
+ panel.level = .statusBar
127
+ panel.becomesKeyOnlyIfNeeded = false
128
+ panel.minSize = minSize
129
+ panel.maxSize = maxSize
130
+ panel.contentViewController = contentViewController
131
+ panel.contentMinSize = minSize
132
+ panel.setContentSize(defaultSize)
133
+ return panel
134
+ }
135
+
136
+ private func positionPanel(below anchorView: NSView) {
137
+ guard let anchorWindow = anchorView.window,
138
+ let screen = anchorWindow.screen ?? NSScreen.screens.first else {
139
+ panel.setFrame(NSRect(origin: .zero, size: panel.frame.size), display: false)
140
+ return
141
+ }
142
+
143
+ let anchorRectInWindow = anchorView.convert(anchorView.bounds, to: nil)
144
+ let anchorRect = anchorWindow.convertToScreen(anchorRectInWindow)
145
+ let visibleFrame = screen.visibleFrame
146
+ let panelSize = panel.frame.size
147
+ let gap = BrainBarWindowPlacement.menuBarIconGap
148
+ let targetX = min(
149
+ max(anchorRect.maxX - panelSize.width, visibleFrame.minX),
150
+ visibleFrame.maxX - panelSize.width
151
+ )
152
+ let targetY = max(
153
+ min(anchorRect.minY - gap - panelSize.height, visibleFrame.maxY - panelSize.height),
154
+ visibleFrame.minY
155
+ )
156
+ panel.setFrameOrigin(NSPoint(x: targetX, y: targetY))
157
+ }
158
+ }
@@ -664,11 +664,20 @@ final class BrainBarServer: @unchecked Sendable {
664
664
 
665
665
  // Claude Desktop's MCPB utility process currently parses raw extension
666
666
  // stdout in 8192-byte chunks. Raw newline transport omits optional tool
667
- // annotations; Content-Length transport keeps the canonical tools/list.
667
+ // annotations and the verbose human-readable description prose (both the
668
+ // top-level tool descriptions and the per-property inputSchema
669
+ // descriptions). The Content-Length transport keeps the canonical, fully
670
+ // described tools/list; the raw line keeps only the machine-required
671
+ // shape (name + inputSchema structure) so the response stays under the
672
+ // 8192-byte MCPB chunk limit without dropping any tool.
668
673
  var compactResult = result
669
674
  compactResult["tools"] = tools.map { tool in
670
675
  var compact = tool
671
676
  compact.removeValue(forKey: "annotations")
677
+ compact.removeValue(forKey: "description")
678
+ if let schema = compact["inputSchema"] as? [String: Any] {
679
+ compact["inputSchema"] = stripSchemaDescriptions(schema)
680
+ }
672
681
  return compact
673
682
  }
674
683
 
@@ -677,6 +686,30 @@ final class BrainBarServer: @unchecked Sendable {
677
686
  return compactResponse
678
687
  }
679
688
 
689
+ /// Recursively removes human-readable `description` keys from a JSON schema
690
+ /// so the raw-line tools/list stays under Claude Desktop's MCPB chunk limit.
691
+ /// Structural keys (type, properties, required, enum, items, maxLength, …)
692
+ /// are preserved so the tool remains callable.
693
+ private static func stripSchemaDescriptions(_ schema: [String: Any]) -> [String: Any] {
694
+ var stripped = schema
695
+ stripped.removeValue(forKey: "description")
696
+ if let properties = stripped["properties"] as? [String: Any] {
697
+ var newProperties: [String: Any] = [:]
698
+ for (key, value) in properties {
699
+ if let nested = value as? [String: Any] {
700
+ newProperties[key] = stripSchemaDescriptions(nested)
701
+ } else {
702
+ newProperties[key] = value
703
+ }
704
+ }
705
+ stripped["properties"] = newProperties
706
+ }
707
+ if let items = stripped["items"] as? [String: Any] {
708
+ stripped["items"] = stripSchemaDescriptions(items)
709
+ }
710
+ return stripped
711
+ }
712
+
680
713
  private func disconnectClient(fd: Int32) {
681
714
  if let subscriptionID = clients[fd]?.brainBusSubscriptionID {
682
715
  brainBus.unsubscribeSynchronously(subscriptionID)
@@ -0,0 +1,72 @@
1
+ import AppKit
2
+ #if BRAINBAR_UI
3
+ import SwiftUI
4
+ #endif
5
+
6
+ @MainActor
7
+ enum BrainBarSettingsActions {
8
+ private(set) static var suppressDashboardResignDismiss = false
9
+
10
+ #if BRAINBAR_UI
11
+ private static var windowController: NSWindowController?
12
+ private static var closeObserver: NSObjectProtocol?
13
+
14
+ static func openSettingsWindow() {
15
+ NSApp.activate(ignoringOtherApps: true)
16
+
17
+ if let controller = windowController {
18
+ promoteForSettings()
19
+ controller.window?.makeKeyAndOrderFront(nil)
20
+ return
21
+ }
22
+
23
+ let hosting = NSHostingController(rootView: BrainBarSettingsView())
24
+ let window = NSWindow(contentViewController: hosting)
25
+ window.title = "BrainLayer Settings"
26
+ window.styleMask = [.titled, .closable, .miniaturizable]
27
+ window.isReleasedWhenClosed = false
28
+ window.titlebarAppearsTransparent = false
29
+ window.level = .normal
30
+ window.center()
31
+
32
+ let controller = NSWindowController(window: window)
33
+ windowController = controller
34
+
35
+ closeObserver = NotificationCenter.default.addObserver(
36
+ forName: NSWindow.willCloseNotification,
37
+ object: window,
38
+ queue: .main
39
+ ) { _ in
40
+ Task { @MainActor in demoteAfterSettings() }
41
+ }
42
+
43
+ promoteForSettings()
44
+ controller.showWindow(nil)
45
+ window.makeKeyAndOrderFront(nil)
46
+ }
47
+
48
+ private static func promoteForSettings() {
49
+ suppressDashboardResignDismiss = true
50
+ if NSApp.activationPolicy() != .regular {
51
+ NSApp.setActivationPolicy(.regular)
52
+ }
53
+ NSApp.activate(ignoringOtherApps: true)
54
+ }
55
+
56
+ private static func demoteAfterSettings() {
57
+ suppressDashboardResignDismiss = false
58
+ if let closeObserver { NotificationCenter.default.removeObserver(closeObserver) }
59
+ closeObserver = nil
60
+ windowController = nil
61
+ NSApp.setActivationPolicy(.accessory)
62
+ }
63
+ #else
64
+ // BrainBarDaemon target is headless and never opens Settings (the file is shared
65
+ // via symlink, but BrainBarSettingsView + its deps live only in the BrainBar target).
66
+ // Keep the original no-op so the daemon target compiles.
67
+ static func openSettingsWindow() {
68
+ NSApp.activate(ignoringOtherApps: true)
69
+ NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil)
70
+ }
71
+ #endif
72
+ }
@@ -24,6 +24,7 @@ final class BrainBarStatusPopoverController: NSObject {
24
24
  configureContextMenu()
25
25
  configureStatusItem()
26
26
  bindRuntime()
27
+ dashboardPanelController.statusItemButton = statusItemForTesting.button
27
28
  }
28
29
 
29
30
  func toggle(_ sender: Any?) {
@@ -74,12 +75,14 @@ final class BrainBarStatusPopoverController: NSObject {
74
75
  }
75
76
 
76
77
  private func renderStatusIcon(stats: BrainDatabase.DashboardStats, state: PipelineState) {
77
- let livePresentation = BrainBarLivePresentation.derive(stats: stats)
78
- statusItemForTesting.button?.image = SparklineRenderer.render(
79
- state: state,
80
- values: stats.recentEnrichmentBuckets,
81
- size: NSSize(width: 22, height: 12),
82
- accentColor: livePresentation.accentColor
78
+ // Three overlapping pipeline lines (Agent stores / JSONL watcher / Enrichment)
79
+ // with an always-visible baseline so the icon stays legible on a dark
80
+ // fullscreen menu bar instead of the old single gray line that vanished.
81
+ statusItemForTesting.button?.image = SparklineRenderer.renderStatusBarIcon(
82
+ agent: stats.recentAgentWriteBuckets,
83
+ watcher: stats.recentWatcherWriteBuckets,
84
+ enrichment: stats.recentEnrichmentBuckets,
85
+ size: NSSize(width: 26, height: 14)
83
86
  )
84
87
  }
85
88