[ar审核 2026-11-05] 结论:✅可认领开发。建议:tx优先(建议仅负载均衡,任何人可抢,接单即开分支占位,comm同步防撞)。依赖:无。规范:一issue一分支,PR过L3;改门禁/契约/完成判据语义者ar复核diff。方向:MCP client立靶server排除,tx认领;方向明确按裁决做。


【km 认领 2026-11-07】一看已过:评论区仅 ar 一条审核(2026-11-05 ✅可认领),无他人占位。★ 照实并载:本条初稿误写「两条」,2026-11-04 11:59 那条「接受评审」实属 #119,本单并无;已订正。
- 仓/支:新仓
xuanwu-code/xw-plugin-mcp-bridge(正文指定)· 支fix/128-mcp-client-target(一 issue 一分支,PR 过 L3) - 范围(照正文「要做」三条落):
- 插件本体:
xw:plugin/net.fetch连 MCP endpoint(Streamable HTTP),把远端tools/list桥接成 xwcode 工具; - 验收三条:① 真调通(不是注册成功)② 远端 5xx/超时/会话过期三类故障返回可归因负码、不 panic 不静默 ③ 复盘档至少列一条「因 ABI 缺失而绕路」;
- 不动 ABI 迁就插件:凡需扩 ABI 者,另开 issue 回投。
- 插件本体:
★ 认领前先核(一手面 · xwwasm origin/master)
- ✅ 具备:
xw:plugin/net.fetch(bridge.rs:595host_net_fetch)·tool_call(runner.rs)·spawn(#121已落,乙案E_NOT_CARRIED)·on-x(#126面) - ❌
config.get未落 master:HostBridge::read(bridge.rs:313-341)只认两个 seam ——prompt/segments与tools/definitions,其余一律E_UNKNOWN_SEAM;xw:plugin/get是只读投影,不含配置键。 - 正文所书「硬依赖
config.get(第 5 条)」=#125,其 PRxwwasm !4现仍open、未合入。
⇒ 请裁甲乙(请任选其一,我方不自作主张)
- 甲:等
#125合入再动本单(本单先挂起,占位保留)。 - 乙:本单先做不依赖
config.get的路径 ——[[servers]]在无配置读面时退化为编译期/环境变量硬编码,并在复盘档显名记为「因 ABI 缺失而绕路」第一条(恰好满足验收第三条)。此后再由#125收敛。
另需你一句确认:新仓走 POST /orgs/xuanwu-code/repos(我方持令牌可建,auto_init:false)。仓名 xw-plugin-mcp-bridge ∧ 公开可见 是否即按此建?确认后我建仓并开分支。


【km 订正 · 2026-11-07】我上一条认领评论里请裁的甲/乙二择,现已不成立,撤回该请示 —— 照实订正如下。
原判断(错在把「配置读面」想窄):以为本单必须靠 config.get,故请裁「等 #125」或「硬编码绕路」。
核穿后的事实:配置根本不需要 config.get ——
[plugin.config]是任意 TOML 表、原样透传到 guest 的apply:
crates/xw-plugin/src/manifest.rs:39-44(字段config: Option<toml::Value>,"原样透传至宿主Entry.config")
+crates/xw-plugin-kernel/src/source.rs:578(encode_config⇒toml::to_string⇒ 写进 guest 线性内存后调apply)。- ⇒ 服务器清单声明为
[[plugin.config.servers]],apply里解析即可,tool_call从静态存储读。 config.get(#125)解决的是运行期改名/改名键查询,不是本单前置。正文「硬依赖config.get」一句,按此理解应订正为「配置在apply期可得,运行期读取才需要config.get」。
据此的处置:
- 本单立即开工,不等
#125; - 「因 ABI 缺失而绕路」第一条相应改为:运行期无法重读配置(
config.get缺失)⇒ 本插件把[[servers]]冻结在apply期;配置变更须重新装载插件。代价写入docs/TARGET_RETROSPECTIVE.md。 - 新仓已建:
xuanwu-code/xw-plugin-mcp-bridge(id11321482,public,auto_init:false);分支fix/128-mcp-client-target。


【km 交付回报 · 2026-11-07】#128 验收靶已交付(分支+PR 形态,未合入)。
PR:https://gitcode.com/xuanwu-code/xw-plugin-mcp-bridge/merge_requests/1
支 fix/128-mcp-client-target @ 4b060f6 → master @ e036f63(合并面:conflict=True · mergeable=True · ci=True)
三角色读数(均可复跑)
| 角色 | 交付 | 读数 |
|---|---|---|
dev |
src/ 9 模块 + plugin.toml + 制品 |
五闸:g1 0 · g2 66 passed/0 failed · g3 clean · g4 clean · g5 rc=2(新仓无主线孪生面) |
test |
tests/contract.rs(12 黑盒)+ scripts/ 两件 |
自跑 fmt/clippy/nextest 全 rc=0;红控 3 处变异各击穿对应用例(rc=101),复原 12/12 绿 |
arch |
docs/TARGET_RETROSPECTIVE.md + docs/reviews/V010_REVIEW_plugin-arch_r1.md |
blockers: 0;9 条非阻断 finding(F-1 激活墙钟最坏≈100s vs 宿主 30s;F-2 分页 8 页静默截断;F-3 制品 ABI 形无仓内核验;F-4 SSE 取末条不校 id)+ radar 6 条 |
验收三条对照
- 真调通:
apply动态生成tools/definitions(裸数组 · kebab ·input-schema为字符串),tool_call走 JSON-RPCtools/call,支持 Streamable HTTP + SSE(取末条data:)。 - 三类故障可归因:
E_MCP_TIMEOUT/E_MCP_HTTP(含状态码)/E_MCP_SESSION(会话过期只重建一次),不 panic、不静默。 - 复盘列「因 ABI 缺失而绕路」:第一条 = 无
config.get⇒[[plugin.config.servers]]在apply期冻结,改一条地址须卸载重装;连带tool_call无配置入参 ⇒ 配置只能活在全局态。
六条能力线判词(arch 一手)
net.fetch ⚠️恰好够用 · config.get ❌缺 · tool_call ✅够用 · spawn 长驻 ❌缺 · 事件 tool:after ❌缺(该事件名 xwwasm 全仓零命中)· 错误模型 ⚠️恰好够用(负码无 message 通道)。
未闭项(照实)
plugin.wasm(396246 B,sha256 24def556…cd47d,已绑plugin.toml:21)入库系一次性例外(构建产物不在任何角色常规写域),已在 commit message 明写。token_env(ABI 无环境变量面)、timeout_ms(guest 无时钟面)为声明值,已响亮记账不静默。- 端到端(真宿主
net.fetch面:超时/配额/域名拒)无法在本机覆盖,归 L3。 arch建议回投xwcode9 条 issue(config seam /env.get/apply失败原因通道 /net.fetchper-request timeout / 时钟面 / 增量读取 / 服务端推送 / 单槽缝并存裁定 / ABI 文档 method 面)—— 待你裁是否建。
★ 合入与 L3 归主线侧:我方 merged_by_user_passed=false(You are in project members list, but do not have PUSH permission),结构性无法自行合并。


结论
用户提出的一条判断值得写进验收:
反过来用:如果连「把远端 MCP server 的工具桥接成 xwcode 工具」这么标准的一件事都做不成插件,那插件系统就还不成立。 所以这条不是「顺便做的功能」,是验收靶——靶倒了,说明前面的能力开放没做到位。
钉面
xuanwu-code/xwwasm· tagv0.1.18(75457fb· 2026-10-24)· 宿主xwcode master @ 019588af3crates/xw-plugin-kernel/src/source.rs:47-48(EXPORT_MEMORY/EXPORT_ALLOC)·:253-256(签名校验(i32,i32)->i64)crates/xw-plugin-kernel/src/bridge.rs:735host_spawn等 8 个func_wrap;net.fetch仅出站git grep -lE "TcpListener|listen\(|Server::bind|accept\(\)" v0.1.18 -- crates/无输出net.fetch六步序(v0.1.18 实装,判定先于 I/O)·tool_call载荷三字段(runner.rs头注:tool/input/call_id)xuanwu-code/xwmcps(MCP server 侧,独立二进制,非插件)要先分清两种「MCP 插件」
net.fetch✅ +config.get❌ +tool_call✅config.getlisten/bind/accept零命中)A 是本轮的靶,B 明确排除。 理由:插件 ABI 的导出面固定为
memory/xw_alloc/apply/tool_call(source.rs:47-48,253-256),导入面net.fetch只出站;apply一返回执行上下文即消失。没有任何原语能让外部请求唤醒一个 wasm guest。 B 的形态是独立二进制(见xuanwu-code/xwmcps)。为什么选 A 做靶
它同时压到六条能力线,一条不通就暴露:
net.fetchconfig.gettoken_envtool_callspawn/长驻Mcp-Session-Idtool:after要做
xw-plugin-mcp-bridge新仓,配置从plugin.toml读[[servers]]。验收
xwcode工具表里,模型能调起来(不是"注册成功",是模型真调通)。依赖
config.get(第 5 条)。spawn若取乙案(降级为E_NOT_CARRIED),则 MCP 会话保活改为每次重建,需在复盘中记录代价。关联
audit/plugin-capability-2026-11-04/01-CAPABILITY_PROPOSAL.md§1 与 §9 MVP对照仓:
xuanwu-code/xw-plugin-capability(本审计的独立仓副本)