read_resource to also read capability sources

This commit is contained in:
lda
2026-05-19 17:41:59 +07:00 Verified
parent d22f3e64c8
commit 8a345883d1
5 changed files with 115 additions and 7 deletions
+68
View File
@@ -23,6 +23,8 @@ from wf_core import NodeUse, Workflow, execute_workflow_async
from wf_platform import (
CapabilityBuckets,
CapabilitySource,
DocumentationPrompt,
DocumentationResource,
SourcePermissions,
SourceVisibility,
page_items,
@@ -363,6 +365,25 @@ class WfMcpService:
return entry
async def read_resource(self, qualified_name: str) -> dict[str, Any]:
local_resource = self._local_documentation_resource(qualified_name)
if local_resource is not None:
self._record_event(
make_event(
"resource_read_completed",
capability_id=qualified_name,
payload={"uri": local_resource.uri, "source": "local"},
)
)
return {
"contents": [
{
"uri": local_resource.uri,
"mimeType": local_resource.mime_type,
"text": local_resource.text,
}
]
}
resource = self.get_resource(qualified_name)
connection = self.connections.get(resource.connection_id)
adapter = require_adapter(connection, self.adapters)
@@ -484,6 +505,31 @@ class WfMcpService:
*,
arguments: dict[str, str] | None = None,
) -> dict[str, Any]:
local_prompt = self._local_documentation_prompt(qualified_name)
if local_prompt is not None:
self._record_event(
make_event(
"prompt_get_completed",
capability_id=qualified_name,
payload={
"argument_keys": sorted((arguments or {}).keys()),
"source": "local",
},
)
)
return {
"description": local_prompt.description,
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": local_prompt.text,
},
}
],
}
prompt = self.get_prompt(qualified_name)
connection = self.connections.get(prompt.connection_id)
adapter = require_adapter(connection, self.adapters)
@@ -512,6 +558,28 @@ class WfMcpService:
)
return result
def _local_documentation_resource(
self,
qualified_name: str,
) -> DocumentationResource | None:
"""Return a local docs resource from capability sources by qualified name."""
for source in self.capability_sources.values():
resource = source.capabilities.resources.get(qualified_name)
if isinstance(resource, DocumentationResource):
return resource
return None
def _local_documentation_prompt(
self,
qualified_name: str,
) -> DocumentationPrompt | None:
"""Return a local docs prompt from capability sources by qualified name."""
for source in self.capability_sources.values():
prompt = source.capabilities.prompts.get(qualified_name)
if isinstance(prompt, DocumentationPrompt):
return prompt
return None
async def refresh_connection_catalog(
self,
connection_id: str,