SIGN IN SIGN UP

feat: add langchain-mongodb-deepagents-vfs package (#415)

## Summary

JIRA issue:
[INTPYTHON-1028](https://jira.mongodb.org/browse/INTPYTHON-1028)

Adds a new library, **`langchain-mongodb-deepagents-vfs`**: a MongoDB
Atlas-backed
virtual filesystem search adapter for [LangChain
DeepAgents](https://github.com/langchain-ai/deepagents).

It implements DeepAgents' `BackendProtocol` and splits work by
operation:

- **Search operations** (`grep`, `glob`, `ls`) are routed through
MongoDB Atlas —
  vector search, full-text search, and hybrid `$rankFusion`.
- **File operations** (`read`, `write`, `edit`, `upload_files`,
`download_files`)
  are forwarded directly to S3.

A change-detection sync layer (initial sync + a polling/SQS watcher)
keeps the
Atlas search index in step with the S3 bucket.

## What's included

- `langchain_mongodb_deepagents_vfs/` — backend, S3 adapter, search
router,
  chunker, embedder, index manager, sync + watchers (polling / SQS).
- Unit / integration / e2e test suites (unit + integration run without
real
  credentials via `mongomock` + `moto`).
- `pyproject.toml`, `justfile`, `README.md`, `CHANGELOG.md` following
the
  existing per-lib conventions.
- Registered in `.github/scripts/check_diff.py` `LIB_DIRS` and the root
  `pyproject.toml` `[tool.uv.sources]`.

## Local verification

Run from `libs/langchain-mongodb-deepagents-vfs`:

| Check | Result |
|---|---|
| `ruff check` | ✅ pass |
| `ruff format --check` | ✅ pass |
| `mypy --strict` | ✅ pass (16 source files) |
| Unit tests | ✅ 99 passed |
| `uv lock --check` | ✅ in sync |
| Wheel build + `twine check` | ✅ pass (`test_distribution.py`) |

## ⚠️ Needs a maintainer decision: Python 3.10 CI matrix

This package depends on `deepagents`, which requires `>=3.11,<4.0`. Its
`requires-python` is therefore `>=3.11` and it **cannot** support Python
3.10
like the other three libs.

The shared CI matrix in `.github/workflows/_test.yml` and `_lint.yml` is
hardcoded to `["3.10", "3.13"]` for **every** lib, so the 3.10 job will
fail
this package at the install step (before any test runs):

```
$ uv sync --frozen --python 3.10
error: The requested interpreter resolved to Python 3.10.20, which is
incompatible with the project's Python requirement: `>=3.11`
# exit code 2
```

(The 3.13 job installs and passes cleanly.)

I did **not** touch the shared workflow files, since the fix is a
repo-wide
policy call. Two options:

1. **Per-library Python matrix** — test this lib on 3.11+ only, leave
the others
   on 3.10 + 3.13.
2. **Drop 3.10 repo-wide** — bump the minimum to 3.11 everywhere
(breaking for
   the other libs' 3.10 users).

Happy to implement whichever you prefer.

## Notes / smaller items

- E2E MongoDB command-log fixture now writes to pytest's session tmp dir
instead
of the CWD, so the "tests did not create any additional files" CI gate
stays
  green; added `mongo-e2e-*.log` to `.gitignore` as a backstop.
- `CHANGELOG.md` uses a simplified heading style vs. the sibling
`## Changes in version X (date)` convention — happy to align if
preferred.
- No `py.typed` yet (matches `langgraph-store-mongodb`); can add if you
want type
  info shipped to consumers.

---------

Signed-off-by: Casey Clements <casey.clements@mongodb.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Casey Clements <casey.clements@mongodb.com>
A
Anuj Panchal committed
0b908053afe18a3a237caf4418b41fe241dac4c8
Parent: 52c6ba2
Committed by GitHub <noreply@github.com> on 8/8/2026, 12:19:30 AM