Add contribution templates and --version CLI flag (#36)
* feat(cli): add --version / -V flag Uses importlib.metadata to read the version from the installed package. * chore: improve bug report and feature request issue templates - Bug report: replace web-app steps with CLI-oriented examples, add error output section, add Python version and LLM provider fields - Feature request: add note directing niche features to EvoSkills, set default label * chore: add documentation issue template and issue chooser config - Add documentation template for reporting missing or unclear docs - Add config.yml to disable blank issues and link to EvoSkills and Discord as contact options * chore: add PR template and improve CONTRIBUTING.md - Add PR template with type-of-change checkboxes, issue linking for new features, and CI checklist - CONTRIBUTING.md: add development setup, PR workflow, and code style sections; fix wording; make Discord link clickable
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a report to help us improve
|
about: Report a bug to help us improve EvoScientist
|
||||||
title: ''
|
title: ''
|
||||||
labels: ''
|
labels: bug
|
||||||
assignees: ''
|
assignees: ''
|
||||||
type: Bug
|
type: Bug
|
||||||
|
|
||||||
@@ -13,21 +13,26 @@ A clear and concise description of what the bug is.
|
|||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
Steps to reproduce the behavior:
|
Steps to reproduce the behavior:
|
||||||
1. Go to '...'
|
1. Run `EvoSci ...`
|
||||||
2. Click on '....'
|
2. Provide input '...'
|
||||||
3. Scroll down to '....'
|
3. See error
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
**Expected behavior**
|
||||||
A clear and concise description of what you expected to happen.
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
**Screenshots**
|
**Error output / logs**
|
||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, paste the relevant terminal output or traceback.
|
||||||
|
|
||||||
|
```
|
||||||
|
<paste here>
|
||||||
|
```
|
||||||
|
|
||||||
**System information**
|
**System information**
|
||||||
- OS: [e.g. Windows, MacOS, Linux]
|
- OS: [e.g. Ubuntu 22.04, macOS 14.3, Windows 11]
|
||||||
- Terminal [e.g. iTerm2, Alacritty, Windows Terminal]
|
- Python version: [e.g. 3.11.8]
|
||||||
- EvoScientist Version [e.g. 0.0.1]
|
- Terminal: [e.g. iTerm2, Alacritty, Windows Terminal]
|
||||||
|
- EvoScientist version: [e.g. 0.0.2 — run `EvoSci --version`]
|
||||||
|
- LLM provider: [e.g. Anthropic, OpenAI, Ollama]
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: EvoSkills — niche features & custom workflows
|
||||||
|
url: https://github.com/EvoScientist/EvoSkills
|
||||||
|
about: Want to add a feature that serves a specific use case rather than all users? Contribute it as an EvoSkill instead.
|
||||||
|
- name: Community Discord
|
||||||
|
url: https://discord.gg/AZ9ZMXkunY
|
||||||
|
about: Ask questions, get help, and chat with the community.
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
name: Documentation
|
||||||
|
about: Report missing, incorrect, or unclear documentation
|
||||||
|
title: ''
|
||||||
|
labels: documentation
|
||||||
|
assignees: ''
|
||||||
|
type: Documentation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**What documentation is affected?**
|
||||||
|
Describe which part of the project needs better docs.
|
||||||
|
|
||||||
|
**What is wrong or missing?**
|
||||||
|
Describe the issue — is something inaccurate, outdated, hard to follow, or missing entirely?
|
||||||
|
|
||||||
|
**Suggested improvement**
|
||||||
|
If you have a specific fix or addition in mind, describe it here.
|
||||||
@@ -1,15 +1,18 @@
|
|||||||
---
|
---
|
||||||
name: Feature request
|
name: Feature request
|
||||||
about: Suggest an idea for this project
|
about: Suggest an idea for EvoScientist core functionality
|
||||||
title: ''
|
title: ''
|
||||||
labels: ''
|
labels: enhancement
|
||||||
assignees: ''
|
assignees: ''
|
||||||
type: Feature
|
type: Feature
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> **Note:** We only accept feature requests for core functionality that benefits the majority of users.
|
||||||
|
> If your idea is a niche workflow or personal utility, consider contributing it to [EvoSkills](https://github.com/EvoScientist/EvoSkills) instead.
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
**Is your feature request related to a problem? Please describe.**
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
A clear and concise description of the problem. Ex. "I'm always frustrated when [...]"
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
**Describe the solution you'd like**
|
||||||
A clear and concise description of what you want to happen.
|
A clear and concise description of what you want to happen.
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- What does this PR do? Link the related issue (e.g. "Closes #123"). -->
|
||||||
|
|
||||||
|
## Type of change
|
||||||
|
|
||||||
|
<!-- Check the one that applies. -->
|
||||||
|
|
||||||
|
- [ ] Bug fix
|
||||||
|
- [ ] New feature — link issue: #<!-- issue number -->
|
||||||
|
- [ ] Documentation / examples
|
||||||
|
- [ ] Test improvement
|
||||||
|
- [ ] Refactor (no behavior change)
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
- [ ] I have read the [Contributing Guidelines](../CONTRIBUTING.md)
|
||||||
|
- [ ] This targets **core functionality** used by the majority of users (niche features belong in [EvoSkills](https://github.com/EvoScientist/EvoSkills))
|
||||||
|
- [ ] I have added/updated tests where applicable
|
||||||
|
- [ ] `uv run ruff check .` passes
|
||||||
|
- [ ] `uv run pytest` passes
|
||||||
+51
-12
@@ -1,22 +1,60 @@
|
|||||||
# Contributing to EvoScientist
|
# Contributing to EvoScientist
|
||||||
|
|
||||||
We appreciate your interest and the time you spend helping improve EvoScientist. Please read the following instruction on how to help us.
|
We appreciate your interest and the time you spend helping improve EvoScientist. Please read the following guidelines before contributing.
|
||||||
|
|
||||||
## How you can contribute
|
## How you can contribute
|
||||||
|
|
||||||
- Report ideas, bugs, and feature requests: open an issue describing intent, motivation, and high-level impact. Make sure to correctly label the Issue. Use the provided template.
|
- **Report bugs and request features:** open an issue using the provided templates. Make sure to use the correct template and labels.
|
||||||
- Propose design changes: use issues or discussion threads to outline the problem, alternatives, and trade-offs before implementing.
|
- **Propose design changes:** use issues or discussion threads to outline the problem, alternatives, and trade-offs before implementing.
|
||||||
- Contribute code or docs: submit PRs that tackle an open issue. They must have a clear rationale and tests where applicable.
|
- **Contribute code or docs:** submit PRs that address an open issue. They must have a clear rationale and tests where applicable.
|
||||||
|
|
||||||
## What we are looking for in PRs
|
## What we are looking for in PRs
|
||||||
|
|
||||||
We aim to keep the EvoScientist with only core functionality that will be used by majority of users. Therefore PRs should only include:
|
We aim to keep EvoScientist focused on core functionality that benefits the majority of users. PRs should only include:
|
||||||
- Bug fixes / Improvements to existing features
|
|
||||||
- New features that were proposed in an Issue and agreed with Contributor
|
|
||||||
- Updating documentation
|
|
||||||
- Improving test suite with meaningful tests
|
|
||||||
|
|
||||||
If you want to add nice to have or niche feature look at contributing to the [EvoSkills repository](https://github.com/EvoScientist/EvoSkills)
|
- Bug fixes / improvements to existing features
|
||||||
|
- New features that were proposed in an issue and agreed upon with maintainers
|
||||||
|
- Documentation updates and examples
|
||||||
|
- Meaningful additions to the test suite
|
||||||
|
|
||||||
|
If you want to add a niche or specialized workflow, consider contributing to the [EvoSkills repository](https://github.com/EvoScientist/EvoSkills) instead.
|
||||||
|
|
||||||
|
## Development setup
|
||||||
|
|
||||||
|
1. **Fork and clone** the repository:
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/<your-username>/EvoScientist.git
|
||||||
|
cd EvoScientist
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Install dependencies** (requires [uv](https://docs.astral.sh/uv/)):
|
||||||
|
```bash
|
||||||
|
uv sync --dev
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Run the test suite** (no API keys needed):
|
||||||
|
```bash
|
||||||
|
uv run pytest
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Run the linter:**
|
||||||
|
```bash
|
||||||
|
uv run ruff check .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Submitting a pull request
|
||||||
|
|
||||||
|
1. Create a branch from `main` with a descriptive name (e.g. `fix/session-crash`, `feat/export-csv`).
|
||||||
|
2. Make your changes, keeping commits focused and well-described.
|
||||||
|
3. Ensure `uv run ruff check .` and `uv run pytest` pass locally — these also run in CI.
|
||||||
|
4. Open a PR against `main` and fill in the PR template.
|
||||||
|
5. A maintainer will review your PR. Please be responsive to feedback.
|
||||||
|
|
||||||
|
## Code style
|
||||||
|
|
||||||
|
- We use [Ruff](https://docs.astral.sh/ruff/) for linting. Run `uv run ruff check .` before pushing.
|
||||||
|
- Follow the existing code patterns and conventions in the area you're modifying.
|
||||||
|
- Keep changes minimal and focused on the task at hand.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -44,7 +82,7 @@ EvoScientist is a multi-agent AI system for automated scientific experimentation
|
|||||||
| `data-analysis-agent` | Computes metrics, creates plots, summarizes insights |
|
| `data-analysis-agent` | Computes metrics, creates plots, summarizes insights |
|
||||||
| `writing-agent` | Drafts paper-ready Markdown experiment reports |
|
| `writing-agent` | Drafts paper-ready Markdown experiment reports |
|
||||||
|
|
||||||
### Data Flow
|
### Data flow
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
User Input (CLI / TUI / 10 Channel Integrations)
|
User Input (CLI / TUI / 10 Channel Integrations)
|
||||||
@@ -69,4 +107,5 @@ Stream Events --> Emitter --> Tracker --> State --> Rich Display / TUI
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Need help?
|
## Need help?
|
||||||
You can reach us on Discord or WeChat linked in README
|
|
||||||
|
Reach us on [Discord](https://discord.gg/AZ9ZMXkunY) or WeChat (linked in README).
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import os
|
|||||||
import queue
|
import queue
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from importlib.metadata import version as _pkg_version
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
|
||||||
@@ -874,9 +875,23 @@ def mcp_remove(
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
def _version_callback(value: bool):
|
||||||
|
if value:
|
||||||
|
typer.echo(f"EvoScientist {_pkg_version('EvoScientist')}")
|
||||||
|
raise typer.Exit()
|
||||||
|
|
||||||
|
|
||||||
@app.callback(invoke_without_command=True)
|
@app.callback(invoke_without_command=True)
|
||||||
def _main_callback(
|
def _main_callback(
|
||||||
ctx: typer.Context,
|
ctx: typer.Context,
|
||||||
|
version: Optional[bool] = typer.Option(
|
||||||
|
None,
|
||||||
|
"-V",
|
||||||
|
"--version",
|
||||||
|
callback=_version_callback,
|
||||||
|
is_eager=True,
|
||||||
|
help="Show version and exit.",
|
||||||
|
),
|
||||||
mode: Optional[str] = typer.Option(
|
mode: Optional[str] = typer.Option(
|
||||||
None,
|
None,
|
||||||
"-m",
|
"-m",
|
||||||
|
|||||||
Reference in New Issue
Block a user