#!/usr/bin/env python3.14# -*- coding: utf-8 -*-"""The message spool as the carrier of the solver shell's notices (:mod:`solver.core.notices`)."""from__future__importannotations__all__=['HOST_KEY_HINT','WEB_KEY_HINT','Spool']fromdataclassesimportdataclassfromeuler_webshell.msg.notifyimportdismiss_by_subject,notify_staff#: Over the web the reader is looking at the page: the envelope chip in the header, whose key row#: carries its own save button, so nobody has to type a message id they would have to find first.WEB_KEY_HINT:str=('open the [accent]✉ messages[/accent] menu in the header and press ''[accent]save[/accent] on the master-key message.')#: A terminal has no header — there, the verbs are the only answer there is.HOST_KEY_HINT:str='run [accent]msg list[/accent], then [accent]msg act <id>[/accent].'@dataclass(frozen=True)classSpool:"""Deliver notices through the spool; *hint* names where a waiting key is taken."""hint:strdefto_staff(self,subject:str,body:str)->bool:returnnotify_staff(subject,body)defdismiss(self,subject:str)->bool:returndismiss_by_subject(subject)>0defkey_hint(self)->str:returnself.hint