检查支持
在尝试使用终端方法之前,代理必须通过在initialize 响应中检查 客户端功能 字段来验证客户端是否支持此功能:
terminal 为 false 或不存在,则代理不得尝试调用任何终端方法。
执行命令
terminal/create 方法在新终端中启动命令:
要执行的命令
命令参数数组
命令的环境变量。每个变量包含:
name:环境变量名称value:环境变量值
命令的工作目录(绝对路径)
要保留的最大输出字节数。一旦超过,早期的输出将被截断以保持在此限制内。当超过限制时,客户端从输出开头截断以保持在此限制内。客户端必须确保在字符边界处截断,以保持有效的字符串输出,即使这意味着保留的输出略小于指定限制。
terminal/wait_for_exit 方法等待命令完成。
当不再需要时,代理必须使用
terminal/release 释放终端。嵌入工具调用
终端可以直接嵌入工具调用中,以向用户提供实时输出:获取输出
terminal/output 方法检索当前终端输出,无需等待命令完成:
到目前为止捕获的终端输出
输出是否因字节限制而被截断
仅在命令已退出时存在。包含:
exitCode:进程退出代码(可能为 null)signal:终止进程的信号(可能为 null)
等待退出
terminal/wait_for_exit 方法在命令完成时返回:
进程退出代码(如果被信号终止则可能为 null)
终止进程的信号(如果正常退出则可能为 null)
终止命令
terminal/kill 方法终止命令而不释放终端:
terminal/output获取最终输出terminal/wait_for_exit获取退出状态
terminal/release。
构建超时
代理可以通过组合终端方法实现命令超时:- 使用
terminal/create创建终端 - 为所需的超时持续时间启动计时器
- 并发等待计时器到期或
terminal/wait_for_exit返回 - 如果计时器先到期:
- 调用
terminal/kill终止命令 - 调用
terminal/output检索任何最终输出 - 将输出包含在对模型的响应中
- 调用
- 完成后调用
terminal/release
释放终端
terminal/release 终止仍在运行的命令并释放所有资源:
terminal/* 方法变为无效。
如果终端已添加到工具调用,客户端应该在释放后继续显示其输出。