@opengeni/react-native 1.4.5-canary.37615713321001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +74 -0
- package/dist/adapters.d.ts +53 -0
- package/dist/adapters.js +3 -0
- package/dist/adapters.js.map +1 -0
- package/dist/attachments.d.ts +75 -0
- package/dist/chunk-3VSZAQ7G.js +391 -0
- package/dist/chunk-3VSZAQ7G.js.map +1 -0
- package/dist/chunk-5ZVK7WKA.js +88 -0
- package/dist/chunk-5ZVK7WKA.js.map +1 -0
- package/dist/chunk-EEDIMY3L.js +240 -0
- package/dist/chunk-EEDIMY3L.js.map +1 -0
- package/dist/chunk-M23SDI4R.js +83 -0
- package/dist/chunk-M23SDI4R.js.map +1 -0
- package/dist/chunk-PHJBSAR3.js +2006 -0
- package/dist/chunk-PHJBSAR3.js.map +1 -0
- package/dist/environment.d.ts +19 -0
- package/dist/expo.d.ts +25 -0
- package/dist/expo.js +267 -0
- package/dist/expo.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +3345 -0
- package/dist/index.js.map +1 -0
- package/dist/presentation.d.ts +262 -0
- package/dist/read-acknowledgement.d.ts +39 -0
- package/dist/realtime/call-events.d.ts +11 -0
- package/dist/realtime/call-view.d.ts +26 -0
- package/dist/realtime/expo-call.d.ts +11 -0
- package/dist/realtime/native-call.d.ts +104 -0
- package/dist/realtime/native-realtime.d.ts +35 -0
- package/dist/realtime/use-native-session-realtime.d.ts +25 -0
- package/dist/session-view.d.ts +87 -0
- package/dist/timeline/activity.d.ts +34 -0
- package/dist/timeline/composer.d.ts +86 -0
- package/dist/timeline/controls.d.ts +27 -0
- package/dist/timeline/decisions.d.ts +29 -0
- package/dist/timeline/feedback.d.ts +26 -0
- package/dist/timeline/icon-nodes.generated.d.ts +738 -0
- package/dist/timeline/icon.d.ts +11 -0
- package/dist/timeline/index.d.ts +32 -0
- package/dist/timeline/index.js +5419 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/timeline/markdown.d.ts +11 -0
- package/dist/timeline/markdown.js +415 -0
- package/dist/timeline/markdown.js.map +1 -0
- package/dist/timeline/message-attachments.d.ts +13 -0
- package/dist/timeline/message-timeline.d.ts +36 -0
- package/dist/timeline/model-picker.d.ts +17 -0
- package/dist/timeline/primitives.d.ts +85 -0
- package/dist/timeline/queue-dock.d.ts +19 -0
- package/dist/timeline/session-actions.d.ts +34 -0
- package/dist/timeline/session-list.d.ts +50 -0
- package/dist/timeline/session-screen.d.ts +35 -0
- package/dist/timeline/session-signals.d.ts +37 -0
- package/dist/timeline/sheet.d.ts +14 -0
- package/dist/timeline/theme.d.ts +58 -0
- package/dist/timeline/thinking-orb.d.ts +13 -0
- package/dist/timeline/turn.d.ts +80 -0
- package/dist/ui/attention.d.ts +14 -0
- package/dist/ui/cards.d.ts +21 -0
- package/dist/ui/composer.d.ts +21 -0
- package/dist/ui/format.d.ts +13 -0
- package/dist/ui/icons.d.ts +9 -0
- package/dist/ui/index.d.ts +12 -0
- package/dist/ui/index.js +1757 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/steps-sheet.d.ts +10 -0
- package/dist/ui/theme.d.ts +63 -0
- package/dist/ui/timeline.d.ts +48 -0
- package/dist/ui/web-tokens.gen.d.ts +90 -0
- package/dist/use-native-session.d.ts +40 -0
- package/dist/view-model.d.ts +52 -0
- package/dist/voice-input.d.ts +102 -0
- package/dist/webrtc.d.ts +9 -0
- package/dist/webrtc.js +19 -0
- package/dist/webrtc.js.map +1 -0
- package/expo-module.config.json +7 -0
- package/ios/OpenGeniCall.podspec +22 -0
- package/ios/OpenGeniCallAppDelegateSubscriber.swift +29 -0
- package/ios/OpenGeniCallCenter.swift +189 -0
- package/ios/OpenGeniCallModule.swift +64 -0
- package/package.json +93 -0
- package/src/adapters.ts +150 -0
- package/src/attachments.ts +396 -0
- package/src/environment.tsx +214 -0
- package/src/expo.ts +295 -0
- package/src/index.ts +98 -0
- package/src/presentation.ts +285 -0
- package/src/read-acknowledgement.ts +72 -0
- package/src/realtime/call-events.ts +41 -0
- package/src/realtime/call-view.tsx +220 -0
- package/src/realtime/expo-call.ts +49 -0
- package/src/realtime/native-call.ts +266 -0
- package/src/realtime/native-realtime.ts +115 -0
- package/src/realtime/use-native-session-realtime.ts +29 -0
- package/src/session-view.tsx +2251 -0
- package/src/timeline/activity.tsx +736 -0
- package/src/timeline/composer.tsx +686 -0
- package/src/timeline/controls.tsx +151 -0
- package/src/timeline/decisions.tsx +651 -0
- package/src/timeline/feedback.tsx +251 -0
- package/src/timeline/icon-nodes.generated.ts +1830 -0
- package/src/timeline/icon.tsx +44 -0
- package/src/timeline/index.ts +67 -0
- package/src/timeline/markdown.tsx +510 -0
- package/src/timeline/message-attachments.tsx +155 -0
- package/src/timeline/message-timeline.tsx +1042 -0
- package/src/timeline/model-picker.tsx +450 -0
- package/src/timeline/primitives.tsx +561 -0
- package/src/timeline/queue-dock.tsx +331 -0
- package/src/timeline/session-actions.tsx +379 -0
- package/src/timeline/session-list.tsx +338 -0
- package/src/timeline/session-screen.tsx +488 -0
- package/src/timeline/session-signals.tsx +312 -0
- package/src/timeline/sheet.tsx +153 -0
- package/src/timeline/theme.tsx +128 -0
- package/src/timeline/thinking-orb.tsx +93 -0
- package/src/timeline/turn.tsx +569 -0
- package/src/ui/attention.tsx +220 -0
- package/src/ui/cards.tsx +267 -0
- package/src/ui/composer.tsx +296 -0
- package/src/ui/format.ts +86 -0
- package/src/ui/icons.tsx +131 -0
- package/src/ui/index.ts +18 -0
- package/src/ui/steps-sheet.tsx +71 -0
- package/src/ui/theme.ts +261 -0
- package/src/ui/timeline.tsx +837 -0
- package/src/ui/web-tokens.gen.ts +94 -0
- package/src/use-native-session.ts +219 -0
- package/src/view-model.ts +485 -0
- package/src/voice-input.ts +382 -0
- package/src/webrtc.ts +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/environment.tsx","../src/attachments.ts","../src/read-acknowledgement.ts","../src/use-native-session.ts","../src/presentation.ts","../src/view-model.ts","../src/session-view.tsx","../src/realtime/native-realtime.ts","../src/realtime/use-native-session-realtime.ts","../src/realtime/native-call.ts","../src/realtime/call-view.tsx"],"names":["useState","useLayoutEffect","useEffect","useMemo","useRef","useCallback","jsx","jsxs","View","styles","Pressable","Text","StyleSheet"],"mappings":"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","file":"index.js","sourcesContent":["import {\n createContext,\n type ReactNode,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from \"react\";\nimport type { OpenGeniReactNativeAdapters } from \"./adapters\";\nimport { sha256HexToArrayBuffer } from \"./adapters\";\n\ninterface EventTargetLike {\n addEventListener(type: string, listener: () => void): void;\n removeEventListener(type: string, listener: () => void): void;\n dispatch(type: string): void;\n}\n\nfunction createEventTarget(): EventTargetLike {\n const listeners = new Map<string, Set<() => void>>();\n return {\n addEventListener: (type, listener) => {\n const existing = listeners.get(type) ?? new Set<() => void>();\n existing.add(listener);\n listeners.set(type, existing);\n },\n removeEventListener: (type, listener) => {\n listeners.get(type)?.delete(listener);\n },\n dispatch: (type) => {\n for (const listener of listeners.get(type) ?? []) listener();\n },\n };\n}\n\ninterface InstalledEnvironment {\n cleanup(): void;\n}\n\n/** Install only the browser-compatible primitives currently read by the official session hooks. */\nexport function installOpenGeniReactNativeEnvironment(\n adapters: OpenGeniReactNativeAdapters,\n): InstalledEnvironment {\n const globals = globalThis;\n const windowTarget = createEventTarget();\n const documentTarget = createEventTarget();\n const existingWindow = Reflect.get(globals, \"window\");\n const existingSessionStorage = Reflect.get(globals, \"sessionStorage\");\n const existingDocument = Reflect.get(globals, \"document\");\n const existingCrypto = Reflect.get(globals, \"crypto\");\n const nativeWindow = createDelegatingObject(isObject(existingWindow) ? existingWindow : globals);\n let lifecycleState = adapters.lifecycle.currentState();\n\n const sessionStorage = {\n getItem: (key: string) => adapters.persistence.getItem(key),\n setItem: (key: string, value: string) => adapters.persistence.setItem(key, value),\n removeItem: (key: string) => adapters.persistence.removeItem(key),\n clear: () => adapters.persistence.clear(),\n key: () => null,\n get length() {\n return 0;\n },\n };\n\n const nativeCrypto = createDelegatingObject(isObject(existingCrypto) ? existingCrypto : null);\n const subtleValue = isObject(existingCrypto) ? Reflect.get(existingCrypto, \"subtle\") : undefined;\n const nativeSubtle = createDelegatingObject(isObject(subtleValue) ? subtleValue : null);\n Reflect.set(nativeCrypto, \"randomUUID\", () => adapters.crypto.randomUUID());\n Reflect.set(\n nativeSubtle,\n \"digest\",\n async (algorithm: AlgorithmIdentifier, data: BufferSource) => {\n const name = typeof algorithm === \"string\" ? algorithm : algorithm.name;\n if (name.toUpperCase() !== \"SHA-256\") {\n throw new TypeError(`Unsupported native digest algorithm: ${name}`);\n }\n const bytes =\n data instanceof ArrayBuffer\n ? new Uint8Array(data)\n : new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n return sha256HexToArrayBuffer(await adapters.crypto.sha256Hex(bytes));\n },\n );\n Reflect.set(nativeCrypto, \"subtle\", nativeSubtle);\n Reflect.set(globals, \"crypto\", nativeCrypto);\n\n Reflect.set(nativeWindow, \"sessionStorage\", sessionStorage);\n if (typeof Reflect.get(nativeWindow, \"setTimeout\") !== \"function\") {\n Reflect.set(nativeWindow, \"setTimeout\", globalThis.setTimeout.bind(globalThis));\n }\n if (typeof Reflect.get(nativeWindow, \"clearTimeout\") !== \"function\") {\n Reflect.set(nativeWindow, \"clearTimeout\", globalThis.clearTimeout.bind(globalThis));\n }\n if (typeof Reflect.get(nativeWindow, \"addEventListener\") !== \"function\") {\n Reflect.set(nativeWindow, \"addEventListener\", (type: string, listener: () => void) =>\n windowTarget.addEventListener(type, listener),\n );\n }\n if (typeof Reflect.get(nativeWindow, \"removeEventListener\") !== \"function\") {\n Reflect.set(nativeWindow, \"removeEventListener\", (type: string, listener: () => void) =>\n windowTarget.removeEventListener(type, listener),\n );\n }\n Reflect.set(globals, \"window\", nativeWindow);\n Reflect.set(globals, \"sessionStorage\", sessionStorage);\n\n const nativeDocument = {\n get visibilityState() {\n return lifecycleState === \"active\" ? \"visible\" : \"hidden\";\n },\n addEventListener: (type: string, listener: () => void) =>\n documentTarget.addEventListener(type, listener),\n removeEventListener: (type: string, listener: () => void) =>\n documentTarget.removeEventListener(type, listener),\n };\n Reflect.set(globals, \"document\", nativeDocument);\n\n const unsubscribe = adapters.lifecycle.subscribe((next) => {\n const wasActive = lifecycleState === \"active\";\n lifecycleState = next;\n documentTarget.dispatch(\"visibilitychange\");\n if (!wasActive && next === \"active\") windowTarget.dispatch(\"pageshow\");\n });\n\n return {\n cleanup: () => {\n unsubscribe();\n restoreGlobal(globals, \"window\", nativeWindow, existingWindow);\n restoreGlobal(globals, \"sessionStorage\", sessionStorage, existingSessionStorage);\n restoreGlobal(globals, \"document\", nativeDocument, existingDocument);\n restoreGlobal(globals, \"crypto\", nativeCrypto, existingCrypto);\n },\n };\n}\n\nfunction restoreGlobal(\n target: typeof globalThis,\n key: string,\n installedValue: unknown,\n previousValue: unknown,\n): void {\n if (Reflect.get(target, key) !== installedValue) return;\n if (previousValue === undefined) Reflect.deleteProperty(target, key);\n else Reflect.set(target, key, previousValue);\n}\n\nfunction isObject(value: unknown): value is object {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nfunction createDelegatingObject(prototype: object | null): object {\n const value = {};\n Object.setPrototypeOf(value, prototype);\n return value;\n}\n\nexport interface NativeEnvironmentContextValue {\n adapters: OpenGeniReactNativeAdapters;\n active: boolean;\n}\n\nconst NativeEnvironmentContext = createContext<NativeEnvironmentContextValue | null>(null);\n\nexport interface OpenGeniReactNativeProviderProps {\n adapters: OpenGeniReactNativeAdapters;\n children: ReactNode;\n loadingFallback?: ReactNode;\n}\n\nexport function OpenGeniReactNativeProvider({\n adapters,\n children,\n loadingFallback = null,\n}: OpenGeniReactNativeProviderProps) {\n const [hydrated, setHydrated] = useState(false);\n const [active, setActive] = useState(adapters.lifecycle.currentState() === \"active\");\n\n useEffect(() => {\n let mounted = true;\n setHydrated(false);\n void adapters.persistence.hydrate().then(() => {\n if (!mounted) return;\n setHydrated(true);\n });\n const unsubscribe = adapters.lifecycle.subscribe((state) => setActive(state === \"active\"));\n return () => {\n mounted = false;\n unsubscribe();\n };\n }, [adapters]);\n\n useLayoutEffect(() => {\n const installed = installOpenGeniReactNativeEnvironment(adapters);\n return () => {\n // React removes parent layout effects before passive effects in deleted children.\n // Keep the browser primitives alive until those official hook cleanups have run.\n globalThis.setTimeout(() => installed.cleanup(), 0);\n };\n }, [adapters]);\n\n const value = useMemo(() => ({ adapters, active }), [active, adapters]);\n if (!hydrated) return loadingFallback;\n return (\n <NativeEnvironmentContext.Provider value={value}>{children}</NativeEnvironmentContext.Provider>\n );\n}\n\nexport function useOpenGeniReactNativeEnvironment(): NativeEnvironmentContextValue {\n const value = useContext(NativeEnvironmentContext);\n if (!value) {\n throw new Error(\"OpenGeni native hooks require OpenGeniReactNativeProvider\");\n }\n return value;\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport type { FileAsset, ResourceRef } from \"@opengeni/sdk\";\nimport type { FileAttachmentClientLike } from \"@opengeni/react/session\";\nimport type { NativeCryptoAdapter, NativeFileAdapter, NativePickedFile } from \"./adapters\";\n\nexport type NativeAttachmentStatus = \"preparing\" | \"uploading\" | \"ready\" | \"failed\";\n\nexport const NATIVE_ATTACHMENT_PREPARATION_TIMEOUT_MS = 30_000;\n\nexport interface NativeAttachment {\n id: string;\n name: string;\n contentType: string;\n sizeBytes: number | null;\n kind: NativePickedFile[\"kind\"];\n previewUri?: string | undefined;\n status: NativeAttachmentStatus;\n file?: FileAsset | undefined;\n error?: string | undefined;\n}\n\nexport interface NativeFileAttachmentsResult {\n attachments: NativeAttachment[];\n readyResources: ResourceRef[];\n uploading: boolean;\n hasUnresolved: boolean;\n error: Error | null;\n pickDocuments(): Promise<void>;\n pickImages(): Promise<void>;\n addFiles(files: NativePickedFile[]): Promise<void>;\n retry(id: string): Promise<void>;\n remove(id: string): void;\n clear(): void;\n clearError(): void;\n /** Show already-uploaded files (a restored draft) as ready attachments. */\n restoreReady(files: Iterable<FileAsset>): void;\n}\n\nexport interface NativeAttachmentScope {\n client: FileAttachmentClientLike;\n workspaceId: string;\n sessionId: string;\n}\n\nexport function sameNativeAttachmentScope(\n left: NativeAttachmentScope,\n right: NativeAttachmentScope,\n): boolean {\n return (\n left.client === right.client &&\n left.workspaceId === right.workspaceId &&\n left.sessionId === right.sessionId\n );\n}\n\nexport function projectNativeAttachmentScopeState(\n scopeMatches: boolean,\n attachments: NativeAttachment[],\n error: Error | null,\n): { attachments: NativeAttachment[]; error: Error | null } {\n return scopeMatches ? { attachments, error } : { attachments: [], error: null };\n}\n\nexport async function runNativeAttachmentPicker(input: {\n generation: number;\n currentGeneration(): number;\n pick(): Promise<NativePickedFile[]>;\n addFiles(files: NativePickedFile[], generation: number): Promise<void>;\n onError(error: Error): void;\n}): Promise<\"added\" | \"failed\" | \"stale\"> {\n try {\n const files = await input.pick();\n if (input.currentGeneration() !== input.generation) return \"stale\";\n await input.addFiles(files, input.generation);\n return input.currentGeneration() === input.generation ? \"added\" : \"stale\";\n } catch (cause) {\n if (input.currentGeneration() !== input.generation) return \"stale\";\n input.onError(cause instanceof Error ? cause : new Error(String(cause)));\n return \"failed\";\n }\n}\n\nexport async function addNativeFilesForGeneration(input: {\n files: NativePickedFile[];\n generation: number;\n currentGeneration(): number;\n hasSource(id: string): boolean;\n rememberSource(file: NativePickedFile): void;\n appendAttachments(files: NativePickedFile[]): void;\n upload(file: NativePickedFile, generation: number): Promise<void>;\n}): Promise<void> {\n if (input.currentGeneration() !== input.generation) return;\n const unique = input.files.filter((file) => !input.hasSource(file.id));\n if (unique.length === 0) return;\n for (const file of unique) input.rememberSource(file);\n input.appendAttachments(unique);\n await unique.reduce(async (previous, file) => {\n await previous;\n if (input.currentGeneration() !== input.generation) return;\n await input.upload(file, input.generation);\n }, Promise.resolve());\n}\n\nexport async function prepareNativeAttachmentUpload(input: {\n source: NativePickedFile;\n files: NativeFileAdapter;\n crypto: NativeCryptoAdapter;\n timeoutMs?: number | undefined;\n}): Promise<{ bytes: Uint8Array; data: ArrayBuffer; sha256: string }> {\n const timeoutMs = input.timeoutMs ?? NATIVE_ATTACHMENT_PREPARATION_TIMEOUT_MS;\n const bytes = await withTimeout(\n input.files.readBytes(input.source),\n timeoutMs,\n \"File preparation timed out. Retry the upload.\",\n );\n const sha256 = await withTimeout(\n input.crypto.sha256Hex(bytes),\n timeoutMs,\n \"File verification timed out. Retry the upload.\",\n );\n // The OpenGeni SDK accepts either Uint8Array or ArrayBuffer, but its\n // Uint8Array snapshot uses `new Blob([view])`. React Native's Blob rejects\n // ArrayBufferView inputs, so pass an exact ArrayBuffer and avoid that branch.\n const uploadBytes = Uint8Array.from(bytes);\n const data = uploadBytes.buffer;\n return { bytes, data, sha256 };\n}\n\nasync function withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number,\n message: string,\n): Promise<T> {\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new Error(\"Native attachment timeout must be a positive number\");\n }\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timedOut = new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(() => reject(new Error(message)), timeoutMs);\n });\n try {\n return await Promise.race([operation, timedOut]);\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n }\n}\n\nexport function useNativeFileAttachments(input: {\n client: FileAttachmentClientLike;\n workspaceId: string;\n sessionId: string;\n files: NativeFileAdapter;\n crypto: NativeCryptoAdapter;\n}): NativeFileAttachmentsResult {\n const [attachments, setAttachments] = useState<NativeAttachment[]>([]);\n const [error, setError] = useState<Error | null>(null);\n const sources = useRef(new Map<string, NativePickedFile>());\n const attempts = useRef(new Map<string, number>());\n const scopeGeneration = useRef(0);\n const currentScope = {\n client: input.client,\n workspaceId: input.workspaceId,\n sessionId: input.sessionId,\n } satisfies NativeAttachmentScope;\n const previousScope = useRef(currentScope);\n const scopeMatches = sameNativeAttachmentScope(previousScope.current, currentScope);\n\n useLayoutEffect(() => {\n const nextScope = {\n client: input.client,\n workspaceId: input.workspaceId,\n sessionId: input.sessionId,\n };\n if (sameNativeAttachmentScope(previousScope.current, nextScope)) return;\n previousScope.current = nextScope;\n scopeGeneration.current += 1;\n sources.current.clear();\n attempts.current.clear();\n setAttachments([]);\n setError(null);\n }, [input.client, input.sessionId, input.workspaceId]);\n\n useEffect(\n () => () => {\n scopeGeneration.current += 1;\n sources.current.clear();\n attempts.current.clear();\n },\n [],\n );\n\n const upload = useCallback(\n async (source: NativePickedFile, generation = scopeGeneration.current) => {\n if (scopeGeneration.current !== generation) return;\n const attempt = (attempts.current.get(source.id) ?? 0) + 1;\n attempts.current.set(source.id, attempt);\n setAttachments((current) =>\n current.map((entry) =>\n entry.id === source.id ? { ...entry, status: \"preparing\", error: undefined } : entry,\n ),\n );\n try {\n const { data, sha256 } = await prepareNativeAttachmentUpload({\n source,\n files: input.files,\n crypto: input.crypto,\n });\n if (\n scopeGeneration.current !== generation ||\n attempts.current.get(source.id) !== attempt ||\n !sources.current.has(source.id)\n ) {\n return;\n }\n setAttachments((current) =>\n current.map((entry) =>\n entry.id === source.id ? { ...entry, status: \"uploading\" } : entry,\n ),\n );\n const file = await input.client.uploadFile(input.workspaceId, {\n filename: source.name,\n contentType: source.contentType,\n data,\n sha256,\n });\n if (\n scopeGeneration.current !== generation ||\n attempts.current.get(source.id) !== attempt ||\n !sources.current.has(source.id)\n ) {\n return;\n }\n sources.current.delete(source.id);\n attempts.current.delete(source.id);\n setAttachments((current) =>\n current.map((entry) =>\n entry.id === source.id ? { ...entry, status: \"ready\", file, error: undefined } : entry,\n ),\n );\n } catch (cause) {\n if (\n scopeGeneration.current !== generation ||\n attempts.current.get(source.id) !== attempt ||\n !sources.current.has(source.id)\n ) {\n return;\n }\n setAttachments((current) =>\n current.map((entry) =>\n entry.id === source.id\n ? {\n ...entry,\n status: \"failed\",\n error: cause instanceof Error ? cause.message : String(cause),\n }\n : entry,\n ),\n );\n }\n },\n [input.client, input.crypto, input.files, input.workspaceId],\n );\n\n const addFilesForGeneration = useCallback(\n async (files: NativePickedFile[], generation: number) => {\n await addNativeFilesForGeneration({\n files,\n generation,\n currentGeneration: () => scopeGeneration.current,\n hasSource: (id) => sources.current.has(id),\n rememberSource: (file) => sources.current.set(file.id, file),\n appendAttachments: (unique) =>\n setAttachments((current) => [\n ...current,\n ...unique.map(\n (file): NativeAttachment => ({\n id: file.id,\n name: file.name,\n contentType: file.contentType,\n sizeBytes: file.sizeBytes,\n kind: file.kind,\n ...(file.previewUri ? { previewUri: file.previewUri } : {}),\n status: \"preparing\",\n }),\n ),\n ]),\n upload,\n });\n },\n [upload],\n );\n\n const addFiles = useCallback(\n async (files: NativePickedFile[]) =>\n await addFilesForGeneration(files, scopeGeneration.current),\n [addFilesForGeneration],\n );\n\n const pickFiles = useCallback(\n async (pick: () => Promise<NativePickedFile[]>) => {\n const generation = scopeGeneration.current;\n setError(null);\n await runNativeAttachmentPicker({\n generation,\n currentGeneration: () => scopeGeneration.current,\n pick,\n addFiles: addFilesForGeneration,\n onError: setError,\n });\n },\n [addFilesForGeneration],\n );\n\n const pickDocuments = useCallback(\n async () => await pickFiles(() => input.files.pickDocuments()),\n [input.files, pickFiles],\n );\n\n const pickImages = useCallback(\n async () => await pickFiles(() => input.files.pickImages()),\n [input.files, pickFiles],\n );\n\n const retry = useCallback(\n async (id: string) => {\n const source = sources.current.get(id);\n if (source) await upload(source);\n },\n [upload],\n );\n\n const remove = useCallback((id: string) => {\n sources.current.delete(id);\n attempts.current.delete(id);\n setAttachments((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const clear = useCallback(() => {\n sources.current.clear();\n attempts.current.clear();\n setAttachments([]);\n setError(null);\n }, []);\n const clearError = useCallback(() => setError(null), []);\n const restoreReady = useCallback((files: Iterable<FileAsset>) => {\n const restored = [...files];\n setAttachments((current) => {\n const kept = current.filter((entry) => entry.status !== \"ready\");\n return [\n ...restored.map(\n (file): NativeAttachment => ({\n id: `restored:${file.id}`,\n name: file.filename,\n contentType: file.contentType,\n sizeBytes: file.sizeBytes,\n kind: file.contentType.startsWith(\"image/\") ? \"image\" : \"document\",\n status: \"ready\",\n file,\n }),\n ),\n ...kept,\n ];\n });\n }, []);\n\n const visibleState = projectNativeAttachmentScopeState(scopeMatches, attachments, error);\n const visibleAttachments = visibleState.attachments;\n const visibleError = visibleState.error;\n const readyResources = useMemo<ResourceRef[]>(\n () =>\n visibleAttachments.flatMap((attachment) =>\n attachment.status === \"ready\" && attachment.file\n ? [{ kind: \"file\" as const, fileId: attachment.file.id }]\n : [],\n ),\n [visibleAttachments],\n );\n\n return {\n attachments: visibleAttachments,\n readyResources,\n uploading: visibleAttachments.some(\n (attachment) => attachment.status === \"preparing\" || attachment.status === \"uploading\",\n ),\n hasUnresolved: visibleAttachments.some((attachment) => attachment.status !== \"ready\"),\n error: visibleError,\n pickDocuments,\n pickImages,\n addFiles,\n retry,\n remove,\n clear,\n clearError,\n restoreReady,\n };\n}\n","import { useEffect, useMemo, useRef } from \"react\";\nimport type { SessionEvent } from \"@opengeni/sdk\";\nimport { sessionAttentionReadThroughSequence } from \"@opengeni/react/session-attention-model\";\n\n/** The optional attention mutation a host client may expose (the SDK client does). */\nexport type SessionAttentionClientLike = {\n updateSessionAttention?(\n workspaceId: string,\n sessionId: string,\n body: { unread?: boolean; acknowledgedThroughSequence?: number },\n ): Promise<unknown>;\n};\n\n/**\n * Where an open conversation should be acknowledged through, and whether it\n * needs it: the server says unread, or newer attention events have arrived\n * since the session row was read.\n */\nexport function readAcknowledgementFrontier(\n session: { unread?: boolean; lastSequence?: number } | null,\n attentionThrough: number,\n): { readThrough: number; unread: boolean } {\n const lastSequence = session?.lastSequence ?? 0;\n return {\n readThrough: Math.max(lastSequence, attentionThrough),\n unread: Boolean(session?.unread) || attentionThrough > lastSequence,\n };\n}\n\n/**\n * Mark the open conversation read, as the web session page does: while it is on\n * screen and the app is in the foreground, acknowledge through the latest\n * delivered attention boundary (completed reply, question, failure), never per\n * streaming flush. Reading a session does not acknowledge it on the server;\n * without this, every reply stays unread and attention notifications (pushes,\n * webhooks a host turns into alerts) fire even while the person watches it.\n */\nexport function useNativeReadAcknowledgement(input: {\n client: SessionAttentionClientLike;\n workspaceId: string;\n sessionId: string;\n session: { unread?: boolean; lastSequence?: number } | null;\n events: readonly SessionEvent[];\n active: boolean;\n}) {\n const { client, workspaceId, sessionId, session, events, active } = input;\n const attentionThrough = useMemo(() => sessionAttentionReadThroughSequence(events), [events]);\n const { readThrough, unread } = readAcknowledgementFrontier(session, attentionThrough);\n const acknowledged = useRef<{ key: string; retried: boolean } | null>(null);\n\n useEffect(() => {\n if (!active || !session || !unread || readThrough <= 0) return;\n if (!client.updateSessionAttention) return;\n const key = `${workspaceId}:${sessionId}:${readThrough}`;\n const previous = acknowledged.current;\n if (previous?.key === key) return;\n acknowledged.current = { key, retried: false };\n const send = (): Promise<unknown> =>\n client.updateSessionAttention!(workspaceId, sessionId, {\n unread: false,\n acknowledgedThroughSequence: readThrough,\n });\n send().catch(() => {\n // Retry one transient failure for this exact frontier, then stop: a\n // permanent rejection must not become a request loop.\n const current = acknowledged.current;\n if (current?.key !== key || current.retried) return;\n current.retried = true;\n void send().catch(() => undefined);\n });\n }, [active, client, readThrough, session, sessionId, unread, workspaceId]);\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { SessionEvent, SessionStatus } from \"@opengeni/sdk\";\nimport {\n groupTimeline,\n projectPendingApprovals,\n useComposer,\n useGoal,\n useHumanInputRequests,\n useSession,\n useSessionControl,\n useSessionEvents,\n useSessionLineage,\n useSessionMcpApprovalPolicy,\n useTurnQueue,\n type FileAttachmentClientLike,\n type GoalClientLike,\n type HumanInputSessionClientLike,\n type PendingApproval,\n type SessionClientLike,\n type SessionMcpApprovalPolicyClientLike,\n type SessionLineageClientLike,\n type SessionReadClientLike,\n type TimelineGroup,\n type TimelineItem,\n} from \"@opengeni/react/session\";\nimport { useNativeFileAttachments, type NativeFileAttachmentsResult } from \"./attachments\";\nimport { useOpenGeniReactNativeEnvironment } from \"./environment\";\nimport {\n useNativeReadAcknowledgement,\n type SessionAttentionClientLike,\n} from \"./read-acknowledgement\";\n\nexport type OpenGeniNativeSessionClient = SessionClientLike &\n SessionReadClientLike &\n HumanInputSessionClientLike &\n SessionMcpApprovalPolicyClientLike &\n FileAttachmentClientLike &\n SessionAttentionClientLike &\n GoalClientLike &\n SessionLineageClientLike;\n\nexport interface OpenGeniNativeSessionController {\n sessionId: string;\n workspaceId: string;\n session: ReturnType<typeof useSession>;\n events: SessionEvent[];\n timeline: TimelineItem[];\n timelineGroups: TimelineGroup[];\n connectionState: ReturnType<typeof useSessionEvents>[\"connectionState\"];\n sessionStatus: SessionStatus | null;\n initialLoading: boolean;\n hasOlder: boolean;\n loadingOlder: boolean;\n loadOlder(): Promise<boolean>;\n queue: ReturnType<typeof useTurnQueue>;\n composer: ReturnType<typeof useComposer>;\n attachments: NativeFileAttachmentsResult;\n approvals: PendingApproval[];\n control: ReturnType<typeof useSessionControl>;\n humanInput: ReturnType<typeof useHumanInputRequests>;\n mcpApprovalPolicy: ReturnType<typeof useSessionMcpApprovalPolicy>;\n /** The session goal and its pause/resume control (web session chrome). */\n goal: ReturnType<typeof useGoal>;\n /** Spawned sub-agent sessions, refreshed by spawn and completion events. */\n lineage: ReturnType<typeof useSessionLineage>;\n active: boolean;\n runActive: boolean;\n error: Error | null;\n refresh(): Promise<void>;\n}\n\nfunction sessionRunActive(status: SessionStatus | null): boolean {\n return (\n status === \"queued\" ||\n status === \"running\" ||\n status === \"recovering\" ||\n status === \"waiting_capacity\" ||\n status === \"requires_action\"\n );\n}\n\nexport function useOpenGeniNativeSession(input: {\n client: OpenGeniNativeSessionClient;\n workspaceId: string;\n sessionId: string;\n mcpApprovalPolicyServerId?: string;\n}): OpenGeniNativeSessionController {\n const environment = useOpenGeniReactNativeEnvironment();\n const events = useSessionEvents(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n enabled: environment.active,\n });\n const session = useSession(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n enabled: environment.active,\n events: events.events,\n });\n const queue = useTurnQueue(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n enabled: environment.active,\n events: events.events,\n });\n const attachments = useNativeFileAttachments({\n client: input.client,\n workspaceId: input.workspaceId,\n sessionId: input.sessionId,\n files: environment.adapters.files,\n crypto: environment.adapters.crypto,\n });\n const composer = useComposer(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n events: events.events,\n effectiveControl: queue.effectiveControl,\n // As on web: while a turn runs or prompts wait, a Send shows in the queue\n // at once instead of flashing as a chat bubble before it is queued.\n sendDestination: () =>\n (session.session?.activeTurnId ?? null) !== null || queue.queue.length > 0 ? \"queue\" : \"chat\",\n sendExtras: () => ({ resources: attachments.readyResources }),\n sendBlocked: () => attachments.hasUnresolved,\n onSent: () => attachments.clear(),\n });\n const control = useSessionControl(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n });\n const humanInput = useHumanInputRequests(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n enabled: environment.active,\n events: events.events,\n });\n const goal = useGoal(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n enabled: environment.active,\n events: events.events,\n });\n // As on web: events refresh on spawn and completion; the poll catches a\n // child's own status changes, which emit nothing on this feed.\n const lineage = useSessionLineage(input.sessionId, {\n client: input.client,\n workspaceId: input.workspaceId,\n enabled: environment.active,\n events: events.events,\n pollIntervalMs: 30_000,\n });\n const approvals = useMemo(() => projectPendingApprovals(events.events), [events.events]);\n const timelineGroups = useMemo(() => groupTimeline(events.timeline), [events.timeline]);\n useNativeReadAcknowledgement({\n client: input.client,\n workspaceId: input.workspaceId,\n sessionId: input.sessionId,\n session: session.session ?? null,\n events: events.events,\n active: environment.active,\n });\n const mcpApprovalPolicy = useSessionMcpApprovalPolicy(\n input.sessionId,\n input.mcpApprovalPolicyServerId,\n {\n client: input.client,\n workspaceId: input.workspaceId,\n events: events.events,\n enabled: environment.active && Boolean(input.mcpApprovalPolicyServerId),\n },\n );\n\n const refresh = useCallback(async () => {\n await Promise.all([\n session.refresh(),\n queue.refresh(),\n humanInput.refresh(),\n events.jumpToLatest(),\n mcpApprovalPolicy.refresh(),\n ]);\n }, [events, humanInput, mcpApprovalPolicy, queue, session]);\n\n return {\n sessionId: input.sessionId,\n workspaceId: input.workspaceId,\n session,\n events: events.events,\n timeline: events.timeline,\n timelineGroups,\n connectionState: events.connectionState,\n sessionStatus: events.sessionStatus ?? session.session?.status ?? null,\n initialLoading: events.initialLoading || session.loading,\n hasOlder: events.hasOlder,\n loadingOlder: events.loadingOlder,\n loadOlder: events.loadOlder,\n queue,\n composer,\n attachments,\n approvals,\n control,\n humanInput,\n mcpApprovalPolicy,\n goal,\n lineage,\n active: environment.active,\n runActive: sessionRunActive(events.sessionStatus ?? session.session?.status ?? null),\n error:\n events.error ??\n session.error ??\n queue.error ??\n queue.mutationError ??\n composer.error ??\n composer.draftConflict ??\n control.error ??\n humanInput.error ??\n humanInput.mutationError ??\n mcpApprovalPolicy.error,\n refresh,\n };\n}\n","export interface OpenGeniNativeTheme {\n dark: boolean;\n colors: {\n background: string;\n surface: string;\n elevated: string;\n border: string;\n text: string;\n secondaryText: string;\n mutedText: string;\n accent: string;\n accentForeground: string;\n userBubble: string;\n userBubbleText: string;\n danger: string;\n dangerSurface: string;\n warning: string;\n warningSurface: string;\n success: string;\n };\n}\n\nexport interface OpenGeniNativeLabels {\n knowledgeOutcome?: Record<\"published\" | \"pending\" | \"rejected\" | \"archived\" | \"failed\", string>;\n emptyTitle: string;\n emptyDescription: string;\n loadEarlier: string;\n loadingEarlier: string;\n reconnecting: string;\n connecting: string;\n offlinePaused: string;\n error: string;\n retry: string;\n dismiss: string;\n queueTitle: string;\n queueEmpty: string;\n edit: string;\n runNext: string;\n remove: string;\n moveEarlier: string;\n moveLater: string;\n approvalsTitle: string;\n approve: string;\n deny: string;\n questionsTitle: string;\n humanInputAsked: string;\n humanInputOutcome: {\n answered: string;\n skipped: string;\n expired: string;\n cancelled: string;\n };\n submitAnswers: string;\n skip: string;\n other: string;\n required: string;\n attachDocument: string;\n attachImage: string;\n preparingAttachment: string;\n uploading: string;\n uploadFailed: string;\n attachmentError: string;\n removeAttachment: string;\n retryUpload: string;\n restoredAttachment: string;\n composerPlaceholder: string;\n send: string;\n steer: string;\n pause: string;\n resume: string;\n savingDraft: string;\n draftConflict: string;\n keepMine: string;\n useRemote: string;\n thinking: string;\n thought: string;\n reasoning: string;\n tool: string;\n worker: string;\n user: string;\n assistant: string;\n sandbox: string;\n goal: string;\n goalAction: {\n set: string;\n updated: string;\n completed: string;\n paused: string;\n resumed: string;\n cleared: string;\n held: string;\n continuation: string;\n };\n contextUpdated: string;\n contextCompactionPhase: {\n started: string;\n compacted: string;\n skipped: string;\n };\n machineUpdates: string;\n connectionRequired: string;\n memory: string;\n memoryAction: {\n saved: string;\n corrected: string;\n updated: string;\n archived: string;\n };\n fleetDecision: string;\n fleetOutcome: {\n selected: string;\n waiting: string;\n none: string;\n };\n fleetReason: {\n leaseReused: string;\n pin: string;\n rotation: string;\n active: string;\n allCapped: string;\n none: string;\n };\n turn: string;\n activity: string;\n statusQueued: string;\n statusRunning: string;\n statusComplete: string;\n statusRecovering: string;\n statusWaitingCapacity: string;\n statusIdle: string;\n statusRequiresAction: string;\n statusFailed: string;\n statusCancelled: string;\n relativeNow: string;\n relativeSeconds: string;\n relativeMinutes: string;\n relativeHours: string;\n relativeDays: string;\n}\n\nexport const DEFAULT_OPENGENI_NATIVE_LABELS = {\n knowledgeOutcome: {\n published: \"Knowledge published\",\n pending: \"Knowledge awaiting review\",\n rejected: \"Knowledge rejected\",\n archived: \"Knowledge archived\",\n failed: \"Knowledge could not be saved\",\n },\n emptyTitle: \"Start a conversation\",\n emptyDescription: \"Ask the agent to help with work in this session.\",\n loadEarlier: \"Load earlier activity\",\n loadingEarlier: \"Loading earlier activity…\",\n reconnecting: \"Reconnecting…\",\n connecting: \"Connecting…\",\n offlinePaused: \"Live updates pause while the app is in the background.\",\n error: \"Something went wrong. Try again.\",\n retry: \"Retry\",\n dismiss: \"Dismiss\",\n queueTitle: \"Queued prompts\",\n queueEmpty: \"No queued prompts\",\n edit: \"Edit\",\n runNext: \"Run next\",\n remove: \"Remove\",\n moveEarlier: \"Move earlier\",\n moveLater: \"Move later\",\n approvalsTitle: \"Approval required\",\n approve: \"Approve\",\n deny: \"Deny\",\n questionsTitle: \"Your input is needed\",\n humanInputAsked: \"Agent asked\",\n humanInputOutcome: {\n answered: \"You answered\",\n skipped: \"Skipped\",\n expired: \"Expired\",\n cancelled: \"Cancelled\",\n },\n submitAnswers: \"Submit answers\",\n skip: \"Skip\",\n other: \"Other\",\n required: \"Required\",\n attachDocument: \"Attach document\",\n attachImage: \"Attach image\",\n preparingAttachment: \"Preparing…\",\n uploading: \"Uploading…\",\n uploadFailed: \"Upload failed\",\n attachmentError: \"Could not open the file picker.\",\n removeAttachment: \"Remove attachment\",\n retryUpload: \"Retry upload\",\n restoredAttachment: \"Attached file\",\n composerPlaceholder: \"Message the agent…\",\n send: \"Send\",\n steer: \"Steer\",\n pause: \"Pause\",\n resume: \"Resume\",\n savingDraft: \"Saving draft…\",\n draftConflict: \"This draft changed elsewhere.\",\n keepMine: \"Keep mine\",\n useRemote: \"Use saved draft\",\n thinking: \"Thinking\",\n thought: \"Thought\",\n reasoning: \"Reasoning\",\n tool: \"Tool\",\n worker: \"Worker\",\n user: \"You\",\n assistant: \"Assistant\",\n sandbox: \"Sandbox\",\n goal: \"Goal\",\n goalAction: {\n set: \"Goal set\",\n updated: \"Goal updated\",\n completed: \"Goal completed\",\n paused: \"Goal paused\",\n resumed: \"Goal resumed\",\n cleared: \"Goal cleared\",\n held: \"Goal held\",\n continuation: \"Continuing toward the goal\",\n },\n contextUpdated: \"Context updated\",\n contextCompactionPhase: {\n started: \"Compacting conversation history\",\n compacted: \"Conversation history compacted\",\n skipped: \"Conversation history compaction skipped\",\n },\n machineUpdates: \"Machine updates: {value}\",\n connectionRequired: \"Connection required for {provider}\",\n memory: \"Memory\",\n memoryAction: {\n saved: \"Saved to memory\",\n corrected: \"Updated memory\",\n updated: \"Updated memory in place\",\n archived: \"Archived memory\",\n },\n fleetDecision: \"Fleet decision\",\n fleetOutcome: {\n selected: \"Selected {candidate}\",\n waiting: \"Waiting for capacity\",\n none: \"No candidate selected\",\n },\n fleetReason: {\n leaseReused: \"Reused the fenced lease\",\n pin: \"Kept the session pin\",\n rotation: \"Rotated for capacity\",\n active: \"Used the active subscription\",\n allCapped: \"All observed subscriptions were capped\",\n none: \"No production candidate was selected\",\n },\n turn: \"Turn\",\n activity: \"Activity\",\n statusQueued: \"Queued\",\n statusRunning: \"Running\",\n statusComplete: \"Complete\",\n statusRecovering: \"Recovering\",\n statusWaitingCapacity: \"Waiting for capacity\",\n statusIdle: \"Idle\",\n statusRequiresAction: \"Waiting on you\",\n statusFailed: \"Failed\",\n statusCancelled: \"Cancelled\",\n relativeNow: \"now\",\n relativeSeconds: \"{value}s\",\n relativeMinutes: \"{value}m\",\n relativeHours: \"{value}h\",\n relativeDays: \"{value}d\",\n} satisfies OpenGeniNativeLabels;\n\nexport const DEFAULT_OPENGENI_NATIVE_THEME: OpenGeniNativeTheme = {\n dark: false,\n colors: {\n background: \"#f7f7f5\",\n surface: \"#ffffff\",\n elevated: \"#f0f0ed\",\n border: \"#dfdfda\",\n text: \"#1b1b19\",\n secondaryText: \"#5c5c57\",\n mutedText: \"#83837b\",\n accent: \"#2563eb\",\n accentForeground: \"#ffffff\",\n userBubble: \"#1f2937\",\n userBubbleText: \"#ffffff\",\n danger: \"#b42318\",\n dangerSurface: \"#fef3f2\",\n warning: \"#b54708\",\n warningSurface: \"#fffaeb\",\n success: \"#067647\",\n },\n};\n","import type { HumanInputAnswer, HumanInputQuestion, SessionStatus } from \"@opengeni/sdk\";\nimport type { ActivityItem, TimelineItem } from \"@opengeni/react/session\";\nimport { DEFAULT_OPENGENI_NATIVE_LABELS, type OpenGeniNativeLabels } from \"./presentation\";\n\nexport function nativeKnowledgeOutcomeLabel(\n item: Extract<TimelineItem, { kind: \"knowledge\" }>,\n labels: OpenGeniNativeLabels,\n): string {\n return (labels.knowledgeOutcome ?? DEFAULT_OPENGENI_NATIVE_LABELS.knowledgeOutcome)[item.outcome];\n}\n\nexport type NativeSessionStatusTone = \"neutral\" | \"working\" | \"attention\" | \"failed\" | \"complete\";\n\nexport interface NativeActivityPresentation {\n title: string;\n preview: string;\n status: string | null;\n detail: string | null;\n expandedByDefault: boolean;\n tone: \"neutral\" | \"running\" | \"failed\";\n}\n\nexport function nativeSessionStatusTone(status: SessionStatus | null): NativeSessionStatusTone {\n switch (status) {\n case \"queued\":\n case \"running\":\n case \"recovering\":\n case \"waiting_capacity\":\n return \"working\";\n case \"requires_action\":\n return \"attention\";\n case \"failed\":\n return \"failed\";\n case \"cancelled\":\n return \"complete\";\n default:\n return \"neutral\";\n }\n}\n\nexport function boundedJson(value: unknown, maximum = 1_200): string {\n let serialized: string;\n try {\n serialized = JSON.stringify(value, null, 2) ?? \"\";\n } catch {\n serialized = String(value);\n }\n return serialized.length <= maximum ? serialized : `${serialized.slice(0, maximum)}…`;\n}\n\nfunction plainTextContent(value: string): string {\n return value\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, \"$1\")\n .replace(/\\[([^\\]]+)\\]\\([^)]*\\)/g, \"$1\")\n .replace(/^\\s{0,3}(?:#{1,6}|>|[-+])\\s+/gm, \"\")\n .replace(/\\*\\*|__|~~|`/g, \"\")\n .replace(/(^|\\s)[*_](?=\\S)/g, \"$1\")\n .replace(/(?<=\\S)[*_](?=\\s|$|[.,!?;:])/g, \"\")\n .trim();\n}\n\nfunction normalizedPreview(value: string, maximum = 140): string {\n const normalized = plainTextContent(value).replace(/\\s+/g, \" \").trim();\n if (!normalized) return \"\";\n return normalized.length <= maximum ? normalized : `${normalized.slice(0, maximum - 1)}…`;\n}\n\nfunction recordPreview(value: object): string {\n for (const key of [\"summary\", \"message\", \"title\", \"name\", \"status\", \"text\", \"query\", \"cmd\"]) {\n const candidate: unknown = Reflect.get(value, key);\n if (typeof candidate === \"string\") {\n const preview = normalizedPreview(candidate);\n if (preview) return preview;\n }\n }\n const keys = Object.keys(value);\n return keys.length > 0 ? keys.slice(0, 4).join(\", \") : \"\";\n}\n\nexport function inspectableValuePreview(value: unknown): string {\n if (typeof value === \"string\") return normalizedPreview(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (Array.isArray(value)) return value.length === 1 ? \"1 item\" : `${value.length} items`;\n if (value && typeof value === \"object\") return recordPreview(value);\n return \"\";\n}\n\nexport function nativeToolDisplayName(name: string): string {\n const boundary = name.indexOf(\"__\");\n const leaf = boundary >= 0 ? name.slice(boundary + 2) : name;\n const phrase = leaf.replace(/[_-]+/g, \" \").trim();\n return phrase ? phrase.charAt(0).toLocaleUpperCase() + phrase.slice(1) : name;\n}\n\nfunction activityStatus(\n item: Extract<ActivityItem, { status: \"running\" | \"complete\" | \"failed\" | \"cancelled\" }>,\n labels: OpenGeniNativeLabels,\n): {\n status: string | null;\n fallbackStatus: string;\n expandedByDefault: boolean;\n tone: NativeActivityPresentation[\"tone\"];\n} {\n const fallbackStatus = nativeTimelineStatusLabel(item.status, labels);\n return {\n status: item.status === \"complete\" ? null : fallbackStatus,\n fallbackStatus,\n expandedByDefault: item.status === \"failed\",\n tone: item.status === \"running\" ? \"running\" : item.status === \"failed\" ? \"failed\" : \"neutral\",\n };\n}\n\nexport function nativeActivityPresentation(\n item: ActivityItem,\n labels: OpenGeniNativeLabels,\n): NativeActivityPresentation {\n switch (item.kind) {\n case \"agent-message\":\n return {\n title: labels.assistant,\n preview: normalizedPreview(item.text),\n status: item.streaming ? labels.statusRunning : null,\n detail: plainTextContent(item.text) || null,\n expandedByDefault: false,\n tone: item.streaming ? \"running\" : \"neutral\",\n };\n case \"reasoning\":\n return {\n title: item.streaming ? labels.thinking : labels.thought,\n preview: normalizedPreview(item.text),\n status: item.streaming ? labels.statusRunning : null,\n detail: plainTextContent(item.text) || null,\n expandedByDefault: false,\n tone: item.streaming ? \"running\" : \"neutral\",\n };\n case \"tool-call\": {\n const outputPreview = inspectableValuePreview(item.output);\n const argumentPreview = inspectableValuePreview(item.arguments);\n const status = activityStatus(item, labels);\n return {\n title: nativeToolDisplayName(item.name),\n preview: outputPreview || argumentPreview || status.fallbackStatus,\n detail: boundedJson({\n input: item.arguments,\n ...(item.output !== undefined ? { result: item.output } : {}),\n ...(item.truncation ? { truncation: item.truncation } : {}),\n }),\n status: status.status,\n expandedByDefault: status.expandedByDefault,\n tone: status.tone,\n };\n }\n case \"worker\": {\n const status = activityStatus(item, labels);\n return {\n title: labels.worker,\n preview:\n normalizedPreview(item.prompt ?? item.failure?.message ?? \"\") || status.fallbackStatus,\n detail: item.failure\n ? boundedJson(item.failure)\n : item.prompt?.trim() || item.workerSessionId || null,\n status: status.status,\n expandedByDefault: status.expandedByDefault,\n tone: status.tone,\n };\n }\n case \"sandbox\": {\n const status = activityStatus(item, labels);\n return {\n title: nativeToolDisplayName(item.name || labels.sandbox),\n preview:\n inspectableValuePreview(item.output) ||\n inspectableValuePreview(item.command) ||\n status.fallbackStatus,\n detail: boundedJson({\n ...(item.command ? { command: item.command } : {}),\n ...(item.output ? { output: item.output } : {}),\n ...(item.origin ? { origin: item.origin } : {}),\n }),\n status: status.status,\n expandedByDefault: status.expandedByDefault,\n tone: status.tone,\n };\n }\n case \"startup-phase\": {\n const status = activityStatus(item, labels);\n return {\n title: nativeToolDisplayName(item.phase),\n preview: item.outcome ? nativeToolDisplayName(item.outcome) : status.fallbackStatus,\n detail:\n item.durationMs == null\n ? null\n : `${Math.max(0, Math.round(item.durationMs / 100) / 10)}s`,\n status: status.status,\n expandedByDefault: status.expandedByDefault,\n tone: status.tone,\n };\n }\n case \"knowledge\":\n return {\n title: nativeKnowledgeOutcomeLabel(item, labels),\n preview: item.filename ?? \"\",\n status: null,\n detail: item.filename ?? null,\n expandedByDefault: false,\n tone: item.status === \"failed\" ? \"failed\" : \"neutral\",\n };\n case \"memory\":\n return {\n title: nativeMemoryActionLabel(item, labels),\n preview: normalizedPreview(item.replacementPreview ?? item.preview),\n status: null,\n detail: item.replacementPreview\n ? boundedJson({ before: item.preview, after: item.replacementPreview })\n : item.preview,\n expandedByDefault: false,\n tone: \"neutral\",\n };\n case \"fleet-decision\": {\n const summary = nativeFleetDecisionSummary(item, labels);\n return {\n title: labels.fleetDecision,\n preview: summary,\n status: null,\n detail: boundedJson({\n outcome: item.actualOutcome,\n reason: item.actualReason,\n admission: item.admissionOutcome,\n candidates: item.candidateCount,\n }),\n expandedByDefault: false,\n tone: item.actualOutcome === \"waiting\" ? \"running\" : \"neutral\",\n };\n }\n }\n}\n\nfunction formatLabel(template: string, values: Readonly<Record<string, string | number>>): string {\n return Object.entries(values).reduce(\n (formatted, [key, value]) => formatted.split(`{${key}}`).join(String(value)),\n template,\n );\n}\n\nexport function formatNativeRelativeTime(\n iso: string,\n labels: Pick<\n OpenGeniNativeLabels,\n \"relativeNow\" | \"relativeSeconds\" | \"relativeMinutes\" | \"relativeHours\" | \"relativeDays\"\n >,\n now: Date = new Date(),\n): string {\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) return \"\";\n\n const seconds = Math.max(0, Math.floor((now.getTime() - then) / 1_000));\n if (seconds < 10) return labels.relativeNow;\n if (seconds < 60) return formatLabel(labels.relativeSeconds, { value: seconds });\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return formatLabel(labels.relativeMinutes, { value: minutes });\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return formatLabel(labels.relativeHours, { value: hours });\n\n const days = Math.floor(hours / 24);\n if (days < 14) return formatLabel(labels.relativeDays, { value: days });\n // oxlint-disable-next-line architecture/no-unsafe-date-format -- Timeline age intentionally matches OpenGeni's device-local relative-time formatter; this is not an organization-domain date.\n return new Date(iso).toLocaleDateString();\n}\n\nexport function nativeTimelineStatusLabel(\n status: \"running\" | \"complete\" | \"failed\" | \"cancelled\",\n labels: OpenGeniNativeLabels,\n): string {\n switch (status) {\n case \"running\":\n return labels.statusRunning;\n case \"complete\":\n return labels.statusComplete;\n case \"failed\":\n return labels.statusFailed;\n case \"cancelled\":\n return labels.statusCancelled;\n }\n}\n\nexport function nativeGoalActionLabel(\n action: Extract<TimelineItem, { kind: \"goal\" }>[\"action\"],\n labels: OpenGeniNativeLabels,\n): string {\n return labels.goalAction[action];\n}\n\nexport function nativeHumanInputRequestPreview(\n requests: readonly {\n questions: readonly Pick<HumanInputQuestion, \"label\" | \"prompt\">[];\n }[],\n): string {\n return requests\n .flatMap((request) =>\n request.questions.map((question) => question.label?.trim() || question.prompt.trim()),\n )\n .filter((label) => label.length > 0)\n .join(\" · \");\n}\n\nexport function nativeHumanInputSummary(\n item: Extract<TimelineItem, { kind: \"human-input\" }>,\n labels: OpenGeniNativeLabels,\n): string {\n const questions = item.questions\n .map((question) => (question.label ? `${question.label}: ${question.prompt}` : question.prompt))\n .join(\"\\n\");\n const outcome = labels.humanInputOutcome[item.response.outcome];\n const answers = item.answers\n .map(\n (answer) =>\n `${answer.label}: ${answer.values.join(\", \") || labels.humanInputOutcome.answered}`,\n )\n .join(\"\\n\");\n\n return [questions, answers ? `${outcome}: ${answers}` : outcome].filter(Boolean).join(\"\\n\");\n}\n\nexport function nativeContextCompactionPhaseLabel(\n phase: Extract<TimelineItem, { kind: \"context-compaction\" }>[\"phase\"],\n labels: OpenGeniNativeLabels,\n): string {\n return labels.contextCompactionPhase[phase];\n}\n\nexport function nativeMemoryActionLabel(\n item: Extract<TimelineItem, { kind: \"memory\" }>,\n labels: OpenGeniNativeLabels,\n): string {\n if (item.variant === \"saved\") return labels.memoryAction.saved;\n if (item.replacementPreview) return labels.memoryAction.corrected;\n return item.action === \"updated\" ? labels.memoryAction.updated : labels.memoryAction.archived;\n}\n\nexport function nativeFleetDecisionSummary(\n item: Extract<TimelineItem, { kind: \"fleet-decision\" }>,\n labels: OpenGeniNativeLabels,\n): string {\n const outcome =\n item.actualOutcome === \"selected\" && item.actualCandidateKey\n ? formatLabel(labels.fleetOutcome.selected, { candidate: item.actualCandidateKey })\n : item.actualOutcome === \"waiting\"\n ? labels.fleetOutcome.waiting\n : labels.fleetOutcome.none;\n const reason = (() => {\n switch (item.actualReason) {\n case \"lease_reused\":\n return labels.fleetReason.leaseReused;\n case \"pin\":\n return labels.fleetReason.pin;\n case \"rotation\":\n return labels.fleetReason.rotation;\n case \"active\":\n return labels.fleetReason.active;\n case \"all_capped\":\n return labels.fleetReason.allCapped;\n case \"none\":\n return labels.fleetReason.none;\n }\n })();\n return `${outcome} · ${reason}`;\n}\n\nexport function timelineAccessibilityLabel(\n item: TimelineItem,\n labels: OpenGeniNativeLabels,\n): string {\n switch (item.kind) {\n case \"user-message\":\n return `${labels.user}: ${item.text}`;\n case \"human-input\":\n return `${labels.humanInputAsked}: ${nativeHumanInputSummary(item, labels)}`;\n case \"agent-message\":\n return `${labels.assistant}: ${item.text}`;\n case \"reasoning\":\n return `${labels.reasoning}: ${item.text}`;\n case \"tool-call\":\n return `${labels.tool} ${item.name}, ${nativeTimelineStatusLabel(item.status, labels)}`;\n case \"worker\":\n return `${labels.worker}, ${nativeTimelineStatusLabel(item.status, labels)}${item.prompt ? `: ${item.prompt}` : \"\"}`;\n case \"sandbox\":\n return `${labels.sandbox} ${item.name}, ${nativeTimelineStatusLabel(item.status, labels)}`;\n case \"startup-phase\":\n return `${labels.activity}, ${nativeTimelineStatusLabel(item.status, labels)}`;\n case \"session-status\":\n return nativeSessionStatusLabel(item.status, labels);\n case \"goal\":\n return `${nativeGoalActionLabel(item.action, labels)}${item.text ? `: ${item.text}` : \"\"}`;\n case \"notice\":\n return item.text;\n case \"context-compaction\":\n return nativeContextCompactionPhaseLabel(item.phase, labels);\n case \"machine-input-batch\":\n return formatLabel(labels.machineUpdates, { value: item.members.length });\n case \"auth-needed\":\n return formatLabel(labels.connectionRequired, { provider: item.providerDomain });\n case \"knowledge\":\n return `${nativeKnowledgeOutcomeLabel(item, labels)}${item.filename ? `: ${item.filename}` : \"\"}`;\n case \"memory\":\n return `${nativeMemoryActionLabel(item, labels)}: ${item.replacementPreview ?? item.preview}`;\n case \"fleet-decision\":\n return `${labels.fleetDecision}: ${nativeFleetDecisionSummary(item, labels)}`;\n case \"turn-end\":\n return `${labels.turn}, ${nativeTimelineStatusLabel(item.outcome, labels)}`;\n case \"worker-completion\":\n return item.text;\n }\n}\n\nexport function nativeSessionStatusLabel(\n status: SessionStatus,\n labels: OpenGeniNativeLabels,\n): string {\n switch (status) {\n case \"queued\":\n return labels.statusQueued;\n case \"running\":\n return labels.statusRunning;\n case \"recovering\":\n return labels.statusRecovering;\n case \"waiting_capacity\":\n return labels.statusWaitingCapacity;\n case \"idle\":\n return labels.statusIdle;\n case \"requires_action\":\n return labels.statusRequiresAction;\n case \"failed\":\n return labels.statusFailed;\n case \"cancelled\":\n return labels.statusCancelled;\n }\n}\n\nexport function validateHumanInputAnswers(\n questions: readonly HumanInputQuestion[],\n drafts: Readonly<Record<string, NativeHumanInputDraft>>,\n): { answers: HumanInputAnswer[]; valid: boolean } {\n const answers: HumanInputAnswer[] = [];\n let valid = true;\n\n for (const question of questions) {\n const draft = drafts[question.id] ?? emptyHumanInputDraft();\n const values =\n question.kind === \"text\"\n ? draft.values.filter((value) => value.trim().length > 0)\n : draft.values;\n const other = draft.otherSelected ? draft.other.trim() : \"\";\n const supplied = values.length + (other.length > 0 ? 1 : 0);\n\n if (question.kind !== \"text\" && draft.otherSelected && other.length === 0) valid = false;\n if (question.required && supplied === 0) valid = false;\n if (question.kind !== \"text\") {\n const minimum = question.validation?.minSelections;\n const maximum = question.kind === \"single_select\" ? 1 : question.validation?.maxSelections;\n if (minimum != null && supplied < minimum) valid = false;\n if (maximum != null && supplied > maximum) valid = false;\n }\n if (supplied > 0) {\n answers.push({\n questionId: question.id,\n values,\n ...(other ? { other } : {}),\n });\n }\n }\n\n return { answers, valid };\n}\n\nexport interface NativeHumanInputDraft {\n values: string[];\n other: string;\n otherSelected: boolean;\n}\n\nexport function emptyHumanInputDraft(): NativeHumanInputDraft {\n return { values: [], other: \"\", otherSelected: false };\n}\n","import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n ActivityIndicator,\n FlatList,\n KeyboardAvoidingView,\n Linking,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport type {\n HumanInputAnswer,\n HumanInputQuestion,\n SessionHumanInputRequest,\n SessionTurn,\n} from \"@opengeni/sdk\";\nimport type {\n ActivityItem,\n TimelineGroup,\n TimelineItem,\n ToolCallItem,\n} from \"@opengeni/react/session\";\nimport type { OpenGeniNativeSessionController } from \"./use-native-session\";\nimport type { NativeFileAttachmentsResult } from \"./attachments\";\nimport {\n DEFAULT_OPENGENI_NATIVE_LABELS,\n DEFAULT_OPENGENI_NATIVE_THEME,\n type OpenGeniNativeLabels,\n type OpenGeniNativeTheme,\n} from \"./presentation\";\nimport {\n boundedJson,\n emptyHumanInputDraft,\n formatNativeRelativeTime,\n nativeActivityPresentation,\n nativeContextCompactionPhaseLabel,\n nativeFleetDecisionSummary,\n nativeGoalActionLabel,\n nativeHumanInputRequestPreview,\n nativeHumanInputSummary,\n nativeMemoryActionLabel,\n nativeKnowledgeOutcomeLabel,\n nativeSessionStatusLabel,\n nativeTimelineStatusLabel,\n timelineAccessibilityLabel,\n validateHumanInputAnswers,\n type NativeHumanInputDraft,\n} from \"./view-model\";\n\nconst NO_COMPOSER_INSETS = { bottom: 0, left: 0, right: 0 } as const;\nconst NO_RESTORED_RESOURCES: readonly unknown[] = [];\n\nexport type NativeToolRenderer = (\n item: ToolCallItem,\n context: { theme: OpenGeniNativeTheme; labels: OpenGeniNativeLabels; compact: boolean },\n) => ReactNode;\n\nexport type NativeMessageRenderer = (\n text: string,\n role: \"user\" | \"assistant\" | \"reasoning\",\n context: { theme: OpenGeniNativeTheme },\n) => ReactNode;\n\nexport interface NativeTurnSummaryContext {\n items: readonly ActivityItem[];\n toolCalls: readonly ToolCallItem[];\n outcome: Extract<TimelineGroup, { kind: \"turn\" }>[\"outcome\"];\n failureText: string | undefined;\n durationMs: number | undefined;\n settled: boolean;\n contextCompactionCount: number;\n}\n\nexport interface NativeTurnSummaryResult {\n content: string;\n accessibilityLabel?: string | undefined;\n duration?: string | null;\n}\n\nexport type NativeTurnSummaryRenderer = (\n context: NativeTurnSummaryContext,\n) => NativeTurnSummaryResult | null;\n\nexport interface NativeComposerActionContext {\n accessory?: ReactNode | undefined;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n busy: boolean;\n paused: boolean;\n runActive: boolean;\n canSubmit: boolean;\n draftSaving: boolean;\n submitLabel: string;\n onAttachDocument(): void;\n onAttachImage(): void;\n onTogglePause(): void;\n onSubmit(): void;\n}\n\nexport type NativeComposerActionRenderer = (context: NativeComposerActionContext) => ReactNode;\n\nexport interface NativeComposerRenderContext extends NativeComposerActionContext {\n value: string;\n onChangeText: (text: string) => void;\n placeholder: string;\n}\n\nexport type NativeComposerRenderer = (context: NativeComposerRenderContext) => ReactNode;\n\nexport interface NativeComposerSurfaceContext {\n children: ReactNode;\n style: StyleProp<ViewStyle>;\n}\n\nexport type NativeComposerSurfaceRenderer = (context: NativeComposerSurfaceContext) => ReactNode;\n\nexport interface OpenGeniNativeSessionViewProps {\n controller: OpenGeniNativeSessionController;\n theme?: OpenGeniNativeTheme | undefined;\n labels?: Partial<OpenGeniNativeLabels> | undefined;\n header?: ReactNode | undefined;\n composerAccessory?: ReactNode | undefined;\n composerSafeAreaInsets?: { bottom: number; left: number; right: number };\n renderComposer?: NativeComposerRenderer | undefined;\n renderComposerActions?: NativeComposerActionRenderer | undefined;\n renderComposerSurface?: NativeComposerSurfaceRenderer | undefined;\n renderTool?: NativeToolRenderer | undefined;\n renderMessage?: NativeMessageRenderer | undefined;\n summarizeTurn?: NativeTurnSummaryRenderer | undefined;\n formatError?: ((error: Error) => string) | undefined;\n keyboardVerticalOffset?: number | undefined;\n testID?: string | undefined;\n}\n\nexport function OpenGeniNativeSessionView({\n controller,\n theme = DEFAULT_OPENGENI_NATIVE_THEME,\n labels: labelOverrides,\n header,\n composerAccessory,\n composerSafeAreaInsets = NO_COMPOSER_INSETS,\n renderComposer,\n renderComposerActions,\n renderComposerSurface,\n renderTool,\n renderMessage,\n summarizeTurn,\n formatError,\n keyboardVerticalOffset = 0,\n testID,\n}: OpenGeniNativeSessionViewProps) {\n const labels = useMemo(\n () => ({ ...DEFAULT_OPENGENI_NATIVE_LABELS, ...labelOverrides }),\n [labelOverrides],\n );\n const listRef = useRef<FlatList<TimelineGroup>>(null);\n const followTail = useRef(true);\n const humanInputRequests = controller.humanInput.requests;\n const humanInputRequestKey = humanInputRequests.map((request) => request.id).join(\"|\");\n const [humanInputOpen, setHumanInputOpen] = useState(true);\n const humanInputExpanded = humanInputRequests.length > 0 && humanInputOpen;\n const auxiliarySurfacesVisible =\n controller.queue.queue.length > 0 ||\n (controller.queue.effectiveControl?.state === \"paused\" &&\n controller.queue.effectiveControl.resumeOptions.length > 1);\n\n useEffect(() => {\n if (humanInputRequestKey) setHumanInputOpen(true);\n }, [humanInputRequestKey]);\n\n const onScroll = useCallback((event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n followTail.current = contentSize.height - (contentOffset.y + layoutMeasurement.height) < 96;\n }, []);\n\n return (\n <KeyboardAvoidingView\n behavior={Platform.OS === \"ios\" ? \"padding\" : undefined}\n keyboardVerticalOffset={keyboardVerticalOffset}\n style={[styles.root, { backgroundColor: theme.colors.background }]}\n testID={testID}\n >\n {header}\n <View style={styles.body}>\n <View style={styles.timelineColumn}>\n <View style={styles.timelineStage}>\n <ConnectionBanner\n controller={controller}\n formatError={formatError}\n labels={labels}\n theme={theme}\n />\n <View style={humanInputExpanded ? styles.timelineHidden : styles.timeline}>\n <FlatList\n contentContainerStyle={[\n styles.timelineContent,\n renderComposer ? styles.timelineContentNativeComposer : null,\n controller.timelineGroups.length === 0 && styles.emptyTimeline,\n ]}\n data={controller.timelineGroups}\n keyboardDismissMode=\"interactive\"\n keyboardShouldPersistTaps=\"handled\"\n keyExtractor={timelineGroupKey}\n ListHeaderComponent={\n controller.hasOlder ? (\n <ActionButton\n label={controller.loadingOlder ? labels.loadingEarlier : labels.loadEarlier}\n onPress={() => void controller.loadOlder()}\n theme={theme}\n disabled={controller.loadingOlder}\n variant=\"quiet\"\n />\n ) : undefined\n }\n ListEmptyComponent={\n controller.initialLoading ? (\n <ActivityIndicator color={theme.colors.accent} />\n ) : (\n <View accessible accessibilityRole=\"summary\" style={styles.emptyState}>\n <Text style={[styles.emptyTitle, { color: theme.colors.text }]}>\n {labels.emptyTitle}\n </Text>\n <Text\n style={[styles.emptyDescription, { color: theme.colors.secondaryText }]}\n >\n {labels.emptyDescription}\n </Text>\n </View>\n )\n }\n onContentSizeChange={() => {\n if (followTail.current) listRef.current?.scrollToEnd({ animated: true });\n }}\n onScroll={onScroll}\n ref={listRef}\n renderItem={({ item }) => (\n <TimelineGroupRow\n group={item}\n labels={labels}\n renderMessage={renderMessage}\n renderTool={renderTool}\n summarizeTurn={summarizeTurn}\n theme={theme}\n />\n )}\n scrollEventThrottle={32}\n style={styles.timeline}\n />\n </View>\n {humanInputRequests.length > 0 ? (\n <HumanInputWorkspace\n expanded={humanInputOpen}\n labels={labels}\n onRespond={(requestId, response) =>\n void controller.humanInput.respond(requestId, response)\n }\n onToggle={() => setHumanInputOpen((current) => !current)}\n requests={humanInputRequests}\n respondingRequestId={controller.humanInput.respondingRequestId}\n theme={theme}\n />\n ) : null}\n {controller.approvals.length > 0 ? (\n <View pointerEvents=\"box-none\" style={styles.approvalOverlay}>\n <ApprovalSurface controller={controller} labels={labels} theme={theme} />\n </View>\n ) : null}\n </View>\n {auxiliarySurfacesVisible ? (\n <ScrollView\n contentContainerStyle={styles.sessionSurfacesContent}\n keyboardShouldPersistTaps=\"handled\"\n style={styles.sessionSurfaces}\n >\n <SessionSurfaces controller={controller} labels={labels} theme={theme} />\n </ScrollView>\n ) : null}\n <View\n style={[\n styles.composerDock,\n {\n backgroundColor: theme.colors.background,\n borderTopColor: theme.colors.border,\n borderTopWidth: StyleSheet.hairlineWidth,\n paddingBottom: Math.max(8, composerSafeAreaInsets.bottom),\n paddingLeft: Math.max(12, composerSafeAreaInsets.left + 12),\n paddingRight: Math.max(12, composerSafeAreaInsets.right + 12),\n },\n ]}\n >\n <OpenGeniNativeAttachmentStrip\n attachments={controller.attachments}\n labels={labels}\n onRemoveRestoredResource={controller.composer.removeRestoredResource}\n restoredResources={controller.composer.restoredResources}\n theme={theme}\n />\n <Composer\n accessory={composerAccessory}\n controller={controller}\n labels={labels}\n renderActions={renderComposerActions}\n renderComposer={renderComposer}\n renderSurface={renderComposerSurface}\n theme={theme}\n />\n </View>\n </View>\n </View>\n </KeyboardAvoidingView>\n );\n}\n\nfunction timelineGroupKey(group: TimelineGroup): string {\n return group.kind === \"item\" ? `item-${group.item.id}` : group.id;\n}\n\nfunction TimelineGroupRow({\n group,\n labels,\n renderMessage,\n renderTool,\n summarizeTurn,\n theme,\n}: {\n group: TimelineGroup;\n labels: OpenGeniNativeLabels;\n renderMessage?: NativeMessageRenderer | undefined;\n renderTool?: NativeToolRenderer | undefined;\n summarizeTurn?: NativeTurnSummaryRenderer | undefined;\n theme: OpenGeniNativeTheme;\n}) {\n switch (group.kind) {\n case \"item\":\n return (\n <TimelineRow\n item={group.item}\n labels={labels}\n renderMessage={renderMessage}\n renderTool={renderTool}\n theme={theme}\n />\n );\n case \"activity\":\n return (\n <ActivityRail\n items={group.items}\n labels={labels}\n renderMessage={renderMessage}\n renderTool={renderTool}\n theme={theme}\n />\n );\n case \"turn\":\n return (\n <SettledTurn\n group={group}\n labels={labels}\n renderMessage={renderMessage}\n renderTool={renderTool}\n summarizeTurn={summarizeTurn}\n theme={theme}\n />\n );\n }\n}\n\nfunction SettledTurn({\n group,\n labels,\n renderMessage,\n renderTool,\n summarizeTurn,\n theme,\n}: {\n group: Extract<TimelineGroup, { kind: \"turn\" }>;\n labels: OpenGeniNativeLabels;\n renderMessage?: NativeMessageRenderer | undefined;\n renderTool?: NativeToolRenderer | undefined;\n summarizeTurn?: NativeTurnSummaryRenderer | undefined;\n theme: OpenGeniNativeTheme;\n}) {\n const [open, setOpen] = useState(group.outcome === \"failed\");\n const items = useMemo(() => collectTurnActivityItems(group.groups), [group.groups]);\n const durationMs = turnDurationMs(group.startedAt, group.endedAt);\n const summary = summarizeTurn?.({\n items,\n toolCalls: items.filter((item): item is ToolCallItem => item.kind === \"tool-call\"),\n outcome: group.outcome,\n failureText: group.failureText,\n durationMs,\n settled: items.every((item) => !activityItemRunning(item)),\n contextCompactionCount: group.contextCompactionCount ?? 0,\n }) ?? {\n content: `${labels.activity} · ${items.length}`,\n accessibilityLabel: `${labels.activity}, ${items.length}`,\n };\n return (\n <View style={styles.turnGroup}>\n <Pressable\n accessibilityLabel={summary.accessibilityLabel ?? summary.content}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => setOpen((current) => !current)}\n style={({ pressed }) => [\n styles.turnSummary,\n {\n backgroundColor:\n group.outcome === \"failed\" ? theme.colors.dangerSurface : theme.colors.elevated,\n borderColor: group.outcome === \"failed\" ? theme.colors.danger : theme.colors.border,\n opacity: pressed ? 0.72 : 1,\n },\n ]}\n >\n <Text style={[styles.turnChevron, { color: theme.colors.mutedText }]}>\n {open ? \"⌄\" : \"›\"}\n </Text>\n <Text\n accessibilityElementsHidden\n importantForAccessibility=\"no\"\n style={[\n styles.turnOutcome,\n {\n color:\n group.outcome === \"failed\"\n ? theme.colors.danger\n : group.outcome === \"complete\"\n ? theme.colors.success\n : theme.colors.mutedText,\n },\n ]}\n >\n {group.outcome === \"complete\" ? \"✓\" : group.outcome === \"failed\" ? \"!\" : \"–\"}\n </Text>\n <Text\n numberOfLines={1}\n style={[\n styles.turnSummaryText,\n {\n color: group.outcome === \"failed\" ? theme.colors.danger : theme.colors.secondaryText,\n },\n ]}\n >\n {summary.content}\n </Text>\n {summary.duration ? (\n <Text style={[styles.turnDuration, { color: theme.colors.mutedText }]}>\n {summary.duration}\n </Text>\n ) : null}\n </Pressable>\n {open ? (\n <View style={[styles.turnRail, { borderLeftColor: theme.colors.border }]}>\n {group.groups.map((child) => (\n <TimelineGroupRow\n group={child}\n key={timelineGroupKey(child)}\n labels={labels}\n renderMessage={renderMessage}\n renderTool={renderTool}\n summarizeTurn={summarizeTurn}\n theme={theme}\n />\n ))}\n {group.failureText ? (\n <Text style={[styles.secondaryText, { color: theme.colors.danger }]}>\n {group.failureText}\n </Text>\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction collectTurnActivityItems(groups: readonly TimelineGroup[]): ActivityItem[] {\n return groups.flatMap((group): ActivityItem[] => {\n switch (group.kind) {\n case \"activity\":\n return group.items;\n case \"turn\":\n return collectTurnActivityItems(group.groups);\n case \"item\":\n return isActivityItem(group.item) ? [group.item] : [];\n }\n });\n}\n\nfunction isActivityItem(item: TimelineItem): item is ActivityItem {\n return (\n (item.kind === \"agent-message\" && item.phase === \"commentary\") ||\n item.kind === \"reasoning\" ||\n item.kind === \"tool-call\" ||\n item.kind === \"worker\" ||\n item.kind === \"sandbox\" ||\n item.kind === \"memory\" ||\n item.kind === \"fleet-decision\"\n );\n}\n\nfunction activityItemRunning(item: ActivityItem): boolean {\n return (\n ((item.kind === \"reasoning\" || item.kind === \"agent-message\") && item.streaming) ||\n ((item.kind === \"tool-call\" || item.kind === \"worker\" || item.kind === \"sandbox\") &&\n item.status === \"running\")\n );\n}\n\nfunction turnDurationMs(startedAt: string, endedAt: string): number | undefined {\n const start = Date.parse(startedAt);\n const end = Date.parse(endedAt);\n return Number.isFinite(start) && Number.isFinite(end) && end >= start ? end - start : undefined;\n}\n\nfunction ActivityRail({\n items,\n labels,\n renderMessage,\n renderTool,\n theme,\n}: {\n items: ActivityItem[];\n labels: OpenGeniNativeLabels;\n renderMessage?: NativeMessageRenderer | undefined;\n renderTool?: NativeToolRenderer | undefined;\n theme: OpenGeniNativeTheme;\n}) {\n return (\n <View style={[styles.activityRail, { borderLeftColor: theme.colors.border }]}>\n {items.map((item) => (\n <TimelineRow\n compactActivity\n item={item}\n key={item.id}\n labels={labels}\n renderMessage={renderMessage}\n renderTool={renderTool}\n theme={theme}\n />\n ))}\n </View>\n );\n}\n\nfunction ConnectionBanner({\n controller,\n formatError,\n labels,\n theme,\n}: {\n controller: OpenGeniNativeSessionController;\n formatError?: ((error: Error) => string) | undefined;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n}) {\n const message = !controller.active\n ? labels.offlinePaused\n : controller.connectionState === \"reconnecting\"\n ? labels.reconnecting\n : controller.connectionState === \"connecting\"\n ? labels.connecting\n : null;\n const error = controller.error;\n if (!message && !error) return null;\n const displayMessage = error ? (formatError?.(error) ?? labels.error) : message;\n\n return (\n <View\n accessibilityLiveRegion=\"polite\"\n style={[\n styles.banner,\n {\n backgroundColor: error ? theme.colors.dangerSurface : theme.colors.elevated,\n },\n ]}\n >\n <Text\n numberOfLines={3}\n style={[\n styles.bannerText,\n { color: error ? theme.colors.danger : theme.colors.secondaryText },\n ]}\n >\n {displayMessage}\n </Text>\n {error ? (\n <ActionButton\n label={labels.retry}\n onPress={() => void controller.refresh()}\n theme={theme}\n variant=\"quiet\"\n />\n ) : null}\n </View>\n );\n}\n\nfunction TimelineRow({\n compactActivity = false,\n item,\n labels,\n renderMessage,\n renderTool,\n theme,\n}: {\n compactActivity?: boolean | undefined;\n item: TimelineItem;\n labels: OpenGeniNativeLabels;\n renderMessage?: NativeMessageRenderer | undefined;\n renderTool?: NativeToolRenderer | undefined;\n theme: OpenGeniNativeTheme;\n}) {\n if (item.kind === \"tool-call\" && renderTool) {\n const rendered = renderTool(item, { compact: compactActivity, labels, theme });\n if (rendered !== null && rendered !== undefined) return <>{rendered}</>;\n }\n\n if (item.kind === \"user-message\" || item.kind === \"agent-message\") {\n const user = item.kind === \"user-message\";\n const role = user ? \"user\" : \"assistant\";\n return (\n <View\n accessible\n accessibilityLabel={timelineAccessibilityLabel(item, labels)}\n style={[styles.messageRow, user ? styles.userMessageRow : styles.agentMessageRow]}\n >\n <View\n style={[\n styles.messageBubble,\n user ? styles.userMessageBubble : styles.agentMessage,\n {\n backgroundColor: user ? theme.colors.userBubble : \"transparent\",\n borderColor: user ? theme.colors.border : \"transparent\",\n },\n ]}\n >\n {renderMessage ? (\n renderMessage(item.text, role, { theme })\n ) : (\n <Text\n selectable\n style={[\n styles.messageText,\n { color: user ? theme.colors.userBubbleText : theme.colors.text },\n ]}\n >\n {item.text}\n </Text>\n )}\n {item.kind === \"agent-message\" && item.streaming ? (\n <ActivityIndicator color={theme.colors.accent} size=\"small\" />\n ) : null}\n </View>\n </View>\n );\n }\n\n if (item.kind === \"reasoning\") {\n if (compactActivity) {\n return (\n <ReasoningDisclosure\n item={item}\n labels={labels}\n renderMessage={renderMessage}\n theme={theme}\n />\n );\n }\n return (\n <TimelineCard item={item} labels={labels} theme={theme} title={labels.reasoning}>\n {renderMessage ? (\n renderMessage(item.text, \"reasoning\", { theme })\n ) : (\n <Text selectable style={[styles.secondaryText, { color: theme.colors.secondaryText }]}>\n {item.text}\n </Text>\n )}\n </TimelineCard>\n );\n }\n\n if (item.kind === \"notice\") {\n return <NoticeRow item={item} labels={labels} theme={theme} />;\n }\n\n if (item.kind === \"session-status\") {\n return <SessionStatusRow item={item} labels={labels} theme={theme} />;\n }\n\n if (item.kind === \"tool-call\") {\n return (\n <NativeActivityDisclosure\n compact={compactActivity}\n item={item}\n labels={labels}\n theme={theme}\n />\n );\n }\n\n if (isActivityItem(item)) {\n return (\n <NativeActivityDisclosure\n compact={compactActivity}\n item={item}\n labels={labels}\n theme={theme}\n />\n );\n }\n\n const title = timelineTitle(item, labels);\n const detail = timelineSummary(item, labels);\n if (compactActivity) {\n return (\n <View\n accessible\n accessibilityLabel={timelineAccessibilityLabel(item, labels)}\n style={styles.step}\n >\n <Text style={[styles.stepLabel, { color: theme.colors.mutedText }]}>{title}</Text>\n {detail ? (\n <Text selectable style={[styles.secondaryText, { color: theme.colors.secondaryText }]}>\n {detail}\n </Text>\n ) : null}\n </View>\n );\n }\n return (\n <TimelineCard item={item} labels={labels} theme={theme} title={title}>\n {detail ? (\n <Text selectable style={[styles.secondaryText, { color: theme.colors.secondaryText }]}>\n {detail}\n </Text>\n ) : null}\n </TimelineCard>\n );\n}\n\nfunction NativeActivityDisclosure({\n compact,\n item,\n labels,\n theme,\n}: {\n compact: boolean;\n item: Exclude<ActivityItem, { kind: \"reasoning\" }>;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n}) {\n const presentation = nativeActivityPresentation(item, labels);\n const [open, setOpen] = useState(presentation.expandedByDefault);\n const expandable = Boolean(presentation.detail);\n const foreground =\n presentation.tone === \"failed\"\n ? theme.colors.danger\n : presentation.tone === \"running\"\n ? theme.colors.accent\n : theme.colors.mutedText;\n const technical = item.kind === \"tool-call\" || item.kind === \"sandbox\";\n\n return (\n <View\n style={[\n styles.activityDisclosure,\n !compact && styles.activityDisclosureCard,\n !compact && {\n backgroundColor: theme.colors.surface,\n borderColor: presentation.tone === \"failed\" ? theme.colors.danger : theme.colors.border,\n },\n ]}\n >\n <Pressable\n accessible\n accessibilityLabel={timelineAccessibilityLabel(item, labels)}\n accessibilityRole={expandable ? \"button\" : undefined}\n accessibilityState={expandable ? { expanded: open } : undefined}\n disabled={!expandable}\n onPress={() => setOpen((current) => !current)}\n style={({ pressed }) => [\n styles.activityDisclosureHeader,\n { opacity: pressed && expandable ? 0.68 : 1 },\n ]}\n >\n <Text style={[styles.activityDisclosureChevron, { color: theme.colors.mutedText }]}>\n {expandable ? (open ? \"⌄\" : \"›\") : \"·\"}\n </Text>\n <View style={[styles.activityStatusDot, { backgroundColor: foreground }]} />\n <Text\n numberOfLines={1}\n style={[\n styles.activityDisclosureTitle,\n { color: presentation.tone === \"failed\" ? theme.colors.danger : theme.colors.text },\n ]}\n >\n {presentation.title}\n </Text>\n {!open && presentation.preview ? (\n <Text\n numberOfLines={1}\n style={[styles.activityDisclosurePreview, { color: theme.colors.mutedText }]}\n >\n {presentation.preview}\n </Text>\n ) : null}\n {presentation.status ? (\n <Text numberOfLines={1} style={[styles.activityDisclosureStatus, { color: foreground }]}>\n {presentation.status}\n </Text>\n ) : null}\n </Pressable>\n {open && presentation.detail ? (\n <View style={styles.activityDisclosureBody}>\n <Text\n selectable\n style={[\n technical ? styles.codeText : styles.secondaryText,\n { color: theme.colors.secondaryText },\n ]}\n >\n {presentation.detail}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction timelineTitle(\n item: Exclude<\n TimelineItem,\n { kind: \"user-message\" | \"agent-message\" | \"reasoning\" | \"tool-call\" }\n >,\n labels: OpenGeniNativeLabels,\n): string {\n switch (item.kind) {\n case \"worker\":\n case \"worker-completion\":\n return labels.worker;\n case \"sandbox\":\n return item.name;\n case \"startup-phase\":\n return labels.activity;\n case \"session-status\":\n return nativeSessionStatusLabel(item.status, labels);\n case \"human-input\":\n return labels.humanInputAsked;\n case \"goal\":\n return nativeGoalActionLabel(item.action, labels);\n case \"context-compaction\":\n return nativeContextCompactionPhaseLabel(item.phase, labels);\n case \"memory\":\n return nativeMemoryActionLabel(item, labels);\n case \"knowledge\":\n return nativeKnowledgeOutcomeLabel(item, labels);\n case \"fleet-decision\":\n return labels.fleetDecision;\n case \"turn-end\":\n return labels.turn;\n case \"notice\":\n case \"machine-input-batch\":\n case \"auth-needed\":\n return labels.activity;\n }\n}\n\nfunction ReasoningDisclosure({\n item,\n labels,\n renderMessage,\n theme,\n}: {\n item: Extract<TimelineItem, { kind: \"reasoning\" }>;\n labels: OpenGeniNativeLabels;\n renderMessage?: NativeMessageRenderer | undefined;\n theme: OpenGeniNativeTheme;\n}) {\n const [open, setOpen] = useState(false);\n const presentation = nativeActivityPresentation(item, labels);\n const { preview, title } = presentation;\n\n return (\n <View style={styles.disclosure}>\n <Pressable\n accessibilityLabel={`${title}: ${preview}`}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => setOpen((current) => !current)}\n style={({ pressed }) => [\n styles.disclosureHeader,\n { backgroundColor: pressed ? theme.colors.elevated : \"transparent\" },\n ]}\n >\n <Text style={[styles.disclosureChevron, { color: theme.colors.mutedText }]}>\n {open ? \"⌄\" : \"›\"}\n </Text>\n <Text style={[styles.disclosureIcon, { color: theme.colors.mutedText }]}>◌</Text>\n <Text\n numberOfLines={1}\n style={[\n styles.disclosureTitle,\n {\n color: theme.colors.mutedText,\n fontStyle: item.streaming ? \"normal\" : \"italic\",\n fontWeight: item.streaming ? \"600\" : \"400\",\n },\n ]}\n >\n {title}\n </Text>\n {!open ? (\n <Text\n numberOfLines={1}\n style={[styles.disclosurePreview, { color: theme.colors.mutedText }]}\n >\n {preview}\n </Text>\n ) : null}\n </Pressable>\n {open ? (\n <View style={styles.disclosureBody}>\n {renderMessage ? (\n renderMessage(item.text, \"reasoning\", { theme })\n ) : (\n <Text selectable style={[styles.secondaryText, { color: theme.colors.secondaryText }]}>\n {presentation.detail}\n </Text>\n )}\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction NoticeRow({\n item,\n labels,\n theme,\n}: {\n item: Extract<TimelineItem, { kind: \"notice\" }>;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n}) {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const action = item.action;\n const failed = item.tone === \"failed\";\n const waiting = item.tone === \"waiting\" || item.tone === \"input\";\n const foreground = failed\n ? theme.colors.danger\n : waiting\n ? theme.colors.warning\n : theme.colors.secondaryText;\n const background = failed\n ? theme.colors.dangerSurface\n : waiting\n ? theme.colors.warningSurface\n : theme.colors.elevated;\n\n return (\n <View\n accessibilityLiveRegion=\"polite\"\n accessible\n accessibilityLabel={timelineAccessibilityLabel(item, labels)}\n style={[styles.notice, { backgroundColor: background, borderColor: foreground }]}\n >\n <Text style={[styles.noticeIcon, { color: foreground }]}>!</Text>\n <View style={styles.noticeContent}>\n <Text selectable style={[styles.secondaryText, { color: foreground }]}>\n {item.text}\n </Text>\n {item.details ? (\n <View style={styles.noticeDetails}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: detailsOpen }}\n onPress={() => setDetailsOpen((current) => !current)}\n >\n <Text style={[styles.noticeAction, { color: foreground }]}>\n {detailsOpen ? \"⌄\" : \"›\"} {item.details.label}\n </Text>\n </Pressable>\n {detailsOpen ? (\n <Text selectable style={[styles.codeText, { color: foreground }]}>\n {boundedJson(item.details.value)}\n </Text>\n ) : null}\n </View>\n ) : null}\n </View>\n {action ? (\n <Pressable\n accessibilityRole=\"link\"\n onPress={() => void Linking.openURL(action.url)}\n style={styles.noticeLink}\n >\n <Text style={[styles.noticeAction, { color: foreground }]}>{action.label}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nfunction SessionStatusRow({\n item,\n labels,\n theme,\n}: {\n item: Extract<TimelineItem, { kind: \"session-status\" }>;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n}) {\n const label = nativeSessionStatusLabel(item.status, labels).toLocaleLowerCase();\n const dotColor = sessionStatusColor(item.status, theme);\n const relativeTime = formatNativeRelativeTime(item.occurredAt, labels);\n\n return (\n <View\n accessibilityRole=\"text\"\n accessible\n accessibilityLabel={`${label}${relativeTime ? `, ${relativeTime}` : \"\"}`}\n style={styles.sessionStatus}\n >\n <View style={[styles.sessionStatusRule, { backgroundColor: theme.colors.border }]} />\n <View style={styles.sessionStatusLabel}>\n <View style={[styles.sessionStatusDot, { backgroundColor: dotColor }]} />\n <Text style={[styles.sessionStatusText, { color: theme.colors.mutedText }]}>\n {label}\n {relativeTime ? ` · ${relativeTime}` : \"\"}\n </Text>\n </View>\n <View style={[styles.sessionStatusRule, { backgroundColor: theme.colors.border }]} />\n </View>\n );\n}\n\nfunction sessionStatusColor(\n status: Extract<TimelineItem, { kind: \"session-status\" }>[\"status\"],\n theme: OpenGeniNativeTheme,\n): string {\n switch (status) {\n case \"failed\":\n return theme.colors.danger;\n case \"requires_action\":\n case \"waiting_capacity\":\n return theme.colors.warning;\n case \"idle\":\n return theme.colors.success;\n case \"running\":\n case \"recovering\":\n return theme.colors.accent;\n default:\n return theme.colors.mutedText;\n }\n}\n\nfunction TimelineCard({\n children,\n item,\n labels,\n theme,\n title,\n}: {\n children: ReactNode;\n item: TimelineItem;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n title: string;\n}) {\n return (\n <View\n accessible\n accessibilityLabel={timelineAccessibilityLabel(item, labels)}\n style={[\n styles.timelineCard,\n { backgroundColor: theme.colors.surface, borderColor: theme.colors.border },\n ]}\n >\n <Text style={[styles.cardTitle, { color: theme.colors.text }]}>{title}</Text>\n {children}\n </View>\n );\n}\n\nfunction timelineSummary(\n item: Exclude<\n TimelineItem,\n { kind: \"user-message\" | \"agent-message\" | \"reasoning\" | \"tool-call\" }\n >,\n labels: OpenGeniNativeLabels,\n): string {\n switch (item.kind) {\n case \"worker\":\n return item.prompt ?? nativeTimelineStatusLabel(item.status, labels);\n case \"worker-completion\":\n return item.text;\n case \"sandbox\":\n return item.output || item.command || nativeTimelineStatusLabel(item.status, labels);\n case \"startup-phase\":\n return nativeTimelineStatusLabel(item.status, labels);\n case \"session-status\":\n return nativeSessionStatusLabel(item.status, labels);\n case \"human-input\":\n return nativeHumanInputSummary(item, labels);\n case \"goal\":\n return item.text ?? \"\";\n case \"notice\":\n return item.text;\n case \"context-compaction\":\n return \"\";\n case \"machine-input-batch\":\n return item.members.map((member) => member.summary).join(\"\\n\");\n case \"auth-needed\":\n return item.providerDomain;\n case \"memory\":\n return item.replacementPreview ?? item.preview;\n case \"knowledge\":\n return item.filename ?? \"\";\n case \"fleet-decision\":\n return nativeFleetDecisionSummary(item, labels);\n case \"turn-end\":\n return item.failureText ?? nativeTimelineStatusLabel(item.outcome, labels);\n }\n}\n\nfunction ApprovalSurface({\n controller,\n labels,\n theme,\n}: {\n controller: OpenGeniNativeSessionController;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n}) {\n return (\n <View\n pointerEvents=\"auto\"\n style={[\n styles.approvalSurface,\n { backgroundColor: theme.colors.warningSurface, borderColor: theme.colors.warning },\n ]}\n >\n <Text style={[styles.actionTitle, { color: theme.colors.text }]}>\n {labels.approvalsTitle}\n </Text>\n {controller.approvals.map((approval) => (\n <View key={approval.id} style={styles.approvalItem}>\n <Text style={[styles.cardTitle, { color: theme.colors.text }]}>{approval.name}</Text>\n <Text\n numberOfLines={3}\n selectable\n style={[styles.codeText, { color: theme.colors.secondaryText }]}\n >\n {boundedJson(approval.arguments)}\n </Text>\n <View style={styles.buttonRow}>\n <ActionButton\n label={labels.deny}\n onPress={() => void controller.control.reject(approval.id)}\n theme={theme}\n variant=\"danger\"\n disabled={controller.control.responding}\n />\n <ActionButton\n label={labels.approve}\n onPress={() => void controller.control.approve(approval.id)}\n theme={theme}\n disabled={controller.control.responding}\n />\n </View>\n </View>\n ))}\n </View>\n );\n}\n\nfunction SessionSurfaces({\n controller,\n labels,\n theme,\n}: {\n controller: OpenGeniNativeSessionController;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n}) {\n return (\n <View style={styles.actionSurfaces}>\n {controller.queue.effectiveControl?.state === \"paused\" &&\n controller.queue.effectiveControl.resumeOptions.length > 1 ? (\n <View style={styles.actionGroup}>\n <Text style={[styles.actionTitle, { color: theme.colors.text }]}>{labels.resume}</Text>\n {controller.queue.effectiveControl.resumeOptions\n .filter((option) => option.scope !== \"selected\")\n .map((option) => (\n <View\n key={`${option.scope}:${option.targetId ?? \"current\"}`}\n style={[\n styles.actionCard,\n {\n backgroundColor: theme.colors.warningSurface,\n borderColor: theme.colors.warning,\n },\n ]}\n >\n <Text style={[styles.secondaryText, { color: theme.colors.text }]}>\n {option.impactCopy}\n </Text>\n <ActionButton\n label={labels.resume}\n onPress={() => void controller.composer.resumeScope(option)}\n theme={theme}\n disabled={controller.composer.resuming}\n />\n </View>\n ))}\n </View>\n ) : null}\n {controller.queue.queue.length > 0 ? (\n <QueueSurface controller={controller} labels={labels} theme={theme} />\n ) : null}\n </View>\n );\n}\n\nfunction QueueSurface({\n controller,\n labels,\n theme,\n}: {\n controller: OpenGeniNativeSessionController;\n labels: OpenGeniNativeLabels;\n theme: OpenGeniNativeTheme;\n}) {\n const [open, setOpen] = useState(false);\n const edit = async (turn: SessionTurn) => {\n if (controller.composer.hasDraftContent()) return;\n const draft = await controller.queue.editTurn(turn.id, {\n expectedDraftRevision: controller.composer.draftRevision,\n replaceDraft: true,\n });\n if (draft) controller.composer.applyDraft(draft);\n };\n const move = (index: number, direction: -1 | 1) => {\n const turn = controller.queue.queue[index];\n if (!turn) return;\n const beforeTurnId =\n direction < 0\n ? (controller.queue.queue[index - 1]?.id ?? null)\n : (controller.queue.queue[index + 2]?.id ?? null);\n void controller.queue.moveTurn(turn.id, beforeTurnId);\n };\n\n return (\n <View\n style={[\n styles.queueSurface,\n { backgroundColor: theme.colors.surface, borderColor: theme.colors.border },\n ]}\n >\n <Pressable\n accessibilityLabel={`${labels.queueTitle}, ${controller.queue.queue.length}`}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => setOpen((value) => !value)}\n style={({ pressed }) => [styles.queueDisclosure, { opacity: pressed ? 0.72 : 1 }]}\n >\n <Text style={[styles.queueChevron, { color: theme.colors.mutedText }]}>\n {open ? \"⌄\" : \"›\"}\n </Text>\n <Text numberOfLines={1} style={[styles.queueTitle, { color: theme.colors.text }]}>\n {controller.queue.queue.length} {labels.queueTitle}\n </Text>\n {!open ? (\n <Text numberOfLines={1} style={[styles.queuePreview, { color: theme.colors.mutedText }]}>\n {controller.queue.queue[0]?.prompt}\n </Text>\n ) : null}\n </Pressable>\n {open\n ? controller.queue.queue.map((turn, index) => (\n <View key={turn.id} style={[styles.queueRow, { borderTopColor: theme.colors.border }]}>\n <Text numberOfLines={3} style={[styles.queuePrompt, { color: theme.colors.text }]}>\n {turn.prompt}\n </Text>\n <View style={styles.queueActions}>\n {index > 0 ? (\n <ActionButton\n compact\n label={labels.moveEarlier}\n onPress={() => move(index, -1)}\n theme={theme}\n variant=\"quiet\"\n disabled={controller.queue.mutating}\n />\n ) : null}\n {index < controller.queue.queue.length - 1 ? (\n <ActionButton\n compact\n label={labels.moveLater}\n onPress={() => move(index, 1)}\n theme={theme}\n variant=\"quiet\"\n disabled={controller.queue.mutating}\n />\n ) : null}\n <ActionButton\n compact\n label={labels.edit}\n onPress={() => void edit(turn)}\n theme={theme}\n variant=\"quiet\"\n disabled={controller.composer.hasDraftContent() || controller.queue.mutating}\n />\n <ActionButton\n compact\n label={labels.runNext}\n onPress={() => void controller.queue.steerTurn(turn.id)}\n theme={theme}\n variant=\"quiet\"\n disabled={controller.queue.mutating}\n />\n <ActionButton\n compact\n label={labels.remove}\n onPress={() => void controller.queue.removeTurn(turn.id)}\n theme={theme}\n variant=\"danger\"\n disabled={controller.queue.mutating}\n />\n </View>\n </View>\n ))\n : null}\n </View>\n );\n}\n\nfunction HumanInputWorkspace({\n expanded,\n labels,\n onRespond,\n onToggle,\n requests,\n respondingRequestId,\n theme,\n}: {\n expanded: boolean;\n labels: OpenGeniNativeLabels;\n onRespond: (\n requestId: string,\n response: { outcome: \"answered\"; answers: HumanInputAnswer[] } | { outcome: \"skipped\" },\n ) => void;\n onToggle: () => void;\n requests: readonly SessionHumanInputRequest[];\n respondingRequestId: string | null;\n theme: OpenGeniNativeTheme;\n}) {\n const preview = nativeHumanInputRequestPreview(requests);\n const identityLabel = preview ? `${labels.questionsTitle}: ${preview}` : labels.questionsTitle;\n\n return (\n <View\n style={expanded ? styles.humanInputWorkspaceExpanded : styles.humanInputWorkspaceCollapsed}\n testID=\"opengeni-human-input-workspace\"\n >\n <Pressable\n accessibilityLabel={identityLabel}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded }}\n onPress={onToggle}\n style={({ pressed }) => [\n styles.humanInputDisclosure,\n { backgroundColor: pressed ? theme.colors.elevated : \"transparent\" },\n ]}\n >\n <Text style={[styles.disclosureChevron, { color: theme.colors.mutedText }]}>\n {expanded ? \"⌄\" : \"›\"}\n </Text>\n <Text\n numberOfLines={1}\n style={[styles.humanInputDisclosureTitle, { color: theme.colors.text }]}\n >\n {labels.questionsTitle}\n </Text>\n {!expanded && preview ? (\n <Text\n numberOfLines={1}\n style={[styles.disclosurePreview, { color: theme.colors.mutedText }]}\n >\n {preview}\n </Text>\n ) : null}\n </Pressable>\n {expanded ? (\n <ScrollView\n contentContainerStyle={styles.humanInputWorkspaceBody}\n keyboardShouldPersistTaps=\"handled\"\n style={styles.humanInputWorkspaceScroll}\n >\n {requests.map((request) => (\n <HumanInputCard\n key={request.id}\n labels={labels}\n onRespond={(response) => onRespond(request.id, response)}\n request={request}\n responding={respondingRequestId === request.id}\n theme={theme}\n />\n ))}\n </ScrollView>\n ) : null}\n </View>\n );\n}\n\nfunction HumanInputCard({\n labels,\n onRespond,\n request,\n responding,\n theme,\n}: {\n labels: OpenGeniNativeLabels;\n onRespond: (\n response: { outcome: \"answered\"; answers: HumanInputAnswer[] } | { outcome: \"skipped\" },\n ) => void;\n request: SessionHumanInputRequest;\n responding: boolean;\n theme: OpenGeniNativeTheme;\n}) {\n const [drafts, setDrafts] = useState<Record<string, NativeHumanInputDraft>>({});\n const projection = validateHumanInputAnswers(request.questions, drafts);\n\n const update = (\n questionId: string,\n updater: (current: NativeHumanInputDraft) => NativeHumanInputDraft,\n ) => {\n setDrafts((current) => ({\n ...current,\n [questionId]: updater(current[questionId] ?? emptyHumanInputDraft()),\n }));\n };\n\n return (\n <View style={styles.actionGroup}>\n <View\n style={[\n styles.actionCard,\n { backgroundColor: theme.colors.surface, borderColor: theme.colors.border },\n ]}\n >\n {request.questions.map((question) => (\n <QuestionField\n draft={drafts[question.id]}\n key={question.id}\n labels={labels}\n onChange={(next) => update(question.id, () => next)}\n question={question}\n theme={theme}\n />\n ))}\n <View style={styles.buttonRow}>\n {request.allowSkip ? (\n <ActionButton\n label={labels.skip}\n onPress={() => onRespond({ outcome: \"skipped\" })}\n theme={theme}\n variant=\"quiet\"\n disabled={responding}\n />\n ) : null}\n <ActionButton\n label={labels.submitAnswers}\n onPress={() => onRespond({ outcome: \"answered\", answers: projection.answers })}\n theme={theme}\n disabled={!projection.valid || responding}\n />\n </View>\n </View>\n </View>\n );\n}\n\nfunction QuestionField({\n draft,\n labels,\n onChange,\n question,\n theme,\n}: {\n draft: NativeHumanInputDraft | undefined;\n labels: OpenGeniNativeLabels;\n onChange: (draft: NativeHumanInputDraft) => void;\n question: HumanInputQuestion;\n theme: OpenGeniNativeTheme;\n}) {\n const current = draft ?? emptyHumanInputDraft();\n const values = current.values;\n const toggle = (id: string) => {\n const next =\n question.kind === \"single_select\"\n ? [id]\n : values.includes(id)\n ? values.filter((value) => value !== id)\n : [...values, id];\n onChange({\n ...current,\n values: next,\n ...(question.kind === \"single_select\" ? { otherSelected: false } : {}),\n });\n };\n\n return (\n <View style={styles.question}>\n <Text style={[styles.cardTitle, { color: theme.colors.text }]}>\n {question.label ?? question.prompt}\n {question.required ? ` · ${labels.required}` : \"\"}\n </Text>\n {question.label ? (\n <Text style={[styles.secondaryText, { color: theme.colors.secondaryText }]}>\n {question.prompt}\n </Text>\n ) : null}\n {question.helpText ? (\n <Text style={[styles.helpText, { color: theme.colors.mutedText }]}>\n {question.helpText}\n </Text>\n ) : null}\n {question.kind === \"text\" ? (\n <TextInput\n accessibilityLabel={question.label ?? question.prompt}\n multiline\n onChangeText={(text) => onChange({ ...current, values: text ? [text] : [] })}\n style={[\n styles.questionInput,\n {\n backgroundColor: theme.colors.background,\n borderColor: theme.colors.border,\n color: theme.colors.text,\n },\n ]}\n value={values[0] ?? \"\"}\n />\n ) : (\n <View style={styles.optionList}>\n {question.options.map((option) => {\n const selected = values.includes(option.id);\n return (\n <Pressable\n accessibilityRole={question.kind === \"single_select\" ? \"radio\" : \"checkbox\"}\n accessibilityState={{ checked: selected }}\n key={option.id}\n onPress={() => toggle(option.id)}\n style={[\n styles.option,\n {\n backgroundColor: selected ? theme.colors.elevated : theme.colors.background,\n borderColor: selected ? theme.colors.accent : theme.colors.border,\n },\n ]}\n >\n <Text style={[styles.optionLabel, { color: theme.colors.text }]}>\n {option.label}\n </Text>\n {option.description ? (\n <Text style={[styles.helpText, { color: theme.colors.secondaryText }]}>\n {option.description}\n </Text>\n ) : null}\n </Pressable>\n );\n })}\n </View>\n )}\n {question.kind !== \"text\" && question.allowOther ? (\n <View\n style={[\n styles.option,\n {\n backgroundColor: current.otherSelected\n ? theme.colors.elevated\n : theme.colors.background,\n borderColor: current.otherSelected ? theme.colors.accent : theme.colors.border,\n },\n ]}\n >\n <Pressable\n accessibilityRole={question.kind === \"single_select\" ? \"radio\" : \"checkbox\"}\n accessibilityState={{ checked: current.otherSelected }}\n onPress={() =>\n onChange({\n ...current,\n otherSelected: !current.otherSelected,\n ...(question.kind === \"single_select\" && !current.otherSelected\n ? { values: [] }\n : {}),\n })\n }\n style={styles.otherOptionToggle}\n >\n <Text style={[styles.optionLabel, { color: theme.colors.text }]}>{labels.other}</Text>\n </Pressable>\n <TextInput\n accessibilityLabel={labels.other}\n editable={current.otherSelected}\n onChangeText={(other) => onChange({ ...current, other })}\n placeholder={labels.other}\n placeholderTextColor={theme.colors.mutedText}\n style={[\n styles.otherInput,\n {\n backgroundColor: theme.colors.background,\n borderColor: theme.colors.border,\n color: theme.colors.text,\n opacity: current.otherSelected ? 1 : 0.5,\n },\n ]}\n value={current.other}\n />\n </View>\n ) : null}\n </View>\n );\n}\n\nexport function OpenGeniNativeAttachmentStrip({\n attachments,\n labels,\n onRemoveRestoredResource,\n restoredResources = NO_RESTORED_RESOURCES,\n theme,\n}: {\n attachments: NativeFileAttachmentsResult;\n labels: OpenGeniNativeLabels;\n onRemoveRestoredResource?: ((index: number) => void) | undefined;\n restoredResources?: readonly unknown[] | undefined;\n theme: OpenGeniNativeTheme;\n}) {\n const error = attachments.error;\n if (attachments.attachments.length === 0 && restoredResources.length === 0 && !error) return null;\n\n return (\n <ScrollView\n contentContainerStyle={styles.attachmentStrip}\n horizontal\n keyboardShouldPersistTaps=\"handled\"\n showsHorizontalScrollIndicator={false}\n >\n {error ? (\n <View\n style={[\n styles.attachmentChip,\n { backgroundColor: theme.colors.dangerSurface, borderColor: theme.colors.danger },\n ]}\n >\n <Text style={[styles.attachmentName, { color: theme.colors.danger }]}>\n {labels.attachmentError}\n </Text>\n <ActionButton\n label={labels.dismiss}\n onPress={() => attachments.clearError()}\n theme={theme}\n variant=\"quiet\"\n />\n </View>\n ) : null}\n {attachments.attachments.map((attachment) => (\n <View\n key={attachment.id}\n style={[\n styles.attachmentChip,\n { backgroundColor: theme.colors.elevated, borderColor: theme.colors.border },\n ]}\n >\n <Text numberOfLines={1} style={[styles.attachmentName, { color: theme.colors.text }]}>\n {attachment.name}\n </Text>\n <Text\n style={[\n styles.helpText,\n {\n color:\n attachment.status === \"failed\" ? theme.colors.danger : theme.colors.mutedText,\n },\n ]}\n >\n {attachment.status === \"preparing\"\n ? labels.preparingAttachment\n : attachment.status === \"uploading\"\n ? labels.uploading\n : attachment.status === \"failed\"\n ? labels.uploadFailed\n : formatBytes(attachment.sizeBytes)}\n </Text>\n <View style={styles.buttonRow}>\n {attachment.status === \"failed\" ? (\n <ActionButton\n label={labels.retryUpload}\n onPress={() => void attachments.retry(attachment.id)}\n theme={theme}\n variant=\"quiet\"\n />\n ) : null}\n <ActionButton\n label={labels.removeAttachment}\n onPress={() => attachments.remove(attachment.id)}\n theme={theme}\n variant=\"quiet\"\n />\n </View>\n </View>\n ))}\n {restoredResources.map((_resource, index) => (\n <View\n // oxlint-disable-next-line react/no-array-index-key -- restored refs are opaque and positional\n key={`restored-${index}`}\n style={[\n styles.attachmentChip,\n { backgroundColor: theme.colors.elevated, borderColor: theme.colors.border },\n ]}\n >\n <Text style={[styles.attachmentName, { color: theme.colors.text }]}>\n {labels.restoredAttachment}\n </Text>\n <ActionButton\n label={labels.removeAttachment}\n onPress={() => onRemoveRestoredResource?.(index)}\n theme={theme}\n variant=\"quiet\"\n disabled={!onRemoveRestoredResource}\n />\n </View>\n ))}\n </ScrollView>\n );\n}\n\nfunction Composer({\n accessory,\n controller,\n labels,\n renderActions,\n renderComposer,\n renderSurface,\n theme,\n}: {\n accessory?: ReactNode | undefined;\n controller: OpenGeniNativeSessionController;\n labels: OpenGeniNativeLabels;\n renderActions?: NativeComposerActionRenderer | undefined;\n renderComposer?: NativeComposerRenderer | undefined;\n renderSurface?: NativeComposerSurfaceRenderer | undefined;\n theme: OpenGeniNativeTheme;\n}) {\n const paused = controller.queue.effectiveControl?.state === \"paused\";\n const busy =\n controller.composer.sending || controller.composer.pausing || controller.composer.resuming;\n const actionContext: NativeComposerActionContext = {\n accessory,\n labels,\n theme,\n busy,\n paused,\n runActive: controller.runActive,\n canSubmit: controller.composer.canSend && !busy,\n draftSaving: controller.composer.draftSaving,\n submitLabel: labels.send,\n onAttachDocument: () => void controller.attachments.pickDocuments(),\n onAttachImage: () => void controller.attachments.pickImages(),\n onTogglePause: () => void (paused ? controller.composer.resume() : controller.composer.pause()),\n onSubmit: () => void controller.composer.send(),\n };\n const composerContext: NativeComposerRenderContext = {\n ...actionContext,\n value: controller.composer.value,\n onChangeText: controller.composer.setValue,\n placeholder: labels.composerPlaceholder,\n };\n\n const content = (\n <>\n {controller.composer.draftConflict ? (\n <View style={[styles.draftConflict, { backgroundColor: theme.colors.warningSurface }]}>\n <Text style={[styles.secondaryText, { color: theme.colors.warning }]}>\n {labels.draftConflict}\n </Text>\n <View style={styles.buttonRow}>\n <ActionButton\n label={labels.useRemote}\n onPress={() => void controller.composer.resolveDraftConflict(\"use_remote\")}\n theme={theme}\n variant=\"quiet\"\n />\n <ActionButton\n label={labels.keepMine}\n onPress={() => void controller.composer.resolveDraftConflict(\"keep_mine\")}\n theme={theme}\n variant=\"quiet\"\n />\n </View>\n </View>\n ) : null}\n {renderComposer ? (\n renderComposer(composerContext)\n ) : (\n <View style={renderActions ? styles.composerRow : styles.composerStack}>\n <TextInput\n accessibilityLabel={labels.composerPlaceholder}\n blurOnSubmit={false}\n multiline\n onChangeText={controller.composer.setValue}\n placeholder={labels.composerPlaceholder}\n placeholderTextColor={theme.colors.mutedText}\n style={[styles.composerInput, { color: theme.colors.text }]}\n value={controller.composer.value}\n />\n {renderActions ? (\n renderActions(actionContext)\n ) : (\n <DefaultComposerActions {...actionContext} />\n )}\n </View>\n )}\n </>\n );\n\n if (renderComposer) {\n return <>{content}</>;\n }\n\n if (renderSurface) {\n return renderSurface({ children: content, style: styles.composerContainer });\n }\n\n return (\n <View\n style={[\n styles.composerContainer,\n { backgroundColor: theme.colors.surface, borderColor: theme.colors.border },\n ]}\n >\n {content}\n </View>\n );\n}\n\nfunction DefaultComposerActions(context: NativeComposerActionContext) {\n return (\n <View style={styles.composerToolbar}>\n <View style={styles.buttonWrap}>\n <ActionButton\n accessibilityLabel={context.labels.attachDocument}\n label=\"+\"\n onPress={() => context.onAttachDocument()}\n theme={context.theme}\n variant=\"quiet\"\n disabled={context.busy}\n />\n <ActionButton\n accessibilityLabel={context.labels.attachImage}\n label=\"▧\"\n onPress={() => context.onAttachImage()}\n theme={context.theme}\n variant=\"quiet\"\n disabled={context.busy}\n />\n {context.accessory}\n </View>\n <View style={styles.buttonWrap}>\n <ActionButton\n label={context.paused ? context.labels.resume : context.labels.pause}\n onPress={() => context.onTogglePause()}\n theme={context.theme}\n variant=\"quiet\"\n disabled={context.busy}\n />\n <ActionButton\n label={context.submitLabel}\n onPress={() => context.onSubmit()}\n theme={context.theme}\n disabled={!context.canSubmit}\n />\n </View>\n </View>\n );\n}\n\nfunction ActionButton({\n accessibilityLabel,\n compact = false,\n disabled = false,\n label,\n onPress,\n theme,\n variant = \"primary\",\n}: {\n accessibilityLabel?: string | undefined;\n compact?: boolean | undefined;\n disabled?: boolean | undefined;\n label: string;\n onPress: () => void;\n theme: OpenGeniNativeTheme;\n variant?: \"primary\" | \"quiet\" | \"danger\";\n}) {\n const colors =\n variant === \"primary\"\n ? {\n background: theme.colors.accent,\n foreground: theme.colors.accentForeground,\n border: theme.colors.accent,\n }\n : variant === \"danger\"\n ? {\n background: \"transparent\",\n foreground: theme.colors.danger,\n border: theme.colors.danger,\n }\n : {\n background: \"transparent\",\n foreground: theme.colors.secondaryText,\n border: theme.colors.border,\n };\n return (\n <Pressable\n accessibilityLabel={accessibilityLabel ?? label}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n compact && styles.compactButton,\n {\n backgroundColor: colors.background,\n borderColor: colors.border,\n opacity: disabled ? 0.42 : pressed ? 0.72 : 1,\n },\n ]}\n >\n <Text\n style={[\n styles.buttonText,\n compact && styles.compactButtonText,\n { color: colors.foreground },\n ]}\n >\n {label}\n </Text>\n </Pressable>\n );\n}\n\nfunction formatBytes(value: number | null): string {\n if (value === null) return \"\";\n if (value < 1024) return `${value} B`;\n if (value < 1024 * 1024) return `${Math.round(value / 1024)} KB`;\n return `${(value / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n body: { flex: 1 },\n timelineColumn: { flex: 1, minWidth: 0 },\n timelineStage: { flex: 1, minHeight: 0 },\n timeline: { flex: 1 },\n timelineHidden: { flex: 0, height: 0, overflow: \"hidden\", opacity: 0 },\n timelineContent: {\n width: \"100%\",\n maxWidth: 820,\n alignSelf: \"center\",\n gap: 12,\n padding: 16,\n paddingBottom: 132,\n },\n timelineContentNativeComposer: {\n paddingBottom: 16,\n },\n emptyTimeline: { flexGrow: 1, justifyContent: \"center\" },\n emptyState: { alignItems: \"center\", gap: 8, paddingHorizontal: 32 },\n emptyTitle: { fontSize: 22, fontWeight: \"700\", textAlign: \"center\" },\n emptyDescription: { fontSize: 15, lineHeight: 22, textAlign: \"center\" },\n banner: {\n minHeight: 44,\n paddingHorizontal: 16,\n paddingVertical: 10,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n },\n bannerText: { flex: 1, fontSize: 13, lineHeight: 18 },\n messageRow: { width: \"100%\" },\n userMessageRow: { alignItems: \"flex-end\" },\n agentMessageRow: { alignItems: \"flex-start\" },\n messageBubble: {\n gap: 8,\n },\n userMessageBubble: {\n maxWidth: \"84%\",\n borderRadius: 16,\n borderWidth: StyleSheet.hairlineWidth,\n paddingHorizontal: 14,\n paddingVertical: 11,\n },\n agentMessage: {\n width: \"100%\",\n paddingHorizontal: 4,\n paddingVertical: 5,\n },\n messageText: { fontSize: 16, lineHeight: 23 },\n timelineCard: { borderRadius: 14, borderWidth: StyleSheet.hairlineWidth, padding: 12, gap: 7 },\n activityRail: { borderLeftWidth: 2, gap: 12, paddingLeft: 12 },\n step: { gap: 4 },\n stepLabel: { fontSize: 12, fontWeight: \"600\", lineHeight: 16 },\n disclosure: { gap: 4 },\n disclosureHeader: {\n minHeight: 44,\n borderRadius: 8,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 7,\n paddingHorizontal: 6,\n paddingVertical: 7,\n },\n disclosureChevron: { width: 14, fontSize: 18, lineHeight: 20, textAlign: \"center\" },\n disclosureIcon: { width: 15, fontSize: 16, lineHeight: 18, textAlign: \"center\" },\n disclosureTitle: { flexShrink: 0, fontSize: 14, lineHeight: 19 },\n disclosurePreview: { minWidth: 0, flex: 1, fontSize: 13, lineHeight: 18 },\n disclosureBody: { marginLeft: 42, paddingBottom: 6 },\n activityDisclosure: { gap: 4 },\n activityDisclosureCard: {\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n paddingHorizontal: 8,\n paddingVertical: 4,\n },\n activityDisclosureHeader: {\n minHeight: 44,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 7,\n paddingVertical: 6,\n },\n activityDisclosureChevron: { width: 14, fontSize: 18, lineHeight: 20, textAlign: \"center\" },\n activityStatusDot: { width: 6, height: 6, borderRadius: 999 },\n activityDisclosureTitle: { minWidth: 0, flexShrink: 1, fontSize: 13, fontWeight: \"600\" },\n activityDisclosurePreview: { minWidth: 0, flex: 1, fontSize: 13, lineHeight: 18 },\n activityDisclosureStatus: { flexShrink: 0, fontSize: 11, fontWeight: \"600\", lineHeight: 15 },\n activityDisclosureBody: { marginLeft: 27, paddingBottom: 7, paddingRight: 6 },\n notice: {\n borderRadius: 10,\n borderWidth: StyleSheet.hairlineWidth,\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n paddingHorizontal: 13,\n paddingVertical: 11,\n },\n noticeIcon: { width: 16, fontSize: 17, fontWeight: \"800\", lineHeight: 20, textAlign: \"center\" },\n noticeContent: { minWidth: 0, flex: 1, gap: 7 },\n noticeDetails: { gap: 6 },\n noticeAction: { fontSize: 12, fontWeight: \"700\", lineHeight: 17 },\n noticeLink: { minHeight: 44, justifyContent: \"center\", paddingHorizontal: 2 },\n sessionStatus: { flexDirection: \"row\", alignItems: \"center\", gap: 10 },\n sessionStatusRule: { height: StyleSheet.hairlineWidth, flex: 1 },\n sessionStatusLabel: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n sessionStatusDot: { width: 5, height: 5, borderRadius: 999 },\n sessionStatusText: { fontSize: 11, lineHeight: 15 },\n turnGroup: { gap: 8 },\n turnSummary: {\n minHeight: 48,\n borderRadius: 999,\n borderWidth: StyleSheet.hairlineWidth,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 7,\n paddingHorizontal: 12,\n },\n turnSummaryText: { flex: 1, fontSize: 13, fontWeight: \"600\" },\n turnChevron: { width: 13, fontSize: 19, fontWeight: \"500\", textAlign: \"center\" },\n turnOutcome: { width: 14, fontSize: 13, fontWeight: \"800\", textAlign: \"center\" },\n turnDuration: { fontSize: 12, fontVariant: [\"tabular-nums\"] },\n turnRail: { borderLeftWidth: 2, gap: 12, marginLeft: 8, paddingLeft: 12 },\n cardTitle: { fontSize: 14, fontWeight: \"700\", lineHeight: 19 },\n secondaryText: { fontSize: 14, lineHeight: 20 },\n helpText: { fontSize: 12, lineHeight: 17 },\n codeText: {\n fontFamily: Platform.select({ ios: \"Menlo\", android: \"monospace\" }),\n fontSize: 12,\n lineHeight: 17,\n },\n approvalOverlay: {\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 12,\n alignItems: \"center\",\n paddingHorizontal: 16,\n },\n approvalSurface: {\n width: \"100%\",\n maxWidth: 760,\n borderRadius: 16,\n borderWidth: 1,\n padding: 12,\n gap: 10,\n elevation: 8,\n shadowColor: \"#000000\",\n shadowOffset: { width: 0, height: 10 },\n shadowOpacity: 0.16,\n shadowRadius: 18,\n },\n approvalItem: { gap: 8 },\n sessionSurfaces: { maxHeight: 300 },\n sessionSurfacesContent: { paddingVertical: 4 },\n humanInputWorkspaceCollapsed: { flexShrink: 0 },\n humanInputWorkspaceExpanded: { flex: 1, minHeight: 0 },\n humanInputDisclosure: {\n minHeight: 44,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 7,\n paddingHorizontal: 12,\n paddingVertical: 7,\n },\n humanInputDisclosureTitle: { flexShrink: 0, fontSize: 14, fontWeight: \"600\", lineHeight: 19 },\n humanInputWorkspaceScroll: { flex: 1, minHeight: 0 },\n humanInputWorkspaceBody: { gap: 14, paddingHorizontal: 12, paddingBottom: 16 },\n actionSurfaces: { gap: 14, paddingHorizontal: 12, paddingVertical: 8 },\n actionGroup: { gap: 8 },\n actionTitle: { fontSize: 15, fontWeight: \"700\" },\n actionCard: { borderRadius: 14, borderWidth: 1, padding: 12, gap: 10 },\n queueSurface: {\n overflow: \"hidden\",\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n },\n queueDisclosure: {\n minHeight: 44,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n queueChevron: { width: 12, fontSize: 18, lineHeight: 20, textAlign: \"center\" },\n queueTitle: { flexShrink: 0, fontSize: 13, fontWeight: \"600\" },\n queuePreview: { minWidth: 0, flex: 1, fontSize: 13 },\n queueRow: { borderTopWidth: StyleSheet.hairlineWidth, padding: 12, gap: 9 },\n queuePrompt: { fontSize: 14, lineHeight: 19 },\n queueActions: { flexDirection: \"row\", alignItems: \"center\", flexWrap: \"wrap\", gap: 6 },\n buttonRow: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"flex-end\", gap: 8 },\n buttonWrap: { flexDirection: \"row\", alignItems: \"center\", flexWrap: \"wrap\", gap: 6 },\n button: {\n minHeight: 48,\n minWidth: 48,\n borderRadius: 11,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n buttonText: { fontSize: 13, fontWeight: \"700\" },\n compactButton: {\n minHeight: 36,\n minWidth: 0,\n borderRadius: 9,\n paddingHorizontal: 10,\n paddingVertical: 6,\n },\n compactButtonText: { fontSize: 12 },\n question: { gap: 8 },\n questionInput: {\n minHeight: 48,\n maxHeight: 144,\n borderWidth: 1,\n borderRadius: 11,\n paddingHorizontal: 12,\n paddingVertical: 10,\n fontSize: 15,\n textAlignVertical: \"top\",\n },\n optionList: { gap: 7 },\n option: {\n minHeight: 48,\n borderWidth: 1,\n borderRadius: 11,\n justifyContent: \"center\",\n paddingHorizontal: 12,\n paddingVertical: 9,\n },\n optionLabel: { fontSize: 14, fontWeight: \"600\" },\n otherOptionToggle: { minHeight: 48, justifyContent: \"center\" },\n otherInput: {\n minHeight: 48,\n borderWidth: 1,\n borderRadius: 9,\n marginTop: 7,\n paddingHorizontal: 10,\n paddingVertical: 8,\n fontSize: 14,\n },\n attachmentStrip: { gap: 8, paddingHorizontal: 12, paddingVertical: 6 },\n attachmentChip: {\n width: 180,\n minHeight: 64,\n borderWidth: 1,\n borderRadius: 12,\n padding: 9,\n gap: 4,\n },\n attachmentName: { fontSize: 13, fontWeight: \"600\" },\n composerDock: { paddingHorizontal: 12, paddingTop: 5, paddingBottom: 8, gap: 5 },\n composerContainer: {\n width: \"100%\",\n maxWidth: 820,\n alignSelf: \"center\",\n borderRadius: 28,\n borderWidth: 1,\n padding: 5,\n gap: 4,\n },\n composerRow: { minHeight: 40, flexDirection: \"row\", alignItems: \"flex-end\" },\n composerStack: { gap: 8 },\n composerInput: {\n minWidth: 0,\n minHeight: 40,\n maxHeight: 120,\n flex: 1,\n paddingHorizontal: 11,\n paddingVertical: 9,\n fontSize: 16,\n lineHeight: 22,\n textAlignVertical: \"top\",\n },\n composerToolbar: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n },\n draftConflict: { borderRadius: 10, padding: 8, gap: 6 },\n});\n","import {\n createSessionRealtimeController,\n type CreateSessionRealtimeControllerOptions,\n type SessionRealtimeController,\n type SessionRealtimeOwnerStorage,\n} from \"@opengeni/sdk/realtime\";\nimport type { SessionRealtimeControllerFactory } from \"@opengeni/react/session-realtime\";\n\n/**\n * The WebRTC entry points a native host supplies, in the shape of\n * `react-native-webrtc`. Everything else (negotiation, the realtime ledger,\n * delegation, recovery and lifecycle) stays in the shared SDK controller that\n * the web uses.\n */\nexport interface NativeWebRtcAdapter {\n createPeerConnection(): RTCPeerConnection;\n getUserMedia(constraints: MediaStreamConstraints): Promise<MediaStream>;\n}\n\nexport type NativeRealtimeControllerFactoryOptions = {\n /**\n * Owner-proof storage. Defaults to process memory, which matches the web's\n * tab-scoped session storage: a relaunched app recovers through the server\n * lifecycle rather than a stale local proof.\n */\n storage?: SessionRealtimeOwnerStorage | undefined;\n};\n\n/** Process-lifetime owner storage, the native counterpart of `sessionStorage`. */\nexport function createMemoryRealtimeOwnerStorage(): SessionRealtimeOwnerStorage {\n const values = new Map<string, string>();\n return {\n getItem: (key) => values.get(key) ?? null,\n setItem: (key, value) => void values.set(key, String(value)),\n removeItem: (key) => void values.delete(key),\n };\n}\n\ntype AudioTrackLike = { kind?: string; enabled: boolean };\ntype StreamLike = { getAudioTracks?: () => AudioTrackLike[]; getTracks?: () => AudioTrackLike[] };\n\nfunction audioTracks(stream: unknown): AudioTrackLike[] {\n const candidate = stream as StreamLike | null | undefined;\n if (!candidate) return [];\n if (typeof candidate.getAudioTracks === \"function\") return candidate.getAudioTracks();\n if (typeof candidate.getTracks === \"function\")\n return candidate.getTracks().filter((track) => track.kind === \"audio\");\n return [];\n}\n\n/**\n * Native WebRTC plays remote audio itself, through the call audio session. The\n * SDK still drives an audio element (attach, mute, play, detach), so this\n * stand-in maps those calls onto the remote audio tracks: muting disables the\n * tracks, and play resolves because playback is already live.\n */\nexport function createNativeRemoteAudio(): HTMLAudioElement {\n let source: unknown = null;\n let muted = false;\n let paused = true;\n const apply = () => {\n const enabled = !muted && !paused;\n for (const track of audioTracks(source)) track.enabled = enabled;\n };\n const element = {\n autoplay: true,\n get muted() {\n return muted;\n },\n set muted(value: boolean) {\n muted = Boolean(value);\n apply();\n },\n get srcObject() {\n return source;\n },\n set srcObject(value: unknown) {\n source = value ?? null;\n if (source === null) paused = true;\n apply();\n },\n get paused() {\n return paused;\n },\n async play() {\n paused = false;\n apply();\n },\n pause() {\n paused = true;\n apply();\n },\n };\n return element as unknown as HTMLAudioElement;\n}\n\n/**\n * Controller factory for `useSessionRealtime({ controllerFactory })`: the\n * shared SDK controller with native WebRTC, a native remote-audio stand-in and\n * owner storage injected. No realtime logic is forked.\n */\nexport function createNativeRealtimeControllerFactory(\n webrtc: NativeWebRtcAdapter,\n options: NativeRealtimeControllerFactoryOptions = {},\n): SessionRealtimeControllerFactory {\n const storage = options.storage ?? createMemoryRealtimeOwnerStorage();\n return (controllerOptions: CreateSessionRealtimeControllerOptions): SessionRealtimeController =>\n createSessionRealtimeController({\n ...controllerOptions,\n storage: controllerOptions.storage ?? storage,\n remoteAudio: controllerOptions.remoteAudio ?? createNativeRemoteAudio(),\n createPeerConnection: () => webrtc.createPeerConnection(),\n getUserMedia: (constraints) => webrtc.getUserMedia(constraints),\n });\n}\n","import { useMemo } from \"react\";\nimport { useSessionRealtime } from \"@opengeni/react/session-realtime\";\nimport {\n createNativeRealtimeControllerFactory,\n type NativeRealtimeControllerFactoryOptions,\n type NativeWebRtcAdapter,\n} from \"./native-realtime\";\n\nexport type UseNativeSessionRealtimeOptions = Omit<\n Parameters<typeof useSessionRealtime>[0],\n \"controllerFactory\"\n> & {\n /** Native WebRTC, for example `createReactNativeWebRtcAdapter()` from `./webrtc`. */\n webrtc: NativeWebRtcAdapter;\n storage?: NativeRealtimeControllerFactoryOptions[\"storage\"];\n};\n\n/**\n * The web's `useSessionRealtime`, driven by native WebRTC. Same controller,\n * same admission rules, same lifecycle recovery; only media is injected.\n */\nexport function useNativeSessionRealtime(options: UseNativeSessionRealtimeOptions) {\n const { webrtc, storage, ...realtimeOptions } = options;\n const controllerFactory = useMemo(\n () => createNativeRealtimeControllerFactory(webrtc, storage ? { storage } : {}),\n [webrtc, storage],\n );\n return useSessionRealtime({ ...realtimeOptions, controllerFactory });\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { SessionRealtimeControllerSnapshot } from \"@opengeni/sdk/realtime\";\nimport { sessionRealtimeTransportKind } from \"@opengeni/sdk/realtime\";\nimport type { SessionRealtimeModel } from \"@opengeni/sdk\";\n\n/** System events from the platform call service (CallKit on iOS). */\nexport type NativeCallEvent =\n /** The person ended the call from the system UI, lock screen or headset. */\n | { type: \"ended\"; callId: string }\n /** The person muted or unmuted from the system UI. */\n | { type: \"muteChanged\"; callId: string; muted: boolean }\n /** The audio route changed (speaker, receiver, AirPods, CarPlay). */\n | { type: \"routeChanged\"; route: NativeCallAudioRoute }\n /** The system activated or released the call audio session (forwarded to WebRTC). */\n | { type: \"audioSessionActivated\" }\n | { type: \"audioSessionDeactivated\" }\n /**\n * The system asked the app to start a call from outside it (Siri, the Phone\n * app's recents, an App Intent or a shortcut). `target` is the host's own\n * call target, for example a session id, or absent for the default.\n */\n | { type: \"startRequested\"; target: string | null };\n\nexport type NativeCallAudioRoute = \"receiver\" | \"speaker\" | \"bluetooth\" | \"headphones\" | \"other\";\n\n/**\n * The platform call service seam. The OpenGeni Expo module implements it with\n * CallKit; hosts on other platforms can implement it or omit it, in which case\n * the realtime session runs without a system call.\n */\nexport interface NativeCallAdapter {\n /** Report an outgoing call to the system and activate the call audio session. */\n startCall(call: { callId: string; title: string; target: string | null }): Promise<void>;\n /** The voice connection is live: the system call shows as connected. */\n reportConnected(callId: string): void;\n /** End the system call. `failed` reports a failure rather than a normal hang-up. */\n endCall(callId: string, reason?: \"ended\" | \"failed\"): Promise<void>;\n setMuted(callId: string, muted: boolean): Promise<void>;\n /** Route call audio to the loudspeaker, or back to the default route. */\n setSpeaker(on: boolean): Promise<void>;\n subscribe(listener: (event: NativeCallEvent) => void): () => void;\n /** A start request that launched the app before JavaScript subscribed. */\n takePendingStartRequest(): Promise<{ target: string | null } | null>;\n}\n\n/** Native hosts can stream voice over WebRTC; WebSocket audio transports need a browser. */\nexport function nativeRealtimeModelSupported(model: SessionRealtimeModel): boolean {\n const transport = sessionRealtimeTransportKind(model);\n return transport === \"codex\" || transport === \"azure-live\";\n}\n\n/** The slice of `useSessionRealtime` a call drives. */\nexport type NativeCallRealtime = {\n snapshot: SessionRealtimeControllerSnapshot;\n canStart: boolean;\n admissionBlocker: string | null;\n start(): Promise<void>;\n stop(): Promise<void>;\n setInputMuted(muted: boolean): void;\n};\n\nexport type NativeCallPhase = \"idle\" | \"connecting\" | \"active\" | \"reconnecting\" | \"ending\";\n\nexport type NativeRealtimeCall = {\n phase: NativeCallPhase;\n muted: boolean;\n speaker: boolean;\n route: NativeCallAudioRoute | null;\n error: string | null;\n /**\n * Whether the system shows this call (CallKit). False when the platform has\n * no call service or refused the call; voice then runs as an in-app call.\n */\n systemCall: boolean;\n canStart: boolean;\n start(): Promise<void>;\n end(): Promise<void>;\n setMuted(muted: boolean): void;\n setSpeaker(on: boolean): void;\n};\n\nfunction randomCallId(): string {\n const crypto = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (crypto?.randomUUID) return crypto.randomUUID();\n // RFC 4122 v4 layout; CallKit only needs a unique UUID string.\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const value = Math.floor(Math.random() * 16);\n return (char === \"x\" ? value : (value & 0x3) | 0x8).toString(16);\n });\n}\n\n/**\n * Keep one system call and one shared realtime session in lockstep: starting\n * reports an outgoing call and starts voice; the call shows connected once\n * voice is live; hanging up anywhere (app, lock screen, headset) stops voice,\n * and voice ending or failing ends the call. Mute is mirrored both ways.\n * If the system refuses the call (no call service, a region without CallKit,\n * the simulator), voice still starts as an in-app call.\n */\nexport function useNativeRealtimeCall(options: {\n realtime: NativeCallRealtime;\n call?: NativeCallAdapter | null | undefined;\n title: string;\n target?: string | null | undefined;\n}): NativeRealtimeCall {\n const { realtime, call } = options;\n const [callId, setCallId] = useState<string | null>(null);\n const [ending, setEnding] = useState(false);\n const [speaker, setSpeakerState] = useState(false);\n const [route, setRoute] = useState<NativeCallAudioRoute | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [systemCall, setSystemCall] = useState(false);\n const callIdRef = useRef<string | null>(null);\n /** The call id the system knows about; null for an in-app call. */\n const systemCallRef = useRef<string | null>(null);\n const connectedRef = useRef<string | null>(null);\n const realtimeRef = useRef(realtime);\n realtimeRef.current = realtime;\n const status = realtime.snapshot.status;\n const muted = realtime.snapshot.inputMuted;\n\n const finish = useCallback(\n async (reason: \"ended\" | \"failed\") => {\n const id = callIdRef.current;\n if (!id) return;\n const reported = systemCallRef.current === id;\n callIdRef.current = null;\n systemCallRef.current = null;\n connectedRef.current = null;\n setCallId(null);\n setEnding(false);\n setSpeakerState(false);\n setSystemCall(false);\n if (reported) await call?.endCall(id, reason).catch(() => undefined);\n },\n [call],\n );\n\n useEffect(() => {\n if (!call) return;\n return call.subscribe((event) => {\n if (event.type === \"routeChanged\") {\n setRoute(event.route);\n setSpeakerState(event.route === \"speaker\");\n return;\n }\n if (\n event.type === \"startRequested\" ||\n event.type === \"audioSessionActivated\" ||\n event.type === \"audioSessionDeactivated\"\n )\n return;\n if (event.callId !== callIdRef.current) return;\n if (event.type === \"ended\") {\n callIdRef.current = null;\n systemCallRef.current = null;\n connectedRef.current = null;\n setCallId(null);\n setEnding(false);\n setSystemCall(false);\n void realtimeRef.current.stop().catch(() => undefined);\n } else if (event.type === \"muteChanged\") {\n realtimeRef.current.setInputMuted(event.muted);\n }\n });\n }, [call]);\n\n // The system call shows connected exactly once, when voice first goes live.\n useEffect(() => {\n const id = callIdRef.current;\n if (id && status === \"active\" && connectedRef.current !== id) {\n connectedRef.current = id;\n if (systemCallRef.current === id) call?.reportConnected(id);\n }\n }, [call, status, callId]);\n\n // Voice ending or failing ends the call; a reconnect keeps it.\n useEffect(() => {\n if (!callIdRef.current) return;\n if (status === \"error\" || status === \"lost_owner\") {\n setError(realtime.snapshot.error ?? \"Voice disconnected.\");\n void finish(\"failed\");\n } else if (status === \"idle\" && connectedRef.current === callIdRef.current) {\n void finish(\"ended\");\n }\n }, [finish, realtime.snapshot.error, status]);\n\n const start = useCallback(async () => {\n if (callIdRef.current) return;\n const current = realtimeRef.current;\n if (!current.canStart) {\n throw new Error(current.admissionBlocker ?? \"Voice is not ready yet.\");\n }\n const id = randomCallId();\n callIdRef.current = id;\n setCallId(id);\n setError(null);\n if (call) {\n try {\n await call.startCall({ callId: id, title: options.title, target: options.target ?? null });\n if (callIdRef.current === id) {\n systemCallRef.current = id;\n setSystemCall(true);\n }\n } catch {\n // The system refused the call; talk anyway, without the system call UI.\n }\n }\n if (callIdRef.current !== id) return;\n try {\n await current.start();\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not start the call.\");\n await finish(\"failed\");\n throw cause;\n }\n }, [call, finish, options.target, options.title]);\n\n const end = useCallback(async () => {\n if (!callIdRef.current) return;\n setEnding(true);\n await realtimeRef.current.stop().catch(() => undefined);\n await finish(\"ended\");\n }, [finish]);\n\n const setMuted = useCallback(\n (next: boolean) => {\n realtimeRef.current.setInputMuted(next);\n const id = callIdRef.current;\n if (id && systemCallRef.current === id) void call?.setMuted(id, next).catch(() => undefined);\n },\n [call],\n );\n\n const setSpeaker = useCallback(\n (on: boolean) => {\n setSpeakerState(on);\n void call?.setSpeaker(on).catch(() => setSpeakerState(!on));\n },\n [call],\n );\n\n const phase: NativeCallPhase = !callId\n ? \"idle\"\n : ending || status === \"stopping\"\n ? \"ending\"\n : status === \"active\"\n ? \"active\"\n : status === \"recovering\" && connectedRef.current === callId\n ? \"reconnecting\"\n : \"connecting\";\n\n return {\n phase,\n muted,\n speaker,\n route,\n error,\n systemCall,\n canStart: !callId && realtime.canStart,\n start,\n end,\n setMuted,\n setSpeaker,\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { Icon, type NativeIconName } from \"../timeline/icon\";\nimport { ThinkingOrb } from \"../timeline/thinking-orb\";\nimport { fontStyle, useNativeTimelineTheme } from \"../timeline/theme\";\nimport type { NativeRealtimeCall } from \"./native-call\";\n\nexport type OpenGeniNativeCallLabels = {\n connecting: string;\n live: string;\n reconnecting: string;\n ending: string;\n muted: string;\n mute: string;\n unmute: string;\n speaker: string;\n end: string;\n minimize: string;\n};\n\nexport const DEFAULT_OPENGENI_NATIVE_CALL_LABELS: OpenGeniNativeCallLabels = {\n connecting: \"Connecting…\",\n live: \"Listening\",\n reconnecting: \"Reconnecting…\",\n ending: \"Ending…\",\n muted: \"Muted\",\n mute: \"Mute\",\n unmute: \"Unmute\",\n speaker: \"Speaker\",\n end: \"End\",\n minimize: \"Back to chat\",\n};\n\nfunction formatDuration(seconds: number): string {\n const minutes = Math.floor(seconds / 60);\n const rest = seconds % 60;\n return `${minutes}:${String(rest).padStart(2, \"0\")}`;\n}\n\nfunction useCallDuration(active: boolean): number | null {\n const [since, setSince] = useState<number | null>(null);\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (!active) return setSince(null);\n setSince((current) => current ?? Date.now());\n const timer = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(timer);\n }, [active]);\n return since === null ? null : Math.max(0, Math.floor((now - since) / 1000));\n}\n\nfunction CallButton({\n icon,\n label,\n onPress,\n selected = false,\n destructive = false,\n disabled = false,\n}: {\n icon: NativeIconName;\n label: string;\n onPress: () => void;\n selected?: boolean;\n destructive?: boolean;\n disabled?: boolean;\n}) {\n const theme = useNativeTimelineTheme();\n const { colors } = theme;\n // Hanging up is the system's solid red in either appearance, like the Phone app.\n const hangUp = theme.scheme === \"dark\" ? \"#FF453A\" : \"#FF3B30\";\n const background = destructive ? hangUp : selected ? colors.fg : colors[\"surface-2\"];\n const foreground = destructive ? \"#FFFFFF\" : selected ? colors.bg : colors.fg;\n return (\n <View style={styles.buttonColumn}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ selected, disabled }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: background, opacity: disabled ? 0.4 : pressed ? 0.75 : 1 },\n ]}\n >\n <Icon name={icon} size={26} color={foreground} />\n </Pressable>\n <Text style={[styles.buttonLabel, fontStyle(theme, 500), { color: colors[\"fg-muted\"] }]}>\n {label}\n </Text>\n </View>\n );\n}\n\n/**\n * The full-screen call with an agent: the web's thinking orb, the call state,\n * and mute, speaker and end controls. The host owns navigation (`onMinimize`\n * returns to the conversation while the call continues) and safe areas.\n */\nexport function OpenGeniNativeCallView({\n call,\n title,\n subtitle,\n onMinimize,\n labels: labelOverrides,\n}: {\n call: NativeRealtimeCall;\n title: string;\n subtitle?: string | null | undefined;\n onMinimize?: (() => void) | undefined;\n labels?: Partial<OpenGeniNativeCallLabels> | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const { colors } = theme;\n const labels = { ...DEFAULT_OPENGENI_NATIVE_CALL_LABELS, ...labelOverrides };\n const duration = useCallDuration(call.phase === \"active\");\n const status =\n call.phase === \"connecting\" || call.phase === \"idle\"\n ? labels.connecting\n : call.phase === \"reconnecting\"\n ? labels.reconnecting\n : call.phase === \"ending\"\n ? labels.ending\n : call.muted\n ? labels.muted\n : labels.live;\n const orbState =\n call.phase === \"active\" ? (call.muted ? \"breathing\" : \"listening\") : \"connecting\";\n const live = call.phase !== \"idle\" && call.phase !== \"ending\";\n return (\n <View style={[styles.screen, { backgroundColor: colors.canvas }]} testID=\"opengeni-call\">\n <View style={styles.header}>\n {onMinimize ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={labels.minimize}\n hitSlop={12}\n onPress={onMinimize}\n style={({ pressed }) => [styles.minimize, { opacity: pressed ? 0.6 : 1 }]}\n >\n <Icon name=\"chevron-down\" size={24} color={colors[\"fg-muted\"]} />\n </Pressable>\n ) : null}\n </View>\n <View style={styles.center}>\n <ThinkingOrb state={orbState} size={64} displaySize={176} speed={0.7} />\n <Text\n style={[styles.title, fontStyle(theme, 600), { color: colors.fg }]}\n numberOfLines={2}\n accessibilityRole=\"header\"\n >\n {title}\n </Text>\n {subtitle ? (\n <Text\n style={[styles.subtitle, fontStyle(theme, 400), { color: colors[\"fg-muted\"] }]}\n numberOfLines={1}\n >\n {subtitle}\n </Text>\n ) : null}\n <Text\n style={[styles.status, fontStyle(theme, 500), { color: colors[\"fg-muted\"] }]}\n accessibilityLiveRegion=\"polite\"\n >\n {duration !== null && !call.muted ? `${status} · ${formatDuration(duration)}` : status}\n </Text>\n {call.error ? (\n <Text style={[styles.error, fontStyle(theme, 400), { color: colors.danger }]}>\n {call.error}\n </Text>\n ) : null}\n </View>\n <View style={styles.controls}>\n <CallButton\n icon={call.muted ? \"mic-off\" : \"mic\"}\n label={call.muted ? labels.unmute : labels.mute}\n selected={call.muted}\n disabled={!live}\n onPress={() => call.setMuted(!call.muted)}\n />\n <CallButton\n icon=\"volume-2\"\n label={labels.speaker}\n selected={call.speaker}\n disabled={!live}\n onPress={() => call.setSpeaker(!call.speaker)}\n />\n <CallButton\n icon=\"phone-off\"\n label={labels.end}\n destructive\n disabled={call.phase === \"idle\" || call.phase === \"ending\"}\n onPress={() => void call.end()}\n />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n screen: { flex: 1, paddingHorizontal: 24, paddingBottom: 32 },\n header: { height: 52, flexDirection: \"row\", alignItems: \"center\" },\n minimize: { width: 44, height: 44, alignItems: \"center\", justifyContent: \"center\" },\n center: { flex: 1, alignItems: \"center\", justifyContent: \"center\", gap: 10 },\n title: { fontSize: 26, lineHeight: 32, textAlign: \"center\", marginTop: 28 },\n subtitle: { fontSize: 15, lineHeight: 20, textAlign: \"center\" },\n status: { fontSize: 17, lineHeight: 22, marginTop: 4, fontVariant: [\"tabular-nums\"] },\n error: { fontSize: 15, lineHeight: 20, textAlign: \"center\", marginTop: 8 },\n controls: { flexDirection: \"row\", justifyContent: \"space-evenly\", alignItems: \"flex-start\" },\n buttonColumn: { alignItems: \"center\", gap: 8, width: 88 },\n button: {\n width: 72,\n height: 72,\n borderRadius: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n buttonLabel: { fontSize: 13, lineHeight: 16 },\n});\n"]}
|