Release alpha 0.6.6 autochess flow
check / local-gate (push) Failing after 40s

This commit is contained in:
JWeBot Contributors
2026-10-15 17:10:28 +08:00
parent 9fff57134f
commit a74147e7f1
64 changed files with 1838 additions and 1060 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "jwebot-sdk"
version = "0.6.5a0+1015"
version = "0.6.6a0+1015"
description = "Typed, capability-limited extension API for JWeBot plugins"
requires-python = ">=3.9"
dependencies = []
@@ -38,4 +38,4 @@ __all__ = [
"SingleGroupContext",
]
__version__ = "0.6.5a0+1015"
__version__ = "0.6.6a0+1015"
@@ -20,6 +20,7 @@ class ContractViolation(ValueError):
class PlanKind(str, Enum):
TEXT = "text"
MULTI_TEXT = "multi_text"
NO_REPLY = "no_reply"
@@ -156,6 +157,7 @@ class ReplyPlan:
kind: PlanKind
message: str = ""
messages: tuple[str, ...] = ()
def __post_init__(self) -> None:
if self.kind is PlanKind.TEXT:
@@ -168,13 +170,40 @@ class ReplyPlan:
limit=MAX_REPLY_CHARS,
),
)
if self.messages:
raise ContractViolation("text plan cannot contain multiple messages")
elif self.kind is PlanKind.MULTI_TEXT:
if self.message:
raise ContractViolation("multi_text plan cannot contain text")
if not self.messages:
raise ContractViolation("multi_text plan requires messages")
if len(self.messages) > 8:
raise ContractViolation("multi_text plan exceeds 8 messages")
object.__setattr__(
self,
"messages",
tuple(
_required_text(
message,
name="reply message",
limit=MAX_REPLY_CHARS,
)
for message in self.messages
),
)
elif self.message:
raise ContractViolation("no_reply plan cannot contain text")
elif self.messages:
raise ContractViolation("no_reply plan cannot contain messages")
@classmethod
def text(cls, message: str) -> "ReplyPlan":
return cls(kind=PlanKind.TEXT, message=message)
@classmethod
def multi_text(cls, messages: tuple[str, ...] | list[str]) -> "ReplyPlan":
return cls(kind=PlanKind.MULTI_TEXT, messages=tuple(messages))
@classmethod
def no_reply(cls) -> "ReplyPlan":
return cls(kind=PlanKind.NO_REPLY)
@@ -189,14 +218,23 @@ class ReplyPlan:
raise ContractViolation("reply plan kind is invalid") from error
if kind is PlanKind.TEXT:
return cls.text(str(value.get("text", "")))
if kind is PlanKind.MULTI_TEXT:
messages = value.get("texts", ())
if not isinstance(messages, list):
raise ContractViolation("multi_text plan messages must be a list")
return cls.multi_text([str(message) for message in messages])
if value.get("text"):
raise ContractViolation("no_reply plan cannot contain text")
if value.get("texts"):
raise ContractViolation("no_reply plan cannot contain messages")
return cls.no_reply()
def to_mapping(self) -> dict[str, str]:
def to_mapping(self) -> dict[str, Any]:
value = {"kind": self.kind.value}
if self.kind is PlanKind.TEXT:
value["text"] = self.message
if self.kind is PlanKind.MULTI_TEXT:
value["texts"] = list(self.messages)
return value