shellbrain 0.1.56__tar.gz → 0.1.57__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 (461) hide show
  1. {shellbrain-0.1.56 → shellbrain-0.1.57}/PKG-INFO +1 -1
  2. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/backups.py +0 -10
  3. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/concepts.py +0 -23
  4. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/episodes.py +1 -18
  5. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/guidance.py +0 -3
  6. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/identity.py +3 -16
  7. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/ids.py +0 -2
  8. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/memories.py +3 -9
  9. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/snapshots.py +2 -17
  10. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/errors.py +0 -3
  11. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/add_plan.py +11 -11
  12. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/update_plan.py +9 -9
  13. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/bm25.py +2 -5
  14. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/lexical_query.py +3 -21
  15. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/ontology_semantics.py +23 -15
  16. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/concept_repositories.py +0 -5
  17. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/episode_repositories.py +1 -19
  18. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -2
  19. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +3 -4
  20. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -7
  21. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/execute.py +4 -17
  22. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/execute.py +10 -9
  23. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/views.py +11 -11
  24. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_discovered_host_session.py +1 -1
  25. shellbrain-0.1.57/app/core/use_cases/episodes/sync_episode/request.py +40 -0
  26. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_episode/sync_episode.py +20 -40
  27. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +2 -11
  28. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -4
  29. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +2 -11
  30. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -4
  31. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/request.py +0 -14
  32. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/effect_plan.py +0 -8
  33. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/result.py +0 -16
  34. shellbrain-0.1.57/app/core/use_cases/retrieval/build_context/__init__.py +5 -0
  35. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/build_context/execute.py +33 -90
  36. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/concept_seed_retrieval.py +1 -5
  37. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/context_pack_pipeline.py +7 -21
  38. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/deterministic_graph_recall.py +54 -104
  39. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/result.py +0 -3
  40. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read_concepts.py +9 -25
  41. shellbrain-0.1.57/app/core/use_cases/retrieval/recall/__init__.py +9 -0
  42. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/seed_retrieval.py +1 -7
  43. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/code_delta_context/execute.py +6 -10
  44. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/dependencies.py +2 -19
  45. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/admin.py +1 -1
  46. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/admin_dependencies.py +1 -1
  47. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +1 -1
  48. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +1 -34
  49. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +1 -7
  50. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +1 -7
  51. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +2 -2
  52. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/result_envelopes.py +5 -36
  53. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/session_state.py +0 -12
  54. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/snapshot.py +1 -1
  55. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/concepts.py +7 -25
  56. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/hydration.py +2 -32
  57. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/scenarios.py +2 -4
  58. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/backups/logical_backup.py +41 -41
  59. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/connection.py +7 -0
  60. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/managed_local.py +15 -28
  61. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/storage_setup.py +1 -10
  62. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/engine.py +1 -1
  63. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/associations.py +0 -1
  64. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/concepts.py +0 -28
  65. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/episodes.py +0 -42
  66. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/registry.py +1 -16
  67. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/telemetry.py +0 -5
  68. shellbrain-0.1.57/app/infrastructure/db/runtime/repos/memory_visibility.py +27 -0
  69. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +1 -32
  70. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +33 -105
  71. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +17 -52
  72. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +4 -22
  73. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +19 -49
  74. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +7 -27
  75. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +5 -24
  76. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/resolver.py +2 -20
  77. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/prompt.py +0 -1
  78. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/cursor.py +2 -7
  79. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/session_selection.py +2 -2
  80. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/lock_file.py +8 -27
  81. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/poller.py +3 -11
  82. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin_dependencies.py +1 -1
  83. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/backup.py +4 -17
  84. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/cli.py +7 -8
  85. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/create_policy.py +0 -23
  86. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/embeddings.py +16 -24
  87. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/episode_poller.py +2 -2
  88. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/internal_agents.py +0 -6
  89. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/knowledge_builder.py +2 -2
  90. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/model_usage_backfill.py +3 -4
  91. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/operation_dependencies.py +2 -10
  92. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/read_policy.py +0 -16
  93. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/repo_context.py +1 -7
  94. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/runtime_admin.py +12 -34
  95. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/snapshot_baseline.py +2 -2
  96. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/thresholds.py +0 -6
  97. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/update_policy.py +0 -17
  98. shellbrain-0.1.57/migrations/versions/20260901_0039_drop_unused_schema.py +72 -0
  99. {shellbrain-0.1.56 → shellbrain-0.1.57}/pyproject.toml +1 -1
  100. {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/PKG-INFO +1 -1
  101. {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/SOURCES.txt +2 -10
  102. shellbrain-0.1.56/app/core/policies/episodes/event_content.py +0 -18
  103. shellbrain-0.1.56/app/core/use_cases/admin/create_backup.py +0 -18
  104. shellbrain-0.1.56/app/core/use_cases/admin/verify_backup.py +0 -21
  105. shellbrain-0.1.56/app/core/use_cases/concepts/containment_checks.py +0 -26
  106. shellbrain-0.1.56/app/core/use_cases/episodes/sync_episode/request.py +0 -74
  107. shellbrain-0.1.56/app/core/use_cases/retrieval/build_context/__init__.py +0 -13
  108. shellbrain-0.1.56/app/core/use_cases/retrieval/recall/__init__.py +0 -18
  109. shellbrain-0.1.56/app/core/use_cases/retrieval/recall/execute.py +0 -38
  110. shellbrain-0.1.56/app/entrypoints/cli/error_responses.py +0 -10
  111. shellbrain-0.1.56/app/infrastructure/db/admin/backups/manifest_store.py +0 -39
  112. shellbrain-0.1.56/app/infrastructure/db/admin/provisioning/init_effects.py +0 -20
  113. shellbrain-0.1.56/app/startup/retrieval.py +0 -3
  114. shellbrain-0.1.56/app/startup/use_cases.py +0 -22
  115. {shellbrain-0.1.56 → shellbrain-0.1.57}/README.md +0 -0
  116. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/__init__.py +0 -0
  117. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/__main__.py +0 -0
  118. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/__init__.py +0 -0
  119. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/__init__.py +0 -0
  120. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/admin_errors.py +0 -0
  121. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/associations.py +0 -0
  122. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/evidence.py +0 -0
  123. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/inner_agents.py +0 -0
  124. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/knowledge_builder.py +0 -0
  125. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/machine_config.py +0 -0
  126. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/runtime_context.py +0 -0
  127. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/scenarios.py +0 -0
  128. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/session_state.py +0 -0
  129. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/settings.py +0 -0
  130. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/structural_memory_relations.py +0 -0
  131. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/entities/utility.py +0 -0
  132. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/__init__.py +0 -0
  133. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/concepts/__init__.py +0 -0
  134. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/concepts/relation_rules.py +0 -0
  135. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/concepts/search_text.py +0 -0
  136. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/episodes/__init__.py +0 -0
  137. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/episodes/knowledge_building.py +0 -0
  138. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/__init__.py +0 -0
  139. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/memories/link_rules.py +0 -0
  140. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/__init__.py +0 -0
  141. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/context_pack.py +0 -0
  142. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/expansion.py +0 -0
  143. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/fusion_rrf.py +0 -0
  144. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/policies/retrieval/scoring.py +0 -0
  145. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/__init__.py +0 -0
  146. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/__init__.py +0 -0
  147. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/guidance.py +0 -0
  148. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/knowledge_builder.py +0 -0
  149. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/memory_repositories.py +0 -0
  150. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/problem_runs.py +0 -0
  151. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/retrieval_repositories.py +0 -0
  152. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/snapshots.py +0 -0
  153. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/db/unit_of_work.py +0 -0
  154. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/embeddings/__init__.py +0 -0
  155. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/embeddings/provider.py +0 -0
  156. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/embeddings/retrieval.py +0 -0
  157. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/host_apps/__init__.py +0 -0
  158. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/host_apps/inner_agents.py +0 -0
  159. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/local_state/__init__.py +0 -0
  160. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/local_state/session_state_store.py +0 -0
  161. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/local_state/shadow_git.py +0 -0
  162. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/system/__init__.py +0 -0
  163. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/system/clock.py +0 -0
  164. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/ports/system/idgen.py +0 -0
  165. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/__init__.py +0 -0
  166. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/__init__.py +0 -0
  167. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
  168. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
  169. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
  170. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
  171. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/initialize_runtime.py +0 -0
  172. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/admin/restore_backup.py +0 -0
  173. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/build_guidance.py +0 -0
  174. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/__init__.py +0 -0
  175. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/__init__.py +0 -0
  176. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/request.py +0 -0
  177. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/add/result.py +0 -0
  178. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/embeddings.py +0 -0
  179. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/reference_checks.py +0 -0
  180. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/__init__.py +0 -0
  181. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/execute.py +0 -0
  182. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/request.py +0 -0
  183. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/show/result.py +0 -0
  184. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/__init__.py +0 -0
  185. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/request.py +0 -0
  186. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/concepts/update/result.py +0 -0
  187. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/__init__.py +0 -0
  188. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/events/__init__.py +0 -0
  189. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/events/request.py +0 -0
  190. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
  191. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
  192. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
  193. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
  194. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
  195. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
  196. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
  197. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/__init__.py +0 -0
  198. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/__init__.py +0 -0
  199. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/execute.py +0 -0
  200. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/add/result.py +0 -0
  201. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/reference_checks.py +0 -0
  202. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/__init__.py +0 -0
  203. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/execute.py +0 -0
  204. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/memories/update/request.py +0 -0
  205. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/metrics/__init__.py +0 -0
  206. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
  207. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/plan_execution.py +0 -0
  208. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/__init__.py +0 -0
  209. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/expansion.py +0 -0
  210. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/__init__.py +0 -0
  211. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/execute.py +0 -0
  212. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/read/request.py +0 -0
  213. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/recall/request.py +0 -0
  214. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/retrieval/recall/result.py +0 -0
  215. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/__init__.py +0 -0
  216. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/__init__.py +0 -0
  217. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/execute.py +0 -0
  218. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/request.py +0 -0
  219. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/scenarios/record/result.py +0 -0
  220. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/__init__.py +0 -0
  221. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
  222. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
  223. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
  224. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
  225. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
  226. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
  227. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/__init__.py +0 -0
  228. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/__init__.py +0 -0
  229. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/__init__.py +0 -0
  230. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
  231. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
  232. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/human/init.py +0 -0
  233. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
  234. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
  235. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
  236. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
  237. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
  238. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
  239. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
  240. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
  241. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
  242. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
  243. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
  244. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
  245. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
  246. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
  247. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
  248. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
  249. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/main.py +0 -0
  250. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/parser/__init__.py +0 -0
  251. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/parser/builder.py +0 -0
  252. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/presenters/__init__.py +0 -0
  253. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/presenters/init.py +0 -0
  254. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
  255. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
  256. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/memories.py +0 -0
  257. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
  258. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
  259. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
  260. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/request_parsing/teach.py +0 -0
  261. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/runner.py +0 -0
  262. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/cli/runtime.py +0 -0
  263. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/host_hooks/__init__.py +0 -0
  264. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
  265. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
  266. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/jobs/__init__.py +0 -0
  267. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/entrypoints/jobs/episode_sync.py +0 -0
  268. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/__init__.py +0 -0
  269. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/__init__.py +0 -0
  270. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/__init__.py +0 -0
  271. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/app_role_safety.py +0 -0
  272. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/backups/__init__.py +0 -0
  273. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
  274. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/instance_guard.py +0 -0
  275. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/migrations.py +0 -0
  276. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/privileges.py +0 -0
  277. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
  278. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
  279. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
  280. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/__init__.py +0 -0
  281. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/__init__.py +0 -0
  282. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/evidence.py +0 -0
  283. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/experiences.py +0 -0
  284. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
  285. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
  286. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/memories.py +0 -0
  287. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/metadata.py +0 -0
  288. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
  289. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
  290. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/models/utility.py +0 -0
  291. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
  292. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
  293. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
  294. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
  295. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
  296. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
  297. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
  298. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
  299. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
  300. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +0 -0
  301. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
  302. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
  303. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
  304. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
  305. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
  306. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/session.py +0 -0
  307. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/db/runtime/uow.py +0 -0
  308. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/__init__.py +0 -0
  309. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/local_provider.py +0 -0
  310. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/prewarm.py +0 -0
  311. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/embeddings/query_vector_search.py +0 -0
  312. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/__init__.py +0 -0
  313. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/__init__.py +0 -0
  314. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/claude.py +0 -0
  315. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/codex.py +0 -0
  316. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/cursor.py +0 -0
  317. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
  318. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/inspection.py +0 -0
  319. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
  320. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
  321. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
  322. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/paths.py +0 -0
  323. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/service.py +0 -0
  324. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/assets/types.py +0 -0
  325. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/__init__.py +0 -0
  326. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
  327. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
  328. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
  329. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
  330. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
  331. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
  332. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/claude_cli.py +0 -0
  333. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/codex_cli.py +0 -0
  334. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
  335. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
  336. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
  337. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
  338. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
  339. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
  340. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
  341. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
  342. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/__init__.py +0 -0
  343. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/init_lock.py +0 -0
  344. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/machine_config_store.py +0 -0
  345. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/operation_registration.py +0 -0
  346. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/paths.py +0 -0
  347. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/recall_mode_store.py +0 -0
  348. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/repo_registration_store.py +0 -0
  349. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/session_state_file_store.py +0 -0
  350. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/local_state/shadow_git_store.py +0 -0
  351. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/__init__.py +0 -0
  352. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/__init__.py +0 -0
  353. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/autostart.py +0 -0
  354. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/launcher.py +0 -0
  355. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/process/episode_sync/status_store.py +0 -0
  356. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/__init__.py +0 -0
  357. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/clock.py +0 -0
  358. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/id_generator.py +0 -0
  359. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/system/package_upgrade.py +0 -0
  360. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/__init__.py +0 -0
  361. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
  362. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/operation_invocations.py +0 -0
  363. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/operation_polling.py +0 -0
  364. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/read_records.py +0 -0
  365. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/recall_records.py +0 -0
  366. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/recorder.py +0 -0
  367. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/records.py +0 -0
  368. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/sink.py +0 -0
  369. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/storage_protocols.py +0 -0
  370. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/sync_records.py +0 -0
  371. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/infrastructure/telemetry/write_records.py +0 -0
  372. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/__init__.py +0 -0
  373. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/create_policy.yaml +0 -0
  374. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/read_policy.yaml +0 -0
  375. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/runtime.yaml +0 -0
  376. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/thresholds.yaml +0 -0
  377. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/defaults/update_policy.yaml +0 -0
  378. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/settings/internal-agents/defaults.yaml +0 -0
  379. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/__init__.py +0 -0
  380. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin.py +0 -0
  381. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin_db.py +0 -0
  382. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/admin_diagnose.py +0 -0
  383. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/analytics.py +0 -0
  384. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/cli_runtime.py +0 -0
  385. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/config.py +0 -0
  386. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/db.py +0 -0
  387. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/dsn_resolution.py +0 -0
  388. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/episode_sync_launcher.py +0 -0
  389. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/host_hooks.py +0 -0
  390. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/internal_agent_config.py +0 -0
  391. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/migrations.py +0 -0
  392. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/repos.py +0 -0
  393. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/runtime_context.py +0 -0
  394. {shellbrain-0.1.56 → shellbrain-0.1.57}/app/startup/settings.py +0 -0
  395. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/__init__.py +0 -0
  396. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/_legacy_usage_views.py +0 -0
  397. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/_usage_view_sql.py +0 -0
  398. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/env.py +0 -0
  399. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260226_0001_initial_schema.py +0 -0
  400. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
  401. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
  402. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
  403. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
  404. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
  405. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
  406. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
  407. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
  408. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
  409. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
  410. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
  411. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
  412. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
  413. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260422_0015_problem_runs.py +0 -0
  414. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
  415. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
  416. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
  417. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260515_0019_scenario_records.py +0 -0
  418. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
  419. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
  420. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
  421. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
  422. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
  423. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
  424. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
  425. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
  426. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
  427. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
  428. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
  429. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
  430. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
  431. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
  432. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
  433. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
  434. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
  435. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260606_0037_wiki_summaries.py +0 -0
  436. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/20260815_0038_drop_wiki_summaries.py +0 -0
  437. {shellbrain-0.1.56 → shellbrain-0.1.57}/migrations/versions/__init__.py +0 -0
  438. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/__init__.py +0 -0
  439. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/claude/CLAUDE.md +0 -0
  440. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/claude/skills/shellbrain/SKILL.md +0 -0
  441. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
  442. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/AGENTS.md +0 -0
  443. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
  444. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
  445. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/SKILL.md +0 -0
  446. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
  447. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
  448. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
  449. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
  450. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain/references/session-workflow.md +0 -0
  451. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
  452. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
  453. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
  454. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
  455. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/cursor/skills/shellbrain/SKILL.md +0 -0
  456. {shellbrain-0.1.56 → shellbrain-0.1.57}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
  457. {shellbrain-0.1.56 → shellbrain-0.1.57}/setup.cfg +0 -0
  458. {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/dependency_links.txt +0 -0
  459. {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/entry_points.txt +0 -0
  460. {shellbrain-0.1.56 → shellbrain-0.1.57}/shellbrain.egg-info/requires.txt +0 -0
  461. {shellbrain-0.1.56 → shellbrain-0.1.57}/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.56
3
+ Version: 0.1.57
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
@@ -31,15 +31,5 @@ class BackupManifest:
31
31
  compression: str
32
32
 
33
33
 
34
- @dataclass(frozen=True)
35
- class BackupVerificationResult:
36
- """Stable result for a verified backup artifact."""
37
-
38
- backup_id: BackupId
39
- artifact_sha256: str
40
- artifact_size_bytes: int
41
- verified: bool
42
-
43
-
44
34
  class BackupPolicyError(RuntimeError):
45
35
  """Raised when a backup or restore request violates core safety policy."""
@@ -159,14 +159,6 @@ class ConceptCreatedBy(str, Enum):
159
159
  IMPORT = "import"
160
160
 
161
161
 
162
- class GraphPatchStatus(str, Enum):
163
- """Allowed graph patch lifecycle states."""
164
-
165
- PENDING = "pending"
166
- APPLIED = "applied"
167
- REJECTED = "rejected"
168
-
169
-
170
162
  @dataclass(frozen=True, kw_only=True)
171
163
  class Concept:
172
164
  """One durable concept container."""
@@ -311,18 +303,3 @@ class ConceptEvidence:
311
303
  transcript_ref: str | None = None
312
304
  note: str | None = None
313
305
  created_at: datetime | None = None
314
-
315
-
316
- @dataclass(frozen=True, kw_only=True)
317
- class GraphPatch:
318
- """Minimal reserved future graph-patch proposal record."""
319
-
320
- id: str
321
- repo_id: str
322
- schema_version: str
323
- status: GraphPatchStatus
324
- proposed_by: ConceptCreatedBy
325
- operations_json: list[dict[str, Any]]
326
- evidence_summary: str | None = None
327
- created_at: datetime | None = None
328
- applied_at: datetime | None = None
@@ -1,4 +1,4 @@
1
- """This module defines episodic session entities and transfer provenance entities."""
1
+ """This module defines episodic session entities."""
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from datetime import datetime
@@ -30,8 +30,6 @@ class Episode:
30
30
  repo_id: str
31
31
  host_app: str
32
32
  thread_id: str | None = None
33
- title: str | None = None
34
- objective: str | None = None
35
33
  status: EpisodeStatus = EpisodeStatus.ACTIVE
36
34
  started_at: datetime | None = None
37
35
  ended_at: datetime | None = None
@@ -77,18 +75,3 @@ class EpisodeEvent:
77
75
  source: EpisodeEventSource
78
76
  content: str
79
77
  created_at: datetime | None = None
80
-
81
-
82
- @dataclass(kw_only=True)
83
- class SessionTransfer:
84
- """This dataclass models immutable cross-session transfer provenance."""
85
-
86
- id: str
87
- repo_id: str
88
- from_episode_id: str
89
- to_episode_id: str
90
- event_id: str
91
- transfer_kind: str
92
- rationale: str | None = None
93
- transferred_by: str | None = None
94
- created_at: datetime | None = None
@@ -26,7 +26,6 @@ class GuidanceDecision:
26
26
  problem_id: str | None = None
27
27
  memory_ids: list[str] = field(default_factory=list)
28
28
  vote_scale_hint: dict[str, float] | None = None
29
- setup_hint: str | None = None
30
29
 
31
30
  def to_payload(self) -> dict[str, Any]:
32
31
  """Serialize one guidance decision into the public response shape."""
@@ -42,6 +41,4 @@ class GuidanceDecision:
42
41
  payload["memory_ids"] = list(self.memory_ids)
43
42
  if self.vote_scale_hint is not None:
44
43
  payload["vote_scale_hint"] = dict(self.vote_scale_hint)
45
- if self.setup_hint is not None:
46
- payload["setup_hint"] = self.setup_hint
47
44
  return payload
@@ -17,17 +17,6 @@ class IdentityTrustLevel(str, Enum):
17
17
  SUPPORTED_HOST_APPS = frozenset({"codex", "claude_code", "cursor"})
18
18
 
19
19
 
20
- def build_canonical_caller_id(
21
- *, host_app: str, host_session_key: str, agent_key: str | None = None
22
- ) -> str:
23
- """Build the canonical caller identifier from one host session and optional agent key."""
24
-
25
- canonical = f"{host_app}:{host_session_key}"
26
- if agent_key:
27
- canonical = f"{canonical}:agent:{agent_key}"
28
- return canonical
29
-
30
-
31
20
  @dataclass(frozen=True, kw_only=True)
32
21
  class CallerIdentity:
33
22
  """Canonical caller identity used to scope episodes, session state, and guidance."""
@@ -57,11 +46,9 @@ class CallerIdentity:
57
46
  object.__setattr__(
58
47
  self, "trust_level", IdentityTrustLevel(str(self.trust_level))
59
48
  )
60
- canonical_id = build_canonical_caller_id(
61
- host_app=host_app,
62
- host_session_key=host_session_key,
63
- agent_key=self.agent_key,
64
- )
49
+ canonical_id = f"{host_app}:{host_session_key}"
50
+ if self.agent_key:
51
+ canonical_id = f"{canonical_id}:agent:{self.agent_key}"
65
52
  if self.canonical_id is not None and self.canonical_id != canonical_id:
66
53
  raise ValueError(
67
54
  "canonical_id must match host_app, host_session_key, and agent_key"
@@ -10,9 +10,7 @@ RepoId = NewType("RepoId", str)
10
10
  EpisodeId = NewType("EpisodeId", str)
11
11
  EvidenceRefText = NewType("EvidenceRefText", str)
12
12
  EvidenceId = NewType("EvidenceId", str)
13
- InvocationId = NewType("InvocationId", str)
14
13
  AssociationEdgeId = NewType("AssociationEdgeId", str)
15
14
 
16
15
  Confidence = NewType("Confidence", float)
17
16
  Salience = NewType("Salience", float)
18
- UtilityVote = NewType("UtilityVote", float)
@@ -34,17 +34,11 @@ class MemoryKind(str, Enum):
34
34
 
35
35
  return self in {MemoryKind.SOLUTION, MemoryKind.FAILED_TACTIC}
36
36
 
37
- MATURE_MEMORY_KINDS: Final[tuple[MemoryKind, ...]] = (
38
- MemoryKind.PROBLEM,
39
- MemoryKind.SOLUTION,
40
- MemoryKind.FAILED_TACTIC,
41
- MemoryKind.FACT,
42
- MemoryKind.PREFERENCE,
43
- MemoryKind.CHANGE,
44
- )
45
37
  MATURE_MEMORY_KIND_VALUES: Final[tuple[str, ...]] = tuple(
46
- kind.value for kind in MATURE_MEMORY_KINDS
38
+ kind.value for kind in MemoryKind
47
39
  )
40
+
41
+
48
42
  class MemoryScope(str, Enum):
49
43
  """This enum defines shellbrain visibility scope."""
50
44
 
@@ -32,13 +32,6 @@ class ShadowGitPathChangeStatus(str, Enum):
32
32
  RENAMED = "renamed"
33
33
 
34
34
 
35
- class CodeDeltaContextStatus(str, Enum):
36
- """Public availability states for code-delta context."""
37
-
38
- AVAILABLE = "available"
39
- UNAVAILABLE = "unavailable"
40
-
41
-
42
35
  class CodeDeltaUnavailableReason(str, Enum):
43
36
  """Expected reasons an event window cannot expose code-delta context."""
44
37
 
@@ -211,13 +204,10 @@ class AvailableCodeDeltaContext:
211
204
  final_shadow_commit_sha: str
212
205
  patch_sha: str
213
206
  path_changes: tuple[ShadowGitPathChange, ...]
214
- status: CodeDeltaContextStatus = CodeDeltaContextStatus.AVAILABLE
215
207
 
216
208
  def __post_init__(self) -> None:
217
209
  """Reject invalid available-context states."""
218
210
 
219
- if self.status is not CodeDeltaContextStatus.AVAILABLE:
220
- raise ValueError("available code delta context requires available status")
221
211
  for field_name in (
222
212
  "base_snapshot_id",
223
213
  "final_snapshot_id",
@@ -248,7 +238,7 @@ class AvailableCodeDeltaContext:
248
238
  """Return the stable JSON payload for bounded events."""
249
239
 
250
240
  return {
251
- "status": self.status.value,
241
+ "status": "available",
252
242
  "base_snapshot_id": self.base_snapshot_id,
253
243
  "final_snapshot_id": self.final_snapshot_id,
254
244
  "base_shadow_commit_sha": self.base_shadow_commit_sha,
@@ -266,22 +256,17 @@ class UnavailableCodeDeltaContext:
266
256
  """Expected absence of code-delta evidence for one event window."""
267
257
 
268
258
  reason: CodeDeltaUnavailableReason
269
- status: CodeDeltaContextStatus = CodeDeltaContextStatus.UNAVAILABLE
270
259
 
271
260
  def __post_init__(self) -> None:
272
261
  """Reject unavailable-context states without a typed reason."""
273
262
 
274
- if self.status is not CodeDeltaContextStatus.UNAVAILABLE:
275
- raise ValueError(
276
- "unavailable code delta context requires unavailable status"
277
- )
278
263
  if not isinstance(self.reason, CodeDeltaUnavailableReason):
279
264
  raise ValueError("reason must be a CodeDeltaUnavailableReason")
280
265
 
281
266
  def to_response_data(self) -> dict[str, str]:
282
267
  """Return the stable JSON payload for bounded events."""
283
268
 
284
- return {"status": self.status.value, "reason": self.reason.value}
269
+ return {"status": "unavailable", "reason": self.reason.value}
285
270
 
286
271
 
287
272
  CodeDeltaContext = AvailableCodeDeltaContext | UnavailableCodeDeltaContext
@@ -16,12 +16,9 @@ class ErrorCode(str, Enum):
16
16
  NOT_FOUND = "not_found"
17
17
  CONFLICT = "conflict"
18
18
  INTERNAL_ERROR = "internal_error"
19
- HOST_IDENTITY_UNAVAILABLE = "host_identity_unavailable"
20
19
  HOST_IDENTITY_UNSUPPORTED = "host_identity_unsupported"
21
20
  HOST_IDENTITY_DRIFTED = "host_identity_drifted"
22
21
  HOST_HOOK_MISSING = "host_hook_missing"
23
- TRANSCRIPT_SOURCE_NOT_FOUND = "transcript_source_not_found"
24
- INNER_AGENT_ERROR = "inner_agent_error"
25
22
 
26
23
 
27
24
  class ErrorDetail(BaseModel):
@@ -4,13 +4,13 @@ from typing import Any
4
4
 
5
5
  from app.core.use_cases.memories.add.result import CreatePlanIds
6
6
  from app.core.use_cases.memories.effect_plan import (
7
+ EffectType,
7
8
  AssociationUpsertAndObserveEffectParams,
8
9
  MemoryAddEffectParams,
9
10
  MemoryEmbeddingUpsertEffectParams,
10
11
  EvidenceAttachEffectParams,
11
12
  PlannedEffect,
12
13
  StructuralProblemLinkEffectParams,
13
- make_side_effect,
14
14
  )
15
15
  from app.core.entities.associations import AssociationSourceMode, AssociationState
16
16
  from app.core.entities.memories import (
@@ -34,8 +34,8 @@ def build_create_plan(
34
34
  memory_id = plan_ids.memory_id
35
35
  evidence_refs = EvidenceRefs.required(memory["evidence_refs"]).values
36
36
  plan: list[PlannedEffect] = [
37
- make_side_effect(
38
- "memory.create",
37
+ PlannedEffect(
38
+ EffectType.MEMORY_CREATE,
39
39
  MemoryAddEffectParams(
40
40
  memory_id=memory_id,
41
41
  repo_id=repo_id,
@@ -44,16 +44,16 @@ def build_create_plan(
44
44
  text=memory["text"],
45
45
  ),
46
46
  ),
47
- make_side_effect(
48
- "memory_embedding.upsert",
47
+ PlannedEffect(
48
+ EffectType.MEMORY_EMBEDDING_UPSERT,
49
49
  MemoryEmbeddingUpsertEffectParams(
50
50
  memory_id=memory_id,
51
51
  model=embedding_model,
52
52
  text=memory["text"],
53
53
  ),
54
54
  ),
55
- make_side_effect(
56
- "evidence.attach",
55
+ PlannedEffect(
56
+ EffectType.EVIDENCE_ATTACH,
57
57
  EvidenceAttachEffectParams(
58
58
  memory_id=memory_id,
59
59
  repo_id=repo_id,
@@ -66,8 +66,8 @@ def build_create_plan(
66
66
  if MemoryKind(memory["kind"]).requires_problem_link and problem_id:
67
67
  relation_id = _required_structural_relation_id(plan_ids, 0)
68
68
  plan.append(
69
- make_side_effect(
70
- "structural_problem_link.create",
69
+ PlannedEffect(
70
+ EffectType.STRUCTURAL_PROBLEM_LINK_CREATE,
71
71
  StructuralProblemLinkEffectParams(
72
72
  relation_id=relation_id,
73
73
  repo_id=repo_id,
@@ -89,8 +89,8 @@ def build_create_plan(
89
89
  confidence = ConfidenceValue(association["confidence"]).value
90
90
  salience = SalienceValue(association["salience"]).value
91
91
  plan.append(
92
- make_side_effect(
93
- "association.upsert_and_observe",
92
+ PlannedEffect(
93
+ EffectType.ASSOCIATION_UPSERT_AND_OBSERVE,
94
94
  AssociationUpsertAndObserveEffectParams(
95
95
  repo_id=repo_id,
96
96
  edge_id=plan_ids.association_edge_ids[index],
@@ -3,13 +3,13 @@
3
3
  from typing import Any
4
4
 
5
5
  from app.core.use_cases.memories.effect_plan import (
6
+ EffectType,
6
7
  AssociationUpsertAndObserveEffectParams,
7
8
  EvidenceSourceEffectParams,
8
9
  StructuralFactChangeEffectParams,
9
10
  MemoryLifecycleUpdateEffectParams,
10
11
  PlannedEffect,
11
12
  UtilityObservationAppendEffectParams,
12
- make_side_effect,
13
13
  )
14
14
  from app.core.use_cases.memories.update.result import UpdatePlanIds
15
15
  from app.core.entities.associations import AssociationSourceMode, AssociationState
@@ -33,8 +33,8 @@ def build_update_plan(
33
33
 
34
34
  if update_type == "update_lifecycle":
35
35
  return [
36
- make_side_effect(
37
- "memory.lifecycle_update",
36
+ PlannedEffect(
37
+ EffectType.MEMORY_LIFECYCLE_UPDATE,
38
38
  MemoryLifecycleUpdateEffectParams(
39
39
  event_id=_required(
40
40
  plan_ids.memory_lifecycle_event_id,
@@ -67,8 +67,8 @@ def build_update_plan(
67
67
  if update_type == "utility_vote":
68
68
  evidence_refs = EvidenceRefs.optional(update.get("evidence_refs", [])).values
69
69
  return [
70
- make_side_effect(
71
- "utility_observation.append",
70
+ PlannedEffect(
71
+ EffectType.UTILITY_OBSERVATION_APPEND,
72
72
  UtilityObservationAppendEffectParams(
73
73
  id=_required(
74
74
  plan_ids.utility_observation_id, "utility_observation_id"
@@ -86,8 +86,8 @@ def build_update_plan(
86
86
  if update_type == "fact_update_link":
87
87
  evidence_refs = EvidenceRefs.optional(update.get("evidence_refs", [])).values
88
88
  return [
89
- make_side_effect(
90
- "structural_fact_change.create",
89
+ PlannedEffect(
90
+ EffectType.STRUCTURAL_FACT_CHANGE_CREATE,
91
91
  StructuralFactChangeEffectParams(
92
92
  repo_id=repo_id,
93
93
  old_fact_id=update["old_fact_id"],
@@ -106,8 +106,8 @@ def build_update_plan(
106
106
  salience = SalienceValue(update["salience"]).value
107
107
  evidence_refs = EvidenceRefs.required(update["evidence_refs"]).values
108
108
  return [
109
- make_side_effect(
110
- "association.upsert_and_observe",
109
+ PlannedEffect(
110
+ EffectType.ASSOCIATION_UPSERT_AND_OBSERVE,
111
111
  AssociationUpsertAndObserveEffectParams(
112
112
  repo_id=repo_id,
113
113
  edge_id=_required(
@@ -36,9 +36,6 @@ class BM25ScoredDocument:
36
36
  def score_documents(
37
37
  query_terms: Sequence[str],
38
38
  documents: Sequence[BM25Document],
39
- *,
40
- k1: float = _K1,
41
- b: float = _B,
42
39
  ) -> list[BM25ScoredDocument]:
43
40
  """Return BM25 scores and weighted query coverage for partially matching documents."""
44
41
 
@@ -81,12 +78,12 @@ def score_documents(
81
78
  score = 0.0
82
79
  matched_query_weight = 0.0
83
80
  document_length = len(document.terms)
84
- normalization = k1 * (1 - b + b * document_length / average_length)
81
+ normalization = _K1 * (1 - _B + _B * document_length / average_length)
85
82
  for term in matched_terms:
86
83
  inverse_document_frequency = inverse_document_frequencies[term]
87
84
  term_frequency = frequencies[term]
88
85
  score += inverse_document_frequency * (
89
- (term_frequency * (k1 + 1)) / (term_frequency + normalization)
86
+ (term_frequency * (_K1 + 1)) / (term_frequency + normalization)
90
87
  )
91
88
  matched_query_weight += inverse_document_frequency
92
89
 
@@ -43,8 +43,6 @@ _STOPWORDS = frozenset(
43
43
  class LexicalQuery:
44
44
  """Normalized lexical query terms used by the keyword retrieval lane."""
45
45
 
46
- raw_terms: tuple[str, ...]
47
- informative_terms: tuple[str, ...]
48
46
  terms: tuple[str, ...]
49
47
  uses_stopword_fallback: bool
50
48
 
@@ -68,14 +66,11 @@ def build_lexical_query(query_text: str) -> LexicalQuery:
68
66
  """Build a normalized lexical query with strict informative-term semantics."""
69
67
 
70
68
  normalized = normalize_lexical_text(query_text)
71
- raw_terms = _unique_terms(normalized.raw_terms)
72
- informative_terms = _unique_terms(normalized.informative_terms)
69
+ raw_terms = tuple(dict.fromkeys(normalized.raw_terms))
70
+ informative_terms = tuple(dict.fromkeys(normalized.informative_terms))
73
71
  uses_stopword_fallback = not informative_terms and bool(raw_terms)
74
- terms = raw_terms if uses_stopword_fallback else informative_terms
75
72
  return LexicalQuery(
76
- raw_terms=raw_terms,
77
- informative_terms=informative_terms,
78
- terms=terms,
73
+ terms=raw_terms if uses_stopword_fallback else informative_terms,
79
74
  uses_stopword_fallback=uses_stopword_fallback,
80
75
  )
81
76
 
@@ -88,16 +83,3 @@ def normalize_lexical_text(text: str) -> NormalizedLexicalText:
88
83
  return NormalizedLexicalText(
89
84
  raw_terms=raw_terms, informative_terms=informative_terms
90
85
  )
91
-
92
-
93
- def _unique_terms(terms: tuple[str, ...]) -> tuple[str, ...]:
94
- """Deduplicate terms while preserving original order."""
95
-
96
- seen: set[str] = set()
97
- ordered: list[str] = []
98
- for term in terms:
99
- if term in seen:
100
- continue
101
- seen.add(term)
102
- ordered.append(term)
103
- return tuple(ordered)
@@ -5,25 +5,23 @@ from __future__ import annotations
5
5
  from collections import Counter
6
6
  from typing import Any, Iterable, Mapping
7
7
 
8
+ from app.core.entities.memories import (
9
+ DEFAULT_RETRIEVABLE_MEMORY_STATUS_VALUES,
10
+ MemoryLifecycleStatus,
11
+ )
8
12
 
9
- ACTIVE_STATUS = "active"
10
- MAYBE_STALE_STATUS = "maybe_stale"
11
- STALE_STATUS = "stale"
12
- SUPERSEDED_STATUS = "superseded"
13
- WRONG_STATUS = "wrong"
14
- ARCHIVED_STATUS = "archived"
15
13
 
16
- POSITIVE_LIFECYCLE_STATUSES = frozenset(
17
- {ACTIVE_STATUS, MAYBE_STALE_STATUS, STALE_STATUS}
18
- )
14
+ ACTIVE_STATUS = MemoryLifecycleStatus.ACTIVE.value
15
+ MAYBE_STALE_STATUS = MemoryLifecycleStatus.MAYBE_STALE.value
16
+ STALE_STATUS = MemoryLifecycleStatus.STALE.value
17
+ SUPERSEDED_STATUS = MemoryLifecycleStatus.SUPERSEDED.value
18
+ WRONG_STATUS = MemoryLifecycleStatus.WRONG.value
19
+ ARCHIVED_STATUS = MemoryLifecycleStatus.ARCHIVED.value
20
+
21
+ POSITIVE_LIFECYCLE_STATUSES = frozenset(DEFAULT_RETRIEVABLE_MEMORY_STATUS_VALUES)
19
22
 
20
23
  LIFECYCLE_RETRIEVAL_MULTIPLIERS: Mapping[str, float] = {
21
- ACTIVE_STATUS: 1.0,
22
- MAYBE_STALE_STATUS: 0.65,
23
- STALE_STATUS: 0.25,
24
- SUPERSEDED_STATUS: 0.0,
25
- WRONG_STATUS: 0.0,
26
- ARCHIVED_STATUS: 0.0,
24
+ status.value: status.retrieval_multiplier for status in MemoryLifecycleStatus
27
25
  }
28
26
 
29
27
  BUNDLE_FRESHNESS_MULTIPLIERS: Mapping[str, float] = {
@@ -127,6 +125,16 @@ def concept_bundle_retrieval_multiplier(statuses: Iterable[Any]) -> float:
127
125
  return BUNDLE_FRESHNESS_MULTIPLIERS[dominant_lifecycle_status(statuses)]
128
126
 
129
127
 
128
+ def bundle_lifecycle_statuses(bundle: Mapping[str, Any]) -> tuple[str, ...]:
129
+ """Return lifecycle status values across every truth-bearing concept facet."""
130
+
131
+ return tuple(
132
+ record.lifecycle.status.value
133
+ for key in ("claims", "relations", "groundings", "memory_links")
134
+ for record in bundle[key]
135
+ )
136
+
137
+
130
138
  def aggregate_currentness_payload(
131
139
  statuses: Iterable[Any], *, record_label: str
132
140
  ) -> dict[str, str]:
@@ -12,7 +12,6 @@ from app.core.entities.concepts import (
12
12
  ConceptLifecycleTargetType,
13
13
  ConceptMemoryLink,
14
14
  ConceptRelation,
15
- GraphPatch,
16
15
  )
17
16
 
18
17
 
@@ -84,10 +83,6 @@ class IConceptsRepo(ABC):
84
83
  ) -> ConceptLifecycleEvent:
85
84
  """This method appends one auditable concept lifecycle transition."""
86
85
 
87
- @abstractmethod
88
- def create_graph_patch(self, patch: GraphPatch) -> GraphPatch:
89
- """This method stores one future graph-patch proposal record."""
90
-
91
86
  @abstractmethod
92
87
  def get_concept_bundle(
93
88
  self,
@@ -1,15 +1,9 @@
1
1
  """Repository ports for episode persistence."""
2
2
 
3
3
  from abc import ABC, abstractmethod
4
- from datetime import datetime
5
4
  from typing import Sequence
6
5
 
7
- from app.core.entities.episodes import (
8
- Episode,
9
- EpisodeBuildSnapshot,
10
- EpisodeEvent,
11
- SessionTransfer,
12
- )
6
+ from app.core.entities.episodes import Episode, EpisodeBuildSnapshot, EpisodeEvent
13
7
 
14
8
 
15
9
  class IEpisodesRepo(ABC):
@@ -55,10 +49,6 @@ class IEpisodesRepo(ABC):
55
49
  ) -> EpisodeEvent | None:
56
50
  """This method fetches one repo-visible event by id inside an episode."""
57
51
 
58
- @abstractmethod
59
- def list_event_keys(self, *, episode_id: str) -> Sequence[str]:
60
- """This method returns already-imported upstream event keys for one episode."""
61
-
62
52
  @abstractmethod
63
53
  def next_event_seq(self, *, episode_id: str) -> int:
64
54
  """This method returns the next append sequence number for one episode."""
@@ -71,14 +61,6 @@ class IEpisodesRepo(ABC):
71
61
  def append_event_if_new(self, event: EpisodeEvent) -> bool:
72
62
  """This method appends an event only when its host_event_key is not already present."""
73
63
 
74
- @abstractmethod
75
- def close_episode(self, *, episode_id: str, ended_at: datetime) -> None:
76
- """This method marks an active episode closed."""
77
-
78
- @abstractmethod
79
- def append_transfer(self, transfer: SessionTransfer) -> None:
80
- """This method appends a cross-session transfer row."""
81
-
82
64
  @abstractmethod
83
65
  def list_existing_event_ids(self, *, event_ids: Sequence[str]) -> Sequence[str]:
84
66
  """This method returns episode-event ids that exist anywhere in storage."""
@@ -5,13 +5,11 @@ from app.core.use_cases.admin.backfill_model_usage.backfill_model_usage import (
5
5
  linked_session_from_mapping,
6
6
  )
7
7
  from app.core.use_cases.admin.backfill_model_usage.request import (
8
- BackfillModelUsageRequest,
9
8
  LinkedModelUsageSession,
10
9
  )
11
10
  from app.core.use_cases.admin.backfill_model_usage.result import BackfillSummary
12
11
 
13
12
  __all__ = [
14
- "BackfillModelUsageRequest",
15
13
  "BackfillSummary",
16
14
  "LinkedModelUsageSession",
17
15
  "backfill_model_usage",
@@ -7,14 +7,13 @@ from collections.abc import Callable, Sequence
7
7
  from pathlib import Path
8
8
 
9
9
  from app.core.use_cases.admin.backfill_model_usage.request import (
10
- BackfillModelUsageRequest,
11
10
  LinkedModelUsageSession,
12
11
  )
13
12
  from app.core.use_cases.admin.backfill_model_usage.result import BackfillSummary
14
13
 
15
14
 
16
15
  def backfill_model_usage(
17
- request: BackfillModelUsageRequest,
16
+ sessions: tuple[LinkedModelUsageSession, ...],
18
17
  *,
19
18
  collect_model_usage_records_for_session: Callable[..., Sequence[object]],
20
19
  persist_model_usage_records: Callable[[Sequence[object]], None],
@@ -28,7 +27,7 @@ def backfill_model_usage(
28
27
  sessions_failed = 0
29
28
  records_attempted = 0
30
29
 
31
- for session in request.sessions:
30
+ for session in sessions:
32
31
  try:
33
32
  records = collect_model_usage_records_for_session(
34
33
  repo_id=session.repo_id,
@@ -58,7 +57,7 @@ def backfill_model_usage(
58
57
  host_counts[session.host_app] += len(records)
59
58
 
60
59
  return BackfillSummary(
61
- sessions_examined=len(request.sessions),
60
+ sessions_examined=len(sessions),
62
61
  sessions_with_records=sessions_with_records,
63
62
  sessions_skipped=sessions_skipped,
64
63
  sessions_failed=sessions_failed,
@@ -15,10 +15,3 @@ class LinkedModelUsageSession:
15
15
  thread_id: str | None
16
16
  episode_id: str | None
17
17
  transcript_path: str
18
-
19
-
20
- @dataclass(frozen=True)
21
- class BackfillModelUsageRequest:
22
- """Canonical model-usage backfill request."""
23
-
24
- sessions: tuple[LinkedModelUsageSession, ...]
@@ -4,7 +4,6 @@ from __future__ import annotations
4
4
 
5
5
  from typing import Any
6
6
 
7
- from app.core.errors import DomainValidationError, ErrorCode, ErrorDetail
8
7
  from app.core.entities.concepts import Concept, ConceptKind, ConceptStatus
9
8
  from app.core.ports.embeddings.provider import IEmbeddingProvider
10
9
  from app.core.ports.system.idgen import IIdGenerator
@@ -25,22 +24,10 @@ def add_concepts(
25
24
  ) -> ConceptAddResult:
26
25
  """Create concept containers, failing when any target concept already exists."""
27
26
 
28
- normalized_slugs: list[str] = []
29
- seen_slugs: set[str] = set()
30
- for action in request.actions:
31
- normalized_slug = require_missing_concept(request.repo_id, action.slug, uow)
32
- if normalized_slug in seen_slugs:
33
- raise DomainValidationError(
34
- [
35
- ErrorDetail(
36
- code=ErrorCode.SEMANTIC_ERROR,
37
- message=f"Concept add request contains duplicate slug: {normalized_slug}",
38
- field="actions.slug",
39
- )
40
- ]
41
- )
42
- normalized_slugs.append(normalized_slug)
43
- seen_slugs.add(normalized_slug)
27
+ normalized_slugs = [
28
+ require_missing_concept(request.repo_id, action.slug, uow)
29
+ for action in request.actions
30
+ ]
44
31
 
45
32
  results: list[dict[str, Any]] = []
46
33
  concept_ids: list[str] = []