HAI-Relay / src /hai_relay /cli.py
smlflg's picture
Initial public upload from Projekte/HAI-Relay
433dbdf verified
Raw History Blame Contribute Delete
1.51 kB
"""HAI-Relay CLI entry point."""
from __future__ import annotations
import argparse
import asyncio
import shlex
from pathlib import Path
from .authority import DenyAllAuthority, SubprocessAuthority
from .custody import ensure_state_dir
from .daemon import RelayDaemon
from .dispatcher import AcpDispatchPort
from .protocol import RelayProtocol
from .registry import AgentRegistry
from .service import RelayService
from .store import RelayStore
def main() -> None:
parser = argparse.ArgumentParser(prog="hai-relay")
sub = parser.add_subparsers(dest="command", required=True)
serve = sub.add_parser("serve")
serve.add_argument("--state-dir", type=Path, required=True)
serve.add_argument("--socket", type=Path, required=True)
serve.add_argument("--authority-command")
args = parser.parse_args()
if args.command == "serve":
state_dir = ensure_state_dir(args.state_dir)
authority = (
SubprocessAuthority(tuple(shlex.split(args.authority_command)))
if args.authority_command
else DenyAllAuthority()
)
store = RelayStore(state_dir / "relay.sqlite3", state_dir=state_dir)
service = RelayService(store, AgentRegistry(), authority, AcpDispatchPort())
protocol = RelayProtocol(service)
try:
asyncio.run(RelayDaemon(args.socket, protocol).serve())
except KeyboardInterrupt:
pass
finally:
store.close()
if __name__ == "__main__":
main()