feat: add capability source policy metadata
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user