• Will Chen's avatar
    feat: add optional line range params to read_file tool (#2516) · 70a02101
    Will Chen 提交于
    ## Summary
    - Add `start_line_one_indexed` and `end_line_one_indexed_inclusive`
    optional parameters to the `read_file` agent tool, allowing the agent to
    read specific line ranges from files
    - Update consent preview to display line range (e.g., "Read src/App.tsx
    (lines 10-50)") and XML builder to include `start_line`/`end_line`
    attributes
    - Add comprehensive unit tests (36 tests) with minimal mocking, using
    real temp files on disk
    
    ## Test plan
    - [x] All 36 new unit tests pass covering: schema validation, full file
    reads, start-only, end-only, both params, edge cases (out-of-bounds
    clamping, start > end, empty files, single-line files), consent preview,
    and XML builder
    - [x] All 747 existing tests pass (no regressions)
    - [x] Lint, formatting, and type checks pass
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    <!-- devin-review-badge-begin -->
    
    ---
    
    <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2516"
    target="_blank">
      <picture>
    <source media="(prefers-color-scheme: dark)"
    srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
    <img
    src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
    alt="Open with Devin">
      </picture>
    </a>
    <!-- devin-review-badge-end -->
    
    <!-- This is an auto-generated description by cubic. -->
    ---
    ## Summary by cubic
    Adds optional line range parameters to the read_file tool so the agent
    can read specific lines and reflect the range in consent preview and
    XML. Improves safety with clamping, schema validation, and clear errors,
    backed by comprehensive tests.
    
    - **New Features**
    - Support start_line_one_indexed and end_line_one_indexed_inclusive to
    read a specific line range.
    - Consent preview shows ranges; XML builder adds start_line/end_line
    attributes.
    
    - **Bug Fixes**
    - Escape start_line/end_line in XML and update parser to accept
    dyad-read tags with attributes.
    - Validate start <= end and fix trailing newline handling to match
    full-file reads.
    
    <sup>Written for commit 4c96f70ff20ba37bee46955b739a693acd0afc0c.
    Summary will update on new commits.</sup>
    
    <!-- End of auto-generated description by cubic. -->
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Expands an agent file-access primitive and changes how `<dyad-read>`
    tags are parsed, which could affect context gathering and partial reads;
    behavior is well-covered by new unit tests but still touches
    security-adjacent tooling.
    > 
    > **Overview**
    > Adds optional `start_line_one_indexed` /
    `end_line_one_indexed_inclusive` parameters to the local agent
    `read_file` tool so it can return a specific line range (with bounds
    clamping and trailing-newline preservation).
    > 
    > Updates consent previews and `<dyad-read>` XML generation to
    surface/encode the requested range, and loosens
    `parseFilesFromMessage`’s `<dyad-read>` regex to tolerate extra
    attributes. Includes a comprehensive new `read_file` unit test suite
    covering schema validation, range behavior, and XML/preview formatting.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    4c96f70ff20ba37bee46955b739a693acd0afc0c. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    Co-authored-by: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
    70a02101
名称
最后提交
最后更新
.claude 正在载入提交数据...
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
.storybook 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
makers 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.oxfmtrc.json 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
AGENTS.md 正在载入提交数据...
CLA.md 正在载入提交数据...
CLAUDE.md 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
lint-staged.config.js 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...
windowsSign.ts 正在载入提交数据...