Skip to content

fix(cli): the voice a film uses is listed from the HyperFrames account, never the heygen sign-in - #7144

Merged
miguel-heygen merged 2 commits into
mainfrom
feat/cli-voices-own-account
Nov 4, 2026
Merged

miguel-heygen merged 2 commits into
mainfrom
feat/cli-voices-own-account

Conversation

@miguel-heygen

@miguel-heygen miguel-heygen commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

What

To pick a voice, the style-sampling skill told the agent to list voices with heygen voice list. That is the separate heygen CLI sign-in, which can be a different account from the HyperFrames one making the film. On one machine it listed 50 clones for the heygen sign-in while the HyperFrames account had none, so the agent offered another account's clones by name and choosing one would have voiced the film with someone else's clone.

How

  • New hyperframes media-use voices: lists the clones of the HyperFrames sign-in's own workspace (/v3/voices?type=private through the HyperFrames credential, heygen/v3.ts, next to publicVoices). It never runs the heygen binary. Signed out or refused (401/403) it stops with npx hyperframes auth login; it does not fall back to any other sign-in.
  • skills/style-sampling/references/remix.md sends the agent to that command and says never heygen voice list; the CLI docs list it.
  • Using a voice already goes through the HyperFrames sign-in (media-use generate --type voice --voice <id>, /v3/voices/speech). I checked that the server refuses another account's clone there: speaking the heygen sign-in's private voice with the HyperFrames token answered 404 "Voice ... not found in this workspace" and returned no audio.
  • A 401/403 while listing public voices now also says to sign in, instead of "run the same command again" (one existing test updated).

Tests

  • v3.test.ts: the list asks for type=private with the HyperFrames credential only, and returns only that account's voices even when another sign-in's key would list others; a refused sign-in gives the auth login fix.
  • check-core-skills.test.mjs: the skill names media-use voices and never heygen voice list as the way to list.
  • Fails without the fix: packages/cli/src/heygen/v3.test.ts > "lists the clones of the HyperFrames sign-in's workspace only, never another account's" (red when the list asks for public instead of private: 1 failed, 25 passed), and scripts/check-core-skills.test.mjs > "style-sampling picks a voice from the HyperFrames account, never the separate heygen sign-in" (fails against main's remix.md, passes here). With the change: 118 passed across src/heygen and media-use.test.ts, the skills scripts pass, formatter and manifest check clean.

Not covered

  • That the HyperFrames account can speak one of its own clones: that account had no clones to try, so only the refusal side was exercised.
  • skills/media-use/references/operations.md still lists heygen voice clone create; a clone made there lands on the heygen sign-in's account. Left as it documents the separate-credential escape hatch; worth its own change.

Size

A lone fix for one defect (the wrong account listed for voices) that spans the CLI command, its docs and the skill text; it cannot be smaller.

@mintlify

mintlify Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
hyperframes 🟢 Ready View Preview Nov 4, 2026, 5:27 AM

💡 Tip: Enable Automations to automatically generate PRs for you.

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verdict: REQUEST CHANGES · 1 blocker · 1 important · 0 nits · head 86fffcb0

The code change looks right to me. The only blocker is in the PR body.

  • blocker (PR body): the Fails without the fix: line doesn't name a test. It says "listing public instead of private turns the scoping test red", which describes a mutation of the fix rather than naming a test. Please name the test by file and title. Both of these qualify, and I confirmed each locally:
    • packages/cli/src/heygen/v3.test.ts › "lists the clones of the HyperFrames sign-in's workspace only, never another account's"
    • scripts/check-core-skills.test.mjs › "style-sampling picks a voice from the HyperFrames account, never the separate heygen sign-in". It fails against main's remix.md (not ok 10) and passes at head.
  • important: packages/cli/src/heygen/v3.ts:308: the optional Comments ratchet fails. The file's comment share went from 6.4% to 6.5% because of 1 added comment line, the new ownVoices docstring. Fold it into the name, or cut it, to go green.
What I checked
  • Tests at head: v3.test.ts 26/26, generate.test.ts 54/54 and check-core-skills.test.mjs 10/10.
  • Request types: listVoicesV3 already types type?: "public" | "private" (cloud/_gen/client.ts:404), so the shared listVoices adds no new request shape. A 401/403 now gives the auth login fix, and there is no fallback to the heygen binary.
  • Other heygen voice list callers (Rule 2): media-use/lib/voice-provider.mjs:32 and heygen-video-provider.mjs:38 still pick a default starfish voice through the heygen binary. That isn't this defect, because both list and speak on the same heygen sign-in. I'm leaving them as pre-existing, same as the operations.md clone note the body already leaves out.
  • --limit range: the help says 1–100, but num() doesn't enforce it. An out-of-range value would come back as a "HeyGen 400 … run the same command again" error. This is minor and doesn't block.
  • CI at the time of review: regression, Player perf, PR captures, preview-regression and Docs were green. CI, CodeQL and Windows were still running, and Comments had failed.

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verdict: APPROVE · 2 resolved, 0 open, 0 new · 86fffcb0 → 0427e8f9. The body now names both failing tests by file and title, and the docstring cut turns the Comments ratchet green. The interdiff is 1 help-text line and 1 removed comment.

@miguel-heygen
miguel-heygen added this pull request to the merge queue Nov 4, 2026
Merged via the queue into main with commit 19be35a Nov 4, 2026
76 of 77 checks passed
@miguel-heygen
miguel-heygen deleted the feat/cli-voices-own-account branch November 4, 2026 06:07
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