deer-flow/backend/tests/test_extension_api_surface.py
Wenchao An e2f19d8335
feat(plugins): full-stack plugin APIs and bookmarks (#5647)
* feat(plugins): add full-stack contributions and bookmarks example

* ci(plugins): provision bookmark gateway for browser tests

* fix(plugins): authenticate module downloads through configured backend

* fix(plugins): isolate contributions and localize extension UI

* fix(plugins): preserve bookmark agent routing and contain async callbacks

* fix(plugins): pin durable batch workers to app extension snapshots
2026-09-22 11:18:57 +08:00

81 lines
2.5 KiB
Python

"""The contract package's public surface must import cleanly and stay complete.
A typo in a re-exported name breaks `import deerflow_extension_api` for every
extension, which is a silent-until-startup failure for third parties.
"""
import importlib
def test_public_surface_imports_and_matches_all():
module = importlib.import_module("deerflow_extension_api")
for name in module.__all__:
assert hasattr(module, name), f"__all__ advertises {name!r} but it is not exported"
def test_runtime_deps_is_exported_under_its_documented_name():
from deerflow_extension_api import ExtensionRuntimeDeps
assert ExtensionRuntimeDeps.__name__ == "ExtensionRuntimeDeps"
def test_api_version_matches_the_packaging_metadata():
"""A contract version that disagrees with the wheel's version makes pip
resolution and the ``@extension`` marker disagree about the same host."""
import tomllib
from pathlib import Path
from deerflow_extension_api import API_VERSION
pyproject = Path(__file__).resolve().parents[1] / "packages" / "extension-api" / "pyproject.toml"
declared = tomllib.loads(pyproject.read_text(encoding="utf-8"))["project"]["version"]
assert declared == API_VERSION
def test_every_contract_kind_added_for_the_0_2_series_is_exported():
import deerflow_extension_api as api
for name in (
"ActionContext",
"BackendAction",
"BrowserModule",
"ModelTool",
"PluginContribution",
"SettingsField",
"ToolContext",
"AgentAssemblyDescriptor",
"AgentAssemblyObserver",
"CompactionEvent",
"ContentKind",
"ContextCompactionObserver",
"ExtensionPrincipal",
"MessageProvenance",
"MiddlewareDescriptor",
"PROVENANCE_KEYS",
"ReleasePolicyProvider",
"ToolDescriptor",
"canonical_hash",
"collect_release_policies",
"provenance_kwargs",
"read_provenance",
"require_admin",
"resolve_principal",
):
assert name in api.__all__, f"{name} must be part of the public contract"
def test_registry_protocol_declares_every_registration_method():
from deerflow_extension_api import ExtensionRegistry
for method in (
"middlewares",
"task_lifecycle",
"system_model_observer",
"agent_assembly_observer",
"context_compaction_observer",
"service",
"routers",
"plugin",
):
assert hasattr(ExtensionRegistry, method), f"ExtensionRegistry must declare {method}()"