Skip to content

bug: AskUserQuestion 在飞书端未正确渲染为交互式表单 #278

@xuanxuan321

Description

@xuanxuan321

问题描述

在飞书桥接中,AskUserQuestion 工具的渲染方式与 PC 端不一致。飞书端将其当作普通的权限请求卡片处理,直接展示原始 JSON 和 Allow/Allow Session/Deny 按钮,而非解析 question 结构并渲染为交互式表单。

Image

复现步骤

  1. 通过飞书与 CodePilot 对话
  2. 触发 Claude 调用 AskUserQuestion 工具(例如询问用户选择城市)
  3. 观察飞书中的卡片渲染

实际表现(飞书端)

显示为通用的 Permission Required 卡片:

  • 标题为 "Permission Required"
  • 内容为 AskUserQuestion 的原始 JSON 参数(questionsheaderoptions 等)
  • 底部按钮为 Allow / Allow Session / Deny

期望表现(PC 端)

应解析 AskUserQuestion 的结构化参数,渲染为交互式表单:

  • 显示 header(如"城市选择"标签)
  • 显示 question 文本(如"你想查询哪个城市的天气?")
  • options 渲染为可选按钮(如 北京 / 上海 / Other)
  • 底部为 Submit 按钮
Image

根因分析

permission-broker.tsforwardPermissionRequest() 对所有工具统一格式化为 HTML 权限卡片,未对 AskUserQuestion 做特殊处理。outbound.ts 中构建飞书交互卡片时也只处理了通用的权限按钮逻辑,没有识别并解析 AskUserQuestion 的 question/options 结构。

建议修复方向:
在权限请求转发流程中,检测 toolName === 'AskUserQuestion',解析其 questions 参数,为飞书构建专用的交互卡片(使用飞书卡片的 button 组件渲染选项,使用 markdown 渲染问题文本)。

环境

  • CodePilot 版本:v0.36.0
  • 平台:飞书桥接

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