Skip to content

build(macos): bundle credential-executor binary into Velissa.app#26008

Merged
siddseethepalli merged 1 commit into
mainfrom
do/bundle-ces-binary
Apr 16, 2026
Merged

build(macos): bundle credential-executor binary into Velissa.app#26008
siddseethepalli merged 1 commit into
mainfrom
do/bundle-ces-binary

Conversation

@siddseethepalli
Copy link
Copy Markdown
Contributor

@siddseethepalli siddseethepalli commented Apr 16, 2026

Summary

  • Compile credential-executor as part of the macOS build.sh and release workflow so it ships at Contents/MacOS/credential-executor alongside the other Bun-compiled binaries. Without this, CES is non-functional in the packaged app — every credential read falls through to the encrypted store and provider-credential lookups (Deepgram, etc.) fail.
  • Update getLocalBinarySearchPaths() in executable-discovery.ts to check dirname(process.execPath) before ~/.vellum/workspace/bin/, so the packaged app locates its own CES without a separate install. Dev runs via bun run fall through since process.execPath points at the bun binary itself.
  • Add matching clean/staleness/sign/notarize-exclusion plumbing and an inline x64 build step in the release workflow.

Original prompt

Add a CES compile step to clients/macos/build.sh so the credential-executor binary is built and bundled into Velissa.app alongside vellum-daemon, vellum-cli, vellum-gateway. Follow the existing pattern (ces-bin/ dir + build_bun_binary + copy to Contents/MacOS/). Also update executable-discovery.ts getLocalBinarySearchPaths() to check the Velissa.app Contents/MacOS dir (alongside the bundled daemon binary) as a fallback before the workspace/bin path, so the packaged app works without needing the user to manually install the binary to ~/.vellum/workspace/bin/. Context: without this, CES is completely non-functional in the packaged macOS app — every credential read falls back to the encrypted file store and provider-credential lookups (e.g. Deepgram for STT) fail.


Open with Devin

Without this, CES is non-functional in the packaged macOS app: the
daemon searches for credential-executor at ~/.vellum/workspace/bin/
(not installed) and falls back to source at
<monorepoRoot>/credential-executor/src/main.ts, which doesn't resolve
because import.meta.dir in a Bun-compiled binary is virtualized.
Every credential read then fails over to the encrypted file store and
provider-credential lookups (e.g. Deepgram for STT) return undefined.

- build.sh: compile credential-executor alongside vellum-daemon /
  vellum-cli / vellum-gateway and copy to Contents/MacOS/, with
  matching clean, staleness, signing, and notarize-exclusion entries.
- release.yml: add CES to the inline x64 prebuild + cleanup paths.
- executable-discovery.ts: search dirname(process.execPath) first so
  the packaged app locates its own CES; dev runs via `bun run` fall
  through since process.execPath points at the bun binary.
@siddseethepalli siddseethepalli merged commit 66108f4 into main Apr 16, 2026
@siddseethepalli siddseethepalli deleted the do/bundle-ces-binary branch April 16, 2026 07:02
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7623117ad6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

function getLocalBinarySearchPaths(): string[] {
return [join(getBinDir(), "credential-executor")];
return [
join(dirname(process.execPath), "credential-executor"),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Gate sibling executable lookup to packaged app paths

discoverLocalCes() now always checks join(dirname(process.execPath), "credential-executor") first. Outside the packaged app, process.execPath points to the Bun/Node install directory (for example ~/.bun/bin or /usr/bin), so any unrelated file named credential-executor there will be preferred over ~/.vellum/workspace/bin. In that scenario the daemon can spawn the wrong executable (or untrusted code) and credential operations fail unpredictably; this lookup should be limited to verified app-bundle paths (or verified daemon executable names) before using the sibling binary.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 4 additional findings.

Open in Devin Review

siddseethepalli added a commit that referenced this pull request Apr 16, 2026
- Dismiss Meet's media-permission modal before the prejoin wait, and
  race the name-input / Join-now / Ask-to-join selectors so signed-in
  flows that skip the name field no longer 30s-out.
- On prejoin failure dump HTML + page title + screenshot to /out so
  operators can see what Meet actually served.
- Chrome hardening in the bot image: --disable-gpu, breakpad and
  background-networking disabled to reduce container crash surface.
- Docker runner sets ShmSize: 2 GiB so Chromium doesn't exhaust the
  default 64 MiB /dev/shm under Meet's heavy JS.
- Bump BOT_CONNECT_TIMEOUT_MS 30s -> 120s so the daemon's audio-socket
  wait covers the bot's worst-case admission path (MEETING_ROOM_TIMEOUT_MS
  is 90s on its own).
- Gitignore clients/macos/ces-bin/ to match the sibling bin-dir pattern
  introduced by #26008.
siddseethepalli added a commit that referenced this pull request Apr 16, 2026
…uts (#26009)

- Dismiss Meet's media-permission modal before the prejoin wait, and
  race the name-input / Join-now / Ask-to-join selectors so signed-in
  flows that skip the name field no longer 30s-out.
- On prejoin failure dump HTML + page title + screenshot to /out so
  operators can see what Meet actually served.
- Chrome hardening in the bot image: --disable-gpu, breakpad and
  background-networking disabled to reduce container crash surface.
- Docker runner sets ShmSize: 2 GiB so Chromium doesn't exhaust the
  default 64 MiB /dev/shm under Meet's heavy JS.
- Bump BOT_CONNECT_TIMEOUT_MS 30s -> 120s so the daemon's audio-socket
  wait covers the bot's worst-case admission path (MEETING_ROOM_TIMEOUT_MS
  is 90s on its own).
- Gitignore clients/macos/ces-bin/ to match the sibling bin-dir pattern
  introduced by #26008.
@siddseethepalli
Copy link
Copy Markdown
Contributor Author

Addressed in #26266 — sibling executable lookup now gated to .app/Contents/MacOS paths, preventing dev-mode Bun installs from discovering unrelated credential-executor binaries.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant