stablyai/orca · error · Error

SSH filesystem provider unavailable

Error message

SSH filesystem provider unavailable

What it means

Thrown in the unregistered-worktree cleanup branch of worktrees:remove when repo.connectionId is set (SSH repo) but getSshFilesystemProvider returns undefined. Cleaning an orphaned worktree directory on the remote host requires filesystem inspection (lstat/readFile) to prove the directory is safe to delete; without a filesystem provider Orca refuses rather than delete blindly.

Source

Thrown at src/main/ipc/worktrees.ts:2459

          const removedPushTarget = removedMeta?.pushTarget
          const registeredWorktree = findRegisteredDeletableWorktree(
            repo.path,
            worktreePath,
            registeredWorktrees
          )
          if (!registeredWorktree) {
            const fsProvider = repo.connectionId
              ? getSshFilesystemProvider(repo.connectionId)
              : null
            let canCleanOrphanedDirectory = false
            if (
              canCleanupUnregisteredOrcaWorktreeDirectory({
                meta: removedMeta
              })
            ) {
              if (repo.connectionId) {
                if (!fsProvider) {
                  throw new Error('SSH filesystem provider unavailable')
                }
                if (!fsProvider.lstat) {
                  throw new Error('SSH filesystem provider lstat unavailable')
                }
                canCleanOrphanedDirectory = await canSafelyRemoveOrphanedWorktreeDirectory(
                  worktreePath,
                  repo.path,
                  (path) => fsProvider.lstat!(path),
                  (path) => fsProvider.readFile(path)
                )
              } else {
                const access = getLocalWorktreePathAccess(localWorktreeGitOptions)
                canCleanOrphanedDirectory =
                  !isDangerousWorktreeRemovalPath(worktreePath, repo.path) &&
                  (await canSafelyRemoveOrphanedWorktreeDirectory(
                    toLocalWorktreeRuntimePath(worktreePath, localWorktreeGitOptions),
                    toLocalWorktreeRuntimePath(repo.path, localWorktreeGitOptions),
                    access.statPath,

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Reconnect to the SSH target so the filesystem provider is available, then retry the removal.
  2. Retry with args.force once the provider is back so the orphaned-directory cleanup can proceed.
  3. Verify the SSH target registers both git and filesystem providers; an incomplete provider set is a connection/config defect.
Defensive patterns

Strategy: retry

Validate before calling

const fsProvider = await invoke('ssh:filesystemProviderStatus', repo.connectionId)
if (!fsProvider) {
  await invoke('ssh:reconnect', repo.connectionId)
}

Try / catch

try {
  await invoke('worktrees:remove', { worktreeId, hostId })
} catch (e) {
  if (e.message === 'SSH filesystem provider unavailable') {
    await invoke('ssh:reconnect', connectionId)
    return invoke('worktrees:remove', { worktreeId, hostId, force: true })
  }
  throw e
}

Prevention

When it happens

Trigger: Removing an SSH-backed worktree that is no longer Git-registered but whose directory remains, at a moment when the SSH filesystem provider is unavailable (disconnected) even though the git provider path may have proceeded.

Common situations: SSH connection dropped between the git listing and the orphan-cleanup step, or the filesystem provider was never registered for the target while the git provider was.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/a72597d18447b071. Report an issue: GitHub.