Skip to content

与 oh-my-openagent 同用时出现双输入框:双方都整体重建 session_prompt slot #35

Closed

Description

@xiongyang

环境

  • 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 透传而重建):

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 导航):

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

  1. Hotakus commented on Sep 21, 2026

    @Hotakus
    Owner

    感谢你的分析,我决定使用开关让出,因为使用 host slot(session_prompt_right / home_footer / app_bottom) 不符合底部状态栏 UI 的设计意图。预计在 本插件的 1.7.1 版本上线本次修复。

    我的设计方案是:复用 /cache-section 斜杠命令,因为 V1 貌似无法实时注销,所以使用该命令关闭底部状态栏进行让出后,需要重启一次 opencode 使之生效。

    本次修改针对 opencode V1,V2 貌似天然隔离。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions