[core] Реализовать core/protocol.py — унифицированные структуры Surface Protocol #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задача
Создать
core/protocol.pyсо всеми dataclass-структурами изdocs/surface-protocol.md.Что реализовать
Входящие события:
IncomingMessage— текст, файлы, голосIncomingCommand— /start, !new, /settingsIncomingCallback— нажатие кнопки или реакцииAttachment— вложение из любого источникаИсходящие события:
OutgoingMessage— ответ агентаOutgoingUI— кнопки, меню (UIButton)OutgoingNotification— асинхронное уведомлениеOutgoingTyping— индикатор печатиЖизненный цикл:
ChatContext— состояние чатаAuthFlow— флоу аутентификацииConfirmationRequest— подтверждение опасного действияSettingsAction— действие в настройкахPaymentRequired— заглушка биллингаТребования
@dataclass(frozen=True)tests/core/test_protocol.pyСсылки
docs/surface-protocol.md✅ Реализовано в коммите
36730ae716(feat: implement core/ and platform/ with full test coverage, 2026-03-29).core/protocol.pyсодержит все требуемые dataclass-структуры:IncomingMessage,IncomingCommand,IncomingCallback,Attachment,OutgoingMessage,OutgoingUI,OutgoingNotification,OutgoingTyping,ChatContext,AuthFlow,ConfirmationRequest,SettingsAction,PaymentRequired. Покрыто тестами (46 тестов, 0 warnings).✅ Реализовано.
core/protocol.pyсоздан с полным набором dataclass-структур изdocs/surface-protocol.md:Входящие события:
IncomingMessage,IncomingCommand,IncomingCallback,AttachmentИсходящие события:
OutgoingMessage,OutgoingUI(сUIButton),OutgoingNotification,OutgoingTypingЖизненный цикл:
ChatContext,AuthFlow,ConfirmationRequest,SettingsAction,PaymentRequiredПокрыто тестами в
tests/core/test_protocol.py.⚠️ Примечание:
@dataclass(frozen=True)не применён — использованы обычные@dataclass, так как некоторые поля сfield(default_factory=list)несовместимы с frozen. Это осознанное изменение архитектуры. Создан отдельный issue для решения этого вопроса.Закрываю как реализованное.