Files
deepagentsjs/libs/providers/node-vfs
github-actions[bot] bed2d344bc chore: version packages (#712)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## deepagents@1.12.0

### Minor Changes

- [#703](https://github.com/langchain-ai/deepagentsjs/pull/703)
[`d25097f`](https://github.com/langchain-ai/deepagentsjs/commit/d25097f78d0e66741da34e1d74551f3c19991126)
Thanks [@hntrl](https://github.com/hntrl)! - feat(deepagents): adopt
more minimal prompting

We've observed that current models don't need as verbose of prompting
guidance, so we're reducing the amount of perscriptive guidance that
deepagents has. This is reflected in the generic system prompt (which is
now blank), and in the tool descriptions (which have been simplified).

- [#708](https://github.com/langchain-ai/deepagentsjs/pull/708)
[`1225a7f`](https://github.com/langchain-ai/deepagentsjs/commit/1225a7ff8673686c2a3c0411636a9511b7d8d0d0)
Thanks [@hntrl](https://github.com/hntrl)! - feat(deepagents): make todo
middleware opt-in

- [#674](https://github.com/langchain-ai/deepagentsjs/pull/674)
[`dd142fe`](https://github.com/langchain-ai/deepagentsjs/commit/dd142fe4fc54c986d5bcf51211d9a839a427e931)
Thanks [@hntrl](https://github.com/hntrl)! - feat(filesystem): allow
`write_file` to create missing files or completely replace existing
files
## deepagents-acp@0.1.21

### Patch Changes

- Updated dependencies
[[`d25097f`](https://github.com/langchain-ai/deepagentsjs/commit/d25097f78d0e66741da34e1d74551f3c19991126),
[`1225a7f`](https://github.com/langchain-ai/deepagentsjs/commit/1225a7ff8673686c2a3c0411636a9511b7d8d0d0),
[`dd142fe`](https://github.com/langchain-ai/deepagentsjs/commit/dd142fe4fc54c986d5bcf51211d9a839a427e931)]:
  - deepagents@1.12.0
## @langchain/node-vfs@1.0.0

### Patch Changes

- [#674](https://github.com/langchain-ai/deepagentsjs/pull/674)
[`dd142fe`](https://github.com/langchain-ai/deepagentsjs/commit/dd142fe4fc54c986d5bcf51211d9a839a427e931)
Thanks [@hntrl](https://github.com/hntrl)! - fix: allow
`VfsBackend.write` to overwrite existing files while continuing to
reject symlinks
## @langchain/daytona@1.0.0


## @langchain/deno@1.0.0


## @langchain/modal@1.0.0


## @langchain/quickjs@1.0.0


## @langchain/sandbox-standard-tests@2.0.0


## @deepagents/evals@0.0.20

### Patch Changes

- Updated dependencies
[[`d25097f`](https://github.com/langchain-ai/deepagentsjs/commit/d25097f78d0e66741da34e1d74551f3c19991126),
[`1225a7f`](https://github.com/langchain-ai/deepagentsjs/commit/1225a7ff8673686c2a3c0411636a9511b7d8d0d0),
[`dd142fe`](https://github.com/langchain-ai/deepagentsjs/commit/dd142fe4fc54c986d5bcf51211d9a839a427e931)]:
  - deepagents@1.12.0

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-29 09:47:28 -07:00
..
2026-02-04 21:35:46 -08:00
2026-07-29 09:47:28 -07:00
2026-07-29 09:47:28 -07:00
2026-02-04 21:35:46 -08:00
2026-02-04 21:35:46 -08:00

@langchain/node-vfs

Node.js Virtual File System backend for DeepAgents.

This package provides an in-memory VFS implementation that enables agents to work with files in an isolated environment without touching the real filesystem. It uses node-vfs-polyfill which implements the upcoming Node.js VFS feature (nodejs/node#61478).

Installation

npm install @langchain/node-vfs deepagents
# or
pnpm add @langchain/node-vfs deepagents

Quick Start

import { VfsBackend } from "@langchain/node-vfs";
import { createDeepAgent } from "deepagents";
import { ChatAnthropic } from "@langchain/anthropic";

// Create and initialize a VFS backend
const backend = await VfsBackend.create({
  initialFiles: {
    "/src/index.js": "console.log('Hello from VFS!')",
  },
});

try {
  const agent = createDeepAgent({
    model: new ChatAnthropic({ model: "claude-sonnet-4-20250514" }),
    systemPrompt: "You are a coding assistant with VFS access.",
    backend,
  });

  const result = await agent.invoke({
    messages: [{ role: "user", content: "Run the index.js file" }],
  });
} finally {
  await backend.stop();
}

Features

  • In-Memory File Storage - Files are stored in a virtual file system using node-vfs-polyfill
  • Zero Setup - No Docker, cloud services, or external dependencies required
  • Native File Tools - read, ls, grep, and glob run directly against VFS data
  • Automatic Cleanup - All resources are cleaned up when the backend stops
  • Initial Files - Pre-populate the backend with files at creation time
  • Path Confinement - File operations are constrained to the virtual workspace root

API Reference

VfsBackend (BackendProtocolV2)

The main class for creating and managing the in-memory VFS backend.

Static Methods

VfsBackend.create(options?)

Create and initialize a new VFS backend in one step.

const backend = await VfsBackend.create({
  mountPath: "/vfs", // Mount path for the VFS (default: "/vfs")
  initialFiles: {
    // Initial files to populate
    "/README.md": "# Hello",
    "/src/index.js": "console.log('Hello')",
  },
});

Instance Methods

backend.uploadFiles(files)

Upload files to the backend.

const encoder = new TextEncoder();
await backend.uploadFiles([
  ["src/app.js", encoder.encode("console.log('Hi')")],
  ["package.json", encoder.encode('{"name": "test"}')],
]);
backend.downloadFiles(paths)

Download files from the backend.

const results = await backend.downloadFiles(["src/app.js"]);
for (const result of results) {
  if (result.content) {
    console.log(new TextDecoder().decode(result.content));
  }
}
backend.stop()

Stop the backend and clean up resources.

await backend.stop();

Factory Functions

createVfsBackendFactory(options?)

Create an async factory that creates new backend instances per invocation.

const factory = createVfsBackendFactory({
  initialFiles: { "/README.md": "# Hello" },
});

const backend = await factory();

createVfsBackendFactoryFromBackend(backend)

Create a factory that reuses an existing backend.

const backend = await VfsBackend.create();
const factory = createVfsBackendFactoryFromBackend(backend);

Configuration Options

Option Type Default Description
mountPath string "/vfs" Mount path for the virtual file system
initialFiles Record<string, string | Uint8Array> undefined Initial files to populate the VFS

Error Handling

The package exports a VfsSandboxError class for typed error handling:

import { VfsSandboxError } from "@langchain/node-vfs";

try {
  const result = await backend.read("/src/index.js");
  if (result.error) {
    throw new Error(result.error);
  }
} catch (error) {
  if (error instanceof VfsSandboxError) {
    switch (error.code) {
      case "NOT_INITIALIZED":
        // Handle uninitialized backend
        break;
      case "FILE_OPERATION_FAILED":
        // Handle file operation failures
        break;
    }
  }
}

Error Codes

  • NOT_INITIALIZED - Backend not initialized
  • ALREADY_INITIALIZED - Backend already initialized
  • INITIALIZATION_FAILED - Failed to initialize VFS
  • FILE_OPERATION_FAILED - File operation failed
  • NOT_SUPPORTED - VFS not supported in environment

How It Works

The VFS backend is fully in-memory:

  1. File Storage - Files are stored in-memory using the VirtualFileSystem from node-vfs-polyfill
  2. File Operations - read, ls, grep, and glob operate directly on VFS paths
  3. Isolation - Paths are confined under the virtual workspace root

This approach keeps filesystem operations isolated and avoids host shell execution from this provider.

Future: Native Node.js VFS

This package uses node-vfs-polyfill which implements the upcoming Node.js VFS feature being developed in nodejs/node#61478.

When the official node:vfs module lands in Node.js, this package will be updated to use the native implementation for better performance and compatibility.

License

MIT