qishibo/AnotherRedisDesktopManager · error

Proto file not found, please reselect: ${missing.map(p => pa

Error message

Proto file not found, please reselect: ${missing.map(p => path.basename(p)).join(', ')}

What it means

Element UI toast listing basenames of .proto files that no longer exist on disk. loadProtoFiles() runs fs.existsSync over every persisted path before loading; any missing path produces this message, then clearBinding() wipes the saved profile (the key-to-proto association) and loading aborts.

Source

Thrown at src/components/viewers/ViewerProtobuf.vue:160

      });
    },
    restoreBinding() {
      const profile = storage.getProtobufProfileByRedisKey(this.keyHex);
      if (!profile || !profile.paths) {
        return;
      }

      this.loadProtoFiles(profile.paths, profile.bookmarks || [], false);
    },
    loadProtoFiles(paths, bookmarks = [], persist = false) {
      if (!paths.length) {
        return Promise.resolve(false);
      }

      // file not found
      const missing = paths.filter(p => !fs.existsSync(p));
      if (missing.length) {
        this.$message.error(
          "Proto file not found, please reselect: " +
          `${missing.map(p => path.basename(p)).join(', ')}`
        );
        this.clearBinding();
        return Promise.resolve(false);
      }
      // apply bookmark
      const release = this.accessBookmarks(bookmarks);
      // then read
      return protobuf.load(paths).then((root) => {
        this.proto = paths;
        this.bookmarks = bookmarks || [];

        this.protoRoot = root;
        this.types = ['Rawproto'];
        this.traverseTypes(root);
        // default select the first real type
        this.selectedType = this.types.length > 1 ? this.types[1] : 'Rawproto';

View on GitHub (pinned to c149855106)

Solutions

  1. Reselect the .proto file(s) via the picker — the binding is re-persisted on success
  2. If files moved permanently, update the binding once to the new location; keep proto files in a stable absolute path
  3. On macOS, ensure the app retains access (the bookmark) or run a non-sandboxed build
  4. Store paths relative to the project/workspace when possible and resolve at load time

Example fix

// before
const missing = paths.filter(p => !fs.existsSync(p));
if (missing.length) {
  this.$message.error("Proto file not found, please reselect: " + ...);
  this.clearBinding();
}

// after - offer to re-locate instead of silently dropping the binding
const missing = paths.filter(p => !fs.existsSync(p));
if (missing.length) {
  this.$message.warning(`Proto files moved: ${missing.map(p => path.basename(p)).join(', ')} — reselect them`);
  // keep profile so the user only re-picks the missing files
}
Defensive patterns

Strategy: validation

Validate before calling

const fs = require('fs');
const missing = paths.filter(p => !fs.existsSync(p));
if (missing.length) {
  // prompt reselect instead of proceeding to protobuf.load
  this.$message.error('Proto file not found, please reselect: ' + missing.map(p => require('path').basename(p)).join(', '));
  return false;
}

Type guard

const allFilesExist = (paths) => paths.every(p => fs.existsSync(p));

Prevention

When it happens

Trigger: A previously bound .proto lived on a USB drive, network share, or temp folder that is no longer mounted; files were renamed/moved/deleted since the binding was persisted; macOS sandbox container moved the file so the absolute path changed; paths saved from a different machine via synced config.

Common situations: Reopening the app after pulling a repo whose proto files moved directories; using security-scoped bookmarks that expired (macOS App Store sandbox); switching between two workstations with different home directory layouts.

Related errors


AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22). Data as JSON: /api/errors/53b51a423fbb6d1e. Report an issue: GitHub.