shellbrain 0.1.41__tar.gz → 0.1.43__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.41 → shellbrain-0.1.43}/PKG-INFO +1 -1
- shellbrain-0.1.43/app/infrastructure/host_apps/inner_agents/claude_cli.py +477 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/inner_agents/codex_cli.py +1 -1
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/claude_code.py +2 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/settings/internal-agents/defaults.yaml +8 -4
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/internal_agent_config.py +3 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/internal_agents.py +68 -40
- {shellbrain-0.1.41 → shellbrain-0.1.43}/pyproject.toml +1 -1
- {shellbrain-0.1.41 → shellbrain-0.1.43}/shellbrain.egg-info/PKG-INFO +1 -1
- {shellbrain-0.1.41 → shellbrain-0.1.43}/shellbrain.egg-info/SOURCES.txt +1 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/README.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/__main__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/admin_errors.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/associations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/backups.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/concepts.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/episodes.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/evidence.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/guidance.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/identity.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/ids.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/inner_agents.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/knowledge_builder.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/machine_config.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/memories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/repositories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/runtime_context.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/scenarios.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/session_state.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/settings.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/snapshots.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/structural_memory_relations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/utility.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/entities/wiki_summaries.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/errors.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/concepts/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/concepts/relation_rules.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/concepts/search_text.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/episodes/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/episodes/event_content.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/episodes/knowledge_building.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/memories/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/memories/add_plan.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/memories/link_rules.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/memories/update_plan.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/bm25.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/context_pack.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/expansion.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/fusion_rrf.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/lexical_query.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/ontology_semantics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/retrieval/scoring.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/policies/wiki_summary_freshness.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/concept_repositories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/episode_repositories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/guidance.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/knowledge_builder.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/memory_repositories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/problem_runs.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/repository_index.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/retrieval_repositories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/snapshots.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/unit_of_work.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/db/wiki_summaries.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/embeddings/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/embeddings/provider.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/embeddings/retrieval.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/host_apps/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/host_apps/inner_agents.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/local_state/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/local_state/session_state_store.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/local_state/shadow_git.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/reporting/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/reporting/metrics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/system/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/system/clock.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/ports/system/idgen.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/create_backup.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/initialize_runtime.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/restore_backup.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/admin/verify_backup.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/build_guidance.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/add/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/add/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/add/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/add/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/containment_checks.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/embeddings.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/reference_checks.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/show/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/show/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/show/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/show/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/update/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/update/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/update/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/update/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/concepts/views.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/events/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/events/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/add/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/add/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/add/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/add/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/effect_plan.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/reference_checks.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/update/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/update/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/update/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/memories/update/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/metrics/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/metrics/build_snapshot.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/plan_execution.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/build_context/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/context_pack_pipeline.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/deterministic_graph_recall.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/expansion.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/read/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/read/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/read/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/read/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/read_concepts.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/recall/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/recall/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/recall/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/recall/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/retrieval/seed_retrieval.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/scenarios/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/scenarios/record/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/scenarios/record/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/scenarios/record/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/scenarios/record/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/code_delta_context/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/wiki/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/wiki/execute.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/wiki/request.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/wiki/result.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/core/use_cases/wiki/summaries.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/error_responses.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/dependencies.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/human/admin.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/human/init.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/human/wiki.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/session_state.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/working_agent/snapshot.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/main.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/operation_command.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/parser/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/parser/builder.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/presenters/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/presenters/init.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/presenters/json.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/presenters/metrics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/memories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/request_parsing/teach.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/runner.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/cli/runtime.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/host_hooks/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/jobs/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/entrypoints/jobs/episode_sync.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/app_role_safety.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/backups/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/backups/restore.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/connection.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/instance_guard.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/migrations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/privileges.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/admin/storage_setup.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/engine.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/associations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/concepts.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/episodes.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/evidence.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/experiences.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/memories.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/metadata.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/registry.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/utility.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/views.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/models/wiki_summaries.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/repository_index_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/relational/wiki_summaries_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/session.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/db/runtime/uow.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/embeddings/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/embeddings/local_provider.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/embeddings/prewarm.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/embeddings/query_vector_search.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/claude.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/codex.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/cursor.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/inspection.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/paths.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/service.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/assets/types.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/identity/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/identity/resolver.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/inner_agents/prompt.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/init_lock.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/machine_config_store.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/operation_registration.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/paths.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/repo_registration_store.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/session_state_file_store.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/local_state/shadow_git_store.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/process/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/process/episode_sync/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/process/episode_sync/autostart.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/process/episode_sync/launcher.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/process/episode_sync/poller.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/process/episode_sync/status_store.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/metrics/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/metrics/browser.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/metrics/pager.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/metrics/render_html.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/wiki/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/wiki/browser.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/wiki/render_html.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/wiki/server.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/reporting/wiki/summary_worker.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/system/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/system/clock.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/system/id_generator.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/system/package_upgrade.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/operation_invocations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/operation_polling.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/read_records.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/recall_records.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/recorder.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/records.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/sink.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/storage_protocols.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/sync_records.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/telemetry/write_records.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/settings/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/settings/defaults/create_policy.yaml +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/settings/defaults/read_policy.yaml +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/settings/defaults/runtime.yaml +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/settings/defaults/thresholds.yaml +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/settings/defaults/update_policy.yaml +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/admin.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/admin_db.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/admin_dependencies.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/admin_diagnose.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/analytics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/backup.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/cli.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/cli_runtime.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/config.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/create_policy.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/db.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/dsn_resolution.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/embeddings.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/episode_poller.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/episode_sync_launcher.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/host_hooks.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/knowledge_builder.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/metrics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/migrations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/model_usage_backfill.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/operation_dependencies.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/read_policy.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/repo_context.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/repos.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/retrieval.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/runtime_admin.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/runtime_context.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/settings.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/snapshot_baseline.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/thresholds.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/update_policy.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/use_cases.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/app/startup/wiki.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/_legacy_usage_views.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/_usage_view_sql.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/env.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260226_0001_initial_schema.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260422_0015_problem_runs.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260515_0019_scenario_records.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/20260606_0037_wiki_summaries.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/migrations/versions/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/__init__.py +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/claude/CLAUDE.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/claude/skills/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/AGENTS.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain/references/request-shapes.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain/references/session-workflow.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/cursor/skills/shellbrain/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/setup.cfg +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/shellbrain.egg-info/dependency_links.txt +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/shellbrain.egg-info/entry_points.txt +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/shellbrain.egg-info/requires.txt +0 -0
- {shellbrain-0.1.41 → shellbrain-0.1.43}/shellbrain.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
"""Claude Code CLI-backed inner-agent provider adapter."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import shutil
|
|
7
|
+
import subprocess
|
|
8
|
+
from time import perf_counter
|
|
9
|
+
|
|
10
|
+
from app.core.ports.host_apps.inner_agents import (
|
|
11
|
+
BuildKnowledgeAgentRequest,
|
|
12
|
+
BuildKnowledgeAgentResult,
|
|
13
|
+
InnerAgentRunRequest,
|
|
14
|
+
InnerAgentRunResult,
|
|
15
|
+
TeachKnowledgeAgentRequest,
|
|
16
|
+
WikiSummaryAgentRequest,
|
|
17
|
+
WikiSummaryAgentResult,
|
|
18
|
+
)
|
|
19
|
+
from app.infrastructure.host_apps.inner_agents.codex_cli import (
|
|
20
|
+
_build_knowledge_result,
|
|
21
|
+
_duration_ms,
|
|
22
|
+
_estimate_tokens,
|
|
23
|
+
_inner_agent_env,
|
|
24
|
+
_result,
|
|
25
|
+
_truncate,
|
|
26
|
+
_usage_or_estimate,
|
|
27
|
+
_wiki_summary_result,
|
|
28
|
+
)
|
|
29
|
+
from app.infrastructure.host_apps.inner_agents.output_parser import (
|
|
30
|
+
InnerAgentOutputParseError,
|
|
31
|
+
parse_build_knowledge_output,
|
|
32
|
+
parse_inner_agent_response_output,
|
|
33
|
+
parse_wiki_summary_output,
|
|
34
|
+
)
|
|
35
|
+
from app.infrastructure.host_apps.inner_agents.prompt import (
|
|
36
|
+
render_build_context_prompt,
|
|
37
|
+
render_build_context_synthesis_prompt,
|
|
38
|
+
render_build_knowledge_prompt,
|
|
39
|
+
render_teach_knowledge_prompt,
|
|
40
|
+
render_wiki_summary_prompt,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ClaudeCliInnerAgentRunner:
|
|
45
|
+
"""Run Shellbrain inner-agent work through the local Claude Code CLI."""
|
|
46
|
+
|
|
47
|
+
def __init__(self, *, command: str) -> None:
|
|
48
|
+
self._command = command
|
|
49
|
+
|
|
50
|
+
def run(self, request: InnerAgentRunRequest) -> InnerAgentRunResult:
|
|
51
|
+
"""Run one Claude Code build_context request."""
|
|
52
|
+
|
|
53
|
+
prompt = (
|
|
54
|
+
render_build_context_synthesis_prompt(request)
|
|
55
|
+
if request.synthesis_only
|
|
56
|
+
else render_build_context_prompt(request)
|
|
57
|
+
)
|
|
58
|
+
run = self._run_claude(
|
|
59
|
+
request,
|
|
60
|
+
prompt=prompt,
|
|
61
|
+
mode="build_context_synthesis" if request.synthesis_only else "build_context",
|
|
62
|
+
tool_profile="none" if request.synthesis_only else "shellbrain",
|
|
63
|
+
)
|
|
64
|
+
if run["status"] != "ok":
|
|
65
|
+
return _context_error_result(request, run)
|
|
66
|
+
final_message = str(run["result"])
|
|
67
|
+
try:
|
|
68
|
+
brief, read_trace = parse_inner_agent_response_output(final_message)
|
|
69
|
+
except InnerAgentOutputParseError as exc:
|
|
70
|
+
return _result(
|
|
71
|
+
request,
|
|
72
|
+
status="invalid_output",
|
|
73
|
+
fallback_used=True,
|
|
74
|
+
duration_ms=int(run["duration_ms"]),
|
|
75
|
+
**_usage_or_estimate(
|
|
76
|
+
prompt=prompt, output=final_message, usage=run.get("usage")
|
|
77
|
+
),
|
|
78
|
+
error_code="invalid_output",
|
|
79
|
+
error_message=str(exc),
|
|
80
|
+
)
|
|
81
|
+
return _result(
|
|
82
|
+
request,
|
|
83
|
+
status="ok",
|
|
84
|
+
brief=brief,
|
|
85
|
+
duration_ms=int(run["duration_ms"]),
|
|
86
|
+
**_usage_or_estimate(
|
|
87
|
+
prompt=prompt, output=final_message, usage=run.get("usage")
|
|
88
|
+
),
|
|
89
|
+
read_trace=read_trace,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
def run_build_knowledge(
|
|
93
|
+
self, request: BuildKnowledgeAgentRequest
|
|
94
|
+
) -> BuildKnowledgeAgentResult:
|
|
95
|
+
"""Run one Claude Code build_knowledge request."""
|
|
96
|
+
|
|
97
|
+
return self._run_knowledge(
|
|
98
|
+
request,
|
|
99
|
+
prompt=render_build_knowledge_prompt(request),
|
|
100
|
+
mode="build_knowledge",
|
|
101
|
+
tool_profile="knowledge",
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
def run_teach_knowledge(
|
|
105
|
+
self, request: TeachKnowledgeAgentRequest
|
|
106
|
+
) -> BuildKnowledgeAgentResult:
|
|
107
|
+
"""Run one Claude Code teach request."""
|
|
108
|
+
|
|
109
|
+
return self._run_knowledge(
|
|
110
|
+
request,
|
|
111
|
+
prompt=render_teach_knowledge_prompt(request),
|
|
112
|
+
mode="teach",
|
|
113
|
+
tool_profile="shellbrain",
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
def _run_knowledge(
|
|
117
|
+
self,
|
|
118
|
+
request: BuildKnowledgeAgentRequest | TeachKnowledgeAgentRequest,
|
|
119
|
+
*,
|
|
120
|
+
prompt: str,
|
|
121
|
+
mode: str,
|
|
122
|
+
tool_profile: str,
|
|
123
|
+
) -> BuildKnowledgeAgentResult:
|
|
124
|
+
run = self._run_claude(
|
|
125
|
+
request,
|
|
126
|
+
prompt=prompt,
|
|
127
|
+
mode=mode,
|
|
128
|
+
tool_profile=tool_profile,
|
|
129
|
+
knowledge_build_run_id=request.run_id,
|
|
130
|
+
)
|
|
131
|
+
if run["status"] != "ok":
|
|
132
|
+
return _knowledge_error_result(request, run)
|
|
133
|
+
final_message = str(run["result"])
|
|
134
|
+
try:
|
|
135
|
+
parsed = parse_build_knowledge_output(final_message)
|
|
136
|
+
except InnerAgentOutputParseError as exc:
|
|
137
|
+
return _build_knowledge_result(
|
|
138
|
+
request,
|
|
139
|
+
status="invalid_output",
|
|
140
|
+
duration_ms=int(run["duration_ms"]),
|
|
141
|
+
**_usage_or_estimate(
|
|
142
|
+
prompt=prompt, output=final_message, usage=run.get("usage")
|
|
143
|
+
),
|
|
144
|
+
error_code="invalid_output",
|
|
145
|
+
error_message=str(exc),
|
|
146
|
+
)
|
|
147
|
+
return _build_knowledge_result(
|
|
148
|
+
request,
|
|
149
|
+
status=parsed["status"],
|
|
150
|
+
duration_ms=int(run["duration_ms"]),
|
|
151
|
+
**_usage_or_estimate(
|
|
152
|
+
prompt=prompt, output=final_message, usage=run.get("usage")
|
|
153
|
+
),
|
|
154
|
+
write_count=int(parsed["write_count"]),
|
|
155
|
+
skipped_item_count=int(parsed["skipped_item_count"]),
|
|
156
|
+
run_summary=parsed["run_summary"],
|
|
157
|
+
read_trace=parsed["read_trace"],
|
|
158
|
+
code_trace=parsed["code_trace"],
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
def run_wiki_summary(
|
|
162
|
+
self, request: WikiSummaryAgentRequest
|
|
163
|
+
) -> WikiSummaryAgentResult:
|
|
164
|
+
"""Run one Claude Code wiki_summary request."""
|
|
165
|
+
|
|
166
|
+
prompt = render_wiki_summary_prompt(request)
|
|
167
|
+
run = self._run_claude(
|
|
168
|
+
request,
|
|
169
|
+
prompt=prompt,
|
|
170
|
+
mode="wiki_summary",
|
|
171
|
+
tool_profile="none",
|
|
172
|
+
)
|
|
173
|
+
if run["status"] != "ok":
|
|
174
|
+
return _wiki_error_result(request, run)
|
|
175
|
+
final_message = str(run["result"])
|
|
176
|
+
try:
|
|
177
|
+
body = parse_wiki_summary_output(final_message)
|
|
178
|
+
except InnerAgentOutputParseError as exc:
|
|
179
|
+
return _wiki_summary_result(
|
|
180
|
+
request,
|
|
181
|
+
status="invalid_output",
|
|
182
|
+
duration_ms=int(run["duration_ms"]),
|
|
183
|
+
**_usage_or_estimate(
|
|
184
|
+
prompt=prompt, output=final_message, usage=run.get("usage")
|
|
185
|
+
),
|
|
186
|
+
error_code="invalid_output",
|
|
187
|
+
error_message=str(exc),
|
|
188
|
+
)
|
|
189
|
+
return _wiki_summary_result(
|
|
190
|
+
request,
|
|
191
|
+
status="ok",
|
|
192
|
+
body=body,
|
|
193
|
+
duration_ms=int(run["duration_ms"]),
|
|
194
|
+
**_usage_or_estimate(
|
|
195
|
+
prompt=prompt, output=final_message, usage=run.get("usage")
|
|
196
|
+
),
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
def _run_claude(
|
|
200
|
+
self,
|
|
201
|
+
request,
|
|
202
|
+
*,
|
|
203
|
+
prompt: str,
|
|
204
|
+
mode: str,
|
|
205
|
+
tool_profile: str,
|
|
206
|
+
knowledge_build_run_id: str | None = None,
|
|
207
|
+
) -> dict[str, object]:
|
|
208
|
+
command_path = shutil.which(self._command)
|
|
209
|
+
if command_path is None:
|
|
210
|
+
return {
|
|
211
|
+
"status": "provider_unavailable",
|
|
212
|
+
"error_code": "command_not_found",
|
|
213
|
+
"error_message": f"Claude command not found: {self._command}",
|
|
214
|
+
}
|
|
215
|
+
started = perf_counter()
|
|
216
|
+
try:
|
|
217
|
+
completed = subprocess.run(
|
|
218
|
+
_claude_args(
|
|
219
|
+
command_path=command_path,
|
|
220
|
+
model=request.model,
|
|
221
|
+
reasoning=request.reasoning,
|
|
222
|
+
tool_profile=tool_profile,
|
|
223
|
+
),
|
|
224
|
+
input=prompt,
|
|
225
|
+
text=True,
|
|
226
|
+
capture_output=True,
|
|
227
|
+
timeout=request.timeout_seconds,
|
|
228
|
+
check=False,
|
|
229
|
+
env=_inner_agent_env(
|
|
230
|
+
mode=mode,
|
|
231
|
+
knowledge_build_run_id=knowledge_build_run_id,
|
|
232
|
+
),
|
|
233
|
+
)
|
|
234
|
+
except subprocess.TimeoutExpired:
|
|
235
|
+
return _claude_error(
|
|
236
|
+
status="timeout",
|
|
237
|
+
duration_ms=_duration_ms(started),
|
|
238
|
+
prompt=prompt,
|
|
239
|
+
error_code="timeout",
|
|
240
|
+
error_message="Claude CLI timed out",
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
duration_ms = _duration_ms(started)
|
|
244
|
+
if completed.returncode != 0:
|
|
245
|
+
return _claude_error(
|
|
246
|
+
status="error",
|
|
247
|
+
duration_ms=duration_ms,
|
|
248
|
+
prompt=prompt,
|
|
249
|
+
error_code="claude_nonzero_exit",
|
|
250
|
+
error_message=_truncate(completed.stderr or completed.stdout, 500),
|
|
251
|
+
)
|
|
252
|
+
envelope = _claude_envelope(completed.stdout, allowed_model=request.model)
|
|
253
|
+
if envelope.get("error_code"):
|
|
254
|
+
return _claude_error(
|
|
255
|
+
status=str(envelope["status"]),
|
|
256
|
+
duration_ms=duration_ms,
|
|
257
|
+
prompt=prompt,
|
|
258
|
+
error_code=str(envelope["error_code"]),
|
|
259
|
+
error_message=str(envelope["error_message"]),
|
|
260
|
+
)
|
|
261
|
+
return {
|
|
262
|
+
"status": "ok",
|
|
263
|
+
"result": envelope["result"],
|
|
264
|
+
"usage": envelope.get("usage"),
|
|
265
|
+
"duration_ms": duration_ms,
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def _claude_error(
|
|
270
|
+
*,
|
|
271
|
+
status: str,
|
|
272
|
+
duration_ms: int,
|
|
273
|
+
prompt: str,
|
|
274
|
+
error_code: str,
|
|
275
|
+
error_message: str,
|
|
276
|
+
) -> dict[str, object]:
|
|
277
|
+
return {
|
|
278
|
+
"status": status,
|
|
279
|
+
"duration_ms": duration_ms,
|
|
280
|
+
"input_tokens": _estimate_tokens(prompt),
|
|
281
|
+
"capture_quality": "estimated",
|
|
282
|
+
"error_code": error_code,
|
|
283
|
+
"error_message": error_message,
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def _context_error_result(
|
|
288
|
+
request: InnerAgentRunRequest, run: dict[str, object]
|
|
289
|
+
) -> InnerAgentRunResult:
|
|
290
|
+
return _result(
|
|
291
|
+
request,
|
|
292
|
+
status=str(run["status"]),
|
|
293
|
+
fallback_used=True,
|
|
294
|
+
duration_ms=int(run.get("duration_ms") or 0),
|
|
295
|
+
input_tokens=run.get("input_tokens"),
|
|
296
|
+
capture_quality=run.get("capture_quality"),
|
|
297
|
+
error_code=str(run["error_code"]),
|
|
298
|
+
error_message=str(run["error_message"]),
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def _knowledge_error_result(
|
|
303
|
+
request: BuildKnowledgeAgentRequest | TeachKnowledgeAgentRequest,
|
|
304
|
+
run: dict[str, object],
|
|
305
|
+
) -> BuildKnowledgeAgentResult:
|
|
306
|
+
return _build_knowledge_result(
|
|
307
|
+
request,
|
|
308
|
+
status=str(run["status"]),
|
|
309
|
+
duration_ms=int(run.get("duration_ms") or 0),
|
|
310
|
+
input_tokens=run.get("input_tokens"),
|
|
311
|
+
capture_quality=run.get("capture_quality"),
|
|
312
|
+
error_code=str(run["error_code"]),
|
|
313
|
+
error_message=str(run["error_message"]),
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def _wiki_error_result(
|
|
318
|
+
request: WikiSummaryAgentRequest, run: dict[str, object]
|
|
319
|
+
) -> WikiSummaryAgentResult:
|
|
320
|
+
return _wiki_summary_result(
|
|
321
|
+
request,
|
|
322
|
+
status=str(run["status"]),
|
|
323
|
+
duration_ms=int(run.get("duration_ms") or 0),
|
|
324
|
+
input_tokens=run.get("input_tokens"),
|
|
325
|
+
capture_quality=run.get("capture_quality"),
|
|
326
|
+
error_code=str(run["error_code"]),
|
|
327
|
+
error_message=str(run["error_message"]),
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def _claude_args(
|
|
332
|
+
*,
|
|
333
|
+
command_path: str,
|
|
334
|
+
model: str,
|
|
335
|
+
reasoning: str,
|
|
336
|
+
tool_profile: str,
|
|
337
|
+
) -> list[str]:
|
|
338
|
+
"""Return the Claude Code print-mode command for one inner-agent run."""
|
|
339
|
+
|
|
340
|
+
args = [
|
|
341
|
+
command_path,
|
|
342
|
+
"-p",
|
|
343
|
+
"--output-format",
|
|
344
|
+
"json",
|
|
345
|
+
"--no-session-persistence",
|
|
346
|
+
"--safe-mode",
|
|
347
|
+
"--model",
|
|
348
|
+
model,
|
|
349
|
+
"--settings",
|
|
350
|
+
json.dumps(
|
|
351
|
+
{
|
|
352
|
+
"model": model,
|
|
353
|
+
"availableModels": [model],
|
|
354
|
+
"enforceAvailableModels": True,
|
|
355
|
+
},
|
|
356
|
+
sort_keys=True,
|
|
357
|
+
separators=(",", ":"),
|
|
358
|
+
),
|
|
359
|
+
"--effort",
|
|
360
|
+
_claude_effort(reasoning),
|
|
361
|
+
"--strict-mcp-config",
|
|
362
|
+
"--disallowedTools",
|
|
363
|
+
"mcp__*",
|
|
364
|
+
]
|
|
365
|
+
args.extend(_claude_tool_args(tool_profile))
|
|
366
|
+
return args
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
def _claude_tool_args(tool_profile: str) -> list[str]:
|
|
370
|
+
if tool_profile == "none":
|
|
371
|
+
return ["--tools", ""]
|
|
372
|
+
if tool_profile == "knowledge":
|
|
373
|
+
return [
|
|
374
|
+
"--tools",
|
|
375
|
+
"Bash,Read,Grep,Glob",
|
|
376
|
+
"--allowedTools",
|
|
377
|
+
"Bash(shellbrain *)",
|
|
378
|
+
"Read",
|
|
379
|
+
"Grep",
|
|
380
|
+
"Glob",
|
|
381
|
+
]
|
|
382
|
+
return ["--tools", "Bash", "--allowedTools", "Bash(shellbrain *)"]
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
def _claude_effort(reasoning: str) -> str:
|
|
386
|
+
if reasoning in {"low", "medium", "high", "xhigh"}:
|
|
387
|
+
return reasoning
|
|
388
|
+
return "low"
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
def _claude_envelope(output: str, *, allowed_model: str) -> dict[str, object]:
|
|
392
|
+
try:
|
|
393
|
+
payload = json.loads(output)
|
|
394
|
+
except json.JSONDecodeError:
|
|
395
|
+
return {
|
|
396
|
+
"status": "invalid_output",
|
|
397
|
+
"error_code": "claude_invalid_json",
|
|
398
|
+
"error_message": "Claude output is not valid JSON",
|
|
399
|
+
}
|
|
400
|
+
if not isinstance(payload, dict):
|
|
401
|
+
return {
|
|
402
|
+
"status": "invalid_output",
|
|
403
|
+
"error_code": "claude_invalid_json",
|
|
404
|
+
"error_message": "Claude output must be a JSON object",
|
|
405
|
+
}
|
|
406
|
+
disallowed_model = _disallowed_reported_model(payload, allowed_model=allowed_model)
|
|
407
|
+
if disallowed_model is not None:
|
|
408
|
+
return {
|
|
409
|
+
"status": "error",
|
|
410
|
+
"error_code": "claude_disallowed_model",
|
|
411
|
+
"error_message": f"Claude reported disallowed model: {disallowed_model}",
|
|
412
|
+
}
|
|
413
|
+
result = payload.get("result")
|
|
414
|
+
if not isinstance(result, str):
|
|
415
|
+
return {
|
|
416
|
+
"status": "invalid_output",
|
|
417
|
+
"error_code": "claude_missing_result",
|
|
418
|
+
"error_message": "Claude output must include a string result",
|
|
419
|
+
}
|
|
420
|
+
return {"result": result, "usage": _claude_usage(payload)}
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def _disallowed_reported_model(
|
|
424
|
+
payload: dict[str, object], *, allowed_model: str
|
|
425
|
+
) -> str | None:
|
|
426
|
+
for model in _reported_models(payload):
|
|
427
|
+
normalized = model.lower()
|
|
428
|
+
if allowed_model.lower() not in normalized:
|
|
429
|
+
return model
|
|
430
|
+
return None
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
def _reported_models(payload: dict[str, object]) -> list[str]:
|
|
434
|
+
models: list[str] = []
|
|
435
|
+
for key in ("model", "active_model", "activeModel"):
|
|
436
|
+
value = payload.get(key)
|
|
437
|
+
if isinstance(value, str):
|
|
438
|
+
models.append(value)
|
|
439
|
+
model_usage = payload.get("modelUsage")
|
|
440
|
+
if isinstance(model_usage, dict):
|
|
441
|
+
for key, value in model_usage.items():
|
|
442
|
+
if isinstance(key, str) and "model" in key.lower() and isinstance(value, str):
|
|
443
|
+
models.append(value)
|
|
444
|
+
return models
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
def _claude_usage(payload: dict[str, object]) -> dict[str, int] | None:
|
|
448
|
+
source = payload.get("usage")
|
|
449
|
+
if not isinstance(source, dict):
|
|
450
|
+
source = payload.get("modelUsage")
|
|
451
|
+
if not isinstance(source, dict):
|
|
452
|
+
return None
|
|
453
|
+
usage = {
|
|
454
|
+
"input_tokens": _first_int(source, "input_tokens", "inputTokens"),
|
|
455
|
+
"output_tokens": _first_int(source, "output_tokens", "outputTokens"),
|
|
456
|
+
"reasoning_output_tokens": _first_int(
|
|
457
|
+
source,
|
|
458
|
+
"reasoning_output_tokens",
|
|
459
|
+
"reasoningOutputTokens",
|
|
460
|
+
"thinking_tokens",
|
|
461
|
+
),
|
|
462
|
+
"cached_input_tokens": _first_int(
|
|
463
|
+
source,
|
|
464
|
+
"cached_input_tokens",
|
|
465
|
+
"cachedInputTokens",
|
|
466
|
+
"cache_read_input_tokens",
|
|
467
|
+
),
|
|
468
|
+
}
|
|
469
|
+
return usage if any(value is not None for value in usage.values()) else None
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
def _first_int(value: dict[object, object], *names: str) -> int | None:
|
|
473
|
+
for name in names:
|
|
474
|
+
item = value.get(name)
|
|
475
|
+
if isinstance(item, int) and item >= 0:
|
|
476
|
+
return item
|
|
477
|
+
return None
|
{shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/inner_agents/codex_cli.py
RENAMED
|
@@ -635,7 +635,7 @@ def _inner_agent_env(
|
|
|
635
635
|
|
|
636
636
|
|
|
637
637
|
def _inherit_parent_caller_identity(env: dict[str, str]) -> None:
|
|
638
|
-
"""Preserve the outer host identity across a nested
|
|
638
|
+
"""Preserve the outer host identity across a nested inner-agent run."""
|
|
639
639
|
|
|
640
640
|
if env.get("CODEX_THREAD_ID"):
|
|
641
641
|
env["SHELLBRAIN_PARENT_HOST_APP"] = "codex"
|
{shellbrain-0.1.41 → shellbrain-0.1.43}/app/infrastructure/host_apps/transcripts/claude_code.py
RENAMED
|
@@ -225,6 +225,8 @@ def _iter_metadata_files(root: Path) -> Iterable[Path]:
|
|
|
225
225
|
if direct_root.exists():
|
|
226
226
|
yield from direct_root.rglob("local_*.json")
|
|
227
227
|
return
|
|
228
|
+
if root.resolve() == Path.home().resolve():
|
|
229
|
+
return
|
|
228
230
|
yield from root.rglob("local_*.json")
|
|
229
231
|
|
|
230
232
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Default model/runtime settings for Shellbrain inner agents.
|
|
2
2
|
build_context:
|
|
3
3
|
strategy: deterministic_synthesis
|
|
4
|
-
provider:
|
|
4
|
+
provider: auto
|
|
5
5
|
model: gpt-5.4-mini
|
|
6
6
|
reasoning: medium
|
|
7
7
|
timeout_seconds: 90
|
|
@@ -9,7 +9,7 @@ build_context:
|
|
|
9
9
|
max_brief_tokens: 1800
|
|
10
10
|
|
|
11
11
|
build_knowledge:
|
|
12
|
-
provider:
|
|
12
|
+
provider: auto
|
|
13
13
|
model: gpt-5.4-mini
|
|
14
14
|
reasoning: xhigh
|
|
15
15
|
timeout_seconds: 600
|
|
@@ -20,7 +20,7 @@ build_knowledge:
|
|
|
20
20
|
running_run_stale_seconds: 3600
|
|
21
21
|
|
|
22
22
|
teach:
|
|
23
|
-
provider:
|
|
23
|
+
provider: auto
|
|
24
24
|
model: gpt-5.4-mini
|
|
25
25
|
reasoning: medium
|
|
26
26
|
timeout_seconds: 600
|
|
@@ -29,7 +29,7 @@ teach:
|
|
|
29
29
|
max_write_commands: 12
|
|
30
30
|
|
|
31
31
|
wiki_summary:
|
|
32
|
-
provider:
|
|
32
|
+
provider: auto
|
|
33
33
|
model: gpt-5.4-mini
|
|
34
34
|
reasoning: medium
|
|
35
35
|
timeout_seconds: 120
|
|
@@ -43,3 +43,7 @@ wiki_summary:
|
|
|
43
43
|
providers:
|
|
44
44
|
codex:
|
|
45
45
|
command: codex
|
|
46
|
+
model: gpt-5.4-mini
|
|
47
|
+
claude:
|
|
48
|
+
command: claude
|
|
49
|
+
model: sonnet
|
|
@@ -21,6 +21,7 @@ class InnerAgentProviderConfig(_StrictModel):
|
|
|
21
21
|
"""Provider-specific runtime settings selected by startup."""
|
|
22
22
|
|
|
23
23
|
command: str = Field(min_length=1)
|
|
24
|
+
model: str = Field(min_length=1)
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class InternalAgentsConfig(_StrictModel):
|
|
@@ -50,6 +51,8 @@ class InternalAgentsConfig(_StrictModel):
|
|
|
50
51
|
|
|
51
52
|
for agent_name in ("build_context", "build_knowledge", "teach", "wiki_summary"):
|
|
52
53
|
agent = getattr(self, agent_name)
|
|
54
|
+
if agent.provider == "auto":
|
|
55
|
+
continue
|
|
53
56
|
if agent.provider not in self.providers:
|
|
54
57
|
raise ValueError(
|
|
55
58
|
f"internal_agents.{agent_name}.provider is not configured"
|