fix(sdk): read_file pagination skipping lines after wrapping - #3641
Merged
Conversation
Co-authored-by: farrimoh <farri.mohajerani@gmail.com>
Mason Daugherty (mdrxy)
added a commit
that referenced
this pull request
May 28, 2026
> [!CAUTION] > Merging this PR will automatically publish to **PyPI** and create a **GitHub release**. For the full release process, see [`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md). --- _Everything below this line will be the GitHub release body._ --- ## [0.6.5](deepagents==0.6.4...deepagents==0.6.5) (2026-05-28) ### Features * `RubricMiddleware` for self-evaluated agent iteration ([#3529](#3529)) ([5b8d44d](5b8d44d)) * Log when grep falls back from ripgrep ([#3593](#3593)) ([379b1ff](379b1ff)) ### Bug Fixes * Use `file_path` kwarg in `read_file` examples ([#3630](#3630)) ([97946ee](97946ee)) * `read_file` pagination skipping lines after wrapping ([#3641](#3641)) ([390551d](390551d)) * Handle `None` state in messages delta reducer ([#3636](#3636)) ([5a6d920](5a6d920)) * Return grep errors for sandbox exec failures ([#3637](#3637)) ([f87d61f](f87d61f)) --- _Everything above this line will be the GitHub release body._ --- > [!NOTE] > A **New Contributors** section is appended to the GitHub release notes automatically at publish time (see [Release Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline), step 2). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Mason Daugherty <github@mdrxy.com>
Marcelo5444
pushed a commit
to Marcelo5444/deepagents
that referenced
this pull request
Jul 30, 2026
…hain-ai#3641) Closes langchain-ai#2453 --- `read_file` applies row-based truncation twice: once when the backend slices raw lines by `offset`/`limit`, then again after `format_content_with_line_numbers` wraps long lines into continuation rows. When a wrapped line inflates the row count past `limit`, real source lines fall off the page — and the next page resumes from `offset + limit`, skipping them entirely. `_truncate` now takes the row-based limit as optional. The new-style `ReadResult` path (the backend has already paginated by source lines) drops the row chop and keeps only the byte-budget cap. The legacy `str` backend path keeps the row-based behavior, since those backends still format with line numbers inline. `limit` now bounds *source* lines, not formatted rows — a wrapped 15k-char line with `limit=3` renders all of its continuation chunks alongside the surrounding source lines instead of silently dropping the tail. The `read_file` tool description is updated to match. Carries forward the fix originally proposed in langchain-ai#2452 by @farrimoh; that PR was closed and could not be reopened, so the patch was rewritten against current `main` with farrimoh credited as a co-author on the commit. --------- Co-authored-by: farrimoh <farri.mohajerani@gmail.com>
Marcelo5444
pushed a commit
to Marcelo5444/deepagents
that referenced
this pull request
Jul 30, 2026
> [!CAUTION] > Merging this PR will automatically publish to **PyPI** and create a **GitHub release**. For the full release process, see [`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md). --- _Everything below this line will be the GitHub release body._ --- ## [0.6.5](langchain-ai/deepagents@deepagents==0.6.4...deepagents==0.6.5) (2026-05-28) ### Features * `RubricMiddleware` for self-evaluated agent iteration ([langchain-ai#3529](langchain-ai#3529)) ([5b8d44d](langchain-ai@5b8d44d)) * Log when grep falls back from ripgrep ([langchain-ai#3593](langchain-ai#3593)) ([379b1ff](langchain-ai@379b1ff)) ### Bug Fixes * Use `file_path` kwarg in `read_file` examples ([langchain-ai#3630](langchain-ai#3630)) ([97946ee](langchain-ai@97946ee)) * `read_file` pagination skipping lines after wrapping ([langchain-ai#3641](langchain-ai#3641)) ([390551d](langchain-ai@390551d)) * Handle `None` state in messages delta reducer ([langchain-ai#3636](langchain-ai#3636)) ([5a6d920](langchain-ai@5a6d920)) * Return grep errors for sandbox exec failures ([langchain-ai#3637](langchain-ai#3637)) ([f87d61f](langchain-ai@f87d61f)) --- _Everything above this line will be the GitHub release body._ --- > [!NOTE] > A **New Contributors** section is appended to the GitHub release notes automatically at publish time (see [Release Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline), step 2). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Mason Daugherty <github@mdrxy.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #2453
read_fileapplies row-based truncation twice: once when the backend slices raw lines byoffset/limit, then again afterformat_content_with_line_numberswraps long lines into continuation rows. When a wrapped line inflates the row count pastlimit, real source lines fall off the page — and the next page resumes fromoffset + limit, skipping them entirely._truncatenow takes the row-based limit as optional. The new-styleReadResultpath (the backend has already paginated by source lines) drops the row chop and keeps only the byte-budget cap. The legacystrbackend path keeps the row-based behavior, since those backends still format with line numbers inline.limitnow bounds source lines, not formatted rows — a wrapped 15k-char line withlimit=3renders all of its continuation chunks alongside the surrounding source lines instead of silently dropping the tail. Theread_filetool description is updated to match.Carries forward the fix originally proposed in #2452 by Farri Mohajerani (@farrimoh); that PR was closed and could not be reopened, so the patch was rewritten against current
mainwith farrimoh credited as a co-author on the commit.