brainlayer 1.4.3__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.3 → brainlayer-1.4.4}/PKG-INFO +2 -1
- {brainlayer-1.4.3 → brainlayer-1.4.4}/pyproject.toml +7 -2
- 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.3 → brainlayer-1.4.4}/scripts/launchd/install.sh +119 -1
- brainlayer-1.4.4/scripts/launchd/throughput-watchdog.py +629 -0
- brainlayer-1.4.4/scripts/tier0-watchdog.sh +220 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/server.json +2 -2
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/__init__.py +1 -1
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/agent_provenance.py +1 -1
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/backup_daily.py +4 -2
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/cli/__init__.py +107 -35
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/cli_new.py +15 -15
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/cloud_backfill.py +6 -4
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/doctor.py +12 -5
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/drain.py +57 -3
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/engine.py +5 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/enrichment_controller.py +42 -3
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/health_check.py +301 -74
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/index_new.py +8 -3
- brainlayer-1.4.4/src/brainlayer/ingest_denylist.py +167 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/__init__.py +32 -3
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/_format.py +6 -1
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/_shared.py +4 -16
- brainlayer-1.4.4/src/brainlayer/mcp/palette.py +71 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/search_handler.py +122 -5
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/store_handler.py +8 -5
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/migrate.py +16 -12
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/enrichment.py +5 -4
- 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.3 → brainlayer-1.4.4}/src/brainlayer/search_repo.py +78 -19
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/store.py +29 -5
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/vector_store.py +87 -23
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/watcher.py +346 -6
- brainlayer-1.4.4/src/brainlayer/writer_telemetry.py +645 -0
- brainlayer-1.4.3/src/brainlayer/ingest_denylist.py +0 -64
- {brainlayer-1.4.3 → brainlayer-1.4.4}/.gitignore +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/LICENSE +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/README.md +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/backup-daily.sh +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/brainlayer-env-run.sh +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/brainlayer.env.example +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.backup-daily.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.decay.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.drain.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.enrichment.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.health-check.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.hotlane-brainbar.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.index.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.jsonl-backup.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.maintenance-nightly.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.maintenance-weekly.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.p0-counter.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.repair-fts.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.wal-checkpoint.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/com.brainlayer.watch.plist +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/scripts/launchd/jsonl-backup.sh +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/_helpers.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/agent_profiles.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/alarm.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/bitemporal.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/brainbar_hybrid_helper.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/calibrate.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/chunk_origin.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/chunk_origin_backfill.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/classify.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/claude_paths.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/cli/wizard.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/clustering.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/config.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/content_class.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/correction_judge.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/data/agents_registry.yaml +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/data/sandbox_seeds/skill-eval-baseline.json +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/db_shrink.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/decay.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/decay_backfill.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/decay_job.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/dedupe.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/deploy_drift.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/drain_liveness.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/embeddings.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/__init__.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/abcde_enrich_runner.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/abcde_variants.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/abcde_variants.yaml +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/benchmark.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_gold.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_graders.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_judge.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_llm_judge.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/enrichment_quality_benchmark.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/experiment_store.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/fixtures/README.md +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/labeling/enrichment-labeler.html +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/__init__.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/__main__.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/baseline_store.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/cli.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/models.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/phoenix_client.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/regression_gate.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/eval/phoenix_gate/triggers.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/fallback_replay.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/git_learning.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/hooks/__init__.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/hooks/indexer.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/ingest/__init__.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/ingest/codex.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/ingest_guard.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/isolation_proof.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/jsonl_backup.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg/__init__.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg_cleanup.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg_judge.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg_promotion.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg_repo.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg_review_session.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg_session_finish.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/kg_session_harvest.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/launchd_primitive.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/lexical_defense.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/lexical_defense_dictionary.json +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/maintenance.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/enrich_handler.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/entity_handler.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp/tags_handler.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/mcp_stdio_bridge.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/memory_types.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/p0_longitudinal_count.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/parent_death.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/paths.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/phonetic.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/__init__.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/agent_enrichment.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/analyze_communication.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/batch_extraction.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/brain_graph.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/chat_tags.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/chunk.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/classify.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/cluster_sampling.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/code_intelligence.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/correction_detection.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/correction_mining.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/digest.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/enrichment_tiers.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/entity_extraction.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/entity_resolution.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_claude_desktop.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_corrections.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_markdown.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/extract_whatsapp.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/frustration_mining.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/git_overlay.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/kg_extraction.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/kg_extraction_groq.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/longitudinal_analyzer.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/obsidian_export.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/operation_grouping.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/plan_linking.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/rate_limiter.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/sanitize.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/secret_scrub.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/semantic_style.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/sentiment.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/session_enrichment.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/style_embed.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/style_index.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/tag_entity_promotion.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/temporal_chains.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/time_batcher.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/unified_timeline.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/pipeline/write_queue.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/provenance.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/provenance_autosupersede.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/provenance_integration.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/queue_io.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/queue_merge.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/reembed_backfill.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/sandbox_db.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/scoping.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/search_profile.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/session_repo.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/setup.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/storage.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/system_prompt_guard.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/tag_normalization.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/taxonomy.json +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/telemetry.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/types.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/wal_checkpoint.py +0 -0
- {brainlayer-1.4.3 → brainlayer-1.4.4}/src/brainlayer/watcher_bridge.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'
|
|
@@ -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",
|
|
@@ -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,6 +16,8 @@
|
|
|
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
|
|
20
22
|
# ./scripts/launchd/install.sh p0-counter # Install daily P0 longitudinal counter only
|
|
21
23
|
# ./scripts/launchd/install.sh remove # Unload and remove all
|
|
@@ -62,6 +64,8 @@ PYTHON_BIN="$(stable_brainlayer_path "${PYTHON_BIN:-$(command -v python3)}")"
|
|
|
62
64
|
BRAINLAYER_PYTHON="$(stable_brainlayer_path "${BRAINLAYER_PYTHON:-$PYTHON_BIN}")"
|
|
63
65
|
BRAINLAYER_ENV_FILE="${BRAINLAYER_ENV_FILE:-$HOME/.config/brainlayer/brainlayer.env}"
|
|
64
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"
|
|
65
69
|
|
|
66
70
|
if [ -z "$PYTHON_BIN" ]; then
|
|
67
71
|
echo "ERROR: python3 not found in PATH"
|
|
@@ -266,6 +270,104 @@ install_jsonl_backup_script() {
|
|
|
266
270
|
echo "Installed: $dst"
|
|
267
271
|
}
|
|
268
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
|
+
|
|
269
371
|
remove_plist() {
|
|
270
372
|
local name="$1"
|
|
271
373
|
local dst="$LAUNCH_DIR/com.brainlayer.${name}.plist"
|
|
@@ -327,6 +429,12 @@ case "${1:-all}" in
|
|
|
327
429
|
health-check)
|
|
328
430
|
install_plist health-check
|
|
329
431
|
;;
|
|
432
|
+
tier0|tier0-watchdog)
|
|
433
|
+
install_tier0_watchdog
|
|
434
|
+
;;
|
|
435
|
+
throughput-watchdog)
|
|
436
|
+
install_throughput_watchdog
|
|
437
|
+
;;
|
|
330
438
|
hotlane|hotlane-brainbar)
|
|
331
439
|
verify_gemini_env_file
|
|
332
440
|
install_plist hotlane-brainbar
|
|
@@ -364,6 +472,12 @@ case "${1:-all}" in
|
|
|
364
472
|
if ! install_many maintenance-nightly maintenance-weekly health-check p0-counter; then
|
|
365
473
|
failures=1
|
|
366
474
|
fi
|
|
475
|
+
if ! install_tier0_watchdog; then
|
|
476
|
+
failures=1
|
|
477
|
+
fi
|
|
478
|
+
if ! install_throughput_watchdog; then
|
|
479
|
+
failures=1
|
|
480
|
+
fi
|
|
367
481
|
# Remove old enrich plist only after the replacement enrichment service loads.
|
|
368
482
|
if [ "$enrichment_ok" -eq 1 ]; then
|
|
369
483
|
remove_plist enrich 2>/dev/null || true
|
|
@@ -386,13 +500,17 @@ case "${1:-all}" in
|
|
|
386
500
|
remove_plist maintenance-nightly 2>/dev/null || true
|
|
387
501
|
remove_plist maintenance-weekly 2>/dev/null || true
|
|
388
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
|
|
389
505
|
remove_plist hotlane-brainbar 2>/dev/null || true
|
|
390
506
|
remove_plist p0-counter 2>/dev/null || true
|
|
391
507
|
rm -f "$BRAINLAYER_LIB_DIR/backup-daily.sh"
|
|
392
508
|
rm -f "$BRAINLAYER_LIB_DIR/jsonl-backup.sh"
|
|
509
|
+
rm -f "$TIER0_WATCHDOG_DST"
|
|
510
|
+
rm -f "$THROUGHPUT_WATCHDOG_DST"
|
|
393
511
|
;;
|
|
394
512
|
*)
|
|
395
|
-
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|p0-counter|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]"
|
|
396
514
|
exit 1
|
|
397
515
|
;;
|
|
398
516
|
esac
|