Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,38 @@ jobs:
retention-days: 7
path: packages/*/.artifacts/unit/junit.xml

desktop-smoke:
name: desktop-smoke (macos)
# The prevent-sleep smoke drives the real packaged main bundle through Playwright and asserts
# against pmset, so it needs a macOS runner with a window server; keep it out of the unit matrix.
runs-on: macos-14
defaults:
run:
shell: bash
steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "24"

- name: Setup Bun
uses: ./.github/actions/setup-bun

- name: Build desktop main bundle
working-directory: packages/desktop
run: bun run build
timeout-minutes: 15

- name: Run prevent-sleep smoke
working-directory: packages/desktop
run: bun run test:prevent-sleep-smoke
timeout-minutes: 10

e2e:
name: e2e (${{ matrix.settings.name }})
strategy:
Expand Down
34 changes: 34 additions & 0 deletions packages/app/src/components/settings-v2/general.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,12 @@ export const SettingsGeneralV2: Component = () => {
{ initialValue: false },
)

const [preventSleep, { mutate: setPreventSleep }] = createResource(
() => (desktop() && platform.getPreventSleepEnabled ? true : false),
() => Promise.resolve(platform.getPreventSleepEnabled?.() ?? true).catch(() => true),
{ initialValue: true },
)

onMount(() => {
void theme.loadThemes()
})
Expand Down Expand Up @@ -252,6 +258,13 @@ export const SettingsGeneralV2: Component = () => {
void update.catch(() => setPinchZoom(!checked))
}

const onPreventSleepChange = (checked: boolean) => {
setPreventSleep(checked)
const update = platform.setPreventSleepEnabled?.(checked)
if (!update) return
void update.catch(() => setPreventSleep(!checked))
}

const colorSchemeOptions = createMemo((): { value: ColorScheme; label: string }[] => [
{ value: "system", label: language.t("theme.scheme.system") },
{ value: "light", label: language.t("theme.scheme.light") },
Expand Down Expand Up @@ -915,6 +928,25 @@ export const SettingsGeneralV2: Component = () => {
</Show>
)

const PowerSection = () => (
<Show when={desktop()}>
<div class="settings-v2-section">
<h3 class="settings-v2-section-title">{language.t("settings.general.section.power")}</h3>

<SettingsListV2>
<SettingsRowV2
title={language.t("settings.general.row.preventSleep.title")}
description={language.t("settings.general.row.preventSleep.description")}
>
<div data-action="settings-prevent-sleep">
<Switch checked={preventSleep.latest} onChange={onPreventSleepChange} />
</div>
</SettingsRowV2>
</SettingsListV2>
</div>
</Show>
)

return (
<>
<div class="settings-v2-tab-header">
Expand All @@ -940,6 +972,8 @@ export const SettingsGeneralV2: Component = () => {

<DisplaySection />

<PowerSection />

<ImportSection />
</div>
</>
Expand Down
6 changes: 6 additions & 0 deletions packages/app/src/context/platform.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,12 @@ type PlatformBase = {
/** Allow native pinch/Ctrl-scroll zoom gestures (desktop only) */
setPinchZoomEnabled?(enabled: boolean): Promise<void> | void

/** Get whether the app keeps the system awake while running (desktop only) */
getPreventSleepEnabled?(): Promise<boolean> | boolean

/** Keep the system awake while the app is running (desktop only) */
setPreventSleepEnabled?(enabled: boolean): Promise<void> | void

/** Run a desktop-only menu action from the app chrome */
runDesktopMenuAction?(action: DesktopMenuAction): Promise<void> | void

Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "تفعيل لجنة الخبراء افتراضيًا",
"settings.general.row.expertPanelDefault.description": "بدء المحادثات الجديدة مع تفعيل لجنة الخبراء، بحيث يبدأ زرها مراجعة السياق الحالي عند الطلب.",
"settings.general.section.display": "شاشة العرض",
"settings.general.section.power": "الطاقة",
"settings.general.row.language.title": "اللغة",
"settings.general.row.language.description": "تغيير لغة العرض لـ DeepAgent Code",
"settings.general.row.appearance.title": "المظهر",
Expand Down Expand Up @@ -930,6 +931,8 @@ export const dict = {
"تفعيل التخطيط والصفحة الرئيسية والمحرر وواجهة الجلسة المعاد تصميمها",
"settings.general.row.pinchZoom.title": "التكبير بالقرص",
"settings.general.row.pinchZoom.description": "السماح بإيماءات قرص لوحة اللمس و Ctrl-تمرير للتكبير",
"settings.general.row.preventSleep.title": "منع سكون النظام",
"settings.general.row.preventSleep.description": "إبقاء النظام مستيقظًا أثناء تشغيل التطبيق؛ ويمكن أن تنطفئ الشاشة",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "جار التنزيل...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/br.ts
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Ativar painel de especialistas por padrão",
"settings.general.row.expertPanelDefault.description": "Iniciar novas conversas com o painel de especialistas ativado, para que seu botão inicie uma revisão do contexto atual sob demanda.",
"settings.general.section.display": "Tela",
"settings.general.section.power": "Energia",
"settings.general.row.language.title": "Idioma",
"settings.general.row.language.description": "Alterar o idioma de exibição do DeepAgent Code",
"settings.general.row.appearance.title": "Aparência",
Expand Down Expand Up @@ -954,6 +955,8 @@ export const dict = {
"settings.general.row.pinchZoom.title": "Pinçar para zoom",
"settings.general.row.pinchZoom.description":
"Permitir gestos de pellizco en trackpad y Ctrl-desplazamiento para ampliar",
"settings.general.row.preventSleep.title": "Impedir suspensão do sistema",
"settings.general.row.preventSleep.description": "Manter o sistema ativo enquanto o app está em execução; a tela ainda pode desligar",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Baixando...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/bs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Zadano uključi ekspertni panel",
"settings.general.row.expertPanelDefault.description": "Pokreni nove razgovore s uključenim ekspertnim panelom, tako da njegovo dugme po potrebi pokreće pregled trenutnog konteksta.",
"settings.general.section.display": "Prikaz",
"settings.general.section.power": "Napajanje",

"settings.general.row.language.title": "Jezik",
"settings.general.row.language.description": "Promijeni jezik prikaza u DeepAgent Code-u",
Expand Down Expand Up @@ -1027,6 +1028,8 @@ export const dict = {
"settings.general.row.pinchZoom.title": "Powiększanie gestem szczypania",
"settings.general.row.pinchZoom.description":
"Zezwól na powiększanie gestem szczypania na trackpadzie i Ctrl-przewijaniem",
"settings.general.row.preventSleep.title": "Spriječi mirovanje sistema",
"settings.general.row.preventSleep.description": "Zadržava sistem budnim dok je aplikacija pokrenuta; ekran se i dalje može ugasiti",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Preuzimanje...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Aktivér ekspertpanel som standard",
"settings.general.row.expertPanelDefault.description": "Start nye samtaler med ekspertpanelet aktiveret, så knappen kan gennemgå den aktuelle kontekst efter behov.",
"settings.general.section.display": "Skærm",
"settings.general.section.power": "Strøm",

"settings.general.row.language.title": "Sprog",
"settings.general.row.language.description": "Ændr visningssproget for DeepAgent Code",
Expand Down Expand Up @@ -1016,6 +1017,8 @@ export const dict = {
"settings.general.row.newLayoutDesigns.description": "Aktivér det redesignede layout, hjem, composer og sessions-UI",
"settings.general.row.pinchZoom.title": "Knib for at zoome",
"settings.general.row.pinchZoom.description": "Tillad trackpad-knib og Ctrl-scroll til zoom",
"settings.general.row.preventSleep.title": "Forhindr dvale",
"settings.general.row.preventSleep.description": "Hold systemet vågent, mens appen kører; skærmen kan stadig slukkes",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Downloader...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Expertengremium standardmäßig aktivieren",
"settings.general.row.expertPanelDefault.description": "Neue Unterhaltungen mit aktiviertem Expertengremium starten, damit dessen Schaltfläche den aktuellen Kontext bei Bedarf prüft.",
"settings.general.section.display": "Anzeige",
"settings.general.section.power": "Energie",
"settings.general.row.language.title": "Sprache",
"settings.general.row.language.description": "Die Anzeigesprache für DeepAgent Code ändern",
"settings.general.row.appearance.title": "Erscheinungsbild",
Expand Down Expand Up @@ -961,6 +962,8 @@ export const dict = {
"Überarbeitetes Layout, Startseite, Composer und Sitzungs-UI aktivieren",
"settings.general.row.pinchZoom.title": "Zum Zoomen kneifen",
"settings.general.row.pinchZoom.description": "Trackpad-Kneifen und Strg-Scrollen zum Zoomen erlauben",
"settings.general.row.preventSleep.title": "Ruhezustand des Systems verhindern",
"settings.general.row.preventSleep.description": "Hält das System wach, solange die App läuft; der Bildschirm kann sich weiterhin ausschalten",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Wird heruntergeladen...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1204,6 +1204,7 @@ export const dict = {
"settings.general.section.sounds": "Sound effects",
"settings.general.section.feed": "Feed",
"settings.general.section.display": "Display",
"settings.general.section.power": "Power",
"settings.general.section.sharing": "Sharing",

"settings.general.row.language.title": "Language",
Expand Down Expand Up @@ -1367,6 +1368,8 @@ export const dict = {
"settings.general.row.newLayoutDesigns.description": "Enable the redesigned layout, home, composer, and session UI",
"settings.general.row.pinchZoom.title": "Pinch to zoom",
"settings.general.row.pinchZoom.description": "Allow trackpad pinch and Ctrl-scroll gestures to zoom",
"settings.general.row.preventSleep.title": "Prevent system sleep",
"settings.general.row.preventSleep.description": "Keep the system awake while the app is running; the display can still turn off",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",

Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Activar el panel de expertos por defecto",
"settings.general.row.expertPanelDefault.description": "Iniciar nuevas conversaciones con el panel de expertos activado, para que su botón revise el contexto actual cuando se solicite.",
"settings.general.section.display": "Pantalla",
"settings.general.section.power": "Energía",

"settings.general.row.language.title": "Idioma",
"settings.general.row.language.description": "Cambiar el idioma de visualización para DeepAgent Code",
Expand Down Expand Up @@ -1037,6 +1038,8 @@ export const dict = {
"settings.general.row.pinchZoom.title": "Pellizcar para ampliar",
"settings.general.row.pinchZoom.description":
"Permitir gestos de pellizco en trackpad y Ctrl-desplazamiento para ampliar",
"settings.general.row.preventSleep.title": "Evitar la suspensión del sistema",
"settings.general.row.preventSleep.description": "Mantener el sistema activo mientras la app está en ejecución; la pantalla aún puede apagarse",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Descargando...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Activer le panel d'experts par défaut",
"settings.general.row.expertPanelDefault.description": "Démarrer les nouvelles conversations avec le panel d'experts activé, afin que son bouton examine le contexte actuel à la demande.",
"settings.general.section.display": "Affichage",
"settings.general.section.power": "Alimentation",
"settings.general.row.language.title": "Langue",
"settings.general.row.language.description": "Changer la langue d'affichage pour DeepAgent Code",
"settings.general.row.appearance.title": "Apparence",
Expand Down Expand Up @@ -962,6 +963,8 @@ export const dict = {
"Activer la mise en page, l’accueil, le compositeur et l’interface de session repensés",
"settings.general.row.pinchZoom.title": "Pincer pour zoomer",
"settings.general.row.pinchZoom.description": "Autoriser le pincement du trackpad et Ctrl-défilement pour zoomer",
"settings.general.row.preventSleep.title": "Empêcher la mise en veille du système",
"settings.general.row.preventSleep.description": "Garde le système actif pendant que l'app est en cours d'exécution ; l'écran peut toujours s'éteindre",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Téléchargement...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "エキスパートパネルをデフォルトで有効化",
"settings.general.row.expertPanelDefault.description": "新しい会話をエキスパートパネル有効の状態で開始し、ボタンで現在のコンテキストをいつでも会議レビューできるようにします。",
"settings.general.section.display": "ディスプレイ",
"settings.general.section.power": "電源",
"settings.general.row.language.title": "言語",
"settings.general.row.language.description": "DeepAgent Codeの表示言語を変更します",
"settings.general.row.appearance.title": "外観",
Expand Down Expand Up @@ -943,6 +944,8 @@ export const dict = {
"再設計されたレイアウト、ホーム、コンポーザー、セッションUIを有効にします",
"settings.general.row.pinchZoom.title": "ピンチでズーム",
"settings.general.row.pinchZoom.description": "トラックパッドのピンチとCtrlスクロールでズームを許可します",
"settings.general.row.preventSleep.title": "システムのスリープを防止",
"settings.general.row.preventSleep.description": "アプリの実行中はシステムをスリープさせません。ディスプレイはオフにできます",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "ダウンロード中...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "전문가 패널을 기본으로 활성화",
"settings.general.row.expertPanelDefault.description": "새 대화를 전문가 패널이 활성화된 상태로 시작하여 버튼으로 현재 컨텍스트를 필요할 때 검토할 수 있게 합니다.",
"settings.general.section.display": "디스플레이",
"settings.general.section.power": "전원",
"settings.general.row.language.title": "언어",
"settings.general.row.language.description": "DeepAgent Code 표시 언어 변경",
"settings.general.row.appearance.title": "모양",
Expand Down Expand Up @@ -934,6 +935,8 @@ export const dict = {
"settings.general.row.newLayoutDesigns.description": "재설계된 레이아웃, 홈, 작성기 및 세션 UI를 활성화합니다",
"settings.general.row.pinchZoom.title": "핀치로 확대/축소",
"settings.general.row.pinchZoom.description": "트랙패드 핀치와 Ctrl-스크롤 제스처로 확대/축소를 허용합니다",
"settings.general.row.preventSleep.title": "시스템 절전 방지",
"settings.general.row.preventSleep.description": "앱이 실행되는 동안 시스템을 절전 상태로 전환하지 않습니다. 디스플레이는 꺼질 수 있습니다",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "다운로드 중...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/no.ts
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Aktiver ekspertpanel som standard",
"settings.general.row.expertPanelDefault.description": "Start nye samtaler med ekspertpanelet aktivert, slik at knappen kan gjennomgå gjeldende kontekst ved behov.",
"settings.general.section.display": "Skjerm",
"settings.general.section.power": "Strøm",

"settings.general.row.language.title": "Språk",
"settings.general.row.language.description": "Endre visningsspråket for DeepAgent Code",
Expand Down Expand Up @@ -1023,6 +1024,8 @@ export const dict = {
"settings.general.row.newLayoutDesigns.description": "Aktivér det redesignede layout, hjem, composer og sessions-UI",
"settings.general.row.pinchZoom.title": "Knib for at zoome",
"settings.general.row.pinchZoom.description": "Tillad trackpad-knib og Ctrl-scroll til zoom",
"settings.general.row.preventSleep.title": "Forhindre hvilemodus",
"settings.general.row.preventSleep.description": "Hold systemet våkent mens appen kjører; skjermen kan fortsatt slås av",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Laster ned...",
Expand Down
3 changes: 3 additions & 0 deletions packages/app/src/i18n/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,7 @@ export const dict = {
"settings.general.row.expertPanelDefault.title": "Domyślnie włącz panel ekspertów",
"settings.general.row.expertPanelDefault.description": "Rozpoczynaj nowe rozmowy z włączonym panelem ekspertów, aby jego przycisk mógł na żądanie przeglądać bieżący kontekst.",
"settings.general.section.display": "Ekran",
"settings.general.section.power": "Zasilanie",
"settings.general.row.language.title": "Język",
"settings.general.row.language.description": "Zmień język wyświetlania dla DeepAgent Code",
"settings.general.row.appearance.title": "Wygląd",
Expand Down Expand Up @@ -949,6 +950,8 @@ export const dict = {
"settings.general.row.pinchZoom.title": "Powiększanie gestem szczypania",
"settings.general.row.pinchZoom.description":
"Zezwól na powiększanie gestem szczypania na trackpadzie i Ctrl-przewijaniem",
"settings.general.row.preventSleep.title": "Zapobiegaj uśpieniu systemu",
"settings.general.row.preventSleep.description": "Utrzymuj system aktywny, gdy aplikacja jest uruchomiona; ekran nadal może się wyłączyć",
"settings.general.row.zoom.title": "Zoom level",
"settings.general.row.zoom.description": "Set the interface zoom level",
"settings.updates.action.downloading": "Pobieranie...",
Expand Down
Loading
Loading