From 01fea97cde139f2c675223d37a60a57dc2f01b5f Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Mon, 26 Oct 2026 15:53:50 -0700 Subject: [PATCH] refactor(mobile): group native chat options and queued editing (#34074) * refactor(mobile): group native chat options and queued editing * refactor(mobile): use a concrete type import in the recording adapter --- mobile/rpc-foundation/pilot-scenarios.json | 12 ++++++--- .../session/MobileNativeChatOverlay.test.ts | 4 ++- ...NativeChatView.prompt-presentation.test.ts | 2 +- ...ativeChatView.render-stubs.test-fixture.ts | 3 ++- ...obileNativeChatView.streaming-rows.test.ts | 4 ++- mobile/src/session/MobileNativeChatView.tsx | 2 +- .../MobileNativeChatView.turn-status.test.ts | 3 ++- mobile/src/session/MobileQueuedCardText.tsx | 2 +- .../session/MobileQueuedMessageCardRow.tsx | 4 +-- .../__mocks__/mobile-prompt-controller.ts | 4 +-- .../mobile-native-chat-controller-contract.ts | 2 +- ...chat-merged-snapshot-parity-hooks.test.tsx | 4 ++- .../composer/MobileNativeChatComposer.tsx | 4 +-- .../use-mobile-native-chat-composer-tray.ts | 4 +-- .../MobileNativeChatQueuedMessageEditor.tsx | 8 +++--- .../MobileNativeChatQueuedMessages.test.tsx | 6 ++--- .../input}/MobileNativeChatQueuedMessages.tsx | 18 ++++++------- ...bileNativeChatSessionOptionPickers.test.ts | 15 ++++++----- .../MobileNativeChatSessionOptionPickers.tsx | 10 +++---- .../MobileNativeChatSessionOptionRows.test.ts | 7 +++-- .../MobileNativeChatSessionOptionRows.tsx | 4 +-- .../MobileNativeChatSessionOptionSegments.tsx | 6 ++--- .../input}/MobileNativeChatStopButton.tsx | 6 ++--- ...obile-native-chat-queued-message-styles.ts | 4 +-- ...obile-native-chat-session-option-labels.ts | 2 +- ...ve-chat-session-option-persistence.test.ts | 6 ++--- ...-native-chat-session-option-persistence.ts | 8 +++--- ...ile-native-chat-queued-edit-focus.test.tsx | 2 +- ...se-mobile-native-chat-queued-edit-focus.ts | 2 +- ...ive-chat-session-option-controller.test.ts | 0 ...e-native-chat-session-option-controller.ts | 12 ++++----- ...mobile-native-chat-session-options.test.ts | 4 +-- .../use-mobile-native-chat-session-options.ts | 27 +++++++++---------- .../use-mobile-native-chat-controller.ts | 2 +- .../use-mobile-omp-model-discovery.test.ts | 6 ++--- .../use-mobile-structured-agent-options.ts | 2 +- .../native-chat-write-mount-adapters.ts | 7 +++-- 37 files changed, 117 insertions(+), 101 deletions(-) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatQueuedMessageEditor.tsx (94%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatQueuedMessages.test.tsx (99%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatQueuedMessages.tsx (91%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatSessionOptionPickers.test.ts (97%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatSessionOptionPickers.tsx (97%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatSessionOptionRows.test.ts (93%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatSessionOptionRows.tsx (98%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatSessionOptionSegments.tsx (89%) rename mobile/src/session/{ => native-chat/input}/MobileNativeChatStopButton.tsx (76%) rename mobile/src/session/{ => native-chat/input}/mobile-native-chat-queued-message-styles.ts (95%) rename mobile/src/session/{ => native-chat/input}/mobile-native-chat-session-option-labels.ts (97%) rename mobile/src/session/{ => native-chat/input}/mobile-native-chat-session-option-persistence.test.ts (95%) rename mobile/src/session/{ => native-chat/input}/mobile-native-chat-session-option-persistence.ts (73%) rename mobile/src/session/{ => native-chat/input}/use-mobile-native-chat-queued-edit-focus.test.tsx (96%) rename mobile/src/session/{ => native-chat/input}/use-mobile-native-chat-queued-edit-focus.ts (89%) rename mobile/src/session/{ => native-chat/input}/use-mobile-native-chat-session-option-controller.test.ts (100%) rename mobile/src/session/{ => native-chat/input}/use-mobile-native-chat-session-option-controller.ts (89%) rename mobile/src/session/{ => native-chat/input}/use-mobile-native-chat-session-options.test.ts (98%) rename mobile/src/session/{ => native-chat/input}/use-mobile-native-chat-session-options.ts (92%) diff --git a/mobile/rpc-foundation/pilot-scenarios.json b/mobile/rpc-foundation/pilot-scenarios.json index dd45805695f..4c6048b4ab6 100644 --- a/mobile/rpc-foundation/pilot-scenarios.json +++ b/mobile/rpc-foundation/pilot-scenarios.json @@ -16656,7 +16656,9 @@ "id": "native-chat-session-option-pick-written", "operation": "nativeChat.session-option-pick", "family": "nativeChat.session-option-pick", - "sites": ["mobile/src/session/mobile-native-chat-session-option-persistence.ts"], + "sites": [ + "mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.ts" + ], "schedules": [], "steps": [ { @@ -16692,7 +16694,9 @@ "id": "native-chat-session-option-pick-refused", "operation": "nativeChat.session-option-pick", "family": "nativeChat.session-option-pick", - "sites": ["mobile/src/session/mobile-native-chat-session-option-persistence.ts"], + "sites": [ + "mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.ts" + ], "schedules": [], "steps": [ { @@ -16729,7 +16733,9 @@ "id": "native-chat-session-option-pick-empty", "operation": "nativeChat.session-option-pick", "family": "nativeChat.session-option-pick", - "sites": ["mobile/src/session/mobile-native-chat-session-option-persistence.ts"], + "sites": [ + "mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.ts" + ], "schedules": [], "steps": [ { diff --git a/mobile/src/session/MobileNativeChatOverlay.test.ts b/mobile/src/session/MobileNativeChatOverlay.test.ts index ac14b8c7b24..7e37d31b5ea 100644 --- a/mobile/src/session/MobileNativeChatOverlay.test.ts +++ b/mobile/src/session/MobileNativeChatOverlay.test.ts @@ -14,7 +14,9 @@ vi.mock('react-native', () => ({ vi.mock('./MobileNativeChatView', () => ({ MobileNativeChatView: 'ChatView' })) vi.mock('../platform/use-reduced-motion', () => ({ useReducedMotionEnabled: () => null })) -vi.mock('./MobileNativeChatQueuedMessages', () => ({ MobileNativeChatQueuedMessages: 'Queued' })) +vi.mock('./native-chat/input/MobileNativeChatQueuedMessages', () => ({ + MobileNativeChatQueuedMessages: 'Queued' +})) vi.mock('./MobileNativeChatBackgroundTasks', () => ({ MobileNativeChatBackgroundTasks: 'BackgroundTasks' })) diff --git a/mobile/src/session/MobileNativeChatView.prompt-presentation.test.ts b/mobile/src/session/MobileNativeChatView.prompt-presentation.test.ts index 7d75141f72a..c29d0cf1340 100644 --- a/mobile/src/session/MobileNativeChatView.prompt-presentation.test.ts +++ b/mobile/src/session/MobileNativeChatView.prompt-presentation.test.ts @@ -64,7 +64,7 @@ vi.mock('./MobileNativeChatMessage', () => ({ MobileNativeChatMessage: 'ChatMess vi.mock('./MobileNativeChatLiveLine', () => ({ MobileNativeChatLiveLine: 'LiveStatus' })) vi.mock('./MobileNativeChatAsk', () => ({ MobileNativeChatAsk: 'ChatAsk' })) vi.mock('./MobileNativeChatQuestion', () => ({ MobileNativeChatQuestion: 'ChatQuestion' })) -vi.mock('./MobileNativeChatSessionOptionPickers', () => ({ +vi.mock('./native-chat/input/MobileNativeChatSessionOptionPickers', () => ({ MobileNativeChatSessionOptionPickers: 'SessionOptions' })) vi.mock('./native-chat/composer/MobileNativeChatComposerMenu', () => ({ diff --git a/mobile/src/session/MobileNativeChatView.render-stubs.test-fixture.ts b/mobile/src/session/MobileNativeChatView.render-stubs.test-fixture.ts index d947b8f0198..b41fa6bae1e 100644 --- a/mobile/src/session/MobileNativeChatView.render-stubs.test-fixture.ts +++ b/mobile/src/session/MobileNativeChatView.render-stubs.test-fixture.ts @@ -65,7 +65,8 @@ export function gestureHandlerStub() { export async function composerStub() { const React = await import('react') - const { MobileNativeChatStopButton } = await import('./MobileNativeChatStopButton') + const { MobileNativeChatStopButton } = + await import('./native-chat/input/MobileNativeChatStopButton') return { MobileNativeChatComposer: (props: { onSend: (text: string) => Promise diff --git a/mobile/src/session/MobileNativeChatView.streaming-rows.test.ts b/mobile/src/session/MobileNativeChatView.streaming-rows.test.ts index ad08391c28b..8c7c8f80eb3 100644 --- a/mobile/src/session/MobileNativeChatView.streaming-rows.test.ts +++ b/mobile/src/session/MobileNativeChatView.streaming-rows.test.ts @@ -166,7 +166,9 @@ vi.mock('./MobileNativeChatAsk', () => ({ MobileNativeChatAsk: 'ChatAsk' })) vi.mock('./MobileNativeChatPermission', () => ({ MobileNativeChatPermission: 'ChatPermission' })) vi.mock('./MobileNativeChatQuestion', () => ({ MobileNativeChatQuestion: 'ChatQuestion' })) vi.mock('../platform/use-reduced-motion', () => ({ useReducedMotionEnabled: () => true })) -vi.mock('./MobileNativeChatQueuedMessages', () => ({ MobileNativeChatQueuedMessages: 'Queued' })) +vi.mock('./native-chat/input/MobileNativeChatQueuedMessages', () => ({ + MobileNativeChatQueuedMessages: 'Queued' +})) vi.mock('./MobileNativeChatBackgroundTasks', () => ({ MobileNativeChatBackgroundTasks: 'BackgroundTasks' })) diff --git a/mobile/src/session/MobileNativeChatView.tsx b/mobile/src/session/MobileNativeChatView.tsx index 3102e039b6c..e08810cfee1 100644 --- a/mobile/src/session/MobileNativeChatView.tsx +++ b/mobile/src/session/MobileNativeChatView.tsx @@ -52,7 +52,7 @@ import { } from './native-chat/composer/use-mobile-native-chat-composer-tray' import type { MobileChatPermission } from './mobile-native-chat-permission' import type { MobileChatQuestion } from './mobile-native-chat-question' -import type { MobileNativeChatSessionOptionPickersProps } from './MobileNativeChatSessionOptionPickers' +import type { MobileNativeChatSessionOptionPickersProps } from './native-chat/input/MobileNativeChatSessionOptionPickers' import { MobileNativeChatScrollRootsBoundary } from './MobileNativeChatScrollRootsBoundary' import { MobileNativeChatRowList } from './MobileNativeChatRowList' import { useMobileNativeChatRowRenderer } from './use-mobile-native-chat-row-renderer' diff --git a/mobile/src/session/MobileNativeChatView.turn-status.test.ts b/mobile/src/session/MobileNativeChatView.turn-status.test.ts index a2d35bd9d87..8d99c2bef56 100644 --- a/mobile/src/session/MobileNativeChatView.turn-status.test.ts +++ b/mobile/src/session/MobileNativeChatView.turn-status.test.ts @@ -71,7 +71,8 @@ vi.mock('../components/ActionSheetModal', () => ({ ActionSheetModal: 'ActionShee vi.mock('./native-chat/composer/MobileNativeChatComposer', async () => { const React = await import('react') - const { MobileNativeChatStopButton } = await import('./MobileNativeChatStopButton') + const { MobileNativeChatStopButton } = + await import('./native-chat/input/MobileNativeChatStopButton') return { MobileNativeChatComposer: (props: { onSend: (text: string) => Promise diff --git a/mobile/src/session/MobileQueuedCardText.tsx b/mobile/src/session/MobileQueuedCardText.tsx index c7689989add..72759894e46 100644 --- a/mobile/src/session/MobileQueuedCardText.tsx +++ b/mobile/src/session/MobileQueuedCardText.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { Pressable, StyleSheet, Text, View } from 'react-native' import { colors, typography } from '../theme/mobile-theme' -import { queuedMessageStyles } from './mobile-native-chat-queued-message-styles' +import { queuedMessageStyles } from './native-chat/input/mobile-native-chat-queued-message-styles' // Expand clipped queued text before Steer/Delete; use the queue’s capped scroller rather than nesting another scroll box. export function MobileQueuedCardText({ diff --git a/mobile/src/session/MobileQueuedMessageCardRow.tsx b/mobile/src/session/MobileQueuedMessageCardRow.tsx index 957e070c7f3..1abe4e94e94 100644 --- a/mobile/src/session/MobileQueuedMessageCardRow.tsx +++ b/mobile/src/session/MobileQueuedMessageCardRow.tsx @@ -11,9 +11,9 @@ import { import { colors } from '../theme/mobile-theme' import type { MobileQueuedMessageCard } from './mobile-structured-queued-message-cards' import type { MobileQueuedMessageInlineEditor } from './use-mobile-structured-queued-edit' -import { MobileNativeChatQueuedMessageEditor } from './MobileNativeChatQueuedMessageEditor' +import { MobileNativeChatQueuedMessageEditor } from './native-chat/input/MobileNativeChatQueuedMessageEditor' import { MobileQueuedCardText } from './MobileQueuedCardText' -import { queuedMessageStyles as styles } from './mobile-native-chat-queued-message-styles' +import { queuedMessageStyles as styles } from './native-chat/input/mobile-native-chat-queued-message-styles' type QueuedMessageCardRowProps = { card: MobileQueuedMessageCard diff --git a/mobile/src/session/__mocks__/mobile-prompt-controller.ts b/mobile/src/session/__mocks__/mobile-prompt-controller.ts index 87f21239cac..e6051d9263c 100644 --- a/mobile/src/session/__mocks__/mobile-prompt-controller.ts +++ b/mobile/src/session/__mocks__/mobile-prompt-controller.ts @@ -72,7 +72,7 @@ vi.mock('../MobileNativeChatVisual', () => ({ useMobileNativeChatVisualRenderer: vi.mock('../../platform/use-reduced-motion', () => ({ useReducedMotionEnabled: () => null })) vi.mock('../MobileNativeChatLiveLine', () => ({ MobileNativeChatLiveLine: 'LiveStatus' })) vi.mock('../MobileNativeChatAsk', () => ({ MobileNativeChatAsk: 'ChatAsk' })) -vi.mock('../MobileNativeChatSessionOptionPickers', () => ({ +vi.mock('../native-chat/input/MobileNativeChatSessionOptionPickers', () => ({ MobileNativeChatSessionOptionPickers: 'SessionOptions' })) vi.mock('../native-chat/composer/MobileNativeChatComposerMenu', () => ({ @@ -131,7 +131,7 @@ vi.mock('../native-chat/composer/use-mobile-native-chat-drafts', () => ({ holdUnconfirmedSend: vi.fn() }) })) -vi.mock('../use-mobile-native-chat-session-option-controller', () => ({ +vi.mock('../native-chat/input/use-mobile-native-chat-session-option-controller', () => ({ useMobileNativeChatSessionOptionController: () => ({ nativeChatSessionOptions: undefined, recordCommand: vi.fn() diff --git a/mobile/src/session/mobile-native-chat-controller-contract.ts b/mobile/src/session/mobile-native-chat-controller-contract.ts index ad4d117397d..67253422864 100644 --- a/mobile/src/session/mobile-native-chat-controller-contract.ts +++ b/mobile/src/session/mobile-native-chat-controller-contract.ts @@ -20,7 +20,7 @@ import type { MobileStructuredQueuedMessageControls } from './use-mobile-structu import type { MobileStructuredBackgroundTasks } from './use-mobile-structured-background-tasks' import type { MobileNativeChatPendingMessage } from './native-chat/mobile-native-chat-pending-echo' import type { useMobileNativeChatSession } from './use-mobile-native-chat-session' -import type { MobileNativeChatSessionOptionPickersProps } from './MobileNativeChatSessionOptionPickers' +import type { MobileNativeChatSessionOptionPickersProps } from './native-chat/input/MobileNativeChatSessionOptionPickers' import type { MobileNativeChatVisualSource } from './mobile-native-chat-visual-read' import type { useMobileStructuredSessionCommands } from './use-mobile-structured-session-commands' diff --git a/mobile/src/session/mobile-native-chat-merged-snapshot-parity-hooks.test.tsx b/mobile/src/session/mobile-native-chat-merged-snapshot-parity-hooks.test.tsx index be5be3418a5..02ba8f888fa 100644 --- a/mobile/src/session/mobile-native-chat-merged-snapshot-parity-hooks.test.tsx +++ b/mobile/src/session/mobile-native-chat-merged-snapshot-parity-hooks.test.tsx @@ -67,7 +67,9 @@ vi.mock('./MobileNativeChatLiveLine', () => ({ MobileNativeChatLiveLine: 'LiveSt vi.mock('./native-chat/composer/MobileNativeChatComposer', () => ({ MobileNativeChatComposer: 'Composer' })) -vi.mock('./MobileNativeChatQueuedMessages', () => ({ MobileNativeChatQueuedMessages: 'Queued' })) +vi.mock('./native-chat/input/MobileNativeChatQueuedMessages', () => ({ + MobileNativeChatQueuedMessages: 'Queued' +})) vi.mock('./MobileNativeChatVisual', () => ({ useMobileNativeChatVisualRenderer: () => null })) vi.mock('../components/ActionSheetModal', () => ({ ActionSheetModal: 'ActionSheetModal' })) vi.mock('./MobileNativeChatAsk', () => ({ MobileNativeChatAsk: 'ChatAsk' })) diff --git a/mobile/src/session/native-chat/composer/MobileNativeChatComposer.tsx b/mobile/src/session/native-chat/composer/MobileNativeChatComposer.tsx index 7da7fb78f82..b35da28bf65 100644 --- a/mobile/src/session/native-chat/composer/MobileNativeChatComposer.tsx +++ b/mobile/src/session/native-chat/composer/MobileNativeChatComposer.tsx @@ -13,13 +13,13 @@ import { MobileNativeChatSessionOptionPickers, type MobileNativeChatPickerPresentation, type MobileNativeChatSessionOptionPickersProps -} from '../../MobileNativeChatSessionOptionPickers' +} from '../input/MobileNativeChatSessionOptionPickers' import type { PendingNativeChatImage } from './mobile-native-chat-image-attachment' import type { MobileComposerStructuredCatalog } from './mobile-native-chat-composer-menu' import { useMobileNativeChatComposerMenu } from './use-mobile-native-chat-composer-menu' import { keepHeldPressThroughLongPress } from '../../held-press-long-press' import { mobileNativeChatComposerShowsStop } from './mobile-native-chat-composer-layout' -import { MobileNativeChatStopButton } from '../../MobileNativeChatStopButton' +import { MobileNativeChatStopButton } from '../input/MobileNativeChatStopButton' import { mobileNativeChatComposerStyles as styles } from './mobile-native-chat-composer-styles' const NO_FILE_PATHS: string[] = [] diff --git a/mobile/src/session/native-chat/composer/use-mobile-native-chat-composer-tray.ts b/mobile/src/session/native-chat/composer/use-mobile-native-chat-composer-tray.ts index a3541ecb55b..81d1115f4a2 100644 --- a/mobile/src/session/native-chat/composer/use-mobile-native-chat-composer-tray.ts +++ b/mobile/src/session/native-chat/composer/use-mobile-native-chat-composer-tray.ts @@ -4,9 +4,9 @@ import { MobileNativeChatBackgroundTasks } from '../../MobileNativeChatBackgroun import { MobileNativeChatQueuedMessages, type MobileNativeChatQueuedMessagesProps -} from '../../MobileNativeChatQueuedMessages' +} from '../input/MobileNativeChatQueuedMessages' import type { MobileStructuredBackgroundTasks } from '../../use-mobile-structured-background-tasks' -import { useMobileNativeChatQueuedEditFocus } from '../../use-mobile-native-chat-queued-edit-focus' +import { useMobileNativeChatQueuedEditFocus } from '../input/use-mobile-native-chat-queued-edit-focus' export type MobileNativeChatComposerTray = { content?: ReactNode diff --git a/mobile/src/session/MobileNativeChatQueuedMessageEditor.tsx b/mobile/src/session/native-chat/input/MobileNativeChatQueuedMessageEditor.tsx similarity index 94% rename from mobile/src/session/MobileNativeChatQueuedMessageEditor.tsx rename to mobile/src/session/native-chat/input/MobileNativeChatQueuedMessageEditor.tsx index 12b0e67d2e2..54383dbe792 100644 --- a/mobile/src/session/MobileNativeChatQueuedMessageEditor.tsx +++ b/mobile/src/session/native-chat/input/MobileNativeChatQueuedMessageEditor.tsx @@ -10,10 +10,10 @@ import { type ViewStyle } from 'react-native' import { Check, X } from 'lucide-react-native' -import { colors, radii, spacing, typography } from '../theme/mobile-theme' -import { mobileNativeChatInputStyles } from './native-chat/composer/mobile-native-chat-input-styles' -import type { MobileQueuedMessageInlineEditor } from './use-mobile-structured-queued-edit' -import { useTextInputContentHeight } from '../platform/text-input-content-height' +import { colors, radii, spacing, typography } from '../../../theme/mobile-theme' +import { mobileNativeChatInputStyles } from '../composer/mobile-native-chat-input-styles' +import type { MobileQueuedMessageInlineEditor } from '../../use-mobile-structured-queued-edit' +import { useTextInputContentHeight } from '../../../platform/text-input-content-height' const BUTTON_SIZE = 28 const ICON_SIZE = 16 diff --git a/mobile/src/session/MobileNativeChatQueuedMessages.test.tsx b/mobile/src/session/native-chat/input/MobileNativeChatQueuedMessages.test.tsx similarity index 99% rename from mobile/src/session/MobileNativeChatQueuedMessages.test.tsx rename to mobile/src/session/native-chat/input/MobileNativeChatQueuedMessages.test.tsx index 694e72cf582..3d9fd300061 100644 --- a/mobile/src/session/MobileNativeChatQueuedMessages.test.tsx +++ b/mobile/src/session/native-chat/input/MobileNativeChatQueuedMessages.test.tsx @@ -1,9 +1,9 @@ import { createElement } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { ActionSheetAction } from '../components/ActionSheetModal' +import type { ActionSheetAction } from '../../../components/ActionSheetModal' import { MobileNativeChatQueuedMessages } from './MobileNativeChatQueuedMessages' -import type { MobileQueuedMessageCard } from './mobile-structured-queued-message-cards' +import type { MobileQueuedMessageCard } from '../../mobile-structured-queued-message-cards' let fontScale = 1 vi.mock('react-native', () => ({ @@ -33,7 +33,7 @@ vi.mock('lucide-react-native', () => ({ X: 'X' })) -vi.mock('../components/ActionSheetModal', () => ({ ActionSheetModal: 'ActionSheetModal' })) +vi.mock('../../../components/ActionSheetModal', () => ({ ActionSheetModal: 'ActionSheetModal' })) function card( overrides: Partial & { messageId: string } diff --git a/mobile/src/session/MobileNativeChatQueuedMessages.tsx b/mobile/src/session/native-chat/input/MobileNativeChatQueuedMessages.tsx similarity index 91% rename from mobile/src/session/MobileNativeChatQueuedMessages.tsx rename to mobile/src/session/native-chat/input/MobileNativeChatQueuedMessages.tsx index 5f56fba1a93..c5e3a41d280 100644 --- a/mobile/src/session/MobileNativeChatQueuedMessages.tsx +++ b/mobile/src/session/native-chat/input/MobileNativeChatQueuedMessages.tsx @@ -1,15 +1,15 @@ import { useRef, useState } from 'react' import { Pressable, Text, View } from 'react-native' import { ChevronDown, ChevronRight, Pencil, Play, Trash2 } from 'lucide-react-native' -import { ActionSheetModal } from '../components/ActionSheetModal' -import { colors } from '../theme/mobile-theme' -import { useLargeSystemText } from '../theme/use-large-system-text' -import type { MobileQueuedMessageCard } from './mobile-structured-queued-message-cards' -import type { MobileQueuePause } from './mobile-structured-queued-message-feed' -import type { MobileQueuedMessageEdit } from './use-mobile-structured-queued-message-controls' -import type { MobileQueuedMessageInlineEditor } from './use-mobile-structured-queued-edit' -import { MobileQueuedMessageCardRow } from './MobileQueuedMessageCardRow' -import { MobileQueuedMessageScrollList } from './MobileQueuedMessageScrollList' +import { ActionSheetModal } from '../../../components/ActionSheetModal' +import { colors } from '../../../theme/mobile-theme' +import { useLargeSystemText } from '../../../theme/use-large-system-text' +import type { MobileQueuedMessageCard } from '../../mobile-structured-queued-message-cards' +import type { MobileQueuePause } from '../../mobile-structured-queued-message-feed' +import type { MobileQueuedMessageEdit } from '../../use-mobile-structured-queued-message-controls' +import type { MobileQueuedMessageInlineEditor } from '../../use-mobile-structured-queued-edit' +import { MobileQueuedMessageCardRow } from '../../MobileQueuedMessageCardRow' +import { MobileQueuedMessageScrollList } from '../../MobileQueuedMessageScrollList' import { queuedMessageStyles as styles } from './mobile-native-chat-queued-message-styles' // Use NUL-prefixed header keys because message ids cannot contain NUL. diff --git a/mobile/src/session/MobileNativeChatSessionOptionPickers.test.ts b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.test.ts similarity index 97% rename from mobile/src/session/MobileNativeChatSessionOptionPickers.test.ts rename to mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.test.ts index 8e12e76f211..1db66529453 100644 --- a/mobile/src/session/MobileNativeChatSessionOptionPickers.test.ts +++ b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.test.ts @@ -2,19 +2,22 @@ import { createElement, useState, type ReactNode } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { AccessibilityInfo, Platform } from 'react-native' -import { colors } from '../theme/mobile-theme' -import { structuredAgentSessionPermissionDescriptor } from '../../../src/shared/structured-agent-session-permission-option' -import { createStructuredAgentSessionOptionState } from '../../../src/shared/structured-agent-session-options' +import { colors } from '../../../theme/mobile-theme' +import { structuredAgentSessionPermissionDescriptor } from '../../../../../src/shared/structured-agent-session-permission-option' +import { createStructuredAgentSessionOptionState } from '../../../../../src/shared/structured-agent-session-options' import type { SessionOptionDescriptor, SessionOptionSelectChoice -} from '../../../src/shared/native-chat-session-options' +} from '../../../../../src/shared/native-chat-session-options' import { MobileNativeChatSessionOptionPickers, type MobileNativeChatPickerPresentation } from './MobileNativeChatSessionOptionPickers' import type { MobileNativeChatSessionOptionsController } from './use-mobile-native-chat-session-options' -import { findAllByHostType, findByHostType } from '../test-support/react-test-renderer-host-nodes' +import { + findAllByHostType, + findByHostType +} from '../../../test-support/react-test-renderer-host-nodes' vi.mock('react-native', () => ({ AccessibilityInfo: { announceForAccessibilityWithOptions: vi.fn() }, @@ -39,7 +42,7 @@ vi.mock('lucide-react-native', () => ({ ShieldCheck: 'ShieldCheck', X: 'X' })) -vi.mock('../components/BottomDrawer', async () => { +vi.mock('../../../components/BottomDrawer', async () => { const React = await import('react') return { BottomDrawer: ({ visible, children }: { visible: boolean; children?: ReactNode }) => diff --git a/mobile/src/session/MobileNativeChatSessionOptionPickers.tsx b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.tsx similarity index 97% rename from mobile/src/session/MobileNativeChatSessionOptionPickers.tsx rename to mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.tsx index 3b70728522e..8810b2f15e0 100644 --- a/mobile/src/session/MobileNativeChatSessionOptionPickers.tsx +++ b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.tsx @@ -19,14 +19,14 @@ import { X, type LucideIcon } from 'lucide-react-native' -import { BottomDrawer } from '../components/BottomDrawer' -import { colors, radii, spacing, typography } from '../theme/mobile-theme' +import { BottomDrawer } from '../../../components/BottomDrawer' +import { colors, radii, spacing, typography } from '../../../theme/mobile-theme' import { isReadOnlySessionOptionValue, sessionOptionDispatchUnconfirmed, type SessionOptionDescriptor, type SessionOptionValue -} from '../../../src/shared/native-chat-session-options' +} from '../../../../../src/shared/native-chat-session-options' import { mobileModelPillLabel, mobileOptionsPillLabel, @@ -43,12 +43,12 @@ import { SessionOptionSegments, showsSessionOptionAsSegments } from './MobileNativeChatSessionOptionSegments' -import { sortNativeChatSessionOptions } from '../../../src/shared/native-chat-session-option-snapshot' +import { sortNativeChatSessionOptions } from '../../../../../src/shared/native-chat-session-option-snapshot' import { AGENT_CHAT_PERMISSION_MODE_ICON_NAMES, AGENT_CHAT_PERMISSION_MODE_OPTION_ID, isAgentChatPermissionMode -} from '../../../src/shared/agent-chat-permission-mode' +} from '../../../../../src/shared/agent-chat-permission-mode' import type { MobileNativeChatSessionOptionsController } from './use-mobile-native-chat-session-options' export type MobileNativeChatPickerPresentation = { page: string | null; refocus: boolean } diff --git a/mobile/src/session/MobileNativeChatSessionOptionRows.test.ts b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionRows.test.ts similarity index 93% rename from mobile/src/session/MobileNativeChatSessionOptionRows.test.ts rename to mobile/src/session/native-chat/input/MobileNativeChatSessionOptionRows.test.ts index 2ce4e021a7e..3e31e72b041 100644 --- a/mobile/src/session/MobileNativeChatSessionOptionRows.test.ts +++ b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionRows.test.ts @@ -1,9 +1,12 @@ import { createElement } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { describe, expect, it, vi } from 'vitest' -import type { SessionOptionDescriptor } from '../../../src/shared/native-chat-session-options' +import type { SessionOptionDescriptor } from '../../../../../src/shared/native-chat-session-options' import { DescriptorRows } from './MobileNativeChatSessionOptionRows' -import { findAllByHostType, findByHostType } from '../test-support/react-test-renderer-host-nodes' +import { + findAllByHostType, + findByHostType +} from '../../../test-support/react-test-renderer-host-nodes' vi.mock('react-native', () => ({ Pressable: 'Pressable', diff --git a/mobile/src/session/MobileNativeChatSessionOptionRows.tsx b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionRows.tsx similarity index 98% rename from mobile/src/session/MobileNativeChatSessionOptionRows.tsx rename to mobile/src/session/native-chat/input/MobileNativeChatSessionOptionRows.tsx index e3bd912a36b..8c10d0a7530 100644 --- a/mobile/src/session/MobileNativeChatSessionOptionRows.tsx +++ b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionRows.tsx @@ -1,12 +1,12 @@ import { Pressable, StyleSheet, Switch, Text, View } from 'react-native' import { Check, ChevronRight, ShieldAlert, type LucideIcon } from 'lucide-react-native' -import { colors, radii, spacing, typography } from '../theme/mobile-theme' +import { colors, radii, spacing, typography } from '../../../theme/mobile-theme' import { sessionOptionValueMarker, type SessionOptionDescriptor, type SessionOptionValueMarker, type SessionOptionValue -} from '../../../src/shared/native-chat-session-options' +} from '../../../../../src/shared/native-chat-session-options' export function SessionOptionCaption({ children }: { children: string }): React.JSX.Element { return {children} diff --git a/mobile/src/session/MobileNativeChatSessionOptionSegments.tsx b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionSegments.tsx similarity index 89% rename from mobile/src/session/MobileNativeChatSessionOptionSegments.tsx rename to mobile/src/session/native-chat/input/MobileNativeChatSessionOptionSegments.tsx index 07479045593..a6bb761266c 100644 --- a/mobile/src/session/MobileNativeChatSessionOptionSegments.tsx +++ b/mobile/src/session/native-chat/input/MobileNativeChatSessionOptionSegments.tsx @@ -1,11 +1,11 @@ import { StyleSheet, Text, View } from 'react-native' -import { MobileSegmentedControl } from '../components/MobileSegmentedControl' -import { colors, spacing, typography } from '../theme/mobile-theme' +import { MobileSegmentedControl } from '../../../components/MobileSegmentedControl' +import { colors, spacing, typography } from '../../../theme/mobile-theme' import { sessionOptionDispatchUnconfirmed, type SessionOptionDescriptor, type SessionOptionValue -} from '../../../src/shared/native-chat-session-options' +} from '../../../../../src/shared/native-chat-session-options' import { SessionOptionCaption } from './MobileNativeChatSessionOptionRows' // Five fit across a phone's sheet; more read better as a list on their own page. diff --git a/mobile/src/session/MobileNativeChatStopButton.tsx b/mobile/src/session/native-chat/input/MobileNativeChatStopButton.tsx similarity index 76% rename from mobile/src/session/MobileNativeChatStopButton.tsx rename to mobile/src/session/native-chat/input/MobileNativeChatStopButton.tsx index 965bb244546..521931bb69c 100644 --- a/mobile/src/session/MobileNativeChatStopButton.tsx +++ b/mobile/src/session/native-chat/input/MobileNativeChatStopButton.tsx @@ -1,8 +1,8 @@ import { ActivityIndicator, Pressable } from 'react-native' import { Square } from 'lucide-react-native' -import { NATIVE_CHAT_TURN_STATUS_COPY } from '../../../src/shared/native-chat-turn-status' -import { colors } from '../theme/mobile-theme' -import { mobileNativeChatComposerStyles as styles } from './native-chat/composer/mobile-native-chat-composer-styles' +import { NATIVE_CHAT_TURN_STATUS_COPY } from '../../../../../src/shared/native-chat-turn-status' +import { colors } from '../../../theme/mobile-theme' +import { mobileNativeChatComposerStyles as styles } from '../composer/mobile-native-chat-composer-styles' // held tracks this phone’s in-flight Stop request, not the host’s stopping status. export function MobileNativeChatStopButton({ diff --git a/mobile/src/session/mobile-native-chat-queued-message-styles.ts b/mobile/src/session/native-chat/input/mobile-native-chat-queued-message-styles.ts similarity index 95% rename from mobile/src/session/mobile-native-chat-queued-message-styles.ts rename to mobile/src/session/native-chat/input/mobile-native-chat-queued-message-styles.ts index 9e3a3a510ed..5d1c200a7be 100644 --- a/mobile/src/session/mobile-native-chat-queued-message-styles.ts +++ b/mobile/src/session/native-chat/input/mobile-native-chat-queued-message-styles.ts @@ -1,6 +1,6 @@ import { StyleSheet } from 'react-native' -import { colors, radii, spacing, typography } from '../theme/mobile-theme' -import { COMPOSER_INSET_TOP } from './native-chat/composer/mobile-native-chat-composer-styles' +import { colors, radii, spacing, typography } from '../../../theme/mobile-theme' +import { COMPOSER_INSET_TOP } from '../composer/mobile-native-chat-composer-styles' // Keep 44pt targets inside the parent row because Android drops outside touches. const MIN_TOUCH_TARGET = 44 diff --git a/mobile/src/session/mobile-native-chat-session-option-labels.ts b/mobile/src/session/native-chat/input/mobile-native-chat-session-option-labels.ts similarity index 97% rename from mobile/src/session/mobile-native-chat-session-option-labels.ts rename to mobile/src/session/native-chat/input/mobile-native-chat-session-option-labels.ts index b2cb7ba1fea..6d6a3ec3049 100644 --- a/mobile/src/session/mobile-native-chat-session-option-labels.ts +++ b/mobile/src/session/native-chat/input/mobile-native-chat-session-option-labels.ts @@ -3,7 +3,7 @@ import { type SessionOptionDescriptor, type SessionOptionDisabledReason, type SessionOptionSelectChoice -} from '../../../src/shared/native-chat-session-options' +} from '../../../../../src/shared/native-chat-session-options' export function mobileSessionOptionDisabledReason( reason: SessionOptionDisabledReason | undefined diff --git a/mobile/src/session/mobile-native-chat-session-option-persistence.test.ts b/mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.test.ts similarity index 95% rename from mobile/src/session/mobile-native-chat-session-option-persistence.test.ts rename to mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.test.ts index 28be1af40e2..618c0aa8f2b 100644 --- a/mobile/src/session/mobile-native-chat-session-option-persistence.test.ts +++ b/mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.test.ts @@ -2,9 +2,9 @@ import { describe, expect, it, vi } from 'vitest' import { applyNativeChatSessionOptionSettingsMutation, resolveStructuredLaunchSeedOptions -} from '../../../src/shared/native-chat-session-option-defaults' -import type { PersistedNativeChatSessionOptions } from '../../../src/shared/native-chat-session-options' -import type { RpcClient } from '../transport/rpc-client' +} from '../../../../../src/shared/native-chat-session-option-defaults' +import type { PersistedNativeChatSessionOptions } from '../../../../../src/shared/native-chat-session-options' +import type { RpcClient } from '../../../transport/rpc-client' import { persistMobileStructuredOptionPicks } from './mobile-native-chat-session-option-persistence' function hostClient(initial?: PersistedNativeChatSessionOptions) { diff --git a/mobile/src/session/mobile-native-chat-session-option-persistence.ts b/mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.ts similarity index 73% rename from mobile/src/session/mobile-native-chat-session-option-persistence.ts rename to mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.ts index 8d7c8bc25cf..608bf98a5e3 100644 --- a/mobile/src/session/mobile-native-chat-session-option-persistence.ts +++ b/mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.ts @@ -1,7 +1,7 @@ -import type { AgentType } from '../../../src/shared/agent-status-types' -import type { StructuredSessionOptionPick } from '../../../src/shared/structured-agent-session-options' -import type { RpcClient } from '../transport/rpc-client' -import { nativeChatSessionOptionsWrite } from './mobile-session-launch-operations' +import type { AgentType } from '../../../../../src/shared/agent-status-types' +import type { StructuredSessionOptionPick } from '../../../../../src/shared/structured-agent-session-options' +import type { RpcClient } from '../../../transport/rpc-client' +import { nativeChatSessionOptionsWrite } from '../../mobile-session-launch-operations' // Persist picks on the host that seeds future sessions; best-effort failure only loses that next-session default. export function persistMobileStructuredOptionPicks(args: { diff --git a/mobile/src/session/use-mobile-native-chat-queued-edit-focus.test.tsx b/mobile/src/session/native-chat/input/use-mobile-native-chat-queued-edit-focus.test.tsx similarity index 96% rename from mobile/src/session/use-mobile-native-chat-queued-edit-focus.test.tsx rename to mobile/src/session/native-chat/input/use-mobile-native-chat-queued-edit-focus.test.tsx index c2ec28b3651..afa12b94d94 100644 --- a/mobile/src/session/use-mobile-native-chat-queued-edit-focus.test.tsx +++ b/mobile/src/session/native-chat/input/use-mobile-native-chat-queued-edit-focus.test.tsx @@ -2,7 +2,7 @@ import { createElement } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useMobileNativeChatQueuedEditFocus } from './use-mobile-native-chat-queued-edit-focus' -import type { MobileQueuedMessageEdit } from './use-mobile-structured-queued-message-controls' +import type { MobileQueuedMessageEdit } from '../../use-mobile-structured-queued-message-controls' type Focus = ReturnType diff --git a/mobile/src/session/use-mobile-native-chat-queued-edit-focus.ts b/mobile/src/session/native-chat/input/use-mobile-native-chat-queued-edit-focus.ts similarity index 89% rename from mobile/src/session/use-mobile-native-chat-queued-edit-focus.ts rename to mobile/src/session/native-chat/input/use-mobile-native-chat-queued-edit-focus.ts index 79777e6a83e..730c71eeb63 100644 --- a/mobile/src/session/use-mobile-native-chat-queued-edit-focus.ts +++ b/mobile/src/session/native-chat/input/use-mobile-native-chat-queued-edit-focus.ts @@ -1,6 +1,6 @@ import { useMemo, useRef, type RefObject } from 'react' import type { TextInput } from 'react-native' -import type { MobileQueuedMessageEdit } from './use-mobile-structured-queued-message-controls' +import type { MobileQueuedMessageEdit } from '../../use-mobile-structured-queued-message-controls' // Focus after a queued Edit actually copies text; empty copies preserve current focus. export function useMobileNativeChatQueuedEditFocus(onEdit: MobileQueuedMessageEdit | undefined): { diff --git a/mobile/src/session/use-mobile-native-chat-session-option-controller.test.ts b/mobile/src/session/native-chat/input/use-mobile-native-chat-session-option-controller.test.ts similarity index 100% rename from mobile/src/session/use-mobile-native-chat-session-option-controller.test.ts rename to mobile/src/session/native-chat/input/use-mobile-native-chat-session-option-controller.test.ts diff --git a/mobile/src/session/use-mobile-native-chat-session-option-controller.ts b/mobile/src/session/native-chat/input/use-mobile-native-chat-session-option-controller.ts similarity index 89% rename from mobile/src/session/use-mobile-native-chat-session-option-controller.ts rename to mobile/src/session/native-chat/input/use-mobile-native-chat-session-option-controller.ts index d4f95f5cb2c..d76a0970edb 100644 --- a/mobile/src/session/use-mobile-native-chat-session-option-controller.ts +++ b/mobile/src/session/native-chat/input/use-mobile-native-chat-session-option-controller.ts @@ -1,14 +1,14 @@ -import type { RpcClient } from '../transport/rpc-client' -import { useMobileOmpModelDiscovery } from './use-mobile-omp-model-discovery' -import type { AgentSessionConversationCommand } from '../../../src/shared/agent-session/agent-session-conversation-command' +import type { RpcClient } from '../../../transport/rpc-client' +import { useMobileOmpModelDiscovery } from '../../use-mobile-omp-model-discovery' +import type { AgentSessionConversationCommand } from '../../../../../src/shared/agent-session/agent-session-conversation-command' import { useCallback, useMemo } from 'react' import type { SessionOptionDescriptor, SessionOptionValue, SessionOptionsSurface -} from '../../../src/shared/native-chat-session-options' -import { mobileNativeChatScopeKey } from './native-chat/mobile-native-chat-scope-key' -import type { MobileNativeChatSendOutcome } from './native-chat/mobile-native-chat-send' +} from '../../../../../src/shared/native-chat-session-options' +import { mobileNativeChatScopeKey } from '../mobile-native-chat-scope-key' +import type { MobileNativeChatSendOutcome } from '../mobile-native-chat-send' import type { MobileNativeChatSessionOptionPickersProps } from './MobileNativeChatSessionOptionPickers' import { useMobileNativeChatSessionOptions, diff --git a/mobile/src/session/use-mobile-native-chat-session-options.test.ts b/mobile/src/session/native-chat/input/use-mobile-native-chat-session-options.test.ts similarity index 98% rename from mobile/src/session/use-mobile-native-chat-session-options.test.ts rename to mobile/src/session/native-chat/input/use-mobile-native-chat-session-options.test.ts index cbadc0c3e78..eff4df304de 100644 --- a/mobile/src/session/use-mobile-native-chat-session-options.test.ts +++ b/mobile/src/session/native-chat/input/use-mobile-native-chat-session-options.test.ts @@ -1,12 +1,12 @@ import { createElement } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { MobileNativeChatSendOutcome } from './native-chat/mobile-native-chat-send' +import type { MobileNativeChatSendOutcome } from '../mobile-native-chat-send' import { - clearMobileSessionOptionRecordsForTests, useMobileNativeChatSessionOptions, type MobileNativeChatSessionOptionsController } from './use-mobile-native-chat-session-options' +import { clearMobileSessionOptionRecordsForTests } from '../../mobile-session-option-records' type HookArgs = Parameters[0] diff --git a/mobile/src/session/use-mobile-native-chat-session-options.ts b/mobile/src/session/native-chat/input/use-mobile-native-chat-session-options.ts similarity index 92% rename from mobile/src/session/use-mobile-native-chat-session-options.ts rename to mobile/src/session/native-chat/input/use-mobile-native-chat-session-options.ts index 5365517e91c..b3ff3a98e16 100644 --- a/mobile/src/session/use-mobile-native-chat-session-options.ts +++ b/mobile/src/session/native-chat/input/use-mobile-native-chat-session-options.ts @@ -1,27 +1,26 @@ -import { appliedReportByScope, getScopedRecord } from './mobile-session-option-records' -export { clearMobileSessionOptionRecordsForTests } from './mobile-session-option-records' -import { mobileOmpSessionCatalog } from './mobile-omp-session-catalog' -import type { AgentSessionConversationCommand } from '../../../src/shared/agent-session/agent-session-conversation-command' +import { appliedReportByScope, getScopedRecord } from '../../mobile-session-option-records' +import { mobileOmpSessionCatalog } from '../../mobile-omp-session-catalog' +import type { AgentSessionConversationCommand } from '../../../../../src/shared/agent-session/agent-session-conversation-command' import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react' -import { - getAgentSessionOptionCatalog, - type CatalogCommandDelivery, - type CatalogModel -} from '../../../src/shared/agent-session-option-catalog' +import { getAgentSessionOptionCatalog } from '../../../../../src/shared/agent-session-option-catalog' +import type { + CatalogCommandDelivery, + CatalogModel +} from '../../../../../src/shared/agent-session-option-catalog-types' import type { SessionOptionsSurface, SessionOptionDescriptor, SessionOptionValue -} from '../../../src/shared/native-chat-session-options' -import type { MobileNativeChatSendOutcome } from './native-chat/mobile-native-chat-send' +} from '../../../../../src/shared/native-chat-session-options' +import type { MobileNativeChatSendOutcome } from '../mobile-native-chat-send' import { buildNativeChatSessionOptionCommand, recordNativeChatSessionOptionCommand -} from '../../../src/shared/native-chat-session-option-commands' +} from '../../../../../src/shared/native-chat-session-option-commands' import { buildNativeChatSessionOptionSnapshot, withTrackedNativeChatModel -} from '../../../src/shared/native-chat-session-option-snapshot' +} from '../../../../../src/shared/native-chat-session-option-snapshot' import { applyNativeChatReportedSessionOptions, clearNativeChatSessionModel, @@ -29,7 +28,7 @@ import { isFlipOnlyMidSession, matchNativeChatCatalogModelId, setTrackedSessionOption -} from '../../../src/shared/native-chat-session-option-state' +} from '../../../../../src/shared/native-chat-session-option-state' export type MobileNativeChatSessionOptionsController = { optionSurface?: SessionOptionsSurface diff --git a/mobile/src/session/use-mobile-native-chat-controller.ts b/mobile/src/session/use-mobile-native-chat-controller.ts index 8a1af933a95..307c3d166c2 100644 --- a/mobile/src/session/use-mobile-native-chat-controller.ts +++ b/mobile/src/session/use-mobile-native-chat-controller.ts @@ -8,7 +8,7 @@ import { useMobileNativeChatDrafts } from './native-chat/composer/use-mobile-nat import { useMobileNativeChatFileSearch } from './native-chat/composer/use-mobile-native-chat-file-search' import { useMobileNativeChatMessageSend } from './use-mobile-native-chat-message-send' import { mobileNativeChatStreamPreview } from './native-chat/mobile-native-chat-streaming-gate' -import { useMobileNativeChatSessionOptionController } from './use-mobile-native-chat-session-option-controller' +import { useMobileNativeChatSessionOptionController } from './native-chat/input/use-mobile-native-chat-session-option-controller' import { useMobileNativeChatSessionLane } from './use-mobile-native-chat-session-lane' import { useMobileStructuredNativeChatSendBridge } from './use-mobile-structured-native-chat-send-bridge' import { useMobileNativeChatPrompts } from './use-mobile-native-chat-prompts' diff --git a/mobile/src/session/use-mobile-omp-model-discovery.test.ts b/mobile/src/session/use-mobile-omp-model-discovery.test.ts index d1640def363..dfb71e36f43 100644 --- a/mobile/src/session/use-mobile-omp-model-discovery.test.ts +++ b/mobile/src/session/use-mobile-omp-model-discovery.test.ts @@ -2,10 +2,8 @@ import { createElement } from 'react' import { act, create } from 'react-test-renderer' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useMobileOmpModelDiscovery } from './use-mobile-omp-model-discovery' -import { - useMobileNativeChatSessionOptions, - clearMobileSessionOptionRecordsForTests -} from './use-mobile-native-chat-session-options' +import { useMobileNativeChatSessionOptions } from './native-chat/input/use-mobile-native-chat-session-options' +import { clearMobileSessionOptionRecordsForTests } from './mobile-session-option-records' import type { RpcResponse } from '../transport/types' diff --git a/mobile/src/session/use-mobile-structured-agent-options.ts b/mobile/src/session/use-mobile-structured-agent-options.ts index 7bd18db21a4..8e3f45aa865 100644 --- a/mobile/src/session/use-mobile-structured-agent-options.ts +++ b/mobile/src/session/use-mobile-structured-agent-options.ts @@ -25,7 +25,7 @@ import { legacyHostPermissionDescriptor } from '../../../src/shared/structured-a import type { RpcClient } from '../transport/rpc-client' import type { StructuredAgentSessionHostSupport } from './mobile-structured-agent-session-host-support' import type { StructuredAgentSessionMutate } from './mobile-structured-agent-session-rpc' -import { persistMobileStructuredOptionPicks } from './mobile-native-chat-session-option-persistence' +import { persistMobileStructuredOptionPicks } from './native-chat/input/mobile-native-chat-session-option-persistence' import { useMobileHostModelCatalogUpgrade } from './use-mobile-host-model-catalog-upgrade' import { mobileCreatedStructuredSession } from './mobile-created-structured-sessions' import { encodeStructuredAgentSessionOptionValue } from '../../../src/shared/structured-agent-session-option-codec' diff --git a/mobile/src/test-support/rpc-recording/adapters/native-chat-write-mount-adapters.ts b/mobile/src/test-support/rpc-recording/adapters/native-chat-write-mount-adapters.ts index 37d2e086120..3ec6c51603e 100644 --- a/mobile/src/test-support/rpc-recording/adapters/native-chat-write-mount-adapters.ts +++ b/mobile/src/test-support/rpc-recording/adapters/native-chat-write-mount-adapters.ts @@ -2,6 +2,7 @@ import type { MountAdapter } from '../recording-scenario' import { mountFixture } from '../recorder-fixture-shape' import type { operationModuleLoader } from '../operation-module-loader' import type * as NativeChatSend from '../../../session/native-chat/mobile-native-chat-send' +import type * as NativeChatSessionOptionPersistence from '../../../session/native-chat/input/mobile-native-chat-session-option-persistence' const TERMINAL = 'terminal-1' const DEVICE_TOKEN = 'device-token-1' @@ -61,10 +62,8 @@ export function nativeChatWriteMountAdapters( } }, 'nativeChat.session-option-pick': ({ client }) => { - const persist = modules.load< - typeof import('../../../session/mobile-native-chat-session-option-persistence') - >( - 'mobile/src/session/mobile-native-chat-session-option-persistence.ts' + const persist = modules.load( + 'mobile/src/session/native-chat/input/mobile-native-chat-session-option-persistence.ts' ).persistMobileStructuredOptionPicks let settled: unknown = 'unsent' return {