shellbrain 0.1.18__tar.gz → 0.1.20__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 (207) hide show
  1. {shellbrain-0.1.18 → shellbrain-0.1.20}/PKG-INFO +1 -1
  2. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/agent_behavior_analysis.py +7 -7
  3. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/storage_setup.py +15 -2
  4. {shellbrain-0.1.18 → shellbrain-0.1.20}/pyproject.toml +1 -1
  5. {shellbrain-0.1.18 → shellbrain-0.1.20}/shellbrain.egg-info/PKG-INFO +1 -1
  6. {shellbrain-0.1.18 → shellbrain-0.1.20}/README.md +0 -0
  7. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/__init__.py +0 -0
  8. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/__main__.py +0 -0
  9. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/__init__.py +0 -0
  10. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/admin_db.py +0 -0
  11. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/config.py +0 -0
  12. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/create_policy.py +0 -0
  13. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/db.py +0 -0
  14. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/embeddings.py +0 -0
  15. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/home.py +0 -0
  16. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/migrations.py +0 -0
  17. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/read_policy.py +0 -0
  18. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/repos.py +0 -0
  19. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/retrieval.py +0 -0
  20. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/thresholds.py +0 -0
  21. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/update_policy.py +0 -0
  22. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/boot/use_cases.py +0 -0
  23. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/config/__init__.py +0 -0
  24. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/config/defaults/create_policy.yaml +0 -0
  25. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/config/defaults/read_policy.yaml +0 -0
  26. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/config/defaults/runtime.yaml +0 -0
  27. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/config/defaults/thresholds.yaml +0 -0
  28. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/config/defaults/update_policy.yaml +0 -0
  29. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/config/loader.py +0 -0
  30. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/__init__.py +0 -0
  31. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/contracts/__init__.py +0 -0
  32. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/contracts/errors.py +0 -0
  33. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/contracts/requests.py +0 -0
  34. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/contracts/responses.py +0 -0
  35. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/__init__.py +0 -0
  36. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/associations.py +0 -0
  37. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/episodes.py +0 -0
  38. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/evidence.py +0 -0
  39. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/facts.py +0 -0
  40. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/guidance.py +0 -0
  41. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/identity.py +0 -0
  42. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/memory.py +0 -0
  43. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/runtime_context.py +0 -0
  44. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/session_state.py +0 -0
  45. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/telemetry.py +0 -0
  46. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/entities/utility.py +0 -0
  47. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/__init__.py +0 -0
  48. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/clock.py +0 -0
  49. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/config.py +0 -0
  50. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/embeddings.py +0 -0
  51. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/idgen.py +0 -0
  52. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/repos.py +0 -0
  53. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/retrieval.py +0 -0
  54. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/session_state_store.py +0 -0
  55. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/interfaces/unit_of_work.py +0 -0
  56. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/__init__.py +0 -0
  57. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/_shared/__init__.py +0 -0
  58. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/_shared/executor.py +0 -0
  59. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/_shared/side_effects.py +0 -0
  60. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/create_policy/__init__.py +0 -0
  61. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/create_policy/pipeline.py +0 -0
  62. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/__init__.py +0 -0
  63. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/bm25.py +0 -0
  64. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/context_pack_builder.py +0 -0
  65. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/expansion.py +0 -0
  66. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/fusion_rrf.py +0 -0
  67. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/lexical_query.py +0 -0
  68. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/pipeline.py +0 -0
  69. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/scenario_lift.py +0 -0
  70. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/scoring.py +0 -0
  71. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/seed_retrieval.py +0 -0
  72. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/read_policy/utility_prior.py +0 -0
  73. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/update_policy/__init__.py +0 -0
  74. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/policies/update_policy/pipeline.py +0 -0
  75. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/__init__.py +0 -0
  76. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/build_guidance.py +0 -0
  77. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/create_memory.py +0 -0
  78. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/manage_session_state.py +0 -0
  79. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/read_memory.py +0 -0
  80. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/record_episode_sync_telemetry.py +0 -0
  81. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/record_operation_telemetry.py +0 -0
  82. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/sync_episode.py +0 -0
  83. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/core/use_cases/update_memory.py +0 -0
  84. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/__init__.py +0 -0
  85. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/env.py +0 -0
  86. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260226_0001_initial_schema.py +0 -0
  87. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260312_0002_add_hard_invariants.py +0 -0
  88. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260312_0003_drop_create_confidence.py +0 -0
  89. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260313_0004_episode_sync_hardening.py +0 -0
  90. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260313_0005_evidence_episode_event_refs.py +0 -0
  91. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260318_0006_usage_telemetry_schema.py +0 -0
  92. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260319_0007_identity_session_guidance.py +0 -0
  93. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +0 -0
  94. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/migrations/versions/__init__.py +0 -0
  95. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/__init__.py +0 -0
  96. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/claude/CLAUDE.md +0 -0
  97. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/claude/skills/shellbrain-session-start/SKILL.md +0 -0
  98. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/claude/skills/shellbrain-usage-review/SKILL.md +0 -0
  99. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/AGENTS.md +0 -0
  100. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-session-start/SKILL.md +0 -0
  101. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-session-start/agents/openai.yaml +0 -0
  102. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-session-start/assets/shellbrain-large.svg +0 -0
  103. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-session-start/assets/shellbrain-small.svg +0 -0
  104. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-session-start/assets/shellbrain_logo.png +0 -0
  105. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-session-start/references/request-shapes.md +0 -0
  106. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-session-start/references/session-workflow.md +0 -0
  107. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-usage-review/SKILL.md +0 -0
  108. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-usage-review/agents/openai.yaml +0 -0
  109. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain-small.svg +0 -0
  110. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/codex/shellbrain-usage-review/assets/shellbrain_logo.png +0 -0
  111. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/cursor/skills/shellbrain-session-start/SKILL.md +0 -0
  112. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/onboarding_assets/cursor/skills/shellbrain-usage-review/SKILL.md +0 -0
  113. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/__init__.py +0 -0
  114. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/__init__.py +0 -0
  115. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/analytics.py +0 -0
  116. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/analytics_diagnostics.py +0 -0
  117. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/analytics_queries.py +0 -0
  118. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/backup.py +0 -0
  119. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/destructive_guard.py +0 -0
  120. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/doctor.py +0 -0
  121. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/external_runtime.py +0 -0
  122. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/init.py +0 -0
  123. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/init_errors.py +0 -0
  124. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/instance_guard.py +0 -0
  125. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/machine_state.py +0 -0
  126. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/managed_runtime.py +0 -0
  127. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/privileges.py +0 -0
  128. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/repo_state.py +0 -0
  129. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/restore.py +0 -0
  130. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/admin/upgrade.py +0 -0
  131. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/cli/__init__.py +0 -0
  132. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/cli/handlers.py +0 -0
  133. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/cli/hydration.py +0 -0
  134. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/cli/main.py +0 -0
  135. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/cli/presenter_json.py +0 -0
  136. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/cli/schema_validation.py +0 -0
  137. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/__init__.py +0 -0
  138. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/engine.py +0 -0
  139. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/__init__.py +0 -0
  140. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/associations.py +0 -0
  141. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/episodes.py +0 -0
  142. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/evidence.py +0 -0
  143. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/experiences.py +0 -0
  144. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/instance_metadata.py +0 -0
  145. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/memories.py +0 -0
  146. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/metadata.py +0 -0
  147. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/registry.py +0 -0
  148. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/telemetry.py +0 -0
  149. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/utility.py +0 -0
  150. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/models/views.py +0 -0
  151. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/__init__.py +0 -0
  152. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/__init__.py +0 -0
  153. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/associations_repo.py +0 -0
  154. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/episodes_repo.py +0 -0
  155. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/evidence_repo.py +0 -0
  156. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/experiences_repo.py +0 -0
  157. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/memories_repo.py +0 -0
  158. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/read_policy_repo.py +0 -0
  159. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/telemetry_repo.py +0 -0
  160. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/relational/utility_repo.py +0 -0
  161. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/semantic/__init__.py +0 -0
  162. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/semantic/keyword_retrieval_repo.py +0 -0
  163. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/repos/semantic/semantic_retrieval_repo.py +0 -0
  164. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/session.py +0 -0
  165. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/db/uow.py +0 -0
  166. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/embeddings/__init__.py +0 -0
  167. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/embeddings/local_provider.py +0 -0
  168. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/embeddings/query_vector_search.py +0 -0
  169. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/__init__.py +0 -0
  170. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/claude_code.py +0 -0
  171. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/codex.py +0 -0
  172. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/cursor.py +0 -0
  173. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/launcher.py +0 -0
  174. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/normalization.py +0 -0
  175. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/poller.py +0 -0
  176. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/poller_lock.py +0 -0
  177. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/source_discovery.py +0 -0
  178. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/episodes/tool_filter.py +0 -0
  179. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/identity/__init__.py +0 -0
  180. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/identity/claude_hook_install.py +0 -0
  181. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/identity/claude_runtime.py +0 -0
  182. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/identity/codex_runtime.py +0 -0
  183. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/identity/compatibility.py +0 -0
  184. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/identity/resolver.py +0 -0
  185. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/metrics/__init__.py +0 -0
  186. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/metrics/artifacts.py +0 -0
  187. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/metrics/browser.py +0 -0
  188. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/metrics/queries.py +0 -0
  189. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/metrics/render_html.py +0 -0
  190. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/metrics/service.py +0 -0
  191. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/onboarding/__init__.py +0 -0
  192. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/onboarding/host_assets.py +0 -0
  193. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/session_state/__init__.py +0 -0
  194. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/session_state/file_store.py +0 -0
  195. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/telemetry/__init__.py +0 -0
  196. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/telemetry/operation_summary.py +0 -0
  197. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/telemetry/session_selection.py +0 -0
  198. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/telemetry/sync_summary.py +0 -0
  199. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/validation/__init__.py +0 -0
  200. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/validation/integrity_validation.py +0 -0
  201. {shellbrain-0.1.18 → shellbrain-0.1.20}/app/periphery/validation/semantic_validation.py +0 -0
  202. {shellbrain-0.1.18 → shellbrain-0.1.20}/setup.cfg +0 -0
  203. {shellbrain-0.1.18 → shellbrain-0.1.20}/shellbrain.egg-info/SOURCES.txt +0 -0
  204. {shellbrain-0.1.18 → shellbrain-0.1.20}/shellbrain.egg-info/dependency_links.txt +0 -0
  205. {shellbrain-0.1.18 → shellbrain-0.1.20}/shellbrain.egg-info/entry_points.txt +0 -0
  206. {shellbrain-0.1.18 → shellbrain-0.1.20}/shellbrain.egg-info/requires.txt +0 -0
  207. {shellbrain-0.1.18 → shellbrain-0.1.20}/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.18
3
+ Version: 0.1.20
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
@@ -16,8 +16,8 @@ _MID_SESSION_MINUTES = 15
16
16
  _STARTUP_WINDOW_MINUTES = 10
17
17
  _CHECKPOINT_TO_READ_WINDOW_MINUTES = 10
18
18
  _UTILITY_VOTE_UPDATE_TYPES = {"utility_vote", "utility_vote_batch"}
19
- _SB_READ_RE = re.compile(r"^SB:\s*read\s*\|\s*(.+)$")
20
- _SB_SKIP_RE = re.compile(r"^SB:\s*skip\s*\|\s*(.+)$")
19
+ _SB_READ_RE = re.compile(r"SB:\s*read\s*\|\s*([^|\n\r]+?)\s*\|\s*([^|\n\r]+?)\s*\|\s*([^|\n\r]+?)\s*\|\s*([^\n\r]+)")
20
+ _SB_SKIP_RE = re.compile(r"SB:\s*skip\s*\|\s*([^\n\r]+)")
21
21
 
22
22
 
23
23
  def build_agent_behavior_report(
@@ -207,9 +207,9 @@ def _parse_checkpoint_lines(
207
207
  checkpoints: list[dict[str, object]] = []
208
208
  for line in content.splitlines():
209
209
  stripped = line.strip()
210
- read_match = _SB_READ_RE.match(stripped)
210
+ read_match = _SB_READ_RE.search(stripped)
211
211
  if read_match:
212
- payload = [part.strip() for part in read_match.group(1).split("|")]
212
+ payload = [part.strip() for part in read_match.groups()]
213
213
  signature = " | ".join(payload)
214
214
  checkpoints.append(
215
215
  {
@@ -220,12 +220,12 @@ def _parse_checkpoint_lines(
220
220
  "action": "read",
221
221
  "signature": signature,
222
222
  "reason": None,
223
- "raw_line": stripped,
223
+ "raw_line": read_match.group(0).strip(),
224
224
  "created_at": created_at,
225
225
  }
226
226
  )
227
227
  continue
228
- skip_match = _SB_SKIP_RE.match(stripped)
228
+ skip_match = _SB_SKIP_RE.search(stripped)
229
229
  if skip_match:
230
230
  payload = [part.strip() for part in skip_match.group(1).split("|")]
231
231
  checkpoints.append(
@@ -237,7 +237,7 @@ def _parse_checkpoint_lines(
237
237
  "action": "skip",
238
238
  "signature": None,
239
239
  "reason": " | ".join(payload),
240
- "raw_line": stripped,
240
+ "raw_line": skip_match.group(0).strip(),
241
241
  "created_at": created_at,
242
242
  }
243
243
  )
@@ -141,11 +141,24 @@ def _open_interactive_stream() -> tuple[TextIO, TextIO, TextIO | None]:
141
141
 
142
142
  if sys.stdin.isatty() and sys.stdout.isatty():
143
143
  return sys.stdin, sys.stdout, None
144
+ writer = _resolve_interactive_writer()
145
+ if sys.stdin.isatty():
146
+ return sys.stdin, writer, None
144
147
  try:
145
- handle = Path("/dev/tty").open("r+", encoding="utf-8")
148
+ handle = Path("/dev/tty").open("r", encoding="utf-8")
146
149
  except OSError as exc:
147
150
  raise InitDependencyError(_NON_INTERACTIVE_MESSAGE) from exc
148
- return handle, handle, handle
151
+ return handle, writer, handle
152
+
153
+
154
+ def _resolve_interactive_writer() -> TextIO:
155
+ """Return one visible terminal writer for prompts when available."""
156
+
157
+ if sys.stderr.isatty():
158
+ return sys.stderr
159
+ if sys.stdout.isatty():
160
+ return sys.stdout
161
+ raise InitDependencyError(_NON_INTERACTIVE_MESSAGE)
149
162
 
150
163
 
151
164
  def _close_interactive_stream(handle: TextIO | None) -> None:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "shellbrain"
7
- version = "0.1.18"
7
+ version = "0.1.20"
8
8
  description = "Repo-scoped Shellbrain CLI with explicit evidence-backed writes."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shellbrain
3
- Version: 0.1.18
3
+ Version: 0.1.20
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
File without changes
File without changes
File without changes
File without changes
File without changes