Metadata-Version: 2.4
Name: artanis-gravel
Version: 0.5.17
Summary: Embedded prompt management, tracing, and evals for AI engineering teams.
Project-URL: Homepage, https://gravel.artanis.ai
Project-URL: Repository, https://github.com/artanis-ai/gravel
Project-URL: Issues, https://github.com/artanis-ai/gravel/issues
Author-email: Artanis <team@artanis.ai>
License: Apache-2.0
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Requires-Dist: alembic>=1.13
Requires-Dist: click>=8.1
Requires-Dist: httpx>=0.27
Requires-Dist: libcst>=1.4
Requires-Dist: sqlalchemy>=2.0
Provides-Extra: asgi
Requires-Dist: starlette>=0.30; extra == 'asgi'
Provides-Extra: dev
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-httpx>=0.30; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Provides-Extra: django
Requires-Dist: django>=4.2; extra == 'django'
Provides-Extra: fastapi
Requires-Dist: fastapi>=0.100; extra == 'fastapi'
Provides-Extra: flask
Requires-Dist: a2wsgi>=1.10; extra == 'flask'
Requires-Dist: fastapi>=0.100; extra == 'flask'
Provides-Extra: postgres
Requires-Dist: psycopg[binary]>=3.1; extra == 'postgres'
Provides-Extra: sqlite
Provides-Extra: tracing-anthropic
Requires-Dist: anthropic>=0.34; extra == 'tracing-anthropic'
Provides-Extra: tracing-langchain
Requires-Dist: langchain-core>=0.3; extra == 'tracing-langchain'
Provides-Extra: tracing-openai
Requires-Dist: openai>=1.40; extra == 'tracing-openai'
Description-Content-Type: text/markdown

# artanis-gravel

The Python SDK for [Gravel](https://gravel.artanis.ai).

**Status:** v0.5.x, live on PyPI.

```bash
uvx artanis-gravel init    # or `pipx run artanis-gravel init`
```

See [`/STATUS.md`](../../STATUS.md) for what's built and what's next.

## Layout

```
src/artanis_gravel/
├── __init__.py             # GravelConfig, GravelUser, defineConfig
├── auto.py                 # the import-side-effect tracing entry point
├── types.py
├── schema.py               # SQLAlchemy schema (gravel_samples + gravel_feedback)
├── db/                     # connector + bootstrap
├── auth.py                 # HMAC sessions + password verify
├── _handler.py             # shared framework-agnostic route dispatcher
├── _rate_limit.py          # per-IP login rate-limit bucket
├── _github_state.py        # GRAVEL_GH_INSTALL_* env read + CP token mint
├── _github_api.py          # multi-file PR REST flow
├── _prompts_submit.py      # drafts -> manifest rewrite -> PR
├── _env_writer.py          # .env.local writer used by the install callback
├── _migrations_status.py   # /api/migrations/status helper
├── version_check.py        # /api/version helper (importlib.metadata + PyPI)
├── manifest/               # .gravel/manifest.json read/write/scan + hook
├── tracing/                # OpenAI / Anthropic / LangChain + fetch_patch
├── fastapi.py              # FastAPI adapter over _handler.dispatch_request
├── django.py               # Django gravel_urls over the same dispatcher
├── flask.py                # Flask mount_on_flask via a2wsgi (extra: flask)
├── asgi.py                 # GravelAsgiApp + gravel_wsgi_app
└── _cli.py                 # binary-downloader wrapper around the Go CLI
```

## Schema parity

This package's SQLAlchemy schema is kept in lockstep with the TypeScript Drizzle schema in `packages/sdk-ts/src/schema/`. CI rejects drift.
