{"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":null,"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/749120085864ce16e0f273c7b86fac7740b39c5b/app/src/utils/openUrl.ts#L99-L123","documentation":"revealPath() is about to hand a path to the OS opener (revealItemInDir) but first runs isForeignFsPath(path, clientOs): if the path's shape belongs to a different operating system than this client (C:\\... on macOS/Linux, /Users/... on Windows), it throws this explanatory error instead of letting the opener fail cryptically (issue #4278). It means the path came from the core's filesystem, and the core runs on another machine/OS.","triggerScenarios":"A remote/shared openhuman-core (docker container, LAN core on another OS, cloud) returned its own absolute path in an artifact, memory source, or log line, and the client tried to reveal it locally; client platform() call returns the host OS and mismatches the path style.","commonSituations":"iOS/remote clients browsing artifacts produced by a Linux docker core; a macOS laptop driving a Windows home server; any setup where 'the machine running the core' is not 'this device'.","solutions":["Open the path on the machine actually running the core (SSH/remote desktop/file share) — no client-side fix will make a foreign filesystem path local","If you own the call site, catch this error and render a 'path lives on the core host at <path>' hint instead of a generic failure","For local-core setups, verify the core really is local — the detected mismatch means the serving core is remote (or the path was copy-pasted from another machine)"],"exampleFix":"// before\nawait revealPath(artifactPath);\n// after\ntry {\n  await revealPath(artifactPath);\n} catch (err) {\n  if (err instanceof Error && err.message.includes('core host')) {\n    showHint(`Open on the core host: ${artifactPath}`);\n  } else throw err;\n}","handlingStrategy":"validation","validationCode":"// Expose the same check the util uses, before attempting reveal:\nimport { isForeignFsPath } from '../../utils/openUrl'; // if exported; else replicate:\nfunction looksLikeWindowsPath(p: string) { return /^[a-zA-Z]:\\\\/.test(p); }\nfunction looksLikePosixPath(p: string) { return p.startsWith('/'); }\nconst clientOs = await platform();\nif (isForeignFsPath(path, clientOs)) {\n  showHint(`This file lives on the core host (${path}) — open it there.`);\n}","typeGuard":"function isRevealableLocally(path: string, clientOs: string | undefined): boolean {\n  if (clientOs === 'windows') return !looksLikePosixPath(path) || path.startsWith('C:/');\n  return !looksLikeWindowsPath(path);\n}","tryCatchPattern":"try { await revealPath(path); }\ncatch (err) {\n  if (err instanceof Error && err.message.includes(\"core host's filesystem\")) {\n    showHint(`Open on the machine running the core: ${path}`);\n    return;\n  }\n  throw err;\n}","preventionTips":["For remote-core setups, render 'path on core host' inline instead of a reveal button","Remember issue #4278: core-served absolute paths are host paths, not client paths","Catch this specific message and turn it into guidance — it was created precisely to replace cryptic opener failures"],"tags":["cross-platform","filesystem","remote-core","tauri","ux"],"backgroundTag":"cross-platform-path-mismatch","analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}