# ~/.nanobot/skills/treeship.py
import httpx
import hashlib
import json
async def attest(action: str, inputs: dict = None) -> str | None:
"""
Attest a key agent action. Returns verification URL or None.
NEVER raises — attestation failure never blocks agent work.
"""
payload = {"action": action}
if inputs:
payload["inputs"] = {
"hash": hashlib.sha256(
json.dumps(inputs, sort_keys=True).encode()
).hexdigest()
}
try:
async with httpx.AsyncClient(timeout=10.0) as c:
r = await c.post("http://treeship-sidecar:2019/attest", json=payload)
if r.status_code == 200:
return r.json().get("url")
except Exception:
pass
return None