[project] name = "herma" version = "0.1.0" description = "Herma: context-shimming AI middleware for configurable coding harnesses -- intercepts requests via keyword, semantic, or micromodel rules to respond directly or shim atomic noun, verb, and URI context from a user-configured database before LLM execution." readme = "README.md" requires-python = ">=3.12" license = "MIT" authors = [{ name = "ta-amps" }] dependencies = [ "pydantic>=2.9", "httpx>=0.27", "fastapi>=0.115", "uvicorn>=0.30", "tessera[mcp] @ git+https://github.com/ta-amps/tessera-infrastructure-work-and-storage-engine.git@b1b470475c3ff03db0963bbcf6b271911d79f73e", "jsonschema>=4.23,<5", ] [project.scripts] herma = "herma.cli:main" [dependency-groups] dev = [ "pytest>=8.3", "pytest-timeout>=2.3", "ruff>=0.6", "mypy>=1.11", "types-jsonschema>=4.26.0.20261006", ] [build-system] requires = ["hatchling>=1.25"] build-backend = "hatchling.build" [tool.hatch.metadata] allow-direct-references = true [tool.hatch.build.targets.wheel] packages = ["herma"] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "W", "I", "B", "UP", "SIM", "RUF", "S", "PT"] ignore = ["S101", "S603", "S607", "E501"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["S105", "S106", "S108", "PT018"] [tool.mypy] strict = true python_version = "3.12" files = ["herma"] plugins = ["pydantic.mypy"] [tool.pytest.ini_options] testpaths = ["tests"] timeout = 180