[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "openharness-ai" version = "0.1.9" description = "Open-source Python port of Claude Code - an AI-powered CLI coding assistant" readme = "README.md" license = "MIT" requires-python = ">=3.10" authors = [ { name = "novix-science" }, ] dependencies = [ "anthropic>=0.40.0", "openai>=1.0.0", "rich>=13.0.0", "prompt-toolkit>=3.0.0", "textual>=0.80.0", "typer>=0.12.0", "pydantic>=2.0.0", "httpx>=0.27.0", "websockets>=12.0", "mcp>=1.0.0", "pyperclip>=1.9.0", "pyyaml>=6.0", "questionary>=2.0.1", "watchfiles>=0.20.0", "croniter>=2.0.0", "slack-sdk>=3.0.0", "python-telegram-bot>=21.0.0", "discord.py>=2.0.0", "lark-oapi>=1.5.0", ] [project.optional-dependencies] dev = [ "pexpect>=4.9.0", "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=5.0.0", "ruff>=0.5.0", "mypy>=1.10.0", ] [project.scripts] openharness = "openharness.cli:app" oh = "openharness.cli:app" openh = "openharness.cli:app" ohmo = "ohmo.cli:app" [tool.hatch.build.targets.wheel] packages = ["src/openharness", "ohmo"] [tool.hatch.build] exclude = [ "/.git", "/.venv", "/.openharness-venv", "/.openharness", "/.pytest_cache", "/.mypy_cache", "/.ruff_cache", "/build", "/dist", ] [tool.hatch.build.targets.wheel.force-include] "frontend/terminal/package.json" = "openharness/_frontend/package.json" "frontend/terminal/tsconfig.json" = "openharness/_frontend/tsconfig.json" "frontend/terminal/src" = "openharness/_frontend/src" [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" [tool.ruff] line-length = 100 target-version = "py311" [tool.mypy] python_version = "3.11" strict = true