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