import React from 'react' import { hasPendingPublish } from './state.js' import { RecoveryConfirmScreen } from './RecoveryConfirmScreen.js' import { SavePromptScreen } from './SavePromptScreen.js' import { PrivateContinuityScreen, PublicProfileScreen } from './ContinuityDashboardScreen.js' import { WalletApprovalScreen } from '../shared/components/WalletApprovalScreen.js' import type { Step } from '../reducer.js' import type { IdentityManagerController } from '../useController.js' type StepOf = Extract type ContinuityStep = StepOf< | 'rebackup-confirm' | 'save-prompt' | 'recovery-refetch-confirm' | 'recovery-refetching' | 'continuity-overwrite-confirm' | 'continuity-private' | 'continuity-public' > export function isContinuityStep(step: Step): step is ContinuityStep { return step.kind === 'rebackup-confirm' || step.kind === 'save-prompt' || step.kind === 'recovery-refetch-confirm' || step.kind === 'recovery-refetching' || step.kind === 'continuity-overwrite-confirm' || step.kind === 'continuity-private' || step.kind === 'continuity-public' } type ContinuityRoutesProps = { controller: IdentityManagerController footer: React.ReactNode } export const ContinuityRoutes: React.FC = ({ controller, footer }) => { const { config, onComplete, identity, step, walletSession, restoreProgress, continuityReady, workingStatus, setStep, back, handleStepError, resolveRegistryForIdentity, triggerRebackup, openPublicProfileEdit, openContinuityFile, } = controller if (step.kind === 'rebackup-confirm') { return ( triggerRebackup(step.back)} onBack={back} /> ) } if (step.kind === 'save-prompt') { return ( { if (action === 'save-now') { triggerRebackup(step.back) return } onComplete({ kind: 'cancel' }) }} onCancel={() => onComplete({ kind: 'cancel' })} /> ) } if (step.kind === 'recovery-refetch-confirm') { return ( { if (!identity) return const registry = resolveRegistryForIdentity(identity) if (!registry) { handleStepError(new Error('no agent registry configured for this identity'), step.back) return } setStep({ kind: 'recovery-refetching', identity, registry, back: step.back }) }} onBack={back} /> ) } if (step.kind === 'recovery-refetching') { return ( setStep(step.back)} /> ) } if (step.kind === 'continuity-overwrite-confirm') { return ( setStep(step.next)} onBack={() => setStep(step.back)} /> ) } if (step.kind === 'continuity-private') { return ( { void openContinuityFile('soul') }} onOpenMemory={() => { void openContinuityFile('memory') }} onBack={back} /> ) } if (step.kind === 'continuity-public') { return ( openPublicProfileEdit({ kind: 'continuity-public' })} onBack={back} /> ) } return null }