Files
ServerKit/agent/internal/agent
Juan DenisandClaude Opus 4.8 9de7ecf7c1 fix(agent): Windows file browser — per-entry paths + drive enumeration
The remote file browser was broken because handleFileList returned entries
with only name/is_dir/size/modified and NO `path`. The frontend keys,
selects, and navigates on entry.path, so remote browse was broken on every
OS (entry.path was undefined), and Windows additionally had no way to reach
drives other than the agent process's working drive.

Agent (file_handlers.go + build-tagged helpers):
- Emit an absolute, forward-slash `path` for every entry and for the
  directory itself (filepath.ToSlash), giving the panel one canonical
  separator regardless of the agent OS.
- Normalize the inbound path with filepath.FromSlash before any os call so
  os.ReadDir and the allowlist validation work with Windows separators.
- On Windows, an empty/"/" browse request enumerates logical drives
  (GetLogicalDrives) as virtual directory entries instead of silently
  listing one drive. enumerateDriveRoots() is build-tagged: real on
  windows, nil elsewhere (falls through to "/"). The allowlist still gates
  whether the panel can enter each drive.

Frontend (FileManager.jsx):
- deriveParent and breadcrumbs are drive-aware: "C:/Users" -> "C:/" (not
  "C:", which is Windows' "current dir on C:"), and a drive-rooted path
  builds crumbs from the drive list instead of bogus "/C:" paths. POSIX
  paths are untouched (changes are guarded by drive-letter regexes).

Verified: go vet + go test ./... (host) green incl. new
TestHandleFileListEmitsForwardSlashPaths; cross-builds linux/darwin/
windows-arm64; eslint + vite production build green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 15:04:45 -04:00
..