shellbrain 0.1.35__tar.gz → 0.1.37__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.
- {shellbrain-0.1.35 → shellbrain-0.1.37}/PKG-INFO +64 -37
- {shellbrain-0.1.35 → shellbrain-0.1.37}/README.md +63 -36
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/associations.py +0 -1
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/concepts.py +31 -5
- shellbrain-0.1.37/app/core/entities/evidence.py +222 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/memories.py +80 -4
- shellbrain-0.1.37/app/core/entities/snapshots.py +288 -0
- shellbrain-0.1.37/app/core/entities/structural_memory_relations.py +153 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/add_plan.py +22 -7
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/link_rules.py +9 -32
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/update_plan.py +46 -9
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/context_pack.py +4 -5
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/expansion.py +13 -34
- shellbrain-0.1.37/app/core/policies/retrieval/ontology_semantics.py +226 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/concept_repositories.py +24 -4
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/memory_repositories.py +35 -31
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/retrieval_repositories.py +3 -13
- shellbrain-0.1.37/app/core/ports/db/snapshots.py +52 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/unit_of_work.py +2 -0
- shellbrain-0.1.37/app/core/ports/local_state/shadow_git.py +27 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/execute.py +3 -1
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/request.py +6 -1
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/__init__.py +2 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/execute.py +195 -27
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/request.py +40 -7
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/views.py +63 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/execute.py +10 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/result.py +1 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/effect_plan.py +38 -15
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/reference_checks.py +93 -17
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/update/execute.py +23 -3
- shellbrain-0.1.37/app/core/use_cases/memories/update/request.py +256 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/update/result.py +2 -1
- shellbrain-0.1.37/app/core/use_cases/plan_execution.py +370 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/context_pack_pipeline.py +17 -3
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/deterministic_graph_recall.py +158 -167
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/expansion.py +26 -23
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read_concepts.py +56 -44
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/seed_retrieval.py +22 -19
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/record/execute.py +119 -1
- shellbrain-0.1.37/app/core/use_cases/scenarios/record/result.py +59 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/__init__.py +1 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/__init__.py +16 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/execute.py +152 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/request.py +34 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/result.py +45 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/code_delta_context/__init__.py +16 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/code_delta_context/execute.py +107 -0
- shellbrain-0.1.37/app/core/use_cases/snapshots/code_delta_context/request.py +28 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/cli_operation.py +6 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/dependencies.py +2 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +1 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +23 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +1 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +2 -0
- shellbrain-0.1.37/app/entrypoints/cli/handlers/working_agent/snapshot.py +166 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/operation_command.py +1 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/parser/builder.py +27 -16
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/runner.py +20 -3
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/runtime.py +1 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/associations.py +0 -17
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/concepts.py +56 -21
- shellbrain-0.1.37/app/infrastructure/db/runtime/models/evidence.py +114 -0
- shellbrain-0.1.37/app/infrastructure/db/runtime/models/experiences.py +130 -0
- shellbrain-0.1.37/app/infrastructure/db/runtime/models/memories.py +110 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/registry.py +2 -0
- shellbrain-0.1.37/app/infrastructure/db/runtime/models/snapshots.py +114 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/utility.py +0 -17
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/views.py +21 -27
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +234 -41
- shellbrain-0.1.37/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +353 -0
- shellbrain-0.1.37/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +159 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +56 -7
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +24 -59
- shellbrain-0.1.37/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +206 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +10 -3
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +28 -6
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/uow.py +2 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/prompt.py +92 -75
- shellbrain-0.1.37/app/infrastructure/local_state/shadow_git_store.py +363 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/write_records.py +45 -17
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/cli.py +2 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/cli_runtime.py +1 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/operation_dependencies.py +4 -0
- shellbrain-0.1.37/app/startup/snapshot_baseline.py +36 -0
- shellbrain-0.1.37/migrations/_legacy_usage_views.py +91 -0
- shellbrain-0.1.37/migrations/_usage_view_sql.py +1114 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260312_0003_drop_create_confidence.py +11 -2
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260318_0006_usage_telemetry_schema.py +1 -1
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260414_0010_model_usage_telemetry.py +5 -3
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +4 -2
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +1 -1
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260422_0015_problem_runs.py +7 -5
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260516_0020_knowledge_build_observability.py +1 -1
- shellbrain-0.1.37/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +490 -0
- shellbrain-0.1.37/migrations/versions/20260522_0030_concept_lifecycle_events.py +116 -0
- shellbrain-0.1.37/migrations/versions/20260522_0031_unified_evidence_storage.py +469 -0
- shellbrain-0.1.37/migrations/versions/20260522_0032_memory_lifecycle_events.py +171 -0
- shellbrain-0.1.37/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +205 -0
- shellbrain-0.1.37/migrations/versions/20260522_0034_structural_memory_relations.py +387 -0
- shellbrain-0.1.37/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +346 -0
- shellbrain-0.1.37/migrations/versions/20260526_0036_shadow_snapshots.py +159 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/claude/CLAUDE.md +2 -0
- {shellbrain-0.1.35/onboarding_assets/cursor → shellbrain-0.1.37/onboarding_assets/claude}/skills/shellbrain/SKILL.md +18 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/AGENTS.md +2 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/SKILL.md +18 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/references/request-shapes.md +15 -1
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/references/session-workflow.md +8 -0
- {shellbrain-0.1.35/onboarding_assets/claude → shellbrain-0.1.37/onboarding_assets/cursor}/skills/shellbrain/SKILL.md +18 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/pyproject.toml +1 -1
- {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/PKG-INFO +64 -37
- {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/SOURCES.txt +28 -1
- shellbrain-0.1.35/app/core/entities/evidence.py +0 -37
- shellbrain-0.1.35/app/core/entities/facts.py +0 -30
- shellbrain-0.1.35/app/core/use_cases/memories/update/request.py +0 -135
- shellbrain-0.1.35/app/core/use_cases/plan_execution.py +0 -167
- shellbrain-0.1.35/app/core/use_cases/scenarios/record/result.py +0 -29
- shellbrain-0.1.35/app/infrastructure/db/runtime/models/evidence.py +0 -21
- shellbrain-0.1.35/app/infrastructure/db/runtime/models/experiences.py +0 -88
- shellbrain-0.1.35/app/infrastructure/db/runtime/models/memories.py +0 -80
- shellbrain-0.1.35/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +0 -116
- shellbrain-0.1.35/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -41
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/__main__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/admin_errors.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/backups.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/episodes.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/guidance.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/identity.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/ids.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/inner_agents.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/knowledge_builder.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/machine_config.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/runtime_context.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/scenarios.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/session_state.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/settings.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/utility.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/errors.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/concepts/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/concepts/relation_rules.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/concepts/search_text.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/episodes/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/episodes/event_content.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/episodes/knowledge_building.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/bm25.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/fusion_rrf.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/lexical_query.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/scoring.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/episode_repositories.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/guidance.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/knowledge_builder.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/problem_runs.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/embeddings/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/embeddings/provider.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/embeddings/retrieval.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/host_apps/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/host_apps/inner_agents.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/local_state/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/local_state/session_state_store.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/reporting/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/reporting/metrics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/system/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/system/clock.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/system/idgen.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/create_backup.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/initialize_runtime.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/restore_backup.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/verify_backup.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/build_guidance.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/execute.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/containment_checks.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/embeddings.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/reference_checks.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/events/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/events/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/update/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/build_snapshot.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/build_context/execute.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/execute.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/execute.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/result.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/record/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/record/request.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/error_responses.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/admin.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/init.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/session_state.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/main.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/parser/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/init.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/json.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/metrics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/memories.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/teach.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/host_hooks/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/jobs/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/jobs/episode_sync.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/app_role_safety.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/restore.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/connection.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/instance_guard.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/migrations.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/privileges.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/storage_setup.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/engine.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/episodes.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/metadata.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/session.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/local_provider.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/prewarm.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/query_vector_search.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/claude.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/codex.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/cursor.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/inspection.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/paths.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/service.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/types.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/resolver.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/codex_cli.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/init_lock.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/machine_config_store.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/operation_registration.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/paths.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/repo_registration_store.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/session_state_file_store.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/autostart.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/launcher.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/poller.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/status_store.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/browser.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/pager.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/render_html.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/clock.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/id_generator.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/package_upgrade.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/operation_invocations.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/operation_polling.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/read_records.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/recall_records.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/recorder.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/records.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/sink.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/storage_protocols.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/sync_records.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/create_policy.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/read_policy.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/runtime.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/thresholds.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/update_policy.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/internal-agents/defaults.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin_db.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin_dependencies.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin_diagnose.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/analytics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/backup.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/config.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/create_policy.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/db.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/dsn_resolution.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/embeddings.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/episode_poller.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/episode_sync_launcher.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/host_hooks.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/internal_agent_config.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/internal_agents.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/knowledge_builder.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/metrics.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/migrations.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/model_usage_backfill.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/read_policy.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/repo_context.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/repos.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/retrieval.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/runtime_admin.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/runtime_context.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/settings.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/thresholds.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/update_policy.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/use_cases.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/env.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260226_0001_initial_schema.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260515_0019_scenario_records.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/__init__.py +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/setup.cfg +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/dependency_links.txt +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/entry_points.txt +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/requires.txt +0 -0
- {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: shellbrain
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.37
|
|
4
4
|
Summary: Repo-scoped Shellbrain CLI with explicit evidence-backed writes.
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -22,7 +22,28 @@ Requires-Dist: sentence-transformers<4.0,>=3.0
|
|
|
22
22
|
|
|
23
23
|
Agents forget across sessions. They rediscover the same problems, repeat the same mistakes, and relearn what you already taught them. **ShellBrain makes their work compound.**
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
curl -L shellbrain.ai/install | bash
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
|
|
32
|
+
|
|
33
|
+
Requirements.
|
|
34
|
+
- macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
|
|
35
|
+
|
|
36
|
+
### Upgrade for latest capabilities
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
shellbrain upgrade
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Recall in one command.
|
|
26
47
|
Episodic, empirical, conceptual. Three categories, one retrieval surface.
|
|
27
48
|
|
|
28
49
|
---
|
|
@@ -36,7 +57,7 @@ Episodic, empirical, conceptual. Three categories, one retrieval surface.
|
|
|
36
57
|
- An ontology of problems, solutions, failed tactics, facts, preferences, changes.
|
|
37
58
|
- This is **case-based reasoning** in a semantic graph.
|
|
38
59
|
|
|
39
|
-
**Conceptual
|
|
60
|
+
**Conceptual knowledge** is the _abstractive_ layer.
|
|
40
61
|
- A **higher-level concept graph** with claims, relations, and implementations that link back to the concrete layer.
|
|
41
62
|
- **Progressive disclosure.** agents get oriented first, then ask for depth only where tasks require it.
|
|
42
63
|
|
|
@@ -44,21 +65,52 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
|
|
|
44
65
|
|
|
45
66
|
---
|
|
46
67
|
|
|
47
|
-
## How
|
|
68
|
+
## How Agents Use ShellBrain
|
|
48
69
|
|
|
49
|
-
|
|
70
|
+
### Recall
|
|
71
|
+
|
|
72
|
+
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief**, with sources cited.
|
|
50
73
|
|
|
51
74
|
```bash
|
|
52
|
-
shellbrain recall --json '{"query":"
|
|
75
|
+
shellbrain recall --json '{"query":"What is ShellBrain and how does it help a working coding agent?","current_problem":{"goal":"understand ShellBrain","surface":"README","obstacle":"new readers do not know the product yet","hypothesis":"a real recall brief should show what agents get back"}}'
|
|
53
76
|
```
|
|
54
77
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
78
|
+
Response shape:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"status": "ok",
|
|
83
|
+
"data": {
|
|
84
|
+
"brief": {
|
|
85
|
+
"summary": "...",
|
|
86
|
+
"constraints": ["..."],
|
|
87
|
+
"known_traps": ["..."],
|
|
88
|
+
"prior_cases": ["..."],
|
|
89
|
+
"concept_orientation": ["..."],
|
|
90
|
+
"anchors": ["`README.md`"],
|
|
91
|
+
"conflicts": ["..."],
|
|
92
|
+
"gaps": ["..."],
|
|
93
|
+
"next_checks": ["..."],
|
|
94
|
+
"sources": [
|
|
95
|
+
{
|
|
96
|
+
"kind": "memory",
|
|
97
|
+
"id": "...",
|
|
98
|
+
"section": "direct"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"fallback_reason": null
|
|
103
|
+
},
|
|
104
|
+
"errors": []
|
|
105
|
+
}
|
|
106
|
+
```
|
|
59
107
|
|
|
60
108
|
**Working agents focus on only their work.**
|
|
61
109
|
|
|
110
|
+
### Teach
|
|
111
|
+
|
|
112
|
+
**Working agents call `shellbrain teach` for explicit teaching.** You can tell an agent to remember important ideas.
|
|
113
|
+
|
|
62
114
|
---
|
|
63
115
|
|
|
64
116
|
## Principled and Disciplined
|
|
@@ -69,27 +121,6 @@ Memory that is grounded in evidence, small in scope, and asked for rather than p
|
|
|
69
121
|
|
|
70
122
|
---
|
|
71
123
|
|
|
72
|
-
## Install
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
curl -L shellbrain.ai/install | bash
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
**Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
|
|
79
|
-
|
|
80
|
-
Requirements.
|
|
81
|
-
- macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
|
|
82
|
-
|
|
83
|
-
### Upgrade for latest capabilities
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
shellbrain upgrade
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
124
|
## How to Use ShellBrain
|
|
94
125
|
|
|
95
126
|
Use Shellbrain in your agent of choice. Then, just work normally.
|
|
@@ -104,7 +135,7 @@ Use Shellbrain in your agent of choice. Then, just work normally.
|
|
|
104
135
|
|
|
105
136
|
## Repair
|
|
106
137
|
|
|
107
|
-
`shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session
|
|
138
|
+
`shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session.
|
|
108
139
|
|
|
109
140
|
---
|
|
110
141
|
|
|
@@ -112,8 +143,4 @@ Use Shellbrain in your agent of choice. Then, just work normally.
|
|
|
112
143
|
|
|
113
144
|
- [shellbrain.ai/humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
|
|
114
145
|
- [shellbrain.ai/agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
|
|
115
|
-
- [shellbrain.ai/
|
|
116
|
-
- [shellbrain.ai/memory/episodic](https://shellbrain.ai/memory/episodic/) — transcript evidence
|
|
117
|
-
- [shellbrain.ai/memory/semantic](https://shellbrain.ai/memory/semantic/) — facts, preferences, changes
|
|
118
|
-
- [shellbrain.ai/memory/procedural](https://shellbrain.ai/memory/procedural/) — problems, solutions, failed tactics
|
|
119
|
-
- [shellbrain.ai/memory/associative](https://shellbrain.ai/memory/associative/) — explicit links and semantic neighbors
|
|
146
|
+
- [shellbrain.ai/architecture](https://shellbrain.ai/architecture/) — memory model, storage, and boundaries
|
|
@@ -8,7 +8,28 @@
|
|
|
8
8
|
|
|
9
9
|
Agents forget across sessions. They rediscover the same problems, repeat the same mistakes, and relearn what you already taught them. **ShellBrain makes their work compound.**
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl -L shellbrain.ai/install | bash
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
|
|
18
|
+
|
|
19
|
+
Requirements.
|
|
20
|
+
- macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
|
|
21
|
+
|
|
22
|
+
### Upgrade for latest capabilities
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
shellbrain upgrade
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Recall in one command.
|
|
12
33
|
Episodic, empirical, conceptual. Three categories, one retrieval surface.
|
|
13
34
|
|
|
14
35
|
---
|
|
@@ -22,7 +43,7 @@ Episodic, empirical, conceptual. Three categories, one retrieval surface.
|
|
|
22
43
|
- An ontology of problems, solutions, failed tactics, facts, preferences, changes.
|
|
23
44
|
- This is **case-based reasoning** in a semantic graph.
|
|
24
45
|
|
|
25
|
-
**Conceptual
|
|
46
|
+
**Conceptual knowledge** is the _abstractive_ layer.
|
|
26
47
|
- A **higher-level concept graph** with claims, relations, and implementations that link back to the concrete layer.
|
|
27
48
|
- **Progressive disclosure.** agents get oriented first, then ask for depth only where tasks require it.
|
|
28
49
|
|
|
@@ -30,21 +51,52 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
|
|
|
30
51
|
|
|
31
52
|
---
|
|
32
53
|
|
|
33
|
-
## How
|
|
54
|
+
## How Agents Use ShellBrain
|
|
34
55
|
|
|
35
|
-
|
|
56
|
+
### Recall
|
|
57
|
+
|
|
58
|
+
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief**, with sources cited.
|
|
36
59
|
|
|
37
60
|
```bash
|
|
38
|
-
shellbrain recall --json '{"query":"
|
|
61
|
+
shellbrain recall --json '{"query":"What is ShellBrain and how does it help a working coding agent?","current_problem":{"goal":"understand ShellBrain","surface":"README","obstacle":"new readers do not know the product yet","hypothesis":"a real recall brief should show what agents get back"}}'
|
|
39
62
|
```
|
|
40
63
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
64
|
+
Response shape:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"status": "ok",
|
|
69
|
+
"data": {
|
|
70
|
+
"brief": {
|
|
71
|
+
"summary": "...",
|
|
72
|
+
"constraints": ["..."],
|
|
73
|
+
"known_traps": ["..."],
|
|
74
|
+
"prior_cases": ["..."],
|
|
75
|
+
"concept_orientation": ["..."],
|
|
76
|
+
"anchors": ["`README.md`"],
|
|
77
|
+
"conflicts": ["..."],
|
|
78
|
+
"gaps": ["..."],
|
|
79
|
+
"next_checks": ["..."],
|
|
80
|
+
"sources": [
|
|
81
|
+
{
|
|
82
|
+
"kind": "memory",
|
|
83
|
+
"id": "...",
|
|
84
|
+
"section": "direct"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"fallback_reason": null
|
|
89
|
+
},
|
|
90
|
+
"errors": []
|
|
91
|
+
}
|
|
92
|
+
```
|
|
45
93
|
|
|
46
94
|
**Working agents focus on only their work.**
|
|
47
95
|
|
|
96
|
+
### Teach
|
|
97
|
+
|
|
98
|
+
**Working agents call `shellbrain teach` for explicit teaching.** You can tell an agent to remember important ideas.
|
|
99
|
+
|
|
48
100
|
---
|
|
49
101
|
|
|
50
102
|
## Principled and Disciplined
|
|
@@ -55,27 +107,6 @@ Memory that is grounded in evidence, small in scope, and asked for rather than p
|
|
|
55
107
|
|
|
56
108
|
---
|
|
57
109
|
|
|
58
|
-
## Install
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
curl -L shellbrain.ai/install | bash
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
|
|
65
|
-
|
|
66
|
-
Requirements.
|
|
67
|
-
- macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
|
|
68
|
-
|
|
69
|
-
### Upgrade for latest capabilities
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
shellbrain upgrade
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
110
|
## How to Use ShellBrain
|
|
80
111
|
|
|
81
112
|
Use Shellbrain in your agent of choice. Then, just work normally.
|
|
@@ -90,7 +121,7 @@ Use Shellbrain in your agent of choice. Then, just work normally.
|
|
|
90
121
|
|
|
91
122
|
## Repair
|
|
92
123
|
|
|
93
|
-
`shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session
|
|
124
|
+
`shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session.
|
|
94
125
|
|
|
95
126
|
---
|
|
96
127
|
|
|
@@ -98,8 +129,4 @@ Use Shellbrain in your agent of choice. Then, just work normally.
|
|
|
98
129
|
|
|
99
130
|
- [shellbrain.ai/humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
|
|
100
131
|
- [shellbrain.ai/agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
|
|
101
|
-
- [shellbrain.ai/
|
|
102
|
-
- [shellbrain.ai/memory/episodic](https://shellbrain.ai/memory/episodic/) — transcript evidence
|
|
103
|
-
- [shellbrain.ai/memory/semantic](https://shellbrain.ai/memory/semantic/) — facts, preferences, changes
|
|
104
|
-
- [shellbrain.ai/memory/procedural](https://shellbrain.ai/memory/procedural/) — problems, solutions, failed tactics
|
|
105
|
-
- [shellbrain.ai/memory/associative](https://shellbrain.ai/memory/associative/) — explicit links and semantic neighbors
|
|
132
|
+
- [shellbrain.ai/architecture](https://shellbrain.ai/architecture/) — memory model, storage, and boundaries
|
|
@@ -35,6 +35,16 @@ class ConceptLifecycleStatus(str, Enum):
|
|
|
35
35
|
STALE = "stale"
|
|
36
36
|
SUPERSEDED = "superseded"
|
|
37
37
|
WRONG = "wrong"
|
|
38
|
+
ARCHIVED = "archived"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ConceptLifecycleTargetType(str, Enum):
|
|
42
|
+
"""Truth-bearing concept record types with mutable lifecycle state."""
|
|
43
|
+
|
|
44
|
+
RELATION = "relation"
|
|
45
|
+
CLAIM = "claim"
|
|
46
|
+
GROUNDING = "grounding"
|
|
47
|
+
MEMORY_LINK = "memory_link"
|
|
38
48
|
|
|
39
49
|
|
|
40
50
|
class ConceptRelationPredicate(str, Enum):
|
|
@@ -73,7 +83,6 @@ class AnchorKind(str, Enum):
|
|
|
73
83
|
LOG = "log"
|
|
74
84
|
DOC = "doc"
|
|
75
85
|
COMMIT = "commit"
|
|
76
|
-
MEMORY = "memory"
|
|
77
86
|
|
|
78
87
|
|
|
79
88
|
class AnchorStatus(str, Enum):
|
|
@@ -103,10 +112,8 @@ class ConceptMemoryLinkRole(str, Enum):
|
|
|
103
112
|
EXAMPLE_OF = "example_of"
|
|
104
113
|
SOLUTION_FOR = "solution_for"
|
|
105
114
|
FAILED_TACTIC_FOR = "failed_tactic_for"
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
CONTRADICTED = "contradicted"
|
|
109
|
-
WARNED_ABOUT = "warned_about"
|
|
115
|
+
WARNS_ABOUT = "warns_about"
|
|
116
|
+
CHANGE_RELEVANT_TO = "change_relevant_to"
|
|
110
117
|
|
|
111
118
|
|
|
112
119
|
class ConceptEvidenceTargetType(str, Enum):
|
|
@@ -116,6 +123,7 @@ class ConceptEvidenceTargetType(str, Enum):
|
|
|
116
123
|
CLAIM = "claim"
|
|
117
124
|
GROUNDING = "grounding"
|
|
118
125
|
MEMORY_LINK = "memory_link"
|
|
126
|
+
LIFECYCLE_EVENT = "lifecycle_event"
|
|
119
127
|
|
|
120
128
|
|
|
121
129
|
class ConceptEvidenceKind(str, Enum):
|
|
@@ -193,10 +201,28 @@ class ConceptLifecycle:
|
|
|
193
201
|
confidence: float = 0.5
|
|
194
202
|
observed_at: datetime | None = None
|
|
195
203
|
validated_at: datetime | None = None
|
|
204
|
+
invalidated_at: datetime | None = None
|
|
196
205
|
source_kind: ConceptSourceKind | None = None
|
|
197
206
|
source_ref: str | None = None
|
|
198
207
|
superseded_by_id: str | None = None
|
|
199
208
|
created_by: ConceptCreatedBy = ConceptCreatedBy.MANUAL
|
|
209
|
+
updated_by: ConceptCreatedBy | None = None
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
@dataclass(frozen=True, kw_only=True)
|
|
213
|
+
class ConceptLifecycleEvent:
|
|
214
|
+
"""One auditable lifecycle transition for a truth-bearing concept record."""
|
|
215
|
+
|
|
216
|
+
id: str
|
|
217
|
+
repo_id: str
|
|
218
|
+
target_type: ConceptLifecycleTargetType
|
|
219
|
+
target_id: str
|
|
220
|
+
from_status: ConceptLifecycleStatus
|
|
221
|
+
to_status: ConceptLifecycleStatus
|
|
222
|
+
rationale: str
|
|
223
|
+
actor: ConceptCreatedBy
|
|
224
|
+
superseded_by_id: str | None = None
|
|
225
|
+
created_at: datetime | None = None
|
|
200
226
|
|
|
201
227
|
|
|
202
228
|
@dataclass(frozen=True, kw_only=True)
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"""This module defines evidence references and unified evidence-link entities."""
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
import json
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
from app.core.entities.ids import (
|
|
10
|
+
AssociationEdgeId,
|
|
11
|
+
EvidenceId,
|
|
12
|
+
EvidenceRefText,
|
|
13
|
+
MemoryId,
|
|
14
|
+
RepoId,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class EvidenceTargetType(str, Enum):
|
|
19
|
+
"""Storage-neutral targets that may carry evidence."""
|
|
20
|
+
|
|
21
|
+
MEMORY = "memory"
|
|
22
|
+
ASSOCIATION_EDGE = "association_edge"
|
|
23
|
+
UTILITY_OBSERVATION = "utility_observation"
|
|
24
|
+
CONCEPT_CLAIM = "concept_claim"
|
|
25
|
+
CONCEPT_RELATION = "concept_relation"
|
|
26
|
+
CONCEPT_GROUNDING = "concept_grounding"
|
|
27
|
+
CONCEPT_MEMORY_LINK = "concept_memory_link"
|
|
28
|
+
CONCEPT_LIFECYCLE_EVENT = "concept_lifecycle_event"
|
|
29
|
+
MEMORY_LIFECYCLE_EVENT = "memory_lifecycle_event"
|
|
30
|
+
STRUCTURAL_MEMORY_RELATION = "structural_memory_relation"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class EvidenceSourceKind(str, Enum):
|
|
34
|
+
"""Storage-neutral kinds of evidence sources."""
|
|
35
|
+
|
|
36
|
+
EPISODE_EVENT = "episode_event"
|
|
37
|
+
ANCHOR = "anchor"
|
|
38
|
+
MEMORY = "memory"
|
|
39
|
+
COMMIT = "commit"
|
|
40
|
+
TRANSCRIPT = "transcript"
|
|
41
|
+
TEST = "test"
|
|
42
|
+
MANUAL = "manual"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class EvidenceRole(str, Enum):
|
|
46
|
+
"""Semantic role an evidence source plays for a target."""
|
|
47
|
+
|
|
48
|
+
SUPPORTS = "supports"
|
|
49
|
+
CONTRADICTS = "contradicts"
|
|
50
|
+
OBSERVED_IN = "observed_in"
|
|
51
|
+
CREATED_FROM = "created_from"
|
|
52
|
+
VALIDATED_BY = "validated_by"
|
|
53
|
+
INVALIDATED_BY = "invalidated_by"
|
|
54
|
+
EXPLAINS = "explains"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@dataclass(kw_only=True)
|
|
58
|
+
class EvidenceRef:
|
|
59
|
+
"""This dataclass models a canonical evidence reference entry."""
|
|
60
|
+
|
|
61
|
+
id: EvidenceId
|
|
62
|
+
repo_id: RepoId
|
|
63
|
+
ref: EvidenceRefText
|
|
64
|
+
kind: EvidenceSourceKind = EvidenceSourceKind.EPISODE_EVENT
|
|
65
|
+
canonical_hash: str | None = None
|
|
66
|
+
episode_event_id: str | None = None
|
|
67
|
+
anchor_id: str | None = None
|
|
68
|
+
memory_id: str | None = None
|
|
69
|
+
commit_ref: str | None = None
|
|
70
|
+
transcript_ref: str | None = None
|
|
71
|
+
note: str | None = None
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass(frozen=True, kw_only=True)
|
|
75
|
+
class EvidenceTarget:
|
|
76
|
+
"""One evidence-backed target in the unified evidence API."""
|
|
77
|
+
|
|
78
|
+
target_type: EvidenceTargetType
|
|
79
|
+
target_id: str
|
|
80
|
+
|
|
81
|
+
def __post_init__(self) -> None:
|
|
82
|
+
object.__setattr__(
|
|
83
|
+
self, "target_type", EvidenceTargetType(self.target_type)
|
|
84
|
+
)
|
|
85
|
+
if not self.target_id.strip():
|
|
86
|
+
raise ValueError("evidence target_id must be non-empty")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@dataclass(frozen=True, kw_only=True)
|
|
90
|
+
class EvidenceSource:
|
|
91
|
+
"""One normalized source that can support an evidence-backed target."""
|
|
92
|
+
|
|
93
|
+
source_kind: EvidenceSourceKind
|
|
94
|
+
ref: str | None = None
|
|
95
|
+
episode_event_id: str | None = None
|
|
96
|
+
anchor_id: str | None = None
|
|
97
|
+
memory_id: str | None = None
|
|
98
|
+
commit_ref: str | None = None
|
|
99
|
+
transcript_ref: str | None = None
|
|
100
|
+
note: str | None = None
|
|
101
|
+
|
|
102
|
+
def __post_init__(self) -> None:
|
|
103
|
+
object.__setattr__(
|
|
104
|
+
self, "source_kind", EvidenceSourceKind(self.source_kind)
|
|
105
|
+
)
|
|
106
|
+
if self.source_kind is EvidenceSourceKind.EPISODE_EVENT:
|
|
107
|
+
event_ref = self.ref or self.episode_event_id
|
|
108
|
+
if event_ref is None or not event_ref.strip():
|
|
109
|
+
raise ValueError("episode_event evidence requires ref")
|
|
110
|
+
if self.ref is not None and self.episode_event_id is not None:
|
|
111
|
+
if self.ref != self.episode_event_id:
|
|
112
|
+
raise ValueError("episode_event ref and episode_event_id differ")
|
|
113
|
+
object.__setattr__(self, "ref", event_ref)
|
|
114
|
+
object.__setattr__(self, "episode_event_id", event_ref)
|
|
115
|
+
_require_no_fields(
|
|
116
|
+
self,
|
|
117
|
+
"anchor_id",
|
|
118
|
+
"memory_id",
|
|
119
|
+
"commit_ref",
|
|
120
|
+
"transcript_ref",
|
|
121
|
+
"note",
|
|
122
|
+
)
|
|
123
|
+
return
|
|
124
|
+
|
|
125
|
+
required_field = _SOURCE_REQUIRED_FIELD[self.source_kind]
|
|
126
|
+
_require_one_field(self, required_field)
|
|
127
|
+
_require_no_fields(
|
|
128
|
+
self,
|
|
129
|
+
*(
|
|
130
|
+
field
|
|
131
|
+
for field in _SOURCE_REFERENCE_FIELDS
|
|
132
|
+
if field != required_field
|
|
133
|
+
),
|
|
134
|
+
"ref",
|
|
135
|
+
"episode_event_id",
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
@dataclass(frozen=True, kw_only=True)
|
|
140
|
+
class EvidenceLinkView:
|
|
141
|
+
"""One resolved evidence link with a storage-neutral target and source."""
|
|
142
|
+
|
|
143
|
+
target: EvidenceTarget
|
|
144
|
+
source: EvidenceSource
|
|
145
|
+
role: EvidenceRole
|
|
146
|
+
evidence_id: EvidenceId | None = None
|
|
147
|
+
created_at: datetime | None = None
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
@dataclass(kw_only=True)
|
|
151
|
+
class MemoryEvidenceLink:
|
|
152
|
+
"""This dataclass models a many-to-many link between shellbrain and evidence."""
|
|
153
|
+
|
|
154
|
+
memory_id: MemoryId
|
|
155
|
+
evidence_id: EvidenceId
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
@dataclass(kw_only=True)
|
|
159
|
+
class AssociationEdgeEvidenceLink:
|
|
160
|
+
"""This dataclass models a many-to-many link between association edges and evidence."""
|
|
161
|
+
|
|
162
|
+
edge_id: AssociationEdgeId
|
|
163
|
+
evidence_id: EvidenceId
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
_SOURCE_REQUIRED_FIELD: dict[EvidenceSourceKind, str] = {
|
|
167
|
+
EvidenceSourceKind.ANCHOR: "anchor_id",
|
|
168
|
+
EvidenceSourceKind.MEMORY: "memory_id",
|
|
169
|
+
EvidenceSourceKind.COMMIT: "commit_ref",
|
|
170
|
+
EvidenceSourceKind.TRANSCRIPT: "transcript_ref",
|
|
171
|
+
EvidenceSourceKind.TEST: "note",
|
|
172
|
+
EvidenceSourceKind.MANUAL: "note",
|
|
173
|
+
}
|
|
174
|
+
_SOURCE_REFERENCE_FIELDS = frozenset(_SOURCE_REQUIRED_FIELD.values())
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def _require_one_field(source: EvidenceSource, field: str) -> None:
|
|
178
|
+
value = getattr(source, field)
|
|
179
|
+
if value is None or not str(value).strip():
|
|
180
|
+
raise ValueError(f"{source.source_kind.value} evidence requires {field}")
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def _require_no_fields(source: EvidenceSource, *fields: str) -> None:
|
|
184
|
+
extra_fields = [
|
|
185
|
+
field
|
|
186
|
+
for field in fields
|
|
187
|
+
if getattr(source, field) is not None
|
|
188
|
+
]
|
|
189
|
+
if extra_fields:
|
|
190
|
+
raise ValueError(
|
|
191
|
+
f"{source.source_kind.value} evidence does not accept: "
|
|
192
|
+
+ ", ".join(sorted(extra_fields))
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def canonical_evidence_hash(source: EvidenceSource) -> str:
|
|
197
|
+
"""Return the source-only canonical hash used to dedupe evidence refs."""
|
|
198
|
+
|
|
199
|
+
payload = {
|
|
200
|
+
"kind": source.source_kind.value,
|
|
201
|
+
"identity": _source_identity(source),
|
|
202
|
+
}
|
|
203
|
+
serialized = json.dumps(
|
|
204
|
+
payload, sort_keys=True, separators=(",", ":"), ensure_ascii=False
|
|
205
|
+
)
|
|
206
|
+
return "sha256:" + hashlib.sha256(serialized.encode("utf-8")).hexdigest()
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def evidence_source_ref(source: EvidenceSource) -> str:
|
|
210
|
+
"""Return the required display/source reference string for one evidence source."""
|
|
211
|
+
|
|
212
|
+
return _source_identity(source)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def _source_identity(source: EvidenceSource) -> str:
|
|
216
|
+
if source.source_kind is EvidenceSourceKind.EPISODE_EVENT:
|
|
217
|
+
assert source.episode_event_id is not None
|
|
218
|
+
return source.episode_event_id
|
|
219
|
+
required_field = _SOURCE_REQUIRED_FIELD[source.source_kind]
|
|
220
|
+
value = getattr(source, required_field)
|
|
221
|
+
assert value is not None
|
|
222
|
+
return str(value)
|