shellbrain 0.1.46__tar.gz → 0.1.48__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.46 → shellbrain-0.1.48}/PKG-INFO +4 -2
- {shellbrain-0.1.46 → shellbrain-0.1.48}/README.md +3 -1
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/host_apps/inner_agents.py +0 -1
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/build_context/execute.py +0 -1
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/deterministic_graph_recall.py +4 -23
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/recall/__init__.py +1 -5
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/recall/request.py +0 -19
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/parser/builder.py +8 -8
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/presenters/init.py +2 -2
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -42
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/retrieval.py +1 -9
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/runner.py +6 -5
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/inner_agents/prompt.py +7 -10
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/settings/internal-agents/defaults.yaml +1 -1
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/claude/CLAUDE.md +3 -1
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/claude/skills/shellbrain/SKILL.md +8 -10
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/AGENTS.md +3 -1
- {shellbrain-0.1.46/onboarding_assets/cursor/skills → shellbrain-0.1.48/onboarding_assets/codex}/shellbrain/SKILL.md +12 -10
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain/references/session-workflow.md +8 -13
- {shellbrain-0.1.46/onboarding_assets/codex → shellbrain-0.1.48/onboarding_assets/cursor/skills}/shellbrain/SKILL.md +8 -15
- {shellbrain-0.1.46 → shellbrain-0.1.48}/pyproject.toml +1 -1
- {shellbrain-0.1.46 → shellbrain-0.1.48}/shellbrain.egg-info/PKG-INFO +4 -2
- {shellbrain-0.1.46 → shellbrain-0.1.48}/shellbrain.egg-info/SOURCES.txt +0 -1
- shellbrain-0.1.46/onboarding_assets/codex/shellbrain/references/request-shapes.md +0 -122
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/__main__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/admin_errors.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/associations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/backups.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/concepts.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/episodes.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/evidence.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/guidance.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/identity.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/ids.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/inner_agents.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/knowledge_builder.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/machine_config.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/memories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/repositories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/runtime_context.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/scenarios.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/session_state.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/settings.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/snapshots.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/structural_memory_relations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/utility.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/entities/wiki_summaries.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/errors.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/concepts/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/concepts/relation_rules.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/concepts/search_text.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/episodes/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/episodes/event_content.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/episodes/knowledge_building.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/memories/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/memories/add_plan.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/memories/link_rules.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/memories/update_plan.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/bm25.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/context_pack.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/expansion.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/fusion_rrf.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/lexical_query.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/ontology_semantics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/retrieval/scoring.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/policies/wiki_summary_freshness.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/concept_repositories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/episode_repositories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/guidance.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/knowledge_builder.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/memory_repositories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/problem_runs.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/repository_index.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/retrieval_repositories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/snapshots.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/unit_of_work.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/db/wiki_summaries.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/embeddings/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/embeddings/provider.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/embeddings/retrieval.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/host_apps/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/local_state/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/local_state/session_state_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/local_state/shadow_git.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/reporting/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/reporting/metrics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/system/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/system/clock.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/ports/system/idgen.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/create_backup.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/initialize_runtime.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/restore_backup.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/admin/verify_backup.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/build_guidance.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/add/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/add/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/add/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/add/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/containment_checks.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/embeddings.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/reference_checks.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/show/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/show/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/show/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/show/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/update/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/update/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/update/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/update/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/concepts/views.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/events/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/events/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/add/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/add/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/add/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/add/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/effect_plan.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/reference_checks.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/update/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/update/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/update/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/memories/update/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/metrics/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/metrics/build_snapshot.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/plan_execution.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/context_pack_pipeline.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/expansion.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/read/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/read/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/read/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/read/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/read_concepts.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/recall/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/recall/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/retrieval/seed_retrieval.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/scenarios/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/scenarios/record/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/scenarios/record/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/scenarios/record/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/scenarios/record/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/code_delta_context/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/wiki/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/wiki/execute.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/wiki/request.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/wiki/result.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/core/use_cases/wiki/summaries.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/error_responses.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/dependencies.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/human/admin.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/human/init.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/human/wiki.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/session_state.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/working_agent/snapshot.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/main.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/operation_command.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/parser/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/presenters/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/presenters/json.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/presenters/metrics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/memories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/request_parsing/teach.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/cli/runtime.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/host_hooks/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/jobs/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/entrypoints/jobs/episode_sync.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/app_role_safety.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/backups/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/backups/restore.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/connection.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/instance_guard.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/migrations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/privileges.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/admin/storage_setup.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/engine.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/associations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/concepts.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/episodes.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/evidence.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/experiences.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/memories.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/metadata.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/registry.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/utility.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/views.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/models/wiki_summaries.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/repository_index_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/relational/wiki_summaries_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/session.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/db/runtime/uow.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/embeddings/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/embeddings/local_provider.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/embeddings/prewarm.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/embeddings/query_vector_search.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/claude.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/codex.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/cursor.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/inspection.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/paths.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/service.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/assets/types.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/identity/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/identity/resolver.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/inner_agents/claude_cli.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/inner_agents/codex_cli.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/init_lock.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/machine_config_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/operation_registration.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/paths.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/recall_mode_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/repo_registration_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/session_state_file_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/local_state/shadow_git_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/process/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/process/episode_sync/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/process/episode_sync/autostart.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/process/episode_sync/launcher.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/process/episode_sync/poller.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/process/episode_sync/status_store.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/metrics/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/metrics/browser.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/metrics/pager.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/metrics/render_html.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/wiki/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/wiki/browser.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/wiki/render_html.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/wiki/server.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/reporting/wiki/summary_worker.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/system/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/system/clock.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/system/id_generator.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/system/package_upgrade.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/operation_invocations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/operation_polling.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/read_records.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/recall_records.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/recorder.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/records.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/sink.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/storage_protocols.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/sync_records.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/infrastructure/telemetry/write_records.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/settings/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/settings/defaults/create_policy.yaml +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/settings/defaults/read_policy.yaml +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/settings/defaults/runtime.yaml +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/settings/defaults/thresholds.yaml +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/settings/defaults/update_policy.yaml +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/admin.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/admin_db.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/admin_dependencies.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/admin_diagnose.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/analytics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/backup.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/cli.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/cli_runtime.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/config.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/create_policy.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/db.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/dsn_resolution.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/embeddings.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/episode_poller.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/episode_sync_launcher.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/host_hooks.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/internal_agent_config.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/internal_agents.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/knowledge_builder.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/metrics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/migrations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/model_usage_backfill.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/operation_dependencies.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/read_policy.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/repo_context.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/repos.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/retrieval.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/runtime_admin.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/runtime_context.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/settings.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/snapshot_baseline.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/thresholds.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/update_policy.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/use_cases.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/app/startup/wiki.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/_legacy_usage_views.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/_usage_view_sql.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/env.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260226_0001_initial_schema.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260422_0015_problem_runs.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260515_0019_scenario_records.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/20260606_0037_wiki_summaries.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/migrations/versions/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/__init__.py +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/setup.cfg +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/shellbrain.egg-info/dependency_links.txt +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/shellbrain.egg-info/entry_points.txt +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/shellbrain.egg-info/requires.txt +0 -0
- {shellbrain-0.1.46 → shellbrain-0.1.48}/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.48
|
|
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
|
|
@@ -71,8 +71,10 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
|
|
|
71
71
|
|
|
72
72
|
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief**, with sources cited.
|
|
73
73
|
|
|
74
|
+
Recall receives only the quoted query, so include the relevant task, failure, subsystem, or decision naturally in the question.
|
|
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:
|
|
@@ -57,8 +57,10 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
|
|
|
57
57
|
|
|
58
58
|
**Working agents call `shellbrain recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief**, with sources cited.
|
|
59
59
|
|
|
60
|
+
Recall receives only the quoted query, so include the relevant task, failure, subsystem, or decision naturally in the question.
|
|
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:
|
|
@@ -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.46 → shellbrain-0.1.48}/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,
|
{shellbrain-0.1.46 → shellbrain-0.1.48}/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)}
|
|
@@ -320,10 +318,9 @@ def source_items_from_graph_pack(pack: dict[str, Any]) -> list[dict[str, Any]]:
|
|
|
320
318
|
|
|
321
319
|
def _build_query_lanes(request: MemoryRecallRequest) -> list[_QueryLane]:
|
|
322
320
|
original = _lane("original", request.query)
|
|
323
|
-
current_problem = _current_problem_lane(request)
|
|
324
321
|
identifiers = _identifier_lane(request)
|
|
325
322
|
traps = _prior_cases_lane(request)
|
|
326
|
-
lanes = [lane for lane in (original,
|
|
323
|
+
lanes = [lane for lane in (original, identifiers, traps) if lane]
|
|
327
324
|
deduped: list[_QueryLane] = []
|
|
328
325
|
seen_queries: set[str] = set()
|
|
329
326
|
for lane in lanes:
|
|
@@ -343,24 +340,13 @@ def _lane(name: str, query: str) -> _QueryLane | None:
|
|
|
343
340
|
return _QueryLane(name=name, query=text, terms=terms)
|
|
344
341
|
|
|
345
342
|
|
|
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
343
|
def _identifier_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
357
|
-
|
|
358
|
-
identifiers = _extract_identifiers(f"{request.query} {problem_text}")
|
|
344
|
+
identifiers = _extract_identifiers(request.query)
|
|
359
345
|
return _lane("identifiers", " ".join(identifiers))
|
|
360
346
|
|
|
361
347
|
|
|
362
348
|
def _prior_cases_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
363
|
-
terms = list(dict.fromkeys(_tokenize(
|
|
349
|
+
terms = list(dict.fromkeys(_tokenize(request.query)))
|
|
364
350
|
strongest = " ".join(terms[:8])
|
|
365
351
|
if not strongest:
|
|
366
352
|
return None
|
|
@@ -371,7 +357,7 @@ def _prior_cases_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
|
371
357
|
|
|
372
358
|
|
|
373
359
|
def _broad_domain_lane(request: MemoryRecallRequest) -> _QueryLane | None:
|
|
374
|
-
terms = _tokenize(
|
|
360
|
+
terms = _tokenize(request.query)
|
|
375
361
|
if not terms:
|
|
376
362
|
return None
|
|
377
363
|
return _lane("broad_domain", " ".join(dict.fromkeys(terms[:8])))
|
|
@@ -1392,11 +1378,6 @@ def _tokenize(text: str) -> tuple[str, ...]:
|
|
|
1392
1378
|
return tuple(re.findall(r"[a-z0-9_./:-]+", text.lower()))
|
|
1393
1379
|
|
|
1394
1380
|
|
|
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
1381
|
def _dedupe_reasons(reasons: Iterable[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
1401
1382
|
seen: set[str] = set()
|
|
1402
1383
|
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.46 → shellbrain-0.1.48}/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
|
|
@@ -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.
|
|
@@ -867,7 +866,6 @@ def render_build_context_prompt(request: InnerAgentRunRequest) -> str:
|
|
|
867
866
|
shellbrain = _shellbrain_command(request.repo_root, no_sync=True)
|
|
868
867
|
payload = {
|
|
869
868
|
"query": request.query,
|
|
870
|
-
"current_problem": request.current_problem,
|
|
871
869
|
"repo_root": request.repo_root,
|
|
872
870
|
"budgets": {
|
|
873
871
|
"max_private_reads": request.max_private_reads,
|
|
@@ -938,7 +936,6 @@ def render_build_context_synthesis_prompt(request: InnerAgentRunRequest) -> str:
|
|
|
938
936
|
|
|
939
937
|
payload = {
|
|
940
938
|
"query": request.query,
|
|
941
|
-
"current_problem": request.current_problem,
|
|
942
939
|
"budgets": {
|
|
943
940
|
"max_brief_tokens": request.max_brief_tokens,
|
|
944
941
|
},
|
|
@@ -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>`
|
|
@@ -12,7 +12,7 @@ Shellbrain is a persistent memory system for agent work.
|
|
|
12
12
|
As the working agent, your interface is:
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
shellbrain recall
|
|
15
|
+
shellbrain recall "<targeted natural-language question>"
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Recall returns a compact brief synthesized from prior memories, concepts, scenarios, and recent episode context. It is meant to reduce wasted exploration and help you decide where to look next.
|
|
@@ -43,7 +43,7 @@ Use this order:
|
|
|
43
43
|
|
|
44
44
|
1. If Shellbrain is missing or broken, run `shellbrain admin doctor`.
|
|
45
45
|
2. If doctor says repair is needed, run `shellbrain init`.
|
|
46
|
-
3. Otherwise, use `shellbrain recall` with
|
|
46
|
+
3. Otherwise, use `shellbrain recall` with one targeted natural-language query.
|
|
47
47
|
|
|
48
48
|
If `shellbrain` is not found, do a one-time PATH check:
|
|
49
49
|
|
|
@@ -105,14 +105,12 @@ If recall would not add information:
|
|
|
105
105
|
|
|
106
106
|
Then continue.
|
|
107
107
|
|
|
108
|
-
## Recall
|
|
108
|
+
## Recall Query
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
If you do not have a hypothesis yet, use `"none yet"`.
|
|
110
|
+
Pass one self-contained question as a quoted positional argument. Recall receives only this query, so include relevant task context naturally.
|
|
113
111
|
|
|
114
112
|
```bash
|
|
115
|
-
shellbrain recall
|
|
113
|
+
shellbrain recall "Have we seen this architecture guardrail failure or subsystem boundary before?"
|
|
116
114
|
```
|
|
117
115
|
|
|
118
116
|
## Teach Payload
|
|
@@ -140,15 +138,15 @@ Good recall queries are concrete. Name the failure mode, subsystem, decision, fi
|
|
|
140
138
|
Good examples:
|
|
141
139
|
|
|
142
140
|
```bash
|
|
143
|
-
shellbrain recall
|
|
141
|
+
shellbrain recall "I'm debugging a migration lock timeout. What prior context matters?"
|
|
144
142
|
```
|
|
145
143
|
|
|
146
144
|
```bash
|
|
147
|
-
shellbrain recall
|
|
145
|
+
shellbrain recall "What architectural constraints matter before moving this CLI handler?"
|
|
148
146
|
```
|
|
149
147
|
|
|
150
148
|
```bash
|
|
151
|
-
shellbrain recall
|
|
149
|
+
shellbrain recall "What user preferences matter while simplifying Shellbrain onboarding assets?"
|
|
152
150
|
```
|
|
153
151
|
|
|
154
152
|
Avoid vague queries:
|
|
@@ -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>`
|
|
@@ -12,7 +12,7 @@ Shellbrain is a persistent memory system for agent work.
|
|
|
12
12
|
As the working agent, your interface is:
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
shellbrain recall
|
|
15
|
+
shellbrain recall "<targeted natural-language question>"
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Recall returns a compact brief synthesized from prior memories, concepts, scenarios, and recent episode context. It is meant to reduce wasted exploration and help you decide where to look next.
|
|
@@ -43,7 +43,7 @@ Use this order:
|
|
|
43
43
|
|
|
44
44
|
1. If Shellbrain is missing or broken, run `shellbrain admin doctor`.
|
|
45
45
|
2. If doctor says repair is needed, run `shellbrain init`.
|
|
46
|
-
3. Otherwise, use `shellbrain recall` with
|
|
46
|
+
3. Otherwise, use `shellbrain recall` with one targeted natural-language query.
|
|
47
47
|
|
|
48
48
|
If `shellbrain` is not found, do a one-time PATH check:
|
|
49
49
|
|
|
@@ -105,14 +105,12 @@ If recall would not add information:
|
|
|
105
105
|
|
|
106
106
|
Then continue.
|
|
107
107
|
|
|
108
|
-
## Recall
|
|
108
|
+
## Recall Query
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
If you do not have a hypothesis yet, use `"none yet"`.
|
|
110
|
+
Pass one self-contained question as a quoted positional argument. Recall receives only this query, so include relevant task context naturally.
|
|
113
111
|
|
|
114
112
|
```bash
|
|
115
|
-
shellbrain recall
|
|
113
|
+
shellbrain recall "Have we seen this architecture guardrail failure or subsystem boundary before?"
|
|
116
114
|
```
|
|
117
115
|
|
|
118
116
|
## Teach Payload
|
|
@@ -140,15 +138,15 @@ Good recall queries are concrete. Name the failure mode, subsystem, decision, fi
|
|
|
140
138
|
Good examples:
|
|
141
139
|
|
|
142
140
|
```bash
|
|
143
|
-
shellbrain recall
|
|
141
|
+
shellbrain recall "I'm debugging a migration lock timeout. What prior context matters?"
|
|
144
142
|
```
|
|
145
143
|
|
|
146
144
|
```bash
|
|
147
|
-
shellbrain recall
|
|
145
|
+
shellbrain recall "What architectural constraints matter before moving this CLI handler?"
|
|
148
146
|
```
|
|
149
147
|
|
|
150
148
|
```bash
|
|
151
|
-
shellbrain recall
|
|
149
|
+
shellbrain recall "What user preferences matter while simplifying Shellbrain onboarding assets?"
|
|
152
150
|
```
|
|
153
151
|
|
|
154
152
|
Avoid vague queries:
|
|
@@ -191,3 +189,7 @@ shellbrain scenario record
|
|
|
191
189
|
Those are internal-agent commands.
|
|
192
190
|
|
|
193
191
|
Do not manually write memories at closeout. Shellbrain's knowledge-builder agent consolidates episodes after the session lifecycle.
|
|
192
|
+
|
|
193
|
+
## Resources
|
|
194
|
+
|
|
195
|
+
- Read [references/session-workflow.md](references/session-workflow.md) for the detailed recall cadence and attention habit.
|
|
@@ -7,7 +7,7 @@ Shellbrain is persistent memory for agent work. The working agent does not brows
|
|
|
7
7
|
The working-agent interface is:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
shellbrain recall
|
|
10
|
+
shellbrain recall "<targeted natural-language question>"
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
Recall asks Shellbrain's internal recall agent to inspect relevant memories, concepts, scenarios, and recent episode context, then return a compact brief for the current problem.
|
|
@@ -84,7 +84,7 @@ If prior context might help:
|
|
|
84
84
|
|
|
85
85
|
`SB: recall | <goal> | <surface> | <obstacle> | <hypothesis-or-trigger>`
|
|
86
86
|
|
|
87
|
-
Then call recall with
|
|
87
|
+
Then call recall with one targeted natural-language query.
|
|
88
88
|
|
|
89
89
|
If recall would not add information:
|
|
90
90
|
|
|
@@ -92,19 +92,14 @@ If recall would not add information:
|
|
|
92
92
|
|
|
93
93
|
Then continue. Do not call recall reflexively.
|
|
94
94
|
|
|
95
|
-
## Recall
|
|
95
|
+
## Recall Query
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- `goal`: what you are trying to accomplish
|
|
100
|
-
- `surface`: the code, subsystem, behavior, or decision area
|
|
101
|
-
- `obstacle`: what is blocking or uncertain
|
|
102
|
-
- `hypothesis`: your current theory, or `"none yet"`
|
|
97
|
+
Pass one self-contained question as a quoted positional argument. Recall receives only this query, so include relevant task context naturally.
|
|
103
98
|
|
|
104
99
|
Example:
|
|
105
100
|
|
|
106
101
|
```bash
|
|
107
|
-
shellbrain recall
|
|
102
|
+
shellbrain recall "What architectural constraints matter before moving this CLI handler?"
|
|
108
103
|
```
|
|
109
104
|
|
|
110
105
|
## Query Guidance
|
|
@@ -114,19 +109,19 @@ Good recall queries are concrete. Name the failure mode, subsystem, decision, fi
|
|
|
114
109
|
Prior attempt query:
|
|
115
110
|
|
|
116
111
|
```bash
|
|
117
|
-
shellbrain recall
|
|
112
|
+
shellbrain recall "I'm debugging a migration lock timeout. What prior context matters?"
|
|
118
113
|
```
|
|
119
114
|
|
|
120
115
|
Constraint query:
|
|
121
116
|
|
|
122
117
|
```bash
|
|
123
|
-
shellbrain recall
|
|
118
|
+
shellbrain recall "What repo constraints or user preferences matter for this auth callback refactor?"
|
|
124
119
|
```
|
|
125
120
|
|
|
126
121
|
Area-specific query:
|
|
127
122
|
|
|
128
123
|
```bash
|
|
129
|
-
shellbrain recall
|
|
124
|
+
shellbrain recall "What facts or recent changes matter around the payments retry worker timeout?"
|
|
130
125
|
```
|
|
131
126
|
|
|
132
127
|
Avoid generic prompts like:
|