Repository navigation
feat: run CLI video executors and job records on the job contract - #352
Merged
Merged
Conversation
The CLI's video executors branched on provider names (35 provider calls in ai-video.ts alone). They now open any provider through one registry and speak only the video job contract. - `createVideoGenerator(provider, key)` in ai-providers, plus a thin Veo adapter so Veo needs no branch until it is removed after 2026-10-22. - `VideoGenerator.imageInput` says whether a provider takes image URLs, data URIs, or either; the CLI uploads or inlines local frames to match. - executeVideoGenerate/Status/Cancel/Extend have no provider branches. They return the job handle and the provider error kind. - Job records store the job handle (`providerJob`), so `vibe status job` polls exactly what was submitted, and Seedance and Omni jobs are now refreshable. - Builds record a video job the moment the provider accepts it, then wait inline for every provider. A crash or a wait that runs out leaves a job `vibe status job` can still download; a timeout is "still running", not a failure. The likeness fallback checks the error kind. - `video-extend` works on Kling, Grok, Omni, and Veo by the task ID the generation returned; `video-cancel` works on Runway, Seedance, and Omni. - `providerFailure()` picks the CLI error envelope from the error kind. Fixes: - A Kling image-to-video job started without waiting was polled as text-to-video, so its status never resolved. - `generate_video` without a provider defaulted to Kling, not the configured provider its description promised; its `endImage` was ignored. - Job records and video-extend suggested `vibe generate video-status`, which no longer exists. - A cancelled Seedance job read as failed (fal reports `client_cancelled`). - The unused `_shared/video-providers.ts` retry helpers are removed. Claude-Session: https://claude.ai/code/session_011S1BLTaFctZNQzGERpkCuA
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
`videoImageInput` fetched any http(s) URL to inline it for Omni and Veo. Through the MCP tool, that let a caller make the CLI read an internal URL (a cloud metadata endpoint, say) and forward its contents to a provider. Inline-only providers now take local files or data URIs and refuse URLs with a usage error, as the old Omni path did. Also updates the video-extend help assertion in the integration suite. Claude-Session: https://claude.ai/code/session_011S1BLTaFctZNQzGERpkCuA
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fourth PR of the provider interface work (step 3a of the plan): the CLI's video layer now speaks only the job contract.
What changes
createVideoGenerator(provider, key)inai-providers.VeoGeneratoradapter means Veo needs no CLI branch until it is removed after 2026-10-22.VideoGenerator.imageInput(url|data-uri|either) tells the CLI whether to upload or inline a local frame.executeVideoGenerate,Status,Cancel, andExtendcontain no provider-name branches;ai-video.tsdrops from 772 lines to about 330. They return the job handle and the provider error kind.providerJob), sovibe status jobpolls exactly what was submitted. Seedance and Omni jobs, which had no live status, are now refreshable.vibe status jobcan still download, and a timeout reads as "still running".errorKind, with the wording match kept as a backstop.video-extendandvideo-cancel: extend works on Kling, Grok, Omni, and Veo by the task ID the generation returned; Kling used to need its internal video ID, which no command printed. Cancel works on Runway, Seedance, and Omni; Kling and Grok have no cancel API and are refused with a clear message.providerFailure()picks the CLI error envelope (auth, usage, or retryable API) from the error kind and carrieserrorKindin JSON errors.Bugs fixed on the way
generate_videodefaults: without a provider it defaulted to Kling instead of the configured provider its description promised, and it ignored theendImageit advertises.video-extendsuggestedvibe generate video-status, which no longer exists (neither doesmusic-status).error_type: "client_cancelled"._shared/video-providers.tsretry helpers are removed.Verification
pnpm build,lint,typecheck, tests (providers 210, CLI 1224, MCP 73), pre-push gate.vibe status job --waitpolled the image2video endpoint from the handle and downloaded a 3.04 s clip.vibe generate video-extend <grok task> -p grok: 2 s + 2 s = 4.04 s.Next (3b)
Move the
generate videocommand itself (913 lines with its own provider branches) and fill-gaps ontoexecuteVideoGenerate.https://claude.ai/code/session_011S1BLTaFctZNQzGERpkCuA