{"record":{"id":"f76fab82e14411e8","repo":"tinyhumansai/openhuman","slug":"cannot-reveal-path-on-this-device-it-is-a-p","errorCode":null,"errorMessage":"Cannot reveal \"${path}\" on this device — it is a path on the openhuman-core host's filesystem (a different OS). Open it on the machine running the core.","messagePattern":"Cannot reveal \"(.+?)\" on this device — it is a path on the openhuman-core host's filesystem \\(a different OS\\)\\. Open it on the machine running the core\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"warning","filePath":"app/src/utils/openUrl.ts","lineNumber":117,"sourceCode":" * deep link (e.g. `obsidian://`) may silently no-op because the\n * target app isn't installed.\n *\n * Outside Tauri this is a no-op — there's no OS shell to drive.\n *\n * Rejects with a clear error when `path` belongs to a different OS than this\n * device (issue #4278) — e.g. a shared `openhuman-core` running on another OS\n * served its own absolute path — instead of letting the opener fail cryptically.\n */\nexport const revealPath = async (path: string): Promise<void> => {\n  if (!isTauri()) return;\n  let clientOs: string | undefined;\n  try {\n    clientOs = await platform();\n  } catch {\n    clientOs = undefined;\n  }\n  if (isForeignFsPath(path, clientOs)) {\n    throw new Error(\n      `Cannot reveal \"${path}\" on this device — it is a path on the openhuman-core host's filesystem (a different OS). Open it on the machine running the core.`\n    );\n  }\n  await revealItemInDir(path);\n};\n","sourceCodeStart":99,"sourceCodeEnd":123,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/a221052e0df5b1f7598fceba7329fd1af95d6699/app/src/utils/openUrl.ts#L99-L123","documentation":"revealPath refuses to open a path that belongs to another OS's filesystem: isForeignFsPath matched the path shape against the client OS (e.g. C:\\... on macOS/Linux, or /Users/... on Windows). The path came from a remote openhuman-core running on a different machine/OS (issue #4278), so a local file opener could never find it — this error replaces a cryptic opener failure.","triggerScenarios":"Clicking reveal-in-folder on an artifact/file path returned by a remote core — a shared openhuman-core on another OS (iOS client, LAN-shared core) serving Windows paths to a macOS client or vice versa.","commonSituations":"Remote-core setups; cross-OS development against a Windows core from a macOS client; paths surfaced in chat that refer to the host machine.","solutions":["Open the path on the machine actually running the core (sit down at it / remote desktop)","If the core is local and this still fires, the path itself is malformed — check how the caller produced it","In the UI, pre-check the path shape and show an 'on host machine' notice instead of a reveal button"],"exampleFix":"// before\nawait revealPath(path);\n\n// after — gate the affordance instead of failing on click\nconst looksWindows = /^[A-Za-z]:[\\\\/]/.test(path);\nif (looksWindows !== (clientOs === 'windows')) {\n  showNotice(t('paths.onHostMachine'));\n} else {\n  await revealPath(path);\n}","handlingStrategy":"validation","validationCode":"function looksForeign(path: string, clientOs: string | undefined): boolean {\n  const isWinPath = /^[A-Za-z]:[\\\\/]/.test(path);\n  const isPosixPath = path.startsWith('/') || path.startsWith('\\\\\\\\');\n  if (clientOs === 'windows') return isPosixPath && !isWinPath;\n  return isWinPath;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Tag paths that originate from a remote core when they enter the UI and render an 'on host machine' notice instead of a reveal button","Test reveal flows against a remote-core profile on each OS","Never pass raw server paths straight to shell openers without an OS-shape check"],"tags":["filesystem","cross-platform","remote-core","tauri","ux"],"backgroundTag":null,"analyzedSha":"a221052e0df5b1f7598fceba7329fd1af95d6699","analyzedAt":"2026-08-16T12:47:06.542Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}