mcpField
U
ui-context

ui-context

github.com/allthingsida开发4947 次安装3 周前更新
代码仓库

关于 ui-context

ui-context 是用于捕获和解读 IDA 当前界面状态的 idasql 技能,指导 Agent 说明视图、选区和代码锚点,并避免臆造缺失信息。

主要功能

  1. 01捕获当前界面状态
  2. 02识别视图类型与标题
  3. 03报告选区及预览内容
  4. 04提取代码地址锚点
  5. 05处理界面状态不可用的运行环境

适用场景

  1. 01说明 IDA 当前显示的内容
  2. 02描述当前选区
  3. 03从活动视图定位并解释函数

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/allthingsida/idasql-skills --skill ui-context

安装后在 Claude Code 中输入/ui-context确认已加载。

附带文件agents/openai.yaml

详细介绍


主要查询

使用此函数捕获当前 UI 状态:

SELECT get_ui_context_json();

每个用户问题捕获一次,然后在回答时重复使用该快照。 只有当用户要求刷新/重新检查,或开始提出新的 UI 相关问题时,才再次捕获。


触发模式

对于以下类型的提示,请使用此技能:

  • “我现在看到的是什么?”
  • “屏幕上有什么?”
  • “选中了什么?”
  • “看看我在做什么”
  • 提及“这个”“这里”“当前”“选中”“那个”“之前”等内容

捕获策略

  1. 回答 UI 相关提示前,调用 get_ui_context_json()。
  2. 提取视图信息:控件类型/标题及自定义视图状态。
  3. 存在选区时,提取选区信息:起始/结束位置及预览文本行。
  4. 存在代码锚点时,提取代码锚点信息:地址、函数、段。
  5. 如果 has_address: false,请说明限制,不要编造代码上下文。

控件字段(focused_widget / main_viewer)

  • type_id(int):原始 IDA twidget_type_t 数字 ID。
  • type_name(string):构建所用 SDK 中该控件的宏名称(例如 "BWN_PSEUDOCODE"、"BWN_TILIST")。SDK 槽位 10 的名称因 IDA 版本而异(BWN_TILVIEW / BWN_TICSR / BWN_TITREE)。
  • canonical_name(string):稳定且跨版本的名称。对于“Local Types”控件(槽位 10),该值始终为 "BWN_LOCAL_TYPES";对于其他控件,该值与 type_name 相同。进行跨版本判断时优先使用此字段。
  • category(string):高级别分组,取值为 disassembly、decompiler、hex_view、type_view、chooser、debugger、navigation、output、script、auxiliary、unknown 之一。
  • is_address(bool):控件是否提供有意义的地址锚点(DISASM、HEXVIEW、PSEUDOCODE、MICROCODE 为 true)。
  • is_custom_view(bool):是否为包含自定义行内容的查看器样式控件。
  • is_chooser_like(bool):是否为基于行的列表/选择器控件,其行选中状态有意义。
  • title(string):IDA 报告的控件标题。

main_viewer 包含相同的控件字段,但不含 is_chooser_like(主查看器始终是查看器,而不是选择器)。


时间引用规则

  • this / here / current / selected:针对当前问题捕获新快照。
  • that / previous / earlier:在同一工作流程中重复使用最近的快照。
  • 如果用户说“refresh”,立即捕获新快照。

运行时可用性与回退

  • 每种运行时都会注册 get_ui_context_json(),但只有 IDA GUI 插件会返回实时 UI 状态。
  • 实时 GUI 封装中包含 available:true;idalib/CLI 存根中包含 available:false / capture.source:"cli"(不是错误,只是没有 UI)。因此,在这两种情况下,available 都是可靠的 GUI 与 CLI 判别依据——应以此字段为准。
  • 收到 CLI 存根时,请明确说明这一点,并继续处理非 UI 查询(明确的地址/符号,或数据库方向的查询)。

binary 仅包含数据库元数据,不能替代 UI 上下文。


回复模板

读取 UI 上下文后,请使用以下固定格式:

  • What You Are Viewing:控件/视图概述。
  • What Is Selected:选区范围和预览(或“没有活动选区”)。
  • Code Context:可用时提供地址/函数/段;否则说明这是非地址视图。
  • Limits:影响判断可信度的运行时限制或缺失字段。
  • Suggested Next Query:一条具体的后续命令/查询。

示例

1)“我现在看到的是什么?”
SELECT get_ui_context_json();

使用上述模板字段回答。包含焦点控件的标题/类型,以及当前锚点地址(如有)。

2)“看看我在做什么”
SELECT get_ui_context_json();

先概述当前视图和选区,再提出与该上下文相关的下一步操作(例如,反编译当前函数)。

3)“现在选中了什么?”
SELECT get_ui_context_json();

优先提供选区起始/结束位置和预览文本。明确说明当前没有活动选区的情况。

4) “解释此函数”
  1. 捕获 UI 上下文。
  2. 如果存在函数/地址上下文,则切换到反编译器。
SELECT get_ui_context_json();
SELECT decompile(0x401000);

将 0x401000 替换为捕获的函数/地址锚点。

5) 后续提问:“那个函数怎么样?”

复用同一流程中最近一次的快照(除非用户要求,否则不要自动刷新),然后从存储的锚点继续分析。

6) 非地址视图(例如 Local Types 选择器)
SELECT get_ui_context_json();

如果 has_address: false,则报告选择器的选择详情,并说明此视图中没有代码地址锚点。

7) 插件 API 不可用(CLI/idalib)

如果无法运行 get_ui_context_json():

  • 说明此运行时无法获取 UI 上下文
  • 请用户提供明确的符号/地址,或使用非 UI 替代方案继续(例如使用 SELECT * FROM binary 了解数据库概况)

防护规则

  • 不要将 binary 输出视为 UI 上下文。
  • 缺少选择/地址字段时,不要编造这些字段。
  • 除非用户要求刷新,否则同一回答中不要重复捕获。

评论

支持 Markdown