brainlayer 1.3.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.
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.github/workflows/ci.yml +6 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/PKG-INFO +1 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarServer.swift +34 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarWindowRootView.swift +1 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/MCPRouter.swift +7 -2
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/bundle/Info.plist +2 -2
- brainlayer-1.4.0/docs/brew-layer-conformance.md +66 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/pyproject.toml +1 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/hotlane_brainbar_daemon.py +18 -3
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/brainlayer-env-run.sh +64 -5
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.drain.plist +3 -7
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.enrichment.plist +3 -1
- brainlayer-1.4.0/scripts/launchd/com.brainlayer.hotlane-brainbar.plist +74 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/install.sh +8 -1
- brainlayer-1.4.0/scripts/reembed_backfill_loop.py +363 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/server.json +2 -2
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/__init__.py +1 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cli/__init__.py +236 -4
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cloud_backfill.py +262 -47
- brainlayer-1.4.0/src/brainlayer/doctor.py +384 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/drain.py +62 -27
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/enrichment_controller.py +113 -4
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/health_check.py +33 -2
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/index_new.py +1 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/search_handler.py +8 -9
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/store_handler.py +46 -8
- brainlayer-1.4.0/src/brainlayer/memory_types.py +13 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/classify.py +2 -28
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/store.py +2 -2
- brainlayer-1.4.0/src/brainlayer/system_prompt_guard.py +30 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/vector_store.py +5 -2
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_arbitration.py +258 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_enrich.py +36 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_launchd_mode_a.py +6 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cloud_backfill.py +171 -6
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_deferred_embedding.py +83 -0
- brainlayer-1.4.0/tests/test_doctor.py +211 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrich_supervisor.py +149 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_controller.py +2 -2
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_flex_integration.py +1 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hotlane_brainbar_daemon.py +84 -10
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hybrid_helper_contract.py +4 -2
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_installable_build.py +24 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_launchd_hygiene.py +88 -4
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_handler.py +5 -4
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_profile.py +24 -1
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_stability_health_check.py +59 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_store_handler.py +86 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_write_queue.py +103 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_write_resilience_under_load.py +4 -2
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.claude-plugin/marketplace.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.claude.local.md.example +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.gitattributes +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.githooks/pre-push +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.github/workflows/docs.yml +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.github/workflows/publish.yml +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.gitignore +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/.mcp.json.example +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/AGENTS.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_ACTION_ITEMS.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_CRITICAL_ISSUES.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_FINAL_STATUS.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_PR_COMMENT_HELPER_FAST_PROFILE.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REREVIEW_P2_KG_CLEANUP.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_352.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_BRAINBAR_HELPER_FAST_PROFILE.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_DEFLAKE_AGENT_PROFILES.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FINDINGS.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FIX_PYTHON_CI.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FTS_RECALL.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_HOOKS_FAIL_LOUD.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_P2_KG_CLEANUP.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_P6B.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_QUICK_CAPTURE.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_QUICK_CAPTURE_UX_FIX.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_RESTORE_CAPTURE_ACTIONS.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_SUMMARY.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_SUMMARY.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_SUMMARY_HELPER_FAST_PROFILE.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/CHANGELOG.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/CLAUDE.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/CODEOWNERS +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/CONTRIBUTING.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/LICENSE +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/README.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/SLICE-B-BRIEF.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-combined.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-retry1.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-before-oldprompt-validation-off.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined-summary.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1-summary.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-summary.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/recommended-36k-batch-backfill-plan.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-after-retry1.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-cloudsafe-pilot50.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-judge-retry1.jsonl +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/.gitignore +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Package.resolved +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Package.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Scripts/brainbar_stdio_adapter.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarApp.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarAppSupport.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarCommandBar.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarDashboardPanelController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarInstanceLock.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarProcessControl.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarRuntime.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarSettingsActions.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarSettingsView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarStatusPopoverController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarURLAction.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarWindowState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBusClient.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBusEvent.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainDatabase.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainLayerConfig.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/AgentActivityMonitor.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/BrainBarDashboardFixture.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/BrainBarLivePulse.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/DaemonHealthMonitor.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/DashboardMetricFormatter.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/PipelineState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/SparklineRenderer.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/StatsCollector.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/StatusPopoverView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/DegradationState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/DesignTokens.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Formatters.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Formatting/TextFormatter.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HotkeyManager.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HotkeyRouteStatus.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HybridSearchHelperClient.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionContinuation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionEvent.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionFeedView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionPresentation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionStore.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionSummaryView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/EntityCache.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasLayout.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasMode.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGCanvasView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdge.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdgeView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNode.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNodeView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGRelationPresentation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSidebarView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSimulationController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGViewModel.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/MCPFraming.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/DigestResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/EntityCard.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/KGSearchResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/KGTemporalDate.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/SearchResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/StatsResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCaptureController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCapturePanel.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCapturePanelState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchFilters.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchPanelController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchProfileLogger.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchQueryActor.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchViewModel.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/ChunkConversationSheet.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultCard.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultsList.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/WrappingPillLayout.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/ExpirationPill.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarCommandBar.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDaemonMain.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDashboardPanelController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarInstanceLock.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarProcessControl.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarRuntime.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarServer.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarSettingsActions.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarStatusPopoverController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarURLAction.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowRootView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBusClient.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBusEvent.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainDatabase.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/AgentActivityMonitor.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/BrainBarLivePulse.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DaemonHealthMonitor.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DashboardMetricFormatter.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/PipelineState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/SparklineRenderer.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatsCollector.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatusPopoverView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/DegradationState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/DesignTokens.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Formatters.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Formatting/TextFormatter.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HotkeyManager.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HotkeyRouteStatus.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HybridSearchHelperClient.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionContinuation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionEvent.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionFeedView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionPresentation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionStore.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionSummaryView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/EntityCache.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasLayout.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasMode.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGCanvasView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdge.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdgeView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNode.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNodeView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGRelationPresentation.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSidebarView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSimulationController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGViewModel.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/MCPFraming.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/MCPRouter.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/DigestResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/EntityCard.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/KGSearchResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/KGTemporalDate.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/SearchResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/StatsResult.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCaptureController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanel.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanelState.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchFilters.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchPanelController.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchProfileLogger.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchQueryActor.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchViewModel.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/ChunkConversationSheet.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultCard.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultsList.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/WrappingPillLayout.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/ExpirationPill.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarLifecycleWatchdog.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarRestartHandoff.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarDaemonTests/BrainBarDaemonLaunchModeTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/AgentActivityMonitorTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarDashboardPanelControllerTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarDashboardSnapshotTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarReliabilityTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarRuntimeWiringTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsSnapshotTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsViewModelTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarStartupRecoveryTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarStatusPopoverControllerTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarUXLogicTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarWindowRootViewVectorDetailLayoutTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarWindowStateTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBusEventHubTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainDatabaseWindowedBucketsTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainLayerConfigTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/ChunkConversationTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DashboardRedesignSnapshotTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DashboardTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DatabaseTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DegradationStateTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DesignTokensTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/FormattersTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/HybridSearchHelperClientTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionContinuationTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionConversationSelectionTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionEventTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionPresentationTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionStoreTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGAtlasLayoutTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGAtlasPresentationTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGBadgeConsistencyTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGExpirationRenderingTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGSidebarSynopsisTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KnowledgeGraphTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/MCPFramingTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/MCPRouterTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/PopoverTabTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCaptureConversationTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCapturePanelTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCaptureTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/RENDER_VERIFICATION.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/RecordingHybridSearchClient.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchFiltersTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchPanelControllerTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchQueryActorTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchResultPresentationTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchViewModelTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SocketIntegrationTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SparklineRendererIconTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SparklineSnapshotTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/StabilityFixTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/StatsCollectorTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/TextFormatterParityTests.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/build-app.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/bundle/com.brainlayer.brainbar-daemon.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/bundle/com.brainlayer.brainbar.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/karabiner/brainbar-f4.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/bugbot-review-notes.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/bugbot_pr_comment.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/contracts/engine-ui-contract.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/contracts/entity-types.yaml +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/abcde-experiment-isolation.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/adr/0000-template.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/adr/0001-sqlite-vec-over-dedicated-vector-db.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/adr/0002-reciprocal-rank-fusion-for-hybrid-search.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/arbitration.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/architecture/MODULE-MAP.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/architecture.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/chat-based-analysis-design.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/chat-tags-example.yaml +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/communication-analysis.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/hierarchical-clustering-deep-research.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/hierarchical-clustering-research.txt +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/research-chat-based-analysis.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/research-prompt-embeddings.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/assets/logo.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/backup-strategy.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/configuration.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/contributing.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/data-locations.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/embedding-setup.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/enrichment-provider-agnostic-design.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/enrichment-runbook.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/enrichment.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/index.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/kg-spec.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/local-models-guide.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/mcp-config.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/mcp-tools.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/operations/brainlayer-health-check.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/orqi-batch-contract.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-02-25-phase-3-brain-digest.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-02-25-phase-6-sentiment.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-03-30-enrichment-launchagent.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-03-31-phase2-search-window-design.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-03-31-phase2-search-window.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-05-p1a-fts5-health.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-05-p1b-eval-framework.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-dashboard-flow-collab.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-dashboard-flow.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-injections-graph-hybrid.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-06-01-db-shrink-fts5-dedup.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-06-02-phoenix-eval-integration.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-06-14-reembed-unvectored-backlog.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/quickstart.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/launch-readiness-audit.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/README.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/auto-extracting-learnings.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/brainstore-write-tools.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/cli-ux-patterns.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/conversation-reconstruction.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/prompts.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/session-enrichment-architecture.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/roadmap.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/showcase-claude-collab-discovery.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/stylesheets/extra.css +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.claude-plugin/plugin.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.gitignore +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.mcp.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/hooks.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/session-start.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/session-stop.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/tool-error.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/tool-observe.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/scripts/brainbar-hook.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/scripts/queue-flusher.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/skills/memory/SKILL.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/findings.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/greptile.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainbar-postcompact.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainbar-prompt-capture.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainbar-stop-index.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainlayer-prompt-search.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainlayer-session-start.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/dedup_coordination.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/post-commit.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/session-cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/index.html +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/brainlayer.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/claude.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/cursor.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/gemini.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/kiro.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/openai.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/vscode.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/zed.svg +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/com.brainlayer.jsonl-backup.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/com.brainlayer.watch.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/install-newsyslog.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/newsyslog.d/README.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/newsyslog.d/brainlayer.conf +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/macroscope.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/migrations/002_decay_columns.sql +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/migrations/003_raw_entities_json.sql +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/migrations/004_enrich_status.sql +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/mkdocs.yml +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/overrides/main.html +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/index.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/BUG-005.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/MP-003.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/MP-004.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/US-001.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/US-002.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/progress.txt +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/results/abcde_n893_summary.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/results/abcde_n893_summary.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/abcde_report.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill-context.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill-created-at.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill-metadata.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_chunk_origin_provenance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_content_class.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_data/.gitignore +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_decay.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_dedupe.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_kg_promotion.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_orchestrate.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/batch_submit_paced.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/braintrust_ingest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/build_qrels.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/calibrate_importance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/classify-all.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cleanup-profanity-chunks.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cleanup_stale_mcp.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cloud_backfill.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cloud_stream.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/db_shrink_eval.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/db_shrink_migrate.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/dedup_entities.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/diarize_episodes.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/drain_daemon.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrich_recent.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_backfill.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_llm_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_pilot.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_quality_benchmark.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/export_lexical_defense_snapshot.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/generate-fixtures.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/generate_abcde_variants.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/generate_style_card.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/hot_currentness_benchmark.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/index_youtube.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/install-karabiner-rule.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_backfill.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_cleanup_apply.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_cleanup_dryrun.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_dedup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_entity_dedup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_entity_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_flag_batch.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_p2_crosstype_cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_p2_safe_cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_rebuild.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_review_session.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_session_finish.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_session_harvest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/label-chunks.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/backup-daily.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/brainlayer.env.example +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.backup-daily.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.decay.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.health-check.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.index.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.jsonl-backup.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.maintenance-nightly.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.maintenance-weekly.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.repair-fts.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.wal-checkpoint.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.watch.plist +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/jsonl-backup.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/maintenance/brainlayer_maintenance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/merge_queue.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/mine_corrections.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/mine_failed_queries.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/mine_frustrations.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/monitor_batch_reenrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/p0_longitudinal_count.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/phase-boundaries.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/pre-label.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/promote_tag_entities.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/purge_orphaned_vectors.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/quarantine_noise.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/rebuild_vec0_tables.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/reembed_bge_m3.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/reembed_bgem3.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/replay_brain_store_fallbacks.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/resimhash_dedupe.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run-second-analysis-after-first.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_abcde_enrich.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_benchmark.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_decay_job.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_evals.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_tests.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/scope-config.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/score_entity_health.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/seed_agent_profiles.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/seed_aliases.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/smoke/README.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/smoke/firstturn-brainlayer-smoke.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/smoke/repogolem_mcp_transport_smoke.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/tombstone_singleton_tags.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/train-setfit.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/verify_hebrew_search.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/vertex_poll_import.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/wal_checkpoint.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/_helpers.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/agent_profiles.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/backup_daily.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/bitemporal.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/brainbar_hybrid_helper.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/calibrate.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/chunk_origin.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/chunk_origin_backfill.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/classify.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/claude_paths.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cli/wizard.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cli_new.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/clustering.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/config.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/content_class.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/correction_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/db_shrink.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/decay.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/decay_backfill.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/decay_job.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/dedupe.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/embeddings.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/engine.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_enrich_runner.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_variants.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_variants.yaml +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/benchmark.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_gold.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_graders.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_llm_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_quality_benchmark.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/experiment_store.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/fixtures/README.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/labeling/enrichment-labeler.html +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/__main__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/baseline_store.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/cli.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/models.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/phoenix_client.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/regression_gate.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/triggers.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/fallback_replay.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/git_learning.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/hooks/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/hooks/indexer.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/ingest/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/ingest/codex.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/ingest_guard.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/isolation_proof.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/jsonl_backup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_promotion.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_repo.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_review_session.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_session_finish.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_session_harvest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/lexical_defense.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/lexical_defense_dictionary.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/maintenance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/_format.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/_shared.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/enrich_handler.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/entity_handler.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/tags_handler.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/migrate.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/parent_death.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/paths.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/phonetic.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/agent_enrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/analyze_communication.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/batch_extraction.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/brain_graph.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/chat_tags.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/chunk.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/cluster_sampling.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/code_intelligence.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/correction_detection.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/correction_mining.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/digest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/enrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/enrichment_tiers.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/entity_extraction.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/entity_resolution.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_claude_desktop.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_corrections.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_markdown.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_whatsapp.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/frustration_mining.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/git_overlay.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/kg_extraction.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/kg_extraction_groq.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/longitudinal_analyzer.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/obsidian_export.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/operation_grouping.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/plan_linking.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/rate_limiter.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/sanitize.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/semantic_style.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/sentiment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/session_enrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/style_embed.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/style_index.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/tag_entity_promotion.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/temporal_chains.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/time_batcher.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/unified_timeline.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/write_queue.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/provenance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/provenance_autosupersede.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/provenance_integration.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/queue_io.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/queue_merge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/reembed_backfill.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/scoping.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/search_profile.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/search_repo.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/session_repo.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/setup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/storage.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/tag_normalization.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/taxonomy.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/telemetry.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/types.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/wal_checkpoint.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/watcher.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/watcher_bridge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/BrainBarWindowRootView.test.swift +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/conftest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval/phoenix_gate/test_phoenix_gate.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_baselines.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_mcp_brainlayer.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_pr3_relevance_qrels.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_qrels.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/fixtures/README.md +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/fixtures/stale_index_query.json +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/assertions.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/base.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_brainlayer.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_github.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_voicelayer.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/__init__.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/_stale_index_fixture.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/test_drift_detection.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/test_fts5_determinism.sh +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/stale_index_query.test.ts +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_3tool_aliases.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_6pm_entity_upgrades.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_abcde_enrich_runner.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_abcde_report.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_abcde_variants.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_adaptive_injection.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_agent_profiles.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_atomic_brick_schema.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_audit_recursion_filter.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_audit_search_quality.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_auto_enrich.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_backup_daily.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_batch_extraction.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_batch_reenrichment_setup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_behavioral_pr_loop.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_bitemporal_phase1.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brain_graph_compat.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brain_tags.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainbar_build_app_guards.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainbar_helper_fast_profile.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainbar_hybrid_helper.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainstore.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_braintrust_ingest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_calibrate_importance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chat_list.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunk.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunk_lifecycle.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunk_origin_provenance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunker.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_classify.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cleanup_profanity_chunks.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_direct_sqlite.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_provenance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_code_intelligence.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_concurrent_enrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_conditional_hooks.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_consumer_scoping.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_content_class.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_context_pipeline.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_correction_detection_gate.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_correction_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_correction_mining.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dashboard.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_db_lock_resilience.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_db_shrink.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_decay.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dedup_coordination.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dedupe.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_deferred_mcp_provenance_guard.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dev_dependencies.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_digest_connect.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_digest_enrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_digest_pipeline_v2.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_drain_health.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_embedding_truncation.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_engine.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_engine_package_boundary.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrich_defaults.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_bounded_commit.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_data_integrity.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_entity_schema.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_fallback.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_gold.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_graders.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_llm_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_quality_benchmark.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_reliability.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_threshold.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_tiers.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_tiers_agent_sources.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_v2.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_contracts.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_dedup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_extraction.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_fact_correction_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_parent_relations.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_type_gate.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_type_sync.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_eval_baselines.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_eval_framework.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_experiment_store.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_extract_markdown.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_fallback_replay.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_follow_up_rewrite.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_frustration_mining.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_fts5_health.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_git_learning.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_groq_backend.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_groq_rate_limit.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hebrew_alias.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hook_slim.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hot_currentness_benchmark.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hybrid_search.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hybrid_search_decay.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_ingest_codex.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_ingest_guard.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_isolation_proof_harness.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_issue_type.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_jsonl_backup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_jsonl_watcher.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_boost_reconnect.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_entity_dedup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_extraction.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_hybrid_retrieval.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_judge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_p2_crosstype_cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_p2_safe_cleanup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_promotion.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_quality.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_rebuild.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_relations.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_review_session.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_schema.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_session_finish.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_session_harvest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_standard.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_lexical_defense.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_lifecycle.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_maintenance_routine.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_digest_modes.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_format.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_input_schema_limits.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_labeled_field_output.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_lazy_startup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_socket_config_templates.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_timeout.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_warm_route.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mine_queries.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mlx_health_recovery.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mmr_default_off.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_ner_eval.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_newsyslog_config.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_normalize_project.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_p0_longitudinal_count.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_parent_death.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_paths.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase2.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase2_plugin_manifest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase2_plugin_queue.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase3_digest.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase3_qa.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase5.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase6_critical.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase6_sentiment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_post_commit_hook.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_precompact_chunk_origin.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_prompt_classification.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_provenance.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_provenance_autosupersede.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_provenance_integration.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_quarantine_noise.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_queue_merge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_rate_limiter.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_realtime_hooks.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_recent_enrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_reembed_backfill.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_reembed_bgem3.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_release_version_sync.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_run_tests_script.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_sanitize.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_alias_expansion.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_chunk_id.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_exact_chunk_id.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_filter_params.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_gaps.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_quality.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_routing.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_trigram_fts.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_validation.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_semantic_style.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_session_enrichment.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_session_enrichment_candidates.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_smart_search_entity_dedup.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_stale_index_fixture.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_stop_hook_created_at.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_storage.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_tag_entity_promotion.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_telemetry.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_think_recall_integration.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_tool_annotations.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_tool_description_quality.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_transport_replay_attribution.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_truncation.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store_pragma_tuning.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store_readonly.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store_schema_flags.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_wal_checkpoint_module.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_watcher_bridge.py +0 -0
- {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_wizard.py +0 -0
- {brainlayer-1.3.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"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brainlayer
|
|
3
|
-
Version: 1.
|
|
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
|
|
@@ -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
|
|
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)
|
{brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarWindowRootView.swift
RENAMED
|
@@ -2130,7 +2130,7 @@ struct BrainBarDashboardLayout {
|
|
|
2130
2130
|
diagnosticItemColumns = containerSize.width >= 760 ? 2 : 1
|
|
2131
2131
|
|
|
2132
2132
|
compactCards = compactWidth || compactHeight
|
|
2133
|
-
outerPadding = compactCards ? 24 :
|
|
2133
|
+
outerPadding = compactCards ? 24 : 36
|
|
2134
2134
|
sectionSpacing = compactCards ? 20 : 28
|
|
2135
2135
|
gridSpacing = compactCards ? 16 : 22
|
|
2136
2136
|
cardPadding = compactCards ? 22 : 32
|
|
@@ -14,8 +14,13 @@ final class MCPRouter: @unchecked Sendable {
|
|
|
14
14
|
// for replay so brain_store returns well under the 1s prompt-queue budget.
|
|
15
15
|
// Longer contention handling belongs in the deferred single-writer/backpressure
|
|
16
16
|
// path, not in the synchronous MCP response.
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
//
|
|
18
|
+
// Budget math: a contended BEGIN IMMEDIATE blocks up to the busy timeout, and
|
|
19
|
+
// each extra retry adds another busy-timeout block plus a retry sleep. To stay
|
|
20
|
+
// under the 200ms queue budget the synchronous path makes exactly one short
|
|
21
|
+
// attempt (retries == 0) with a sub-budget busy timeout, then queues on busy.
|
|
22
|
+
private static let mcpStoreBusyTimeoutMillis: Int32 = 100
|
|
23
|
+
private static let mcpStoreRetries = 0
|
|
19
24
|
|
|
20
25
|
private struct ToolOutput {
|
|
21
26
|
let text: String
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
<key>CFBundleIdentifier</key>
|
|
10
10
|
<string>com.brainlayer.brainbar</string>
|
|
11
11
|
<key>CFBundleVersion</key>
|
|
12
|
-
<string>1.
|
|
12
|
+
<string>1.4.0</string>
|
|
13
13
|
<key>CFBundleShortVersionString</key>
|
|
14
|
-
<string>1.
|
|
14
|
+
<string>1.4.0</string>
|
|
15
15
|
<key>CFBundlePackageType</key>
|
|
16
16
|
<string>APPL</string>
|
|
17
17
|
<key>CFBundleExecutable</key>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# BrainLayer — Robust Brew Layer Conformance
|
|
2
|
+
|
|
3
|
+
> Self-audit of BrainLayer against the cross-layer **Robust Brew Layer Standard**
|
|
4
|
+
> (`orchestrator/standards/robust-brew-layer.md`, owner: cmuxlayerClaude).
|
|
5
|
+
> Status as of **2026-06-21**, after the M1-clone (`happycampr`) friction sprint.
|
|
6
|
+
> Every ✅ below is verified either on the live M4 dev machine or the M1 clone
|
|
7
|
+
> end-to-end install (`brew install --cask brainbar` → working `1.3.0,1`).
|
|
8
|
+
|
|
9
|
+
## Headline (§0 / §0.1) — two-consumer split
|
|
10
|
+
|
|
11
|
+
BrainLayer is the standard's reference **two-consumer split**:
|
|
12
|
+
|
|
13
|
+
- **App / fleet (socket + daemon):** `BrainBarDaemon` serves `brain_search` over the
|
|
14
|
+
**canonical socket `/tmp/brainbar.sock`** for the live BrainBar UI and for
|
|
15
|
+
cross-repo fleet agents. This is the genuinely-needed daemon case (§0).
|
|
16
|
+
- **Agents (stdio MCP):** `brainlayer-mcp` (`brainlayer serve`) is a **stdio** server
|
|
17
|
+
launched per-agent that talks to the SQLite store directly — *not* through the
|
|
18
|
+
app's socket. This removes the agent path's dependency on the socket/daemon
|
|
19
|
+
failure classes (7a/7b/7c) entirely.
|
|
20
|
+
|
|
21
|
+
### Write-path invariant (§0.1 hard requirement)
|
|
22
|
+
|
|
23
|
+
The store runs in **WAL mode**. The concurrency invariant is preserved as follows:
|
|
24
|
+
|
|
25
|
+
- **Reads** (`brain_search`, both DB-direct stdio and socket-served): safe under WAL —
|
|
26
|
+
SQLite WAL permits concurrent readers alongside writers. Agent read connections
|
|
27
|
+
open read-only.
|
|
28
|
+
- **Writes** (`brain_store`, watcher, enrichment): serialized through the
|
|
29
|
+
**`com.brainlayer.drain` queue → single applying writer** (`docs/configuration.md`:
|
|
30
|
+
"Drain queued writes as the single writer"), with `WAL` + `busy_timeout` retry on
|
|
31
|
+
`SQLITE_BUSY` for any direct writer. The single-writer consistency assumption is
|
|
32
|
+
thus held by the drain, not by the GUI daemon — so the DB-direct stdio agent MCP
|
|
33
|
+
is a **reader**, never a competing writer.
|
|
34
|
+
|
|
35
|
+
This satisfies §0.1: consumers are documented (socket = app/fleet, stdio = agents),
|
|
36
|
+
and the write-path invariant is stated.
|
|
37
|
+
|
|
38
|
+
## Conformance matrix
|
|
39
|
+
|
|
40
|
+
| § | Class | Status | Evidence |
|
|
41
|
+
|---|---|---|---|
|
|
42
|
+
| 0 / 0.1 | stdio-preferred / split + write-path invariant documented | ✅ | This doc; `brainlayer-mcp` stdio + `BrainBarDaemon` socket; drain = single writer |
|
|
43
|
+
| 1 | account-rename self-heal (no interactive sudo) | ⚠️ **partial** | Cask `preflight` self-heals dangling `localaiengine`-tainted Caskroom symlinks (account-agnostic via `start_with?`, user-owned only, no sudo) — **M1-verified**. **Gap:** no standalone `brainlayer doctor --fix` CLI (the §1 MUST form). |
|
|
44
|
+
| 2 | sudo-free cask uninstall / upgrade | ✅ | brainbar installs **user** LaunchAgents (`gui/$uid`), no privileged helper → uninstall needs no sudo; `zap` stanza present; caveats document the two genuine sudo edge-cases (root-owned leftover after rename; clone-upgrade heuristic) |
|
|
45
|
+
| 3 | tap-add + trust documented | ✅ (shared runbook, orc-owned) | M1 install succeeded → tap trusted; brainbar resolves as `etanhey/layers/brainbar` |
|
|
46
|
+
| 4 | venv-python everywhere | ✅ | Daemon resolves the formula venv python via `resolveHomebrewVenvPython` (PR #528) before any bare-python fallback; hooks self-resolve src via `sys.path.insert` + degrade gracefully under `except` guards (never hard-fail on bare `python3`) |
|
|
47
|
+
| 5 | headless serve + daemon integrity | ✅ | **5a** canonical `/tmp/brainbar.sock`, zero stale `mcplayer-*` aliases in the bundle. **5b** `BrainBarDaemon` LaunchAgent (`RunAtLoad`/`KeepAlive`) brings the socket up headless. **5c** cask `postflight` re-bootstraps the daemon+UI LaunchAgents on reinstall (PR #525 / cask) — **M1-verified auto-bootstrap, PID assigned, no `setup --launchd` needed**. **5d** daemon is its own executable + LaunchAgent, not a GUI-app child |
|
|
48
|
+
| 6 | declared deps + correct cask names + adopt | ✅ | Agent MCP is **stdio** → structurally immune to the socat 3-address footgun; fleet socket access verified **connecting** on M1 (`brain_search` 5 results, no `-32000`) |
|
|
49
|
+
| 7 | read-only commands stay read-only | ⚠️ **review** | Action-verbs mutate appropriately (`reconcile-launchd`, `watch`, `wal-checkpoint`, `serve`); `health-check` is read-only. **Open:** `setup` ("create brainlayer.env…") and `init` (interactive wizard) mutate — but both are the **documented install entrypoints** (formula caveat: "Run setup after install"), not surprise-mutating inspect-verbs. Needs standard-owner ruling on whether documented-`setup`-as-install must be renamed `install`. |
|
|
50
|
+
|
|
51
|
+
## Remaining work
|
|
52
|
+
|
|
53
|
+
1. **§1 — `brainlayer doctor` / `doctor --fix` CLI (the one real MUST gap).**
|
|
54
|
+
The *friction* is functionally fixed and M1-verified (cask preflight heals the
|
|
55
|
+
reinstall case), but the standard prescribes a standalone non-interactive CLI:
|
|
56
|
+
detect stale Caskroom artifacts (account-agnostic), `--fix` heals without bare
|
|
57
|
+
sudo (`sudo -n` probe), root-owned → `STOP:` + distinct exit code, idempotent,
|
|
58
|
+
SHOULD scan the sibling manifest (brainbar, karabiner-elements, aldente,
|
|
59
|
+
wispr-flow, codex). The detection logic already exists in the cask preflight and
|
|
60
|
+
would be lifted into the CLI. **Scoped follow-on; the M1 already works without it.**
|
|
61
|
+
|
|
62
|
+
2. **§7 — read-only ruling.** Confirm with the standard owner whether `setup`/`init`
|
|
63
|
+
may remain the documented install entrypoints or must move mutation behind an
|
|
64
|
+
explicit `install` subcommand.
|
|
65
|
+
|
|
66
|
+
Everything else (§0, §2, §3, §4, §5, §6) is conformant and M1-clone-verified.
|
|
@@ -30,6 +30,7 @@ LOGGER = logging.getLogger("brainlayer.hotlane_brainbar")
|
|
|
30
30
|
STOP = False
|
|
31
31
|
DEFAULT_HOTLANE_ENRICH_LIMIT = 5
|
|
32
32
|
DEFAULT_BACKLOG_BATCH = 4
|
|
33
|
+
MAX_BACKLOG_BATCH = 16
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
class CycleResult(NamedTuple):
|
|
@@ -83,6 +84,13 @@ def _queue_depth(queue_dir: Path) -> int:
|
|
|
83
84
|
return 0
|
|
84
85
|
|
|
85
86
|
|
|
87
|
+
def _high_priority_queue_depth(queue_dir: Path) -> int:
|
|
88
|
+
try:
|
|
89
|
+
return sum(1 for path in queue_dir.glob("*.jsonl") if not path.name.startswith("enrichment-"))
|
|
90
|
+
except OSError:
|
|
91
|
+
return 0
|
|
92
|
+
|
|
93
|
+
|
|
86
94
|
def run_cycle(
|
|
87
95
|
*,
|
|
88
96
|
store: VectorStore,
|
|
@@ -143,6 +151,7 @@ def run(
|
|
|
143
151
|
max_cycles: int | None = None,
|
|
144
152
|
queue_dir: Path | None = None,
|
|
145
153
|
queue_depth_fn: Callable[[Path], int] = _queue_depth,
|
|
154
|
+
high_priority_queue_depth_fn: Callable[[Path], int] = _high_priority_queue_depth,
|
|
146
155
|
) -> None:
|
|
147
156
|
model = model_factory()
|
|
148
157
|
embed_batch_fn = getattr(model, "embed_texts", None)
|
|
@@ -162,6 +171,7 @@ def run(
|
|
|
162
171
|
last_enrich = 0.0
|
|
163
172
|
enrich_disabled = False
|
|
164
173
|
cycles = 0
|
|
174
|
+
backlog_batch = min(max(backlog_batch, 0), MAX_BACKLOG_BATCH)
|
|
165
175
|
LOGGER.info("hotlane adapter started db=%s", db_path)
|
|
166
176
|
while not STOP:
|
|
167
177
|
if max_cycles is not None and cycles >= max_cycles:
|
|
@@ -169,14 +179,19 @@ def run(
|
|
|
169
179
|
try:
|
|
170
180
|
now = time_fn()
|
|
171
181
|
queue_has_backlog = queue_depth_fn(queue_dir) > 0
|
|
182
|
+
queue_has_high_priority_backlog = queue_has_backlog and high_priority_queue_depth_fn(queue_dir) > 0
|
|
172
183
|
if queue_has_backlog:
|
|
173
|
-
LOGGER.info("durable queue has backlog;
|
|
184
|
+
LOGGER.info("durable queue has backlog; suppressing enrichment only")
|
|
185
|
+
if queue_has_high_priority_backlog:
|
|
186
|
+
LOGGER.info("durable high-priority queue has backlog; yielding writer slot to drain")
|
|
187
|
+
cycles += 1
|
|
188
|
+
sleep_fn(interval)
|
|
189
|
+
continue
|
|
174
190
|
cycle_backlog_batch = backlog_batch if backlog_batch > 0 and now - last_backlog >= backlog_interval else 0
|
|
175
191
|
cycle_enrich_limit = (
|
|
176
192
|
enrich_limit if not enrich_disabled and enrich_limit > 0 and now - last_enrich >= enrich_interval else 0
|
|
177
193
|
)
|
|
178
194
|
if queue_has_backlog:
|
|
179
|
-
cycle_backlog_batch = 0
|
|
180
195
|
cycle_enrich_limit = 0
|
|
181
196
|
if cycle_backlog_batch > 0:
|
|
182
197
|
last_backlog = now
|
|
@@ -234,7 +249,7 @@ def main() -> None:
|
|
|
234
249
|
interval=max(args.interval, 0.25),
|
|
235
250
|
recent_limit=max(args.recent_limit, 1),
|
|
236
251
|
backlog_interval=max(args.backlog_interval, 1.0),
|
|
237
|
-
backlog_batch=max(args.backlog_batch, 0),
|
|
252
|
+
backlog_batch=min(max(args.backlog_batch, 0), MAX_BACKLOG_BATCH),
|
|
238
253
|
enrich_interval=max(args.enrich_interval, 1.0),
|
|
239
254
|
enrich_limit=max(args.enrich_limit, 0),
|
|
240
255
|
enrich_since_hours=max(args.enrich_since_hours, 0),
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
set -euo pipefail
|
|
4
4
|
|
|
5
5
|
ENV_FILE="${BRAINLAYER_ENV_FILE:-$HOME/.config/brainlayer/brainlayer.env}"
|
|
6
|
+
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/.local/bin:${PATH:-}"
|
|
6
7
|
|
|
7
8
|
if [ ! -f "$ENV_FILE" ]; then
|
|
8
9
|
echo "ERROR: BrainLayer env file not found at $ENV_FILE" >&2
|
|
@@ -22,10 +23,66 @@ if [ -n "$(find "$ENV_FILE" -prune -perm -0002 -print 2>/dev/null)" ]; then
|
|
|
22
23
|
exit 78
|
|
23
24
|
fi
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
valid_env_key() {
|
|
27
|
+
case "$1" in
|
|
28
|
+
""|[0-9]*|*[!A-Za-z0-9_]*)
|
|
29
|
+
return 1
|
|
30
|
+
;;
|
|
31
|
+
*)
|
|
32
|
+
return 0
|
|
33
|
+
;;
|
|
34
|
+
esac
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
strip_matching_quotes() {
|
|
38
|
+
local value="$1"
|
|
39
|
+
if [[ "$value" == \"*\" && "$value" == *\" ]]; then
|
|
40
|
+
printf '%s' "${value:1:${#value}-2}"
|
|
41
|
+
elif [[ "$value" == \'*\' && "$value" == *\' ]]; then
|
|
42
|
+
printf '%s' "${value:1:${#value}-2}"
|
|
43
|
+
else
|
|
44
|
+
printf '%s' "$value"
|
|
45
|
+
fi
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
load_simple_env_file() {
|
|
49
|
+
local raw_line line key value
|
|
50
|
+
while IFS= read -r raw_line || [ -n "$raw_line" ]; do
|
|
51
|
+
line="${raw_line#"${raw_line%%[![:space:]]*}"}"
|
|
52
|
+
line="${line%"${line##*[![:space:]]}"}"
|
|
53
|
+
case "$line" in
|
|
54
|
+
""|\#*)
|
|
55
|
+
continue
|
|
56
|
+
;;
|
|
57
|
+
export\ *)
|
|
58
|
+
line="${line#export }"
|
|
59
|
+
;;
|
|
60
|
+
esac
|
|
61
|
+
case "$line" in
|
|
62
|
+
*=*) ;;
|
|
63
|
+
*) continue ;;
|
|
64
|
+
esac
|
|
65
|
+
key="${line%%=*}"
|
|
66
|
+
value="${line#*=}"
|
|
67
|
+
key="${key%"${key##*[![:space:]]}"}"
|
|
68
|
+
value="${value#"${value%%[![:space:]]*}"}"
|
|
69
|
+
if ! valid_env_key "$key"; then
|
|
70
|
+
continue
|
|
71
|
+
fi
|
|
72
|
+
case "$value" in
|
|
73
|
+
*'$('*|*'`'*)
|
|
74
|
+
continue
|
|
75
|
+
;;
|
|
76
|
+
esac
|
|
77
|
+
export "$key=$(strip_matching_quotes "$value")"
|
|
78
|
+
done < "$ENV_FILE"
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
env_file_declares_google_key() {
|
|
82
|
+
grep -Eq '^[[:space:]]*(export[[:space:]]+)?GOOGLE(_GENERATIVE_AI)?_API_KEY[[:space:]]*=' "$ENV_FILE"
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
load_simple_env_file
|
|
29
86
|
|
|
30
87
|
is_false() {
|
|
31
88
|
case "${1:-}" in
|
|
@@ -68,7 +125,9 @@ if [ "${BRAINLAYER_SKIP_DISABLE_GATES:-0}" != "1" ]; then
|
|
|
68
125
|
fi
|
|
69
126
|
fi
|
|
70
127
|
|
|
71
|
-
if [ "${BRAINLAYER_REQUIRE_GOOGLE_API_KEY:-0}" = "1" ]
|
|
128
|
+
if [ "${BRAINLAYER_REQUIRE_GOOGLE_API_KEY:-0}" = "1" ] \
|
|
129
|
+
&& [ -z "${GOOGLE_API_KEY:-${GOOGLE_GENERATIVE_AI_API_KEY:-}}" ] \
|
|
130
|
+
&& ! env_file_declares_google_key; then
|
|
72
131
|
echo "ERROR: GOOGLE_API_KEY not set by $ENV_FILE" >&2
|
|
73
132
|
exit 78
|
|
74
133
|
fi
|
|
@@ -25,13 +25,9 @@
|
|
|
25
25
|
<string>__BRAINLAYER_ENV_FILE__</string>
|
|
26
26
|
<key>BRAINLAYER_LAUNCHD_SERVICE</key>
|
|
27
27
|
<string>drain</string>
|
|
28
|
-
<!--
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
the drain on SQLITE_BUSY so the realtime queue backs up. Vectors are
|
|
32
|
-
backfilled out-of-band by enrichment/hotlane. (M1/throughput fix.) -->
|
|
33
|
-
<key>BRAINLAYER_DRAIN_EMBED</key>
|
|
34
|
-
<string>0</string>
|
|
28
|
+
<!-- Production leaves drain embedding enabled. Embeddings are precomputed
|
|
29
|
+
before BEGIN IMMEDIATE, so vector coverage does not depend on hotlane
|
|
30
|
+
liveness and the write-lock window stays bounded. -->
|
|
35
31
|
</dict>
|
|
36
32
|
<key>StandardOutPath</key>
|
|
37
33
|
<string>__HOME__/Library/Logs/brainlayer/drain.out.log</string>
|
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
<key>BRAINLAYER_STALL_TIMEOUT</key>
|
|
31
31
|
<string>300</string>
|
|
32
32
|
<key>BRAINLAYER_ENRICHMENT_QUEUE_WRITES</key>
|
|
33
|
-
<string>
|
|
33
|
+
<string>1</string>
|
|
34
|
+
<key>BRAINLAYER_ENRICH_IDLE_BACKLOG</key>
|
|
35
|
+
<string>1</string>
|
|
34
36
|
<key>BRAINLAYER_ENV_FILE</key>
|
|
35
37
|
<string>__BRAINLAYER_ENV_FILE__</string>
|
|
36
38
|
<key>BRAINLAYER_REQUIRE_GOOGLE_API_KEY</key>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>Label</key>
|
|
6
|
+
<string>com.brainlayer.hotlane-brainbar</string>
|
|
7
|
+
<key>ProgramArguments</key>
|
|
8
|
+
<array>
|
|
9
|
+
<string>__BRAINLAYER_ENV_RUN__</string>
|
|
10
|
+
<string>__BRAINLAYER_PYTHON__</string>
|
|
11
|
+
<string>__BRAINLAYER_DIR__/scripts/hotlane_brainbar_daemon.py</string>
|
|
12
|
+
<string>--interval</string>
|
|
13
|
+
<string>1.0</string>
|
|
14
|
+
<string>--recent-limit</string>
|
|
15
|
+
<string>5</string>
|
|
16
|
+
<string>--backlog-interval</string>
|
|
17
|
+
<string>10.0</string>
|
|
18
|
+
<string>--backlog-batch</string>
|
|
19
|
+
<string>4</string>
|
|
20
|
+
<string>--enrich-interval</string>
|
|
21
|
+
<string>10.0</string>
|
|
22
|
+
<string>--enrich-limit</string>
|
|
23
|
+
<string>5</string>
|
|
24
|
+
<string>--enrich-since-hours</string>
|
|
25
|
+
<string>87600</string>
|
|
26
|
+
</array>
|
|
27
|
+
<key>WorkingDirectory</key>
|
|
28
|
+
<string>__BRAINLAYER_DIR__</string>
|
|
29
|
+
<key>KeepAlive</key>
|
|
30
|
+
<true/>
|
|
31
|
+
<key>StandardOutPath</key>
|
|
32
|
+
<string>__HOME__/Library/Logs/brainlayer/hotlane-brainbar.out.log</string>
|
|
33
|
+
<key>StandardErrorPath</key>
|
|
34
|
+
<string>__HOME__/Library/Logs/brainlayer/hotlane-brainbar.err.log</string>
|
|
35
|
+
<key>EnvironmentVariables</key>
|
|
36
|
+
<dict>
|
|
37
|
+
<key>PATH</key>
|
|
38
|
+
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:__HOME__/.local/bin</string>
|
|
39
|
+
<key>PYTHONUNBUFFERED</key>
|
|
40
|
+
<string>1</string>
|
|
41
|
+
<key>BRAINLAYER_ENV_FILE</key>
|
|
42
|
+
<string>__BRAINLAYER_ENV_FILE__</string>
|
|
43
|
+
<key>BRAINLAYER_REQUIRE_GOOGLE_API_KEY</key>
|
|
44
|
+
<string>1</string>
|
|
45
|
+
<key>BRAINLAYER_REPO_ROOT</key>
|
|
46
|
+
<string>__BRAINLAYER_DIR__</string>
|
|
47
|
+
<key>BRAINLAYER_GEMINI_SERVICE_TIER</key>
|
|
48
|
+
<string>flex</string>
|
|
49
|
+
<key>BRAINLAYER_ENRICH_CONCURRENCY</key>
|
|
50
|
+
<string>4</string>
|
|
51
|
+
<key>BRAINLAYER_ENRICH_RATE</key>
|
|
52
|
+
<string>15</string>
|
|
53
|
+
<key>BRAINLAYER_LAUNCHD_SERVICE</key>
|
|
54
|
+
<string>hotlane-brainbar</string>
|
|
55
|
+
</dict>
|
|
56
|
+
<key>RunAtLoad</key>
|
|
57
|
+
<true/>
|
|
58
|
+
<key>ThrottleInterval</key>
|
|
59
|
+
<integer>5</integer>
|
|
60
|
+
<key>Nice</key>
|
|
61
|
+
<integer>10</integer>
|
|
62
|
+
<key>ProcessType</key>
|
|
63
|
+
<string>Background</string>
|
|
64
|
+
<key>ExitTimeOut</key>
|
|
65
|
+
<integer>30</integer>
|
|
66
|
+
<key>LowPriorityIO</key>
|
|
67
|
+
<true/>
|
|
68
|
+
<key>SoftResourceLimits</key>
|
|
69
|
+
<dict>
|
|
70
|
+
<key>NumberOfFiles</key>
|
|
71
|
+
<integer>4096</integer>
|
|
72
|
+
</dict>
|
|
73
|
+
</dict>
|
|
74
|
+
</plist>
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
# ./scripts/launchd/install.sh jsonl-backup # Install daily JSONL backup only
|
|
17
17
|
# ./scripts/launchd/install.sh maintenance # Install recurring maintenance jobs
|
|
18
18
|
# ./scripts/launchd/install.sh health-check # Install stability health check only
|
|
19
|
+
# ./scripts/launchd/install.sh hotlane # Install BrainBar hotlane embed/enrich daemon only
|
|
19
20
|
# ./scripts/launchd/install.sh remove # Unload and remove all
|
|
20
21
|
set -euo pipefail
|
|
21
22
|
|
|
@@ -255,6 +256,10 @@ case "${1:-all}" in
|
|
|
255
256
|
health-check)
|
|
256
257
|
install_plist health-check
|
|
257
258
|
;;
|
|
259
|
+
hotlane|hotlane-brainbar)
|
|
260
|
+
verify_gemini_env_file
|
|
261
|
+
install_plist hotlane-brainbar
|
|
262
|
+
;;
|
|
258
263
|
all)
|
|
259
264
|
install_env_runner
|
|
260
265
|
verify_config_file
|
|
@@ -262,6 +267,7 @@ case "${1:-all}" in
|
|
|
262
267
|
install_plist index
|
|
263
268
|
install_plist drain
|
|
264
269
|
install_plist watch
|
|
270
|
+
install_plist hotlane-brainbar
|
|
265
271
|
install_plist enrichment
|
|
266
272
|
install_plist decay
|
|
267
273
|
install_plist wal-checkpoint
|
|
@@ -290,11 +296,12 @@ case "${1:-all}" in
|
|
|
290
296
|
remove_plist maintenance-nightly 2>/dev/null || true
|
|
291
297
|
remove_plist maintenance-weekly 2>/dev/null || true
|
|
292
298
|
remove_plist health-check 2>/dev/null || true
|
|
299
|
+
remove_plist hotlane-brainbar 2>/dev/null || true
|
|
293
300
|
rm -f "$BRAINLAYER_LIB_DIR/backup-daily.sh"
|
|
294
301
|
rm -f "$BRAINLAYER_LIB_DIR/jsonl-backup.sh"
|
|
295
302
|
;;
|
|
296
303
|
*)
|
|
297
|
-
echo "Usage: $0 [index|watch|enrich|enrichment|decay|drain|repair-fts|load [name]|unload [name]|checkpoint|backup|jsonl-backup|maintenance|maintenance-nightly|maintenance-weekly|health-check|all|remove]"
|
|
304
|
+
echo "Usage: $0 [index|watch|enrich|enrichment|decay|drain|hotlane|repair-fts|load [name]|unload [name]|checkpoint|backup|jsonl-backup|maintenance|maintenance-nightly|maintenance-weekly|health-check|all|remove]"
|
|
298
305
|
exit 1
|
|
299
306
|
;;
|
|
300
307
|
esac
|