shellbrain 0.1.42__tar.gz → 0.1.44__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 (497) hide show
  1. {shellbrain-0.1.42 → shellbrain-0.1.44}/PKG-INFO +1 -1
  2. shellbrain-0.1.44/app/infrastructure/host_apps/inner_agents/claude_cli.py +477 -0
  3. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/inner_agents/codex_cli.py +1 -1
  4. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/settings/internal-agents/defaults.yaml +8 -4
  5. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/internal_agent_config.py +3 -0
  6. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/internal_agents.py +68 -40
  7. shellbrain-0.1.44/onboarding_assets/claude/CLAUDE.md +40 -0
  8. shellbrain-0.1.44/onboarding_assets/codex/AGENTS.md +40 -0
  9. {shellbrain-0.1.42 → shellbrain-0.1.44}/pyproject.toml +1 -1
  10. {shellbrain-0.1.42 → shellbrain-0.1.44}/shellbrain.egg-info/PKG-INFO +1 -1
  11. {shellbrain-0.1.42 → shellbrain-0.1.44}/shellbrain.egg-info/SOURCES.txt +1 -0
  12. shellbrain-0.1.42/onboarding_assets/claude/CLAUDE.md +0 -52
  13. shellbrain-0.1.42/onboarding_assets/codex/AGENTS.md +0 -52
  14. {shellbrain-0.1.42 → shellbrain-0.1.44}/README.md +0 -0
  15. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/__init__.py +0 -0
  16. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/__main__.py +0 -0
  17. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/__init__.py +0 -0
  18. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/__init__.py +0 -0
  19. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/admin_errors.py +0 -0
  20. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/associations.py +0 -0
  21. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/backups.py +0 -0
  22. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/concepts.py +0 -0
  23. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/episodes.py +0 -0
  24. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/evidence.py +0 -0
  25. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/guidance.py +0 -0
  26. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/identity.py +0 -0
  27. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/ids.py +0 -0
  28. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/inner_agents.py +0 -0
  29. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/knowledge_builder.py +0 -0
  30. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/machine_config.py +0 -0
  31. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/memories.py +0 -0
  32. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/repositories.py +0 -0
  33. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/runtime_context.py +0 -0
  34. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/scenarios.py +0 -0
  35. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/session_state.py +0 -0
  36. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/settings.py +0 -0
  37. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/snapshots.py +0 -0
  38. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/structural_memory_relations.py +0 -0
  39. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/utility.py +0 -0
  40. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/entities/wiki_summaries.py +0 -0
  41. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/errors.py +0 -0
  42. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/__init__.py +0 -0
  43. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/concepts/__init__.py +0 -0
  44. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/concepts/relation_rules.py +0 -0
  45. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/concepts/search_text.py +0 -0
  46. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/episodes/__init__.py +0 -0
  47. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/episodes/event_content.py +0 -0
  48. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/episodes/knowledge_building.py +0 -0
  49. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/memories/__init__.py +0 -0
  50. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/memories/add_plan.py +0 -0
  51. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/memories/link_rules.py +0 -0
  52. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/memories/update_plan.py +0 -0
  53. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/__init__.py +0 -0
  54. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/bm25.py +0 -0
  55. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/context_pack.py +0 -0
  56. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/expansion.py +0 -0
  57. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/fusion_rrf.py +0 -0
  58. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/lexical_query.py +0 -0
  59. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/ontology_semantics.py +0 -0
  60. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/retrieval/scoring.py +0 -0
  61. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/policies/wiki_summary_freshness.py +0 -0
  62. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/__init__.py +0 -0
  63. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/__init__.py +0 -0
  64. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/concept_repositories.py +0 -0
  65. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/episode_repositories.py +0 -0
  66. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/guidance.py +0 -0
  67. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/knowledge_builder.py +0 -0
  68. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/memory_repositories.py +0 -0
  69. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/problem_runs.py +0 -0
  70. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/repository_index.py +0 -0
  71. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/retrieval_repositories.py +0 -0
  72. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/snapshots.py +0 -0
  73. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/unit_of_work.py +0 -0
  74. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/db/wiki_summaries.py +0 -0
  75. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/embeddings/__init__.py +0 -0
  76. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/embeddings/provider.py +0 -0
  77. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/embeddings/retrieval.py +0 -0
  78. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/host_apps/__init__.py +0 -0
  79. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/host_apps/inner_agents.py +0 -0
  80. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/local_state/__init__.py +0 -0
  81. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/local_state/session_state_store.py +0 -0
  82. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/local_state/shadow_git.py +0 -0
  83. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/reporting/__init__.py +0 -0
  84. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/reporting/metrics.py +0 -0
  85. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/system/__init__.py +0 -0
  86. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/system/clock.py +0 -0
  87. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/ports/system/idgen.py +0 -0
  88. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/__init__.py +0 -0
  89. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/__init__.py +0 -0
  90. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/analytics_diagnostics.py +0 -0
  91. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/backfill_model_usage/__init__.py +0 -0
  92. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/backfill_model_usage/backfill_model_usage.py +0 -0
  93. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/backfill_model_usage/request.py +0 -0
  94. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/backfill_model_usage/result.py +0 -0
  95. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/create_backup.py +0 -0
  96. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/diagnose_runtime.py +0 -0
  97. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/generate_analytics_report.py +0 -0
  98. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/initialize_runtime.py +0 -0
  99. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/restore_backup.py +0 -0
  100. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/admin/verify_backup.py +0 -0
  101. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/build_guidance.py +0 -0
  102. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/__init__.py +0 -0
  103. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/add/__init__.py +0 -0
  104. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/add/execute.py +0 -0
  105. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/add/request.py +0 -0
  106. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/add/result.py +0 -0
  107. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/containment_checks.py +0 -0
  108. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/embeddings.py +0 -0
  109. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/reference_checks.py +0 -0
  110. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/show/__init__.py +0 -0
  111. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/show/execute.py +0 -0
  112. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/show/request.py +0 -0
  113. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/show/result.py +0 -0
  114. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/update/__init__.py +0 -0
  115. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/update/execute.py +0 -0
  116. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/update/request.py +0 -0
  117. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/update/result.py +0 -0
  118. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/concepts/views.py +0 -0
  119. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/__init__.py +0 -0
  120. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/events/__init__.py +0 -0
  121. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/events/request.py +0 -0
  122. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/sync_discovered_host_session.py +0 -0
  123. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/sync_episode/__init__.py +0 -0
  124. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/sync_episode/request.py +0 -0
  125. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/sync_episode/result.py +0 -0
  126. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/episodes/sync_episode/sync_episode.py +0 -0
  127. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/__init__.py +0 -0
  128. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/build_knowledge/__init__.py +0 -0
  129. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/build_knowledge/execute.py +0 -0
  130. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/build_knowledge/request.py +0 -0
  131. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/build_knowledge/result.py +0 -0
  132. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/teach_knowledge/__init__.py +0 -0
  133. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/teach_knowledge/execute.py +0 -0
  134. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/teach_knowledge/request.py +0 -0
  135. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/knowledge_builder/teach_knowledge/result.py +0 -0
  136. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/__init__.py +0 -0
  137. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/add/__init__.py +0 -0
  138. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/add/execute.py +0 -0
  139. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/add/request.py +0 -0
  140. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/add/result.py +0 -0
  141. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/effect_plan.py +0 -0
  142. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/reference_checks.py +0 -0
  143. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/update/__init__.py +0 -0
  144. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/update/execute.py +0 -0
  145. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/update/request.py +0 -0
  146. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/memories/update/result.py +0 -0
  147. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/metrics/__init__.py +0 -0
  148. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/metrics/analyze_agent_behavior.py +0 -0
  149. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/metrics/build_snapshot.py +0 -0
  150. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/metrics/generate_dashboard.py +0 -0
  151. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/plan_execution.py +0 -0
  152. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/__init__.py +0 -0
  153. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/build_context/__init__.py +0 -0
  154. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/build_context/execute.py +0 -0
  155. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/concept_seed_retrieval.py +0 -0
  156. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/context_pack_pipeline.py +0 -0
  157. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/deterministic_graph_recall.py +0 -0
  158. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/expansion.py +0 -0
  159. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/read/__init__.py +0 -0
  160. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/read/execute.py +0 -0
  161. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/read/request.py +0 -0
  162. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/read/result.py +0 -0
  163. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/read_concepts.py +0 -0
  164. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/recall/__init__.py +0 -0
  165. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/recall/execute.py +0 -0
  166. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/recall/request.py +0 -0
  167. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/recall/result.py +0 -0
  168. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/retrieval/seed_retrieval.py +0 -0
  169. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/scenarios/__init__.py +0 -0
  170. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/scenarios/record/__init__.py +0 -0
  171. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/scenarios/record/execute.py +0 -0
  172. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/scenarios/record/request.py +0 -0
  173. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/scenarios/record/result.py +0 -0
  174. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/__init__.py +0 -0
  175. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/capture_snapshot/__init__.py +0 -0
  176. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/capture_snapshot/execute.py +0 -0
  177. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/capture_snapshot/request.py +0 -0
  178. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/capture_snapshot/result.py +0 -0
  179. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/code_delta_context/__init__.py +0 -0
  180. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/code_delta_context/execute.py +0 -0
  181. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/snapshots/code_delta_context/request.py +0 -0
  182. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/wiki/__init__.py +0 -0
  183. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/wiki/execute.py +0 -0
  184. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/wiki/request.py +0 -0
  185. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/wiki/result.py +0 -0
  186. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/core/use_cases/wiki/summaries.py +0 -0
  187. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/__init__.py +0 -0
  188. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/__init__.py +0 -0
  189. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/error_responses.py +0 -0
  190. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/__init__.py +0 -0
  191. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/cli_operation.py +0 -0
  192. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/dependencies.py +0 -0
  193. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/human/__init__.py +0 -0
  194. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/human/admin.py +0 -0
  195. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/human/admin_dependencies.py +0 -0
  196. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/human/init.py +0 -0
  197. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/human/metrics.py +0 -0
  198. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/human/upgrade.py +0 -0
  199. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/human/wiki.py +0 -0
  200. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/__init__.py +0 -0
  201. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/concepts/__init__.py +0 -0
  202. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/concepts/add.py +0 -0
  203. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/concepts/show.py +0 -0
  204. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/concepts/update.py +0 -0
  205. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/episodes/__init__.py +0 -0
  206. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/episodes/events.py +0 -0
  207. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/episodes/selection.py +0 -0
  208. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/episodes/serialization.py +0 -0
  209. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/memories/__init__.py +0 -0
  210. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/memories/add.py +0 -0
  211. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/memories/update.py +0 -0
  212. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/memories/utility_vote_evidence.py +0 -0
  213. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/retrieval/__init__.py +0 -0
  214. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/retrieval/execution.py +0 -0
  215. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/retrieval/read.py +0 -0
  216. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/scenarios/__init__.py +0 -0
  217. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/internal_agent/scenarios/record.py +0 -0
  218. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/result_envelopes.py +0 -0
  219. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/session_state.py +0 -0
  220. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/working_agent/__init__.py +0 -0
  221. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/working_agent/recall.py +0 -0
  222. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/working_agent/snapshot.py +0 -0
  223. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/handlers/working_agent/teach.py +0 -0
  224. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/main.py +0 -0
  225. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/operation_command.py +0 -0
  226. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/parser/__init__.py +0 -0
  227. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/parser/builder.py +0 -0
  228. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/presenters/__init__.py +0 -0
  229. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/presenters/init.py +0 -0
  230. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/presenters/json.py +0 -0
  231. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/presenters/metrics.py +0 -0
  232. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/__init__.py +0 -0
  233. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/concepts.py +0 -0
  234. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/episodes.py +0 -0
  235. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/hydration.py +0 -0
  236. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/memories.py +0 -0
  237. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/payload_validation.py +0 -0
  238. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/prepared.py +0 -0
  239. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/retrieval.py +0 -0
  240. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/scenarios.py +0 -0
  241. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/request_parsing/teach.py +0 -0
  242. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/runner.py +0 -0
  243. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/cli/runtime.py +0 -0
  244. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/host_hooks/__init__.py +0 -0
  245. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/host_hooks/claude_session_start.py +0 -0
  246. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/host_hooks/cursor_statusline.py +0 -0
  247. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/jobs/__init__.py +0 -0
  248. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/entrypoints/jobs/episode_sync.py +0 -0
  249. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/__init__.py +0 -0
  250. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/__init__.py +0 -0
  251. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/__init__.py +0 -0
  252. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/app_role_safety.py +0 -0
  253. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/backups/__init__.py +0 -0
  254. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/backups/destructive_guard.py +0 -0
  255. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/backups/logical_backup.py +0 -0
  256. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/backups/manifest_store.py +0 -0
  257. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/backups/restore.py +0 -0
  258. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/connection.py +0 -0
  259. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/instance_guard.py +0 -0
  260. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/migrations.py +0 -0
  261. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/privileges.py +0 -0
  262. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/provisioning/__init__.py +0 -0
  263. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/provisioning/docker_prerequisites.py +0 -0
  264. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/provisioning/external_postgres.py +0 -0
  265. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/provisioning/init_effects.py +0 -0
  266. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/provisioning/managed_local.py +0 -0
  267. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/admin/storage_setup.py +0 -0
  268. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/__init__.py +0 -0
  269. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/engine.py +0 -0
  270. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/__init__.py +0 -0
  271. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/associations.py +0 -0
  272. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/concepts.py +0 -0
  273. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/episodes.py +0 -0
  274. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/evidence.py +0 -0
  275. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/experiences.py +0 -0
  276. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/instance_metadata.py +0 -0
  277. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/knowledge_builder.py +0 -0
  278. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/memories.py +0 -0
  279. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/metadata.py +0 -0
  280. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/problem_runs.py +0 -0
  281. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/registry.py +0 -0
  282. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/snapshots.py +0 -0
  283. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/telemetry.py +0 -0
  284. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/utility.py +0 -0
  285. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/views.py +0 -0
  286. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/models/wiki_summaries.py +0 -0
  287. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/queries/__init__.py +0 -0
  288. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/queries/agent_behavior.py +0 -0
  289. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/queries/analytics.py +0 -0
  290. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/queries/metrics.py +0 -0
  291. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/queries/metrics_adapter.py +0 -0
  292. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/queries/model_usage_backfill.py +0 -0
  293. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/__init__.py +0 -0
  294. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/__init__.py +0 -0
  295. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/associations_repo.py +0 -0
  296. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/concepts_repo.py +0 -0
  297. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/episodes_repo.py +0 -0
  298. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/evidence_repo.py +0 -0
  299. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/experiences_repo.py +0 -0
  300. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/knowledge_builder_repo.py +0 -0
  301. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/memories_repo.py +0 -0
  302. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/problem_runs_repo.py +0 -0
  303. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/read_policy_repo.py +0 -0
  304. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/repository_index_repo.py +0 -0
  305. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/snapshots_repo.py +0 -0
  306. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/telemetry_repo.py +0 -0
  307. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/utility_repo.py +0 -0
  308. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/relational/wiki_summaries_repo.py +0 -0
  309. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/semantic/__init__.py +0 -0
  310. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/semantic/concept_retrieval_repo.py +0 -0
  311. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/semantic/keyword_retrieval_repo.py +0 -0
  312. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/repos/semantic/semantic_retrieval_repo.py +0 -0
  313. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/session.py +0 -0
  314. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/db/runtime/uow.py +0 -0
  315. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/embeddings/__init__.py +0 -0
  316. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/embeddings/local_provider.py +0 -0
  317. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/embeddings/prewarm.py +0 -0
  318. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/embeddings/query_vector_search.py +0 -0
  319. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/__init__.py +0 -0
  320. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/__init__.py +0 -0
  321. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/claude.py +0 -0
  322. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/codex.py +0 -0
  323. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/cursor.py +0 -0
  324. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/cursor_statusline_config.py +0 -0
  325. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/inspection.py +0 -0
  326. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/managed_markdown.py +0 -0
  327. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/managed_tree.py +0 -0
  328. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/packaged_assets.py +0 -0
  329. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/paths.py +0 -0
  330. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/service.py +0 -0
  331. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/assets/types.py +0 -0
  332. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/identity/__init__.py +0 -0
  333. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/identity/claude_hook_install.py +0 -0
  334. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/identity/claude_runtime.py +0 -0
  335. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/identity/codex_runtime.py +0 -0
  336. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/identity/compatibility.py +0 -0
  337. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/identity/cursor_statusline.py +0 -0
  338. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/identity/resolver.py +0 -0
  339. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/inner_agents/__init__.py +0 -0
  340. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/inner_agents/output_parser.py +0 -0
  341. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/inner_agents/prompt.py +0 -0
  342. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/__init__.py +0 -0
  343. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/claude_code.py +0 -0
  344. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/codex.py +0 -0
  345. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/cursor.py +0 -0
  346. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/model_usage.py +0 -0
  347. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/normalization.py +0 -0
  348. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/session_selection.py +0 -0
  349. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/source_discovery.py +0 -0
  350. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/host_apps/transcripts/tool_filter.py +0 -0
  351. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/__init__.py +0 -0
  352. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/init_lock.py +0 -0
  353. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/machine_config_store.py +0 -0
  354. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/operation_registration.py +0 -0
  355. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/paths.py +0 -0
  356. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/repo_registration_store.py +0 -0
  357. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/session_state_file_store.py +0 -0
  358. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/local_state/shadow_git_store.py +0 -0
  359. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/process/__init__.py +0 -0
  360. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/process/episode_sync/__init__.py +0 -0
  361. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/process/episode_sync/autostart.py +0 -0
  362. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/process/episode_sync/launcher.py +0 -0
  363. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/process/episode_sync/lock_file.py +0 -0
  364. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/process/episode_sync/poller.py +0 -0
  365. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/process/episode_sync/status_store.py +0 -0
  366. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/__init__.py +0 -0
  367. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/metrics/__init__.py +0 -0
  368. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/metrics/artifacts.py +0 -0
  369. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/metrics/browser.py +0 -0
  370. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/metrics/pager.py +0 -0
  371. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/metrics/render_html.py +0 -0
  372. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/wiki/__init__.py +0 -0
  373. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/wiki/browser.py +0 -0
  374. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/wiki/render_html.py +0 -0
  375. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/wiki/server.py +0 -0
  376. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/reporting/wiki/summary_worker.py +0 -0
  377. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/system/__init__.py +0 -0
  378. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/system/clock.py +0 -0
  379. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/system/id_generator.py +0 -0
  380. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/system/package_upgrade.py +0 -0
  381. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/__init__.py +0 -0
  382. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/inner_agent_records.py +0 -0
  383. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/operation_invocations.py +0 -0
  384. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/operation_polling.py +0 -0
  385. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/read_records.py +0 -0
  386. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/recall_records.py +0 -0
  387. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/recorder.py +0 -0
  388. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/records.py +0 -0
  389. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/sink.py +0 -0
  390. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/storage_protocols.py +0 -0
  391. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/sync_records.py +0 -0
  392. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/infrastructure/telemetry/write_records.py +0 -0
  393. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/settings/__init__.py +0 -0
  394. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/settings/defaults/create_policy.yaml +0 -0
  395. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/settings/defaults/read_policy.yaml +0 -0
  396. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/settings/defaults/runtime.yaml +0 -0
  397. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/settings/defaults/thresholds.yaml +0 -0
  398. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/settings/defaults/update_policy.yaml +0 -0
  399. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/__init__.py +0 -0
  400. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/admin.py +0 -0
  401. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/admin_db.py +0 -0
  402. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/admin_dependencies.py +0 -0
  403. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/admin_diagnose.py +0 -0
  404. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/analytics.py +0 -0
  405. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/backup.py +0 -0
  406. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/cli.py +0 -0
  407. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/cli_runtime.py +0 -0
  408. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/config.py +0 -0
  409. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/create_policy.py +0 -0
  410. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/db.py +0 -0
  411. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/dsn_resolution.py +0 -0
  412. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/embeddings.py +0 -0
  413. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/episode_poller.py +0 -0
  414. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/episode_sync_launcher.py +0 -0
  415. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/host_hooks.py +0 -0
  416. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/knowledge_builder.py +0 -0
  417. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/metrics.py +0 -0
  418. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/migrations.py +0 -0
  419. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/model_usage_backfill.py +0 -0
  420. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/operation_dependencies.py +0 -0
  421. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/read_policy.py +0 -0
  422. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/repo_context.py +0 -0
  423. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/repos.py +0 -0
  424. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/retrieval.py +0 -0
  425. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/runtime_admin.py +0 -0
  426. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/runtime_context.py +0 -0
  427. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/settings.py +0 -0
  428. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/snapshot_baseline.py +0 -0
  429. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/thresholds.py +0 -0
  430. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/update_policy.py +0 -0
  431. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/use_cases.py +0 -0
  432. {shellbrain-0.1.42 → shellbrain-0.1.44}/app/startup/wiki.py +0 -0
  433. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/__init__.py +0 -0
  434. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/_legacy_usage_views.py +0 -0
  435. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/_usage_view_sql.py +0 -0
  436. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/env.py +0 -0
  437. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260226_0001_initial_schema.py +0 -0
  438. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
  439. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
  440. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
  441. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
  442. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
  443. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
  444. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
  445. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260410_0009_frontier_memory_family.py +0 -0
  446. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260414_0010_model_usage_telemetry.py +0 -0
  447. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260414_0011_usage_problem_tokens_multi_solution_metrics.py +0 -0
  448. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260415_0012_read_pack_cost_and_read_roi.py +0 -0
  449. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260421_0013_concept_context_graph.py +0 -0
  450. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260422_0014_concept_read_telemetry.py +0 -0
  451. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260422_0015_problem_runs.py +0 -0
  452. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260508_0016_recall_telemetry.py +0 -0
  453. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260511_0017_inner_agent_invocations.py +0 -0
  454. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260513_0018_knowledge_build_runs.py +0 -0
  455. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260515_0019_scenario_records.py +0 -0
  456. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260516_0020_knowledge_build_observability.py +0 -0
  457. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260519_0021_knowledge_build_watermark_stable.py +0 -0
  458. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260519_0022_update_evidence_links.py +0 -0
  459. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260519_0023_explicit_teach_trigger.py +0 -0
  460. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260519_0024_read_retrieval_latency_indexes.py +0 -0
  461. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260519_0025_repair_recall_source_input_section_constraint.py +0 -0
  462. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260519_0026_repair_knowledge_build_trigger_constraint.py +0 -0
  463. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260519_0027_concept_embeddings.py +0 -0
  464. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260520_0028_knowledge_build_lifecycle.py +0 -0
  465. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260522_0029_remove_frontier_and_memory_anchors.py +0 -0
  466. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260522_0030_concept_lifecycle_events.py +0 -0
  467. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260522_0031_unified_evidence_storage.py +0 -0
  468. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260522_0032_memory_lifecycle_events.py +0 -0
  469. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260522_0033_concept_memory_role_cleanup.py +0 -0
  470. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260522_0034_structural_memory_relations.py +0 -0
  471. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260522_0035_retire_legacy_compatibility_tables.py +0 -0
  472. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260526_0036_shadow_snapshots.py +0 -0
  473. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/20260606_0037_wiki_summaries.py +0 -0
  474. {shellbrain-0.1.42 → shellbrain-0.1.44}/migrations/versions/__init__.py +0 -0
  475. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/__init__.py +0 -0
  476. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/claude/skills/shellbrain/SKILL.md +0 -0
  477. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
  478. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/clean-architecture/SKILL.md +0 -0
  479. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/clean-code/SKILL.md +0 -0
  480. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain/SKILL.md +0 -0
  481. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain/agents/openai.yaml +0 -0
  482. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain/assets/shellbrain-large.svg +0 -0
  483. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain/assets/shellbrain-small.svg +0 -0
  484. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain/assets/shellbrain_logo.png +0 -0
  485. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain/references/request-shapes.md +0 -0
  486. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain/references/session-workflow.md +0 -0
  487. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
  488. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
  489. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
  490. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
  491. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/cursor/skills/shellbrain/SKILL.md +0 -0
  492. {shellbrain-0.1.42 → shellbrain-0.1.44}/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
  493. {shellbrain-0.1.42 → shellbrain-0.1.44}/setup.cfg +0 -0
  494. {shellbrain-0.1.42 → shellbrain-0.1.44}/shellbrain.egg-info/dependency_links.txt +0 -0
  495. {shellbrain-0.1.42 → shellbrain-0.1.44}/shellbrain.egg-info/entry_points.txt +0 -0
  496. {shellbrain-0.1.42 → shellbrain-0.1.44}/shellbrain.egg-info/requires.txt +0 -0
  497. {shellbrain-0.1.42 → shellbrain-0.1.44}/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.42
3
+ Version: 0.1.44
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
@@ -0,0 +1,477 @@
1
+ """Claude Code CLI-backed inner-agent provider adapter."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import shutil
7
+ import subprocess
8
+ from time import perf_counter
9
+
10
+ from app.core.ports.host_apps.inner_agents import (
11
+ BuildKnowledgeAgentRequest,
12
+ BuildKnowledgeAgentResult,
13
+ InnerAgentRunRequest,
14
+ InnerAgentRunResult,
15
+ TeachKnowledgeAgentRequest,
16
+ WikiSummaryAgentRequest,
17
+ WikiSummaryAgentResult,
18
+ )
19
+ from app.infrastructure.host_apps.inner_agents.codex_cli import (
20
+ _build_knowledge_result,
21
+ _duration_ms,
22
+ _estimate_tokens,
23
+ _inner_agent_env,
24
+ _result,
25
+ _truncate,
26
+ _usage_or_estimate,
27
+ _wiki_summary_result,
28
+ )
29
+ from app.infrastructure.host_apps.inner_agents.output_parser import (
30
+ InnerAgentOutputParseError,
31
+ parse_build_knowledge_output,
32
+ parse_inner_agent_response_output,
33
+ parse_wiki_summary_output,
34
+ )
35
+ from app.infrastructure.host_apps.inner_agents.prompt import (
36
+ render_build_context_prompt,
37
+ render_build_context_synthesis_prompt,
38
+ render_build_knowledge_prompt,
39
+ render_teach_knowledge_prompt,
40
+ render_wiki_summary_prompt,
41
+ )
42
+
43
+
44
+ class ClaudeCliInnerAgentRunner:
45
+ """Run Shellbrain inner-agent work through the local Claude Code CLI."""
46
+
47
+ def __init__(self, *, command: str) -> None:
48
+ self._command = command
49
+
50
+ def run(self, request: InnerAgentRunRequest) -> InnerAgentRunResult:
51
+ """Run one Claude Code build_context request."""
52
+
53
+ prompt = (
54
+ render_build_context_synthesis_prompt(request)
55
+ if request.synthesis_only
56
+ else render_build_context_prompt(request)
57
+ )
58
+ run = self._run_claude(
59
+ request,
60
+ prompt=prompt,
61
+ mode="build_context_synthesis" if request.synthesis_only else "build_context",
62
+ tool_profile="none" if request.synthesis_only else "shellbrain",
63
+ )
64
+ if run["status"] != "ok":
65
+ return _context_error_result(request, run)
66
+ final_message = str(run["result"])
67
+ try:
68
+ brief, read_trace = parse_inner_agent_response_output(final_message)
69
+ except InnerAgentOutputParseError as exc:
70
+ return _result(
71
+ request,
72
+ status="invalid_output",
73
+ fallback_used=True,
74
+ duration_ms=int(run["duration_ms"]),
75
+ **_usage_or_estimate(
76
+ prompt=prompt, output=final_message, usage=run.get("usage")
77
+ ),
78
+ error_code="invalid_output",
79
+ error_message=str(exc),
80
+ )
81
+ return _result(
82
+ request,
83
+ status="ok",
84
+ brief=brief,
85
+ duration_ms=int(run["duration_ms"]),
86
+ **_usage_or_estimate(
87
+ prompt=prompt, output=final_message, usage=run.get("usage")
88
+ ),
89
+ read_trace=read_trace,
90
+ )
91
+
92
+ def run_build_knowledge(
93
+ self, request: BuildKnowledgeAgentRequest
94
+ ) -> BuildKnowledgeAgentResult:
95
+ """Run one Claude Code build_knowledge request."""
96
+
97
+ return self._run_knowledge(
98
+ request,
99
+ prompt=render_build_knowledge_prompt(request),
100
+ mode="build_knowledge",
101
+ tool_profile="knowledge",
102
+ )
103
+
104
+ def run_teach_knowledge(
105
+ self, request: TeachKnowledgeAgentRequest
106
+ ) -> BuildKnowledgeAgentResult:
107
+ """Run one Claude Code teach request."""
108
+
109
+ return self._run_knowledge(
110
+ request,
111
+ prompt=render_teach_knowledge_prompt(request),
112
+ mode="teach",
113
+ tool_profile="shellbrain",
114
+ )
115
+
116
+ def _run_knowledge(
117
+ self,
118
+ request: BuildKnowledgeAgentRequest | TeachKnowledgeAgentRequest,
119
+ *,
120
+ prompt: str,
121
+ mode: str,
122
+ tool_profile: str,
123
+ ) -> BuildKnowledgeAgentResult:
124
+ run = self._run_claude(
125
+ request,
126
+ prompt=prompt,
127
+ mode=mode,
128
+ tool_profile=tool_profile,
129
+ knowledge_build_run_id=request.run_id,
130
+ )
131
+ if run["status"] != "ok":
132
+ return _knowledge_error_result(request, run)
133
+ final_message = str(run["result"])
134
+ try:
135
+ parsed = parse_build_knowledge_output(final_message)
136
+ except InnerAgentOutputParseError as exc:
137
+ return _build_knowledge_result(
138
+ request,
139
+ status="invalid_output",
140
+ duration_ms=int(run["duration_ms"]),
141
+ **_usage_or_estimate(
142
+ prompt=prompt, output=final_message, usage=run.get("usage")
143
+ ),
144
+ error_code="invalid_output",
145
+ error_message=str(exc),
146
+ )
147
+ return _build_knowledge_result(
148
+ request,
149
+ status=parsed["status"],
150
+ duration_ms=int(run["duration_ms"]),
151
+ **_usage_or_estimate(
152
+ prompt=prompt, output=final_message, usage=run.get("usage")
153
+ ),
154
+ write_count=int(parsed["write_count"]),
155
+ skipped_item_count=int(parsed["skipped_item_count"]),
156
+ run_summary=parsed["run_summary"],
157
+ read_trace=parsed["read_trace"],
158
+ code_trace=parsed["code_trace"],
159
+ )
160
+
161
+ def run_wiki_summary(
162
+ self, request: WikiSummaryAgentRequest
163
+ ) -> WikiSummaryAgentResult:
164
+ """Run one Claude Code wiki_summary request."""
165
+
166
+ prompt = render_wiki_summary_prompt(request)
167
+ run = self._run_claude(
168
+ request,
169
+ prompt=prompt,
170
+ mode="wiki_summary",
171
+ tool_profile="none",
172
+ )
173
+ if run["status"] != "ok":
174
+ return _wiki_error_result(request, run)
175
+ final_message = str(run["result"])
176
+ try:
177
+ body = parse_wiki_summary_output(final_message)
178
+ except InnerAgentOutputParseError as exc:
179
+ return _wiki_summary_result(
180
+ request,
181
+ status="invalid_output",
182
+ duration_ms=int(run["duration_ms"]),
183
+ **_usage_or_estimate(
184
+ prompt=prompt, output=final_message, usage=run.get("usage")
185
+ ),
186
+ error_code="invalid_output",
187
+ error_message=str(exc),
188
+ )
189
+ return _wiki_summary_result(
190
+ request,
191
+ status="ok",
192
+ body=body,
193
+ duration_ms=int(run["duration_ms"]),
194
+ **_usage_or_estimate(
195
+ prompt=prompt, output=final_message, usage=run.get("usage")
196
+ ),
197
+ )
198
+
199
+ def _run_claude(
200
+ self,
201
+ request,
202
+ *,
203
+ prompt: str,
204
+ mode: str,
205
+ tool_profile: str,
206
+ knowledge_build_run_id: str | None = None,
207
+ ) -> dict[str, object]:
208
+ command_path = shutil.which(self._command)
209
+ if command_path is None:
210
+ return {
211
+ "status": "provider_unavailable",
212
+ "error_code": "command_not_found",
213
+ "error_message": f"Claude command not found: {self._command}",
214
+ }
215
+ started = perf_counter()
216
+ try:
217
+ completed = subprocess.run(
218
+ _claude_args(
219
+ command_path=command_path,
220
+ model=request.model,
221
+ reasoning=request.reasoning,
222
+ tool_profile=tool_profile,
223
+ ),
224
+ input=prompt,
225
+ text=True,
226
+ capture_output=True,
227
+ timeout=request.timeout_seconds,
228
+ check=False,
229
+ env=_inner_agent_env(
230
+ mode=mode,
231
+ knowledge_build_run_id=knowledge_build_run_id,
232
+ ),
233
+ )
234
+ except subprocess.TimeoutExpired:
235
+ return _claude_error(
236
+ status="timeout",
237
+ duration_ms=_duration_ms(started),
238
+ prompt=prompt,
239
+ error_code="timeout",
240
+ error_message="Claude CLI timed out",
241
+ )
242
+
243
+ duration_ms = _duration_ms(started)
244
+ if completed.returncode != 0:
245
+ return _claude_error(
246
+ status="error",
247
+ duration_ms=duration_ms,
248
+ prompt=prompt,
249
+ error_code="claude_nonzero_exit",
250
+ error_message=_truncate(completed.stderr or completed.stdout, 500),
251
+ )
252
+ envelope = _claude_envelope(completed.stdout, allowed_model=request.model)
253
+ if envelope.get("error_code"):
254
+ return _claude_error(
255
+ status=str(envelope["status"]),
256
+ duration_ms=duration_ms,
257
+ prompt=prompt,
258
+ error_code=str(envelope["error_code"]),
259
+ error_message=str(envelope["error_message"]),
260
+ )
261
+ return {
262
+ "status": "ok",
263
+ "result": envelope["result"],
264
+ "usage": envelope.get("usage"),
265
+ "duration_ms": duration_ms,
266
+ }
267
+
268
+
269
+ def _claude_error(
270
+ *,
271
+ status: str,
272
+ duration_ms: int,
273
+ prompt: str,
274
+ error_code: str,
275
+ error_message: str,
276
+ ) -> dict[str, object]:
277
+ return {
278
+ "status": status,
279
+ "duration_ms": duration_ms,
280
+ "input_tokens": _estimate_tokens(prompt),
281
+ "capture_quality": "estimated",
282
+ "error_code": error_code,
283
+ "error_message": error_message,
284
+ }
285
+
286
+
287
+ def _context_error_result(
288
+ request: InnerAgentRunRequest, run: dict[str, object]
289
+ ) -> InnerAgentRunResult:
290
+ return _result(
291
+ request,
292
+ status=str(run["status"]),
293
+ fallback_used=True,
294
+ duration_ms=int(run.get("duration_ms") or 0),
295
+ input_tokens=run.get("input_tokens"),
296
+ capture_quality=run.get("capture_quality"),
297
+ error_code=str(run["error_code"]),
298
+ error_message=str(run["error_message"]),
299
+ )
300
+
301
+
302
+ def _knowledge_error_result(
303
+ request: BuildKnowledgeAgentRequest | TeachKnowledgeAgentRequest,
304
+ run: dict[str, object],
305
+ ) -> BuildKnowledgeAgentResult:
306
+ return _build_knowledge_result(
307
+ request,
308
+ status=str(run["status"]),
309
+ duration_ms=int(run.get("duration_ms") or 0),
310
+ input_tokens=run.get("input_tokens"),
311
+ capture_quality=run.get("capture_quality"),
312
+ error_code=str(run["error_code"]),
313
+ error_message=str(run["error_message"]),
314
+ )
315
+
316
+
317
+ def _wiki_error_result(
318
+ request: WikiSummaryAgentRequest, run: dict[str, object]
319
+ ) -> WikiSummaryAgentResult:
320
+ return _wiki_summary_result(
321
+ request,
322
+ status=str(run["status"]),
323
+ duration_ms=int(run.get("duration_ms") or 0),
324
+ input_tokens=run.get("input_tokens"),
325
+ capture_quality=run.get("capture_quality"),
326
+ error_code=str(run["error_code"]),
327
+ error_message=str(run["error_message"]),
328
+ )
329
+
330
+
331
+ def _claude_args(
332
+ *,
333
+ command_path: str,
334
+ model: str,
335
+ reasoning: str,
336
+ tool_profile: str,
337
+ ) -> list[str]:
338
+ """Return the Claude Code print-mode command for one inner-agent run."""
339
+
340
+ args = [
341
+ command_path,
342
+ "-p",
343
+ "--output-format",
344
+ "json",
345
+ "--no-session-persistence",
346
+ "--safe-mode",
347
+ "--model",
348
+ model,
349
+ "--settings",
350
+ json.dumps(
351
+ {
352
+ "model": model,
353
+ "availableModels": [model],
354
+ "enforceAvailableModels": True,
355
+ },
356
+ sort_keys=True,
357
+ separators=(",", ":"),
358
+ ),
359
+ "--effort",
360
+ _claude_effort(reasoning),
361
+ "--strict-mcp-config",
362
+ "--disallowedTools",
363
+ "mcp__*",
364
+ ]
365
+ args.extend(_claude_tool_args(tool_profile))
366
+ return args
367
+
368
+
369
+ def _claude_tool_args(tool_profile: str) -> list[str]:
370
+ if tool_profile == "none":
371
+ return ["--tools", ""]
372
+ if tool_profile == "knowledge":
373
+ return [
374
+ "--tools",
375
+ "Bash,Read,Grep,Glob",
376
+ "--allowedTools",
377
+ "Bash(shellbrain *)",
378
+ "Read",
379
+ "Grep",
380
+ "Glob",
381
+ ]
382
+ return ["--tools", "Bash", "--allowedTools", "Bash(shellbrain *)"]
383
+
384
+
385
+ def _claude_effort(reasoning: str) -> str:
386
+ if reasoning in {"low", "medium", "high", "xhigh"}:
387
+ return reasoning
388
+ return "low"
389
+
390
+
391
+ def _claude_envelope(output: str, *, allowed_model: str) -> dict[str, object]:
392
+ try:
393
+ payload = json.loads(output)
394
+ except json.JSONDecodeError:
395
+ return {
396
+ "status": "invalid_output",
397
+ "error_code": "claude_invalid_json",
398
+ "error_message": "Claude output is not valid JSON",
399
+ }
400
+ if not isinstance(payload, dict):
401
+ return {
402
+ "status": "invalid_output",
403
+ "error_code": "claude_invalid_json",
404
+ "error_message": "Claude output must be a JSON object",
405
+ }
406
+ disallowed_model = _disallowed_reported_model(payload, allowed_model=allowed_model)
407
+ if disallowed_model is not None:
408
+ return {
409
+ "status": "error",
410
+ "error_code": "claude_disallowed_model",
411
+ "error_message": f"Claude reported disallowed model: {disallowed_model}",
412
+ }
413
+ result = payload.get("result")
414
+ if not isinstance(result, str):
415
+ return {
416
+ "status": "invalid_output",
417
+ "error_code": "claude_missing_result",
418
+ "error_message": "Claude output must include a string result",
419
+ }
420
+ return {"result": result, "usage": _claude_usage(payload)}
421
+
422
+
423
+ def _disallowed_reported_model(
424
+ payload: dict[str, object], *, allowed_model: str
425
+ ) -> str | None:
426
+ for model in _reported_models(payload):
427
+ normalized = model.lower()
428
+ if allowed_model.lower() not in normalized:
429
+ return model
430
+ return None
431
+
432
+
433
+ def _reported_models(payload: dict[str, object]) -> list[str]:
434
+ models: list[str] = []
435
+ for key in ("model", "active_model", "activeModel"):
436
+ value = payload.get(key)
437
+ if isinstance(value, str):
438
+ models.append(value)
439
+ model_usage = payload.get("modelUsage")
440
+ if isinstance(model_usage, dict):
441
+ for key, value in model_usage.items():
442
+ if isinstance(key, str) and "model" in key.lower() and isinstance(value, str):
443
+ models.append(value)
444
+ return models
445
+
446
+
447
+ def _claude_usage(payload: dict[str, object]) -> dict[str, int] | None:
448
+ source = payload.get("usage")
449
+ if not isinstance(source, dict):
450
+ source = payload.get("modelUsage")
451
+ if not isinstance(source, dict):
452
+ return None
453
+ usage = {
454
+ "input_tokens": _first_int(source, "input_tokens", "inputTokens"),
455
+ "output_tokens": _first_int(source, "output_tokens", "outputTokens"),
456
+ "reasoning_output_tokens": _first_int(
457
+ source,
458
+ "reasoning_output_tokens",
459
+ "reasoningOutputTokens",
460
+ "thinking_tokens",
461
+ ),
462
+ "cached_input_tokens": _first_int(
463
+ source,
464
+ "cached_input_tokens",
465
+ "cachedInputTokens",
466
+ "cache_read_input_tokens",
467
+ ),
468
+ }
469
+ return usage if any(value is not None for value in usage.values()) else None
470
+
471
+
472
+ def _first_int(value: dict[object, object], *names: str) -> int | None:
473
+ for name in names:
474
+ item = value.get(name)
475
+ if isinstance(item, int) and item >= 0:
476
+ return item
477
+ return None
@@ -635,7 +635,7 @@ def _inner_agent_env(
635
635
 
636
636
 
637
637
  def _inherit_parent_caller_identity(env: dict[str, str]) -> None:
638
- """Preserve the outer host identity across a nested Codex inner-agent run."""
638
+ """Preserve the outer host identity across a nested inner-agent run."""
639
639
 
640
640
  if env.get("CODEX_THREAD_ID"):
641
641
  env["SHELLBRAIN_PARENT_HOST_APP"] = "codex"
@@ -1,7 +1,7 @@
1
1
  # Default model/runtime settings for Shellbrain inner agents.
2
2
  build_context:
3
3
  strategy: deterministic_synthesis
4
- provider: codex
4
+ provider: auto
5
5
  model: gpt-5.4-mini
6
6
  reasoning: medium
7
7
  timeout_seconds: 90
@@ -9,7 +9,7 @@ build_context:
9
9
  max_brief_tokens: 1800
10
10
 
11
11
  build_knowledge:
12
- provider: codex
12
+ provider: auto
13
13
  model: gpt-5.4-mini
14
14
  reasoning: xhigh
15
15
  timeout_seconds: 600
@@ -20,7 +20,7 @@ build_knowledge:
20
20
  running_run_stale_seconds: 3600
21
21
 
22
22
  teach:
23
- provider: codex
23
+ provider: auto
24
24
  model: gpt-5.4-mini
25
25
  reasoning: medium
26
26
  timeout_seconds: 600
@@ -29,7 +29,7 @@ teach:
29
29
  max_write_commands: 12
30
30
 
31
31
  wiki_summary:
32
- provider: codex
32
+ provider: auto
33
33
  model: gpt-5.4-mini
34
34
  reasoning: medium
35
35
  timeout_seconds: 120
@@ -43,3 +43,7 @@ wiki_summary:
43
43
  providers:
44
44
  codex:
45
45
  command: codex
46
+ model: gpt-5.4-mini
47
+ claude:
48
+ command: claude
49
+ model: sonnet
@@ -21,6 +21,7 @@ class InnerAgentProviderConfig(_StrictModel):
21
21
  """Provider-specific runtime settings selected by startup."""
22
22
 
23
23
  command: str = Field(min_length=1)
24
+ model: str = Field(min_length=1)
24
25
 
25
26
 
26
27
  class InternalAgentsConfig(_StrictModel):
@@ -50,6 +51,8 @@ class InternalAgentsConfig(_StrictModel):
50
51
 
51
52
  for agent_name in ("build_context", "build_knowledge", "teach", "wiki_summary"):
52
53
  agent = getattr(self, agent_name)
54
+ if agent.provider == "auto":
55
+ continue
53
56
  if agent.provider not in self.providers:
54
57
  raise ValueError(
55
58
  f"internal_agents.{agent_name}.provider is not configured"