shellbrain 0.1.47__tar.gz → 0.1.49__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.47 → shellbrain-0.1.49}/PKG-INFO +6 -11
- {shellbrain-0.1.47 → shellbrain-0.1.49}/README.md +5 -10
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/host_apps/inner_agents.py +0 -1
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/build_context/execute.py +4 -34
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/deterministic_graph_recall.py +4 -39
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/recall/__init__.py +1 -5
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/recall/request.py +0 -19
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/parser/builder.py +8 -8
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/presenters/init.py +2 -2
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -42
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/retrieval.py +1 -9
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/runner.py +6 -5
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/inner_agents/prompt.py +11 -23
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/recall_records.py +0 -1
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/records.py +0 -1
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/claude/CLAUDE.md +3 -1
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/claude/skills/shellbrain/SKILL.md +8 -10
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/AGENTS.md +3 -1
- {shellbrain-0.1.47/onboarding_assets/cursor/skills → shellbrain-0.1.49/onboarding_assets/codex}/shellbrain/SKILL.md +12 -10
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain/references/session-workflow.md +8 -13
- {shellbrain-0.1.47/onboarding_assets/codex → shellbrain-0.1.49/onboarding_assets/cursor/skills}/shellbrain/SKILL.md +8 -15
- {shellbrain-0.1.47 → shellbrain-0.1.49}/pyproject.toml +1 -1
- {shellbrain-0.1.47 → shellbrain-0.1.49}/shellbrain.egg-info/PKG-INFO +6 -11
- {shellbrain-0.1.47 → shellbrain-0.1.49}/shellbrain.egg-info/SOURCES.txt +0 -1
- shellbrain-0.1.47/onboarding_assets/codex/shellbrain/references/request-shapes.md +0 -122
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/__main__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/admin_errors.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/associations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/backups.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/concepts.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/episodes.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/evidence.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/guidance.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/identity.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/ids.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/inner_agents.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/knowledge_builder.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/machine_config.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/memories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/repositories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/runtime_context.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/scenarios.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/session_state.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/settings.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/snapshots.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/structural_memory_relations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/utility.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/entities/wiki_summaries.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/errors.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/concepts/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/concepts/relation_rules.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/concepts/search_text.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/episodes/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/episodes/event_content.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/episodes/knowledge_building.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/memories/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/memories/add_plan.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/memories/link_rules.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/memories/update_plan.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/bm25.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/context_pack.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/expansion.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/fusion_rrf.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/lexical_query.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/ontology_semantics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/retrieval/scoring.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/policies/wiki_summary_freshness.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/concept_repositories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/episode_repositories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/guidance.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/knowledge_builder.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/memory_repositories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/problem_runs.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/repository_index.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/retrieval_repositories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/snapshots.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/unit_of_work.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/db/wiki_summaries.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/embeddings/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/embeddings/provider.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/embeddings/retrieval.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/host_apps/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/local_state/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/local_state/session_state_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/local_state/shadow_git.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/reporting/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/reporting/metrics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/system/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/system/clock.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/ports/system/idgen.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/create_backup.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/initialize_runtime.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/restore_backup.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/admin/verify_backup.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/build_guidance.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/add/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/add/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/add/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/add/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/containment_checks.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/embeddings.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/reference_checks.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/show/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/show/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/show/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/show/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/update/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/update/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/update/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/update/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/concepts/views.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/events/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/events/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/add/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/add/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/add/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/add/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/effect_plan.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/reference_checks.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/update/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/update/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/update/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/memories/update/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/metrics/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/metrics/build_snapshot.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/plan_execution.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/context_pack_pipeline.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/expansion.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/read/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/read/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/read/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/read/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/read_concepts.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/recall/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/recall/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/seed_retrieval.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/scenarios/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/scenarios/record/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/scenarios/record/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/scenarios/record/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/scenarios/record/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/code_delta_context/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/wiki/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/wiki/execute.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/wiki/request.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/wiki/result.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/wiki/summaries.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/error_responses.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/dependencies.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/human/admin.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/human/init.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/human/wiki.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/session_state.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/working_agent/snapshot.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/main.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/operation_command.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/parser/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/presenters/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/presenters/json.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/presenters/metrics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/memories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/teach.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/runtime.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/host_hooks/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/jobs/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/jobs/episode_sync.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/app_role_safety.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/backups/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/backups/restore.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/connection.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/instance_guard.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/migrations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/privileges.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/admin/storage_setup.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/engine.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/associations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/concepts.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/episodes.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/evidence.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/experiences.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/memories.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/metadata.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/registry.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/utility.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/views.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/models/wiki_summaries.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/repository_index_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/relational/wiki_summaries_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/session.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/db/runtime/uow.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/embeddings/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/embeddings/local_provider.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/embeddings/prewarm.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/embeddings/query_vector_search.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/claude.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/codex.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/cursor.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/inspection.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/paths.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/service.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/assets/types.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/identity/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/identity/resolver.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/inner_agents/claude_cli.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/inner_agents/codex_cli.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/init_lock.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/machine_config_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/operation_registration.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/paths.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/recall_mode_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/repo_registration_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/session_state_file_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/local_state/shadow_git_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/process/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/process/episode_sync/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/process/episode_sync/autostart.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/process/episode_sync/launcher.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/process/episode_sync/poller.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/process/episode_sync/status_store.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/metrics/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/metrics/browser.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/metrics/pager.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/metrics/render_html.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/wiki/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/wiki/browser.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/wiki/render_html.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/wiki/server.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/reporting/wiki/summary_worker.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/system/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/system/clock.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/system/id_generator.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/system/package_upgrade.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/operation_invocations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/operation_polling.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/read_records.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/recorder.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/sink.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/storage_protocols.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/sync_records.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/infrastructure/telemetry/write_records.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/settings/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/settings/defaults/create_policy.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/settings/defaults/read_policy.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/settings/defaults/runtime.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/settings/defaults/thresholds.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/settings/defaults/update_policy.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/settings/internal-agents/defaults.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/admin.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/admin_db.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/admin_dependencies.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/admin_diagnose.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/analytics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/backup.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/cli.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/cli_runtime.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/config.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/create_policy.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/db.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/dsn_resolution.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/embeddings.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/episode_poller.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/episode_sync_launcher.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/host_hooks.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/internal_agent_config.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/internal_agents.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/knowledge_builder.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/metrics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/migrations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/model_usage_backfill.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/operation_dependencies.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/read_policy.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/repo_context.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/repos.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/retrieval.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/runtime_admin.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/runtime_context.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/settings.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/snapshot_baseline.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/thresholds.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/update_policy.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/use_cases.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/app/startup/wiki.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/_legacy_usage_views.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/_usage_view_sql.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/env.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260226_0001_initial_schema.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260422_0015_problem_runs.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260515_0019_scenario_records.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/20260606_0037_wiki_summaries.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/migrations/versions/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/__init__.py +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/setup.cfg +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/shellbrain.egg-info/dependency_links.txt +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/shellbrain.egg-info/entry_points.txt +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/shellbrain.egg-info/requires.txt +0 -0
- {shellbrain-0.1.47 → shellbrain-0.1.49}/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.49
|
|
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
|
|
@@ -69,10 +69,12 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
|
|
|
69
69
|
|
|
70
70
|
### Recall
|
|
71
71
|
|
|
72
|
-
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief
|
|
72
|
+
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief** for the task at hand.
|
|
73
|
+
|
|
74
|
+
Recall receives only the quoted query, so include the relevant task, failure, subsystem, or decision naturally in the question.
|
|
73
75
|
|
|
74
76
|
```bash
|
|
75
|
-
shellbrain recall
|
|
77
|
+
shellbrain recall "What is ShellBrain, and how does it help a working coding agent?"
|
|
76
78
|
```
|
|
77
79
|
|
|
78
80
|
Response shape:
|
|
@@ -90,14 +92,7 @@ Response shape:
|
|
|
90
92
|
"anchors": ["`README.md`"],
|
|
91
93
|
"conflicts": ["..."],
|
|
92
94
|
"gaps": ["..."],
|
|
93
|
-
"next_checks": ["..."]
|
|
94
|
-
"sources": [
|
|
95
|
-
{
|
|
96
|
-
"kind": "memory",
|
|
97
|
-
"id": "...",
|
|
98
|
-
"section": "direct"
|
|
99
|
-
}
|
|
100
|
-
]
|
|
95
|
+
"next_checks": ["..."]
|
|
101
96
|
},
|
|
102
97
|
"fallback_reason": null
|
|
103
98
|
},
|
|
@@ -55,10 +55,12 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
|
|
|
55
55
|
|
|
56
56
|
### Recall
|
|
57
57
|
|
|
58
|
-
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief
|
|
58
|
+
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief** for the task at hand.
|
|
59
|
+
|
|
60
|
+
Recall receives only the quoted query, so include the relevant task, failure, subsystem, or decision naturally in the question.
|
|
59
61
|
|
|
60
62
|
```bash
|
|
61
|
-
shellbrain recall
|
|
63
|
+
shellbrain recall "What is ShellBrain, and how does it help a working coding agent?"
|
|
62
64
|
```
|
|
63
65
|
|
|
64
66
|
Response shape:
|
|
@@ -76,14 +78,7 @@ Response shape:
|
|
|
76
78
|
"anchors": ["`README.md`"],
|
|
77
79
|
"conflicts": ["..."],
|
|
78
80
|
"gaps": ["..."],
|
|
79
|
-
"next_checks": ["..."]
|
|
80
|
-
"sources": [
|
|
81
|
-
{
|
|
82
|
-
"kind": "memory",
|
|
83
|
-
"id": "...",
|
|
84
|
-
"section": "direct"
|
|
85
|
-
}
|
|
86
|
-
]
|
|
81
|
+
"next_checks": ["..."]
|
|
87
82
|
},
|
|
88
83
|
"fallback_reason": null
|
|
89
84
|
},
|
|
@@ -34,7 +34,6 @@ class InnerAgentRunRequest(_StrictModel):
|
|
|
34
34
|
max_private_reads: int = Field(default=0, ge=0, le=10)
|
|
35
35
|
max_brief_tokens: int | None = Field(default=None, ge=1, le=100_000)
|
|
36
36
|
query: str = Field(min_length=1)
|
|
37
|
-
current_problem: dict[str, str]
|
|
38
37
|
repo_root: str | None = None
|
|
39
38
|
synthesis_only: bool = False
|
|
40
39
|
deterministic_pack: dict[str, Any] | None = None
|
{shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/build_context/execute.py
RENAMED
|
@@ -160,7 +160,6 @@ def _inner_agent_request(
|
|
|
160
160
|
max_private_reads=settings.max_private_reads,
|
|
161
161
|
max_brief_tokens=settings.max_brief_tokens,
|
|
162
162
|
query=request.query,
|
|
163
|
-
current_problem=request.current_problem.model_dump(mode="python"),
|
|
164
163
|
repo_root=repo_root,
|
|
165
164
|
synthesis_only=synthesis_only,
|
|
166
165
|
deterministic_pack=deterministic_pack,
|
|
@@ -175,10 +174,7 @@ def _provider_result(
|
|
|
175
174
|
|
|
176
175
|
read_trace = _read_trace(inner_agent_result)
|
|
177
176
|
source_items = _source_items_from_read_trace(read_trace)
|
|
178
|
-
brief = _normalize_provider_brief(
|
|
179
|
-
inner_agent_result.brief or {},
|
|
180
|
-
deterministic_sources=_sources_from_source_items(source_items),
|
|
181
|
-
)
|
|
177
|
+
brief = _normalize_provider_brief(inner_agent_result.brief or {})
|
|
182
178
|
fallback_reason = (
|
|
183
179
|
"no_candidates"
|
|
184
180
|
if not source_items and _read_trace_no_context_reason(read_trace)
|
|
@@ -272,10 +268,7 @@ def _deterministic_graph_result(
|
|
|
272
268
|
)
|
|
273
269
|
if synthesis_result.status == "ok" and synthesis_result.brief is not None:
|
|
274
270
|
return RecallMemoryResult(
|
|
275
|
-
brief=_normalize_provider_brief(
|
|
276
|
-
synthesis_result.brief,
|
|
277
|
-
deterministic_sources=_sources_from_source_items(source_items),
|
|
278
|
-
),
|
|
271
|
+
brief=_normalize_provider_brief(synthesis_result.brief),
|
|
279
272
|
fallback_reason=None,
|
|
280
273
|
telemetry={
|
|
281
274
|
"candidate_pack": graph_pack,
|
|
@@ -433,16 +426,13 @@ def _no_context_brief() -> dict[str, Any]:
|
|
|
433
426
|
"conflicts": [],
|
|
434
427
|
"gaps": ["Shellbrain has no relevant memories or concepts for this query."],
|
|
435
428
|
"next_checks": [],
|
|
436
|
-
"sources": [],
|
|
437
429
|
}
|
|
438
430
|
|
|
439
431
|
|
|
440
|
-
def _normalize_provider_brief(
|
|
441
|
-
brief: dict[str, Any], *, deterministic_sources: list[dict[str, Any]]
|
|
442
|
-
) -> dict[str, Any]:
|
|
432
|
+
def _normalize_provider_brief(brief: dict[str, Any]) -> dict[str, Any]:
|
|
443
433
|
"""Ensure provider output keeps the stable worker-facing brief shape."""
|
|
444
434
|
|
|
445
|
-
|
|
435
|
+
return {
|
|
446
436
|
"summary": str(brief.get("summary") or "").strip()
|
|
447
437
|
or "Shellbrain synthesized relevant recall context.",
|
|
448
438
|
"constraints": _string_list(brief.get("constraints")),
|
|
@@ -453,9 +443,7 @@ def _normalize_provider_brief(
|
|
|
453
443
|
"conflicts": _string_list(brief.get("conflicts")),
|
|
454
444
|
"gaps": _string_list(brief.get("gaps")),
|
|
455
445
|
"next_checks": _string_list(brief.get("next_checks")),
|
|
456
|
-
"sources": deterministic_sources,
|
|
457
446
|
}
|
|
458
|
-
return normalized
|
|
459
447
|
|
|
460
448
|
|
|
461
449
|
def _string_list(value: Any) -> list[str]:
|
|
@@ -590,7 +578,6 @@ def _source_items_from_read_trace(read_trace: dict[str, Any]) -> list[dict[str,
|
|
|
590
578
|
"source_kind": source_kind,
|
|
591
579
|
"source_id": source_id,
|
|
592
580
|
"input_section": "inner_agent.read_trace",
|
|
593
|
-
"output_section": "sources",
|
|
594
581
|
}
|
|
595
582
|
)
|
|
596
583
|
ordinal += 1
|
|
@@ -605,29 +592,12 @@ def _source_items_from_read_trace(read_trace: dict[str, Any]) -> list[dict[str,
|
|
|
605
592
|
"source_kind": "concept",
|
|
606
593
|
"source_id": concept_ref,
|
|
607
594
|
"input_section": "inner_agent.read_trace",
|
|
608
|
-
"output_section": "sources",
|
|
609
595
|
}
|
|
610
596
|
)
|
|
611
597
|
ordinal += 1
|
|
612
598
|
return items
|
|
613
599
|
|
|
614
600
|
|
|
615
|
-
def _sources_from_source_items(
|
|
616
|
-
source_items: list[dict[str, Any]]
|
|
617
|
-
) -> list[dict[str, Any]]:
|
|
618
|
-
"""Render brief sources from telemetry provenance rows."""
|
|
619
|
-
|
|
620
|
-
return [
|
|
621
|
-
{
|
|
622
|
-
"kind": item["source_kind"],
|
|
623
|
-
"id": item["source_id"],
|
|
624
|
-
"section": item["input_section"],
|
|
625
|
-
}
|
|
626
|
-
for item in source_items
|
|
627
|
-
if item.get("output_section") is not None
|
|
628
|
-
]
|
|
629
|
-
|
|
630
|
-
|
|
631
601
|
def _read_trace_no_context_reason(read_trace: dict[str, Any]) -> str | None:
|
|
632
602
|
"""Return an explicit no-context reason from provider trace, when present."""
|
|
633
603
|
|
{shellbrain-0.1.47 → shellbrain-0.1.49}/app/core/use_cases/retrieval/deterministic_graph_recall.py
RENAMED
|
@@ -55,7 +55,6 @@ _CONCEPT_HARD_CAP = 8
|
|
|
55
55
|
_RELATION_NEIGHBOR_CAP = 4
|
|
56
56
|
_HIGH_SIGNAL_RELATIONS = {"depends_on", "constrains", "precedes", "contains"}
|
|
57
57
|
_HIGH_SIGNAL_CLAIMS = {"invariant", "failure_mode", "usage_note", "behavior"}
|
|
58
|
-
_PLACEHOLDER_VALUES = {"none", "none yet", "n/a", "na", "unknown", "not sure"}
|
|
59
58
|
|
|
60
59
|
|
|
61
60
|
@dataclass(frozen=True)
|
|
@@ -142,7 +141,6 @@ def build_deterministic_graph_pack(
|
|
|
142
141
|
"strategy": "deterministic_graph",
|
|
143
142
|
"request": {
|
|
144
143
|
"query": request.query,
|
|
145
|
-
"current_problem": request.current_problem.model_dump(mode="python"),
|
|
146
144
|
},
|
|
147
145
|
"query_lanes": [
|
|
148
146
|
{"lane": lane.name, "query": lane.query, "terms": list(lane.terms)}
|
|
@@ -222,7 +220,6 @@ def deterministic_brief_from_graph_pack(pack: dict[str, Any]) -> dict[str, Any]:
|
|
|
222
220
|
"conflicts": [],
|
|
223
221
|
"gaps": ["Shellbrain has no relevant memories or concepts for this query."],
|
|
224
222
|
"next_checks": [],
|
|
225
|
-
"sources": [],
|
|
226
223
|
}
|
|
227
224
|
concept_items = concepts + neighbors
|
|
228
225
|
constraints = _brief_memory_texts(
|
|
@@ -267,7 +264,6 @@ def deterministic_brief_from_graph_pack(pack: dict[str, Any]) -> dict[str, Any]:
|
|
|
267
264
|
),
|
|
268
265
|
"gaps": [],
|
|
269
266
|
"next_checks": _next_checks(pack),
|
|
270
|
-
"sources": _sources_from_graph_pack(pack),
|
|
271
267
|
}
|
|
272
268
|
|
|
273
269
|
|
|
@@ -290,7 +286,6 @@ def source_items_from_graph_pack(pack: dict[str, Any]) -> list[dict[str, Any]]:
|
|
|
290
286
|
"source_kind": "memory",
|
|
291
287
|
"source_id": source_id,
|
|
292
288
|
"input_section": _source_section_for_memory(memory),
|
|
293
|
-
"output_section": "sources",
|
|
294
289
|
}
|
|
295
290
|
)
|
|
296
291
|
ordinal += 1
|
|
@@ -311,7 +306,6 @@ def source_items_from_graph_pack(pack: dict[str, Any]) -> list[dict[str, Any]]:
|
|
|
311
306
|
"source_kind": "concept",
|
|
312
307
|
"source_id": str(source_id),
|
|
313
308
|
"input_section": "concept_orientation",
|
|
314
|
-
"output_section": "sources",
|
|
315
309
|
}
|
|
316
310
|
)
|
|
317
311
|
ordinal += 1
|
|
@@ -320,10 +314,9 @@ def source_items_from_graph_pack(pack: dict[str, Any]) -> list[dict[str, Any]]:
|
|
|
320
314
|
|
|
321
315
|
def _build_query_lanes(request: MemoryRecallRequest) -> list[_QueryLane]:
|
|
322
316
|
original = _lane("original", request.query)
|
|
323
|
-
current_problem = _current_problem_lane(request)
|
|
324
317
|
identifiers = _identifier_lane(request)
|
|
325
318
|
traps = _prior_cases_lane(request)
|
|
326
|
-
lanes = [lane for lane in (original,
|
|
319
|
+
lanes = [lane for lane in (original, identifiers, traps) if lane]
|
|
327
320
|
deduped: list[_QueryLane] = []
|
|
328
321
|
seen_queries: set[str] = set()
|
|
329
322
|
for lane in lanes:
|
|
@@ -343,24 +336,13 @@ def _lane(name: str, query: str) -> _QueryLane | None:
|
|
|
343
336
|
return _QueryLane(name=name, query=text, terms=terms)
|
|
344
337
|
|
|
345
338
|
|
|
346
|
-
def _current_problem_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
347
|
-
problem = request.current_problem.model_dump(mode="python")
|
|
348
|
-
parts = [
|
|
349
|
-
value
|
|
350
|
-
for key in ("surface", "obstacle", "hypothesis", "goal")
|
|
351
|
-
if _useful_problem_part(value := str(problem.get(key) or ""))
|
|
352
|
-
]
|
|
353
|
-
return _lane("current_problem", " ".join(parts))
|
|
354
|
-
|
|
355
|
-
|
|
356
339
|
def _identifier_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
357
|
-
|
|
358
|
-
identifiers = _extract_identifiers(f"{request.query} {problem_text}")
|
|
340
|
+
identifiers = _extract_identifiers(request.query)
|
|
359
341
|
return _lane("identifiers", " ".join(identifiers))
|
|
360
342
|
|
|
361
343
|
|
|
362
344
|
def _prior_cases_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
363
|
-
terms = list(dict.fromkeys(_tokenize(
|
|
345
|
+
terms = list(dict.fromkeys(_tokenize(request.query)))
|
|
364
346
|
strongest = " ".join(terms[:8])
|
|
365
347
|
if not strongest:
|
|
366
348
|
return None
|
|
@@ -371,7 +353,7 @@ def _prior_cases_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
|
371
353
|
|
|
372
354
|
|
|
373
355
|
def _broad_domain_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
374
|
-
terms = _tokenize(
|
|
356
|
+
terms = _tokenize(request.query)
|
|
375
357
|
if not terms:
|
|
376
358
|
return None
|
|
377
359
|
return _lane("broad_domain", " ".join(dict.fromkeys(terms[:8])))
|
|
@@ -1222,18 +1204,6 @@ def _next_checks(pack: dict[str, Any]) -> list[str]:
|
|
|
1222
1204
|
return list(dict.fromkeys(checks))[:3]
|
|
1223
1205
|
|
|
1224
1206
|
|
|
1225
|
-
def _sources_from_graph_pack(pack: dict[str, Any]) -> list[dict[str, str]]:
|
|
1226
|
-
return [
|
|
1227
|
-
{
|
|
1228
|
-
"kind": item["source_kind"],
|
|
1229
|
-
"id": item["source_id"],
|
|
1230
|
-
"section": item["input_section"],
|
|
1231
|
-
}
|
|
1232
|
-
for item in source_items_from_graph_pack(pack)
|
|
1233
|
-
if item.get("output_section") is not None
|
|
1234
|
-
]
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
1207
|
def _conflict_summary(item: object) -> str:
|
|
1238
1208
|
if isinstance(item, dict):
|
|
1239
1209
|
return str(item.get("summary") or item.get("reason") or item)
|
|
@@ -1392,11 +1362,6 @@ def _tokenize(text: str) -> tuple[str, ...]:
|
|
|
1392
1362
|
return tuple(re.findall(r"[a-z0-9_./:-]+", text.lower()))
|
|
1393
1363
|
|
|
1394
1364
|
|
|
1395
|
-
def _useful_problem_part(value: str) -> bool:
|
|
1396
|
-
text = value.strip().lower()
|
|
1397
|
-
return bool(text and text not in _PLACEHOLDER_VALUES)
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
1365
|
def _dedupe_reasons(reasons: Iterable[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
1401
1366
|
seen: set[str] = set()
|
|
1402
1367
|
deduped = []
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
"""Memory recall use case."""
|
|
2
2
|
|
|
3
|
-
from app.core.use_cases.retrieval.recall.request import
|
|
4
|
-
MemoryRecallRequest,
|
|
5
|
-
RecallCurrentProblem,
|
|
6
|
-
)
|
|
3
|
+
from app.core.use_cases.retrieval.recall.request import MemoryRecallRequest
|
|
7
4
|
from app.core.use_cases.retrieval.recall.result import RecallMemoryResult
|
|
8
5
|
|
|
9
6
|
__all__ = [
|
|
10
7
|
"MemoryRecallRequest",
|
|
11
|
-
"RecallCurrentProblem",
|
|
12
8
|
"RecallMemoryResult",
|
|
13
9
|
"execute_recall_memory",
|
|
14
10
|
]
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Literal
|
|
6
|
-
|
|
7
5
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
8
6
|
|
|
9
7
|
from app.core.entities.ids import RepoId
|
|
@@ -24,28 +22,11 @@ def _normalize_repo_id(value: RepoId) -> RepoId:
|
|
|
24
22
|
return RepoId(_normalize_required_string(str(value), field_name="repo_id"))
|
|
25
23
|
|
|
26
24
|
|
|
27
|
-
class RecallCurrentProblem(_StrictModel):
|
|
28
|
-
"""Required worker problem context for recall synthesis."""
|
|
29
|
-
|
|
30
|
-
goal: str = Field(min_length=1)
|
|
31
|
-
surface: str = Field(min_length=1)
|
|
32
|
-
obstacle: str = Field(min_length=1)
|
|
33
|
-
hypothesis: str = Field(min_length=1)
|
|
34
|
-
|
|
35
|
-
@field_validator("goal", "surface", "obstacle", "hypothesis")
|
|
36
|
-
@classmethod
|
|
37
|
-
def _validate_non_blank(cls, value: str) -> str:
|
|
38
|
-
return _normalize_required_string(value, field_name="current_problem fields")
|
|
39
|
-
|
|
40
|
-
|
|
41
25
|
class MemoryRecallRequest(_StrictModel):
|
|
42
26
|
"""Canonical recall request payload."""
|
|
43
27
|
|
|
44
|
-
op: Literal["recall"] = "recall"
|
|
45
28
|
repo_id: RepoId
|
|
46
29
|
query: str = Field(min_length=1)
|
|
47
|
-
limit: int | None = Field(default=None, ge=1, le=100)
|
|
48
|
-
current_problem: RecallCurrentProblem
|
|
49
30
|
|
|
50
31
|
@field_validator("repo_id")
|
|
51
32
|
@classmethod
|
|
@@ -45,7 +45,8 @@ _TOP_LEVEL_HELP = dedent(
|
|
|
45
45
|
- Use `shellbrain recall` for normal task context.
|
|
46
46
|
- Use `shellbrain teach` only when the user explicitly asks to store or teach Shellbrain something.
|
|
47
47
|
- If you changed any files since your last user-facing response, run `shellbrain snapshot` exactly once after validation and immediately before your next user-facing response. Do this on every response cycle where files changed; skip only when no files changed.
|
|
48
|
-
- Send
|
|
48
|
+
- Send one concrete natural-language query.
|
|
49
|
+
- Recall receives only this query, so include relevant task context naturally.
|
|
49
50
|
- Avoid generic prompts like "what should I know about this repo?"
|
|
50
51
|
|
|
51
52
|
Internal recall agents:
|
|
@@ -74,7 +75,7 @@ _TOP_LEVEL_HELP = dedent(
|
|
|
74
75
|
shellbrain admin migrate
|
|
75
76
|
|
|
76
77
|
Working agents:
|
|
77
|
-
shellbrain recall
|
|
78
|
+
shellbrain recall "What context matters for this migration lock timeout?"
|
|
78
79
|
shellbrain teach --json '{"text":"In this repo, startup wires dependencies but should not own workflow behavior.","current_problem":{"goal":"record architecture preference","surface":"startup and clean architecture","obstacle":"agents may put behavior in startup","hypothesis":"teach should become a durable preference or concept claim"}}'
|
|
79
80
|
shellbrain snapshot
|
|
80
81
|
|
|
@@ -158,14 +159,13 @@ _RECALL_HELP = dedent(
|
|
|
158
159
|
This is the normal working-agent interface. Working agents should call
|
|
159
160
|
`recall`, not internal commands like `read`, `events`, or `concept show`.
|
|
160
161
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
Accepts optional `limit`.
|
|
162
|
+
Pass one self-contained natural-language query naming the failure mode,
|
|
163
|
+
subsystem, decision, file area, or constraint that matters. Recall receives
|
|
164
|
+
only this query, so include relevant task context naturally.
|
|
165
165
|
It does not mutate memories, concepts, utility observations, or problem runs.
|
|
166
166
|
|
|
167
167
|
Example:
|
|
168
|
-
shellbrain recall
|
|
168
|
+
shellbrain recall "What context matters for this migration lock timeout?"
|
|
169
169
|
"""
|
|
170
170
|
)
|
|
171
171
|
|
|
@@ -565,7 +565,7 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
565
565
|
formatter_class=_HelpFormatter,
|
|
566
566
|
)
|
|
567
567
|
_add_repo_context_arguments(recall_parser, suppress_default=True)
|
|
568
|
-
|
|
568
|
+
recall_parser.add_argument("query", help="Natural-language recall query.")
|
|
569
569
|
|
|
570
570
|
teach_parser = subparsers.add_parser(
|
|
571
571
|
"teach",
|
|
@@ -34,7 +34,7 @@ def render_success_lines(
|
|
|
34
34
|
"Repo registration: deferred until first Shellbrain use inside a repo."
|
|
35
35
|
)
|
|
36
36
|
lines.append(
|
|
37
|
-
'Next: from inside a repo, run shellbrain recall
|
|
37
|
+
'Next: from inside a repo, run shellbrain recall "What prior Shellbrain context matters for this task?"'
|
|
38
38
|
)
|
|
39
39
|
else:
|
|
40
40
|
lines.insert(1, f"Repo: {registration.repo_id}")
|
|
@@ -44,7 +44,7 @@ def render_success_lines(
|
|
|
44
44
|
"Repo identity is weak-local and will change if this directory moves. Use --repo-id for a durable override.",
|
|
45
45
|
)
|
|
46
46
|
lines.append(
|
|
47
|
-
'Next: shellbrain recall
|
|
47
|
+
'Next: shellbrain recall "What prior Shellbrain context matters for this task?"'
|
|
48
48
|
)
|
|
49
49
|
lines.extend(notes)
|
|
50
50
|
return lines
|
{shellbrain-0.1.47 → shellbrain-0.1.49}/app/entrypoints/cli/request_parsing/payload_validation.py
RENAMED
|
@@ -84,37 +84,6 @@ class AgentReadRequest(StrictBaseModel):
|
|
|
84
84
|
return value
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
class AgentRecallCurrentProblem(StrictBaseModel):
|
|
88
|
-
"""Agent-facing current-problem context for recall synthesis."""
|
|
89
|
-
|
|
90
|
-
goal: str = Field(min_length=1)
|
|
91
|
-
surface: str = Field(min_length=1)
|
|
92
|
-
obstacle: str = Field(min_length=1)
|
|
93
|
-
hypothesis: str = Field(min_length=1)
|
|
94
|
-
|
|
95
|
-
@field_validator("goal", "surface", "obstacle", "hypothesis")
|
|
96
|
-
@classmethod
|
|
97
|
-
def _validate_non_blank(cls, value: str) -> str:
|
|
98
|
-
"""Require every problem context field to be explicit."""
|
|
99
|
-
|
|
100
|
-
return _normalize_required_string(
|
|
101
|
-
value, field_name="current_problem fields"
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
class AgentRecallRequest(StrictBaseModel):
|
|
106
|
-
"""Agent-facing recall payload with worker problem context."""
|
|
107
|
-
|
|
108
|
-
query: str = Field(min_length=1)
|
|
109
|
-
limit: int | None = Field(default=None, ge=1, le=100)
|
|
110
|
-
current_problem: AgentRecallCurrentProblem
|
|
111
|
-
|
|
112
|
-
@field_validator("query")
|
|
113
|
-
@classmethod
|
|
114
|
-
def _validate_query(cls, value: str) -> str:
|
|
115
|
-
return _normalize_required_string(value, field_name="query")
|
|
116
|
-
|
|
117
|
-
|
|
118
87
|
class AgentTeachRequest(StrictBaseModel):
|
|
119
88
|
"""Worker-facing payload for explicit user teaching."""
|
|
120
89
|
|
|
@@ -282,17 +251,6 @@ def validate_read_schema(
|
|
|
282
251
|
return None, _format_validation_errors(exc)
|
|
283
252
|
|
|
284
253
|
|
|
285
|
-
def validate_recall_schema(
|
|
286
|
-
payload: dict[str, Any],
|
|
287
|
-
) -> tuple[AgentRecallRequest | None, list[ErrorDetail]]:
|
|
288
|
-
"""Validate and parse agent recall payloads into the minimal recall contract."""
|
|
289
|
-
|
|
290
|
-
try:
|
|
291
|
-
return AgentRecallRequest.model_validate(payload), []
|
|
292
|
-
except ValidationError as exc:
|
|
293
|
-
return None, _format_validation_errors(exc)
|
|
294
|
-
|
|
295
|
-
|
|
296
254
|
def validate_events_schema(
|
|
297
255
|
payload: dict[str, Any],
|
|
298
256
|
) -> tuple[AgentEventsRequest | None, list[ErrorDetail]]:
|
|
@@ -9,7 +9,6 @@ from app.entrypoints.cli.request_parsing.payload_validation import (
|
|
|
9
9
|
validate_internal_read_contract,
|
|
10
10
|
validate_internal_recall_contract,
|
|
11
11
|
validate_read_schema,
|
|
12
|
-
validate_recall_schema,
|
|
13
12
|
)
|
|
14
13
|
from app.entrypoints.cli.request_parsing.prepared import (
|
|
15
14
|
PreparedOperationRequest,
|
|
@@ -67,14 +66,7 @@ def prepare_recall_request(
|
|
|
67
66
|
) -> PreparedOperationRequest[MemoryRecallRequest]:
|
|
68
67
|
"""Validate and hydrate one raw recall payload."""
|
|
69
68
|
|
|
70
|
-
|
|
71
|
-
if errors:
|
|
72
|
-
return PreparedOperationRequest(
|
|
73
|
-
request=None, errors=errors, error_stage="schema_validation"
|
|
74
|
-
)
|
|
75
|
-
assert agent_request is not None
|
|
76
|
-
hydrated = agent_request.model_dump(mode="python", exclude_none=True)
|
|
77
|
-
hydrated.setdefault("op", "recall")
|
|
69
|
+
hydrated = dict(payload)
|
|
78
70
|
hydrated.setdefault("repo_id", inferred_repo_id)
|
|
79
71
|
request, contract_errors = validate_internal_recall_contract(hydrated)
|
|
80
72
|
return PreparedOperationRequest(
|
|
@@ -122,13 +122,14 @@ def main(
|
|
|
122
122
|
repo_root_arg=getattr(args, "repo_root", None),
|
|
123
123
|
repo_id_arg=getattr(args, "repo_id", None),
|
|
124
124
|
)
|
|
125
|
-
|
|
126
|
-
{}
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
if command == "snapshot":
|
|
126
|
+
payload = {}
|
|
127
|
+
elif command == "recall":
|
|
128
|
+
payload = {"query": args.query}
|
|
129
|
+
else:
|
|
130
|
+
payload = _load_payload(
|
|
129
131
|
getattr(args, "json_text", None), getattr(args, "json_file", None)
|
|
130
132
|
)
|
|
131
|
-
)
|
|
132
133
|
except ValueError as exc:
|
|
133
134
|
parser.error(str(exc))
|
|
134
135
|
return 2
|
|
@@ -83,18 +83,17 @@ admin/init/upgrade/metrics, filesystem writes, settings writes, and direct DB
|
|
|
83
83
|
writes.
|
|
84
84
|
|
|
85
85
|
# PROTOCOL
|
|
86
|
-
1. Read the payload: `query`, `
|
|
86
|
+
1. Read the payload: `query`, `repo_root`, and budgets. Treat `query` as the
|
|
87
|
+
complete worker context.
|
|
87
88
|
Use the repo-root-prefixed commands from the payload whenever `repo_root` is
|
|
88
89
|
provided. Do not omit `--repo-root` in nested Codex.
|
|
89
90
|
2. Run events first:
|
|
90
91
|
```bash
|
|
91
92
|
shellbrain --no-sync --repo-root "<repo_root>" events --json '{"limit":10}'
|
|
92
93
|
```
|
|
93
|
-
3. Build a compact search text from the query
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
files/symbols, and the actual obstacle over generic goal text. Use recent
|
|
97
|
-
events to sharpen the query when they reveal better terms.
|
|
94
|
+
3. Build a compact search text from the query. Prefer concrete error terms,
|
|
95
|
+
domain nouns, files/symbols, and the actual obstacle over generic wording.
|
|
96
|
+
Use recent events to sharpen the query when they reveal better terms.
|
|
98
97
|
4. Run at least one targeted read:
|
|
99
98
|
```bash
|
|
100
99
|
shellbrain --no-sync --repo-root "<repo_root>" read --json '{"query":"<combined search text>","kinds":["problem","solution","failed_tactic","fact","preference","change"]}'
|
|
@@ -114,7 +113,7 @@ writes.
|
|
|
114
113
|
```
|
|
115
114
|
If multiple concepts match, inspect at most the few most relevant within
|
|
116
115
|
budget. Prefer concepts whose claims, groundings, or memory links connect
|
|
117
|
-
directly to
|
|
116
|
+
directly to the query. Mention
|
|
118
117
|
competing or ambiguous concepts only when the ambiguity affects the worker.
|
|
119
118
|
6. Run extra reads only when they are likely to improve the brief: events reveal
|
|
120
119
|
a sharper query, concept details suggest a related term, the first read was
|
|
@@ -155,13 +154,13 @@ context, with empty or minimal arrays and a concrete
|
|
|
155
154
|
Lead with the answer. Keep only details that change what the worker should do.
|
|
156
155
|
Use plain English. One idea per sentence. Leave sections empty unless useful.
|
|
157
156
|
Summary: max two sentences. Lists: max three items. Items: max one sentence.
|
|
158
|
-
Full provenance belongs in telemetry; keep visible
|
|
157
|
+
Full provenance belongs in telemetry; keep visible anchors minimal.
|
|
159
158
|
|
|
160
159
|
# OUTPUT
|
|
161
160
|
Return only valid JSON matching `output_contract`.
|
|
162
161
|
The brief must be compact and action-oriented: summary, constraints,
|
|
163
162
|
known_traps, prior_cases, concept_orientation, anchors, conflicts, gaps,
|
|
164
|
-
|
|
163
|
+
and next_checks. Use conflicts for stale, disputed, superseded,
|
|
165
164
|
low-confidence, or mutually inconsistent context. Use gaps for missing context
|
|
166
165
|
or unresolved questions. Use next_checks for one to three concrete checks the
|
|
167
166
|
worker should perform because retrieved context makes them high leverage.
|
|
@@ -180,7 +179,7 @@ You are Shellbrain build_context_synthesizer.
|
|
|
180
179
|
# JOB
|
|
181
180
|
Synthesize a compact operational recall brief from the deterministic recall
|
|
182
181
|
graph pack. Do not request more data. Do not run commands. Do not inspect files.
|
|
183
|
-
Do not invent facts. Use only the pack.
|
|
182
|
+
Do not invent facts. Use only the pack. The query is the complete worker request.
|
|
184
183
|
|
|
185
184
|
Your job is not to summarize everything. Your job is to tell the working coding
|
|
186
185
|
agent what prior knowledge changes what it should do next.
|
|
@@ -318,9 +317,8 @@ Summary: max two sentences. Lists: max three items. Items: max one sentence.
|
|
|
318
317
|
Full provenance belongs in telemetry; keep visible anchors minimal.
|
|
319
318
|
|
|
320
319
|
# OUTPUT
|
|
321
|
-
Return only valid JSON matching `output_contract`. Return a `brief` object only
|
|
322
|
-
|
|
323
|
-
deterministic source provenance after synthesis.
|
|
320
|
+
Return only valid JSON matching `output_contract`. Return a `brief` object only.
|
|
321
|
+
Keep each list compact.
|
|
324
322
|
"""
|
|
325
323
|
|
|
326
324
|
|
|
@@ -867,7 +865,6 @@ def render_build_context_prompt(request: InnerAgentRunRequest) -> str:
|
|
|
867
865
|
shellbrain = _shellbrain_command(request.repo_root, no_sync=True)
|
|
868
866
|
payload = {
|
|
869
867
|
"query": request.query,
|
|
870
|
-
"current_problem": request.current_problem,
|
|
871
868
|
"repo_root": request.repo_root,
|
|
872
869
|
"budgets": {
|
|
873
870
|
"max_private_reads": request.max_private_reads,
|
|
@@ -905,14 +902,6 @@ def render_build_context_prompt(request: InnerAgentRunRequest) -> str:
|
|
|
905
902
|
"conflicts": ["string"],
|
|
906
903
|
"gaps": ["string"],
|
|
907
904
|
"next_checks": ["string"],
|
|
908
|
-
"sources": [
|
|
909
|
-
{
|
|
910
|
-
"kind": "memory|concept|episode_event",
|
|
911
|
-
"id": "source id or concept ref",
|
|
912
|
-
"facet": "claim|relation|grounding|memory_link|event|memory when applicable",
|
|
913
|
-
"used_in": "summary|constraints|known_traps|prior_cases|concept_orientation|anchors|conflicts|gaps|next_checks",
|
|
914
|
-
}
|
|
915
|
-
],
|
|
916
905
|
},
|
|
917
906
|
"read_trace": {
|
|
918
907
|
"commands": [
|
|
@@ -938,7 +927,6 @@ def render_build_context_synthesis_prompt(request: InnerAgentRunRequest) -> str:
|
|
|
938
927
|
|
|
939
928
|
payload = {
|
|
940
929
|
"query": request.query,
|
|
941
|
-
"current_problem": request.current_problem,
|
|
942
930
|
"budgets": {
|
|
943
931
|
"max_brief_tokens": request.max_brief_tokens,
|
|
944
932
|
},
|
|
@@ -22,9 +22,11 @@ If prior context may help:
|
|
|
22
22
|
Then run:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
shellbrain recall
|
|
25
|
+
shellbrain recall "<targeted natural-language question>"
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
+
Recall receives only this query, so include relevant task context naturally in the question.
|
|
29
|
+
|
|
28
30
|
If recall would not help:
|
|
29
31
|
|
|
30
32
|
`SB: skip | same signature | <one-line reason>`
|