Metadata-Version: 2.5
Name: driftshield-sdk
Version: 0.2.0
Summary: Open-source AI decision forensics toolkit
Project-URL: Homepage, https://github.com/tborys/driftshield
Project-URL: Changelog, https://github.com/tborys/driftshield/blob/main/CHANGELOG.md
Project-URL: Documentation, https://github.com/tborys/driftshield/blob/main/docs/public-api.md
Project-URL: Issues, https://github.com/tborys/driftshield/issues
Author: Tomasz Borys, Devinder Pharar
License-Expression: AGPL-3.0-or-later
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.12
Requires-Dist: alembic>=1.13.0
Requires-Dist: fastapi>=0.109.0
Requires-Dist: jinja2>=3.1.0
Requires-Dist: psycopg2-binary>=2.9.9
Requires-Dist: pydantic-settings>=2.14.2
Requires-Dist: pydantic>=2.5.0
Requires-Dist: python-multipart>=0.0.31
Requires-Dist: rich>=13.0.0
Requires-Dist: sqlalchemy>=2.0.0
Requires-Dist: typer>=0.9.0
Requires-Dist: uvicorn[standard]>=0.27.0
Provides-Extra: dev
Requires-Dist: httpx>=0.27.0; extra == 'dev'
Requires-Dist: mypy>=1.8.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Description-Content-Type: text/markdown

# driftshield

Find where an AI agent first went wrong.

DriftShield reconstructs a failed agent run as a decision graph, shows where
reasoning first drifted and matches the failure against known community
signatures. It reads Claude Code, Codex CLI, Claude Desktop, Codex Desktop,
OpenClaw, CrewAI and LangChain transcripts.

```bash
pip install driftshield-sdk
driftshield analyze session.jsonl
```

The distribution is called `driftshield-sdk` on PyPI because the name
`driftshield` was already too close to an unrelated project. The import
package and the command are still `driftshield`.

The library surface is two calls:

```python
from driftshield import analyse_run, submit

run = analyse_run(open("session.jsonl", "rb").read(), source="session.jsonl")
print(run.qualification_state, run.findings)

receipt = submit(run)  # community lane: redacted, no key needed
```

`analyse_run` works offline and touches nothing outside the process. `submit`
is the only call that sends anything off the machine, and it only ever sends
`run.redacted_transcript`.

Documentation, the self hosted web UI and the full CLI reference live in the
repository: https://github.com/tborys/driftshield

Licensed under AGPL-3.0-or-later.
