跳转到内容

输入关键词开始搜索文档。

exe.dev

最后更新 查看 Markdown 源文件

exe.dev 适配器将通过 SSH/SFTP 可达的远程虚拟机适配为 Flue 的沙箱接口。当智能体需要在独立于应用主机的 Linux 环境中运行 shell 命令和管理工作区文件时,可以使用它。

快速开始

使用 exe.dev 蓝图为现有 Flue 项目添加远程虚拟机沙箱能力。在终端或你选择的编码智能体中运行以下命令:

flue add sandbox exedev

概述

蓝图会在需要时安装 ssh2,并在你的源码根目录下创建 sandboxes/exedev.ts。该文件适配一个可通过 SSH 访问的 exe.dev 虚拟机;它不会创建、保留或删除虚拟机资源。

<source-root>/sandboxes/exedev.ts (abridged)
// 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 密钥和提供商令牌视为服务端密钥。决定智能体实例是共享还是分配虚拟机,并根据你的保留策略清理应用自有的虚拟机。

参见在 Node.js 上部署、沙箱和沙箱适配器 API。