{"record":{"id":"a487eca528c7ba95","repo":"stablyai/orca","slug":"missing-orca-computer-use-helper-app-at-helperap","errorCode":null,"errorMessage":"Missing Orca Computer Use helper app at ${helperAppPath}","messagePattern":"Missing Orca Computer Use helper app at (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"config/electron-builder.config.cjs","lineNumber":550,"sourceCode":"    return\n  }\n  const helperPaths = [\n    join(resourcesDir, 'serve-sim', 'bin', 'serve-sim-bin'),\n    join(resourcesDir, 'serve-sim', 'dist', 'simcam', 'serve-sim-camera-helper'),\n    join(resourcesDir, 'node_modules', 'serve-sim', 'bin', 'serve-sim-bin'),\n    join(resourcesDir, 'node_modules', 'serve-sim', 'dist', 'simcam', 'serve-sim-camera-helper')\n  ]\n  for (const helperPath of helperPaths) {\n    if (existsSync(helperPath)) {\n      chmodSync(helperPath, 0o755)\n    }\n  }\n}\n\nasync function signMacComputerUseHelper(helperAppPath, packager) {\n  if (!existsSync(helperAppPath)) {\n    if (isMacRelease) {\n      throw new Error(`Missing Orca Computer Use helper app at ${helperAppPath}`)\n    }\n    return\n  }\n  const codeSigningInfo =\n    isMacRelease && process.env.CSC_LINK && packager?.codeSigningInfo?.value\n      ? await packager.codeSigningInfo.value\n      : null\n  const identity =\n    process.env.ORCA_COMPUTER_MACOS_SIGN_IDENTITY ??\n    process.env.CSC_NAME ??\n    findInstalledMacSigningIdentity(codeSigningInfo?.keychainFile) ??\n    (isMacRelease ? null : '-')\n  if (!identity) {\n    throw new Error('Missing signing identity for Orca Computer Use helper app')\n  }\n  // Why: TCC grants attach to this nested app's code identity. Sign it before\n  // the outer Orca.app is sealed so production builds preserve that identity.\n  execFileSync('codesign', codesignArgs(identity, helperAppPath), { stdio: 'inherit' })","sourceCodeStart":532,"sourceCodeEnd":568,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/config/electron-builder.config.cjs#L532-L568","documentation":"In the macOS afterPack signing step, `signMacComputerUseHelper` checks for 'Orca Computer Use.app' in the resources directory. If the file doesn't exist and this is a Mac release build (ORCA_MAC_RELEASE=1, or hourly/daily/adhoc channel), the build fails — the helper app is a required component that must be signed before Orca.app is sealed. Non-release builds silently return (line 552).","triggerScenarios":"The native/computer-use-macos build step (a Rust/Swift project compiled separately) did not produce 'Orca Computer Use.app' before electron-builder ran. The extraResources mapping for the helper app (line 390-392) has a wrong `from` path. Building on a machine without the native build toolchain. The .build/release output directory doesn't exist because `cargo build --release` wasn't run.","commonSituations":"Running electron-builder without first building the native computer-use helper. CI pipeline step ordering — the native build must complete before packaging. A clean checkout where the native build artifacts haven't been generated. Changing the native project's output path or product name.","solutions":["Build the computer-use helper first: run the native build for `native/computer-use-macos` to produce `.build/release/Orca Computer Use.app`.","Verify the extraResources mapping at electron-builder.config.cjs:390 — the `from` path `native/computer-use-macos/.build/release/Orca Computer Use.app` must match the actual build output.","If this is a local non-release build, set ORCA_MAC_RELEASE unset (or not 1) so the guard silently skips signing — but note the helper still won't be signed.","Check CI pipeline ordering: native builds must complete before the electron-builder packaging step."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Verify the helper app exists before packaging\nimport { existsSync } from 'fs'\nfunction assertComputerUseHelperExists() {\n  const helperPath = 'native/computer-use-macos/.build/release/Orca Computer Use.app'\n  if (!existsSync(helperPath)) {\n    throw new Error(`Build the helper first: cd native/computer-use-macos && cargo build --release`)\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Build all native macOS helpers before running electron-builder — add a prebuild step to the package script.","Verify the extraResources `from` path matches the native build output directory.","In CI, ensure the native build step runs before packaging and fails the pipeline if it errors."],"tags":["electron-builder","macos","code-signing","computer-use","native-build","packaging"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}