- {/* Electron App Update Section */}
+ {/* Current Version Display */}
+
+
+
+
{t('updates.version')}
+
+ {version || t('updates.loading')}
+
+
+ {isCheckingAppUpdate ? (
+
+ ) : appUpdateInfo ? (
+
+ ) : (
+
+ )}
+
+
+ {/* Update status */}
+ {!appUpdateInfo && !isCheckingAppUpdate && (
+
+ {t('updates.latestVersion')}
+
+ )}
+
+
+
+
+
+
+ {/* Electron App Update Section - shows when update available */}
{(appUpdateInfo || isAppUpdateDownloaded) && (
@@ -302,113 +312,6 @@ export function AdvancedSettings({ settings, onSettingsChange, section, version
)}
- {/* Unified Version Display with Update Check */}
-
-
-
-
{t('updates.version')}
-
- {displayVersion || t('updates.loading')}
-
-
- {isCheckingSourceUpdate ? (
-
- ) : sourceUpdateCheck?.updateAvailable ? (
-
- ) : (
-
- )}
-
-
- {/* Update status */}
- {isCheckingSourceUpdate ? (
-
- {t('updates.checkingForUpdates')}
-
- ) : sourceUpdateCheck ? (
- <>
- {sourceUpdateCheck.latestVersion && sourceUpdateCheck.updateAvailable && (
-
- {t('updates.newVersionAvailable')} {sourceUpdateCheck.latestVersion}
-
- )}
-
- {sourceUpdateCheck.error && (
-
{sourceUpdateCheck.error}
- )}
-
- {!sourceUpdateCheck.updateAvailable && !sourceUpdateCheck.error && (
-
- {t('updates.latestVersion')}
-
- )}
-
- {sourceUpdateCheck.updateAvailable && (
-
- {sourceUpdateCheck.releaseNotes && (
-
-
-
- )}
-
- {sourceUpdateCheck.releaseUrl && (
-
- )}
-
- {isDownloadingUpdate ? (
-
-
-
- {downloadProgress?.message || 'Downloading...'}
-
- {downloadProgress?.percent !== undefined && (
-
- )}
-
- ) : downloadProgress?.stage === 'complete' ? (
-
-
- {downloadProgress.message}
-
- ) : downloadProgress?.stage === 'error' ? (
-
-
-
{downloadProgress.message}
-
- ) : (
-
- )}
-
- )}
- >
- ) : (
-
- {t('updates.unableToCheck')}
-
- )}
-
-
-
-
-
-
@@ -433,11 +336,113 @@ export function AdvancedSettings({ settings, onSettingsChange, section, version
- onSettingsChange({ ...settings, betaUpdates: checked })
- }
+ onCheckedChange={(checked) => {
+ onSettingsChange({ ...settings, betaUpdates: checked });
+ if (checked) {
+ // Clear downgrade info when enabling beta again
+ setStableDowngradeInfo(null);
+ } else {
+ // Clear beta update info when disabling beta, so stable downgrade UI can show
+ setAppUpdateInfo(null);
+ }
+ }}
/>
+
+ {/* Stable Downgrade Section - shown when user turns off beta while on prerelease */}
+ {stableDowngradeInfo && !appUpdateInfo && (
+
+
+
+
+
{t('updates.stableDowngradeAvailable')}
+
+
+
+
+
+ {t('updates.stableDowngradeDescription')}
+
+
+
+
+
+ {t('updates.stableVersion')}
+
+
+ {stableDowngradeInfo.version}
+
+ {stableDowngradeInfo.releaseDate && (
+
+ {t('updates.released')} {new Date(stableDowngradeInfo.releaseDate).toLocaleDateString()}
+
+ )}
+
+ {isDownloadingAppUpdate ? (
+
+ ) : (
+
+ )}
+
+
+ {/* Release Notes */}
+ {stableDowngradeInfo.releaseNotes && (
+
+
+
+ )}
+
+ {/* Download Progress */}
+ {isDownloadingAppUpdate && appDownloadProgress && (
+
+
+ {t('updates.downloading')}
+
+ {Math.round(appDownloadProgress.percent)}%
+
+
+
+
+ {(appDownloadProgress.transferred / 1024 / 1024).toFixed(2)} MB / {(appDownloadProgress.total / 1024 / 1024).toFixed(2)} MB
+
+
+ )}
+
+ {/* Action Buttons */}
+
+
+
+
+
+ )}
);
diff --git a/apps/frontend/src/renderer/lib/mocks/infrastructure-mock.ts b/apps/frontend/src/renderer/lib/mocks/infrastructure-mock.ts
index 057daf94..81168fa0 100644
--- a/apps/frontend/src/renderer/lib/mocks/infrastructure-mock.ts
+++ b/apps/frontend/src/renderer/lib/mocks/infrastructure-mock.ts
@@ -174,28 +174,6 @@ export const infrastructureMock = {
onIdeationTypeComplete: () => () => {},
onIdeationTypeFailed: () => () => {},
- // Auto-Build Source Update Operations
- checkAutoBuildSourceUpdate: async () => ({
- success: true,
- data: {
- updateAvailable: true,
- currentVersion: '1.0.0',
- latestVersion: '1.1.0',
- releaseNotes: '## v1.1.0\n\n- New feature: Enhanced spec creation\n- Bug fix: Improved error handling\n- Performance improvements'
- }
- }),
-
- downloadAutoBuildSourceUpdate: () => {
- console.warn('[Browser Mock] downloadAutoBuildSourceUpdate called');
- },
-
- getAutoBuildSourceVersion: async () => ({
- success: true,
- data: '1.0.0'
- }),
-
- onAutoBuildSourceUpdateProgress: () => () => {},
-
// Shell Operations
openExternal: async (url: string) => {
console.warn('[Browser Mock] openExternal:', url);
diff --git a/apps/frontend/src/renderer/lib/mocks/settings-mock.ts b/apps/frontend/src/renderer/lib/mocks/settings-mock.ts
index 035789d6..97c83313 100644
--- a/apps/frontend/src/renderer/lib/mocks/settings-mock.ts
+++ b/apps/frontend/src/renderer/lib/mocks/settings-mock.ts
@@ -36,10 +36,12 @@ export const settingsMock = {
// App Update Operations (mock - no updates in browser mode)
checkAppUpdate: async () => ({ success: true, data: null }),
downloadAppUpdate: async () => ({ success: true }),
+ downloadStableUpdate: async () => ({ success: true }),
installAppUpdate: () => { console.warn('[browser-mock] installAppUpdate called'); },
// App Update Event Listeners (no-op in browser mode)
onAppUpdateAvailable: () => () => {},
onAppUpdateDownloaded: () => () => {},
- onAppUpdateProgress: () => () => {}
+ onAppUpdateProgress: () => () => {},
+ onAppUpdateStableDowngrade: () => () => {}
};
diff --git a/apps/frontend/src/shared/constants/ipc.ts b/apps/frontend/src/shared/constants/ipc.ts
index 3b369d33..6c244d6d 100644
--- a/apps/frontend/src/shared/constants/ipc.ts
+++ b/apps/frontend/src/shared/constants/ipc.ts
@@ -400,12 +400,6 @@ export const IPC_CHANNELS = {
OLLAMA_PULL_MODEL: 'ollama:pullModel',
OLLAMA_PULL_PROGRESS: 'ollama:pullProgress',
- // Auto Claude source updates
- AUTOBUILD_SOURCE_CHECK: 'autobuild:source:check',
- AUTOBUILD_SOURCE_DOWNLOAD: 'autobuild:source:download',
- AUTOBUILD_SOURCE_VERSION: 'autobuild:source:version',
- AUTOBUILD_SOURCE_PROGRESS: 'autobuild:source:progress',
-
// Auto Claude source environment configuration
AUTOBUILD_SOURCE_ENV_GET: 'autobuild:source:env:get',
AUTOBUILD_SOURCE_ENV_UPDATE: 'autobuild:source:env:update',
@@ -463,6 +457,7 @@ export const IPC_CHANNELS = {
// App auto-update operations
APP_UPDATE_CHECK: 'app-update:check',
APP_UPDATE_DOWNLOAD: 'app-update:download',
+ APP_UPDATE_DOWNLOAD_STABLE: 'app-update:download-stable', // Download stable version (for downgrade from beta)
APP_UPDATE_INSTALL: 'app-update:install',
APP_UPDATE_GET_VERSION: 'app-update:get-version',
@@ -471,6 +466,7 @@ export const IPC_CHANNELS = {
APP_UPDATE_DOWNLOADED: 'app-update:downloaded',
APP_UPDATE_PROGRESS: 'app-update:progress',
APP_UPDATE_ERROR: 'app-update:error',
+ APP_UPDATE_STABLE_DOWNGRADE: 'app-update:stable-downgrade', // Stable version available for downgrade from beta
// Release operations
RELEASE_SUGGEST_VERSION: 'release:suggestVersion',
diff --git a/apps/frontend/src/shared/i18n/locales/en/settings.json b/apps/frontend/src/shared/i18n/locales/en/settings.json
index 03bc7767..c1399915 100644
--- a/apps/frontend/src/shared/i18n/locales/en/settings.json
+++ b/apps/frontend/src/shared/i18n/locales/en/settings.json
@@ -161,7 +161,11 @@
"autoUpdateProjects": "Auto-Update Projects",
"autoUpdateProjectsDescription": "Automatically update Auto Claude in projects when a new version is available",
"betaUpdates": "Beta Updates",
- "betaUpdatesDescription": "Receive pre-release beta versions with new features (may be less stable)"
+ "betaUpdatesDescription": "Receive pre-release beta versions with new features (may be less stable)",
+ "stableDowngradeAvailable": "Stable Version Available",
+ "stableDowngradeDescription": "You're currently on a beta version. Since you've disabled beta updates, you can switch to the latest stable release.",
+ "stableVersion": "Stable Version",
+ "downloadStableVersion": "Download Stable Version"
},
"notifications": {
"title": "Notifications",
diff --git a/apps/frontend/src/shared/i18n/locales/fr/settings.json b/apps/frontend/src/shared/i18n/locales/fr/settings.json
index 58954c84..dfe33ce6 100644
--- a/apps/frontend/src/shared/i18n/locales/fr/settings.json
+++ b/apps/frontend/src/shared/i18n/locales/fr/settings.json
@@ -161,7 +161,11 @@
"autoUpdateProjects": "Mise à jour automatique des projets",
"autoUpdateProjectsDescription": "Mettre à jour automatiquement Auto Claude dans les projets quand une nouvelle version est disponible",
"betaUpdates": "Mises à jour bêta",
- "betaUpdatesDescription": "Recevoir les versions bêta pré-release avec de nouvelles fonctionnalités (peut être moins stable)"
+ "betaUpdatesDescription": "Recevoir les versions bêta pré-release avec de nouvelles fonctionnalités (peut être moins stable)",
+ "stableDowngradeAvailable": "Version stable disponible",
+ "stableDowngradeDescription": "Vous êtes actuellement sur une version bêta. Comme vous avez désactivé les mises à jour bêta, vous pouvez passer à la dernière version stable.",
+ "stableVersion": "Version stable",
+ "downloadStableVersion": "Télécharger la version stable"
},
"notifications": {
"title": "Notifications",
diff --git a/apps/frontend/src/shared/types/ipc.ts b/apps/frontend/src/shared/types/ipc.ts
index 3fc02ea0..c238d0db 100644
--- a/apps/frontend/src/shared/types/ipc.ts
+++ b/apps/frontend/src/shared/types/ipc.ts
@@ -62,7 +62,7 @@ import type {
ClaudeAuthResult,
ClaudeUsageSnapshot
} from './agent';
-import type { AppSettings, SourceEnvConfig, SourceEnvCheckResult, AutoBuildSourceUpdateCheck, AutoBuildSourceUpdateProgress } from './settings';
+import type { AppSettings, SourceEnvConfig, SourceEnvCheckResult } from './settings';
import type { AppUpdateInfo, AppUpdateProgress, AppUpdateAvailableEvent, AppUpdateDownloadedEvent } from './app-update';
import type {
ChangelogTask,
@@ -567,19 +567,10 @@ export interface ElectronAPI {
callback: (projectId: string, ideationType: string) => void
) => () => void;
- // Auto Claude source update operations
- checkAutoBuildSourceUpdate: () => Promise
>;
- downloadAutoBuildSourceUpdate: () => void;
- getAutoBuildSourceVersion: () => Promise>;
-
- // Auto Claude source update event listeners
- onAutoBuildSourceUpdateProgress: (
- callback: (progress: AutoBuildSourceUpdateProgress) => void
- ) => () => void;
-
// Electron app update operations
checkAppUpdate: () => Promise>;
downloadAppUpdate: () => Promise;
+ downloadStableUpdate: () => Promise;
installAppUpdate: () => void;
// Electron app update event listeners
@@ -592,6 +583,9 @@ export interface ElectronAPI {
onAppUpdateProgress: (
callback: (progress: AppUpdateProgress) => void
) => () => void;
+ onAppUpdateStableDowngrade: (
+ callback: (info: AppUpdateInfo) => void
+ ) => () => void;
// Shell operations
openExternal: (url: string) => Promise;
diff --git a/apps/frontend/src/shared/types/settings.ts b/apps/frontend/src/shared/types/settings.ts
index 6dc0eaa1..ac666304 100644
--- a/apps/frontend/src/shared/types/settings.ts
+++ b/apps/frontend/src/shared/types/settings.ts
@@ -294,27 +294,3 @@ export interface SourceEnvCheckResult {
sourcePath?: string;
error?: string;
}
-
-// Auto Claude Source Update Types
-export interface AutoBuildSourceUpdateCheck {
- updateAvailable: boolean;
- currentVersion: string;
- latestVersion?: string;
- releaseNotes?: string;
- releaseUrl?: string;
- error?: string;
-}
-
-export interface AutoBuildSourceUpdateResult {
- success: boolean;
- version?: string;
- error?: string;
-}
-
-export interface AutoBuildSourceUpdateProgress {
- stage: 'checking' | 'downloading' | 'extracting' | 'complete' | 'error';
- percent?: number;
- message: string;
- /** New version after successful update - used to refresh UI */
- newVersion?: string;
-}
diff --git a/guides/CLI-USAGE.md b/guides/CLI-USAGE.md
index 13008a87..c0c50785 100644
--- a/guides/CLI-USAGE.md
+++ b/guides/CLI-USAGE.md
@@ -182,7 +182,35 @@ python validate_spec.py --spec-dir specs/001-feature --checkpoint all
## Environment Variables
+Copy `.env.example` to `.env` and configure as needed:
+
+```bash
+cp .env.example .env
+```
+
+### Core Settings
+
| Variable | Required | Description |
|----------|----------|-------------|
| `CLAUDE_CODE_OAUTH_TOKEN` | Yes | OAuth token from `claude setup-token` |
| `AUTO_BUILD_MODEL` | No | Model override (default: claude-opus-4-5-20251101) |
+| `DEFAULT_BRANCH` | No | Base branch for worktrees (auto-detects main/master) |
+| `DEBUG` | No | Enable debug logging (default: false) |
+
+### Integrations
+
+| Variable | Required | Description |
+|----------|----------|-------------|
+| `LINEAR_API_KEY` | No | Linear API key for task sync |
+| `GITLAB_TOKEN` | No | GitLab Personal Access Token |
+| `GITLAB_INSTANCE_URL` | No | GitLab instance URL (defaults to gitlab.com) |
+
+### Memory Layer (Graphiti)
+
+| Variable | Required | Description |
+|----------|----------|-------------|
+| `GRAPHITI_ENABLED` | No | Enable Memory Layer (default: true) |
+| `GRAPHITI_LLM_PROVIDER` | No | LLM provider: openai, anthropic, ollama, google, openrouter |
+| `GRAPHITI_EMBEDDER_PROVIDER` | No | Embedder: openai, voyage, ollama, google, openrouter |
+
+See `.env.example` for complete configuration options including provider-specific settings.
diff --git a/guides/linux.md b/guides/linux.md
new file mode 100644
index 00000000..077179f5
--- /dev/null
+++ b/guides/linux.md
@@ -0,0 +1,95 @@
+# Linux Installation & Building Guide
+
+This guide covers Linux-specific installation options and building from source.
+
+## Flatpak Installation
+
+Flatpak packages are available for Linux users who prefer sandboxed applications.
+
+### Download Flatpak
+
+See the [main README](../README.md#beta-release) for Flatpak download links in the Beta Release section.
+
+### Building Flatpak from Source
+
+To build the Flatpak package yourself, you need additional dependencies:
+
+```bash
+# Fedora/RHEL
+sudo dnf install flatpak-builder
+
+# Ubuntu/Debian
+sudo apt install flatpak-builder
+
+# Install required Flatpak runtimes
+flatpak install flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08
+flatpak install flathub org.electronjs.Electron2.BaseApp//25.08
+
+# Build the Flatpak
+cd apps/frontend
+npm run package:flatpak
+```
+
+The Flatpak will be created in `apps/frontend/dist/`.
+
+### Installing the Built Flatpak
+
+After building, install the Flatpak locally:
+
+```bash
+flatpak install --user apps/frontend/dist/Auto-Claude-*.flatpak
+```
+
+### Running from Flatpak
+
+```bash
+flatpak run com.autoclaude.AutoClaude
+```
+
+## Other Linux Packages
+
+### AppImage
+
+AppImage files are portable and don't require installation:
+
+```bash
+# Make executable
+chmod +x Auto-Claude-*-linux-x86_64.AppImage
+
+# Run
+./Auto-Claude-*-linux-x86_64.AppImage
+```
+
+### Debian Package (.deb)
+
+For Ubuntu/Debian systems:
+
+```bash
+sudo dpkg -i Auto-Claude-*-linux-amd64.deb
+```
+
+## Troubleshooting
+
+### Flatpak Runtime Issues
+
+If you encounter runtime issues with Flatpak:
+
+```bash
+# Update runtimes
+flatpak update
+
+# Check for missing runtimes
+flatpak list --runtime
+```
+
+### AppImage Not Starting
+
+If the AppImage doesn't start:
+
+```bash
+# Check for missing libraries
+ldd ./Auto-Claude-*-linux-x86_64.AppImage
+
+# Try running with debug output
+./Auto-Claude-*-linux-x86_64.AppImage --verbose
+```