(root: Root)
| 71 | * distinguish errors from user cancellation. |
| 72 | */ |
| 73 | export async function launchAssistantInstallWizard(root: Root): Promise<string | null> { |
| 74 | const { |
| 75 | NewInstallWizard, |
| 76 | computeDefaultInstallDir |
| 77 | } = await import('./commands/assistant/assistant.js'); |
| 78 | const defaultDir = await computeDefaultInstallDir(); |
| 79 | let rejectWithError: (reason: Error) => void; |
| 80 | const errorPromise = new Promise<never>((_, reject) => { |
| 81 | rejectWithError = reject; |
| 82 | }); |
| 83 | const resultPromise = showSetupDialog<string | null>(root, done => <NewInstallWizard defaultDir={defaultDir} onInstalled={dir => done(dir)} onCancel={() => done(null)} onError={message => rejectWithError(new Error(`Installation failed: ${message}`))} />); |
| 84 | return Promise.race([resultPromise, errorPromise]); |
| 85 | } |
| 86 | |
| 87 | /** |
| 88 | * Site ~4549: TeleportResumeWrapper (interactive teleport session picker). |
no test coverage detected