[project] name = "flow-agent" version = "0.1.0" description = "Autonomous coding agent with a polished CLI" authors = [{ name = "Victor Dibia" }] readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Typing :: Typed", ] dependencies = [ "pydantic>=2.0.0", "pydantic-settings>=2.0.0", "rich>=13.0.0", "typer>=0.9.0", "httpx>=0.25.0", "python-dotenv>=1.0.0", "agent-framework-core>=1.0.0b0", "azure-identity>=1.15.0", "pyyaml>=6.0.0", # OpenTelemetry for experiments tracing "opentelemetry-api>=1.20.0", "opentelemetry-sdk>=1.20.0", "opentelemetry-semantic-conventions>=0.41b0", # Web UI dependencies "fastapi>=0.109.0", "uvicorn>=0.27.0", "sqlmodel>=0.0.14", "aiosqlite>=0.19.0", ] [project.optional-dependencies] # Optional features research = ["beautifulsoup4>=4.12.0", "html2text>=2024.2.26"] # Bundles all = ["flow-agent[research]"] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=4.1.0", "mypy>=1.8.0", "pyright>=1.1.350", "ruff>=0.2.0", "pre-commit>=3.6.0", "poethepoet>=0.24.0", ] [project.scripts] flow = "flow.cli:main" [project.urls] Homepage = "https://github.com/victordibia/flow" Repository = "https://github.com/victordibia/flow" Issues = "https://github.com/victordibia/flow/issues" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/flow"] # ============================================================================ # Type Checking - Strict # ============================================================================ [tool.pyright] include = ["src"] exclude = ["**/tests/**", "**/.venv/**"] typeCheckingMode = "strict" pythonVersion = "3.10" reportMissingTypeStubs = false reportUnnecessaryIsInstance = false # agent_framework is optional - ignore type issues in harness reportUnknownMemberType = "warning" reportUnknownVariableType = "warning" reportUnknownArgumentType = "warning" [tool.mypy] plugins = ["pydantic.mypy"] strict = true python_version = "3.10" ignore_missing_imports = true disallow_untyped_defs = true no_implicit_optional = true check_untyped_defs = true warn_return_any = true show_error_codes = true warn_unused_ignores = false disallow_incomplete_defs = true disallow_untyped_decorators = true # ============================================================================ # Linting - Ruff # ============================================================================ [tool.ruff] line-length = 120 target-version = "py310" src = ["src"] fix = true include = ["*.py", "*.pyi", "**/pyproject.toml"] exclude = ["docs/*"] [tool.ruff.lint] select = [ "E", # pycodestyle errors "F", # pyflakes "I", # isort "B", # bugbear "UP", # pyupgrade "ANN", # annotations "S", # bandit (security) "RUF", # ruff-specific "ASYNC", # async checks "D", # pydocstyle ] ignore = [ "D100", # allow missing docstring in public module "D104", # allow missing docstring in public package "D107", # allow missing docstring in __init__ "ANN401", # allow Any type (needed for generic tool/event handling) "S101", # allow assert statements (used in tests) ] [tool.ruff.lint.per-file-ignores] "**/tests/**" = ["D", "ANN", "S"] [tool.ruff.lint.pydocstyle] convention = "google" [tool.ruff.format] docstring-code-format = true # ============================================================================ # Testing - Pytest # ============================================================================ [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["src"] addopts = "-ra -q -r fEX" asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" filterwarnings = [] [tool.coverage.run] source = ["src/flow"] omit = ["**/__init__.py"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "if TYPE_CHECKING:", "raise NotImplementedError", ] # ============================================================================ # Task Runner - Poe # ============================================================================ [tool.poe.tasks] fmt = "ruff format src tests" lint = "ruff check src tests --fix" pyright = "pyright src" mypy = "mypy src" test = "pytest tests -v --cov=flow --cov-report=term-missing" check = ["fmt", "lint", "pyright", "mypy", "test"]