SuperAPI AI 工具集

terminal-expert

编程与开发

查看项目

更新于 10-16 04:18

技能介绍

用途

Terminal Expert 是一个面向 VS Code 扩展开发的终端实现技能,为在 VS Code 扩展中实现终端功能提供统一的专家级指导。它把 xterm.js 的实现细节与 VS Code 的终端架构模式整合在一起,确保实现与官方 VS Code 终端保持一致。

主要能力

技能覆盖以下方面:

  • 创建和配置 xterm.js Terminal 实例
  • 实现终端插件(fit、webgl、serialize、search 等)
  • 与 VS Code WebView 集成
  • 实现 PTY(伪终端)进程管理
  • 创建终端会话持久化与恢复
  • 处理键盘输入、IME 组合输入和鼠标事件
  • 使用 OSC 633 序列实现 shell 集成
  • 优化终端性能(GPU 加速、缓冲)
  • 管理终端生命周期与资源清理

常用插件

技能列出了常用插件及其包名、用途与加载方式:

  • FitAddon(@xterm/addon-fit):自动调整大小以适应容器,始终加载
  • WebglAddon(@xterm/addon-webgl):GPU 加速(性能提升 30%+),延迟加载
  • SerializeAddon(@xterm/addon-serialize):会话持久化,延迟加载
  • SearchAddon(@xterm/addon-search):在终端中查找,延迟加载
  • Unicode11Addon(@xterm/addon-unicode11):扩展 Unicode,按配置加载
  • WebLinksAddon(@xterm/addon-web-links):可点击 URL,按配置加载
  • ImageAddon(@xterm/addon-image):内联图片,按配置加载

性能目标

技能给出以下性能目标参考:

  • 终端创建:<500ms(含 PTY 启动)
  • 会话恢复:<3s(1000 行回滚缓冲)
  • 终端销毁:<100ms(完整清理)
  • 调整大小处理:100ms 防抖(避免过多调用)
  • 输出缓冲:16ms 刷新(约 60fps 渲染)

使用方式

技能以代码示例形式展示实现模式,主要包括:

  • 基础终端设置:通过 TerminalManager 类创建 Terminal,配置字体、字号、行高、光标样式、回滚行数、主题等,加载 FitAddon 并用 ResizeObserver 处理容器尺寸变化。
  • WebGL 渲染与回退:通过 RenderingManager 启用 WebglAddon,监听上下文丢失事件并回退到 canvas。
  • 会话持久化:通过 SerializeAddon 的 serialize 保存回滚内容,再用 terminal.write 恢复。
  • 高频输出缓冲:OutputBuffer 类累积输出,按刷新间隔写入终端,在高频输出时缩短刷新间隔。
  • PTY 集成:使用 node-pty 的 pty.spawn 启动 shell,处理 onData、onExit,提供 write、resize、shutdown 方法。
  • 流控:FlowControlledProcess 通过高水位(100000)与低水位(5000)标记暂停/恢复 PTY,防止性能问题。
  • 输入处理:attachCustomKeyEventHandler 处理复制、粘贴、自定义快捷键;IMEHandler 处理 CJK 组合输入。
  • Shell 集成:通过 terminal.parser.registerOscHandler(633, ...) 处理 OSC 633 的 A/B/C/D 等序列。
  • 生命周期管理:DisposableStore 模式按 LIFO 顺序释放资源。
  • VS Code WebView 集成:通过 acquireVsCodeApi 与扩展通信,读取 VS Code 主题变量,处理 input/output/resize/clear/focus 消息。

技能还提供 ANSI 转义序列速查,包括光标移动、擦除、文本格式、颜色(含 256 色与真彩色)、屏幕模式等。

适用场景

  • 在 VS Code 扩展中创建和配置终端面板
  • 实现终端会话的持久化与恢复
  • 处理高吞吐输出(如 AI 代理场景)
  • 集成 shell 集成功能(OSC 633)
  • 优化终端渲染性能(GPU 加速、缓冲、流控)
  • 处理键盘、IME 与鼠标输入

限制

资料未提供该技能的安装方式、收费模式、平台支持范围或具体使用步骤,这些信息暂未提供。技能内容以代码示例和参考文档为主,实际实现需结合 VS Code 与 xterm.js 的官方文档。