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
- Reselect the .proto file(s) via the picker — the binding is re-persisted on success
- If files moved permanently, update the binding once to the new location; keep proto files in a stable absolute path
- On macOS, ensure the app retains access (the bookmark) or run a non-sandboxed build
- 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
- Keep .proto files at stable absolute paths (not removable media/temp dirs)
- Re-verify persisted paths on app startup, not only when opening a key
- On macOS keep the security-scoped bookmark fresh so file access survives restarts
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
- Select a correct .proto file
- Select a correct Type to encode
- this.$t('message.json_format_failed')
- Proto Verify Failed: ${err}
- Fail to load proto: ${e.message}
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/53b51a423fbb6d1e.
Report an issue: GitHub.