feat(mosaic): unified first-run UX wizard -> gateway install -> verify (#418)
This commit was merged in pull request #418.
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
import { writeFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { tmpdir } from 'node:os';
|
||||
import type { WizardPrompter } from './prompter/interface.js';
|
||||
import type { ConfigService } from './config/config-service.js';
|
||||
import type { WizardState } from './types.js';
|
||||
@@ -11,6 +14,25 @@ import { runtimeSetupStage } from './stages/runtime-setup.js';
|
||||
import { skillsSelectStage } from './stages/skills-select.js';
|
||||
import { finalizeStage } from './stages/finalize.js';
|
||||
|
||||
// ─── Transient install session state (CU-07-02) ───────────────────────────────
|
||||
|
||||
const INSTALL_STATE_FILE = join(
|
||||
process.env['XDG_RUNTIME_DIR'] ?? process.env['TMPDIR'] ?? tmpdir(),
|
||||
'mosaic-install-state.json',
|
||||
);
|
||||
|
||||
function writeInstallState(mosaicHome: string): void {
|
||||
try {
|
||||
const state = {
|
||||
wizardCompletedAt: new Date().toISOString(),
|
||||
mosaicHome,
|
||||
};
|
||||
writeFileSync(INSTALL_STATE_FILE, JSON.stringify(state, null, 2) + '\n', { mode: 0o600 });
|
||||
} catch {
|
||||
// Non-fatal — gateway install will just ask for home again
|
||||
}
|
||||
}
|
||||
|
||||
export interface WizardOptions {
|
||||
mosaicHome: string;
|
||||
sourceDir: string;
|
||||
@@ -92,4 +114,8 @@ export async function runWizard(options: WizardOptions): Promise<void> {
|
||||
|
||||
// Stage 9: Finalize
|
||||
await finalizeStage(prompter, state, configService);
|
||||
|
||||
// CU-07-02: Write transient session state so `mosaic gateway install` can
|
||||
// pick up mosaicHome without re-prompting.
|
||||
writeInstallState(state.mosaicHome);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user