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.
Files changed (61) hide show
  1. {todo_agent-0.1.0 → todo_agent-0.2.1}/.gitignore +14 -0
  2. todo_agent-0.2.1/Makefile +54 -0
  3. {todo_agent-0.1.0 → todo_agent-0.2.1}/PKG-INFO +76 -38
  4. {todo_agent-0.1.0 → todo_agent-0.2.1}/README.md +52 -9
  5. {todo_agent-0.1.0 → todo_agent-0.2.1}/docs/publishing.md +5 -6
  6. todo_agent-0.2.1/pyproject.toml +190 -0
  7. todo_agent-0.2.1/requirements-dev.txt +27 -0
  8. todo_agent-0.2.1/requirements.txt +6 -0
  9. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_core/test_conversation_manager.py +35 -30
  10. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_core/test_todo_manager.py +17 -6
  11. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_config.py +36 -24
  12. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_inference.py +84 -57
  13. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_llm_client_factory.py +23 -16
  14. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_ollama_client.py +20 -33
  15. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_openrouter_client.py +93 -110
  16. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_todo_shell.py +114 -59
  17. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/test_token_counter.py +65 -64
  18. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_interface/test_cli.py +115 -90
  19. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_interface/test_tools.py +58 -45
  20. todo_agent-0.2.1/tests/test_linting.py +175 -0
  21. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_logger.py +96 -48
  22. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_main.py +49 -46
  23. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/_version.py +3 -3
  24. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/conversation_manager.py +39 -17
  25. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/todo_manager.py +40 -30
  26. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/__init__.py +1 -1
  27. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/config.py +7 -5
  28. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/inference.py +109 -54
  29. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/llm_client_factory.py +13 -9
  30. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/logger.py +38 -41
  31. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/ollama_client.py +22 -15
  32. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/openrouter_client.py +37 -26
  33. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/todo_shell.py +12 -10
  34. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/token_counter.py +39 -38
  35. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/interface/cli.py +51 -37
  36. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/interface/tools.py +47 -40
  37. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/main.py +1 -1
  38. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/PKG-INFO +76 -38
  39. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/SOURCES.txt +1 -0
  40. todo_agent-0.2.1/todo_agent.egg-info/requires.txt +20 -0
  41. todo_agent-0.1.0/Makefile +0 -21
  42. todo_agent-0.1.0/pyproject.toml +0 -135
  43. todo_agent-0.1.0/requirements-dev.txt +0 -30
  44. todo_agent-0.1.0/requirements.txt +0 -6
  45. todo_agent-0.1.0/todo_agent.egg-info/requires.txt +0 -23
  46. {todo_agent-0.1.0 → todo_agent-0.2.1}/LICENSE +0 -0
  47. {todo_agent-0.1.0 → todo_agent-0.2.1}/MANIFEST.in +0 -0
  48. {todo_agent-0.1.0 → todo_agent-0.2.1}/setup.cfg +0 -0
  49. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/__init__.py +0 -0
  50. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_core/__init__.py +0 -0
  51. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_infrastructure/__init__.py +0 -0
  52. {todo_agent-0.1.0 → todo_agent-0.2.1}/tests/test_interface/__init__.py +0 -0
  53. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/__init__.py +0 -0
  54. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/__init__.py +3 -3
  55. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/core/exceptions.py +0 -0
  56. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/llm_client.py +0 -0
  57. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/infrastructure/prompts/system_prompt.txt +0 -0
  58. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent/interface/__init__.py +0 -0
  59. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/dependency_links.txt +0 -0
  60. {todo_agent-0.1.0 → todo_agent-0.2.1}/todo_agent.egg-info/entry_points.txt +0 -0
  61. {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.0
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/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
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 :: 3 - Alpha
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.31.0
30
- Requires-Dist: typing-extensions>=4.8.0
31
- Requires-Dist: types-requests>=2.31.0
32
- Requires-Dist: rich>=13.0.0
33
- Requires-Dist: tiktoken>=0.5.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: black>=23.0.0; extra == "dev"
36
- Requires-Dist: flake8>=6.0.0; extra == "dev"
37
- Requires-Dist: isort>=5.12.0; extra == "dev"
38
- Requires-Dist: mypy>=1.0.0; extra == "dev"
39
- Requires-Dist: pytest>=7.0.0; extra == "dev"
40
- Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
41
- Requires-Dist: pre-commit>=3.0.0; extra == "dev"
42
- Requires-Dist: bandit>=1.7.0; extra == "dev"
43
- Requires-Dist: safety>=2.3.0; extra == "dev"
44
- Requires-Dist: sphinx>=6.0.0; extra == "dev"
45
- Requires-Dist: sphinx-rtd-theme>=1.2.0; extra == "dev"
46
- Requires-Dist: radon>=5.1.0; extra == "dev"
47
- Requires-Dist: xenon>=0.7.0; extra == "dev"
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
- # Or with development dependencies
149
- pip install -e ".[dev]"
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
- # Run tests
232
- pytest
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
- # Format code
235
- black .
236
- isort .
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
- # Or with development dependencies
97
- pip install -e ".[dev]"
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
- # Run tests
180
- pytest
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
- # Format code
183
- black .
184
- isort .
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
- - [ ] All code changes merged and tests passing
16
+ - [ ] Run code quality checks: `ruff check .`, `ruff format .`, `mypy .`
17
17
  - [ ] Run tests: `pytest`
18
- - [ ] Run code quality checks: `black .`, `isort .`, `mypy .`, `flake8`
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
- black .
62
- isort .
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/todo_agent) for issues
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
@@ -0,0 +1,6 @@
1
+ # Core dependencies
2
+ requests>=2.32.0
3
+ typing-extensions>=4.15.0
4
+ types-requests>=2.32.0
5
+ rich>=14.0.0
6
+ tiktoken>=0.11.0