brainlayer 1.1.0__tar.gz → 1.3.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.
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.gitignore +13 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.mcp.json.example +0 -4
- {brainlayer-1.1.0 → brainlayer-1.3.0}/PKG-INFO +1 -1
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Package.swift +3 -0
- brainlayer-1.3.0/brain-bar/Sources/BrainBar/BrainBarDashboardPanelController.swift +158 -0
- brainlayer-1.3.0/brain-bar/Sources/BrainBar/BrainBarSettingsActions.swift +72 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarStatusPopoverController.swift +9 -6
- brainlayer-1.3.0/brain-bar/Sources/BrainBar/BrainBarWindowRootView.swift +2789 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainDatabase.swift +459 -22
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Dashboard/AgentActivityMonitor.swift +106 -7
- brainlayer-1.3.0/brain-bar/Sources/BrainBar/Dashboard/BrainBarDashboardFixture.swift +99 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Dashboard/DashboardMetricFormatter.swift +8 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Dashboard/PipelineState.swift +114 -4
- brainlayer-1.3.0/brain-bar/Sources/BrainBar/Dashboard/SparklineRenderer.swift +1259 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Dashboard/StatsCollector.swift +102 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/DesignTokens.swift +16 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Formatting/TextFormatter.swift +9 -1
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/HybridSearchHelperClient.swift +27 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/InjectionEvent.swift +17 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/InjectionFeedView.swift +20 -4
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/MCPRouter.swift +58 -17
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/AgentActivityMonitorTests.swift +197 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarDashboardPanelControllerTests.swift +11 -6
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/BrainBarDashboardSnapshotTests.swift +169 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarStatusPopoverControllerTests.swift +6 -6
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/BrainBarWindowRootViewVectorDetailLayoutTests.swift +46 -0
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/BrainDatabaseWindowedBucketsTests.swift +184 -0
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/DashboardRedesignSnapshotTests.swift +147 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/DashboardTests.swift +540 -8
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/DatabaseTests.swift +224 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/HybridSearchHelperClientTests.swift +32 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/InjectionEventTests.swift +60 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/MCPRouterTests.swift +167 -0
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/RENDER_VERIFICATION.md +78 -0
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/SparklineRendererIconTests.swift +44 -0
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/SparklineSnapshotTests.swift +170 -0
- brainlayer-1.3.0/brain-bar/Tests/BrainBarTests/StatsCollectorTests.swift +102 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/TextFormatterParityTests.swift +56 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/build-app.sh +97 -2
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/index.md +2 -1
- brainlayer-1.3.0/docs/mcp-config.md +40 -0
- brainlayer-1.3.0/docs/operations/brainlayer-health-check.md +38 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/quickstart.md +14 -19
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/brainlayer-prompt-search.py +79 -2
- {brainlayer-1.1.0 → brainlayer-1.3.0}/pyproject.toml +1 -1
- brainlayer-1.3.0/scripts/braintrust_ingest.py +354 -0
- brainlayer-1.3.0/scripts/db_shrink_eval.py +186 -0
- brainlayer-1.3.0/scripts/db_shrink_migrate.py +7 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/hotlane_brainbar_daemon.py +83 -46
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.drain.plist +13 -11
- brainlayer-1.3.0/scripts/launchd/com.brainlayer.health-check.plist +50 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/install.sh +12 -3
- {brainlayer-1.1.0 → brainlayer-1.3.0}/server.json +2 -2
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/__init__.py +1 -1
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/cli/__init__.py +277 -10
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/cloud_backfill.py +5 -12
- brainlayer-1.3.0/src/brainlayer/db_shrink.py +709 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/drain.py +237 -63
- brainlayer-1.3.0/src/brainlayer/health_check.py +739 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/__init__.py +17 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/_format.py +21 -1
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/_shared.py +7 -2
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/search_handler.py +203 -42
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/store_handler.py +174 -16
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/classify.py +16 -3
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/sanitize.py +132 -13
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/search_repo.py +40 -3
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/store.py +45 -6
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/vector_store.py +122 -2
- brainlayer-1.3.0/src/brainlayer/watcher.py +845 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/watcher_bridge.py +209 -102
- brainlayer-1.3.0/tests/BrainBarWindowRootView.test.swift +19 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_3tool_aliases.py +24 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_adaptive_injection.py +43 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_arbitration.py +47 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_brainbar_build_app_guards.py +143 -2
- brainlayer-1.3.0/tests/test_braintrust_ingest.py +196 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_classify.py +35 -0
- brainlayer-1.3.0/tests/test_cli_launchd_mode_a.py +126 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_cloud_backfill.py +59 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_conditional_hooks.py +99 -6
- brainlayer-1.3.0/tests/test_db_shrink.py +335 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_deferred_embedding.py +73 -0
- brainlayer-1.3.0/tests/test_drain_health.py +24 -0
- brainlayer-1.3.0/tests/test_hotlane_brainbar_daemon.py +331 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_hybrid_search.py +17 -0
- brainlayer-1.3.0/tests/test_jsonl_watcher.py +756 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_launchd_hygiene.py +27 -5
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mcp_format.py +14 -0
- brainlayer-1.3.0/tests/test_mcp_socket_config_templates.py +35 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_sanitize.py +81 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_chunk_id.py +55 -1
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_filter_params.py +32 -0
- brainlayer-1.3.0/tests/test_search_handler.py +671 -0
- brainlayer-1.3.0/tests/test_stability_health_check.py +475 -0
- brainlayer-1.3.0/tests/test_store_handler.py +1093 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_watcher_bridge.py +102 -11
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_write_queue.py +199 -1
- brainlayer-1.1.0/brain-bar/Sources/BrainBar/BrainBarDashboardPanelController.swift +0 -65
- brainlayer-1.1.0/brain-bar/Sources/BrainBar/BrainBarSettingsActions.swift +0 -9
- brainlayer-1.1.0/brain-bar/Sources/BrainBar/BrainBarWindowRootView.swift +0 -1504
- brainlayer-1.1.0/brain-bar/Sources/BrainBar/Dashboard/SparklineRenderer.swift +0 -405
- brainlayer-1.1.0/brain-bar/Tests/BrainBarTests/AgentActivityMonitorTests.swift +0 -58
- brainlayer-1.1.0/docs/mcp-config.md +0 -44
- brainlayer-1.1.0/eval_results/abcde_results_summary.md +0 -13
- brainlayer-1.1.0/eval_results/db-shrink-2026-06-01.json +0 -116
- brainlayer-1.1.0/eval_results/kg-phase1-dryrun-2026-06-05.json +0 -2883
- brainlayer-1.1.0/eval_results/kg-phase1-flag-batch-2026-06-05.json +0 -21978
- brainlayer-1.1.0/src/brainlayer/watcher.py +0 -451
- brainlayer-1.1.0/tests/test_hotlane_brainbar_daemon.py +0 -139
- brainlayer-1.1.0/tests/test_jsonl_watcher.py +0 -387
- brainlayer-1.1.0/tests/test_search_handler.py +0 -247
- brainlayer-1.1.0/tests/test_store_handler.py +0 -313
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.claude-plugin/marketplace.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.claude.local.md.example +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.gitattributes +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.githooks/pre-push +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.github/workflows/ci.yml +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.github/workflows/docs.yml +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/.github/workflows/publish.yml +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/AGENTS.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_ACTION_ITEMS.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_CRITICAL_ISSUES.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_FINAL_STATUS.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_PR_COMMENT_HELPER_FAST_PROFILE.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REREVIEW_P2_KG_CLEANUP.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_352.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_BRAINBAR_HELPER_FAST_PROFILE.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_DEFLAKE_AGENT_PROFILES.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_FINDINGS.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_FIX_PYTHON_CI.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_FTS_RECALL.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_HOOKS_FAIL_LOUD.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_P2_KG_CLEANUP.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_P6B.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_QUICK_CAPTURE.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_QUICK_CAPTURE_UX_FIX.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_RESTORE_CAPTURE_ACTIONS.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_REVIEW_SUMMARY.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_SUMMARY.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/BUGBOT_SUMMARY_HELPER_FAST_PROFILE.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/CHANGELOG.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/CLAUDE.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/CODEOWNERS +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/CONTRIBUTING.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/LICENSE +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/README.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/SLICE-B-BRIEF.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-combined.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-retry1.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-before-oldprompt-validation-off.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined-summary.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1-summary.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-summary.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/recommended-36k-batch-backfill-plan.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-after-retry1.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-cloudsafe-pilot50.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-judge-retry1.jsonl +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/.gitignore +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Package.resolved +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Scripts/brainbar_stdio_adapter.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarApp.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarAppSupport.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarCommandBar.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarInstanceLock.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarProcessControl.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarRuntime.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarServer.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarSettingsView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarURLAction.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBarWindowState.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBusClient.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainBusEvent.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/BrainLayerConfig.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Dashboard/BrainBarLivePulse.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Dashboard/DaemonHealthMonitor.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Dashboard/StatusPopoverView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/DegradationState.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Formatters.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/HotkeyManager.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/HotkeyRouteStatus.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/InjectionContinuation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/InjectionPresentation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/InjectionStore.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/InjectionSummaryView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/EntityCache.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasLayout.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasMode.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGCanvasView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdge.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdgeView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNode.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNodeView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGRelationPresentation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSidebarView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSimulationController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGViewModel.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/MCPFraming.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Models/DigestResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Models/EntityCard.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Models/KGSearchResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Models/KGTemporalDate.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Models/SearchResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Models/StatsResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/QuickCaptureController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/QuickCapturePanel.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/QuickCapturePanelState.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/SearchFilters.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/SearchPanelController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/SearchProfileLogger.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/SearchQueryActor.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/SearchViewModel.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Views/Components/ChunkConversationSheet.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultCard.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultsList.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Views/Components/WrappingPillLayout.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBar/Views/ExpirationPill.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarCommandBar.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDaemonMain.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDashboardPanelController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarInstanceLock.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarProcessControl.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarRuntime.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarServer.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarSettingsActions.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarStatusPopoverController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarURLAction.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowRootView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowState.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBusClient.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainBusEvent.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/BrainDatabase.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/AgentActivityMonitor.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/BrainBarLivePulse.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DaemonHealthMonitor.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DashboardMetricFormatter.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/PipelineState.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/SparklineRenderer.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatsCollector.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatusPopoverView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/DegradationState.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/DesignTokens.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Formatters.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Formatting/TextFormatter.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/HotkeyManager.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/HotkeyRouteStatus.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/HybridSearchHelperClient.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/InjectionContinuation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/InjectionEvent.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/InjectionFeedView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/InjectionPresentation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/InjectionStore.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/InjectionSummaryView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/EntityCache.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasLayout.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasMode.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGCanvasView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdge.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdgeView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNode.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNodeView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGRelationPresentation.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSidebarView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSimulationController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGViewModel.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/MCPFraming.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/MCPRouter.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Models/DigestResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Models/EntityCard.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Models/KGSearchResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Models/KGTemporalDate.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Models/SearchResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Models/StatsResult.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/QuickCaptureController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanel.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanelState.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/SearchFilters.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/SearchPanelController.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/SearchProfileLogger.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/SearchQueryActor.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/SearchViewModel.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/ChunkConversationSheet.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultCard.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultsList.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/WrappingPillLayout.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarDaemon/Views/ExpirationPill.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarLifecycleWatchdog.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarRestartHandoff.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarDaemonTests/BrainBarDaemonLaunchModeTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarReliabilityTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarRuntimeWiringTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsSnapshotTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsViewModelTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarStartupRecoveryTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarUXLogicTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBarWindowStateTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainBusEventHubTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/BrainLayerConfigTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/ChunkConversationTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/DegradationStateTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/DesignTokensTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/FormattersTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/InjectionContinuationTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/InjectionConversationSelectionTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/InjectionPresentationTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/InjectionStoreTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/KGAtlasLayoutTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/KGAtlasPresentationTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/KGBadgeConsistencyTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/KGExpirationRenderingTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/KGSidebarSynopsisTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/KnowledgeGraphTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/MCPFramingTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/PopoverTabTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/QuickCaptureConversationTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/QuickCapturePanelTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/QuickCaptureTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/RecordingHybridSearchClient.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/SearchFiltersTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/SearchPanelControllerTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/SearchQueryActorTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/SearchResultPresentationTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/SearchViewModelTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/SocketIntegrationTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/Tests/BrainBarTests/StabilityFixTests.swift +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/bundle/Info.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/bundle/com.brainlayer.brainbar-daemon.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/bundle/com.brainlayer.brainbar.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/brain-bar/karabiner/brainbar-f4.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/bugbot-review-notes.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/bugbot_pr_comment.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/contracts/engine-ui-contract.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/contracts/entity-types.yaml +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/abcde-experiment-isolation.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/adr/0000-template.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/adr/0001-sqlite-vec-over-dedicated-vector-db.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/adr/0002-reciprocal-rank-fusion-for-hybrid-search.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/arbitration.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/architecture/MODULE-MAP.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/architecture.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/archive/chat-based-analysis-design.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/archive/chat-tags-example.yaml +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/archive/communication-analysis.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/archive/hierarchical-clustering-deep-research.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/archive/hierarchical-clustering-research.txt +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/archive/research-chat-based-analysis.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/archive/research-prompt-embeddings.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/assets/logo.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/backup-strategy.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/configuration.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/contributing.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/data-locations.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/embedding-setup.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/enrichment-provider-agnostic-design.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/enrichment-runbook.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/enrichment.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/kg-spec.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/local-models-guide.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/mcp-tools.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/orqi-batch-contract.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-02-25-phase-3-brain-digest.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-02-25-phase-6-sentiment.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-03-30-enrichment-launchagent.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-03-31-phase2-search-window-design.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-03-31-phase2-search-window.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-04-05-p1a-fts5-health.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-04-05-p1b-eval-framework.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-04-18-brainbar-dashboard-flow-collab.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-04-18-brainbar-dashboard-flow.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-04-18-brainbar-injections-graph-hybrid.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-06-01-db-shrink-fts5-dedup.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-06-02-phoenix-eval-integration.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/plans/2026-06-14-reembed-unvectored-backlog.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/launch-readiness-audit.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/session-enrichment/README.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/session-enrichment/auto-extracting-learnings.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/session-enrichment/brainstore-write-tools.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/session-enrichment/cli-ux-patterns.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/session-enrichment/conversation-reconstruction.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/session-enrichment/prompts.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/research/session-enrichment/session-enrichment-architecture.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/roadmap.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/showcase-claude-collab-discovery.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/docs/stylesheets/extra.css +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/.claude-plugin/plugin.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/.gitignore +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/.mcp.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/hooks/hooks.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/hooks/session-start.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/hooks/session-stop.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/hooks/tool-error.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/hooks/tool-observe.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/scripts/brainbar-hook.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/scripts/queue-flusher.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/extensions/brainlayer-plugin/skills/memory/SKILL.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/findings.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/greptile.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/brainbar-postcompact.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/brainbar-prompt-capture.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/brainbar-stop-index.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/brainlayer-session-start.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/dedup_coordination.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/post-commit.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/hooks/session-cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/index.html +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/brainlayer.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/claude.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/cursor.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/gemini.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/kiro.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/openai.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/vscode.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/landing/logos/zed.svg +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/launchd/com.brainlayer.jsonl-backup.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/launchd/com.brainlayer.watch.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/launchd/install-newsyslog.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/launchd/newsyslog.d/README.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/launchd/newsyslog.d/brainlayer.conf +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/macroscope.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/migrations/002_decay_columns.sql +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/migrations/003_raw_entities_json.sql +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/migrations/004_enrich_status.sql +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/mkdocs.yml +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/overrides/main.html +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/prd-json/index.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/prd-json/stories/BUG-005.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/prd-json/stories/MP-003.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/prd-json/stories/MP-004.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/prd-json/stories/US-001.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/prd-json/stories/US-002.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/progress.txt +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/results/abcde_n893_summary.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/results/abcde_n893_summary.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/abcde_report.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill-context.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill-created-at.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill-metadata.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill_chunk_origin_provenance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill_content_class.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill_data/.gitignore +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill_decay.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill_dedupe.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill_kg_promotion.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/backfill_orchestrate.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/batch_submit_paced.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/build_qrels.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/calibrate_importance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/classify-all.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/cleanup-profanity-chunks.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/cleanup_stale_mcp.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/cloud_backfill.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/cloud_stream.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/dedup_entities.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/diarize_episodes.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/drain_daemon.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/enrich_recent.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/enrichment_backfill.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/enrichment_llm_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/enrichment_pilot.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/enrichment_quality_benchmark.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/export_lexical_defense_snapshot.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/generate-fixtures.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/generate_abcde_variants.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/generate_style_card.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/hot_currentness_benchmark.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/index_youtube.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/install-karabiner-rule.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_backfill.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_cleanup_apply.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_cleanup_dryrun.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_dedup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_entity_dedup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_entity_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_flag_batch.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_p2_crosstype_cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_p2_safe_cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_rebuild.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_review_session.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_session_finish.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/kg_session_harvest.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/label-chunks.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/backup-daily.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/brainlayer-env-run.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/brainlayer.env.example +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.backup-daily.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.decay.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.enrichment.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.index.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.jsonl-backup.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.maintenance-nightly.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.maintenance-weekly.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.repair-fts.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.wal-checkpoint.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/com.brainlayer.watch.plist +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/launchd/jsonl-backup.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/maintenance/brainlayer_maintenance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/merge_queue.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/mine_corrections.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/mine_failed_queries.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/mine_frustrations.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/monitor_batch_reenrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/p0_longitudinal_count.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/phase-boundaries.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/pre-label.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/promote_tag_entities.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/purge_orphaned_vectors.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/quarantine_noise.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/rebuild_vec0_tables.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/reembed_bge_m3.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/reembed_bgem3.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/replay_brain_store_fallbacks.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/resimhash_dedupe.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/run-second-analysis-after-first.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/run_abcde_enrich.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/run_benchmark.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/run_decay_job.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/run_evals.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/run_tests.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/scope-config.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/score_entity_health.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/seed_agent_profiles.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/seed_aliases.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/smoke/README.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/smoke/firstturn-brainlayer-smoke.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/smoke/repogolem_mcp_transport_smoke.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/tombstone_singleton_tags.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/train-setfit.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/verify_hebrew_search.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/vertex_poll_import.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/scripts/wal_checkpoint.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/_helpers.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/agent_profiles.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/backup_daily.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/bitemporal.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/brainbar_hybrid_helper.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/calibrate.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/chunk_origin.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/chunk_origin_backfill.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/classify.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/claude_paths.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/cli/wizard.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/cli_new.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/clustering.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/config.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/content_class.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/correction_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/decay.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/decay_backfill.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/decay_job.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/dedupe.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/embeddings.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/engine.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/enrichment_controller.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/abcde_enrich_runner.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/abcde_variants.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/abcde_variants.yaml +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/benchmark.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/enrichment_gold.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/enrichment_graders.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/enrichment_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/enrichment_llm_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/enrichment_quality_benchmark.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/experiment_store.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/fixtures/README.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/labeling/enrichment-labeler.html +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/__main__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/baseline_store.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/cli.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/models.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/phoenix_client.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/regression_gate.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/eval/phoenix_gate/triggers.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/fallback_replay.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/git_learning.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/hooks/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/hooks/indexer.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/index_new.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/ingest/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/ingest/codex.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/ingest_guard.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/isolation_proof.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/jsonl_backup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg_cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg_promotion.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg_repo.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg_review_session.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg_session_finish.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/kg_session_harvest.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/lexical_defense.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/lexical_defense_dictionary.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/maintenance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/enrich_handler.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/entity_handler.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/mcp/tags_handler.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/migrate.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/parent_death.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/paths.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/phonetic.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/agent_enrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/analyze_communication.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/batch_extraction.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/brain_graph.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/chat_tags.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/chunk.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/cluster_sampling.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/code_intelligence.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/correction_detection.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/correction_mining.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/digest.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/enrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/enrichment_tiers.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/entity_extraction.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/entity_resolution.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/extract.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/extract_claude_desktop.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/extract_corrections.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/extract_markdown.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/extract_whatsapp.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/frustration_mining.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/git_overlay.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/kg_extraction.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/kg_extraction_groq.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/longitudinal_analyzer.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/obsidian_export.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/operation_grouping.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/plan_linking.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/rate_limiter.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/semantic_style.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/sentiment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/session_enrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/style_embed.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/style_index.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/tag_entity_promotion.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/temporal_chains.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/time_batcher.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/unified_timeline.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/pipeline/write_queue.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/provenance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/provenance_autosupersede.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/provenance_integration.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/queue_io.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/queue_merge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/reembed_backfill.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/scoping.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/search_profile.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/session_repo.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/setup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/storage.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/tag_normalization.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/taxonomy.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/telemetry.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/types.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/src/brainlayer/wal_checkpoint.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/conftest.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/eval/phoenix_gate/test_phoenix_gate.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/eval_baselines.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/eval_mcp_brainlayer.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/eval_pr3_relevance_qrels.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/eval_qrels.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/fixtures/README.md +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/fixtures/stale_index_query.json +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/mock_mcp/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/mock_mcp/assertions.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/mock_mcp/base.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/mock_mcp/mock_brainlayer.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/mock_mcp/mock_github.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/mock_mcp/mock_voicelayer.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/regression/__init__.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/regression/_stale_index_fixture.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/regression/test_drift_detection.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/regression/test_fts5_determinism.sh +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/stale_index_query.test.ts +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_6pm_entity_upgrades.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_abcde_enrich_runner.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_abcde_report.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_abcde_variants.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_agent_profiles.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_atomic_brick_schema.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_audit_recursion_filter.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_audit_search_quality.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_auto_enrich.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_backup_daily.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_batch_extraction.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_batch_reenrichment_setup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_behavioral_pr_loop.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_bitemporal_phase1.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_brain_graph_compat.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_brain_tags.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_brainbar_helper_fast_profile.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_brainbar_hybrid_helper.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_brainstore.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_calibrate_importance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_chat_list.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_chunk.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_chunk_lifecycle.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_chunk_origin_provenance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_chunker.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_cleanup_profanity_chunks.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_cli_direct_sqlite.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_cli_enrich.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_cli_provenance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_code_intelligence.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_concurrent_enrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_consumer_scoping.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_content_class.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_context_pipeline.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_correction_detection_gate.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_correction_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_correction_mining.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_dashboard.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_db_lock_resilience.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_decay.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_dedup_coordination.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_dedupe.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_deferred_mcp_provenance_guard.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_dev_dependencies.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_digest_connect.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_digest_enrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_digest_pipeline_v2.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_embedding_truncation.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_engine.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_engine_package_boundary.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrich_defaults.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrich_supervisor.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_bounded_commit.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_controller.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_data_integrity.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_entity_schema.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_fallback.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_flex_integration.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_gold.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_graders.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_llm_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_quality_benchmark.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_reliability.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_threshold.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_tiers.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_tiers_agent_sources.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_enrichment_v2.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_entity_contracts.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_entity_dedup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_entity_extraction.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_entity_fact_correction_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_entity_parent_relations.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_entity_type_gate.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_entity_type_sync.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_eval_baselines.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_eval_framework.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_experiment_store.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_extract_markdown.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_fallback_replay.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_follow_up_rewrite.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_frustration_mining.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_fts5_health.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_git_learning.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_groq_backend.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_groq_rate_limit.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_hebrew_alias.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_hook_slim.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_hot_currentness_benchmark.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_hybrid_helper_contract.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_hybrid_search_decay.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_ingest_codex.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_ingest_guard.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_installable_build.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_isolation_proof_harness.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_issue_type.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_jsonl_backup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_boost_reconnect.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_entity_dedup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_extraction.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_hybrid_retrieval.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_judge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_p2_crosstype_cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_p2_safe_cleanup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_promotion.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_quality.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_rebuild.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_relations.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_review_session.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_schema.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_session_finish.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_session_harvest.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_kg_standard.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_lexical_defense.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_lifecycle.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_maintenance_routine.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mcp_digest_modes.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mcp_input_schema_limits.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mcp_labeled_field_output.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mcp_lazy_startup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mcp_timeout.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mcp_warm_route.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mine_queries.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mlx_health_recovery.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_mmr_default_off.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_ner_eval.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_newsyslog_config.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_normalize_project.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_p0_longitudinal_count.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_parent_death.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_paths.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase2.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase2_plugin_manifest.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase2_plugin_queue.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase3_digest.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase3_qa.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase5.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase6_critical.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_phase6_sentiment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_post_commit_hook.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_precompact_chunk_origin.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_prompt_classification.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_provenance.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_provenance_autosupersede.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_provenance_integration.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_quarantine_noise.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_queue_merge.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_rate_limiter.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_realtime_hooks.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_recent_enrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_reembed_backfill.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_reembed_bgem3.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_release_version_sync.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_run_tests_script.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_alias_expansion.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_exact_chunk_id.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_gaps.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_profile.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_quality.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_routing.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_trigram_fts.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_search_validation.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_semantic_style.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_session_enrichment.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_session_enrichment_candidates.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_smart_search_entity_dedup.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_stale_index_fixture.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_stop_hook_created_at.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_storage.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_tag_entity_promotion.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_telemetry.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_think_recall_integration.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_tool_annotations.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_tool_description_quality.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_transport_replay_attribution.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_truncation.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_vector_store.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_vector_store_pragma_tuning.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_vector_store_readonly.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_vector_store_schema_flags.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_wal_checkpoint_module.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_wizard.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_write_resilience_under_load.py +0 -0
- {brainlayer-1.1.0 → brainlayer-1.3.0}/tests/test_writer_pidfile_mutex.py +0 -0
|
@@ -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/
|
|
@@ -6,10 +6,6 @@
|
|
|
6
6
|
"command": "socat",
|
|
7
7
|
"args": ["STDIO", "UNIX-CONNECT:/tmp/brainbar.sock"]
|
|
8
8
|
},
|
|
9
|
-
"brainlayer-legacy": {
|
|
10
|
-
"_comment": "Fallback: original Python MCP server (remove after BrainBar is stable)",
|
|
11
|
-
"command": "brainlayer-mcp"
|
|
12
|
-
},
|
|
13
9
|
"voicelayer": {
|
|
14
10
|
"command": "voicelayer-mcp"
|
|
15
11
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brainlayer
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.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
|
|
@@ -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
|
+
}
|
|
@@ -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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
|