Skip to content

fix(claude): 原生危险操作确认有时未同步为飞书选项卡 #1356

Closed

Description

@DeepColds

问题描述

Claude Code 在执行 Bash 时触发原生危险操作确认(例如检测到变量可能为空的 rm -rf)后,终端里已经出现选项:

Dangerous rm operation on possibly-empty variable path: ...

Do you want to proceed?
❯ 1. Yes
  2. No

但飞书话题中有时不会同步弹出可操作的选项卡,用户只能打开 Web Terminal / 本地终端处理,远程会话看起来像是一直卡住。

期望行为

Claude Code 的原生权限/危险操作确认出现时,Botmux 应可靠识别并在飞书中发出对应的确认卡片;用户选择后,将按键安全地回填到仍处于同一提示页、同一 CLI generation 的终端。

实际行为

终端停留在 Do you want to proceed? / Yes / No,飞书侧没有出现选项卡。该现象是间歇性的。

初步定位

当前 Claude 的结构化问答桥主要覆盖 AskUserQuestion hook;现有 AI-free StuckDetector 又明确只识别 Codex 的两级 hook-review 页面,通用 [Y/n] / permission / press-to-continue 类提示暂未覆盖。因此截图中的 Claude Bash 危险操作确认可能落在现有检测范围之外。

相关代码:

  • src/adapters/cli/claude-code.ts:asksViaHook: true,负责 Claude AskUserQuestion 路径
  • src/utils/stuck-detector.ts:目前只匹配 Codex hook-review,并明确排除 generic permission prompt
  • src/worker.ts:TUI prompt blocking / 按键投递与 generation guard

建议验收项

  1. 覆盖 Claude Bash 危险操作确认的 Yes / No 页面。
  2. 兼容 ANSI、窄视口、内容换行和不同选中项。
  3. 严格锚定当前 viewport/footer,避免把历史 transcript 或用户粘贴文本误判为活动提示。
  4. 点击卡片前重新抓取屏幕,校验 CLI generation 与页面类型;页面已变化时拒绝注入按键。
  5. 覆盖 PTY、tmux/ZMX 以及会话恢复场景。
  6. 增加真实终端快照 fixture 和回归测试。

环境

  • 在 master 最新提交 43f228a068d2c71d49d0b3770958e78046966c0b 上核对现有实现。
  • 原始截图包含内部路径,未附到公开 Issue;上述文本保留了可复现的关键 UI 特征。

Activity

  1. deepcoldy commented on Oct 25, 2026

    @deepcoldy
    Owner

    已由维护者核对:#1656(PermissionRequest 桥接为允许/拒绝卡片)和 #1679(Claude Code 权限确认框通知飞书话题)已覆盖;两者共存的去重在 #1686 跟进

    先关闭这个 issue。如果在最新版本上仍能复现,欢迎随时 reopen 或补充复现步骤。

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