exe.dev
最后更新 查看 Markdown 源文件
exe.dev 适配器将通过 SSH/SFTP 可达的远程虚拟机适配为 Flue 的沙箱接口。当智能体需要在独立于应用主机的 Linux 环境中运行 shell 命令和管理工作区文件时,可以使用它。
快速开始
使用 exe.dev 蓝图为现有 Flue 项目添加远程虚拟机沙箱能力。在终端或你选择的编码智能体中运行以下命令:
flue add sandbox exedev
概述
蓝图会在需要时安装 ssh2,并在你的源码根目录下创建 sandboxes/exedev.ts。该文件适配一个可通过 SSH 访问的 exe.dev 虚拟机;它不会创建、保留或删除虚拟机资源。
// flue-blueprint: sandbox/exedev@1
import { sandboxFromDriver } from '@flue/runtime';
import type { SandboxDriver, SandboxFactory, Sandbox, FileStat } from '@flue/runtime';
import type { Client } from 'ssh2';
/* ... 生成的 SSH 连接和文件操作辅助工具 ... */
/* ... 生成的 SSH 认证、重试、连接和流接口 ... */
export class ExeDevSandboxDriver implements SandboxDriver {
/* ... 生成的 SFTP 连接和文件操作 ... */
async exec(
command: string,
options?: {
cwd?: string;
env?: Record<string, string>;
timeoutMs?: number;
signal?: AbortSignal;
},
): Promise<{ stdout: string; stderr: string; exitCode: number }> {
/* ... 从 env、cwd 和 command 生成 SSH 命令 ... */
/* ... 收集两个输出流,并在 timeoutMs 后关闭流 ... */
/* ... 当超时关闭流时返回退出码 124 ... */
}
}
export function exedev(vm: ExeDevVm | string, options?: ExeDevAdapterOptions): SandboxFactory {
const resolvedVm = typeof vm === 'string' ? { host: vm } : vm;
return {
async createSandbox(): Promise<Sandbox> {
const { ssh } = await sshConnect(resolvedVm, options ?? {});
const driver = new ExeDevSandboxDriver(ssh);
let sandboxCwd = '/home/user';
try {
const { stdout } = await driver.exec('echo $HOME');
const detected = stdout.trim();
if (detected) sandboxCwd = detected;
} catch {
/* ... 当主目录检测失败时保留 /home/user ... */
}
return sandboxFromDriver(driver, sandboxCwd);
},
};
}将 SSH 可达的虚拟机主机名或 ExeDevVm 传递给 exedev(...),并将返回的工厂分配给智能体的 sandbox 属性。Flue 在可用时使用检测到的远程主目录;timeoutMs 以毫秒为单位,在超时时关闭 SSH 命令流,返回退出码 124。文件删除直接使用 SFTP,因此递归和 force 选项会在操作前被拒绝,而不是通过临时 shell 命令模拟。
配置
| 变量 | 用途 |
|---|---|
EXE_VM_HOST | 必需 — 标识用于接线沙箱适配器的 exe.dev 虚拟机。 |
EXE_SSH_KEY | 可选 — 指向私钥 SSH 密钥文件。 |
SSH_AUTH_SOCK | 可选 — 通过 SSH 代理进行认证,而非使用 EXE_SSH_KEY。 |
EXE_API_TOKEN | 生命周期示例必需 — 认证管理 exe.dev 虚拟机生命周期的辅助工具。 |
| 覀求 | 用途 |
|---|---|
| Node.js 目标 | 必需 — 提供适配器和 SSH 客户端使用的 Node API。 |
ssh2 包 | 必需 — 提供 SSH 命令执行和 SFTP 文件访问。 |
| 已有的 SSH 可达 exe.dev 虚拟机 | 必需 — 提供远程沙箱资源。 |
| SSH 配置 | 必需 — 认证对虚拟机的访问。 |
适用场景
当 Node 托管的 Flue 应用需要在通过 SSH/SFTP 访问的虚拟机内部运行时,使用 exe.dev。适配器蓝图包含可选的生命周期辅助工具,但沙箱适配器本身围绕你的应用自有的虚拟机设计。
将 SSH 密钥和提供商令牌视为服务端密钥。决定智能体实例是共享还是分配虚拟机,并根据你的保留策略清理应用自有的虚拟机。