shellbrain 0.1.56__tar.gz → 0.1.57__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.56 → shellbrain-0.1.57}/PKG-INFO +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/backups.py +0 -10
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/concepts.py +0 -23
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/episodes.py +1 -18
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/guidance.py +0 -3
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/identity.py +3 -16
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/ids.py +0 -2
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/memories.py +3 -9
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/snapshots.py +2 -17
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/errors.py +0 -3
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/add_plan.py +11 -11
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/update_plan.py +9 -9
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/bm25.py +2 -5
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/lexical_query.py +3 -21
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/ontology_semantics.py +23 -15
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/concept_repositories.py +0 -5
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/episode_repositories.py +1 -19
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -2
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +3 -4
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -7
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/execute.py +4 -17
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/execute.py +10 -9
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/views.py +11 -11
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_discovered_host_session.py +1 -1
- shellbrain-0.1.57/app/core/use_cases/episodes/sync_episode/request.py +40 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_episode/sync_episode.py +20 -40
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +2 -11
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -4
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +2 -11
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -4
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/request.py +0 -14
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/effect_plan.py +0 -8
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/result.py +0 -16
- shellbrain-0.1.57/app/core/use_cases/retrieval/build_context/__init__.py +5 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/build_context/execute.py +33 -90
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/concept_seed_retrieval.py +1 -5
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/context_pack_pipeline.py +7 -21
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/deterministic_graph_recall.py +54 -104
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/result.py +0 -3
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read_concepts.py +9 -25
- shellbrain-0.1.57/app/core/use_cases/retrieval/recall/__init__.py +9 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/seed_retrieval.py +1 -7
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/code_delta_context/execute.py +6 -10
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/dependencies.py +2 -19
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/admin.py +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/admin_dependencies.py +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +1 -34
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +1 -7
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +1 -7
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +2 -2
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/result_envelopes.py +5 -36
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/session_state.py +0 -12
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/snapshot.py +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/concepts.py +7 -25
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/hydration.py +2 -32
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/scenarios.py +2 -4
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/backups/logical_backup.py +41 -41
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/connection.py +7 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/managed_local.py +15 -28
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/storage_setup.py +1 -10
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/engine.py +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/associations.py +0 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/concepts.py +0 -28
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/episodes.py +0 -42
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/registry.py +1 -16
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/telemetry.py +0 -5
- shellbrain-0.1.57/app/infrastructure/db/runtime/repos/memory_visibility.py +27 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +1 -32
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +33 -105
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +17 -52
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +4 -22
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +19 -49
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +7 -27
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +5 -24
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/resolver.py +2 -20
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/prompt.py +0 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/cursor.py +2 -7
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/session_selection.py +2 -2
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/lock_file.py +8 -27
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/poller.py +3 -11
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin_dependencies.py +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/backup.py +4 -17
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/cli.py +7 -8
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/create_policy.py +0 -23
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/embeddings.py +16 -24
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/episode_poller.py +2 -2
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/internal_agents.py +0 -6
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/knowledge_builder.py +2 -2
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/model_usage_backfill.py +3 -4
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/operation_dependencies.py +2 -10
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/read_policy.py +0 -16
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/repo_context.py +1 -7
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/runtime_admin.py +12 -34
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/snapshot_baseline.py +2 -2
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/thresholds.py +0 -6
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/update_policy.py +0 -17
- shellbrain-0.1.57/migrations/versions/20260901_0039_drop_unused_schema.py +72 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/pyproject.toml +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/PKG-INFO +1 -1
- {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/SOURCES.txt +2 -10
- shellbrain-0.1.56/app/core/policies/episodes/event_content.py +0 -18
- shellbrain-0.1.56/app/core/use_cases/admin/create_backup.py +0 -18
- shellbrain-0.1.56/app/core/use_cases/admin/verify_backup.py +0 -21
- shellbrain-0.1.56/app/core/use_cases/concepts/containment_checks.py +0 -26
- shellbrain-0.1.56/app/core/use_cases/episodes/sync_episode/request.py +0 -74
- shellbrain-0.1.56/app/core/use_cases/retrieval/build_context/__init__.py +0 -13
- shellbrain-0.1.56/app/core/use_cases/retrieval/recall/__init__.py +0 -18
- shellbrain-0.1.56/app/core/use_cases/retrieval/recall/execute.py +0 -38
- shellbrain-0.1.56/app/entrypoints/cli/error_responses.py +0 -10
- shellbrain-0.1.56/app/infrastructure/db/admin/backups/manifest_store.py +0 -39
- shellbrain-0.1.56/app/infrastructure/db/admin/provisioning/init_effects.py +0 -20
- shellbrain-0.1.56/app/startup/retrieval.py +0 -3
- shellbrain-0.1.56/app/startup/use_cases.py +0 -22
- {shellbrain-0.1.56 → shellbrain-0.1.57}/README.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/__main__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/admin_errors.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/associations.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/evidence.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/inner_agents.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/knowledge_builder.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/machine_config.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/runtime_context.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/scenarios.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/session_state.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/settings.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/structural_memory_relations.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/utility.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/concepts/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/concepts/relation_rules.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/concepts/search_text.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/episodes/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/episodes/knowledge_building.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/link_rules.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/context_pack.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/expansion.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/fusion_rrf.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/scoring.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/guidance.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/knowledge_builder.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/memory_repositories.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/problem_runs.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/retrieval_repositories.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/snapshots.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/unit_of_work.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/embeddings/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/embeddings/provider.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/embeddings/retrieval.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/host_apps/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/host_apps/inner_agents.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/local_state/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/local_state/session_state_store.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/local_state/shadow_git.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/system/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/system/clock.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/system/idgen.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/initialize_runtime.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/restore_backup.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/build_guidance.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/embeddings.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/reference_checks.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/execute.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/events/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/events/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/execute.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/reference_checks.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/execute.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/metrics/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/plan_execution.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/expansion.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/execute.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/recall/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/recall/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/execute.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/init.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/main.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/parser/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/parser/builder.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/presenters/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/presenters/init.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/memories.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/teach.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/runner.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/runtime.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/host_hooks/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/jobs/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/jobs/episode_sync.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/app_role_safety.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/backups/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/instance_guard.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/migrations.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/privileges.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/evidence.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/experiences.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/memories.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/metadata.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/utility.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/session.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/uow.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/local_provider.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/prewarm.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/query_vector_search.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/claude.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/codex.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/cursor.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/inspection.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/paths.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/service.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/types.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/claude_cli.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/codex_cli.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/init_lock.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/machine_config_store.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/operation_registration.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/paths.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/recall_mode_store.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/repo_registration_store.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/session_state_file_store.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/shadow_git_store.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/autostart.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/launcher.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/status_store.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/clock.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/id_generator.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/package_upgrade.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/operation_invocations.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/operation_polling.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/read_records.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/recall_records.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/recorder.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/records.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/sink.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/storage_protocols.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/sync_records.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/write_records.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/create_policy.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/read_policy.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/runtime.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/thresholds.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/update_policy.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/internal-agents/defaults.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin_db.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin_diagnose.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/analytics.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/cli_runtime.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/config.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/db.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/dsn_resolution.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/episode_sync_launcher.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/host_hooks.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/internal_agent_config.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/migrations.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/repos.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/runtime_context.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/settings.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/_legacy_usage_views.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/_usage_view_sql.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/env.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260226_0001_initial_schema.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260422_0015_problem_runs.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260515_0019_scenario_records.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260606_0037_wiki_summaries.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260815_0038_drop_wiki_summaries.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/__init__.py +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/claude/CLAUDE.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/claude/skills/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/AGENTS.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/references/session-workflow.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/cursor/skills/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/setup.cfg +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/dependency_links.txt +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/entry_points.txt +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/requires.txt +0 -0
- {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/top_level.txt +0 -0
|
@@ -31,15 +31,5 @@ class BackupManifest:
|
|
|
31
31
|
compression: str
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
@dataclass(frozen=True)
|
|
35
|
-
class BackupVerificationResult:
|
|
36
|
-
"""Stable result for a verified backup artifact."""
|
|
37
|
-
|
|
38
|
-
backup_id: BackupId
|
|
39
|
-
artifact_sha256: str
|
|
40
|
-
artifact_size_bytes: int
|
|
41
|
-
verified: bool
|
|
42
|
-
|
|
43
|
-
|
|
44
34
|
class BackupPolicyError(RuntimeError):
|
|
45
35
|
"""Raised when a backup or restore request violates core safety policy."""
|
|
@@ -159,14 +159,6 @@ class ConceptCreatedBy(str, Enum):
|
|
|
159
159
|
IMPORT = "import"
|
|
160
160
|
|
|
161
161
|
|
|
162
|
-
class GraphPatchStatus(str, Enum):
|
|
163
|
-
"""Allowed graph patch lifecycle states."""
|
|
164
|
-
|
|
165
|
-
PENDING = "pending"
|
|
166
|
-
APPLIED = "applied"
|
|
167
|
-
REJECTED = "rejected"
|
|
168
|
-
|
|
169
|
-
|
|
170
162
|
@dataclass(frozen=True, kw_only=True)
|
|
171
163
|
class Concept:
|
|
172
164
|
"""One durable concept container."""
|
|
@@ -311,18 +303,3 @@ class ConceptEvidence:
|
|
|
311
303
|
transcript_ref: str | None = None
|
|
312
304
|
note: str | None = None
|
|
313
305
|
created_at: datetime | None = None
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
@dataclass(frozen=True, kw_only=True)
|
|
317
|
-
class GraphPatch:
|
|
318
|
-
"""Minimal reserved future graph-patch proposal record."""
|
|
319
|
-
|
|
320
|
-
id: str
|
|
321
|
-
repo_id: str
|
|
322
|
-
schema_version: str
|
|
323
|
-
status: GraphPatchStatus
|
|
324
|
-
proposed_by: ConceptCreatedBy
|
|
325
|
-
operations_json: list[dict[str, Any]]
|
|
326
|
-
evidence_summary: str | None = None
|
|
327
|
-
created_at: datetime | None = None
|
|
328
|
-
applied_at: datetime | None = None
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""This module defines episodic session entities
|
|
1
|
+
"""This module defines episodic session entities."""
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from datetime import datetime
|
|
@@ -30,8 +30,6 @@ class Episode:
|
|
|
30
30
|
repo_id: str
|
|
31
31
|
host_app: str
|
|
32
32
|
thread_id: str | None = None
|
|
33
|
-
title: str | None = None
|
|
34
|
-
objective: str | None = None
|
|
35
33
|
status: EpisodeStatus = EpisodeStatus.ACTIVE
|
|
36
34
|
started_at: datetime | None = None
|
|
37
35
|
ended_at: datetime | None = None
|
|
@@ -77,18 +75,3 @@ class EpisodeEvent:
|
|
|
77
75
|
source: EpisodeEventSource
|
|
78
76
|
content: str
|
|
79
77
|
created_at: datetime | None = None
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
@dataclass(kw_only=True)
|
|
83
|
-
class SessionTransfer:
|
|
84
|
-
"""This dataclass models immutable cross-session transfer provenance."""
|
|
85
|
-
|
|
86
|
-
id: str
|
|
87
|
-
repo_id: str
|
|
88
|
-
from_episode_id: str
|
|
89
|
-
to_episode_id: str
|
|
90
|
-
event_id: str
|
|
91
|
-
transfer_kind: str
|
|
92
|
-
rationale: str | None = None
|
|
93
|
-
transferred_by: str | None = None
|
|
94
|
-
created_at: datetime | None = None
|
|
@@ -26,7 +26,6 @@ class GuidanceDecision:
|
|
|
26
26
|
problem_id: str | None = None
|
|
27
27
|
memory_ids: list[str] = field(default_factory=list)
|
|
28
28
|
vote_scale_hint: dict[str, float] | None = None
|
|
29
|
-
setup_hint: str | None = None
|
|
30
29
|
|
|
31
30
|
def to_payload(self) -> dict[str, Any]:
|
|
32
31
|
"""Serialize one guidance decision into the public response shape."""
|
|
@@ -42,6 +41,4 @@ class GuidanceDecision:
|
|
|
42
41
|
payload["memory_ids"] = list(self.memory_ids)
|
|
43
42
|
if self.vote_scale_hint is not None:
|
|
44
43
|
payload["vote_scale_hint"] = dict(self.vote_scale_hint)
|
|
45
|
-
if self.setup_hint is not None:
|
|
46
|
-
payload["setup_hint"] = self.setup_hint
|
|
47
44
|
return payload
|
|
@@ -17,17 +17,6 @@ class IdentityTrustLevel(str, Enum):
|
|
|
17
17
|
SUPPORTED_HOST_APPS = frozenset({"codex", "claude_code", "cursor"})
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
def build_canonical_caller_id(
|
|
21
|
-
*, host_app: str, host_session_key: str, agent_key: str | None = None
|
|
22
|
-
) -> str:
|
|
23
|
-
"""Build the canonical caller identifier from one host session and optional agent key."""
|
|
24
|
-
|
|
25
|
-
canonical = f"{host_app}:{host_session_key}"
|
|
26
|
-
if agent_key:
|
|
27
|
-
canonical = f"{canonical}:agent:{agent_key}"
|
|
28
|
-
return canonical
|
|
29
|
-
|
|
30
|
-
|
|
31
20
|
@dataclass(frozen=True, kw_only=True)
|
|
32
21
|
class CallerIdentity:
|
|
33
22
|
"""Canonical caller identity used to scope episodes, session state, and guidance."""
|
|
@@ -57,11 +46,9 @@ class CallerIdentity:
|
|
|
57
46
|
object.__setattr__(
|
|
58
47
|
self, "trust_level", IdentityTrustLevel(str(self.trust_level))
|
|
59
48
|
)
|
|
60
|
-
canonical_id =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
agent_key=self.agent_key,
|
|
64
|
-
)
|
|
49
|
+
canonical_id = f"{host_app}:{host_session_key}"
|
|
50
|
+
if self.agent_key:
|
|
51
|
+
canonical_id = f"{canonical_id}:agent:{self.agent_key}"
|
|
65
52
|
if self.canonical_id is not None and self.canonical_id != canonical_id:
|
|
66
53
|
raise ValueError(
|
|
67
54
|
"canonical_id must match host_app, host_session_key, and agent_key"
|
|
@@ -10,9 +10,7 @@ RepoId = NewType("RepoId", str)
|
|
|
10
10
|
EpisodeId = NewType("EpisodeId", str)
|
|
11
11
|
EvidenceRefText = NewType("EvidenceRefText", str)
|
|
12
12
|
EvidenceId = NewType("EvidenceId", str)
|
|
13
|
-
InvocationId = NewType("InvocationId", str)
|
|
14
13
|
AssociationEdgeId = NewType("AssociationEdgeId", str)
|
|
15
14
|
|
|
16
15
|
Confidence = NewType("Confidence", float)
|
|
17
16
|
Salience = NewType("Salience", float)
|
|
18
|
-
UtilityVote = NewType("UtilityVote", float)
|
|
@@ -34,17 +34,11 @@ class MemoryKind(str, Enum):
|
|
|
34
34
|
|
|
35
35
|
return self in {MemoryKind.SOLUTION, MemoryKind.FAILED_TACTIC}
|
|
36
36
|
|
|
37
|
-
MATURE_MEMORY_KINDS: Final[tuple[MemoryKind, ...]] = (
|
|
38
|
-
MemoryKind.PROBLEM,
|
|
39
|
-
MemoryKind.SOLUTION,
|
|
40
|
-
MemoryKind.FAILED_TACTIC,
|
|
41
|
-
MemoryKind.FACT,
|
|
42
|
-
MemoryKind.PREFERENCE,
|
|
43
|
-
MemoryKind.CHANGE,
|
|
44
|
-
)
|
|
45
37
|
MATURE_MEMORY_KIND_VALUES: Final[tuple[str, ...]] = tuple(
|
|
46
|
-
kind.value for kind in
|
|
38
|
+
kind.value for kind in MemoryKind
|
|
47
39
|
)
|
|
40
|
+
|
|
41
|
+
|
|
48
42
|
class MemoryScope(str, Enum):
|
|
49
43
|
"""This enum defines shellbrain visibility scope."""
|
|
50
44
|
|
|
@@ -32,13 +32,6 @@ class ShadowGitPathChangeStatus(str, Enum):
|
|
|
32
32
|
RENAMED = "renamed"
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
class CodeDeltaContextStatus(str, Enum):
|
|
36
|
-
"""Public availability states for code-delta context."""
|
|
37
|
-
|
|
38
|
-
AVAILABLE = "available"
|
|
39
|
-
UNAVAILABLE = "unavailable"
|
|
40
|
-
|
|
41
|
-
|
|
42
35
|
class CodeDeltaUnavailableReason(str, Enum):
|
|
43
36
|
"""Expected reasons an event window cannot expose code-delta context."""
|
|
44
37
|
|
|
@@ -211,13 +204,10 @@ class AvailableCodeDeltaContext:
|
|
|
211
204
|
final_shadow_commit_sha: str
|
|
212
205
|
patch_sha: str
|
|
213
206
|
path_changes: tuple[ShadowGitPathChange, ...]
|
|
214
|
-
status: CodeDeltaContextStatus = CodeDeltaContextStatus.AVAILABLE
|
|
215
207
|
|
|
216
208
|
def __post_init__(self) -> None:
|
|
217
209
|
"""Reject invalid available-context states."""
|
|
218
210
|
|
|
219
|
-
if self.status is not CodeDeltaContextStatus.AVAILABLE:
|
|
220
|
-
raise ValueError("available code delta context requires available status")
|
|
221
211
|
for field_name in (
|
|
222
212
|
"base_snapshot_id",
|
|
223
213
|
"final_snapshot_id",
|
|
@@ -248,7 +238,7 @@ class AvailableCodeDeltaContext:
|
|
|
248
238
|
"""Return the stable JSON payload for bounded events."""
|
|
249
239
|
|
|
250
240
|
return {
|
|
251
|
-
"status":
|
|
241
|
+
"status": "available",
|
|
252
242
|
"base_snapshot_id": self.base_snapshot_id,
|
|
253
243
|
"final_snapshot_id": self.final_snapshot_id,
|
|
254
244
|
"base_shadow_commit_sha": self.base_shadow_commit_sha,
|
|
@@ -266,22 +256,17 @@ class UnavailableCodeDeltaContext:
|
|
|
266
256
|
"""Expected absence of code-delta evidence for one event window."""
|
|
267
257
|
|
|
268
258
|
reason: CodeDeltaUnavailableReason
|
|
269
|
-
status: CodeDeltaContextStatus = CodeDeltaContextStatus.UNAVAILABLE
|
|
270
259
|
|
|
271
260
|
def __post_init__(self) -> None:
|
|
272
261
|
"""Reject unavailable-context states without a typed reason."""
|
|
273
262
|
|
|
274
|
-
if self.status is not CodeDeltaContextStatus.UNAVAILABLE:
|
|
275
|
-
raise ValueError(
|
|
276
|
-
"unavailable code delta context requires unavailable status"
|
|
277
|
-
)
|
|
278
263
|
if not isinstance(self.reason, CodeDeltaUnavailableReason):
|
|
279
264
|
raise ValueError("reason must be a CodeDeltaUnavailableReason")
|
|
280
265
|
|
|
281
266
|
def to_response_data(self) -> dict[str, str]:
|
|
282
267
|
"""Return the stable JSON payload for bounded events."""
|
|
283
268
|
|
|
284
|
-
return {"status":
|
|
269
|
+
return {"status": "unavailable", "reason": self.reason.value}
|
|
285
270
|
|
|
286
271
|
|
|
287
272
|
CodeDeltaContext = AvailableCodeDeltaContext | UnavailableCodeDeltaContext
|
|
@@ -16,12 +16,9 @@ class ErrorCode(str, Enum):
|
|
|
16
16
|
NOT_FOUND = "not_found"
|
|
17
17
|
CONFLICT = "conflict"
|
|
18
18
|
INTERNAL_ERROR = "internal_error"
|
|
19
|
-
HOST_IDENTITY_UNAVAILABLE = "host_identity_unavailable"
|
|
20
19
|
HOST_IDENTITY_UNSUPPORTED = "host_identity_unsupported"
|
|
21
20
|
HOST_IDENTITY_DRIFTED = "host_identity_drifted"
|
|
22
21
|
HOST_HOOK_MISSING = "host_hook_missing"
|
|
23
|
-
TRANSCRIPT_SOURCE_NOT_FOUND = "transcript_source_not_found"
|
|
24
|
-
INNER_AGENT_ERROR = "inner_agent_error"
|
|
25
22
|
|
|
26
23
|
|
|
27
24
|
class ErrorDetail(BaseModel):
|
|
@@ -4,13 +4,13 @@ from typing import Any
|
|
|
4
4
|
|
|
5
5
|
from app.core.use_cases.memories.add.result import CreatePlanIds
|
|
6
6
|
from app.core.use_cases.memories.effect_plan import (
|
|
7
|
+
EffectType,
|
|
7
8
|
AssociationUpsertAndObserveEffectParams,
|
|
8
9
|
MemoryAddEffectParams,
|
|
9
10
|
MemoryEmbeddingUpsertEffectParams,
|
|
10
11
|
EvidenceAttachEffectParams,
|
|
11
12
|
PlannedEffect,
|
|
12
13
|
StructuralProblemLinkEffectParams,
|
|
13
|
-
make_side_effect,
|
|
14
14
|
)
|
|
15
15
|
from app.core.entities.associations import AssociationSourceMode, AssociationState
|
|
16
16
|
from app.core.entities.memories import (
|
|
@@ -34,8 +34,8 @@ def build_create_plan(
|
|
|
34
34
|
memory_id = plan_ids.memory_id
|
|
35
35
|
evidence_refs = EvidenceRefs.required(memory["evidence_refs"]).values
|
|
36
36
|
plan: list[PlannedEffect] = [
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
PlannedEffect(
|
|
38
|
+
EffectType.MEMORY_CREATE,
|
|
39
39
|
MemoryAddEffectParams(
|
|
40
40
|
memory_id=memory_id,
|
|
41
41
|
repo_id=repo_id,
|
|
@@ -44,16 +44,16 @@ def build_create_plan(
|
|
|
44
44
|
text=memory["text"],
|
|
45
45
|
),
|
|
46
46
|
),
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
PlannedEffect(
|
|
48
|
+
EffectType.MEMORY_EMBEDDING_UPSERT,
|
|
49
49
|
MemoryEmbeddingUpsertEffectParams(
|
|
50
50
|
memory_id=memory_id,
|
|
51
51
|
model=embedding_model,
|
|
52
52
|
text=memory["text"],
|
|
53
53
|
),
|
|
54
54
|
),
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
PlannedEffect(
|
|
56
|
+
EffectType.EVIDENCE_ATTACH,
|
|
57
57
|
EvidenceAttachEffectParams(
|
|
58
58
|
memory_id=memory_id,
|
|
59
59
|
repo_id=repo_id,
|
|
@@ -66,8 +66,8 @@ def build_create_plan(
|
|
|
66
66
|
if MemoryKind(memory["kind"]).requires_problem_link and problem_id:
|
|
67
67
|
relation_id = _required_structural_relation_id(plan_ids, 0)
|
|
68
68
|
plan.append(
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
PlannedEffect(
|
|
70
|
+
EffectType.STRUCTURAL_PROBLEM_LINK_CREATE,
|
|
71
71
|
StructuralProblemLinkEffectParams(
|
|
72
72
|
relation_id=relation_id,
|
|
73
73
|
repo_id=repo_id,
|
|
@@ -89,8 +89,8 @@ def build_create_plan(
|
|
|
89
89
|
confidence = ConfidenceValue(association["confidence"]).value
|
|
90
90
|
salience = SalienceValue(association["salience"]).value
|
|
91
91
|
plan.append(
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
PlannedEffect(
|
|
93
|
+
EffectType.ASSOCIATION_UPSERT_AND_OBSERVE,
|
|
94
94
|
AssociationUpsertAndObserveEffectParams(
|
|
95
95
|
repo_id=repo_id,
|
|
96
96
|
edge_id=plan_ids.association_edge_ids[index],
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
5
|
from app.core.use_cases.memories.effect_plan import (
|
|
6
|
+
EffectType,
|
|
6
7
|
AssociationUpsertAndObserveEffectParams,
|
|
7
8
|
EvidenceSourceEffectParams,
|
|
8
9
|
StructuralFactChangeEffectParams,
|
|
9
10
|
MemoryLifecycleUpdateEffectParams,
|
|
10
11
|
PlannedEffect,
|
|
11
12
|
UtilityObservationAppendEffectParams,
|
|
12
|
-
make_side_effect,
|
|
13
13
|
)
|
|
14
14
|
from app.core.use_cases.memories.update.result import UpdatePlanIds
|
|
15
15
|
from app.core.entities.associations import AssociationSourceMode, AssociationState
|
|
@@ -33,8 +33,8 @@ def build_update_plan(
|
|
|
33
33
|
|
|
34
34
|
if update_type == "update_lifecycle":
|
|
35
35
|
return [
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
PlannedEffect(
|
|
37
|
+
EffectType.MEMORY_LIFECYCLE_UPDATE,
|
|
38
38
|
MemoryLifecycleUpdateEffectParams(
|
|
39
39
|
event_id=_required(
|
|
40
40
|
plan_ids.memory_lifecycle_event_id,
|
|
@@ -67,8 +67,8 @@ def build_update_plan(
|
|
|
67
67
|
if update_type == "utility_vote":
|
|
68
68
|
evidence_refs = EvidenceRefs.optional(update.get("evidence_refs", [])).values
|
|
69
69
|
return [
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
PlannedEffect(
|
|
71
|
+
EffectType.UTILITY_OBSERVATION_APPEND,
|
|
72
72
|
UtilityObservationAppendEffectParams(
|
|
73
73
|
id=_required(
|
|
74
74
|
plan_ids.utility_observation_id, "utility_observation_id"
|
|
@@ -86,8 +86,8 @@ def build_update_plan(
|
|
|
86
86
|
if update_type == "fact_update_link":
|
|
87
87
|
evidence_refs = EvidenceRefs.optional(update.get("evidence_refs", [])).values
|
|
88
88
|
return [
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
PlannedEffect(
|
|
90
|
+
EffectType.STRUCTURAL_FACT_CHANGE_CREATE,
|
|
91
91
|
StructuralFactChangeEffectParams(
|
|
92
92
|
repo_id=repo_id,
|
|
93
93
|
old_fact_id=update["old_fact_id"],
|
|
@@ -106,8 +106,8 @@ def build_update_plan(
|
|
|
106
106
|
salience = SalienceValue(update["salience"]).value
|
|
107
107
|
evidence_refs = EvidenceRefs.required(update["evidence_refs"]).values
|
|
108
108
|
return [
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
PlannedEffect(
|
|
110
|
+
EffectType.ASSOCIATION_UPSERT_AND_OBSERVE,
|
|
111
111
|
AssociationUpsertAndObserveEffectParams(
|
|
112
112
|
repo_id=repo_id,
|
|
113
113
|
edge_id=_required(
|
|
@@ -36,9 +36,6 @@ class BM25ScoredDocument:
|
|
|
36
36
|
def score_documents(
|
|
37
37
|
query_terms: Sequence[str],
|
|
38
38
|
documents: Sequence[BM25Document],
|
|
39
|
-
*,
|
|
40
|
-
k1: float = _K1,
|
|
41
|
-
b: float = _B,
|
|
42
39
|
) -> list[BM25ScoredDocument]:
|
|
43
40
|
"""Return BM25 scores and weighted query coverage for partially matching documents."""
|
|
44
41
|
|
|
@@ -81,12 +78,12 @@ def score_documents(
|
|
|
81
78
|
score = 0.0
|
|
82
79
|
matched_query_weight = 0.0
|
|
83
80
|
document_length = len(document.terms)
|
|
84
|
-
normalization =
|
|
81
|
+
normalization = _K1 * (1 - _B + _B * document_length / average_length)
|
|
85
82
|
for term in matched_terms:
|
|
86
83
|
inverse_document_frequency = inverse_document_frequencies[term]
|
|
87
84
|
term_frequency = frequencies[term]
|
|
88
85
|
score += inverse_document_frequency * (
|
|
89
|
-
(term_frequency * (
|
|
86
|
+
(term_frequency * (_K1 + 1)) / (term_frequency + normalization)
|
|
90
87
|
)
|
|
91
88
|
matched_query_weight += inverse_document_frequency
|
|
92
89
|
|
|
@@ -43,8 +43,6 @@ _STOPWORDS = frozenset(
|
|
|
43
43
|
class LexicalQuery:
|
|
44
44
|
"""Normalized lexical query terms used by the keyword retrieval lane."""
|
|
45
45
|
|
|
46
|
-
raw_terms: tuple[str, ...]
|
|
47
|
-
informative_terms: tuple[str, ...]
|
|
48
46
|
terms: tuple[str, ...]
|
|
49
47
|
uses_stopword_fallback: bool
|
|
50
48
|
|
|
@@ -68,14 +66,11 @@ def build_lexical_query(query_text: str) -> LexicalQuery:
|
|
|
68
66
|
"""Build a normalized lexical query with strict informative-term semantics."""
|
|
69
67
|
|
|
70
68
|
normalized = normalize_lexical_text(query_text)
|
|
71
|
-
raw_terms =
|
|
72
|
-
informative_terms =
|
|
69
|
+
raw_terms = tuple(dict.fromkeys(normalized.raw_terms))
|
|
70
|
+
informative_terms = tuple(dict.fromkeys(normalized.informative_terms))
|
|
73
71
|
uses_stopword_fallback = not informative_terms and bool(raw_terms)
|
|
74
|
-
terms = raw_terms if uses_stopword_fallback else informative_terms
|
|
75
72
|
return LexicalQuery(
|
|
76
|
-
|
|
77
|
-
informative_terms=informative_terms,
|
|
78
|
-
terms=terms,
|
|
73
|
+
terms=raw_terms if uses_stopword_fallback else informative_terms,
|
|
79
74
|
uses_stopword_fallback=uses_stopword_fallback,
|
|
80
75
|
)
|
|
81
76
|
|
|
@@ -88,16 +83,3 @@ def normalize_lexical_text(text: str) -> NormalizedLexicalText:
|
|
|
88
83
|
return NormalizedLexicalText(
|
|
89
84
|
raw_terms=raw_terms, informative_terms=informative_terms
|
|
90
85
|
)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def _unique_terms(terms: tuple[str, ...]) -> tuple[str, ...]:
|
|
94
|
-
"""Deduplicate terms while preserving original order."""
|
|
95
|
-
|
|
96
|
-
seen: set[str] = set()
|
|
97
|
-
ordered: list[str] = []
|
|
98
|
-
for term in terms:
|
|
99
|
-
if term in seen:
|
|
100
|
-
continue
|
|
101
|
-
seen.add(term)
|
|
102
|
-
ordered.append(term)
|
|
103
|
-
return tuple(ordered)
|
|
@@ -5,25 +5,23 @@ from __future__ import annotations
|
|
|
5
5
|
from collections import Counter
|
|
6
6
|
from typing import Any, Iterable, Mapping
|
|
7
7
|
|
|
8
|
+
from app.core.entities.memories import (
|
|
9
|
+
DEFAULT_RETRIEVABLE_MEMORY_STATUS_VALUES,
|
|
10
|
+
MemoryLifecycleStatus,
|
|
11
|
+
)
|
|
8
12
|
|
|
9
|
-
ACTIVE_STATUS = "active"
|
|
10
|
-
MAYBE_STALE_STATUS = "maybe_stale"
|
|
11
|
-
STALE_STATUS = "stale"
|
|
12
|
-
SUPERSEDED_STATUS = "superseded"
|
|
13
|
-
WRONG_STATUS = "wrong"
|
|
14
|
-
ARCHIVED_STATUS = "archived"
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
ACTIVE_STATUS = MemoryLifecycleStatus.ACTIVE.value
|
|
15
|
+
MAYBE_STALE_STATUS = MemoryLifecycleStatus.MAYBE_STALE.value
|
|
16
|
+
STALE_STATUS = MemoryLifecycleStatus.STALE.value
|
|
17
|
+
SUPERSEDED_STATUS = MemoryLifecycleStatus.SUPERSEDED.value
|
|
18
|
+
WRONG_STATUS = MemoryLifecycleStatus.WRONG.value
|
|
19
|
+
ARCHIVED_STATUS = MemoryLifecycleStatus.ARCHIVED.value
|
|
20
|
+
|
|
21
|
+
POSITIVE_LIFECYCLE_STATUSES = frozenset(DEFAULT_RETRIEVABLE_MEMORY_STATUS_VALUES)
|
|
19
22
|
|
|
20
23
|
LIFECYCLE_RETRIEVAL_MULTIPLIERS: Mapping[str, float] = {
|
|
21
|
-
|
|
22
|
-
MAYBE_STALE_STATUS: 0.65,
|
|
23
|
-
STALE_STATUS: 0.25,
|
|
24
|
-
SUPERSEDED_STATUS: 0.0,
|
|
25
|
-
WRONG_STATUS: 0.0,
|
|
26
|
-
ARCHIVED_STATUS: 0.0,
|
|
24
|
+
status.value: status.retrieval_multiplier for status in MemoryLifecycleStatus
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
BUNDLE_FRESHNESS_MULTIPLIERS: Mapping[str, float] = {
|
|
@@ -127,6 +125,16 @@ def concept_bundle_retrieval_multiplier(statuses: Iterable[Any]) -> float:
|
|
|
127
125
|
return BUNDLE_FRESHNESS_MULTIPLIERS[dominant_lifecycle_status(statuses)]
|
|
128
126
|
|
|
129
127
|
|
|
128
|
+
def bundle_lifecycle_statuses(bundle: Mapping[str, Any]) -> tuple[str, ...]:
|
|
129
|
+
"""Return lifecycle status values across every truth-bearing concept facet."""
|
|
130
|
+
|
|
131
|
+
return tuple(
|
|
132
|
+
record.lifecycle.status.value
|
|
133
|
+
for key in ("claims", "relations", "groundings", "memory_links")
|
|
134
|
+
for record in bundle[key]
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
|
|
130
138
|
def aggregate_currentness_payload(
|
|
131
139
|
statuses: Iterable[Any], *, record_label: str
|
|
132
140
|
) -> dict[str, str]:
|
|
@@ -12,7 +12,6 @@ from app.core.entities.concepts import (
|
|
|
12
12
|
ConceptLifecycleTargetType,
|
|
13
13
|
ConceptMemoryLink,
|
|
14
14
|
ConceptRelation,
|
|
15
|
-
GraphPatch,
|
|
16
15
|
)
|
|
17
16
|
|
|
18
17
|
|
|
@@ -84,10 +83,6 @@ class IConceptsRepo(ABC):
|
|
|
84
83
|
) -> ConceptLifecycleEvent:
|
|
85
84
|
"""This method appends one auditable concept lifecycle transition."""
|
|
86
85
|
|
|
87
|
-
@abstractmethod
|
|
88
|
-
def create_graph_patch(self, patch: GraphPatch) -> GraphPatch:
|
|
89
|
-
"""This method stores one future graph-patch proposal record."""
|
|
90
|
-
|
|
91
86
|
@abstractmethod
|
|
92
87
|
def get_concept_bundle(
|
|
93
88
|
self,
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
"""Repository ports for episode persistence."""
|
|
2
2
|
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
|
-
from datetime import datetime
|
|
5
4
|
from typing import Sequence
|
|
6
5
|
|
|
7
|
-
from app.core.entities.episodes import
|
|
8
|
-
Episode,
|
|
9
|
-
EpisodeBuildSnapshot,
|
|
10
|
-
EpisodeEvent,
|
|
11
|
-
SessionTransfer,
|
|
12
|
-
)
|
|
6
|
+
from app.core.entities.episodes import Episode, EpisodeBuildSnapshot, EpisodeEvent
|
|
13
7
|
|
|
14
8
|
|
|
15
9
|
class IEpisodesRepo(ABC):
|
|
@@ -55,10 +49,6 @@ class IEpisodesRepo(ABC):
|
|
|
55
49
|
) -> EpisodeEvent | None:
|
|
56
50
|
"""This method fetches one repo-visible event by id inside an episode."""
|
|
57
51
|
|
|
58
|
-
@abstractmethod
|
|
59
|
-
def list_event_keys(self, *, episode_id: str) -> Sequence[str]:
|
|
60
|
-
"""This method returns already-imported upstream event keys for one episode."""
|
|
61
|
-
|
|
62
52
|
@abstractmethod
|
|
63
53
|
def next_event_seq(self, *, episode_id: str) -> int:
|
|
64
54
|
"""This method returns the next append sequence number for one episode."""
|
|
@@ -71,14 +61,6 @@ class IEpisodesRepo(ABC):
|
|
|
71
61
|
def append_event_if_new(self, event: EpisodeEvent) -> bool:
|
|
72
62
|
"""This method appends an event only when its host_event_key is not already present."""
|
|
73
63
|
|
|
74
|
-
@abstractmethod
|
|
75
|
-
def close_episode(self, *, episode_id: str, ended_at: datetime) -> None:
|
|
76
|
-
"""This method marks an active episode closed."""
|
|
77
|
-
|
|
78
|
-
@abstractmethod
|
|
79
|
-
def append_transfer(self, transfer: SessionTransfer) -> None:
|
|
80
|
-
"""This method appends a cross-session transfer row."""
|
|
81
|
-
|
|
82
64
|
@abstractmethod
|
|
83
65
|
def list_existing_event_ids(self, *, event_ids: Sequence[str]) -> Sequence[str]:
|
|
84
66
|
"""This method returns episode-event ids that exist anywhere in storage."""
|
{shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/__init__.py
RENAMED
|
@@ -5,13 +5,11 @@ from app.core.use_cases.admin.backfill_model_usage.backfill_model_usage import (
|
|
|
5
5
|
linked_session_from_mapping,
|
|
6
6
|
)
|
|
7
7
|
from app.core.use_cases.admin.backfill_model_usage.request import (
|
|
8
|
-
BackfillModelUsageRequest,
|
|
9
8
|
LinkedModelUsageSession,
|
|
10
9
|
)
|
|
11
10
|
from app.core.use_cases.admin.backfill_model_usage.result import BackfillSummary
|
|
12
11
|
|
|
13
12
|
__all__ = [
|
|
14
|
-
"BackfillModelUsageRequest",
|
|
15
13
|
"BackfillSummary",
|
|
16
14
|
"LinkedModelUsageSession",
|
|
17
15
|
"backfill_model_usage",
|
|
@@ -7,14 +7,13 @@ from collections.abc import Callable, Sequence
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
from app.core.use_cases.admin.backfill_model_usage.request import (
|
|
10
|
-
BackfillModelUsageRequest,
|
|
11
10
|
LinkedModelUsageSession,
|
|
12
11
|
)
|
|
13
12
|
from app.core.use_cases.admin.backfill_model_usage.result import BackfillSummary
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
def backfill_model_usage(
|
|
17
|
-
|
|
16
|
+
sessions: tuple[LinkedModelUsageSession, ...],
|
|
18
17
|
*,
|
|
19
18
|
collect_model_usage_records_for_session: Callable[..., Sequence[object]],
|
|
20
19
|
persist_model_usage_records: Callable[[Sequence[object]], None],
|
|
@@ -28,7 +27,7 @@ def backfill_model_usage(
|
|
|
28
27
|
sessions_failed = 0
|
|
29
28
|
records_attempted = 0
|
|
30
29
|
|
|
31
|
-
for session in
|
|
30
|
+
for session in sessions:
|
|
32
31
|
try:
|
|
33
32
|
records = collect_model_usage_records_for_session(
|
|
34
33
|
repo_id=session.repo_id,
|
|
@@ -58,7 +57,7 @@ def backfill_model_usage(
|
|
|
58
57
|
host_counts[session.host_app] += len(records)
|
|
59
58
|
|
|
60
59
|
return BackfillSummary(
|
|
61
|
-
sessions_examined=len(
|
|
60
|
+
sessions_examined=len(sessions),
|
|
62
61
|
sessions_with_records=sessions_with_records,
|
|
63
62
|
sessions_skipped=sessions_skipped,
|
|
64
63
|
sessions_failed=sessions_failed,
|
{shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/request.py
RENAMED
|
@@ -15,10 +15,3 @@ class LinkedModelUsageSession:
|
|
|
15
15
|
thread_id: str | None
|
|
16
16
|
episode_id: str | None
|
|
17
17
|
transcript_path: str
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
@dataclass(frozen=True)
|
|
21
|
-
class BackfillModelUsageRequest:
|
|
22
|
-
"""Canonical model-usage backfill request."""
|
|
23
|
-
|
|
24
|
-
sessions: tuple[LinkedModelUsageSession, ...]
|
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
|
-
from app.core.errors import DomainValidationError, ErrorCode, ErrorDetail
|
|
8
7
|
from app.core.entities.concepts import Concept, ConceptKind, ConceptStatus
|
|
9
8
|
from app.core.ports.embeddings.provider import IEmbeddingProvider
|
|
10
9
|
from app.core.ports.system.idgen import IIdGenerator
|
|
@@ -25,22 +24,10 @@ def add_concepts(
|
|
|
25
24
|
) -> ConceptAddResult:
|
|
26
25
|
"""Create concept containers, failing when any target concept already exists."""
|
|
27
26
|
|
|
28
|
-
normalized_slugs
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if normalized_slug in seen_slugs:
|
|
33
|
-
raise DomainValidationError(
|
|
34
|
-
[
|
|
35
|
-
ErrorDetail(
|
|
36
|
-
code=ErrorCode.SEMANTIC_ERROR,
|
|
37
|
-
message=f"Concept add request contains duplicate slug: {normalized_slug}",
|
|
38
|
-
field="actions.slug",
|
|
39
|
-
)
|
|
40
|
-
]
|
|
41
|
-
)
|
|
42
|
-
normalized_slugs.append(normalized_slug)
|
|
43
|
-
seen_slugs.add(normalized_slug)
|
|
27
|
+
normalized_slugs = [
|
|
28
|
+
require_missing_concept(request.repo_id, action.slug, uow)
|
|
29
|
+
for action in request.actions
|
|
30
|
+
]
|
|
44
31
|
|
|
45
32
|
results: list[dict[str, Any]] = []
|
|
46
33
|
concept_ids: list[str] = []
|