anthropics / anthropics/claude-agent-sdk-python

Long project paths can resolve to the wrong session directory

オープン
#1,160 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
8.1k
フォーク
1.3k
PR マージ指標
PR 指標を取得中

説明

### Summary

For project paths whose sanitized form exceeds 200 characters, session discovery can select a directory belonging to a different project when the SDK-computed hash does not match the CLI-computed hash.

### Affected code

- `src/claude_agent_sdk/_internal/sessions.py:157-184` — `_find_project_dir()`
- `src/claude_agent_sdk/_internal/sessions.py:640-657` — worktree-aware directory matching

### Current behavior

When the exact directory does not exist, `_find_project_dir()` scans the projects directory and returns the first directory whose name starts with the first 200 sanitized characters plus `-`.

The comment explains why this fallback exists: the CLI uses `Bun.hash`, while the SDK uses `simpleHash`. However, two distinct long paths can share the same first 200 sanitized characters. Both hash-suffixed directories then satisfy the fallback, and filesystem iteration order decides which one is returned.

The worktree path performs the same prefix-only match and can include multiple unrelated directories.

### Why this matters

All filesystem session helpers rely on this resolution path. A collision can make listing, reading, renaming, tagging, forking, or deleting sessions operate on another project. This is especially concerning for mutation and deletion APIs.

### Suggested reproduction

1. Create two canonical project paths whose sanitized forms share the first 200 characters but differ afterward.
2. Create CLI-style project directories for both with different hash suffixes.
3. Put distinct session transcripts in each directory.
4. Force the SDK exact hash path to be absent.
5. Call `list_sessions(directory=...)` or `get_session_info(..., directory=...)` for each project.
6. Observe that the first prefix match may be returned for both.

### Expected behavior

A project directory should only be selected after its identity has been verified.

### Possible fix

Either implement the same hash algorithm as the CLI, or inspect all prefix candidates and verify the transcript's recorded `cwd` against the requested canonical path. Ambiguous candidates should not be selected arbitrarily.

Tests should cover two long paths sharing the complete 200-character prefix.

### Environment

- Repository revision: current `main` audit at SDK version 0.2.128
- Bundled CLI version: 2.1.220
- Python test suite: 1,291 passed, 5 skipped
- Ruff and mypy: clean

I searched the existing issues and pull requests using the affected symbols and behavior before filing this.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。