release: prepare Zyra v0.6.0 desktop candidate - #4
Conversation
# Conflicts: # docs/README.md # package.json
- route Git and typed Voice text through tool-free agent-server utility generation\n- signal ChatGPT Frameless WebRTC directly with owner-scoped browser commands\n- retire Desktop Codex executable paths and add deterministic migration contracts
Gate setup and destructive credential IPC in main, keep connection lifecycle out of durable Agent Inbox history, and complete account/secret handling. Correct per-platform asset validation, require signing for every public tag, include license/source assets, and validate packaged launch/runtime metadata.
There was a problem hiding this comment.
Sorry @justelson, your pull request is larger than the review limit of 150000 diff characters
Reviewer's GuideThis PR prepares Zyra Desktop v0.6.0 as a unified, packaged release by replacing Codex-based realtime voice with a direct ChatGPT/WebRTC integration, introducing main-owned onboarding and device preference/secret services, tightening Browser/Desktop authorization, and adding cross-platform packaging, runtime staging, and updater contracts and tests. Sequence diagram for ChatGPT realtime voice startupsequenceDiagram
participant Renderer as useInstructorVoiceSession
participant Devscope as window.devscope.assistant
participant Service as AssistantService
participant Runtime as ChatGptRealtimeVoiceRuntime
participant Account as createChatGptRealtimeCall
Renderer->>Devscope: startRealtimeVoice(input)
Devscope->>Service: startRealtimeVoice(input, senderId)
Service->>Runtime: start({cwd,sdp,instructions,voice,initialItems,adapterSessionId,conversationId,realtimeSessionGeneration,signal})
Runtime->>Account: createChatGptRealtimeCall({sdp,instructions,voice,initialItems,sessionId,threadId,signal})
Account-->>Runtime: {sdp,callId}
Runtime-->>Service: {threadId,sdp,realtimeVersion:'v3',realtimeSessionId,adapterSessionId,realtimeSessionGeneration}
Service-->>Devscope: startRealtimeVoice result
Devscope-->>Renderer: startRealtimeVoice result
Runtime-->>Service: AssistantRealtimeVoiceEvent session.started
Service-->>Renderer: onRealtimeVoiceEvent(session.started)
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cfd773d8a0
ℹ️ 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".
| await sdk.configureZyraOpenAIApiKey(key) | ||
| await sdk.verifyZyraOpenAIApiAuth() |
There was a problem hiding this comment.
Persist an API model when API-key setup succeeds
When a new user completes onboarding with only an API key, both verification results are discarded and no openai/... model is written to assistantDefaultModel. The new-chat composer consequently falls back to its canonical latest model, openai-codex/gpt-5.6-sol, which requires the ChatGPT subscription credential the user does not have; their first chat therefore fails until they discover Account settings and manually choose “Use for new chats.” Derive an API-backed model from the verification response and save it as the new-chat default as part of this setup path.
Useful? React with 👍 / 👎.
| function isUsableSubscription(status: ChatGptStatusResult): boolean { | ||
| if (status.status?.configured !== true) return false | ||
| if (status.usage && !status.usageError) return true | ||
| if (!status.tokenExpiresAt || status.usageError) return false |
There was a problem hiding this comment.
Accept unexpired subscriptions when usage lookup fails
If the ChatGPT usage endpoint is temporarily unavailable or rate-limited, buildChatGptAccountStatus supplies both usageError and the OAuth token expiry, but this condition immediately rejects the account without checking that unexpired token. Because onboarding calls this predicate before allowing the Connect and Review steps to complete, an otherwise valid signed-in user can be locked out by a transient usage-service failure; the existing expiry fallback should remain usable when usage cannot be fetched.
Useful? React with 👍 / 👎.
Persist active theme choices across setup and Settings, add the browser-first OpenAI auth boundary, refine the mandatory onboarding surfaces, and expand the validated light/dark theme catalogs with focused contracts.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6cc8f0a450
ℹ️ 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".
| const result = await window.devscope.onboarding.disconnectOpenAI({ method: disconnectMethod, confirmed: true }) | ||
| if (!result.success) throw new Error(result.error || 'Could not disconnect OpenAI.') | ||
| setConnections(result.status) | ||
| setDisconnectMethod(null) |
There was a problem hiding this comment.
Reassign the default before disconnecting its provider
When the disconnected method owns settings.assistantDefaultModel and the other connection remains verified, this success path updates only the connection state and leaves the removed provider’s model as the new-chat default. The page therefore continues to report that provider as configured, and subsequent chats attempt to use a credential that was just deleted until the user manually selects “Use for new chats”; switch the default to an available model or clear it as part of this disconnect path.
Useful? React with 👍 / 👎.
Summary
Prepare Zyra
v0.6.0as one lockstep TUI, Desktop, and Browser candidate.Validation completed locally
Release policy and blockers