Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
05b7226
perf(release): fetch the nightly Android APK in a background step (#3…
t3dotgg Nov 6, 2026
423254e
perf(release): macOS CLI notarization no longer blocks the desktop bu…
t3dotgg Nov 6, 2026
cb8e0de
ci(release): npm publish no longer checks out and installs the worksp…
t3dotgg Nov 6, 2026
b90e554
ci(release): macOS arm64 stops compressing a pnpm store it cannot sav…
t3dotgg Nov 6, 2026
d5fc29f
fix(web): relay-connected microphone destinations authorize speech re…
juliusmarminge Nov 6, 2026
240446e
fix(server): a usage-limit auto-resume survives a server restart (#31…
shivamhwp Nov 7, 2026
e0ec11b
fix(mobile): review diff no longer goes blank after switching section…
juliusmarminge Nov 7, 2026
0bba368
fix(mobile): iOS filter menus close back into their pill without clip…
juliusmarminge Nov 7, 2026
23bdb9e
fix(mobile): Android composer renders DM Sans (#30230)
juliusmarminge Nov 7, 2026
d944e2a
fix(desktop): open Teams web in the preview browser (#31489)
shivamhwp Nov 7, 2026
07508ff
fix(web): popovers over the desktop header respond to the pointer (#3…
shivamhwp Nov 7, 2026
b19c9f0
fix(web): add installable icons for Firefox on Android (#30420)
shivamhwp Nov 7, 2026
08a3909
fix: show latest reply age in active thread rows (#31825)
shivamhwp Nov 7, 2026
4cb6945
fix(mobile): keep settled status pills readable (#31635)
shivamhwp Nov 7, 2026
9f2bb98
fix(mobile): preserve line breaks in Markdown table cells (#29355)
shivamhwp Nov 7, 2026
006d7e3
fix(mobile): stop the work-row shimmer from updating every frame (#28…
shivamhwp Nov 7, 2026
33f8584
fix(server): t3 service install no longer moves a --base-dir service …
shivamhwp Nov 7, 2026
fe901ac
feat(voice): opt into cloud dictation with OpenAI, Grok, or OpenRoute…
juliusmarminge Nov 7, 2026
4bd82b2
fix(web): make first-run dictation setup discoverable (#32197)
juliusmarminge Nov 7, 2026
15b7275
fix(web): first-run voice setup offers a model for the user's languag…
juliusmarminge Nov 7, 2026
d4247a5
feat: auto-settle inactive threads after 7 days by default (#32325)
t3dotgg Nov 7, 2026
faeed8c
docs(updates): say when Update all leaves a provider out (#32269)
Djordje-Stojanovic Nov 7, 2026
d5c2c12
test(server): three more tests stop assuming a POSIX host (#32263)
MikaMcFlurry Nov 7, 2026
f901c37
fix(server): git failures are read in English when macOS git follows …
jason5545 Nov 7, 2026
f4c8854
fix(marketing): balance fork and download heading text (#32194)
extoci Nov 7, 2026
984fe2d
perf(shared): scan usage-limit support once per provider catalog (#32…
luke2x Nov 7, 2026
257e407
fix(pi): the T3 MCP extension file is written atomically (#32231)
rishabhx29 Nov 7, 2026
f8c7c75
fix(web): the main sidebar stays collapsed after relaunch (#24202)
shivamhwp Nov 7, 2026
0f4a130
fix(codex): explain speed limits on managed connections (#30322)
shivamhwp Nov 7, 2026
83a3674
fix(web): isolate scrollbar styles from iframe owners (#32398)
Yash-Singh1 Nov 7, 2026
fad24fc
fix(azure-devops): default-branch lookup no longer fails for missing …
voltcrash Nov 7, 2026
bc46c0f
perf(server): avoid lsof polling when Linux proc is usable (#30011)
voltcrash Nov 7, 2026
1b95213
fix(providers): remove incomplete ChatGPT connections (#29280)
voltcrash Nov 7, 2026
fd1adc8
fix(acp): retain streamed child tool output (#32411)
StiensWout Nov 7, 2026
7f7bf26
fix(web): recover ACP settings when projects change (#32409)
StiensWout Nov 7, 2026
48bb784
fix(shared): inline code like `allocator.cc:217` becomes a file chip …
felixlaga Nov 7, 2026
ce9b806
fix(server): theme files saved with a UTF-8 BOM are published instead…
felixlaga Nov 7, 2026
a975217
fix(grok): long command titles no longer end in a broken character (#…
felixlaga Nov 7, 2026
95e7dbf
fix(github): keep review-required until required reviewers approve (#…
wSedlacek Nov 7, 2026
c864b1c
feat(web): delete archived threads from the archive page (#22160)
voltcrash Nov 7, 2026
2d0a9df
fix(provider-acp): preserve UTF-8 across interleaved terminal streams…
StiensWout Nov 7, 2026
5cb2a7d
fix(pi): preserve explicit thinking when switching models (#32389)
StiensWout Nov 7, 2026
beaeeff
fix(acp): bound unread raw notification retention (#19585)
StiensWout Nov 7, 2026
eeb6e23
fix(web): keep Pi thinking controls visible before selection (#27397)
voltcrash Nov 7, 2026
67fdc53
fix(desktop): published themes reach the app when it uses this machin…
not-compromised Nov 7, 2026
e344153
fix(antigravity): check account access after installation (#32446)
Yash-Singh1 Nov 7, 2026
f016a16
fix(acp): preserve native form questions and typed answers (#19659)
StiensWout Nov 7, 2026
9f00ced
fix(antigravity): explain missing SOCKS dependency during refresh (#1…
StiensWout Nov 7, 2026
4c3a9d5
fix(cursor): use the SDK account for usage data (#32448)
Yash-Singh1 Nov 7, 2026
917ce99
fix(web): agent sign-in defaults to Auto access (#32186)
flamboh Nov 7, 2026
a601caa
fix(gitlab): `glab mr accept` counts as a shell merge (#32400)
felixlaga Nov 7, 2026
97d04c3
fix(forgejo): tea's `pull` and `m` aliases count as shell merges (#32…
felixlaga Nov 7, 2026
e455200
fix: side chats start with the parent's permission mode and reasoning…
Iweisc Nov 7, 2026
25bf84a
fix(mobile): center the Choose project empty-state buttons (#27450)
juliusmarminge Nov 7, 2026
511238c
fix(mobile): Android terminal sends hardware-keyboard arrows, Tab, an…
only21mil Nov 7, 2026
0080084
fix(mobile): group settled PR threads in the continue menu (#27941)
arifali123 Nov 7, 2026
af96a01
fix(mobile): shorten the model picker save action (#32551)
PixPMusic Nov 7, 2026
a9e709f
fix(mobile): center Android header confirmation buttons (#32239)
PixPMusic Nov 7, 2026
2229dcf
Merge upstream v0.1.8-nightly.20261107.4340 into custom/usage-badge
Nov 8, 2026
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
8 changes: 7 additions & 1 deletion .github/actions/setup-ci-deps/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ inputs:
description: Arguments for `vp install`, such as filters. Empty installs the whole workspace.
required: false
default: ""
save-pnpm-store:
description: Set to "false" when a concurrent job with the same install args saves the pnpm store
required: false
default: "true"
runs:
using: composite
steps:
Expand Down Expand Up @@ -125,9 +129,11 @@ runs:
# A filtered install that started from the current full store adds nothing
# worth a second copy of it. A stacked PR, based on a branch other than the
# default, saves a ~1 GB store only its own reruns can read, so it only restores.
# Concurrent jobs with the same install args reserve one key, so the losers
# compress the store for nothing; all but one pass save-pnpm-store: false.
- name: Save pnpm store
if: >-
inputs.install == 'true' &&
inputs.install == 'true' && inputs.save-pnpm-store == 'true' &&
(github.event_name != 'pull_request' || github.base_ref == github.event.repository.default_branch) &&
steps.pnpm_cache.outputs.cache-hit != 'true' &&
(steps.pnpm_store.outputs.namespace == 'full' ||
Expand Down
66 changes: 60 additions & 6 deletions .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ on:
required: false
default: ""
type: string
# Whether this job saves the workspace pnpm store. Release's two Macs
# install the same store on the same runner type, so only one saves it.
save_pnpm_store:
required: false
default: true
type: boolean
version:
required: true
type: string
Expand Down Expand Up @@ -160,6 +166,7 @@ jobs:
uses: ./.github/actions/setup-ci-deps
with:
install-args: --filter=@t3tools/desktop... --filter=t3... --filter=@t3tools/scripts...
save-pnpm-store: ${{ inputs.save_pnpm_store }}
env:
pnpm_config_cache_dir: ${{ runner.temp }}/pnpm-metadata

Expand Down Expand Up @@ -408,6 +415,7 @@ jobs:
run: command -v patchelf || { sudo apt-get update && sudo apt-get install -y patchelf; }

- name: Build CLI archive
id: build_cli
if: inputs.cli_archive
shell: bash
env:
Expand All @@ -425,25 +433,38 @@ jobs:
AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME: ${{ secrets.AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME }}
run: |
set -euo pipefail
if [[ "${{ inputs.platform }}" == "mac" && -n "${APPLE_API_KEY:-}" ]]; then
key_path="$RUNNER_TEMP/AuthKey_cli_${APPLE_API_KEY_ID}.p8"
printf '%s' "$APPLE_API_KEY" > "$key_path"
export APPLE_API_KEY="$key_path"
extra_args=()
if [[ "${{ inputs.platform }}" == "mac" ]]; then
if [[ -n "${APPLE_API_KEY:-}" ]]; then
key_dir="$(mktemp -d "$RUNNER_TEMP/t3-cli-notary.XXXXXXXX")"
trap 'rm -rf "$key_dir"' EXIT
key_path="$key_dir/AuthKey.p8"
(umask 077 && printf '%s' "$APPLE_API_KEY" > "$key_path")
export APPLE_API_KEY="$key_path"
fi
# Older release refs lack deferred notarization and still wait here.
cli_help="$(node scripts/build-cli-archive.ts --help)"
if [[ "$cli_help" == *--notary-submission-file* ]]; then
extra_args=(--notary-submission-file "$RUNNER_TEMP/t3-cli-notary-submission")
echo "deferred_notarization=true" >> "$GITHUB_OUTPUT"
fi
fi
node scripts/build-cli-archive.ts \
--platform "${{ inputs.platform }}" \
--arch "${{ inputs.arch }}" \
--version "${{ inputs.version }}" \
--resource-monitor-dir "$RUNNER_TEMP/cli-resource-monitor" \
--output-dir release-cli
--output-dir release-cli \
${extra_args[@]+"${extra_args[@]}"}

- name: Smoke-test CLI archive
if: inputs.cli_archive && inputs.verify_runner == ''
shell: bash
run: node scripts/smoke-cli-archive.ts --archive release-cli/* --expect-version "${{ inputs.version }}"

# macOS uploads its archive after "Await CLI notarization" instead.
- name: Upload CLI archive
if: inputs.cli_archive
if: inputs.cli_archive && inputs.platform != 'mac'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: cli-${{ inputs.platform }}-${{ inputs.arch }}
Expand Down Expand Up @@ -620,6 +641,39 @@ jobs:

vp run dist:desktop:artifact "${args[@]}"

# The CLI was submitted without waiting so Apple reviews it while the
# desktop builds. Notarization does not change the archive bytes, but
# nothing uploads them, so nothing publishes them, until Apple accepts.
# With signing configured, a missing submission id fails this step.
- name: Await CLI notarization
if: inputs.cli_archive && inputs.platform == 'mac' && steps.build_cli.outputs.deferred_notarization == 'true'
shell: bash
env:
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
run: |
set -euo pipefail
if [[ -n "${APPLE_API_KEY:-}" ]]; then
key_dir="$(mktemp -d "$RUNNER_TEMP/t3-cli-notary.XXXXXXXX")"
trap 'rm -rf "$key_dir"' EXIT
key_path="$key_dir/AuthKey.p8"
(umask 077 && printf '%s' "$APPLE_API_KEY" > "$key_path")
export APPLE_API_KEY="$key_path"
fi
node scripts/build-cli-archive.ts await-notarization \
--submission-file "$RUNNER_TEMP/t3-cli-notary-submission"

- name: Upload notarized CLI archive
if: inputs.cli_archive && inputs.platform == 'mac'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: cli-${{ inputs.platform }}-${{ inputs.arch }}
path: release-cli/*
if-no-files-found: error
# The archive is already gzip or zip; deflating it again saves under 2%.
compression-level: 0

# Warm installs only touch the store index, so new content means a fetch.
- name: Check staged install cache for new content
id: stage_pnpm_changed
Expand Down
112 changes: 88 additions & 24 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,8 @@ jobs:
if: ${{ !cancelled() && needs.preflight.result == 'success' && needs.relay_public_config.result == 'success' }}
runs-on: blacksmith-32vcpu-ubuntu-2404
timeout-minutes: 30
outputs:
npm_launcher_artifact_id: ${{ steps.npm_launcher.outputs.artifact-id }}
env:
T3CODE_CLERK_PUBLISHABLE_KEY: ${{ needs.relay_public_config.outputs.clerk_publishable_key }}
T3CODE_CLERK_JWT_TEMPLATE: ${{ needs.relay_public_config.outputs.clerk_jwt_template }}
Expand Down Expand Up @@ -604,6 +606,22 @@ jobs:
if-no-files-found: error
retention-days: 1

# publish_cli publishes this exact tarball, so the trusted publisher
# needs no workspace checkout or install. It is version-matched here.
- name: Build the npm launcher
run: node scripts/build-npm-launcher.ts --version "${{ needs.preflight.outputs.version }}" --output-dir npm-packages

# GitHub allows a failed-jobs rerun for 30 days. publish_cli downloads
# this upload by its ID, which a publish_cli-only rerun keeps.
- name: Upload the npm launcher
id: npm_launcher
uses: actions/upload-artifact@v7
with:
name: npm-launcher
path: npm-packages/t3.tgz
if-no-files-found: error
retention-days: 30

# One job per platform and architecture (see release-desktop.yml), each
# gated only on the JS bundle. Windows targets build on Linux and run their
# native checks on a Windows runner of their own architecture.
Expand Down Expand Up @@ -635,6 +653,8 @@ jobs:
resource_key: darwin-arm64
cli_archive: true
launch_check: true
# desktop_mac_x64 saves the shared pnpm store; this job finishes last.
save_pnpm_store: false

desktop_mac_x64:
name: Desktop macOS x64
Expand Down Expand Up @@ -806,6 +826,24 @@ jobs:
with:
install-args: --filter=@t3tools/scripts...

# Overlaps the artifact downloads. The wait below ends it before any
# workspace script runs, so the Play key lives only in this process.
# `exec` lets the runner's stop signals reach node directly.
- id: android_apk
name: Download nightly Android APK
if: needs.preflight.outputs.release_channel == 'nightly'
background: true
continue-on-error: true
timeout-minutes: 5
env:
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
PACKAGE_NAME: com.t3tools.t3code
APK_OUTPUT_DIR: ${{ runner.temp }}/android-apk
run: |
if [ -n "$GOOGLE_PLAY_SERVICE_ACCOUNT_JSON" ]; then
exec node .github/scripts/mirror-play-apk.cjs
fi

- name: Download all desktop artifacts
uses: actions/download-artifact@v8
with:
Expand All @@ -820,18 +858,6 @@ jobs:
merge-multiple: true
path: release-assets

- name: Download internal Android APK for Nightly
if: needs.preflight.outputs.release_channel == 'nightly'
continue-on-error: true
env:
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
PACKAGE_NAME: com.t3tools.t3code
APK_OUTPUT_DIR: release-assets
run: |
if [ -n "$GOOGLE_PLAY_SERVICE_ACCOUNT_JSON" ]; then
node .github/scripts/mirror-play-apk.cjs
fi

# Installers verify archives against this file, so it is written from the
# signed bytes that get uploaded, never from an earlier stage.
- name: Write CLI archive checksums
Expand All @@ -848,6 +874,10 @@ jobs:
sha256sum "${archives[@]}" > SHA256SUMS
cat SHA256SUMS

# Always runs, even after a failed step, and keeps that failure.
- name: Wait for nightly Android APK
wait: android_apk

# The desktop build omits the publish config for preview versions, so
# electron-builder emits no updater manifests for them. Refuse to publish
# if one shows up anyway: a `latest*.yml` or `nightly*.yml` on a preview
Expand Down Expand Up @@ -913,10 +943,13 @@ jobs:
echo 'release-assets/*.yml'
fi
echo 'release-assets/*.tar.gz'
# Only list APKs when Play has a processed internal build available.
for apk in release-assets/*.apk; do
[[ -f "$apk" ]] && echo "$apk"
done
# A failed or timed-out fetch can leave partial bytes, so list the APK
# only when this attempt's fetch succeeded and Play had one ready.
if [[ "${{ steps.android_apk.outcome }}" == "success" ]]; then
for apk in "$RUNNER_TEMP"/android-apk/*.apk; do
[[ -f "$apk" ]] && echo "$apk"
done
fi
echo 'release-assets/SHA256SUMS'
echo 'EOF'
} >> "$GITHUB_OUTPUT"
Expand Down Expand Up @@ -1010,34 +1043,65 @@ jobs:
# nothing resolves unless asked for by name.
publish_cli:
name: Publish CLI to npm
needs: [preflight, release]
needs: [preflight, build_bundle, release]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.release.result == 'success' }}
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 15
permissions:
contents: read
id-token: write
steps:
# Only what setup-ci-deps reads to install the project's Node and npm.
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ needs.preflight.outputs.ref }}
sparse-checkout: |
/*
!/.repos/
/.github/actions/setup-ci-deps/
/package.json
/pnpm-workspace.yaml
sparse-checkout-cone-mode: false

- name: Setup dependencies
- name: Setup Node.js
uses: ./.github/actions/setup-ci-deps
with:
install-args: --filter=t3... --filter=@t3tools/scripts...
install: "false"

- name: Build the npm launcher
run: node scripts/build-npm-launcher.ts --version "${{ needs.preflight.outputs.version }}" --output-dir npm-packages
# Bind to build_bundle's exact upload: a name lookup takes the newest
# same-name artifact, and an empty ID downloads every artifact in the
# run. A later same-name upload hides this ID, so the download fails.
- name: Check the npm launcher artifact ID
env:
ARTIFACT_ID: ${{ needs.build_bundle.outputs.npm_launcher_artifact_id }}
run: |
if [[ ! "$ARTIFACT_ID" =~ ^[1-9][0-9]*$ ]]; then
echo "::error::build_bundle gave no valid npm-launcher artifact ID: '$ARTIFACT_ID'." >&2
exit 1
fi

- name: Download the npm launcher
uses: actions/download-artifact@v8
with:
artifact-ids: ${{ needs.build_bundle.outputs.npm_launcher_artifact_id }}
path: npm-packages
digest-mismatch: error

- name: Check the npm launcher version
env:
RELEASE_VERSION: ${{ needs.preflight.outputs.version }}
run: |
built="$(tar -xzOf npm-packages/t3.tgz package/package.json | jq -r .version)"
if [[ "$built" != "$RELEASE_VERSION" ]]; then
echo "::error::npm-launcher holds t3@$built, expected t3@$RELEASE_VERSION." >&2
exit 1
fi

- name: Publish the npm launcher
env:
DIST_TAG: ${{ needs.preflight.outputs.cli_dist_tag }}
run: |
if ! node apps/server/scripts/cli.ts publish --packages-dir npm-packages --tag "${{ needs.preflight.outputs.cli_dist_tag }}" --provenance --verbose; then
# The ./ keeps npm from reading the path as a GitHub owner/repo spec.
if ! npm publish --access public --tag "$DIST_TAG" --provenance ./npm-packages/t3.tgz; then
echo "::error::npm publish failed. Make sure package t3 has a trusted publisher registered for .github/workflows/release.yml (see docs/operations/release.md)." >&2
exit 1
fi
Expand Down
1 change: 1 addition & 0 deletions apps/desktop/src/app/DesktopAppIdentity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ const layerElectronApp = (calls: ElectronAppCalls) =>
metadata: Effect.die("unexpected metadata read"),
name: Effect.succeed("T3 Code"),
systemLocale: Effect.succeed("en-US"),
preferredSystemLanguages: Effect.succeed(["en-US"]),
whenReady: Effect.void,
requestSingleInstanceLock: Effect.succeed(true),
quit: Effect.void,
Expand Down
1 change: 1 addition & 0 deletions apps/desktop/src/app/DesktopLifecycle.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ function layerElectronApp(
metadata: Effect.die("unexpected metadata read"),
name: Effect.succeed("T3 Code"),
systemLocale: Effect.succeed("en-US"),
preferredSystemLanguages: Effect.succeed(["en-US"]),
whenReady: Effect.void,
requestSingleInstanceLock: Effect.succeed(true),
quit,
Expand Down
2 changes: 2 additions & 0 deletions apps/desktop/src/electron/ElectronApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export class ElectronApp extends Context.Service<
readonly name: Effect.Effect<string>;
/** Packaged builds ship only en-US; app.getLocale() and Intl defaults do not reflect the OS locale. */
readonly systemLocale: Effect.Effect<string>;
readonly preferredSystemLanguages: Effect.Effect<ReadonlyArray<string>>;
readonly whenReady: Effect.Effect<void, ElectronAppWhenReadyError>;
readonly requestSingleInstanceLock: Effect.Effect<boolean>;
readonly quit: Effect.Effect<void>;
Expand Down Expand Up @@ -155,6 +156,7 @@ export const make = ElectronApp.of({
}
return toSystemLocaleTag(identifier, hourCycle);
}),
preferredSystemLanguages: Effect.sync(() => Electron.app.getPreferredSystemLanguages()),
whenReady: Effect.gen(function* () {
const isPackaged = Electron.app.isPackaged;
yield* Effect.tryPromise({
Expand Down
4 changes: 4 additions & 0 deletions apps/desktop/src/ipc/DesktopIpcHandlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { installNotificationBadge } from "./methods/notificationBadge.ts";
import { getClientSettings, setClientSettings } from "./methods/clientSettings.ts";
import { getConnectionCatalog, setConnectionCatalog } from "./methods/connectionCatalog.ts";
import {
getHostEnvironmentId,
getLocalEnvironmentEnabled,
setLocalEnvironmentEnabled,
} from "./methods/localEnvironment.ts";
Expand Down Expand Up @@ -38,6 +39,7 @@ import {
getLocalEnvironmentBearerToken,
installRelayTelemetryEnabled,
getSystemLocale,
getPreferredSystemLanguages,
getWindowFullscreenState,
openExternal,
readMedia,
Expand Down Expand Up @@ -94,10 +96,12 @@ export const installDesktopIpcHandlers = Effect.fn("desktop.ipc.installHandlers"
yield* ipc.handleSync(getAppBranding);
yield* installRelayTelemetryEnabled();
yield* ipc.handleSync(getSystemLocale);
yield* ipc.handleSync(getPreferredSystemLanguages);
yield* ipc.handleSync(getWindowFullscreenState);
yield* ipc.handleSync(getLocalEnvironmentBootstraps);
yield* ipc.handleSync(getLocalEnvironmentEnabled);
yield* ipc.handle(setLocalEnvironmentEnabled);
yield* ipc.handle(getHostEnvironmentId);
yield* ipc.handle(getLocalEnvironmentBearerToken);

yield* ipc.handle(getClientSettings);
Expand Down
2 changes: 2 additions & 0 deletions apps/desktop/src/ipc/channels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,11 @@ export const CLI_COMMAND_UNINSTALL_CHANNEL = "desktop:cli-command-uninstall";
export const GET_APP_BRANDING_CHANNEL = "desktop:get-app-branding";
export const GET_RELAY_TELEMETRY_ENABLED_CHANNEL = "desktop:get-relay-telemetry-enabled";
export const GET_SYSTEM_LOCALE_CHANNEL = "desktop:get-system-locale";
export const GET_PREFERRED_SYSTEM_LANGUAGES_CHANNEL = "desktop:get-preferred-system-languages";
export const GET_LOCAL_ENVIRONMENT_BOOTSTRAPS_CHANNEL = "desktop:get-local-environment-bootstraps";
export const GET_LOCAL_ENVIRONMENT_ENABLED_CHANNEL = "desktop:get-local-environment-enabled";
export const SET_LOCAL_ENVIRONMENT_ENABLED_CHANNEL = "desktop:set-local-environment-enabled";
export const GET_HOST_ENVIRONMENT_ID_CHANNEL = "desktop:get-host-environment-id";
export const GET_LOCAL_ENVIRONMENT_BEARER_TOKEN_CHANNEL =
"desktop:get-local-environment-bearer-token";
export const GET_CLIENT_SETTINGS_CHANNEL = "desktop:get-client-settings";
Expand Down
Loading