shellbrain 0.1.54__tar.gz → 0.1.56__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.54 → shellbrain-0.1.56}/PKG-INFO +1 -1
  2. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/evidence.py +0 -16
  3. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/memories.py +0 -16
  4. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/session_state.py +0 -8
  5. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/snapshots.py +0 -1
  6. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/context_pack.py +0 -5
  7. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/ontology_semantics.py +0 -11
  8. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/scoring.py +1 -2
  9. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/embeddings/retrieval.py +0 -8
  10. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/add/result.py +0 -3
  11. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/show/result.py +0 -3
  12. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/update/result.py +0 -3
  13. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/context_pack_pipeline.py +1 -1
  14. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/deterministic_graph_recall.py +6 -10
  15. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/expansion.py +8 -22
  16. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/scenarios/record/result.py +0 -4
  17. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -4
  18. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/runner.py +22 -9
  19. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +5 -1
  20. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -15
  21. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/shadow_git_store.py +0 -2
  22. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/runtime_admin.py +12 -0
  23. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/_usage_view_sql.py +0 -9
  24. {shellbrain-0.1.54 → shellbrain-0.1.56}/pyproject.toml +1 -1
  25. {shellbrain-0.1.54 → shellbrain-0.1.56}/shellbrain.egg-info/PKG-INFO +1 -1
  26. {shellbrain-0.1.54 → shellbrain-0.1.56}/shellbrain.egg-info/SOURCES.txt +0 -5
  27. shellbrain-0.1.54/app/entrypoints/cli/handlers/human/upgrade.py +0 -11
  28. shellbrain-0.1.54/app/entrypoints/cli/operation_command.py +0 -45
  29. shellbrain-0.1.54/app/entrypoints/cli/presenters/json.py +0 -10
  30. shellbrain-0.1.54/app/infrastructure/db/admin/backups/restore.py +0 -33
  31. shellbrain-0.1.54/app/infrastructure/db/runtime/models/views.py +0 -1110
  32. {shellbrain-0.1.54 → shellbrain-0.1.56}/README.md +0 -0
  33. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/__init__.py +0 -0
  34. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/__main__.py +0 -0
  35. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/__init__.py +0 -0
  36. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/__init__.py +0 -0
  37. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/admin_errors.py +0 -0
  38. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/associations.py +0 -0
  39. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/backups.py +0 -0
  40. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/concepts.py +0 -0
  41. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/episodes.py +0 -0
  42. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/guidance.py +0 -0
  43. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/identity.py +0 -0
  44. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/ids.py +0 -0
  45. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/inner_agents.py +0 -0
  46. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/knowledge_builder.py +0 -0
  47. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/machine_config.py +0 -0
  48. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/runtime_context.py +0 -0
  49. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/scenarios.py +0 -0
  50. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/settings.py +0 -0
  51. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/structural_memory_relations.py +0 -0
  52. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/entities/utility.py +0 -0
  53. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/errors.py +0 -0
  54. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/__init__.py +0 -0
  55. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/concepts/__init__.py +0 -0
  56. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/concepts/relation_rules.py +0 -0
  57. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/concepts/search_text.py +0 -0
  58. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/episodes/__init__.py +0 -0
  59. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/episodes/event_content.py +0 -0
  60. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/episodes/knowledge_building.py +0 -0
  61. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/memories/__init__.py +0 -0
  62. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/memories/add_plan.py +0 -0
  63. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/memories/link_rules.py +0 -0
  64. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/memories/update_plan.py +0 -0
  65. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/__init__.py +0 -0
  66. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/bm25.py +0 -0
  67. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/expansion.py +0 -0
  68. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/fusion_rrf.py +0 -0
  69. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/policies/retrieval/lexical_query.py +0 -0
  70. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/__init__.py +0 -0
  71. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/__init__.py +0 -0
  72. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/concept_repositories.py +0 -0
  73. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/episode_repositories.py +0 -0
  74. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/guidance.py +0 -0
  75. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/knowledge_builder.py +0 -0
  76. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/memory_repositories.py +0 -0
  77. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/problem_runs.py +0 -0
  78. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/retrieval_repositories.py +0 -0
  79. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/snapshots.py +0 -0
  80. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/db/unit_of_work.py +0 -0
  81. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/embeddings/__init__.py +0 -0
  82. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/embeddings/provider.py +0 -0
  83. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/host_apps/__init__.py +0 -0
  84. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/host_apps/inner_agents.py +0 -0
  85. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/local_state/__init__.py +0 -0
  86. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/local_state/session_state_store.py +0 -0
  87. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/local_state/shadow_git.py +0 -0
  88. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/system/__init__.py +0 -0
  89. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/system/clock.py +0 -0
  90. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/ports/system/idgen.py +0 -0
  91. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/__init__.py +0 -0
  92. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/__init__.py +0 -0
  93. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
  94. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
  95. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
  96. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
  97. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
  98. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/create_backup.py +0 -0
  99. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
  100. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
  101. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/initialize_runtime.py +0 -0
  102. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/restore_backup.py +0 -0
  103. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/admin/verify_backup.py +0 -0
  104. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/build_guidance.py +0 -0
  105. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/__init__.py +0 -0
  106. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/add/__init__.py +0 -0
  107. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/add/execute.py +0 -0
  108. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/add/request.py +0 -0
  109. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/containment_checks.py +0 -0
  110. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/embeddings.py +0 -0
  111. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/reference_checks.py +0 -0
  112. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/show/__init__.py +0 -0
  113. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/show/execute.py +0 -0
  114. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/show/request.py +0 -0
  115. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/update/__init__.py +0 -0
  116. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/update/execute.py +0 -0
  117. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/update/request.py +0 -0
  118. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/concepts/views.py +0 -0
  119. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/__init__.py +0 -0
  120. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/events/__init__.py +0 -0
  121. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/events/request.py +0 -0
  122. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
  123. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
  124. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
  125. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
  126. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
  127. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
  128. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
  129. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
  130. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
  131. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
  132. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
  133. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
  134. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
  135. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
  136. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/__init__.py +0 -0
  137. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/add/__init__.py +0 -0
  138. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/add/execute.py +0 -0
  139. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/add/request.py +0 -0
  140. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/add/result.py +0 -0
  141. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/effect_plan.py +0 -0
  142. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/reference_checks.py +0 -0
  143. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/update/__init__.py +0 -0
  144. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/update/execute.py +0 -0
  145. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/update/request.py +0 -0
  146. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/memories/update/result.py +0 -0
  147. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/metrics/__init__.py +0 -0
  148. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
  149. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/plan_execution.py +0 -0
  150. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/__init__.py +0 -0
  151. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
  152. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/build_context/execute.py +0 -0
  153. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
  154. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/read/__init__.py +0 -0
  155. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/read/execute.py +0 -0
  156. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/read/request.py +0 -0
  157. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/read/result.py +0 -0
  158. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/read_concepts.py +0 -0
  159. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/recall/__init__.py +0 -0
  160. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/recall/execute.py +0 -0
  161. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/recall/request.py +0 -0
  162. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/recall/result.py +0 -0
  163. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/retrieval/seed_retrieval.py +0 -0
  164. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/scenarios/__init__.py +0 -0
  165. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/scenarios/record/__init__.py +0 -0
  166. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/scenarios/record/execute.py +0 -0
  167. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/scenarios/record/request.py +0 -0
  168. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/__init__.py +0 -0
  169. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
  170. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
  171. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
  172. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
  173. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/code_delta_context/execute.py +0 -0
  174. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
  175. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/__init__.py +0 -0
  176. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/__init__.py +0 -0
  177. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/error_responses.py +0 -0
  178. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/__init__.py +0 -0
  179. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
  180. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/dependencies.py +0 -0
  181. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
  182. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/human/admin.py +0 -0
  183. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
  184. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/human/init.py +0 -0
  185. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
  186. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
  187. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
  188. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
  189. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
  190. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
  191. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +0 -0
  192. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
  193. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
  194. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
  195. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
  196. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +0 -0
  197. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
  198. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
  199. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
  200. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
  201. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
  202. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
  203. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
  204. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/session_state.py +0 -0
  205. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
  206. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
  207. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/working_agent/snapshot.py +0 -0
  208. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
  209. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/main.py +0 -0
  210. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/parser/__init__.py +0 -0
  211. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/parser/builder.py +0 -0
  212. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/presenters/__init__.py +0 -0
  213. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/presenters/init.py +0 -0
  214. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
  215. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
  216. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
  217. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
  218. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/memories.py +0 -0
  219. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
  220. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
  221. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
  222. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
  223. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/request_parsing/teach.py +0 -0
  224. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/cli/runtime.py +0 -0
  225. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/host_hooks/__init__.py +0 -0
  226. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
  227. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
  228. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/jobs/__init__.py +0 -0
  229. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/entrypoints/jobs/episode_sync.py +0 -0
  230. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/__init__.py +0 -0
  231. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/__init__.py +0 -0
  232. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/__init__.py +0 -0
  233. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/app_role_safety.py +0 -0
  234. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/backups/__init__.py +0 -0
  235. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
  236. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
  237. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
  238. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/connection.py +0 -0
  239. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/instance_guard.py +0 -0
  240. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/migrations.py +0 -0
  241. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/privileges.py +0 -0
  242. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
  243. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
  244. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
  245. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
  246. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/admin/storage_setup.py +0 -0
  247. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/__init__.py +0 -0
  248. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/engine.py +0 -0
  249. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/__init__.py +0 -0
  250. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/associations.py +0 -0
  251. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/concepts.py +0 -0
  252. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/episodes.py +0 -0
  253. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/evidence.py +0 -0
  254. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/experiences.py +0 -0
  255. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
  256. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
  257. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/memories.py +0 -0
  258. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/metadata.py +0 -0
  259. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
  260. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/registry.py +0 -0
  261. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
  262. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
  263. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/models/utility.py +0 -0
  264. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
  265. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
  266. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
  267. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
  268. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
  269. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
  270. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +0 -0
  271. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
  272. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +0 -0
  273. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
  274. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
  275. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +0 -0
  276. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
  277. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +0 -0
  278. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
  279. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
  280. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
  281. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
  282. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
  283. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +0 -0
  284. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +0 -0
  285. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/session.py +0 -0
  286. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/db/runtime/uow.py +0 -0
  287. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/embeddings/__init__.py +0 -0
  288. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/embeddings/local_provider.py +0 -0
  289. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/embeddings/prewarm.py +0 -0
  290. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/embeddings/query_vector_search.py +0 -0
  291. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/__init__.py +0 -0
  292. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/__init__.py +0 -0
  293. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/claude.py +0 -0
  294. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/codex.py +0 -0
  295. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/cursor.py +0 -0
  296. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
  297. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/inspection.py +0 -0
  298. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
  299. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
  300. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
  301. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/paths.py +0 -0
  302. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/service.py +0 -0
  303. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/assets/types.py +0 -0
  304. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/identity/__init__.py +0 -0
  305. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
  306. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
  307. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
  308. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
  309. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
  310. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/identity/resolver.py +0 -0
  311. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
  312. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/inner_agents/claude_cli.py +0 -0
  313. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/inner_agents/codex_cli.py +0 -0
  314. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
  315. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/inner_agents/prompt.py +0 -0
  316. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
  317. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
  318. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
  319. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
  320. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
  321. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
  322. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
  323. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
  324. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
  325. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/__init__.py +0 -0
  326. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/init_lock.py +0 -0
  327. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/machine_config_store.py +0 -0
  328. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/operation_registration.py +0 -0
  329. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/paths.py +0 -0
  330. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/recall_mode_store.py +0 -0
  331. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/repo_registration_store.py +0 -0
  332. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/local_state/session_state_file_store.py +0 -0
  333. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/process/__init__.py +0 -0
  334. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/process/episode_sync/__init__.py +0 -0
  335. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/process/episode_sync/autostart.py +0 -0
  336. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/process/episode_sync/launcher.py +0 -0
  337. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
  338. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/process/episode_sync/poller.py +0 -0
  339. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/process/episode_sync/status_store.py +0 -0
  340. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/system/__init__.py +0 -0
  341. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/system/clock.py +0 -0
  342. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/system/id_generator.py +0 -0
  343. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/system/package_upgrade.py +0 -0
  344. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/__init__.py +0 -0
  345. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
  346. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/operation_invocations.py +0 -0
  347. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/operation_polling.py +0 -0
  348. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/read_records.py +0 -0
  349. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/recall_records.py +0 -0
  350. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/recorder.py +0 -0
  351. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/records.py +0 -0
  352. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/sink.py +0 -0
  353. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/storage_protocols.py +0 -0
  354. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/sync_records.py +0 -0
  355. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/infrastructure/telemetry/write_records.py +0 -0
  356. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/settings/__init__.py +0 -0
  357. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/settings/defaults/create_policy.yaml +0 -0
  358. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/settings/defaults/read_policy.yaml +0 -0
  359. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/settings/defaults/runtime.yaml +0 -0
  360. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/settings/defaults/thresholds.yaml +0 -0
  361. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/settings/defaults/update_policy.yaml +0 -0
  362. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/settings/internal-agents/defaults.yaml +0 -0
  363. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/__init__.py +0 -0
  364. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/admin.py +0 -0
  365. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/admin_db.py +0 -0
  366. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/admin_dependencies.py +0 -0
  367. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/admin_diagnose.py +0 -0
  368. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/analytics.py +0 -0
  369. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/backup.py +0 -0
  370. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/cli.py +0 -0
  371. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/cli_runtime.py +0 -0
  372. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/config.py +0 -0
  373. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/create_policy.py +0 -0
  374. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/db.py +0 -0
  375. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/dsn_resolution.py +0 -0
  376. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/embeddings.py +0 -0
  377. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/episode_poller.py +0 -0
  378. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/episode_sync_launcher.py +0 -0
  379. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/host_hooks.py +0 -0
  380. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/internal_agent_config.py +0 -0
  381. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/internal_agents.py +0 -0
  382. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/knowledge_builder.py +0 -0
  383. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/migrations.py +0 -0
  384. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/model_usage_backfill.py +0 -0
  385. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/operation_dependencies.py +0 -0
  386. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/read_policy.py +0 -0
  387. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/repo_context.py +0 -0
  388. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/repos.py +0 -0
  389. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/retrieval.py +0 -0
  390. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/runtime_context.py +0 -0
  391. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/settings.py +0 -0
  392. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/snapshot_baseline.py +0 -0
  393. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/thresholds.py +0 -0
  394. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/update_policy.py +0 -0
  395. {shellbrain-0.1.54 → shellbrain-0.1.56}/app/startup/use_cases.py +0 -0
  396. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/__init__.py +0 -0
  397. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/_legacy_usage_views.py +0 -0
  398. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/env.py +0 -0
  399. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260226_0001_initial_schema.py +0 -0
  400. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
  401. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
  402. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
  403. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
  404. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
  405. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
  406. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
  407. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
  408. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
  409. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
  410. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
  411. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
  412. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
  413. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260422_0015_problem_runs.py +0 -0
  414. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
  415. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
  416. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
  417. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260515_0019_scenario_records.py +0 -0
  418. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
  419. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
  420. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
  421. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
  422. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
  423. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
  424. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
  425. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
  426. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
  427. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
  428. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
  429. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
  430. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
  431. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
  432. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
  433. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
  434. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
  435. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260606_0037_wiki_summaries.py +0 -0
  436. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/20260815_0038_drop_wiki_summaries.py +0 -0
  437. {shellbrain-0.1.54 → shellbrain-0.1.56}/migrations/versions/__init__.py +0 -0
  438. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/__init__.py +0 -0
  439. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/claude/CLAUDE.md +0 -0
  440. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/claude/skills/shellbrain/SKILL.md +0 -0
  441. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
  442. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/AGENTS.md +0 -0
  443. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
  444. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
  445. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain/SKILL.md +0 -0
  446. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
  447. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
  448. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
  449. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
  450. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain/references/session-workflow.md +0 -0
  451. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
  452. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
  453. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
  454. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
  455. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/cursor/skills/shellbrain/SKILL.md +0 -0
  456. {shellbrain-0.1.54 → shellbrain-0.1.56}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
  457. {shellbrain-0.1.54 → shellbrain-0.1.56}/setup.cfg +0 -0
  458. {shellbrain-0.1.54 → shellbrain-0.1.56}/shellbrain.egg-info/dependency_links.txt +0 -0
  459. {shellbrain-0.1.54 → shellbrain-0.1.56}/shellbrain.egg-info/entry_points.txt +0 -0
  460. {shellbrain-0.1.54 → shellbrain-0.1.56}/shellbrain.egg-info/requires.txt +0 -0
  461. {shellbrain-0.1.54 → shellbrain-0.1.56}/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.54
3
+ Version: 0.1.56
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
@@ -7,10 +7,8 @@ from datetime import datetime
7
7
  from enum import Enum
8
8
 
9
9
  from app.core.entities.ids import (
10
- AssociationEdgeId,
11
10
  EvidenceId,
12
11
  EvidenceRefText,
13
- MemoryId,
14
12
  RepoId,
15
13
  )
16
14
 
@@ -147,20 +145,6 @@ class EvidenceLinkView:
147
145
  created_at: datetime | None = None
148
146
 
149
147
 
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
148
 
165
149
 
166
150
  _SOURCE_REQUIRED_FIELD: dict[EvidenceSourceKind, str] = {
@@ -34,13 +34,6 @@ class MemoryKind(str, Enum):
34
34
 
35
35
  return self in {MemoryKind.SOLUTION, MemoryKind.FAILED_TACTIC}
36
36
 
37
- @property
38
- def is_mature(self) -> bool:
39
- """Return whether this kind belongs to the durable mature-memory set."""
40
-
41
- return self in MATURE_MEMORY_KINDS
42
-
43
-
44
37
  MATURE_MEMORY_KINDS: Final[tuple[MemoryKind, ...]] = (
45
38
  MemoryKind.PROBLEM,
46
39
  MemoryKind.SOLUTION,
@@ -52,15 +45,6 @@ MATURE_MEMORY_KINDS: Final[tuple[MemoryKind, ...]] = (
52
45
  MATURE_MEMORY_KIND_VALUES: Final[tuple[str, ...]] = tuple(
53
46
  kind.value for kind in MATURE_MEMORY_KINDS
54
47
  )
55
-
56
-
57
- def is_mature_memory_kind(kind: MemoryKind | str) -> bool:
58
- """Return whether one kind belongs to the mature durable-memory set."""
59
-
60
- normalized_kind = kind if isinstance(kind, MemoryKind) else MemoryKind(kind)
61
- return normalized_kind.is_mature
62
-
63
-
64
48
  class MemoryScope(str, Enum):
65
49
  """This enum defines shellbrain visibility scope."""
66
50
 
@@ -3,14 +3,6 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from dataclasses import dataclass, field
6
- from enum import Enum
7
-
8
-
9
- class SessionStateResetReason(str, Enum):
10
- """Reasons a working session may be reset while preserving caller identity metadata."""
11
-
12
- IDLE_EXPIRED = "idle_expired"
13
- CALLER_SWITCHED = "caller_switched"
14
6
 
15
7
 
16
8
  @dataclass(kw_only=True)
@@ -174,7 +174,6 @@ class ShadowGitCaptureResult:
174
174
  shadow_commit_sha: str | None
175
175
  parent_shadow_commit_sha: str | None
176
176
  changed_paths: tuple[str, ...]
177
- tree_sha: str | None = None
178
177
 
179
178
 
180
179
  @dataclass(frozen=True, kw_only=True)
@@ -7,11 +7,6 @@ from app.core.policies.retrieval.ontology_semantics import why_included_for_expa
7
7
 
8
8
 
9
9
  _BUCKET_ORDER = ("direct", "explicit", "implicit")
10
- _SECTION_NAMES = {
11
- "direct": "direct",
12
- "explicit": "explicit_related",
13
- "implicit": "implicit_related",
14
- }
15
10
  _BUCKET_PRIORITY = {
16
11
  bucket_name: index for index, bucket_name in enumerate(_BUCKET_ORDER)
17
12
  }
@@ -16,9 +16,6 @@ ARCHIVED_STATUS = "archived"
16
16
  POSITIVE_LIFECYCLE_STATUSES = frozenset(
17
17
  {ACTIVE_STATUS, MAYBE_STALE_STATUS, STALE_STATUS}
18
18
  )
19
- NO_POSITIVE_RETRIEVAL_STATUSES = frozenset(
20
- {SUPERSEDED_STATUS, WRONG_STATUS, ARCHIVED_STATUS}
21
- )
22
19
 
23
20
  LIFECYCLE_RETRIEVAL_MULTIPLIERS: Mapping[str, float] = {
24
21
  ACTIVE_STATUS: 1.0,
@@ -90,14 +87,6 @@ def lifecycle_retrieval_multiplier(status: Any) -> float:
90
87
  """Return the default positive retrieval multiplier for one lifecycle status."""
91
88
 
92
89
  return LIFECYCLE_RETRIEVAL_MULTIPLIERS[normalize_lifecycle_status(status)]
93
-
94
-
95
- def has_positive_lifecycle_signal(status: Any) -> bool:
96
- """Return whether a lifecycle status can contribute normal retrieval signal."""
97
-
98
- return normalize_lifecycle_status(status) in POSITIVE_LIFECYCLE_STATUSES
99
-
100
-
101
90
  def is_active_lifecycle(status: Any) -> bool:
102
91
  """Return whether a lifecycle status is active."""
103
92
 
@@ -4,11 +4,10 @@ from typing import Any
4
4
 
5
5
 
6
6
  def score_candidates(
7
- candidates: dict[str, list[dict[str, Any]]], payload: dict[str, Any]
7
+ candidates: dict[str, list[dict[str, Any]]],
8
8
  ) -> dict[str, list[dict[str, Any]]]:
9
9
  """This function computes base scores used for bucket ranking and spillover."""
10
10
 
11
- _ = payload
12
11
  return {
13
12
  "direct": _score_direct_candidates(candidates.get("direct", [])),
14
13
  "explicit": _score_explicit_candidates(candidates.get("explicit", [])),
@@ -15,11 +15,3 @@ class IVectorSearch(ABC):
15
15
  @abstractmethod
16
16
  def embed_query(self, text: str) -> Sequence[float]:
17
17
  """This method returns an embedding vector for query text."""
18
-
19
-
20
- class IKeywordSearch(ABC):
21
- """This interface defines lexical lookup capabilities for query text."""
22
-
23
- @abstractmethod
24
- def normalize_query(self, text: str) -> str:
25
- """This method normalizes text before lexical retrieval."""
@@ -16,6 +16,3 @@ class ConceptAddResult:
16
16
  @property
17
17
  def data(self) -> dict[str, object]:
18
18
  return {"added_count": self.added_count, "results": self.results}
19
-
20
- def to_response_data(self) -> dict[str, object]:
21
- return self.data
@@ -15,6 +15,3 @@ class ConceptShowResult:
15
15
  @property
16
16
  def data(self) -> dict[str, object]:
17
17
  return {"concept": self.concept}
18
-
19
- def to_response_data(self) -> dict[str, object]:
20
- return self.data
@@ -16,6 +16,3 @@ class ConceptUpdateResult:
16
16
  @property
17
17
  def data(self) -> dict[str, object]:
18
18
  return {"updated_count": self.updated_count, "results": self.results}
19
-
20
- def to_response_data(self) -> dict[str, object]:
21
- return self.data
@@ -67,7 +67,7 @@ def build_context_pack(
67
67
  "explicit": expanded_candidates["explicit"],
68
68
  "implicit": expanded_candidates["implicit"],
69
69
  }
70
- scored_candidates = score_candidates(bucketed_candidates, request_data)
70
+ scored_candidates = score_candidates(bucketed_candidates)
71
71
  pack = assemble_context_pack(
72
72
  scored_candidates, request_data, read_settings=read_settings
73
73
  )
@@ -49,9 +49,7 @@ from app.core.use_cases.retrieval.seed_retrieval import retrieve_seeds
49
49
 
50
50
  _MEMORY_LANE_LIMIT = 12
51
51
  _FINAL_MEMORY_TARGET = 24
52
- _FINAL_MEMORY_HARD_CAP = 32
53
52
  _CONCEPT_TARGET = 6
54
- _CONCEPT_HARD_CAP = 8
55
53
  _RELATION_NEIGHBOR_CAP = 4
56
54
  _HIGH_SIGNAL_RELATIONS = {"depends_on", "constrains", "precedes", "contains"}
57
55
  _HIGH_SIGNAL_CLAIMS = {"invariant", "failure_mode", "usage_note", "behavior"}
@@ -606,12 +604,12 @@ def _select_concepts(
606
604
  )
607
605
  )
608
606
  selected.sort(key=lambda item: (-item[0], item[1]))
609
- chosen = [entry for _, _, entry in selected[:_CONCEPT_HARD_CAP]]
610
- return chosen[:_CONCEPT_TARGET], {
607
+ chosen = [entry for _, _, entry in selected[:_CONCEPT_TARGET]]
608
+ return chosen, {
611
609
  "candidate_count": len(concept_candidates),
612
- "selected": len(chosen[:_CONCEPT_TARGET]),
610
+ "selected": len(chosen),
613
611
  "rejected": rejected_count + max(0, len(selected) - _CONCEPT_TARGET),
614
- "selected_refs": [entry["bundle"]["concept"].slug for entry in chosen[:_CONCEPT_TARGET]],
612
+ "selected_refs": [entry["bundle"]["concept"].slug for entry in chosen],
615
613
  }
616
614
 
617
615
 
@@ -724,8 +722,6 @@ def _select_final_memories(
724
722
 
725
723
  def take(predicate, limit: int) -> None:
726
724
  for item in ordered:
727
- if len(selected) >= _FINAL_MEMORY_HARD_CAP:
728
- return
729
725
  memory_id = str(item["memory"].id)
730
726
  if memory_id in selected_ids or not predicate(item):
731
727
  continue
@@ -766,8 +762,8 @@ def _select_final_memories(
766
762
  if memory_id not in selected_ids:
767
763
  rejected.append(_rejected_memory(item, "budget_or_role_balance"))
768
764
 
769
- return selected[:_FINAL_MEMORY_HARD_CAP], {
770
- "selected_memory_count": len(selected[:_FINAL_MEMORY_HARD_CAP]),
765
+ return selected, {
766
+ "selected_memory_count": len(selected),
771
767
  "rejected_memory_count": len(rejected),
772
768
  "top_rejected_memory_ids": [item["memory_id"] for item in rejected[:10]],
773
769
  "rejected": rejected[:20],
@@ -38,39 +38,25 @@ def expand_candidates(
38
38
  min_strength = float(expand["min_association_strength"])
39
39
  semantic_hops = int(expand["semantic_hops"])
40
40
  max_association_depth = int(expand["max_association_depth"])
41
+ structural_relation_groups = (
42
+ (expand["include_problem_links"], STRUCTURAL_PROBLEM_RELATION_PREDICATES),
43
+ (expand["include_fact_update_links"], STRUCTURAL_FACT_UPDATE_RELATION_PREDICATES),
44
+ )
41
45
 
42
46
  for direct_candidate in direct_candidates:
43
47
  anchor_memory_id = direct_candidate["memory_id"]
44
48
  anchor_score = _candidate_anchor_score(direct_candidate)
45
49
 
46
- if expand["include_problem_links"]:
47
- for neighbor in select_structural_memory_relation_neighbors(
48
- read_policy.list_structural_memory_relation_rows(
49
- repo_id=repo_id,
50
- include_global=include_global,
51
- anchor_memory_id=anchor_memory_id,
52
- kinds=kinds,
53
- predicates=STRUCTURAL_PROBLEM_RELATION_PREDICATES,
54
- ),
55
- anchor_memory_id=anchor_memory_id,
56
- ):
57
- explicit.append(
58
- {
59
- "memory_id": neighbor["memory_id"],
60
- "anchor_memory_id": anchor_memory_id,
61
- "anchor_score": anchor_score,
62
- "depth": 1,
63
- "expansion_type": neighbor["expansion_type"],
64
- }
65
- )
66
- if expand["include_fact_update_links"]:
50
+ for enabled, predicates in structural_relation_groups:
51
+ if not enabled:
52
+ continue
67
53
  for neighbor in select_structural_memory_relation_neighbors(
68
54
  read_policy.list_structural_memory_relation_rows(
69
55
  repo_id=repo_id,
70
56
  include_global=include_global,
71
57
  anchor_memory_id=anchor_memory_id,
72
58
  kinds=kinds,
73
- predicates=STRUCTURAL_FACT_UPDATE_RELATION_PREDICATES,
59
+ predicates=predicates,
74
60
  ),
75
61
  anchor_memory_id=anchor_memory_id,
76
62
  ):
@@ -42,10 +42,6 @@ class ScenarioRecordResult:
42
42
  created: bool
43
43
  solution_delta: SolutionDeltaRecordResult | None = None
44
44
 
45
- @property
46
- def data(self) -> dict[str, object]:
47
- return self.to_response_data()
48
-
49
45
  def to_response_data(self) -> dict[str, object]:
50
46
  """Return the stable CLI response payload."""
51
47
 
@@ -23,10 +23,6 @@ class CaptureSnapshotResult:
23
23
  operation_invocation_id: str | None = None
24
24
  reason: str | None = None
25
25
 
26
- @property
27
- def data(self) -> dict[str, object]:
28
- return self.to_response_data()
29
-
30
26
  def to_response_data(self) -> dict[str, object]:
31
27
  """Return the stable CLI response payload."""
32
28
 
@@ -11,7 +11,6 @@ import sys
11
11
  from typing import Any, Sequence
12
12
 
13
13
  from app.entrypoints.cli.parser import build_parser
14
- from app.entrypoints.cli.presenters.json import render
15
14
  from app.entrypoints.cli.runtime import CliRuntime
16
15
 
17
16
 
@@ -44,9 +43,27 @@ _INNER_AGENT_ALLOWED_COMMANDS_BY_MODE = {
44
43
  def run_operation_command(**kwargs):
45
44
  """Lazy operation-command wrapper so CLI help stays dependency-light."""
46
45
 
47
- from app.entrypoints.cli.operation_command import run_operation_command as run
46
+ from app.entrypoints.cli.handlers.cli_operation import (
47
+ CliOperationEffects,
48
+ run_cli_operation,
49
+ )
48
50
 
49
- return run(**kwargs)
51
+ runtime = kwargs.pop("runtime")
52
+ return run_cli_operation(
53
+ **kwargs,
54
+ effects=CliOperationEffects(
55
+ new_invocation_id=runtime.new_invocation_id,
56
+ resolve_caller_identity=runtime.resolve_caller_identity,
57
+ set_operation_context=runtime.set_operation_context,
58
+ reset_operation_context=runtime.reset_operation_context,
59
+ ensure_managed_runtime_ready=runtime.ensure_managed_runtime_ready,
60
+ warn_or_fail_on_unsafe_app_role=runtime.warn_or_fail_on_unsafe_app_role,
61
+ ensure_repo_registration=runtime.ensure_repo_registration,
62
+ ensure_shadow_baseline=runtime.ensure_shadow_baseline,
63
+ maybe_start_sync=runtime.maybe_start_sync,
64
+ update_operation_polling_status=runtime.update_operation_polling_status,
65
+ ),
66
+ )
50
67
 
51
68
 
52
69
  def main(
@@ -83,11 +100,7 @@ def main(
83
100
  return 2
84
101
 
85
102
  if args.command == "upgrade":
86
- from app.entrypoints.cli.handlers.human.upgrade import (
87
- run as run_upgrade_command,
88
- )
89
-
90
- return run_upgrade_command(run_upgrade_command=runtime.run_upgrade_command)
103
+ return runtime.run_upgrade_command()
91
104
 
92
105
  if args.command == "admin":
93
106
  from app.entrypoints.cli.handlers.human.admin import run_admin_command
@@ -127,7 +140,7 @@ def main(
127
140
  _dispatch_operation_command(command, payload, context, runtime=runtime)
128
141
  ),
129
142
  )
130
- print(render(result))
143
+ print(json.dumps(result, separators=(",", ":")))
131
144
  if result.get("status") == "error":
132
145
  return 1
133
146
  return 0
@@ -21,8 +21,12 @@ def ensure_docker_runtime_available() -> None:
21
21
  check=False,
22
22
  )
23
23
  if completed.returncode != 0:
24
+ detail = completed.stderr.strip() or completed.stdout.strip()
25
+ if not detail:
26
+ detail = f"docker info exited with status {completed.returncode}"
24
27
  raise InitDependencyError(
25
- "Shellbrain init requires the Docker daemon to be running and reachable."
28
+ "Shellbrain requires a reachable Docker daemon for managed-local runtime operations. "
29
+ f"docker info failed: {detail}"
26
30
  )
27
31
 
28
32
 
@@ -2,8 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
-
7
5
  from sqlalchemy import text
8
6
  from sqlalchemy.engine import Engine
9
7
 
@@ -28,16 +26,3 @@ def load_linked_model_usage_sessions(*, engine: Engine) -> list[dict[str, object
28
26
  )
29
27
  with engine.connect() as conn:
30
28
  return [dict(row) for row in conn.execute(statement).mappings().all()]
31
-
32
-
33
- def to_linked_session(row: dict[str, Any]) -> dict[str, object]:
34
- """Keep query rows as JSON-like primitives for the core use case."""
35
-
36
- return {
37
- "repo_id": row["repo_id"],
38
- "host_app": row["host_app"],
39
- "host_session_key": row["host_session_key"],
40
- "thread_id": row.get("thread_id"),
41
- "episode_id": row.get("episode_id"),
42
- "transcript_path": row["transcript_path"],
43
- }
@@ -80,7 +80,6 @@ class ShadowGitStore(IShadowGitStore):
80
80
  shadow_commit_sha=parent_commit,
81
81
  parent_shadow_commit_sha=parent_commit,
82
82
  changed_paths=(),
83
- tree_sha=tree_sha,
84
83
  )
85
84
 
86
85
  commit_sha = _commit_tree(
@@ -99,7 +98,6 @@ class ShadowGitStore(IShadowGitStore):
99
98
  commit_sha=commit_sha,
100
99
  parent_commit=parent_commit,
101
100
  ),
102
- tree_sha=tree_sha,
103
101
  )
104
102
 
105
103
  def diff_snapshot_pair(
@@ -172,11 +172,23 @@ def ensure_managed_runtime_ready() -> None:
172
172
  return
173
173
  if config.runtime_mode != RUNTIME_MODE_MANAGED_LOCAL:
174
174
  return
175
+ if _postgres_is_ready(config.database.admin_dsn):
176
+ return
175
177
  ensure_managed_runtime_available()
176
178
  managed_runtime.ensure_existing_managed_container_running(config)
177
179
  wait_for_postgres(config.database.admin_dsn, timeout_seconds=15)
178
180
 
179
181
 
182
+ def _postgres_is_ready(admin_dsn: str) -> bool:
183
+ """Return whether the configured PostgreSQL runtime accepts connections."""
184
+
185
+ try:
186
+ wait_for_postgres(admin_dsn, timeout_seconds=0)
187
+ except InitConflictError:
188
+ return False
189
+ return True
190
+
191
+
180
192
  def _build_fresh_machine_config() -> MachineConfig:
181
193
  """Construct a fresh machine config for managed-local mode."""
182
194
 
@@ -19,15 +19,6 @@ WHERE m.kind = 'fact'
19
19
  );
20
20
  """
21
21
 
22
-
23
- GLOBAL_UTILITY_SQL = """
24
- CREATE OR REPLACE VIEW global_utility AS
25
- SELECT memory_id, AVG(vote) AS utility_mean, COUNT(*) AS observations
26
- FROM utility_observations
27
- GROUP BY memory_id;
28
- """
29
-
30
-
31
22
  USAGE_COMMAND_DAILY_SQL = """
32
23
  CREATE OR REPLACE VIEW usage_command_daily AS
33
24
  SELECT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "shellbrain"
7
- version = "0.1.54"
7
+ version = "0.1.56"
8
8
  description = "Repo-scoped Shellbrain CLI with explicit evidence-backed writes."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shellbrain
3
- Version: 0.1.54
3
+ Version: 0.1.56
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
@@ -162,7 +162,6 @@ app/entrypoints/__init__.py
162
162
  app/entrypoints/cli/__init__.py
163
163
  app/entrypoints/cli/error_responses.py
164
164
  app/entrypoints/cli/main.py
165
- app/entrypoints/cli/operation_command.py
166
165
  app/entrypoints/cli/runner.py
167
166
  app/entrypoints/cli/runtime.py
168
167
  app/entrypoints/cli/handlers/__init__.py
@@ -174,7 +173,6 @@ app/entrypoints/cli/handlers/human/__init__.py
174
173
  app/entrypoints/cli/handlers/human/admin.py
175
174
  app/entrypoints/cli/handlers/human/admin_dependencies.py
176
175
  app/entrypoints/cli/handlers/human/init.py
177
- app/entrypoints/cli/handlers/human/upgrade.py
178
176
  app/entrypoints/cli/handlers/internal_agent/__init__.py
179
177
  app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py
180
178
  app/entrypoints/cli/handlers/internal_agent/concepts/add.py
@@ -201,7 +199,6 @@ app/entrypoints/cli/parser/__init__.py
201
199
  app/entrypoints/cli/parser/builder.py
202
200
  app/entrypoints/cli/presenters/__init__.py
203
201
  app/entrypoints/cli/presenters/init.py
204
- app/entrypoints/cli/presenters/json.py
205
202
  app/entrypoints/cli/request_parsing/__init__.py
206
203
  app/entrypoints/cli/request_parsing/concepts.py
207
204
  app/entrypoints/cli/request_parsing/episodes.py
@@ -230,7 +227,6 @@ app/infrastructure/db/admin/backups/__init__.py
230
227
  app/infrastructure/db/admin/backups/destructive_guard.py
231
228
  app/infrastructure/db/admin/backups/logical_backup.py
232
229
  app/infrastructure/db/admin/backups/manifest_store.py
233
- app/infrastructure/db/admin/backups/restore.py
234
230
  app/infrastructure/db/admin/provisioning/__init__.py
235
231
  app/infrastructure/db/admin/provisioning/docker_prerequisites.py
236
232
  app/infrastructure/db/admin/provisioning/external_postgres.py
@@ -255,7 +251,6 @@ app/infrastructure/db/runtime/models/registry.py
255
251
  app/infrastructure/db/runtime/models/snapshots.py
256
252
  app/infrastructure/db/runtime/models/telemetry.py
257
253
  app/infrastructure/db/runtime/models/utility.py
258
- app/infrastructure/db/runtime/models/views.py
259
254
  app/infrastructure/db/runtime/queries/__init__.py
260
255
  app/infrastructure/db/runtime/queries/agent_behavior.py
261
256
  app/infrastructure/db/runtime/queries/analytics.py
@@ -1,11 +0,0 @@
1
- """Human CLI endpoint for package upgrades."""
2
-
3
- from __future__ import annotations
4
-
5
- from collections.abc import Callable
6
-
7
-
8
- def run(*, run_upgrade_command: Callable[[], int]) -> int:
9
- """Run the hosted upgrade path."""
10
-
11
- return run_upgrade_command()
@@ -1,45 +0,0 @@
1
- """Entry-point ownership for one agent-facing CLI operation command."""
2
-
3
- from __future__ import annotations
4
-
5
- from typing import Any
6
-
7
- from app.entrypoints.cli.handlers.cli_operation import (
8
- CliOperationEffects,
9
- run_cli_operation,
10
- )
11
- from app.entrypoints.cli.runtime import CliRuntime
12
-
13
-
14
- def run_operation_command(
15
- *,
16
- command: str,
17
- payload: dict[str, Any],
18
- repo_context,
19
- repo_id_override: str | None,
20
- no_sync: bool,
21
- dispatch_operation,
22
- runtime: CliRuntime,
23
- ) -> dict[str, Any]:
24
- """Run one hydrated CLI operation with startup-supplied concrete callbacks."""
25
-
26
- return run_cli_operation(
27
- command=command,
28
- payload=payload,
29
- repo_context=repo_context,
30
- repo_id_override=repo_id_override,
31
- no_sync=no_sync,
32
- dispatch_operation=dispatch_operation,
33
- effects=CliOperationEffects(
34
- new_invocation_id=runtime.new_invocation_id,
35
- resolve_caller_identity=runtime.resolve_caller_identity,
36
- set_operation_context=runtime.set_operation_context,
37
- reset_operation_context=runtime.reset_operation_context,
38
- ensure_managed_runtime_ready=runtime.ensure_managed_runtime_ready,
39
- warn_or_fail_on_unsafe_app_role=runtime.warn_or_fail_on_unsafe_app_role,
40
- ensure_repo_registration=runtime.ensure_repo_registration,
41
- ensure_shadow_baseline=runtime.ensure_shadow_baseline,
42
- maybe_start_sync=runtime.maybe_start_sync,
43
- update_operation_polling_status=runtime.update_operation_polling_status,
44
- ),
45
- )
@@ -1,10 +0,0 @@
1
- """This module defines deterministic JSON presentation helpers for CLI responses."""
2
-
3
- import json
4
- from typing import Any
5
-
6
-
7
- def render(payload: dict[str, Any]) -> str:
8
- """This function renders payloads as deterministic compact JSON output."""
9
-
10
- return json.dumps(payload, separators=(",", ":"))
@@ -1,33 +0,0 @@
1
- """Restore helpers for Shellbrain logical backups."""
2
-
3
- from pathlib import Path
4
-
5
- from app.core.entities.backups import BackupManifest
6
- from app.infrastructure.db.admin.backups.logical_backup import (
7
- restore_backup as _restore_backup,
8
- )
9
-
10
-
11
- def restore_backup(
12
- *,
13
- admin_dsn: str,
14
- backup_root: Path,
15
- target_db: str,
16
- app_dsn: str | None = None,
17
- backup_id: str | None = None,
18
- container_name: str | None = None,
19
- container_admin_user: str | None = None,
20
- container_admin_password: str | None = None,
21
- ) -> BackupManifest:
22
- """Restore one backup into a fresh scratch database."""
23
-
24
- return _restore_backup(
25
- admin_dsn=admin_dsn,
26
- backup_root=backup_root,
27
- target_db=target_db,
28
- app_dsn=app_dsn,
29
- backup_id=backup_id,
30
- container_name=container_name,
31
- container_admin_user=container_admin_user,
32
- container_admin_password=container_admin_password,
33
- )