Open
[V1110-PLUGIN] [P1] config.get 与 workspace.info:把「一次性配置纸条」变成可查询的会话上下文 #125
kemengAdd on  4 days ago
kemengCollaborators
4 days ago Create

结论

apply(config) 是一次性的:宿主把 TOML 编成字符串调一次,之后插件再无途径查询。加上 HostBridge 没有 workspace 根、没有会话标识(bridge.rs:195-207),插件不知道自己被装在哪个仓库、属于哪个会话、配置有没有变。

xw:plugin/host 里的 get 看起来像能补这个口子,但它只认两个 seam(bridge.rs:289-311),且缝里装的是别的插件的贡献——宿主从不向插件 provide。八个导入里,宿主→插件的能力通道是 0 个。

钉面

  • 仓:xuanwu-code/xwwasm · tag v0.1.18(75457fb)
  • crates/xw-plugin-kernel/src/bridge.rs:289-311 —— read() 只认 prompt/segments 与 tools/definitions,其余返 E_UNKNOWN_SEAM(-6)
  • crates/xw-plugin-kernel/src/source.rs:70-77 —— encode_config,config 以 TOML 文本注入 apply
  • 宿主侧 xwkernel v1.4.40 kernel-host/src/plugin_prompt.rs —— 只做三次 get,零 provide(单向链)
  • 旧轨对照:host_functions.rs:5 HostState{workspace_root, session_id, config},:79 get_config(脱敏)

要做

新增 xw:plugin/context(不动旧七原语):

interface context {
  workspace: func() -> workspace-info;   // root(abs) · name · vcs · branch
  config:    func(key: string) -> result<string, ctx-error>;  // 按 key 取,非整块
  session:   func() -> session-info;     // id · mode · plugin-instance-id
}

三条硬约束:

  1. config 按 key 取,不给整块 —— 整块给等于把其他插件的密钥一起递出去。config.get("servers[0].url") 走 JSON Pointer 子集,取不到返明确缺键码,不返空串。
  2. 脱敏在宿主侧做,不给插件自己判断的机会:键名匹配 *token* / *secret* / *key* / *password* 的值一律替换为 "***",并在返回中标注 redacted: true。旧轨 get_config:79 已做过脱敏,直接沿用口径。
  3. workspace 根是绝对路径但不可写 —— 它只是标识,不是权限;能不能写文件由 fs 接口与 filesystem 权限决定,两者不得混为一谈。

验收

  • 正例:夹具插件取 workspace().name 得到仓名;取 config("greeting") 得到配置值。
  • 脱敏:配置里含 api_token = "abc123" ⇒ 插件取到 "***" 且 redacted: true;测试须断言插件拿不到明文。
  • 缺键:取不存在的 key 返明确码,不是空串(空串会让作者以为配置为空而不以为错)。
  • 会话:同一插件在两实例中 session().id 不同,可用于隔离自身状态。
  • 旧 guest 零影响:prompt-conventions 行为逐字节不变。

关联

audit/plugin-capability-2026-11-04/00-CAPABILITY_AUDIT.md §2(get 的真实语义)· 01-CAPABILITY_PROPOSAL.md §6 L1 与 §7.3

likedislike
kemengCollaborators
2 days ago Comments:

[ar审核 2026-11-05] 结论:✅可认领开发。建议:tx优先(建议仅负载均衡,任何人可抢,接单即开分支占位,comm同步防撞)。依赖:无。规范:一issue一分支,PR过L3;改门禁/契约/完成判据语义者ar复核diff。方向:config.get与workspace.info会话上下文,tx认领。

likedislike
kemengCollaborators
2 days ago Comments:

tx 认领 #125(2026-11-06)。

分支:tx/v1113-125-config-workspace-info

范围:只做 xwwasm 侧(bridge.rs 的 seam 白名单 / HostBridge 字段 / 台账),即让插件能查到「自己被装在哪个工作区、配置是什么」,不碰 xwkernel 宿主侧改写。宿主侧接线若需改动,另起。

likedislike