HKUDS/nanobot · error · TypeError

channel plugin setup must be a ChannelSetupSpec or None

Error message

channel plugin setup must be a ChannelSetupSpec or None

What it means

Error "channel plugin setup must be a ChannelSetupSpec or None" thrown in HKUDS/nanobot.

Source

Thrown at nanobot/channels/plugin.py:53

    setup: ChannelSetupSpec | None = None
    management: ChannelManagementSpec = ChannelManagementSpec()
    dependencies: tuple[str, ...] = ()
    default_enabled: bool = False
    settings_visible: bool = True
    capabilities: frozenset[str] = frozenset()
    webui: str | None = None

    def __post_init__(self) -> None:
        if _CHANNEL_PACKAGE_NAME.fullmatch(self.name) is None:
            raise ValueError(
                "channel plugin name must start with a letter and contain only letters, "
                "digits, or underscores"
            )
        _target_parts(self.runtime, label="runtime")
        if self.connector is not None:
            _target_parts(self.connector, label="connector")
        if self.setup is not None and not isinstance(cast(object, self.setup), ChannelSetupSpec):
            raise TypeError("channel plugin setup must be a ChannelSetupSpec or None")
        if not isinstance(cast(object, self.management), ChannelManagementSpec):
            raise TypeError("channel plugin management must be a ChannelManagementSpec")
        if not isinstance(cast(object, self.dependencies), tuple) or not all(
            isinstance(cast(object, requirement), str) and requirement.strip()
            for requirement in self.dependencies
        ):
            raise TypeError("channel plugin dependencies must be a tuple of requirements")
        for dependency in self.dependencies:
            try:
                Requirement(dependency)
            except InvalidRequirement as exc:
                raise ValueError(
                    f"channel plugin dependency is not a valid requirement: {dependency}"
                ) from exc
        if self.webui is not None:
            webui = self.webui.replace("\\", "/")
            if webui.startswith("/") or ".." in webui.split("/"):
                raise ValueError("channel plugin webui entry must stay inside its package")

View on GitHub (pinned to 42f37dc4c0)

When it happens

Trigger: Thrown at nanobot/channels/plugin.py:53 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of HKUDS/nanobot@42f37dc4c0 (2026-08-26). Data as JSON: /api/errors/572101cffa3fc72a. Report an issue: GitHub.