39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Claude SessionStart hook client for P1 ancestry evidence."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
import socket
|
|
import sys
|
|
|
|
|
|
def main() -> None:
|
|
# Consume the real Claude hook payload without recording transcript paths or
|
|
# prompt content in the evidence artifact.
|
|
hook_input = json.load(sys.stdin)
|
|
conn = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
conn.connect(os.environ["GATE0_BROKER_SOCKET"])
|
|
conn.sendall((json.dumps({"action": "resolve-hook"}) + "\n").encode())
|
|
response = json.loads(conn.makefile("r", encoding="utf-8").readline())
|
|
conn.close()
|
|
event_name = hook_input.get("hook_event_name")
|
|
if response.get("decision") != "ACCEPT":
|
|
print(f"Gate0 broker rejected {event_name} hook ancestry", file=sys.stderr)
|
|
raise SystemExit(2)
|
|
print(
|
|
json.dumps(
|
|
{
|
|
"hookSpecificOutput": {
|
|
"hookEventName": event_name,
|
|
"additionalContext": "GATE0_P1_SUPPORTED_HOOK_ANCESTRY_ACCEPTED",
|
|
}
|
|
}
|
|
)
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|