shellbrain 0.1.35__tar.gz → 0.1.37__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.
Files changed (483) hide show
  1. {shellbrain-0.1.35 → shellbrain-0.1.37}/PKG-INFO +64 -37
  2. {shellbrain-0.1.35 → shellbrain-0.1.37}/README.md +63 -36
  3. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/associations.py +0 -1
  4. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/concepts.py +31 -5
  5. shellbrain-0.1.37/app/core/entities/evidence.py +222 -0
  6. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/memories.py +80 -4
  7. shellbrain-0.1.37/app/core/entities/snapshots.py +288 -0
  8. shellbrain-0.1.37/app/core/entities/structural_memory_relations.py +153 -0
  9. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/add_plan.py +22 -7
  10. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/link_rules.py +9 -32
  11. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/update_plan.py +46 -9
  12. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/context_pack.py +4 -5
  13. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/expansion.py +13 -34
  14. shellbrain-0.1.37/app/core/policies/retrieval/ontology_semantics.py +226 -0
  15. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/concept_repositories.py +24 -4
  16. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/memory_repositories.py +35 -31
  17. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/retrieval_repositories.py +3 -13
  18. shellbrain-0.1.37/app/core/ports/db/snapshots.py +52 -0
  19. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/unit_of_work.py +2 -0
  20. shellbrain-0.1.37/app/core/ports/local_state/shadow_git.py +27 -0
  21. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/execute.py +3 -1
  22. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/request.py +6 -1
  23. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/__init__.py +2 -0
  24. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/execute.py +195 -27
  25. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/request.py +40 -7
  26. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/views.py +63 -0
  27. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/execute.py +10 -0
  28. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/result.py +1 -0
  29. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/effect_plan.py +38 -15
  30. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/reference_checks.py +93 -17
  31. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/update/execute.py +23 -3
  32. shellbrain-0.1.37/app/core/use_cases/memories/update/request.py +256 -0
  33. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/update/result.py +2 -1
  34. shellbrain-0.1.37/app/core/use_cases/plan_execution.py +370 -0
  35. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/context_pack_pipeline.py +17 -3
  36. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/deterministic_graph_recall.py +158 -167
  37. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/expansion.py +26 -23
  38. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read_concepts.py +56 -44
  39. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/seed_retrieval.py +22 -19
  40. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/record/execute.py +119 -1
  41. shellbrain-0.1.37/app/core/use_cases/scenarios/record/result.py +59 -0
  42. shellbrain-0.1.37/app/core/use_cases/snapshots/__init__.py +1 -0
  43. shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/__init__.py +16 -0
  44. shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/execute.py +152 -0
  45. shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/request.py +34 -0
  46. shellbrain-0.1.37/app/core/use_cases/snapshots/capture_snapshot/result.py +45 -0
  47. shellbrain-0.1.37/app/core/use_cases/snapshots/code_delta_context/__init__.py +16 -0
  48. shellbrain-0.1.37/app/core/use_cases/snapshots/code_delta_context/execute.py +107 -0
  49. shellbrain-0.1.37/app/core/use_cases/snapshots/code_delta_context/request.py +28 -0
  50. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/cli_operation.py +6 -0
  51. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/dependencies.py +2 -0
  52. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +1 -0
  53. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +23 -0
  54. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +1 -0
  55. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +2 -0
  56. shellbrain-0.1.37/app/entrypoints/cli/handlers/working_agent/snapshot.py +166 -0
  57. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/operation_command.py +1 -0
  58. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/parser/builder.py +27 -16
  59. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/runner.py +20 -3
  60. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/runtime.py +1 -0
  61. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/associations.py +0 -17
  62. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/concepts.py +56 -21
  63. shellbrain-0.1.37/app/infrastructure/db/runtime/models/evidence.py +114 -0
  64. shellbrain-0.1.37/app/infrastructure/db/runtime/models/experiences.py +130 -0
  65. shellbrain-0.1.37/app/infrastructure/db/runtime/models/memories.py +110 -0
  66. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/registry.py +2 -0
  67. shellbrain-0.1.37/app/infrastructure/db/runtime/models/snapshots.py +114 -0
  68. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/utility.py +0 -17
  69. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/views.py +21 -27
  70. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +234 -41
  71. shellbrain-0.1.37/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +353 -0
  72. shellbrain-0.1.37/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +159 -0
  73. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +56 -7
  74. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +24 -59
  75. shellbrain-0.1.37/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +206 -0
  76. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +10 -3
  77. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +28 -6
  78. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/uow.py +2 -0
  79. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/prompt.py +92 -75
  80. shellbrain-0.1.37/app/infrastructure/local_state/shadow_git_store.py +363 -0
  81. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/write_records.py +45 -17
  82. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/cli.py +2 -0
  83. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/cli_runtime.py +1 -0
  84. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/operation_dependencies.py +4 -0
  85. shellbrain-0.1.37/app/startup/snapshot_baseline.py +36 -0
  86. shellbrain-0.1.37/migrations/_legacy_usage_views.py +91 -0
  87. shellbrain-0.1.37/migrations/_usage_view_sql.py +1114 -0
  88. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260312_0003_drop_create_confidence.py +11 -2
  89. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260318_0006_usage_telemetry_schema.py +1 -1
  90. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260414_0010_model_usage_telemetry.py +5 -3
  91. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +4 -2
  92. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +1 -1
  93. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260422_0015_problem_runs.py +7 -5
  94. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260516_0020_knowledge_build_observability.py +1 -1
  95. shellbrain-0.1.37/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +490 -0
  96. shellbrain-0.1.37/migrations/versions/20260522_0030_concept_lifecycle_events.py +116 -0
  97. shellbrain-0.1.37/migrations/versions/20260522_0031_unified_evidence_storage.py +469 -0
  98. shellbrain-0.1.37/migrations/versions/20260522_0032_memory_lifecycle_events.py +171 -0
  99. shellbrain-0.1.37/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +205 -0
  100. shellbrain-0.1.37/migrations/versions/20260522_0034_structural_memory_relations.py +387 -0
  101. shellbrain-0.1.37/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +346 -0
  102. shellbrain-0.1.37/migrations/versions/20260526_0036_shadow_snapshots.py +159 -0
  103. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/claude/CLAUDE.md +2 -0
  104. {shellbrain-0.1.35/onboarding_assets/cursor → shellbrain-0.1.37/onboarding_assets/claude}/skills/shellbrain/SKILL.md +18 -0
  105. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/AGENTS.md +2 -0
  106. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/SKILL.md +18 -0
  107. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/references/request-shapes.md +15 -1
  108. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/references/session-workflow.md +8 -0
  109. {shellbrain-0.1.35/onboarding_assets/claude → shellbrain-0.1.37/onboarding_assets/cursor}/skills/shellbrain/SKILL.md +18 -0
  110. {shellbrain-0.1.35 → shellbrain-0.1.37}/pyproject.toml +1 -1
  111. {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/PKG-INFO +64 -37
  112. {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/SOURCES.txt +28 -1
  113. shellbrain-0.1.35/app/core/entities/evidence.py +0 -37
  114. shellbrain-0.1.35/app/core/entities/facts.py +0 -30
  115. shellbrain-0.1.35/app/core/use_cases/memories/update/request.py +0 -135
  116. shellbrain-0.1.35/app/core/use_cases/plan_execution.py +0 -167
  117. shellbrain-0.1.35/app/core/use_cases/scenarios/record/result.py +0 -29
  118. shellbrain-0.1.35/app/infrastructure/db/runtime/models/evidence.py +0 -21
  119. shellbrain-0.1.35/app/infrastructure/db/runtime/models/experiences.py +0 -88
  120. shellbrain-0.1.35/app/infrastructure/db/runtime/models/memories.py +0 -80
  121. shellbrain-0.1.35/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +0 -116
  122. shellbrain-0.1.35/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -41
  123. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/__init__.py +0 -0
  124. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/__main__.py +0 -0
  125. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/__init__.py +0 -0
  126. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/__init__.py +0 -0
  127. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/admin_errors.py +0 -0
  128. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/backups.py +0 -0
  129. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/episodes.py +0 -0
  130. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/guidance.py +0 -0
  131. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/identity.py +0 -0
  132. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/ids.py +0 -0
  133. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/inner_agents.py +0 -0
  134. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/knowledge_builder.py +0 -0
  135. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/machine_config.py +0 -0
  136. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/runtime_context.py +0 -0
  137. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/scenarios.py +0 -0
  138. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/session_state.py +0 -0
  139. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/settings.py +0 -0
  140. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/entities/utility.py +0 -0
  141. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/errors.py +0 -0
  142. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/__init__.py +0 -0
  143. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/concepts/__init__.py +0 -0
  144. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/concepts/relation_rules.py +0 -0
  145. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/concepts/search_text.py +0 -0
  146. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/episodes/__init__.py +0 -0
  147. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/episodes/event_content.py +0 -0
  148. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/episodes/knowledge_building.py +0 -0
  149. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/memories/__init__.py +0 -0
  150. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/__init__.py +0 -0
  151. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/bm25.py +0 -0
  152. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/fusion_rrf.py +0 -0
  153. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/lexical_query.py +0 -0
  154. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/policies/retrieval/scoring.py +0 -0
  155. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/__init__.py +0 -0
  156. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/__init__.py +0 -0
  157. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/episode_repositories.py +0 -0
  158. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/guidance.py +0 -0
  159. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/knowledge_builder.py +0 -0
  160. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/db/problem_runs.py +0 -0
  161. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/embeddings/__init__.py +0 -0
  162. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/embeddings/provider.py +0 -0
  163. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/embeddings/retrieval.py +0 -0
  164. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/host_apps/__init__.py +0 -0
  165. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/host_apps/inner_agents.py +0 -0
  166. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/local_state/__init__.py +0 -0
  167. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/local_state/session_state_store.py +0 -0
  168. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/reporting/__init__.py +0 -0
  169. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/reporting/metrics.py +0 -0
  170. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/system/__init__.py +0 -0
  171. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/system/clock.py +0 -0
  172. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/ports/system/idgen.py +0 -0
  173. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/__init__.py +0 -0
  174. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/__init__.py +0 -0
  175. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
  176. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
  177. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
  178. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
  179. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
  180. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/create_backup.py +0 -0
  181. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
  182. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
  183. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/initialize_runtime.py +0 -0
  184. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/restore_backup.py +0 -0
  185. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/admin/verify_backup.py +0 -0
  186. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/build_guidance.py +0 -0
  187. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/__init__.py +0 -0
  188. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/__init__.py +0 -0
  189. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/execute.py +0 -0
  190. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/request.py +0 -0
  191. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/add/result.py +0 -0
  192. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/containment_checks.py +0 -0
  193. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/embeddings.py +0 -0
  194. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/reference_checks.py +0 -0
  195. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/__init__.py +0 -0
  196. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/show/result.py +0 -0
  197. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/concepts/update/result.py +0 -0
  198. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/__init__.py +0 -0
  199. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/events/__init__.py +0 -0
  200. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/events/request.py +0 -0
  201. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
  202. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
  203. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
  204. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
  205. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
  206. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
  207. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
  208. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
  209. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
  210. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
  211. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
  212. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
  213. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
  214. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
  215. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/__init__.py +0 -0
  216. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/__init__.py +0 -0
  217. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/add/request.py +0 -0
  218. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/memories/update/__init__.py +0 -0
  219. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/__init__.py +0 -0
  220. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
  221. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/build_snapshot.py +0 -0
  222. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
  223. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/__init__.py +0 -0
  224. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
  225. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/build_context/execute.py +0 -0
  226. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
  227. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/__init__.py +0 -0
  228. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/execute.py +0 -0
  229. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/request.py +0 -0
  230. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/read/result.py +0 -0
  231. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/__init__.py +0 -0
  232. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/execute.py +0 -0
  233. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/request.py +0 -0
  234. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/retrieval/recall/result.py +0 -0
  235. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/__init__.py +0 -0
  236. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/record/__init__.py +0 -0
  237. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/core/use_cases/scenarios/record/request.py +0 -0
  238. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/__init__.py +0 -0
  239. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/__init__.py +0 -0
  240. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/error_responses.py +0 -0
  241. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/__init__.py +0 -0
  242. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
  243. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/admin.py +0 -0
  244. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
  245. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/init.py +0 -0
  246. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
  247. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
  248. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
  249. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
  250. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
  251. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
  252. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
  253. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
  254. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
  255. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
  256. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
  257. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
  258. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
  259. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
  260. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
  261. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
  262. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
  263. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/session_state.py +0 -0
  264. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
  265. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
  266. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
  267. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/main.py +0 -0
  268. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/parser/__init__.py +0 -0
  269. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/__init__.py +0 -0
  270. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/init.py +0 -0
  271. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/json.py +0 -0
  272. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/presenters/metrics.py +0 -0
  273. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
  274. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
  275. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
  276. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
  277. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/memories.py +0 -0
  278. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
  279. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
  280. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
  281. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
  282. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/cli/request_parsing/teach.py +0 -0
  283. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/host_hooks/__init__.py +0 -0
  284. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
  285. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
  286. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/jobs/__init__.py +0 -0
  287. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/entrypoints/jobs/episode_sync.py +0 -0
  288. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/__init__.py +0 -0
  289. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/__init__.py +0 -0
  290. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/__init__.py +0 -0
  291. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/app_role_safety.py +0 -0
  292. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/__init__.py +0 -0
  293. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
  294. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
  295. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
  296. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/backups/restore.py +0 -0
  297. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/connection.py +0 -0
  298. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/instance_guard.py +0 -0
  299. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/migrations.py +0 -0
  300. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/privileges.py +0 -0
  301. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
  302. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
  303. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
  304. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
  305. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
  306. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/admin/storage_setup.py +0 -0
  307. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/__init__.py +0 -0
  308. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/engine.py +0 -0
  309. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/__init__.py +0 -0
  310. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/episodes.py +0 -0
  311. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
  312. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
  313. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/metadata.py +0 -0
  314. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
  315. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
  316. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
  317. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
  318. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
  319. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
  320. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
  321. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
  322. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
  323. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
  324. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
  325. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
  326. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
  327. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
  328. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
  329. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
  330. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
  331. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
  332. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/db/runtime/session.py +0 -0
  333. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/__init__.py +0 -0
  334. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/local_provider.py +0 -0
  335. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/prewarm.py +0 -0
  336. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/embeddings/query_vector_search.py +0 -0
  337. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/__init__.py +0 -0
  338. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/__init__.py +0 -0
  339. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/claude.py +0 -0
  340. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/codex.py +0 -0
  341. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/cursor.py +0 -0
  342. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
  343. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/inspection.py +0 -0
  344. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
  345. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
  346. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
  347. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/paths.py +0 -0
  348. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/service.py +0 -0
  349. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/assets/types.py +0 -0
  350. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/__init__.py +0 -0
  351. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
  352. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
  353. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
  354. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
  355. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
  356. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/identity/resolver.py +0 -0
  357. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
  358. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/codex_cli.py +0 -0
  359. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
  360. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
  361. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
  362. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
  363. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
  364. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
  365. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
  366. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
  367. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
  368. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
  369. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/__init__.py +0 -0
  370. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/init_lock.py +0 -0
  371. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/machine_config_store.py +0 -0
  372. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/operation_registration.py +0 -0
  373. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/paths.py +0 -0
  374. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/repo_registration_store.py +0 -0
  375. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/local_state/session_state_file_store.py +0 -0
  376. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/__init__.py +0 -0
  377. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/__init__.py +0 -0
  378. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/autostart.py +0 -0
  379. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/launcher.py +0 -0
  380. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
  381. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/poller.py +0 -0
  382. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/process/episode_sync/status_store.py +0 -0
  383. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/__init__.py +0 -0
  384. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/__init__.py +0 -0
  385. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
  386. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/browser.py +0 -0
  387. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/pager.py +0 -0
  388. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/reporting/metrics/render_html.py +0 -0
  389. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/__init__.py +0 -0
  390. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/clock.py +0 -0
  391. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/id_generator.py +0 -0
  392. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/system/package_upgrade.py +0 -0
  393. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/__init__.py +0 -0
  394. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
  395. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/operation_invocations.py +0 -0
  396. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/operation_polling.py +0 -0
  397. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/read_records.py +0 -0
  398. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/recall_records.py +0 -0
  399. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/recorder.py +0 -0
  400. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/records.py +0 -0
  401. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/sink.py +0 -0
  402. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/storage_protocols.py +0 -0
  403. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/infrastructure/telemetry/sync_records.py +0 -0
  404. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/__init__.py +0 -0
  405. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/create_policy.yaml +0 -0
  406. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/read_policy.yaml +0 -0
  407. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/runtime.yaml +0 -0
  408. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/thresholds.yaml +0 -0
  409. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/defaults/update_policy.yaml +0 -0
  410. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/settings/internal-agents/defaults.yaml +0 -0
  411. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/__init__.py +0 -0
  412. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin.py +0 -0
  413. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin_db.py +0 -0
  414. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin_dependencies.py +0 -0
  415. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/admin_diagnose.py +0 -0
  416. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/analytics.py +0 -0
  417. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/backup.py +0 -0
  418. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/config.py +0 -0
  419. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/create_policy.py +0 -0
  420. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/db.py +0 -0
  421. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/dsn_resolution.py +0 -0
  422. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/embeddings.py +0 -0
  423. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/episode_poller.py +0 -0
  424. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/episode_sync_launcher.py +0 -0
  425. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/host_hooks.py +0 -0
  426. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/internal_agent_config.py +0 -0
  427. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/internal_agents.py +0 -0
  428. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/knowledge_builder.py +0 -0
  429. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/metrics.py +0 -0
  430. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/migrations.py +0 -0
  431. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/model_usage_backfill.py +0 -0
  432. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/read_policy.py +0 -0
  433. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/repo_context.py +0 -0
  434. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/repos.py +0 -0
  435. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/retrieval.py +0 -0
  436. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/runtime_admin.py +0 -0
  437. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/runtime_context.py +0 -0
  438. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/settings.py +0 -0
  439. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/thresholds.py +0 -0
  440. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/update_policy.py +0 -0
  441. {shellbrain-0.1.35 → shellbrain-0.1.37}/app/startup/use_cases.py +0 -0
  442. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/__init__.py +0 -0
  443. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/env.py +0 -0
  444. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260226_0001_initial_schema.py +0 -0
  445. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
  446. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
  447. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
  448. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
  449. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
  450. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
  451. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
  452. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
  453. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
  454. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
  455. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
  456. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260515_0019_scenario_records.py +0 -0
  457. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
  458. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
  459. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
  460. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
  461. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
  462. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
  463. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
  464. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
  465. {shellbrain-0.1.35 → shellbrain-0.1.37}/migrations/versions/__init__.py +0 -0
  466. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/__init__.py +0 -0
  467. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
  468. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
  469. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
  470. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
  471. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
  472. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
  473. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
  474. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
  475. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
  476. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
  477. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
  478. {shellbrain-0.1.35 → shellbrain-0.1.37}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
  479. {shellbrain-0.1.35 → shellbrain-0.1.37}/setup.cfg +0 -0
  480. {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/dependency_links.txt +0 -0
  481. {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/entry_points.txt +0 -0
  482. {shellbrain-0.1.35 → shellbrain-0.1.37}/shellbrain.egg-info/requires.txt +0 -0
  483. {shellbrain-0.1.35 → shellbrain-0.1.37}/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.35
3
+ Version: 0.1.37
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
@@ -22,7 +22,28 @@ Requires-Dist: sentence-transformers<4.0,>=3.0
22
22
 
23
23
  Agents forget across sessions. They rediscover the same problems, repeat the same mistakes, and relearn what you already taught them. **ShellBrain makes their work compound.**
24
24
 
25
- ### Recall in one command.
25
+ ## Install
26
+
27
+ ```bash
28
+ curl -L shellbrain.ai/install | bash
29
+ ```
30
+
31
+ **Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
32
+
33
+ Requirements.
34
+ - macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
35
+
36
+ ### Upgrade for latest capabilities
37
+
38
+ ```bash
39
+ shellbrain upgrade
40
+ ```
41
+
42
+ The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
43
+
44
+ ---
45
+
46
+ ## Recall in one command.
26
47
  Episodic, empirical, conceptual. Three categories, one retrieval surface.
27
48
 
28
49
  ---
@@ -36,7 +57,7 @@ Episodic, empirical, conceptual. Three categories, one retrieval surface.
36
57
  - An ontology of problems, solutions, failed tactics, facts, preferences, changes.
37
58
  - This is **case-based reasoning** in a semantic graph.
38
59
 
39
- **Conceptual konwledge** is the _abstractive_ layer.
60
+ **Conceptual knowledge** is the _abstractive_ layer.
40
61
  - A **higher-level concept graph** with claims, relations, and implementations that link back to the concrete layer.
41
62
  - **Progressive disclosure.** agents get oriented first, then ask for depth only where tasks require it.
42
63
 
@@ -44,21 +65,52 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
44
65
 
45
66
  ---
46
67
 
47
- ## How agents use ShellBrain
68
+ ## How Agents Use ShellBrain
48
69
 
49
- **Working agents call `recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief**, with sources cited.
70
+ ### Recall
71
+
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.
50
73
 
51
74
  ```bash
52
- shellbrain recall --json '{"query":"what context matters for this migration lock timeout?","current_problem":{"goal":"fix the migration hang","surface":"db admin","obstacle":"lock timeout","hypothesis":"none yet"}}'
75
+ shellbrain recall --json '{"query":"What is ShellBrain and how does it help a working coding agent?","current_problem":{"goal":"understand ShellBrain","surface":"README","obstacle":"new readers do not know the product yet","hypothesis":"a real recall brief should show what agents get back"}}'
53
76
  ```
54
77
 
55
- Lower-level commands exist for inner agents.
56
- - `read`, `events`, `concept show`, `memory add`, `memory update`, `concept add`, `concept update`
57
-
58
- When a user explicitly says to store or teach Shellbrain something, working agents can call `teach`. It stores the statement as evidence and immediately runs Shellbrain's teach agent.
78
+ Response shape:
79
+
80
+ ```json
81
+ {
82
+ "status": "ok",
83
+ "data": {
84
+ "brief": {
85
+ "summary": "...",
86
+ "constraints": ["..."],
87
+ "known_traps": ["..."],
88
+ "prior_cases": ["..."],
89
+ "concept_orientation": ["..."],
90
+ "anchors": ["`README.md`"],
91
+ "conflicts": ["..."],
92
+ "gaps": ["..."],
93
+ "next_checks": ["..."],
94
+ "sources": [
95
+ {
96
+ "kind": "memory",
97
+ "id": "...",
98
+ "section": "direct"
99
+ }
100
+ ]
101
+ },
102
+ "fallback_reason": null
103
+ },
104
+ "errors": []
105
+ }
106
+ ```
59
107
 
60
108
  **Working agents focus on only their work.**
61
109
 
110
+ ### Teach
111
+
112
+ **Working agents call `shellbrain teach` for explicit teaching.** You can tell an agent to remember important ideas.
113
+
62
114
  ---
63
115
 
64
116
  ## Principled and Disciplined
@@ -69,27 +121,6 @@ Memory that is grounded in evidence, small in scope, and asked for rather than p
69
121
 
70
122
  ---
71
123
 
72
- ## Install
73
-
74
- ```bash
75
- curl -L shellbrain.ai/install | bash
76
- ```
77
-
78
- **Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
79
-
80
- Requirements.
81
- - macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
82
-
83
- ### Upgrade for latest capabilities
84
-
85
- ```bash
86
- shellbrain upgrade
87
- ```
88
-
89
- The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
90
-
91
- ---
92
-
93
124
  ## How to Use ShellBrain
94
125
 
95
126
  Use Shellbrain in your agent of choice. Then, just work normally.
@@ -104,7 +135,7 @@ Use Shellbrain in your agent of choice. Then, just work normally.
104
135
 
105
136
  ## Repair
106
137
 
107
- `shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session — it is not a no-op.
138
+ `shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session.
108
139
 
109
140
  ---
110
141
 
@@ -112,8 +143,4 @@ Use Shellbrain in your agent of choice. Then, just work normally.
112
143
 
113
144
  - [shellbrain.ai/humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
114
145
  - [shellbrain.ai/agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
115
- - [shellbrain.ai/recall](https://shellbrain.ai/recall/) — retrieval pipeline
116
- - [shellbrain.ai/memory/episodic](https://shellbrain.ai/memory/episodic/) — transcript evidence
117
- - [shellbrain.ai/memory/semantic](https://shellbrain.ai/memory/semantic/) — facts, preferences, changes
118
- - [shellbrain.ai/memory/procedural](https://shellbrain.ai/memory/procedural/) — problems, solutions, failed tactics
119
- - [shellbrain.ai/memory/associative](https://shellbrain.ai/memory/associative/) — explicit links and semantic neighbors
146
+ - [shellbrain.ai/architecture](https://shellbrain.ai/architecture/) — memory model, storage, and boundaries
@@ -8,7 +8,28 @@
8
8
 
9
9
  Agents forget across sessions. They rediscover the same problems, repeat the same mistakes, and relearn what you already taught them. **ShellBrain makes their work compound.**
10
10
 
11
- ### Recall in one command.
11
+ ## Install
12
+
13
+ ```bash
14
+ curl -L shellbrain.ai/install | bash
15
+ ```
16
+
17
+ **Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
18
+
19
+ Requirements.
20
+ - macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
21
+
22
+ ### Upgrade for latest capabilities
23
+
24
+ ```bash
25
+ shellbrain upgrade
26
+ ```
27
+
28
+ The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
29
+
30
+ ---
31
+
32
+ ## Recall in one command.
12
33
  Episodic, empirical, conceptual. Three categories, one retrieval surface.
13
34
 
14
35
  ---
@@ -22,7 +43,7 @@ Episodic, empirical, conceptual. Three categories, one retrieval surface.
22
43
  - An ontology of problems, solutions, failed tactics, facts, preferences, changes.
23
44
  - This is **case-based reasoning** in a semantic graph.
24
45
 
25
- **Conceptual konwledge** is the _abstractive_ layer.
46
+ **Conceptual knowledge** is the _abstractive_ layer.
26
47
  - A **higher-level concept graph** with claims, relations, and implementations that link back to the concrete layer.
27
48
  - **Progressive disclosure.** agents get oriented first, then ask for depth only where tasks require it.
28
49
 
@@ -30,21 +51,52 @@ The episodic layer is truth. Empirical memory extracts. Concept memory abstracts
30
51
 
31
52
  ---
32
53
 
33
- ## How agents use ShellBrain
54
+ ## How Agents Use ShellBrain
34
55
 
35
- **Working agents call `recall`.** That is the normal interface they have to think about. One command, **one _carefully curated_ compact brief**, with sources cited.
56
+ ### Recall
57
+
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.
36
59
 
37
60
  ```bash
38
- shellbrain recall --json '{"query":"what context matters for this migration lock timeout?","current_problem":{"goal":"fix the migration hang","surface":"db admin","obstacle":"lock timeout","hypothesis":"none yet"}}'
61
+ shellbrain recall --json '{"query":"What is ShellBrain and how does it help a working coding agent?","current_problem":{"goal":"understand ShellBrain","surface":"README","obstacle":"new readers do not know the product yet","hypothesis":"a real recall brief should show what agents get back"}}'
39
62
  ```
40
63
 
41
- Lower-level commands exist for inner agents.
42
- - `read`, `events`, `concept show`, `memory add`, `memory update`, `concept add`, `concept update`
43
-
44
- When a user explicitly says to store or teach Shellbrain something, working agents can call `teach`. It stores the statement as evidence and immediately runs Shellbrain's teach agent.
64
+ Response shape:
65
+
66
+ ```json
67
+ {
68
+ "status": "ok",
69
+ "data": {
70
+ "brief": {
71
+ "summary": "...",
72
+ "constraints": ["..."],
73
+ "known_traps": ["..."],
74
+ "prior_cases": ["..."],
75
+ "concept_orientation": ["..."],
76
+ "anchors": ["`README.md`"],
77
+ "conflicts": ["..."],
78
+ "gaps": ["..."],
79
+ "next_checks": ["..."],
80
+ "sources": [
81
+ {
82
+ "kind": "memory",
83
+ "id": "...",
84
+ "section": "direct"
85
+ }
86
+ ]
87
+ },
88
+ "fallback_reason": null
89
+ },
90
+ "errors": []
91
+ }
92
+ ```
45
93
 
46
94
  **Working agents focus on only their work.**
47
95
 
96
+ ### Teach
97
+
98
+ **Working agents call `shellbrain teach` for explicit teaching.** You can tell an agent to remember important ideas.
99
+
48
100
  ---
49
101
 
50
102
  ## Principled and Disciplined
@@ -55,27 +107,6 @@ Memory that is grounded in evidence, small in scope, and asked for rather than p
55
107
 
56
108
  ---
57
109
 
58
- ## Install
59
-
60
- ```bash
61
- curl -L shellbrain.ai/install | bash
62
- ```
63
-
64
- **Works for Codex, Claude Code, and Cursor.** The installer runs `shellbrain init` for you. Repos register themselves on first use.
65
-
66
- Requirements.
67
- - macOS or Linux, Python 3.11+, Docker for the managed local Postgres+pgvector runtime.
68
-
69
- ### Upgrade for latest capabilities
70
-
71
- ```bash
72
- shellbrain upgrade
73
- ```
74
-
75
- The install script also works as an upgrade path: `curl -L shellbrain.ai/upgrade | bash`. Manual alternative: `pipx upgrade shellbrain && shellbrain init`.
76
-
77
- ---
78
-
79
110
  ## How to Use ShellBrain
80
111
 
81
112
  Use Shellbrain in your agent of choice. Then, just work normally.
@@ -90,7 +121,7 @@ Use Shellbrain in your agent of choice. Then, just work normally.
90
121
 
91
122
  ## Repair
92
123
 
93
- `shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session — it is not a no-op.
124
+ `shellbrain admin doctor` to inspect. `shellbrain init` to repair if doctor flags it. Do not rerun init every session.
94
125
 
95
126
  ---
96
127
 
@@ -98,8 +129,4 @@ Use Shellbrain in your agent of choice. Then, just work normally.
98
129
 
99
130
  - [shellbrain.ai/humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
100
131
  - [shellbrain.ai/agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
101
- - [shellbrain.ai/recall](https://shellbrain.ai/recall/) — retrieval pipeline
102
- - [shellbrain.ai/memory/episodic](https://shellbrain.ai/memory/episodic/) — transcript evidence
103
- - [shellbrain.ai/memory/semantic](https://shellbrain.ai/memory/semantic/) — facts, preferences, changes
104
- - [shellbrain.ai/memory/procedural](https://shellbrain.ai/memory/procedural/) — problems, solutions, failed tactics
105
- - [shellbrain.ai/memory/associative](https://shellbrain.ai/memory/associative/) — explicit links and semantic neighbors
132
+ - [shellbrain.ai/architecture](https://shellbrain.ai/architecture/) — memory model, storage, and boundaries
@@ -18,7 +18,6 @@ class AssociationRelationType(str, Enum):
18
18
 
19
19
  DEPENDS_ON = "depends_on"
20
20
  ASSOCIATED_WITH = "associated_with"
21
- MATURES_INTO = "matures_into"
22
21
 
23
22
 
24
23
  class AssociationSourceMode(str, Enum):
@@ -35,6 +35,16 @@ class ConceptLifecycleStatus(str, Enum):
35
35
  STALE = "stale"
36
36
  SUPERSEDED = "superseded"
37
37
  WRONG = "wrong"
38
+ ARCHIVED = "archived"
39
+
40
+
41
+ class ConceptLifecycleTargetType(str, Enum):
42
+ """Truth-bearing concept record types with mutable lifecycle state."""
43
+
44
+ RELATION = "relation"
45
+ CLAIM = "claim"
46
+ GROUNDING = "grounding"
47
+ MEMORY_LINK = "memory_link"
38
48
 
39
49
 
40
50
  class ConceptRelationPredicate(str, Enum):
@@ -73,7 +83,6 @@ class AnchorKind(str, Enum):
73
83
  LOG = "log"
74
84
  DOC = "doc"
75
85
  COMMIT = "commit"
76
- MEMORY = "memory"
77
86
 
78
87
 
79
88
  class AnchorStatus(str, Enum):
@@ -103,10 +112,8 @@ class ConceptMemoryLinkRole(str, Enum):
103
112
  EXAMPLE_OF = "example_of"
104
113
  SOLUTION_FOR = "solution_for"
105
114
  FAILED_TACTIC_FOR = "failed_tactic_for"
106
- CHANGED = "changed"
107
- VALIDATED = "validated"
108
- CONTRADICTED = "contradicted"
109
- WARNED_ABOUT = "warned_about"
115
+ WARNS_ABOUT = "warns_about"
116
+ CHANGE_RELEVANT_TO = "change_relevant_to"
110
117
 
111
118
 
112
119
  class ConceptEvidenceTargetType(str, Enum):
@@ -116,6 +123,7 @@ class ConceptEvidenceTargetType(str, Enum):
116
123
  CLAIM = "claim"
117
124
  GROUNDING = "grounding"
118
125
  MEMORY_LINK = "memory_link"
126
+ LIFECYCLE_EVENT = "lifecycle_event"
119
127
 
120
128
 
121
129
  class ConceptEvidenceKind(str, Enum):
@@ -193,10 +201,28 @@ class ConceptLifecycle:
193
201
  confidence: float = 0.5
194
202
  observed_at: datetime | None = None
195
203
  validated_at: datetime | None = None
204
+ invalidated_at: datetime | None = None
196
205
  source_kind: ConceptSourceKind | None = None
197
206
  source_ref: str | None = None
198
207
  superseded_by_id: str | None = None
199
208
  created_by: ConceptCreatedBy = ConceptCreatedBy.MANUAL
209
+ updated_by: ConceptCreatedBy | None = None
210
+
211
+
212
+ @dataclass(frozen=True, kw_only=True)
213
+ class ConceptLifecycleEvent:
214
+ """One auditable lifecycle transition for a truth-bearing concept record."""
215
+
216
+ id: str
217
+ repo_id: str
218
+ target_type: ConceptLifecycleTargetType
219
+ target_id: str
220
+ from_status: ConceptLifecycleStatus
221
+ to_status: ConceptLifecycleStatus
222
+ rationale: str
223
+ actor: ConceptCreatedBy
224
+ superseded_by_id: str | None = None
225
+ created_at: datetime | None = None
200
226
 
201
227
 
202
228
  @dataclass(frozen=True, kw_only=True)
@@ -0,0 +1,222 @@
1
+ """This module defines evidence references and unified evidence-link entities."""
2
+
3
+ import hashlib
4
+ import json
5
+ from dataclasses import dataclass
6
+ from datetime import datetime
7
+ from enum import Enum
8
+
9
+ from app.core.entities.ids import (
10
+ AssociationEdgeId,
11
+ EvidenceId,
12
+ EvidenceRefText,
13
+ MemoryId,
14
+ RepoId,
15
+ )
16
+
17
+
18
+ class EvidenceTargetType(str, Enum):
19
+ """Storage-neutral targets that may carry evidence."""
20
+
21
+ MEMORY = "memory"
22
+ ASSOCIATION_EDGE = "association_edge"
23
+ UTILITY_OBSERVATION = "utility_observation"
24
+ CONCEPT_CLAIM = "concept_claim"
25
+ CONCEPT_RELATION = "concept_relation"
26
+ CONCEPT_GROUNDING = "concept_grounding"
27
+ CONCEPT_MEMORY_LINK = "concept_memory_link"
28
+ CONCEPT_LIFECYCLE_EVENT = "concept_lifecycle_event"
29
+ MEMORY_LIFECYCLE_EVENT = "memory_lifecycle_event"
30
+ STRUCTURAL_MEMORY_RELATION = "structural_memory_relation"
31
+
32
+
33
+ class EvidenceSourceKind(str, Enum):
34
+ """Storage-neutral kinds of evidence sources."""
35
+
36
+ EPISODE_EVENT = "episode_event"
37
+ ANCHOR = "anchor"
38
+ MEMORY = "memory"
39
+ COMMIT = "commit"
40
+ TRANSCRIPT = "transcript"
41
+ TEST = "test"
42
+ MANUAL = "manual"
43
+
44
+
45
+ class EvidenceRole(str, Enum):
46
+ """Semantic role an evidence source plays for a target."""
47
+
48
+ SUPPORTS = "supports"
49
+ CONTRADICTS = "contradicts"
50
+ OBSERVED_IN = "observed_in"
51
+ CREATED_FROM = "created_from"
52
+ VALIDATED_BY = "validated_by"
53
+ INVALIDATED_BY = "invalidated_by"
54
+ EXPLAINS = "explains"
55
+
56
+
57
+ @dataclass(kw_only=True)
58
+ class EvidenceRef:
59
+ """This dataclass models a canonical evidence reference entry."""
60
+
61
+ id: EvidenceId
62
+ repo_id: RepoId
63
+ ref: EvidenceRefText
64
+ kind: EvidenceSourceKind = EvidenceSourceKind.EPISODE_EVENT
65
+ canonical_hash: str | None = None
66
+ episode_event_id: str | None = None
67
+ anchor_id: str | None = None
68
+ memory_id: str | None = None
69
+ commit_ref: str | None = None
70
+ transcript_ref: str | None = None
71
+ note: str | None = None
72
+
73
+
74
+ @dataclass(frozen=True, kw_only=True)
75
+ class EvidenceTarget:
76
+ """One evidence-backed target in the unified evidence API."""
77
+
78
+ target_type: EvidenceTargetType
79
+ target_id: str
80
+
81
+ def __post_init__(self) -> None:
82
+ object.__setattr__(
83
+ self, "target_type", EvidenceTargetType(self.target_type)
84
+ )
85
+ if not self.target_id.strip():
86
+ raise ValueError("evidence target_id must be non-empty")
87
+
88
+
89
+ @dataclass(frozen=True, kw_only=True)
90
+ class EvidenceSource:
91
+ """One normalized source that can support an evidence-backed target."""
92
+
93
+ source_kind: EvidenceSourceKind
94
+ ref: str | None = None
95
+ episode_event_id: str | None = None
96
+ anchor_id: str | None = None
97
+ memory_id: str | None = None
98
+ commit_ref: str | None = None
99
+ transcript_ref: str | None = None
100
+ note: str | None = None
101
+
102
+ def __post_init__(self) -> None:
103
+ object.__setattr__(
104
+ self, "source_kind", EvidenceSourceKind(self.source_kind)
105
+ )
106
+ if self.source_kind is EvidenceSourceKind.EPISODE_EVENT:
107
+ event_ref = self.ref or self.episode_event_id
108
+ if event_ref is None or not event_ref.strip():
109
+ raise ValueError("episode_event evidence requires ref")
110
+ if self.ref is not None and self.episode_event_id is not None:
111
+ if self.ref != self.episode_event_id:
112
+ raise ValueError("episode_event ref and episode_event_id differ")
113
+ object.__setattr__(self, "ref", event_ref)
114
+ object.__setattr__(self, "episode_event_id", event_ref)
115
+ _require_no_fields(
116
+ self,
117
+ "anchor_id",
118
+ "memory_id",
119
+ "commit_ref",
120
+ "transcript_ref",
121
+ "note",
122
+ )
123
+ return
124
+
125
+ required_field = _SOURCE_REQUIRED_FIELD[self.source_kind]
126
+ _require_one_field(self, required_field)
127
+ _require_no_fields(
128
+ self,
129
+ *(
130
+ field
131
+ for field in _SOURCE_REFERENCE_FIELDS
132
+ if field != required_field
133
+ ),
134
+ "ref",
135
+ "episode_event_id",
136
+ )
137
+
138
+
139
+ @dataclass(frozen=True, kw_only=True)
140
+ class EvidenceLinkView:
141
+ """One resolved evidence link with a storage-neutral target and source."""
142
+
143
+ target: EvidenceTarget
144
+ source: EvidenceSource
145
+ role: EvidenceRole
146
+ evidence_id: EvidenceId | None = None
147
+ created_at: datetime | None = None
148
+
149
+
150
+ @dataclass(kw_only=True)
151
+ class MemoryEvidenceLink:
152
+ """This dataclass models a many-to-many link between shellbrain and evidence."""
153
+
154
+ memory_id: MemoryId
155
+ evidence_id: EvidenceId
156
+
157
+
158
+ @dataclass(kw_only=True)
159
+ class AssociationEdgeEvidenceLink:
160
+ """This dataclass models a many-to-many link between association edges and evidence."""
161
+
162
+ edge_id: AssociationEdgeId
163
+ evidence_id: EvidenceId
164
+
165
+
166
+ _SOURCE_REQUIRED_FIELD: dict[EvidenceSourceKind, str] = {
167
+ EvidenceSourceKind.ANCHOR: "anchor_id",
168
+ EvidenceSourceKind.MEMORY: "memory_id",
169
+ EvidenceSourceKind.COMMIT: "commit_ref",
170
+ EvidenceSourceKind.TRANSCRIPT: "transcript_ref",
171
+ EvidenceSourceKind.TEST: "note",
172
+ EvidenceSourceKind.MANUAL: "note",
173
+ }
174
+ _SOURCE_REFERENCE_FIELDS = frozenset(_SOURCE_REQUIRED_FIELD.values())
175
+
176
+
177
+ def _require_one_field(source: EvidenceSource, field: str) -> None:
178
+ value = getattr(source, field)
179
+ if value is None or not str(value).strip():
180
+ raise ValueError(f"{source.source_kind.value} evidence requires {field}")
181
+
182
+
183
+ def _require_no_fields(source: EvidenceSource, *fields: str) -> None:
184
+ extra_fields = [
185
+ field
186
+ for field in fields
187
+ if getattr(source, field) is not None
188
+ ]
189
+ if extra_fields:
190
+ raise ValueError(
191
+ f"{source.source_kind.value} evidence does not accept: "
192
+ + ", ".join(sorted(extra_fields))
193
+ )
194
+
195
+
196
+ def canonical_evidence_hash(source: EvidenceSource) -> str:
197
+ """Return the source-only canonical hash used to dedupe evidence refs."""
198
+
199
+ payload = {
200
+ "kind": source.source_kind.value,
201
+ "identity": _source_identity(source),
202
+ }
203
+ serialized = json.dumps(
204
+ payload, sort_keys=True, separators=(",", ":"), ensure_ascii=False
205
+ )
206
+ return "sha256:" + hashlib.sha256(serialized.encode("utf-8")).hexdigest()
207
+
208
+
209
+ def evidence_source_ref(source: EvidenceSource) -> str:
210
+ """Return the required display/source reference string for one evidence source."""
211
+
212
+ return _source_identity(source)
213
+
214
+
215
+ def _source_identity(source: EvidenceSource) -> str:
216
+ if source.source_kind is EvidenceSourceKind.EPISODE_EVENT:
217
+ assert source.episode_event_id is not None
218
+ return source.episode_event_id
219
+ required_field = _SOURCE_REQUIRED_FIELD[source.source_kind]
220
+ value = getattr(source, required_field)
221
+ assert value is not None
222
+ return str(value)