终端
内置持久 shell 面板与智能体 exec 工具的边界。
Bi 里有两种「跑命令」的入口,容易混淆,先把它们分清楚:
| 入口 | 谁在用 | 输出去哪 |
|---|---|---|
| 终端面板 | 你(人) | 屏幕上的终端窗口,不进入模型上下文 |
exec 工具 |
智能体(模型) | 作为工具结果回到模型上下文 |
终端面板
界面里的「终端」是一个有状态的 shell 进程,通过 WebSocket 与前端连接,登录后可用。它专供你手动操作:
- 每个终端会话一条独立连接,后端为它起一个持久 shell 进程
- 工作目录取自当前会话的
project_path;未设置会话时回退到全局工作区 - 逐行流式输出;非 UTF-8 的 GBK 输出会被转成 UTF-8,中文不乱码
- 支持发送输入、调整行列(仅记录,用于前端排版)与发送中断信号
- 未登录时不启用 WebSocket 终端,退回
workspace exec的伪终端路径
它的输出只显示给你,不会自动喂给模型。
exec 工具
智能体执行的命令走 exec 工具(tools/exec.go)。它与终端面板完全独立:
- 每次调用起一个一次性进程,在工作区根目录下执行
- 返回
exit_code、output、error,作为工具结果进入模型上下文 - 默认超时 5 分钟,单流输出上限 64KB,超限丢弃但记录截断
- 受工具权限系统管控:未配置放行时每次都要你确认
- 命令会经过拦截规则过滤
所以「命令输出进入上下文」这句只对 exec 工具成立。想要模型看到一条命令的输出,应该让它用 exec 工具跑,而不是你在终端面板里跑完再把结果贴回去。
网络命令的注意点
exec 与 websearch 类插件可以访问网络(curl、pip install、git clone、ssh 等)。这是功能的一部分,不是缺陷,但意味着:
- 用本地模型也不等于「绝不联网」——命令本身可以发起网络请求
- 权限确认是唯一的人为闸门,请留意要批准的
exec调用 network_log_enabled开启时,命令全文会落盘到.bi/logs/network/(默认关闭)