todo-agent 0.1.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {todo_agent-0.1.0 → todo_agent-0.2.1}/.gitignore +14 -0
- todo_agent-0.2.1/Makefile +54 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/PKG-INFO +76 -38
- {todo_agent-0.1.0 → todo_agent-0.2.1}/README.md +52 -9
- {todo_agent-0.1.0 → todo_agent-0.2.1}/docs/publishing.md +5 -6
- todo_agent-0.2.1/pyproject.toml +190 -0
- todo_agent-0.2.1/requirements-dev.txt +27 -0
- todo_agent-0.2.1/requirements.txt +6 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_core/test_conversation_manager.py +35 -30
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_core/test_todo_manager.py +17 -6
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_config.py +36 -24
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_inference.py +84 -57
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_llm_client_factory.py +23 -16
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_ollama_client.py +20 -33
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_openrouter_client.py +93 -110
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_todo_shell.py +114 -59
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_token_counter.py +65 -64
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_interface/test_cli.py +115 -90
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_interface/test_tools.py +58 -45
- todo_agent-0.2.1/tests/test_linting.py +175 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_logger.py +96 -48
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_main.py +49 -46
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/_version.py +3 -3
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/conversation_manager.py +39 -17
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/todo_manager.py +40 -30
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/__init__.py +1 -1
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/config.py +7 -5
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/inference.py +109 -54
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/llm_client_factory.py +13 -9
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/logger.py +38 -41
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/ollama_client.py +22 -15
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/openrouter_client.py +37 -26
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/todo_shell.py +12 -10
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/token_counter.py +39 -38
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/interface/cli.py +51 -37
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/interface/tools.py +47 -40
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/main.py +1 -1
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/PKG-INFO +76 -38
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/SOURCES.txt +1 -0
- todo_agent-0.2.1/todo_agent.egg-info/requires.txt +20 -0
- todo_agent-0.1.0/Makefile +0 -21
- todo_agent-0.1.0/pyproject.toml +0 -135
- todo_agent-0.1.0/requirements-dev.txt +0 -30
- todo_agent-0.1.0/requirements.txt +0 -6
- todo_agent-0.1.0/todo_agent.egg-info/requires.txt +0 -23
- {todo_agent-0.1.0 → todo_agent-0.2.1}/LICENSE +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/MANIFEST.in +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/setup.cfg +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/__init__.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_core/__init__.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/__init__.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_interface/__init__.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/__init__.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/__init__.py +3 -3
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/exceptions.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/llm_client.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/prompts/system_prompt.txt +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/interface/__init__.py +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/dependency_links.txt +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/entry_points.txt +0 -0
- {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/top_level.txt +0 -0
@@ -236,6 +236,7 @@ $RECYCLE.BIN/
|
|
236
236
|
# Project-specific patterns
|
237
237
|
# Log files
|
238
238
|
logs/*.log
|
239
|
+
logs/
|
239
240
|
*.log
|
240
241
|
|
241
242
|
# Configuration files with sensitive data
|
@@ -273,3 +274,16 @@ settings_local.py
|
|
273
274
|
ehthumbs.db
|
274
275
|
Icon?
|
275
276
|
Thumbs.db
|
277
|
+
|
278
|
+
# Test and coverage files
|
279
|
+
.coverage
|
280
|
+
htmlcov/
|
281
|
+
bandit-test-report.json
|
282
|
+
|
283
|
+
# Build and distribution files
|
284
|
+
dist/
|
285
|
+
todo_agent.egg-info/
|
286
|
+
|
287
|
+
# Cache directories
|
288
|
+
.mypy_cache/
|
289
|
+
.pytest_cache/
|
@@ -0,0 +1,54 @@
|
|
1
|
+
.PHONY: clean build check publish format lint test-lint all-lint install install-dev
|
2
|
+
|
3
|
+
# ==============================================================================
|
4
|
+
# Build and Publishing
|
5
|
+
# ==============================================================================
|
6
|
+
|
7
|
+
install: build
|
8
|
+
@echo "📦 Installing built package locally..."
|
9
|
+
pip install dist/*.whl
|
10
|
+
|
11
|
+
install-dev:
|
12
|
+
@echo "🔧 Installing package in development mode with dev dependencies..."
|
13
|
+
pip install -e ".[dev]"
|
14
|
+
|
15
|
+
clean:
|
16
|
+
@echo "🧹 Cleaning build artifacts..."
|
17
|
+
rm -rf dist/ build/ .eggs/ *.egg-info
|
18
|
+
|
19
|
+
build: clean
|
20
|
+
@echo "🔨 Building package..."
|
21
|
+
python -m build
|
22
|
+
|
23
|
+
check:
|
24
|
+
@echo "✅ Checking distribution files..."
|
25
|
+
twine check dist/*
|
26
|
+
|
27
|
+
publish: clean build check
|
28
|
+
@echo "🚀 Publishing to PyPI..."
|
29
|
+
twine upload dist/*
|
30
|
+
|
31
|
+
# ==============================================================================
|
32
|
+
# Linting and Code Quality
|
33
|
+
# ==============================================================================
|
34
|
+
|
35
|
+
format:
|
36
|
+
@echo "🎨 Formatting and linting code with Ruff..."
|
37
|
+
ruff check --fix todo_agent/ tests/
|
38
|
+
ruff format todo_agent/ tests/
|
39
|
+
|
40
|
+
lint:
|
41
|
+
@echo "🔍 Running Ruff linting..."
|
42
|
+
ruff check todo_agent/ tests/
|
43
|
+
@echo "🔍 Running MyPy type checking..."
|
44
|
+
mypy todo_agent/
|
45
|
+
@echo "🔍 Running Bandit security checks..."
|
46
|
+
bandit -r todo_agent/ || true
|
47
|
+
|
48
|
+
# ==============================================================================
|
49
|
+
# Testing
|
50
|
+
# ==============================================================================
|
51
|
+
|
52
|
+
test:
|
53
|
+
@echo "🧪 Running tests with linting and coverage..."
|
54
|
+
pytest --cov=todo_agent --cov-report=term-missing --cov-report=html
|
@@ -1,22 +1,20 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: todo-agent
|
3
|
-
Version: 0.1
|
3
|
+
Version: 0.2.1
|
4
4
|
Summary: A natural language interface for todo.sh task management
|
5
5
|
Author: codeprimate
|
6
6
|
Maintainer: codeprimate
|
7
7
|
License-Expression: GPL-3.0
|
8
|
-
Project-URL: Homepage, https://github.com/codeprimate/
|
9
|
-
Project-URL: Documentation, https://github.com/codeprimate/
|
10
|
-
Project-URL: Repository, https://github.com/codeprimate/
|
11
|
-
Project-URL: Bug Tracker, https://github.com/codeprimate/
|
8
|
+
Project-URL: Homepage, https://github.com/codeprimate/todo-agent
|
9
|
+
Project-URL: Documentation, https://github.com/codeprimate/todo-agent#readme
|
10
|
+
Project-URL: Repository, https://github.com/codeprimate/todo-agent
|
11
|
+
Project-URL: Bug Tracker, https://github.com/codeprimate/todo-agent/issues
|
12
12
|
Keywords: todo,task-management,llm,natural-language,cli
|
13
|
-
Classifier: Development Status ::
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
14
14
|
Classifier: Intended Audience :: Developers
|
15
15
|
Classifier: Intended Audience :: End Users/Desktop
|
16
16
|
Classifier: Operating System :: OS Independent
|
17
17
|
Classifier: Programming Language :: Python :: 3
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
20
18
|
Classifier: Programming Language :: Python :: 3.10
|
21
19
|
Classifier: Programming Language :: Python :: 3.11
|
22
20
|
Classifier: Programming Language :: Python :: 3.12
|
@@ -26,28 +24,25 @@ Classifier: Topic :: Text Processing :: Linguistic
|
|
26
24
|
Requires-Python: >=3.8
|
27
25
|
Description-Content-Type: text/markdown
|
28
26
|
License-File: LICENSE
|
29
|
-
Requires-Dist: requests>=2.
|
30
|
-
Requires-Dist: typing-extensions>=4.
|
31
|
-
Requires-Dist: types-requests>=2.
|
32
|
-
Requires-Dist: rich>=
|
33
|
-
Requires-Dist: tiktoken>=0.
|
27
|
+
Requires-Dist: requests>=2.32.0
|
28
|
+
Requires-Dist: typing-extensions>=4.15.0
|
29
|
+
Requires-Dist: types-requests>=2.32.0
|
30
|
+
Requires-Dist: rich>=14.0.0
|
31
|
+
Requires-Dist: tiktoken>=0.11.0
|
34
32
|
Provides-Extra: dev
|
35
|
-
Requires-Dist:
|
36
|
-
Requires-Dist:
|
37
|
-
Requires-Dist:
|
38
|
-
Requires-Dist:
|
39
|
-
Requires-Dist:
|
40
|
-
Requires-Dist:
|
41
|
-
Requires-Dist:
|
42
|
-
Requires-Dist:
|
43
|
-
Requires-Dist:
|
44
|
-
Requires-Dist:
|
45
|
-
Requires-Dist:
|
46
|
-
Requires-Dist:
|
47
|
-
Requires-Dist:
|
48
|
-
Requires-Dist: build>=1.0.0; extra == "dev"
|
49
|
-
Requires-Dist: twine>=4.0.0; extra == "dev"
|
50
|
-
Requires-Dist: setuptools_scm[toml]>=6.2.0; extra == "dev"
|
33
|
+
Requires-Dist: ruff>=0.12.0; extra == "dev"
|
34
|
+
Requires-Dist: mypy>=1.17.0; extra == "dev"
|
35
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
36
|
+
Requires-Dist: pytest-cov>=6.0.0; extra == "dev"
|
37
|
+
Requires-Dist: pre-commit>=4.0.0; extra == "dev"
|
38
|
+
Requires-Dist: bandit>=1.8.0; extra == "dev"
|
39
|
+
Requires-Dist: sphinx>=8.0.0; extra == "dev"
|
40
|
+
Requires-Dist: sphinx-rtd-theme>=3.0.0; extra == "dev"
|
41
|
+
Requires-Dist: radon>=6.0.0; extra == "dev"
|
42
|
+
Requires-Dist: xenon>=0.9.0; extra == "dev"
|
43
|
+
Requires-Dist: build>=1.2.0; extra == "dev"
|
44
|
+
Requires-Dist: twine>=6.0.0; extra == "dev"
|
45
|
+
Requires-Dist: setuptools_scm[toml]>=9.0.0; extra == "dev"
|
51
46
|
Dynamic: license-file
|
52
47
|
|
53
48
|
# Todo Agent
|
@@ -143,10 +138,15 @@ You can add this to your shell profile (`.bashrc`, `.zshrc`, etc.) to make it pe
|
|
143
138
|
# Clone and install from source
|
144
139
|
git clone https://github.com/codeprimate/todo-agent.git
|
145
140
|
cd todo_agent
|
146
|
-
pip install -e .
|
147
141
|
|
148
|
-
#
|
149
|
-
|
142
|
+
# Option 1: Install built package locally
|
143
|
+
make install
|
144
|
+
|
145
|
+
# Option 2: Install in development mode with dev dependencies
|
146
|
+
make install-dev
|
147
|
+
|
148
|
+
# Option 3: Install in development mode (basic)
|
149
|
+
pip install -e .
|
150
150
|
```
|
151
151
|
|
152
152
|
### 2. Set up your LLM provider
|
@@ -226,14 +226,52 @@ The `TODO_FILE`, `DONE_FILE`, and `REPORT_FILE` are automatically inferred from
|
|
226
226
|
# Clone and install
|
227
227
|
git clone https://github.com/codeprimate/todo-agent.git
|
228
228
|
cd todo_agent
|
229
|
-
pip install -e ".[dev]"
|
230
229
|
|
231
|
-
#
|
232
|
-
|
230
|
+
# Install options:
|
231
|
+
# - Built package (like production install)
|
232
|
+
make install
|
233
|
+
# - Development mode with dev dependencies (recommended for development)
|
234
|
+
make install-dev
|
235
|
+
# - Basic development mode
|
236
|
+
pip install -e .
|
237
|
+
|
238
|
+
# Available Makefile tasks:
|
239
|
+
make test # Run tests with coverage
|
240
|
+
make format # Format and lint code
|
241
|
+
make lint # Run linting only
|
242
|
+
make build # Build package distribution
|
243
|
+
make clean # Clean build artifacts
|
244
|
+
make install # Build and install package locally
|
245
|
+
make install-dev # Install in development mode with dev dependencies
|
246
|
+
```
|
247
|
+
|
248
|
+
## Code Quality and Linting
|
249
|
+
|
250
|
+
This project uses comprehensive linting to maintain code quality:
|
251
|
+
|
252
|
+
### Linting Tools
|
253
|
+
- **Ruff**: Fast Python linter and formatter (replaces Black, isort, and Flake8)
|
254
|
+
- **MyPy**: Static type checking
|
255
|
+
- **Bandit**: Security vulnerability scanning
|
256
|
+
|
257
|
+
**Note**: Ruff is configured to be compatible with Black's formatting style and provides 10-100x faster performance than traditional tools.
|
258
|
+
|
259
|
+
### Pre-commit Hooks
|
260
|
+
Install pre-commit hooks for automatic linting on commits:
|
261
|
+
```bash
|
262
|
+
pre-commit install
|
263
|
+
```
|
264
|
+
|
265
|
+
### Linting in Test Suite
|
266
|
+
Linting checks are integrated into the test suite via `tests/test_linting.py`. The `make test` command runs all tests including linting checks. You can also run linting tests separately:
|
267
|
+
```bash
|
268
|
+
# Run linting tests only
|
269
|
+
pytest -m lint
|
270
|
+
```
|
233
271
|
|
234
|
-
|
235
|
-
|
236
|
-
|
272
|
+
### Configuration Files
|
273
|
+
- `pyproject.toml`: Ruff, MyPy, and pytest configuration
|
274
|
+
- `.pre-commit-config.yaml`: Pre-commit hooks configuration
|
237
275
|
```
|
238
276
|
|
239
277
|
## Architecture
|
@@ -91,10 +91,15 @@ You can add this to your shell profile (`.bashrc`, `.zshrc`, etc.) to make it pe
|
|
91
91
|
# Clone and install from source
|
92
92
|
git clone https://github.com/codeprimate/todo-agent.git
|
93
93
|
cd todo_agent
|
94
|
-
pip install -e .
|
95
94
|
|
96
|
-
#
|
97
|
-
|
95
|
+
# Option 1: Install built package locally
|
96
|
+
make install
|
97
|
+
|
98
|
+
# Option 2: Install in development mode with dev dependencies
|
99
|
+
make install-dev
|
100
|
+
|
101
|
+
# Option 3: Install in development mode (basic)
|
102
|
+
pip install -e .
|
98
103
|
```
|
99
104
|
|
100
105
|
### 2. Set up your LLM provider
|
@@ -174,14 +179,52 @@ The `TODO_FILE`, `DONE_FILE`, and `REPORT_FILE` are automatically inferred from
|
|
174
179
|
# Clone and install
|
175
180
|
git clone https://github.com/codeprimate/todo-agent.git
|
176
181
|
cd todo_agent
|
177
|
-
pip install -e ".[dev]"
|
178
182
|
|
179
|
-
#
|
180
|
-
|
183
|
+
# Install options:
|
184
|
+
# - Built package (like production install)
|
185
|
+
make install
|
186
|
+
# - Development mode with dev dependencies (recommended for development)
|
187
|
+
make install-dev
|
188
|
+
# - Basic development mode
|
189
|
+
pip install -e .
|
190
|
+
|
191
|
+
# Available Makefile tasks:
|
192
|
+
make test # Run tests with coverage
|
193
|
+
make format # Format and lint code
|
194
|
+
make lint # Run linting only
|
195
|
+
make build # Build package distribution
|
196
|
+
make clean # Clean build artifacts
|
197
|
+
make install # Build and install package locally
|
198
|
+
make install-dev # Install in development mode with dev dependencies
|
199
|
+
```
|
200
|
+
|
201
|
+
## Code Quality and Linting
|
202
|
+
|
203
|
+
This project uses comprehensive linting to maintain code quality:
|
204
|
+
|
205
|
+
### Linting Tools
|
206
|
+
- **Ruff**: Fast Python linter and formatter (replaces Black, isort, and Flake8)
|
207
|
+
- **MyPy**: Static type checking
|
208
|
+
- **Bandit**: Security vulnerability scanning
|
209
|
+
|
210
|
+
**Note**: Ruff is configured to be compatible with Black's formatting style and provides 10-100x faster performance than traditional tools.
|
211
|
+
|
212
|
+
### Pre-commit Hooks
|
213
|
+
Install pre-commit hooks for automatic linting on commits:
|
214
|
+
```bash
|
215
|
+
pre-commit install
|
216
|
+
```
|
217
|
+
|
218
|
+
### Linting in Test Suite
|
219
|
+
Linting checks are integrated into the test suite via `tests/test_linting.py`. The `make test` command runs all tests including linting checks. You can also run linting tests separately:
|
220
|
+
```bash
|
221
|
+
# Run linting tests only
|
222
|
+
pytest -m lint
|
223
|
+
```
|
181
224
|
|
182
|
-
|
183
|
-
|
184
|
-
|
225
|
+
### Configuration Files
|
226
|
+
- `pyproject.toml`: Ruff, MyPy, and pytest configuration
|
227
|
+
- `.pre-commit-config.yaml`: Pre-commit hooks configuration
|
185
228
|
```
|
186
229
|
|
187
230
|
## Architecture
|
@@ -13,9 +13,9 @@ After initial setup, each release follows the same simple workflow using the pro
|
|
13
13
|
|
14
14
|
## Release Checklist
|
15
15
|
|
16
|
-
- [ ]
|
16
|
+
- [ ] Run code quality checks: `ruff check .`, `ruff format .`, `mypy .`
|
17
17
|
- [ ] Run tests: `pytest`
|
18
|
-
- [ ]
|
18
|
+
- [ ] All code changes merged and tests passing
|
19
19
|
- [ ] Create and push git tag: `git tag vX.X.X && git push origin main && git push origin vX.X.X`
|
20
20
|
- [ ] Build and publish: `make publish`
|
21
21
|
- [ ] Verify package published at [https://pypi.org/project/todo-agent/](https://pypi.org/project/todo-agent/)
|
@@ -58,10 +58,9 @@ Ensure all code is ready for release:
|
|
58
58
|
pytest
|
59
59
|
|
60
60
|
# Run code quality checks
|
61
|
-
|
62
|
-
|
61
|
+
ruff check .
|
62
|
+
ruff format .
|
63
63
|
mypy .
|
64
|
-
flake8
|
65
64
|
|
66
65
|
# Check for security issues
|
67
66
|
bandit -r todo_agent/
|
@@ -163,4 +162,4 @@ For subsequent releases after initial setup:
|
|
163
162
|
|
164
163
|
- Check the [PyPI documentation](https://packaging.python.org/guides/distributing-packages-using-setuptools/)
|
165
164
|
- Review the [setuptools_scm documentation](https://github.com/pypa/setuptools_scm)
|
166
|
-
- Check the project's [GitHub repository](https://github.com/codeprimate/
|
165
|
+
- Check the project's [GitHub repository](https://github.com/codeprimate/todo-agent) for issues
|
@@ -0,0 +1,190 @@
|
|
1
|
+
[build-system]
|
2
|
+
requires = ["setuptools>=45", "wheel", "setuptools_scm[toml]>=6.2"]
|
3
|
+
build-backend = "setuptools.build_meta"
|
4
|
+
|
5
|
+
[project]
|
6
|
+
name = "todo-agent"
|
7
|
+
dynamic = ["version"]
|
8
|
+
description = "A natural language interface for todo.sh task management"
|
9
|
+
readme = "README.md"
|
10
|
+
license = "GPL-3.0"
|
11
|
+
authors = [
|
12
|
+
{name = "codeprimate"}
|
13
|
+
]
|
14
|
+
maintainers = [
|
15
|
+
{name = "codeprimate"}
|
16
|
+
]
|
17
|
+
keywords = ["todo", "task-management", "llm", "natural-language", "cli"]
|
18
|
+
classifiers = [
|
19
|
+
"Development Status :: 4 - Beta",
|
20
|
+
"Intended Audience :: Developers",
|
21
|
+
"Intended Audience :: End Users/Desktop",
|
22
|
+
"Operating System :: OS Independent",
|
23
|
+
"Programming Language :: Python :: 3",
|
24
|
+
"Programming Language :: Python :: 3.10",
|
25
|
+
"Programming Language :: Python :: 3.11",
|
26
|
+
"Programming Language :: Python :: 3.12",
|
27
|
+
"Topic :: Office/Business :: Scheduling",
|
28
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
29
|
+
"Topic :: Text Processing :: Linguistic",
|
30
|
+
]
|
31
|
+
requires-python = ">=3.8"
|
32
|
+
dependencies = [
|
33
|
+
"requests>=2.32.0",
|
34
|
+
"typing-extensions>=4.15.0",
|
35
|
+
"types-requests>=2.32.0",
|
36
|
+
"rich>=14.0.0",
|
37
|
+
"tiktoken>=0.11.0",
|
38
|
+
]
|
39
|
+
|
40
|
+
[project.optional-dependencies]
|
41
|
+
dev = [
|
42
|
+
"ruff>=0.12.0",
|
43
|
+
"mypy>=1.17.0",
|
44
|
+
"pytest>=8.0.0",
|
45
|
+
"pytest-cov>=6.0.0",
|
46
|
+
"pre-commit>=4.0.0",
|
47
|
+
"bandit>=1.8.0",
|
48
|
+
"sphinx>=8.0.0",
|
49
|
+
"sphinx-rtd-theme>=3.0.0",
|
50
|
+
"radon>=6.0.0",
|
51
|
+
"xenon>=0.9.0",
|
52
|
+
"build>=1.2.0",
|
53
|
+
"twine>=6.0.0",
|
54
|
+
"setuptools_scm[toml]>=9.0.0",
|
55
|
+
]
|
56
|
+
|
57
|
+
[project.scripts]
|
58
|
+
todo-agent = "todo_agent.main:main"
|
59
|
+
|
60
|
+
[project.urls]
|
61
|
+
Homepage = "https://github.com/codeprimate/todo-agent"
|
62
|
+
Documentation = "https://github.com/codeprimate/todo-agent#readme"
|
63
|
+
Repository = "https://github.com/codeprimate/todo-agent"
|
64
|
+
"Bug Tracker" = "https://github.com/codeprimate/todo-agent/issues"
|
65
|
+
|
66
|
+
[tool.setuptools_scm]
|
67
|
+
write_to = "todo_agent/_version.py"
|
68
|
+
|
69
|
+
[tool.setuptools.packages.find]
|
70
|
+
include = ["todo_agent*"]
|
71
|
+
exclude = ["tests*", "docs*", "logs*", "htmlcov*", "dist*", "build*", "*.egg-info*"]
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
[tool.ruff]
|
76
|
+
# Same as Black.
|
77
|
+
line-length = 88
|
78
|
+
indent-width = 4
|
79
|
+
|
80
|
+
# Assume Python 3.8
|
81
|
+
target-version = "py38"
|
82
|
+
|
83
|
+
# Exclude a variety of commonly ignored directories.
|
84
|
+
exclude = [
|
85
|
+
".bzr",
|
86
|
+
".direnv",
|
87
|
+
".eggs",
|
88
|
+
".git",
|
89
|
+
".git-rewrite",
|
90
|
+
".hg",
|
91
|
+
".mypy_cache",
|
92
|
+
".nox",
|
93
|
+
".pants.d",
|
94
|
+
".pytype",
|
95
|
+
".ruff_cache",
|
96
|
+
".svn",
|
97
|
+
".tox",
|
98
|
+
".venv",
|
99
|
+
"__pypackages__",
|
100
|
+
"_build",
|
101
|
+
"buck-out",
|
102
|
+
"build",
|
103
|
+
"dist",
|
104
|
+
"node_modules",
|
105
|
+
"venv",
|
106
|
+
]
|
107
|
+
|
108
|
+
[tool.ruff.lint]
|
109
|
+
# Enable pycodestyle (`E`), Pyflakes (`F`), and isort (`I`) codes
|
110
|
+
select = ["E", "F", "I", "B", "C4", "UP", "ARG", "SIM", "TCH", "TID", "Q", "RUF"]
|
111
|
+
ignore = [
|
112
|
+
"E501", # line too long, handled by formatter
|
113
|
+
"B008", # do not perform function calls in argument defaults
|
114
|
+
"C901", # too complex
|
115
|
+
"ARG002", # unused method arguments (common in interface methods)
|
116
|
+
"B904", # raise exceptions with 'from' (too many to fix right now)
|
117
|
+
"SIM117", # nested with statements (style preference)
|
118
|
+
]
|
119
|
+
|
120
|
+
# Allow fix for all enabled rules (when `--fix`) is provided.
|
121
|
+
fixable = ["ALL"]
|
122
|
+
unfixable = []
|
123
|
+
|
124
|
+
[tool.ruff.lint.per-file-ignores]
|
125
|
+
# Ignore unused imports in test files
|
126
|
+
"tests/*" = ["F401"]
|
127
|
+
# Ignore f-string issues in specific files
|
128
|
+
"todo_agent/interface/tools.py" = ["F541"]
|
129
|
+
"todo_agent/interface/cli.py" = ["F541"]
|
130
|
+
"todo_agent/infrastructure/todo_shell.py" = ["F541"]
|
131
|
+
|
132
|
+
[tool.ruff.format]
|
133
|
+
# Like Black, use double quotes for strings.
|
134
|
+
quote-style = "double"
|
135
|
+
|
136
|
+
# Like Black, indent with spaces, rather than tabs.
|
137
|
+
indent-style = "space"
|
138
|
+
|
139
|
+
# Like Black, respect magic trailing commas.
|
140
|
+
skip-magic-trailing-comma = false
|
141
|
+
|
142
|
+
# Like Black, automatically detect the appropriate line ending.
|
143
|
+
line-ending = "auto"
|
144
|
+
|
145
|
+
[tool.ruff.lint.isort]
|
146
|
+
# Like isort, sort imports using a single line after the import block.
|
147
|
+
combine-as-imports = true
|
148
|
+
|
149
|
+
[tool.mypy]
|
150
|
+
python_version = "3.11"
|
151
|
+
warn_return_any = false
|
152
|
+
warn_unused_configs = true
|
153
|
+
disallow_untyped_defs = true
|
154
|
+
disallow_incomplete_defs = true
|
155
|
+
check_untyped_defs = true
|
156
|
+
disallow_untyped_decorators = true
|
157
|
+
no_implicit_optional = true
|
158
|
+
warn_redundant_casts = true
|
159
|
+
warn_unused_ignores = false
|
160
|
+
warn_no_return = true
|
161
|
+
warn_unreachable = true
|
162
|
+
strict_equality = true
|
163
|
+
namespace_packages = true
|
164
|
+
explicit_package_bases = true
|
165
|
+
ignore_missing_imports = true
|
166
|
+
allow_redefinition = true
|
167
|
+
|
168
|
+
[[tool.mypy.overrides]]
|
169
|
+
module = [
|
170
|
+
"todo_agent.infrastructure.llm_client_factory",
|
171
|
+
"todo_agent.infrastructure.inference"
|
172
|
+
]
|
173
|
+
allow_redefinition = true
|
174
|
+
|
175
|
+
[tool.pytest.ini_options]
|
176
|
+
testpaths = ["tests"]
|
177
|
+
python_files = ["test_*.py"]
|
178
|
+
python_classes = ["Test*"]
|
179
|
+
python_functions = ["test_*"]
|
180
|
+
addopts = [
|
181
|
+
"--strict-markers",
|
182
|
+
"--strict-config",
|
183
|
+
"--cov=todo_agent",
|
184
|
+
"--cov-report=term-missing",
|
185
|
+
"--cov-report=html",
|
186
|
+
]
|
187
|
+
markers = [
|
188
|
+
"integration: marks tests as integration tests",
|
189
|
+
"lint: marks tests as linting checks",
|
190
|
+
]
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Include all production requirements
|
2
|
+
-r requirements.txt
|
3
|
+
|
4
|
+
# Development and linting tools
|
5
|
+
ruff>=0.12.0
|
6
|
+
mypy>=1.17.0
|
7
|
+
|
8
|
+
# Testing
|
9
|
+
pytest>=8.0.0
|
10
|
+
pytest-cov>=6.0.0
|
11
|
+
|
12
|
+
# Additional development tools
|
13
|
+
pre-commit>=4.0.0
|
14
|
+
bandit>=1.8.0
|
15
|
+
|
16
|
+
# Documentation
|
17
|
+
sphinx>=8.0.0
|
18
|
+
sphinx-rtd-theme>=3.0.0
|
19
|
+
|
20
|
+
# Code quality
|
21
|
+
radon>=6.0.0
|
22
|
+
xenon>=0.9.0
|
23
|
+
|
24
|
+
# Build and packaging
|
25
|
+
build>=1.2.0
|
26
|
+
twine>=6.0.0
|
27
|
+
setuptools_scm[toml]>=9.0.0
|