fix(pipeline): decouple Runner from extension permissions (LANG-54) (#2723)

* fix(pipeline): decouple runner from extension allowlist

Co-authored-by: multica-agent <[email protected]>

* fix(pipeline): complete runner diagnostics and real runtime coverage

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
This commit is contained in:
RockChinQ
2026-10-19 23:07:11 +08:00
committed by GitHub
co-authored by multica-agent
parent 5a6ddbff6f
commit d9e4e7d9df
24 changed files with 1012 additions and 35 deletions
+9 -2
View File
@@ -132,7 +132,13 @@ class LangBotMCPServer:
await ap.pipeline_service.get_pipeline_extensions(_authorized(Permission.RESOURCE_VIEW), pipeline_uuid)
)
@mcp.tool(description='Replace all Pipeline extension bindings. All binding lists and switches are required.')
@mcp.tool(
description=(
'Replace all Pipeline extension bindings. All binding lists and switches are required. '
'Plugin switches control EventListener, Tool and Command only, not the independently selected Runner. '
'Do not add a Runner plugin here just to run it; installation, global enablement and Workspace access still apply.'
)
)
async def update_pipeline_extensions(
pipeline_uuid: str,
bound_plugins: list[dict],
@@ -394,7 +400,8 @@ class LangBotMCPServer:
@mcp.tool(
description=(
'Create a pipeline. `pipeline_data` matches the LangBot POST '
'/api/v1/pipelines body. Returns the new pipeline UUID.'
'/api/v1/pipelines body. Supplied config and extension preferences are preserved; '
'omitting config uses installed Runner defaults. Returns the new pipeline UUID.'
)
)
async def create_pipeline(pipeline_data: dict) -> str: