fix: check worktree for external_directory permission in subdirs #7811
+101
−6
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.
Summary
Fixes spurious
external_directorypermission prompts when running opencode from a subdirectory within a git worktree (e.g., monorepopackages/some-package).Closes #7758
Root cause: Path containment was checked only against
Instance.directory(CWD), notInstance.worktree(git root). Paths within the worktree but outside CWD were incorrectly treated as external.Related Issues
cwdoption tocreateOpencodeServer#3321 - Partially helps: running from subdirectory now allows access to worktree paths without permission promptsChanges
Instance.containsPath()method that checks bothdirectoryandworktreeworktree === "/"to prevent allowing all pathsassertExternalDirectory()helper to useInstance.containsPath()file/index.tsandbash.tsTest Plan
bun test test/file/path-traversal.test.ts test/tool/external-directory.test.tsTests cover:
..escaping worktreedirectory === worktree(repo root)Note
This PR was written with AI assistance.
AI Session Export
{ "info": { "title": "fix external_directory permission in monorepos", "agent": "opencode", "models": ["claude-opus-4-5"] }, "summary": [ "user requested fix for issue #7758 and PR creation", "agent analyzed external_directory permission bug in monorepo subdirectories", "agent added Instance.containsPath() method checking both directory and worktree", "agent updated path checks in read.ts, edit.ts, patch.ts, bash.ts, file/index.ts", "agent added guard for non-git projects where worktree === '/'", "agent created comprehensive test coverage for path containment scenarios", "agent committed changes and opened PR #7811", "agent ran multi-agent code review with 3 parallel reviewers", "reviews confirmed fix addresses root cause correctly with no critical issues" ] }