authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-06-19 21:04:49-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-06-19 21:04:49-07:00
log8bfdacf206608c0e14b1c5471dfa1f482a452acc
treebcb3684209f25e5abb22b0c56fd50c4e090ca24f
parentb6302784f8e058de4fb20dae931b4df29e9302fe
signature Signed by PGP key B5690EEEBB952194

[codex] Use namespace imports for desktop core services (#3207)

Co-authored-by: codex <codex@users.noreply.github.com>

4 files changed, 18 insertions(+), 22 deletions(-)

apps/desktop/src/app/DesktopApp.ts+4-3
...@@ -17,6 +17,7 @@ import * as DesktopBackendManager from "../backend/DesktopBackendManager.ts";...@@ -17,6 +17,7 @@ import * as DesktopBackendManager from "../backend/DesktopBackendManager.ts";
17import * as DesktopEnvironment from "./DesktopEnvironment.ts";17import * as DesktopEnvironment from "./DesktopEnvironment.ts";
18import * as DesktopLifecycle from "./DesktopLifecycle.ts";18import * as DesktopLifecycle from "./DesktopLifecycle.ts";
19import * as DesktopObservability from "./DesktopObservability.ts";19import * as DesktopObservability from "./DesktopObservability.ts";
20import * as DesktopShutdown from "./DesktopShutdown.ts";
20import * as DesktopServerExposure from "../backend/DesktopServerExposure.ts";21import * as DesktopServerExposure from "../backend/DesktopServerExposure.ts";
21import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts";22import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts";
22import * as DesktopShellEnvironment from "../shell/DesktopShellEnvironment.ts";23import * as DesktopShellEnvironment from "../shell/DesktopShellEnvironment.ts";
...@@ -100,12 +101,12 @@ const handleFatalStartupError = Effect.fn("desktop.startup.handleFatalStartupErr...@@ -100,12 +101,12 @@ const handleFatalStartupError = Effect.fn("desktop.startup.handleFatalStartupErr
100): Effect.fn.Return<101): Effect.fn.Return<
101 void,102 void,
102 never,103 never,
103 | DesktopLifecycle.DesktopShutdown104 | DesktopShutdown.DesktopShutdown
104 | DesktopState.DesktopState105 | DesktopState.DesktopState
105 | ElectronApp.ElectronApp106 | ElectronApp.ElectronApp
106 | ElectronDialog.ElectronDialog107 | ElectronDialog.ElectronDialog
107> {108> {
108 const shutdown = yield* DesktopLifecycle.DesktopShutdown;109 const shutdown = yield* DesktopShutdown.DesktopShutdown;
109 const state = yield* DesktopState.DesktopState;110 const state = yield* DesktopState.DesktopState;
110 const electronApp = yield* ElectronApp.ElectronApp;111 const electronApp = yield* ElectronApp.ElectronApp;
111 const electronDialog = yield* ElectronDialog.ElectronDialog;112 const electronDialog = yield* ElectronDialog.ElectronDialog;
...@@ -237,7 +238,7 @@ const scopedProgram = Effect.scoped(...@@ -237,7 +238,7 @@ const scopedProgram = Effect.scoped(
237 yield* Effect.annotateLogsScoped({ scope: "desktop", runId });238 yield* Effect.annotateLogsScoped({ scope: "desktop", runId });
238 yield* Effect.annotateCurrentSpan({ scope: "desktop", runId });239 yield* Effect.annotateCurrentSpan({ scope: "desktop", runId });
239240
240 const shutdown = yield* DesktopLifecycle.DesktopShutdown;241 const shutdown = yield* DesktopShutdown.DesktopShutdown;
241 const backendManager = yield* DesktopBackendManager.DesktopBackendManager;242 const backendManager = yield* DesktopBackendManager.DesktopBackendManager;
242243
243 yield* Effect.addFinalizer(() =>244 yield* Effect.addFinalizer(() =>
apps/desktop/src/app/DesktopLifecycle.ts+4-6
...@@ -9,17 +9,15 @@ import type * as Electron from "electron";...@@ -9,17 +9,15 @@ import type * as Electron from "electron";
99
10import * as DesktopEnvironment from "./DesktopEnvironment.ts";10import * as DesktopEnvironment from "./DesktopEnvironment.ts";
11import * as DesktopObservability from "./DesktopObservability.ts";11import * as DesktopObservability from "./DesktopObservability.ts";
12import * as DesktopShutdownModule from "./DesktopShutdown.ts";12import * as DesktopShutdown from "./DesktopShutdown.ts";
13import * as ElectronApp from "../electron/ElectronApp.ts";13import * as ElectronApp from "../electron/ElectronApp.ts";
14import * as ElectronTheme from "../electron/ElectronTheme.ts";14import * as ElectronTheme from "../electron/ElectronTheme.ts";
15import * as DesktopState from "./DesktopState.ts";15import * as DesktopState from "./DesktopState.ts";
16import * as DesktopWindow from "../window/DesktopWindow.ts";16import * as DesktopWindow from "../window/DesktopWindow.ts";
1717
18export { DesktopShutdown, layer as layerShutdown } from "./DesktopShutdown.ts";
19
20export type DesktopLifecycleRuntimeServices =18export type DesktopLifecycleRuntimeServices =
21 | DesktopEnvironment.DesktopEnvironment19 | DesktopEnvironment.DesktopEnvironment
22 | DesktopShutdownModule.DesktopShutdown20 | DesktopShutdown.DesktopShutdown
23 | DesktopState.DesktopState21 | DesktopState.DesktopState
24 | DesktopWindow.DesktopWindow22 | DesktopWindow.DesktopWindow
25 | ElectronApp.ElectronApp23 | ElectronApp.ElectronApp
...@@ -63,8 +61,8 @@ function addScopedListener<Args extends ReadonlyArray<unknown>>(...@@ -63,8 +61,8 @@ function addScopedListener<Args extends ReadonlyArray<unknown>>(
63}61}
6462
65const requestDesktopShutdownAndWait = Effect.fn("desktop.lifecycle.requestShutdownAndWait")(63const requestDesktopShutdownAndWait = Effect.fn("desktop.lifecycle.requestShutdownAndWait")(
66 function* (): Effect.fn.Return<void, never, DesktopShutdownModule.DesktopShutdown> {64 function* (): Effect.fn.Return<void, never, DesktopShutdown.DesktopShutdown> {
67 const shutdown = yield* DesktopShutdownModule.DesktopShutdown;65 const shutdown = yield* DesktopShutdown.DesktopShutdown;
68 yield* shutdown.request;66 yield* shutdown.request;
69 yield* shutdown.awaitComplete;67 yield* shutdown.awaitComplete;
70 },68 },
apps/desktop/src/backend/DesktopServerExposure.test.ts+8-12
...@@ -9,19 +9,15 @@ import * as Sink from "effect/Sink";...@@ -9,19 +9,15 @@ import * as Sink from "effect/Sink";
9import * as Stream from "effect/Stream";9import * as Stream from "effect/Stream";
10import { ChildProcessSpawner } from "effect/unstable/process";10import { ChildProcessSpawner } from "effect/unstable/process";
1111
12import {12import * as DesktopEnvironment from "../app/DesktopEnvironment.ts";
13 DesktopEnvironment,
14 layer as makeDesktopEnvironmentLayer,
15} from "../app/DesktopEnvironment.ts";
16import * as DesktopConfig from "../app/DesktopConfig.ts";13import * as DesktopConfig from "../app/DesktopConfig.ts";
17import * as DesktopServerExposure from "./DesktopServerExposure.ts";14import * as DesktopServerExposure from "./DesktopServerExposure.ts";
18import type { DesktopNetworkInterfaces } from "./DesktopServerExposure.ts";
19import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts";15import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts";
2016
21const encoder = new TextEncoder();17const encoder = new TextEncoder();
2218
23const emptyNetworkInterfaces: DesktopNetworkInterfaces = {};19const emptyNetworkInterfaces: DesktopServerExposure.DesktopNetworkInterfaces = {};
24const lanNetworkInterfaces: DesktopNetworkInterfaces = {20const lanNetworkInterfaces: DesktopServerExposure.DesktopNetworkInterfaces = {
25 en0: [21 en0: [
26 {22 {
27 address: "192.168.1.20",23 address: "192.168.1.20",
...@@ -31,7 +27,7 @@ const lanNetworkInterfaces: DesktopNetworkInterfaces = {...@@ -31,7 +27,7 @@ const lanNetworkInterfaces: DesktopNetworkInterfaces = {
31 ],27 ],
32};28};
3329
34const tailnetNetworkInterfaces: DesktopNetworkInterfaces = {30const tailnetNetworkInterfaces: DesktopServerExposure.DesktopNetworkInterfaces = {
35 tailscale0: [31 tailscale0: [
36 {32 {
37 address: "100.90.1.2",33 address: "100.90.1.2",
...@@ -72,7 +68,7 @@ function dieOnSpawnLayer() {...@@ -72,7 +68,7 @@ function dieOnSpawnLayer() {
72}68}
7369
74function makeEnvironmentLayer(baseDir: string, env: Record<string, string | undefined> = {}) {70function makeEnvironmentLayer(baseDir: string, env: Record<string, string | undefined> = {}) {
75 return makeDesktopEnvironmentLayer({71 return DesktopEnvironment.layer({
76 dirname: "/repo/apps/desktop/src",72 dirname: "/repo/apps/desktop/src",
77 homeDirectory: baseDir,73 homeDirectory: baseDir,
78 platform: "darwin",74 platform: "darwin",
...@@ -91,7 +87,7 @@ function makeEnvironmentLayer(baseDir: string, env: Record<string, string | unde...@@ -91,7 +87,7 @@ function makeEnvironmentLayer(baseDir: string, env: Record<string, string | unde
9187
92function makeLayer(input: {88function makeLayer(input: {
93 readonly baseDir: string;89 readonly baseDir: string;
94 readonly networkInterfaces?: DesktopNetworkInterfaces;90 readonly networkInterfaces?: DesktopServerExposure.DesktopNetworkInterfaces;
95 readonly env?: Record<string, string | undefined>;91 readonly env?: Record<string, string | undefined>;
96 readonly spawnerLayer?: Layer.Layer<ChildProcessSpawner.ChildProcessSpawner>;92 readonly spawnerLayer?: Layer.Layer<ChildProcessSpawner.ChildProcessSpawner>;
97}) {93}) {
...@@ -113,12 +109,12 @@ function makeLayer(input: {...@@ -113,12 +109,12 @@ function makeLayer(input: {
113}109}
114110
115const withHarness = <A, E, R>(111const withHarness = <A, E, R>(
116 networkInterfaces: DesktopNetworkInterfaces,112 networkInterfaces: DesktopServerExposure.DesktopNetworkInterfaces,
117 effect: Effect.Effect<113 effect: Effect.Effect<
118 A,114 A,
119 E,115 E,
120 | R116 | R
121 | DesktopEnvironment117 | DesktopEnvironment.DesktopEnvironment
122 | FileSystem.FileSystem118 | FileSystem.FileSystem
123 | DesktopServerExposure.DesktopServerExposure119 | DesktopServerExposure.DesktopServerExposure
124 | DesktopAppSettings.DesktopAppSettings120 | DesktopAppSettings.DesktopAppSettings
apps/desktop/src/main.ts+2-1
...@@ -35,6 +35,7 @@ import * as DesktopBackendManager from "./backend/DesktopBackendManager.ts";...@@ -35,6 +35,7 @@ import * as DesktopBackendManager from "./backend/DesktopBackendManager.ts";
35import * as DesktopLocalEnvironmentAuth from "./backend/DesktopLocalEnvironmentAuth.ts";35import * as DesktopLocalEnvironmentAuth from "./backend/DesktopLocalEnvironmentAuth.ts";
36import * as DesktopEnvironment from "./app/DesktopEnvironment.ts";36import * as DesktopEnvironment from "./app/DesktopEnvironment.ts";
37import * as DesktopLifecycle from "./app/DesktopLifecycle.ts";37import * as DesktopLifecycle from "./app/DesktopLifecycle.ts";
38import * as DesktopShutdown from "./app/DesktopShutdown.ts";
38import * as DesktopObservability from "./app/DesktopObservability.ts";39import * as DesktopObservability from "./app/DesktopObservability.ts";
39import * as DesktopServerExposure from "./backend/DesktopServerExposure.ts";40import * as DesktopServerExposure from "./backend/DesktopServerExposure.ts";
40import * as DesktopClientSettings from "./settings/DesktopClientSettings.ts";41import * as DesktopClientSettings from "./settings/DesktopClientSettings.ts";
...@@ -114,7 +115,7 @@ const electronLayer = Layer.mergeAll(...@@ -114,7 +115,7 @@ const electronLayer = Layer.mergeAll(
114115
115const desktopFoundationLayer = Layer.mergeAll(116const desktopFoundationLayer = Layer.mergeAll(
116 DesktopState.layer,117 DesktopState.layer,
117 DesktopLifecycle.layerShutdown,118 DesktopShutdown.layer,
118 DesktopAppSettings.layer,119 DesktopAppSettings.layer,
119 DesktopClientSettings.layer,120 DesktopClientSettings.layer,
120 DesktopConnectionCatalogStore.layer.pipe(Layer.provideMerge(DesktopSavedEnvironments.layer)),121 DesktopConnectionCatalogStore.layer.pipe(Layer.provideMerge(DesktopSavedEnvironments.layer)),