feat: add capability source policy metadata

This commit is contained in:
lda
2026-06-13 18:07:27 +07:00 Verified
parent e667f5da11
commit 41c24fc0e5
3 changed files with 49 additions and 0 deletions
+25
View File
@@ -30,6 +30,18 @@ class SourcePermissions:
mutates_auth: bool = False
@dataclass(frozen=True, slots=True)
class SourcePolicy:
"""Runtime/deployment policy for one capability source.
Platform sources are process-provided built-ins such as `wf.std`. They are
not account-bound and should not require deployment source bindings.
"""
platform: bool = False
binding_required: bool = True
class SourceVisibilitySnapshot(BaseModel):
"""Serializable visibility flags for one source inventory snapshot."""
@@ -47,6 +59,13 @@ class SourcePermissionsSnapshot(BaseModel):
mutates_auth: bool = False
class SourcePolicySnapshot(BaseModel):
"""Serializable source policy used by CLI/API inventory responses."""
platform: bool = False
binding_required: bool = True
class NodeSpecInventory(BaseModel):
"""Serializable public contract for one executable node spec."""
@@ -108,6 +127,7 @@ class SourceStatus(BaseModel):
enabled: bool
visibility: SourceVisibilitySnapshot
permissions: SourcePermissionsSnapshot
policy: SourcePolicySnapshot
description: str | None = None
tool_count: int
node_spec_count: int
@@ -142,6 +162,7 @@ class CapabilitySource:
enabled: bool = True
visibility: SourceVisibility = field(default_factory=SourceVisibility)
permissions: SourcePermissions = field(default_factory=SourcePermissions)
policy: SourcePolicy = field(default_factory=SourcePolicy)
description: str | None = None
def as_status(self) -> SourceStatus:
@@ -161,6 +182,10 @@ class CapabilitySource:
mutates_config=self.permissions.mutates_config,
mutates_auth=self.permissions.mutates_auth,
),
policy=SourcePolicySnapshot(
platform=self.policy.platform,
binding_required=self.policy.binding_required,
),
description=self.description,
tool_count=len(self.capabilities.tools),
node_spec_count=len(self.capabilities.node_specs),