MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / startWithCurrentSettings

Function startWithCurrentSettings

apps/desktop/src/main/index.ts:638–667  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

636};
637
638const startWithCurrentSettings = async (): Promise<SidecarConnection | null> => {
639 // oxlint-disable-next-line executor/no-try-catch-or-throw -- boundary: bind failures surface as a user-facing dialog
640 try {
641 return await startSidecar();
642 } catch (error) {
643 // oxlint-disable-next-line executor/no-instanceof-tagged-error -- boundary: SidecarPortInUseError is a plain Node Error subclass, not an Effect tagged error
644 if (error instanceof SidecarPortInUseError) {
645 await showPortInUseDialog(error.port);
646 return null;
647 }
648 // The data dir is already owned by another local daemon. If it's a healthy
649 // cli-daemon, adopt it instead of failing — the same handoff boot() does up
650 // front, applied here so the fallback and restart paths recover from a
651 // mid-session daemon takeover. Poll briefly to ride out an owner that's
652 // alive but still finishing its own startup (the health-probe vs.
653 // scope-lock race that left the app wedged on the crash screen).
654 if (isScopeOwnershipConflict(error)) {
655 const adopted = await waitForSupervisedAttach(10_000);
656 if (adopted) {
657 log.info(
658 "Adopted the local daemon that owns the data dir instead of spawning a second one",
659 );
660 return adopted;
661 }
662 }
663 lastSidecarStartError = error;
664 log.error("Failed to start executor sidecar", error);
665 return null;
666 }
667};
668
669const restartSidecarAndReload = async (): Promise<DesktopServerConnection> => {
670 // A supervised daemon owns its own process lifetime. Re-installing the unit

Callers 2

restartSidecarAndReloadFunction · 0.85
bootFunction · 0.85

Calls 6

startSidecarFunction · 0.90
showPortInUseDialogFunction · 0.85
isScopeOwnershipConflictFunction · 0.85
waitForSupervisedAttachFunction · 0.85
errorMethod · 0.80
infoMethod · 0.65

Tested by

no test coverage detected