Plugin SDK
Package adapters as independent distributions with static manifests, metadata-only discovery, and explicit policy-checked loading.
Package layout
A plugin registers one factory in the lumis_sdk.plugins entry-point group and ships a strict static manifest, lumis-plugin.json, at distribution root (limited to 64 KiB). The manifest version must equal the installed distribution version, and entryPoint must equal the registered entry-point name:
{
"apiVersion": "lumis.dev/v1",
"kind": "PluginManifest",
"metadata": { "name": "acme-evidence", "version": "1.2.0" },
"spec": {
"entryPoint": "acme-evidence",
"capabilities": ["evidence_provider"],
"supportStatus": "community",
"sdk": { "minimum": "0.0.4", "maximumExclusive": "0.1.0" },
"requiredAuthorities": ["network", "secrets"],
"summary": "Collect bounded evidence from the Acme service."
}
}Factory contract
The entry point resolves to a zero-argument callable with a lumis_manifest attribute. Applications should normally wrap this shape in a typed callable class, as demonstrated by lumis_sdk.testkit.FakePluginFactory.
from lumis_sdk.domain import PluginManifest
MANIFEST = PluginManifest.model_validate_json(...)
def create_plugin() -> object:
return AcmeEvidenceProvider(...)
create_plugin.lumis_manifest = MANIFESTDiscovery and loading
from lumis_sdk.adapters.plugins import ImportlibPluginCatalog
from lumis_sdk.domain import PluginAuthority, PluginLoadPolicy
catalog = ImportlibPluginCatalog()
descriptors = catalog.discover() # metadata only; imports no plugin module
loaded = catalog.load(
"acme-evidence",
policy=PluginLoadPolicy(
allowed_authorities=[PluginAuthority.NETWORK, PluginAuthority.SECRETS]
),
)
provider = loaded.instanceDiscovery validates distribution identity, SDK compatibility, support status, capabilities, and authority requests without importing plugin modules. The default load policy allows declared capability surfaces but denies every sensitive authority—network, secrets, and the rest must be granted explicitly. Loading fails for missing or invalid manifests, incompatible SDK versions, archived plugins, duplicates, entry-point mismatches, manifest mismatches, and import or factory failures.
CLI inspection
lumis plugins list
lumis plugins list --json
lumis plugins doctor
lumis plugins doctor --jsonBoth commands inspect static metadata only; they never load or activate plugins.
Contract testing
from lumis_sdk.testkit import assert_plugin_factory_contract
instance = assert_plugin_factory_contract(create_plugin, MANIFEST)Capability-specific packages should additionally run the contract tests for the public port they implement—the evidence, report, and memory contracts all ship reusable assertions. The factory check does not prove network safety, credential handling, semantic correctness, or provider quality.