Files
JWeBot/packages/jwebot-sdk/src/jwebot_sdk/context.py
T

71 lines
1.6 KiB
Python

"""Capability-limited protocols exposed to extensions."""
from __future__ import annotations
from collections.abc import Callable, Mapping
from typing import Protocol
from .contracts import Event, ExtensionResult, Fact
CommandHandler = Callable[[Event, str], ExtensionResult]
class CommandRegistry(Protocol):
def register(self, command: str, handler: CommandHandler) -> None: ...
class PluginStorage(Protocol):
def get(self, key: str) -> str | None: ...
def set(self, key: str, value: str) -> None: ...
def delete(self, key: str) -> None: ...
class ApprovedHttpClient(Protocol):
def request(
self,
profile: str,
*,
method: str,
path: str,
query: Mapping[str, str] | None = None,
) -> bytes: ...
class ApprovedServiceBroker(Protocol):
def call(
self,
profile: str,
*,
operation: str,
payload: Mapping[str, object],
) -> Mapping[str, object]: ...
class FactWriter(Protocol):
def write(self, fact: Fact) -> None: ...
class Scheduler(Protocol):
def schedule(self, key: str, *, run_at: str, payload: Mapping[str, str]) -> None: ...
class PluginLogger(Protocol):
def info(self, message: str, **fields: object) -> None: ...
def warning(self, message: str, **fields: object) -> None: ...
class SingleGroupContext(Protocol):
"""No group selector, GUI sender, raw ledger, environment, or shell access."""
commands: CommandRegistry
storage: PluginStorage
http: ApprovedHttpClient
services: ApprovedServiceBroker
facts: FactWriter
scheduler: Scheduler
logger: PluginLogger