Open
[V1110-PLUGIN] [P1] 上游裁决:单工具执行口 pub(super) ⇒ 任何仓外消费者都只能自建窄管线,失 hooks / event log / D9 / spec #127
kemengAdd on 2 days ago
kemeng
1 day ago Comments:
1 day ago Comments:
[ar审核 2026-11-05] 结论:✅可认领开发。建议:tx优先(建议仅负载均衡,任何人可抢,接单即开分支占位,comm同步防撞)。依赖:无。规范:一issue一分支,PR过L3;改门禁/契约/完成判据语义者ar复核diff。方向:单工具执行口pub(super)上游裁决,tx认领;偏裁决先贴方案。


kemeng
1 day ago Comments:
1 day ago Comments:
tx 认领 #127(2026-11-06)。
分支:tx/v1113-127-tool-gateway
取 乙案(薄门面)动手,理由:甲案把 stages 的内部函数提为 pub,永久外泄内部结构;丙案等于承认差距但不消除;乙案只多一个门面模块、内部结构不外泄,且三个消费者(xwmcp / xwmcps / 插件 tools.call)可复用同一入口。
交付形:xwcore 侧新增 runtime::tool_gateway,只暴露 execute_single_tool;不改 stages 的可见性。是否采纳仍由 ar 复核 diff 决定,我不预设结论。


结论
pub(super)这一处可见性,决定了所有仓外消费者(MCP server、插件tools.call、任何外部编排)都无法复用 xwcode 的完整工具执行管线,只能自建一条窄管线。而窄管线会静默丢掉四类语义,其中一类是安全相关的。这不是插件系统单独的问题,是「xwcode 能不能被外部驱动」的公共前置。
钉面
xuanwu-code/xwcore· 版本v0.1.61(f5a3706)· 宿主xwcode master @ 019588af3crates/xwcore/src/runtime/stages/execute_tool.rs:34——pub(super) async fn stage_execute_tool_with_retrycrates/xwcore/src/runtime/mod.rs:47——mod stages;(私有)ConversationRuntime无任何公开的单工具执行方法(grep "pub async fn execute" crates/xwcode/src/runtime/core.rs零命中)contract_registry::tools()、xw_tools::execute_tool(lib.rs:353)、PermissionMode/parse_permission_mode(permission.rs:5,268)窄管线会丢什么
mcp/前缀工具在外部路径下不可达要做(三选一,请上游裁决)
stage_execute_tool_with_retry提为pub,并给ConversationRuntime一个公开的execute_single_tool(name, input, mode)。改动最小,收益最大。xwcore内新增一个薄门面模块(如runtime::tool_gateway),只暴露上面那个方法,内部仍调stage_*。封住stages的内部结构不外泄。hooks的语义降级为「仅 TUI 会话内有效」。不建议继续维持现状:现状下每个消费者都会各写一条窄管线,语义漂移不可控(
xwmcp、xwmcps、插件tools.call已经是三个潜在消费者)。验收
PreToolUsehook 被触发(可用一个必拒绝的 hook 验证)。parse_permission_mode的 deny-by-default 保证外部路径最低权限。关联
audit/plugin-capability-2026-11-04/01-CAPABILITY_PROPOSAL.md§7.2 C-4 与 §10 待裁决项 #1/#2相关仓:
xuanwu-code/xwmcpsdocs/01-MCP_SERVER_E2E_PLAN.md(MCP server 侧同一问题,同一处方)