Merged
Conversation
Owner
emesal
commented
Feb 18, 2026
- feat(vfs): add VfsPath newtype with validation and URI parsing
- feat(vfs): add backend trait, types, and permission model
- fix(context): reject reserved VFS caller names (SYSTEM)
- feat(vfs): add LocalBackend (disk-based VFS storage)
- feat(vfs): add Vfs router with zone-based permission enforcement
- feat(vfs): add VfsConfig and wire Vfs into AppState
- feat(vfs): add dedicated VFS tools (list, info, copy, move, mkdir, delete)
- fix(vfs): validate backend config, eager dir creation, dedup require_str_param
- feat(vfs): wire vfs:// prefix into existing file and coding tools
- feat(vfs): wire VFS tools into tool execution pipeline
- test(vfs): add comprehensive multi-context integration test
- docs: add VFS documentation
- fix(vfs): fix OS permission gate applied to vfs:// paths in file tools
- fix(vfs): VfsPath::join explicitly rejects '.' components, add test
- fix(vfs): replace blocking Path::exists()/is_dir() with tokio::fs::metadata in LocalBackend
- docs(vfs): document multi_thread runtime requirement on vfs_block_on
- docs(vfs): document intentional world-readable read in execute_file_edit_vfs
- refactor(vfs): rename VFS_URI_PREFIX -> VFS_URI_SCHEME, add clarifying comment
- docs(vfs): document VfsConfig as intentionally global-only, not in ResolvedConfig
- feat(vfs): add Ord, PartialOrd, Serialize, Deserialize to VfsPath
- style: fix clippy warnings (ptr_arg, module_inception)
…str_param - Reject unknown VFS backends at AppState init (only "local" built in) - Eagerly create vfs/ directory alongside contexts/, prompts/, plugins/ - Extract require_str_param to tools::builtin (was duplicated 3x)
Exercises the full VFS workflow: SYSTEM writes to /sys/, alice/bob cross-permission checks, copy/move/delete with permission enforcement, list/metadata operations, mkdir with zone restrictions.
- docs/vfs.md: namespace layout, permission model, vfs:// URI scheme, dedicated tools, configuration, backend extensibility, storage layout - docs/architecture.md: add vfs/ to storage layout and file listing - AGENTS.md: add docs/vfs.md link
Two critical bugs: write_file and read-only file tools with vfs:// paths were routed through OS permission hooks/classify_file_path, causing spurious denials. Early-exit added at top of is_file_tool branch when path is a vfs:// URI; VFS zone permissions enforce access inside execute_file_tool. Also: deduplicate vfs_block_on (pub(crate) in file_tools, imported in coding_tools); fix resolve_path to error on malformed VFS URIs instead of silently falling to OS path; remove pre-declared content_str binding in execute_file_grep; document ReplaceString early return; tighten ResolvedPath visibility to pub(crate); remove unused ErrorKind import in vfs_tools; add dispatch-layer tests through execute_tool_pure.
…tadata in LocalBackend
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.