e2er 0.3.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.
- e2er-0.3.0.dist-info/METADATA +502 -0
- e2er-0.3.0.dist-info/RECORD +135 -0
- e2er-0.3.0.dist-info/WHEEL +5 -0
- e2er-0.3.0.dist-info/entry_points.txt +2 -0
- e2er-0.3.0.dist-info/licenses/LICENSE +21 -0
- e2er-0.3.0.dist-info/top_level.txt +2 -0
- skills/__init__.py +0 -0
- skills/files/__init__.py +0 -0
- skills/files/base/__init__.py +0 -0
- skills/files/base/economist.md +22 -0
- skills/files/base/researcher.md +23 -0
- skills/files/causal-inference/__init__.py +0 -0
- skills/files/causal-inference/judge-designs.md +189 -0
- skills/files/causal-inference/natural-experiments.md +42 -0
- skills/files/causal-inference/sensitivity.md +200 -0
- skills/files/causal-inference/shift-share.md +143 -0
- skills/files/causal-inference/weak-instruments.md +162 -0
- skills/files/data/__init__.py +0 -0
- skills/files/data/allium-cli.md +143 -0
- skills/files/data/allium-developer-api.md +149 -0
- skills/files/data/blockchain.md +45 -0
- skills/files/data/byod.md +45 -0
- skills/files/data/cleaning.md +263 -0
- skills/files/data/crypto-defi.md +173 -0
- skills/files/data/figure-spec.md +121 -0
- skills/files/data/visualization.md +254 -0
- skills/files/econometrics/__init__.py +0 -0
- skills/files/econometrics/did.md +40 -0
- skills/files/econometrics/event-study.md +239 -0
- skills/files/econometrics/iv-estimation.md +121 -0
- skills/files/econometrics/panel-data.md +158 -0
- skills/files/econometrics/rdd.md +146 -0
- skills/files/econometrics/time-series.md +307 -0
- skills/files/latex/__init__.py +0 -0
- skills/files/latex/bibtex.md +502 -0
- skills/files/latex/econ-model.md +341 -0
- skills/files/latex/tables.md +368 -0
- skills/files/math/__init__.py +0 -0
- skills/files/math/optimization-verification.md +310 -0
- skills/files/math/proof-strategies.md +224 -0
- skills/files/modeling/__init__.py +0 -0
- skills/files/modeling/asset-pricing.md +274 -0
- skills/files/modeling/game-theory.md +103 -0
- skills/files/modeling/market-microstructure.md +239 -0
- skills/files/reasoning/__init__.py +0 -0
- skills/files/reasoning/anti-slop.md +37 -0
- skills/files/reasoning/argument-audit.md +161 -0
- skills/files/reasoning/creative-ideation.md +95 -0
- skills/files/reasoning/identification.md +36 -0
- skills/files/reasoning/novelty.md +147 -0
- skills/files/review/__init__.py +0 -0
- skills/files/review/consistency-check.md +169 -0
- skills/files/review/constructive-feedback.md +166 -0
- skills/files/review/data-quality.md +178 -0
- skills/files/review/referee-simulation.md +77 -0
- skills/files/review/reference-check.md +65 -0
- skills/files/review/technical-review.md +177 -0
- skills/files/review/writing-quality.md +181 -0
- skills/files/synthesis/__init__.py +0 -0
- skills/files/synthesis/context-builder.md +45 -0
- skills/files/synthesis/deliverables.md +71 -0
- skills/files/synthesis/replication-package.md +89 -0
- skills/files/writing/__init__.py +0 -0
- skills/files/writing/abstract.md +113 -0
- skills/files/writing/discussion.md +100 -0
- skills/files/writing/paper-structure.md +49 -0
- skills/files/writing/personal-style.md +149 -0
- skills/files/writing/revision.md +132 -0
- src/__init__.py +6 -0
- src/__main__.py +69 -0
- src/api/__init__.py +0 -0
- src/api/app.py +1036 -0
- src/cli_install_skills.py +107 -0
- src/config.py +144 -0
- src/core/__init__.py +0 -0
- src/core/pipeline/__init__.py +0 -0
- src/core/pipeline/state.py +59 -0
- src/core/renderer/__init__.py +0 -0
- src/core/renderer/compiler.py +74 -0
- src/core/renderer/prose.py +44 -0
- src/core/renderer/templates.py +148 -0
- src/core/specialists/__init__.py +0 -0
- src/core/specialists/base.py +385 -0
- src/core/specialists/contracts.py +45 -0
- src/core/specialists/dispatcher.py +229 -0
- src/core/specialists/registry.py +118 -0
- src/core/strategist/__init__.py +0 -0
- src/core/strategist/actions.py +72 -0
- src/core/strategist/context.py +187 -0
- src/core/strategist/engine.py +357 -0
- src/core/strategist/review_aggregator.py +203 -0
- src/core/strategist/runner.py +761 -0
- src/core/strategist/state.py +164 -0
- src/db/__init__.py +0 -0
- src/db/client.py +62 -0
- src/db/events.py +74 -0
- src/logging_config.py +23 -0
- src/modules/__init__.py +0 -0
- src/modules/data/__init__.py +1 -0
- src/modules/data/allium.py +379 -0
- src/modules/data/allium_developer.py +336 -0
- src/modules/data/audit.py +186 -0
- src/modules/data/cli.py +516 -0
- src/modules/data/dictionary.py +42 -0
- src/modules/data/guardrails.py +159 -0
- src/modules/data/tools.py +275 -0
- src/modules/fetch/__init__.py +1 -0
- src/modules/fetch/http.py +78 -0
- src/modules/github/__init__.py +1 -0
- src/modules/github/client.py +177 -0
- src/modules/github/push.py +82 -0
- src/modules/github/templates.py +85 -0
- src/modules/literature/__init__.py +1 -0
- src/modules/literature/arxiv.py +72 -0
- src/modules/literature/bibtex.py +81 -0
- src/modules/literature/models.py +54 -0
- src/modules/literature/openalex.py +98 -0
- src/modules/literature/semantic_scholar.py +68 -0
- src/modules/literature/storage.py +124 -0
- src/modules/literature/tools.py +276 -0
- src/modules/llm/__init__.py +1 -0
- src/modules/llm/anthropic.py +168 -0
- src/modules/llm/base.py +124 -0
- src/modules/llm/claude_code.py +407 -0
- src/modules/llm/codex.py +211 -0
- src/modules/llm/gemini.py +225 -0
- src/modules/llm/openrouter.py +198 -0
- src/modules/llm/registry.py +31 -0
- src/modules/llm/tools.py +123 -0
- src/modules/security.py +41 -0
- src/modules/tracking/__init__.py +1 -0
- src/modules/tracking/costs.py +44 -0
- src/modules/tracking/usage.py +172 -0
- src/skills/__init__.py +0 -0
- src/skills/loader.py +81 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: e2er
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: End-to-End Researcher — automated research pipeline for economics, finance, and IS
|
|
5
|
+
License: MIT
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: anthropic>=0.40.0
|
|
10
|
+
Requires-Dist: openai>=1.50.0
|
|
11
|
+
Requires-Dist: httpx>=0.27.0
|
|
12
|
+
Requires-Dist: fastapi>=0.115.0
|
|
13
|
+
Requires-Dist: uvicorn[standard]>=0.30.0
|
|
14
|
+
Requires-Dist: pydantic>=2.9.0
|
|
15
|
+
Requires-Dist: pydantic-settings>=2.6.0
|
|
16
|
+
Requires-Dist: psycopg[binary,pool]>=3.2.0
|
|
17
|
+
Requires-Dist: PyGithub>=2.4.0
|
|
18
|
+
Requires-Dist: gitpython>=3.1.0
|
|
19
|
+
Requires-Dist: pyalex>=0.14
|
|
20
|
+
Requires-Dist: arxiv>=2.1.0
|
|
21
|
+
Requires-Dist: bibtexparser>=2.0.0b7
|
|
22
|
+
Requires-Dist: pandas>=2.0
|
|
23
|
+
Requires-Dist: numpy>=1.26
|
|
24
|
+
Requires-Dist: matplotlib>=3.8
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0
|
|
26
|
+
Requires-Dist: python-multipart>=0.0.12
|
|
27
|
+
Requires-Dist: jinja2>=3.1.0
|
|
28
|
+
Provides-Extra: pgvector
|
|
29
|
+
Requires-Dist: pgvector>=0.3.0; extra == "pgvector"
|
|
30
|
+
Requires-Dist: sentence-transformers>=3.3.0; extra == "pgvector"
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
35
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
36
|
+
Requires-Dist: mypy>=1.11; extra == "dev"
|
|
37
|
+
Requires-Dist: respx>=0.21; extra == "dev"
|
|
38
|
+
Dynamic: license-file
|
|
39
|
+
|
|
40
|
+
# E2ER v3: End-to-End Researcher
|
|
41
|
+
|
|
42
|
+
[]()
|
|
43
|
+
[](LICENSE)
|
|
44
|
+
[]()
|
|
45
|
+
[](https://github.com/bhanneke/E2ER-project/actions/workflows/tests.yml)
|
|
46
|
+
[](https://doi.org/10.5281/zenodo.20187239)
|
|
47
|
+
|
|
48
|
+
**E2ER** is an open-source pipeline for producing peer-review-quality empirical research papers in information systems, economics, and finance. The researcher provides a research question and data access; the pipeline handles the rest: study design, data acquisition, econometric estimation, writing, review, and replication packaging.
|
|
49
|
+
|
|
50
|
+
> **Scope**: E2ER supports three methodologies, selectable per paper at creation time:
|
|
51
|
+
> - **`empirical`** (default) — data-driven, runs identification + econometrics specialists
|
|
52
|
+
> - **`theoretical`** — formal model + hypotheses, no data specialists
|
|
53
|
+
> - **`mixed`** — formal model AND empirical test
|
|
54
|
+
>
|
|
55
|
+
> Pick the methodology that matches your paper's argument structure. Most users want `empirical`; theoretical mode is for pure-model papers (no data, just propositions and proofs).
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## What the system produces
|
|
60
|
+
|
|
61
|
+
For each paper, E2ER produces:
|
|
62
|
+
|
|
63
|
+
| Artifact | Description |
|
|
64
|
+
|----------|-------------|
|
|
65
|
+
| `paper_plan.md` | Research design, propositions, identification strategy |
|
|
66
|
+
| `literature_review.md` | Related work synthesis with citations |
|
|
67
|
+
| `identification_strategy.md` | Causal identification argument and threats |
|
|
68
|
+
| `econometric_spec.md` | Econometric specification with equations |
|
|
69
|
+
| `data_dictionary.json` | Pre-specified minimal data footprint (fields, time filter, granularity) |
|
|
70
|
+
| `paper_draft.tex` | Full LaTeX manuscript |
|
|
71
|
+
| `abstract.tex` | Standalone abstract |
|
|
72
|
+
| `self_attack_report.json` | Adversarial flaw-finding report with severity scores |
|
|
73
|
+
| `review_*.md` | Structured reviews from 6 specialist reviewers |
|
|
74
|
+
| `review_aggregation.json` | Mechanical aggregation verdict and scores |
|
|
75
|
+
| `replication/estimation.py` | Main econometric estimation code |
|
|
76
|
+
| `replication/data_queries.sql` | All data queries used in the paper |
|
|
77
|
+
| `replication/audit_log.csv` | Complete data access audit trail |
|
|
78
|
+
|
|
79
|
+
All artifacts are committed to a dedicated GitHub repository for the paper, structured for direct import into Overleaf.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Pipeline stages
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
[Researcher input: RQ + optional BibTeX + optional data]
|
|
87
|
+
|
|
|
88
|
+
v
|
|
89
|
+
1. Study Design idea_developer, literature_scanner, identification_strategist
|
|
90
|
+
2. Data data_architect -> Allium queries -> human approval -> data_analyst
|
|
91
|
+
3. Estimation econometrics_specialist
|
|
92
|
+
4. Writing section_writer, abstract_writer, latex_formatter
|
|
93
|
+
|
|
|
94
|
+
v (iterative mode only)
|
|
95
|
+
5. Ceiling Check Strategist assesses whether further iteration adds value
|
|
96
|
+
6. Self-Attack Adversarial specialist finds critical flaws (severity 1-10)
|
|
97
|
+
7. Polish 5 parallel specialists: formula, numerics, institutions, bibliography, equilibria
|
|
98
|
+
|
|
|
99
|
+
v
|
|
100
|
+
8. Review 6 parallel reviewers: mechanism, technical, identification,
|
|
101
|
+
literature, data, writing
|
|
102
|
+
9. Aggregation 3-rule mechanical verdict (see below)
|
|
103
|
+
10. Revision Revisor specialist addresses feedback (if MAJOR_REVISION verdict)
|
|
104
|
+
11. Replication Packages all queries, code, and audit trail
|
|
105
|
+
12. GitHub Push LaTeX + replication package committed to paper repo
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Review aggregation
|
|
111
|
+
|
|
112
|
+
Reviews are aggregated by three deterministic rules applied in order:
|
|
113
|
+
|
|
114
|
+
| Rule | Condition | Verdict |
|
|
115
|
+
|------|-----------|---------|
|
|
116
|
+
| 1 | Mechanism reviewer score < 5 | `MECHANISM_FAIL`: fundamental revision required |
|
|
117
|
+
| 2 | Any reviewer score < 4 | `HARD_REJECT`: floor violation |
|
|
118
|
+
| 3 | Weighted average (technical x 1.5, identification x 1.5, data x 1.25) | `ACCEPT` / `MINOR_REVISION` / `MAJOR_REVISION` / `HARD_REJECT` |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Data access: Allium
|
|
123
|
+
|
|
124
|
+
> **The data module is optional.** Most users won't have an Allium key, and that's fine. Set `DATA_MODULE_ENABLED=false` in `.env` to run literature-only papers, or supply your own data files in the workspace. Allium is only required for blockchain/DeFi empirical work.
|
|
125
|
+
|
|
126
|
+
The data module uses [Allium](https://allium.so) for indexed blockchain data. Set `ALLIUM_API_KEY` in `.env` to enable it.
|
|
127
|
+
|
|
128
|
+
Every query passes through 5 guardrails before execution:
|
|
129
|
+
|
|
130
|
+
1. No `SELECT *`: all fields must be listed explicitly
|
|
131
|
+
2. All requested fields must be declared in the paper's `data_dictionary.json`
|
|
132
|
+
3. A time-bound `WHERE` clause is required on every query
|
|
133
|
+
4. Transaction-level granularity requires written justification
|
|
134
|
+
5. Production queries require a prior approved feasibility run on the same table
|
|
135
|
+
|
|
136
|
+
**Two-phase workflow:**
|
|
137
|
+
- **Feasibility** (1000-row sample): auto-approved, executes immediately
|
|
138
|
+
- **Production** (full dataset): queued for researcher approval at `GET /api/papers/{id}/pending-queries`
|
|
139
|
+
|
|
140
|
+
We gratefully acknowledge **[Allium](https://allium.so)** for supporting this research through data access and technical collaboration.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Literature: bring your own BibTeX
|
|
145
|
+
|
|
146
|
+
E2ER does **not** automatically retrieve papers from the internet. The recommended approach is to supply a `.bib` file of your own curated references.
|
|
147
|
+
|
|
148
|
+
Set `LITERATURE_BIBTEX_FILE=/path/to/refs.bib` in your `.env`. When set, the pipeline:
|
|
149
|
+
|
|
150
|
+
1. Parses all entries at startup (requires `bibtexparser` — included in `pip install -e .`)
|
|
151
|
+
2. Injects a compact reference list into the prompts of: `literature_scanner`, `paper_drafter`, `section_writer`, `abstract_writer`, and `revisor`
|
|
152
|
+
3. Copies the `.bib` file into the workspace so LaTeX can compile with `\bibliography{refs}`
|
|
153
|
+
|
|
154
|
+
A typical BibTeX workflow:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Export your references from Zotero / Mendeley as refs.bib
|
|
158
|
+
# Add to .env:
|
|
159
|
+
LITERATURE_BIBTEX_FILE=/home/researcher/my-project/refs.bib
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The `literature_scanner` specialist will synthesise the provided references and flag gaps where additional literature search is needed. The `paper_drafter` will use `\cite{}` commands aligned with the BibTeX keys in your file.
|
|
163
|
+
|
|
164
|
+
> **Planned extension**: Open-access paper fetching via OpenAlex, Semantic Scholar, and arXiv is implemented in `src/modules/literature/` but not yet wired into the pipeline. Contributions welcome — see `skills/CONTRIBUTING_SKILLS.md` for the extension pattern.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Quick start
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
git clone https://github.com/bhanneke/E2ER-project.git
|
|
172
|
+
cd E2ER-project
|
|
173
|
+
./scripts/quickstart.sh # prompts for ANTHROPIC_API_KEY, builds + starts everything
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The script copies `.env.example` to `.env`, prompts once for your Anthropic API key, runs `docker compose up --build`, and opens the dashboard at <http://localhost:8280/>. Migrations run automatically on first start. Total time-to-first-paper: typically under 5 minutes for the build step plus your run time.
|
|
177
|
+
|
|
178
|
+
> **Costs:** a typical `single_pass` paper runs ~$0.50 on Haiku or $3–8 on Sonnet; `iterative` runs $15–25 on Sonnet and is hard-capped at $25 by default. See [Expected cost per paper](#expected-cost-per-paper) below.
|
|
179
|
+
|
|
180
|
+
### Verify your install
|
|
181
|
+
|
|
182
|
+
Before configuring an API key, confirm the pipeline runs end-to-end with mocks:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
make install # pip install -e ".[dev]"
|
|
186
|
+
make smoke # full mocked test suite — no API key needed, ~15s
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
If `make smoke` reports `176 passed`, your install is good and the orchestration works.
|
|
190
|
+
|
|
191
|
+
**Want to see what the pipeline actually produces?** The repo ships with worked examples — real artifacts from real runs:
|
|
192
|
+
|
|
193
|
+
- [`examples/e2er_v3_haiku_smoke/`](examples/e2er_v3_haiku_smoke/) — single-pass paper run on Haiku 4.5 (~$1.50, ~11 minutes), data module disabled
|
|
194
|
+
- [`examples/starter_theoretical/`](examples/starter_theoretical/) — minimal theoretical paper template you can copy as a starting point
|
|
195
|
+
- [`examples/e2er_v1_nft_seasonality/`](examples/e2er_v1_nft_seasonality/) and [`e2er_v1_bitcoin_institutionalization/`](examples/e2er_v1_bitcoin_institutionalization/) — full v1 papers, including final PDFs
|
|
196
|
+
|
|
197
|
+
To run a real $0.50 end-to-end test on Claude Haiku (requires `ANTHROPIC_API_KEY`):
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
ANTHROPIC_API_KEY=sk-ant-... make smoke-paid
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Dashboard
|
|
204
|
+
|
|
205
|
+
Once running, the dashboard at `http://localhost:8280/` lets you:
|
|
206
|
+
|
|
207
|
+
- **Start a paper** — title, research question, mode (single_pass / iterative), per-paper cost cap.
|
|
208
|
+
- **Watch progress live** — status badge, cost meter (spent / cap), event log polled every 3 seconds.
|
|
209
|
+
- **Cancel** — one click during any phase; the runner saves state and marks the paper `cancelled`.
|
|
210
|
+
- **Download artifacts** — every workspace file and a one-click **audit bundle** (`.tar.gz` containing `replication/`, `audit_log.csv`, `data_queries.sql`, `manifest.json`, `contributions.json`, `events.json`, `usage.json`).
|
|
211
|
+
|
|
212
|
+
### Expected cost per paper
|
|
213
|
+
|
|
214
|
+
Costs vary with research-question complexity, mode, and model. Rough order of magnitude on current Anthropic pricing:
|
|
215
|
+
|
|
216
|
+
| Mode | Model | Typical cost | Notes |
|
|
217
|
+
|------|-------|-------------|-------|
|
|
218
|
+
| `single_pass` | Claude Haiku 4.5 | **~$0.50** | Fast draft. Used by `make smoke-paid`. |
|
|
219
|
+
| `single_pass` | Claude Sonnet 4.6 | **$3 – $8** | Better depth, still one shot. |
|
|
220
|
+
| `iterative` | Claude Sonnet 4.6 | **$15 – $25** | Full loop with ceiling check, self-attack, polish stack, review, revision. Hits the default $25 cap on complex RQs. |
|
|
221
|
+
|
|
222
|
+
Iterative on Opus or with the data module enabled (Allium production queries cost extra) can run higher.
|
|
223
|
+
|
|
224
|
+
### Cost safety
|
|
225
|
+
|
|
226
|
+
Every paper has a hard cost cap (default $25; configurable per paper at creation time, or via `DEFAULT_MAX_COST_USD` in `.env`). The pipeline checks cumulative cost at every phase boundary; when the cap is reached the run aborts with `last_error = "Budget exceeded after $X.XX"` and the paper is marked `failed`. The cap protects you from runaway costs even if a specialist enters a tool-call loop.
|
|
227
|
+
|
|
228
|
+
### Programmatic API
|
|
229
|
+
|
|
230
|
+
If you prefer the HTTP API to the dashboard:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# Create a paper
|
|
234
|
+
curl -X POST http://localhost:8280/api/papers \
|
|
235
|
+
-H "Content-Type: application/json" \
|
|
236
|
+
-d '{
|
|
237
|
+
"title": "DeFi Liquidity Provision and Market Quality",
|
|
238
|
+
"research_question": "How does concentrated liquidity in Uniswap v3 affect price discovery?",
|
|
239
|
+
"mode": "iterative",
|
|
240
|
+
"methodology": "empirical",
|
|
241
|
+
"max_cost_usd": 30.0
|
|
242
|
+
}'
|
|
243
|
+
# Returns: {"paper_id": "<uuid>", "status": "idea", ...}
|
|
244
|
+
|
|
245
|
+
# Cancel
|
|
246
|
+
curl -X POST http://localhost:8280/api/papers/<paper_id>/cancel
|
|
247
|
+
|
|
248
|
+
# Download audit bundle
|
|
249
|
+
curl -O -J http://localhost:8280/api/papers/<paper_id>/audit-bundle
|
|
250
|
+
|
|
251
|
+
# Approve pending data queries (when the data module submits production queries)
|
|
252
|
+
curl http://localhost:8280/api/papers/<paper_id>/pending-queries
|
|
253
|
+
curl -X POST http://localhost:8280/api/queries/<query_id>/approve \
|
|
254
|
+
-H "Content-Type: application/json" \
|
|
255
|
+
-d '{"approved": true, "note": "Looks good"}'
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Manual install (without Docker)
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
pip install -e ".[pgvector]"
|
|
262
|
+
docker compose -f docker/docker-compose.yml up -d db # just the DB
|
|
263
|
+
python scripts/migrate.py
|
|
264
|
+
bash scripts/vendor_htmx.sh # one-time, fetches htmx
|
|
265
|
+
uvicorn src.api.app:app --reload --port 8280
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Supported LLM providers
|
|
271
|
+
|
|
272
|
+
| Provider | Setting | Notes |
|
|
273
|
+
|----------|---------|-------|
|
|
274
|
+
| Anthropic | `LLM_BACKEND=anthropic` | Supports prompt caching (recommended) |
|
|
275
|
+
| OpenRouter | `LLM_BACKEND=openrouter` | 200+ models via OpenAI-compatible format |
|
|
276
|
+
| **Claude Code CLI** | `LLM_BACKEND=claude_code` | **$0/token under your Max plan.** Requires `npm i -g @anthropic-ai/claude-code` and an active Max subscription. The pipeline shells out to the `claude` CLI per specialist; no API key needed. Allium guardrails work in this mode via the `e2er-allium-query` bash wrapper — same 5 rules, same audit log, same approval flow. |
|
|
277
|
+
|
|
278
|
+
> Need a key? Anthropic: <https://console.anthropic.com/> (new accounts get a small free credit). OpenRouter: <https://openrouter.ai/keys> (pay-as-you-go).
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Troubleshooting
|
|
283
|
+
|
|
284
|
+
**`make smoke` fails with `ModuleNotFoundError`** — you skipped `make install`. Run `make install` (which is `pip install -e ".[dev]"`) first.
|
|
285
|
+
|
|
286
|
+
**`./scripts/quickstart.sh` fails on `docker compose up`** — Docker isn't installed or isn't running. Either start Docker Desktop, or follow the [Manual install](#manual-install-without-docker) section to run with Postgres + uvicorn directly.
|
|
287
|
+
|
|
288
|
+
**`pytest` errors with `ImportError: cannot import name 'UTC' from 'datetime'`** — your local Python is < 3.11. The project requires Python 3.11+. Use `pyenv install 3.11` or `brew install python@3.12`.
|
|
289
|
+
|
|
290
|
+
**Paper stuck in `in_progress` forever** — check `workspaces/<paper_id>/.pipeline_state.json`: the last completed phase is recorded. Then check `~/your-log-path` for the failure. To resume, hit the dashboard (the runner reads state.json and skips completed phases) or `POST /api/papers/{id}/cancel` and start fresh.
|
|
291
|
+
|
|
292
|
+
**Cost runaway concerns** — every paper has a hard `max_cost_usd` cap (default $25). The pipeline checks the cap before each phase AND before each parallel batch, then halts with `BudgetExceededError`. If a run cost more than expected, the audit bundle (`/api/papers/{id}/audit-bundle`) has the per-call breakdown.
|
|
293
|
+
|
|
294
|
+
**`Authorization` header missing on JSON POSTs** — you set `API_AUTH_TOKEN` in `.env` but didn't include `-H "Authorization: Bearer <token>"` on your curl. The HTML dashboard form is exempt — see `.env.example` for why.
|
|
295
|
+
|
|
296
|
+
**Allium API key error / data module crashes** — set `DATA_MODULE_ENABLED=false` in `.env`. The pipeline runs literature-only (or with manually uploaded data files) without Allium. See [Data access: Allium](#data-access-allium).
|
|
297
|
+
|
|
298
|
+
**Hit the OpenRouter "402 Payment Required" wall** — your OpenRouter balance hit zero. The pipeline correctly bails on this rather than looping, but you'll see the failed paper. Top up at <https://openrouter.ai/credits>.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Architecture diagrams
|
|
303
|
+
|
|
304
|
+
An [interactive system architecture diagram](docs/architecture.html) (open in browser) is available in `docs/`.
|
|
305
|
+
|
|
306
|
+
Individual Mermaid diagrams in [`docs/diagrams/`](docs/diagrams/), rendered natively on GitHub:
|
|
307
|
+
|
|
308
|
+
| Diagram | Description |
|
|
309
|
+
|---------|-------------|
|
|
310
|
+
| [`pipeline_overview.md`](docs/diagrams/pipeline_overview.md) | Full pipeline from idea to completion |
|
|
311
|
+
| [`specialist_dag.md`](docs/diagrams/specialist_dag.md) | Specialist execution dependencies and parallel groups |
|
|
312
|
+
| [`data_module.md`](docs/diagrams/data_module.md) | Allium query flow through guardrails and approval |
|
|
313
|
+
| [`llm_tool_loop.md`](docs/diagrams/llm_tool_loop.md) | LLM API loop and tool call interception |
|
|
314
|
+
| [`system_architecture.md`](docs/diagrams/system_architecture.md) | Component overview |
|
|
315
|
+
| [`review_aggregation.md`](docs/diagrams/review_aggregation.md) | 3-rule mechanical review aggregation |
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Example outputs
|
|
320
|
+
|
|
321
|
+
The following papers were produced by earlier versions of the E2ER pipeline. In each case the researcher selected the research question and participated in the review stage; all other steps (literature search, data acquisition, estimation, writing) were handled autonomously by the pipeline.
|
|
322
|
+
|
|
323
|
+
> Results have not been submitted to a journal and should not be cited as peer-reviewed findings.
|
|
324
|
+
|
|
325
|
+
### v3 smoke test (Haiku 4.5, no data)
|
|
326
|
+
|
|
327
|
+
A full v3 single-pass run against `claude-haiku-4.5` via OpenRouter, with the data module disabled, in ~11 minutes for ~$1.50. Numbers in the paper draft are model-imagined since no real data was queried — the run validates pipeline plumbing, not findings. See [`examples/e2er_v3_haiku_smoke/`](examples/e2er_v3_haiku_smoke/) for the full artifact set and a candid quality assessment.
|
|
328
|
+
|
|
329
|
+
### NFT Market Seasonality
|
|
330
|
+
|
|
331
|
+
Tests whether the Halloween effect (systematically higher winter returns) extends to NFT markets. The pipeline acquired 35.8 million Ethereum-based NFT trades across eight platforms, specified econometric models, and ran robustness checks including bootstrap inference, permutation tests, and jackknife analysis.
|
|
332
|
+
|
|
333
|
+
**Key result (null finding):** No statistically significant Halloween effect. Two-thirds of the raw seasonal differential in USD returns reflects ETH price seasonality rather than NFT-specific patterns.
|
|
334
|
+
|
|
335
|
+
[Paper PDF](examples/e2er_v1_nft_seasonality/paper.pdf) · [LaTeX source](examples/e2er_v1_nft_seasonality/main.tex) · [Replication package](examples/e2er_v1_nft_seasonality/replication/)
|
|
336
|
+
|
|
337
|
+
<p align="center">
|
|
338
|
+
<img src="examples/e2er_v1_nft_seasonality/figures/fig1_monthly_returns.png" alt="Monthly NFT Returns" width="680">
|
|
339
|
+
</p>
|
|
340
|
+
<p align="center"><em>Monthly return distribution by platform — pipeline-generated</em></p>
|
|
341
|
+
|
|
342
|
+
### Institutionalisation of Bitcoin
|
|
343
|
+
|
|
344
|
+
Examines whether Bitcoin's volatility converged toward traditional asset levels following the January 2024 spot ETF approval. The pipeline estimated GARCH and Markov-switching regime models, ran a difference-in-differences design around the ETF date, and executed robustness checks (Mann-Kendall trend tests, Rambachan-Roth sensitivity, leave-one-out analysis).
|
|
345
|
+
|
|
346
|
+
**Key result (null finding):** Bitcoin's GARCH volatility fell from 89% to 50% after ETF approval, reaching a low-volatility regime at 32% (within commodity range). But Bitcoin sustains this regime for only 6 days on average versus 82 days for equities; convergence is gradual, not structural.
|
|
347
|
+
|
|
348
|
+
[Paper PDF](examples/e2er_v1_bitcoin_institutionalization/paper.pdf) · [LaTeX source](examples/e2er_v1_bitcoin_institutionalization/main.tex) · [Replication package](examples/e2er_v1_bitcoin_institutionalization/replication/)
|
|
349
|
+
|
|
350
|
+
<p align="center">
|
|
351
|
+
<img src="examples/e2er_v1_bitcoin_institutionalization/figures/figure_2_event_study.png" alt="Event Study: ETF Approval" width="680">
|
|
352
|
+
</p>
|
|
353
|
+
<p align="center"><em>Event study around ETF approval date — pipeline-generated</em></p>
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## Related projects
|
|
358
|
+
|
|
359
|
+
The automated research space is developing quickly. Two projects most relevant to E2ER:
|
|
360
|
+
|
|
361
|
+
**[Project APE](https://ape.socialcatalystlab.org/)** (Social Catalyst Lab, University of Zurich, Prof. David Yanagizawa-Drott) is the closest in spirit to E2ER. APE agents identify policy questions with credible causal identification strategies, fetch real data from public APIs (Census, BLS, FRED), run econometric analysis, and produce complete research papers. The project has generated approximately 1,000 papers and is now entering systematic evaluation, where AI-generated papers compete in a tournament against peer-reviewed research from leading economics journals. All papers, code, data, and failures are publicly available. E2ER differs in scope: it targets a broader range of empirical domains and data sources, prioritises researcher direction over full autonomy, and integrates data governance (guardrails, audit trail) as a first-class concern.
|
|
362
|
+
|
|
363
|
+
**[ZeroPaper](https://github.com/alejandroll10/zeropaper)** (Institute for Automated Research) coordinates approximately 30 specialised agents across 10 stages with a focus on theory-first finance and macroeconomics research. E2ER draws on four quality-control ideas from ZeroPaper: ceiling detection, adversarial self-attack, a parallel polish stack, and mechanical review aggregation.
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Development roadmap
|
|
368
|
+
|
|
369
|
+
### Data sources for integration
|
|
370
|
+
|
|
371
|
+
The data module is designed to be extended beyond Allium. Planned and candidate integrations:
|
|
372
|
+
|
|
373
|
+
| Source | Domain | Access |
|
|
374
|
+
|--------|--------|--------|
|
|
375
|
+
| [FRED](https://fred.stlouisfed.org/) | Macroeconomics (750+ series) | Free API key |
|
|
376
|
+
| [WRDS](https://wrds-www.wharton.upenn.edu/) | Finance (CRSP, Compustat, OptionMetrics) | Institutional subscription |
|
|
377
|
+
| [OpenBB](https://openbb.co/) | Finance, macro, crypto | Open source |
|
|
378
|
+
| [Census Bureau API](https://api.census.gov/) | Demographics, economic surveys | Free |
|
|
379
|
+
| [BLS API](https://www.bls.gov/developers/) | Labour market data | Free |
|
|
380
|
+
| [ECB Data Portal](https://data.ecb.europa.eu/) | European monetary and financial data | Free |
|
|
381
|
+
| [World Bank API](https://datahelpdesk.worldbank.org/knowledgebase/articles/889392) | Development economics | Free |
|
|
382
|
+
| [Dune Analytics](https://dune.com/) | Blockchain analytics (SQL interface) | API key |
|
|
383
|
+
| [Flipside Crypto](https://flipsidecrypto.xyz/) | Blockchain data (alternative to Allium) | API key |
|
|
384
|
+
|
|
385
|
+
If you have access to a data source you would like to integrate, open an issue or contact hanneke@wiwi.uni-frankfurt.de.
|
|
386
|
+
|
|
387
|
+
### Instrumental variables and natural experiments database
|
|
388
|
+
|
|
389
|
+
A curated database of potential identification strategies in the blockchain economy is maintained in [`docs/iv_database.md`](docs/iv_database.md). It documents protocol upgrades, regulatory events, and algorithmic changes that can serve as instruments or treatment discontinuities for causal research. Contributions are welcome.
|
|
390
|
+
|
|
391
|
+
### Evaluation
|
|
392
|
+
|
|
393
|
+
A quality evaluation framework for pipeline runs is defined in [`docs/evaluation_framework.md`](docs/evaluation_framework.md), covering six scored dimensions (identification validity, empirical execution, writing quality, literature grounding, replication integrity, novelty) and all automated pipeline metrics. Evaluated runs are logged in [`docs/evaluation_log.csv`](docs/evaluation_log.csv).
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Version history
|
|
398
|
+
|
|
399
|
+
### v1: Linear Pipeline
|
|
400
|
+
|
|
401
|
+
A sequential pipeline of 14 specialised agents processing a research question through 16 fixed stages. Each agent handles one task (literature search, data acquisition, theory development, estimation, drafting, review) and passes artifacts forward. Quality gates between stages enforce minimum standards before downstream agents proceed.
|
|
402
|
+
|
|
403
|
+
```
|
|
404
|
+
idea -> research design -> [literature | data | theory] -> merge -> estimation
|
|
405
|
+
-> analysis -> draft -> [consistency | review | technical | visual] -> revision
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
24 workers, 118 skill files, 40+ skills across 9 domains. Fixed stage ordering with no editorial intelligence at runtime. Produced 133 paper drafts across 157 runs.
|
|
409
|
+
|
|
410
|
+
### v2: Strategist-Controlled Architecture
|
|
411
|
+
|
|
412
|
+
A central Strategist agent (acting as first author) orchestrates 12 specialist agents (co-authors) through a work-order pattern. The Strategist operates in two modes: Mode 1 (lean orchestration with structured JSON decisions at pipeline checkpoints) and Mode 2 (full editorial control with access to the complete paper).
|
|
413
|
+
|
|
414
|
+
Key advances over v1:
|
|
415
|
+
- Strategist makes tactical decisions at checkpoints rather than following a fixed sequence
|
|
416
|
+
- Tiered context management: Tier 0 (paper identity), Tier 1 (decision-specific), Tier 2 (full artifacts)
|
|
417
|
+
- Data pipeline isolation: only the Data specialist queries databases; all others work from exports
|
|
418
|
+
- Human review gates at research design and post-draft stages
|
|
419
|
+
|
|
420
|
+
### v3: Open-Source Release (this repo)
|
|
421
|
+
|
|
422
|
+
A ground-up redesign for open-source use. Retains the Strategist architecture from v2 and adds four extensions adapted from [ZeroPaper](https://github.com/alejandroll10/zeropaper):
|
|
423
|
+
|
|
424
|
+
- **Ceiling detection**: Strategist assesses diminishing returns after each iteration and decides whether to continue, pivot (max once), or proceed to review
|
|
425
|
+
- **Self-attack phase**: an adversarial specialist scores the draft's flaws by severity (1-10) before external review
|
|
426
|
+
- **Parallel polish stack**: five specialists run concurrently targeting specific weaknesses (formula errors, numeric consistency, institutional context, bibliography, equilibrium conditions)
|
|
427
|
+
- **Mechanical review aggregation**: three deterministic rules replace subjective editorial judgement
|
|
428
|
+
|
|
429
|
+
Additional v3 changes: BYOK (Anthropic and OpenRouter), built-in Allium data guardrails, token/cost tracking per specialist call, GitHub integration with Overleaf-compatible repo structure, **per-paper cost cap with hard abort**, **mid-run cancellation**, **server-rendered dashboard (Jinja2 + HTMX)** with live event log and cost meter, and a **downloadable audit bundle** (replication package + contributions + events + usage) for journal-ready provenance.
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## How to cite
|
|
434
|
+
|
|
435
|
+
If you use E2ER in your research, please cite it as:
|
|
436
|
+
|
|
437
|
+
```bibtex
|
|
438
|
+
@software{hanneke2026e2er,
|
|
439
|
+
author = {Hanneke, Bj{\"o}rn},
|
|
440
|
+
title = {{E2ER: End-to-End Researcher, An Open-Source Pipeline
|
|
441
|
+
for Automated Empirical Research}},
|
|
442
|
+
year = {2026},
|
|
443
|
+
version = {0.2.0},
|
|
444
|
+
url = {https://github.com/bhanneke/E2ER-project},
|
|
445
|
+
doi = {10.5281/zenodo.20187239},
|
|
446
|
+
license = {MIT},
|
|
447
|
+
institution = {Goethe University Frankfurt},
|
|
448
|
+
}
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
*Cite the concept DOI `10.5281/zenodo.20187239` for any version of E2ER, or [browse Zenodo](https://zenodo.org/records/20187239) for version-specific DOIs. A companion paper describing the system architecture and methodology is in preparation.*
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## Running tests
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
pytest tests/ -v
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
75+ tests covering guardrails, review aggregation, cost tracking, pipeline orchestration, dashboard rendering, audit bundle creation, and resilience (retries, cancellation, partial failures). No network or LLM calls required.
|
|
462
|
+
|
|
463
|
+
---
|
|
464
|
+
|
|
465
|
+
## Get involved: call for testers
|
|
466
|
+
|
|
467
|
+
E2ER v3 is in active development and we are looking for researchers who want to test the pipeline on their own questions and domains. If you are working on an empirical question in IS, economics, finance, or adjacent fields and are interested in running the pipeline, please get in touch.
|
|
468
|
+
|
|
469
|
+
We are particularly interested in:
|
|
470
|
+
|
|
471
|
+
- **New empirical domains**: the pipeline has been tested on blockchain/DeFi data; we want to know how it performs on different research contexts (fintech, platform economics, digital markets, public finance, and more)
|
|
472
|
+
- **New data sources**: if you have access to a structured dataset and want to explore adding it as a data module alongside Allium, we would like to collaborate
|
|
473
|
+
- **Systematic evaluation**: we are building a quality evaluation framework (see [`docs/evaluation_framework.md`](docs/evaluation_framework.md)) and need runs across domains to establish baselines; testers who complete the human evaluation rubric contribute directly to the companion paper
|
|
474
|
+
- **Edge cases and failure modes**: if the pipeline produces something clearly wrong or breaks in an interesting way, that feedback is valuable
|
|
475
|
+
|
|
476
|
+
Contact: **hanneke@wiwi.uni-frankfurt.de** or open an issue on this repository.
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## Contributing
|
|
481
|
+
|
|
482
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, the contribution paths (skills, specialists, data sources, LLM backends), and the PR process. Highlights:
|
|
483
|
+
|
|
484
|
+
- **Skill files** (no code changes): add domain expertise as markdown in `skills/files/`; loaded automatically into specialist prompts. Detailed guide: [`skills/CONTRIBUTING_SKILLS.md`](skills/CONTRIBUTING_SKILLS.md).
|
|
485
|
+
- **Data providers**: the data module is designed to be extended; Allium and the literature stack are the current examples.
|
|
486
|
+
- **IV database**: add natural experiments and instrumental variables to [`docs/iv_database.md`](docs/iv_database.md).
|
|
487
|
+
- **Research questions**: open an issue with a question you think could be tested.
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## Contact
|
|
492
|
+
|
|
493
|
+
**Björn Hanneke** · [bjornhanneke.com](https://www.bjornhanneke.com) · hanneke@wiwi.uni-frankfurt.de
|
|
494
|
+
|
|
495
|
+
PhD Candidate, Goethe University Frankfurt
|
|
496
|
+
Chair of Information Systems and Information Management (Prof. Dr. Oliver Hinz)
|
|
497
|
+
|
|
498
|
+
[ORCID](https://orcid.org/0009-0000-7466-9581) · [Google Scholar](https://scholar.google.com/citations?user=N5fbuZIAAAAJ) · [LinkedIn](https://linkedin.com/in/bhanneke)
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
*MIT License: see [LICENSE](LICENSE).*
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
e2er-0.3.0.dist-info/licenses/LICENSE,sha256=rf3pCreaELpMS60py_qNtLrO9Q3rKRze_hrMzek7ux0,1071
|
|
2
|
+
skills/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
skills/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
skills/files/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
skills/files/base/economist.md,sha256=lRNjfamyMP6q0qdUy8aDWlvlrfecN2Iq8VdnGlp8q0M,1192
|
|
6
|
+
skills/files/base/researcher.md,sha256=nF7awWkOpIfJvrBVKwZIzo_jXFD5rGxRoSQp3Pks1QM,1163
|
|
7
|
+
skills/files/causal-inference/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
skills/files/causal-inference/judge-designs.md,sha256=KS6Avnl7nqi7WDSTT9H1byu16fZmMOcCL4kfw_wxYUM,11135
|
|
9
|
+
skills/files/causal-inference/natural-experiments.md,sha256=WXBdlrOraAG9Lk7OERk2DzpJH3p43gAlgYYU__8MnSU,2034
|
|
10
|
+
skills/files/causal-inference/sensitivity.md,sha256=mO9oy-B7bavh7uiaJ1pKUJOqLGTUoxfnoWNxLTjtEFc,11898
|
|
11
|
+
skills/files/causal-inference/shift-share.md,sha256=Kdb0duaq1lyCD4FV-5SPDT_R2M-NsEcF7YrsmKfMVdI,9956
|
|
12
|
+
skills/files/causal-inference/weak-instruments.md,sha256=rCWW5bbwm7j9J5G1DS4IyEZSnRzChTR0-7qzFJINeVA,10520
|
|
13
|
+
skills/files/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
skills/files/data/allium-cli.md,sha256=NLIMrO9yZmV4p_fnL1uCqSXoy-6Jp4u1j1osrVCm1lc,5852
|
|
15
|
+
skills/files/data/allium-developer-api.md,sha256=F5SHvPtZe0eYXtb344agINnuncpd0umk0CmcLmrRyYc,6207
|
|
16
|
+
skills/files/data/blockchain.md,sha256=-Mr37_0ins0vEme4Jd7BHzbtdPjmmJVCFlLojQssQvE,2029
|
|
17
|
+
skills/files/data/byod.md,sha256=HlEKNpGsLzz6ilEIM_NW7CMbkjr3JLjMvScscR3kxSs,1808
|
|
18
|
+
skills/files/data/cleaning.md,sha256=6S8PiwIE3sQjeAmolNbUn7hUU97XDDKK3c2YOLGxXts,9196
|
|
19
|
+
skills/files/data/crypto-defi.md,sha256=NlMbU4LytY5cBU-Ivaz6W1_OY5YN0SsQdM4fFAnjd4A,5831
|
|
20
|
+
skills/files/data/figure-spec.md,sha256=IDNtlncTuf1S8dOFe5bupUjIB6Tbt_AJD9JTQ1SpO2o,3314
|
|
21
|
+
skills/files/data/visualization.md,sha256=nda0Jih3yhf5_19hVLkIz8w2Pc_SOv5DBNBHRkU8Ojc,8378
|
|
22
|
+
skills/files/econometrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
+
skills/files/econometrics/did.md,sha256=rY9njXvQiYX4on8BjMilIEQZBaWLCxsoIPGdELw7a0E,1501
|
|
24
|
+
skills/files/econometrics/event-study.md,sha256=MvoT44xDY_mgS_wGzKQAQJjLH-JID9CkuHBF3a9bFQM,10525
|
|
25
|
+
skills/files/econometrics/iv-estimation.md,sha256=C_2VYhUrkkW-u5FpNTWjdXYj9Jcg9szjYXWNJ0BBcrY,4927
|
|
26
|
+
skills/files/econometrics/panel-data.md,sha256=HamhkiW3BfLC5SXjK1g6PwBJ4-vUVlweu0j627HPZCw,9833
|
|
27
|
+
skills/files/econometrics/rdd.md,sha256=apb18mx-z78r1s5xg0syOrDgHOxYqSyyMYSmTyuRFFw,9103
|
|
28
|
+
skills/files/econometrics/time-series.md,sha256=mK6viGJRu1KmEhmVbC3XrN9_VGVx3FJA0n7Vn4LO94Q,12536
|
|
29
|
+
skills/files/latex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
skills/files/latex/bibtex.md,sha256=qhSibxUf8ilmL7UYSLKBTsirfp6725TRvuWaMhBrICU,16237
|
|
31
|
+
skills/files/latex/econ-model.md,sha256=YuADU4UggN437ct4krMcebAHzjIlC4GZkWxEpyrlS_E,10729
|
|
32
|
+
skills/files/latex/tables.md,sha256=n3Hk_IEZDpkyILOxQzZkqszmKwWqRxlh0brskt7vEsA,13458
|
|
33
|
+
skills/files/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
skills/files/math/optimization-verification.md,sha256=B0mJ6Y5ogxfstKC4QbXtgOew-JA-6iAfVtn62qEhmh8,8795
|
|
35
|
+
skills/files/math/proof-strategies.md,sha256=sGvqN3rxY2lCkKjPeq23GJ0gXxBUh16Dd_nli_q4354,7330
|
|
36
|
+
skills/files/modeling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
skills/files/modeling/asset-pricing.md,sha256=6_iXSXDc_JQv7DL2-blp_VhN8BXP4SCsArvNI55MfFA,11817
|
|
38
|
+
skills/files/modeling/game-theory.md,sha256=eXK8g5_ymJpaPkwCvysdu9liBGdVrjTv_omlesoHWPo,3901
|
|
39
|
+
skills/files/modeling/market-microstructure.md,sha256=sunTzIJy_vmLbgG85xMNW8yX6ol-RP7jtrMjk9I4N70,10431
|
|
40
|
+
skills/files/reasoning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
+
skills/files/reasoning/anti-slop.md,sha256=t9TlMyUWc1-8t8VkzkCNDo_1s8hXtE79FtdX78ScpI0,1269
|
|
42
|
+
skills/files/reasoning/argument-audit.md,sha256=UyWxZuIzCmOROok1l8vgmFbEtQ1x7T3nvRtICRfyNA0,9234
|
|
43
|
+
skills/files/reasoning/creative-ideation.md,sha256=12tFdD7Miu78MPDLmS4Vzodd55D2XNStc4D9hzqh0E0,4911
|
|
44
|
+
skills/files/reasoning/identification.md,sha256=z-V_96YFDZj7mOLjylnxJxsXycWEGGK0rxr7YefHVD4,1301
|
|
45
|
+
skills/files/reasoning/novelty.md,sha256=vLk-rx_zeu0rOowDKndqYLTmZrMQQ2uOuqgQL1W8bBg,9675
|
|
46
|
+
skills/files/review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
+
skills/files/review/consistency-check.md,sha256=SGadcyDxzvzddAPawg4AMju-XDdrDcp0JY8XCCLs78s,5696
|
|
48
|
+
skills/files/review/constructive-feedback.md,sha256=k3xIxVIhhACsYsOsBJZn6r6rS1Crik6F2q1Oo8doI_I,10142
|
|
49
|
+
skills/files/review/data-quality.md,sha256=Ie3ghF0mefT4QQSuV7WWL6GS47BpML2yAZ5OfCpEjaE,11628
|
|
50
|
+
skills/files/review/referee-simulation.md,sha256=HydSznA5qfIv1GeV9xalqf1ogF6QMGLu-a6XGdoVPNI,2342
|
|
51
|
+
skills/files/review/reference-check.md,sha256=H-CjJw7JN3xJILguOmHYHkzmw07CXTgA6NZIBjLrgII,2561
|
|
52
|
+
skills/files/review/technical-review.md,sha256=KaIcIZTJ57kPAdxJk8XXScAqKip_e_xI5m4lq3dDWm0,6402
|
|
53
|
+
skills/files/review/writing-quality.md,sha256=yvsqBaxx7JY-GQQpWxfWKyFfcnklddHOUiGPCv1eqy4,12064
|
|
54
|
+
skills/files/synthesis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
|
+
skills/files/synthesis/context-builder.md,sha256=kGSZbXudekT_GEA2bLRoKUnblfWdIXuGS2-kAJaZOng,1820
|
|
56
|
+
skills/files/synthesis/deliverables.md,sha256=V953Q5_CDZ3k6-3kWU2digtw42PXnVcjyoey_WVbJFA,3479
|
|
57
|
+
skills/files/synthesis/replication-package.md,sha256=HYZIRtDKBQP_jOm-CwL9zeUkgmbntI9C9GViL0jhncs,4210
|
|
58
|
+
skills/files/writing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
+
skills/files/writing/abstract.md,sha256=hWWT_uBHeh808LhEx5Vg6doI8PUr1tBpCXZcmMkkdBs,7434
|
|
60
|
+
skills/files/writing/discussion.md,sha256=F4XCHGPC96jENHJ0Ql9oFEGoIoQoDGRK35LoFiniSeI,5290
|
|
61
|
+
skills/files/writing/paper-structure.md,sha256=_LVgnrg8fg5HqxBCih8isNwX1RCo3t2VK50dTLSF8bA,1741
|
|
62
|
+
skills/files/writing/personal-style.md,sha256=7hqlFKqvfkr9syv0dvJnORmKH1bC6xaF7Jf3SfxuFUk,12931
|
|
63
|
+
skills/files/writing/revision.md,sha256=_SjVZgt-jX6kg8OPE3laH-yvDp8ltBkzZ-9bm0D1Buw,6158
|
|
64
|
+
src/__init__.py,sha256=F_ILtKh4KBvQ9YSzv1fXP10ZpX_uZviveQc0fmMv8eU,263
|
|
65
|
+
src/__main__.py,sha256=QktnQ2sye88ydE9R00KSzmeGw6HDeBZlAEcqeNHgB_c,2476
|
|
66
|
+
src/cli_install_skills.py,sha256=tdmnYbWVSkuX-BLBSSO_oQvbaphgk5MnTxVDKSIsUXg,3638
|
|
67
|
+
src/config.py,sha256=6DUOvcdhoKoS797537GHKir9hYYVHy3PFNQyJIFBa94,7378
|
|
68
|
+
src/logging_config.py,sha256=J1OVypcM47p8W54Zhy1uwUwBHADpdHQnEPf43yijVmA,609
|
|
69
|
+
src/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
+
src/api/app.py,sha256=Aq-LuCW2D23CHFRnIU7CVRLZMZCl6UIK0FgPsx64mkg,39986
|
|
71
|
+
src/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
+
src/core/pipeline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
+
src/core/pipeline/state.py,sha256=HSsOn2S3tv57vQfDTq3RyIB7wI8Db9yiPra2OK4gkGA,2003
|
|
74
|
+
src/core/renderer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
src/core/renderer/compiler.py,sha256=u8D7brJVyEyI1zrGXAQr5Oej3sQyy2ADGadoBvUkWIc,2920
|
|
76
|
+
src/core/renderer/prose.py,sha256=jzN7Efc1VN0gRQQdmixwhIA080x7GSF7NEt2y05g_T0,1356
|
|
77
|
+
src/core/renderer/templates.py,sha256=3Lwh2uwStsZZujo1QWJQyuXfl00XuK6Vas5d5U7IXZ0,4379
|
|
78
|
+
src/core/specialists/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
+
src/core/specialists/base.py,sha256=eO0y_ZndCz32ai-0jrY8xgvXWNab0rnN2rWCyE0xWPQ,15991
|
|
80
|
+
src/core/specialists/contracts.py,sha256=WN1BY0r8STL9wuoBuLYGjskNzwjgZESDLYzPCm9rVWM,1212
|
|
81
|
+
src/core/specialists/dispatcher.py,sha256=QH9jSrsNX3qtBVMGdxfvjAJ-l8We0UBskGdA-2w4w7A,8395
|
|
82
|
+
src/core/specialists/registry.py,sha256=mrep_m3I7NXxZJGCtYZwPirhzcb9b1P5sHXIwoOAsdY,4537
|
|
83
|
+
src/core/strategist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
+
src/core/strategist/actions.py,sha256=uQKZP0CY9p-qvo-w9v4572jaU8O6VKbKwuIxdOYLk7o,1815
|
|
85
|
+
src/core/strategist/context.py,sha256=hYcnuNC_H61zgIUQYlebu0CfG32mHqiXMj2NWE1WMgs,7282
|
|
86
|
+
src/core/strategist/engine.py,sha256=MHEMhnnx1dRMbRyacwPvcXnz6zkrrmszwjemaAJnyBM,14396
|
|
87
|
+
src/core/strategist/review_aggregator.py,sha256=0d9PMzxLnCOndqMC2Xo6QkLiFajR0Osf7Gx9aE_b_vI,7190
|
|
88
|
+
src/core/strategist/runner.py,sha256=o6aMoZE8NIof051Cw1Bi0YApcvzn2x4_66zCsrlDaAo,33580
|
|
89
|
+
src/core/strategist/state.py,sha256=poAIgxOBW68c_2olZP05ZM2uOWuAS4xCJtZw9L6xqx8,5629
|
|
90
|
+
src/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
91
|
+
src/db/client.py,sha256=q4BRsrNaxWkNvXH8Us2_FGwZiXGzsQ42VxbG3W7XelE,1614
|
|
92
|
+
src/db/events.py,sha256=bSx04xG4sgMgpKG1Rc-U6NWSKwEnz4yD_2Bbe6xmNfY,2263
|
|
93
|
+
src/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
|
+
src/modules/security.py,sha256=wLFBqA9xeZ2N5T7tOMcS6uIqYzBYJHeJ9DPiPQLXeHk,1755
|
|
95
|
+
src/modules/data/__init__.py,sha256=tXDrCHFYAqMA8X5kq87C_Y30ux4lVyGnDaHy__Jtxxk,81
|
|
96
|
+
src/modules/data/allium.py,sha256=FNzddCu-kHtrNpb-ESxWU1TwjiFuXivIFMoTp0LYfhU,16579
|
|
97
|
+
src/modules/data/allium_developer.py,sha256=8MxcvZmEsfWCvrjx2eoxbEhoAfYbVzXCLj4z_cYBBoE,13244
|
|
98
|
+
src/modules/data/audit.py,sha256=DXsQ2OvJyephWt7Kb5gBOGlB0FKu9xj1rUU0t78gbWc,6002
|
|
99
|
+
src/modules/data/cli.py,sha256=d903FSfsaPU0Y7DUOwJBilbZEzhSVjjdeqEb14uoWlQ,19979
|
|
100
|
+
src/modules/data/dictionary.py,sha256=d2cpwm7BlrJ6034CdXJTE-UphyGYevRxqfwEeTB_jlE,1466
|
|
101
|
+
src/modules/data/guardrails.py,sha256=vP9xuaCFXpIqTSokOiyJ4YBsf-mRN9KiUWRL3NkwMl4,6814
|
|
102
|
+
src/modules/data/tools.py,sha256=4wrgL4ISP2FEuS7coQoQvrzzajPSf2cTihxH0l3OEp0,11744
|
|
103
|
+
src/modules/fetch/__init__.py,sha256=OT0ux-6gMcx-hwsdfNSKY8Lj2Y7gjeBZSihVtZyYZeg,62
|
|
104
|
+
src/modules/fetch/http.py,sha256=ADZD5j9XCk_YSNBpcYPMB_kKmipFX4BUHhdb7Iy2jYo,2655
|
|
105
|
+
src/modules/github/__init__.py,sha256=6n1wPjGgIdZ_b4Xr_RvqA02807Z6zIBSXmLeTXbzrnA,80
|
|
106
|
+
src/modules/github/client.py,sha256=2kzPLYdSIQWuL07rwvH5JdWGXnAWqy3dlLLf7hWa3fc,6156
|
|
107
|
+
src/modules/github/push.py,sha256=P6BnGa8HVt5AaBfM8pYc4rXU_pr91oF8vuoUNRqslHI,2597
|
|
108
|
+
src/modules/github/templates.py,sha256=sf3QStUvWyCvd9iQi3NmTTVW2oc_7ez1BjKOMwsklRU,2203
|
|
109
|
+
src/modules/literature/__init__.py,sha256=uuRcQaTnPgN5gHaOQ1NBN54cgbS_PIa9nMHe0L8I_DE,69
|
|
110
|
+
src/modules/literature/arxiv.py,sha256=6vCDX71tssBL9h7Df4NuqTvqQc-csIV2SmqfHPWk-Zs,2362
|
|
111
|
+
src/modules/literature/bibtex.py,sha256=iREXRdK0cKXbpqySV9TOkYnAl3kTMcSLY7891ZDlJTw,2556
|
|
112
|
+
src/modules/literature/models.py,sha256=iMjyHnqnwKyMww85ITpcBPmp4XmK5ZDEH1mWE3VoO7U,1575
|
|
113
|
+
src/modules/literature/openalex.py,sha256=bSYOsG-z5wTMHoXZJT0LIdQ8HQb1R0sQ3Z-rRuHW0J8,2939
|
|
114
|
+
src/modules/literature/semantic_scholar.py,sha256=ja9j05JRFj5ZZiDqLSWmkR-wTk3PlFwh3yGetHrVewo,2260
|
|
115
|
+
src/modules/literature/storage.py,sha256=vNp3PqKV2YfhbYTcf47afHWnktv7DMwfVaXb7sPnsjE,3929
|
|
116
|
+
src/modules/literature/tools.py,sha256=h046n25upTzwme7Zc6G9IFgflVWl19aUKn5BvhQAkLE,10338
|
|
117
|
+
src/modules/llm/__init__.py,sha256=exlSeaQGbJ32nR5Az6hQFCRTMT2AUJ3f4Kj1uW0cznU,68
|
|
118
|
+
src/modules/llm/anthropic.py,sha256=46-FOTrtPVUqBO7dqnf5APCF4kywCEcmCifYXWW2M7o,6319
|
|
119
|
+
src/modules/llm/base.py,sha256=1S4ZEzCXtcHCOYrg9BXPqHe8CVI_Jtyma7_nWSJ_548,4054
|
|
120
|
+
src/modules/llm/claude_code.py,sha256=rqvZpY-_oMPplekFC8BYUr-lBXHDOr_TjgivwLrIpYY,16375
|
|
121
|
+
src/modules/llm/codex.py,sha256=-NRXV2y73ayRKKx5r_LFLC1RdrtuhBF43nk51sbFFqk,7362
|
|
122
|
+
src/modules/llm/gemini.py,sha256=FhH9bZS7LiYQ8S211cQDIvRLUe0JfeUWXdKbjju3FmY,7489
|
|
123
|
+
src/modules/llm/openrouter.py,sha256=f0mbU8I_JGeBkFejrVeWwyxvWlpMDfchs4Vd7l-7WvI,7630
|
|
124
|
+
src/modules/llm/registry.py,sha256=mLcljdRbH3rgF6MT7VrZNhjXHsjT4lHKVfnIp7lhHHo,939
|
|
125
|
+
src/modules/llm/tools.py,sha256=6G5MQ_CjHfHGSiHLCkyT2nR83S8M6GvL-HD5YqPCC1Y,4574
|
|
126
|
+
src/modules/tracking/__init__.py,sha256=hVvN8kLrs1KiOfSIIMVK5y3sy3yPiRZgwhuEFaoCj_A,38
|
|
127
|
+
src/modules/tracking/costs.py,sha256=bIEbNmldWueRJCpBkN70h57zJiOxorQ521xAfPPwc20,1768
|
|
128
|
+
src/modules/tracking/usage.py,sha256=XRN3Jv9MtDc9gKIQE-IaNmOXDuIzN7ER3YgpZZL8Ok4,5723
|
|
129
|
+
src/skills/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
130
|
+
src/skills/loader.py,sha256=BUDDSNKSGfmQmPU4Bmy8xCzrbKjGx6cMdAV4T0aUOX0,3093
|
|
131
|
+
e2er-0.3.0.dist-info/METADATA,sha256=VK8KGQxA7Oe_qf3RUOJN9EjRZmojTp6FimZSj4tkxdo,28945
|
|
132
|
+
e2er-0.3.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
133
|
+
e2er-0.3.0.dist-info/entry_points.txt,sha256=excs3go1bHE9cV07-mNVLwKKh2U8cMMd-4-6WHtTn10,43
|
|
134
|
+
e2er-0.3.0.dist-info/top_level.txt,sha256=s4cxvjbXPAZnYV8lDIzlbv-eF3RVgOtMsHYUcXB4gpY,11
|
|
135
|
+
e2er-0.3.0.dist-info/RECORD,,
|