move types to new package
This commit is contained in:
@@ -2,14 +2,13 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from .service.capability_sources import (
|
from wf_platform import (
|
||||||
CapabilityBuckets,
|
CapabilityBuckets,
|
||||||
CapabilitySource,
|
CapabilitySource,
|
||||||
SourcePermissions,
|
SourcePermissions,
|
||||||
SourceVisibility,
|
SourceVisibility,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
ADMIN_SOURCE_ID = "wf.admin"
|
ADMIN_SOURCE_ID = "wf.admin"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from typing import TYPE_CHECKING, Any, Protocol
|
|||||||
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from wf_core.runtime.ops.merges import DEFAULT_REDUCER_DEFINITIONS
|
|
||||||
from wf_authoring import (
|
from wf_authoring import (
|
||||||
NodeReturn,
|
NodeReturn,
|
||||||
NodeSpec,
|
NodeSpec,
|
||||||
@@ -19,21 +18,22 @@ from wf_authoring import (
|
|||||||
last_item_or_none,
|
last_item_or_none,
|
||||||
length,
|
length,
|
||||||
node,
|
node,
|
||||||
pick_path,
|
|
||||||
pick_key,
|
pick_key,
|
||||||
|
pick_path,
|
||||||
project_fields,
|
project_fields,
|
||||||
rename_fields,
|
rename_fields,
|
||||||
runtime_error,
|
runtime_error,
|
||||||
truthy,
|
truthy,
|
||||||
)
|
)
|
||||||
|
from wf_core.runtime.ops.merges import DEFAULT_REDUCER_DEFINITIONS
|
||||||
|
|
||||||
from .capability_sources import (
|
from wf_platform import (
|
||||||
CapabilityBuckets,
|
CapabilityBuckets,
|
||||||
CapabilitySource,
|
CapabilitySource,
|
||||||
SourcePermissions,
|
SourcePermissions,
|
||||||
SourceVisibility,
|
SourceVisibility,
|
||||||
)
|
)
|
||||||
from .specs import qualify_spec
|
from wf_mcp.broker.service.specs import qualify_spec
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from wf_core import ReducerSpec
|
from wf_core import ReducerSpec
|
||||||
|
|||||||
@@ -1,83 +1 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from dataclasses import dataclass, field
|
|
||||||
from typing import Any, Literal
|
|
||||||
|
|
||||||
from wf_authoring import NodeSpec
|
|
||||||
from wf_core import ReducerSpec
|
|
||||||
from wf_core.runtime.ops.merges import ReducerDefinition
|
|
||||||
|
|
||||||
SourceKind = Literal["system", "connection"]
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, slots=True)
|
|
||||||
class SourceVisibility:
|
|
||||||
planner: bool = False
|
|
||||||
mcp_client: bool = False
|
|
||||||
admin_dashboard: bool = True
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, slots=True)
|
|
||||||
class SourcePermissions:
|
|
||||||
safe_for_workflow: bool = False
|
|
||||||
calls_upstream: bool = False
|
|
||||||
mutates_config: bool = False
|
|
||||||
mutates_auth: bool = False
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(slots=True)
|
|
||||||
class CapabilityBuckets:
|
|
||||||
tools: dict[str, Any] = field(default_factory=dict)
|
|
||||||
node_specs: dict[str, NodeSpec[Any, Any]] = field(default_factory=dict)
|
|
||||||
reducers: dict[str, ReducerSpec] = field(default_factory=dict)
|
|
||||||
reducer_definitions: dict[str, ReducerDefinition] = field(default_factory=dict)
|
|
||||||
prompts: dict[str, Any] = field(default_factory=dict)
|
|
||||||
resources: dict[str, Any] = field(default_factory=dict)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(slots=True)
|
|
||||||
class CapabilitySource:
|
|
||||||
id: str
|
|
||||||
kind: SourceKind
|
|
||||||
capabilities: CapabilityBuckets = field(default_factory=CapabilityBuckets)
|
|
||||||
enabled: bool = True
|
|
||||||
visibility: SourceVisibility = field(default_factory=SourceVisibility)
|
|
||||||
permissions: SourcePermissions = field(default_factory=SourcePermissions)
|
|
||||||
description: str | None = None
|
|
||||||
|
|
||||||
def as_status(self) -> dict[str, Any]:
|
|
||||||
return {
|
|
||||||
"id": self.id,
|
|
||||||
"kind": self.kind,
|
|
||||||
"enabled": self.enabled,
|
|
||||||
"visibility": {
|
|
||||||
"planner": self.visibility.planner,
|
|
||||||
"mcp_client": self.visibility.mcp_client,
|
|
||||||
"admin_dashboard": self.visibility.admin_dashboard,
|
|
||||||
},
|
|
||||||
"permissions": {
|
|
||||||
"safe_for_workflow": self.permissions.safe_for_workflow,
|
|
||||||
"calls_upstream": self.permissions.calls_upstream,
|
|
||||||
"mutates_config": self.permissions.mutates_config,
|
|
||||||
"mutates_auth": self.permissions.mutates_auth,
|
|
||||||
},
|
|
||||||
"description": self.description,
|
|
||||||
"tool_count": len(self.capabilities.tools),
|
|
||||||
"node_spec_count": len(self.capabilities.node_specs),
|
|
||||||
"reducer_count": len(self.capabilities.reducers),
|
|
||||||
"prompt_count": len(self.capabilities.prompts),
|
|
||||||
"resource_count": len(self.capabilities.resources),
|
|
||||||
}
|
|
||||||
|
|
||||||
def as_inventory(self) -> dict[str, Any]:
|
|
||||||
"""Return source metadata plus the capability names it owns."""
|
|
||||||
return {
|
|
||||||
**self.as_status(),
|
|
||||||
"capabilities": {
|
|
||||||
"tools": sorted(self.capabilities.tools),
|
|
||||||
"node_specs": sorted(self.capabilities.node_specs),
|
|
||||||
"reducers": sorted(self.capabilities.reducers),
|
|
||||||
"prompts": sorted(self.capabilities.prompts),
|
|
||||||
"resources": sorted(self.capabilities.resources),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -7,17 +7,23 @@ from typing import Any
|
|||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from wf_authoring import NodeReturn, NodeSpec
|
|
||||||
from wf_artifacts import (
|
from wf_artifacts import (
|
||||||
FileWorkflowArtifactStore,
|
FileWorkflowArtifactStore,
|
||||||
WorkflowArtifact,
|
WorkflowArtifact,
|
||||||
WorkflowArtifactCatalogEntry,
|
WorkflowArtifactCatalogEntry,
|
||||||
WorkflowDeployment,
|
|
||||||
WorkflowArtifactStore,
|
WorkflowArtifactStore,
|
||||||
|
WorkflowDeployment,
|
||||||
artifact_catalog_entry,
|
artifact_catalog_entry,
|
||||||
)
|
)
|
||||||
|
from wf_authoring import NodeReturn, NodeSpec
|
||||||
from wf_core import NodeUse, Workflow, execute_workflow_async
|
from wf_core import NodeUse, Workflow, execute_workflow_async
|
||||||
|
|
||||||
|
from wf_platform import (
|
||||||
|
CapabilityBuckets,
|
||||||
|
CapabilitySource,
|
||||||
|
SourcePermissions,
|
||||||
|
SourceVisibility,
|
||||||
|
)
|
||||||
from ...connections import ConnectionRegistry, parse_connection_id, qualify_node_name
|
from ...connections import ConnectionRegistry, parse_connection_id, qualify_node_name
|
||||||
from ...events import EventBus, McpEvent, make_event
|
from ...events import EventBus, McpEvent, make_event
|
||||||
from ...models import (
|
from ...models import (
|
||||||
@@ -35,17 +41,11 @@ from ...shared.names import RESERVED_CONNECTION_IDS
|
|||||||
from ...storage import Store
|
from ...storage import Store
|
||||||
from ...workflow.wrappers import _model_from_schema
|
from ...workflow.wrappers import _model_from_schema
|
||||||
from ...workflow_surface.runtime_dependencies import resolve_runtime_dependencies
|
from ...workflow_surface.runtime_dependencies import resolve_runtime_dependencies
|
||||||
|
from ..admin_capabilities import admin_source
|
||||||
from ..catalog import CombinedCatalog, snapshot_from_specs
|
from ..catalog import CombinedCatalog, snapshot_from_specs
|
||||||
from ..discovery import discover_connection_capabilities, specs_from_discovered_tools
|
from ..discovery import discover_connection_capabilities, specs_from_discovered_tools
|
||||||
from ..admin_capabilities import admin_source
|
|
||||||
from .adapters import require_adapter
|
from .adapters import require_adapter
|
||||||
from .builtins import builtin_sources
|
from .builtins import builtin_sources
|
||||||
from .capability_sources import (
|
|
||||||
CapabilityBuckets,
|
|
||||||
CapabilitySource,
|
|
||||||
SourcePermissions,
|
|
||||||
SourceVisibility,
|
|
||||||
)
|
|
||||||
from .specs import get_qualified_spec, qualify_spec
|
from .specs import get_qualified_spec, qualify_spec
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,8 @@ from typing import Any
|
|||||||
|
|
||||||
from wf_authoring import NodeSpec
|
from wf_authoring import NodeSpec
|
||||||
|
|
||||||
from ...connections import qualify_node_name
|
from wf_platform import CapabilitySource
|
||||||
from .capability_sources import CapabilitySource
|
from wf_mcp.connections import qualify_node_name
|
||||||
|
|
||||||
|
|
||||||
def qualify_spec(connection_id: str, spec: NodeSpec[Any, Any]) -> NodeSpec[Any, Any]:
|
def qualify_spec(connection_id: str, spec: NodeSpec[Any, Any]) -> NodeSpec[Any, Any]:
|
||||||
"""Return a copy of a spec with its node name scoped to a connection."""
|
"""Return a copy of a spec with its node name scoped to a connection."""
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ from typing import Any
|
|||||||
from wf_artifacts import RequiredCapability, WorkflowArtifact, WorkflowDeployment
|
from wf_artifacts import RequiredCapability, WorkflowArtifact, WorkflowDeployment
|
||||||
from wf_authoring import AsyncRegistryHandler, NodeSpec, build_async_registry
|
from wf_authoring import AsyncRegistryHandler, NodeSpec, build_async_registry
|
||||||
from wf_core.runtime.ops.merges import ReducerDefinition
|
from wf_core.runtime.ops.merges import ReducerDefinition
|
||||||
|
from wf_platform import CapabilitySource
|
||||||
from wf_mcp.broker.service.capability_sources import CapabilitySource
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, slots=True)
|
@dataclass(frozen=True, slots=True)
|
||||||
class RuntimeDependencies:
|
class RuntimeDependencies:
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
from .sources import (
|
||||||
|
CapabilityBuckets,
|
||||||
|
CapabilitySource,
|
||||||
|
SourceKind,
|
||||||
|
SourcePermissions,
|
||||||
|
SourceVisibility,
|
||||||
|
)
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"CapabilityBuckets",
|
||||||
|
"CapabilitySource",
|
||||||
|
"SourceKind",
|
||||||
|
"SourcePermissions",
|
||||||
|
"SourceVisibility",
|
||||||
|
]
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
from dataclasses import dataclass, field
|
||||||
|
from typing import Any, Literal
|
||||||
|
|
||||||
|
from wf_authoring import NodeSpec
|
||||||
|
from wf_core import ReducerSpec
|
||||||
|
from wf_core.runtime.ops.merges import ReducerDefinition
|
||||||
|
|
||||||
|
SourceKind = Literal["system", "connection"]
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True, slots=True)
|
||||||
|
class SourceVisibility:
|
||||||
|
planner: bool = False
|
||||||
|
mcp_client: bool = False
|
||||||
|
admin_dashboard: bool = True
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True, slots=True)
|
||||||
|
class SourcePermissions:
|
||||||
|
safe_for_workflow: bool = False
|
||||||
|
calls_upstream: bool = False
|
||||||
|
mutates_config: bool = False
|
||||||
|
mutates_auth: bool = False
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(slots=True)
|
||||||
|
class CapabilityBuckets:
|
||||||
|
tools: dict[str, Any] = field(default_factory=dict)
|
||||||
|
node_specs: dict[str, NodeSpec[Any, Any]] = field(default_factory=dict)
|
||||||
|
reducers: dict[str, ReducerSpec] = field(default_factory=dict)
|
||||||
|
reducer_definitions: dict[str, ReducerDefinition] = field(default_factory=dict)
|
||||||
|
prompts: dict[str, Any] = field(default_factory=dict)
|
||||||
|
resources: dict[str, Any] = field(default_factory=dict)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(slots=True)
|
||||||
|
class CapabilitySource:
|
||||||
|
id: str
|
||||||
|
kind: SourceKind
|
||||||
|
capabilities: CapabilityBuckets = field(default_factory=CapabilityBuckets)
|
||||||
|
enabled: bool = True
|
||||||
|
visibility: SourceVisibility = field(default_factory=SourceVisibility)
|
||||||
|
permissions: SourcePermissions = field(default_factory=SourcePermissions)
|
||||||
|
description: str | None = None
|
||||||
|
|
||||||
|
def as_status(self) -> dict[str, Any]:
|
||||||
|
return {
|
||||||
|
"id": self.id,
|
||||||
|
"kind": self.kind,
|
||||||
|
"enabled": self.enabled,
|
||||||
|
"visibility": {
|
||||||
|
"planner": self.visibility.planner,
|
||||||
|
"mcp_client": self.visibility.mcp_client,
|
||||||
|
"admin_dashboard": self.visibility.admin_dashboard,
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"safe_for_workflow": self.permissions.safe_for_workflow,
|
||||||
|
"calls_upstream": self.permissions.calls_upstream,
|
||||||
|
"mutates_config": self.permissions.mutates_config,
|
||||||
|
"mutates_auth": self.permissions.mutates_auth,
|
||||||
|
},
|
||||||
|
"description": self.description,
|
||||||
|
"tool_count": len(self.capabilities.tools),
|
||||||
|
"node_spec_count": len(self.capabilities.node_specs),
|
||||||
|
"reducer_count": len(self.capabilities.reducers),
|
||||||
|
"prompt_count": len(self.capabilities.prompts),
|
||||||
|
"resource_count": len(self.capabilities.resources),
|
||||||
|
}
|
||||||
|
|
||||||
|
def as_inventory(self) -> dict[str, Any]:
|
||||||
|
"""Return source metadata plus the capability names it owns."""
|
||||||
|
return {
|
||||||
|
**self.as_status(),
|
||||||
|
"capabilities": {
|
||||||
|
"tools": sorted(self.capabilities.tools),
|
||||||
|
"node_specs": sorted(self.capabilities.node_specs),
|
||||||
|
"reducers": sorted(self.capabilities.reducers),
|
||||||
|
"prompts": sorted(self.capabilities.prompts),
|
||||||
|
"resources": sorted(self.capabilities.resources),
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -6,14 +6,14 @@ import shutil
|
|||||||
from wf_authoring import NodeSpec
|
from wf_authoring import NodeSpec
|
||||||
from wf_core import END, NodeUse, RunStatus
|
from wf_core import END, NodeUse, RunStatus
|
||||||
from wf_mcp.broker import WfMcpService
|
from wf_mcp.broker import WfMcpService
|
||||||
from wf_mcp.broker.service.capability_sources import (
|
from wf_mcp.models import AuthRecord, ConnectionConfig, RawWorkflowPlan
|
||||||
|
from wf_mcp.shared.errors import error_payload
|
||||||
|
from wf_mcp.storage import FileStore
|
||||||
|
from wf_platform import (
|
||||||
CapabilityBuckets,
|
CapabilityBuckets,
|
||||||
CapabilitySource,
|
CapabilitySource,
|
||||||
SourceVisibility,
|
SourceVisibility,
|
||||||
)
|
)
|
||||||
from wf_mcp.models import AuthRecord, ConnectionConfig, RawWorkflowPlan
|
|
||||||
from wf_mcp.shared.errors import error_payload
|
|
||||||
from wf_mcp.storage import FileStore
|
|
||||||
|
|
||||||
from .test_support import (
|
from .test_support import (
|
||||||
FailingDiscoveryAdapter,
|
FailingDiscoveryAdapter,
|
||||||
|
|||||||
@@ -13,16 +13,15 @@ from wf_artifacts import (
|
|||||||
)
|
)
|
||||||
from wf_authoring import node, reducer
|
from wf_authoring import node, reducer
|
||||||
from wf_mcp.broker import WfMcpService
|
from wf_mcp.broker import WfMcpService
|
||||||
from wf_mcp.broker.service.capability_sources import (
|
from wf_mcp.models import ConnectionConfig, RawWorkflowPlan
|
||||||
|
from wf_mcp.storage import FileStore
|
||||||
|
from wf_mcp.workflow_surface import WorkflowSurfaceHandlers
|
||||||
|
from wf_platform import (
|
||||||
CapabilityBuckets,
|
CapabilityBuckets,
|
||||||
CapabilitySource,
|
CapabilitySource,
|
||||||
SourcePermissions,
|
SourcePermissions,
|
||||||
SourceVisibility,
|
SourceVisibility,
|
||||||
)
|
)
|
||||||
from wf_mcp.models import ConnectionConfig
|
|
||||||
from wf_mcp.models import RawWorkflowPlan
|
|
||||||
from wf_mcp.storage import FileStore
|
|
||||||
from wf_mcp.workflow_surface import WorkflowSurfaceHandlers
|
|
||||||
|
|
||||||
from .test_support import echo_tool, local_temp_root
|
from .test_support import echo_tool, local_temp_root
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user