## 环境 - opencode 1.18.31(TUI) - opencode-visual-cache 1.7.0(1.6.5 同样存在,非新版本引入) - oh-my-openagent 5.0.0-beta.80(btw-side 功能自 beta.72 起就有该注册) - 平台:Linux ## 现象 visual-cache 与 oh-my-openagent(OMO)同时启用时,TUI 出现**两个输入框**。 ## 根因 两个插件都在 `session_prompt` slot 上**整体重建** `api.ui.Prompt`,而 opencode 的 slot 多注册是**追加渲染**(不是高 order 覆盖),于是渲染出两个 Prompt 实例 → 双输入框。 visual-cache 侧(`dist/tui.js`,为挂 BottomStatusBar 与 right 透传而重建): ```js api.slots.register({ order: 55, slots: { session_prompt(_ctx, input) { return createComponent(api.ui.Prompt, { // ...透传 session_id / visible / disabled / onSubmit / ref hint: createComponent(BottomStatusBar, { api, signals, sessionId: input.session_id }), right: createComponent(api.ui.Slot, { name: "session_prompt_right", session_id: input.session_id }), }) }, }, }) ``` OMO 侧(btw-side,为接管 prompt ref 做 esc-esc 返回 / ctrl+/ picker 导航): ```js api.slots.register({ order: 950, slots: { session_prompt: (_context, value) => api.ui.Prompt({ /* ... */ }), session_prompt_right: (_context, value) => /* BTW 标签 */, }, }) ``` ## 复现 1. `tui.json` 同时包含 `"oh-my-openagent@beta"` 与 `"opencode-visual-cache@latest"`(oc-tps 无关,去掉也一样) 2. 启动 TUI → session 页出现两个输入框 ## 建议 只要还想在 prompt 区域挂内容,"重建 session_prompt" 就和其他任何同样重建该 slot 的插件互斥。可选方向: 1. **不再重建 session_prompt**:BottomStatusBar 改挂 host slot(`session_prompt_right` / `home_footer` / `app_bottom`)。visual-cache 重建时本来就透传了 `session_prompt_right`,说明第三方内容在该 slot 上可以正常共存(我这边的 TPS 插件 oc-tps 就挂在那里工作正常); 2. **提供开关**:如 kv/配置项 `cache_panel.prompt_rebuild = false`,关闭后保留 sidebar 面板,prompt 交给宿主或其他插件。 ## 当前 workaround 我把 OMO 侧 order:950 注册块里的 `session_prompt` 键改名成了无效 slot 名(保留它的 `session_prompt_right`),让 visual-cache 成为唯一重建者。结果:单输入框,hint = cache 状态栏,右侧 = TPS + BTW 标签共存,一切正常。代价是 OMO 的 btw-side prompt 导航失效。 长期看还是希望 visual-cache 能让出 session_prompt,毕竟它的场景(挂状态栏)用 side slot 就能实现,而 OMO 那种接管 prompt ref 的场景只能重建。
Activity
Hotakus commentedon Sep 21, 2026
感谢你的分析,我决定使用开关让出,因为使用
host slot(session_prompt_right / home_footer / app_bottom)不符合底部状态栏 UI 的设计意图。预计在 本插件的1.7.1版本上线本次修复。我的设计方案是:复用
/cache-section斜杠命令,因为 V1 貌似无法实时注销,所以使用该命令关闭底部状态栏进行让出后,需要重启一次 opencode 使之生效。本次修改针对 opencode V1,V2 貌似天然隔离。