diff --git a/.github/BETA_RELEASES.md b/.github/BETA_RELEASES.md new file mode 100644 index 0000000..5acbed6 --- /dev/null +++ b/.github/BETA_RELEASES.md @@ -0,0 +1,82 @@ +# Beta & Alpha Release Channels + +OpenConduit supports three release channels for distributing updates: **stable**, **beta**, and **alpha**. + +## Overview + +- **Stable** (`stable`): Official releases, e.g. `v1.2.1` — for production users +- **Beta** (`beta`): Pre-release testing versions, e.g. `v1.3.0-beta.1` — for early adopters +- **Alpha** (`alpha`): Early testing versions, e.g. `v1.3.0-alpha.1` — for developers + +## How It Works + +### Cloudflare Worker + +The update check endpoint at `https://workers.openconduit.ai/latest` accepts a `channel` query parameter: + +``` +GET /latest?channel=stable|beta|alpha +``` + +**Behavior:** +- **`?channel=stable`** (default): Returns the latest GitHub release (non-prerelease) +- **`?channel=beta`**: Scans recent releases for a prerelease tagged with "beta" (e.g., `v1.3.0-beta`) +- **`?channel=alpha`**: Scans recent releases for a prerelease tagged with "alpha" or "beta" + +### Tagging Releases + +When you create a GitHub release: + +1. **Stable release**: Tag as `v1.2.1` (no prerelease suffix) + - Check the "Set as a pre-release" checkbox: **OFF** + - Stable users will receive this update + +2. **Beta release**: Tag as `v1.3.0-beta` or `v1.3.0-beta.1` + - Check the "Set as a pre-release" checkbox: **ON** + - Beta users will receive this update + - Stable users will NOT receive it + +3. **Alpha release**: Tag as `v1.3.0-alpha` or `v1.3.0-alpha.1` + - Check the "Set as a pre-release" checkbox: **ON** + - Alpha users will receive this update + - Beta and stable users will NOT receive it (unless no beta is available, then they fall back to stable) + +## Client Configuration + +In `packages/desktop/src/main/ipc.ts` (or wherever your updater is): + +```typescript +// Determine which channel to check +const channel = 'stable'; // or 'beta', 'alpha' depending on build variant + +// Check for updates +const response = await fetch( + `https://workers.openconduit.ai/latest?channel=${channel}` +); +const { version, notes, url } = await response.json(); +``` + +## Development Workflow + +### Testing a Beta Release + +1. Create a GitHub release tagged `v1.3.0-beta.1` +2. Mark it as pre-release +3. Beta users (with `channel=beta` in their client) will see the update available +4. Test thoroughly + +### Promoting Beta to Stable + +1. Create a new release tagged `v1.3.0` (remove the `-beta` suffix) +2. Uncheck "Set as pre-release" +3. All users (stable, beta, alpha) will receive the update + +### Fallback Behavior + +If no matching pre-release is found, the worker falls back to the latest stable release. This ensures users always get an update, even if their channel doesn't have recent releases. + +## Implementation Notes + +- The Cloudflare Worker scans the **20 most recent releases** when looking for beta/alpha builds +- Release notes and download URL are included in the response +- If a user is on a channel with no available releases, they fall back to stable diff --git a/packages/desktop/package.json b/packages/desktop/package.json index ce3e550..eb6845e 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "openconduit", "productName": "OpenConduit", - "version": "1.2.1", + "version": "1.2.2", "description": "Cross-platform desktop AI chat client — OpenAI, Anthropic, LM Studio, and MCP tool servers", "main": ".vite/build/main.js", "private": true, diff --git a/packages/desktop/src/main/mcp/client.ts b/packages/desktop/src/main/mcp/client.ts index f769710..b605a02 100644 --- a/packages/desktop/src/main/mcp/client.ts +++ b/packages/desktop/src/main/mcp/client.ts @@ -35,7 +35,7 @@ export async function connectMcpServer(config: McpServerConfig): Promise { transport = new StdioClientTransport({ command: config.command, args: config.args ?? [], - env: config.env, + env: { ...process.env, ...config.env }, }); }