← Files ClaraARCHIVED FILE

scripts/course_chat_bridge.py

1.21 KB · Nov 3, 2026 · 18:23 UTC

↓ Download file

See the change to this file →

"""Local stdlib bridge for native course chat controls."""

from __future__ import annotations

import json
import sys
from pathlib import Path

from _desktop_teaching import PLUGIN_ROOT
from courseware.access import CourseAccessError
from courseware.chat import CourseChats

__all__ = ["main"]


def main() -> int:
    """Return a bounded UI invitation or a validated worker assignment."""
    try:
        request = json.load(sys.stdin)
        args = request["arguments"]
        chats = CourseChats(Path(args["state_root"]), PLUGIN_ROOT)
        if request["operation"] not in {"prepare", "claim"}:
            raise ValueError("Unknown course chat operation")
        result = (
            chats.prepare(args)
            if request["operation"] == "prepare"
            else chats.claim(args["invitation"], args["thread_id"])
        )
        sys.stdout.write(json.dumps(result) + "\n")
        return 0
    except CourseAccessError as exc:
        sys.stdout.write(json.dumps(exc.as_dict()) + "\n")
        return 2
    except (ValueError, OSError, KeyError) as exc:
        sys.stdout.write(json.dumps({"status": "blocked", "error": str(exc)}) + "\n")
        return 2


if __name__ == "__main__":
    raise SystemExit(main())

SHA-256: dc16232b7f072a81de4c2aa1659706da90166e548e43a48ff5d1962001601ada