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.
- app/__init__.py +1 -0
- app/__main__.py +7 -0
- app/boot/__init__.py +1 -0
- app/boot/admin_db.py +88 -0
- app/boot/config.py +14 -0
- app/boot/create_policy.py +52 -0
- app/boot/db.py +70 -0
- app/boot/embeddings.py +55 -0
- app/boot/home.py +45 -0
- app/boot/migrations.py +61 -0
- app/boot/read_policy.py +179 -0
- app/boot/repos.py +15 -0
- app/boot/retrieval.py +3 -0
- app/boot/thresholds.py +19 -0
- app/boot/update_policy.py +34 -0
- app/boot/use_cases.py +22 -0
- app/config/__init__.py +1 -0
- app/config/defaults/create_policy.yaml +7 -0
- app/config/defaults/read_policy.yaml +25 -0
- app/config/defaults/runtime.yaml +10 -0
- app/config/defaults/thresholds.yaml +3 -0
- app/config/defaults/update_policy.yaml +5 -0
- app/config/loader.py +58 -0
- app/core/__init__.py +1 -0
- app/core/contracts/__init__.py +1 -0
- app/core/contracts/errors.py +29 -0
- app/core/contracts/requests.py +211 -0
- app/core/contracts/responses.py +15 -0
- app/core/entities/__init__.py +1 -0
- app/core/entities/associations.py +58 -0
- app/core/entities/episodes.py +66 -0
- app/core/entities/evidence.py +29 -0
- app/core/entities/facts.py +30 -0
- app/core/entities/guidance.py +47 -0
- app/core/entities/identity.py +48 -0
- app/core/entities/memory.py +34 -0
- app/core/entities/runtime_context.py +19 -0
- app/core/entities/session_state.py +31 -0
- app/core/entities/telemetry.py +152 -0
- app/core/entities/utility.py +14 -0
- app/core/interfaces/__init__.py +1 -0
- app/core/interfaces/clock.py +12 -0
- app/core/interfaces/config.py +28 -0
- app/core/interfaces/embeddings.py +12 -0
- app/core/interfaces/idgen.py +11 -0
- app/core/interfaces/repos.py +279 -0
- app/core/interfaces/retrieval.py +20 -0
- app/core/interfaces/session_state_store.py +33 -0
- app/core/interfaces/unit_of_work.py +50 -0
- app/core/policies/__init__.py +1 -0
- app/core/policies/_shared/__init__.py +1 -0
- app/core/policies/_shared/executor.py +132 -0
- app/core/policies/_shared/side_effects.py +9 -0
- app/core/policies/create_policy/__init__.py +1 -0
- app/core/policies/create_policy/pipeline.py +96 -0
- app/core/policies/read_policy/__init__.py +1 -0
- app/core/policies/read_policy/bm25.py +114 -0
- app/core/policies/read_policy/context_pack_builder.py +140 -0
- app/core/policies/read_policy/expansion.py +132 -0
- app/core/policies/read_policy/fusion_rrf.py +34 -0
- app/core/policies/read_policy/lexical_query.py +101 -0
- app/core/policies/read_policy/pipeline.py +93 -0
- app/core/policies/read_policy/scenario_lift.py +11 -0
- app/core/policies/read_policy/scoring.py +61 -0
- app/core/policies/read_policy/seed_retrieval.py +54 -0
- app/core/policies/read_policy/utility_prior.py +11 -0
- app/core/policies/update_policy/__init__.py +1 -0
- app/core/policies/update_policy/pipeline.py +80 -0
- app/core/use_cases/__init__.py +1 -0
- app/core/use_cases/build_guidance.py +85 -0
- app/core/use_cases/create_memory.py +26 -0
- app/core/use_cases/manage_session_state.py +159 -0
- app/core/use_cases/read_memory.py +21 -0
- app/core/use_cases/record_episode_sync_telemetry.py +19 -0
- app/core/use_cases/record_operation_telemetry.py +32 -0
- app/core/use_cases/sync_episode.py +162 -0
- app/core/use_cases/update_memory.py +40 -0
- app/migrations/__init__.py +1 -0
- app/migrations/env.py +65 -0
- app/migrations/versions/20260226_0001_initial_schema.py +232 -0
- app/migrations/versions/20260312_0002_add_hard_invariants.py +60 -0
- app/migrations/versions/20260312_0003_drop_create_confidence.py +40 -0
- app/migrations/versions/20260313_0004_episode_sync_hardening.py +71 -0
- app/migrations/versions/20260313_0005_evidence_episode_event_refs.py +45 -0
- app/migrations/versions/20260318_0006_usage_telemetry_schema.py +175 -0
- app/migrations/versions/20260319_0007_identity_session_guidance.py +49 -0
- app/migrations/versions/20260320_0008_instance_metadata_and_backup_safety.py +31 -0
- app/migrations/versions/__init__.py +1 -0
- app/periphery/__init__.py +1 -0
- app/periphery/admin/__init__.py +1 -0
- app/periphery/admin/backup.py +360 -0
- app/periphery/admin/destructive_guard.py +32 -0
- app/periphery/admin/doctor.py +192 -0
- app/periphery/admin/init.py +996 -0
- app/periphery/admin/instance_guard.py +211 -0
- app/periphery/admin/machine_state.py +354 -0
- app/periphery/admin/privileges.py +42 -0
- app/periphery/admin/repo_state.py +266 -0
- app/periphery/admin/restore.py +30 -0
- app/periphery/cli/__init__.py +1 -0
- app/periphery/cli/handlers.py +830 -0
- app/periphery/cli/hydration.py +119 -0
- app/periphery/cli/main.py +710 -0
- app/periphery/cli/presenter_json.py +10 -0
- app/periphery/cli/schema_validation.py +201 -0
- app/periphery/db/__init__.py +1 -0
- app/periphery/db/engine.py +10 -0
- app/periphery/db/models/__init__.py +1 -0
- app/periphery/db/models/associations.py +55 -0
- app/periphery/db/models/episodes.py +55 -0
- app/periphery/db/models/evidence.py +19 -0
- app/periphery/db/models/experiences.py +33 -0
- app/periphery/db/models/instance_metadata.py +17 -0
- app/periphery/db/models/memories.py +39 -0
- app/periphery/db/models/metadata.py +6 -0
- app/periphery/db/models/registry.py +18 -0
- app/periphery/db/models/telemetry.py +174 -0
- app/periphery/db/models/utility.py +19 -0
- app/periphery/db/models/views.py +154 -0
- app/periphery/db/repos/__init__.py +1 -0
- app/periphery/db/repos/relational/__init__.py +1 -0
- app/periphery/db/repos/relational/associations_repo.py +117 -0
- app/periphery/db/repos/relational/episodes_repo.py +188 -0
- app/periphery/db/repos/relational/evidence_repo.py +82 -0
- app/periphery/db/repos/relational/experiences_repo.py +41 -0
- app/periphery/db/repos/relational/memories_repo.py +99 -0
- app/periphery/db/repos/relational/read_policy_repo.py +202 -0
- app/periphery/db/repos/relational/telemetry_repo.py +161 -0
- app/periphery/db/repos/relational/utility_repo.py +30 -0
- app/periphery/db/repos/semantic/__init__.py +1 -0
- app/periphery/db/repos/semantic/keyword_retrieval_repo.py +63 -0
- app/periphery/db/repos/semantic/semantic_retrieval_repo.py +111 -0
- app/periphery/db/session.py +10 -0
- app/periphery/db/uow.py +75 -0
- app/periphery/embeddings/__init__.py +1 -0
- app/periphery/embeddings/local_provider.py +35 -0
- app/periphery/embeddings/query_vector_search.py +18 -0
- app/periphery/episodes/__init__.py +1 -0
- app/periphery/episodes/claude_code.py +387 -0
- app/periphery/episodes/codex.py +423 -0
- app/periphery/episodes/launcher.py +66 -0
- app/periphery/episodes/normalization.py +31 -0
- app/periphery/episodes/poller.py +299 -0
- app/periphery/episodes/source_discovery.py +66 -0
- app/periphery/episodes/tool_filter.py +165 -0
- app/periphery/identity/__init__.py +1 -0
- app/periphery/identity/claude_hook_install.py +67 -0
- app/periphery/identity/claude_runtime.py +83 -0
- app/periphery/identity/codex_runtime.py +32 -0
- app/periphery/identity/compatibility.py +38 -0
- app/periphery/identity/resolver.py +163 -0
- app/periphery/session_state/__init__.py +1 -0
- app/periphery/session_state/file_store.py +100 -0
- app/periphery/telemetry/__init__.py +33 -0
- app/periphery/telemetry/operation_summary.py +299 -0
- app/periphery/telemetry/session_selection.py +156 -0
- app/periphery/telemetry/sync_summary.py +65 -0
- app/periphery/validation/__init__.py +1 -0
- app/periphery/validation/integrity_validation.py +253 -0
- app/periphery/validation/semantic_validation.py +94 -0
- shellbrain-0.1.0.dist-info/METADATA +130 -0
- shellbrain-0.1.0.dist-info/RECORD +165 -0
- shellbrain-0.1.0.dist-info/WHEEL +5 -0
- shellbrain-0.1.0.dist-info/entry_points.txt +2 -0
- 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 @@
|
|
|
1
|
+
app
|