shellbrain 0.1.38__tar.gz → 0.1.40__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.38 → shellbrain-0.1.40}/PKG-INFO +4 -4
- {shellbrain-0.1.38 → shellbrain-0.1.40}/README.md +3 -3
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/concepts.py +1 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/evidence.py +21 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/inner_agents.py +16 -1
- shellbrain-0.1.40/app/core/entities/repositories.py +17 -0
- shellbrain-0.1.40/app/core/entities/wiki_summaries.py +114 -0
- shellbrain-0.1.40/app/core/policies/wiki_summary_freshness.py +60 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/concept_repositories.py +12 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/memory_repositories.py +13 -0
- shellbrain-0.1.40/app/core/ports/db/repository_index.py +16 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/unit_of_work.py +4 -0
- shellbrain-0.1.40/app/core/ports/db/wiki_summaries.py +64 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/host_apps/inner_agents.py +46 -0
- shellbrain-0.1.40/app/core/use_cases/wiki/__init__.py +27 -0
- shellbrain-0.1.40/app/core/use_cases/wiki/execute.py +880 -0
- shellbrain-0.1.40/app/core/use_cases/wiki/request.py +109 -0
- shellbrain-0.1.40/app/core/use_cases/wiki/result.py +295 -0
- shellbrain-0.1.40/app/core/use_cases/wiki/summaries.py +699 -0
- shellbrain-0.1.40/app/entrypoints/cli/handlers/human/wiki.py +42 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/parser/builder.py +40 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/runner.py +10 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/runtime.py +1 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/registry.py +2 -0
- shellbrain-0.1.40/app/infrastructure/db/runtime/models/wiki_summaries.py +63 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +65 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +62 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +23 -0
- shellbrain-0.1.40/app/infrastructure/db/runtime/repos/relational/repository_index_repo.py +159 -0
- shellbrain-0.1.40/app/infrastructure/db/runtime/repos/relational/wiki_summaries_repo.py +239 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/uow.py +8 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/codex_cli.py +120 -1
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/output_parser.py +23 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/prompt.py +52 -0
- shellbrain-0.1.40/app/infrastructure/reporting/wiki/__init__.py +1 -0
- shellbrain-0.1.40/app/infrastructure/reporting/wiki/browser.py +11 -0
- shellbrain-0.1.40/app/infrastructure/reporting/wiki/render_html.py +666 -0
- shellbrain-0.1.40/app/infrastructure/reporting/wiki/server.py +293 -0
- shellbrain-0.1.40/app/infrastructure/reporting/wiki/summary_worker.py +123 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/settings/internal-agents/defaults.yaml +13 -1
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/cli.py +2 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/cli_runtime.py +1 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/internal_agent_config.py +3 -1
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/internal_agents.py +23 -0
- shellbrain-0.1.40/app/startup/wiki.py +59 -0
- shellbrain-0.1.40/migrations/versions/20260606_0037_wiki_summaries.py +85 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/pyproject.toml +1 -1
- {shellbrain-0.1.38 → shellbrain-0.1.40}/shellbrain.egg-info/PKG-INFO +4 -4
- {shellbrain-0.1.38 → shellbrain-0.1.40}/shellbrain.egg-info/SOURCES.txt +21 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/__main__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/admin_errors.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/associations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/backups.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/episodes.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/guidance.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/identity.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/ids.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/knowledge_builder.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/machine_config.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/memories.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/runtime_context.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/scenarios.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/session_state.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/settings.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/snapshots.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/structural_memory_relations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/entities/utility.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/errors.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/concepts/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/concepts/relation_rules.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/concepts/search_text.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/episodes/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/episodes/event_content.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/episodes/knowledge_building.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/memories/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/memories/add_plan.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/memories/link_rules.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/memories/update_plan.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/bm25.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/context_pack.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/expansion.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/fusion_rrf.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/lexical_query.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/ontology_semantics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/policies/retrieval/scoring.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/episode_repositories.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/guidance.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/knowledge_builder.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/problem_runs.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/retrieval_repositories.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/db/snapshots.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/embeddings/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/embeddings/provider.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/embeddings/retrieval.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/host_apps/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/local_state/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/local_state/session_state_store.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/local_state/shadow_git.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/reporting/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/reporting/metrics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/system/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/system/clock.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/ports/system/idgen.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/create_backup.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/initialize_runtime.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/restore_backup.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/admin/verify_backup.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/build_guidance.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/containment_checks.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/embeddings.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/reference_checks.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/concepts/views.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/events/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/events/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/add/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/add/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/add/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/add/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/effect_plan.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/reference_checks.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/update/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/update/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/update/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/memories/update/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/metrics/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/metrics/build_snapshot.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/plan_execution.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/build_context/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/context_pack_pipeline.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/deterministic_graph_recall.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/expansion.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read_concepts.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/retrieval/seed_retrieval.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/scenarios/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/code_delta_context/execute.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/error_responses.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/dependencies.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/admin.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/init.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/session_state.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/snapshot.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/main.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/operation_command.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/parser/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/init.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/json.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/metrics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/memories.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/teach.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/host_hooks/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/jobs/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/entrypoints/jobs/episode_sync.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/app_role_safety.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/restore.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/connection.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/instance_guard.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/migrations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/privileges.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/admin/storage_setup.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/engine.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/associations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/concepts.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/episodes.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/evidence.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/experiences.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/memories.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/metadata.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/utility.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/views.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/db/runtime/session.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/embeddings/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/embeddings/local_provider.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/embeddings/prewarm.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/embeddings/query_vector_search.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/claude.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/codex.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/cursor.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/inspection.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/paths.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/service.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/types.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/resolver.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/init_lock.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/machine_config_store.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/operation_registration.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/paths.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/repo_registration_store.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/session_state_file_store.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/local_state/shadow_git_store.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/process/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/autostart.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/launcher.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/poller.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/status_store.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/reporting/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/browser.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/pager.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/render_html.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/system/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/system/clock.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/system/id_generator.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/system/package_upgrade.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/operation_invocations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/operation_polling.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/read_records.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/recall_records.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/recorder.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/records.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/sink.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/storage_protocols.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/sync_records.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/infrastructure/telemetry/write_records.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/settings/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/settings/defaults/create_policy.yaml +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/settings/defaults/read_policy.yaml +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/settings/defaults/runtime.yaml +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/settings/defaults/thresholds.yaml +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/settings/defaults/update_policy.yaml +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/admin.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/admin_db.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/admin_dependencies.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/admin_diagnose.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/analytics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/backup.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/config.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/create_policy.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/db.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/dsn_resolution.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/embeddings.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/episode_poller.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/episode_sync_launcher.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/host_hooks.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/knowledge_builder.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/metrics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/migrations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/model_usage_backfill.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/operation_dependencies.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/read_policy.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/repo_context.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/repos.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/retrieval.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/runtime_admin.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/runtime_context.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/settings.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/snapshot_baseline.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/thresholds.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/update_policy.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/app/startup/use_cases.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/_legacy_usage_views.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/_usage_view_sql.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/env.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260226_0001_initial_schema.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260422_0015_problem_runs.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260515_0019_scenario_records.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/migrations/versions/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/__init__.py +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/claude/CLAUDE.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/claude/skills/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/AGENTS.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/references/request-shapes.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/references/session-workflow.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/cursor/skills/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/setup.cfg +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/shellbrain.egg-info/dependency_links.txt +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/shellbrain.egg-info/entry_points.txt +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/shellbrain.egg-info/requires.txt +0 -0
- {shellbrain-0.1.38 → shellbrain-0.1.40}/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.40
|
|
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
|
|
@@ -141,6 +141,6 @@ Use Shellbrain in your agent of choice. Then, just work normally.
|
|
|
141
141
|
|
|
142
142
|
## Docs
|
|
143
143
|
|
|
144
|
-
- [
|
|
145
|
-
- [
|
|
146
|
-
- [
|
|
144
|
+
- [For Humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
|
|
145
|
+
- [For Agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
|
|
146
|
+
- [Technical Docs](https://deepwiki.com/cucupac/shellbrain) — in-depth generated docs and codebase map
|
|
@@ -127,6 +127,6 @@ Use Shellbrain in your agent of choice. Then, just work normally.
|
|
|
127
127
|
|
|
128
128
|
## Docs
|
|
129
129
|
|
|
130
|
-
- [
|
|
131
|
-
- [
|
|
132
|
-
- [
|
|
130
|
+
- [For Humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
|
|
131
|
+
- [For Agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
|
|
132
|
+
- [Technical Docs](https://deepwiki.com/cucupac/shellbrain) — in-depth generated docs and codebase map
|
|
@@ -147,6 +147,27 @@ class EvidenceLinkView:
|
|
|
147
147
|
created_at: datetime | None = None
|
|
148
148
|
|
|
149
149
|
|
|
150
|
+
@dataclass(frozen=True, kw_only=True)
|
|
151
|
+
class EvidenceLinkedTarget:
|
|
152
|
+
"""One target linked to a canonical evidence source."""
|
|
153
|
+
|
|
154
|
+
link_id: str
|
|
155
|
+
target: EvidenceTarget
|
|
156
|
+
role: EvidenceRole
|
|
157
|
+
created_at: datetime | None = None
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
@dataclass(frozen=True, kw_only=True)
|
|
161
|
+
class EvidenceDetail:
|
|
162
|
+
"""One canonical evidence source plus all linked targets."""
|
|
163
|
+
|
|
164
|
+
id: EvidenceId
|
|
165
|
+
repo_id: RepoId
|
|
166
|
+
source: EvidenceSource
|
|
167
|
+
linked_targets: tuple[EvidenceLinkedTarget, ...]
|
|
168
|
+
created_at: datetime | None = None
|
|
169
|
+
|
|
170
|
+
|
|
150
171
|
@dataclass(kw_only=True)
|
|
151
172
|
class MemoryEvidenceLink:
|
|
152
173
|
"""This dataclass models a many-to-many link between shellbrain and evidence."""
|
|
@@ -11,7 +11,7 @@ class _StrictModel(BaseModel):
|
|
|
11
11
|
model_config = ConfigDict(extra="forbid")
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
InnerAgentName = Literal["build_context", "build_knowledge", "teach"]
|
|
14
|
+
InnerAgentName = Literal["build_context", "build_knowledge", "teach", "wiki_summary"]
|
|
15
15
|
InnerAgentProviderName = str
|
|
16
16
|
InnerAgentReasoningLevel = Literal["none", "minimal", "low", "medium", "high", "xhigh"]
|
|
17
17
|
BuildContextStrategy = Literal[
|
|
@@ -66,4 +66,19 @@ class TeachKnowledgeSettings(_StrictModel):
|
|
|
66
66
|
max_write_commands: int = Field(default=12, ge=1, le=200)
|
|
67
67
|
|
|
68
68
|
|
|
69
|
+
class WikiSummarySettings(_StrictModel):
|
|
70
|
+
"""Typed model/runtime settings for generated wiki summaries."""
|
|
71
|
+
|
|
72
|
+
provider: InnerAgentProviderName = Field(min_length=1)
|
|
73
|
+
model: str = Field(min_length=1)
|
|
74
|
+
reasoning: InnerAgentReasoningLevel
|
|
75
|
+
timeout_seconds: int = Field(ge=1, le=1200)
|
|
76
|
+
prompt_version: str = Field(default="wiki-summary.v1", min_length=1)
|
|
77
|
+
max_summary_chars: int = Field(default=900, ge=100, le=4000)
|
|
78
|
+
running_refresh_stale_seconds: int = Field(default=3600, ge=60, le=86_400)
|
|
79
|
+
startup_batch_limit: int = Field(default=20, ge=0, le=200)
|
|
80
|
+
periodic_batch_limit: int = Field(default=5, ge=0, le=100)
|
|
81
|
+
periodic_seconds: int = Field(default=300, ge=30, le=86_400)
|
|
82
|
+
|
|
83
|
+
|
|
69
84
|
InnerAgentSettings = BuildContextSettings
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Repository summaries used by cross-repo read surfaces."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class RepositorySummary:
|
|
10
|
+
"""Compact read-only summary for one Shellbrain repository."""
|
|
11
|
+
|
|
12
|
+
repo_id: str
|
|
13
|
+
repo_root: str | None
|
|
14
|
+
concept_count: int
|
|
15
|
+
memory_count: int
|
|
16
|
+
evidence_count: int
|
|
17
|
+
last_seen_at: str | None
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"""Core entities for generated Shellbrain Wiki summaries."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class WikiSummaryTargetType(str, Enum):
|
|
12
|
+
"""Wiki targets that can have generated article prose."""
|
|
13
|
+
|
|
14
|
+
REPO = "repo"
|
|
15
|
+
CONCEPT = "concept"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class WikiSummaryLinkTargetType(str, Enum):
|
|
19
|
+
"""Wiki page targets that generated prose can link to deterministically."""
|
|
20
|
+
|
|
21
|
+
CONCEPT = "concept"
|
|
22
|
+
MEMORY = "memory"
|
|
23
|
+
ANCHOR = "anchor"
|
|
24
|
+
EVIDENCE = "evidence"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class WikiSummaryGenerationStatus(str, Enum):
|
|
28
|
+
"""Durable generation status for one cached wiki summary."""
|
|
29
|
+
|
|
30
|
+
PENDING = "pending"
|
|
31
|
+
OK = "ok"
|
|
32
|
+
FAILED = "failed"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class WikiSummaryFreshness(str, Enum):
|
|
36
|
+
"""Read-time freshness state for a cached wiki summary."""
|
|
37
|
+
|
|
38
|
+
MISSING = "missing"
|
|
39
|
+
FRESH = "fresh"
|
|
40
|
+
STALE = "stale"
|
|
41
|
+
EXPIRED = "expired"
|
|
42
|
+
PENDING = "pending"
|
|
43
|
+
FAILED = "failed"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class WikiSummarySourceVelocity(str, Enum):
|
|
47
|
+
"""How quickly one summary target's source facts are changing."""
|
|
48
|
+
|
|
49
|
+
HIGH = "high"
|
|
50
|
+
NORMAL = "normal"
|
|
51
|
+
QUIET = "quiet"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@dataclass(frozen=True, kw_only=True)
|
|
55
|
+
class WikiSummaryTarget:
|
|
56
|
+
"""One repository-scoped wiki summary target."""
|
|
57
|
+
|
|
58
|
+
repo_id: str
|
|
59
|
+
target_type: WikiSummaryTargetType
|
|
60
|
+
target_id: str
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@dataclass(frozen=True, kw_only=True)
|
|
64
|
+
class WikiSummaryInputSnapshot:
|
|
65
|
+
"""Deterministic source payload used to generate one summary."""
|
|
66
|
+
|
|
67
|
+
target: WikiSummaryTarget
|
|
68
|
+
input_hash: str
|
|
69
|
+
source_refs: tuple[str, ...]
|
|
70
|
+
source_payload: dict[str, Any]
|
|
71
|
+
source_velocity: WikiSummarySourceVelocity
|
|
72
|
+
popularity_score: int
|
|
73
|
+
latest_source_at: datetime | None = None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@dataclass(frozen=True, kw_only=True)
|
|
77
|
+
class WikiSummaryRecord:
|
|
78
|
+
"""Cached generated prose for one wiki target."""
|
|
79
|
+
|
|
80
|
+
target: WikiSummaryTarget
|
|
81
|
+
body: str | None
|
|
82
|
+
input_hash: str | None
|
|
83
|
+
source_refs: tuple[str, ...]
|
|
84
|
+
generation_status: WikiSummaryGenerationStatus
|
|
85
|
+
generated_at: datetime | None
|
|
86
|
+
model: str | None
|
|
87
|
+
prompt_version: str | None
|
|
88
|
+
last_error_code: str | None
|
|
89
|
+
last_error_message: str | None
|
|
90
|
+
created_at: datetime
|
|
91
|
+
updated_at: datetime
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@dataclass(frozen=True, kw_only=True)
|
|
95
|
+
class WikiSummaryLinkTarget:
|
|
96
|
+
"""One deterministic wiki page target that may be linked from summary prose."""
|
|
97
|
+
|
|
98
|
+
target_type: WikiSummaryLinkTargetType
|
|
99
|
+
target_id: str
|
|
100
|
+
label: str
|
|
101
|
+
slug: str | None = None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@dataclass(frozen=True, kw_only=True)
|
|
105
|
+
class WikiSummaryView:
|
|
106
|
+
"""Summary state attached to a rendered wiki page model."""
|
|
107
|
+
|
|
108
|
+
target: WikiSummaryTarget
|
|
109
|
+
freshness: WikiSummaryFreshness
|
|
110
|
+
body: str | None
|
|
111
|
+
generated_at: datetime | None
|
|
112
|
+
stale_reason: str | None
|
|
113
|
+
generation_status: WikiSummaryGenerationStatus | None
|
|
114
|
+
link_targets: tuple[WikiSummaryLinkTarget, ...] = ()
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Pure freshness policy for generated wiki summaries."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import datetime, timedelta
|
|
6
|
+
|
|
7
|
+
from app.core.entities.wiki_summaries import (
|
|
8
|
+
WikiSummaryFreshness,
|
|
9
|
+
WikiSummaryGenerationStatus,
|
|
10
|
+
WikiSummaryInputSnapshot,
|
|
11
|
+
WikiSummaryRecord,
|
|
12
|
+
WikiSummarySourceVelocity,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
_EXPIRATION_BY_VELOCITY = {
|
|
17
|
+
WikiSummarySourceVelocity.HIGH: timedelta(days=3),
|
|
18
|
+
WikiSummarySourceVelocity.NORMAL: timedelta(days=14),
|
|
19
|
+
WikiSummarySourceVelocity.QUIET: timedelta(days=60),
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def determine_wiki_summary_freshness(
|
|
24
|
+
*,
|
|
25
|
+
record: WikiSummaryRecord | None,
|
|
26
|
+
snapshot: WikiSummaryInputSnapshot,
|
|
27
|
+
now: datetime,
|
|
28
|
+
) -> tuple[WikiSummaryFreshness, str | None]:
|
|
29
|
+
"""Return freshness and a compact reason for one cached summary."""
|
|
30
|
+
|
|
31
|
+
if record is None:
|
|
32
|
+
return WikiSummaryFreshness.MISSING, "summary has not been generated"
|
|
33
|
+
if record.generation_status == WikiSummaryGenerationStatus.PENDING:
|
|
34
|
+
return WikiSummaryFreshness.PENDING, "summary generation is running"
|
|
35
|
+
if record.generation_status == WikiSummaryGenerationStatus.FAILED:
|
|
36
|
+
reason = record.last_error_code or "generation failed"
|
|
37
|
+
return WikiSummaryFreshness.FAILED, reason
|
|
38
|
+
if record.input_hash != snapshot.input_hash:
|
|
39
|
+
return WikiSummaryFreshness.STALE, "source facts changed"
|
|
40
|
+
if record.generated_at is None:
|
|
41
|
+
return WikiSummaryFreshness.STALE, "summary has no generated timestamp"
|
|
42
|
+
|
|
43
|
+
ttl = _EXPIRATION_BY_VELOCITY[snapshot.source_velocity]
|
|
44
|
+
if now - record.generated_at > ttl:
|
|
45
|
+
return WikiSummaryFreshness.EXPIRED, (
|
|
46
|
+
f"{snapshot.source_velocity.value} velocity summary exceeded "
|
|
47
|
+
f"{ttl.days} day freshness window"
|
|
48
|
+
)
|
|
49
|
+
return WikiSummaryFreshness.FRESH, None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def needs_wiki_summary_refresh(freshness: WikiSummaryFreshness) -> bool:
|
|
53
|
+
"""Return whether this freshness state should enqueue background refresh."""
|
|
54
|
+
|
|
55
|
+
return freshness in {
|
|
56
|
+
WikiSummaryFreshness.MISSING,
|
|
57
|
+
WikiSummaryFreshness.STALE,
|
|
58
|
+
WikiSummaryFreshness.EXPIRED,
|
|
59
|
+
WikiSummaryFreshness.FAILED,
|
|
60
|
+
}
|
|
@@ -37,6 +37,12 @@ class IConceptsRepo(ABC):
|
|
|
37
37
|
) -> Sequence[Concept]:
|
|
38
38
|
"""This method returns concepts for the provided ids."""
|
|
39
39
|
|
|
40
|
+
@abstractmethod
|
|
41
|
+
def list_concepts(
|
|
42
|
+
self, *, repo_id: str, statuses: Sequence[str]
|
|
43
|
+
) -> Sequence[Concept]:
|
|
44
|
+
"""This method returns concepts for one repo and status set."""
|
|
45
|
+
|
|
40
46
|
@abstractmethod
|
|
41
47
|
def list_contains_edges(self, *, repo_id: str) -> Sequence[ConceptRelation]:
|
|
42
48
|
"""This method returns active contains edges for cycle validation."""
|
|
@@ -104,6 +110,12 @@ class IConceptsRepo(ABC):
|
|
|
104
110
|
) -> Sequence[dict[str, Any]]:
|
|
105
111
|
"""This method returns concept-link matches for displayed memory ids."""
|
|
106
112
|
|
|
113
|
+
@abstractmethod
|
|
114
|
+
def find_concepts_for_anchor_ids(
|
|
115
|
+
self, *, repo_id: str, anchor_ids: Sequence[str]
|
|
116
|
+
) -> Sequence[dict[str, Any]]:
|
|
117
|
+
"""This method returns concept-grounding matches for displayed anchors."""
|
|
118
|
+
|
|
107
119
|
@abstractmethod
|
|
108
120
|
def upsert_embedding(
|
|
109
121
|
self,
|
|
@@ -5,6 +5,7 @@ from typing import Sequence
|
|
|
5
5
|
|
|
6
6
|
from app.core.entities.associations import AssociationEdge, AssociationObservation
|
|
7
7
|
from app.core.entities.evidence import (
|
|
8
|
+
EvidenceDetail,
|
|
8
9
|
EvidenceLinkView,
|
|
9
10
|
EvidenceRole,
|
|
10
11
|
EvidenceSource,
|
|
@@ -30,6 +31,12 @@ class IMemoriesRepo(ABC):
|
|
|
30
31
|
def list_by_ids(self, ids: Sequence[str]) -> Sequence[Memory]:
|
|
31
32
|
"""This method fetches memories in the input identifier order."""
|
|
32
33
|
|
|
34
|
+
@abstractmethod
|
|
35
|
+
def list_recent(
|
|
36
|
+
self, *, repo_id: str, statuses: Sequence[str], limit: int
|
|
37
|
+
) -> Sequence[Memory]:
|
|
38
|
+
"""Fetch recent memories for one repository in newest-first order."""
|
|
39
|
+
|
|
33
40
|
@abstractmethod
|
|
34
41
|
def update_lifecycle(self, memory: Memory) -> bool:
|
|
35
42
|
"""Update lifecycle fields for one concrete memory."""
|
|
@@ -96,3 +103,9 @@ class IEvidenceRepo(ABC):
|
|
|
96
103
|
self, *, repo_id: str, targets: Sequence[EvidenceTarget]
|
|
97
104
|
) -> Sequence[EvidenceLinkView]:
|
|
98
105
|
"""Resolve evidence links for targets through the unified evidence API."""
|
|
106
|
+
|
|
107
|
+
@abstractmethod
|
|
108
|
+
def get_evidence_detail(
|
|
109
|
+
self, *, repo_id: str, evidence_id: str
|
|
110
|
+
) -> EvidenceDetail | None:
|
|
111
|
+
"""Resolve one canonical evidence source plus linked targets."""
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""Repository index read ports."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from typing import Sequence
|
|
7
|
+
|
|
8
|
+
from app.core.entities.repositories import RepositorySummary
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class IRepositoryIndexRepo(ABC):
|
|
12
|
+
"""Read-only access to repositories known to Shellbrain."""
|
|
13
|
+
|
|
14
|
+
@abstractmethod
|
|
15
|
+
def list_repositories(self) -> Sequence[RepositorySummary]:
|
|
16
|
+
"""Return repositories that have Shellbrain knowledge or telemetry rows."""
|
|
@@ -15,7 +15,9 @@ from app.core.ports.db.memory_repositories import (
|
|
|
15
15
|
IUtilityRepo,
|
|
16
16
|
)
|
|
17
17
|
from app.core.ports.db.problem_runs import IProblemRunsRepo
|
|
18
|
+
from app.core.ports.db.repository_index import IRepositoryIndexRepo
|
|
18
19
|
from app.core.ports.db.snapshots import ISnapshotsRepo
|
|
20
|
+
from app.core.ports.db.wiki_summaries import IWikiSummaryRepo
|
|
19
21
|
from app.core.ports.embeddings.retrieval import IVectorSearch
|
|
20
22
|
from app.core.ports.db.retrieval_repositories import (
|
|
21
23
|
IConceptKeywordRetrievalRepo,
|
|
@@ -44,7 +46,9 @@ class IUnitOfWork(ABC):
|
|
|
44
46
|
guidance: IPendingUtilityCandidatesRepo
|
|
45
47
|
knowledge_build_runs: IKnowledgeBuildRunsRepo
|
|
46
48
|
problem_runs: IProblemRunsRepo
|
|
49
|
+
repository_index: IRepositoryIndexRepo
|
|
47
50
|
snapshots: ISnapshotsRepo
|
|
51
|
+
wiki_summaries: IWikiSummaryRepo
|
|
48
52
|
vector_search: IVectorSearch | None
|
|
49
53
|
|
|
50
54
|
@abstractmethod
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""Repository port for generated wiki summary cache records."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from typing import Sequence
|
|
8
|
+
|
|
9
|
+
from app.core.entities.wiki_summaries import (
|
|
10
|
+
WikiSummaryInputSnapshot,
|
|
11
|
+
WikiSummaryRecord,
|
|
12
|
+
WikiSummaryTarget,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class IWikiSummaryRepo(ABC):
|
|
17
|
+
"""Read and write cached generated wiki summaries."""
|
|
18
|
+
|
|
19
|
+
@abstractmethod
|
|
20
|
+
def get(self, target: WikiSummaryTarget) -> WikiSummaryRecord | None:
|
|
21
|
+
"""Return the cached summary for one target when present."""
|
|
22
|
+
|
|
23
|
+
@abstractmethod
|
|
24
|
+
def acquire_refresh(
|
|
25
|
+
self,
|
|
26
|
+
*,
|
|
27
|
+
snapshot: WikiSummaryInputSnapshot,
|
|
28
|
+
model: str,
|
|
29
|
+
prompt_version: str,
|
|
30
|
+
now: datetime,
|
|
31
|
+
stale_running_before: datetime,
|
|
32
|
+
) -> bool:
|
|
33
|
+
"""Mark one target pending when no fresh refresh is already running."""
|
|
34
|
+
|
|
35
|
+
@abstractmethod
|
|
36
|
+
def record_success(
|
|
37
|
+
self,
|
|
38
|
+
*,
|
|
39
|
+
snapshot: WikiSummaryInputSnapshot,
|
|
40
|
+
body: str,
|
|
41
|
+
model: str,
|
|
42
|
+
prompt_version: str,
|
|
43
|
+
now: datetime,
|
|
44
|
+
) -> None:
|
|
45
|
+
"""Persist generated summary prose for one target."""
|
|
46
|
+
|
|
47
|
+
@abstractmethod
|
|
48
|
+
def record_failure(
|
|
49
|
+
self,
|
|
50
|
+
*,
|
|
51
|
+
snapshot: WikiSummaryInputSnapshot,
|
|
52
|
+
model: str,
|
|
53
|
+
prompt_version: str,
|
|
54
|
+
error_code: str,
|
|
55
|
+
error_message: str,
|
|
56
|
+
now: datetime,
|
|
57
|
+
) -> None:
|
|
58
|
+
"""Persist a failed refresh attempt without deleting prior prose."""
|
|
59
|
+
|
|
60
|
+
@abstractmethod
|
|
61
|
+
def list_existing_targets(
|
|
62
|
+
self, *, repo_ids: Sequence[str]
|
|
63
|
+
) -> Sequence[WikiSummaryTarget]:
|
|
64
|
+
"""Return summary targets that already have cache rows for these repos."""
|
|
@@ -106,6 +106,22 @@ class TeachKnowledgeAgentRequest(_StrictModel):
|
|
|
106
106
|
max_write_commands: int = Field(ge=1, le=200)
|
|
107
107
|
|
|
108
108
|
|
|
109
|
+
class WikiSummaryAgentRequest(_StrictModel):
|
|
110
|
+
"""One provider request to generate a cached wiki summary."""
|
|
111
|
+
|
|
112
|
+
agent_name: InnerAgentName = "wiki_summary"
|
|
113
|
+
provider: InnerAgentProviderName = Field(min_length=1)
|
|
114
|
+
model: str = Field(min_length=1)
|
|
115
|
+
reasoning: InnerAgentReasoningLevel
|
|
116
|
+
timeout_seconds: int = Field(ge=1, le=1200)
|
|
117
|
+
prompt_version: str = Field(min_length=1)
|
|
118
|
+
target_type: str = Field(min_length=1)
|
|
119
|
+
repo_id: str = Field(min_length=1)
|
|
120
|
+
target_id: str = Field(min_length=1)
|
|
121
|
+
source_payload: dict[str, Any]
|
|
122
|
+
max_summary_chars: int = Field(ge=100, le=4000)
|
|
123
|
+
|
|
124
|
+
|
|
109
125
|
class BuildKnowledgeAgentResult(_StrictModel):
|
|
110
126
|
"""Provider-neutral result from one build_knowledge run."""
|
|
111
127
|
|
|
@@ -131,6 +147,27 @@ class BuildKnowledgeAgentResult(_StrictModel):
|
|
|
131
147
|
code_trace: dict[str, Any] = Field(default_factory=dict)
|
|
132
148
|
|
|
133
149
|
|
|
150
|
+
class WikiSummaryAgentResult(_StrictModel):
|
|
151
|
+
"""Provider-neutral result from one generated wiki summary run."""
|
|
152
|
+
|
|
153
|
+
status: InnerAgentRunStatus
|
|
154
|
+
provider: InnerAgentProviderName = Field(min_length=1)
|
|
155
|
+
model: str
|
|
156
|
+
reasoning: InnerAgentReasoningLevel
|
|
157
|
+
timeout_seconds: int | None = Field(default=None, ge=1, le=1200)
|
|
158
|
+
duration_ms: int = Field(default=0, ge=0)
|
|
159
|
+
input_tokens: int | None = Field(default=None, ge=0)
|
|
160
|
+
output_tokens: int | None = Field(default=None, ge=0)
|
|
161
|
+
reasoning_output_tokens: int | None = Field(default=None, ge=0)
|
|
162
|
+
cached_input_tokens_total: int | None = Field(default=None, ge=0)
|
|
163
|
+
cache_read_input_tokens: int | None = Field(default=None, ge=0)
|
|
164
|
+
cache_creation_input_tokens: int | None = Field(default=None, ge=0)
|
|
165
|
+
capture_quality: TokenCaptureQuality | None = None
|
|
166
|
+
body: str | None = None
|
|
167
|
+
error_code: str | None = None
|
|
168
|
+
error_message: str | None = None
|
|
169
|
+
|
|
170
|
+
|
|
134
171
|
class IInnerAgentRunner(Protocol):
|
|
135
172
|
"""Behavior protocol for bounded inner-agent synthesis providers."""
|
|
136
173
|
|
|
@@ -154,3 +191,12 @@ class ITeachKnowledgeAgentRunner(Protocol):
|
|
|
154
191
|
self, request: TeachKnowledgeAgentRequest
|
|
155
192
|
) -> BuildKnowledgeAgentResult:
|
|
156
193
|
"""Run one teach request and return a provider-neutral result."""
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class IWikiSummaryAgentRunner(Protocol):
|
|
197
|
+
"""Behavior protocol for generated wiki summary providers."""
|
|
198
|
+
|
|
199
|
+
def run_wiki_summary(
|
|
200
|
+
self, request: WikiSummaryAgentRequest
|
|
201
|
+
) -> WikiSummaryAgentResult:
|
|
202
|
+
"""Run one wiki summary request and return provider-neutral prose."""
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Shellbrain Wiki read-only workflows."""
|
|
2
|
+
|
|
3
|
+
from app.core.use_cases.wiki.execute import (
|
|
4
|
+
wiki_anchor_page,
|
|
5
|
+
wiki_concept_facet,
|
|
6
|
+
wiki_concept_page,
|
|
7
|
+
wiki_evidence_page,
|
|
8
|
+
wiki_home,
|
|
9
|
+
wiki_index,
|
|
10
|
+
wiki_memory_neighbors,
|
|
11
|
+
wiki_memory_page,
|
|
12
|
+
wiki_memory_sources,
|
|
13
|
+
wiki_search,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"wiki_anchor_page",
|
|
18
|
+
"wiki_concept_facet",
|
|
19
|
+
"wiki_concept_page",
|
|
20
|
+
"wiki_evidence_page",
|
|
21
|
+
"wiki_home",
|
|
22
|
+
"wiki_index",
|
|
23
|
+
"wiki_memory_neighbors",
|
|
24
|
+
"wiki_memory_page",
|
|
25
|
+
"wiki_memory_sources",
|
|
26
|
+
"wiki_search",
|
|
27
|
+
]
|