shellbrain 0.1.0__py3-none-any.whl

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 (165) hide show
  1. app/__init__.py +1 -0
  2. app/__main__.py +7 -0
  3. app/boot/__init__.py +1 -0
  4. app/boot/admin_db.py +88 -0
  5. app/boot/config.py +14 -0
  6. app/boot/create_policy.py +52 -0
  7. app/boot/db.py +70 -0
  8. app/boot/embeddings.py +55 -0
  9. app/boot/home.py +45 -0
  10. app/boot/migrations.py +61 -0
  11. app/boot/read_policy.py +179 -0
  12. app/boot/repos.py +15 -0
  13. app/boot/retrieval.py +3 -0
  14. app/boot/thresholds.py +19 -0
  15. app/boot/update_policy.py +34 -0
  16. app/boot/use_cases.py +22 -0
  17. app/config/__init__.py +1 -0
  18. app/config/defaults/create_policy.yaml +7 -0
  19. app/config/defaults/read_policy.yaml +25 -0
  20. app/config/defaults/runtime.yaml +10 -0
  21. app/config/defaults/thresholds.yaml +3 -0
  22. app/config/defaults/update_policy.yaml +5 -0
  23. app/config/loader.py +58 -0
  24. app/core/__init__.py +1 -0
  25. app/core/contracts/__init__.py +1 -0
  26. app/core/contracts/errors.py +29 -0
  27. app/core/contracts/requests.py +211 -0
  28. app/core/contracts/responses.py +15 -0
  29. app/core/entities/__init__.py +1 -0
  30. app/core/entities/associations.py +58 -0
  31. app/core/entities/episodes.py +66 -0
  32. app/core/entities/evidence.py +29 -0
  33. app/core/entities/facts.py +30 -0
  34. app/core/entities/guidance.py +47 -0
  35. app/core/entities/identity.py +48 -0
  36. app/core/entities/memory.py +34 -0
  37. app/core/entities/runtime_context.py +19 -0
  38. app/core/entities/session_state.py +31 -0
  39. app/core/entities/telemetry.py +152 -0
  40. app/core/entities/utility.py +14 -0
  41. app/core/interfaces/__init__.py +1 -0
  42. app/core/interfaces/clock.py +12 -0
  43. app/core/interfaces/config.py +28 -0
  44. app/core/interfaces/embeddings.py +12 -0
  45. app/core/interfaces/idgen.py +11 -0
  46. app/core/interfaces/repos.py +279 -0
  47. app/core/interfaces/retrieval.py +20 -0
  48. app/core/interfaces/session_state_store.py +33 -0
  49. app/core/interfaces/unit_of_work.py +50 -0
  50. app/core/policies/__init__.py +1 -0
  51. app/core/policies/_shared/__init__.py +1 -0
  52. app/core/policies/_shared/executor.py +132 -0
  53. app/core/policies/_shared/side_effects.py +9 -0
  54. app/core/policies/create_policy/__init__.py +1 -0
  55. app/core/policies/create_policy/pipeline.py +96 -0
  56. app/core/policies/read_policy/__init__.py +1 -0
  57. app/core/policies/read_policy/bm25.py +114 -0
  58. app/core/policies/read_policy/context_pack_builder.py +140 -0
  59. app/core/policies/read_policy/expansion.py +132 -0
  60. app/core/policies/read_policy/fusion_rrf.py +34 -0
  61. app/core/policies/read_policy/lexical_query.py +101 -0
  62. app/core/policies/read_policy/pipeline.py +93 -0
  63. app/core/policies/read_policy/scenario_lift.py +11 -0
  64. app/core/policies/read_policy/scoring.py +61 -0
  65. app/core/policies/read_policy/seed_retrieval.py +54 -0
  66. app/core/policies/read_policy/utility_prior.py +11 -0
  67. app/core/policies/update_policy/__init__.py +1 -0
  68. app/core/policies/update_policy/pipeline.py +80 -0
  69. app/core/use_cases/__init__.py +1 -0
  70. app/core/use_cases/build_guidance.py +85 -0
  71. app/core/use_cases/create_memory.py +26 -0
  72. app/core/use_cases/manage_session_state.py +159 -0
  73. app/core/use_cases/read_memory.py +21 -0
  74. app/core/use_cases/record_episode_sync_telemetry.py +19 -0
  75. app/core/use_cases/record_operation_telemetry.py +32 -0
  76. app/core/use_cases/sync_episode.py +162 -0
  77. app/core/use_cases/update_memory.py +40 -0
  78. app/migrations/__init__.py +1 -0
  79. app/migrations/env.py +65 -0
  80. app/migrations/versions/20260226_0001_initial_schema.py +232 -0
  81. app/migrations/versions/20260312_0002_add_hard_invariants.py +60 -0
  82. app/migrations/versions/20260312_0003_drop_create_confidence.py +40 -0
  83. app/migrations/versions/20260313_0004_episode_sync_hardening.py +71 -0
  84. app/migrations/versions/20260313_0005_evidence_episode_event_refs.py +45 -0
  85. app/migrations/versions/20260318_0006_usage_telemetry_schema.py +175 -0
  86. app/migrations/versions/20260319_0007_identity_session_guidance.py +49 -0
  87. app/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +31 -0
  88. app/migrations/versions/__init__.py +1 -0
  89. app/periphery/__init__.py +1 -0
  90. app/periphery/admin/__init__.py +1 -0
  91. app/periphery/admin/backup.py +360 -0
  92. app/periphery/admin/destructive_guard.py +32 -0
  93. app/periphery/admin/doctor.py +192 -0
  94. app/periphery/admin/init.py +996 -0
  95. app/periphery/admin/instance_guard.py +211 -0
  96. app/periphery/admin/machine_state.py +354 -0
  97. app/periphery/admin/privileges.py +42 -0
  98. app/periphery/admin/repo_state.py +266 -0
  99. app/periphery/admin/restore.py +30 -0
  100. app/periphery/cli/__init__.py +1 -0
  101. app/periphery/cli/handlers.py +830 -0
  102. app/periphery/cli/hydration.py +119 -0
  103. app/periphery/cli/main.py +710 -0
  104. app/periphery/cli/presenter_json.py +10 -0
  105. app/periphery/cli/schema_validation.py +201 -0
  106. app/periphery/db/__init__.py +1 -0
  107. app/periphery/db/engine.py +10 -0
  108. app/periphery/db/models/__init__.py +1 -0
  109. app/periphery/db/models/associations.py +55 -0
  110. app/periphery/db/models/episodes.py +55 -0
  111. app/periphery/db/models/evidence.py +19 -0
  112. app/periphery/db/models/experiences.py +33 -0
  113. app/periphery/db/models/instance_metadata.py +17 -0
  114. app/periphery/db/models/memories.py +39 -0
  115. app/periphery/db/models/metadata.py +6 -0
  116. app/periphery/db/models/registry.py +18 -0
  117. app/periphery/db/models/telemetry.py +174 -0
  118. app/periphery/db/models/utility.py +19 -0
  119. app/periphery/db/models/views.py +154 -0
  120. app/periphery/db/repos/__init__.py +1 -0
  121. app/periphery/db/repos/relational/__init__.py +1 -0
  122. app/periphery/db/repos/relational/associations_repo.py +117 -0
  123. app/periphery/db/repos/relational/episodes_repo.py +188 -0
  124. app/periphery/db/repos/relational/evidence_repo.py +82 -0
  125. app/periphery/db/repos/relational/experiences_repo.py +41 -0
  126. app/periphery/db/repos/relational/memories_repo.py +99 -0
  127. app/periphery/db/repos/relational/read_policy_repo.py +202 -0
  128. app/periphery/db/repos/relational/telemetry_repo.py +161 -0
  129. app/periphery/db/repos/relational/utility_repo.py +30 -0
  130. app/periphery/db/repos/semantic/__init__.py +1 -0
  131. app/periphery/db/repos/semantic/keyword_retrieval_repo.py +63 -0
  132. app/periphery/db/repos/semantic/semantic_retrieval_repo.py +111 -0
  133. app/periphery/db/session.py +10 -0
  134. app/periphery/db/uow.py +75 -0
  135. app/periphery/embeddings/__init__.py +1 -0
  136. app/periphery/embeddings/local_provider.py +35 -0
  137. app/periphery/embeddings/query_vector_search.py +18 -0
  138. app/periphery/episodes/__init__.py +1 -0
  139. app/periphery/episodes/claude_code.py +387 -0
  140. app/periphery/episodes/codex.py +423 -0
  141. app/periphery/episodes/launcher.py +66 -0
  142. app/periphery/episodes/normalization.py +31 -0
  143. app/periphery/episodes/poller.py +299 -0
  144. app/periphery/episodes/source_discovery.py +66 -0
  145. app/periphery/episodes/tool_filter.py +165 -0
  146. app/periphery/identity/__init__.py +1 -0
  147. app/periphery/identity/claude_hook_install.py +67 -0
  148. app/periphery/identity/claude_runtime.py +83 -0
  149. app/periphery/identity/codex_runtime.py +32 -0
  150. app/periphery/identity/compatibility.py +38 -0
  151. app/periphery/identity/resolver.py +163 -0
  152. app/periphery/session_state/__init__.py +1 -0
  153. app/periphery/session_state/file_store.py +100 -0
  154. app/periphery/telemetry/__init__.py +33 -0
  155. app/periphery/telemetry/operation_summary.py +299 -0
  156. app/periphery/telemetry/session_selection.py +156 -0
  157. app/periphery/telemetry/sync_summary.py +65 -0
  158. app/periphery/validation/__init__.py +1 -0
  159. app/periphery/validation/integrity_validation.py +253 -0
  160. app/periphery/validation/semantic_validation.py +94 -0
  161. shellbrain-0.1.0.dist-info/METADATA +130 -0
  162. shellbrain-0.1.0.dist-info/RECORD +165 -0
  163. shellbrain-0.1.0.dist-info/WHEEL +5 -0
  164. shellbrain-0.1.0.dist-info/entry_points.txt +2 -0
  165. shellbrain-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,130 @@
1
+ Metadata-Version: 2.4
2
+ Name: shellbrain
3
+ Version: 0.1.0
4
+ Summary: Repo-scoped Shellbrain CLI with explicit evidence-backed writes.
5
+ Requires-Python: >=3.11
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: SQLAlchemy<3.0,>=2.0
8
+ Requires-Dist: alembic<2.0,>=1.13
9
+ Requires-Dist: pydantic<3.0,>=2.7
10
+ Requires-Dist: PyYAML<7.0,>=6.0
11
+ Requires-Dist: psycopg[binary]<4.0,>=3.1
12
+ Requires-Dist: pgvector<1.0,>=0.3
13
+ Requires-Dist: sentence-transformers<4.0,>=3.0
14
+
15
+ # Building a Brain
16
+
17
+ `shellbrain` is a repo-scoped long-term context system for agent sessions.
18
+
19
+ Think of it as a case-based memory system with two layers:
20
+
21
+ - durable memories:
22
+ - `problem`
23
+ - `solution`
24
+ - `failed_tactic`
25
+ - `fact`
26
+ - `preference`
27
+ - `change`
28
+ - episodic evidence:
29
+ - transcript-derived `episode_event` records that ground writes
30
+
31
+ It exposes four agent-facing operations:
32
+
33
+ - `read` recalls durable memories related to the current problem or subproblem
34
+ - `events` inspects recent episodic evidence
35
+ - `create` adds new durable Shellbrain entries with explicit `evidence_refs`
36
+ - `update` records utility, links, and lifecycle changes on existing entries
37
+
38
+ ## Install Once Per Machine
39
+
40
+ Treat `shellbrain` as a machine-level CLI, not a per-repo dependency. The normal product path is a one-time global install, then `shellbrain init` from any repo you want to register.
41
+
42
+ Preferred install with `pipx`:
43
+
44
+ ```bash
45
+ pipx install shellbrain
46
+ ```
47
+
48
+ Secondary install path:
49
+
50
+ ```bash
51
+ python3 -m pip install shellbrain
52
+ ```
53
+
54
+ Editable installs remain a development/operator path and are intentionally omitted from the normal user-facing flow.
55
+
56
+ ## Bootstrap
57
+
58
+ From the repo you are working in:
59
+
60
+ ```bash
61
+ shellbrain init
62
+ shellbrain admin doctor
63
+ ```
64
+
65
+ `shellbrain init` is the normal bootstrap and repair path. In the managed-local happy path it owns Docker, Postgres provisioning, migrations, grants, embedding prewarm, repo registration, and Claude integration when eligible.
66
+
67
+ **Claude integration is conservative.** Shellbrain installs the repo-local Claude hook automatically only when the repo looks Claude-managed *and* `init` is running with a real Claude runtime signal. Otherwise it does nothing unless you pass `--host claude`.
68
+
69
+ When running Shellbrain from Codex Desktop or a similar tool shell, if direct calls fail in the current session, retry through a login shell first:
70
+
71
+ ```bash
72
+ zsh -lc 'source ~/.zprofile >/dev/null 2>&1; shellbrain --help'
73
+ ```
74
+
75
+ Then use the same wrapper shape for actual invocations if needed:
76
+
77
+ ```bash
78
+ zsh -lc "source ~/.zprofile >/dev/null 2>&1; shellbrain read --json '{\"query\":\"Have we seen this migration lock timeout before?\",\"kinds\":[\"problem\",\"solution\",\"failed_tactic\"]}'"
79
+ ```
80
+
81
+ If `doctor` reports `repair_needed`, rerun `shellbrain init`.
82
+
83
+ ## Typical Workflow
84
+
85
+ 1. Start with focused retrieval queries about the concrete problem, subsystem, constraint, or decision you are working on. Do not start with vague prompts like "what should I know about this repo?"
86
+ 2. Use `read` again during the task whenever the search shifts or a memory might become useful midway through the work.
87
+ 3. Before every evidence-bearing write, run `shellbrain events --json '{"limit":10}'` so you can inspect concrete `episode_event` ids.
88
+ 4. At session end, normalize what happened into durable memories:
89
+ - the `problem`
90
+ - each `failed_tactic`
91
+ - the `solution`
92
+ - any durable `fact`, `preference`, or `change`
93
+ - `utility_vote` updates for memories that helped or misled, using a `-1.0` to `1.0` scale where negative votes mean unhelpful and positive votes mean helpful
94
+
95
+ Never invent `evidence_refs`. If `events` returns nothing useful or the evidence is ambiguous, skip the write and try again later.
96
+
97
+ Use `--repo-root` when your current working directory is not the repo you want to target.
98
+
99
+ **Repo identity is remote-first.** Shellbrain prefers the normalized `origin` fetch URL. If `origin` is absent but there is exactly one remote, it uses that. If there are multiple remotes and none is `origin`, `init` stops and asks for `--repo-id`. If there is no usable remote, Shellbrain falls back to a weak-local identity tied to the current path.
100
+
101
+ ## Backups and Recovery
102
+
103
+ Shellbrain exposes first-class logical backups:
104
+
105
+ ```bash
106
+ shellbrain admin backup create
107
+ shellbrain admin backup list
108
+ shellbrain admin backup verify
109
+ shellbrain admin backup restore --target-db shellbrain_restore_001
110
+ shellbrain admin doctor
111
+ ```
112
+
113
+ Backups default to `$SHELLBRAIN_HOME/backups`, which is `~/.shellbrain/backups` unless `SHELLBRAIN_HOME` is set. The Docker bind-mounted Postgres data dir protects against container loss, but it is not a backup strategy by itself.
114
+
115
+ ## Advanced / Operator Notes
116
+
117
+ The normal product path should not require users to think about:
118
+
119
+ - raw DSNs
120
+ - manual `docker compose up`
121
+ - manual `shellbrain admin migrate`
122
+ - editable installs
123
+ - manual Claude hook edits
124
+
125
+ Those topics belong in the advanced/operator guide: [`docs/external-quickstart.md`](docs/external-quickstart.md)
126
+
127
+ ## More
128
+
129
+ - Advanced/operator guide: [`docs/external-quickstart.md`](docs/external-quickstart.md)
130
+ - Session-start skill: [`skills/shellbrain-session-start/SKILL.md`](skills/shellbrain-session-start/SKILL.md)
@@ -0,0 +1,165 @@
1
+ app/__init__.py,sha256=WTGhTKX1l6FDGtOvhJsenRcl2J-r_p_UijTPS5wNoVE,68
2
+ app/__main__.py,sha256=ws2Inrm7X2qwR4OO3TOVXFeLzp8okFoj2XO3R5bszCs,153
3
+ app/boot/__init__.py,sha256=lVIrk0CN__8L7Q2UCMxdHr2b4h_qx0juYlTzgUsrhy8,75
4
+ app/boot/admin_db.py,sha256=pzwp__bbIBCdDb4uZ1qxT2lD06HuD3H1WVKpUOXMW6A,3163
5
+ app/boot/config.py,sha256=Dio-JGymU8tgocFm3BYoayaKqDg-mB1Mwf2grhctx70,477
6
+ app/boot/create_policy.py,sha256=6HVeJSZkGCacSWxp1joA4mv3k_5Y4Aterc_U5m8A42k,1954
7
+ app/boot/db.py,sha256=tt4TLQrYQdl8kVSjLColUp0QTXKJJawf-faLfJ-O3pg,2329
8
+ app/boot/embeddings.py,sha256=UY3vIdvE3WzIYGYEez8OlPcxFHC4aj9xgFn1-kFNeIY,2460
9
+ app/boot/home.py,sha256=inIVq29pgTEugp5a-xjuQQpJyplk5vyb20myPZoc6vs,1162
10
+ app/boot/migrations.py,sha256=kI3prOmjkpzg2DVmH-FQ2bDs48S0vGMBgzY2UfOPses,2409
11
+ app/boot/read_policy.py,sha256=QWH3k19ID6ZVkXbJgFntN_kJB2LEkVzlO92iUpk6dcs,6780
12
+ app/boot/repos.py,sha256=Dkit2nemCfNmRJhcU7qEU2LK9EkiAAfmV76H1an_qA4,640
13
+ app/boot/retrieval.py,sha256=3RV-EXp64hEpMcYgwbMx_trMjtSMsstqt9GZouIP-a0,134
14
+ app/boot/thresholds.py,sha256=vzki9uRkXziDzU8nr6XBpDxolplr_xqUZ6PMi3C2YTI,886
15
+ app/boot/update_policy.py,sha256=ZuAL90a1-1U74y6A-jw2HJMGJEG0ZUJGDCJcFZAcbcg,1294
16
+ app/boot/use_cases.py,sha256=4mF1cmVE5Vur6G3SKTffR40FkHsp1AodTC8te72clLc,662
17
+ app/config/__init__.py,sha256=1HznPpCS3WLnxELyBOO9uEbJxTbhxd8eNG73CdVH4h4,73
18
+ app/config/loader.py,sha256=mof1_GREyIwStaOEsWBhi4iEtTSXMHZeknPb_GR9Rhw,2054
19
+ app/config/defaults/create_policy.yaml,sha256=9B8N295Y5NCcrvlq8KtAla28zmHAnXiFVaQdXl0mLx0,160
20
+ app/config/defaults/read_policy.yaml,sha256=RuRowzlGp9437L7c60N4rhAlBWPnTEe5oOo8WHK0BAs,497
21
+ app/config/defaults/runtime.yaml,sha256=svzKC-9QMhuX32Drmi1g40uIX6OtW2CAXrfETq_SBMk,288
22
+ app/config/defaults/thresholds.yaml,sha256=urai6AmVIDFim2sYKdD7zO0oZ7q7QJEIiKmoSZCekUU,128
23
+ app/config/defaults/update_policy.yaml,sha256=H50iYlsoHUnTePCreHannK0pbVXyZ8IJ0FLWIdkNnpY,136
24
+ app/core/__init__.py,sha256=zqeWB6TZrWhKua5pEu16VHxa2jpnL-ixUIHFH_N3ZEs,66
25
+ app/core/contracts/__init__.py,sha256=vSVUBPz3a5oI1ZY58e1MRC3YGEZ7ccE2P8QEe9OH820,74
26
+ app/core/contracts/errors.py,sha256=5M4Ed6J6-t5PNN8qzYBBJFM3jZou6VK_j0zAS0VJc5o,902
27
+ app/core/contracts/requests.py,sha256=_h6A2NztMvoseSfJRPX7WrHEDs9QVPSMONHn-57Qnd8,7076
28
+ app/core/contracts/responses.py,sha256=n0NsgshzXUk4XdXYAKzLnswUdu-qRjHXLDPNlJsFTDc,474
29
+ app/core/entities/__init__.py,sha256=PlY5oqgGApPU8EK6ootu2LamifTKlOlhaIIGJeYh4Vk,69
30
+ app/core/entities/associations.py,sha256=gaBs9NENym4eNAVnij0tt1w4EmPZPR1k8eARC79ph-U,1551
31
+ app/core/entities/episodes.py,sha256=EIVEi5ZgYMjV8JMh1LKDiGe-lOs17TK5h16VmN9VGRg,1590
32
+ app/core/entities/evidence.py,sha256=EJLBLXsC5Kn7azgAelwXswDE5un1svhcnVrI9S09dpM,688
33
+ app/core/entities/facts.py,sha256=VSRqc8yMtL-XIGvviIyz8Hh9wXgNkXI64GC2Q3fuFcw,681
34
+ app/core/entities/guidance.py,sha256=CC7iD7NQWu4nck6BURj9zfioDDTf_-nos-QpurT1wu4,1480
35
+ app/core/entities/identity.py,sha256=OY1iEUroRraAiz1hy9rvmfcGyhmW4v-4dsc5SWKVJcQ,1479
36
+ app/core/entities/memory.py,sha256=VpCxK6khOzo9qOw8ygV1FgiGYpHGbwH5DdDY7fD4b8g,740
37
+ app/core/entities/runtime_context.py,sha256=hg0CzMIIY0Mh3fUDAtiqRgD9jPwm1wMmizLa5cc8j2M,538
38
+ app/core/entities/session_state.py,sha256=nCaWRmTfVAPN6hc5GjVDEIvpccC-29IKApyHLolw0GQ,938
39
+ app/core/entities/telemetry.py,sha256=VCqTXhE9dAP6lxin0wsNl8_FjSDK9u611tdKqQpgtck,3894
40
+ app/core/entities/utility.py,sha256=A-9q0Y8DfIlbMmEagXfBQvsT1JCNtf6xrHM1b_tYHr0,363
41
+ app/core/interfaces/__init__.py,sha256=5LyXZ_5Iv_tyXMlzm0lRzYt5sdMQwdxYfYV0ExBPQJ4,79
42
+ app/core/interfaces/clock.py,sha256=g_sQ5n27DCojbJw2GvaJptRsSJ-Rl8qcINTUr0ZEpeg,336
43
+ app/core/interfaces/config.py,sha256=nl18ikO0D8uLs3EB16mSTQvINQAoBiBIvdLKZYgp49Q,958
44
+ app/core/interfaces/embeddings.py,sha256=ee_bfs3kHDLfCwOXwm8G4HYkrpcGb4hEnO7xrXU5hxA,414
45
+ app/core/interfaces/idgen.py,sha256=PJt4-xQNOm8b6upWquUx11fMp-LWnI4Tmd--tOw8fCI,328
46
+ app/core/interfaces/repos.py,sha256=MfPHx3l0Jq3vUGuj5uDNROrPLkRLGu3DYL7Z4-JXEYQ,9437
47
+ app/core/interfaces/retrieval.py,sha256=goHk-bD_h2xj4oov0NBMcpTedePPauVA6NhxXaA06Mg,668
48
+ app/core/interfaces/session_state_store.py,sha256=bBynKEwMMU2Tdkvs287qr6fgC98-LvMPUSQ0l2F3Afk,1111
49
+ app/core/interfaces/unit_of_work.py,sha256=7ABcQEd3LXQS-1FDvmBzT59u3deIvE13GGxySL87arE,1465
50
+ app/core/policies/__init__.py,sha256=481vCCvCw6ns6AG39U6th2NNANfZ7mQnasaGZHTcUmc,74
51
+ app/core/policies/_shared/__init__.py,sha256=kSqAW7YXeZNQuVV42iuNNivrfzsesRPZfy_ZrWqqMao,84
52
+ app/core/policies/_shared/executor.py,sha256=TTBE8CQ-A6bh0pkJVAtnrE1P8EOTovPmLhttoiU72yI,5618
53
+ app/core/policies/_shared/side_effects.py,sha256=34RTYtm3WSP7e6kDonO0xKut96xDvEPJ-ktvj3EBQh0,308
54
+ app/core/policies/create_policy/__init__.py,sha256=6bjnNUPLfjWyxdPqNRT_J3fJrPDrrBzHfscY46aN8ZY,79
55
+ app/core/policies/create_policy/pipeline.py,sha256=S4K2pBdvxyt6B_UFwEMf1e1H-CaOOF6iCXAX7R_l_18,3524
56
+ app/core/policies/read_policy/__init__.py,sha256=_EW0F6mlRWgyEKwxvpAAyeOKbBg1k861BTo67S7sRCM,83
57
+ app/core/policies/read_policy/bm25.py,sha256=K6bfCJbNI0hPWYbfUNVFHzV_GYAd7mPccc6jFl6lIUM,3710
58
+ app/core/policies/read_policy/context_pack_builder.py,sha256=lS_31LDlkpKHHdQarO6SvAFqv63T1UZnnaieWwAkTjY,5306
59
+ app/core/policies/read_policy/expansion.py,sha256=X-djOjhhrnFdKBPd6qW4eAyVrtR_pbG9pcudGQjTMlc,6004
60
+ app/core/policies/read_policy/fusion_rrf.py,sha256=LLPkfKPK3BUClC54iobXwjQgRHjGyeTf0BzLOmgq6qg,1283
61
+ app/core/policies/read_policy/lexical_query.py,sha256=JeNtNYxPX3RLc9gnmVRqDJDAUxCyVqyP-JOr_KjlF4Q,2715
62
+ app/core/policies/read_policy/pipeline.py,sha256=4xfWQjl0X9eN2YAu_KiTlbBw9LZTN-M8PNc7_6RfCsU,4021
63
+ app/core/policies/read_policy/scenario_lift.py,sha256=YIB-2HR2rGavNYcmjcAmIz-MAiVcD3MMLqA4vMm3cAs,439
64
+ app/core/policies/read_policy/scoring.py,sha256=ANBOm_bI1XI_wkEYExjF4m33rGeVpsZATuGIWD4LmW0,2583
65
+ app/core/policies/read_policy/seed_retrieval.py,sha256=dAu2ffkVqhVEpbNGAmWoa-Nybx2CSLszTvaRg21hBCM,1741
66
+ app/core/policies/read_policy/utility_prior.py,sha256=ZyV7maqHjtlpbttLv75i77c4-1miNZQy82ZRQWYII28,421
67
+ app/core/policies/update_policy/__init__.py,sha256=zvMLj4biXed_p3yCeFZqG9waZXShjzvwxG_F5aVmyQk,79
68
+ app/core/policies/update_policy/pipeline.py,sha256=8xWLmSIYrQfOQU-ksBY_-VvVfbByiWHZpR1TCRYU3hM,3045
69
+ app/core/use_cases/__init__.py,sha256=Ki3dEdT6swbaJfRJyoEFEgioMdocn4NG5BCqQ6XwsQE,75
70
+ app/core/use_cases/build_guidance.py,sha256=m9_YxsoxL-jbzZRrBAjFo0ZTgZeDhwXBQuFIP3Ekrt0,2873
71
+ app/core/use_cases/create_memory.py,sha256=rFdblRkolXDipto15buurV1R3S-MHnwVr2pwJoxogpE,1061
72
+ app/core/use_cases/manage_session_state.py,sha256=UZ-QjVkAByiSAUrWOxG2b0QDfgfI_WBhvS88aZjOq-s,5692
73
+ app/core/use_cases/read_memory.py,sha256=R5yvsjE1rN0-uLK1fTcq408RD9DlOXwlV5JRxE89abE,899
74
+ app/core/use_cases/record_episode_sync_telemetry.py,sha256=nD2PFcOl5fnWZccFcECwUEYSE8xEEgnfcBTndtXjIXQ,573
75
+ app/core/use_cases/record_operation_telemetry.py,sha256=1dSluZE2D2ruaLNVa7gykOCQb4BxCIKVWK8JSpkai_o,1057
76
+ app/core/use_cases/sync_episode.py,sha256=bCIDXcJF5WPnesLoTdz8G82PY-DbOUsvaDLD404J9n8,5509
77
+ app/core/use_cases/update_memory.py,sha256=l9KD0Ao5Am6UgZjMQ7H0RsJaivWGckMg--WZxBC4eGQ,1731
78
+ app/migrations/__init__.py,sha256=h5OqHyem84NMz_VBw8Llnvij4pHHUFYFApeh-Qew0AI,75
79
+ app/migrations/env.py,sha256=O2wHc_P5Lcr-gYpubeqloG19EnOJIaKaRwHJFDPSu8Y,1826
80
+ app/migrations/versions/20260226_0001_initial_schema.py,sha256=8NnMvEPlvnf2m8chT2D9b6iWKG-mZEC6ZXJzDlEii4U,11188
81
+ app/migrations/versions/20260312_0002_add_hard_invariants.py,sha256=-5THZ3G_83oIE68iBKyE9SPO0vBqt_vW4CDrr_iwEcg,1771
82
+ app/migrations/versions/20260312_0003_drop_create_confidence.py,sha256=5uJwxwUoYyy8Yq_Lo4TCst2-MSnDI0DBkfYgZpSogNg,1009
83
+ app/migrations/versions/20260313_0004_episode_sync_hardening.py,sha256=bq0Wx27L9gfPxKAk6OLrq5P9IbyGMDLp4Wq9cEO3uS0,1873
84
+ app/migrations/versions/20260313_0005_evidence_episode_event_refs.py,sha256=J-LFL5qmRqNmzzybEEu5Fd9usJ7IHNEUwJkf1c9oU8o,1181
85
+ app/migrations/versions/20260318_0006_usage_telemetry_schema.py,sha256=2GwR33hftBCdTvqqMii1WPNN1SQWFYB2H4a4KCD2LKw,7780
86
+ app/migrations/versions/20260319_0007_identity_session_guidance.py,sha256=pdZX-jXld47Gz3G7MDOuQKlCVyHyHgvm3BEGcYJxayc,1284
87
+ app/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py,sha256=MkJH_ly2dbIDPbUiavSmcV2gJCuFbXnOVx8NftyDRXE,745
88
+ app/migrations/versions/__init__.py,sha256=cXyXgk7roIssc0hNAkMgHJMIsy6OEHBExDTSvWeyo1I,64
89
+ app/periphery/__init__.py,sha256=KrivF_lVUSt8rhbpuzRcpWLVQwkyfavlEdWPpRBCOMg,70
90
+ app/periphery/admin/__init__.py,sha256=h75_7pOydWMYIbyTUf9d4YP0fTj8zZ2nqVMeWF85eqQ,59
91
+ app/periphery/admin/backup.py,sha256=eh7bvhDDCdLu5InswqOov2bUJvclrHCoJ8cyLnZQloI,12725
92
+ app/periphery/admin/destructive_guard.py,sha256=Eu8m7e9sODgvJAH8u4NmdSxub1INGt4Ir277xXJfuuU,1064
93
+ app/periphery/admin/doctor.py,sha256=5YOemy0H5TpH6nxVrI0CFM3O5Eixw4pmj5_YacHn4YI,8260
94
+ app/periphery/admin/init.py,sha256=S4THzLyJQOS5wnE10vOyCGMuPWtoSUNijfqQzH5Rmkk,37006
95
+ app/periphery/admin/instance_guard.py,sha256=mgKWgGlGZYP1unoFV74B-ShPr2fzhRpxyzi4Of9Skyw,7596
96
+ app/periphery/admin/machine_state.py,sha256=PFNUpIaYMSNvKiZijwX7O_5IrAIJWRvB-JTV3cjRU2E,11513
97
+ app/periphery/admin/privileges.py,sha256=8T9OD3wt9R5zmn_BXKkG4IcTj0VdoKwJa6Txr3OiVMU,1705
98
+ app/periphery/admin/repo_state.py,sha256=hHi1A4uD1I4eqEqeJ3B-ds1D40Is3PsYS4KvKnw4-X4,9064
99
+ app/periphery/admin/restore.py,sha256=D0ZCadEVoLlfszseOUzEeX1YyqWFF5dVZwChcg5lMkM,871
100
+ app/periphery/cli/__init__.py,sha256=SsCtZ6Nc3b_vpjzd9jK6N9DNcnYtq08-FC7URwZcLA4,77
101
+ app/periphery/cli/handlers.py,sha256=-PMTKyb51NdapPQDomA3WuRjxh2wlhHBrFTLDPITMXc,37554
102
+ app/periphery/cli/hydration.py,sha256=Sm0mXQlV-0ncbPf-Ye_wMSfE8ZnosyRDdhGQrHQNJRQ,4600
103
+ app/periphery/cli/main.py,sha256=Ftrb4ll91KvazvWSgpO5C3m4tUEbBY0jxkko7PCbx_s,28559
104
+ app/periphery/cli/presenter_json.py,sha256=tHjAWBTgHVgkNlA1Rkoe3xpg2Lwl626gd9A1rBUPOOA,301
105
+ app/periphery/cli/schema_validation.py,sha256=Na1y8Gr2b2WASH7DEcnSresOBt9L1aKk6_xNf3TZE_E,7131
106
+ app/periphery/db/__init__.py,sha256=g84dYrlu_pkqh-GaN-6Ol2MVIvVR7fxTysbnYLM59K4,83
107
+ app/periphery/db/engine.py,sha256=MyXGOvx25Ay7d-bDwahyaYIiyylhHQ55Gvf2S8j7V24,336
108
+ app/periphery/db/session.py,sha256=766rb6vM3wfFz4HUwFhW2zUPzXVP8XaqV9hxJ9BojMk,396
109
+ app/periphery/db/uow.py,sha256=iEuqYDZ1Pqvl5l39My25q59ILvpuNSyktYDZAynaafw,3161
110
+ app/periphery/db/models/__init__.py,sha256=UPFUnqXRYvL6gu6yxFjoqefqJIJfL_E2C0xc_mxNg6o,68
111
+ app/periphery/db/models/associations.py,sha256=KRmchFWEVwhqUl5AtUue5kEwiGfvMk1tyLUyog1y6Ys,2891
112
+ app/periphery/db/models/episodes.py,sha256=fNOZyqzi9bQBge1aVuQ4F8uQAvf9Y_xeKLy5qhh2S5A,2595
113
+ app/periphery/db/models/evidence.py,sha256=mLSjlfg1Be5RpinTBj6A0Clm6sZ2KV4nkVtzwRbCNeg,778
114
+ app/periphery/db/models/experiences.py,sha256=ASbNa4jalvcGqd_jiKcungOMCPe_0FK2BuY4o-oeSpU,1563
115
+ app/periphery/db/models/instance_metadata.py,sha256=Cx5Tz8HvOnRBkY49JmnZ5L2ZrdLfG3OnqUQWGwepslo,573
116
+ app/periphery/db/models/memories.py,sha256=M08szfRpKPRbaM1_FMumRzVuueccQNU6WQU1tjZI8rM,1555
117
+ app/periphery/db/models/metadata.py,sha256=SnNvrtvwUpc7QW4Qf6-5lGVYvfM15bkTUNi2SqdgL4E,148
118
+ app/periphery/db/models/registry.py,sha256=kaKIKfwKq3Hsa-xFx8SRLXOdySxTITpk-Gnb7VsbhzU,442
119
+ app/periphery/db/models/telemetry.py,sha256=TYFNGFXQQEi7Kqa7i1ErOTJrtZOOb1dAmMqRWTCJCzI,7481
120
+ app/periphery/db/models/utility.py,sha256=IrbHTVfQ0civ5zW4nyxm4uSp2s0taGReMy3n7sX9f7o,821
121
+ app/periphery/db/models/views.py,sha256=4_utLrJjFkQqxapzOPmLqGyoZTlGi3O2mAwyfQGjQQw,4768
122
+ app/periphery/db/repos/__init__.py,sha256=EMQfI_X8stdhZY01RCL6m_lclLO6ekNGDwVhMqBwekY,78
123
+ app/periphery/db/repos/relational/__init__.py,sha256=IGoZ-GI7KPTDCt1wc-oYQEnSMKGbkNQPhXH_2Z0FZuA,78
124
+ app/periphery/db/repos/relational/associations_repo.py,sha256=Vth5GwKHAvbhUSx6a0TKxZMhqKjOp8mzuY0s80K_Yaw,4768
125
+ app/periphery/db/repos/relational/episodes_repo.py,sha256=7ggsw27vJXXgTkofxPqqucZ4_YTbjiLFiHPGJi4S6mU,6790
126
+ app/periphery/db/repos/relational/evidence_repo.py,sha256=IKV9w6NGjYPRxf4GBcP6ZxEP7pcS41q9xjs6XRJHVjA,3138
127
+ app/periphery/db/repos/relational/experiences_repo.py,sha256=2ntob7Dq7V6mpuS6WNMbjYgqnNtZ82DzK1wtXnU7llU,1512
128
+ app/periphery/db/repos/relational/memories_repo.py,sha256=B5uV1JvxU94HTKX7R9rNsT5ZhlDMkDBVLtx2LMp3HR8,3679
129
+ app/periphery/db/repos/relational/read_policy_repo.py,sha256=ekfniFgu7kTIujjokgKoybUEid_C2O2FkwcDWYzjkPM,8724
130
+ app/periphery/db/repos/relational/telemetry_repo.py,sha256=eu2QSdsGE2TJqI8aeo5x5ti6npEe35uXYOF2J2uV1Fw,6338
131
+ app/periphery/db/repos/relational/utility_repo.py,sha256=X3tD6iVv0iuPbleRY6wqV88VNRz31t2BMUq2I3NkYz4,1096
132
+ app/periphery/db/repos/semantic/__init__.py,sha256=85CANwbY2x0O8VDzPxth-OPyFrUhWM2B9wsyl8Wtayo,67
133
+ app/periphery/db/repos/semantic/keyword_retrieval_repo.py,sha256=W6lMPbutBD6GH41YrZ1C0oORTh13-uSyaZ5cvlostTo,2229
134
+ app/periphery/db/repos/semantic/semantic_retrieval_repo.py,sha256=wjm1SpjgdnZbLEbn0A6WlKr1WZZ71bKix2EDelmbuC0,4202
135
+ app/periphery/embeddings/__init__.py,sha256=PsuhW2xZ118vSknGEbXN-AvVw2utW0htNYDOLLNQeuE,89
136
+ app/periphery/embeddings/local_provider.py,sha256=6eXcKz2EPRqyQ01x-1OoEyV_h7HbCm7uTDNQuop7zzA,1456
137
+ app/periphery/embeddings/query_vector_search.py,sha256=O0anXyOY4CiJU-suJ5lGhR_L7bxZkIuGS39aVzNV7dQ,770
138
+ app/periphery/episodes/__init__.py,sha256=tIxYau1g9bxK-hbX0QyAJWIAocSwC6snRivQfZpWvmw,82
139
+ app/periphery/episodes/claude_code.py,sha256=vGuunUo0UjjQy13XAlQ-T51kK9B2JtoMYruGFAti96o,13890
140
+ app/periphery/episodes/codex.py,sha256=Y2485CFkHFFZMtUa4fgUdFe3bhteOpZbbSi4pipH-Ss,15202
141
+ app/periphery/episodes/launcher.py,sha256=USbPePDvtnDFsVsn3u3Phossta0HpDrH-ggLAvsWheU,1628
142
+ app/periphery/episodes/normalization.py,sha256=ZSEIK3aLyA9domP0h0DqcXa-xgud8X8q4cU-w4ENIkA,1004
143
+ app/periphery/episodes/poller.py,sha256=hSNFN8zxx8u7yk1mOfc55UxZmiQjx97GnoQVlI0NEhA,10912
144
+ app/periphery/episodes/source_discovery.py,sha256=ECuf1FnFBjF8gRe3WNbGtzytlpsQdfkxOM_kg8AiBcE,2209
145
+ app/periphery/episodes/tool_filter.py,sha256=p_GTnEmrg6-XlKRtTu8LNM-Fx10Pc2skQ8aPFsfhLmE,5328
146
+ app/periphery/identity/__init__.py,sha256=BQPghzW1cW0ylTJ6826F1cfyyiUf1k8OKaNglDFJIHQ,60
147
+ app/periphery/identity/claude_hook_install.py,sha256=6kYpwfOxDoEY_3XbiCyZ3rg1G_rCT53ukUHmfpiDBwY,2327
148
+ app/periphery/identity/claude_runtime.py,sha256=cxT8Xspu7LncQTM9s7DbXGZZ_UYmv8NQwklw80KiHNU,2935
149
+ app/periphery/identity/codex_runtime.py,sha256=rQqpMCvM5A_nSOHQ4rra2dJFxnX6YQmvIogWykIvcEc,999
150
+ app/periphery/identity/compatibility.py,sha256=o3wIY7-hxZfDkh_GLdEPF88JYFpPGKN9bzhu4ji7QoM,1523
151
+ app/periphery/identity/resolver.py,sha256=BgBPyzDflRQ9l5KvBiD6bke9taVzQXD1F5Xw1ftKcwQ,6145
152
+ app/periphery/session_state/__init__.py,sha256=NV3IwSbN2hiXIQjtubnqCHxhK7e46D6k0c1bo6k6yqU,51
153
+ app/periphery/session_state/file_store.py,sha256=9h0FHVYmWDFwm6i6xWnNKvUU6G82S0ULaVXICZ0PNis,3968
154
+ app/periphery/telemetry/__init__.py,sha256=290Wtpkab0axgOueNzWXk-CPJajXcKBaokjywJtCi8U,1003
155
+ app/periphery/telemetry/operation_summary.py,sha256=wEQ8a9Byc8K5Zgkiq2llXp2O6nBDXpWGHxX10XsDCIM,11488
156
+ app/periphery/telemetry/session_selection.py,sha256=ngu0HI9vrZTX3MpYBFoa2OuiPkOCi8oeyomRzhXWi0A,5736
157
+ app/periphery/telemetry/sync_summary.py,sha256=k4Cyptn7XAraa8ErFpl3vvHik6syO6FGCU6zPTfZEUQ,1994
158
+ app/periphery/validation/__init__.py,sha256=9pK05IDtsv3ISulYHBdsZF-1nFtV80QAXKSzXrm7l0U,50
159
+ app/periphery/validation/integrity_validation.py,sha256=40u4RIDrM5sKHyVYPRo0u5hZRLyR7dmyZRQKtoD0st0,9841
160
+ app/periphery/validation/semantic_validation.py,sha256=Ai6dvS2h5NU7lq-A5w0ru5ljyJb90Dq0VZRnkE7nFvk,3733
161
+ shellbrain-0.1.0.dist-info/METADATA,sha256=U3UAk-Rjsx3ouM2Cd2XnhEdudga0PdCZCDMLfs2xTlQ,5184
162
+ shellbrain-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
163
+ shellbrain-0.1.0.dist-info/entry_points.txt,sha256=FD3CKJzh8iT4ImC4y-MmL03QU2nfoYM1WrR4-PgqTqs,59
164
+ shellbrain-0.1.0.dist-info/top_level.txt,sha256=io9g7LCbfmTG1SFKgEOGXmCFB9uMP2H5lerm0HiHWQE,4
165
+ shellbrain-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ shellbrain = app.periphery.cli.main:main
@@ -0,0 +1 @@
1
+ app