shellbrain 0.1.39__tar.gz → 0.1.40__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 (494) hide show
  1. {shellbrain-0.1.39 → shellbrain-0.1.40}/PKG-INFO +4 -4
  2. {shellbrain-0.1.39 → shellbrain-0.1.40}/README.md +3 -3
  3. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/concepts.py +1 -0
  4. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/evidence.py +21 -0
  5. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/inner_agents.py +16 -1
  6. shellbrain-0.1.40/app/core/entities/repositories.py +17 -0
  7. shellbrain-0.1.40/app/core/entities/wiki_summaries.py +114 -0
  8. shellbrain-0.1.40/app/core/policies/wiki_summary_freshness.py +60 -0
  9. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/concept_repositories.py +12 -0
  10. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/memory_repositories.py +13 -0
  11. shellbrain-0.1.40/app/core/ports/db/repository_index.py +16 -0
  12. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/unit_of_work.py +4 -0
  13. shellbrain-0.1.40/app/core/ports/db/wiki_summaries.py +64 -0
  14. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/host_apps/inner_agents.py +46 -0
  15. shellbrain-0.1.40/app/core/use_cases/wiki/__init__.py +27 -0
  16. shellbrain-0.1.40/app/core/use_cases/wiki/execute.py +880 -0
  17. shellbrain-0.1.40/app/core/use_cases/wiki/request.py +109 -0
  18. shellbrain-0.1.40/app/core/use_cases/wiki/result.py +295 -0
  19. shellbrain-0.1.40/app/core/use_cases/wiki/summaries.py +699 -0
  20. shellbrain-0.1.40/app/entrypoints/cli/handlers/human/wiki.py +42 -0
  21. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/parser/builder.py +40 -0
  22. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/runner.py +10 -0
  23. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/runtime.py +1 -0
  24. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/registry.py +2 -0
  25. shellbrain-0.1.40/app/infrastructure/db/runtime/models/wiki_summaries.py +63 -0
  26. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +65 -0
  27. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +62 -0
  28. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +23 -0
  29. shellbrain-0.1.40/app/infrastructure/db/runtime/repos/relational/repository_index_repo.py +159 -0
  30. shellbrain-0.1.40/app/infrastructure/db/runtime/repos/relational/wiki_summaries_repo.py +239 -0
  31. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/uow.py +8 -0
  32. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/codex_cli.py +120 -1
  33. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/output_parser.py +23 -0
  34. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/prompt.py +52 -0
  35. shellbrain-0.1.40/app/infrastructure/reporting/wiki/__init__.py +1 -0
  36. shellbrain-0.1.40/app/infrastructure/reporting/wiki/browser.py +11 -0
  37. shellbrain-0.1.40/app/infrastructure/reporting/wiki/render_html.py +666 -0
  38. shellbrain-0.1.40/app/infrastructure/reporting/wiki/server.py +293 -0
  39. shellbrain-0.1.40/app/infrastructure/reporting/wiki/summary_worker.py +123 -0
  40. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/settings/internal-agents/defaults.yaml +12 -0
  41. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/cli.py +2 -0
  42. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/cli_runtime.py +1 -0
  43. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/internal_agent_config.py +3 -1
  44. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/internal_agents.py +23 -0
  45. shellbrain-0.1.40/app/startup/wiki.py +59 -0
  46. shellbrain-0.1.40/migrations/versions/20260606_0037_wiki_summaries.py +85 -0
  47. {shellbrain-0.1.39 → shellbrain-0.1.40}/pyproject.toml +1 -1
  48. {shellbrain-0.1.39 → shellbrain-0.1.40}/shellbrain.egg-info/PKG-INFO +4 -4
  49. {shellbrain-0.1.39 → shellbrain-0.1.40}/shellbrain.egg-info/SOURCES.txt +21 -0
  50. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/__init__.py +0 -0
  51. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/__main__.py +0 -0
  52. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/__init__.py +0 -0
  53. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/__init__.py +0 -0
  54. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/admin_errors.py +0 -0
  55. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/associations.py +0 -0
  56. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/backups.py +0 -0
  57. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/episodes.py +0 -0
  58. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/guidance.py +0 -0
  59. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/identity.py +0 -0
  60. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/ids.py +0 -0
  61. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/knowledge_builder.py +0 -0
  62. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/machine_config.py +0 -0
  63. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/memories.py +0 -0
  64. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/runtime_context.py +0 -0
  65. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/scenarios.py +0 -0
  66. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/session_state.py +0 -0
  67. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/settings.py +0 -0
  68. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/snapshots.py +0 -0
  69. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/structural_memory_relations.py +0 -0
  70. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/entities/utility.py +0 -0
  71. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/errors.py +0 -0
  72. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/__init__.py +0 -0
  73. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/concepts/__init__.py +0 -0
  74. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/concepts/relation_rules.py +0 -0
  75. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/concepts/search_text.py +0 -0
  76. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/episodes/__init__.py +0 -0
  77. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/episodes/event_content.py +0 -0
  78. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/episodes/knowledge_building.py +0 -0
  79. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/memories/__init__.py +0 -0
  80. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/memories/add_plan.py +0 -0
  81. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/memories/link_rules.py +0 -0
  82. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/memories/update_plan.py +0 -0
  83. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/__init__.py +0 -0
  84. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/bm25.py +0 -0
  85. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/context_pack.py +0 -0
  86. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/expansion.py +0 -0
  87. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/fusion_rrf.py +0 -0
  88. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/lexical_query.py +0 -0
  89. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/ontology_semantics.py +0 -0
  90. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/policies/retrieval/scoring.py +0 -0
  91. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/__init__.py +0 -0
  92. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/__init__.py +0 -0
  93. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/episode_repositories.py +0 -0
  94. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/guidance.py +0 -0
  95. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/knowledge_builder.py +0 -0
  96. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/problem_runs.py +0 -0
  97. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/retrieval_repositories.py +0 -0
  98. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/db/snapshots.py +0 -0
  99. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/embeddings/__init__.py +0 -0
  100. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/embeddings/provider.py +0 -0
  101. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/embeddings/retrieval.py +0 -0
  102. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/host_apps/__init__.py +0 -0
  103. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/local_state/__init__.py +0 -0
  104. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/local_state/session_state_store.py +0 -0
  105. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/local_state/shadow_git.py +0 -0
  106. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/reporting/__init__.py +0 -0
  107. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/reporting/metrics.py +0 -0
  108. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/system/__init__.py +0 -0
  109. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/system/clock.py +0 -0
  110. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/ports/system/idgen.py +0 -0
  111. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/__init__.py +0 -0
  112. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/__init__.py +0 -0
  113. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
  114. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
  115. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
  116. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
  117. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
  118. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/create_backup.py +0 -0
  119. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
  120. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
  121. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/initialize_runtime.py +0 -0
  122. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/restore_backup.py +0 -0
  123. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/admin/verify_backup.py +0 -0
  124. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/build_guidance.py +0 -0
  125. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/__init__.py +0 -0
  126. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/__init__.py +0 -0
  127. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/execute.py +0 -0
  128. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/request.py +0 -0
  129. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/add/result.py +0 -0
  130. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/containment_checks.py +0 -0
  131. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/embeddings.py +0 -0
  132. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/reference_checks.py +0 -0
  133. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/__init__.py +0 -0
  134. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/execute.py +0 -0
  135. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/request.py +0 -0
  136. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/show/result.py +0 -0
  137. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/__init__.py +0 -0
  138. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/execute.py +0 -0
  139. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/request.py +0 -0
  140. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/update/result.py +0 -0
  141. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/concepts/views.py +0 -0
  142. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/__init__.py +0 -0
  143. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/events/__init__.py +0 -0
  144. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/events/request.py +0 -0
  145. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
  146. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
  147. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
  148. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
  149. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
  150. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
  151. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
  152. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
  153. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
  154. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
  155. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
  156. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
  157. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
  158. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
  159. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/__init__.py +0 -0
  160. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/add/__init__.py +0 -0
  161. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/add/execute.py +0 -0
  162. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/add/request.py +0 -0
  163. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/add/result.py +0 -0
  164. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/effect_plan.py +0 -0
  165. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/reference_checks.py +0 -0
  166. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/update/__init__.py +0 -0
  167. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/update/execute.py +0 -0
  168. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/update/request.py +0 -0
  169. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/memories/update/result.py +0 -0
  170. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/metrics/__init__.py +0 -0
  171. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
  172. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/metrics/build_snapshot.py +0 -0
  173. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
  174. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/plan_execution.py +0 -0
  175. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/__init__.py +0 -0
  176. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
  177. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/build_context/execute.py +0 -0
  178. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
  179. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/context_pack_pipeline.py +0 -0
  180. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/deterministic_graph_recall.py +0 -0
  181. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/expansion.py +0 -0
  182. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/__init__.py +0 -0
  183. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/execute.py +0 -0
  184. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/request.py +0 -0
  185. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read/result.py +0 -0
  186. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/read_concepts.py +0 -0
  187. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/__init__.py +0 -0
  188. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/execute.py +0 -0
  189. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/request.py +0 -0
  190. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/recall/result.py +0 -0
  191. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/retrieval/seed_retrieval.py +0 -0
  192. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/scenarios/__init__.py +0 -0
  193. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/__init__.py +0 -0
  194. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/execute.py +0 -0
  195. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/request.py +0 -0
  196. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/scenarios/record/result.py +0 -0
  197. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/__init__.py +0 -0
  198. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
  199. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
  200. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
  201. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
  202. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
  203. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/code_delta_context/execute.py +0 -0
  204. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
  205. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/__init__.py +0 -0
  206. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/__init__.py +0 -0
  207. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/error_responses.py +0 -0
  208. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/__init__.py +0 -0
  209. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
  210. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/dependencies.py +0 -0
  211. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
  212. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/admin.py +0 -0
  213. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
  214. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/init.py +0 -0
  215. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
  216. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
  217. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
  218. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
  219. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
  220. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
  221. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
  222. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
  223. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +0 -0
  224. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
  225. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
  226. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
  227. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
  228. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +0 -0
  229. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
  230. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
  231. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
  232. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
  233. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
  234. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
  235. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
  236. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/session_state.py +0 -0
  237. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
  238. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
  239. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/snapshot.py +0 -0
  240. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
  241. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/main.py +0 -0
  242. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/operation_command.py +0 -0
  243. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/parser/__init__.py +0 -0
  244. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/__init__.py +0 -0
  245. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/init.py +0 -0
  246. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/json.py +0 -0
  247. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/presenters/metrics.py +0 -0
  248. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
  249. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
  250. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
  251. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
  252. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/memories.py +0 -0
  253. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
  254. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
  255. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
  256. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
  257. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/cli/request_parsing/teach.py +0 -0
  258. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/host_hooks/__init__.py +0 -0
  259. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
  260. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
  261. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/jobs/__init__.py +0 -0
  262. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/entrypoints/jobs/episode_sync.py +0 -0
  263. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/__init__.py +0 -0
  264. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/__init__.py +0 -0
  265. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/__init__.py +0 -0
  266. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/app_role_safety.py +0 -0
  267. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/__init__.py +0 -0
  268. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
  269. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
  270. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
  271. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/backups/restore.py +0 -0
  272. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/connection.py +0 -0
  273. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/instance_guard.py +0 -0
  274. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/migrations.py +0 -0
  275. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/privileges.py +0 -0
  276. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
  277. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
  278. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
  279. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
  280. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
  281. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/admin/storage_setup.py +0 -0
  282. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/__init__.py +0 -0
  283. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/engine.py +0 -0
  284. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/__init__.py +0 -0
  285. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/associations.py +0 -0
  286. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/concepts.py +0 -0
  287. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/episodes.py +0 -0
  288. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/evidence.py +0 -0
  289. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/experiences.py +0 -0
  290. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
  291. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
  292. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/memories.py +0 -0
  293. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/metadata.py +0 -0
  294. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
  295. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
  296. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
  297. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/utility.py +0 -0
  298. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/models/views.py +0 -0
  299. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
  300. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
  301. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
  302. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
  303. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
  304. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
  305. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
  306. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
  307. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
  308. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
  309. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
  310. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
  311. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
  312. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +0 -0
  313. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
  314. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
  315. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
  316. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
  317. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
  318. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +0 -0
  319. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +0 -0
  320. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/db/runtime/session.py +0 -0
  321. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/embeddings/__init__.py +0 -0
  322. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/embeddings/local_provider.py +0 -0
  323. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/embeddings/prewarm.py +0 -0
  324. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/embeddings/query_vector_search.py +0 -0
  325. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/__init__.py +0 -0
  326. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/__init__.py +0 -0
  327. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/claude.py +0 -0
  328. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/codex.py +0 -0
  329. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/cursor.py +0 -0
  330. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
  331. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/inspection.py +0 -0
  332. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
  333. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
  334. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
  335. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/paths.py +0 -0
  336. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/service.py +0 -0
  337. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/assets/types.py +0 -0
  338. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/__init__.py +0 -0
  339. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
  340. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
  341. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
  342. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
  343. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
  344. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/identity/resolver.py +0 -0
  345. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
  346. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
  347. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
  348. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
  349. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
  350. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
  351. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
  352. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
  353. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
  354. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
  355. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/__init__.py +0 -0
  356. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/init_lock.py +0 -0
  357. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/machine_config_store.py +0 -0
  358. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/operation_registration.py +0 -0
  359. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/paths.py +0 -0
  360. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/repo_registration_store.py +0 -0
  361. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/session_state_file_store.py +0 -0
  362. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/local_state/shadow_git_store.py +0 -0
  363. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/process/__init__.py +0 -0
  364. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/__init__.py +0 -0
  365. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/autostart.py +0 -0
  366. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/launcher.py +0 -0
  367. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
  368. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/poller.py +0 -0
  369. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/process/episode_sync/status_store.py +0 -0
  370. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/reporting/__init__.py +0 -0
  371. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/__init__.py +0 -0
  372. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
  373. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/browser.py +0 -0
  374. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/pager.py +0 -0
  375. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/reporting/metrics/render_html.py +0 -0
  376. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/system/__init__.py +0 -0
  377. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/system/clock.py +0 -0
  378. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/system/id_generator.py +0 -0
  379. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/system/package_upgrade.py +0 -0
  380. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/__init__.py +0 -0
  381. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
  382. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/operation_invocations.py +0 -0
  383. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/operation_polling.py +0 -0
  384. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/read_records.py +0 -0
  385. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/recall_records.py +0 -0
  386. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/recorder.py +0 -0
  387. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/records.py +0 -0
  388. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/sink.py +0 -0
  389. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/storage_protocols.py +0 -0
  390. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/sync_records.py +0 -0
  391. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/infrastructure/telemetry/write_records.py +0 -0
  392. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/settings/__init__.py +0 -0
  393. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/settings/defaults/create_policy.yaml +0 -0
  394. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/settings/defaults/read_policy.yaml +0 -0
  395. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/settings/defaults/runtime.yaml +0 -0
  396. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/settings/defaults/thresholds.yaml +0 -0
  397. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/settings/defaults/update_policy.yaml +0 -0
  398. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/__init__.py +0 -0
  399. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/admin.py +0 -0
  400. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/admin_db.py +0 -0
  401. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/admin_dependencies.py +0 -0
  402. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/admin_diagnose.py +0 -0
  403. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/analytics.py +0 -0
  404. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/backup.py +0 -0
  405. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/config.py +0 -0
  406. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/create_policy.py +0 -0
  407. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/db.py +0 -0
  408. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/dsn_resolution.py +0 -0
  409. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/embeddings.py +0 -0
  410. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/episode_poller.py +0 -0
  411. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/episode_sync_launcher.py +0 -0
  412. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/host_hooks.py +0 -0
  413. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/knowledge_builder.py +0 -0
  414. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/metrics.py +0 -0
  415. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/migrations.py +0 -0
  416. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/model_usage_backfill.py +0 -0
  417. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/operation_dependencies.py +0 -0
  418. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/read_policy.py +0 -0
  419. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/repo_context.py +0 -0
  420. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/repos.py +0 -0
  421. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/retrieval.py +0 -0
  422. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/runtime_admin.py +0 -0
  423. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/runtime_context.py +0 -0
  424. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/settings.py +0 -0
  425. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/snapshot_baseline.py +0 -0
  426. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/thresholds.py +0 -0
  427. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/update_policy.py +0 -0
  428. {shellbrain-0.1.39 → shellbrain-0.1.40}/app/startup/use_cases.py +0 -0
  429. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/__init__.py +0 -0
  430. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/_legacy_usage_views.py +0 -0
  431. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/_usage_view_sql.py +0 -0
  432. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/env.py +0 -0
  433. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260226_0001_initial_schema.py +0 -0
  434. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
  435. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
  436. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
  437. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
  438. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
  439. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
  440. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
  441. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
  442. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
  443. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
  444. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
  445. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
  446. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
  447. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260422_0015_problem_runs.py +0 -0
  448. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
  449. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
  450. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
  451. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260515_0019_scenario_records.py +0 -0
  452. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
  453. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
  454. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
  455. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
  456. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
  457. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
  458. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
  459. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
  460. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
  461. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
  462. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
  463. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
  464. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
  465. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
  466. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
  467. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
  468. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
  469. {shellbrain-0.1.39 → shellbrain-0.1.40}/migrations/versions/__init__.py +0 -0
  470. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/__init__.py +0 -0
  471. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/claude/CLAUDE.md +0 -0
  472. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/claude/skills/shellbrain/SKILL.md +0 -0
  473. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
  474. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/AGENTS.md +0 -0
  475. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
  476. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
  477. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/SKILL.md +0 -0
  478. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
  479. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
  480. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
  481. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
  482. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/references/request-shapes.md +0 -0
  483. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain/references/session-workflow.md +0 -0
  484. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
  485. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
  486. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
  487. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
  488. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/cursor/skills/shellbrain/SKILL.md +0 -0
  489. {shellbrain-0.1.39 → shellbrain-0.1.40}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
  490. {shellbrain-0.1.39 → shellbrain-0.1.40}/setup.cfg +0 -0
  491. {shellbrain-0.1.39 → shellbrain-0.1.40}/shellbrain.egg-info/dependency_links.txt +0 -0
  492. {shellbrain-0.1.39 → shellbrain-0.1.40}/shellbrain.egg-info/entry_points.txt +0 -0
  493. {shellbrain-0.1.39 → shellbrain-0.1.40}/shellbrain.egg-info/requires.txt +0 -0
  494. {shellbrain-0.1.39 → shellbrain-0.1.40}/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.39
3
+ Version: 0.1.40
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
@@ -141,6 +141,6 @@ Use Shellbrain in your agent of choice. Then, just work normally.
141
141
 
142
142
  ## Docs
143
143
 
144
- - [shellbrain.ai/humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
145
- - [shellbrain.ai/agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
146
- - [shellbrain.ai/architecture](https://shellbrain.ai/architecture/) — memory model, storage, and boundaries
144
+ - [For Humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
145
+ - [For Agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
146
+ - [Technical Docs](https://deepwiki.com/cucupac/shellbrain) — in-depth generated docs and codebase map
@@ -127,6 +127,6 @@ Use Shellbrain in your agent of choice. Then, just work normally.
127
127
 
128
128
  ## Docs
129
129
 
130
- - [shellbrain.ai/humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
131
- - [shellbrain.ai/agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
132
- - [shellbrain.ai/architecture](https://shellbrain.ai/architecture/) — memory model, storage, and boundaries
130
+ - [For Humans](https://shellbrain.ai/humans/) — install, upgrade, getting started
131
+ - [For Agents](https://shellbrain.ai/agents/) — agent workflow and write discipline
132
+ - [Technical Docs](https://deepwiki.com/cucupac/shellbrain) — in-depth generated docs and codebase map
@@ -310,6 +310,7 @@ class ConceptEvidence:
310
310
  commit_ref: str | None = None
311
311
  transcript_ref: str | None = None
312
312
  note: str | None = None
313
+ evidence_id: str | None = None
313
314
  created_at: datetime | None = None
314
315
 
315
316
 
@@ -147,6 +147,27 @@ class EvidenceLinkView:
147
147
  created_at: datetime | None = None
148
148
 
149
149
 
150
+ @dataclass(frozen=True, kw_only=True)
151
+ class EvidenceLinkedTarget:
152
+ """One target linked to a canonical evidence source."""
153
+
154
+ link_id: str
155
+ target: EvidenceTarget
156
+ role: EvidenceRole
157
+ created_at: datetime | None = None
158
+
159
+
160
+ @dataclass(frozen=True, kw_only=True)
161
+ class EvidenceDetail:
162
+ """One canonical evidence source plus all linked targets."""
163
+
164
+ id: EvidenceId
165
+ repo_id: RepoId
166
+ source: EvidenceSource
167
+ linked_targets: tuple[EvidenceLinkedTarget, ...]
168
+ created_at: datetime | None = None
169
+
170
+
150
171
  @dataclass(kw_only=True)
151
172
  class MemoryEvidenceLink:
152
173
  """This dataclass models a many-to-many link between shellbrain and evidence."""
@@ -11,7 +11,7 @@ class _StrictModel(BaseModel):
11
11
  model_config = ConfigDict(extra="forbid")
12
12
 
13
13
 
14
- InnerAgentName = Literal["build_context", "build_knowledge", "teach"]
14
+ InnerAgentName = Literal["build_context", "build_knowledge", "teach", "wiki_summary"]
15
15
  InnerAgentProviderName = str
16
16
  InnerAgentReasoningLevel = Literal["none", "minimal", "low", "medium", "high", "xhigh"]
17
17
  BuildContextStrategy = Literal[
@@ -66,4 +66,19 @@ class TeachKnowledgeSettings(_StrictModel):
66
66
  max_write_commands: int = Field(default=12, ge=1, le=200)
67
67
 
68
68
 
69
+ class WikiSummarySettings(_StrictModel):
70
+ """Typed model/runtime settings for generated wiki summaries."""
71
+
72
+ provider: InnerAgentProviderName = Field(min_length=1)
73
+ model: str = Field(min_length=1)
74
+ reasoning: InnerAgentReasoningLevel
75
+ timeout_seconds: int = Field(ge=1, le=1200)
76
+ prompt_version: str = Field(default="wiki-summary.v1", min_length=1)
77
+ max_summary_chars: int = Field(default=900, ge=100, le=4000)
78
+ running_refresh_stale_seconds: int = Field(default=3600, ge=60, le=86_400)
79
+ startup_batch_limit: int = Field(default=20, ge=0, le=200)
80
+ periodic_batch_limit: int = Field(default=5, ge=0, le=100)
81
+ periodic_seconds: int = Field(default=300, ge=30, le=86_400)
82
+
83
+
69
84
  InnerAgentSettings = BuildContextSettings
@@ -0,0 +1,17 @@
1
+ """Repository summaries used by cross-repo read surfaces."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class RepositorySummary:
10
+ """Compact read-only summary for one Shellbrain repository."""
11
+
12
+ repo_id: str
13
+ repo_root: str | None
14
+ concept_count: int
15
+ memory_count: int
16
+ evidence_count: int
17
+ last_seen_at: str | None
@@ -0,0 +1,114 @@
1
+ """Core entities for generated Shellbrain Wiki summaries."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ from datetime import datetime
7
+ from enum import Enum
8
+ from typing import Any
9
+
10
+
11
+ class WikiSummaryTargetType(str, Enum):
12
+ """Wiki targets that can have generated article prose."""
13
+
14
+ REPO = "repo"
15
+ CONCEPT = "concept"
16
+
17
+
18
+ class WikiSummaryLinkTargetType(str, Enum):
19
+ """Wiki page targets that generated prose can link to deterministically."""
20
+
21
+ CONCEPT = "concept"
22
+ MEMORY = "memory"
23
+ ANCHOR = "anchor"
24
+ EVIDENCE = "evidence"
25
+
26
+
27
+ class WikiSummaryGenerationStatus(str, Enum):
28
+ """Durable generation status for one cached wiki summary."""
29
+
30
+ PENDING = "pending"
31
+ OK = "ok"
32
+ FAILED = "failed"
33
+
34
+
35
+ class WikiSummaryFreshness(str, Enum):
36
+ """Read-time freshness state for a cached wiki summary."""
37
+
38
+ MISSING = "missing"
39
+ FRESH = "fresh"
40
+ STALE = "stale"
41
+ EXPIRED = "expired"
42
+ PENDING = "pending"
43
+ FAILED = "failed"
44
+
45
+
46
+ class WikiSummarySourceVelocity(str, Enum):
47
+ """How quickly one summary target's source facts are changing."""
48
+
49
+ HIGH = "high"
50
+ NORMAL = "normal"
51
+ QUIET = "quiet"
52
+
53
+
54
+ @dataclass(frozen=True, kw_only=True)
55
+ class WikiSummaryTarget:
56
+ """One repository-scoped wiki summary target."""
57
+
58
+ repo_id: str
59
+ target_type: WikiSummaryTargetType
60
+ target_id: str
61
+
62
+
63
+ @dataclass(frozen=True, kw_only=True)
64
+ class WikiSummaryInputSnapshot:
65
+ """Deterministic source payload used to generate one summary."""
66
+
67
+ target: WikiSummaryTarget
68
+ input_hash: str
69
+ source_refs: tuple[str, ...]
70
+ source_payload: dict[str, Any]
71
+ source_velocity: WikiSummarySourceVelocity
72
+ popularity_score: int
73
+ latest_source_at: datetime | None = None
74
+
75
+
76
+ @dataclass(frozen=True, kw_only=True)
77
+ class WikiSummaryRecord:
78
+ """Cached generated prose for one wiki target."""
79
+
80
+ target: WikiSummaryTarget
81
+ body: str | None
82
+ input_hash: str | None
83
+ source_refs: tuple[str, ...]
84
+ generation_status: WikiSummaryGenerationStatus
85
+ generated_at: datetime | None
86
+ model: str | None
87
+ prompt_version: str | None
88
+ last_error_code: str | None
89
+ last_error_message: str | None
90
+ created_at: datetime
91
+ updated_at: datetime
92
+
93
+
94
+ @dataclass(frozen=True, kw_only=True)
95
+ class WikiSummaryLinkTarget:
96
+ """One deterministic wiki page target that may be linked from summary prose."""
97
+
98
+ target_type: WikiSummaryLinkTargetType
99
+ target_id: str
100
+ label: str
101
+ slug: str | None = None
102
+
103
+
104
+ @dataclass(frozen=True, kw_only=True)
105
+ class WikiSummaryView:
106
+ """Summary state attached to a rendered wiki page model."""
107
+
108
+ target: WikiSummaryTarget
109
+ freshness: WikiSummaryFreshness
110
+ body: str | None
111
+ generated_at: datetime | None
112
+ stale_reason: str | None
113
+ generation_status: WikiSummaryGenerationStatus | None
114
+ link_targets: tuple[WikiSummaryLinkTarget, ...] = ()
@@ -0,0 +1,60 @@
1
+ """Pure freshness policy for generated wiki summaries."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime, timedelta
6
+
7
+ from app.core.entities.wiki_summaries import (
8
+ WikiSummaryFreshness,
9
+ WikiSummaryGenerationStatus,
10
+ WikiSummaryInputSnapshot,
11
+ WikiSummaryRecord,
12
+ WikiSummarySourceVelocity,
13
+ )
14
+
15
+
16
+ _EXPIRATION_BY_VELOCITY = {
17
+ WikiSummarySourceVelocity.HIGH: timedelta(days=3),
18
+ WikiSummarySourceVelocity.NORMAL: timedelta(days=14),
19
+ WikiSummarySourceVelocity.QUIET: timedelta(days=60),
20
+ }
21
+
22
+
23
+ def determine_wiki_summary_freshness(
24
+ *,
25
+ record: WikiSummaryRecord | None,
26
+ snapshot: WikiSummaryInputSnapshot,
27
+ now: datetime,
28
+ ) -> tuple[WikiSummaryFreshness, str | None]:
29
+ """Return freshness and a compact reason for one cached summary."""
30
+
31
+ if record is None:
32
+ return WikiSummaryFreshness.MISSING, "summary has not been generated"
33
+ if record.generation_status == WikiSummaryGenerationStatus.PENDING:
34
+ return WikiSummaryFreshness.PENDING, "summary generation is running"
35
+ if record.generation_status == WikiSummaryGenerationStatus.FAILED:
36
+ reason = record.last_error_code or "generation failed"
37
+ return WikiSummaryFreshness.FAILED, reason
38
+ if record.input_hash != snapshot.input_hash:
39
+ return WikiSummaryFreshness.STALE, "source facts changed"
40
+ if record.generated_at is None:
41
+ return WikiSummaryFreshness.STALE, "summary has no generated timestamp"
42
+
43
+ ttl = _EXPIRATION_BY_VELOCITY[snapshot.source_velocity]
44
+ if now - record.generated_at > ttl:
45
+ return WikiSummaryFreshness.EXPIRED, (
46
+ f"{snapshot.source_velocity.value} velocity summary exceeded "
47
+ f"{ttl.days} day freshness window"
48
+ )
49
+ return WikiSummaryFreshness.FRESH, None
50
+
51
+
52
+ def needs_wiki_summary_refresh(freshness: WikiSummaryFreshness) -> bool:
53
+ """Return whether this freshness state should enqueue background refresh."""
54
+
55
+ return freshness in {
56
+ WikiSummaryFreshness.MISSING,
57
+ WikiSummaryFreshness.STALE,
58
+ WikiSummaryFreshness.EXPIRED,
59
+ WikiSummaryFreshness.FAILED,
60
+ }
@@ -37,6 +37,12 @@ class IConceptsRepo(ABC):
37
37
  ) -> Sequence[Concept]:
38
38
  """This method returns concepts for the provided ids."""
39
39
 
40
+ @abstractmethod
41
+ def list_concepts(
42
+ self, *, repo_id: str, statuses: Sequence[str]
43
+ ) -> Sequence[Concept]:
44
+ """This method returns concepts for one repo and status set."""
45
+
40
46
  @abstractmethod
41
47
  def list_contains_edges(self, *, repo_id: str) -> Sequence[ConceptRelation]:
42
48
  """This method returns active contains edges for cycle validation."""
@@ -104,6 +110,12 @@ class IConceptsRepo(ABC):
104
110
  ) -> Sequence[dict[str, Any]]:
105
111
  """This method returns concept-link matches for displayed memory ids."""
106
112
 
113
+ @abstractmethod
114
+ def find_concepts_for_anchor_ids(
115
+ self, *, repo_id: str, anchor_ids: Sequence[str]
116
+ ) -> Sequence[dict[str, Any]]:
117
+ """This method returns concept-grounding matches for displayed anchors."""
118
+
107
119
  @abstractmethod
108
120
  def upsert_embedding(
109
121
  self,
@@ -5,6 +5,7 @@ from typing import Sequence
5
5
 
6
6
  from app.core.entities.associations import AssociationEdge, AssociationObservation
7
7
  from app.core.entities.evidence import (
8
+ EvidenceDetail,
8
9
  EvidenceLinkView,
9
10
  EvidenceRole,
10
11
  EvidenceSource,
@@ -30,6 +31,12 @@ class IMemoriesRepo(ABC):
30
31
  def list_by_ids(self, ids: Sequence[str]) -> Sequence[Memory]:
31
32
  """This method fetches memories in the input identifier order."""
32
33
 
34
+ @abstractmethod
35
+ def list_recent(
36
+ self, *, repo_id: str, statuses: Sequence[str], limit: int
37
+ ) -> Sequence[Memory]:
38
+ """Fetch recent memories for one repository in newest-first order."""
39
+
33
40
  @abstractmethod
34
41
  def update_lifecycle(self, memory: Memory) -> bool:
35
42
  """Update lifecycle fields for one concrete memory."""
@@ -96,3 +103,9 @@ class IEvidenceRepo(ABC):
96
103
  self, *, repo_id: str, targets: Sequence[EvidenceTarget]
97
104
  ) -> Sequence[EvidenceLinkView]:
98
105
  """Resolve evidence links for targets through the unified evidence API."""
106
+
107
+ @abstractmethod
108
+ def get_evidence_detail(
109
+ self, *, repo_id: str, evidence_id: str
110
+ ) -> EvidenceDetail | None:
111
+ """Resolve one canonical evidence source plus linked targets."""
@@ -0,0 +1,16 @@
1
+ """Repository index read ports."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from abc import ABC, abstractmethod
6
+ from typing import Sequence
7
+
8
+ from app.core.entities.repositories import RepositorySummary
9
+
10
+
11
+ class IRepositoryIndexRepo(ABC):
12
+ """Read-only access to repositories known to Shellbrain."""
13
+
14
+ @abstractmethod
15
+ def list_repositories(self) -> Sequence[RepositorySummary]:
16
+ """Return repositories that have Shellbrain knowledge or telemetry rows."""
@@ -15,7 +15,9 @@ from app.core.ports.db.memory_repositories import (
15
15
  IUtilityRepo,
16
16
  )
17
17
  from app.core.ports.db.problem_runs import IProblemRunsRepo
18
+ from app.core.ports.db.repository_index import IRepositoryIndexRepo
18
19
  from app.core.ports.db.snapshots import ISnapshotsRepo
20
+ from app.core.ports.db.wiki_summaries import IWikiSummaryRepo
19
21
  from app.core.ports.embeddings.retrieval import IVectorSearch
20
22
  from app.core.ports.db.retrieval_repositories import (
21
23
  IConceptKeywordRetrievalRepo,
@@ -44,7 +46,9 @@ class IUnitOfWork(ABC):
44
46
  guidance: IPendingUtilityCandidatesRepo
45
47
  knowledge_build_runs: IKnowledgeBuildRunsRepo
46
48
  problem_runs: IProblemRunsRepo
49
+ repository_index: IRepositoryIndexRepo
47
50
  snapshots: ISnapshotsRepo
51
+ wiki_summaries: IWikiSummaryRepo
48
52
  vector_search: IVectorSearch | None
49
53
 
50
54
  @abstractmethod
@@ -0,0 +1,64 @@
1
+ """Repository port for generated wiki summary cache records."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from abc import ABC, abstractmethod
6
+ from datetime import datetime
7
+ from typing import Sequence
8
+
9
+ from app.core.entities.wiki_summaries import (
10
+ WikiSummaryInputSnapshot,
11
+ WikiSummaryRecord,
12
+ WikiSummaryTarget,
13
+ )
14
+
15
+
16
+ class IWikiSummaryRepo(ABC):
17
+ """Read and write cached generated wiki summaries."""
18
+
19
+ @abstractmethod
20
+ def get(self, target: WikiSummaryTarget) -> WikiSummaryRecord | None:
21
+ """Return the cached summary for one target when present."""
22
+
23
+ @abstractmethod
24
+ def acquire_refresh(
25
+ self,
26
+ *,
27
+ snapshot: WikiSummaryInputSnapshot,
28
+ model: str,
29
+ prompt_version: str,
30
+ now: datetime,
31
+ stale_running_before: datetime,
32
+ ) -> bool:
33
+ """Mark one target pending when no fresh refresh is already running."""
34
+
35
+ @abstractmethod
36
+ def record_success(
37
+ self,
38
+ *,
39
+ snapshot: WikiSummaryInputSnapshot,
40
+ body: str,
41
+ model: str,
42
+ prompt_version: str,
43
+ now: datetime,
44
+ ) -> None:
45
+ """Persist generated summary prose for one target."""
46
+
47
+ @abstractmethod
48
+ def record_failure(
49
+ self,
50
+ *,
51
+ snapshot: WikiSummaryInputSnapshot,
52
+ model: str,
53
+ prompt_version: str,
54
+ error_code: str,
55
+ error_message: str,
56
+ now: datetime,
57
+ ) -> None:
58
+ """Persist a failed refresh attempt without deleting prior prose."""
59
+
60
+ @abstractmethod
61
+ def list_existing_targets(
62
+ self, *, repo_ids: Sequence[str]
63
+ ) -> Sequence[WikiSummaryTarget]:
64
+ """Return summary targets that already have cache rows for these repos."""
@@ -106,6 +106,22 @@ class TeachKnowledgeAgentRequest(_StrictModel):
106
106
  max_write_commands: int = Field(ge=1, le=200)
107
107
 
108
108
 
109
+ class WikiSummaryAgentRequest(_StrictModel):
110
+ """One provider request to generate a cached wiki summary."""
111
+
112
+ agent_name: InnerAgentName = "wiki_summary"
113
+ provider: InnerAgentProviderName = Field(min_length=1)
114
+ model: str = Field(min_length=1)
115
+ reasoning: InnerAgentReasoningLevel
116
+ timeout_seconds: int = Field(ge=1, le=1200)
117
+ prompt_version: str = Field(min_length=1)
118
+ target_type: str = Field(min_length=1)
119
+ repo_id: str = Field(min_length=1)
120
+ target_id: str = Field(min_length=1)
121
+ source_payload: dict[str, Any]
122
+ max_summary_chars: int = Field(ge=100, le=4000)
123
+
124
+
109
125
  class BuildKnowledgeAgentResult(_StrictModel):
110
126
  """Provider-neutral result from one build_knowledge run."""
111
127
 
@@ -131,6 +147,27 @@ class BuildKnowledgeAgentResult(_StrictModel):
131
147
  code_trace: dict[str, Any] = Field(default_factory=dict)
132
148
 
133
149
 
150
+ class WikiSummaryAgentResult(_StrictModel):
151
+ """Provider-neutral result from one generated wiki summary run."""
152
+
153
+ status: InnerAgentRunStatus
154
+ provider: InnerAgentProviderName = Field(min_length=1)
155
+ model: str
156
+ reasoning: InnerAgentReasoningLevel
157
+ timeout_seconds: int | None = Field(default=None, ge=1, le=1200)
158
+ duration_ms: int = Field(default=0, ge=0)
159
+ input_tokens: int | None = Field(default=None, ge=0)
160
+ output_tokens: int | None = Field(default=None, ge=0)
161
+ reasoning_output_tokens: int | None = Field(default=None, ge=0)
162
+ cached_input_tokens_total: int | None = Field(default=None, ge=0)
163
+ cache_read_input_tokens: int | None = Field(default=None, ge=0)
164
+ cache_creation_input_tokens: int | None = Field(default=None, ge=0)
165
+ capture_quality: TokenCaptureQuality | None = None
166
+ body: str | None = None
167
+ error_code: str | None = None
168
+ error_message: str | None = None
169
+
170
+
134
171
  class IInnerAgentRunner(Protocol):
135
172
  """Behavior protocol for bounded inner-agent synthesis providers."""
136
173
 
@@ -154,3 +191,12 @@ class ITeachKnowledgeAgentRunner(Protocol):
154
191
  self, request: TeachKnowledgeAgentRequest
155
192
  ) -> BuildKnowledgeAgentResult:
156
193
  """Run one teach request and return a provider-neutral result."""
194
+
195
+
196
+ class IWikiSummaryAgentRunner(Protocol):
197
+ """Behavior protocol for generated wiki summary providers."""
198
+
199
+ def run_wiki_summary(
200
+ self, request: WikiSummaryAgentRequest
201
+ ) -> WikiSummaryAgentResult:
202
+ """Run one wiki summary request and return provider-neutral prose."""
@@ -0,0 +1,27 @@
1
+ """Shellbrain Wiki read-only workflows."""
2
+
3
+ from app.core.use_cases.wiki.execute import (
4
+ wiki_anchor_page,
5
+ wiki_concept_facet,
6
+ wiki_concept_page,
7
+ wiki_evidence_page,
8
+ wiki_home,
9
+ wiki_index,
10
+ wiki_memory_neighbors,
11
+ wiki_memory_page,
12
+ wiki_memory_sources,
13
+ wiki_search,
14
+ )
15
+
16
+ __all__ = [
17
+ "wiki_anchor_page",
18
+ "wiki_concept_facet",
19
+ "wiki_concept_page",
20
+ "wiki_evidence_page",
21
+ "wiki_home",
22
+ "wiki_index",
23
+ "wiki_memory_neighbors",
24
+ "wiki_memory_page",
25
+ "wiki_memory_sources",
26
+ "wiki_search",
27
+ ]