@opengeni/react-native 4.3.3-canary.39786771332001 → 4.5.0
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/dist/{chunk-ZZNZBZWV.js → chunk-CLIXZUMZ.js} +3 -3
- package/dist/{chunk-ZZNZBZWV.js.map → chunk-CLIXZUMZ.js.map} +1 -1
- package/dist/{chunk-2RNMGRTB.js → chunk-DQNUIL2F.js} +3 -3
- package/dist/{chunk-2RNMGRTB.js.map → chunk-DQNUIL2F.js.map} +1 -1
- package/dist/{chunk-FHPMRXIG.js → chunk-NIQPBSB4.js} +341 -2
- package/dist/chunk-NIQPBSB4.js.map +1 -0
- package/dist/{chunk-QFV5DISV.js → chunk-QBQRHN64.js} +3 -3
- package/dist/{chunk-QFV5DISV.js.map → chunk-QBQRHN64.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/timeline/icon-nodes.generated.d.ts +139 -0
- package/dist/timeline/index.js +68 -26
- package/dist/timeline/index.js.map +1 -1
- package/dist/timeline/markdown-standalone-links.d.ts +6 -0
- package/dist/timeline/markdown.js +17 -4
- package/dist/timeline/markdown.js.map +1 -1
- package/dist/timeline/previews.js +2 -2
- package/dist/timeline/session-list.d.ts +5 -1
- package/package.json +4 -4
- package/src/timeline/activity.tsx +27 -0
- package/src/timeline/icon-nodes.generated.ts +339 -0
- package/src/timeline/markdown-standalone-links.ts +13 -0
- package/src/timeline/markdown.tsx +17 -3
- package/src/timeline/session-list.tsx +43 -16
- package/dist/chunk-FHPMRXIG.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/timeline/text-selection.ts","../../src/timeline/activity.tsx","../../src/timeline/composer-state.ts","../../src/timeline/turn.tsx","../../src/timeline/turn-steps.tsx","../../src/timeline/live-notes.ts","../../src/timeline/sheet.tsx","../../src/timeline/annotations.tsx","../../src/timeline/message-timeline.tsx","../../src/timeline/controls.tsx","../../src/timeline/paste.ts","../../src/timeline/composer.tsx","../../src/timeline/feedback.tsx","../../src/timeline/selector.tsx","../../src/timeline/secret-field.tsx","../../src/timeline/decisions.tsx","../../src/timeline/message-attachments.tsx","../../src/timeline/session-list.tsx","../../src/timeline/session-signals.tsx","../../src/timeline/queue-dock.tsx","../../src/timeline/session-screen.tsx","../../src/timeline/model-picker.tsx","../../src/timeline/session-actions.tsx","../../src/timeline/inbox.tsx"],"names":["useOpenGeniText","useEffect","createContext","Platform","jsx","Text","useContext","useRef","jsxs","Fragment","Pressable","View","toolDisplayName","useState","Animated","Easing","useMemo","useCallback","ScrollView","FadeIn","FadeOut","ActivityIndicator","AccessibilityInfo","TextInput","Modal","KeyboardAvoidingView","text","useAnimatedStyle","SESSION_STATUS_PRESENTATION","useWindowDimensions","Chip","annotationHasNote","Alert","Image","defaultChatComposerMessages","sessionDisplayTitle","PanResponder","actions","ActionSheetIOS"],"mappings":"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","file":"index.js","sourcesContent":["import type { DraftTimelineAnnotation } from \"@opengeni/sdk\";\nimport type { TimelineAnnotationSourceDescriptor } from \"@opengeni/react/session\";\nimport { annotationFromSelection } from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useEffect, useRef } from \"react\";\nimport { Platform } from \"react-native\";\n\n/**\n * Text selection inside timeline messages. A message body sits in a view with\n * this test id prefix plus its annotation source key (empty when it cannot be\n * annotated). On iOS the package's native module then gives its text the\n * system selection (handles, Copy, Look Up, Share) instead of React Native's\n * whole-paragraph Copy; on both platforms it adds Add note to the selection\n * menu when a host takes annotations.\n */\nexport const ANNOTATION_SOURCE_TEST_ID_PREFIX = \"og-annotation-source:\";\n\nexport function annotationSourceTestId(sourceKey: string | undefined): string {\n return `${ANNOTATION_SOURCE_TEST_ID_PREFIX}${sourceKey ?? \"\"}`;\n}\n\ntype AnnotateEvent = { sourceKey: string; quote: string; before: string; after: string };\n\nexport type QuoteBox = { x: number; y: number; width: number; height: number };\n\n/**\n * Where a quote is drawn in its source view: the end of its last glyph, the\n * top of that line's text, and a text box for each line it spans.\n */\nexport type QuoteAnchor = { x: number; top: number; boxes: QuoteBox[] };\n\nexport type QuoteAnchorQuery = { quote: string; before: string; after: string };\n\ntype TextSelectionModule = {\n addListener(\n eventName: \"onAnnotate\",\n listener: (event: AnnotateEvent) => void,\n ): { remove(): void };\n setAnnotateTitle(title: string | null): void;\n quoteAnchors?(\n sourceKey: string,\n queries: QuoteAnchorQuery[],\n ): Promise<({ x?: number; top?: number; rects?: number[] } | null)[]>;\n};\n\nfunction textSelectionModule(): TextSelectionModule | null {\n if (Platform.OS !== \"ios\" && Platform.OS !== \"android\") return null;\n const registry = (globalThis as { expo?: { modules?: Record<string, unknown> } }).expo?.modules;\n const module = registry?.OpenGeniTextSelection as TextSelectionModule | undefined;\n return module && typeof module.addListener === \"function\" ? module : null;\n}\n\n/** Whether this build can turn a text selection into an annotation. */\nexport function nativeTextAnnotationAvailable(): boolean {\n return textSelectionModule() !== null;\n}\n\n/**\n * Measures where each quote ends inside the source drawn for `sourceKey`;\n * null for a quote that is not drawn there (or without native measuring).\n */\nexport async function measureQuoteAnchors(\n sourceKey: string,\n queries: QuoteAnchorQuery[],\n): Promise<(QuoteAnchor | null)[]> {\n const module = textSelectionModule();\n if (!module?.quoteAnchors || queries.length === 0) return queries.map(() => null);\n try {\n const anchors = await module.quoteAnchors(sourceKey, queries);\n return queries.map((_, index) => {\n const anchor = anchors[index];\n if (typeof anchor?.x !== \"number\" || typeof anchor.top !== \"number\") return null;\n const flat = anchor.rects ?? [];\n const boxes: QuoteBox[] = [];\n for (let at = 0; at + 3 < flat.length; at += 4) {\n boxes.push({ x: flat[at]!, y: flat[at + 1]!, width: flat[at + 2]!, height: flat[at + 3]! });\n }\n return { x: anchor.x, top: anchor.top, boxes };\n });\n } catch {\n return queries.map(() => null);\n }\n}\n\n/**\n * Turns Add note on a selection into a draft annotation for `onAnnotate`.\n * `sources` maps each message's annotation source key to its source.\n */\nexport function useNativeTextAnnotation(\n sources: ReadonlyMap<string, TimelineAnnotationSourceDescriptor>,\n onAnnotate: ((annotation: DraftTimelineAnnotation) => void) | undefined,\n): void {\n const t = useOpenGeniText();\n const latest = useRef({ sources, onAnnotate });\n latest.current = { sources, onAnnotate };\n const enabled = Boolean(onAnnotate);\n const title = t(\"timelineAnnotationSelection.addNote\");\n useEffect(() => {\n const module = textSelectionModule();\n if (!module || !enabled) return;\n // Add note shows while some timeline listens (the module tracks listeners).\n module.setAnnotateTitle(title);\n const subscription = module.addListener(\"onAnnotate\", (event) => {\n const source = latest.current.sources.get(event.sourceKey);\n if (!source) return;\n const annotation = annotationFromSelection(source, {\n text: event.quote,\n textBefore: event.before,\n textAfter: event.after,\n });\n if (annotation) latest.current.onAnnotate?.(annotation);\n });\n return () => subscription.remove();\n }, [enabled, title]);\n}\n","import type {\n ActivityItem,\n AgentMessageItem,\n ReasoningItem,\n SandboxItem,\n ToolCallItem,\n WorkerItem,\n} from \"@opengeni/react/session\";\nimport {\n pathBasename,\n pathDirname,\n presentsToolOutputPreview,\n sandboxRowTitle,\n startupDuration,\n startupPhaseTitle,\n STARTUP_WAIT_TITLES,\n toolDisplayName,\n toolRowPresentation,\n workerRowTitle,\n type ToolBody,\n type ToolDetails,\n type ToolIconKind,\n type ToolPreview,\n type ToolRowPresentation,\n type WebSearchResult,\n} from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { createContext, useContext, useEffect, type ReactNode } from \"react\";\nimport { Pressable, Text, View } from \"react-native\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport {\n ActivityDisclosure,\n BodyNote,\n Chip,\n PayloadBlock,\n RunningPreview,\n ShimmerText,\n TermBlock,\n ROW_MIN_HEIGHT,\n} from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { annotationSourceTestId } from \"./text-selection\";\n\n/* ----------------------------------------------------------------------------\n Native activity rows. Tool rows draw from the shared presentation model\n (`toolRowPresentation`), the same source the web renderers use; hosts can\n replace a tool's row via `NativeToolRenderers` (e.g. product-specific tools).\n -------------------------------------------------------------------------- */\n\nexport type NativeToolRendererProps = {\n item: ToolCallItem;\n presentation: ToolRowPresentation;\n compact: boolean;\n};\n\n/** Return null to fall back to the shared row. */\nexport type NativeToolRenderer = (props: NativeToolRendererProps) => ReactNode | null;\n\nexport interface NativeActivityOptions {\n /** Per-tool overrides keyed by exact tool name or MCP leaf. */\n toolRenderers?: Record<string, NativeToolRenderer> | undefined;\n /** Host renderer consulted for every tool call (return null for the shared row). */\n renderTool?: NativeToolRenderer | undefined;\n /** Active compute label for exec previews (\"on <label> · …\"). */\n computeLabel?: string | null | undefined;\n /**\n * `\"plain\"` keeps every tool step visible with its plain name and status but\n * never shows raw arguments, output or JSON. Defaults to `\"full\"`.\n */\n toolDetails?: ToolDetails | undefined;\n renderMarkdown?:\n | ((text: string, options: { tone: \"body\" | \"muted\"; streaming?: boolean }) => ReactNode)\n | undefined;\n onOpenSession?: ((sessionId: string) => void) | undefined;\n}\n\nconst ActivityOptionsContext = createContext<NativeActivityOptions>({});\nexport const NativeActivityOptionsProvider = ActivityOptionsContext.Provider;\nexport function useNativeActivityOptions(): NativeActivityOptions {\n return useContext(ActivityOptionsContext);\n}\n\nconst TOOL_ICON: Record<ToolIconKind, NativeIconName> = {\n terminal: \"terminal\",\n keyboard: \"keyboard\",\n \"file-diff\": \"file-diff\",\n search: \"search\",\n question: \"message-circle-question\",\n target: \"target\",\n brain: \"brain-circuit\",\n sessions: \"messages-square\",\n server: \"server\",\n \"server-cog\": \"server-cog\",\n calendar: \"calendar-clock\",\n panels: \"panels-top-left\",\n share: \"share-2\",\n message: \"message-square\",\n git: \"folder-git\",\n box: \"box\",\n key: \"key-round\",\n \"file-search\": \"file-search\",\n \"package-search\": \"package-search\",\n plug: \"plug\",\n wrench: \"wrench\",\n};\n\nfunction PreviewNode({ preview, compact }: { preview: ToolPreview; compact: boolean }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const mono = { ...fontStyle(theme, 400, \"mono\"), fontSize: theme.size.sm, lineHeight: 18 };\n switch (preview.kind) {\n case \"text\":\n return preview.running ? (\n <RunningPreview text={preview.text} compact={compact} />\n ) : (\n <>{preview.text}</>\n );\n case \"path\":\n return (\n <Text numberOfLines={1} style={mono}>\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{pathDirname(preview.path)}</Text>\n <Text style={{ color: theme.colors[\"fg-muted\"] }}>{pathBasename(preview.path)}</Text>\n {preview.add != null || preview.del != null ? (\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>\n {\" \"}\n {preview.add != null ? `+${preview.add}` : \"\"}\n {preview.add != null && preview.del != null ? \" \" : \"\"}\n {preview.del != null ? `−${preview.del}` : \"\"}\n </Text>\n ) : null}\n </Text>\n );\n case \"files\":\n return (\n <Text numberOfLines={1} style={mono}>\n <Text style={{ color: theme.colors[\"fg-muted\"] }}>\n {t(\"native.timeline.activity.countvalueFiles\", { countValue: preview.count })}\n </Text>\n <Text\n style={{ color: theme.colors[\"fg-subtle\"] }}\n >{` +${preview.add} −${preview.del}`}</Text>\n </Text>\n );\n case \"malformed\":\n return (\n <Text numberOfLines={1} style={mono}>\n <Text style={{ color: theme.colors[\"fg-muted\"] }}>{preview.name}</Text>\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{\" malformed V4A\"}</Text>\n </Text>\n );\n }\n}\n\nfunction previewContent(preview: ToolPreview, compact: boolean): ReactNode {\n if (preview.kind === \"text\" && !preview.running) return preview.text;\n return <PreviewNode preview={preview} compact={compact} />;\n}\n\nfunction keyedResults(results: readonly WebSearchResult[]) {\n const seen = new Map<string, number>();\n return results.map((result) => {\n const content = `${result.domain}\\u0000${result.title}\\u0000${result.snippet}`;\n const occurrence = (seen.get(content) ?? 0) + 1;\n seen.set(content, occurrence);\n return { key: `${content}\\u0000${occurrence}`, result };\n });\n}\n\nfunction ToolBodyView({ body }: { body: ToolBody }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n switch (body.kind) {\n case \"term\":\n return (\n <>\n <TermBlock\n command={body.command}\n workdir={body.workdir}\n output={body.output}\n live={body.live}\n failed={body.failed}\n />\n {body.note ? <BodyNote>{body.note}</BodyNote> : null}\n </>\n );\n case \"note\":\n return <BodyNote tone={body.tone}>{body.text}</BodyNote>;\n case \"payloads\":\n return (\n <>\n {body.blocks.map((block) => (\n <PayloadBlock\n key={block.label}\n label={block.label}\n value={block.value}\n failed={block.failed}\n />\n ))}\n </>\n );\n case \"patch\":\n return (\n <>\n {body.files.map((entry) => (\n <PatchView key={entry.key} path={entry.path} diff={entry.diff} bare={body.bare} />\n ))}\n </>\n );\n case \"web-results\":\n if (!body.results?.length) {\n return <BodyNote>{t(\"native.timeline.activity.resultsFoldedIntoModelContext\")}</BodyNote>;\n }\n return (\n <View style={{ gap: 8 }}>\n {keyedResults(body.results).map(({ key, result }) => (\n <View key={key} style={{ flexDirection: \"row\", gap: 10 }}>\n <View style={{ marginTop: 3 }}>\n <Icon name=\"globe\" size={14} color={theme.colors[\"fg-subtle\"]} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme), fontSize: theme.size.base, color: theme.colors.fg }}\n >\n {result.title}{\" \"}\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{result.domain}</Text>\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {result.snippet}\n </Text>\n </View>\n </View>\n ))}\n </View>\n );\n case \"none\":\n return null;\n case \"listing\":\n return (\n <>\n {body.note ? <BodyNote>{body.note}</BodyNote> : null}\n {body.entries.length > 0 ? (\n <View style={{ gap: body.entries.some((entry) => entry.snippet) ? 8 : 6 }}>\n {body.entries.map((entry) => (\n <View key={entry.key} style={{ minWidth: 0 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"baseline\", gap: 8 }}>\n {entry.eyebrow ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {entry.eyebrow}\n </Text>\n ) : null}\n <Text\n numberOfLines={1}\n style={{\n ...(entry.mono ? fontStyle(theme, 400, \"mono\") : fontStyle(theme, 500)),\n fontSize: theme.size.sm,\n color: theme.colors.fg,\n flexShrink: 1,\n }}\n >\n {entry.title}\n </Text>\n </View>\n {entry.snippet ? (\n <Text\n numberOfLines={2}\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {entry.snippet}\n </Text>\n ) : null}\n </View>\n ))}\n {body.more ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {t(\"native.timeline.activity.moreMore\", { more: body.more })}\n </Text>\n ) : null}\n </View>\n ) : body.empty ? (\n <BodyNote>{body.empty}</BodyNote>\n ) : null}\n {body.blocks.map((block) => (\n <PayloadBlock\n key={block.label}\n label={block.label}\n value={block.value}\n failed={block.failed}\n />\n ))}\n </>\n );\n }\n}\n\n/** Unified-diff-ish view of a V4A patch: add/del gutters tinted like the web diff. */\nfunction PatchView({\n path,\n diff,\n bare,\n}: {\n path: string;\n diff: string;\n bare?: boolean | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const mono = { ...fontStyle(theme, 400, \"mono\"), fontSize: theme.size.xs, lineHeight: 18 };\n let offset = 0;\n const lines = diff\n .split(\"\\n\")\n .map((text) => {\n const entry = { text, key: `l${offset}` };\n offset += text.length + 1;\n return entry;\n })\n .filter((entry) => !entry.text.startsWith(\"*** \"));\n return (\n <View\n style={{\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: theme.colors.border,\n overflow: \"hidden\",\n }}\n >\n {bare ? null : (\n <Text\n style={[\n mono,\n {\n paddingHorizontal: 8,\n paddingVertical: 6,\n color: theme.colors[\"fg-muted\"],\n backgroundColor: theme.colors[\"surface-2\"],\n },\n ]}\n numberOfLines={1}\n >\n {path}\n </Text>\n )}\n {lines.slice(0, 400).map(({ text: line, key }) => (\n <Text\n key={key}\n style={[\n mono,\n {\n paddingHorizontal: 8,\n color: theme.colors[\"fg-muted\"],\n backgroundColor: line.startsWith(\"+\")\n ? theme.colors[\"diff-add-bg\"]\n : line.startsWith(\"-\")\n ? theme.colors[\"diff-del-bg\"]\n : \"transparent\",\n },\n ]}\n >\n {line || \" \"}\n </Text>\n ))}\n </View>\n );\n}\n\nexport function PresentedToolRow({\n presentation: p,\n compact = false,\n outputPreview,\n}: {\n presentation: ToolRowPresentation;\n compact?: boolean;\n /** The row's output preview, when its output is not exact. */\n outputPreview?: ToolCallItem[\"outputPreview\"];\n}) {\n return (\n <ActivityDisclosure\n icon={TOOL_ICON[p.icon]}\n iconTone={p.iconTone}\n title={p.title}\n titleMono={p.titleMono}\n running={p.running}\n chip={p.chip}\n failed={p.failed}\n cancelled={p.cancelled}\n compact={compact}\n preview={p.preview ? previewContent(p.preview, compact) : undefined}\n expandable={p.body.kind !== \"none\"}\n outputPreview={outputPreview}\n >\n <ToolBodyView body={p.body} />\n </ActivityDisclosure>\n );\n}\n\nfunction ToolCallRow({ item, compact }: { item: ToolCallItem; compact: boolean }) {\n const t = useOpenGeniText();\n const options = useNativeActivityOptions();\n const presentation = toolRowPresentation(t, item, {\n computeLabel: options.computeLabel ?? null,\n details: options.toolDetails ?? \"full\",\n });\n const leaf = item.name.includes(\"__\")\n ? item.name.slice(item.name.lastIndexOf(\"__\") + 2)\n : item.name;\n const custom = options.toolRenderers?.[item.name] ?? options.toolRenderers?.[leaf];\n const outputPreview = item.outputPreview ?? null;\n // Custom renderers and presentations that parse their result need the\n // exact output first; a failed read falls back to the built-in row, which\n // says it is a preview.\n const exactFirst =\n outputPreview !== null &&\n (custom !== undefined || options.renderTool !== undefined || !presentsToolOutputPreview(item));\n if (exactFirst && outputPreview.load && outputPreview.state !== \"error\") {\n return <ToolOutputExactRow item={item} preview={outputPreview} compact={compact} />;\n }\n if (!exactFirst) {\n for (const renderer of [custom, options.renderTool]) {\n if (!renderer) continue;\n const node = renderer({ item, presentation, compact });\n if (node != null) return <>{node}</>;\n }\n }\n return (\n <PresentedToolRow presentation={presentation} compact={compact} outputPreview={outputPreview} />\n );\n}\n\n/** A tool row reading its exact output before it renders. */\nfunction ToolOutputExactRow({\n item,\n preview,\n compact,\n}: {\n item: ToolCallItem;\n preview: NonNullable<ToolCallItem[\"outputPreview\"]>;\n compact: boolean;\n}) {\n const t = useOpenGeniText();\n const pending = preview.state === \"preview\";\n const load = preview.load;\n useEffect(() => {\n if (pending) load?.();\n }, [pending, load]);\n return (\n <ActivityDisclosure\n icon=\"wrench\"\n title={toolDisplayName(t, item.name)}\n preview={t(\"timeline.toolRenderers.loadingOutput\")}\n compact={compact}\n expandable={false}\n />\n );\n}\n\nfunction ReasoningRow({ item, compact }: { item: ReasoningItem; compact: boolean }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const options = useNativeActivityOptions();\n const plain = item.text\n .replace(/\\*\\*|__|`/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n const titleStyle = {\n ...fontStyle(theme, 500),\n fontSize: theme.size.base,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n };\n return (\n <ActivityDisclosure\n icon=\"brain\"\n iconTone=\"muted\"\n compact={compact}\n running={item.streaming}\n title={\n item.streaming ? (\n <ShimmerText style={titleStyle} numberOfLines={1}>\n {t(\"native.timeline.activity.thinking\")}\n </ShimmerText>\n ) : (\n <Text\n style={{\n ...fontStyle(theme, 400),\n fontSize: theme.size.base,\n lineHeight: 20,\n fontStyle: \"italic\",\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {t(\"native.timeline.activity.thought\")}\n </Text>\n )\n }\n accessibilityLabel={item.streaming ? m.thinking : m.thought}\n preview={plain || undefined}\n >\n <View testID={annotationSourceTestId(undefined)} collapsable={false}>\n {options.renderMarkdown ? (\n options.renderMarkdown(item.text, { tone: \"muted\", streaming: item.streaming })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.base,\n lineHeight: 24,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n )}\n </View>\n </ActivityDisclosure>\n );\n}\n\nfunction SandboxRow({ item, compact }: { item: SandboxItem; compact: boolean }) {\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n return (\n <ActivityDisclosure\n icon=\"square-terminal\"\n iconTone={\n item.status === \"failed\" ? \"failed\" : item.status === \"running\" ? \"running\" : \"muted\"\n }\n title={sandboxRowTitle(t, item, (name) => toolDisplayName(t, name))}\n running={item.status === \"running\"}\n failed={item.status === \"failed\"}\n cancelled={item.status === \"cancelled\"}\n compact={compact}\n preview={item.command ?? undefined}\n >\n {item.command ? <PayloadBlock label={m.command} value={item.command} /> : null}\n {item.output ? <PayloadBlock label={m.output} value={item.output} /> : null}\n </ActivityDisclosure>\n );\n}\n\nfunction StartupPhaseRow({\n item,\n compact,\n}: {\n item: Extract<ActivityItem, { kind: \"startup-phase\" }>;\n compact: boolean;\n}) {\n const m = useNativeTimelineMessages();\n const failed = item.status === \"failed\";\n const t = useOpenGeniText();\n const running = item.status === \"running\";\n const duration = startupDuration(item.durationMs);\n return (\n <ActivityDisclosure\n icon=\"bot\"\n iconTone={failed ? \"failed\" : running ? \"running\" : \"muted\"}\n title={\n item.blockedReason\n ? STARTUP_WAIT_TITLES(t)[item.blockedReason]\n : startupPhaseTitle(t, item.phase, item.status, item.outcome)\n }\n preview={item.phase === \"model_preparation\" ? m.startupDetail : undefined}\n running={running}\n failed={failed}\n cancelled={item.status === \"cancelled\"}\n chip={duration ? { tone: failed ? \"bad\" : \"muted\", text: duration } : undefined}\n expandable={false}\n compact={compact}\n />\n );\n}\n\nfunction WorkerRow({ item, compact }: { item: WorkerItem; compact: boolean }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const options = useNativeActivityOptions();\n const running = item.status === \"running\";\n const failed = item.status === \"failed\";\n const cancelled = item.status === \"cancelled\";\n const title = workerRowTitle(t, item);\n if (compact) {\n return (\n <ActivityDisclosure\n icon=\"bot\"\n title={title}\n preview={item.prompt}\n running={running}\n compact\n />\n );\n }\n const sessionId = item.workerSessionId;\n const deepLink = Boolean(sessionId) && Boolean(options.onOpenSession) && !failed && !cancelled;\n const titleStyle = {\n ...fontStyle(theme, 500),\n fontSize: theme.size.base,\n lineHeight: 20,\n color: failed ? theme.colors[\"status-failed\"] : theme.colors.fg,\n };\n const inner = (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n minHeight: ROW_MIN_HEIGHT,\n paddingHorizontal: 6,\n paddingVertical: 10,\n }}\n >\n <View style={{ width: 14 }} />\n <View style={{ marginTop: 3 }}>\n <Icon\n name=\"bot\"\n size={14}\n color={failed ? theme.colors[\"status-failed\"] : theme.colors.accent}\n />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <ShimmerText style={titleStyle} active={running}>\n {title}\n </ShimmerText>\n {item.prompt ? (\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.prompt}\n </Text>\n ) : null}\n {failed && item.failure ? (\n <View style={{ marginTop: 4 }}>\n <Text\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: theme.size.xs,\n color: theme.colors[\"status-failed\"],\n }}\n >\n {item.failure.code}\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.sm,\n color: theme.colors[\"status-failed\"],\n }}\n >\n {item.failure.message}\n </Text>\n </View>\n ) : null}\n </View>\n {failed ? (\n <Chip chip={{ tone: \"bad\", text: \"failed\" }} />\n ) : cancelled ? (\n <Chip chip={{ tone: \"interrupted\", text: \"interrupted\" }} />\n ) : deepLink ? (\n <Icon name=\"chevron-right\" size={14} color={theme.colors[\"fg-subtle\"]} />\n ) : null}\n </View>\n );\n if (deepLink && sessionId && options.onOpenSession) {\n const open = options.onOpenSession;\n return (\n <Pressable accessibilityRole=\"button\" onPress={() => open(sessionId)}>\n {inner}\n </Pressable>\n );\n }\n return inner;\n}\n\n/** Assistant commentary folded into the rail: quieter than an answer. */\nfunction ActivityNoteRow({ item }: { item: AgentMessageItem }) {\n const theme = useNativeTimelineTheme();\n const options = useNativeActivityOptions();\n if (!item.text.trim()) return null;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n paddingHorizontal: 6,\n paddingVertical: 6,\n }}\n >\n <View style={{ width: 14 }} />\n <View style={{ marginTop: 4 }}>\n <Icon name=\"message-square-text\" size={14} color={theme.colors[\"fg-subtle\"]} />\n </View>\n <View\n testID={annotationSourceTestId(item.annotationSource?.eventId)}\n collapsable={false}\n style={{ flex: 1, minWidth: 0 }}\n >\n {options.renderMarkdown ? (\n options.renderMarkdown(item.text, { tone: \"muted\", streaming: item.streaming })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n )}\n </View>\n </View>\n );\n}\n\n/** Renders one activity item — the native `renderActivity`. */\nexport function ActivityRow({ item, compact = false }: { item: ActivityItem; compact?: boolean }) {\n const m = useNativeTimelineMessages();\n switch (item.kind) {\n case \"tool-call\":\n return <ToolCallRow item={item} compact={compact} />;\n case \"reasoning\":\n return <ReasoningRow item={item} compact={compact} />;\n case \"sandbox\":\n return <SandboxRow item={item} compact={compact} />;\n case \"startup-phase\":\n return <StartupPhaseRow item={item} compact={compact} />;\n case \"worker\":\n return <WorkerRow item={item} compact={compact} />;\n case \"agent-message\":\n return compact ? (\n <ActivityDisclosure\n icon=\"message-square-text\"\n title={item.text.replace(/\\s+/g, \" \").trim()}\n compact\n />\n ) : (\n <ActivityNoteRow item={item} />\n );\n case \"knowledge\":\n return (\n <ActivityDisclosure\n icon=\"file-search\"\n iconTone={item.status === \"failed\" ? \"failed\" : \"muted\"}\n title={\n item.outcome === \"pending\"\n ? m.proposedKnowledge\n : item.outcome === \"failed\"\n ? m.knowledgeSaveFailed\n : m.savedToKnowledge\n }\n preview={\n \"filename\" in item && typeof item.filename === \"string\" ? item.filename : undefined\n }\n expandable={false}\n compact={compact}\n />\n );\n case \"memory\":\n return (\n <ActivityDisclosure\n icon=\"brain-circuit\"\n title={m.savedToMemory}\n preview={\"text\" in item && typeof item.text === \"string\" ? item.text : undefined}\n expandable={false}\n compact={compact}\n />\n );\n case \"fleet-decision\":\n return (\n <ActivityDisclosure\n icon=\"messages-square\"\n title={m.workerDecision}\n expandable={false}\n compact={compact}\n />\n );\n default:\n return null;\n }\n}\n","import type { OpenGeniText } from \"@opengeni/react/messages\";\nimport { GENIE_PREPARING_PHRASES, GENIE_WAITING_PHRASES } from \"@opengeni/react/timeline-model\";\n\n/** What the composer's single trailing control does right now. */\nexport type ComposerTrailingMode = \"send\" | \"pause\" | \"resume\" | \"call\" | \"idle\";\n\n/**\n * Send wins whenever there is something to send (a message to a running agent\n * joins the queue); otherwise resume a paused workstream or pause a running\n * one; an otherwise empty composer offers a call when the host has one, and\n * else shows a quiet, disabled send.\n */\nexport function composerTrailingMode(input: {\n value: string;\n canSend: boolean;\n paused?: boolean | undefined;\n running?: boolean | undefined;\n canResume: boolean;\n canPause: boolean;\n canCall: boolean;\n}): ComposerTrailingMode {\n if (input.value.trim().length > 0 || input.canSend) return \"send\";\n if (input.paused && input.canResume) return \"resume\";\n if (input.running && input.canPause) return \"pause\";\n return input.canCall ? \"call\" : \"idle\";\n}\n\n/**\n * The other send choice beside Send while the agent works: Queue when Send\n * steers, Steer when Send queues. Offered exactly while Send takes its busy\n * path (`alternateSend` from the composer), when the trailing action is Send\n * and the host can deliver it.\n */\nexport function composerAlternateSend(input: {\n trailing: ComposerTrailingMode;\n alternateSend?: \"queue\" | \"steer\" | null | undefined;\n available: boolean;\n}): \"queue\" | \"steer\" | null {\n if (!input.available || input.trailing !== \"send\") return null;\n return input.alternateSend ?? null;\n}\n\n/**\n * The loading copy beside the orb: a host's own phrases replace both phases',\n * as the web timeline's loading `phrases` option does; otherwise the built-in\n * preparing or waiting copy.\n */\nexport function nativeLoadingPhrases(\n t: OpenGeniText,\n hostPhrases: readonly string[],\n phase: \"preparing\" | \"waiting\",\n): readonly string[] {\n if (hostPhrases.length > 0) return hostPhrases;\n return phase === \"waiting\" ? GENIE_WAITING_PHRASES(t) : GENIE_PREPARING_PHRASES(t);\n}\n","import type { ActivityItem, TurnOutcome } from \"@opengeni/react/session\";\nimport {\n createTurnSummaryContext,\n formatElapsed,\n resolveTurnSummaryFacets,\n rollingActivityItem,\n selectTurnSummaryFacets,\n toolDisplayName,\n turnSummaryFallbackLabel,\n type TurnSummaryFacetConfiguration,\n} from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { nativeLoadingPhrases } from \"./composer-state\";\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { Platform, Pressable, Text, View, type TextStyle } from \"react-native\";\nimport Animated, { FadeIn, FadeInDown, FadeOut, FadeOutUp } from \"react-native-reanimated\";\nimport { ActivityRow } from \"./activity\";\nimport { ThinkingOrb } from \"./thinking-orb\";\nimport { Icon } from \"./icon\";\nimport { PulseDot, ShimmerText, ROW_MIN_HEIGHT, useReleaseFollow } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/* ----------------------------------------------------------------------------\n Native TurnSummary / ActivityRail / RollingActivity — the web components of\n the same names (timeline/turn-summary.tsx, activity-rail.tsx,\n rolling-activity.tsx) in their rolling-turn configuration.\n -------------------------------------------------------------------------- */\n\n/** Native counterpart of the web `TurnSummaryStatus` with a renderable preview. */\nexport type NativeTurnStatus =\n | { kind: \"worked\"; durationMs?: number | undefined; label?: string | undefined }\n | {\n kind: \"working\" | \"waiting\";\n since?: string | undefined;\n label?: string | undefined;\n preview?: ReactNode;\n };\n\ntype FoldMemory = Map<string, \"open\" | \"closed\">;\nconst FoldMemoryContext = createContext<FoldMemory | null>(null);\n\n/**\n * A shrink-wrapped single-line summary. Android sizes it to the ellipsized line without\n * the \"…\" glyph's overhang, which then clips the last dot; a little trailing room keeps\n * the ellipsis whole.\n */\nconst TRUNCATED_TAIL: TextStyle =\n Platform.OS === \"android\" ? { flexShrink: 1, paddingRight: 2 } : { flexShrink: 1 };\nexport const FoldMemoryProvider = FoldMemoryContext.Provider;\n\n/**\n * An expanded outer turn header stays pinned to the top of the timeline while\n * its section scrolls (web: sticky inside the section). Each open section\n * reports its content-space frame and a renderer for the header row; the\n * timeline draws the pinned copy over the scroll view.\n */\nexport type StickyWorkHeader = {\n top: number;\n height: number;\n headerHeight: number;\n render: () => ReactNode;\n};\nexport type StickyWorkHeaderRegistry = {\n register: (key: string, entry: StickyWorkHeader | null) => void;\n /** Bring a section's top back into view (after collapsing from the pinned copy). */\n reveal: (top: number) => void;\n};\nconst StickyWorkHeaderContext = createContext<StickyWorkHeaderRegistry | null>(null);\nexport const StickyWorkHeaderProvider = StickyWorkHeaderContext.Provider;\n\nexport function useLiveNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (!active) return;\n const timer = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(timer);\n }, [active]);\n return now;\n}\n\nfunction LiveElapsed({ since, style }: { since: string; style: TextStyle }) {\n const t = useOpenGeniText();\n const startedAt = Date.parse(since);\n const now = useLiveNow(true);\n if (!Number.isFinite(startedAt)) return null;\n return (\n <Text\n style={[style, { fontVariant: [\"tabular-nums\"] }]}\n >{` · ${formatElapsed(t, Math.max(0, now - startedAt))}`}</Text>\n );\n}\n\nexport interface TurnSummaryProps {\n items: ActivityItem[];\n outcome?: TurnOutcome | undefined;\n failureText?: string | undefined;\n durationMs?: number | undefined;\n defaultOpen?: boolean | undefined;\n liveHeader?: ReactNode;\n bare?: boolean | undefined;\n facets?: TurnSummaryFacetConfiguration | undefined;\n foldKey?: string | undefined;\n contextCompactionCount?: number | undefined;\n status?: NativeTurnStatus | undefined;\n /** The turn has steps that are not loaded yet (opening the row reads them). */\n unloadedSteps?: boolean | undefined;\n /**\n * Reports the disclosure's open state: once on mount when it starts open,\n * then on every change, in the same update as the change itself.\n */\n onOpenStateChange?: ((open: boolean) => void) | undefined;\n children: ReactNode;\n}\n\nexport function TurnSummary({\n items,\n outcome,\n failureText,\n durationMs,\n defaultOpen,\n liveHeader,\n bare,\n facets: facetConfiguration,\n foldKey,\n contextCompactionCount,\n status,\n unloadedSteps,\n onOpenStateChange,\n children,\n}: TurnSummaryProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const foldMemory = useContext(FoldMemoryContext);\n const registerSticky = useContext(StickyWorkHeaderContext);\n const releaseFollow = useReleaseFollow();\n const frame = useRef<{ top: number; height: number; headerHeight: number }>({\n top: 0,\n height: 0,\n headerHeight: 0,\n });\n const remembered = foldKey !== undefined ? foldMemory?.get(foldKey) : undefined;\n const [open, setOpen] = useState(\n remembered === \"closed\" ? false : remembered === \"open\" ? true : (defaultOpen ?? false),\n );\n const readerOwnsOpen = useRef(remembered !== undefined);\n const reportOpen = useRef(onOpenStateChange);\n reportOpen.current = onOpenStateChange;\n const openRef = useRef(open);\n const changeOpen = (next: boolean) => {\n if (openRef.current === next) return;\n openRef.current = next;\n setOpen(next);\n reportOpen.current?.(next);\n };\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- report the starting state once\n useEffect(() => {\n if (openRef.current) reportOpen.current?.(true);\n }, []);\n useEffect(() => {\n if (status && defaultOpen && remembered === undefined && !readerOwnsOpen.current)\n changeOpen(true);\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- changeOpen only touches refs and state\n }, [status, defaultOpen, remembered]);\n const toggle = (next: boolean) => {\n releaseFollow();\n readerOwnsOpen.current = true;\n if (foldKey !== undefined) foldMemory?.set(foldKey, next ? \"open\" : \"closed\");\n changeOpen(next);\n };\n const context = useMemo(\n () =>\n createTurnSummaryContext(\n t,\n items,\n outcome,\n failureText,\n durationMs,\n contextCompactionCount ?? 0,\n ),\n [t, items, outcome, failureText, durationMs, contextCompactionCount],\n );\n const definitions = useMemo(\n () => resolveTurnSummaryFacets(facetConfiguration),\n [facetConfiguration],\n );\n const facets = useMemo(\n () => selectTurnSummaryFacets(definitions, context, status?.kind),\n [definitions, context, status?.kind],\n );\n const liveShell = outcome === undefined && open && !bare;\n const text: TextStyle = {\n ...fontStyle(theme),\n fontSize: bare ? theme.size.sm : theme.size.base,\n lineHeight: 20,\n color: liveShell && !status ? theme.colors[\"fg-subtle\"] : theme.colors[\"fg-muted\"],\n };\n const showMarker = !(\n status ||\n outcome === \"complete\" ||\n (!outcome && (liveHeader || context.settled))\n );\n const facetText = facets\n .map(({ result }) =>\n typeof result.content === \"string\" || typeof result.content === \"number\"\n ? String(result.content)\n : \"\",\n )\n .filter(Boolean);\n\n let statusNode: ReactNode = null;\n let hasStatusText = false;\n if (status?.kind === \"worked\") {\n if (\n status.durationMs !== undefined &&\n Number.isFinite(status.durationMs) &&\n status.durationMs >= 1000\n ) {\n hasStatusText = true;\n statusNode = (\n <Text\n style={text}\n >{`${status.label ?? m.workedFor} ${formatElapsed(t, status.durationMs)}`}</Text>\n );\n }\n } else if (status) {\n hasStatusText = true;\n const label = status.label ?? (status.kind === \"working\" ? m.working : m.waiting);\n statusNode = (\n <>\n <ShimmerText style={text} active={status.kind === \"working\"}>\n {label}\n </ShimmerText>\n {status.since ? <LiveElapsed since={status.since} style={text} /> : null}\n </>\n );\n }\n const showLive = Boolean(liveHeader) && !open && !status;\n const tail = showLive\n ? \"\"\n : !hasStatusText && facetText.length === 0 && outcome !== \"failed\" && outcome !== \"cancelled\"\n ? // Steps are not counted; an otherwise empty row still names what\n // opening it reveals.\n turnSummaryFallbackLabel(t, items, unloadedSteps)\n : facetText\n .map((value, index) => (index > 0 || hasStatusText ? ` · ${value}` : value))\n .join(\"\");\n\n const renderHeader = (pinned: boolean) => (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => (pinned ? collapseFromPin() : toggle(!open))}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n minHeight: ROW_MIN_HEIGHT,\n paddingVertical: 10,\n borderRadius: theme.radius.sm,\n // Web `-mx-2 px-2 w-full`: shifted left 8 with the same width.\n ...(bare\n ? { gap: 8, paddingHorizontal: 6 }\n : { gap: 10, paddingHorizontal: 8, marginLeft: -8, marginRight: 8 }),\n backgroundColor: pressed\n ? theme.colors.hover\n : !bare && open\n ? theme.colors.bg\n : \"transparent\",\n })}\n >\n <View style={{ transform: [{ rotate: open ? \"90deg\" : \"0deg\" }] }}>\n <Icon name=\"chevron-right\" size={14} color={theme.colors[\"fg-subtle\"]} />\n </View>\n {showMarker ? (\n <View\n style={{\n width: bare ? 14 : 20,\n height: bare ? 14 : 20,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {outcome === \"failed\" ? (\n <Icon name=\"triangle-alert\" size={12} color={theme.colors[\"status-failed\"]} />\n ) : outcome === \"cancelled\" ? (\n <Icon name=\"circle-slash\" size={12} color={theme.colors[\"fg-subtle\"]} />\n ) : (\n <PulseDot color={theme.colors[\"fg-subtle\"]} />\n )}\n </View>\n ) : null}\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n minWidth: 0,\n ...(status?.kind === \"worked\" ? { flexShrink: 1 } : { flex: 1 }),\n }}\n >\n {statusNode}\n {showLive ? (\n <View style={{ flex: 1, minWidth: 0 }}>{liveHeader}</View>\n ) : (\n <Text style={[text, TRUNCATED_TAIL]} numberOfLines={1}>\n {tail}\n {outcome === \"failed\" && failureText ? (\n <Text style={{ color: theme.colors[\"status-failed\"] }}>{` · ${failureText}`}</Text>\n ) : null}\n {outcome === \"cancelled\" ? (\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{\" · interrupted\"}</Text>\n ) : null}\n </Text>\n )}\n </View>\n {status?.kind === \"worked\" ? (\n <View\n style={{\n marginLeft: 4,\n height: 1,\n flex: 1,\n minWidth: 0,\n backgroundColor: theme.colors.border,\n }}\n />\n ) : null}\n {status && status.kind !== \"worked\" && (contextCompactionCount ?? 0) > 0 ? (\n <Icon name=\"shrink\" size={14} color={theme.colors[\"fg-muted\"]} />\n ) : null}\n </Pressable>\n );\n const sticky = !bare && open && foldKey !== undefined && registerSticky !== null;\n const collapseFromPin = () => {\n toggle(false);\n registerSticky?.reveal(frame.current.top);\n };\n const report = () => {\n if (!sticky || !registerSticky || foldKey === undefined) return;\n registerSticky.register(foldKey, { ...frame.current, render: () => renderHeader(true) });\n };\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- re-report when the row content changes\n useEffect(() => {\n if (!sticky) {\n if (registerSticky && foldKey !== undefined) registerSticky.register(foldKey, null);\n return;\n }\n report();\n return () => registerSticky?.register(foldKey!, null);\n });\n\n return (\n <View\n onLayout={(event) => {\n const { y, height } = event.nativeEvent.layout;\n frame.current = { ...frame.current, top: y, height };\n report();\n }}\n >\n <View\n onLayout={(event) => {\n frame.current = { ...frame.current, headerHeight: event.nativeEvent.layout.height };\n report();\n }}\n >\n {renderHeader(false)}\n </View>\n {status && status.kind !== \"worked\" && !open && status.preview ? (\n <Pressable\n onPress={() => toggle(true)}\n style={{ paddingBottom: 4, paddingLeft: 24, minWidth: 0 }}\n >\n {status.preview}\n </Pressable>\n ) : null}\n {open ? (\n <Animated.View\n entering={FadeIn.duration(160)}\n style={bare ? { paddingTop: 4, paddingLeft: 20 } : { paddingTop: 8 }}\n >\n {children}\n </Animated.View>\n ) : null}\n </View>\n );\n}\n\n/** The stable left rule under a turn/activity body (web TurnRailFrame). */\nexport function TurnRailFrame({\n children,\n compact = false,\n}: {\n children: ReactNode;\n compact?: boolean;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <View\n style={{\n borderLeftWidth: 2,\n borderLeftColor: theme.colors.border,\n paddingLeft: 12,\n gap: compact ? 2 : 16,\n }}\n >\n {children}\n </View>\n );\n}\n\nfunction familyOf(item: ActivityItem): string {\n if (item.kind === \"tool-call\") return `tool:${item.name}`;\n return item.kind;\n}\n\n/** The native ActivityRail (bare): tight same-family rows, breathing room between families. */\nexport function ActivityRail({\n items,\n startupActive,\n renderPreparing,\n}: {\n items: ActivityItem[];\n startupActive?: boolean | undefined;\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n}) {\n const phases = items.filter((item) => item.kind === \"startup-phase\");\n const hasWork = items.some(\n (item) =>\n item.kind !== \"startup-phase\" && (item.kind !== \"reasoning\" || item.text.trim().length > 0),\n );\n const interrupted = phases.some(\n (item) => item.status === \"failed\" || item.status === \"cancelled\",\n );\n const providerResponded = phases.some(\n (item) => item.phase === \"provider_first_byte\" && item.status === \"complete\",\n );\n const responsePending = phases.some((item) => item.phase === \"provider_first_byte\");\n const loading =\n !hasWork &&\n !interrupted &&\n (startupActive ?? (!providerResponded && phases.some((item) => item.status === \"running\")));\n const visibleItems = items.filter((item) =>\n item.kind === \"startup-phase\"\n ? item.status === \"failed\" || item.status === \"cancelled\"\n : item.kind !== \"reasoning\" || item.text.trim().length > 0,\n );\n const startedAt = phases.reduce(\n (first, item) => (item.startedAt < first ? item.startedAt : first),\n phases[0]?.startedAt ?? \"\",\n );\n return (\n <View style={{ gap: 2 }}>\n {loading ? (\n <Animated.View entering={FadeIn.duration(160)} exiting={FadeOut.duration(160)}>\n <PreparingState\n startedAt={startedAt}\n phase={responsePending ? \"waiting\" : \"preparing\"}\n render={renderPreparing}\n />\n </Animated.View>\n ) : null}\n {visibleItems.map((item, index) => {\n const newFamily = index > 0 && familyOf(item) !== familyOf(visibleItems[index - 1]!);\n return (\n <View key={item.id} style={newFamily ? { marginTop: 12 } : undefined}>\n <ActivityRow item={item} />\n </View>\n );\n })}\n </View>\n );\n}\n\nexport interface PreparingProps {\n startedAt: string;\n phase: \"preparing\" | \"waiting\";\n phrase: string;\n slow: boolean;\n}\n\n/** The web GenieLoading: a visual (orb by default; hosts supply a character) + rotating copy. */\nexport function PreparingState({\n startedAt,\n phase,\n render,\n}: {\n startedAt: string;\n phase: \"preparing\" | \"waiting\";\n render?: ((props: PreparingProps) => ReactNode) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const phrases = useMemo(\n () => nativeLoadingPhrases(t, m.loadingPhrases, phase),\n [t, m.loadingPhrases, phase],\n );\n const [index, setIndex] = useState(() => Math.floor(Math.random() * phrases.length));\n const [slow, setSlow] = useState(false);\n useEffect(() => {\n const update = () => {\n setSlow(Date.now() - Date.parse(startedAt) >= 30_000);\n setIndex(Math.floor(Math.random() * phrases.length));\n };\n const timer = setInterval(update, 5_000);\n return () => clearInterval(timer);\n }, [startedAt, phrases]);\n const phrase = slow\n ? phase === \"waiting\"\n ? m.stillWaiting\n : m.longerThanUsual\n : (phrases[index % phrases.length] ?? \"\");\n if (render) return <>{render({ startedAt, phase, phrase, slow })}</>;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 14,\n minHeight: 88,\n paddingVertical: 12,\n }}\n >\n <ThinkingOrb />\n <Animated.Text\n key={phrase}\n entering={FadeIn.duration(650)}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {phrase}\n </Animated.Text>\n </View>\n );\n}\n\n/** One stable 24pt viewport; updates replace its content without moving the conversation. */\nexport function RollingActivity({\n items,\n previousItem,\n showCount = true,\n}: {\n items: ActivityItem[];\n previousItem?: ActivityItem | undefined;\n showCount?: boolean;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const selected = rollingActivityItem(items, previousItem, mounted);\n if (!selected) return null;\n const { item, earlierCount } = selected;\n return (\n <View\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 12, minWidth: 0, flex: 1 }}\n accessibilityLabel={\n item.kind === \"tool-call\"\n ? toolDisplayName(t, item.name, item.display)\n : item.kind === \"reasoning\"\n ? m.thinking\n : m.working\n }\n >\n <View style={{ flex: 1, minWidth: 0, height: 24, overflow: \"hidden\" }}>\n <Animated.View\n key={item.id}\n entering={FadeInDown.duration(400)}\n exiting={FadeOutUp.duration(400)}\n style={{\n position: \"absolute\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n flexDirection: \"row\",\n alignItems: \"center\",\n }}\n >\n <ActivityRow item={item} compact />\n </Animated.View>\n </View>\n {showCount && earlierCount > 0 ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {`+${earlierCount} earlier`}\n </Text>\n ) : null}\n </View>\n );\n}\n","import type { TurnStepsItem } from \"@opengeni/react/session\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useEffect, useState } from \"react\";\nimport { ActivityIndicator, Pressable, Text, View } from \"react-native\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/**\n * Loads an opened turn's steps (web TurnStepsLoader). The fold mounts its body\n * only while open, so steps are read when a reader opens the turn. A row that\n * opens by itself (`autoLoad={false}`) waits for the reader to ask.\n */\nexport function TurnStepsLoader({\n steps,\n autoLoad = true,\n}: {\n steps: TurnStepsItem;\n autoLoad?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const { state, load, retain } = steps;\n const [requested, setRequested] = useState(autoLoad);\n // An open row keeps its steps (live ones too) while mounted; only the\n // read waits for the reader.\n useEffect(() => retain(), [retain]);\n useEffect(() => {\n if (requested && state === \"idle\") load();\n }, [requested, state, load]);\n if (state === \"complete\") return null;\n const text = {\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-subtle\"],\n };\n if (state === \"partial\" || state === \"error\" || (state === \"idle\" && !requested)) {\n const label =\n state === \"idle\"\n ? t(\"timeline.turnSteps.showSteps\")\n : state === \"partial\"\n ? t(\"timeline.turnSteps.showEarlierSteps\")\n : `${t(\"timeline.turnSteps.couldNotLoadSteps\")} ${t(\"timeline.turnSteps.retry\")}`;\n return (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n setRequested(true);\n if (state !== \"idle\") load();\n }}\n style={({ pressed }) => ({\n minHeight: 44,\n justifyContent: \"center\",\n opacity: pressed ? 0.7 : 1,\n })}\n >\n <Text style={text}>{label}</Text>\n </Pressable>\n );\n }\n return (\n <View\n accessibilityRole=\"progressbar\"\n style={{ minHeight: 44, flexDirection: \"row\", alignItems: \"center\", gap: 8 }}\n >\n <ActivityIndicator size=\"small\" color={theme.colors[\"fg-subtle\"]} />\n <Text style={text}>{t(\"timeline.turnSteps.loadingSteps\")}</Text>\n </View>\n );\n}\n","import type { TimelineGroup } from \"@opengeni/react/session\";\n\n/**\n * Live progress notes. While a turn runs, each progress note reads above its\n * work row and is also listed inside it (the projection's `liveNoteIds`).\n * While that work row is open, the copies above fold away, so every note\n * shows once (the web timeline's liveNoteFolds).\n */\nexport interface LiveNotes {\n /** Each live work row's progress note ids. */\n byWork: ReadonlyMap<string, readonly string[]>;\n /** Every live progress note id. */\n notes: ReadonlySet<string>;\n}\n\nexport function collectLiveNotes(groups: readonly TimelineGroup[]): LiveNotes {\n const byWork = new Map<string, readonly string[]>();\n const notes = new Set<string>();\n for (const group of groups) {\n if (group.kind !== \"activity\" || !group.work?.liveNoteIds?.length) continue;\n byWork.set(group.id, group.work.liveNoteIds);\n for (const id of group.work.liveNoteIds) notes.add(id);\n }\n return { byWork, notes };\n}\n\n/** The note rows to fold: those whose work row is open. */\nexport function foldedLiveNotes(\n liveNotes: LiveNotes,\n openWork: ReadonlySet<string>,\n): ReadonlySet<string> {\n const folded = new Set<string>();\n for (const [workId, ids] of liveNotes.byWork) {\n if (!openWork.has(workId)) continue;\n for (const id of ids) folded.add(id);\n }\n return folded;\n}\n\n/**\n * The scroll correction for folding (open) or restoring (closed) a work row's\n * notes, which sit above it: each measured note row plus the gap after it.\n * Moving the offset by this keeps the toggled row where the reader saw it.\n */\nexport function liveFoldShift(\n liveNotes: LiveNotes,\n workId: string,\n open: boolean,\n heights: ReadonlyMap<string, number>,\n rowGap: number,\n): number {\n const height = (liveNotes.byWork.get(workId) ?? []).reduce((total, id) => {\n const row = heights.get(id);\n return row === undefined ? total : total + row + rowGap;\n }, 0);\n return height === 0 ? 0 : open ? -height : height;\n}\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n AccessibilityInfo,\n Animated,\n Easing,\n KeyboardAvoidingView,\n Modal,\n PanResponder,\n Pressable,\n View,\n useWindowDimensions,\n} from \"react-native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { useNativeTimelineTheme } from \"./theme\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\n\n/**\n * A content-sized bottom sheet: dimmed backdrop, grabber, drag or tap outside\n * to dismiss, keyboard-aware and safe-area padded. The native counterpart of\n * the web's anchored menus at phone width.\n */\nexport function BottomSheet(props: {\n open: boolean;\n onClose: () => void;\n accessibilityLabel: string;\n /** Cap as a fraction of the window height (default 0.85). */\n maxHeightRatio?: number | undefined;\n children: ReactNode;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const insets = useSafeAreaInsets();\n const { height } = useWindowDimensions();\n const [mounted, setMounted] = useState(props.open);\n const progress = useRef(new Animated.Value(0)).current;\n const drag = useRef(new Animated.Value(0)).current;\n const onClose = useRef(props.onClose);\n onClose.current = props.onClose;\n\n useEffect(() => {\n let cancelled = false;\n if (props.open) {\n setMounted(true);\n drag.setValue(0);\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (cancelled) return;\n Animated.timing(progress, {\n toValue: 1,\n duration: reduce ? 0 : 260,\n easing: Easing.bezier(0.22, 1, 0.36, 1),\n useNativeDriver: true,\n }).start();\n });\n } else if (mounted) {\n Animated.timing(progress, {\n toValue: 0,\n duration: 200,\n easing: Easing.in(Easing.quad),\n useNativeDriver: true,\n }).start(({ finished }) => {\n if (finished && !cancelled) setMounted(false);\n });\n }\n return () => {\n cancelled = true;\n };\n }, [drag, mounted, progress, props.open]);\n\n const pan = useRef(\n PanResponder.create({\n onMoveShouldSetPanResponder: (_event, gesture) =>\n gesture.dy > 6 && Math.abs(gesture.dy) > Math.abs(gesture.dx),\n onPanResponderMove: (_event, gesture) => drag.setValue(Math.max(0, gesture.dy)),\n onPanResponderRelease: (_event, gesture) => {\n if (gesture.dy > 90 || gesture.vy > 0.9) onClose.current();\n else Animated.spring(drag, { toValue: 0, useNativeDriver: true, bounciness: 0 }).start();\n },\n onPanResponderTerminate: () =>\n Animated.spring(drag, { toValue: 0, useNativeDriver: true, bounciness: 0 }).start(),\n }),\n ).current;\n\n if (!mounted) return null;\n const translateY = Animated.add(\n progress.interpolate({ inputRange: [0, 1], outputRange: [height, 0] }),\n drag,\n );\n return (\n <Modal\n visible\n transparent\n animationType=\"none\"\n statusBarTranslucent\n onRequestClose={props.onClose}\n >\n <KeyboardAvoidingView\n // Edge-to-edge Android doesn't resize a modal's window for the\n // keyboard either, so the sheet lifts itself on both platforms.\n behavior=\"padding\"\n style={{ flex: 1, justifyContent: \"flex-end\" }}\n >\n <Animated.View\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.4)\",\n opacity: progress,\n }}\n >\n <Pressable\n style={{ flex: 1 }}\n onPress={props.onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.sheet.close\")}\n />\n </Animated.View>\n <Animated.View\n accessibilityViewIsModal\n accessibilityLabel={props.accessibilityLabel}\n style={{\n maxHeight: height * (props.maxHeightRatio ?? 0.85),\n backgroundColor: c.bg,\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n paddingBottom: Math.max(insets.bottom, 12),\n transform: [{ translateY }],\n shadowColor: \"#000\",\n shadowOpacity: 0.12,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: -2 },\n elevation: 16,\n }}\n >\n <View\n {...pan.panHandlers}\n style={{ alignItems: \"center\", paddingTop: 8, paddingBottom: 4 }}\n >\n <View\n style={{\n width: 36,\n height: 5,\n borderRadius: 3,\n backgroundColor: c[\"border-strong\"] ?? c.border,\n }}\n />\n </View>\n {props.children}\n </Animated.View>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n","import type {\n DraftTimelineAnnotation,\n TimelineAnnotation,\n TimelineAnnotationSource,\n} from \"@opengeni/sdk\";\nimport {\n ANNOTATION_MAX_NOTE_LENGTH,\n annotationDisplayOrdinal,\n annotationHasNote,\n annotationNoteNeedsDisclosure,\n truncateAnnotationQuote,\n} from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n Animated,\n Easing,\n Pressable,\n ScrollView,\n Text,\n TextInput,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport { Icon } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport { BottomSheet } from \"./sheet\";\nimport {\n annotationSourceTestId,\n measureQuoteAnchors,\n type QuoteAnchor,\n type QuoteAnchorQuery,\n type QuoteBox,\n} from \"./text-selection\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n Timeline annotations at phone width: the quote cards in sent messages, the\n composer and queue chips, the review sheet where notes are written (the\n web's annotations dialog) and the numbered badge where a draft quote ends.\n -------------------------------------------------------------------------- */\n\nexport type NativeAnnotationLike = DraftTimelineAnnotation | TimelineAnnotation;\n\n/**\n * Reveals a quote in the timeline: scrolls its words into view and flashes\n * them (the whole message when they can't be located). False when the\n * message is not loaded.\n */\nexport type AnnotationReveal = (\n source: TimelineAnnotationSource,\n quote?: QuoteAnchorQuery,\n) => boolean;\n\n/** The text a revealed quote is found by. */\nexport function annotationQuoteQuery(annotation: NativeAnnotationLike): QuoteAnchorQuery {\n return {\n quote: annotation.quote,\n before: annotation.source.contextBefore,\n after: annotation.source.contextAfter,\n };\n}\n\ntype DraftMarker = {\n id: string;\n ordinal: number;\n incomplete: boolean;\n quote: string;\n before: string;\n after: string;\n};\n\nexport type AnnotationSourceNode = ComponentRef<typeof View>;\n\ntype AnnotationSourcesValue = {\n register: (sourceKey: string, node: AnnotationSourceNode | null) => void;\n flash: AnnotationFlash | null;\n drafts: ReadonlyMap<string, readonly DraftMarker[]>;\n onSelectDraft?: ((id: string) => void) | undefined;\n};\n\n/** A reveal's highlight: one message, and the quote in it when known. */\nexport type AnnotationFlash = { sourceKey: string; token: number; quote?: QuoteAnchorQuery };\n\nexport const AnnotationSourcesContext = createContext<AnnotationSourcesValue | null>(null);\n\n/** Draft annotations grouped by the message they quote. */\nexport function draftMarkersBySource(\n annotations: readonly DraftTimelineAnnotation[] | undefined,\n): Map<string, DraftMarker[]> {\n const markers = new Map<string, DraftMarker[]>();\n (annotations ?? []).forEach((annotation, index) => {\n const list = markers.get(annotation.source.eventId) ?? [];\n list.push({\n id: annotation.id,\n ordinal: index + 1,\n incomplete: !annotationHasNote(annotation.note),\n quote: annotation.quote,\n before: annotation.source.contextBefore,\n after: annotation.source.contextAfter,\n });\n markers.set(annotation.source.eventId, list);\n });\n return markers;\n}\n\nfunction quotePreview(quote: string): string {\n const trimmed = quote.trim();\n return trimmed.includes(\"\\n\") ? trimmed : trimmed.replace(/\\s+/g, \" \");\n}\n\n/**\n * A message body that can be quoted: marks its text for native selection\n * (Add note), shows a numbered badge where each draft quote ends (the web's\n * annotation markers) and briefly highlights when a quote of it is revealed.\n */\nexport function AnnotationSourceView({\n sourceKey,\n children,\n style,\n}: {\n sourceKey: string | undefined;\n children: ReactNode;\n style?: StyleProp<ViewStyle>;\n}) {\n const theme = useNativeTimelineTheme();\n const sources = useContext(AnnotationSourcesContext);\n const glow = useRef(new Animated.Value(0)).current;\n const flash = sourceKey && sources?.flash?.sourceKey === sourceKey ? sources.flash : null;\n // The revealed quote's lines, or null to flash the whole message.\n const [flashBoxes, setFlashBoxes] = useState<QuoteBox[] | null>(null);\n useEffect(() => {\n if (!flash || !sourceKey) return;\n let cancelled = false;\n const start = (boxes: QuoteBox[] | null) => {\n if (cancelled) return;\n setFlashBoxes(boxes);\n glow.setValue(1);\n Animated.timing(glow, {\n toValue: 0,\n duration: boxes ? 1800 : 1400,\n delay: 300,\n easing: Easing.out(Easing.quad),\n useNativeDriver: false,\n }).start();\n };\n if (!flash.quote) start(null);\n else\n void measureQuoteAnchors(sourceKey, [flash.quote]).then(([anchor]) =>\n start(anchor?.boxes.length ? anchor.boxes : null),\n );\n return () => {\n cancelled = true;\n };\n }, [flash, glow, sourceKey]);\n const register = sources?.register;\n const markers = sourceKey ? sources?.drafts.get(sourceKey) : undefined;\n const [anchors, setAnchors] = useState<{\n markers: readonly DraftMarker[];\n at: (QuoteAnchor | null)[];\n } | null>(null);\n const [size, setSize] = useState({ width: 0, height: 0 });\n const measure = useCallback(() => {\n if (!sourceKey || !markers?.length) return;\n const queries = markers.map(({ quote, before, after }) => ({ quote, before, after }));\n void measureQuoteAnchors(sourceKey, queries).then((at) => setAnchors({ markers, at }));\n }, [markers, sourceKey]);\n // Text lays out after the view; measure once it has drawn, and again when\n // the drafts or the width change.\n useEffect(() => {\n if (!markers?.length) {\n setAnchors(null);\n return;\n }\n const frame = requestAnimationFrame(measure);\n return () => cancelAnimationFrame(frame);\n }, [markers, measure, size.width, size.height]);\n return (\n <Animated.View\n ref={(node: AnnotationSourceNode | null) => {\n if (sourceKey && register) register(sourceKey, node);\n }}\n testID={annotationSourceTestId(sourceKey)}\n collapsable={false}\n onLayout={(event) => {\n const { width, height } = event.nativeEvent.layout;\n setSize((current) =>\n current.width === width && current.height === height ? current : { width, height },\n );\n }}\n style={[\n style,\n {\n borderRadius: theme.radius.md,\n backgroundColor: flashBoxes\n ? \"transparent\"\n : glow.interpolate({\n inputRange: [0, 1],\n outputRange: [withAlpha(theme.colors.fg, 0), withAlpha(theme.colors.fg, 0.08)],\n }),\n },\n ]}\n >\n {flashBoxes ? <QuoteFlash boxes={flashBoxes} glow={glow} /> : null}\n {markers?.length && anchors?.markers === markers ? (\n <QuoteHighlights anchors={anchors.at} />\n ) : null}\n {children}\n {markers?.length && anchors?.markers === markers ? (\n <QuoteBadges\n markers={markers}\n anchors={anchors.at}\n size={size}\n onSelect={sources?.onSelectDraft}\n />\n ) : null}\n </Animated.View>\n );\n}\n\nconst BADGE_SIZE = 15;\n\n/** A line box's identity: where it sits (two quotes never share a line box). */\nfunction boxKey(box: QuoteBox): string {\n return `${Math.round(box.x)}:${Math.round(box.y)}:${Math.round(box.width)}`;\n}\n\n/** A revealed quote's lines light up, then fade, under its text. */\nfunction QuoteFlash({ boxes, glow }: { boxes: readonly QuoteBox[]; glow: Animated.Value }) {\n const theme = useNativeTimelineTheme();\n const tint = withAlpha(theme.colors.accent, theme.scheme === \"dark\" ? 0.45 : 0.28);\n return (\n <>\n {boxes.map((box) => (\n <Animated.View\n key={boxKey(box)}\n pointerEvents=\"none\"\n style={{\n position: \"absolute\",\n left: box.x - 3,\n top: box.y - 2,\n width: box.width + 6,\n height: box.height + 4,\n borderRadius: 5,\n backgroundColor: tint,\n opacity: glow,\n }}\n />\n ))}\n </>\n );\n}\n\n/**\n * A soft tint with an accent underline behind each draft quote, so what is\n * quoted reads at a glance and never looks like an inline code span. Drawn\n * before the message, under its text.\n */\nfunction QuoteHighlights({ anchors }: { anchors: readonly (QuoteAnchor | null)[] }) {\n const theme = useNativeTimelineTheme();\n const dark = theme.scheme === \"dark\";\n const tint = withAlpha(theme.colors.accent, dark ? 0.16 : 0.08);\n const rule = withAlpha(theme.colors.accent, dark ? 0.7 : 0.55);\n return (\n <>\n {anchors.flatMap((anchor) =>\n (anchor?.boxes ?? []).map((box) => (\n <View\n key={boxKey(box)}\n pointerEvents=\"none\"\n style={{\n position: \"absolute\",\n left: box.x - 2,\n top: box.y - 1,\n width: box.width + 4,\n height: box.height + 2,\n borderTopLeftRadius: 3,\n borderTopRightRadius: 3,\n borderBottomWidth: 1.5,\n borderBottomColor: rule,\n backgroundColor: tint,\n }}\n />\n )),\n )}\n </>\n );\n}\n\n/**\n * Numbered badges at the top-right corner of each quote, mostly in the gap\n * above its line so they cover no text (the web's markers sit on the quote's\n * end the same way). A quote that cannot be located (text that changed, or\n * no native measuring) gets its badge at the end of the message instead.\n */\nfunction QuoteBadges({\n markers,\n anchors,\n size,\n onSelect,\n}: {\n markers: readonly DraftMarker[];\n anchors: readonly (QuoteAnchor | null)[];\n size: { width: number; height: number };\n onSelect?: ((id: string) => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n let unplaced = 0;\n return (\n <>\n {markers.map((marker, index) => {\n const anchor = anchors[index];\n // Unplaced badges line up along the message's bottom edge.\n const center = anchor\n ? { x: anchor.x + 2, y: anchor.top - 1 }\n : {\n x: size.width - BADGE_SIZE / 2 - unplaced++ * (BADGE_SIZE + 4),\n y: size.height - BADGE_SIZE / 2,\n };\n const left = Math.min(Math.max(center.x - BADGE_SIZE / 2, 0), size.width - BADGE_SIZE);\n return (\n <Pressable\n key={marker.id}\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotationMarkers.annotationOrdinal\", {\n ordinal: marker.ordinal,\n })}\n hitSlop={14}\n disabled={!onSelect}\n onPress={() => onSelect?.(marker.id)}\n style={({ pressed }) => ({\n position: \"absolute\",\n left,\n top: center.y - BADGE_SIZE / 2,\n zIndex: marker.ordinal,\n minWidth: BADGE_SIZE,\n height: BADGE_SIZE,\n paddingHorizontal: 2,\n borderRadius: BADGE_SIZE / 2,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: c.accent,\n borderWidth: marker.incomplete ? 1 : 0,\n borderColor: withAlpha(c[\"accent-fg\"], 0.35),\n opacity: pressed ? 0.7 : 1,\n shadowColor: \"#000\",\n shadowOpacity: 0.12,\n shadowRadius: 2,\n shadowOffset: { width: 0, height: 1 },\n })}\n >\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: 10,\n lineHeight: 12,\n color: c[\"accent-fg\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {marker.ordinal}\n </Text>\n </Pressable>\n );\n })}\n </>\n );\n}\n\n/**\n * A quote's accent rule beside its content. `shrink` sizes the content to\n * itself (inside a bubble that wraps its content: a flex-basis-0 column there\n * is measured unwrapped and its wrapped lines spill out); otherwise it fills\n * the row.\n */\nfunction AccentRow({ children, shrink = false }: { children: ReactNode; shrink?: boolean }) {\n const theme = useNativeTimelineTheme();\n return (\n <View style={{ flexDirection: \"row\", gap: 10 }}>\n <View\n style={{\n width: 2,\n borderRadius: 1,\n backgroundColor: withAlpha(theme.colors.accent, 0.55),\n }}\n />\n <View style={shrink ? { flexShrink: 1, minWidth: 0 } : { flex: 1, minWidth: 0 }}>\n {children}\n </View>\n </View>\n );\n}\n\nfunction OrdinalLabel({ ordinal }: { ordinal: number }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n return (\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: theme.colors[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {t(\"timelineAnnotations.annotationOrdinal\", { ordinal })}\n </Text>\n );\n}\n\nfunction QuoteButton({\n annotation,\n onReveal,\n}: {\n annotation: NativeAnnotationLike;\n onReveal?: AnnotationReveal | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const [unavailable, setUnavailable] = useState(false);\n const text = (\n <Text\n numberOfLines={2}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {quotePreview(annotation.quote)}\n </Text>\n );\n if (!onReveal) return text;\n return (\n <View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\n \"timelineAnnotationChrome.viewSourcelabelSourceTruncateannotationquote\",\n {\n sourceLabel:\n annotation.source.label?.trim() ||\n (annotation.source.kind === \"user_message\"\n ? t(\"timelineAnnotationShared.yourMessage\")\n : annotation.source.kind === \"assistant_message\"\n ? t(\"timelineAnnotationShared.assistant\")\n : t(\"timelineAnnotationShared.toolOutput\")),\n truncateAnnotationQuote: truncateAnnotationQuote(annotation.quote, 88),\n },\n )}\n onPress={() =>\n setUnavailable(!onReveal(annotation.source, annotationQuoteQuery(annotation)))\n }\n style={({ pressed }) => ({ opacity: pressed ? 0.55 : 1, paddingVertical: 2 })}\n >\n {text}\n </Pressable>\n {unavailable ? (\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: theme.colors[\"status-waiting\"],\n }}\n >\n {t(\"timelineAnnotations.sourceIsOutsideTheLoaded\")}\n </Text>\n ) : null}\n </View>\n );\n}\n\nfunction NotePreview({ note, ordinal }: { note: string; ordinal: number }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const [expanded, setExpanded] = useState(false);\n if (!note) return null;\n const collapsible = annotationNoteNeedsDisclosure(note);\n return (\n <View style={{ marginTop: 2 }}>\n <Text\n selectable\n numberOfLines={expanded ? undefined : 4}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors.fg,\n }}\n >\n {note}\n </Text>\n {collapsible ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n expanded\n ? t(\"timelineAnnotationChrome.showLessAnnotationOrdinal\", { ordinal })\n : t(\"timelineAnnotationChrome.showMoreAnnotationOrdinal\", { ordinal })\n }\n hitSlop={8}\n onPress={() => setExpanded((current) => !current)}\n style={{ alignSelf: \"flex-start\", paddingVertical: 4 }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {expanded\n ? t(\"timelineAnnotationChrome.showLess\")\n : t(\"timelineAnnotationChrome.showMore\")}\n </Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\n/** The quotes and notes a sent message carries, inside its bubble. */\nexport function SentAnnotationCards({\n annotations,\n onReveal,\n}: {\n annotations: readonly NativeAnnotationLike[];\n onReveal?: AnnotationReveal | undefined;\n}) {\n if (annotations.length === 0) return null;\n return (\n <View style={{ gap: 10 }}>\n {annotations.map((annotation, index) => {\n const ordinal = annotationDisplayOrdinal(annotation, index);\n return (\n <AccentRow key={annotation.id} shrink>\n <OrdinalLabel ordinal={ordinal} />\n <QuoteButton annotation={annotation} onReveal={onReveal} />\n <NotePreview note={annotation.note} ordinal={ordinal} />\n </AccentRow>\n );\n })}\n </View>\n );\n}\n\n/**\n * The \"N annotations\" chip: in the composer (editable, with remove all) or on\n * a queued message (compact). Tinted while a quote still needs its note.\n */\nexport function AnnotationsChip({\n annotations,\n onPress,\n onClear,\n compact = false,\n}: {\n annotations: readonly NativeAnnotationLike[];\n onPress: () => void;\n onClear?: (() => void) | undefined;\n compact?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n if (annotations.length === 0) return null;\n const countLabel = t(\"counts.annotations\", { count: annotations.length });\n const incomplete =\n onClear !== undefined && annotations.some((item) => !annotationHasNote(item.note));\n const height = compact ? 26 : 32;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n alignSelf: \"flex-start\",\n height,\n borderRadius: height / 2,\n borderWidth: 1,\n borderColor: incomplete ? withAlpha(c.accent, 0.45) : c.border,\n backgroundColor: incomplete ? c[\"accent-soft\"] : c[\"surface-1\"],\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotations.reviewCountlabel\", { countLabel })}\n hitSlop={{ top: (44 - height) / 2, bottom: (44 - height) / 2 }}\n onPress={onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n height,\n paddingLeft: compact ? 8 : 10,\n paddingRight: onClear ? 2 : compact ? 8 : 12,\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <Icon name=\"quote\" size={compact ? 11 : 13} color={c.accent} />\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: compact ? theme.size.xs : theme.size.sm,\n color: c[\"fg-muted\"],\n }}\n >\n {countLabel}\n </Text>\n </Pressable>\n {onClear ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotations.removeAllAnnotations\")}\n hitSlop={{ top: 6, bottom: 6, right: 6 }}\n onPress={onClear}\n style={({ pressed }) => ({\n width: height,\n height,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: pressed ? 0.5 : 1,\n })}\n >\n <Icon name=\"x\" size={13} color={c[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\ntype NoteInput = ComponentRef<typeof TextInput>;\n\n/**\n * Every quote with its note, as the web's annotations dialog: editable in the\n * composer (write, remove; Return moves to the next empty note, then back to\n * the message), read-only for a queued message. A quote reveals its message.\n */\nexport function AnnotationsSheet({\n open,\n onClose,\n annotations,\n editable,\n focusId,\n onFocusConsumed,\n onUpdate,\n onRemove,\n onReveal,\n onCommit,\n}: {\n open: boolean;\n onClose: () => void;\n annotations: readonly NativeAnnotationLike[];\n editable: boolean;\n focusId?: string | null | undefined;\n onFocusConsumed?: (() => void) | undefined;\n onUpdate?: ((id: string, note: string) => void) | undefined;\n onRemove?: ((id: string) => void) | undefined;\n onReveal?: AnnotationReveal | undefined;\n /** Every note is written: back to the message. */\n onCommit?: (() => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const inputs = useRef(new Map<string, NoteInput>());\n const scroll = useRef<ComponentRef<typeof ScrollView>>(null);\n const rowTops = useRef(new Map<string, number>());\n const empty = annotations.length === 0;\n\n // Removing the last quote leaves nothing to review.\n useEffect(() => {\n if (open && empty) onClose();\n }, [empty, onClose, open]);\n\n const focusNote = (id: string) => {\n const top = rowTops.current.get(id);\n if (top !== undefined) scroll.current?.scrollTo({ y: Math.max(0, top - 8), animated: true });\n inputs.current.get(id)?.focus();\n };\n\n // A new quote (or a send with an empty note) opens on its note. The sheet\n // slides in first; focusing during the slide drops the keyboard request.\n useEffect(() => {\n if (!open || !focusId || !editable) return;\n const timer = setTimeout(() => {\n focusNote(focusId);\n onFocusConsumed?.();\n }, 320);\n return () => clearTimeout(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editable, focusId, open]);\n\n const commit = (fromId: string) => {\n const incomplete = annotations.filter((item) => !annotationHasNote(item.note));\n if (incomplete.length === 0) {\n onCommit?.();\n return;\n }\n const fromIndex = annotations.findIndex((item) => item.id === fromId);\n const next = incomplete.find((item) => annotations.indexOf(item) > fromIndex) ?? incomplete[0]!;\n focusNote(next.id);\n };\n\n const incompleteCount = annotations.filter((item) => !annotationHasNote(item.note)).length;\n const countLabel = t(\"counts.annotations\", { count: annotations.length });\n return (\n <BottomSheet\n open={open && !empty}\n onClose={onClose}\n maxHeightRatio={0.8}\n accessibilityLabel={\n editable\n ? t(\"timelineAnnotationsDialog.editQuotedNotes\")\n : t(\"timelineAnnotationsDialog.quotedNotes\")\n }\n >\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingLeft: 20,\n paddingRight: 8,\n paddingBottom: 4,\n }}\n >\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: theme.size.md, color: c.fg }}\n >\n {countLabel}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n if (editable && incompleteCount === 0 && onCommit) onCommit();\n else onClose();\n }}\n style={({ pressed }) => ({\n height: 44,\n paddingHorizontal: 12,\n justifyContent: \"center\",\n opacity: pressed ? 0.5 : 1,\n })}\n >\n <Text style={{ ...fontStyle(theme, 600), fontSize: theme.size.md, color: c.fg }}>\n {t(\"native.timeline.annotations.done\")}\n </Text>\n </Pressable>\n </View>\n <ScrollView\n ref={scroll}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={{ paddingHorizontal: 20, paddingTop: 8, paddingBottom: 12, gap: 18 }}\n style={{ flexGrow: 0 }}\n >\n {annotations.map((annotation, index) => {\n const ordinal = annotationDisplayOrdinal(annotation, index);\n const last = index === annotations.length - 1;\n const othersIncomplete = annotations.some(\n (item) => item.id !== annotation.id && !annotationHasNote(item.note),\n );\n return (\n <View\n key={annotation.id}\n onLayout={(event) => rowTops.current.set(annotation.id, event.nativeEvent.layout.y)}\n >\n <AccentRow>\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 4 }}>\n <View style={{ flex: 1, minWidth: 0 }}>\n <OrdinalLabel ordinal={ordinal} />\n <QuoteButton\n annotation={annotation}\n onReveal={\n onReveal\n ? (source, quote) => {\n const revealed = onReveal(source, quote);\n if (revealed) onClose();\n return revealed;\n }\n : undefined\n }\n />\n </View>\n {editable && onRemove ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotationsDialog.removeAnnotationOrdinal\", {\n ordinal,\n })}\n onPress={() => onRemove(annotation.id)}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n marginTop: -6,\n marginRight: -10,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: pressed ? 0.5 : 1,\n })}\n >\n <Icon name=\"x\" size={15} color={c[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n </View>\n {editable && onUpdate ? (\n <TextInput\n ref={(node) => {\n if (node) inputs.current.set(annotation.id, node);\n else inputs.current.delete(annotation.id);\n }}\n value={annotation.note}\n onChangeText={(note) => onUpdate(annotation.id, note)}\n placeholder={t(\"timelineAnnotationChrome.addANote\")}\n placeholderTextColor={c[\"fg-subtle\"]}\n accessibilityLabel={t(\"timelineAnnotationChrome.note\")}\n maxLength={ANNOTATION_MAX_NOTE_LENGTH}\n multiline\n submitBehavior=\"submit\"\n returnKeyType={othersIncomplete || (last && !onCommit) ? \"next\" : \"done\"}\n onSubmitEditing={() => commit(annotation.id)}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.md,\n lineHeight: 22,\n color: c.fg,\n marginTop: 6,\n minHeight: 40,\n maxHeight: 132,\n paddingHorizontal: 12,\n paddingTop: 9,\n paddingBottom: 9,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n borderWidth: 1,\n borderColor: c.border,\n }}\n />\n ) : (\n <NotePreview note={annotation.note} ordinal={ordinal} />\n )}\n </AccentRow>\n </View>\n );\n })}\n {editable && incompleteCount > 0 ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n }}\n >\n {t(\"composerMessages.addANoteToEach\")}\n </Text>\n ) : null}\n </ScrollView>\n </BottomSheet>\n );\n}\n","import type {\n DraftTimelineAnnotation,\n SessionEvent,\n SessionStatus,\n TimelineAnnotationSource,\n} from \"@opengeni/sdk\";\nimport {\n buildTimeline,\n groupTimeline,\n type AgentMessageItem,\n type HumanInputItem,\n type TimelineGroup,\n type TimelineAnnotationSourceDescriptor,\n type TimelineItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport {\n compactedLandmarkCount,\n durationBetween,\n flattenActivityItems,\n formatClockTime,\n formatRelativeTime,\n isPreparingWork,\n noticeDisplayText,\n noticeTone,\n QUESTION_NAV_MARGIN_PX,\n recordedWaitSummaryText,\n questionNavTarget,\n readableWorkDefaultOpen,\n readableWorkShowsPreview,\n readableWorkStatus,\n SESSION_STATUS_PRESENTATION,\n timelineGroupContainsPresentedImage,\n timelineGroupIndexAtSequence,\n type TurnSummaryFacetConfiguration,\n} from \"@opengeni/react/timeline-model\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type MutableRefObject,\n type ReactNode,\n} from \"react\";\nimport {\n ActivityIndicator,\n Keyboard,\n Pressable,\n ScrollView,\n Text,\n View,\n type LayoutChangeEvent,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport Animated, { FadeIn, FadeOut } from \"react-native-reanimated\";\nimport { NativeActivityOptionsProvider, type NativeActivityOptions } from \"./activity\";\nimport { Icon } from \"./icon\";\nimport { ReleaseFollowProvider, withAlpha } from \"./primitives\";\nimport { humanInputAnswerLines } from \"./secret-field-model\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport {\n ActivityRail,\n FoldMemoryProvider,\n StickyWorkHeaderProvider,\n type StickyWorkHeader,\n RollingActivity,\n TurnRailFrame,\n TurnSummary,\n type NativeTurnStatus,\n type PreparingProps,\n} from \"./turn\";\nimport { useOpenGeniText, type OpenGeniText } from \"@opengeni/react/messages\";\nimport { TurnStepsLoader } from \"./turn-steps\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { collectLiveNotes, foldedLiveNotes, liveFoldShift } from \"./live-notes\";\nimport {\n AnnotationSourcesContext,\n AnnotationSourceView,\n SentAnnotationCards,\n draftMarkersBySource,\n type AnnotationFlash,\n type AnnotationReveal,\n type AnnotationSourceNode,\n} from \"./annotations\";\nimport { measureQuoteAnchors, useNativeTextAnnotation } from \"./text-selection\";\n\n/* ----------------------------------------------------------------------------\n Native MessageTimeline: the web MessageTimeline (components/message-timeline)\n in its rolling readable-turn configuration, drawn with native primitives.\n Grouping, fold defaults, statuses and facets come from the shared model.\n -------------------------------------------------------------------------- */\n\nexport type NativeMarkdownRenderer = (\n text: string,\n options: { tone: \"body\" | \"muted\"; streaming?: boolean | undefined },\n) => ReactNode;\n\n/** Start fetching older history this far before the reader reaches the top. */\nconst OLDER_HISTORY_PREFETCH_PX = 600;\n/** Web's phone clamp for long user messages (max-h-56). */\nconst USER_MESSAGE_COLLAPSED_PX = 224;\n/** The vertical gap between top-level rows (the scroll content's `gap`). */\nconst ROW_GAP_PX = 20;\n\nexport interface NativeMessageTimelineProps extends NativeActivityOptions {\n /** Projected items (preferred) or raw durable events. */\n items?: TimelineItem[] | undefined;\n events?: SessionEvent[] | undefined;\n status?: SessionStatus | null | undefined;\n facets?: TurnSummaryFacetConfiguration | undefined;\n renderMarkdown?: NativeMarkdownRenderer | undefined;\n /** Replace the preparing visual (the web orb) — e.g. a product character. */\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n /** Extra actions beside copy under a message (feedback, share, …). */\n renderMessageActions?: ((item: AgentMessageItem | UserMessageItem) => ReactNode) | undefined;\n /** Files sent with a user message, shown above its bubble (images as previews). */\n renderUserAttachments?: ((item: UserMessageItem) => ReactNode) | undefined;\n onCopy?: ((text: string) => void) | undefined;\n /** Rendered after the last group (pending questions, approvals, errors). */\n trailing?: ReactNode;\n emptyState?: ReactNode;\n header?: ReactNode;\n /**\n * Older durable history exists before the loaded window. When the reader\n * scrolls near the top (or the loaded window doesn't fill the screen), the\n * timeline calls `onLoadOlder` and keeps the reader's place as rows arrive.\n */\n hasOlder?: boolean | undefined;\n loadingOlder?: boolean | undefined;\n onLoadOlder?: (() => unknown) | undefined;\n /**\n * A durable event sequence to open on (an inbox item's or a notification's\n * moment): the timeline loads older history until it holds that moment,\n * then lands on its row, or the nearest row before it, once.\n */\n focusSequence?: number | null | undefined;\n contentInsetTop?: number | undefined;\n contentInsetBottom?: number | undefined;\n /** Height of host chrome floating over the timeline's bottom edge (a floating composer). */\n overlayInsetBottom?: number | undefined;\n /**\n * Changes whenever the reader sends: the timeline resumes following the\n * latest row, so a message sent while reading (or annotating) older\n * history comes into view.\n */\n followLatestSignal?: number | undefined;\n /**\n * Add note on selected message text (iOS): receives the quote as a draft\n * annotation, as the web timeline's selection popover does.\n */\n onAnnotate?: ((annotation: DraftTimelineAnnotation) => void) | undefined;\n /** The draft's annotations, marked on the messages they quote. */\n draftAnnotations?: readonly DraftTimelineAnnotation[] | undefined;\n /** A draft marker was tapped: review that annotation. */\n onDraftAnnotationSelect?: ((id: string) => void) | undefined;\n /** Receives a function that scrolls a quoted message into view and highlights it. */\n annotationRevealRef?: MutableRefObject<AnnotationReveal | null> | undefined;\n style?: StyleProp<ViewStyle>;\n}\n\n/** Each message's annotation source, by source key (its durable event id). */\nfunction annotationSources(\n items: readonly TimelineItem[],\n): Map<string, TimelineAnnotationSourceDescriptor> {\n const sources = new Map<string, TimelineAnnotationSourceDescriptor>();\n for (const item of items) {\n if (item.kind !== \"user-message\" && item.kind !== \"agent-message\") continue;\n const source = item.annotationSource;\n if (source) sources.set(source.eventId, source);\n }\n return sources;\n}\n\nexport function MessageTimeline(props: NativeMessageTimelineProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const items = useMemo(\n () => props.items ?? buildTimeline(t, props.events ?? []),\n [t, props.items, props.events],\n );\n const groups = useMemo(() => groupTimeline(t, items, { readableTurns: true }), [t, items]);\n const sources = useMemo(() => annotationSources(items), [items]);\n useNativeTextAnnotation(sources, props.onAnnotate);\n const foldMemory = useRef(new Map<string, \"open\" | \"closed\">()).current;\n const scrollRef = useRef<ComponentRef<typeof ScrollView>>(null);\n // Opening on a moment starts away from the tip; the landing decides where.\n const following = useRef(!props.focusSequence);\n // Only reader gestures change follow intent; layout-driven scroll events\n // (content growing before the first scroll-to-end) must not unstick it.\n const readerScrolling = useRef(false);\n const [showJump, setShowJump] = useState(false);\n // \"Back to your message\": prompt rows' content offsets, read on scroll.\n const promptFrames = useRef(new Map<string, { top: number; bottom: number }>()).current;\n const [questionNav, setQuestionNav] = useState<string | null>(null);\n // Expanded outer turn headers, for the pinned copy (web: sticky in its section).\n const stickyHeaders = useRef(new Map<string, StickyWorkHeader>()).current;\n const scrollY = useRef(0);\n const sourceNodes = useRef(new Map<string, AnnotationSourceNode>()).current;\n const [flash, setFlash] = useState<AnnotationFlash | null>(null);\n // Read when a reveal lands, after the keyboard has gone and the composer settled.\n const overlayInsetBottom = useRef(0);\n overlayInsetBottom.current = props.overlayInsetBottom ?? 0;\n const registerSource = useCallback(\n (sourceKey: string, node: AnnotationSourceNode | null) => {\n if (node) sourceNodes.set(sourceKey, node);\n else sourceNodes.delete(sourceKey);\n },\n [sourceNodes],\n );\n const revealSource = useCallback<AnnotationReveal>(\n (source: TimelineAnnotationSource, quote) => {\n const node = sourceNodes.get(source.eventId);\n const scroller = scrollRef.current?.getNativeScrollRef?.();\n if (!node || !scroller) return false;\n following.current = false;\n // Reading the source, not writing: the keyboard would hide it.\n const keyboardGone = Keyboard.isVisible()\n ? new Promise<void>((resolve) => {\n const done = () => {\n subscription.remove();\n clearTimeout(timer);\n // The composer re-measures as it drops back down.\n setTimeout(resolve, 60);\n };\n const subscription = Keyboard.addListener(\"keyboardDidHide\", done);\n const timer = setTimeout(done, 600);\n Keyboard.dismiss();\n })\n : Promise.resolve();\n const located = quote\n ? measureQuoteAnchors(source.eventId, [quote]).then(([anchor]) => anchor ?? null)\n : Promise.resolve(null);\n void Promise.all([located, keyboardGone]).then(([anchor]) => {\n scroller.measureInWindow((_scrollX, scrollTop) => {\n node.measureInWindow((_x, top, _width, height) => {\n // Center the message in the space the composer leaves; a message\n // taller than that centers the quote instead, or shows its top.\n const y = scrollY.current + top - scrollTop;\n const visible = (viewportHeight.current || 600) - overlayInsetBottom.current;\n const first = anchor?.boxes[0];\n const last = anchor?.boxes[anchor.boxes.length - 1];\n const span =\n height < visible - 32 || !first || !last\n ? { top: y, height }\n : { top: y + first.y, height: last.y + last.height - first.y };\n const target =\n span.height < visible - 32 ? span.top - (visible - span.height) / 2 : span.top - 16;\n const end = Math.max(0, contentHeight.current - (viewportHeight.current || 0));\n scrollY.current = Math.min(Math.max(0, target), end || Number.POSITIVE_INFINITY);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: true });\n // Flash once the scroll is under way, so the reader sees it land.\n setFlash((current) => ({\n sourceKey: source.eventId,\n token: (current?.token ?? 0) + 1,\n ...(quote ? { quote } : {}),\n }));\n });\n });\n });\n return true;\n },\n [sourceNodes],\n );\n if (props.annotationRevealRef) props.annotationRevealRef.current = revealSource;\n const draftMarkers = useMemo(\n () => draftMarkersBySource(props.draftAnnotations),\n [props.draftAnnotations],\n );\n const annotationSourcesValue = useMemo(\n () => ({\n register: registerSource,\n flash,\n drafts: draftMarkers,\n onSelectDraft: props.onDraftAnnotationSelect,\n }),\n [draftMarkers, flash, props.onDraftAnnotationSelect, registerSource],\n );\n const [pinned, setPinned] = useState<{ key: string; offset: number; height: number } | null>(\n null,\n );\n const updatePinned = useCallback(() => {\n const y = scrollY.current;\n let next: { key: string; offset: number; height: number } | null = null;\n for (const [key, entry] of stickyHeaders) {\n const end = entry.top + entry.height - entry.headerHeight;\n if (entry.headerHeight > 0 && entry.top < y && y < end) {\n next = { key, offset: Math.min(0, end - y), height: entry.headerHeight };\n }\n }\n setPinned((current) =>\n current?.key === next?.key &&\n current?.offset === next?.offset &&\n current?.height === next?.height\n ? current\n : next,\n );\n }, [stickyHeaders]);\n const releaseFollow = useCallback(() => {\n following.current = false;\n }, []);\n // Live progress notes fold away above an open work row (see live-notes.ts).\n const liveNotes = useMemo(() => collectLiveNotes(groups), [groups]);\n const liveNotesRef = useRef(liveNotes);\n liveNotesRef.current = liveNotes;\n const [openLiveWork, setOpenLiveWork] = useState<ReadonlySet<string>>(() => new Set());\n const openLiveWorkRef = useRef(openLiveWork);\n // Last laid-out height of each live note row, and the scroll correction owed\n // once folding or restoring them changes the content above the work row.\n const liveNoteHeights = useRef(new Map<string, number>()).current;\n const liveFoldOffset = useRef(0);\n const reportLiveFold = useCallback(\n (workId: string, open: boolean) => {\n const current = openLiveWorkRef.current;\n if (current.has(workId) === open) return;\n const next = new Set(current);\n if (open) next.add(workId);\n else next.delete(workId);\n openLiveWorkRef.current = next;\n // The notes sit above the row the reader just toggled: keep that row\n // where it is by moving the offset with the folded height.\n liveFoldOffset.current += liveFoldShift(\n liveNotesRef.current,\n workId,\n open,\n liveNoteHeights,\n ROW_GAP_PX,\n );\n setOpenLiveWork(next);\n },\n [liveNoteHeights],\n );\n const foldedNotes = useMemo(\n () => foldedLiveNotes(liveNotes, openLiveWork),\n [liveNotes, openLiveWork],\n );\n // Older history: latest values for scroll callbacks without re-binding them.\n const history = useRef({\n hasOlder: false,\n loading: false,\n load: undefined as (() => unknown) | undefined,\n });\n history.current = {\n hasOlder: props.hasOlder === true,\n loading: props.loadingOlder === true,\n load: props.onLoadOlder,\n };\n const viewportHeight = useRef(0);\n // Older rows arrive above the reader. Keep the reader's place by moving the\n // offset by the added height (UIKit's maintainVisibleContentPosition fights\n // the reader's drag while live rows re-lay out, so it isn't used).\n const contentHeight = useRef(0);\n const firstGroupKey = useRef<string | null>(null);\n const prepended = useRef(false);\n const nextFirstKey = groups[0] ? groupKey(groups[0]) : null;\n if (nextFirstKey !== firstGroupKey.current) {\n const previous = firstGroupKey.current;\n if (previous !== null && groups.some((group) => groupKey(group) === previous)) {\n prepended.current = true;\n }\n firstGroupKey.current = nextFirstKey;\n }\n const requestOlder = useCallback(() => {\n const { hasOlder, loading, load } = history.current;\n if (!hasOlder || loading || !load) return;\n history.current = { ...history.current, loading: true };\n void Promise.resolve(load()).catch(() => undefined);\n }, []);\n const registerSticky = useMemo(\n () => ({\n register: (key: string, entry: StickyWorkHeader | null) => {\n if (entry) stickyHeaders.set(key, entry);\n else stickyHeaders.delete(key);\n },\n reveal: (top: number) => {\n // Collapsing from the pinned copy leaves the reader on that turn's row.\n following.current = false;\n setPinned(null);\n scrollY.current = Math.max(0, top - 8);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n },\n }),\n [stickyHeaders],\n );\n const measure = useCallback((event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n return contentSize.height - layoutMeasurement.height - contentOffset.y;\n }, []);\n const onScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const distance = measure(event);\n // Mid-drag only releases follow; the drag's end decides whether to resume it.\n if (readerScrolling.current && distance >= 48) following.current = false;\n setShowJump(distance > 240 && !following.current);\n const { contentOffset, layoutMeasurement } = event.nativeEvent;\n scrollY.current = contentOffset.y;\n // The reader is approaching the oldest loaded row: fetch the window before it.\n // Momentum after a fling counts too, so this keys on follow, not the drag.\n if (!following.current && contentOffset.y < OLDER_HISTORY_PREFETCH_PX) requestOlder();\n updatePinned();\n const prompts = [...promptFrames.entries()]\n .map(([key, frame]) => ({ key, ...frame }))\n .sort((a, b) => a.top - b.top);\n const next = questionNavTarget(prompts, {\n top: contentOffset.y,\n height: layoutMeasurement.height,\n });\n setQuestionNav((current) => (current === next ? current : next));\n },\n [measure, promptFrames, requestOlder, updatePinned],\n );\n const onScrollEnd = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n following.current = measure(event) < 48;\n readerScrolling.current = false;\n },\n [measure],\n );\n const onContentSizeChange = useCallback(\n (_width: number, height: number) => {\n const added = height - contentHeight.current;\n contentHeight.current = height;\n if (prepended.current) {\n prepended.current = false;\n if (!following.current && added > 0) {\n scrollY.current += added;\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n return;\n }\n }\n if (liveFoldOffset.current !== 0) {\n const shift = liveFoldOffset.current;\n liveFoldOffset.current = 0;\n if (!following.current) {\n scrollY.current = Math.max(0, scrollY.current + shift);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n }\n }\n if (following.current) scrollRef.current?.scrollToEnd({ animated: false });\n // A short window can't be scrolled, so it could never reach the top: keep loading.\n if (viewportHeight.current > 0 && height < viewportHeight.current + OLDER_HISTORY_PREFETCH_PX)\n requestOlder();\n },\n [requestOlder],\n );\n const followLatestSignal = props.followLatestSignal ?? 0;\n useEffect(() => {\n if (!followLatestSignal) return;\n following.current = true;\n setShowJump(false);\n scrollRef.current?.scrollToEnd({ animated: true });\n }, [followLatestSignal]);\n // Landing on a moment: each group's offset, read as it lays out.\n const groupTops = useRef(new Map<string, number>()).current;\n const landed = useRef<number | null>(null);\n const [layoutPass, setLayoutPass] = useState(0);\n const focusSequence = props.focusSequence ?? null;\n const focusIndex = useMemo(\n () => (focusSequence ? timelineGroupIndexAtSequence(groups, focusSequence) : -1),\n [focusSequence, groups],\n );\n useEffect(() => {\n if (!focusSequence || landed.current === focusSequence) return;\n following.current = false;\n if (focusIndex < 0) {\n // Older than the loaded window: fetch the window before it, else give up\n // and show the latest.\n if (history.current.hasOlder) requestOlder();\n else if (!history.current.loading && groups.length > 0) {\n landed.current = focusSequence;\n following.current = true;\n scrollRef.current?.scrollToEnd({ animated: false });\n }\n return;\n }\n const top = groupTops.get(groupKey(groups[focusIndex]!));\n if (top === undefined) return;\n landed.current = focusSequence;\n scrollY.current = Math.max(0, top - 12);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n }, [focusSequence, focusIndex, groups, groupTops, layoutPass, requestOlder]);\n const activityOptions = useMemo<NativeActivityOptions>(\n () => ({\n toolRenderers: props.toolRenderers,\n renderTool: props.renderTool,\n computeLabel: props.computeLabel,\n renderMarkdown: props.renderMarkdown,\n onOpenSession: props.onOpenSession,\n }),\n [\n props.toolRenderers,\n props.renderTool,\n props.computeLabel,\n props.renderMarkdown,\n props.onOpenSession,\n ],\n );\n const context: GroupContext = {\n facets: props.facets,\n renderMarkdown: props.renderMarkdown,\n renderPreparing: props.renderPreparing,\n renderMessageActions: props.renderMessageActions,\n renderUserAttachments: props.renderUserAttachments,\n onCopy: props.onCopy,\n reportLiveFold,\n onRevealAnnotation: revealSource,\n };\n return (\n <AnnotationSourcesContext.Provider value={annotationSourcesValue}>\n <NativeActivityOptionsProvider value={activityOptions}>\n <FoldMemoryProvider value={foldMemory}>\n <StickyWorkHeaderProvider value={registerSticky}>\n <ReleaseFollowProvider value={releaseFollow}>\n <View style={[{ flex: 1, backgroundColor: theme.colors.bg }, props.style]}>\n <ScrollView\n ref={scrollRef}\n onScroll={onScroll}\n onScrollBeginDrag={() => {\n readerScrolling.current = true;\n // The reader takes over: a live turn re-lays out the content many\n // times a second, and snapping to the end on each pass would undo\n // the drag before it got far. Follow is re-decided when it ends.\n following.current = false;\n }}\n onScrollEndDrag={onScrollEnd}\n onMomentumScrollEnd={onScrollEnd}\n onLayout={(event: LayoutChangeEvent) => {\n viewportHeight.current = event.nativeEvent.layout.height;\n if (following.current) scrollRef.current?.scrollToEnd({ animated: false });\n }}\n scrollEventThrottle={32}\n onContentSizeChange={onContentSizeChange}\n keyboardDismissMode=\"interactive\"\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={{\n paddingTop: props.contentInsetTop ?? 16,\n paddingHorizontal: 16,\n paddingBottom: props.contentInsetBottom ?? 24,\n gap: ROW_GAP_PX,\n flexGrow: 1,\n }}\n >\n <View>\n {props.hasOlder ? (\n <OlderHistoryRow\n loading={props.loadingOlder === true}\n onPress={requestOlder}\n />\n ) : null}\n {props.header}\n </View>\n {groups.length === 0 && props.emptyState ? props.emptyState : null}\n {groups.map((group, index) => {\n const key = groupKey(group);\n const prompt = group.kind === \"item\" && group.item.kind === \"user-message\";\n // Agent messages keep one wrapper so a progress note can fold\n // (stay mounted, out of layout) without remounting.\n const noteId =\n group.kind === \"item\" && group.item.kind === \"agent-message\"\n ? group.item.id\n : null;\n const liveNote = noteId !== null && liveNotes.notes.has(noteId);\n const folded = noteId !== null && foldedNotes.has(noteId);\n // The landing row keeps one wrapper for its life, so landing never remounts it.\n const landing = focusSequence !== null && index === focusIndex;\n return prompt || landing || noteId !== null ? (\n <View\n key={key}\n style={folded ? { display: \"none\" } : undefined}\n onLayout={(event) => {\n const { y, height } = event.nativeEvent.layout;\n if (prompt) promptFrames.set(key, { top: y, bottom: y + height });\n if (liveNote && !folded && height > 0) {\n liveNoteHeights.set(noteId, height);\n }\n if (landing && landed.current !== focusSequence) {\n groupTops.set(key, y);\n setLayoutPass((pass) => pass + 1);\n }\n }}\n >\n <TimelineGroupView group={group} context={context} />\n </View>\n ) : (\n <TimelineGroupView key={key} group={group} context={context} />\n );\n })}\n {props.trailing}\n </ScrollView>\n {pinned && stickyHeaders.get(pinned.key) ? (\n <View\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n paddingHorizontal: 16,\n backgroundColor: theme.colors.bg,\n transform: [{ translateY: pinned.offset }],\n }}\n >\n {stickyHeaders.get(pinned.key)!.render()}\n </View>\n ) : null}\n {/* Web timeline navigation: two identical small round arrow buttons at\n fixed, centered spots that never dodge the content beneath them. */}\n {questionNav ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n // Below a pinned work header so that strip stays a full-width target.\n top: pinned ? pinned.height + pinned.offset + 8 : 12,\n left: 0,\n right: 0,\n alignItems: \"center\",\n }}\n >\n <NavButton\n icon=\"arrow-up\"\n label={m.backToYourMessage}\n onPress={() => {\n const frame = promptFrames.get(questionNav);\n if (!frame) return;\n following.current = false;\n scrollRef.current?.scrollTo({\n y: Math.max(0, frame.top - QUESTION_NAV_MARGIN_PX),\n animated: true,\n });\n }}\n />\n </View>\n ) : null}\n {showJump ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n bottom: (props.overlayInsetBottom ?? 0) + 12,\n left: 0,\n right: 0,\n alignItems: \"center\",\n }}\n >\n <NavButton\n icon=\"arrow-down\"\n label={m.jumpToLatest}\n onPress={() => {\n following.current = true;\n scrollRef.current?.scrollToEnd({ animated: true });\n }}\n />\n </View>\n ) : null}\n </View>\n </ReleaseFollowProvider>\n </StickyWorkHeaderProvider>\n </FoldMemoryProvider>\n </NativeActivityOptionsProvider>\n </AnnotationSourcesContext.Provider>\n );\n}\n\n/**\n * The web timeline's navigation button (NAV_BUTTON_CLASS): 32pt round, surface-3\n * at 90% with a border and shadow, a 16pt fg-muted arrow, and a 44pt touch target.\n */\nfunction NavButton(props: { icon: \"arrow-up\" | \"arrow-down\"; label: string; onPress: () => void }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <Animated.View entering={FadeIn.duration(150)} exiting={FadeOut.duration(150)}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={props.label}\n onPress={props.onPress}\n hitSlop={6}\n style={({ pressed }) => ({\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n borderColor: pressed ? c[\"border-strong\"] : c.border,\n backgroundColor: withAlpha(c[\"surface-3\"], 0.9),\n shadowColor: \"#000\",\n shadowOpacity: 0.1,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 3,\n })}\n >\n {({ pressed }) => (\n <Icon name={props.icon} size={16} color={pressed ? c.fg : c[\"fg-muted\"]} />\n )}\n </Pressable>\n </Animated.View>\n );\n}\n\ntype GroupContext = {\n facets?: TurnSummaryFacetConfiguration | undefined;\n renderMarkdown?: NativeMarkdownRenderer | undefined;\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n renderMessageActions?: ((item: AgentMessageItem | UserMessageItem) => ReactNode) | undefined;\n renderUserAttachments?: ((item: UserMessageItem) => ReactNode) | undefined;\n onCopy?: ((text: string) => void) | undefined;\n /** A live work row reports its open state, so its progress notes above fold. */\n reportLiveFold?: ((workId: string, open: boolean) => void) | undefined;\n onRevealAnnotation?: AnnotationReveal | undefined;\n};\n\n/** A wait's one quiet secondary line under its work row. */\nfunction WaitDetail({ text }: { text: string }) {\n const theme = useNativeTimelineTheme();\n return (\n <Text\n numberOfLines={2}\n style={{ ...fontStyle(theme), fontSize: theme.size.sm, color: theme.colors[\"fg-subtle\"] }}\n >\n {text}\n </Text>\n );\n}\n\nfunction groupKey(group: TimelineGroup): string {\n switch (group.kind) {\n case \"item\":\n return group.item.kind === \"user-message\" && group.item.reconciliationKey\n ? `user-${group.item.reconciliationKey}`\n : group.item.id;\n default:\n return group.id;\n }\n}\n\nfunction TimelineGroupView({\n group,\n context,\n insideTurn = false,\n}: {\n group: TimelineGroup;\n context: GroupContext;\n insideTurn?: boolean;\n}) {\n const t = useOpenGeniText();\n switch (group.kind) {\n case \"activity\": {\n if (group.work) {\n if (isPreparingWork(group, { startupDetails: false, startupDismissed: insideTurn })) {\n return (\n <ActivityRail\n items={group.items}\n startupActive\n renderPreparing={context.renderPreparing}\n />\n );\n }\n const base = readableWorkStatus(t, { ...group, work: group.work });\n const status: NativeTurnStatus =\n base.kind === \"working\"\n ? {\n kind: \"working\",\n since: base.since,\n label: base.label,\n preview: readableWorkShowsPreview(group) ? (\n <RollingActivity items={group.items} showCount={false} />\n ) : undefined,\n }\n : base.kind === \"waiting\"\n ? {\n kind: \"waiting\",\n since: base.since,\n label: base.label,\n preview: base.detail ? <WaitDetail text={base.detail} /> : undefined,\n }\n : { kind: \"worked\", durationMs: base.durationMs, label: base.label };\n return (\n <TurnSummary\n items={group.items}\n status={status}\n outcome={group.outcome}\n failureText={group.failureText}\n foldKey={group.id}\n defaultOpen={readableWorkDefaultOpen(group)}\n unloadedSteps={!!group.work.steps && group.work.steps.state !== \"complete\"}\n facets={context.facets}\n contextCompactionCount={compactedLandmarkCount(group.work.details)}\n onOpenStateChange={\n // Always wired at the top level: a row opened before its first\n // note arrives must still fold that note when it does.\n !insideTurn && context.reportLiveFold\n ? (open) => context.reportLiveFold?.(group.id, open)\n : undefined\n }\n >\n <TurnRailFrame compact>\n {group.work.steps ? (\n <TurnStepsLoader\n steps={group.work.steps}\n autoLoad={!readableWorkDefaultOpen(group)}\n />\n ) : null}\n <FoldedGroups groups={group.work.details} context={context} />\n </TurnRailFrame>\n </TurnSummary>\n );\n }\n const preparationOnly =\n !insideTurn &&\n !group.outcome &&\n group.items.every(\n (item) =>\n item.kind === \"startup-phase\" || (item.kind === \"reasoning\" && !item.text.trim()),\n );\n if (preparationOnly) {\n return <ActivityRail items={group.items} renderPreparing={context.renderPreparing} />;\n }\n if (insideTurn) {\n return <ActivityRail items={group.items} startupActive={false} />;\n }\n const image = timelineGroupContainsPresentedImage(group);\n return (\n <TurnSummary\n items={group.items}\n outcome={group.outcome}\n failureText={group.failureText}\n defaultOpen={group.outcome === \"failed\" || image ? true : undefined}\n liveHeader={\n !image && !group.outcome ? <RollingActivity items={group.items} /> : undefined\n }\n foldKey={group.id}\n facets={context.facets}\n >\n <TurnRailFrame>\n <ActivityRail items={group.items} startupActive={false} />\n </TurnRailFrame>\n </TurnSummary>\n );\n }\n case \"turn\": {\n const activityItems = flattenActivityItems(group.groups);\n const image = timelineGroupContainsPresentedImage(group);\n return (\n <TurnSummary\n items={activityItems}\n outcome={group.outcome}\n failureText={insideTurn ? undefined : group.failureText}\n durationMs={durationBetween(group.startedAt, group.endedAt)}\n defaultOpen={!insideTurn && (group.outcome === \"failed\" || image) ? true : undefined}\n bare={insideTurn}\n foldKey={group.id}\n facets={context.facets}\n contextCompactionCount={group.contextCompactionCount}\n >\n {insideTurn ? (\n <View style={{ gap: 16 }}>\n <FoldedGroups groups={group.groups} context={context} />\n </View>\n ) : (\n <TurnRailFrame>\n <FoldedGroups groups={group.groups} context={context} />\n </TurnRailFrame>\n )}\n </TurnSummary>\n );\n }\n case \"item\":\n return <TimelineRow item={group.item} context={context} />;\n }\n}\n\nfunction FoldedGroups({\n groups,\n context,\n}: {\n groups: readonly TimelineGroup[];\n context: GroupContext;\n}) {\n return (\n <>\n {groups.map((child, index) => (\n <View\n key={groupKey(child)}\n style={\n index > 0 && (child.kind !== \"activity\" || groups[index - 1]?.kind !== \"activity\")\n ? { marginTop: 12 }\n : undefined\n }\n >\n <TimelineGroupView group={child} context={context} insideTurn />\n </View>\n ))}\n </>\n );\n}\n\nfunction TimelineRow({ item, context }: { item: TimelineItem; context: GroupContext }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n switch (item.kind) {\n case \"user-message\":\n return <UserMessageRow item={item} context={context} />;\n case \"agent-message\":\n return <AgentMessageRow item={item} context={context} />;\n case \"human-input\":\n return <HumanInputRow item={item} onCopy={context.onCopy} />;\n case \"session-status\": {\n const meta = SESSION_STATUS_PRESENTATION(t)[item.blocked ? \"blocked\" : item.status];\n return (\n <SeparatorRow\n dot={item.resolvedAt ? undefined : theme.colors[`status-${meta.tone}`]}\n text={`${item.resolvedAt ? t(\"messageTimeline.workResumed\") : meta.label.toLowerCase()} · ${formatRelativeTime(t, item.resolvedAt ?? item.occurredAt)}`}\n />\n );\n }\n case \"context-compaction\":\n return <SeparatorRow text=\"context compacted\" />;\n case \"notice\":\n return <NoticeRow item={item} />;\n case \"goal\":\n return item.text ? (\n <SeparatorRow text={`goal ${item.action} · ${item.text}`} />\n ) : (\n <SeparatorRow text={`goal ${item.action}`} />\n );\n case \"worker-completion\":\n return (\n <View\n style={{\n borderLeftWidth: 2,\n borderLeftColor: theme.colors.border,\n paddingLeft: 12,\n gap: 4,\n }}\n >\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: theme.size.base, color: theme.colors.fg }}\n >\n {t(\"native.timeline.messageTimeline.workerReportedBack\")}\n </Text>\n <Text\n numberOfLines={3}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n </View>\n );\n case \"auth-needed\":\n return (\n <View\n style={{\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: theme.colors.border,\n padding: 14,\n backgroundColor: theme.colors[\"surface-1\"],\n }}\n >\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: theme.size.md, color: theme.colors.fg }}\n >\n {t(\"native.timeline.messageTimeline.connectionNeeded\")}\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 4,\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {t(\"native.timeline.messageTimeline.providerdomainNeedsToBeReconnected\", {\n providerDomain: item.providerDomain,\n })}\n </Text>\n </View>\n );\n default:\n return null;\n }\n}\n\n/**\n * The web footer stamp. Hermes/iOS ICU joins date and time with \" at \" where the\n * browser's ICU uses \", \"; normalize to the web form.\n */\nfunction nativeClockTime(t: OpenGeniText, iso: string): string {\n return formatClockTime(t, iso).replace(\" at \", \", \");\n}\n\nfunction NoticeRow({ item }: { item: Extract<TimelineItem, { kind: \"notice\" }> }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const c = theme.colors;\n const [open, setOpen] = useState(false);\n // An agent's own wait is ordinary progress, not a warning: a quiet line that\n // discloses the reason, as on web.\n if (item.recordedOutcome) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => setOpen((value) => !value)}\n style={{ paddingVertical: 4 }}\n >\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <View style={{ transform: [{ rotate: open ? \"90deg\" : \"0deg\" }] }}>\n <Icon name=\"chevron-right\" size={14} color={c[\"fg-muted\"]} />\n </View>\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.sm, color: c[\"fg-muted\"] }}>\n {recordedWaitSummaryText(t, item).replace(\" at \", \", \")}\n </Text>\n </View>\n {open ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 4,\n paddingLeft: 22,\n fontSize: theme.size.sm,\n lineHeight: 19,\n color: c[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n ) : null}\n </Pressable>\n );\n }\n const tone = noticeTone(item);\n const accent =\n tone === \"failed\"\n ? c[\"status-failed\"]\n : tone === \"waiting\"\n ? c[\"status-waiting\"]\n : c[\"fg-muted\"];\n return (\n <View\n accessibilityRole=\"text\"\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderColor: tone === \"neutral\" ? c.border : withAlpha(accent, 0.35),\n backgroundColor: tone === \"neutral\" ? c[\"surface-1\"] : withAlpha(accent, 0.1),\n }}\n >\n <View style={{ marginTop: 2, opacity: item.tone === \"cancelled\" ? 0.6 : 1 }}>\n <Icon name=\"triangle-alert\" size={16} color={accent} />\n </View>\n <Text style={{ ...fontStyle(theme), flex: 1, fontSize: 14, lineHeight: 20, color: accent }}>\n {noticeDisplayText(t, item)}\n </Text>\n </View>\n );\n}\n\nfunction SeparatorRow({ text, dot }: { text: string; dot?: string | undefined }) {\n const theme = useNativeTimelineTheme();\n return (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 12 }}>\n <View style={{ height: 1, flex: 1, backgroundColor: theme.colors.border }} />\n {dot ? (\n <View\n style={{ width: 4, height: 4, borderRadius: 2, marginRight: -6, backgroundColor: dot }}\n />\n ) : null}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n maxWidth: \"70%\",\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {text}\n </Text>\n <View style={{ height: 1, flex: 1, backgroundColor: theme.colors.border }} />\n </View>\n );\n}\n\n/** Copy + time under a message: the web CopyHoverFrame footer at coarse pointer. */\nfunction MessageFooter({\n text,\n occurredAt,\n align,\n actions,\n onCopy,\n}: {\n text: string;\n occurredAt: string;\n align: \"start\" | \"end\";\n actions?: ReactNode;\n onCopy?: ((text: string) => void) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const [copied, setCopied] = useState(false);\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n alignSelf: align === \"end\" ? \"flex-end\" : \"flex-start\",\n gap: 6,\n height: 44,\n }}\n >\n {onCopy ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.copyMessage}\n onPress={() => {\n onCopy(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1400);\n }}\n style={{\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: theme.radius.sm,\n }}\n >\n <Icon name={copied ? \"check\" : \"copy\"} size={14} color={theme.colors[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n {actions}\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {nativeClockTime(t, occurredAt)}\n </Text>\n </View>\n );\n}\n\n/**\n * Web's long-message disclosure: a sent message taller than the phone clamp\n * shows its top with a fade and \"Show more\"; the full text stays mounted.\n */\nfunction CollapsibleUserText({ children }: { children: ReactNode }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const [height, setHeight] = useState(0);\n const [expanded, setExpanded] = useState(false);\n // A little slack so a message just over the clamp isn't hidden behind a control.\n const collapsible = height > USER_MESSAGE_COLLAPSED_PX + 48;\n const collapsed = collapsible && !expanded;\n const surface = theme.colors[\"surface-2\"];\n return (\n <View>\n <View style={collapsed ? { maxHeight: USER_MESSAGE_COLLAPSED_PX, overflow: \"hidden\" } : null}>\n {/* Measure only while unclipped: inside the clip the content is laid out\n shorter, and re-measuring there would flip collapse on and off. */}\n <View\n onLayout={(event) => {\n if (!collapsed) setHeight(event.nativeEvent.layout.height);\n }}\n >\n {children}\n </View>\n {collapsed ? (\n <View\n pointerEvents=\"none\"\n style={{ position: \"absolute\", left: 0, right: 0, bottom: 0, height: 48 }}\n >\n {[0.25, 0.5, 0.75, 0.95].map((alpha) => (\n <View key={alpha} style={{ flex: 1, backgroundColor: withAlpha(surface, alpha) }} />\n ))}\n </View>\n ) : null}\n </View>\n {collapsible ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded }}\n hitSlop={8}\n onPress={() => setExpanded((value) => !value)}\n style={{ alignSelf: \"flex-start\", paddingTop: 6 }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {expanded ? m.showLess : m.showMore}\n </Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\n/** Top of the loaded window: a spinner while older history loads, else a manual control. */\nfunction OlderHistoryRow({ loading, onPress }: { loading: boolean; onPress: () => void }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n return (\n <View style={{ alignItems: \"center\", paddingVertical: 8 }}>\n {loading ? (\n <ActivityIndicator color={theme.colors[\"fg-muted\"]} accessibilityLabel={m.loadingEarlier} />\n ) : (\n <Pressable accessibilityRole=\"button\" hitSlop={8} onPress={onPress}>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {t(\"native.timeline.messageTimeline.loadEarlierMessages\")}\n </Text>\n </Pressable>\n )}\n </View>\n );\n}\n\nfunction UserMessageRow({ item, context }: { item: UserMessageItem; context: GroupContext }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const failed = item.delivery?.state === \"failed\";\n const annotations = item.annotations ?? [];\n const sourceKey = item.annotationSource?.eventId;\n return (\n <Animated.View entering={FadeIn.duration(180)} style={{ alignItems: \"flex-end\" }}>\n <View style={{ maxWidth: \"85%\", alignItems: \"flex-end\", gap: 6 }}>\n {item.resources.some((resource) => resource.kind === \"file\")\n ? context.renderUserAttachments?.(item)\n : null}\n {item.text || annotations.length > 0 ? (\n <View\n style={{\n backgroundColor: theme.colors[\"surface-2\"],\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderTopLeftRadius: 14,\n borderTopRightRadius: 14,\n borderBottomLeftRadius: 14,\n borderBottomRightRadius: 4,\n paddingHorizontal: 16,\n paddingVertical: 10,\n }}\n >\n {item.text ? (\n <CollapsibleUserText>\n <AnnotationSourceView\n sourceKey={sourceKey}\n style={{ marginHorizontal: -6, paddingHorizontal: 6 }}\n >\n {context.renderMarkdown ? (\n context.renderMarkdown(item.text, { tone: \"body\" })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.md,\n lineHeight: 28,\n color: theme.colors.fg,\n }}\n >\n {item.text}\n </Text>\n )}\n </AnnotationSourceView>\n </CollapsibleUserText>\n ) : null}\n {annotations.length > 0 ? (\n <View style={item.text ? { marginTop: 10, marginBottom: 2 } : { paddingVertical: 2 }}>\n <SentAnnotationCards\n annotations={annotations}\n onReveal={context.onRevealAnnotation}\n />\n </View>\n ) : null}\n </View>\n ) : null}\n <MessageFooter\n text={item.text}\n occurredAt={item.occurredAt}\n align=\"end\"\n actions={context.renderMessageActions?.(item)}\n onCopy={context.onCopy}\n />\n {failed ? (\n <View\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 4, paddingHorizontal: 4 }}\n >\n <Icon name=\"triangle-alert\" size={14} color={theme.colors[\"status-failed\"]} />\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"status-failed\"],\n }}\n >\n {item.delivery?.error || m.messageNotSent}\n </Text>\n {item.delivery?.onRetry ? (\n <Pressable onPress={item.delivery.onRetry} accessibilityRole=\"button\">\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"status-failed\"],\n textDecorationLine: \"underline\",\n }}\n >\n {t(\"native.timeline.messageTimeline.retry\")}\n </Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n </View>\n </Animated.View>\n );\n}\n\nfunction AgentMessageRow({ item, context }: { item: AgentMessageItem; context: GroupContext }) {\n const theme = useNativeTimelineTheme();\n return (\n <Animated.View entering={FadeIn.duration(180)} style={{ minWidth: 0 }}>\n <AnnotationSourceView\n sourceKey={item.annotationSource?.eventId}\n style={{ marginHorizontal: -8, paddingHorizontal: 8 }}\n >\n {context.renderMarkdown ? (\n context.renderMarkdown(item.text, { tone: \"body\", streaming: item.streaming })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.md,\n lineHeight: 28,\n color: theme.colors.fg,\n }}\n >\n {item.text}\n </Text>\n )}\n </AnnotationSourceView>\n {item.streaming ? null : (\n <MessageFooter\n text={item.text}\n occurredAt={item.occurredAt}\n align=\"start\"\n actions={context.renderMessageActions?.(item)}\n onCopy={context.onCopy}\n />\n )}\n </Animated.View>\n );\n}\n\nfunction HumanInputRow({\n item,\n onCopy,\n}: {\n item: HumanInputItem;\n onCopy?: ((text: string) => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const multiple = Math.max(item.questions.length, item.answers.length) > 1;\n const settled =\n item.response.outcome === \"answered\"\n ? m.humanInputOutcome.answered\n : item.response.outcome === \"skipped\"\n ? m.humanInputOutcome.skipped\n : item.response.outcome === \"expired\"\n ? m.humanInputOutcome.expired\n : m.humanInputOutcome.cancelled;\n const lines = humanInputAnswerLines(\n item.answers,\n item.response,\n m.humanInputSecretSaved,\n multiple,\n );\n const answerText = lines\n .filter((line) => !line.secret)\n .map((line) => line.text)\n .join(\"\\n\");\n const savedLines = lines.filter((line) => line.secret);\n const copyText = lines.map((line) => line.text).join(\"\\n\");\n return (\n <View style={{ gap: 10 }}>\n <View\n style={{\n maxWidth: \"90%\",\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n borderWidth: 1,\n borderColor: theme.colors.border,\n backgroundColor: theme.colors[\"surface-1\"],\n borderTopLeftRadius: theme.radius.lg,\n borderTopRightRadius: theme.radius.lg,\n borderBottomRightRadius: theme.radius.lg,\n borderBottomLeftRadius: theme.radius.xs,\n paddingHorizontal: 14,\n paddingVertical: 12,\n }}\n >\n <View\n style={{\n marginTop: 2,\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: withAlpha(theme.colors[\"status-waiting\"], 0.1),\n }}\n >\n <Icon name=\"message-circle-question\" size={16} color={theme.colors[\"status-waiting\"]} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {t(\"native.timeline.messageTimeline.agentAsked\")}\n </Text>\n <View style={{ marginTop: 6, gap: 12 }}>\n {item.questions.map((question, index) => (\n <View key={question.id}>\n {question.label ? (\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.sm,\n color: theme.colors.fg,\n }}\n >\n {multiple ? `${index + 1}. ` : \"\"}\n {question.label}\n </Text>\n ) : null}\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: question.label ? theme.size.sm : theme.size.md,\n lineHeight: question.label ? 18 : 24,\n marginTop: question.label ? 2 : 0,\n color: question.label ? theme.colors[\"fg-muted\"] : theme.colors.fg,\n }}\n >\n {question.prompt}\n </Text>\n </View>\n ))}\n </View>\n </View>\n </View>\n <View style={{ alignItems: \"flex-end\" }}>\n <View\n style={{\n maxWidth: \"85%\",\n backgroundColor: theme.colors[\"surface-2\"],\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderTopLeftRadius: 14,\n borderTopRightRadius: 14,\n borderBottomLeftRadius: 14,\n borderBottomRightRadius: 4,\n paddingHorizontal: 16,\n paddingVertical: 10,\n }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {settled}\n </Text>\n {answerText ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.md,\n lineHeight: 24,\n color: theme.colors.fg,\n }}\n >\n {answerText}\n </Text>\n ) : null}\n {savedLines.map((line) => (\n <View\n key={line.questionId}\n style={{ marginTop: 4, flexDirection: \"row\", alignItems: \"center\", gap: 6 }}\n >\n <Icon name=\"key-round\" size={14} color={theme.colors[\"fg-muted\"]} />\n <Text\n style={{\n ...fontStyle(theme),\n flexShrink: 1,\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors.fg,\n }}\n >\n {line.text}\n </Text>\n </View>\n ))}\n </View>\n <MessageFooter\n text={copyText || settled}\n occurredAt={item.occurredAt}\n align=\"end\"\n onCopy={onCopy}\n />\n </View>\n </View>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { ActivityIndicator, Pressable, Text, type ViewStyle } from \"react-native\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* Web Button variants at `size=\"sm\"` (h-9, rounded-og-md, text-og-sm font-medium). */\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"destructive\" | \"ghost\";\n/** `sm`: web Button size=\"sm\" (h-8, text 14). `form`: the question-form action (h-9, text 12). */\nexport type ButtonSize = \"sm\" | \"form\";\n\nexport function Button({\n label,\n icon,\n onPress,\n variant = \"secondary\",\n size = \"sm\",\n disabled,\n busy,\n style,\n accessibilityLabel,\n}: {\n label?: string | undefined;\n icon?: NativeIconName | undefined;\n onPress?: (() => void) | undefined;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n style?: ViewStyle | undefined;\n accessibilityLabel?: string | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const palette =\n variant === \"primary\"\n ? { bg: c.primary, border: c[\"primary-border\"], fg: c[\"primary-fg\"] }\n : variant === \"destructive\"\n ? { bg: c[\"danger-fill\"], border: c[\"danger-fill\"], fg: c[\"danger-fg\"] }\n : variant === \"ghost\"\n ? { bg: \"transparent\", border: \"transparent\", fg: c[\"fg-muted\"] }\n : { bg: c[\"surface-2\"], border: c.border, fg: c[\"fg-muted\"] };\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel ?? label}\n accessibilityState={{ disabled: Boolean(disabled), busy: Boolean(busy) }}\n disabled={disabled || busy}\n onPress={onPress}\n style={({ pressed }) => [\n {\n minHeight: size === \"form\" ? 36 : 32,\n minWidth: label ? undefined : 44,\n paddingHorizontal: label ? (size === \"form\" ? 12 : 10) : 0,\n borderRadius: theme.radius.md,\n borderWidth: variant === \"destructive\" ? 0 : 1,\n borderColor: palette.border,\n backgroundColor: palette.bg,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n opacity: disabled ? 0.5 : pressed ? 0.85 : 1,\n },\n style,\n ]}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.fg} />\n ) : icon ? (\n <Icon name={icon} size={14} color={palette.fg} />\n ) : null}\n {label ? (\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: palette.fg,\n }}\n >\n {label}\n </Text>\n ) : null}\n </Pressable>\n );\n}\n\n/** A 44pt square icon control (composer toolbar buttons). */\nexport function IconButton({\n icon,\n onPress,\n accessibilityLabel,\n tone = \"plain\",\n disabled,\n busy,\n children,\n}: {\n icon: NativeIconName;\n onPress?: (() => void) | undefined;\n accessibilityLabel: string;\n tone?: \"plain\" | \"primary\" | \"secondary\";\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n children?: ReactNode;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const framed = tone !== \"plain\";\n const fg = tone === \"primary\" ? c[\"primary-fg\"] : c[\"fg-muted\"];\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: Boolean(disabled), busy: Boolean(busy) }}\n disabled={disabled || busy}\n onPress={onPress}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 44,\n height: 44,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: framed ? 1 : 0,\n borderColor: tone === \"primary\" ? c[\"primary-border\"] : c.border,\n backgroundColor:\n tone === \"primary\"\n ? c.primary\n : tone === \"secondary\"\n ? c[\"surface-2\"]\n : pressed\n ? c.hover\n : \"transparent\",\n opacity: disabled ? 0.45 : pressed && framed ? 0.85 : 1,\n })}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={fg} />\n ) : (\n <Icon\n name={icon}\n size={icon === \"pause\" ? 14 : 16}\n color={fg}\n fill={icon === \"pause\" || icon === \"play\" ? fg : undefined}\n />\n )}\n {children}\n </Pressable>\n );\n}\n","import { useEffect, useId, useRef } from \"react\";\nimport { Platform } from \"react-native\";\nimport type { NativePickedFile } from \"../adapters\";\n\n/**\n * Image paste for the composer. React Native's iOS text views only paste\n * text; the package's native module lets inputs whose test id starts with\n * this prefix also take pasted images (screenshots, photos), which it writes\n * to temporary files and reports here as attachments.\n */\nexport const COMPOSER_PASTE_INPUT_PREFIX = \"opengeni-composer-input\";\n\ntype PastedImage = {\n uri: string;\n name: string;\n mimeType: string;\n size?: number | null;\n};\n\ntype PasteModule = {\n addListener(\n eventName: \"onPasteImages\",\n listener: (event: { inputId: string; files: PastedImage[] }) => void,\n ): { remove(): void };\n};\n\nfunction pasteModule(): PasteModule | null {\n if (Platform.OS !== \"ios\") return null;\n const registry = (globalThis as { expo?: { modules?: Record<string, unknown> } }).expo?.modules;\n const module = registry?.OpenGeniPaste as PasteModule | undefined;\n return module && typeof module.addListener === \"function\" ? module : null;\n}\n\nlet pasteCount = 0;\n\n/**\n * The test id to put on a composer input so it accepts pasted images, or\n * undefined where image paste is unavailable (Android, web, or a build without\n * the native module) or the host gave no handler.\n */\nexport function useComposerImagePaste(\n onPasteImages: ((files: NativePickedFile[]) => void) | undefined,\n): string | undefined {\n const reactId = useId();\n const handler = useRef(onPasteImages);\n handler.current = onPasteImages;\n const enabled = Boolean(onPasteImages) && pasteModule() !== null;\n const inputId = `${COMPOSER_PASTE_INPUT_PREFIX}-${reactId.replace(/[^a-zA-Z0-9]/g, \"\")}`;\n useEffect(() => {\n const module = pasteModule();\n if (!enabled || !module) return;\n const subscription = module.addListener(\"onPasteImages\", (event) => {\n if (event.inputId !== inputId || event.files.length === 0) return;\n handler.current?.(\n event.files.map((file) => ({\n id: `pasted-${Date.now()}-${(pasteCount += 1)}`,\n uri: file.uri,\n name: file.name,\n contentType: file.mimeType,\n sizeBytes: file.size ?? null,\n kind: \"image\" as const,\n previewUri: file.uri,\n })),\n );\n });\n return () => subscription.remove();\n }, [enabled, inputId]);\n return enabled ? inputId : undefined;\n}\n","import {\n defaultChatComposerMessages,\n type ChatComposerMessages,\n} from \"@opengeni/react/composer-messages\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { GlassView, isLiquidGlassAvailable } from \"expo-glass-effect\";\nimport { useEffect, useState, type ComponentRef, type ReactNode, type Ref } from \"react\";\nimport {\n AccessibilityInfo,\n ActivityIndicator,\n Platform,\n Pressable,\n Text,\n TextInput,\n View,\n type ViewStyle,\n} from \"react-native\";\nimport Animated, { useAnimatedKeyboard, useAnimatedStyle } from \"react-native-reanimated\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport type { NativeVoiceInput } from \"../voice-input\";\nimport type { NativePickedFile } from \"../adapters\";\nimport { useNativeTimelineMessages, type NativeTimelineMessages } from \"./messages\";\nimport { useComposerImagePaste } from \"./paste\";\nimport { composerAlternateSend, composerTrailingMode } from \"./composer-state\";\n\n/* ----------------------------------------------------------------------------\n The session composer, designed for each platform rather than copied from\n the web card. It keeps the web composer's behaviour and copy (the shared\n message catalog): one field, leading actions, the model pill, and a single\n trailing action that sends, pauses a running workstream, or resumes it.\n\n iOS 26+: a floating Liquid Glass surface the conversation scrolls under.\n Older iOS or Reduce Transparency: the same shape on a solid raised surface.\n Android: a Material 3 filled container (no glass, no border).\n -------------------------------------------------------------------------- */\n\nexport interface SessionComposerProps {\n value: string;\n onChangeText: (value: string) => void;\n onSend: () => void;\n canSend: boolean;\n sending?: boolean | undefined;\n placeholder?: string | undefined;\n /** Run state drives the trailing action: pause while running, resume when paused. */\n running?: boolean | undefined;\n /**\n * The other way to send while the agent works, shown beside Send once there\n * is something to send: `queue` when Send steers, `steer` when Send queues,\n * `null` when Send is not taking its busy path. Pass the composer's\n * `alternateSend` and `sendAlternate`; omit to offer Send only.\n */\n alternateSend?: \"queue\" | \"steer\" | null | undefined;\n onAlternateSend?: (() => void) | undefined;\n paused?: boolean | undefined;\n onPause?: (() => void) | undefined;\n onResume?: (() => void) | undefined;\n pauseBusy?: boolean | undefined;\n /** Leading toolbar content; defaults to an attach button when `onAttach` is set. */\n renderLeading?: (() => ReactNode) | undefined;\n onAttach?: (() => void) | undefined;\n /** Content between leading actions and the trailing action (model/options pill). */\n options?: ReactNode;\n /** Rendered inside the surface above the field (attachment chips, annotations). */\n header?: ReactNode;\n /** Rendered above the surface (queue, approvals, status dock). */\n above?: ReactNode;\n bottomInset?: number | undefined;\n /** Distance from the composer's container bottom to the window bottom (tab bars). */\n keyboardBottomOffset?: number | undefined;\n autoFocus?: boolean | undefined;\n /** Horizontal page inset around the surface (default 12). */\n inset?: number | undefined;\n /** Lift above the keyboard (bottom-docked composer). Off for an inline card. */\n liftWithKeyboard?: boolean | undefined;\n /**\n * Float over the conversation (absolute, transparent around the surface) so\n * content scrolls beneath it. The host reads the occupied height from\n * `onHeightChange` to inset its scroll content.\n */\n floating?: boolean | undefined;\n onHeightChange?: ((height: number) => void) | undefined;\n /** Rendered inside the surface under the header (draft conflict, notices). */\n below?: ReactNode;\n /** The message field, for hosts that focus it (queue Edit, replies). */\n inputRef?: Ref<ComponentRef<typeof TextInput>> | undefined;\n /** The shared composer catalog; hosts translate by overriding entries. */\n messages?: Partial<ChatComposerMessages> | undefined;\n /** Called when the trailing action fires (host haptics). */\n onActionFeedback?: (() => void) | undefined;\n /** Dictation: a mic beside the leading actions, and the recording strip while it runs. */\n voice?: NativeVoiceInput | undefined;\n /** Images pasted into the field (iOS), added as attachments. */\n onPasteImages?: ((files: NativePickedFile[]) => void) | undefined;\n /**\n * A voice call with the agent from the composer itself. With nothing to\n * send and nothing to pause or resume, the trailing action becomes the call\n * button (as native chat apps offer voice), so a new conversation can start\n * as a call. `active` marks that this conversation is already on a call:\n * the button then returns to it.\n */\n call?: ComposerCall | undefined;\n}\n\nexport interface ComposerCall {\n onPress: () => void;\n /** This conversation is on a call; the button returns to it. */\n active?: boolean | undefined;\n /** Starting the call (creating its conversation, connecting). */\n busy?: boolean | undefined;\n disabled?: boolean | undefined;\n}\n\n/** Whether to draw Liquid Glass: iOS 26+, the native module present, transparency allowed. */\nexport function useLiquidGlass(): boolean {\n const [reduceTransparency, setReduceTransparency] = useState(false);\n useEffect(() => {\n if (Platform.OS !== \"ios\") return;\n void AccessibilityInfo.isReduceTransparencyEnabled().then(setReduceTransparency);\n const subscription = AccessibilityInfo.addEventListener(\n \"reduceTransparencyChanged\",\n setReduceTransparency,\n );\n return () => subscription.remove();\n }, []);\n if (Platform.OS !== \"ios\" || reduceTransparency) return false;\n try {\n return isLiquidGlassAvailable();\n } catch {\n return false;\n }\n}\n\n/**\n * A floating surface for composer-adjacent chrome: glass on iOS 26, a solid\n * raised surface elsewhere.\n */\nexport function ComposerSurface({\n children,\n radius,\n style,\n}: {\n children: ReactNode;\n radius: number;\n style?: ViewStyle | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const glass = useLiquidGlass();\n if (glass) {\n // Hosts must keep this surface's ancestors free of animated opacity: iOS\n // does not render glass that was mounted beneath a fading parent.\n // The glass keeps the appearance it was created with, so a change of\n // light or dark mounts a fresh one.\n return (\n <GlassView\n key={theme.scheme}\n glassEffectStyle=\"regular\"\n colorScheme={theme.scheme}\n style={[{ borderRadius: radius }, style]}\n >\n {children}\n </GlassView>\n );\n }\n const android = Platform.OS === \"android\";\n return (\n <View\n style={[\n {\n borderRadius: radius,\n // Material 3 surfaceContainerHigh: a filled tonal surface, no outline.\n backgroundColor: android ? c[\"surface-2\"] : c[\"surface-1\"],\n ...(android\n ? null\n : {\n borderWidth: 0.5,\n borderColor: c.border,\n shadowColor: \"#000\",\n shadowOpacity: theme.scheme === \"dark\" ? 0 : 0.08,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 4 },\n }),\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n}\n\nexport function SessionComposer(props: SessionComposerProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const ios = Platform.OS === \"ios\";\n const pasteInputId = useComposerImagePaste(props.onPasteImages);\n const [height, setHeight] = useState(22);\n const empty = !props.value;\n useEffect(() => {\n if (empty) setHeight(22);\n }, [empty]);\n // Track the keyboard directly: React Native's KeyboardAvoidingView mis-measures\n // inside modals and overlays; the animated keyboard height does not.\n const keyboard = useAnimatedKeyboard();\n const floating = props.floating ?? false;\n // Only Liquid Glass lets the conversation scroll beneath the composer, and\n // then under a scroll-edge fade like the system bars: the glass picks up the\n // page color, never legible text behind or below it. A solid surface\n // (Android, older iOS) sits on an opaque band down to the screen edge.\n const glass = useLiquidGlass();\n const seeThrough = floating && glass;\n // Floating: iOS tucks the glass toward the home indicator like system bars;\n // Android keeps clear of the gesture handle.\n const restingBottom = floating\n ? ios\n ? Math.max(10, (props.bottomInset ?? 0) - 4)\n : (props.bottomInset ?? 0) + 8\n : Math.max(16, (props.bottomInset ?? 0) + 4);\n const offset = props.keyboardBottomOffset ?? 0;\n const liftWithKeyboard = props.liftWithKeyboard ?? true;\n const lift = useAnimatedStyle(() => {\n if (!liftWithKeyboard) return { paddingBottom: restingBottom };\n const lifted = keyboard.height.value - offset;\n return { paddingBottom: lifted > 0 ? lifted + 8 : restingBottom };\n });\n const t = useOpenGeniText();\n const messages = { ...defaultChatComposerMessages(t), ...props.messages };\n const fieldSize = ios ? 17 : 16;\n const compact = !props.options;\n const voice = props.voice?.available ? props.voice : undefined;\n const capturing =\n voice !== undefined &&\n (voice.status === \"recording\" ||\n voice.status === \"requesting-permission\" ||\n voice.status === \"transcribing\");\n const attach = props.renderLeading ? (\n props.renderLeading()\n ) : props.onAttach ? (\n <ToolbarButton icon=\"plus\" accessibilityLabel={messages.attachFiles} onPress={props.onAttach} />\n ) : null;\n const leading =\n attach || voice ? (\n <>\n {attach}\n {voice ? (\n <ToolbarButton icon=\"mic\" accessibilityLabel={m.dictate} onPress={voice.start} />\n ) : null}\n </>\n ) : null;\n const field = (inline: boolean) => (\n <TextInput\n ref={props.inputRef}\n testID={pasteInputId}\n accessibilityLabel={messages.inputLabel}\n value={props.value}\n onChangeText={props.onChangeText}\n placeholder={\n props.placeholder ?? (props.paused ? messages.pausedPlaceholder : m.followUpPlaceholder)\n }\n placeholderTextColor={c[\"fg-subtle\"]}\n multiline\n autoFocus={props.autoFocus}\n selectionColor={c.accent}\n onContentSizeChange={(event) =>\n setHeight(Math.min(150, Math.max(22, event.nativeEvent.contentSize.height)))\n }\n style={{\n ...fontStyle(theme),\n fontSize: fieldSize,\n lineHeight: 22,\n color: c.fg,\n ...(inline\n ? { paddingTop: 7, paddingBottom: 7, paddingHorizontal: 6, minHeight: 36 }\n : { paddingTop: 14, paddingBottom: 2, paddingHorizontal: 16, minHeight: 40 }),\n // The inline field sizes itself; the stacked one tracks its content.\n // (iOS never shrinks a self-sized multiline field, so an empty one is pinned.)\n // A cleared field (after Send) returns to one line: iOS does not report\n // the smaller content size, so the last height would otherwise stick.\n height: ios\n ? inline\n ? props.value\n ? undefined\n : 36\n : (props.value ? height : 22) + 16\n : undefined,\n maxHeight: 166,\n textAlignVertical: inline ? \"center\" : \"top\",\n }}\n />\n );\n return (\n <Animated.View\n pointerEvents={floating ? \"box-none\" : \"auto\"}\n onLayout={(event) => props.onHeightChange?.(event.nativeEvent.layout.height)}\n style={[\n {\n paddingHorizontal: props.inset ?? 12,\n paddingTop: 6,\n gap: 8,\n backgroundColor: seeThrough ? \"transparent\" : c.bg,\n },\n floating ? { position: \"absolute\", left: 0, right: 0, bottom: 0 } : null,\n lift,\n ]}\n >\n {seeThrough ? <ScrollEdgeFade color={c.bg} /> : null}\n {props.above ? <View pointerEvents=\"box-none\">{props.above}</View> : null}\n <ComposerSurface radius={compact ? 22 : 24}>\n {props.header}\n {props.below}\n {voice?.hasSavedRecording && voice.status === \"error\" ? (\n <SavedRecordingStrip voice={voice} />\n ) : voice?.status === \"error\" && voice.error ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.composer.errorDismiss\", { error: voice.error })}\n onPress={voice.clearError}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingTop: 10,\n }}\n >\n <Icon name=\"circle-alert\" size={14} color={c[\"status-failed\"]} />\n <Text\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: 13,\n lineHeight: 18,\n color: c[\"status-failed\"],\n }}\n >\n {voice.error}\n </Text>\n <Icon name=\"x\" size={14} color={c[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n {capturing && voice ? (\n <VoiceStrip voice={voice} />\n ) : compact ? (\n // No options to show: one row, as native messaging apps lay it out.\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-end\",\n paddingHorizontal: 5,\n paddingVertical: 5,\n gap: 2,\n }}\n >\n {leading}\n <View style={{ flex: 1, minWidth: 0 }}>{field(true)}</View>\n <View style={{ paddingBottom: 0, flexDirection: \"row\", alignItems: \"center\", gap: 6 }}>\n <AlternateSendAction {...props} messages={messages} />\n <TrailingAction {...props} messages={messages} />\n </View>\n </View>\n ) : (\n <>\n {field(false)}\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingLeft: 6,\n paddingRight: 8,\n paddingBottom: 8,\n minHeight: 44,\n gap: 2,\n }}\n >\n {leading}\n <View style={{ flex: 1, flexDirection: \"row\", alignItems: \"center\", minWidth: 0 }}>\n {props.options}\n </View>\n <AlternateSendAction {...props} messages={messages} />\n <TrailingAction {...props} messages={messages} />\n </View>\n </>\n )}\n </ComposerSurface>\n </Animated.View>\n );\n}\n\n/** How far the scroll-edge fade reaches above the floating composer. */\nconst SCROLL_EDGE_PX = 24;\n/** Page-color opacity of each band in the fade, top to bottom. */\nconst SCROLL_EDGE_STEPS = [0.1, 0.28, 0.48, 0.68, 0.84, 0.95] as const;\n\n/**\n * The scroll-edge effect under a floating glass composer: the conversation\n * fades into the page color just above the composer and is fully covered\n * behind and below it, down to the screen edge (or the keyboard).\n *\n * Plain views, not an SVG gradient: a percentage-sized SVG inside this\n * absolutely positioned layer painted nothing on device, which left the\n * conversation legible under and below the glass.\n */\nfunction ScrollEdgeFade({ color }: { color: string }) {\n return (\n <View\n pointerEvents=\"none\"\n style={{ position: \"absolute\", top: -SCROLL_EDGE_PX, left: 0, right: 0, bottom: 0 }}\n >\n <View style={{ height: SCROLL_EDGE_PX }}>\n {SCROLL_EDGE_STEPS.map((alpha) => (\n <View key={alpha} style={{ flex: 1, backgroundColor: withAlpha(color, alpha) }} />\n ))}\n </View>\n <View style={{ flex: 1, backgroundColor: color }} />\n </View>\n );\n}\n\n/** A quiet round toolbar button (the web composer's leading actions). */\nexport function ToolbarButton({\n icon,\n accessibilityLabel,\n onPress,\n}: {\n icon: NativeIconName;\n accessibilityLabel: string;\n onPress: () => void;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n onPress={onPress}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: pressed ? theme.colors.hover : \"transparent\",\n })}\n >\n <Icon name={icon} size={20} color={theme.colors[\"fg-muted\"]} />\n </Pressable>\n );\n}\n\nconst LEVEL_BARS = 28;\n\nfunction formatDictationTime(seconds: number): string {\n const whole = Math.max(0, Math.floor(seconds));\n return `${Math.floor(whole / 60)}:${String(whole % 60).padStart(2, \"0\")}`;\n}\n\n/**\n * A recording whose text could not be fetched yet. It stays on the device:\n * Retry sends the same audio again; Discard is the only way to drop it.\n */\nfunction SavedRecordingStrip({ voice }: { voice: NativeVoiceInput }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n return (\n <View style={{ gap: 6, paddingHorizontal: 16, paddingTop: 10 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 8 }}>\n <Icon name=\"audio-lines\" size={14} color={c[\"status-waiting\"]} />\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{ ...fontStyle(theme), flex: 1, fontSize: 13, lineHeight: 18, color: c.fg }}\n >\n {voice.error ?? m.recordingSaved}\n </Text>\n </View>\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 6 }}>\n <Button label={m.discard} variant=\"ghost\" onPress={voice.cancel} />\n <Button label={m.retry} variant=\"primary\" onPress={voice.retry} />\n </View>\n </View>\n );\n}\n\n/**\n * Dictation in progress, in place of the field: cancel, a live level meter with\n * the elapsed time, and stop (which transcribes into the draft).\n */\nfunction VoiceStrip({ voice }: { voice: NativeVoiceInput }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [levels, setLevels] = useState<number[]>(() => Array<number>(LEVEL_BARS).fill(0));\n const recording = voice.status === \"recording\";\n const transcribing = voice.status === \"transcribing\";\n useEffect(() => {\n if (!recording) return;\n setLevels((current) => [...current.slice(1), voice.level ?? 0.15]);\n }, [recording, voice.durationSeconds, voice.level]);\n const remaining =\n voice.maxDurationSeconds !== null && voice.maxDurationSeconds - voice.durationSeconds <= 10\n ? ` · ${Math.max(0, Math.ceil(voice.maxDurationSeconds - voice.durationSeconds))}s left`\n : \"\";\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 6,\n paddingVertical: 6,\n minHeight: 56,\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.cancelDictation}\n onPress={voice.cancel}\n disabled={transcribing}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: pressed ? c.hover : \"transparent\",\n opacity: transcribing ? 0.4 : 1,\n })}\n >\n <Icon name=\"x\" size={18} color={c[\"fg-muted\"]} />\n </Pressable>\n <View\n accessible\n accessibilityLiveRegion=\"polite\"\n accessibilityLabel={\n transcribing ? m.transcribing : m.recording(formatDictationTime(voice.durationSeconds))\n }\n style={{ flex: 1, flexDirection: \"row\", alignItems: \"center\", gap: 10, minWidth: 0 }}\n >\n {transcribing ? (\n <>\n <ActivityIndicator size=\"small\" color={c[\"fg-muted\"]} />\n <Text style={{ ...fontStyle(theme), fontSize: 15, color: c[\"fg-muted\"] }}>\n {m.transcribing}…\n </Text>\n </>\n ) : (\n <>\n <View\n style={{\n flex: 1,\n height: 28,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n overflow: \"hidden\",\n }}\n >\n {levels.map((value, index) => (\n <View\n // Fixed slots: the meter scrolls by shifting values, not keys.\n // oxlint-disable-next-line react/no-array-index-key\n key={index}\n style={{\n width: 3,\n borderRadius: 1.5,\n height: 4 + Math.round(value * 24),\n backgroundColor: index === LEVEL_BARS - 1 ? c.fg : c[\"fg-subtle\"],\n }}\n />\n ))}\n </View>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: 14,\n color: c[\"fg-muted\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {formatDictationTime(voice.durationSeconds)}\n {remaining}\n </Text>\n </>\n )}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.composer.stopAndTranscribe\")}\n onPress={voice.stop}\n disabled={!recording}\n hitSlop={6}\n style={({ pressed }) => ({\n width: 34,\n height: 34,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: recording ? c.accent : withAlpha(c.fg, 0.08),\n opacity: pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.94 : 1 }],\n })}\n >\n <Icon\n name=\"check\"\n size={18}\n strokeWidth={2.5}\n color={recording ? c[\"accent-fg\"] : c[\"fg-subtle\"]}\n />\n </Pressable>\n </View>\n );\n}\n\n/**\n * Queue or Steer beside Send while the agent works, so a phone (no\n * Cmd/Ctrl+Enter) always has both choices. Shown only with something to send.\n */\nfunction AlternateSendAction(props: SessionComposerProps & { messages: ChatComposerMessages }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const c = theme.colors;\n const alternate = composerAlternateSend({\n trailing: composerTrailingMode({\n value: props.value,\n canSend: props.canSend,\n paused: props.paused,\n running: props.running,\n canResume: Boolean(props.onResume),\n canPause: Boolean(props.onPause),\n canCall: Boolean(props.call),\n }),\n alternateSend: props.alternateSend,\n available: props.onAlternateSend !== undefined,\n });\n const onAlternateSend = props.onAlternateSend;\n if (alternate === null || !onAlternateSend) return null;\n const label =\n alternate === \"queue\"\n ? (props.messages.queueLabel ?? t(\"composerMessages.queue\"))\n : (props.messages.steerLabel ?? t(\"composerMessages.steer\"));\n const hint =\n alternate === \"queue\"\n ? (props.messages.queueTitle ?? t(\"composerMessages.queueRunsAfterCurrentWork\"))\n : (props.messages.steerTitle ?? t(\"composerMessages.steerReadsItSoon\"));\n const disabled = !props.canSend || Boolean(props.sending);\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityHint={hint}\n accessibilityState={{ disabled }}\n disabled={disabled}\n hitSlop={6}\n onPress={() => {\n props.onActionFeedback?.();\n onAlternateSend();\n }}\n style={({ pressed }) => ({\n height: 34,\n paddingHorizontal: 14,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: withAlpha(c.fg, 0.08),\n opacity: disabled ? 0.42 : pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.96 : 1 }],\n })}\n >\n <Text style={{ ...fontStyle(theme, 600), fontSize: 14, lineHeight: 18, color: c.fg }}>\n {label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * One trailing control, as native chat apps do: send when there is something\n * to send (a message to a running agent joins the queue), otherwise pause a\n * running workstream or resume a paused one; an idle empty composer offers a\n * call when the host supplies one, else a quiet, disabled send.\n */\nfunction TrailingAction(props: SessionComposerProps & { messages: ChatComposerMessages }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const mode = composerTrailingMode({\n value: props.value,\n canSend: props.canSend,\n paused: props.paused,\n running: props.running,\n canResume: Boolean(props.onResume),\n canPause: Boolean(props.onPause),\n canCall: Boolean(props.call),\n });\n if (mode === \"call\" && props.call) return <CallAction call={props.call} messages={m} />;\n const active = mode !== \"idle\";\n const busy = mode === \"send\" ? props.sending : mode === \"idle\" ? false : props.pauseBusy;\n const disabled = mode === \"send\" ? !props.canSend : !active;\n // A disabled send (text typed, but the host cannot send yet) looks disabled too.\n const lit = active && !disabled;\n const icon: NativeIconName = mode === \"pause\" ? \"pause\" : mode === \"resume\" ? \"play\" : \"arrow-up\";\n const label =\n mode === \"pause\"\n ? props.messages.pauseAriaLabel\n : mode === \"resume\"\n ? props.messages.resumeThisWorkstream\n : props.messages.sendMessageAriaLabel;\n const fg = lit ? c[\"accent-fg\"] : c[\"fg-subtle\"];\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled, busy: Boolean(busy) }}\n disabled={disabled || busy}\n hitSlop={6}\n onPress={() => {\n props.onActionFeedback?.();\n if (mode === \"send\") props.onSend();\n else if (mode === \"pause\") props.onPause?.();\n else if (mode === \"resume\") props.onResume?.();\n }}\n style={({ pressed }) => ({\n width: 34,\n height: 34,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: lit ? c.accent : withAlpha(c.fg, 0.08),\n opacity: pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.94 : 1 }],\n })}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={fg} />\n ) : (\n <Icon\n name={icon}\n size={icon === \"arrow-up\" ? 18 : 14}\n strokeWidth={icon === \"arrow-up\" ? 2.5 : 2}\n color={fg}\n fill={icon === \"arrow-up\" ? undefined : fg}\n />\n )}\n </Pressable>\n );\n}\n\n/**\n * The web model pill (\"6 Luna High ⌄\"): a quiet toolbar chip that opens host\n * options. As on web, the muted detail (reasoning effort) gives way first, so a\n * long name never pushes it into a clipped \"Ext…\".\n */\nexport function ComposerPill({\n label,\n detail,\n onPress,\n leading,\n fast = false,\n ultrafast = false,\n}: {\n label: string;\n /** Secondary text after the label (the reasoning effort); truncates before the label. */\n detail?: string | null | undefined;\n /** Fast latency is on: a filled bolt after the name, as on the web pill. */\n fast?: boolean | undefined;\n /** Ultrafast latency is on: two filled bolts. Takes precedence over `fast`. */\n ultrafast?: boolean | undefined;\n onPress?: (() => void) | undefined;\n /** Shown before the label (the web picker's maker mark). */\n leading?: ReactNode;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const speedLabel = ultrafast\n ? t(\"native.timeline.composer.ultrafast\")\n : fast\n ? t(\"native.timeline.composer.fast\")\n : null;\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={[label, detail, speedLabel].filter(Boolean).join(\", \")}\n onPress={onPress}\n disabled={!onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n flexShrink: 1,\n maxWidth: 260,\n minHeight: 44,\n paddingHorizontal: 8,\n borderRadius: 999,\n backgroundColor: pressed ? theme.colors[\"surface-2\"] : \"transparent\",\n })}\n >\n {leading}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors.fg,\n flexShrink: 1,\n }}\n >\n {label}\n </Text>\n {detail ? (\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n flexShrink: 9999,\n }}\n >\n {detail}\n </Text>\n ) : null}\n {fast || ultrafast ? (\n <Icon name=\"zap\" size={13} color={theme.colors.fg} fill={theme.colors.fg} />\n ) : null}\n {ultrafast ? (\n <Icon name=\"zap\" size={13} color={theme.colors.fg} fill={theme.colors.fg} />\n ) : null}\n <Icon name=\"chevron-down\" size={12} color={theme.colors[\"fg-muted\"]} />\n </Pressable>\n );\n}\n\n/**\n * The empty composer's call button: the web composer's voice control\n * (audio lines), lit like send so it reads as the composer's main action. On a\n * call it turns call-green and returns to the call.\n */\nfunction CallAction({ call, messages }: { call: ComposerCall; messages: NativeTimelineMessages }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const active = call.active ?? false;\n const busy = call.busy ?? false;\n const disabled = call.disabled ?? false;\n const background = disabled\n ? withAlpha(c.fg, 0.08)\n : active\n ? Platform.OS === \"ios\"\n ? \"#34C759\"\n : \"#1E8E3E\"\n : c.accent;\n const fg = disabled ? c[\"fg-subtle\"] : active ? \"#FFFFFF\" : c[\"accent-fg\"];\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={active ? messages.returnToCall : messages.startCall}\n accessibilityState={{ disabled, busy }}\n disabled={disabled || busy}\n hitSlop={6}\n onPress={call.onPress}\n style={({ pressed }) => ({\n width: 34,\n height: 34,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: background,\n opacity: pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.94 : 1 }],\n })}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={fg} />\n ) : (\n <Icon name=\"audio-lines\" size={18} strokeWidth={2.25} color={fg} />\n )}\n </Pressable>\n );\n}\n","import type { FeedbackSentiment } from \"@opengeni/sdk\";\nimport {\n feedbackDialogCopy,\n feedbackSentimentLabel,\n feedbackSubmission,\n loadSessionFeedback,\n turnRatingsFromFeedback,\n type FeedbackClient,\n} from \"@opengeni/react/session-feedback-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n Text,\n TextInput,\n View,\n} from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon } from \"./icon\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/* ----------------------------------------------------------------------------\n Reply feedback, as the web timeline offers it beside Copy: thumbs up/down\n on a finished agent reply, an optional comment in a sheet, and the saved\n rating shown as pressed. The read, ratings and retry-safe submission are\n the shared session-feedback model.\n -------------------------------------------------------------------------- */\n\nexport interface TurnFeedbackTarget {\n client: FeedbackClient;\n workspaceId: string;\n sessionId: string;\n}\n\n/** Saved reply ratings for a session, loaded once with recovery. */\nexport function useTurnRatings(target: TurnFeedbackTarget | null | undefined) {\n const [ratings, setRatings] = useState<Record<string, FeedbackSentiment>>({});\n const client = target?.client;\n const workspaceId = target?.workspaceId;\n const sessionId = target?.sessionId;\n useEffect(() => {\n setRatings({});\n if (!client || !workspaceId || !sessionId) return;\n return loadSessionFeedback(client, workspaceId, sessionId, ({ feedback }) => {\n const loaded = turnRatingsFromFeedback(feedback);\n // Ratings given in this view win over the (older) loaded snapshot.\n setRatings((saved) => ({ ...loaded, ...saved }));\n });\n }, [client, workspaceId, sessionId]);\n const rate = useCallback((turnId: string, sentiment: FeedbackSentiment) => {\n setRatings((saved) => ({ ...saved, [turnId]: sentiment }));\n }, []);\n return { ratings, rate };\n}\n\nexport function TurnFeedbackButtons(props: {\n target: TurnFeedbackTarget;\n turnId: string;\n saved: FeedbackSentiment | undefined;\n onRated: (sentiment: FeedbackSentiment) => void;\n}) {\n const [choice, setChoice] = useState<FeedbackSentiment | null>(null);\n return (\n <>\n <Thumb\n sentiment=\"positive\"\n pressed={props.saved === \"positive\"}\n onPress={() => setChoice(\"positive\")}\n />\n <Thumb\n sentiment=\"negative\"\n pressed={props.saved === \"negative\"}\n onPress={() => setChoice(\"negative\")}\n />\n <FeedbackSheet\n target={props.target}\n turnId={props.turnId}\n sentiment={choice}\n onClose={() => setChoice(null)}\n onSubmitted={(sentiment) => {\n props.onRated(sentiment);\n setChoice(null);\n }}\n />\n </>\n );\n}\n\nfunction Thumb(props: { sentiment: FeedbackSentiment; pressed: boolean; onPress: () => void }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const label = feedbackSentimentLabel(t, props.sentiment);\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ selected: props.pressed }}\n onPress={props.onPress}\n style={({ pressed }) => ({\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: theme.radius.sm,\n backgroundColor: props.pressed || pressed ? theme.colors[\"surface-2\"] : \"transparent\",\n })}\n >\n <Icon\n name={props.sentiment === \"positive\" ? \"thumbs-up\" : \"thumbs-down\"}\n size={14}\n color={props.pressed ? theme.colors.fg : theme.colors[\"fg-subtle\"]}\n />\n </Pressable>\n );\n}\n\n/** The web feedback dialog as a native page sheet. */\nexport function FeedbackSheet(props: {\n target: TurnFeedbackTarget;\n turnId?: string | undefined;\n sentiment: FeedbackSentiment | null;\n onClose: () => void;\n onSubmitted: (sentiment: FeedbackSentiment) => void;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [comment, setComment] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const pending = useRef<ReturnType<typeof feedbackSubmission> | null>(null);\n const t = useOpenGeniText();\n const copy = feedbackDialogCopy(t, { sessionId: props.target.sessionId, turnId: props.turnId });\n const open = props.sentiment !== null;\n const close = () => {\n if (busy) return;\n setError(null);\n props.onClose();\n };\n const submit = async () => {\n if (busy || !props.sentiment) return;\n pending.current = feedbackSubmission(\n {\n sessionId: props.target.sessionId,\n turnId: props.turnId,\n sentiment: props.sentiment,\n comment: comment || undefined,\n },\n pending.current,\n () => globalThis.crypto.randomUUID(),\n );\n setBusy(true);\n setError(null);\n try {\n await props.target.client.createFeedback(props.target.workspaceId, pending.current);\n pending.current = null;\n setComment(\"\");\n props.onSubmitted(props.sentiment);\n } catch (caught) {\n const detail =\n caught instanceof Error && caught.message\n ? ` ${caught.message}`\n : ` ${t(\"native.timeline.feedback.tryAgain\")}`;\n setError(t(\"native.timeline.feedback.couldnTSendFeedbackDetail\", { detail }));\n } finally {\n setBusy(false);\n }\n };\n return (\n <Modal\n visible={open}\n animationType=\"slide\"\n presentationStyle={Platform.OS === \"ios\" ? \"pageSheet\" : undefined}\n transparent={Platform.OS !== \"ios\"}\n onRequestClose={close}\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n style={{\n flex: 1,\n justifyContent: Platform.OS === \"ios\" ? \"flex-start\" : \"flex-end\",\n backgroundColor: Platform.OS === \"ios\" ? c.bg : \"rgba(0, 0, 0, 0.4)\",\n }}\n >\n <View\n style={{\n backgroundColor: c.bg,\n padding: 20,\n gap: 12,\n borderTopLeftRadius: Platform.OS === \"ios\" ? 0 : theme.radius.xl,\n borderTopRightRadius: Platform.OS === \"ios\" ? 0 : theme.radius.xl,\n }}\n >\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}\n >\n {copy.title}\n </Text>\n <Text style={{ ...fontStyle(theme), fontSize: 14, lineHeight: 20, color: c[\"fg-muted\"] }}>\n {copy.description}\n </Text>\n {props.sentiment ? (\n <Text style={{ ...fontStyle(theme), fontSize: 14, color: c.fg }}>\n {feedbackSentimentLabel(t, props.sentiment)}\n </Text>\n ) : null}\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c.fg }}>\n {t(\"native.timeline.feedback.commentOptional\")}\n </Text>\n <TextInput\n accessibilityLabel={t(\"native.timeline.feedback.commentOptional\")}\n value={comment}\n onChangeText={setComment}\n maxLength={4000}\n editable={!busy}\n multiline\n style={{\n ...fontStyle(theme),\n minHeight: 110,\n fontSize: 16,\n lineHeight: 22,\n color: c.fg,\n textAlignVertical: \"top\",\n padding: 12,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n }}\n />\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...fontStyle(theme), fontSize: 13, color: c[\"status-failed\"] }}\n >\n {error}\n </Text>\n ) : null}\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 8, marginTop: 4 }}>\n <Button label={m.cancel} variant=\"ghost\" onPress={close} disabled={busy} />\n <Button\n label={busy ? m.sending : m.sendFeedback}\n variant=\"primary\"\n onPress={() => void submit()}\n disabled={busy}\n busy={busy}\n />\n </View>\n </View>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n","import { View } from \"react-native\";\nimport { Icon } from \"./icon\";\nimport { useNativeTimelineTheme } from \"./theme\";\n\n/** The question form's radio (single) or checkbox (multi) mark. */\nexport function Selector({ multi, selected }: { multi: boolean; selected: boolean }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <View\n style={{\n marginTop: 2,\n width: 14,\n height: 14,\n borderRadius: multi ? 3 : 7,\n borderWidth: 1,\n borderColor: selected ? c.accent : c[\"fg-muted\"],\n backgroundColor: selected && multi ? c.accent : c[\"surface-1\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {selected ? (\n multi ? (\n <Icon name=\"check\" size={10} color={c[\"accent-fg\"]} strokeWidth={3} />\n ) : (\n <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: c.accent }} />\n )\n ) : null}\n </View>\n );\n}\n","import type { HumanInputQuestion, HumanInputSecretSaveTo } from \"@opengeni/sdk\";\nimport { useEffect, useRef, useState, type ComponentRef } from \"react\";\nimport { Pressable, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon } from \"./icon\";\nimport { Selector } from \"./selector\";\nimport {\n SECRET_SAVE_TO_OPTIONS,\n secretInputTraits,\n secretPatternMismatch,\n secretUsernameTraits,\n type SecretDraft,\n type SecretFieldMessages,\n} from \"./secret-field-model\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The secret question's controls: optional username, a secure value field\n (show / hide, OS autofill traits from the spec), Generate, the soft\n looksLike / pattern hints, and Save to. The value never enters React\n state: the input is uncontrolled and each change goes to the form's ref.\n -------------------------------------------------------------------------- */\n\nexport interface SecretQuestionFieldProps {\n question: HumanInputQuestion;\n draft: SecretDraft;\n onDraft: (next: (draft: SecretDraft) => SecretDraft) => void;\n /** Receives every keystroke; the form keeps it in a ref, not state. */\n onValue: (value: string) => void;\n /** The form calls this to empty the field after a successful submit. */\n registerClear: (clear: (() => void) | null) => void;\n messages: SecretFieldMessages;\n error?: string | undefined;\n disabled: boolean;\n}\n\nexport function SecretQuestionField({\n question,\n draft,\n onDraft,\n onValue,\n registerClear,\n messages,\n error,\n disabled,\n}: SecretQuestionFieldProps) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const spec = question.secret;\n const traits = secretInputTraits(spec);\n const input = useRef<ComponentRef<typeof TextInput>>(null);\n const [revealed, setRevealed] = useState(false);\n const [mismatch, setMismatch] = useState(false);\n const defaultSaveTo = spec?.saveTo ?? \"user\";\n\n useEffect(() => {\n registerClear(() => {\n input.current?.clear();\n setMismatch(false);\n setRevealed(false);\n });\n return () => registerClear(null);\n }, [registerClear]);\n\n const change = (text: string) => {\n onValue(text);\n const next = secretPatternMismatch(spec?.pattern, text);\n setMismatch((current) => (current === next ? current : next));\n };\n const generate = () => {\n input.current?.clear();\n onValue(\"\");\n setMismatch(false);\n setRevealed(false);\n onDraft((current) => ({ ...current, generate: true }));\n };\n const undo = () => onDraft((current) => ({ ...current, generate: false }));\n\n const label = { ...fontStyle(theme, 500), fontSize: theme.size.sm, lineHeight: 18, color: c.fg };\n const note = { ...fontStyle(theme), fontSize: theme.size.xs, lineHeight: 16 };\n const frame = {\n minHeight: 44,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n };\n const valueFrame = { ...frame, borderColor: error ? c[\"status-failed\"] : c.border };\n const text = { ...fontStyle(theme), fontSize: theme.size.sm, color: c.fg };\n\n return (\n <View style={{ gap: 10 }}>\n {spec?.username ? (\n <View style={{ gap: 6 }}>\n <Text style={label}>{spec.username.prompt}</Text>\n <TextInput\n {...secretUsernameTraits}\n accessibilityLabel={spec.username.prompt}\n editable={!disabled}\n value={draft.username}\n onChangeText={(username) => onDraft((current) => ({ ...current, username }))}\n returnKeyType=\"next\"\n onSubmitEditing={() => input.current?.focus()}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{ ...frame, ...text, paddingHorizontal: 10 }}\n />\n </View>\n ) : null}\n\n {draft.generate ? (\n <View\n style={{\n ...valueFrame,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingLeft: 10,\n paddingRight: 4,\n }}\n >\n <Icon name=\"sparkles\" size={14} color={c.accent} />\n <Text accessibilityLiveRegion=\"polite\" style={{ ...text, flex: 1 }}>\n {messages.generated}\n </Text>\n <Button label={messages.undo} variant=\"ghost\" disabled={disabled} onPress={undo} />\n </View>\n ) : (\n <View\n style={{ ...valueFrame, flexDirection: \"row\", alignItems: \"center\", paddingLeft: 10 }}\n >\n <Icon name=\"lock\" size={14} color={c[\"fg-subtle\"]} />\n <TextInput\n ref={input}\n testID={`secret-input-${question.id}`}\n accessibilityLabel={question.label ?? question.prompt}\n accessibilityHint={spec?.looksLike ? messages.looksLike(spec.looksLike) : undefined}\n editable={!disabled}\n secureTextEntry={!revealed}\n textContentType={traits.textContentType}\n autoComplete={traits.autoComplete}\n importantForAutofill={traits.importantForAutofill}\n keyboardType={traits.keyboardType}\n passwordRules={traits.passwordRules}\n autoCorrect={traits.autoCorrect}\n autoCapitalize={traits.autoCapitalize}\n spellCheck={traits.spellCheck}\n returnKeyType=\"done\"\n onChangeText={change}\n placeholder={messages.placeholder[traits.mode]}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{ ...text, flex: 1, minHeight: 42, paddingHorizontal: 8 }}\n />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={revealed ? messages.hide : messages.show}\n accessibilityState={{ disabled }}\n disabled={disabled}\n onPress={() => setRevealed((value) => !value)}\n style={({ pressed }) => ({\n width: 44,\n height: 42,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <Icon name={revealed ? \"eye-off\" : \"eye\"} size={16} color={c[\"fg-muted\"]} />\n </Pressable>\n </View>\n )}\n\n {error ? (\n <Text accessibilityRole=\"alert\" style={{ ...note, color: c[\"status-failed\"] }}>\n {error}\n </Text>\n ) : null}\n\n {spec?.looksLike || mismatch || (spec?.allowGenerate && !draft.generate) ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <View style={{ flex: 1, gap: 2 }}>\n {spec?.looksLike && !draft.generate ? (\n <Text style={{ ...note, color: c[\"fg-subtle\"] }}>\n {messages.looksLike(spec.looksLike)}\n </Text>\n ) : null}\n {mismatch && !draft.generate ? (\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 6 }}>\n <View style={{ paddingTop: 1 }}>\n <Icon name=\"triangle-alert\" size={12} color={c[\"status-waiting\"]} />\n </View>\n <Text style={{ ...note, flex: 1, color: c[\"status-waiting\"] }}>\n {messages.patternWarning}\n </Text>\n </View>\n ) : null}\n </View>\n {spec?.allowGenerate && !draft.generate ? (\n <Button\n icon=\"sparkles\"\n label={messages.generate}\n size=\"form\"\n disabled={disabled}\n onPress={generate}\n />\n ) : null}\n </View>\n ) : null}\n\n <View style={{ gap: 2 }}>\n <Text style={label}>{messages.saveTo}</Text>\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={messages.saveTo}\n style={{ flexDirection: \"row\", flexWrap: \"wrap\", columnGap: 16 }}\n >\n {SECRET_SAVE_TO_OPTIONS.map((option: HumanInputSecretSaveTo) => {\n const selected = draft.saveTo === option;\n return (\n <Pressable\n key={option}\n accessibilityRole=\"radio\"\n accessibilityLabel={messages.saveToOption[option]}\n accessibilityState={{ checked: selected, disabled }}\n disabled={disabled}\n onPress={() => onDraft((current) => ({ ...current, saveTo: option }))}\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8, minHeight: 44 }}\n >\n <View style={{ marginTop: -2 }}>\n <Selector multi={false} selected={selected} />\n </View>\n <Text style={label}>{messages.saveToOption[option]}</Text>\n </Pressable>\n );\n })}\n </View>\n {spec?.vault && draft.saveTo === defaultSaveTo ? (\n <Text style={{ ...note, color: c[\"fg-subtle\"] }}>{messages.vaultHint(spec.vault)}</Text>\n ) : null}\n </View>\n </View>\n );\n}\n","import type {\n HumanInputAnswer,\n HumanInputQuestion,\n SessionHumanInputRequest,\n SubmitHumanInputResponseRequest,\n} from \"@opengeni/sdk\";\nimport type { PendingApproval } from \"@opengeni/react/session\";\nimport {\n answersFromDrafts,\n defaultHumanInputFormMessages,\n emptyDraft,\n humanInputHeading,\n initialDrafts,\n isActionableHumanInputRequest,\n type HumanInputAnswerDraft,\n type HumanInputFormMessages,\n} from \"@opengeni/react/timeline-model\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { createOpenGeniText, useOpenGeniText, type OpenGeniText } from \"@opengeni/react/messages\";\nimport { Pressable, ScrollView, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon } from \"./icon\";\nimport { blendOver, withAlpha } from \"./primitives\";\nimport { SecretQuestionField } from \"./secret-field\";\nimport {\n defaultSecretFieldMessages,\n initialSecretDraft,\n isSecretQuestion,\n secretSubmission,\n type SecretDraft,\n type SecretFieldMessages,\n} from \"./secret-field-model\";\nimport { Selector } from \"./selector\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/* ----------------------------------------------------------------------------\n Decision surfaces: the web HumanInputSurface/HumanInputForm (waiting tone,\n question-first, options, Other, Skip / Send answers) and the approval\n Notice strip, with the shared drafting and validation rules.\n -------------------------------------------------------------------------- */\n\nfunction useWaitingTone() {\n const theme = useNativeTimelineTheme();\n const waiting = theme.colors[\"status-waiting\"];\n return {\n theme,\n waiting,\n surface: withAlpha(waiting, 0.05),\n border: withAlpha(waiting, 0.35),\n divider: withAlpha(waiting, 0.2),\n iconBox: withAlpha(waiting, 0.12),\n };\n}\n\nexport interface HumanInputCardProps {\n requests: SessionHumanInputRequest[];\n onSubmit: (requestId: string, response: SubmitHumanInputResponseRequest) => void | Promise<void>;\n respondingRequestId?: string | null | undefined;\n error?: string | null | undefined;\n /** The shared question-form catalog; hosts translate by overriding entries. */\n messages?: Partial<HumanInputFormMessages> | undefined;\n /** Copy for secret questions (Save to, Generate, show / hide). */\n secretMessages?: Partial<SecretFieldMessages> | undefined;\n}\n\nconst HumanInputMessagesContext = createContext<HumanInputFormMessages>(\n defaultHumanInputFormMessages(createOpenGeniText()),\n);\nconst SecretFieldMessagesContext = createContext<SecretFieldMessages>(\n defaultSecretFieldMessages(createOpenGeniText()),\n);\n\n/** One decision shell for pending requests, oldest first, \"N of M\" when stepping. */\nexport function HumanInputCard({\n requests,\n onSubmit,\n respondingRequestId = null,\n error,\n messages,\n secretMessages,\n}: HumanInputCardProps) {\n const t = useOpenGeniText();\n const merged = useMemo(\n () => ({ ...defaultHumanInputFormMessages(t), ...messages }),\n [t, messages],\n );\n const mergedSecret = useMemo(\n () => ({ ...defaultSecretFieldMessages(t), ...secretMessages }),\n [secretMessages, t],\n );\n const batchTotal = useRef(0);\n const ordered = useMemo(() => {\n const now = Date.now();\n return requests\n .filter((request) => isActionableHumanInputRequest(request, now))\n .sort((a, b) => {\n const aAt = a.createdAt ? Date.parse(a.createdAt) : 0;\n const bAt = b.createdAt ? Date.parse(b.createdAt) : 0;\n return aAt !== bAt ? aAt - bAt : a.id.localeCompare(b.id);\n });\n }, [requests]);\n if (ordered.length === 0) {\n batchTotal.current = 0;\n return null;\n }\n batchTotal.current = Math.max(batchTotal.current, ordered.length);\n const active = ordered[0]!;\n const position = batchTotal.current - ordered.length + 1;\n return (\n <HumanInputMessagesContext.Provider value={merged}>\n <SecretFieldMessagesContext.Provider value={mergedSecret}>\n <HumanInputForm\n key={active.id}\n request={active}\n progressLabel={\n batchTotal.current > 1\n ? t(\"native.timeline.decisions.positionOfCurrent\", {\n position,\n current: batchTotal.current,\n })\n : null\n }\n submitting={respondingRequestId !== null}\n error={error ?? null}\n onSubmit={(response) => onSubmit(active.id, response)}\n />\n </SecretFieldMessagesContext.Provider>\n </HumanInputMessagesContext.Provider>\n );\n}\n\nfunction HumanInputForm({\n request,\n progressLabel,\n submitting,\n error,\n onSubmit,\n}: {\n request: SessionHumanInputRequest;\n progressLabel: string | null;\n submitting: boolean;\n error: string | null;\n onSubmit: (response: SubmitHumanInputResponseRequest) => void | Promise<void>;\n}) {\n const tone = useWaitingTone();\n const { theme } = tone;\n const c = theme.colors;\n const t = useOpenGeniText();\n const messages = useContext(HumanInputMessagesContext);\n const secretMessages = useContext(SecretFieldMessagesContext);\n const heading = humanInputHeading(request.questions, messages);\n const single = request.questions.length === 1;\n const required = single && request.questions[0]!.required;\n const [drafts, setDrafts] = useState<Record<string, HumanInputAnswerDraft>>(() =>\n initialDrafts(request.questions),\n );\n // Secret values stay out of React state: keystrokes land in this ref, which\n // is emptied after a successful submit and when the form goes away.\n const secretValues = useRef<Record<string, string>>({});\n const secretClears = useRef<Record<string, () => void>>({});\n const secretRegistrars = useRef<Record<string, (clear: (() => void) | null) => void>>({});\n const [secretDrafts, setSecretDrafts] = useState<Record<string, SecretDraft>>(() =>\n Object.fromEntries(\n request.questions\n .filter(isSecretQuestion)\n .map((question) => [question.id, initialSecretDraft(question.secret)]),\n ),\n );\n useEffect(\n () => () => {\n secretValues.current = {};\n },\n [],\n );\n const registerSecretClear = useCallback((id: string) => {\n // One stable registrar per question, so the field's effect runs once.\n const existing = secretRegistrars.current[id];\n if (existing) return existing;\n const registrar = (clear: (() => void) | null) => {\n if (clear) secretClears.current[id] = clear;\n else delete secretClears.current[id];\n };\n secretRegistrars.current[id] = registrar;\n return registrar;\n }, []);\n const clearSecrets = () => {\n secretValues.current = {};\n for (const clear of Object.values(secretClears.current)) clear();\n };\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [collapsed, setCollapsed] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [inFlight, setInFlight] = useState(false);\n const busy = submitting || inFlight;\n\n const submit = async (response: SubmitHumanInputResponseRequest) => {\n setSubmitError(null);\n setInFlight(true);\n try {\n await onSubmit(response);\n clearSecrets();\n } catch (cause) {\n setSubmitError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setInFlight(false);\n }\n };\n const send = () => {\n const result = answersFromDrafts(\n t,\n request.questions.filter((question) => !isSecretQuestion(question)),\n drafts,\n messages,\n );\n const secret = secretSubmission(\n request.questions,\n secretDrafts,\n secretValues.current,\n messages.required,\n );\n const nextErrors = { ...result.errors, ...secret.errors };\n setErrors(nextErrors);\n if (Object.keys(nextErrors).length > 0) return;\n const byQuestion = new Map<string, HumanInputAnswer>(\n [...result.answers, ...secret.answers].map((answer) => [answer.questionId, answer]),\n );\n void submit({\n outcome: \"answered\",\n answers: request.questions.flatMap((question) => byQuestion.get(question.id) ?? []),\n ...(secret.secretAnswers.length > 0 ? { secretAnswers: secret.secretAnswers } : {}),\n });\n };\n // Editing a question clears its validation message, as on web.\n const clearError = (id: string) =>\n setErrors((current) => {\n if (!(id in current)) return current;\n const remaining = { ...current };\n delete remaining[id];\n return remaining;\n });\n const update = (id: string, next: (draft: HumanInputAnswerDraft) => HumanInputAnswerDraft) => {\n setDrafts((current) => ({ ...current, [id]: next(current[id] ?? emptyDraft()) }));\n clearError(id);\n };\n const updateSecret = (\n question: HumanInputQuestion,\n next: (draft: SecretDraft) => SecretDraft,\n ) => {\n setSecretDrafts((current) => ({\n ...current,\n [question.id]: next(current[question.id] ?? initialSecretDraft(question.secret)),\n }));\n clearError(question.id);\n };\n const setSecretValue = (id: string, value: string) => {\n secretValues.current[id] = value;\n if (value) clearError(id);\n };\n\n return (\n <View\n style={{\n borderRadius: theme.radius.lg,\n borderWidth: 1,\n borderColor: tone.border,\n backgroundColor: tone.surface,\n overflow: \"hidden\",\n }}\n >\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n padding: 16,\n paddingBottom: collapsed ? 16 : 14,\n }}\n >\n <View\n style={{\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: tone.iconBox,\n }}\n >\n <Icon name=\"message-circle-question\" size={16} color={tone.waiting} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 24,\n color: c.fg,\n }}\n >\n {heading.title}\n {required ? <Text style={{ color: c[\"status-failed\"] }}> *</Text> : null}\n </Text>\n {heading.description ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"fg-muted\"],\n }}\n >\n {heading.description}\n </Text>\n ) : null}\n {progressLabel ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.xs,\n color: c[\"fg-subtle\"],\n }}\n >\n {progressLabel}\n </Text>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={collapsed ? messages.expand : messages.collapse}\n onPress={() => setCollapsed((value) => !value)}\n style={{\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Icon name={collapsed ? \"chevron-down\" : \"chevron-up\"} size={16} color={c[\"fg-muted\"]} />\n </Pressable>\n </View>\n {collapsed ? null : (\n <>\n <ScrollView\n style={{ maxHeight: 360, borderTopWidth: 1, borderTopColor: tone.divider }}\n contentContainerStyle={{ paddingHorizontal: 20, paddingVertical: 14, gap: 18 }}\n nestedScrollEnabled\n keyboardShouldPersistTaps=\"handled\"\n >\n {request.questions.map((question, index) => (\n <QuestionControls\n key={question.id}\n question={question}\n index={single ? null : index + 1}\n draft={drafts[question.id] ?? emptyDraft()}\n error={isSecretQuestion(question) ? undefined : errors[question.id]}\n disabled={busy}\n onChange={(next) => update(question.id, next)}\n >\n {isSecretQuestion(question) ? (\n <SecretQuestionField\n question={question}\n draft={secretDrafts[question.id] ?? initialSecretDraft(question.secret)}\n onDraft={(next) => updateSecret(question, next)}\n onValue={(value) => setSecretValue(question.id, value)}\n registerClear={registerSecretClear(question.id)}\n messages={secretMessages}\n error={errors[question.id]}\n disabled={busy}\n />\n ) : null}\n </QuestionControls>\n ))}\n </ScrollView>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderTopWidth: 1,\n borderTopColor: tone.divider,\n backgroundColor: withAlpha(c[\"surface-1\"], 0.95),\n }}\n >\n {error || submitError ? (\n <Text\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: theme.size.xs,\n color: c[\"status-failed\"],\n }}\n >\n {submitError ?? error}\n </Text>\n ) : null}\n {request.allowSkip ? (\n <Button\n label={messages.skip}\n variant=\"ghost\"\n size=\"form\"\n disabled={busy}\n onPress={() =>\n void submit({ outcome: \"skipped\" } as SubmitHumanInputResponseRequest)\n }\n />\n ) : null}\n <Button\n label={busy ? messages.submitting : messages.submit}\n variant=\"primary\"\n size=\"form\"\n busy={busy}\n onPress={send}\n />\n </View>\n </>\n )}\n </View>\n );\n}\n\nfunction QuestionControls({\n question,\n index,\n draft,\n error,\n disabled,\n onChange,\n children,\n}: {\n question: HumanInputQuestion;\n index: number | null;\n draft: HumanInputAnswerDraft;\n error?: string | undefined;\n disabled: boolean;\n onChange: (next: (draft: HumanInputAnswerDraft) => HumanInputAnswerDraft) => void;\n /** A control that replaces the built-in ones (the secret field). */\n children?: ReactNode;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const messages = useContext(HumanInputMessagesContext);\n const multi = question.kind === \"multi_select\";\n const label = { ...fontStyle(theme, 500), fontSize: theme.size.sm, lineHeight: 18, color: c.fg };\n const input = {\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c.fg,\n minHeight: 32,\n paddingHorizontal: 8,\n paddingVertical: 6,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: error ? c[\"status-failed\"] : c.border,\n backgroundColor: c[\"surface-1\"],\n };\n const toggle = (value: string) =>\n onChange((current) => {\n if (!multi) return { ...current, values: [value], otherSelected: false };\n const has = current.values.includes(value);\n return {\n ...current,\n values: has\n ? current.values.filter((entry) => entry !== value)\n : [...current.values, value],\n };\n });\n const hint = multi\n ? messages.selectionHint(question.validation?.minSelections, question.validation?.maxSelections)\n : null;\n return (\n <View style={{ gap: 10 }}>\n {index !== null ? (\n <View>\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c.fg,\n }}\n >\n {`${index}. ${question.label ?? question.prompt}`}\n {question.required ? <Text style={{ color: c[\"status-failed\"] }}> *</Text> : null}\n </Text>\n {question.label ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"fg-muted\"],\n }}\n >\n {question.prompt}\n </Text>\n ) : null}\n </View>\n ) : null}\n {hint ? (\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"fg-subtle\"] }}>\n {hint}\n </Text>\n ) : null}\n {children ? (\n children\n ) : question.kind === \"text\" ? (\n <TextInput\n accessibilityLabel={question.label ?? question.prompt}\n editable={!disabled}\n multiline\n value={draft.values[0] ?? \"\"}\n onChangeText={(text) => onChange((current) => ({ ...current, values: [text] }))}\n placeholder={m.typeYourAnswer}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{ ...input, minHeight: 64, textAlignVertical: \"top\" }}\n />\n ) : (\n <View style={{ gap: 2 }}>\n {question.options.map((option) => {\n const selected = draft.values.includes(option.id);\n return (\n <Pressable\n key={option.id}\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityState={{ checked: selected, disabled }}\n disabled={disabled}\n onPress={() => toggle(option.id)}\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n minHeight: 36,\n paddingVertical: 8,\n }}\n >\n <Selector multi={multi} selected={selected} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text style={label}>{option.label}</Text>\n {option.description ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: c[\"fg-muted\"],\n }}\n >\n {option.description}\n </Text>\n ) : null}\n </View>\n </Pressable>\n );\n })}\n {question.allowOther ? (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n paddingVertical: 8,\n }}\n >\n <Pressable\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityState={{ checked: draft.otherSelected, disabled }}\n accessibilityLabel={messages.other}\n disabled={disabled}\n onPress={() =>\n onChange((current) =>\n multi\n ? { ...current, otherSelected: !current.otherSelected }\n : { ...current, values: [], otherSelected: true },\n )\n }\n style={{ paddingTop: 2 }}\n >\n <Selector multi={multi} selected={draft.otherSelected} />\n </Pressable>\n <View style={{ flex: 1, gap: 6 }}>\n <Text style={label}>{messages.other}</Text>\n <TextInput\n accessibilityLabel={t(\"native.timeline.decisions.otherAnswerForLabel\", {\n label: question.label ?? question.prompt,\n })}\n editable={!disabled}\n value={draft.other}\n onFocus={() =>\n onChange((current) =>\n multi\n ? { ...current, otherSelected: true }\n : { ...current, values: [], otherSelected: true },\n )\n }\n onChangeText={(text) => onChange((current) => ({ ...current, other: text }))}\n placeholder={m.typeAValue}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={input}\n />\n </View>\n </View>\n ) : null}\n </View>\n )}\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"status-failed\"] }}\n >\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nexport interface ApprovalStripMessages {\n approve: string;\n reject: string;\n approved: string;\n rejected: string;\n /** The tool's display name; the web live strip shows the raw name. */\n formatToolName: (name: string) => string;\n}\n\nexport const defaultApprovalStripMessages = (t: OpenGeniText): ApprovalStripMessages => ({\n approve: t(\"native.timeline.decisions.approve\"),\n reject: t(\"native.timeline.decisions.reject\"),\n approved: t(\"native.timeline.decisions.approved\"),\n rejected: t(\"native.timeline.decisions.rejected\"),\n formatToolName: (name) => name,\n});\n\nexport interface ApprovalStripProps {\n approvals: PendingApproval[];\n onDecide: (approvalId: string, decision: \"approve\" | \"reject\") => void | Promise<void>;\n messages?: Partial<ApprovalStripMessages> | undefined;\n}\n\n/** The web live decision strip: one waiting Notice per pending tool approval. */\nexport function ApprovalStrip({ approvals, onDecide, messages: overrides }: ApprovalStripProps) {\n const t = useOpenGeniText();\n const messages = { ...defaultApprovalStripMessages(t), ...overrides };\n const tone = useWaitingTone();\n const { theme } = tone;\n const c = theme.colors;\n const [pending, setPending] = useState<Record<string, \"approve\" | \"reject\">>({});\n const [settled, setSettled] = useState<Record<string, \"approve\" | \"reject\">>({});\n if (approvals.length === 0) return null;\n const decide = async (id: string, decision: \"approve\" | \"reject\") => {\n setPending((current) => ({ ...current, [id]: decision }));\n try {\n await onDecide(id, decision);\n setSettled((current) => ({ ...current, [id]: decision }));\n } finally {\n setPending((current) => {\n const next = { ...current };\n delete next[id];\n return next;\n });\n }\n };\n return (\n <ScrollView style={{ maxHeight: 256 }} contentContainerStyle={{ gap: 12 }} nestedScrollEnabled>\n {approvals.map((approval) => {\n const busy = Boolean(pending[approval.id]) || Boolean(settled[approval.id]);\n const payload = JSON.stringify(approval.arguments ?? approval.raw ?? {}, null, 2);\n return (\n <View\n key={approval.id}\n style={{\n borderRadius: theme.radius.lg,\n borderWidth: 1,\n borderColor: withAlpha(tone.waiting, 0.3),\n // Opaque: the strip floats over scrolling conversation.\n backgroundColor: blendOver(c.bg, tone.waiting, 0.06),\n padding: 12,\n flexDirection: \"row\",\n gap: 10,\n }}\n >\n <View style={{ paddingTop: 2 }}>\n <Icon name=\"circle-alert\" size={16} color={tone.waiting} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: 14, lineHeight: 20, color: c.fg }}\n numberOfLines={2}\n >\n {messages.formatToolName(approval.name)}\n </Text>\n <ScrollView\n style={{\n marginTop: 8,\n maxHeight: 160,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: withAlpha(c[\"surface-2\"], 0.6),\n }}\n contentContainerStyle={{ padding: 10 }}\n nestedScrollEnabled\n >\n <Text\n selectable\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n }}\n >\n {payload}\n </Text>\n </ScrollView>\n <View\n style={{ marginTop: 12, flexDirection: \"row\", justifyContent: \"flex-end\", gap: 8 }}\n >\n <Button\n icon=\"check\"\n variant=\"primary\"\n label={settled[approval.id] === \"approve\" ? messages.approved : messages.approve}\n busy={pending[approval.id] === \"approve\"}\n disabled={busy}\n onPress={() => void decide(approval.id, \"approve\")}\n />\n <Button\n icon=\"x\"\n variant=\"destructive\"\n label={settled[approval.id] === \"reject\" ? messages.rejected : messages.reject}\n busy={pending[approval.id] === \"reject\"}\n disabled={busy}\n onPress={() => void decide(approval.id, \"reject\")}\n />\n </View>\n </View>\n </View>\n );\n })}\n </ScrollView>\n );\n}\n","import type { FileAsset, OpenGeniClient, ResourceRef } from \"@opengeni/sdk\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ActivityIndicator, Image, Linking, Pressable, Text, View } from \"react-native\";\nimport { Icon } from \"./icon\";\nimport { NativeImageViewer, type NativeViewerImage } from \"./image-viewer\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\n\ntype AttachmentClient = Pick<OpenGeniClient, \"getFile\" | \"createFileDownloadUrl\">;\ntype FileResource = Extract<ResourceRef, { kind: \"file\" }>;\n\nconst PREVIEW_WIDTH = 200;\n\n/**\n * Files sent with a user message, above its bubble as on web: images as\n * signed previews (tap opens them full screen in the app, swiping between the\n * message's images), other files as named chips.\n */\nexport function NativeMessageAttachments(props: {\n client: AttachmentClient;\n workspaceId: string;\n sessionId?: string | undefined;\n resources: readonly ResourceRef[];\n}) {\n const files = props.resources.filter(\n (resource): resource is FileResource => resource.kind === \"file\",\n );\n const [ready, setReady] = useState<Record<string, NativeViewerImage>>({});\n const [viewing, setViewing] = useState<string | null>(null);\n const onImageReady = useCallback((fileId: string, image: NativeViewerImage) => {\n setReady((current) =>\n current[fileId]?.url === image.url ? current : { ...current, [fileId]: image },\n );\n }, []);\n const order = files.map((file) => file.fileId).join(\",\");\n const gallery = useMemo(\n () =>\n order\n .split(\",\")\n .flatMap((fileId) => (ready[fileId] ? [{ fileId, image: ready[fileId]! }] : [])),\n [order, ready],\n );\n if (files.length === 0) return null;\n const index = Math.max(\n 0,\n gallery.findIndex((entry) => entry.fileId === viewing),\n );\n return (\n <View style={{ flexDirection: \"row\", flexWrap: \"wrap\", justifyContent: \"flex-end\", gap: 6 }}>\n {files.map((resource) => (\n <Attachment\n key={resource.fileId}\n client={props.client}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n resource={resource}\n onImageReady={onImageReady}\n onOpenImage={setViewing}\n />\n ))}\n {gallery.length > 0 ? (\n <NativeImageViewer\n images={gallery.map((entry) => entry.image)}\n index={index}\n visible={viewing !== null}\n onClose={() => setViewing(null)}\n />\n ) : null}\n </View>\n );\n}\n\nfunction Attachment(props: {\n client: AttachmentClient;\n workspaceId: string;\n sessionId?: string | undefined;\n resource: FileResource;\n onImageReady: (fileId: string, image: NativeViewerImage) => void;\n onOpenImage: (fileId: string) => void;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const [asset, setAsset] = useState<FileAsset | null>(null);\n const [url, setUrl] = useState<string | null>(null);\n const [ratio, setRatio] = useState(1);\n const [failed, setFailed] = useState(false);\n const { client, workspaceId, sessionId } = props;\n const fileId = props.resource.fileId;\n\n useEffect(() => {\n let current = true;\n setAsset(null);\n setUrl(null);\n setFailed(false);\n const options = sessionId ? { sessionId } : {};\n void (async () => {\n try {\n const file = await client.getFile(workspaceId, fileId, options);\n if (!current) return;\n setAsset(file);\n if (!file.contentType.startsWith(\"image/\")) return;\n const signed = await client.createFileDownloadUrl(workspaceId, fileId, options);\n if (current) setUrl(signed.url);\n } catch {\n if (current) setFailed(true);\n }\n })();\n return () => {\n current = false;\n };\n }, [client, fileId, sessionId, workspaceId]);\n\n const open = async () => {\n try {\n const target =\n url ??\n (await client.createFileDownloadUrl(workspaceId, fileId, sessionId ? { sessionId } : {}))\n .url;\n await Linking.openURL(target);\n } catch {\n // Opening is best effort; the chip stays.\n }\n };\n const name = asset?.filename ?? t(\"native.timeline.messageAttachments.attachment\");\n const image = asset?.contentType.startsWith(\"image/\") === true && !failed;\n const { onImageReady } = props;\n useEffect(() => {\n if (image && url) onImageReady(fileId, { url, alt: name, filename: asset?.filename });\n }, [asset?.filename, fileId, image, name, onImageReady, url]);\n\n if (image) {\n return (\n <Pressable\n accessibilityRole=\"imagebutton\"\n accessibilityLabel={t(\"native.timeline.messageAttachments.openName\", { name })}\n disabled={!url}\n onPress={() => props.onOpenImage(fileId)}\n style={{\n width: PREVIEW_WIDTH,\n height: Math.min(260, Math.max(90, PREVIEW_WIDTH / ratio)),\n borderRadius: 12,\n overflow: \"hidden\",\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-2\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {url ? (\n <Image\n source={{ uri: url }}\n resizeMode=\"cover\"\n onLoad={(event) => {\n const { width, height } = event.nativeEvent.source;\n if (width > 0 && height > 0) setRatio(width / height);\n }}\n onError={() => setFailed(true)}\n style={{ width: \"100%\", height: \"100%\" }}\n />\n ) : (\n <ActivityIndicator size=\"small\" color={c[\"fg-muted\"]} />\n )}\n </Pressable>\n );\n }\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.messageAttachments.openName\", { name })}\n onPress={() => void open()}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n maxWidth: 240,\n height: 34,\n paddingHorizontal: 10,\n borderRadius: 10,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: pressed ? c.hover : c[\"surface-1\"],\n })}\n >\n <Icon name=\"file-text\" size={14} color={c[\"fg-muted\"]} />\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 500), fontSize: 13, color: c.fg, flexShrink: 1 }}\n >\n {name}\n </Text>\n </Pressable>\n );\n}\n","import type { ClientModel, Session } from \"@opengeni/sdk\";\nimport {\n SESSION_STATUS_BADGE,\n SESSION_STATUS_PRESENTATION,\n type SessionDisplayStatus,\n} from \"@opengeni/react/timeline-model\";\nimport { MODEL_MARK_PATHS, modelMarkVendor } from \"@opengeni/react/model-mark-paths\";\nimport { projectClientModelRows } from \"@opengeni/react/model-policy\";\nimport {\n recentSessionModelPresentation,\n recentSessionStatus,\n relativeTimeLabel,\n sessionDisplayTitle,\n sessionRepoLabel,\n type SessionStatusTone,\n} from \"@opengeni/react/session-list-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useEffect, useMemo } from \"react\";\nimport {\n ActionSheetIOS,\n Alert,\n Platform,\n Pressable,\n Text,\n useWindowDimensions,\n View,\n} from \"react-native\";\nimport Animated, {\n cancelAnimation,\n Easing,\n useAnimatedStyle,\n useReducedMotion,\n useSharedValue,\n withRepeat,\n withTiming,\n} from \"react-native-reanimated\";\nimport Svg, { Path } from \"react-native-svg\";\nimport { Icon } from \"./icon\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { withAlpha } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme, type WebColorToken } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The web app's session list rows at phone width (Recent sessions on the\n home canvas): status dot, title, maker mark + catalog model label, and a\n compact relative time. Ordering and labels come from the shared\n session-list model so web and native read identically.\n -------------------------------------------------------------------------- */\n\nconst TONE_COLOR: Record<SessionStatusTone, WebColorToken> = {\n queued: \"status-queued\",\n running: \"status-running\",\n waiting: \"status-waiting\",\n idle: \"status-idle\",\n failed: \"status-failed\",\n cancelled: \"status-cancelled\",\n};\n\n/** The web StatusDot: an 8pt dot with a gentle pulse for live states. */\nexport function StatusDot({\n tone,\n pulse,\n size = 8,\n}: {\n tone: SessionStatusTone;\n pulse?: boolean;\n size?: number;\n}) {\n const theme = useNativeTimelineTheme();\n const reduceMotion = useReducedMotion();\n const opacity = useSharedValue(1);\n useEffect(() => {\n if (!pulse || reduceMotion) {\n cancelAnimation(opacity);\n opacity.value = 1;\n return;\n }\n // Tailwind animate-pulse: 2s, cubic-bezier(0.4, 0, 0.6, 1), 1 → 0.5 → 1.\n opacity.value = withRepeat(\n withTiming(0.5, { duration: 1000, easing: Easing.bezier(0.4, 0, 0.6, 1) }),\n -1,\n true,\n );\n return () => cancelAnimation(opacity);\n }, [opacity, pulse, reduceMotion]);\n const style = useAnimatedStyle(() => ({ opacity: opacity.value }));\n return (\n <Animated.View\n accessibilityElementsHidden\n importantForAccessibility=\"no\"\n style={[\n {\n width: size,\n height: size,\n borderRadius: size / 2,\n backgroundColor: theme.colors[TONE_COLOR[tone]],\n },\n style,\n ]}\n />\n );\n}\n\n/** The model maker's logo (OpenAI, Claude, Grok) with the web's neutral fallback. */\nexport function ModelMark({\n model,\n size = 12,\n color,\n}: {\n model: string;\n size?: number;\n color: string;\n}) {\n const vendor = modelMarkVendor(model);\n if (!vendor) return <Icon name=\"sparkles\" size={size} color={color} />;\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" accessibilityElementsHidden>\n <Path d={MODEL_MARK_PATHS[vendor]} fill={color} />\n </Svg>\n );\n}\n\nexport interface SessionRowProps {\n session: Session;\n /** The deployment's client model catalog, for catalog labels. */\n models: readonly ClientModel[];\n onPress: () => void;\n /**\n * Pin or unpin this chat for the person (the same personal pin as the web).\n * When set, a long press offers Pin or Unpin, and so does an accessibility action.\n */\n onTogglePin?: (() => void) | undefined;\n now?: Date | undefined;\n}\n\n/** One recent-session row, as the web home canvas renders it. */\nexport function SessionRow({ session, models, onPress, onTogglePin, now }: SessionRowProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const t = useOpenGeniText();\n const rows = useMemo(() => projectClientModelRows(t, [...models]), [t, models]);\n const title = sessionDisplayTitle(session);\n const status = recentSessionStatus(session);\n const model = recentSessionModelPresentation(session.model, rows);\n const repo = sessionRepoLabel(session);\n const meta = [model.label, repo].filter(Boolean).join(\" · \");\n const pinned = Boolean(session.pinned);\n const pinLabel = pinned ? m.unpin : m.pin;\n const offerPin = () => {\n if (!onTogglePin) return;\n if (Platform.OS === \"ios\") {\n ActionSheetIOS.showActionSheetWithOptions(\n {\n title,\n options: [pinLabel, t(\"native.timeline.sessionList.cancel\")],\n cancelButtonIndex: 1,\n },\n (index) => {\n if (index === 0) onTogglePin();\n },\n );\n return;\n }\n Alert.alert(title, undefined, [\n { text: pinLabel, onPress: onTogglePin },\n { text: t(\"native.timeline.sessionList.cancel\"), style: \"cancel\" },\n ]);\n };\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={pinned ? `${title}, ${m.pinned}` : title}\n accessibilityActions={onTogglePin ? [{ name: \"pin\", label: pinLabel }] : undefined}\n onAccessibilityAction={(event) => {\n if (event.nativeEvent.actionName === \"pin\") onTogglePin?.();\n }}\n onPress={onPress}\n onLongPress={onTogglePin ? offerPin : undefined}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n paddingHorizontal: 4,\n paddingVertical: 10,\n borderRadius: theme.radius.md,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <StatusDot tone={status.tone} pulse={status.pulse} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 400), fontSize: 14, lineHeight: 20, color: c.fg }}\n >\n {title}\n </Text>\n {meta ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6, marginTop: 2 }}>\n <ModelMark model={session.model} size={12} color={c[\"fg-muted\"]} />\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 400),\n fontSize: 11,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n flexShrink: 1,\n }}\n >\n {meta}\n </Text>\n </View>\n ) : null}\n </View>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 4 }}>\n {pinned ? <Icon name=\"pin\" size={11} color={c[\"fg-subtle\"]} /> : null}\n <Text\n style={{\n ...fontStyle(theme, 400),\n fontSize: 11,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {relativeTimeLabel(t, session.updatedAt, now)}\n </Text>\n </View>\n </Pressable>\n );\n}\n\n/** A small-caps section label (web: text-2xs semibold uppercase tracking-wider). */\nexport function SectionLabel({ children }: { children: string }) {\n const theme = useNativeTimelineTheme();\n return (\n <Text\n accessibilityRole=\"header\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: 11,\n lineHeight: 16,\n letterSpacing: 0.55,\n textTransform: \"uppercase\",\n color: theme.colors.fg,\n paddingHorizontal: 2,\n marginBottom: 6,\n }}\n >\n {children}\n </Text>\n );\n}\n\n/** The web's divided list: rows separated by a hairline in border/60. */\nexport function SessionRowList(props: {\n sessions: readonly Session[];\n models: readonly ClientModel[];\n onOpen: (sessionId: string) => void;\n /** Pin or unpin a chat from its row (long press); omitted, rows offer no pin. */\n onTogglePin?: ((session: Session) => void) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <View>\n {props.sessions.map((session, index) => (\n <View\n key={session.id}\n style={\n index > 0\n ? {\n borderTopWidth: 1,\n borderColor: theme.colors.border,\n borderTopColor: withAlpha(theme.colors.border, 0.6),\n }\n : undefined\n }\n >\n <SessionRow\n session={session}\n models={props.models}\n onPress={() => props.onOpen(session.id)}\n onTogglePin={props.onTogglePin ? () => props.onTogglePin?.(session) : undefined}\n />\n </View>\n ))}\n </View>\n );\n}\n\n/** The web session status badge: tinted pill, breathing dot for live states. */\nexport function SessionStatusBadge({\n status,\n label,\n}: {\n status: SessionDisplayStatus;\n label?: string;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const t = useOpenGeniText();\n const presentation = SESSION_STATUS_PRESENTATION(t)[status];\n const badge = SESSION_STATUS_BADGE[status];\n const color = (token: string) => c[token as WebColorToken] ?? c[\"fg-muted\"];\n return (\n <View\n accessibilityRole=\"text\"\n accessibilityLabel={`Status: ${label ?? presentation.label}`}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 999,\n borderWidth: 1,\n borderColor: withAlpha(color(badge.border), badge.borderAlpha),\n backgroundColor: withAlpha(color(badge.fill), 0.1),\n }}\n >\n <StatusDot tone={presentation.tone} pulse={presentation.pulse} size={6} />\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: 12, lineHeight: 16, color: color(badge.text) }}\n >\n {label ?? presentation.label}\n </Text>\n </View>\n );\n}\n\n/**\n * A native navigation-bar title for a session: the title on one line and, under\n * it, the run state as a status dot and quiet label (the web header badge's\n * information without boxing a pill inside the bar's glass).\n */\nexport function SessionHeaderTitle({\n title,\n status,\n statusLabel,\n align = Platform.OS === \"ios\" ? \"center\" : \"left\",\n sideInset = 116,\n}: {\n title: string;\n /** The display status: pass `blocked` for an admission-blocked session. */\n status: SessionDisplayStatus | null;\n /** Override the label (\"Paused\" for a paused workstream). */\n statusLabel?: string | undefined;\n align?: \"center\" | \"left\";\n /**\n * Room kept clear on each side of a centered title: the wider of the bar's\n * leading and trailing buttons plus their margin (a back button and a\n * two-button pill take about 116pt), so a long title truncates instead of\n * running under them.\n */\n sideInset?: number | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const t = useOpenGeniText();\n const viewport = useWindowDimensions();\n const presentation = status ? SESSION_STATUS_PRESENTATION(t)[status] : null;\n // A settled, idle session needs no status line: the title stands alone, as in\n // native messaging apps. Running, waiting, paused and failed states still say so.\n const label = statusLabel ?? (status === \"idle\" ? undefined : presentation?.label);\n // Live and attention states take their status colour; settled ones stay quiet.\n const emphasized =\n presentation?.tone === \"running\" ||\n presentation?.tone === \"waiting\" ||\n presentation?.tone === \"failed\";\n return (\n <View\n accessible\n accessibilityRole=\"header\"\n accessibilityLabel={label ? `${title}, ${label}` : title}\n // iOS sizes a custom title view once, often before the session (and its\n // title) has loaded; a fixed width keeps a late title from collapsing to\n // \"H…\". Centered, it stays clear of the wider side's buttons on both sides.\n style={\n align === \"center\"\n ? {\n alignItems: \"center\",\n width: Math.max(120, Math.min(260, viewport.width - 2 * sideInset)),\n }\n : { alignItems: \"flex-start\", maxWidth: 240 }\n }\n >\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 600), fontSize: 16, lineHeight: 20, color: c.fg }}\n >\n {title}\n </Text>\n {presentation && label ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 5, marginTop: 1 }}>\n <StatusDot tone={presentation.tone} pulse={presentation.pulse} size={6} />\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: 12,\n lineHeight: 15,\n color: emphasized ? c[TONE_COLOR[presentation.tone]] : c[\"fg-muted\"],\n }}\n >\n {label}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n","import type { ClientModel, LineageNode, SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport type { UseGoalResult } from \"@opengeni/react/session\";\nimport { sessionAgentsSignal, sessionGoalStateLabel } from \"@opengeni/react/session-agents-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\nimport { ActivityIndicator, Pressable, ScrollView, Text, View, type TextStyle } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { SessionRow } from \"./session-list\";\nimport { BottomSheet } from \"./sheet\";\nimport { fontStyle, useNativeTimelineTheme, type NativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/** True where the signals share their row (beside the queue): icon chips only. */\nexport const CompactSignalsContext = createContext(false);\n\n/* ----------------------------------------------------------------------------\n The web session chrome's goal, agents and commands segments: one row of\n quiet chips above the composer, each opening its panel as a sheet. A chip\n appears only when there is something to show.\n -------------------------------------------------------------------------- */\n\nexport interface SessionCommandsSource {\n commands: SessionBackgroundCommand[];\n loading: boolean;\n error: Error | null;\n cancel: (commandId: string) => Promise<void>;\n}\n\nexport function SessionSignals(props: {\n goal?: UseGoalResult | null | undefined;\n agents: readonly LineageNode[];\n commandsCount: number;\n /** Mounted only while the commands sheet is open, so a closed chip never polls. */\n renderCommands: (close: () => void) => ReactNode;\n onOpenSession?: ((sessionId: string) => void) | undefined;\n models?: readonly ClientModel[] | undefined;\n readOnly?: boolean | undefined;\n}) {\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n // Beside the queue the row is shared: chips keep only their icon, count and dot.\n const compact = useContext(CompactSignalsContext);\n const [open, setOpen] = useState<\"goal\" | \"agents\" | \"commands\" | null>(null);\n const goal = props.goal?.goal ?? null;\n const agents = sessionAgentsSignal(t, props.agents);\n if (!goal && !agents && props.commandsCount === 0) return null;\n const close = () => setOpen(null);\n return (\n <>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ gap: 6, alignItems: \"center\" }}\n style={{ flexGrow: 0, flexShrink: 1 }}\n >\n {goal ? (\n <Chip\n icon=\"target\"\n label={m.goal}\n detail={sessionGoalStateLabel(t, goal)}\n tone={goal.status === \"active\" ? \"running\" : \"neutral\"}\n compact={compact}\n onPress={() => setOpen(\"goal\")}\n />\n ) : null}\n {agents ? (\n <Chip\n icon=\"bot\"\n label={t(\"counts.agents\", { count: agents.count })}\n count={agents.count}\n detail={agents.detail}\n tone={agents.tone}\n compact={compact}\n onPress={() => setOpen(\"agents\")}\n />\n ) : null}\n {props.commandsCount > 0 ? (\n <Chip\n icon=\"terminal\"\n label={t(\"counts.commands\", { count: props.commandsCount })}\n count={props.commandsCount}\n detail={m.running}\n tone=\"running\"\n compact={compact}\n onPress={() => setOpen(\"commands\")}\n />\n ) : null}\n </ScrollView>\n\n <BottomSheet open={open === \"goal\"} onClose={close} accessibilityLabel={m.goal}>\n {goal && props.goal ? <GoalPanel goal={props.goal} readOnly={props.readOnly} /> : null}\n </BottomSheet>\n <BottomSheet open={open === \"agents\"} onClose={close} accessibilityLabel={m.agents}>\n <SheetTitle>{m.agents}</SheetTitle>\n <ScrollView style={{ paddingHorizontal: 12 }}>\n {props.agents.map((node) => (\n <View key={node.session.id}>\n <SessionRow\n session={node.session}\n models={props.models ?? []}\n onPress={() => {\n close();\n props.onOpenSession?.(node.session.id);\n }}\n />\n {node.children.map((child) => (\n <View key={child.session.id} style={{ paddingLeft: 18 }}>\n <SessionRow\n session={child.session}\n models={props.models ?? []}\n onPress={() => {\n close();\n props.onOpenSession?.(child.session.id);\n }}\n />\n </View>\n ))}\n </View>\n ))}\n </ScrollView>\n </BottomSheet>\n <BottomSheet open={open === \"commands\"} onClose={close} accessibilityLabel={m.commands}>\n <SheetTitle>{m.commands}</SheetTitle>\n {open === \"commands\" ? props.renderCommands(close) : null}\n </BottomSheet>\n </>\n );\n}\n\nfunction Chip(props: {\n icon: NativeIconName;\n label: string;\n count?: number | undefined;\n detail: string;\n tone: \"running\" | \"waiting\" | \"neutral\";\n compact?: boolean | undefined;\n onPress: () => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const toneColor =\n props.tone === \"running\"\n ? c[\"status-running\"]\n : props.tone === \"waiting\"\n ? c[\"status-waiting\"]\n : c[\"fg-subtle\"];\n // Compact on the phone: the status reads from the dot (and the sheet); the\n // word stays in the accessibility label. 30pt tall, 44pt to touch.\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`${props.label}, ${props.detail}`}\n onPress={props.onPress}\n hitSlop={{ top: 7, bottom: 7, left: 3, right: 3 }}\n style={({ pressed }) => [\n signalChipStyle(theme, pressed),\n props.compact ? { paddingHorizontal: 9, gap: 4 } : null,\n ]}\n >\n <Icon name={props.icon} size={13} color={c[\"fg-muted\"]} />\n {props.compact ? (\n props.count !== undefined ? (\n <Text style={signalChipText(theme)}>{props.count}</Text>\n ) : null\n ) : (\n <Text style={signalChipText(theme)}>{props.label}</Text>\n )}\n <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: toneColor }} />\n </Pressable>\n );\n}\n\nfunction SheetTitle({ children }: { children: string }) {\n const theme = useNativeTimelineTheme();\n return (\n <Text\n accessibilityRole=\"header\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: 17,\n color: theme.colors.fg,\n paddingHorizontal: 20,\n paddingBottom: 8,\n }}\n >\n {children}\n </Text>\n );\n}\n\nfunction GoalPanel({ goal, readOnly }: { goal: UseGoalResult; readOnly?: boolean | undefined }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const c = theme.colors;\n const record = goal.goal!;\n const body = { ...fontStyle(theme, 400), fontSize: 15, lineHeight: 22, color: c.fg };\n const label = { ...fontStyle(theme, 600), fontSize: 12, color: c[\"fg-subtle\"] };\n return (\n <ScrollView contentContainerStyle={{ paddingHorizontal: 20, paddingBottom: 12, gap: 14 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Text style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}>{m.goal}</Text>\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c[\"fg-muted\"] }}>\n {sessionGoalStateLabel(t, record)}\n </Text>\n </View>\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.objective\")}</Text>\n <Text style={body} selectable>\n {record.text}\n </Text>\n </View>\n {record.successCriteria ? (\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.doneWhen\")}</Text>\n <Text style={body} selectable>\n {record.successCriteria}\n </Text>\n </View>\n ) : null}\n {record.status === \"paused\" && record.rationale ? (\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.whyItPaused\")}</Text>\n <Text style={body}>{record.rationale}</Text>\n </View>\n ) : null}\n {record.status === \"completed\" && record.evidence ? (\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.evidence\")}</Text>\n <Text style={body}>{record.evidence}</Text>\n </View>\n ) : null}\n {!readOnly && record.status !== \"completed\" ? (\n <View style={{ flexDirection: \"row\", gap: 8 }}>\n {record.status === \"active\" ? (\n <Button\n label={m.pauseGoal}\n icon=\"pause\"\n busy={goal.updating}\n onPress={() => void goal.pause()}\n />\n ) : (\n <Button\n label={m.resumeGoal}\n icon=\"play\"\n variant=\"primary\"\n busy={goal.updating}\n onPress={() => void goal.resume()}\n />\n )}\n </View>\n ) : null}\n {goal.mutationError ? (\n <Text style={{ ...body, color: c[\"status-failed\"] }}>{goal.mutationError.message}</Text>\n ) : null}\n </ScrollView>\n );\n}\n\n/** The web commands panel: each running command with its state and a Stop action. */\nexport function SessionCommandsList({\n commands,\n readOnly,\n}: {\n commands: SessionCommandsSource;\n readOnly?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n if (commands.loading && commands.commands.length === 0) {\n return <ActivityIndicator style={{ padding: 24 }} />;\n }\n if (commands.commands.length === 0) {\n return (\n <Text style={{ ...fontStyle(theme, 400), color: c[\"fg-muted\"], padding: 20 }}>\n {t(\"native.timeline.sessionSignals.noCommandsAreRunning\")}\n </Text>\n );\n }\n return (\n <ScrollView contentContainerStyle={{ paddingHorizontal: 16, gap: 8, paddingBottom: 12 }}>\n {commands.commands.map((command) => {\n const running = command.state === \"running\";\n return (\n <View\n key={command.id}\n style={{\n gap: 6,\n padding: 12,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Text\n numberOfLines={3}\n style={{ ...fontStyle(theme, 400, \"mono\"), fontSize: 13, color: c.fg }}\n >\n {`$ ${command.commandPreview}`}\n </Text>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Text\n style={{ ...fontStyle(theme, 400), fontSize: 12, color: c[\"fg-muted\"], flex: 1 }}\n >\n {command.provider === \"connected_machine\" ? m.onMachine : m.inSandbox} ·{\" \"}\n {command.state === \"stopping\" ? m.stopping : running ? m.running : m.finished}\n </Text>\n {running && !readOnly ? (\n <Button\n label={m.stop}\n icon=\"square\"\n size=\"sm\"\n onPress={() => void commands.cancel(command.id)}\n />\n ) : null}\n </View>\n </View>\n );\n })}\n </ScrollView>\n );\n}\n\n/** The compact signal chip shared by goal, agents, commands and the queue. */\nexport function signalChipStyle(theme: NativeTimelineTheme, pressed: boolean) {\n return {\n flexDirection: \"row\" as const,\n alignItems: \"center\" as const,\n gap: 5,\n height: 30,\n paddingHorizontal: 10,\n borderRadius: 15,\n backgroundColor: pressed ? theme.colors.hover : theme.colors[\"surface-2\"],\n };\n}\n\nexport function signalChipText(theme: NativeTimelineTheme): TextStyle {\n return { ...fontStyle(theme, 500), fontSize: 13, color: theme.colors.fg };\n}\n","import type { ComposerDraft, SessionTurn } from \"@opengeni/sdk\";\nimport type { useTurnQueue } from \"@opengeni/react/session\";\nimport {\n isAuthoritativeQueuedTurn,\n QUEUE_ITEM_CONTENT_UNAVAILABLE,\n QUEUE_REPLACE_DRAFT_COPY,\n queueItemContent,\n queuedTurnPresentation,\n queueNeighborAnchors,\n} from \"@opengeni/react/queue-presentation-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useMemo, useState, type ReactNode } from \"react\";\nimport { ActivityIndicator, Pressable, Text, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { blendOver, withAlpha } from \"./primitives\";\nimport { CompactSignalsContext } from \"./session-signals\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport type { NativeAnnotationLike } from \"./annotations\";\n\n/* ----------------------------------------------------------------------------\n The web session-chrome queue dock above the composer: a \"N queued · Steer\"\n chip, then each waiting prompt on one line with Move up/down, Steer, Edit\n (back into the composer, confirming before it replaces a draft) and Remove.\n Which turns count, their text and the move anchors are the shared queue\n model. Under one Send (`singleSend`) waiting messages offer no Steer.\n -------------------------------------------------------------------------- */\n\ntype TurnQueue = ReturnType<typeof useTurnQueue>;\n\n/** The composer surface the dock checks prompts out into. */\nexport interface QueueDockComposer {\n draftRevision: number;\n hasDraftContent: () => boolean;\n applyDraft: (draft: ComposerDraft) => void;\n draftPersistence?: \"durable\" | \"disabled\" | undefined;\n}\n\nexport function QueueDock({\n queue,\n composer,\n onComposerFocus,\n onReviewAnnotations,\n leading,\n singleSend = false,\n}: {\n queue: TurnQueue;\n composer?: QueueDockComposer | undefined;\n onComposerFocus?: (() => void) | undefined;\n /** Show a waiting message's quotes and notes. */\n onReviewAnnotations?: ((annotations: readonly NativeAnnotationLike[]) => void) | undefined;\n /** Chips sharing the queue chip's row (goal, agents, commands). */\n leading?: ReactNode;\n /** One Send and nothing to choose: no Steer on waiting messages. */\n singleSend?: boolean | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [open, setOpen] = useState(true);\n const t = useOpenGeniText();\n const [replaceDraftFor, setReplaceDraftFor] = useState<string | null>(null);\n const turns = useMemo(\n () => queue.queue.filter((turn) => isAuthoritativeQueuedTurn(turn, queue.mutationFor)),\n [queue.mutationFor, queue.queue],\n );\n // A failed queue action stays visible until tapped, whether or not prompts\n // are queued (a Steer is never a queue row).\n const mutationError = queue.mutationError ? (\n <Pressable accessibilityRole=\"alert\" onPress={queue.clearMutationError}>\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"status-failed\"] }}>\n {queue.mutationError.message}\n </Text>\n </Pressable>\n ) : null;\n if (turns.length === 0) {\n if (!mutationError) {\n return leading ? <View style={{ flexDirection: \"row\" }}>{leading}</View> : null;\n }\n return (\n <View style={{ gap: 6 }}>\n {leading ? <View style={{ flexDirection: \"row\" }}>{leading}</View> : null}\n {mutationError}\n </View>\n );\n }\n const first = turns[0]!;\n // The compact signal chip text (goal, agents and the queue share one row).\n const small = { ...fontStyle(theme, 500), fontSize: 13, color: c.fg };\n const canEdit = composer !== undefined && composer.draftPersistence !== \"disabled\";\n const checkout = async (turnId: string, replaceDraft: boolean) => {\n if (!composer) return;\n const draft = await queue.editTurn(turnId, {\n expectedDraftRevision: composer.draftRevision,\n replaceDraft,\n });\n if (draft) {\n composer.applyDraft(draft);\n onComposerFocus?.();\n }\n };\n const edit = (turn: SessionTurn) => {\n if (!composer) return;\n if (composer.hasDraftContent()) setReplaceDraftFor(turn.id);\n else void checkout(turn.id, false);\n };\n return (\n <View style={{ gap: 6 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6 }}>\n <CompactSignalsContext.Provider value={true}>{leading}</CompactSignalsContext.Provider>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n height: 30,\n borderRadius: 15,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n accessibilityLabel={t(\"counts.queuedPrompts\", { count: turns.length })}\n onPress={() => setOpen((value) => !value)}\n hitSlop={{ top: 7, bottom: 7 }}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 5,\n height: 30,\n paddingLeft: 10,\n paddingRight: 6,\n }}\n >\n <Icon name=\"list-ordered\" size={13} color={c[\"fg-muted\"]} />\n <Text style={small}>{t(\"sessionChrome.queuedCount\", { count: turns.length })}</Text>\n </Pressable>\n {singleSend ? (\n <View style={{ width: 4 }} />\n ) : (\n <>\n <View style={{ width: 1, height: 14, backgroundColor: c.border }} />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.steerFirstQueued}\n disabled={queue.mutating || queue.mutationFor(first.id) !== null}\n onPress={() => void queue.steerTurn(first.id)}\n hitSlop={{ top: 7, bottom: 7 }}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n height: 30,\n paddingLeft: 6,\n paddingRight: 10,\n }}\n >\n <Icon name=\"corner-down-right\" size={13} color={c[\"fg-muted\"]} />\n <Text style={small}>{m.steer}</Text>\n </Pressable>\n </>\n )}\n </View>\n </View>\n {open ? (\n <View\n accessibilityLabel={m.queuedPrompts}\n style={{\n borderRadius: theme.radius.lg,\n // Opaque: the dock floats over scrolling conversation.\n backgroundColor: blendOver(c.bg, c[\"surface-2\"], 0.6),\n paddingHorizontal: 8,\n paddingVertical: 2,\n }}\n >\n {turns.map((turn, index) => {\n const presentation = queuedTurnPresentation(t, turn);\n const voice = presentation.kind !== \"prompt\";\n const pending = queue.mutationFor(turn.id);\n const busy = pending !== null;\n const { beforeUp, beforeDown } = queueNeighborAnchors(turns, index);\n const annotationCount = turn.annotations?.length ?? 0;\n const content = queueItemContent(presentation.text, annotationCount);\n const label =\n content === \"text\"\n ? presentation.text\n : content === \"annotations\"\n ? t(\"counts.timelineAnnotations\", { count: annotationCount })\n : QUEUE_ITEM_CONTENT_UNAVAILABLE(t);\n return (\n <View key={turn.id} style={{ gap: 4 }}>\n <View\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6, paddingLeft: 6 }}\n >\n {voice ? (\n <Icon name=\"audio-lines\" size={12} color={c.accent} />\n ) : (\n <Text\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: 10,\n color: c[\"fg-subtle\"],\n }}\n >\n {index + 1}\n </Text>\n )}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: content === \"unavailable\" ? c[\"fg-muted\"] : c.fg,\n fontStyle: content === \"unavailable\" ? \"italic\" : \"normal\",\n }}\n >\n {label}\n </Text>\n {annotationCount > 0 && onReviewAnnotations ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotations.reviewCountlabel\", {\n countLabel: t(\"counts.annotations\", { count: annotationCount }),\n })}\n hitSlop={8}\n onPress={() => onReviewAnnotations(turn.annotations ?? [])}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 3,\n height: 22,\n paddingHorizontal: 7,\n borderRadius: 11,\n backgroundColor: c[\"accent-soft\"],\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <Icon name=\"quote\" size={10} color={c[\"fg-muted\"]} />\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: 11,\n color: c[\"fg-muted\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {annotationCount}\n </Text>\n </Pressable>\n ) : null}\n {turns.length > 1 ? (\n <>\n <RowAction\n icon=\"arrow-up\"\n label={t(\"sessionChrome.moveQueuedPromptIndexUp\", { index: index + 1 })}\n disabled={busy || index === 0}\n onPress={() => void queue.moveTurn(turn.id, beforeUp)}\n />\n <RowAction\n icon=\"arrow-down\"\n label={t(\"sessionChrome.moveQueuedPromptIndexDown\", { index: index + 1 })}\n disabled={busy || index >= turns.length - 1}\n onPress={() => void queue.moveTurn(turn.id, beforeDown)}\n />\n </>\n ) : null}\n {singleSend ? null : (\n <RowAction\n icon=\"corner-down-right\"\n label={t(\"sessionChrome.steerQueuedPromptIndex\", { index: index + 1 })}\n disabled={busy}\n busy={pending === \"steer\"}\n onPress={() => void queue.steerTurn(turn.id)}\n />\n )}\n {canEdit ? (\n <RowAction\n icon=\"pencil\"\n label={t(\"sessionChrome.editQueuedPromptIndex\", { index: index + 1 })}\n disabled={busy}\n busy={pending === \"edit\"}\n onPress={() => edit(turn)}\n />\n ) : null}\n <RowAction\n icon=\"trash-2\"\n label={t(\"sessionChrome.removeQueuedPromptIndex\", { index: index + 1 })}\n disabled={busy}\n busy={pending === \"delete\"}\n onPress={() => void queue.removeTurn(turn.id)}\n />\n </View>\n {replaceDraftFor === turn.id ? (\n <View\n style={{\n gap: 4,\n padding: 8,\n marginBottom: 4,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: withAlpha(c[\"status-waiting\"], 0.3),\n backgroundColor: withAlpha(c[\"status-waiting\"], 0.1),\n }}\n >\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c.fg }}>\n {QUEUE_REPLACE_DRAFT_COPY(t).title}\n </Text>\n <Text\n style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"fg-muted\"] }}\n >\n {QUEUE_REPLACE_DRAFT_COPY(t).detail}\n </Text>\n <View\n style={{\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n gap: 6,\n marginTop: 4,\n }}\n >\n <Button\n label={QUEUE_REPLACE_DRAFT_COPY(t).keep}\n variant=\"ghost\"\n onPress={() => setReplaceDraftFor(null)}\n />\n <Button\n label={QUEUE_REPLACE_DRAFT_COPY(t).replace}\n variant=\"primary\"\n onPress={() => {\n setReplaceDraftFor(null);\n void checkout(turn.id, true);\n }}\n />\n </View>\n </View>\n ) : null}\n </View>\n );\n })}\n </View>\n ) : null}\n {mutationError}\n </View>\n );\n}\n\n/** A web IconAction at touch size: icon, optional text, a spinner while busy. */\nfunction RowAction(props: {\n icon: NativeIconName;\n label: string;\n text?: string | undefined;\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n onPress: () => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={props.label}\n accessibilityState={{ disabled: Boolean(props.disabled), busy: Boolean(props.busy) }}\n disabled={props.disabled}\n onPress={props.onPress}\n hitSlop={{ top: 6, bottom: 6, left: 2, right: 2 }}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n minWidth: 30,\n height: 32,\n paddingHorizontal: props.text ? 6 : 0,\n borderRadius: theme.radius.sm,\n backgroundColor: pressed ? c.hover : \"transparent\",\n opacity: props.disabled && !props.busy ? 0.4 : 1,\n })}\n >\n {props.busy ? (\n <ActivityIndicator size=\"small\" color={c[\"fg-muted\"]} />\n ) : (\n <Icon name={props.icon} size={14} color={c.fg} />\n )}\n {props.text ? (\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c.fg }}>\n {props.text}\n </Text>\n ) : null}\n </Pressable>\n );\n}\n","import { NativeTimelineMessagesProvider, type NativeTimelineMessages } from \"./messages\";\nimport {\n conversationTimeline,\n personalMachineCopy,\n useSessionStart,\n type AgentMessageItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport { machineDisplayName } from \"@opengeni/react/sandbox-label-model\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n ActivityIndicator,\n Alert,\n Image,\n Pressable,\n Text,\n View,\n type TextInput,\n} from \"react-native\";\nimport { annotationHasNote } from \"@opengeni/react/timeline-model\";\nimport {\n defaultChatComposerMessages,\n type ChatComposerMessages,\n} from \"@opengeni/react/composer-messages\";\nimport { Icon } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport type { OpenGeniNativeSessionController } from \"../use-native-session\";\nimport type { NativeFileAttachmentsResult } from \"../attachments\";\nimport { SessionComposer, type SessionComposerProps } from \"./composer\";\nimport { TurnFeedbackButtons, useTurnRatings, type TurnFeedbackTarget } from \"./feedback\";\nimport { Button } from \"./controls\";\nimport {\n ApprovalStrip,\n HumanInputCard,\n type ApprovalStripProps,\n type HumanInputCardProps,\n} from \"./decisions\";\nimport { NativeMessageAttachments } from \"./message-attachments\";\nimport { QueueDock } from \"./queue-dock\";\nimport {\n AnnotationsChip,\n AnnotationsSheet,\n type AnnotationReveal,\n type NativeAnnotationLike,\n} from \"./annotations\";\nimport { SessionCommandsList, SessionSignals } from \"./session-signals\";\nimport type { ClientModel, OpenGeniClient, Session, SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport { MessageTimeline, type NativeMessageTimelineProps } from \"./message-timeline\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { SingleSendWording, useOpenGeniText } from \"@opengeni/react/messages\";\n\n/* ----------------------------------------------------------------------------\n The web session page body at phone width: timeline (with the question card\n as its trailing state), the live approval strip and the composer, driven by\n the shared session controller. Navigation chrome belongs to the host.\n -------------------------------------------------------------------------- */\n\nexport interface NativeSessionScreenProps extends Omit<\n NativeMessageTimelineProps,\n \"items\" | \"events\" | \"status\" | \"trailing\"\n> {\n controller: OpenGeniNativeSessionController;\n /** Composer slots (products add their own actions/options here). */\n composer?:\n | Partial<\n Pick<\n SessionComposerProps,\n | \"renderLeading\"\n | \"options\"\n | \"header\"\n | \"placeholder\"\n | \"onAttach\"\n | \"messages\"\n | \"onActionFeedback\"\n | \"voice\"\n | \"call\"\n >\n >\n | undefined;\n /** Extra content after the question card (host recovery, banners). */\n trailing?: ReactNode;\n /** Fixed host chrome above the timeline, inside the keyboard-avoiding area. */\n topBar?: ReactNode;\n bottomInset?: number | undefined;\n /** Distance from this screen's bottom edge to the window bottom (e.g. a tab bar). */\n keyboardBottomOffset?: number | undefined;\n /** Reply feedback (thumbs beside Copy), as the web timeline offers it. */\n feedback?: TurnFeedbackTarget | undefined;\n /** Translations for the question card (the shared human-input catalog). */\n humanInputMessages?: HumanInputCardProps[\"messages\"];\n /** Translations for the approval strip. */\n approvalMessages?: ApprovalStripProps[\"messages\"];\n /** Reads the commands panel (the full client; omit to hide command details). */\n client?: OpenGeniClient | undefined;\n /** Model catalog for the agents panel rows. */\n models?: readonly ClientModel[] | undefined;\n /** Translations for the strings the native surfaces draw (merged over any provider above). */\n timelineMessages?: Partial<NativeTimelineMessages> | undefined;\n /**\n * Draw the composer yourself. Receives exactly the props the shared\n * `SessionComposer` would get (queue dock, approvals and attachment chips\n * included), so a host can restyle it or render its own native composer.\n * A floating composer must report its height through `onHeightChange`.\n */\n renderComposer?: ((props: SessionComposerProps) => ReactNode) | undefined;\n}\n\nexport function NativeSessionScreen({\n controller,\n composer: composerSlots,\n trailing,\n topBar,\n bottomInset,\n keyboardBottomOffset,\n feedback,\n humanInputMessages,\n approvalMessages,\n client,\n models,\n timelineMessages,\n renderComposer,\n renderMessageActions: hostMessageActions,\n ...timelineProps\n}: NativeSessionScreenProps) {\n // One Send (`busySend: \"steer\"` without `offerQueue`): waiting messages,\n // not a queue, and no Steer to learn.\n return (\n <SingleSendWording enabled={controller.composer.singleSend === true}>\n <NativeTimelineMessagesProvider messages={timelineMessages}>\n <SessionScreenBody\n controller={controller}\n composer={composerSlots}\n trailing={trailing}\n topBar={topBar}\n bottomInset={bottomInset}\n keyboardBottomOffset={keyboardBottomOffset}\n feedback={feedback}\n humanInputMessages={humanInputMessages}\n approvalMessages={approvalMessages}\n client={client}\n models={models}\n renderComposer={renderComposer}\n renderMessageActions={hostMessageActions}\n {...timelineProps}\n />\n </NativeTimelineMessagesProvider>\n </SingleSendWording>\n );\n}\n\nfunction SessionScreenBody({\n controller,\n composer: composerSlots,\n trailing,\n topBar,\n bottomInset,\n keyboardBottomOffset,\n feedback,\n humanInputMessages,\n approvalMessages,\n client,\n models,\n renderComposer,\n renderMessageActions: hostMessageActions,\n ...timelineProps\n}: Omit<NativeSessionScreenProps, \"timelineMessages\">) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const m = useNativeTimelineMessages();\n const { composer, queue, humanInput, approvals, control, attachments } = controller;\n const composerInput = useRef<ComponentRef<typeof TextInput>>(null);\n const annotationReveal = useRef<AnnotationReveal | null>(null);\n const draftAnnotations = composer.annotations ?? [];\n const annotationsIncomplete = draftAnnotations.some(\n (annotation) => annotation.note.trim().length === 0,\n );\n const reviewTargetId = composer.annotationReviewTargetId ?? null;\n const [reviewOpen, setReviewOpen] = useState(false);\n // A new quote, a marker tap or a send with an empty note opens its note.\n useEffect(() => {\n if (reviewTargetId) setReviewOpen(true);\n }, [reviewTargetId]);\n const closeReview = useCallback(() => {\n setReviewOpen(false);\n composer.clearAnnotationReviewTarget?.();\n }, [composer]);\n const [queuedReview, setQueuedReview] = useState<readonly NativeAnnotationLike[] | null>(null);\n // Each send brings the conversation back to its latest row.\n const [followLatestSignal, setFollowLatestSignal] = useState(0);\n const followLatest = useCallback(() => setFollowLatestSignal((value) => value + 1), []);\n // The composer floats over the conversation; its occupied height insets the timeline.\n const [composerHeight, setComposerHeight] = useState(120);\n const items = useMemo(\n () => conversationTimeline(controller.timeline, queue, composer),\n [controller.timeline, queue, composer],\n );\n const status = controller.sessionStatus;\n const paused = queue.effectiveControl?.state === \"paused\";\n const waitingOnInput = humanInput.requests.length > 0 && status === \"requires_action\";\n const busy = composer.sending || composer.pausing || composer.resuming;\n const { ratings, rate } = useTurnRatings(feedback);\n const failed = controller.connectionState === \"error\";\n useAutoRecover(\n failed && controller.active,\n controller.connectionState === \"live\",\n controller.refresh,\n );\n const empty = items.length === 0;\n // Web order beside Copy: reply feedback, then host actions (fork, share…).\n const renderMessageActions = useCallback(\n (item: AgentMessageItem | UserMessageItem) => {\n const host = hostMessageActions?.(item);\n if (!feedback || item.kind !== \"agent-message\" || item.streaming || !item.turnId) return host;\n const turnId = item.turnId;\n return (\n <>\n <TurnFeedbackButtons\n target={feedback}\n turnId={turnId}\n saved={ratings[turnId]}\n onRated={(sentiment) => rate(turnId, sentiment)}\n />\n {host}\n </>\n );\n },\n [feedback, hostMessageActions, rate, ratings],\n );\n return (\n <View style={{ flex: 1, backgroundColor: theme.colors.bg }}>\n {topBar}\n <MessageTimeline\n onAnnotate={composer.addAnnotation}\n draftAnnotations={composer.annotations}\n onDraftAnnotationSelect={composer.requestAnnotationReview}\n annotationRevealRef={annotationReveal}\n followLatestSignal={followLatestSignal}\n {...timelineProps}\n hasOlder={controller.hasOlder}\n loadingOlder={controller.loadingOlder}\n onLoadOlder={controller.loadOlder}\n contentInsetBottom={composerHeight + 20}\n overlayInsetBottom={composerHeight}\n renderMessageActions={feedback || hostMessageActions ? renderMessageActions : undefined}\n renderUserAttachments={\n timelineProps.renderUserAttachments ??\n (client\n ? (item) => (\n <NativeMessageAttachments\n client={client}\n workspaceId={controller.workspaceId}\n sessionId={controller.sessionId}\n resources={item.resources}\n />\n )\n : undefined)\n }\n items={items}\n status={status}\n emptyState={\n empty && failed ? (\n <LoadFailure\n message={loadFailureMessage(controller.error, m.connectionFailed)}\n onRetry={() => void controller.refresh()}\n />\n ) : empty && controller.initialLoading ? (\n <View style={{ flex: 1, alignItems: \"center\", justifyContent: \"center\", gap: 8 }}>\n <ActivityIndicator color={theme.colors[\"fg-muted\"]} />\n </View>\n ) : (\n timelineProps.emptyState\n )\n }\n trailing={\n <>\n {controller.admissionBlocked && !paused && controller.session.session ? (\n <StuckCard\n session={controller.session.session}\n busy={composer.resuming || control.controlling}\n onSessionChanged={async () => {\n await Promise.all([controller.session.refresh(), queue.refresh()]);\n }}\n />\n ) : null}\n {waitingOnInput ? (\n <HumanInputCard\n requests={humanInput.requests}\n respondingRequestId={humanInput.respondingRequestId}\n error={humanInput.mutationError?.message}\n messages={humanInputMessages}\n onSubmit={(requestId, response) =>\n humanInput.respond(requestId, response).then(() => undefined)\n }\n />\n ) : null}\n {trailing}\n </>\n }\n />\n {(renderComposer ?? renderSharedComposer)({\n floating: true,\n onHeightChange: (height) => setComposerHeight(Math.round(height)),\n onActionFeedback: composerSlots?.onActionFeedback,\n value: composer.value,\n onChangeText: composer.setValue,\n // A quote without its note cannot be sent: Send opens that note instead\n // of staying disabled with no reason given.\n onSend: () => {\n if (annotationsIncomplete) composer.requestAnnotationReview?.();\n else {\n followLatest();\n void composer.send();\n }\n },\n // The other choice beside Send while the agent works: Queue when\n // Send steers, Steer when Send queues.\n alternateSend: composer.alternateSend ?? null,\n ...(composer.sendAlternate\n ? {\n onAlternateSend: () => {\n if (annotationsIncomplete) {\n composer.requestAnnotationReview?.();\n return;\n }\n followLatest();\n void composer.sendAlternate?.();\n },\n }\n : {}),\n canSend: (composer.canSend || (annotationsIncomplete && !composer.sending)) && !busy,\n sending: composer.sending,\n running: controller.runActive,\n paused: paused,\n pauseBusy: composer.pausing || composer.resuming,\n onPause: () => void composer.pause(),\n onResume: () => void composer.resume(),\n onAttach: composerSlots?.onAttach ?? (() => void attachments.pickImages()),\n onPasteImages: (files) => void attachments.addFiles(files),\n renderLeading: composerSlots?.renderLeading,\n options: composerSlots?.options,\n placeholder: composerSlots?.placeholder,\n bottomInset: bottomInset,\n keyboardBottomOffset: keyboardBottomOffset,\n inputRef: composerInput,\n messages: composerSlots?.messages,\n voice: composerSlots?.voice,\n call: composerSlots?.call,\n below: composer.draftConflict ? (\n <DraftConflictStrip\n messages={composerSlots?.messages}\n onResolve={(choice) => void composer.resolveDraftConflict(choice)}\n />\n ) : null,\n header: (\n <>\n {composerSlots?.header}\n <AttachmentChips attachments={attachments} />\n {draftAnnotations.length > 0 && composer.removeAnnotation ? (\n <View style={{ paddingHorizontal: 12, paddingTop: 10 }}>\n <AnnotationsChip\n annotations={draftAnnotations}\n onPress={() => composer.requestAnnotationReview?.()}\n onClear={() => {\n const removeAll = () => {\n for (const annotation of draftAnnotations) {\n composer.removeAnnotation?.(annotation.id);\n }\n };\n // Bare quotes go at once; written notes are worth one confirm,\n // since the × sits right beside the chip.\n if (!draftAnnotations.some((item) => annotationHasNote(item.note))) {\n removeAll();\n return;\n }\n Alert.alert(\n t(\"native.timeline.annotations.removeAllTitle\", {\n count: draftAnnotations.length,\n }),\n t(\"native.timeline.annotations.removeAllMessage\", {\n count: draftAnnotations.filter((item) => annotationHasNote(item.note))\n .length,\n }),\n [\n { text: t(\"native.timeline.annotations.cancel\"), style: \"cancel\" },\n {\n text: t(\"native.timeline.annotations.removeAllConfirm\"),\n style: \"destructive\",\n onPress: removeAll,\n },\n ],\n );\n }}\n />\n </View>\n ) : null}\n </>\n ),\n above: (\n <>\n <QueueDock\n queue={queue}\n composer={composer}\n singleSend={composer.singleSend === true}\n onComposerFocus={() => composerInput.current?.focus()}\n onReviewAnnotations={setQueuedReview}\n leading={\n <SessionSignals\n goal={controller.goal}\n agents={controller.lineage.lineage?.children ?? []}\n commandsCount={controller.session.session?.backgroundCommandActivity?.count ?? 0}\n onOpenSession={timelineProps.onOpenSession}\n models={models}\n readOnly={status === \"failed\" || status === \"cancelled\"}\n renderCommands={() =>\n client ? (\n <NativeSessionCommands\n client={client}\n workspaceId={controller.workspaceId}\n sessionId={controller.sessionId}\n />\n ) : null\n }\n />\n }\n />\n {approvals.length > 0 && status === \"requires_action\" ? (\n <ApprovalStrip\n approvals={approvals}\n messages={approvalMessages}\n onDecide={(id, decision) =>\n (decision === \"approve\" ? control.approve(id) : control.reject(id)).then(\n () => undefined,\n )\n }\n />\n ) : null}\n </>\n ),\n })}\n <AnnotationsSheet\n open={reviewOpen}\n onClose={closeReview}\n annotations={draftAnnotations}\n editable={Boolean(composer.updateAnnotation)}\n focusId={reviewTargetId}\n onFocusConsumed={composer.clearAnnotationReviewTarget}\n onUpdate={composer.updateAnnotation}\n onRemove={composer.removeAnnotation}\n onReveal={(source, quote) => annotationReveal.current?.(source, quote) ?? false}\n onCommit={() => {\n closeReview();\n setTimeout(() => composerInput.current?.focus(), 250);\n }}\n />\n <AnnotationsSheet\n open={queuedReview !== null}\n onClose={() => setQueuedReview(null)}\n annotations={queuedReview ?? []}\n editable={false}\n onReveal={(source, quote) => annotationReveal.current?.(source, quote) ?? false}\n />\n </View>\n );\n}\n\n/**\n * A failed session stream retries with backoff (1s doubling to 30s) while the\n * screen is active, so a transient API outage recovers without a relaunch.\n */\nfunction useAutoRecover(failed: boolean, live: boolean, refresh: () => Promise<void>) {\n const delay = useRef(1_000);\n useEffect(() => {\n // Only a live stream ends the outage; a retry briefly clears the error.\n if (live) delay.current = 1_000;\n }, [live]);\n useEffect(() => {\n if (!failed) return;\n const timer = setTimeout(() => {\n delay.current = Math.min(delay.current * 2, 30_000);\n void refresh();\n }, delay.current);\n return () => clearTimeout(timer);\n }, [failed, refresh]);\n}\n\n/** Transport failures read as a connection problem, never as a native stack. */\nfunction loadFailureMessage(error: Error | null, connectionFailed: string): string | undefined {\n if (!error) return undefined;\n if (\n error.name === \"TypeError\" ||\n /fetch failed|network request failed|could not connect|offline|timed out/i.test(error.message)\n ) {\n return connectionFailed;\n }\n return error.message;\n}\n\nfunction LoadFailure({ message, onRetry }: { message?: string | undefined; onRetry: () => void }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n return (\n <View style={{ flex: 1, alignItems: \"center\", justifyContent: \"center\", gap: 10, padding: 24 }}>\n <Icon name=\"circle-alert\" size={20} color={theme.colors[\"status-failed\"]} />\n <Text style={{ ...fontStyle(theme, 500), fontSize: 15, color: theme.colors.fg }}>\n {m.loadFailedTitle}\n </Text>\n {message ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 13,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n textAlign: \"center\",\n }}\n >\n {message}\n </Text>\n ) : null}\n <Button label={m.retry} onPress={onRetry} />\n </View>\n );\n}\n\n/**\n * The runtime could not start this session's next step. It is not waiting on\n * the person, so it says so plainly and offers one recheck (Resume), which\n * starts the kept work again.\n */\nfunction StuckCard({\n session,\n busy,\n onSessionChanged,\n}: {\n session: Session;\n busy: boolean;\n onSessionChanged: () => Promise<void>;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n // The same state as the web notice: why the saved message didn't start, the\n // machines this person may move the chat to, and one fenced recheck.\n const start = useSessionStart({ session, onSessionChanged });\n const [failed, setFailed] = useState(false);\n // The recheck is one fenced Resume outside the session control runner, so\n // the card holds its own pending state: busy while it runs, and a second tap\n // before the first settles sends nothing (as the web notice does).\n const [rechecking, setRechecking] = useState(false);\n const recheckPending = useRef(false);\n const [moving, setMoving] = useState<string | null>(null);\n const [moveError, setMoveError] = useState<string | null>(null);\n const c = theme.colors;\n const reason = start.reason;\n const machine =\n start.needsDifferentMachine && start.machineAccess\n ? personalMachineCopy(t, start.machineAccess, { queued: true })\n : null;\n const needsAccess =\n reason?.reason === \"initiator_membership_required\" ||\n reason?.reason === \"personal_resource_grant_required\";\n const textStyle = { ...fontStyle(theme), fontSize: 14, lineHeight: 20, color: c[\"fg-muted\"] };\n return (\n <View\n accessibilityRole=\"summary\"\n style={{\n gap: 10,\n padding: 14,\n borderRadius: 14,\n borderWidth: 1,\n borderColor: withAlpha(c[\"status-failed\"], 0.3),\n backgroundColor: withAlpha(c[\"status-failed\"], 0.08),\n }}\n >\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Icon name=\"circle-alert\" size={16} color={c[\"status-failed\"]} />\n <Text style={{ ...fontStyle(theme, 600), fontSize: 15, color: c.fg, flexShrink: 1 }}>\n {machine ? t(\"sessionAdmission.needsDifferentMachineTitle\") : m.stuckTitle}\n </Text>\n </View>\n {machine ? (\n <>\n <Text style={textStyle}>{machine.explanation}</Text>\n <Text style={textStyle}>{machine.next}</Text>\n {start.canChooseMachine ? (\n <View\n style={{ gap: 6 }}\n accessibilityLabel={t(\"sessionAdmission.chooseAMachineForThisChat\")}\n >\n {start.machineChoices.length === 0 ? (\n <Text style={textStyle}>{t(\"sessionAdmission.noMachineChoices\")}</Text>\n ) : (\n start.machineChoices.map((choice) => (\n <Button\n key={choice.sandboxId}\n label={\n moving === choice.sandboxId\n ? t(\"sessionAdmission.moving\")\n : machineDisplayName(t, choice)\n }\n busy={moving === choice.sandboxId}\n disabled={busy || moving !== null}\n style={{ alignSelf: \"stretch\" }}\n onPress={() => {\n setMoving(choice.sandboxId);\n setMoveError(null);\n start\n .chooseMachine(choice)\n .then(setMoveError, () =>\n setMoveError(t(\"sessionAdmission.machineChangeFailed\")),\n )\n .finally(() => setMoving(null));\n }}\n />\n ))\n )}\n <Text style={{ ...textStyle, fontSize: 13 }}>\n {t(\"sessionAdmission.savedMessageMachineNote\")}\n </Text>\n </View>\n ) : null}\n {moveError ? (\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{ ...fontStyle(theme), fontSize: 13, color: c[\"status-failed\"] }}\n >\n {start.machineChoiceError || moveError}\n </Text>\n ) : null}\n </>\n ) : (\n <Text style={textStyle}>{needsAccess ? m.stuckAccessBody : m.stuckBody}</Text>\n )}\n {failed ? (\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{\n ...fontStyle(theme),\n fontSize: 13,\n color: c[\"status-failed\"],\n }}\n >\n {m.stuckRetryFailed}\n </Text>\n ) : null}\n {machine ? null : (\n <Button\n label={m.stuckRetry}\n variant=\"primary\"\n busy={busy || rechecking}\n disabled={busy || rechecking}\n style={{ alignSelf: \"flex-start\" }}\n onPress={() => {\n if (recheckPending.current) return;\n recheckPending.current = true;\n setRechecking(true);\n setFailed(false);\n start\n .recheck()\n .catch(() => setFailed(true))\n .finally(() => {\n recheckPending.current = false;\n setRechecking(false);\n });\n }}\n />\n )}\n </View>\n );\n}\n\n/** Composer attachment chips: name, upload state, tap to retry a failure, remove. */\nexport function AttachmentChips({ attachments }: { attachments: NativeFileAttachmentsResult }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n if (attachments.attachments.length === 0) return null;\n return (\n <View\n style={{\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 6,\n paddingHorizontal: 12,\n paddingTop: 10,\n }}\n >\n {attachments.attachments.map((item) => {\n const failed = item.status === \"failed\";\n const busy = item.status === \"uploading\" || item.status === \"preparing\";\n if (item.kind === \"image\" && item.previewUri) {\n // Photos show as photos, as on the web: a thumbnail with its state on top.\n return (\n <View key={item.id} style={{ width: 56, height: 56 }}>\n <Pressable\n accessibilityRole={failed ? \"button\" : \"image\"}\n accessibilityLabel={\n failed\n ? t(\"native.timeline.sessionScreen.retryName\", { name: item.name })\n : item.name\n }\n disabled={!failed}\n onPress={() => void attachments.retry(item.id)}\n style={{\n width: 56,\n height: 56,\n borderRadius: theme.radius.md,\n overflow: \"hidden\",\n borderWidth: 1,\n borderColor: failed ? withAlpha(c[\"status-failed\"], 0.6) : c.border,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Image\n source={{ uri: item.previewUri }}\n style={{ width: \"100%\", height: \"100%\" }}\n resizeMode=\"cover\"\n />\n {busy || failed ? (\n <View\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: failed\n ? withAlpha(c[\"status-failed\"], 0.35)\n : \"rgba(0,0,0,0.35)\",\n }}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color=\"#FFFFFF\" />\n ) : (\n <Icon name=\"rotate-ccw\" size={16} color=\"#FFFFFF\" />\n )}\n </View>\n ) : null}\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.sessionScreen.removeName\", {\n name: item.name,\n })}\n onPress={() => attachments.remove(item.id)}\n hitSlop={8}\n style={{\n position: \"absolute\",\n top: -6,\n right: -6,\n width: 20,\n height: 20,\n borderRadius: 10,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: c.fg,\n borderWidth: 1.5,\n borderColor: c[\"surface-1\"],\n }}\n >\n <Icon name=\"x\" size={10} color={c.bg} />\n </Pressable>\n </View>\n );\n }\n return (\n <View\n key={item.id}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: failed ? withAlpha(c[\"status-failed\"], 0.4) : c.border,\n paddingLeft: 8,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n failed\n ? t(\"native.timeline.sessionScreen.retryName\", { name: item.name })\n : item.name\n }\n disabled={!failed}\n onPress={() => void attachments.retry(item.id)}\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6, paddingVertical: 4 }}\n >\n {busy ? <ActivityIndicator size=\"small\" color={c[\"fg-subtle\"]} /> : null}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n maxWidth: 160,\n fontSize: theme.size.xs,\n color: failed ? c[\"status-failed\"] : c[\"fg-muted\"],\n }}\n >\n {item.name}\n {failed ? t(\"native.timeline.sessionScreen.tapToRetrySuffix\") : \"\"}\n </Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.sessionScreen.removeName\", {\n name: item.name,\n })}\n onPress={() => attachments.remove(item.id)}\n hitSlop={6}\n style={{ width: 28, height: 28, alignItems: \"center\", justifyContent: \"center\" }}\n >\n <Icon name=\"x\" size={12} color={c[\"fg-subtle\"]} />\n </Pressable>\n </View>\n );\n })}\n </View>\n );\n}\n\n/** The web composer's draft-conflict line: keep this device's draft or take the other. */\nfunction DraftConflictStrip(props: {\n messages?: Partial<ChatComposerMessages> | undefined;\n onResolve: (choice: \"keep_mine\" | \"use_remote\") => void;\n}) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const c = theme.colors;\n const messages = { ...defaultChatComposerMessages(t), ...props.messages };\n const text = { ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"status-failed\"] };\n return (\n <View\n accessibilityRole=\"alert\"\n style={{\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingTop: 12,\n }}\n >\n <Text style={{ ...text, flexGrow: 1, flexShrink: 1, flexBasis: 180 }}>\n {messages.draftConflict}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n hitSlop={10}\n onPress={() => props.onResolve(\"use_remote\")}\n >\n <Text style={{ ...text, textDecorationLine: \"underline\" }}>{messages.useOtherDraft}</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n hitSlop={10}\n onPress={() => props.onResolve(\"keep_mine\")}\n >\n <Text\n style={{\n ...text,\n ...fontStyle(theme, 500),\n color: c[\"status-failed\"],\n textDecorationLine: \"underline\",\n }}\n >\n {messages.keepMine}\n </Text>\n </Pressable>\n </View>\n );\n}\n\n/** Polls the session's commands only while the panel is open, as web does. */\nfunction NativeSessionCommands(props: {\n client: OpenGeniClient;\n workspaceId: string;\n sessionId: string;\n}) {\n const { client, workspaceId, sessionId } = props;\n const [commands, setCommands] = useState<SessionBackgroundCommand[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const load = useCallback(async () => {\n try {\n const response = await client.listSessionBackgroundCommands(workspaceId, sessionId);\n setCommands(response.commands);\n setError(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause : new Error(String(cause)));\n } finally {\n setLoading(false);\n }\n }, [client, sessionId, workspaceId]);\n useEffect(() => {\n void load();\n const timer = setInterval(() => void load(), 3_000);\n return () => clearInterval(timer);\n }, [load]);\n const cancel = useCallback(\n async (commandId: string) => {\n await client.cancelSessionBackgroundCommand(workspaceId, sessionId, commandId);\n await load();\n },\n [client, load, sessionId, workspaceId],\n );\n return <SessionCommandsList commands={{ commands, loading, error, cancel }} />;\n}\n\nfunction renderSharedComposer(props: SessionComposerProps): ReactNode {\n return <SessionComposer {...props} />;\n}\n","import type { ClientModel, LatencyMode, ReasoningEffort } from \"@opengeni/sdk\";\nimport {\n compactEffortLabel,\n groupPresentationFor,\n modelPickerChoice,\n modelPickerMenuView,\n type ModelPickerGroupPresentation,\n type ModelPickerInput,\n} from \"@opengeni/react/model-picker-model\";\nimport { labelReasoningEffort, type PickerBillingClass } from \"@opengeni/react/model-policy\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useState, type ReactNode } from \"react\";\nimport { Pressable, ScrollView, Text, TextInput, View } from \"react-native\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { ModelMark } from \"./session-list\";\nimport { BottomSheet } from \"./sheet\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The web composer's model menu as a native sheet: search, payment groups with\n maker marks, the selected check, unavailable rows with their reason, and the\n Thinking segmented control with Fast. Everything it shows comes from the\n shared model picker model; only the chrome is native.\n -------------------------------------------------------------------------- */\n\nexport type ModelPickerSheetProps = ModelPickerInput<ReactNode> & {\n open: boolean;\n onClose: () => void;\n loading?: boolean | undefined;\n error?: string | null | undefined;\n disabled?: boolean | undefined;\n onModelChange: (modelId: string) => void;\n onEffortChange: (effort: ReasoningEffort) => void;\n onLatencyModeChange: (mode: LatencyMode) => void;\n /** Called after a choice, for host haptics. */\n onSelectionFeedback?: (() => void) | undefined;\n};\n\nconst GROUP_ICON: Record<PickerBillingClass, NativeIconName> = {\n opengeni_credits: \"sparkles\",\n external: \"globe\",\n codex_subscription: \"sparkles\",\n claude_subscription: \"sparkles\",\n supergrok_subscription: \"sparkles\",\n byok: \"key-round\",\n organization_byok: \"key-round\",\n};\n\n/** The subscription rails carry their maker's mark, as on web. */\nconst GROUP_MARK_MODEL: Partial<Record<PickerBillingClass, string>> = {\n codex_subscription: \"codex/gpt\",\n claude_subscription: \"claude\",\n supergrok_subscription: \"grok\",\n};\n\nfunction GroupMark(props: {\n billingClass: PickerBillingClass;\n icon: ReactNode | undefined;\n color: string;\n}) {\n if (props.icon === null) return null;\n if (props.icon !== undefined) return <>{props.icon}</>;\n const model = GROUP_MARK_MODEL[props.billingClass];\n if (model) return <ModelMark model={model} size={14} color={props.color} />;\n return <Icon name={GROUP_ICON[props.billingClass]} size={14} color={props.color} />;\n}\n\nexport function ModelPickerSheet(props: ModelPickerSheetProps) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const t = useOpenGeniText();\n const [query, setQuery] = useState(\"\");\n const view = modelPickerMenuView(t, props, query);\n const { messages, groups, thinking } = view;\n const selectedSpeed =\n thinking?.speeds?.find((speed) => speed.id === props.latencyMode) ?? thinking?.speeds?.[0];\n const close = () => {\n setQuery(\"\");\n props.onClose();\n };\n const choose = (row: (typeof view.rows)[number]) => {\n if (props.disabled) return;\n const choice = modelPickerChoice(props, row);\n if (!choice) return;\n if (choice.model !== null) props.onModelChange(choice.model);\n props.onEffortChange(choice.effort);\n if (choice.latencyMode !== null) props.onLatencyModeChange(choice.latencyMode);\n props.onSelectionFeedback?.();\n };\n const label = { ...fontStyle(theme), fontSize: 15, color: c.fg };\n const muted = { ...fontStyle(theme), fontSize: 13, color: c[\"fg-muted\"] };\n return (\n <BottomSheet open={props.open} onClose={close} accessibilityLabel={messages.label}>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingHorizontal: 20,\n paddingTop: 0,\n paddingBottom: 6,\n }}\n >\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}\n >\n {messages.label}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.modelPicker.done\")}\n onPress={close}\n hitSlop={8}\n style={{ minHeight: 44, justifyContent: \"center\", paddingHorizontal: 4 }}\n >\n <Text style={{ ...fontStyle(theme, 600), fontSize: 16, color: c.accent }}>\n {t(\"native.timeline.modelPicker.done\")}\n </Text>\n </Pressable>\n </View>\n {view.anySelectable ? (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n marginHorizontal: 16,\n marginBottom: 4,\n paddingHorizontal: 12,\n minHeight: 40,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Icon name=\"search\" size={16} color={c[\"fg-subtle\"]} />\n <TextInput\n accessibilityLabel={messages.searchLabel}\n placeholder={messages.searchPlaceholder}\n placeholderTextColor={c[\"fg-subtle\"]}\n value={query}\n onChangeText={setQuery}\n autoCorrect={false}\n autoCapitalize=\"none\"\n clearButtonMode=\"while-editing\"\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: 16,\n color: c.fg,\n paddingVertical: 8,\n }}\n />\n </View>\n ) : null}\n {props.error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{\n ...muted,\n color: c[\"status-failed\"],\n paddingHorizontal: 20,\n paddingVertical: 6,\n }}\n >\n {props.error}\n </Text>\n ) : null}\n <ScrollView\n style={{ flexGrow: 0 }}\n keyboardShouldPersistTaps=\"handled\"\n keyboardDismissMode=\"on-drag\"\n contentContainerStyle={{ paddingVertical: 4 }}\n >\n {props.loading ? (\n <View accessibilityRole=\"progressbar\" accessibilityLabel={messages.loading}>\n {[58, 44, 66, 50].map((width) => (\n <View\n key={width}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n height: 48,\n paddingHorizontal: 20,\n }}\n >\n <View\n style={{\n width: 16,\n height: 16,\n borderRadius: 4,\n backgroundColor: c[\"surface-2\"],\n }}\n />\n <View\n style={{\n height: 10,\n width: `${width}%`,\n borderRadius: 4,\n backgroundColor: c[\"surface-2\"],\n }}\n />\n </View>\n ))}\n </View>\n ) : view.anySelectable ? (\n <>\n {groups.map((group, index) => (\n <View\n key={group.billingClass}\n accessibilityLabel={group.label}\n style={\n index > 0\n ? {\n marginTop: 6,\n paddingTop: 6,\n borderTopWidth: 1,\n borderTopColor: c.border,\n }\n : undefined\n }\n >\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 20,\n paddingTop: 8,\n paddingBottom: 2,\n }}\n >\n <GroupMark\n billingClass={group.billingClass}\n icon={groupPresentationFor(props, group.billingClass)?.icon}\n color={c[\"fg-subtle\"]}\n />\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c[\"fg-muted\"] }}>\n {group.label}\n </Text>\n </View>\n {group.description ? (\n <Text style={{ ...muted, paddingHorizontal: 20, paddingBottom: 4 }}>\n {group.description}\n </Text>\n ) : null}\n {group.rows.map((row) => {\n const active = row.selectable && row.id === props.model;\n const enabled = row.selectable && !props.disabled;\n return (\n <Pressable\n key={row.id}\n accessibilityRole=\"button\"\n accessibilityLabel={[row.label, row.unavailableReason]\n .filter(Boolean)\n .join(\", \")}\n accessibilityState={{ selected: active, disabled: !enabled }}\n disabled={!enabled}\n onPress={() => choose(row)}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n minHeight: 48,\n paddingHorizontal: 20,\n paddingVertical: 6,\n backgroundColor: pressed ? c.hover : \"transparent\",\n opacity: row.selectable ? 1 : 0.5,\n })}\n >\n {props.collapseScopes === false ? null : (\n <ModelMark model={row.id} size={18} color={c[\"fg-muted\"]} />\n )}\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text numberOfLines={1} style={label}>\n {row.label}\n </Text>\n {row.unavailableReason ? (\n <Text numberOfLines={2} style={muted}>\n {row.unavailableReason}\n </Text>\n ) : null}\n </View>\n {row.catalog.cost === \"free\" ? (\n <Text\n style={{\n ...muted,\n fontSize: 12,\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 999,\n overflow: \"hidden\",\n backgroundColor: c[\"surface-2\"],\n }}\n >\n {messages.free}\n </Text>\n ) : null}\n {row.id === props.model ? <Icon name=\"check\" size={18} color={c.fg} /> : null}\n </Pressable>\n );\n })}\n </View>\n ))}\n {view.matchCount === 0 ? (\n <Text style={{ ...muted, paddingHorizontal: 20, paddingVertical: 12 }}>\n {view.searching ? messages.noMatches : messages.noModels}\n </Text>\n ) : null}\n </>\n ) : (\n <View style={{ paddingHorizontal: 20, paddingVertical: 12, gap: 4 }}>\n <Text style={{ ...fontStyle(theme, 500), fontSize: 15, color: c.fg }}>\n {messages.connectTitle}\n </Text>\n <Text style={muted}>\n {view.rows.length > 0 ? messages.connectBody : messages.noModels}\n </Text>\n </View>\n )}\n </ScrollView>\n {view.anySelectable && view.selected && (view.unsupportedAttachments || thinking) ? (\n <View\n style={{\n borderTopWidth: 1,\n borderTopColor: c.border,\n paddingHorizontal: 20,\n paddingTop: 12,\n gap: 8,\n }}\n >\n {view.unsupportedAttachments ? (\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>\n {messages.unsupportedAttachments}\n </Text>\n ) : null}\n {thinking ? (\n <>\n {thinking.showThinking || thinking.showFast ? (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n minHeight: 32,\n }}\n >\n {thinking.showThinking ? (\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>{messages.thinking}</Text>\n ) : (\n <View />\n )}\n {thinking.showFast ? (\n <Pressable\n accessibilityRole=\"switch\"\n accessibilityLabel={`${messages.fast}, ${messages.fastRateHint}`}\n accessibilityState={{\n checked: props.latencyMode === \"fast\",\n disabled: Boolean(props.disabled || thinking.disabled),\n }}\n disabled={props.disabled || thinking.disabled}\n onPress={() => {\n props.onLatencyModeChange(\n props.latencyMode === \"fast\" ? \"standard\" : \"fast\",\n );\n props.onSelectionFeedback?.();\n }}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n minHeight: 36,\n paddingHorizontal: 8,\n borderRadius: theme.radius.sm,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <Icon\n name=\"zap\"\n size={14}\n color={c[\"fg-muted\"]}\n fill={props.latencyMode === \"fast\" ? c[\"fg-muted\"] : undefined}\n />\n <Text style={muted}>{messages.fast}</Text>\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>\n {messages.fastRateHint}\n </Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n {thinking.showThinking ? (\n <SegmentedChoice\n label={messages.thinkingEffort ?? messages.thinking}\n value={thinking.value}\n disabled={Boolean(props.disabled || thinking.disabled)}\n options={thinking.efforts.map((effort) => ({\n id: effort,\n label: compactEffortLabel(t, effort, labelReasoningEffort(t, effort)),\n accessibilityLabel: labelReasoningEffort(t, effort),\n }))}\n onChange={(effort) => {\n props.onEffortChange(effort);\n props.onSelectionFeedback?.();\n }}\n />\n ) : null}\n {thinking.speeds ? (\n <>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n minHeight: 32,\n }}\n >\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>{messages.speed}</Text>\n {selectedSpeed?.hint ? (\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>{selectedSpeed.hint}</Text>\n ) : null}\n </View>\n <SegmentedChoice\n label={messages.speed ?? messages.fast}\n value={selectedSpeed?.id ?? \"standard\"}\n disabled={Boolean(props.disabled || thinking.disabled)}\n options={thinking.speeds.map((speed) => ({\n id: speed.id,\n label: speed.label,\n accessibilityLabel: speed.hint\n ? `${speed.label}, ${speed.hint}`\n : speed.label,\n icon: speed.id === \"standard\" ? undefined : \"zap\",\n }))}\n onChange={(speed) => {\n props.onLatencyModeChange(speed);\n props.onSelectionFeedback?.();\n }}\n />\n </>\n ) : null}\n </>\n ) : null}\n </View>\n ) : null}\n </BottomSheet>\n );\n}\n\n/** A horizontal single-choice row, shared by the effort and speed choices. */\nfunction SegmentedChoice<T extends string>(props: {\n label: string | undefined;\n value: T;\n disabled: boolean;\n options: ReadonlyArray<{\n id: T;\n label: string;\n accessibilityLabel: string;\n icon?: NativeIconName | undefined;\n }>;\n onChange: (value: T) => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={props.label}\n style={{\n flexDirection: \"row\",\n gap: 2,\n padding: 2,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n {props.options.map((option) => {\n const checked = option.id === props.value;\n const color = checked ? c.fg : c[\"fg-muted\"];\n return (\n <Pressable\n key={option.id}\n accessibilityRole=\"radio\"\n accessibilityLabel={option.accessibilityLabel}\n accessibilityState={{ checked, disabled: props.disabled }}\n disabled={props.disabled}\n onPress={() => {\n if (!checked) props.onChange(option.id);\n }}\n style={{\n flex: 1,\n flexDirection: \"row\",\n gap: 4,\n minHeight: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: theme.radius.sm,\n backgroundColor: checked ? c[\"surface-1\"] : \"transparent\",\n opacity: props.disabled ? 0.5 : 1,\n ...(checked\n ? {\n shadowColor: \"#000\",\n shadowOpacity: 0.06,\n shadowRadius: 2,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n }\n : null),\n }}\n >\n {option.icon ? (\n <Icon name={option.icon} size={13} color={color} fill={checked ? color : undefined} />\n ) : null}\n <Text numberOfLines={1} style={{ ...fontStyle(theme), fontSize: 13, color }}>\n {option.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nexport type { ClientModel, ModelPickerGroupPresentation };\n","import type { Session, UpdateSessionPinRequest, UpdateSessionRequest } from \"@opengeni/sdk\";\nimport {\n resolveRenameSubmission,\n SESSION_TITLE_MAX_LENGTH,\n sessionDisplayTitle,\n sessionRenameSeed,\n} from \"@opengeni/react/session-list-model\";\nimport { useEffect, useRef, useState, type ComponentRef, type ReactNode } from \"react\";\nimport { Alert, Pressable, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { BottomSheet } from \"./sheet\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\n\n/* ----------------------------------------------------------------------------\n The web session header's Rename and Pin, behind one native overflow button:\n an action sheet, then a rename sheet that seeds and resolves exactly as the\n web title editor does (shared session-list model).\n -------------------------------------------------------------------------- */\n\nexport interface SessionActionsClient {\n updateSession(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionRequest,\n ): Promise<Session>;\n updateSessionPin(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionPinRequest,\n ): Promise<Session>;\n}\n\nexport interface SessionActionsProps {\n session: Session;\n client: SessionActionsClient;\n /** Called with the server's session after a change, so the host can refresh. */\n onChanged: (session: Session) => void;\n /** Host actions appended after Rename and Pin. */\n extraActions?: SessionAction[] | undefined;\n onActionFeedback?: (() => void) | undefined;\n /**\n * Present the actions in a host-native menu (a UIMenu on iOS) anchored to the\n * trigger instead of the slide-up sheet. The host wraps `trigger`.\n */\n renderMenu?: ((input: { actions: SessionAction[]; trigger: ReactNode }) => ReactNode) | undefined;\n}\n\nexport interface SessionAction {\n key: string;\n label: string;\n icon: NativeIconName;\n onPress: () => void;\n destructive?: boolean | undefined;\n /** SF Symbol for a native menu. */\n systemImage?: string | undefined;\n}\n\nexport function SessionActionsButton(props: SessionActionsProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [menuOpen, setMenuOpen] = useState(false);\n const [renaming, setRenaming] = useState(false);\n const [error, setError] = useState<string | null>(null);\n // The pin flips immediately on this device and rolls back on failure, as on web.\n const [pinnedOverride, setPinnedOverride] = useState<boolean | null>(null);\n const pinned = pinnedOverride ?? props.session.pinned ?? false;\n useEffect(() => setPinnedOverride(null), [props.session.pinned, props.session.pinVersion]);\n\n const togglePin = async () => {\n const next = !pinned;\n setPinnedOverride(next);\n setError(null);\n props.onActionFeedback?.();\n try {\n const updated = await props.client.updateSessionPin(\n props.session.workspaceId,\n props.session.id,\n {\n pinned: next,\n ...(props.session.pinVersion !== undefined\n ? { expectedVersion: props.session.pinVersion }\n : {}),\n },\n );\n props.onChanged(updated);\n } catch (caught) {\n setPinnedOverride(null);\n const message =\n `${m.pinFailed(next)} ${caught instanceof Error ? caught.message : \"\"}`.trim();\n setError(message);\n if (props.renderMenu) Alert.alert(message);\n else setMenuOpen(true);\n }\n };\n\n const actions: SessionAction[] = [\n {\n key: \"rename\",\n label: m.rename,\n icon: \"pencil\",\n systemImage: \"pencil\",\n onPress: () => {\n setMenuOpen(false);\n // Let a dismissing menu or sheet finish before presenting the next one.\n setTimeout(() => setRenaming(true), props.renderMenu ? 50 : 350);\n },\n },\n {\n key: \"pin\",\n label: pinned ? m.unpin : m.pin,\n icon: pinned ? \"pin-off\" : \"pin\",\n systemImage: pinned ? \"pin.slash\" : \"pin\",\n onPress: () => {\n setMenuOpen(false);\n void togglePin();\n },\n },\n ...(props.extraActions ?? []).map((action) => ({\n ...action,\n onPress: () => {\n setMenuOpen(false);\n action.onPress();\n },\n })),\n ];\n\n const icon = (\n <>\n {pinned ? (\n <View\n style={{\n position: \"absolute\",\n top: 5,\n right: 5,\n width: 6,\n height: 6,\n borderRadius: 3,\n backgroundColor: c[\"fg-muted\"],\n }}\n />\n ) : null}\n <Icon name=\"ellipsis\" size={20} color={c.fg} />\n </>\n );\n const renameSheet = (\n <RenameSheet\n open={renaming}\n session={props.session}\n client={props.client}\n onClose={() => setRenaming(false)}\n onRenamed={(session) => {\n setRenaming(false);\n props.onActionFeedback?.();\n props.onChanged(session);\n }}\n />\n );\n if (props.renderMenu) {\n return (\n <>\n {props.renderMenu({\n actions,\n trigger: (\n <View\n accessible\n accessibilityRole=\"button\"\n accessibilityLabel={m.chatActions}\n style={{ width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\" }}\n >\n {icon}\n </View>\n ),\n })}\n {renameSheet}\n </>\n );\n }\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.chatActions}\n hitSlop={6}\n onPress={() => setMenuOpen(true)}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 18,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n {icon}\n </Pressable>\n <BottomSheet\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n accessibilityLabel={m.chatActions}\n >\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 600),\n fontSize: 15,\n color: c.fg,\n paddingHorizontal: 20,\n paddingBottom: 8,\n }}\n >\n {sessionDisplayTitle(props.session)}\n </Text>\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{\n ...fontStyle(theme),\n fontSize: 13,\n color: c[\"status-failed\"],\n paddingHorizontal: 20,\n paddingBottom: 6,\n }}\n >\n {error}\n </Text>\n ) : null}\n {actions.map((action) => (\n <Pressable\n key={action.key}\n accessibilityRole=\"button\"\n accessibilityLabel={action.label}\n onPress={action.onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 14,\n minHeight: 52,\n paddingHorizontal: 20,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <Icon\n name={action.icon}\n size={18}\n color={action.destructive ? c[\"status-failed\"] : c[\"fg-muted\"]}\n />\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 16,\n color: action.destructive ? c[\"status-failed\"] : c.fg,\n }}\n >\n {action.label}\n </Text>\n </Pressable>\n ))}\n </BottomSheet>\n {renameSheet}\n </>\n );\n}\n\nfunction RenameSheet(props: {\n open: boolean;\n session: Session;\n client: SessionActionsClient;\n onClose: () => void;\n onRenamed: (session: Session) => void;\n}) {\n const m = useNativeTimelineMessages();\n // Each opening mounts a fresh form seeded before its first render, so the\n // focused field selects the whole seed and typing replaces it.\n const [generation, setGeneration] = useState(0);\n useEffect(() => {\n if (props.open) setGeneration((value) => value + 1);\n }, [props.open]);\n return (\n <BottomSheet open={props.open} onClose={props.onClose} accessibilityLabel={m.renameChat}>\n <RenameForm key={generation} {...props} />\n </BottomSheet>\n );\n}\n\nfunction RenameForm(props: {\n session: Session;\n client: SessionActionsClient;\n onClose: () => void;\n onRenamed: (session: Session) => void;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [seed] = useState(() => sessionRenameSeed(props.session));\n const [draft, setDraft] = useState(seed);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const inFlight = useRef(false);\n const inputRef = useRef<ComponentRef<typeof TextInput>>(null);\n const save = async () => {\n if (inFlight.current) return;\n const next = resolveRenameSubmission(draft, sessionDisplayTitle(props.session), seed);\n if (next === null) {\n props.onClose();\n return;\n }\n inFlight.current = true;\n setSaving(true);\n setError(null);\n try {\n const updated = await props.client.updateSession(\n props.session.workspaceId,\n props.session.id,\n { title: next },\n );\n props.onRenamed(updated);\n } catch (caught) {\n setError(m.renameFailed(caught instanceof Error ? caught.message : null));\n } finally {\n inFlight.current = false;\n setSaving(false);\n }\n };\n return (\n <View style={{ paddingHorizontal: 20, gap: 12 }}>\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}\n >\n {t(\"native.timeline.sessionActions.renameChat\")}\n </Text>\n <TextInput\n accessibilityLabel={m.chatTitle}\n value={draft}\n onChangeText={setDraft}\n ref={inputRef}\n onFocus={() => {\n // selectTextOnFocus is unreliable for autofocused fields in a modal.\n setTimeout(() => inputRef.current?.setSelection(0, seed.length), 50);\n }}\n maxLength={SESSION_TITLE_MAX_LENGTH}\n autoFocus\n editable={!saving}\n returnKeyType=\"done\"\n onSubmitEditing={() => void save()}\n style={{\n ...fontStyle(theme),\n fontSize: 16,\n color: c.fg,\n minHeight: 44,\n paddingHorizontal: 12,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n }}\n />\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...fontStyle(theme), fontSize: 13, color: c[\"status-failed\"] }}\n >\n {error}\n </Text>\n ) : null}\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 8 }}>\n <Button label={m.cancel} variant=\"ghost\" onPress={props.onClose} disabled={saving} />\n <Button\n label={saving ? m.saving : m.save}\n variant=\"primary\"\n onPress={() => void save()}\n disabled={saving}\n busy={saving}\n />\n </View>\n </View>\n );\n}\n","// The inbox at phone width: what agents wait on the person for (questions,\n// approvals, goals paused on them) and what they chose to tell them. The same\n// rules as the web Inbox page: rows are messages, approvals decide in place, a\n// single short choice answers in one tap, everything else opens its session.\nimport {\n notificationPlainText,\n parseNotificationText,\n type NotificationSpan,\n} from \"@opengeni/react/timeline-model\";\nimport type { InboxItem, ListInboxResponse, OpenGeniClient } from \"@opengeni/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport {\n ActionSheetIOS,\n Alert,\n Animated,\n AppState,\n PanResponder,\n Platform,\n Pressable,\n Text,\n View,\n type LayoutChangeEvent,\n} from \"react-native\";\n\nimport { useOpenNativeLink } from \"../links\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport { SectionLabel } from \"./session-list\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useOpenGeniText, type OpenGeniText } from \"@opengeni/react/messages\";\n\nexport type NativeInboxClient = Pick<\n OpenGeniClient,\n | \"listInbox\"\n | \"updateInboxItem\"\n | \"sendApprovalDecision\"\n | \"getHumanInputRequest\"\n | \"submitHumanInputResponse\"\n>;\n\ntype InboxState = { data: ListInboxResponse | null; error: unknown; loading: boolean };\n\nfunction snoozedNow(item: InboxItem, now: number): boolean {\n return item.snoozedUntil !== null && Date.parse(item.snoozedUntil) > now;\n}\n\n/** Questions, approvals and paused goals wait on the person; notes and replies don't. */\nexport function isNeedsYouKind(kind: InboxItem[\"kind\"]): boolean {\n return kind === \"question\" || kind === \"approval\" || kind === \"goal_paused\";\n}\n\n/** What waits on the person right now: needs-you items plus unread notes, unsnoozed. */\nexport function nativeInboxAttentionCount(data: ListInboxResponse | null): number {\n if (!data) return 0;\n const now = Date.now();\n return data.items.filter(\n (item) => !snoozedNow(item, now) && (isNeedsYouKind(item.kind) || item.unread),\n ).length;\n}\n\n/**\n * An item as this app reads it. Servers from before rich notifications leave\n * out the subtitle, facts, link and moment; read those as empty.\n */\nfunction normalizeInboxItem(item: InboxItem): InboxItem {\n return {\n ...item,\n subtitle: item.subtitle ?? \"\",\n facts: Array.isArray(item.facts) ? item.facts : [],\n link: item.link ?? null,\n eventSequence: item.eventSequence ?? null,\n choices: Array.isArray(item.choices) ? item.choices : [],\n };\n}\n\n/** The person's inbox, refreshed on an interval, on foreground and after every action. */\nexport function useNativeInbox(client: NativeInboxClient, options: { pollMs?: number } = {}) {\n const [state, setState] = useState<InboxState>({ data: null, error: null, loading: true });\n const pollMs = options.pollMs ?? 30_000;\n const generation = useRef(0);\n const refresh = useCallback(async () => {\n const request = ++generation.current;\n try {\n const listed = await client.listInbox();\n const data = { ...listed, items: listed.items.map(normalizeInboxItem) };\n if (request === generation.current) setState({ data, error: null, loading: false });\n } catch (error) {\n if (request === generation.current)\n setState((current) => ({ ...current, error, loading: false }));\n }\n }, [client]);\n useEffect(() => {\n void refresh();\n const timer = setInterval(() => void refresh(), pollMs);\n const subscription = AppState.addEventListener(\"change\", (next) => {\n if (next === \"active\") void refresh();\n });\n return () => {\n clearInterval(timer);\n subscription.remove();\n };\n }, [pollMs, refresh]);\n const patch = useCallback((update: (items: InboxItem[]) => InboxItem[]) => {\n setState((current) =>\n current.data\n ? { ...current, data: { ...current.data, items: update(current.data.items) } }\n : current,\n );\n }, []);\n return { ...state, refresh, patch };\n}\n\nconst KIND_ICON: Record<InboxItem[\"kind\"], NativeIconName> = {\n question: \"message-circle-question\",\n approval: \"shield-check\",\n goal_paused: \"circle-pause\",\n notification: \"bell\",\n reply: \"message-square-text\",\n};\n\nfunction kindIcon(item: InboxItem): NativeIconName {\n return item.kind === \"notification\" && item.urgency === \"time_sensitive\"\n ? \"bell-ring\"\n : (KIND_ICON[item.kind] ?? \"bell\");\n}\n\nconst MONO = Platform.OS === \"ios\" ? \"Menlo\" : \"monospace\";\n\nfunction Spans({ spans }: { spans: NotificationSpan[] }) {\n const theme = useNativeTimelineTheme();\n const openLink = useOpenNativeLink();\n const c = theme.colors;\n // Spans are the positional pieces of one parsed message and never reorder,\n // so their index is their identity.\n return spans.map((span, index) =>\n span.kind === \"bold\" ? (\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n <Text key={index} style={{ ...fontStyle(theme, 500), color: c.fg }}>\n {span.text}\n </Text>\n ) : span.kind === \"code\" ? (\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n <Text key={index} style={{ fontFamily: MONO, fontSize: 13, color: c.fg }}>\n {span.text}\n </Text>\n ) : span.kind === \"link\" ? (\n <Text\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n key={index}\n accessibilityRole=\"link\"\n onPress={() => openLink(span.href)}\n style={{ color: c.fg, textDecorationLine: \"underline\" }}\n >\n {span.text}\n </Text>\n ) : (\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n <Text key={index}>{span.text}</Text>\n ),\n );\n}\n\n/**\n * An agent's notification under its title: the subtitle, the message (short\n * paragraphs and bullets) and its facts as a quiet two-column list.\n */\nfunction NotificationContent({ item }: { item: InboxItem }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const blocks = parseNotificationText(item.body);\n // One label column for every fact, as wide as the longest label needs.\n const longest = Math.max(0, ...item.facts.map((fact) => fact.label.length));\n const labelWidth = Math.min(132, Math.max(56, Math.ceil(longest * 7.4) + 4));\n const text = { ...fontStyle(theme), fontSize: 14, lineHeight: 20, color: c[\"fg-muted\"] };\n return (\n <>\n {item.subtitle ? (\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme), fontSize: 13, lineHeight: 20, color: c[\"fg-subtle\"] }}\n >\n {item.subtitle}\n </Text>\n ) : null}\n {blocks.length > 0 ? (\n <View style={{ gap: 6, marginTop: 2 }}>\n {blocks.map((block, index) =>\n block.kind === \"paragraph\" ? (\n // oxlint-disable-next-line react/no-array-index-key -- positional block of one message\n <Text key={index} style={text}>\n <Spans spans={block.spans} />\n </Text>\n ) : (\n // oxlint-disable-next-line react/no-array-index-key -- positional block of one message\n <View key={index} style={{ gap: 2 }}>\n {block.items.map((spans, bullet) => (\n // oxlint-disable-next-line react/no-array-index-key -- positional bullet of one list\n <View key={bullet} style={{ flexDirection: \"row\", gap: 8 }}>\n <View\n style={{\n width: 4,\n height: 4,\n borderRadius: 2,\n marginTop: 8,\n marginLeft: 2,\n backgroundColor: c[\"fg-subtle\"],\n }}\n />\n <Text style={[text, { flex: 1 }]}>\n <Spans spans={spans} />\n </Text>\n </View>\n ))}\n </View>\n ),\n )}\n </View>\n ) : null}\n {item.facts.length > 0 ? (\n <View style={{ marginTop: 8, gap: 2 }}>\n {item.facts.map((fact) => (\n <View key={fact.label} style={{ flexDirection: \"row\", gap: 16 }}>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n width: labelWidth,\n fontSize: 13,\n lineHeight: 20,\n color: c[\"fg-subtle\"],\n }}\n >\n {fact.label}\n </Text>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: 13,\n lineHeight: 20,\n color: c.fg,\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {fact.value}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n </>\n );\n}\n\n/** Each revealed swipe action's width. */\nconst SWIPE_ACTION = 76;\n/** A partial swipe past this opens the actions. */\nconst SWIPE_OPEN = 56;\n/** A long swipe past this dismisses outright: just beyond the open actions,\n * so dismissing never needs a drag across the whole row. */\nconst SWIPE_FULL = SWIPE_ACTION * 2 + 20;\n/** A quick leftward flick past one action's width also dismisses. */\nconst FLICK_VELOCITY = 1.1;\n\ntype SwipeAction = { label: string; icon: NativeIconName; color: string; onPress: () => void };\n\n/**\n * A row that swipes like Mail: drag left to reveal Snooze and Dismiss, or keep\n * going to dismiss in one motion (a light haptic marks the point). Drags to the\n * right stay with the system back gesture.\n */\nfunction SwipeRow(props: {\n children: ReactNode;\n snooze: SwipeAction;\n dismiss: SwipeAction;\n onThreshold?: (() => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const x = useRef(new Animated.Value(0)).current;\n const width = useRef(0);\n const base = useRef(0);\n const full = useRef(false);\n const [open, setOpen] = useState(false);\n const [dragging, setDragging] = useState(false);\n const latest = useRef(props);\n latest.current = props;\n const settle = useCallback(\n (to: number) => {\n base.current = to;\n setOpen(to !== 0);\n Animated.spring(x, { toValue: to, useNativeDriver: true, bounciness: 0, speed: 18 }).start(\n () => {\n if (to === 0) setDragging(false);\n },\n );\n },\n [x],\n );\n const responder = useMemo(\n () =>\n PanResponder.create({\n // Clearly horizontal drags only: to the left from rest, either way once open.\n onMoveShouldSetPanResponderCapture: (_event, gesture) =>\n Math.abs(gesture.dx) > 10 &&\n Math.abs(gesture.dx) > Math.abs(gesture.dy) * 1.6 &&\n (gesture.dx < 0 || base.current !== 0),\n onPanResponderTerminationRequest: () => false,\n onPanResponderGrant: () => {\n x.stopAnimation();\n setDragging(true);\n },\n onPanResponderMove: (_event, gesture) => {\n const next = Math.min(0, base.current + gesture.dx);\n x.setValue(next);\n const past = next < -SWIPE_FULL;\n if (past !== full.current) {\n full.current = past;\n if (past) latest.current.onThreshold?.();\n }\n },\n onPanResponderRelease: (_event, gesture) => {\n const end = Math.min(0, base.current + gesture.dx);\n const flicked = gesture.vx < -FLICK_VELOCITY && end < -SWIPE_ACTION;\n if (full.current || flicked) {\n full.current = false;\n Animated.timing(x, {\n toValue: -(width.current || 400),\n duration: 160,\n useNativeDriver: true,\n }).start(() => {\n latest.current.dismiss.onPress();\n // Back in place in case the row stays (the dismissal failed).\n setTimeout(() => {\n x.setValue(0);\n base.current = 0;\n setOpen(false);\n setDragging(false);\n }, 800);\n });\n return;\n }\n settle(end < -SWIPE_OPEN && gesture.vx <= 0.3 ? -SWIPE_ACTION * 2 : 0);\n },\n onPanResponderTerminate: () => {\n full.current = false;\n settle(0);\n },\n }),\n [settle, x],\n );\n // Snooze rides along with the row's edge on a long swipe, then fades as\n // Dismiss takes the whole strip.\n const snoozeShift = x.interpolate({\n inputRange: [-SWIPE_ACTION * 2 - 1, -SWIPE_ACTION * 2, 0],\n outputRange: [-1, 0, 0],\n extrapolateLeft: \"extend\",\n extrapolateRight: \"clamp\",\n });\n const snoozeOpacity = x.interpolate({\n inputRange: [-SWIPE_FULL, -SWIPE_ACTION * 2 - 24, 0],\n outputRange: [0, 1, 1],\n extrapolate: \"clamp\",\n });\n const button = (action: SwipeAction, after: () => void) => (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={action.label}\n onPress={() => {\n after();\n action.onPress();\n }}\n style={{\n width: SWIPE_ACTION,\n height: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n backgroundColor: action.color,\n }}\n >\n <Icon name={action.icon} size={18} color=\"#ffffff\" />\n <Text style={{ ...fontStyle(theme, 600), fontSize: 13, color: \"#ffffff\" }}>\n {action.label}\n </Text>\n </Pressable>\n );\n return (\n <View\n onLayout={(event: LayoutChangeEvent) => {\n width.current = event.nativeEvent.layout.width;\n }}\n style={{ overflow: \"hidden\", borderRadius: theme.radius.md }}\n >\n {dragging || open ? (\n <View\n style={{\n position: \"absolute\",\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n backgroundColor: props.dismiss.color,\n }}\n >\n <Animated.View\n style={{ opacity: snoozeOpacity, transform: [{ translateX: snoozeShift }] }}\n >\n {button(props.snooze, () => settle(0))}\n </Animated.View>\n {button(props.dismiss, () => undefined)}\n </View>\n ) : null}\n <Animated.View\n {...responder.panHandlers}\n style={{ transform: [{ translateX: x }], backgroundColor: theme.colors.bg }}\n >\n {props.children}\n {open ? (\n // While open, a tap on the row closes the actions instead of opening it.\n <Pressable\n accessibilityLabel={t(\"native.timeline.inbox.closeActions\")}\n onPress={() => settle(0)}\n style={{ position: \"absolute\", top: 0, bottom: 0, left: 0, right: 0 }}\n />\n ) : null}\n </Animated.View>\n </View>\n );\n}\n\nfunction relative(t: OpenGeniText, iso: string): string {\n const seconds = Math.max(0, (Date.now() - Date.parse(iso)) / 1000);\n if (seconds < 60) return t(\"native.timeline.inbox.justNow\");\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return t(\"native.timeline.inbox.minutesMinAgo\", { minutes });\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours} h ago`;\n const days = Math.floor(hours / 24);\n return days === 1\n ? t(\"native.timeline.inbox.yesterday\")\n : t(\"native.timeline.inbox.daysDaysAgo\", { days });\n}\n\nfunction tomorrowMorning(): Date {\n const date = new Date();\n date.setDate(date.getDate() + 1);\n date.setHours(8, 0, 0, 0);\n return date;\n}\n\n/** How long ago, or until when a snoozed item stays hidden. */\nfunction when(t: OpenGeniText, item: InboxItem): string {\n if (item.snoozedUntil === null || Date.parse(item.snoozedUntil) <= Date.now()) {\n return relative(t, item.updatedAt);\n }\n const until = new Date(item.snoozedUntil);\n const time = until.toLocaleTimeString(undefined, { hour: \"2-digit\", minute: \"2-digit\" });\n return until.toDateString() === new Date().toDateString()\n ? t(\"native.timeline.inbox.untilTime\", { time })\n : t(\"native.timeline.inbox.untilLocaledatestringTime\", {\n localeDateString: until.toLocaleDateString(undefined, { weekday: \"short\" }),\n time,\n });\n}\n\nexport interface NativeInboxListProps {\n client: NativeInboxClient;\n inbox: ReturnType<typeof useNativeInbox>;\n /** Open the item's session (and its question or approval there). */\n onOpenSession: (item: InboxItem) => void;\n /** Names for the workspace line when items span workspaces. */\n workspaceNames?: ReadonlyMap<string, string> | undefined;\n /** A short confirmation after an action (\"Approved\"). */\n onNotice?: ((message: string) => void) | undefined;\n /** A light haptic when a swipe passes the point where letting go acts. */\n onSwipeThreshold?: (() => void) | undefined;\n}\n\n/** The Inbox's sections and rows; the host supplies the screen around it. */\nexport function NativeInboxList({\n client,\n inbox,\n onOpenSession,\n workspaceNames,\n onNotice,\n onSwipeThreshold,\n}: NativeInboxListProps) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const openLink = useOpenNativeLink();\n const [busy, setBusy] = useState<Record<string, string>>({});\n const now = Date.now();\n const items = useMemo(() => inbox.data?.items ?? [], [inbox.data]);\n const awake = items.filter((item) => !snoozedNow(item, now));\n // Most important first: what waits on the person, then agents' notes, then replies.\n const needsYou = awake.filter((item) => isNeedsYouKind(item.kind));\n const fromAgents = awake.filter((item) => item.kind === \"notification\");\n const replies = awake.filter((item) => item.kind === \"reply\");\n const snoozed = items.filter((item) => snoozedNow(item, now));\n const spansWorkspaces = new Set(items.map((item) => item.workspaceId)).size > 1;\n\n // An agent's note is read once shown in full here (the dot stays for this\n // visit). A reply shows only its start, so it is read once opened, here or\n // in its session; reading never removes it.\n const shownUnread = useRef(new Set<string>());\n useEffect(() => {\n const unseen = items.filter(\n (item) => item.unread && item.kind !== \"reply\" && !shownUnread.current.has(item.id),\n );\n if (unseen.length === 0) return;\n for (const item of unseen) shownUnread.current.add(item.id);\n const timer = setTimeout(() => {\n for (const item of unseen)\n void client.updateInboxItem(item.id, { seen: true }).catch(() => undefined);\n }, 1500);\n return () => clearTimeout(timer);\n }, [client, items]);\n\n const leave = (item: InboxItem) =>\n inbox.patch((current) => current.filter((each) => each.id !== item.id));\n\n // Opening an item reads it.\n const open = (item: InboxItem) => {\n if (item.unread) {\n inbox.patch((current) =>\n current.map((each) => (each.id === item.id ? { ...each, unread: false } : each)),\n );\n void client.updateInboxItem(item.id, { seen: true }).catch(() => undefined);\n }\n // Another member's private session would not open for this person.\n if (item.sessionAvailable === false) return;\n onOpenSession(item);\n };\n\n const run = async (item: InboxItem, label: string, action: () => Promise<void>) => {\n setBusy((current) => ({ ...current, [item.id]: label }));\n try {\n await action();\n void inbox.refresh();\n } catch (error) {\n Alert.alert(\n t(\"native.timeline.inbox.thatDidnTGoThrough\"),\n error instanceof Error ? error.message : t(\"native.timeline.inbox.tryAgain\"),\n );\n } finally {\n setBusy(({ [item.id]: _done, ...rest }) => rest);\n }\n };\n\n const decide = (item: InboxItem, decision: \"approve\" | \"reject\") =>\n void run(item, decision, async () => {\n await client.sendApprovalDecision(item.workspaceId, item.sessionId, {\n approvalId: item.sourceKey,\n decision,\n });\n leave(item);\n onNotice?.(\n decision === \"approve\"\n ? t(\"native.timeline.inbox.approved\")\n : t(\"native.timeline.inbox.denied\"),\n );\n });\n\n const choose = (item: InboxItem, choice: { id: string; label: string }) =>\n void run(item, `choice:${choice.id}`, async () => {\n const request = await client.getHumanInputRequest(\n item.workspaceId,\n item.sessionId,\n item.sourceKey,\n );\n const question = request.questions[0];\n if (request.status !== \"pending\" || !question) {\n leave(item);\n onNotice?.(t(\"native.timeline.inbox.alreadyAnswered\"));\n return;\n }\n await client.submitHumanInputResponse(item.workspaceId, item.sessionId, item.sourceKey, {\n outcome: \"answered\",\n answers: [{ questionId: question.id, values: [choice.id] }],\n });\n leave(item);\n onNotice?.(t(\"native.timeline.inbox.answeredLabel\", { label: choice.label }));\n });\n\n const snooze = (item: InboxItem, until: Date | null) =>\n void run(item, \"snooze\", async () => {\n const snoozedUntil = until ? until.toISOString() : null;\n inbox.patch((current) =>\n current.map((each) => (each.id === item.id ? { ...each, snoozedUntil } : each)),\n );\n await client.updateInboxItem(item.id, { snoozedUntil });\n });\n\n const dismiss = (item: InboxItem) =>\n void run(item, \"dismiss\", async () => {\n leave(item);\n await client.updateInboxItem(item.id, { dismissed: true });\n });\n\n const showSheet = (\n title: string,\n actions: Array<{ label: string; run: () => void; destructive?: boolean }>,\n ) => {\n if (Platform.OS === \"ios\") {\n ActionSheetIOS.showActionSheetWithOptions(\n {\n title,\n options: [...actions.map((action) => action.label), t(\"native.timeline.inbox.cancel\")],\n cancelButtonIndex: actions.length,\n destructiveButtonIndex: actions.findIndex((action) => action.destructive),\n },\n (index) => actions[index]?.run(),\n );\n return;\n }\n Alert.alert(title, undefined, [\n ...actions.map((action) => ({\n text: action.label,\n style: action.destructive ? (\"destructive\" as const) : (\"default\" as const),\n onPress: action.run,\n })),\n { text: t(\"native.timeline.inbox.cancel\"), style: \"cancel\" as const },\n ]);\n };\n\n // A swipe toward the right snoozes: pick how long, or bring a snoozed one back.\n const swipeSnooze = (item: InboxItem) => {\n if (snoozedNow(item, Date.now())) {\n snooze(item, null);\n onNotice?.(t(\"native.timeline.inbox.backInYourInbox\"));\n return;\n }\n showSheet(t(\"native.timeline.inbox.snooze\"), [\n {\n label: t(\"native.timeline.inbox.for1Hour\"),\n run: () => snooze(item, new Date(Date.now() + 3_600_000)),\n },\n {\n label: t(\"native.timeline.inbox.untilTomorrowMorning\"),\n run: () => snooze(item, tomorrowMorning()),\n },\n ]);\n };\n\n const openMenu = (item: InboxItem) => {\n const isSnoozed = snoozedNow(item, Date.now());\n const actions: Array<{ label: string; run: () => void; destructive?: boolean }> = [\n { label: t(\"native.timeline.inbox.openSession\"), run: () => open(item) },\n ...(isSnoozed\n ? [{ label: t(\"native.timeline.inbox.unsnooze\"), run: () => snooze(item, null) }]\n : [\n {\n label: t(\"native.timeline.inbox.snoozeFor1Hour\"),\n run: () => snooze(item, new Date(Date.now() + 3_600_000)),\n },\n {\n label: t(\"native.timeline.inbox.snoozeUntilTomorrow\"),\n run: () => snooze(item, tomorrowMorning()),\n },\n ]),\n {\n label: isNeedsYouKind(item.kind)\n ? t(\"native.timeline.inbox.removeFromInbox\")\n : t(\"native.timeline.inbox.dismiss\"),\n run: () => dismiss(item),\n destructive: true,\n },\n ];\n showSheet(item.title, actions);\n };\n\n // Where it comes from; the time sits apart so a long session title never hides it.\n const meta = (item: InboxItem): string => {\n const parts: string[] = [];\n // Another member's agent sent it: say who, first.\n if (item.sender) parts.push(t(\"native.timeline.inbox.fromLabel\", { label: item.sender.label }));\n if (item.kind === \"notification\" && item.urgency === \"time_sensitive\") {\n parts.push(t(\"native.timeline.inbox.timeSensitive\"));\n }\n if (item.kind === \"question\") parts.push(t(\"native.timeline.inbox.question\"));\n if (item.kind === \"goal_paused\") parts.push(t(\"native.timeline.inbox.goalPaused\"));\n if (item.kind === \"reply\") parts.push(t(\"native.timeline.inbox.reply\"));\n if (item.kind === \"approval\" && !item.body) parts.push(t(\"native.timeline.inbox.approval\"));\n if (item.sessionAvailable !== false)\n parts.push(item.sessionTitle ?? t(\"native.timeline.inbox.untitledSession\"));\n const workspace = spansWorkspaces ? workspaceNames?.get(item.workspaceId) : undefined;\n if (workspace) parts.push(workspace);\n if (item.kind === \"question\" && item.body) parts.push(item.body);\n return parts.join(\" · \");\n };\n\n const actions = (item: InboxItem) => {\n const pending = busy[item.id];\n if (item.kind === \"approval\") {\n return (\n <>\n <Button\n label={\n pending === \"reject\"\n ? t(\"native.timeline.inbox.denying\")\n : t(\"native.timeline.inbox.deny\")\n }\n icon=\"x\"\n disabled={Boolean(pending)}\n onPress={() => decide(item, \"reject\")}\n />\n <Button\n label={\n pending === \"approve\"\n ? t(\"native.timeline.inbox.approving\")\n : t(\"native.timeline.inbox.approve\")\n }\n icon=\"check\"\n disabled={Boolean(pending)}\n onPress={() => decide(item, \"approve\")}\n />\n </>\n );\n }\n if (item.kind === \"question\" && item.choices.length > 0) {\n return item.choices.map((choice) => (\n <Button\n key={choice.id}\n label={\n pending === `choice:${choice.id}` ? t(\"native.timeline.inbox.sending\") : choice.label\n }\n disabled={Boolean(pending)}\n onPress={() => choose(item, choice)}\n />\n ));\n }\n if (item.kind === \"question\") {\n return (\n <Button\n label={t(\"native.timeline.inbox.answer\")}\n disabled={Boolean(pending)}\n onPress={() => onOpenSession(item)}\n />\n );\n }\n if (item.kind === \"notification\" && item.link) {\n const url = item.link.url;\n return <Button label={item.link.label} icon=\"arrow-up-right\" onPress={() => openLink(url)} />;\n }\n return null;\n };\n\n const row = (item: InboxItem, index: number) => {\n const unread = !isNeedsYouKind(item.kind) && (item.unread || shownUnread.current.has(item.id));\n const rowActions = actions(item);\n return (\n <View key={item.id}>\n {index > 0 ? (\n <View style={{ height: 1, marginLeft: 48, backgroundColor: c.border }} />\n ) : null}\n <SwipeRow\n onThreshold={onSwipeThreshold}\n snooze={{\n label: snoozedNow(item, now)\n ? t(\"native.timeline.inbox.unsnooze\")\n : t(\"native.timeline.inbox.snooze\"),\n icon: \"alarm-clock\",\n color: c[\"status-waiting\"],\n onPress: () => swipeSnooze(item),\n }}\n dismiss={{\n label: isNeedsYouKind(item.kind)\n ? t(\"native.timeline.inbox.remove\")\n : t(\"native.timeline.inbox.dismiss\"),\n icon: \"x\",\n color: c[\"danger-fill\"],\n onPress: () => dismiss(item),\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`${item.title}. ${meta(item)}, ${when(t, item)}`}\n accessibilityHint={t(\"native.timeline.inbox.opensTheSession\")}\n accessibilityActions={[\n {\n name: \"snooze\",\n label: snoozedNow(item, now)\n ? t(\"native.timeline.inbox.unsnooze\")\n : t(\"native.timeline.inbox.snooze\"),\n },\n {\n name: \"dismiss\",\n label:\n item.kind === \"notification\"\n ? t(\"native.timeline.inbox.dismiss\")\n : t(\"native.timeline.inbox.removeFromInbox\"),\n },\n ]}\n onAccessibilityAction={(event) => {\n if (event.nativeEvent.actionName === \"snooze\") swipeSnooze(item);\n if (event.nativeEvent.actionName === \"dismiss\") dismiss(item);\n }}\n onPress={() => open(item)}\n onLongPress={() => openMenu(item)}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n gap: 12,\n paddingVertical: 14,\n paddingHorizontal: 4,\n borderRadius: theme.radius.md,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <View style={{ width: 32, height: 32, marginTop: 1 }}>\n <View\n style={{\n width: 32,\n height: 32,\n borderRadius: 10,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Icon\n name={kindIcon(item)}\n size={16}\n color={\n item.kind === \"notification\" && item.urgency === \"time_sensitive\"\n ? c[\"status-waiting\"]\n : c[\"fg-muted\"]\n }\n />\n </View>\n {unread ? (\n <View\n accessibilityLabel={t(\"native.timeline.inbox.unread\")}\n style={{\n position: \"absolute\",\n top: -3,\n right: -3,\n width: 10,\n height: 10,\n borderRadius: 5,\n borderWidth: 2,\n borderColor: c.bg,\n backgroundColor: c.accent,\n }}\n />\n ) : null}\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n numberOfLines={2}\n style={{ ...fontStyle(theme, 500), fontSize: 15, lineHeight: 20, color: c.fg }}\n >\n {item.title}\n </Text>\n {item.body && item.kind === \"approval\" ? (\n <View\n style={{\n alignSelf: \"flex-start\",\n maxWidth: \"100%\",\n marginTop: 4,\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 6,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Text\n numberOfLines={1}\n style={{\n fontFamily: Platform.OS === \"ios\" ? \"Menlo\" : \"monospace\",\n fontSize: 12,\n color: c.fg,\n }}\n >\n {item.body}\n </Text>\n </View>\n ) : item.kind === \"notification\" ? (\n <NotificationContent item={item} />\n ) : item.kind === \"reply\" && item.body ? (\n <Text\n numberOfLines={2}\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n }}\n >\n {notificationPlainText(item.body)}\n </Text>\n ) : null}\n <View style={{ flexDirection: \"row\", marginTop: 2 }}>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n flexShrink: 1,\n fontSize: 12,\n lineHeight: 18,\n color: c[\"fg-subtle\"],\n }}\n >\n {meta(item)}\n </Text>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n fontSize: 12,\n lineHeight: 18,\n color: c[\"fg-subtle\"],\n }}\n >\n {` · ${when(t, item)}`}\n </Text>\n </View>\n {rowActions ? (\n <View style={{ flexDirection: \"row\", flexWrap: \"wrap\", gap: 8, marginTop: 12 }}>\n {rowActions}\n </View>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.inbox.moreActionsForTitle\", {\n title: item.title,\n })}\n hitSlop={8}\n onPress={() => openMenu(item)}\n style={({ pressed }) => ({\n width: 32,\n height: 32,\n marginTop: -4,\n marginRight: -4,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 10,\n backgroundColor: pressed ? c[\"surface-3\"] : \"transparent\",\n })}\n >\n <Icon name=\"ellipsis\" size={16} color={c[\"fg-subtle\"]} />\n </Pressable>\n </Pressable>\n </SwipeRow>\n </View>\n );\n };\n\n const section = (title: string, list: InboxItem[], first: boolean) =>\n list.length === 0 ? null : (\n <View key={title} style={{ marginTop: first ? 16 : 32 }}>\n <View style={{ paddingHorizontal: 2 }}>\n <SectionLabel>{title}</SectionLabel>\n </View>\n {list.map(row)}\n </View>\n );\n\n // A failed first load says so, rather than claiming nothing waits.\n if (!inbox.data && inbox.error && !inbox.loading) {\n return (\n <View style={{ alignItems: \"center\", paddingTop: 72, paddingHorizontal: 32, gap: 12 }}>\n <Text style={{ ...fontStyle(theme, 600), fontSize: 16, color: c.fg, textAlign: \"center\" }}>\n {t(\"native.timeline.inbox.couldnTLoadYourInbox\")}\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n textAlign: \"center\",\n }}\n >\n {t(\"native.timeline.inbox.checkYourConnectionOrThis\")}\n </Text>\n <Button label={t(\"native.timeline.inbox.tryAgain\")} onPress={() => void inbox.refresh()} />\n </View>\n );\n }\n\n if (awake.length === 0 && snoozed.length === 0) {\n return (\n <View style={{ alignItems: \"center\", paddingTop: 72, paddingHorizontal: 32, gap: 10 }}>\n <View\n style={{\n width: 44,\n height: 44,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: withAlpha(c[\"fg-muted\"], 0.08),\n }}\n >\n <Icon name=\"inbox\" size={20} color={c[\"fg-muted\"]} />\n </View>\n <Text style={{ ...fontStyle(theme, 600), fontSize: 16, color: c.fg, textAlign: \"center\" }}>\n {inbox.loading\n ? t(\"native.timeline.inbox.loadingYourInbox\")\n : t(\"native.timeline.inbox.nothingIsWaitingOnYou\")}\n </Text>\n {inbox.loading ? null : (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n textAlign: \"center\",\n }}\n >\n {t(\"native.timeline.inbox.whenAnAgentAsksYou\")}\n </Text>\n )}\n </View>\n );\n }\n\n return (\n <View>\n {section(t(\"native.timeline.inbox.needsYou\"), needsYou, true)}\n {section(t(\"native.timeline.inbox.fromYourAgents\"), fromAgents, needsYou.length === 0)}\n {section(\n t(\"native.timeline.inbox.replies\"),\n replies,\n needsYou.length === 0 && fromAgents.length === 0,\n )}\n {awake.length === 0 ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n color: c[\"fg-muted\"],\n marginTop: 8,\n paddingHorizontal: 4,\n }}\n >\n {t(\"native.timeline.inbox.nothingNeedsYouRightNow\")}\n </Text>\n ) : null}\n {section(t(\"native.timeline.inbox.snoozed\"), snoozed, awake.length === 0)}\n </View>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/timeline/text-selection.ts","../../src/timeline/activity.tsx","../../src/timeline/composer-state.ts","../../src/timeline/turn.tsx","../../src/timeline/turn-steps.tsx","../../src/timeline/live-notes.ts","../../src/timeline/sheet.tsx","../../src/timeline/annotations.tsx","../../src/timeline/message-timeline.tsx","../../src/timeline/controls.tsx","../../src/timeline/paste.ts","../../src/timeline/composer.tsx","../../src/timeline/feedback.tsx","../../src/timeline/selector.tsx","../../src/timeline/secret-field.tsx","../../src/timeline/decisions.tsx","../../src/timeline/message-attachments.tsx","../../src/timeline/session-list.tsx","../../src/timeline/session-signals.tsx","../../src/timeline/queue-dock.tsx","../../src/timeline/session-screen.tsx","../../src/timeline/model-picker.tsx","../../src/timeline/session-actions.tsx","../../src/timeline/inbox.tsx"],"names":["useOpenGeniText","useEffect","createContext","Platform","jsx","Text","useContext","useRef","jsxs","Fragment","Pressable","View","toolDisplayName","useState","Animated","Easing","useMemo","useCallback","ScrollView","FadeIn","FadeOut","ActivityIndicator","AccessibilityInfo","TextInput","Modal","KeyboardAvoidingView","text","useAnimatedStyle","SESSION_STATUS_PRESENTATION","useWindowDimensions","Chip","annotationHasNote","Alert","Image","defaultChatComposerMessages","sessionDisplayTitle","PanResponder","actions","ActionSheetIOS"],"mappings":"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","file":"index.js","sourcesContent":["import type { DraftTimelineAnnotation } from \"@opengeni/sdk\";\nimport type { TimelineAnnotationSourceDescriptor } from \"@opengeni/react/session\";\nimport { annotationFromSelection } from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useEffect, useRef } from \"react\";\nimport { Platform } from \"react-native\";\n\n/**\n * Text selection inside timeline messages. A message body sits in a view with\n * this test id prefix plus its annotation source key (empty when it cannot be\n * annotated). On iOS the package's native module then gives its text the\n * system selection (handles, Copy, Look Up, Share) instead of React Native's\n * whole-paragraph Copy; on both platforms it adds Add note to the selection\n * menu when a host takes annotations.\n */\nexport const ANNOTATION_SOURCE_TEST_ID_PREFIX = \"og-annotation-source:\";\n\nexport function annotationSourceTestId(sourceKey: string | undefined): string {\n return `${ANNOTATION_SOURCE_TEST_ID_PREFIX}${sourceKey ?? \"\"}`;\n}\n\ntype AnnotateEvent = { sourceKey: string; quote: string; before: string; after: string };\n\nexport type QuoteBox = { x: number; y: number; width: number; height: number };\n\n/**\n * Where a quote is drawn in its source view: the end of its last glyph, the\n * top of that line's text, and a text box for each line it spans.\n */\nexport type QuoteAnchor = { x: number; top: number; boxes: QuoteBox[] };\n\nexport type QuoteAnchorQuery = { quote: string; before: string; after: string };\n\ntype TextSelectionModule = {\n addListener(\n eventName: \"onAnnotate\",\n listener: (event: AnnotateEvent) => void,\n ): { remove(): void };\n setAnnotateTitle(title: string | null): void;\n quoteAnchors?(\n sourceKey: string,\n queries: QuoteAnchorQuery[],\n ): Promise<({ x?: number; top?: number; rects?: number[] } | null)[]>;\n};\n\nfunction textSelectionModule(): TextSelectionModule | null {\n if (Platform.OS !== \"ios\" && Platform.OS !== \"android\") return null;\n const registry = (globalThis as { expo?: { modules?: Record<string, unknown> } }).expo?.modules;\n const module = registry?.OpenGeniTextSelection as TextSelectionModule | undefined;\n return module && typeof module.addListener === \"function\" ? module : null;\n}\n\n/** Whether this build can turn a text selection into an annotation. */\nexport function nativeTextAnnotationAvailable(): boolean {\n return textSelectionModule() !== null;\n}\n\n/**\n * Measures where each quote ends inside the source drawn for `sourceKey`;\n * null for a quote that is not drawn there (or without native measuring).\n */\nexport async function measureQuoteAnchors(\n sourceKey: string,\n queries: QuoteAnchorQuery[],\n): Promise<(QuoteAnchor | null)[]> {\n const module = textSelectionModule();\n if (!module?.quoteAnchors || queries.length === 0) return queries.map(() => null);\n try {\n const anchors = await module.quoteAnchors(sourceKey, queries);\n return queries.map((_, index) => {\n const anchor = anchors[index];\n if (typeof anchor?.x !== \"number\" || typeof anchor.top !== \"number\") return null;\n const flat = anchor.rects ?? [];\n const boxes: QuoteBox[] = [];\n for (let at = 0; at + 3 < flat.length; at += 4) {\n boxes.push({ x: flat[at]!, y: flat[at + 1]!, width: flat[at + 2]!, height: flat[at + 3]! });\n }\n return { x: anchor.x, top: anchor.top, boxes };\n });\n } catch {\n return queries.map(() => null);\n }\n}\n\n/**\n * Turns Add note on a selection into a draft annotation for `onAnnotate`.\n * `sources` maps each message's annotation source key to its source.\n */\nexport function useNativeTextAnnotation(\n sources: ReadonlyMap<string, TimelineAnnotationSourceDescriptor>,\n onAnnotate: ((annotation: DraftTimelineAnnotation) => void) | undefined,\n): void {\n const t = useOpenGeniText();\n const latest = useRef({ sources, onAnnotate });\n latest.current = { sources, onAnnotate };\n const enabled = Boolean(onAnnotate);\n const title = t(\"timelineAnnotationSelection.addNote\");\n useEffect(() => {\n const module = textSelectionModule();\n if (!module || !enabled) return;\n // Add note shows while some timeline listens (the module tracks listeners).\n module.setAnnotateTitle(title);\n const subscription = module.addListener(\"onAnnotate\", (event) => {\n const source = latest.current.sources.get(event.sourceKey);\n if (!source) return;\n const annotation = annotationFromSelection(source, {\n text: event.quote,\n textBefore: event.before,\n textAfter: event.after,\n });\n if (annotation) latest.current.onAnnotate?.(annotation);\n });\n return () => subscription.remove();\n }, [enabled, title]);\n}\n","import type {\n ActivityItem,\n AgentMessageItem,\n ReasoningItem,\n SandboxItem,\n ToolCallItem,\n WorkerItem,\n} from \"@opengeni/react/session\";\nimport {\n pathBasename,\n pathDirname,\n presentsToolOutputPreview,\n sandboxRowTitle,\n startupDuration,\n startupPhaseTitle,\n STARTUP_WAIT_TITLES,\n toolDisplayName,\n toolRowPresentation,\n workerRowTitle,\n type ToolBody,\n type ToolDetails,\n type ToolIconKind,\n type ToolPreview,\n type ToolRowPresentation,\n type WebSearchResult,\n} from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { createContext, useContext, useEffect, type ReactNode } from \"react\";\nimport { Pressable, Text, View } from \"react-native\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport {\n ActivityDisclosure,\n BodyNote,\n Chip,\n PayloadBlock,\n RunningPreview,\n ShimmerText,\n TermBlock,\n ROW_MIN_HEIGHT,\n} from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { annotationSourceTestId } from \"./text-selection\";\n\n/* ----------------------------------------------------------------------------\n Native activity rows. Tool rows draw from the shared presentation model\n (`toolRowPresentation`), the same source the web renderers use; hosts can\n replace a tool's row via `NativeToolRenderers` (e.g. product-specific tools).\n -------------------------------------------------------------------------- */\n\nexport type NativeToolRendererProps = {\n item: ToolCallItem;\n presentation: ToolRowPresentation;\n compact: boolean;\n};\n\n/** Return null to fall back to the shared row. */\nexport type NativeToolRenderer = (props: NativeToolRendererProps) => ReactNode | null;\n\nexport interface NativeActivityOptions {\n /** Per-tool overrides keyed by exact tool name or MCP leaf. */\n toolRenderers?: Record<string, NativeToolRenderer> | undefined;\n /** Host renderer consulted for every tool call (return null for the shared row). */\n renderTool?: NativeToolRenderer | undefined;\n /** Active compute label for exec previews (\"on <label> · …\"). */\n computeLabel?: string | null | undefined;\n /**\n * `\"plain\"` keeps every tool step visible with its plain name and status but\n * never shows raw arguments, output or JSON. Defaults to `\"full\"`.\n */\n toolDetails?: ToolDetails | undefined;\n renderMarkdown?:\n | ((text: string, options: { tone: \"body\" | \"muted\"; streaming?: boolean }) => ReactNode)\n | undefined;\n onOpenSession?: ((sessionId: string) => void) | undefined;\n}\n\nconst ActivityOptionsContext = createContext<NativeActivityOptions>({});\nexport const NativeActivityOptionsProvider = ActivityOptionsContext.Provider;\nexport function useNativeActivityOptions(): NativeActivityOptions {\n return useContext(ActivityOptionsContext);\n}\n\nconst TOOL_ICON: Record<ToolIconKind, NativeIconName> = {\n terminal: \"terminal\",\n keyboard: \"keyboard\",\n \"file-diff\": \"file-diff\",\n search: \"search\",\n question: \"message-circle-question\",\n target: \"target\",\n brain: \"brain-circuit\",\n sessions: \"messages-square\",\n server: \"server\",\n \"server-cog\": \"server-cog\",\n calendar: \"calendar-clock\",\n panels: \"panels-top-left\",\n share: \"share-2\",\n message: \"message-square\",\n git: \"folder-git\",\n box: \"box\",\n key: \"key-round\",\n \"file-search\": \"file-search\",\n \"package-search\": \"package-search\",\n plug: \"plug\",\n browser: \"globe\",\n screen: \"monitor\",\n spreadsheet: \"file-spreadsheet\",\n wait: \"hourglass\",\n download: \"download\",\n clipboard: \"clipboard\",\n image: \"image\",\n video: \"video\",\n record: \"circle-dot\",\n document: \"file-text\",\n file: \"file\",\n attachment: \"paperclip\",\n archive: \"archive\",\n folder: \"folder\",\n site: \"app-window\",\n guide: \"book-open\",\n settings: \"settings\",\n bell: \"bell\",\n inbox: \"inbox\",\n help: \"hand\",\n model: \"sparkles\",\n progress: \"activity\",\n helper: \"bot\",\n \"sign-in\": \"log-in\",\n code: \"code\",\n accounting: \"receipt\",\n rename: \"pencil\",\n wrench: \"wrench\",\n};\n\nfunction PreviewNode({ preview, compact }: { preview: ToolPreview; compact: boolean }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const mono = { ...fontStyle(theme, 400, \"mono\"), fontSize: theme.size.sm, lineHeight: 18 };\n switch (preview.kind) {\n case \"text\":\n return preview.running ? (\n <RunningPreview text={preview.text} compact={compact} />\n ) : (\n <>{preview.text}</>\n );\n case \"path\":\n return (\n <Text numberOfLines={1} style={mono}>\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{pathDirname(preview.path)}</Text>\n <Text style={{ color: theme.colors[\"fg-muted\"] }}>{pathBasename(preview.path)}</Text>\n {preview.add != null || preview.del != null ? (\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>\n {\" \"}\n {preview.add != null ? `+${preview.add}` : \"\"}\n {preview.add != null && preview.del != null ? \" \" : \"\"}\n {preview.del != null ? `−${preview.del}` : \"\"}\n </Text>\n ) : null}\n </Text>\n );\n case \"files\":\n return (\n <Text numberOfLines={1} style={mono}>\n <Text style={{ color: theme.colors[\"fg-muted\"] }}>\n {t(\"native.timeline.activity.countvalueFiles\", { countValue: preview.count })}\n </Text>\n <Text\n style={{ color: theme.colors[\"fg-subtle\"] }}\n >{` +${preview.add} −${preview.del}`}</Text>\n </Text>\n );\n case \"malformed\":\n return (\n <Text numberOfLines={1} style={mono}>\n <Text style={{ color: theme.colors[\"fg-muted\"] }}>{preview.name}</Text>\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{\" malformed V4A\"}</Text>\n </Text>\n );\n }\n}\n\nfunction previewContent(preview: ToolPreview, compact: boolean): ReactNode {\n if (preview.kind === \"text\" && !preview.running) return preview.text;\n return <PreviewNode preview={preview} compact={compact} />;\n}\n\nfunction keyedResults(results: readonly WebSearchResult[]) {\n const seen = new Map<string, number>();\n return results.map((result) => {\n const content = `${result.domain}\\u0000${result.title}\\u0000${result.snippet}`;\n const occurrence = (seen.get(content) ?? 0) + 1;\n seen.set(content, occurrence);\n return { key: `${content}\\u0000${occurrence}`, result };\n });\n}\n\nfunction ToolBodyView({ body }: { body: ToolBody }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n switch (body.kind) {\n case \"term\":\n return (\n <>\n <TermBlock\n command={body.command}\n workdir={body.workdir}\n output={body.output}\n live={body.live}\n failed={body.failed}\n />\n {body.note ? <BodyNote>{body.note}</BodyNote> : null}\n </>\n );\n case \"note\":\n return <BodyNote tone={body.tone}>{body.text}</BodyNote>;\n case \"payloads\":\n return (\n <>\n {body.blocks.map((block) => (\n <PayloadBlock\n key={block.label}\n label={block.label}\n value={block.value}\n failed={block.failed}\n />\n ))}\n </>\n );\n case \"patch\":\n return (\n <>\n {body.files.map((entry) => (\n <PatchView key={entry.key} path={entry.path} diff={entry.diff} bare={body.bare} />\n ))}\n </>\n );\n case \"web-results\":\n if (!body.results?.length) {\n return <BodyNote>{t(\"native.timeline.activity.resultsFoldedIntoModelContext\")}</BodyNote>;\n }\n return (\n <View style={{ gap: 8 }}>\n {keyedResults(body.results).map(({ key, result }) => (\n <View key={key} style={{ flexDirection: \"row\", gap: 10 }}>\n <View style={{ marginTop: 3 }}>\n <Icon name=\"globe\" size={14} color={theme.colors[\"fg-subtle\"]} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme), fontSize: theme.size.base, color: theme.colors.fg }}\n >\n {result.title}{\" \"}\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{result.domain}</Text>\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {result.snippet}\n </Text>\n </View>\n </View>\n ))}\n </View>\n );\n case \"none\":\n return null;\n case \"listing\":\n return (\n <>\n {body.note ? <BodyNote>{body.note}</BodyNote> : null}\n {body.entries.length > 0 ? (\n <View style={{ gap: body.entries.some((entry) => entry.snippet) ? 8 : 6 }}>\n {body.entries.map((entry) => (\n <View key={entry.key} style={{ minWidth: 0 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"baseline\", gap: 8 }}>\n {entry.eyebrow ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {entry.eyebrow}\n </Text>\n ) : null}\n <Text\n numberOfLines={1}\n style={{\n ...(entry.mono ? fontStyle(theme, 400, \"mono\") : fontStyle(theme, 500)),\n fontSize: theme.size.sm,\n color: theme.colors.fg,\n flexShrink: 1,\n }}\n >\n {entry.title}\n </Text>\n </View>\n {entry.snippet ? (\n <Text\n numberOfLines={2}\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {entry.snippet}\n </Text>\n ) : null}\n </View>\n ))}\n {body.more ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {t(\"native.timeline.activity.moreMore\", { more: body.more })}\n </Text>\n ) : null}\n </View>\n ) : body.empty ? (\n <BodyNote>{body.empty}</BodyNote>\n ) : null}\n {body.blocks.map((block) => (\n <PayloadBlock\n key={block.label}\n label={block.label}\n value={block.value}\n failed={block.failed}\n />\n ))}\n </>\n );\n }\n}\n\n/** Unified-diff-ish view of a V4A patch: add/del gutters tinted like the web diff. */\nfunction PatchView({\n path,\n diff,\n bare,\n}: {\n path: string;\n diff: string;\n bare?: boolean | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const mono = { ...fontStyle(theme, 400, \"mono\"), fontSize: theme.size.xs, lineHeight: 18 };\n let offset = 0;\n const lines = diff\n .split(\"\\n\")\n .map((text) => {\n const entry = { text, key: `l${offset}` };\n offset += text.length + 1;\n return entry;\n })\n .filter((entry) => !entry.text.startsWith(\"*** \"));\n return (\n <View\n style={{\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: theme.colors.border,\n overflow: \"hidden\",\n }}\n >\n {bare ? null : (\n <Text\n style={[\n mono,\n {\n paddingHorizontal: 8,\n paddingVertical: 6,\n color: theme.colors[\"fg-muted\"],\n backgroundColor: theme.colors[\"surface-2\"],\n },\n ]}\n numberOfLines={1}\n >\n {path}\n </Text>\n )}\n {lines.slice(0, 400).map(({ text: line, key }) => (\n <Text\n key={key}\n style={[\n mono,\n {\n paddingHorizontal: 8,\n color: theme.colors[\"fg-muted\"],\n backgroundColor: line.startsWith(\"+\")\n ? theme.colors[\"diff-add-bg\"]\n : line.startsWith(\"-\")\n ? theme.colors[\"diff-del-bg\"]\n : \"transparent\",\n },\n ]}\n >\n {line || \" \"}\n </Text>\n ))}\n </View>\n );\n}\n\nexport function PresentedToolRow({\n presentation: p,\n compact = false,\n outputPreview,\n}: {\n presentation: ToolRowPresentation;\n compact?: boolean;\n /** The row's output preview, when its output is not exact. */\n outputPreview?: ToolCallItem[\"outputPreview\"];\n}) {\n return (\n <ActivityDisclosure\n icon={TOOL_ICON[p.icon]}\n iconTone={p.iconTone}\n title={p.title}\n titleMono={p.titleMono}\n running={p.running}\n chip={p.chip}\n failed={p.failed}\n cancelled={p.cancelled}\n compact={compact}\n preview={p.preview ? previewContent(p.preview, compact) : undefined}\n expandable={p.body.kind !== \"none\"}\n outputPreview={outputPreview}\n >\n <ToolBodyView body={p.body} />\n </ActivityDisclosure>\n );\n}\n\nfunction ToolCallRow({ item, compact }: { item: ToolCallItem; compact: boolean }) {\n const t = useOpenGeniText();\n const options = useNativeActivityOptions();\n const presentation = toolRowPresentation(t, item, {\n computeLabel: options.computeLabel ?? null,\n details: options.toolDetails ?? \"full\",\n });\n const leaf = item.name.includes(\"__\")\n ? item.name.slice(item.name.lastIndexOf(\"__\") + 2)\n : item.name;\n const custom = options.toolRenderers?.[item.name] ?? options.toolRenderers?.[leaf];\n const outputPreview = item.outputPreview ?? null;\n // Custom renderers and presentations that parse their result need the\n // exact output first; a failed read falls back to the built-in row, which\n // says it is a preview.\n const exactFirst =\n outputPreview !== null &&\n (custom !== undefined || options.renderTool !== undefined || !presentsToolOutputPreview(item));\n if (exactFirst && outputPreview.load && outputPreview.state !== \"error\") {\n return <ToolOutputExactRow item={item} preview={outputPreview} compact={compact} />;\n }\n if (!exactFirst) {\n for (const renderer of [custom, options.renderTool]) {\n if (!renderer) continue;\n const node = renderer({ item, presentation, compact });\n if (node != null) return <>{node}</>;\n }\n }\n return (\n <PresentedToolRow presentation={presentation} compact={compact} outputPreview={outputPreview} />\n );\n}\n\n/** A tool row reading its exact output before it renders. */\nfunction ToolOutputExactRow({\n item,\n preview,\n compact,\n}: {\n item: ToolCallItem;\n preview: NonNullable<ToolCallItem[\"outputPreview\"]>;\n compact: boolean;\n}) {\n const t = useOpenGeniText();\n const pending = preview.state === \"preview\";\n const load = preview.load;\n useEffect(() => {\n if (pending) load?.();\n }, [pending, load]);\n return (\n <ActivityDisclosure\n icon=\"wrench\"\n title={toolDisplayName(t, item.name)}\n preview={t(\"timeline.toolRenderers.loadingOutput\")}\n compact={compact}\n expandable={false}\n />\n );\n}\n\nfunction ReasoningRow({ item, compact }: { item: ReasoningItem; compact: boolean }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const options = useNativeActivityOptions();\n const plain = item.text\n .replace(/\\*\\*|__|`/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n const titleStyle = {\n ...fontStyle(theme, 500),\n fontSize: theme.size.base,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n };\n return (\n <ActivityDisclosure\n icon=\"brain\"\n iconTone=\"muted\"\n compact={compact}\n running={item.streaming}\n title={\n item.streaming ? (\n <ShimmerText style={titleStyle} numberOfLines={1}>\n {t(\"native.timeline.activity.thinking\")}\n </ShimmerText>\n ) : (\n <Text\n style={{\n ...fontStyle(theme, 400),\n fontSize: theme.size.base,\n lineHeight: 20,\n fontStyle: \"italic\",\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {t(\"native.timeline.activity.thought\")}\n </Text>\n )\n }\n accessibilityLabel={item.streaming ? m.thinking : m.thought}\n preview={plain || undefined}\n >\n <View testID={annotationSourceTestId(undefined)} collapsable={false}>\n {options.renderMarkdown ? (\n options.renderMarkdown(item.text, { tone: \"muted\", streaming: item.streaming })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.base,\n lineHeight: 24,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n )}\n </View>\n </ActivityDisclosure>\n );\n}\n\nfunction SandboxRow({ item, compact }: { item: SandboxItem; compact: boolean }) {\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n return (\n <ActivityDisclosure\n icon=\"square-terminal\"\n iconTone={\n item.status === \"failed\" ? \"failed\" : item.status === \"running\" ? \"running\" : \"muted\"\n }\n title={sandboxRowTitle(t, item, (name) => toolDisplayName(t, name))}\n running={item.status === \"running\"}\n failed={item.status === \"failed\"}\n cancelled={item.status === \"cancelled\"}\n compact={compact}\n preview={item.command ?? undefined}\n >\n {item.command ? <PayloadBlock label={m.command} value={item.command} /> : null}\n {item.output ? <PayloadBlock label={m.output} value={item.output} /> : null}\n </ActivityDisclosure>\n );\n}\n\nfunction StartupPhaseRow({\n item,\n compact,\n}: {\n item: Extract<ActivityItem, { kind: \"startup-phase\" }>;\n compact: boolean;\n}) {\n const m = useNativeTimelineMessages();\n const failed = item.status === \"failed\";\n const t = useOpenGeniText();\n const running = item.status === \"running\";\n const duration = startupDuration(item.durationMs);\n return (\n <ActivityDisclosure\n icon=\"bot\"\n iconTone={failed ? \"failed\" : running ? \"running\" : \"muted\"}\n title={\n item.blockedReason\n ? STARTUP_WAIT_TITLES(t)[item.blockedReason]\n : startupPhaseTitle(t, item.phase, item.status, item.outcome)\n }\n preview={item.phase === \"model_preparation\" ? m.startupDetail : undefined}\n running={running}\n failed={failed}\n cancelled={item.status === \"cancelled\"}\n chip={duration ? { tone: failed ? \"bad\" : \"muted\", text: duration } : undefined}\n expandable={false}\n compact={compact}\n />\n );\n}\n\nfunction WorkerRow({ item, compact }: { item: WorkerItem; compact: boolean }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const options = useNativeActivityOptions();\n const running = item.status === \"running\";\n const failed = item.status === \"failed\";\n const cancelled = item.status === \"cancelled\";\n const title = workerRowTitle(t, item);\n if (compact) {\n return (\n <ActivityDisclosure\n icon=\"bot\"\n title={title}\n preview={item.prompt}\n running={running}\n compact\n />\n );\n }\n const sessionId = item.workerSessionId;\n const deepLink = Boolean(sessionId) && Boolean(options.onOpenSession) && !failed && !cancelled;\n const titleStyle = {\n ...fontStyle(theme, 500),\n fontSize: theme.size.base,\n lineHeight: 20,\n color: failed ? theme.colors[\"status-failed\"] : theme.colors.fg,\n };\n const inner = (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n minHeight: ROW_MIN_HEIGHT,\n paddingHorizontal: 6,\n paddingVertical: 10,\n }}\n >\n <View style={{ width: 14 }} />\n <View style={{ marginTop: 3 }}>\n <Icon\n name=\"bot\"\n size={14}\n color={failed ? theme.colors[\"status-failed\"] : theme.colors.accent}\n />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <ShimmerText style={titleStyle} active={running}>\n {title}\n </ShimmerText>\n {item.prompt ? (\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.prompt}\n </Text>\n ) : null}\n {failed && item.failure ? (\n <View style={{ marginTop: 4 }}>\n <Text\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: theme.size.xs,\n color: theme.colors[\"status-failed\"],\n }}\n >\n {item.failure.code}\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.sm,\n color: theme.colors[\"status-failed\"],\n }}\n >\n {item.failure.message}\n </Text>\n </View>\n ) : null}\n </View>\n {failed ? (\n <Chip chip={{ tone: \"bad\", text: \"failed\" }} />\n ) : cancelled ? (\n <Chip chip={{ tone: \"interrupted\", text: \"interrupted\" }} />\n ) : deepLink ? (\n <Icon name=\"chevron-right\" size={14} color={theme.colors[\"fg-subtle\"]} />\n ) : null}\n </View>\n );\n if (deepLink && sessionId && options.onOpenSession) {\n const open = options.onOpenSession;\n return (\n <Pressable accessibilityRole=\"button\" onPress={() => open(sessionId)}>\n {inner}\n </Pressable>\n );\n }\n return inner;\n}\n\n/** Assistant commentary folded into the rail: quieter than an answer. */\nfunction ActivityNoteRow({ item }: { item: AgentMessageItem }) {\n const theme = useNativeTimelineTheme();\n const options = useNativeActivityOptions();\n if (!item.text.trim()) return null;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 8,\n paddingHorizontal: 6,\n paddingVertical: 6,\n }}\n >\n <View style={{ width: 14 }} />\n <View style={{ marginTop: 4 }}>\n <Icon name=\"message-square-text\" size={14} color={theme.colors[\"fg-subtle\"]} />\n </View>\n <View\n testID={annotationSourceTestId(item.annotationSource?.eventId)}\n collapsable={false}\n style={{ flex: 1, minWidth: 0 }}\n >\n {options.renderMarkdown ? (\n options.renderMarkdown(item.text, { tone: \"muted\", streaming: item.streaming })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n )}\n </View>\n </View>\n );\n}\n\n/** Renders one activity item — the native `renderActivity`. */\nexport function ActivityRow({ item, compact = false }: { item: ActivityItem; compact?: boolean }) {\n const m = useNativeTimelineMessages();\n switch (item.kind) {\n case \"tool-call\":\n return <ToolCallRow item={item} compact={compact} />;\n case \"reasoning\":\n return <ReasoningRow item={item} compact={compact} />;\n case \"sandbox\":\n return <SandboxRow item={item} compact={compact} />;\n case \"startup-phase\":\n return <StartupPhaseRow item={item} compact={compact} />;\n case \"worker\":\n return <WorkerRow item={item} compact={compact} />;\n case \"agent-message\":\n return compact ? (\n <ActivityDisclosure\n icon=\"message-square-text\"\n title={item.text.replace(/\\s+/g, \" \").trim()}\n compact\n />\n ) : (\n <ActivityNoteRow item={item} />\n );\n case \"knowledge\":\n return (\n <ActivityDisclosure\n icon=\"file-search\"\n iconTone={item.status === \"failed\" ? \"failed\" : \"muted\"}\n title={\n item.outcome === \"pending\"\n ? m.proposedKnowledge\n : item.outcome === \"failed\"\n ? m.knowledgeSaveFailed\n : m.savedToKnowledge\n }\n preview={\n \"filename\" in item && typeof item.filename === \"string\" ? item.filename : undefined\n }\n expandable={false}\n compact={compact}\n />\n );\n case \"memory\":\n return (\n <ActivityDisclosure\n icon=\"brain-circuit\"\n title={m.savedToMemory}\n preview={\"text\" in item && typeof item.text === \"string\" ? item.text : undefined}\n expandable={false}\n compact={compact}\n />\n );\n case \"fleet-decision\":\n return (\n <ActivityDisclosure\n icon=\"messages-square\"\n title={m.workerDecision}\n expandable={false}\n compact={compact}\n />\n );\n default:\n return null;\n }\n}\n","import type { OpenGeniText } from \"@opengeni/react/messages\";\nimport { GENIE_PREPARING_PHRASES, GENIE_WAITING_PHRASES } from \"@opengeni/react/timeline-model\";\n\n/** What the composer's single trailing control does right now. */\nexport type ComposerTrailingMode = \"send\" | \"pause\" | \"resume\" | \"call\" | \"idle\";\n\n/**\n * Send wins whenever there is something to send (a message to a running agent\n * joins the queue); otherwise resume a paused workstream or pause a running\n * one; an otherwise empty composer offers a call when the host has one, and\n * else shows a quiet, disabled send.\n */\nexport function composerTrailingMode(input: {\n value: string;\n canSend: boolean;\n paused?: boolean | undefined;\n running?: boolean | undefined;\n canResume: boolean;\n canPause: boolean;\n canCall: boolean;\n}): ComposerTrailingMode {\n if (input.value.trim().length > 0 || input.canSend) return \"send\";\n if (input.paused && input.canResume) return \"resume\";\n if (input.running && input.canPause) return \"pause\";\n return input.canCall ? \"call\" : \"idle\";\n}\n\n/**\n * The other send choice beside Send while the agent works: Queue when Send\n * steers, Steer when Send queues. Offered exactly while Send takes its busy\n * path (`alternateSend` from the composer), when the trailing action is Send\n * and the host can deliver it.\n */\nexport function composerAlternateSend(input: {\n trailing: ComposerTrailingMode;\n alternateSend?: \"queue\" | \"steer\" | null | undefined;\n available: boolean;\n}): \"queue\" | \"steer\" | null {\n if (!input.available || input.trailing !== \"send\") return null;\n return input.alternateSend ?? null;\n}\n\n/**\n * The loading copy beside the orb: a host's own phrases replace both phases',\n * as the web timeline's loading `phrases` option does; otherwise the built-in\n * preparing or waiting copy.\n */\nexport function nativeLoadingPhrases(\n t: OpenGeniText,\n hostPhrases: readonly string[],\n phase: \"preparing\" | \"waiting\",\n): readonly string[] {\n if (hostPhrases.length > 0) return hostPhrases;\n return phase === \"waiting\" ? GENIE_WAITING_PHRASES(t) : GENIE_PREPARING_PHRASES(t);\n}\n","import type { ActivityItem, TurnOutcome } from \"@opengeni/react/session\";\nimport {\n createTurnSummaryContext,\n formatElapsed,\n resolveTurnSummaryFacets,\n rollingActivityItem,\n selectTurnSummaryFacets,\n toolDisplayName,\n turnSummaryFallbackLabel,\n type TurnSummaryFacetConfiguration,\n} from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { nativeLoadingPhrases } from \"./composer-state\";\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { Platform, Pressable, Text, View, type TextStyle } from \"react-native\";\nimport Animated, { FadeIn, FadeInDown, FadeOut, FadeOutUp } from \"react-native-reanimated\";\nimport { ActivityRow } from \"./activity\";\nimport { ThinkingOrb } from \"./thinking-orb\";\nimport { Icon } from \"./icon\";\nimport { PulseDot, ShimmerText, ROW_MIN_HEIGHT, useReleaseFollow } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/* ----------------------------------------------------------------------------\n Native TurnSummary / ActivityRail / RollingActivity — the web components of\n the same names (timeline/turn-summary.tsx, activity-rail.tsx,\n rolling-activity.tsx) in their rolling-turn configuration.\n -------------------------------------------------------------------------- */\n\n/** Native counterpart of the web `TurnSummaryStatus` with a renderable preview. */\nexport type NativeTurnStatus =\n | { kind: \"worked\"; durationMs?: number | undefined; label?: string | undefined }\n | {\n kind: \"working\" | \"waiting\";\n since?: string | undefined;\n label?: string | undefined;\n preview?: ReactNode;\n };\n\ntype FoldMemory = Map<string, \"open\" | \"closed\">;\nconst FoldMemoryContext = createContext<FoldMemory | null>(null);\n\n/**\n * A shrink-wrapped single-line summary. Android sizes it to the ellipsized line without\n * the \"…\" glyph's overhang, which then clips the last dot; a little trailing room keeps\n * the ellipsis whole.\n */\nconst TRUNCATED_TAIL: TextStyle =\n Platform.OS === \"android\" ? { flexShrink: 1, paddingRight: 2 } : { flexShrink: 1 };\nexport const FoldMemoryProvider = FoldMemoryContext.Provider;\n\n/**\n * An expanded outer turn header stays pinned to the top of the timeline while\n * its section scrolls (web: sticky inside the section). Each open section\n * reports its content-space frame and a renderer for the header row; the\n * timeline draws the pinned copy over the scroll view.\n */\nexport type StickyWorkHeader = {\n top: number;\n height: number;\n headerHeight: number;\n render: () => ReactNode;\n};\nexport type StickyWorkHeaderRegistry = {\n register: (key: string, entry: StickyWorkHeader | null) => void;\n /** Bring a section's top back into view (after collapsing from the pinned copy). */\n reveal: (top: number) => void;\n};\nconst StickyWorkHeaderContext = createContext<StickyWorkHeaderRegistry | null>(null);\nexport const StickyWorkHeaderProvider = StickyWorkHeaderContext.Provider;\n\nexport function useLiveNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (!active) return;\n const timer = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(timer);\n }, [active]);\n return now;\n}\n\nfunction LiveElapsed({ since, style }: { since: string; style: TextStyle }) {\n const t = useOpenGeniText();\n const startedAt = Date.parse(since);\n const now = useLiveNow(true);\n if (!Number.isFinite(startedAt)) return null;\n return (\n <Text\n style={[style, { fontVariant: [\"tabular-nums\"] }]}\n >{` · ${formatElapsed(t, Math.max(0, now - startedAt))}`}</Text>\n );\n}\n\nexport interface TurnSummaryProps {\n items: ActivityItem[];\n outcome?: TurnOutcome | undefined;\n failureText?: string | undefined;\n durationMs?: number | undefined;\n defaultOpen?: boolean | undefined;\n liveHeader?: ReactNode;\n bare?: boolean | undefined;\n facets?: TurnSummaryFacetConfiguration | undefined;\n foldKey?: string | undefined;\n contextCompactionCount?: number | undefined;\n status?: NativeTurnStatus | undefined;\n /** The turn has steps that are not loaded yet (opening the row reads them). */\n unloadedSteps?: boolean | undefined;\n /**\n * Reports the disclosure's open state: once on mount when it starts open,\n * then on every change, in the same update as the change itself.\n */\n onOpenStateChange?: ((open: boolean) => void) | undefined;\n children: ReactNode;\n}\n\nexport function TurnSummary({\n items,\n outcome,\n failureText,\n durationMs,\n defaultOpen,\n liveHeader,\n bare,\n facets: facetConfiguration,\n foldKey,\n contextCompactionCount,\n status,\n unloadedSteps,\n onOpenStateChange,\n children,\n}: TurnSummaryProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const foldMemory = useContext(FoldMemoryContext);\n const registerSticky = useContext(StickyWorkHeaderContext);\n const releaseFollow = useReleaseFollow();\n const frame = useRef<{ top: number; height: number; headerHeight: number }>({\n top: 0,\n height: 0,\n headerHeight: 0,\n });\n const remembered = foldKey !== undefined ? foldMemory?.get(foldKey) : undefined;\n const [open, setOpen] = useState(\n remembered === \"closed\" ? false : remembered === \"open\" ? true : (defaultOpen ?? false),\n );\n const readerOwnsOpen = useRef(remembered !== undefined);\n const reportOpen = useRef(onOpenStateChange);\n reportOpen.current = onOpenStateChange;\n const openRef = useRef(open);\n const changeOpen = (next: boolean) => {\n if (openRef.current === next) return;\n openRef.current = next;\n setOpen(next);\n reportOpen.current?.(next);\n };\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- report the starting state once\n useEffect(() => {\n if (openRef.current) reportOpen.current?.(true);\n }, []);\n useEffect(() => {\n if (status && defaultOpen && remembered === undefined && !readerOwnsOpen.current)\n changeOpen(true);\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- changeOpen only touches refs and state\n }, [status, defaultOpen, remembered]);\n const toggle = (next: boolean) => {\n releaseFollow();\n readerOwnsOpen.current = true;\n if (foldKey !== undefined) foldMemory?.set(foldKey, next ? \"open\" : \"closed\");\n changeOpen(next);\n };\n const context = useMemo(\n () =>\n createTurnSummaryContext(\n t,\n items,\n outcome,\n failureText,\n durationMs,\n contextCompactionCount ?? 0,\n ),\n [t, items, outcome, failureText, durationMs, contextCompactionCount],\n );\n const definitions = useMemo(\n () => resolveTurnSummaryFacets(facetConfiguration),\n [facetConfiguration],\n );\n const facets = useMemo(\n () => selectTurnSummaryFacets(definitions, context, status?.kind),\n [definitions, context, status?.kind],\n );\n const liveShell = outcome === undefined && open && !bare;\n const text: TextStyle = {\n ...fontStyle(theme),\n fontSize: bare ? theme.size.sm : theme.size.base,\n lineHeight: 20,\n color: liveShell && !status ? theme.colors[\"fg-subtle\"] : theme.colors[\"fg-muted\"],\n };\n const showMarker = !(\n status ||\n outcome === \"complete\" ||\n (!outcome && (liveHeader || context.settled))\n );\n const facetText = facets\n .map(({ result }) =>\n typeof result.content === \"string\" || typeof result.content === \"number\"\n ? String(result.content)\n : \"\",\n )\n .filter(Boolean);\n\n let statusNode: ReactNode = null;\n let hasStatusText = false;\n if (status?.kind === \"worked\") {\n if (\n status.durationMs !== undefined &&\n Number.isFinite(status.durationMs) &&\n status.durationMs >= 1000\n ) {\n hasStatusText = true;\n statusNode = (\n <Text\n style={text}\n >{`${status.label ?? m.workedFor} ${formatElapsed(t, status.durationMs)}`}</Text>\n );\n }\n } else if (status) {\n hasStatusText = true;\n const label = status.label ?? (status.kind === \"working\" ? m.working : m.waiting);\n statusNode = (\n <>\n <ShimmerText style={text} active={status.kind === \"working\"}>\n {label}\n </ShimmerText>\n {status.since ? <LiveElapsed since={status.since} style={text} /> : null}\n </>\n );\n }\n const showLive = Boolean(liveHeader) && !open && !status;\n const tail = showLive\n ? \"\"\n : !hasStatusText && facetText.length === 0 && outcome !== \"failed\" && outcome !== \"cancelled\"\n ? // Steps are not counted; an otherwise empty row still names what\n // opening it reveals.\n turnSummaryFallbackLabel(t, items, unloadedSteps)\n : facetText\n .map((value, index) => (index > 0 || hasStatusText ? ` · ${value}` : value))\n .join(\"\");\n\n const renderHeader = (pinned: boolean) => (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => (pinned ? collapseFromPin() : toggle(!open))}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n minHeight: ROW_MIN_HEIGHT,\n paddingVertical: 10,\n borderRadius: theme.radius.sm,\n // Web `-mx-2 px-2 w-full`: shifted left 8 with the same width.\n ...(bare\n ? { gap: 8, paddingHorizontal: 6 }\n : { gap: 10, paddingHorizontal: 8, marginLeft: -8, marginRight: 8 }),\n backgroundColor: pressed\n ? theme.colors.hover\n : !bare && open\n ? theme.colors.bg\n : \"transparent\",\n })}\n >\n <View style={{ transform: [{ rotate: open ? \"90deg\" : \"0deg\" }] }}>\n <Icon name=\"chevron-right\" size={14} color={theme.colors[\"fg-subtle\"]} />\n </View>\n {showMarker ? (\n <View\n style={{\n width: bare ? 14 : 20,\n height: bare ? 14 : 20,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {outcome === \"failed\" ? (\n <Icon name=\"triangle-alert\" size={12} color={theme.colors[\"status-failed\"]} />\n ) : outcome === \"cancelled\" ? (\n <Icon name=\"circle-slash\" size={12} color={theme.colors[\"fg-subtle\"]} />\n ) : (\n <PulseDot color={theme.colors[\"fg-subtle\"]} />\n )}\n </View>\n ) : null}\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n minWidth: 0,\n ...(status?.kind === \"worked\" ? { flexShrink: 1 } : { flex: 1 }),\n }}\n >\n {statusNode}\n {showLive ? (\n <View style={{ flex: 1, minWidth: 0 }}>{liveHeader}</View>\n ) : (\n <Text style={[text, TRUNCATED_TAIL]} numberOfLines={1}>\n {tail}\n {outcome === \"failed\" && failureText ? (\n <Text style={{ color: theme.colors[\"status-failed\"] }}>{` · ${failureText}`}</Text>\n ) : null}\n {outcome === \"cancelled\" ? (\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{\" · interrupted\"}</Text>\n ) : null}\n </Text>\n )}\n </View>\n {status?.kind === \"worked\" ? (\n <View\n style={{\n marginLeft: 4,\n height: 1,\n flex: 1,\n minWidth: 0,\n backgroundColor: theme.colors.border,\n }}\n />\n ) : null}\n {status && status.kind !== \"worked\" && (contextCompactionCount ?? 0) > 0 ? (\n <Icon name=\"shrink\" size={14} color={theme.colors[\"fg-muted\"]} />\n ) : null}\n </Pressable>\n );\n const sticky = !bare && open && foldKey !== undefined && registerSticky !== null;\n const collapseFromPin = () => {\n toggle(false);\n registerSticky?.reveal(frame.current.top);\n };\n const report = () => {\n if (!sticky || !registerSticky || foldKey === undefined) return;\n registerSticky.register(foldKey, { ...frame.current, render: () => renderHeader(true) });\n };\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- re-report when the row content changes\n useEffect(() => {\n if (!sticky) {\n if (registerSticky && foldKey !== undefined) registerSticky.register(foldKey, null);\n return;\n }\n report();\n return () => registerSticky?.register(foldKey!, null);\n });\n\n return (\n <View\n onLayout={(event) => {\n const { y, height } = event.nativeEvent.layout;\n frame.current = { ...frame.current, top: y, height };\n report();\n }}\n >\n <View\n onLayout={(event) => {\n frame.current = { ...frame.current, headerHeight: event.nativeEvent.layout.height };\n report();\n }}\n >\n {renderHeader(false)}\n </View>\n {status && status.kind !== \"worked\" && !open && status.preview ? (\n <Pressable\n onPress={() => toggle(true)}\n style={{ paddingBottom: 4, paddingLeft: 24, minWidth: 0 }}\n >\n {status.preview}\n </Pressable>\n ) : null}\n {open ? (\n <Animated.View\n entering={FadeIn.duration(160)}\n style={bare ? { paddingTop: 4, paddingLeft: 20 } : { paddingTop: 8 }}\n >\n {children}\n </Animated.View>\n ) : null}\n </View>\n );\n}\n\n/** The stable left rule under a turn/activity body (web TurnRailFrame). */\nexport function TurnRailFrame({\n children,\n compact = false,\n}: {\n children: ReactNode;\n compact?: boolean;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <View\n style={{\n borderLeftWidth: 2,\n borderLeftColor: theme.colors.border,\n paddingLeft: 12,\n gap: compact ? 2 : 16,\n }}\n >\n {children}\n </View>\n );\n}\n\nfunction familyOf(item: ActivityItem): string {\n if (item.kind === \"tool-call\") return `tool:${item.name}`;\n return item.kind;\n}\n\n/** The native ActivityRail (bare): tight same-family rows, breathing room between families. */\nexport function ActivityRail({\n items,\n startupActive,\n renderPreparing,\n}: {\n items: ActivityItem[];\n startupActive?: boolean | undefined;\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n}) {\n const phases = items.filter((item) => item.kind === \"startup-phase\");\n const hasWork = items.some(\n (item) =>\n item.kind !== \"startup-phase\" && (item.kind !== \"reasoning\" || item.text.trim().length > 0),\n );\n const interrupted = phases.some(\n (item) => item.status === \"failed\" || item.status === \"cancelled\",\n );\n const providerResponded = phases.some(\n (item) => item.phase === \"provider_first_byte\" && item.status === \"complete\",\n );\n const responsePending = phases.some((item) => item.phase === \"provider_first_byte\");\n const loading =\n !hasWork &&\n !interrupted &&\n (startupActive ?? (!providerResponded && phases.some((item) => item.status === \"running\")));\n const visibleItems = items.filter((item) =>\n item.kind === \"startup-phase\"\n ? item.status === \"failed\" || item.status === \"cancelled\"\n : item.kind !== \"reasoning\" || item.text.trim().length > 0,\n );\n const startedAt = phases.reduce(\n (first, item) => (item.startedAt < first ? item.startedAt : first),\n phases[0]?.startedAt ?? \"\",\n );\n return (\n <View style={{ gap: 2 }}>\n {loading ? (\n <Animated.View entering={FadeIn.duration(160)} exiting={FadeOut.duration(160)}>\n <PreparingState\n startedAt={startedAt}\n phase={responsePending ? \"waiting\" : \"preparing\"}\n render={renderPreparing}\n />\n </Animated.View>\n ) : null}\n {visibleItems.map((item, index) => {\n const newFamily = index > 0 && familyOf(item) !== familyOf(visibleItems[index - 1]!);\n return (\n <View key={item.id} style={newFamily ? { marginTop: 12 } : undefined}>\n <ActivityRow item={item} />\n </View>\n );\n })}\n </View>\n );\n}\n\nexport interface PreparingProps {\n startedAt: string;\n phase: \"preparing\" | \"waiting\";\n phrase: string;\n slow: boolean;\n}\n\n/** The web GenieLoading: a visual (orb by default; hosts supply a character) + rotating copy. */\nexport function PreparingState({\n startedAt,\n phase,\n render,\n}: {\n startedAt: string;\n phase: \"preparing\" | \"waiting\";\n render?: ((props: PreparingProps) => ReactNode) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const phrases = useMemo(\n () => nativeLoadingPhrases(t, m.loadingPhrases, phase),\n [t, m.loadingPhrases, phase],\n );\n const [index, setIndex] = useState(() => Math.floor(Math.random() * phrases.length));\n const [slow, setSlow] = useState(false);\n useEffect(() => {\n const update = () => {\n setSlow(Date.now() - Date.parse(startedAt) >= 30_000);\n setIndex(Math.floor(Math.random() * phrases.length));\n };\n const timer = setInterval(update, 5_000);\n return () => clearInterval(timer);\n }, [startedAt, phrases]);\n const phrase = slow\n ? phase === \"waiting\"\n ? m.stillWaiting\n : m.longerThanUsual\n : (phrases[index % phrases.length] ?? \"\");\n if (render) return <>{render({ startedAt, phase, phrase, slow })}</>;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 14,\n minHeight: 88,\n paddingVertical: 12,\n }}\n >\n <ThinkingOrb />\n <Animated.Text\n key={phrase}\n entering={FadeIn.duration(650)}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {phrase}\n </Animated.Text>\n </View>\n );\n}\n\n/** One stable 24pt viewport; updates replace its content without moving the conversation. */\nexport function RollingActivity({\n items,\n previousItem,\n showCount = true,\n}: {\n items: ActivityItem[];\n previousItem?: ActivityItem | undefined;\n showCount?: boolean;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const selected = rollingActivityItem(items, previousItem, mounted);\n if (!selected) return null;\n const { item, earlierCount } = selected;\n return (\n <View\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 12, minWidth: 0, flex: 1 }}\n accessibilityLabel={\n item.kind === \"tool-call\"\n ? toolDisplayName(t, item.name, item.display)\n : item.kind === \"reasoning\"\n ? m.thinking\n : m.working\n }\n >\n <View style={{ flex: 1, minWidth: 0, height: 24, overflow: \"hidden\" }}>\n <Animated.View\n key={item.id}\n entering={FadeInDown.duration(400)}\n exiting={FadeOutUp.duration(400)}\n style={{\n position: \"absolute\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n flexDirection: \"row\",\n alignItems: \"center\",\n }}\n >\n <ActivityRow item={item} compact />\n </Animated.View>\n </View>\n {showCount && earlierCount > 0 ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {`+${earlierCount} earlier`}\n </Text>\n ) : null}\n </View>\n );\n}\n","import type { TurnStepsItem } from \"@opengeni/react/session\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useEffect, useState } from \"react\";\nimport { ActivityIndicator, Pressable, Text, View } from \"react-native\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/**\n * Loads an opened turn's steps (web TurnStepsLoader). The fold mounts its body\n * only while open, so steps are read when a reader opens the turn. A row that\n * opens by itself (`autoLoad={false}`) waits for the reader to ask.\n */\nexport function TurnStepsLoader({\n steps,\n autoLoad = true,\n}: {\n steps: TurnStepsItem;\n autoLoad?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const { state, load, retain } = steps;\n const [requested, setRequested] = useState(autoLoad);\n // An open row keeps its steps (live ones too) while mounted; only the\n // read waits for the reader.\n useEffect(() => retain(), [retain]);\n useEffect(() => {\n if (requested && state === \"idle\") load();\n }, [requested, state, load]);\n if (state === \"complete\") return null;\n const text = {\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-subtle\"],\n };\n if (state === \"partial\" || state === \"error\" || (state === \"idle\" && !requested)) {\n const label =\n state === \"idle\"\n ? t(\"timeline.turnSteps.showSteps\")\n : state === \"partial\"\n ? t(\"timeline.turnSteps.showEarlierSteps\")\n : `${t(\"timeline.turnSteps.couldNotLoadSteps\")} ${t(\"timeline.turnSteps.retry\")}`;\n return (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n setRequested(true);\n if (state !== \"idle\") load();\n }}\n style={({ pressed }) => ({\n minHeight: 44,\n justifyContent: \"center\",\n opacity: pressed ? 0.7 : 1,\n })}\n >\n <Text style={text}>{label}</Text>\n </Pressable>\n );\n }\n return (\n <View\n accessibilityRole=\"progressbar\"\n style={{ minHeight: 44, flexDirection: \"row\", alignItems: \"center\", gap: 8 }}\n >\n <ActivityIndicator size=\"small\" color={theme.colors[\"fg-subtle\"]} />\n <Text style={text}>{t(\"timeline.turnSteps.loadingSteps\")}</Text>\n </View>\n );\n}\n","import type { TimelineGroup } from \"@opengeni/react/session\";\n\n/**\n * Live progress notes. While a turn runs, each progress note reads above its\n * work row and is also listed inside it (the projection's `liveNoteIds`).\n * While that work row is open, the copies above fold away, so every note\n * shows once (the web timeline's liveNoteFolds).\n */\nexport interface LiveNotes {\n /** Each live work row's progress note ids. */\n byWork: ReadonlyMap<string, readonly string[]>;\n /** Every live progress note id. */\n notes: ReadonlySet<string>;\n}\n\nexport function collectLiveNotes(groups: readonly TimelineGroup[]): LiveNotes {\n const byWork = new Map<string, readonly string[]>();\n const notes = new Set<string>();\n for (const group of groups) {\n if (group.kind !== \"activity\" || !group.work?.liveNoteIds?.length) continue;\n byWork.set(group.id, group.work.liveNoteIds);\n for (const id of group.work.liveNoteIds) notes.add(id);\n }\n return { byWork, notes };\n}\n\n/** The note rows to fold: those whose work row is open. */\nexport function foldedLiveNotes(\n liveNotes: LiveNotes,\n openWork: ReadonlySet<string>,\n): ReadonlySet<string> {\n const folded = new Set<string>();\n for (const [workId, ids] of liveNotes.byWork) {\n if (!openWork.has(workId)) continue;\n for (const id of ids) folded.add(id);\n }\n return folded;\n}\n\n/**\n * The scroll correction for folding (open) or restoring (closed) a work row's\n * notes, which sit above it: each measured note row plus the gap after it.\n * Moving the offset by this keeps the toggled row where the reader saw it.\n */\nexport function liveFoldShift(\n liveNotes: LiveNotes,\n workId: string,\n open: boolean,\n heights: ReadonlyMap<string, number>,\n rowGap: number,\n): number {\n const height = (liveNotes.byWork.get(workId) ?? []).reduce((total, id) => {\n const row = heights.get(id);\n return row === undefined ? total : total + row + rowGap;\n }, 0);\n return height === 0 ? 0 : open ? -height : height;\n}\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n AccessibilityInfo,\n Animated,\n Easing,\n KeyboardAvoidingView,\n Modal,\n PanResponder,\n Pressable,\n View,\n useWindowDimensions,\n} from \"react-native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { useNativeTimelineTheme } from \"./theme\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\n\n/**\n * A content-sized bottom sheet: dimmed backdrop, grabber, drag or tap outside\n * to dismiss, keyboard-aware and safe-area padded. The native counterpart of\n * the web's anchored menus at phone width.\n */\nexport function BottomSheet(props: {\n open: boolean;\n onClose: () => void;\n accessibilityLabel: string;\n /** Cap as a fraction of the window height (default 0.85). */\n maxHeightRatio?: number | undefined;\n children: ReactNode;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const insets = useSafeAreaInsets();\n const { height } = useWindowDimensions();\n const [mounted, setMounted] = useState(props.open);\n const progress = useRef(new Animated.Value(0)).current;\n const drag = useRef(new Animated.Value(0)).current;\n const onClose = useRef(props.onClose);\n onClose.current = props.onClose;\n\n useEffect(() => {\n let cancelled = false;\n if (props.open) {\n setMounted(true);\n drag.setValue(0);\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (cancelled) return;\n Animated.timing(progress, {\n toValue: 1,\n duration: reduce ? 0 : 260,\n easing: Easing.bezier(0.22, 1, 0.36, 1),\n useNativeDriver: true,\n }).start();\n });\n } else if (mounted) {\n Animated.timing(progress, {\n toValue: 0,\n duration: 200,\n easing: Easing.in(Easing.quad),\n useNativeDriver: true,\n }).start(({ finished }) => {\n if (finished && !cancelled) setMounted(false);\n });\n }\n return () => {\n cancelled = true;\n };\n }, [drag, mounted, progress, props.open]);\n\n const pan = useRef(\n PanResponder.create({\n onMoveShouldSetPanResponder: (_event, gesture) =>\n gesture.dy > 6 && Math.abs(gesture.dy) > Math.abs(gesture.dx),\n onPanResponderMove: (_event, gesture) => drag.setValue(Math.max(0, gesture.dy)),\n onPanResponderRelease: (_event, gesture) => {\n if (gesture.dy > 90 || gesture.vy > 0.9) onClose.current();\n else Animated.spring(drag, { toValue: 0, useNativeDriver: true, bounciness: 0 }).start();\n },\n onPanResponderTerminate: () =>\n Animated.spring(drag, { toValue: 0, useNativeDriver: true, bounciness: 0 }).start(),\n }),\n ).current;\n\n if (!mounted) return null;\n const translateY = Animated.add(\n progress.interpolate({ inputRange: [0, 1], outputRange: [height, 0] }),\n drag,\n );\n return (\n <Modal\n visible\n transparent\n animationType=\"none\"\n statusBarTranslucent\n onRequestClose={props.onClose}\n >\n <KeyboardAvoidingView\n // Edge-to-edge Android doesn't resize a modal's window for the\n // keyboard either, so the sheet lifts itself on both platforms.\n behavior=\"padding\"\n style={{ flex: 1, justifyContent: \"flex-end\" }}\n >\n <Animated.View\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.4)\",\n opacity: progress,\n }}\n >\n <Pressable\n style={{ flex: 1 }}\n onPress={props.onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.sheet.close\")}\n />\n </Animated.View>\n <Animated.View\n accessibilityViewIsModal\n accessibilityLabel={props.accessibilityLabel}\n style={{\n maxHeight: height * (props.maxHeightRatio ?? 0.85),\n backgroundColor: c.bg,\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n paddingBottom: Math.max(insets.bottom, 12),\n transform: [{ translateY }],\n shadowColor: \"#000\",\n shadowOpacity: 0.12,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: -2 },\n elevation: 16,\n }}\n >\n <View\n {...pan.panHandlers}\n style={{ alignItems: \"center\", paddingTop: 8, paddingBottom: 4 }}\n >\n <View\n style={{\n width: 36,\n height: 5,\n borderRadius: 3,\n backgroundColor: c[\"border-strong\"] ?? c.border,\n }}\n />\n </View>\n {props.children}\n </Animated.View>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n","import type {\n DraftTimelineAnnotation,\n TimelineAnnotation,\n TimelineAnnotationSource,\n} from \"@opengeni/sdk\";\nimport {\n ANNOTATION_MAX_NOTE_LENGTH,\n annotationDisplayOrdinal,\n annotationHasNote,\n annotationNoteNeedsDisclosure,\n truncateAnnotationQuote,\n} from \"@opengeni/react/timeline-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n Animated,\n Easing,\n Pressable,\n ScrollView,\n Text,\n TextInput,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport { Icon } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport { BottomSheet } from \"./sheet\";\nimport {\n annotationSourceTestId,\n measureQuoteAnchors,\n type QuoteAnchor,\n type QuoteAnchorQuery,\n type QuoteBox,\n} from \"./text-selection\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n Timeline annotations at phone width: the quote cards in sent messages, the\n composer and queue chips, the review sheet where notes are written (the\n web's annotations dialog) and the numbered badge where a draft quote ends.\n -------------------------------------------------------------------------- */\n\nexport type NativeAnnotationLike = DraftTimelineAnnotation | TimelineAnnotation;\n\n/**\n * Reveals a quote in the timeline: scrolls its words into view and flashes\n * them (the whole message when they can't be located). False when the\n * message is not loaded.\n */\nexport type AnnotationReveal = (\n source: TimelineAnnotationSource,\n quote?: QuoteAnchorQuery,\n) => boolean;\n\n/** The text a revealed quote is found by. */\nexport function annotationQuoteQuery(annotation: NativeAnnotationLike): QuoteAnchorQuery {\n return {\n quote: annotation.quote,\n before: annotation.source.contextBefore,\n after: annotation.source.contextAfter,\n };\n}\n\ntype DraftMarker = {\n id: string;\n ordinal: number;\n incomplete: boolean;\n quote: string;\n before: string;\n after: string;\n};\n\nexport type AnnotationSourceNode = ComponentRef<typeof View>;\n\ntype AnnotationSourcesValue = {\n register: (sourceKey: string, node: AnnotationSourceNode | null) => void;\n flash: AnnotationFlash | null;\n drafts: ReadonlyMap<string, readonly DraftMarker[]>;\n onSelectDraft?: ((id: string) => void) | undefined;\n};\n\n/** A reveal's highlight: one message, and the quote in it when known. */\nexport type AnnotationFlash = { sourceKey: string; token: number; quote?: QuoteAnchorQuery };\n\nexport const AnnotationSourcesContext = createContext<AnnotationSourcesValue | null>(null);\n\n/** Draft annotations grouped by the message they quote. */\nexport function draftMarkersBySource(\n annotations: readonly DraftTimelineAnnotation[] | undefined,\n): Map<string, DraftMarker[]> {\n const markers = new Map<string, DraftMarker[]>();\n (annotations ?? []).forEach((annotation, index) => {\n const list = markers.get(annotation.source.eventId) ?? [];\n list.push({\n id: annotation.id,\n ordinal: index + 1,\n incomplete: !annotationHasNote(annotation.note),\n quote: annotation.quote,\n before: annotation.source.contextBefore,\n after: annotation.source.contextAfter,\n });\n markers.set(annotation.source.eventId, list);\n });\n return markers;\n}\n\nfunction quotePreview(quote: string): string {\n const trimmed = quote.trim();\n return trimmed.includes(\"\\n\") ? trimmed : trimmed.replace(/\\s+/g, \" \");\n}\n\n/**\n * A message body that can be quoted: marks its text for native selection\n * (Add note), shows a numbered badge where each draft quote ends (the web's\n * annotation markers) and briefly highlights when a quote of it is revealed.\n */\nexport function AnnotationSourceView({\n sourceKey,\n children,\n style,\n}: {\n sourceKey: string | undefined;\n children: ReactNode;\n style?: StyleProp<ViewStyle>;\n}) {\n const theme = useNativeTimelineTheme();\n const sources = useContext(AnnotationSourcesContext);\n const glow = useRef(new Animated.Value(0)).current;\n const flash = sourceKey && sources?.flash?.sourceKey === sourceKey ? sources.flash : null;\n // The revealed quote's lines, or null to flash the whole message.\n const [flashBoxes, setFlashBoxes] = useState<QuoteBox[] | null>(null);\n useEffect(() => {\n if (!flash || !sourceKey) return;\n let cancelled = false;\n const start = (boxes: QuoteBox[] | null) => {\n if (cancelled) return;\n setFlashBoxes(boxes);\n glow.setValue(1);\n Animated.timing(glow, {\n toValue: 0,\n duration: boxes ? 1800 : 1400,\n delay: 300,\n easing: Easing.out(Easing.quad),\n useNativeDriver: false,\n }).start();\n };\n if (!flash.quote) start(null);\n else\n void measureQuoteAnchors(sourceKey, [flash.quote]).then(([anchor]) =>\n start(anchor?.boxes.length ? anchor.boxes : null),\n );\n return () => {\n cancelled = true;\n };\n }, [flash, glow, sourceKey]);\n const register = sources?.register;\n const markers = sourceKey ? sources?.drafts.get(sourceKey) : undefined;\n const [anchors, setAnchors] = useState<{\n markers: readonly DraftMarker[];\n at: (QuoteAnchor | null)[];\n } | null>(null);\n const [size, setSize] = useState({ width: 0, height: 0 });\n const measure = useCallback(() => {\n if (!sourceKey || !markers?.length) return;\n const queries = markers.map(({ quote, before, after }) => ({ quote, before, after }));\n void measureQuoteAnchors(sourceKey, queries).then((at) => setAnchors({ markers, at }));\n }, [markers, sourceKey]);\n // Text lays out after the view; measure once it has drawn, and again when\n // the drafts or the width change.\n useEffect(() => {\n if (!markers?.length) {\n setAnchors(null);\n return;\n }\n const frame = requestAnimationFrame(measure);\n return () => cancelAnimationFrame(frame);\n }, [markers, measure, size.width, size.height]);\n return (\n <Animated.View\n ref={(node: AnnotationSourceNode | null) => {\n if (sourceKey && register) register(sourceKey, node);\n }}\n testID={annotationSourceTestId(sourceKey)}\n collapsable={false}\n onLayout={(event) => {\n const { width, height } = event.nativeEvent.layout;\n setSize((current) =>\n current.width === width && current.height === height ? current : { width, height },\n );\n }}\n style={[\n style,\n {\n borderRadius: theme.radius.md,\n backgroundColor: flashBoxes\n ? \"transparent\"\n : glow.interpolate({\n inputRange: [0, 1],\n outputRange: [withAlpha(theme.colors.fg, 0), withAlpha(theme.colors.fg, 0.08)],\n }),\n },\n ]}\n >\n {flashBoxes ? <QuoteFlash boxes={flashBoxes} glow={glow} /> : null}\n {markers?.length && anchors?.markers === markers ? (\n <QuoteHighlights anchors={anchors.at} />\n ) : null}\n {children}\n {markers?.length && anchors?.markers === markers ? (\n <QuoteBadges\n markers={markers}\n anchors={anchors.at}\n size={size}\n onSelect={sources?.onSelectDraft}\n />\n ) : null}\n </Animated.View>\n );\n}\n\nconst BADGE_SIZE = 15;\n\n/** A line box's identity: where it sits (two quotes never share a line box). */\nfunction boxKey(box: QuoteBox): string {\n return `${Math.round(box.x)}:${Math.round(box.y)}:${Math.round(box.width)}`;\n}\n\n/** A revealed quote's lines light up, then fade, under its text. */\nfunction QuoteFlash({ boxes, glow }: { boxes: readonly QuoteBox[]; glow: Animated.Value }) {\n const theme = useNativeTimelineTheme();\n const tint = withAlpha(theme.colors.accent, theme.scheme === \"dark\" ? 0.45 : 0.28);\n return (\n <>\n {boxes.map((box) => (\n <Animated.View\n key={boxKey(box)}\n pointerEvents=\"none\"\n style={{\n position: \"absolute\",\n left: box.x - 3,\n top: box.y - 2,\n width: box.width + 6,\n height: box.height + 4,\n borderRadius: 5,\n backgroundColor: tint,\n opacity: glow,\n }}\n />\n ))}\n </>\n );\n}\n\n/**\n * A soft tint with an accent underline behind each draft quote, so what is\n * quoted reads at a glance and never looks like an inline code span. Drawn\n * before the message, under its text.\n */\nfunction QuoteHighlights({ anchors }: { anchors: readonly (QuoteAnchor | null)[] }) {\n const theme = useNativeTimelineTheme();\n const dark = theme.scheme === \"dark\";\n const tint = withAlpha(theme.colors.accent, dark ? 0.16 : 0.08);\n const rule = withAlpha(theme.colors.accent, dark ? 0.7 : 0.55);\n return (\n <>\n {anchors.flatMap((anchor) =>\n (anchor?.boxes ?? []).map((box) => (\n <View\n key={boxKey(box)}\n pointerEvents=\"none\"\n style={{\n position: \"absolute\",\n left: box.x - 2,\n top: box.y - 1,\n width: box.width + 4,\n height: box.height + 2,\n borderTopLeftRadius: 3,\n borderTopRightRadius: 3,\n borderBottomWidth: 1.5,\n borderBottomColor: rule,\n backgroundColor: tint,\n }}\n />\n )),\n )}\n </>\n );\n}\n\n/**\n * Numbered badges at the top-right corner of each quote, mostly in the gap\n * above its line so they cover no text (the web's markers sit on the quote's\n * end the same way). A quote that cannot be located (text that changed, or\n * no native measuring) gets its badge at the end of the message instead.\n */\nfunction QuoteBadges({\n markers,\n anchors,\n size,\n onSelect,\n}: {\n markers: readonly DraftMarker[];\n anchors: readonly (QuoteAnchor | null)[];\n size: { width: number; height: number };\n onSelect?: ((id: string) => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n let unplaced = 0;\n return (\n <>\n {markers.map((marker, index) => {\n const anchor = anchors[index];\n // Unplaced badges line up along the message's bottom edge.\n const center = anchor\n ? { x: anchor.x + 2, y: anchor.top - 1 }\n : {\n x: size.width - BADGE_SIZE / 2 - unplaced++ * (BADGE_SIZE + 4),\n y: size.height - BADGE_SIZE / 2,\n };\n const left = Math.min(Math.max(center.x - BADGE_SIZE / 2, 0), size.width - BADGE_SIZE);\n return (\n <Pressable\n key={marker.id}\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotationMarkers.annotationOrdinal\", {\n ordinal: marker.ordinal,\n })}\n hitSlop={14}\n disabled={!onSelect}\n onPress={() => onSelect?.(marker.id)}\n style={({ pressed }) => ({\n position: \"absolute\",\n left,\n top: center.y - BADGE_SIZE / 2,\n zIndex: marker.ordinal,\n minWidth: BADGE_SIZE,\n height: BADGE_SIZE,\n paddingHorizontal: 2,\n borderRadius: BADGE_SIZE / 2,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: c.accent,\n borderWidth: marker.incomplete ? 1 : 0,\n borderColor: withAlpha(c[\"accent-fg\"], 0.35),\n opacity: pressed ? 0.7 : 1,\n shadowColor: \"#000\",\n shadowOpacity: 0.12,\n shadowRadius: 2,\n shadowOffset: { width: 0, height: 1 },\n })}\n >\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: 10,\n lineHeight: 12,\n color: c[\"accent-fg\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {marker.ordinal}\n </Text>\n </Pressable>\n );\n })}\n </>\n );\n}\n\n/**\n * A quote's accent rule beside its content. `shrink` sizes the content to\n * itself (inside a bubble that wraps its content: a flex-basis-0 column there\n * is measured unwrapped and its wrapped lines spill out); otherwise it fills\n * the row.\n */\nfunction AccentRow({ children, shrink = false }: { children: ReactNode; shrink?: boolean }) {\n const theme = useNativeTimelineTheme();\n return (\n <View style={{ flexDirection: \"row\", gap: 10 }}>\n <View\n style={{\n width: 2,\n borderRadius: 1,\n backgroundColor: withAlpha(theme.colors.accent, 0.55),\n }}\n />\n <View style={shrink ? { flexShrink: 1, minWidth: 0 } : { flex: 1, minWidth: 0 }}>\n {children}\n </View>\n </View>\n );\n}\n\nfunction OrdinalLabel({ ordinal }: { ordinal: number }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n return (\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: theme.colors[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {t(\"timelineAnnotations.annotationOrdinal\", { ordinal })}\n </Text>\n );\n}\n\nfunction QuoteButton({\n annotation,\n onReveal,\n}: {\n annotation: NativeAnnotationLike;\n onReveal?: AnnotationReveal | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const [unavailable, setUnavailable] = useState(false);\n const text = (\n <Text\n numberOfLines={2}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {quotePreview(annotation.quote)}\n </Text>\n );\n if (!onReveal) return text;\n return (\n <View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\n \"timelineAnnotationChrome.viewSourcelabelSourceTruncateannotationquote\",\n {\n sourceLabel:\n annotation.source.label?.trim() ||\n (annotation.source.kind === \"user_message\"\n ? t(\"timelineAnnotationShared.yourMessage\")\n : annotation.source.kind === \"assistant_message\"\n ? t(\"timelineAnnotationShared.assistant\")\n : t(\"timelineAnnotationShared.toolOutput\")),\n truncateAnnotationQuote: truncateAnnotationQuote(annotation.quote, 88),\n },\n )}\n onPress={() =>\n setUnavailable(!onReveal(annotation.source, annotationQuoteQuery(annotation)))\n }\n style={({ pressed }) => ({ opacity: pressed ? 0.55 : 1, paddingVertical: 2 })}\n >\n {text}\n </Pressable>\n {unavailable ? (\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: theme.colors[\"status-waiting\"],\n }}\n >\n {t(\"timelineAnnotations.sourceIsOutsideTheLoaded\")}\n </Text>\n ) : null}\n </View>\n );\n}\n\nfunction NotePreview({ note, ordinal }: { note: string; ordinal: number }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const [expanded, setExpanded] = useState(false);\n if (!note) return null;\n const collapsible = annotationNoteNeedsDisclosure(note);\n return (\n <View style={{ marginTop: 2 }}>\n <Text\n selectable\n numberOfLines={expanded ? undefined : 4}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors.fg,\n }}\n >\n {note}\n </Text>\n {collapsible ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n expanded\n ? t(\"timelineAnnotationChrome.showLessAnnotationOrdinal\", { ordinal })\n : t(\"timelineAnnotationChrome.showMoreAnnotationOrdinal\", { ordinal })\n }\n hitSlop={8}\n onPress={() => setExpanded((current) => !current)}\n style={{ alignSelf: \"flex-start\", paddingVertical: 4 }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {expanded\n ? t(\"timelineAnnotationChrome.showLess\")\n : t(\"timelineAnnotationChrome.showMore\")}\n </Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\n/** The quotes and notes a sent message carries, inside its bubble. */\nexport function SentAnnotationCards({\n annotations,\n onReveal,\n}: {\n annotations: readonly NativeAnnotationLike[];\n onReveal?: AnnotationReveal | undefined;\n}) {\n if (annotations.length === 0) return null;\n return (\n <View style={{ gap: 10 }}>\n {annotations.map((annotation, index) => {\n const ordinal = annotationDisplayOrdinal(annotation, index);\n return (\n <AccentRow key={annotation.id} shrink>\n <OrdinalLabel ordinal={ordinal} />\n <QuoteButton annotation={annotation} onReveal={onReveal} />\n <NotePreview note={annotation.note} ordinal={ordinal} />\n </AccentRow>\n );\n })}\n </View>\n );\n}\n\n/**\n * The \"N annotations\" chip: in the composer (editable, with remove all) or on\n * a queued message (compact). Tinted while a quote still needs its note.\n */\nexport function AnnotationsChip({\n annotations,\n onPress,\n onClear,\n compact = false,\n}: {\n annotations: readonly NativeAnnotationLike[];\n onPress: () => void;\n onClear?: (() => void) | undefined;\n compact?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n if (annotations.length === 0) return null;\n const countLabel = t(\"counts.annotations\", { count: annotations.length });\n const incomplete =\n onClear !== undefined && annotations.some((item) => !annotationHasNote(item.note));\n const height = compact ? 26 : 32;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n alignSelf: \"flex-start\",\n height,\n borderRadius: height / 2,\n borderWidth: 1,\n borderColor: incomplete ? withAlpha(c.accent, 0.45) : c.border,\n backgroundColor: incomplete ? c[\"accent-soft\"] : c[\"surface-1\"],\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotations.reviewCountlabel\", { countLabel })}\n hitSlop={{ top: (44 - height) / 2, bottom: (44 - height) / 2 }}\n onPress={onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n height,\n paddingLeft: compact ? 8 : 10,\n paddingRight: onClear ? 2 : compact ? 8 : 12,\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <Icon name=\"quote\" size={compact ? 11 : 13} color={c.accent} />\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: compact ? theme.size.xs : theme.size.sm,\n color: c[\"fg-muted\"],\n }}\n >\n {countLabel}\n </Text>\n </Pressable>\n {onClear ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotations.removeAllAnnotations\")}\n hitSlop={{ top: 6, bottom: 6, right: 6 }}\n onPress={onClear}\n style={({ pressed }) => ({\n width: height,\n height,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: pressed ? 0.5 : 1,\n })}\n >\n <Icon name=\"x\" size={13} color={c[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\ntype NoteInput = ComponentRef<typeof TextInput>;\n\n/**\n * Every quote with its note, as the web's annotations dialog: editable in the\n * composer (write, remove; Return moves to the next empty note, then back to\n * the message), read-only for a queued message. A quote reveals its message.\n */\nexport function AnnotationsSheet({\n open,\n onClose,\n annotations,\n editable,\n focusId,\n onFocusConsumed,\n onUpdate,\n onRemove,\n onReveal,\n onCommit,\n}: {\n open: boolean;\n onClose: () => void;\n annotations: readonly NativeAnnotationLike[];\n editable: boolean;\n focusId?: string | null | undefined;\n onFocusConsumed?: (() => void) | undefined;\n onUpdate?: ((id: string, note: string) => void) | undefined;\n onRemove?: ((id: string) => void) | undefined;\n onReveal?: AnnotationReveal | undefined;\n /** Every note is written: back to the message. */\n onCommit?: (() => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const inputs = useRef(new Map<string, NoteInput>());\n const scroll = useRef<ComponentRef<typeof ScrollView>>(null);\n const rowTops = useRef(new Map<string, number>());\n const empty = annotations.length === 0;\n\n // Removing the last quote leaves nothing to review.\n useEffect(() => {\n if (open && empty) onClose();\n }, [empty, onClose, open]);\n\n const focusNote = (id: string) => {\n const top = rowTops.current.get(id);\n if (top !== undefined) scroll.current?.scrollTo({ y: Math.max(0, top - 8), animated: true });\n inputs.current.get(id)?.focus();\n };\n\n // A new quote (or a send with an empty note) opens on its note. The sheet\n // slides in first; focusing during the slide drops the keyboard request.\n useEffect(() => {\n if (!open || !focusId || !editable) return;\n const timer = setTimeout(() => {\n focusNote(focusId);\n onFocusConsumed?.();\n }, 320);\n return () => clearTimeout(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editable, focusId, open]);\n\n const commit = (fromId: string) => {\n const incomplete = annotations.filter((item) => !annotationHasNote(item.note));\n if (incomplete.length === 0) {\n onCommit?.();\n return;\n }\n const fromIndex = annotations.findIndex((item) => item.id === fromId);\n const next = incomplete.find((item) => annotations.indexOf(item) > fromIndex) ?? incomplete[0]!;\n focusNote(next.id);\n };\n\n const incompleteCount = annotations.filter((item) => !annotationHasNote(item.note)).length;\n const countLabel = t(\"counts.annotations\", { count: annotations.length });\n return (\n <BottomSheet\n open={open && !empty}\n onClose={onClose}\n maxHeightRatio={0.8}\n accessibilityLabel={\n editable\n ? t(\"timelineAnnotationsDialog.editQuotedNotes\")\n : t(\"timelineAnnotationsDialog.quotedNotes\")\n }\n >\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingLeft: 20,\n paddingRight: 8,\n paddingBottom: 4,\n }}\n >\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: theme.size.md, color: c.fg }}\n >\n {countLabel}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n if (editable && incompleteCount === 0 && onCommit) onCommit();\n else onClose();\n }}\n style={({ pressed }) => ({\n height: 44,\n paddingHorizontal: 12,\n justifyContent: \"center\",\n opacity: pressed ? 0.5 : 1,\n })}\n >\n <Text style={{ ...fontStyle(theme, 600), fontSize: theme.size.md, color: c.fg }}>\n {t(\"native.timeline.annotations.done\")}\n </Text>\n </Pressable>\n </View>\n <ScrollView\n ref={scroll}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={{ paddingHorizontal: 20, paddingTop: 8, paddingBottom: 12, gap: 18 }}\n style={{ flexGrow: 0 }}\n >\n {annotations.map((annotation, index) => {\n const ordinal = annotationDisplayOrdinal(annotation, index);\n const last = index === annotations.length - 1;\n const othersIncomplete = annotations.some(\n (item) => item.id !== annotation.id && !annotationHasNote(item.note),\n );\n return (\n <View\n key={annotation.id}\n onLayout={(event) => rowTops.current.set(annotation.id, event.nativeEvent.layout.y)}\n >\n <AccentRow>\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 4 }}>\n <View style={{ flex: 1, minWidth: 0 }}>\n <OrdinalLabel ordinal={ordinal} />\n <QuoteButton\n annotation={annotation}\n onReveal={\n onReveal\n ? (source, quote) => {\n const revealed = onReveal(source, quote);\n if (revealed) onClose();\n return revealed;\n }\n : undefined\n }\n />\n </View>\n {editable && onRemove ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotationsDialog.removeAnnotationOrdinal\", {\n ordinal,\n })}\n onPress={() => onRemove(annotation.id)}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n marginTop: -6,\n marginRight: -10,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: pressed ? 0.5 : 1,\n })}\n >\n <Icon name=\"x\" size={15} color={c[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n </View>\n {editable && onUpdate ? (\n <TextInput\n ref={(node) => {\n if (node) inputs.current.set(annotation.id, node);\n else inputs.current.delete(annotation.id);\n }}\n value={annotation.note}\n onChangeText={(note) => onUpdate(annotation.id, note)}\n placeholder={t(\"timelineAnnotationChrome.addANote\")}\n placeholderTextColor={c[\"fg-subtle\"]}\n accessibilityLabel={t(\"timelineAnnotationChrome.note\")}\n maxLength={ANNOTATION_MAX_NOTE_LENGTH}\n multiline\n submitBehavior=\"submit\"\n returnKeyType={othersIncomplete || (last && !onCommit) ? \"next\" : \"done\"}\n onSubmitEditing={() => commit(annotation.id)}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.md,\n lineHeight: 22,\n color: c.fg,\n marginTop: 6,\n minHeight: 40,\n maxHeight: 132,\n paddingHorizontal: 12,\n paddingTop: 9,\n paddingBottom: 9,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n borderWidth: 1,\n borderColor: c.border,\n }}\n />\n ) : (\n <NotePreview note={annotation.note} ordinal={ordinal} />\n )}\n </AccentRow>\n </View>\n );\n })}\n {editable && incompleteCount > 0 ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n }}\n >\n {t(\"composerMessages.addANoteToEach\")}\n </Text>\n ) : null}\n </ScrollView>\n </BottomSheet>\n );\n}\n","import type {\n DraftTimelineAnnotation,\n SessionEvent,\n SessionStatus,\n TimelineAnnotationSource,\n} from \"@opengeni/sdk\";\nimport {\n buildTimeline,\n groupTimeline,\n type AgentMessageItem,\n type HumanInputItem,\n type TimelineGroup,\n type TimelineAnnotationSourceDescriptor,\n type TimelineItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport {\n compactedLandmarkCount,\n durationBetween,\n flattenActivityItems,\n formatClockTime,\n formatRelativeTime,\n isPreparingWork,\n noticeDisplayText,\n noticeTone,\n QUESTION_NAV_MARGIN_PX,\n recordedWaitSummaryText,\n questionNavTarget,\n readableWorkDefaultOpen,\n readableWorkShowsPreview,\n readableWorkStatus,\n SESSION_STATUS_PRESENTATION,\n timelineGroupContainsPresentedImage,\n timelineGroupIndexAtSequence,\n type TurnSummaryFacetConfiguration,\n} from \"@opengeni/react/timeline-model\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type MutableRefObject,\n type ReactNode,\n} from \"react\";\nimport {\n ActivityIndicator,\n Keyboard,\n Pressable,\n ScrollView,\n Text,\n View,\n type LayoutChangeEvent,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport Animated, { FadeIn, FadeOut } from \"react-native-reanimated\";\nimport { NativeActivityOptionsProvider, type NativeActivityOptions } from \"./activity\";\nimport { Icon } from \"./icon\";\nimport { ReleaseFollowProvider, withAlpha } from \"./primitives\";\nimport { humanInputAnswerLines } from \"./secret-field-model\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport {\n ActivityRail,\n FoldMemoryProvider,\n StickyWorkHeaderProvider,\n type StickyWorkHeader,\n RollingActivity,\n TurnRailFrame,\n TurnSummary,\n type NativeTurnStatus,\n type PreparingProps,\n} from \"./turn\";\nimport { useOpenGeniText, type OpenGeniText } from \"@opengeni/react/messages\";\nimport { TurnStepsLoader } from \"./turn-steps\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { collectLiveNotes, foldedLiveNotes, liveFoldShift } from \"./live-notes\";\nimport {\n AnnotationSourcesContext,\n AnnotationSourceView,\n SentAnnotationCards,\n draftMarkersBySource,\n type AnnotationFlash,\n type AnnotationReveal,\n type AnnotationSourceNode,\n} from \"./annotations\";\nimport { measureQuoteAnchors, useNativeTextAnnotation } from \"./text-selection\";\n\n/* ----------------------------------------------------------------------------\n Native MessageTimeline: the web MessageTimeline (components/message-timeline)\n in its rolling readable-turn configuration, drawn with native primitives.\n Grouping, fold defaults, statuses and facets come from the shared model.\n -------------------------------------------------------------------------- */\n\nexport type NativeMarkdownRenderer = (\n text: string,\n options: { tone: \"body\" | \"muted\"; streaming?: boolean | undefined },\n) => ReactNode;\n\n/** Start fetching older history this far before the reader reaches the top. */\nconst OLDER_HISTORY_PREFETCH_PX = 600;\n/** Web's phone clamp for long user messages (max-h-56). */\nconst USER_MESSAGE_COLLAPSED_PX = 224;\n/** The vertical gap between top-level rows (the scroll content's `gap`). */\nconst ROW_GAP_PX = 20;\n\nexport interface NativeMessageTimelineProps extends NativeActivityOptions {\n /** Projected items (preferred) or raw durable events. */\n items?: TimelineItem[] | undefined;\n events?: SessionEvent[] | undefined;\n status?: SessionStatus | null | undefined;\n facets?: TurnSummaryFacetConfiguration | undefined;\n renderMarkdown?: NativeMarkdownRenderer | undefined;\n /** Replace the preparing visual (the web orb) — e.g. a product character. */\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n /** Extra actions beside copy under a message (feedback, share, …). */\n renderMessageActions?: ((item: AgentMessageItem | UserMessageItem) => ReactNode) | undefined;\n /** Files sent with a user message, shown above its bubble (images as previews). */\n renderUserAttachments?: ((item: UserMessageItem) => ReactNode) | undefined;\n onCopy?: ((text: string) => void) | undefined;\n /** Rendered after the last group (pending questions, approvals, errors). */\n trailing?: ReactNode;\n emptyState?: ReactNode;\n header?: ReactNode;\n /**\n * Older durable history exists before the loaded window. When the reader\n * scrolls near the top (or the loaded window doesn't fill the screen), the\n * timeline calls `onLoadOlder` and keeps the reader's place as rows arrive.\n */\n hasOlder?: boolean | undefined;\n loadingOlder?: boolean | undefined;\n onLoadOlder?: (() => unknown) | undefined;\n /**\n * A durable event sequence to open on (an inbox item's or a notification's\n * moment): the timeline loads older history until it holds that moment,\n * then lands on its row, or the nearest row before it, once.\n */\n focusSequence?: number | null | undefined;\n contentInsetTop?: number | undefined;\n contentInsetBottom?: number | undefined;\n /** Height of host chrome floating over the timeline's bottom edge (a floating composer). */\n overlayInsetBottom?: number | undefined;\n /**\n * Changes whenever the reader sends: the timeline resumes following the\n * latest row, so a message sent while reading (or annotating) older\n * history comes into view.\n */\n followLatestSignal?: number | undefined;\n /**\n * Add note on selected message text (iOS): receives the quote as a draft\n * annotation, as the web timeline's selection popover does.\n */\n onAnnotate?: ((annotation: DraftTimelineAnnotation) => void) | undefined;\n /** The draft's annotations, marked on the messages they quote. */\n draftAnnotations?: readonly DraftTimelineAnnotation[] | undefined;\n /** A draft marker was tapped: review that annotation. */\n onDraftAnnotationSelect?: ((id: string) => void) | undefined;\n /** Receives a function that scrolls a quoted message into view and highlights it. */\n annotationRevealRef?: MutableRefObject<AnnotationReveal | null> | undefined;\n style?: StyleProp<ViewStyle>;\n}\n\n/** Each message's annotation source, by source key (its durable event id). */\nfunction annotationSources(\n items: readonly TimelineItem[],\n): Map<string, TimelineAnnotationSourceDescriptor> {\n const sources = new Map<string, TimelineAnnotationSourceDescriptor>();\n for (const item of items) {\n if (item.kind !== \"user-message\" && item.kind !== \"agent-message\") continue;\n const source = item.annotationSource;\n if (source) sources.set(source.eventId, source);\n }\n return sources;\n}\n\nexport function MessageTimeline(props: NativeMessageTimelineProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const items = useMemo(\n () => props.items ?? buildTimeline(t, props.events ?? []),\n [t, props.items, props.events],\n );\n const groups = useMemo(() => groupTimeline(t, items, { readableTurns: true }), [t, items]);\n const sources = useMemo(() => annotationSources(items), [items]);\n useNativeTextAnnotation(sources, props.onAnnotate);\n const foldMemory = useRef(new Map<string, \"open\" | \"closed\">()).current;\n const scrollRef = useRef<ComponentRef<typeof ScrollView>>(null);\n // Opening on a moment starts away from the tip; the landing decides where.\n const following = useRef(!props.focusSequence);\n // Only reader gestures change follow intent; layout-driven scroll events\n // (content growing before the first scroll-to-end) must not unstick it.\n const readerScrolling = useRef(false);\n const [showJump, setShowJump] = useState(false);\n // \"Back to your message\": prompt rows' content offsets, read on scroll.\n const promptFrames = useRef(new Map<string, { top: number; bottom: number }>()).current;\n const [questionNav, setQuestionNav] = useState<string | null>(null);\n // Expanded outer turn headers, for the pinned copy (web: sticky in its section).\n const stickyHeaders = useRef(new Map<string, StickyWorkHeader>()).current;\n const scrollY = useRef(0);\n const sourceNodes = useRef(new Map<string, AnnotationSourceNode>()).current;\n const [flash, setFlash] = useState<AnnotationFlash | null>(null);\n // Read when a reveal lands, after the keyboard has gone and the composer settled.\n const overlayInsetBottom = useRef(0);\n overlayInsetBottom.current = props.overlayInsetBottom ?? 0;\n const registerSource = useCallback(\n (sourceKey: string, node: AnnotationSourceNode | null) => {\n if (node) sourceNodes.set(sourceKey, node);\n else sourceNodes.delete(sourceKey);\n },\n [sourceNodes],\n );\n const revealSource = useCallback<AnnotationReveal>(\n (source: TimelineAnnotationSource, quote) => {\n const node = sourceNodes.get(source.eventId);\n const scroller = scrollRef.current?.getNativeScrollRef?.();\n if (!node || !scroller) return false;\n following.current = false;\n // Reading the source, not writing: the keyboard would hide it.\n const keyboardGone = Keyboard.isVisible()\n ? new Promise<void>((resolve) => {\n const done = () => {\n subscription.remove();\n clearTimeout(timer);\n // The composer re-measures as it drops back down.\n setTimeout(resolve, 60);\n };\n const subscription = Keyboard.addListener(\"keyboardDidHide\", done);\n const timer = setTimeout(done, 600);\n Keyboard.dismiss();\n })\n : Promise.resolve();\n const located = quote\n ? measureQuoteAnchors(source.eventId, [quote]).then(([anchor]) => anchor ?? null)\n : Promise.resolve(null);\n void Promise.all([located, keyboardGone]).then(([anchor]) => {\n scroller.measureInWindow((_scrollX, scrollTop) => {\n node.measureInWindow((_x, top, _width, height) => {\n // Center the message in the space the composer leaves; a message\n // taller than that centers the quote instead, or shows its top.\n const y = scrollY.current + top - scrollTop;\n const visible = (viewportHeight.current || 600) - overlayInsetBottom.current;\n const first = anchor?.boxes[0];\n const last = anchor?.boxes[anchor.boxes.length - 1];\n const span =\n height < visible - 32 || !first || !last\n ? { top: y, height }\n : { top: y + first.y, height: last.y + last.height - first.y };\n const target =\n span.height < visible - 32 ? span.top - (visible - span.height) / 2 : span.top - 16;\n const end = Math.max(0, contentHeight.current - (viewportHeight.current || 0));\n scrollY.current = Math.min(Math.max(0, target), end || Number.POSITIVE_INFINITY);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: true });\n // Flash once the scroll is under way, so the reader sees it land.\n setFlash((current) => ({\n sourceKey: source.eventId,\n token: (current?.token ?? 0) + 1,\n ...(quote ? { quote } : {}),\n }));\n });\n });\n });\n return true;\n },\n [sourceNodes],\n );\n if (props.annotationRevealRef) props.annotationRevealRef.current = revealSource;\n const draftMarkers = useMemo(\n () => draftMarkersBySource(props.draftAnnotations),\n [props.draftAnnotations],\n );\n const annotationSourcesValue = useMemo(\n () => ({\n register: registerSource,\n flash,\n drafts: draftMarkers,\n onSelectDraft: props.onDraftAnnotationSelect,\n }),\n [draftMarkers, flash, props.onDraftAnnotationSelect, registerSource],\n );\n const [pinned, setPinned] = useState<{ key: string; offset: number; height: number } | null>(\n null,\n );\n const updatePinned = useCallback(() => {\n const y = scrollY.current;\n let next: { key: string; offset: number; height: number } | null = null;\n for (const [key, entry] of stickyHeaders) {\n const end = entry.top + entry.height - entry.headerHeight;\n if (entry.headerHeight > 0 && entry.top < y && y < end) {\n next = { key, offset: Math.min(0, end - y), height: entry.headerHeight };\n }\n }\n setPinned((current) =>\n current?.key === next?.key &&\n current?.offset === next?.offset &&\n current?.height === next?.height\n ? current\n : next,\n );\n }, [stickyHeaders]);\n const releaseFollow = useCallback(() => {\n following.current = false;\n }, []);\n // Live progress notes fold away above an open work row (see live-notes.ts).\n const liveNotes = useMemo(() => collectLiveNotes(groups), [groups]);\n const liveNotesRef = useRef(liveNotes);\n liveNotesRef.current = liveNotes;\n const [openLiveWork, setOpenLiveWork] = useState<ReadonlySet<string>>(() => new Set());\n const openLiveWorkRef = useRef(openLiveWork);\n // Last laid-out height of each live note row, and the scroll correction owed\n // once folding or restoring them changes the content above the work row.\n const liveNoteHeights = useRef(new Map<string, number>()).current;\n const liveFoldOffset = useRef(0);\n const reportLiveFold = useCallback(\n (workId: string, open: boolean) => {\n const current = openLiveWorkRef.current;\n if (current.has(workId) === open) return;\n const next = new Set(current);\n if (open) next.add(workId);\n else next.delete(workId);\n openLiveWorkRef.current = next;\n // The notes sit above the row the reader just toggled: keep that row\n // where it is by moving the offset with the folded height.\n liveFoldOffset.current += liveFoldShift(\n liveNotesRef.current,\n workId,\n open,\n liveNoteHeights,\n ROW_GAP_PX,\n );\n setOpenLiveWork(next);\n },\n [liveNoteHeights],\n );\n const foldedNotes = useMemo(\n () => foldedLiveNotes(liveNotes, openLiveWork),\n [liveNotes, openLiveWork],\n );\n // Older history: latest values for scroll callbacks without re-binding them.\n const history = useRef({\n hasOlder: false,\n loading: false,\n load: undefined as (() => unknown) | undefined,\n });\n history.current = {\n hasOlder: props.hasOlder === true,\n loading: props.loadingOlder === true,\n load: props.onLoadOlder,\n };\n const viewportHeight = useRef(0);\n // Older rows arrive above the reader. Keep the reader's place by moving the\n // offset by the added height (UIKit's maintainVisibleContentPosition fights\n // the reader's drag while live rows re-lay out, so it isn't used).\n const contentHeight = useRef(0);\n const firstGroupKey = useRef<string | null>(null);\n const prepended = useRef(false);\n const nextFirstKey = groups[0] ? groupKey(groups[0]) : null;\n if (nextFirstKey !== firstGroupKey.current) {\n const previous = firstGroupKey.current;\n if (previous !== null && groups.some((group) => groupKey(group) === previous)) {\n prepended.current = true;\n }\n firstGroupKey.current = nextFirstKey;\n }\n const requestOlder = useCallback(() => {\n const { hasOlder, loading, load } = history.current;\n if (!hasOlder || loading || !load) return;\n history.current = { ...history.current, loading: true };\n void Promise.resolve(load()).catch(() => undefined);\n }, []);\n const registerSticky = useMemo(\n () => ({\n register: (key: string, entry: StickyWorkHeader | null) => {\n if (entry) stickyHeaders.set(key, entry);\n else stickyHeaders.delete(key);\n },\n reveal: (top: number) => {\n // Collapsing from the pinned copy leaves the reader on that turn's row.\n following.current = false;\n setPinned(null);\n scrollY.current = Math.max(0, top - 8);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n },\n }),\n [stickyHeaders],\n );\n const measure = useCallback((event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n return contentSize.height - layoutMeasurement.height - contentOffset.y;\n }, []);\n const onScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const distance = measure(event);\n // Mid-drag only releases follow; the drag's end decides whether to resume it.\n if (readerScrolling.current && distance >= 48) following.current = false;\n setShowJump(distance > 240 && !following.current);\n const { contentOffset, layoutMeasurement } = event.nativeEvent;\n scrollY.current = contentOffset.y;\n // The reader is approaching the oldest loaded row: fetch the window before it.\n // Momentum after a fling counts too, so this keys on follow, not the drag.\n if (!following.current && contentOffset.y < OLDER_HISTORY_PREFETCH_PX) requestOlder();\n updatePinned();\n const prompts = [...promptFrames.entries()]\n .map(([key, frame]) => ({ key, ...frame }))\n .sort((a, b) => a.top - b.top);\n const next = questionNavTarget(prompts, {\n top: contentOffset.y,\n height: layoutMeasurement.height,\n });\n setQuestionNav((current) => (current === next ? current : next));\n },\n [measure, promptFrames, requestOlder, updatePinned],\n );\n const onScrollEnd = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n following.current = measure(event) < 48;\n readerScrolling.current = false;\n },\n [measure],\n );\n const onContentSizeChange = useCallback(\n (_width: number, height: number) => {\n const added = height - contentHeight.current;\n contentHeight.current = height;\n if (prepended.current) {\n prepended.current = false;\n if (!following.current && added > 0) {\n scrollY.current += added;\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n return;\n }\n }\n if (liveFoldOffset.current !== 0) {\n const shift = liveFoldOffset.current;\n liveFoldOffset.current = 0;\n if (!following.current) {\n scrollY.current = Math.max(0, scrollY.current + shift);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n }\n }\n if (following.current) scrollRef.current?.scrollToEnd({ animated: false });\n // A short window can't be scrolled, so it could never reach the top: keep loading.\n if (viewportHeight.current > 0 && height < viewportHeight.current + OLDER_HISTORY_PREFETCH_PX)\n requestOlder();\n },\n [requestOlder],\n );\n const followLatestSignal = props.followLatestSignal ?? 0;\n useEffect(() => {\n if (!followLatestSignal) return;\n following.current = true;\n setShowJump(false);\n scrollRef.current?.scrollToEnd({ animated: true });\n }, [followLatestSignal]);\n // Landing on a moment: each group's offset, read as it lays out.\n const groupTops = useRef(new Map<string, number>()).current;\n const landed = useRef<number | null>(null);\n const [layoutPass, setLayoutPass] = useState(0);\n const focusSequence = props.focusSequence ?? null;\n const focusIndex = useMemo(\n () => (focusSequence ? timelineGroupIndexAtSequence(groups, focusSequence) : -1),\n [focusSequence, groups],\n );\n useEffect(() => {\n if (!focusSequence || landed.current === focusSequence) return;\n following.current = false;\n if (focusIndex < 0) {\n // Older than the loaded window: fetch the window before it, else give up\n // and show the latest.\n if (history.current.hasOlder) requestOlder();\n else if (!history.current.loading && groups.length > 0) {\n landed.current = focusSequence;\n following.current = true;\n scrollRef.current?.scrollToEnd({ animated: false });\n }\n return;\n }\n const top = groupTops.get(groupKey(groups[focusIndex]!));\n if (top === undefined) return;\n landed.current = focusSequence;\n scrollY.current = Math.max(0, top - 12);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: false });\n }, [focusSequence, focusIndex, groups, groupTops, layoutPass, requestOlder]);\n const activityOptions = useMemo<NativeActivityOptions>(\n () => ({\n toolRenderers: props.toolRenderers,\n renderTool: props.renderTool,\n computeLabel: props.computeLabel,\n renderMarkdown: props.renderMarkdown,\n onOpenSession: props.onOpenSession,\n }),\n [\n props.toolRenderers,\n props.renderTool,\n props.computeLabel,\n props.renderMarkdown,\n props.onOpenSession,\n ],\n );\n const context: GroupContext = {\n facets: props.facets,\n renderMarkdown: props.renderMarkdown,\n renderPreparing: props.renderPreparing,\n renderMessageActions: props.renderMessageActions,\n renderUserAttachments: props.renderUserAttachments,\n onCopy: props.onCopy,\n reportLiveFold,\n onRevealAnnotation: revealSource,\n };\n return (\n <AnnotationSourcesContext.Provider value={annotationSourcesValue}>\n <NativeActivityOptionsProvider value={activityOptions}>\n <FoldMemoryProvider value={foldMemory}>\n <StickyWorkHeaderProvider value={registerSticky}>\n <ReleaseFollowProvider value={releaseFollow}>\n <View style={[{ flex: 1, backgroundColor: theme.colors.bg }, props.style]}>\n <ScrollView\n ref={scrollRef}\n onScroll={onScroll}\n onScrollBeginDrag={() => {\n readerScrolling.current = true;\n // The reader takes over: a live turn re-lays out the content many\n // times a second, and snapping to the end on each pass would undo\n // the drag before it got far. Follow is re-decided when it ends.\n following.current = false;\n }}\n onScrollEndDrag={onScrollEnd}\n onMomentumScrollEnd={onScrollEnd}\n onLayout={(event: LayoutChangeEvent) => {\n viewportHeight.current = event.nativeEvent.layout.height;\n if (following.current) scrollRef.current?.scrollToEnd({ animated: false });\n }}\n scrollEventThrottle={32}\n onContentSizeChange={onContentSizeChange}\n keyboardDismissMode=\"interactive\"\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={{\n paddingTop: props.contentInsetTop ?? 16,\n paddingHorizontal: 16,\n paddingBottom: props.contentInsetBottom ?? 24,\n gap: ROW_GAP_PX,\n flexGrow: 1,\n }}\n >\n <View>\n {props.hasOlder ? (\n <OlderHistoryRow\n loading={props.loadingOlder === true}\n onPress={requestOlder}\n />\n ) : null}\n {props.header}\n </View>\n {groups.length === 0 && props.emptyState ? props.emptyState : null}\n {groups.map((group, index) => {\n const key = groupKey(group);\n const prompt = group.kind === \"item\" && group.item.kind === \"user-message\";\n // Agent messages keep one wrapper so a progress note can fold\n // (stay mounted, out of layout) without remounting.\n const noteId =\n group.kind === \"item\" && group.item.kind === \"agent-message\"\n ? group.item.id\n : null;\n const liveNote = noteId !== null && liveNotes.notes.has(noteId);\n const folded = noteId !== null && foldedNotes.has(noteId);\n // The landing row keeps one wrapper for its life, so landing never remounts it.\n const landing = focusSequence !== null && index === focusIndex;\n return prompt || landing || noteId !== null ? (\n <View\n key={key}\n style={folded ? { display: \"none\" } : undefined}\n onLayout={(event) => {\n const { y, height } = event.nativeEvent.layout;\n if (prompt) promptFrames.set(key, { top: y, bottom: y + height });\n if (liveNote && !folded && height > 0) {\n liveNoteHeights.set(noteId, height);\n }\n if (landing && landed.current !== focusSequence) {\n groupTops.set(key, y);\n setLayoutPass((pass) => pass + 1);\n }\n }}\n >\n <TimelineGroupView group={group} context={context} />\n </View>\n ) : (\n <TimelineGroupView key={key} group={group} context={context} />\n );\n })}\n {props.trailing}\n </ScrollView>\n {pinned && stickyHeaders.get(pinned.key) ? (\n <View\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n paddingHorizontal: 16,\n backgroundColor: theme.colors.bg,\n transform: [{ translateY: pinned.offset }],\n }}\n >\n {stickyHeaders.get(pinned.key)!.render()}\n </View>\n ) : null}\n {/* Web timeline navigation: two identical small round arrow buttons at\n fixed, centered spots that never dodge the content beneath them. */}\n {questionNav ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n // Below a pinned work header so that strip stays a full-width target.\n top: pinned ? pinned.height + pinned.offset + 8 : 12,\n left: 0,\n right: 0,\n alignItems: \"center\",\n }}\n >\n <NavButton\n icon=\"arrow-up\"\n label={m.backToYourMessage}\n onPress={() => {\n const frame = promptFrames.get(questionNav);\n if (!frame) return;\n following.current = false;\n scrollRef.current?.scrollTo({\n y: Math.max(0, frame.top - QUESTION_NAV_MARGIN_PX),\n animated: true,\n });\n }}\n />\n </View>\n ) : null}\n {showJump ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n bottom: (props.overlayInsetBottom ?? 0) + 12,\n left: 0,\n right: 0,\n alignItems: \"center\",\n }}\n >\n <NavButton\n icon=\"arrow-down\"\n label={m.jumpToLatest}\n onPress={() => {\n following.current = true;\n scrollRef.current?.scrollToEnd({ animated: true });\n }}\n />\n </View>\n ) : null}\n </View>\n </ReleaseFollowProvider>\n </StickyWorkHeaderProvider>\n </FoldMemoryProvider>\n </NativeActivityOptionsProvider>\n </AnnotationSourcesContext.Provider>\n );\n}\n\n/**\n * The web timeline's navigation button (NAV_BUTTON_CLASS): 32pt round, surface-3\n * at 90% with a border and shadow, a 16pt fg-muted arrow, and a 44pt touch target.\n */\nfunction NavButton(props: { icon: \"arrow-up\" | \"arrow-down\"; label: string; onPress: () => void }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <Animated.View entering={FadeIn.duration(150)} exiting={FadeOut.duration(150)}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={props.label}\n onPress={props.onPress}\n hitSlop={6}\n style={({ pressed }) => ({\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n borderColor: pressed ? c[\"border-strong\"] : c.border,\n backgroundColor: withAlpha(c[\"surface-3\"], 0.9),\n shadowColor: \"#000\",\n shadowOpacity: 0.1,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 3,\n })}\n >\n {({ pressed }) => (\n <Icon name={props.icon} size={16} color={pressed ? c.fg : c[\"fg-muted\"]} />\n )}\n </Pressable>\n </Animated.View>\n );\n}\n\ntype GroupContext = {\n facets?: TurnSummaryFacetConfiguration | undefined;\n renderMarkdown?: NativeMarkdownRenderer | undefined;\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n renderMessageActions?: ((item: AgentMessageItem | UserMessageItem) => ReactNode) | undefined;\n renderUserAttachments?: ((item: UserMessageItem) => ReactNode) | undefined;\n onCopy?: ((text: string) => void) | undefined;\n /** A live work row reports its open state, so its progress notes above fold. */\n reportLiveFold?: ((workId: string, open: boolean) => void) | undefined;\n onRevealAnnotation?: AnnotationReveal | undefined;\n};\n\n/** A wait's one quiet secondary line under its work row. */\nfunction WaitDetail({ text }: { text: string }) {\n const theme = useNativeTimelineTheme();\n return (\n <Text\n numberOfLines={2}\n style={{ ...fontStyle(theme), fontSize: theme.size.sm, color: theme.colors[\"fg-subtle\"] }}\n >\n {text}\n </Text>\n );\n}\n\nfunction groupKey(group: TimelineGroup): string {\n switch (group.kind) {\n case \"item\":\n return group.item.kind === \"user-message\" && group.item.reconciliationKey\n ? `user-${group.item.reconciliationKey}`\n : group.item.id;\n default:\n return group.id;\n }\n}\n\nfunction TimelineGroupView({\n group,\n context,\n insideTurn = false,\n}: {\n group: TimelineGroup;\n context: GroupContext;\n insideTurn?: boolean;\n}) {\n const t = useOpenGeniText();\n switch (group.kind) {\n case \"activity\": {\n if (group.work) {\n if (isPreparingWork(group, { startupDetails: false, startupDismissed: insideTurn })) {\n return (\n <ActivityRail\n items={group.items}\n startupActive\n renderPreparing={context.renderPreparing}\n />\n );\n }\n const base = readableWorkStatus(t, { ...group, work: group.work });\n const status: NativeTurnStatus =\n base.kind === \"working\"\n ? {\n kind: \"working\",\n since: base.since,\n label: base.label,\n preview: readableWorkShowsPreview(group) ? (\n <RollingActivity items={group.items} showCount={false} />\n ) : undefined,\n }\n : base.kind === \"waiting\"\n ? {\n kind: \"waiting\",\n since: base.since,\n label: base.label,\n preview: base.detail ? <WaitDetail text={base.detail} /> : undefined,\n }\n : { kind: \"worked\", durationMs: base.durationMs, label: base.label };\n return (\n <TurnSummary\n items={group.items}\n status={status}\n outcome={group.outcome}\n failureText={group.failureText}\n foldKey={group.id}\n defaultOpen={readableWorkDefaultOpen(group)}\n unloadedSteps={!!group.work.steps && group.work.steps.state !== \"complete\"}\n facets={context.facets}\n contextCompactionCount={compactedLandmarkCount(group.work.details)}\n onOpenStateChange={\n // Always wired at the top level: a row opened before its first\n // note arrives must still fold that note when it does.\n !insideTurn && context.reportLiveFold\n ? (open) => context.reportLiveFold?.(group.id, open)\n : undefined\n }\n >\n <TurnRailFrame compact>\n {group.work.steps ? (\n <TurnStepsLoader\n steps={group.work.steps}\n autoLoad={!readableWorkDefaultOpen(group)}\n />\n ) : null}\n <FoldedGroups groups={group.work.details} context={context} />\n </TurnRailFrame>\n </TurnSummary>\n );\n }\n const preparationOnly =\n !insideTurn &&\n !group.outcome &&\n group.items.every(\n (item) =>\n item.kind === \"startup-phase\" || (item.kind === \"reasoning\" && !item.text.trim()),\n );\n if (preparationOnly) {\n return <ActivityRail items={group.items} renderPreparing={context.renderPreparing} />;\n }\n if (insideTurn) {\n return <ActivityRail items={group.items} startupActive={false} />;\n }\n const image = timelineGroupContainsPresentedImage(group);\n return (\n <TurnSummary\n items={group.items}\n outcome={group.outcome}\n failureText={group.failureText}\n defaultOpen={group.outcome === \"failed\" || image ? true : undefined}\n liveHeader={\n !image && !group.outcome ? <RollingActivity items={group.items} /> : undefined\n }\n foldKey={group.id}\n facets={context.facets}\n >\n <TurnRailFrame>\n <ActivityRail items={group.items} startupActive={false} />\n </TurnRailFrame>\n </TurnSummary>\n );\n }\n case \"turn\": {\n const activityItems = flattenActivityItems(group.groups);\n const image = timelineGroupContainsPresentedImage(group);\n return (\n <TurnSummary\n items={activityItems}\n outcome={group.outcome}\n failureText={insideTurn ? undefined : group.failureText}\n durationMs={durationBetween(group.startedAt, group.endedAt)}\n defaultOpen={!insideTurn && (group.outcome === \"failed\" || image) ? true : undefined}\n bare={insideTurn}\n foldKey={group.id}\n facets={context.facets}\n contextCompactionCount={group.contextCompactionCount}\n >\n {insideTurn ? (\n <View style={{ gap: 16 }}>\n <FoldedGroups groups={group.groups} context={context} />\n </View>\n ) : (\n <TurnRailFrame>\n <FoldedGroups groups={group.groups} context={context} />\n </TurnRailFrame>\n )}\n </TurnSummary>\n );\n }\n case \"item\":\n return <TimelineRow item={group.item} context={context} />;\n }\n}\n\nfunction FoldedGroups({\n groups,\n context,\n}: {\n groups: readonly TimelineGroup[];\n context: GroupContext;\n}) {\n return (\n <>\n {groups.map((child, index) => (\n <View\n key={groupKey(child)}\n style={\n index > 0 && (child.kind !== \"activity\" || groups[index - 1]?.kind !== \"activity\")\n ? { marginTop: 12 }\n : undefined\n }\n >\n <TimelineGroupView group={child} context={context} insideTurn />\n </View>\n ))}\n </>\n );\n}\n\nfunction TimelineRow({ item, context }: { item: TimelineItem; context: GroupContext }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n switch (item.kind) {\n case \"user-message\":\n return <UserMessageRow item={item} context={context} />;\n case \"agent-message\":\n return <AgentMessageRow item={item} context={context} />;\n case \"human-input\":\n return <HumanInputRow item={item} onCopy={context.onCopy} />;\n case \"session-status\": {\n const meta = SESSION_STATUS_PRESENTATION(t)[item.blocked ? \"blocked\" : item.status];\n return (\n <SeparatorRow\n dot={item.resolvedAt ? undefined : theme.colors[`status-${meta.tone}`]}\n text={`${item.resolvedAt ? t(\"messageTimeline.workResumed\") : meta.label.toLowerCase()} · ${formatRelativeTime(t, item.resolvedAt ?? item.occurredAt)}`}\n />\n );\n }\n case \"context-compaction\":\n return <SeparatorRow text=\"context compacted\" />;\n case \"notice\":\n return <NoticeRow item={item} />;\n case \"goal\":\n return item.text ? (\n <SeparatorRow text={`goal ${item.action} · ${item.text}`} />\n ) : (\n <SeparatorRow text={`goal ${item.action}`} />\n );\n case \"worker-completion\":\n return (\n <View\n style={{\n borderLeftWidth: 2,\n borderLeftColor: theme.colors.border,\n paddingLeft: 12,\n gap: 4,\n }}\n >\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: theme.size.base, color: theme.colors.fg }}\n >\n {t(\"native.timeline.messageTimeline.workerReportedBack\")}\n </Text>\n <Text\n numberOfLines={3}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n </View>\n );\n case \"auth-needed\":\n return (\n <View\n style={{\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: theme.colors.border,\n padding: 14,\n backgroundColor: theme.colors[\"surface-1\"],\n }}\n >\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: theme.size.md, color: theme.colors.fg }}\n >\n {t(\"native.timeline.messageTimeline.connectionNeeded\")}\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 4,\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {t(\"native.timeline.messageTimeline.providerdomainNeedsToBeReconnected\", {\n providerDomain: item.providerDomain,\n })}\n </Text>\n </View>\n );\n default:\n return null;\n }\n}\n\n/**\n * The web footer stamp. Hermes/iOS ICU joins date and time with \" at \" where the\n * browser's ICU uses \", \"; normalize to the web form.\n */\nfunction nativeClockTime(t: OpenGeniText, iso: string): string {\n return formatClockTime(t, iso).replace(\" at \", \", \");\n}\n\nfunction NoticeRow({ item }: { item: Extract<TimelineItem, { kind: \"notice\" }> }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const c = theme.colors;\n const [open, setOpen] = useState(false);\n // An agent's own wait is ordinary progress, not a warning: a quiet line that\n // discloses the reason, as on web.\n if (item.recordedOutcome) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => setOpen((value) => !value)}\n style={{ paddingVertical: 4 }}\n >\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <View style={{ transform: [{ rotate: open ? \"90deg\" : \"0deg\" }] }}>\n <Icon name=\"chevron-right\" size={14} color={c[\"fg-muted\"]} />\n </View>\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.sm, color: c[\"fg-muted\"] }}>\n {recordedWaitSummaryText(t, item).replace(\" at \", \", \")}\n </Text>\n </View>\n {open ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 4,\n paddingLeft: 22,\n fontSize: theme.size.sm,\n lineHeight: 19,\n color: c[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n ) : null}\n </Pressable>\n );\n }\n const tone = noticeTone(item);\n const accent =\n tone === \"failed\"\n ? c[\"status-failed\"]\n : tone === \"waiting\"\n ? c[\"status-waiting\"]\n : c[\"fg-muted\"];\n return (\n <View\n accessibilityRole=\"text\"\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderColor: tone === \"neutral\" ? c.border : withAlpha(accent, 0.35),\n backgroundColor: tone === \"neutral\" ? c[\"surface-1\"] : withAlpha(accent, 0.1),\n }}\n >\n <View style={{ marginTop: 2, opacity: item.tone === \"cancelled\" ? 0.6 : 1 }}>\n <Icon name=\"triangle-alert\" size={16} color={accent} />\n </View>\n <Text style={{ ...fontStyle(theme), flex: 1, fontSize: 14, lineHeight: 20, color: accent }}>\n {noticeDisplayText(t, item)}\n </Text>\n </View>\n );\n}\n\nfunction SeparatorRow({ text, dot }: { text: string; dot?: string | undefined }) {\n const theme = useNativeTimelineTheme();\n return (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 12 }}>\n <View style={{ height: 1, flex: 1, backgroundColor: theme.colors.border }} />\n {dot ? (\n <View\n style={{ width: 4, height: 4, borderRadius: 2, marginRight: -6, backgroundColor: dot }}\n />\n ) : null}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n maxWidth: \"70%\",\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {text}\n </Text>\n <View style={{ height: 1, flex: 1, backgroundColor: theme.colors.border }} />\n </View>\n );\n}\n\n/** Copy + time under a message: the web CopyHoverFrame footer at coarse pointer. */\nfunction MessageFooter({\n text,\n occurredAt,\n align,\n actions,\n onCopy,\n}: {\n text: string;\n occurredAt: string;\n align: \"start\" | \"end\";\n actions?: ReactNode;\n onCopy?: ((text: string) => void) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const [copied, setCopied] = useState(false);\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n alignSelf: align === \"end\" ? \"flex-end\" : \"flex-start\",\n gap: 6,\n height: 44,\n }}\n >\n {onCopy ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.copyMessage}\n onPress={() => {\n onCopy(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1400);\n }}\n style={{\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: theme.radius.sm,\n }}\n >\n <Icon name={copied ? \"check\" : \"copy\"} size={14} color={theme.colors[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n {actions}\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {nativeClockTime(t, occurredAt)}\n </Text>\n </View>\n );\n}\n\n/**\n * Web's long-message disclosure: a sent message taller than the phone clamp\n * shows its top with a fade and \"Show more\"; the full text stays mounted.\n */\nfunction CollapsibleUserText({ children }: { children: ReactNode }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const [height, setHeight] = useState(0);\n const [expanded, setExpanded] = useState(false);\n // A little slack so a message just over the clamp isn't hidden behind a control.\n const collapsible = height > USER_MESSAGE_COLLAPSED_PX + 48;\n const collapsed = collapsible && !expanded;\n const surface = theme.colors[\"surface-2\"];\n return (\n <View>\n <View style={collapsed ? { maxHeight: USER_MESSAGE_COLLAPSED_PX, overflow: \"hidden\" } : null}>\n {/* Measure only while unclipped: inside the clip the content is laid out\n shorter, and re-measuring there would flip collapse on and off. */}\n <View\n onLayout={(event) => {\n if (!collapsed) setHeight(event.nativeEvent.layout.height);\n }}\n >\n {children}\n </View>\n {collapsed ? (\n <View\n pointerEvents=\"none\"\n style={{ position: \"absolute\", left: 0, right: 0, bottom: 0, height: 48 }}\n >\n {[0.25, 0.5, 0.75, 0.95].map((alpha) => (\n <View key={alpha} style={{ flex: 1, backgroundColor: withAlpha(surface, alpha) }} />\n ))}\n </View>\n ) : null}\n </View>\n {collapsible ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded }}\n hitSlop={8}\n onPress={() => setExpanded((value) => !value)}\n style={{ alignSelf: \"flex-start\", paddingTop: 6 }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {expanded ? m.showLess : m.showMore}\n </Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\n/** Top of the loaded window: a spinner while older history loads, else a manual control. */\nfunction OlderHistoryRow({ loading, onPress }: { loading: boolean; onPress: () => void }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n return (\n <View style={{ alignItems: \"center\", paddingVertical: 8 }}>\n {loading ? (\n <ActivityIndicator color={theme.colors[\"fg-muted\"]} accessibilityLabel={m.loadingEarlier} />\n ) : (\n <Pressable accessibilityRole=\"button\" hitSlop={8} onPress={onPress}>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {t(\"native.timeline.messageTimeline.loadEarlierMessages\")}\n </Text>\n </Pressable>\n )}\n </View>\n );\n}\n\nfunction UserMessageRow({ item, context }: { item: UserMessageItem; context: GroupContext }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const failed = item.delivery?.state === \"failed\";\n const annotations = item.annotations ?? [];\n const sourceKey = item.annotationSource?.eventId;\n return (\n <Animated.View entering={FadeIn.duration(180)} style={{ alignItems: \"flex-end\" }}>\n <View style={{ maxWidth: \"85%\", alignItems: \"flex-end\", gap: 6 }}>\n {item.resources.some((resource) => resource.kind === \"file\")\n ? context.renderUserAttachments?.(item)\n : null}\n {item.text || annotations.length > 0 ? (\n <View\n style={{\n backgroundColor: theme.colors[\"surface-2\"],\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderTopLeftRadius: 14,\n borderTopRightRadius: 14,\n borderBottomLeftRadius: 14,\n borderBottomRightRadius: 4,\n paddingHorizontal: 16,\n paddingVertical: 10,\n }}\n >\n {item.text ? (\n <CollapsibleUserText>\n <AnnotationSourceView\n sourceKey={sourceKey}\n style={{ marginHorizontal: -6, paddingHorizontal: 6 }}\n >\n {context.renderMarkdown ? (\n context.renderMarkdown(item.text, { tone: \"body\" })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.md,\n lineHeight: 28,\n color: theme.colors.fg,\n }}\n >\n {item.text}\n </Text>\n )}\n </AnnotationSourceView>\n </CollapsibleUserText>\n ) : null}\n {annotations.length > 0 ? (\n <View style={item.text ? { marginTop: 10, marginBottom: 2 } : { paddingVertical: 2 }}>\n <SentAnnotationCards\n annotations={annotations}\n onReveal={context.onRevealAnnotation}\n />\n </View>\n ) : null}\n </View>\n ) : null}\n <MessageFooter\n text={item.text}\n occurredAt={item.occurredAt}\n align=\"end\"\n actions={context.renderMessageActions?.(item)}\n onCopy={context.onCopy}\n />\n {failed ? (\n <View\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 4, paddingHorizontal: 4 }}\n >\n <Icon name=\"triangle-alert\" size={14} color={theme.colors[\"status-failed\"]} />\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n color: theme.colors[\"status-failed\"],\n }}\n >\n {item.delivery?.error || m.messageNotSent}\n </Text>\n {item.delivery?.onRetry ? (\n <Pressable onPress={item.delivery.onRetry} accessibilityRole=\"button\">\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"status-failed\"],\n textDecorationLine: \"underline\",\n }}\n >\n {t(\"native.timeline.messageTimeline.retry\")}\n </Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n </View>\n </Animated.View>\n );\n}\n\nfunction AgentMessageRow({ item, context }: { item: AgentMessageItem; context: GroupContext }) {\n const theme = useNativeTimelineTheme();\n return (\n <Animated.View entering={FadeIn.duration(180)} style={{ minWidth: 0 }}>\n <AnnotationSourceView\n sourceKey={item.annotationSource?.eventId}\n style={{ marginHorizontal: -8, paddingHorizontal: 8 }}\n >\n {context.renderMarkdown ? (\n context.renderMarkdown(item.text, { tone: \"body\", streaming: item.streaming })\n ) : (\n <Text\n selectable\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.md,\n lineHeight: 28,\n color: theme.colors.fg,\n }}\n >\n {item.text}\n </Text>\n )}\n </AnnotationSourceView>\n {item.streaming ? null : (\n <MessageFooter\n text={item.text}\n occurredAt={item.occurredAt}\n align=\"start\"\n actions={context.renderMessageActions?.(item)}\n onCopy={context.onCopy}\n />\n )}\n </Animated.View>\n );\n}\n\nfunction HumanInputRow({\n item,\n onCopy,\n}: {\n item: HumanInputItem;\n onCopy?: ((text: string) => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const multiple = Math.max(item.questions.length, item.answers.length) > 1;\n const settled =\n item.response.outcome === \"answered\"\n ? m.humanInputOutcome.answered\n : item.response.outcome === \"skipped\"\n ? m.humanInputOutcome.skipped\n : item.response.outcome === \"expired\"\n ? m.humanInputOutcome.expired\n : m.humanInputOutcome.cancelled;\n const lines = humanInputAnswerLines(\n item.answers,\n item.response,\n m.humanInputSecretSaved,\n multiple,\n );\n const answerText = lines\n .filter((line) => !line.secret)\n .map((line) => line.text)\n .join(\"\\n\");\n const savedLines = lines.filter((line) => line.secret);\n const copyText = lines.map((line) => line.text).join(\"\\n\");\n return (\n <View style={{ gap: 10 }}>\n <View\n style={{\n maxWidth: \"90%\",\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n borderWidth: 1,\n borderColor: theme.colors.border,\n backgroundColor: theme.colors[\"surface-1\"],\n borderTopLeftRadius: theme.radius.lg,\n borderTopRightRadius: theme.radius.lg,\n borderBottomRightRadius: theme.radius.lg,\n borderBottomLeftRadius: theme.radius.xs,\n paddingHorizontal: 14,\n paddingVertical: 12,\n }}\n >\n <View\n style={{\n marginTop: 2,\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: withAlpha(theme.colors[\"status-waiting\"], 0.1),\n }}\n >\n <Icon name=\"message-circle-question\" size={16} color={theme.colors[\"status-waiting\"]} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {t(\"native.timeline.messageTimeline.agentAsked\")}\n </Text>\n <View style={{ marginTop: 6, gap: 12 }}>\n {item.questions.map((question, index) => (\n <View key={question.id}>\n {question.label ? (\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.sm,\n color: theme.colors.fg,\n }}\n >\n {multiple ? `${index + 1}. ` : \"\"}\n {question.label}\n </Text>\n ) : null}\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: question.label ? theme.size.sm : theme.size.md,\n lineHeight: question.label ? 18 : 24,\n marginTop: question.label ? 2 : 0,\n color: question.label ? theme.colors[\"fg-muted\"] : theme.colors.fg,\n }}\n >\n {question.prompt}\n </Text>\n </View>\n ))}\n </View>\n </View>\n </View>\n <View style={{ alignItems: \"flex-end\" }}>\n <View\n style={{\n maxWidth: \"85%\",\n backgroundColor: theme.colors[\"surface-2\"],\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderTopLeftRadius: 14,\n borderTopRightRadius: 14,\n borderBottomLeftRadius: 14,\n borderBottomRightRadius: 4,\n paddingHorizontal: 16,\n paddingVertical: 10,\n }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {settled}\n </Text>\n {answerText ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.md,\n lineHeight: 24,\n color: theme.colors.fg,\n }}\n >\n {answerText}\n </Text>\n ) : null}\n {savedLines.map((line) => (\n <View\n key={line.questionId}\n style={{ marginTop: 4, flexDirection: \"row\", alignItems: \"center\", gap: 6 }}\n >\n <Icon name=\"key-round\" size={14} color={theme.colors[\"fg-muted\"]} />\n <Text\n style={{\n ...fontStyle(theme),\n flexShrink: 1,\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: theme.colors.fg,\n }}\n >\n {line.text}\n </Text>\n </View>\n ))}\n </View>\n <MessageFooter\n text={copyText || settled}\n occurredAt={item.occurredAt}\n align=\"end\"\n onCopy={onCopy}\n />\n </View>\n </View>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { ActivityIndicator, Pressable, Text, type ViewStyle } from \"react-native\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* Web Button variants at `size=\"sm\"` (h-9, rounded-og-md, text-og-sm font-medium). */\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"destructive\" | \"ghost\";\n/** `sm`: web Button size=\"sm\" (h-8, text 14). `form`: the question-form action (h-9, text 12). */\nexport type ButtonSize = \"sm\" | \"form\";\n\nexport function Button({\n label,\n icon,\n onPress,\n variant = \"secondary\",\n size = \"sm\",\n disabled,\n busy,\n style,\n accessibilityLabel,\n}: {\n label?: string | undefined;\n icon?: NativeIconName | undefined;\n onPress?: (() => void) | undefined;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n style?: ViewStyle | undefined;\n accessibilityLabel?: string | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const palette =\n variant === \"primary\"\n ? { bg: c.primary, border: c[\"primary-border\"], fg: c[\"primary-fg\"] }\n : variant === \"destructive\"\n ? { bg: c[\"danger-fill\"], border: c[\"danger-fill\"], fg: c[\"danger-fg\"] }\n : variant === \"ghost\"\n ? { bg: \"transparent\", border: \"transparent\", fg: c[\"fg-muted\"] }\n : { bg: c[\"surface-2\"], border: c.border, fg: c[\"fg-muted\"] };\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel ?? label}\n accessibilityState={{ disabled: Boolean(disabled), busy: Boolean(busy) }}\n disabled={disabled || busy}\n onPress={onPress}\n style={({ pressed }) => [\n {\n minHeight: size === \"form\" ? 36 : 32,\n minWidth: label ? undefined : 44,\n paddingHorizontal: label ? (size === \"form\" ? 12 : 10) : 0,\n borderRadius: theme.radius.md,\n borderWidth: variant === \"destructive\" ? 0 : 1,\n borderColor: palette.border,\n backgroundColor: palette.bg,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n opacity: disabled ? 0.5 : pressed ? 0.85 : 1,\n },\n style,\n ]}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.fg} />\n ) : icon ? (\n <Icon name={icon} size={14} color={palette.fg} />\n ) : null}\n {label ? (\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: palette.fg,\n }}\n >\n {label}\n </Text>\n ) : null}\n </Pressable>\n );\n}\n\n/** A 44pt square icon control (composer toolbar buttons). */\nexport function IconButton({\n icon,\n onPress,\n accessibilityLabel,\n tone = \"plain\",\n disabled,\n busy,\n children,\n}: {\n icon: NativeIconName;\n onPress?: (() => void) | undefined;\n accessibilityLabel: string;\n tone?: \"plain\" | \"primary\" | \"secondary\";\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n children?: ReactNode;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const framed = tone !== \"plain\";\n const fg = tone === \"primary\" ? c[\"primary-fg\"] : c[\"fg-muted\"];\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: Boolean(disabled), busy: Boolean(busy) }}\n disabled={disabled || busy}\n onPress={onPress}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 44,\n height: 44,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: framed ? 1 : 0,\n borderColor: tone === \"primary\" ? c[\"primary-border\"] : c.border,\n backgroundColor:\n tone === \"primary\"\n ? c.primary\n : tone === \"secondary\"\n ? c[\"surface-2\"]\n : pressed\n ? c.hover\n : \"transparent\",\n opacity: disabled ? 0.45 : pressed && framed ? 0.85 : 1,\n })}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={fg} />\n ) : (\n <Icon\n name={icon}\n size={icon === \"pause\" ? 14 : 16}\n color={fg}\n fill={icon === \"pause\" || icon === \"play\" ? fg : undefined}\n />\n )}\n {children}\n </Pressable>\n );\n}\n","import { useEffect, useId, useRef } from \"react\";\nimport { Platform } from \"react-native\";\nimport type { NativePickedFile } from \"../adapters\";\n\n/**\n * Image paste for the composer. React Native's iOS text views only paste\n * text; the package's native module lets inputs whose test id starts with\n * this prefix also take pasted images (screenshots, photos), which it writes\n * to temporary files and reports here as attachments.\n */\nexport const COMPOSER_PASTE_INPUT_PREFIX = \"opengeni-composer-input\";\n\ntype PastedImage = {\n uri: string;\n name: string;\n mimeType: string;\n size?: number | null;\n};\n\ntype PasteModule = {\n addListener(\n eventName: \"onPasteImages\",\n listener: (event: { inputId: string; files: PastedImage[] }) => void,\n ): { remove(): void };\n};\n\nfunction pasteModule(): PasteModule | null {\n if (Platform.OS !== \"ios\") return null;\n const registry = (globalThis as { expo?: { modules?: Record<string, unknown> } }).expo?.modules;\n const module = registry?.OpenGeniPaste as PasteModule | undefined;\n return module && typeof module.addListener === \"function\" ? module : null;\n}\n\nlet pasteCount = 0;\n\n/**\n * The test id to put on a composer input so it accepts pasted images, or\n * undefined where image paste is unavailable (Android, web, or a build without\n * the native module) or the host gave no handler.\n */\nexport function useComposerImagePaste(\n onPasteImages: ((files: NativePickedFile[]) => void) | undefined,\n): string | undefined {\n const reactId = useId();\n const handler = useRef(onPasteImages);\n handler.current = onPasteImages;\n const enabled = Boolean(onPasteImages) && pasteModule() !== null;\n const inputId = `${COMPOSER_PASTE_INPUT_PREFIX}-${reactId.replace(/[^a-zA-Z0-9]/g, \"\")}`;\n useEffect(() => {\n const module = pasteModule();\n if (!enabled || !module) return;\n const subscription = module.addListener(\"onPasteImages\", (event) => {\n if (event.inputId !== inputId || event.files.length === 0) return;\n handler.current?.(\n event.files.map((file) => ({\n id: `pasted-${Date.now()}-${(pasteCount += 1)}`,\n uri: file.uri,\n name: file.name,\n contentType: file.mimeType,\n sizeBytes: file.size ?? null,\n kind: \"image\" as const,\n previewUri: file.uri,\n })),\n );\n });\n return () => subscription.remove();\n }, [enabled, inputId]);\n return enabled ? inputId : undefined;\n}\n","import {\n defaultChatComposerMessages,\n type ChatComposerMessages,\n} from \"@opengeni/react/composer-messages\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { GlassView, isLiquidGlassAvailable } from \"expo-glass-effect\";\nimport { useEffect, useState, type ComponentRef, type ReactNode, type Ref } from \"react\";\nimport {\n AccessibilityInfo,\n ActivityIndicator,\n Platform,\n Pressable,\n Text,\n TextInput,\n View,\n type ViewStyle,\n} from \"react-native\";\nimport Animated, { useAnimatedKeyboard, useAnimatedStyle } from \"react-native-reanimated\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport type { NativeVoiceInput } from \"../voice-input\";\nimport type { NativePickedFile } from \"../adapters\";\nimport { useNativeTimelineMessages, type NativeTimelineMessages } from \"./messages\";\nimport { useComposerImagePaste } from \"./paste\";\nimport { composerAlternateSend, composerTrailingMode } from \"./composer-state\";\n\n/* ----------------------------------------------------------------------------\n The session composer, designed for each platform rather than copied from\n the web card. It keeps the web composer's behaviour and copy (the shared\n message catalog): one field, leading actions, the model pill, and a single\n trailing action that sends, pauses a running workstream, or resumes it.\n\n iOS 26+: a floating Liquid Glass surface the conversation scrolls under.\n Older iOS or Reduce Transparency: the same shape on a solid raised surface.\n Android: a Material 3 filled container (no glass, no border).\n -------------------------------------------------------------------------- */\n\nexport interface SessionComposerProps {\n value: string;\n onChangeText: (value: string) => void;\n onSend: () => void;\n canSend: boolean;\n sending?: boolean | undefined;\n placeholder?: string | undefined;\n /** Run state drives the trailing action: pause while running, resume when paused. */\n running?: boolean | undefined;\n /**\n * The other way to send while the agent works, shown beside Send once there\n * is something to send: `queue` when Send steers, `steer` when Send queues,\n * `null` when Send is not taking its busy path. Pass the composer's\n * `alternateSend` and `sendAlternate`; omit to offer Send only.\n */\n alternateSend?: \"queue\" | \"steer\" | null | undefined;\n onAlternateSend?: (() => void) | undefined;\n paused?: boolean | undefined;\n onPause?: (() => void) | undefined;\n onResume?: (() => void) | undefined;\n pauseBusy?: boolean | undefined;\n /** Leading toolbar content; defaults to an attach button when `onAttach` is set. */\n renderLeading?: (() => ReactNode) | undefined;\n onAttach?: (() => void) | undefined;\n /** Content between leading actions and the trailing action (model/options pill). */\n options?: ReactNode;\n /** Rendered inside the surface above the field (attachment chips, annotations). */\n header?: ReactNode;\n /** Rendered above the surface (queue, approvals, status dock). */\n above?: ReactNode;\n bottomInset?: number | undefined;\n /** Distance from the composer's container bottom to the window bottom (tab bars). */\n keyboardBottomOffset?: number | undefined;\n autoFocus?: boolean | undefined;\n /** Horizontal page inset around the surface (default 12). */\n inset?: number | undefined;\n /** Lift above the keyboard (bottom-docked composer). Off for an inline card. */\n liftWithKeyboard?: boolean | undefined;\n /**\n * Float over the conversation (absolute, transparent around the surface) so\n * content scrolls beneath it. The host reads the occupied height from\n * `onHeightChange` to inset its scroll content.\n */\n floating?: boolean | undefined;\n onHeightChange?: ((height: number) => void) | undefined;\n /** Rendered inside the surface under the header (draft conflict, notices). */\n below?: ReactNode;\n /** The message field, for hosts that focus it (queue Edit, replies). */\n inputRef?: Ref<ComponentRef<typeof TextInput>> | undefined;\n /** The shared composer catalog; hosts translate by overriding entries. */\n messages?: Partial<ChatComposerMessages> | undefined;\n /** Called when the trailing action fires (host haptics). */\n onActionFeedback?: (() => void) | undefined;\n /** Dictation: a mic beside the leading actions, and the recording strip while it runs. */\n voice?: NativeVoiceInput | undefined;\n /** Images pasted into the field (iOS), added as attachments. */\n onPasteImages?: ((files: NativePickedFile[]) => void) | undefined;\n /**\n * A voice call with the agent from the composer itself. With nothing to\n * send and nothing to pause or resume, the trailing action becomes the call\n * button (as native chat apps offer voice), so a new conversation can start\n * as a call. `active` marks that this conversation is already on a call:\n * the button then returns to it.\n */\n call?: ComposerCall | undefined;\n}\n\nexport interface ComposerCall {\n onPress: () => void;\n /** This conversation is on a call; the button returns to it. */\n active?: boolean | undefined;\n /** Starting the call (creating its conversation, connecting). */\n busy?: boolean | undefined;\n disabled?: boolean | undefined;\n}\n\n/** Whether to draw Liquid Glass: iOS 26+, the native module present, transparency allowed. */\nexport function useLiquidGlass(): boolean {\n const [reduceTransparency, setReduceTransparency] = useState(false);\n useEffect(() => {\n if (Platform.OS !== \"ios\") return;\n void AccessibilityInfo.isReduceTransparencyEnabled().then(setReduceTransparency);\n const subscription = AccessibilityInfo.addEventListener(\n \"reduceTransparencyChanged\",\n setReduceTransparency,\n );\n return () => subscription.remove();\n }, []);\n if (Platform.OS !== \"ios\" || reduceTransparency) return false;\n try {\n return isLiquidGlassAvailable();\n } catch {\n return false;\n }\n}\n\n/**\n * A floating surface for composer-adjacent chrome: glass on iOS 26, a solid\n * raised surface elsewhere.\n */\nexport function ComposerSurface({\n children,\n radius,\n style,\n}: {\n children: ReactNode;\n radius: number;\n style?: ViewStyle | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const glass = useLiquidGlass();\n if (glass) {\n // Hosts must keep this surface's ancestors free of animated opacity: iOS\n // does not render glass that was mounted beneath a fading parent.\n // The glass keeps the appearance it was created with, so a change of\n // light or dark mounts a fresh one.\n return (\n <GlassView\n key={theme.scheme}\n glassEffectStyle=\"regular\"\n colorScheme={theme.scheme}\n style={[{ borderRadius: radius }, style]}\n >\n {children}\n </GlassView>\n );\n }\n const android = Platform.OS === \"android\";\n return (\n <View\n style={[\n {\n borderRadius: radius,\n // Material 3 surfaceContainerHigh: a filled tonal surface, no outline.\n backgroundColor: android ? c[\"surface-2\"] : c[\"surface-1\"],\n ...(android\n ? null\n : {\n borderWidth: 0.5,\n borderColor: c.border,\n shadowColor: \"#000\",\n shadowOpacity: theme.scheme === \"dark\" ? 0 : 0.08,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 4 },\n }),\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n}\n\nexport function SessionComposer(props: SessionComposerProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const ios = Platform.OS === \"ios\";\n const pasteInputId = useComposerImagePaste(props.onPasteImages);\n const [height, setHeight] = useState(22);\n const empty = !props.value;\n useEffect(() => {\n if (empty) setHeight(22);\n }, [empty]);\n // Track the keyboard directly: React Native's KeyboardAvoidingView mis-measures\n // inside modals and overlays; the animated keyboard height does not.\n const keyboard = useAnimatedKeyboard();\n const floating = props.floating ?? false;\n // Only Liquid Glass lets the conversation scroll beneath the composer, and\n // then under a scroll-edge fade like the system bars: the glass picks up the\n // page color, never legible text behind or below it. A solid surface\n // (Android, older iOS) sits on an opaque band down to the screen edge.\n const glass = useLiquidGlass();\n const seeThrough = floating && glass;\n // Floating: iOS tucks the glass toward the home indicator like system bars;\n // Android keeps clear of the gesture handle.\n const restingBottom = floating\n ? ios\n ? Math.max(10, (props.bottomInset ?? 0) - 4)\n : (props.bottomInset ?? 0) + 8\n : Math.max(16, (props.bottomInset ?? 0) + 4);\n const offset = props.keyboardBottomOffset ?? 0;\n const liftWithKeyboard = props.liftWithKeyboard ?? true;\n const lift = useAnimatedStyle(() => {\n if (!liftWithKeyboard) return { paddingBottom: restingBottom };\n const lifted = keyboard.height.value - offset;\n return { paddingBottom: lifted > 0 ? lifted + 8 : restingBottom };\n });\n const t = useOpenGeniText();\n const messages = { ...defaultChatComposerMessages(t), ...props.messages };\n const fieldSize = ios ? 17 : 16;\n const compact = !props.options;\n const voice = props.voice?.available ? props.voice : undefined;\n const capturing =\n voice !== undefined &&\n (voice.status === \"recording\" ||\n voice.status === \"requesting-permission\" ||\n voice.status === \"transcribing\");\n const attach = props.renderLeading ? (\n props.renderLeading()\n ) : props.onAttach ? (\n <ToolbarButton icon=\"plus\" accessibilityLabel={messages.attachFiles} onPress={props.onAttach} />\n ) : null;\n const leading =\n attach || voice ? (\n <>\n {attach}\n {voice ? (\n <ToolbarButton icon=\"mic\" accessibilityLabel={m.dictate} onPress={voice.start} />\n ) : null}\n </>\n ) : null;\n const field = (inline: boolean) => (\n <TextInput\n ref={props.inputRef}\n testID={pasteInputId}\n accessibilityLabel={messages.inputLabel}\n value={props.value}\n onChangeText={props.onChangeText}\n placeholder={\n props.placeholder ?? (props.paused ? messages.pausedPlaceholder : m.followUpPlaceholder)\n }\n placeholderTextColor={c[\"fg-subtle\"]}\n multiline\n autoFocus={props.autoFocus}\n selectionColor={c.accent}\n onContentSizeChange={(event) =>\n setHeight(Math.min(150, Math.max(22, event.nativeEvent.contentSize.height)))\n }\n style={{\n ...fontStyle(theme),\n fontSize: fieldSize,\n lineHeight: 22,\n color: c.fg,\n ...(inline\n ? { paddingTop: 7, paddingBottom: 7, paddingHorizontal: 6, minHeight: 36 }\n : { paddingTop: 14, paddingBottom: 2, paddingHorizontal: 16, minHeight: 40 }),\n // The inline field sizes itself; the stacked one tracks its content.\n // (iOS never shrinks a self-sized multiline field, so an empty one is pinned.)\n // A cleared field (after Send) returns to one line: iOS does not report\n // the smaller content size, so the last height would otherwise stick.\n height: ios\n ? inline\n ? props.value\n ? undefined\n : 36\n : (props.value ? height : 22) + 16\n : undefined,\n maxHeight: 166,\n textAlignVertical: inline ? \"center\" : \"top\",\n }}\n />\n );\n return (\n <Animated.View\n pointerEvents={floating ? \"box-none\" : \"auto\"}\n onLayout={(event) => props.onHeightChange?.(event.nativeEvent.layout.height)}\n style={[\n {\n paddingHorizontal: props.inset ?? 12,\n paddingTop: 6,\n gap: 8,\n backgroundColor: seeThrough ? \"transparent\" : c.bg,\n },\n floating ? { position: \"absolute\", left: 0, right: 0, bottom: 0 } : null,\n lift,\n ]}\n >\n {seeThrough ? <ScrollEdgeFade color={c.bg} /> : null}\n {props.above ? <View pointerEvents=\"box-none\">{props.above}</View> : null}\n <ComposerSurface radius={compact ? 22 : 24}>\n {props.header}\n {props.below}\n {voice?.hasSavedRecording && voice.status === \"error\" ? (\n <SavedRecordingStrip voice={voice} />\n ) : voice?.status === \"error\" && voice.error ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.composer.errorDismiss\", { error: voice.error })}\n onPress={voice.clearError}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingTop: 10,\n }}\n >\n <Icon name=\"circle-alert\" size={14} color={c[\"status-failed\"]} />\n <Text\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: 13,\n lineHeight: 18,\n color: c[\"status-failed\"],\n }}\n >\n {voice.error}\n </Text>\n <Icon name=\"x\" size={14} color={c[\"fg-subtle\"]} />\n </Pressable>\n ) : null}\n {capturing && voice ? (\n <VoiceStrip voice={voice} />\n ) : compact ? (\n // No options to show: one row, as native messaging apps lay it out.\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-end\",\n paddingHorizontal: 5,\n paddingVertical: 5,\n gap: 2,\n }}\n >\n {leading}\n <View style={{ flex: 1, minWidth: 0 }}>{field(true)}</View>\n <View style={{ paddingBottom: 0, flexDirection: \"row\", alignItems: \"center\", gap: 6 }}>\n <AlternateSendAction {...props} messages={messages} />\n <TrailingAction {...props} messages={messages} />\n </View>\n </View>\n ) : (\n <>\n {field(false)}\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingLeft: 6,\n paddingRight: 8,\n paddingBottom: 8,\n minHeight: 44,\n gap: 2,\n }}\n >\n {leading}\n <View style={{ flex: 1, flexDirection: \"row\", alignItems: \"center\", minWidth: 0 }}>\n {props.options}\n </View>\n <AlternateSendAction {...props} messages={messages} />\n <TrailingAction {...props} messages={messages} />\n </View>\n </>\n )}\n </ComposerSurface>\n </Animated.View>\n );\n}\n\n/** How far the scroll-edge fade reaches above the floating composer. */\nconst SCROLL_EDGE_PX = 24;\n/** Page-color opacity of each band in the fade, top to bottom. */\nconst SCROLL_EDGE_STEPS = [0.1, 0.28, 0.48, 0.68, 0.84, 0.95] as const;\n\n/**\n * The scroll-edge effect under a floating glass composer: the conversation\n * fades into the page color just above the composer and is fully covered\n * behind and below it, down to the screen edge (or the keyboard).\n *\n * Plain views, not an SVG gradient: a percentage-sized SVG inside this\n * absolutely positioned layer painted nothing on device, which left the\n * conversation legible under and below the glass.\n */\nfunction ScrollEdgeFade({ color }: { color: string }) {\n return (\n <View\n pointerEvents=\"none\"\n style={{ position: \"absolute\", top: -SCROLL_EDGE_PX, left: 0, right: 0, bottom: 0 }}\n >\n <View style={{ height: SCROLL_EDGE_PX }}>\n {SCROLL_EDGE_STEPS.map((alpha) => (\n <View key={alpha} style={{ flex: 1, backgroundColor: withAlpha(color, alpha) }} />\n ))}\n </View>\n <View style={{ flex: 1, backgroundColor: color }} />\n </View>\n );\n}\n\n/** A quiet round toolbar button (the web composer's leading actions). */\nexport function ToolbarButton({\n icon,\n accessibilityLabel,\n onPress,\n}: {\n icon: NativeIconName;\n accessibilityLabel: string;\n onPress: () => void;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n onPress={onPress}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: pressed ? theme.colors.hover : \"transparent\",\n })}\n >\n <Icon name={icon} size={20} color={theme.colors[\"fg-muted\"]} />\n </Pressable>\n );\n}\n\nconst LEVEL_BARS = 28;\n\nfunction formatDictationTime(seconds: number): string {\n const whole = Math.max(0, Math.floor(seconds));\n return `${Math.floor(whole / 60)}:${String(whole % 60).padStart(2, \"0\")}`;\n}\n\n/**\n * A recording whose text could not be fetched yet. It stays on the device:\n * Retry sends the same audio again; Discard is the only way to drop it.\n */\nfunction SavedRecordingStrip({ voice }: { voice: NativeVoiceInput }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n return (\n <View style={{ gap: 6, paddingHorizontal: 16, paddingTop: 10 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 8 }}>\n <Icon name=\"audio-lines\" size={14} color={c[\"status-waiting\"]} />\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{ ...fontStyle(theme), flex: 1, fontSize: 13, lineHeight: 18, color: c.fg }}\n >\n {voice.error ?? m.recordingSaved}\n </Text>\n </View>\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 6 }}>\n <Button label={m.discard} variant=\"ghost\" onPress={voice.cancel} />\n <Button label={m.retry} variant=\"primary\" onPress={voice.retry} />\n </View>\n </View>\n );\n}\n\n/**\n * Dictation in progress, in place of the field: cancel, a live level meter with\n * the elapsed time, and stop (which transcribes into the draft).\n */\nfunction VoiceStrip({ voice }: { voice: NativeVoiceInput }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [levels, setLevels] = useState<number[]>(() => Array<number>(LEVEL_BARS).fill(0));\n const recording = voice.status === \"recording\";\n const transcribing = voice.status === \"transcribing\";\n useEffect(() => {\n if (!recording) return;\n setLevels((current) => [...current.slice(1), voice.level ?? 0.15]);\n }, [recording, voice.durationSeconds, voice.level]);\n const remaining =\n voice.maxDurationSeconds !== null && voice.maxDurationSeconds - voice.durationSeconds <= 10\n ? ` · ${Math.max(0, Math.ceil(voice.maxDurationSeconds - voice.durationSeconds))}s left`\n : \"\";\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 6,\n paddingVertical: 6,\n minHeight: 56,\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.cancelDictation}\n onPress={voice.cancel}\n disabled={transcribing}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: pressed ? c.hover : \"transparent\",\n opacity: transcribing ? 0.4 : 1,\n })}\n >\n <Icon name=\"x\" size={18} color={c[\"fg-muted\"]} />\n </Pressable>\n <View\n accessible\n accessibilityLiveRegion=\"polite\"\n accessibilityLabel={\n transcribing ? m.transcribing : m.recording(formatDictationTime(voice.durationSeconds))\n }\n style={{ flex: 1, flexDirection: \"row\", alignItems: \"center\", gap: 10, minWidth: 0 }}\n >\n {transcribing ? (\n <>\n <ActivityIndicator size=\"small\" color={c[\"fg-muted\"]} />\n <Text style={{ ...fontStyle(theme), fontSize: 15, color: c[\"fg-muted\"] }}>\n {m.transcribing}…\n </Text>\n </>\n ) : (\n <>\n <View\n style={{\n flex: 1,\n height: 28,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n overflow: \"hidden\",\n }}\n >\n {levels.map((value, index) => (\n <View\n // Fixed slots: the meter scrolls by shifting values, not keys.\n // oxlint-disable-next-line react/no-array-index-key\n key={index}\n style={{\n width: 3,\n borderRadius: 1.5,\n height: 4 + Math.round(value * 24),\n backgroundColor: index === LEVEL_BARS - 1 ? c.fg : c[\"fg-subtle\"],\n }}\n />\n ))}\n </View>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: 14,\n color: c[\"fg-muted\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {formatDictationTime(voice.durationSeconds)}\n {remaining}\n </Text>\n </>\n )}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.composer.stopAndTranscribe\")}\n onPress={voice.stop}\n disabled={!recording}\n hitSlop={6}\n style={({ pressed }) => ({\n width: 34,\n height: 34,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: recording ? c.accent : withAlpha(c.fg, 0.08),\n opacity: pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.94 : 1 }],\n })}\n >\n <Icon\n name=\"check\"\n size={18}\n strokeWidth={2.5}\n color={recording ? c[\"accent-fg\"] : c[\"fg-subtle\"]}\n />\n </Pressable>\n </View>\n );\n}\n\n/**\n * Queue or Steer beside Send while the agent works, so a phone (no\n * Cmd/Ctrl+Enter) always has both choices. Shown only with something to send.\n */\nfunction AlternateSendAction(props: SessionComposerProps & { messages: ChatComposerMessages }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const c = theme.colors;\n const alternate = composerAlternateSend({\n trailing: composerTrailingMode({\n value: props.value,\n canSend: props.canSend,\n paused: props.paused,\n running: props.running,\n canResume: Boolean(props.onResume),\n canPause: Boolean(props.onPause),\n canCall: Boolean(props.call),\n }),\n alternateSend: props.alternateSend,\n available: props.onAlternateSend !== undefined,\n });\n const onAlternateSend = props.onAlternateSend;\n if (alternate === null || !onAlternateSend) return null;\n const label =\n alternate === \"queue\"\n ? (props.messages.queueLabel ?? t(\"composerMessages.queue\"))\n : (props.messages.steerLabel ?? t(\"composerMessages.steer\"));\n const hint =\n alternate === \"queue\"\n ? (props.messages.queueTitle ?? t(\"composerMessages.queueRunsAfterCurrentWork\"))\n : (props.messages.steerTitle ?? t(\"composerMessages.steerReadsItSoon\"));\n const disabled = !props.canSend || Boolean(props.sending);\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityHint={hint}\n accessibilityState={{ disabled }}\n disabled={disabled}\n hitSlop={6}\n onPress={() => {\n props.onActionFeedback?.();\n onAlternateSend();\n }}\n style={({ pressed }) => ({\n height: 34,\n paddingHorizontal: 14,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: withAlpha(c.fg, 0.08),\n opacity: disabled ? 0.42 : pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.96 : 1 }],\n })}\n >\n <Text style={{ ...fontStyle(theme, 600), fontSize: 14, lineHeight: 18, color: c.fg }}>\n {label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * One trailing control, as native chat apps do: send when there is something\n * to send (a message to a running agent joins the queue), otherwise pause a\n * running workstream or resume a paused one; an idle empty composer offers a\n * call when the host supplies one, else a quiet, disabled send.\n */\nfunction TrailingAction(props: SessionComposerProps & { messages: ChatComposerMessages }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const mode = composerTrailingMode({\n value: props.value,\n canSend: props.canSend,\n paused: props.paused,\n running: props.running,\n canResume: Boolean(props.onResume),\n canPause: Boolean(props.onPause),\n canCall: Boolean(props.call),\n });\n if (mode === \"call\" && props.call) return <CallAction call={props.call} messages={m} />;\n const active = mode !== \"idle\";\n const busy = mode === \"send\" ? props.sending : mode === \"idle\" ? false : props.pauseBusy;\n const disabled = mode === \"send\" ? !props.canSend : !active;\n // A disabled send (text typed, but the host cannot send yet) looks disabled too.\n const lit = active && !disabled;\n const icon: NativeIconName = mode === \"pause\" ? \"pause\" : mode === \"resume\" ? \"play\" : \"arrow-up\";\n const label =\n mode === \"pause\"\n ? props.messages.pauseAriaLabel\n : mode === \"resume\"\n ? props.messages.resumeThisWorkstream\n : props.messages.sendMessageAriaLabel;\n const fg = lit ? c[\"accent-fg\"] : c[\"fg-subtle\"];\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled, busy: Boolean(busy) }}\n disabled={disabled || busy}\n hitSlop={6}\n onPress={() => {\n props.onActionFeedback?.();\n if (mode === \"send\") props.onSend();\n else if (mode === \"pause\") props.onPause?.();\n else if (mode === \"resume\") props.onResume?.();\n }}\n style={({ pressed }) => ({\n width: 34,\n height: 34,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: lit ? c.accent : withAlpha(c.fg, 0.08),\n opacity: pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.94 : 1 }],\n })}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={fg} />\n ) : (\n <Icon\n name={icon}\n size={icon === \"arrow-up\" ? 18 : 14}\n strokeWidth={icon === \"arrow-up\" ? 2.5 : 2}\n color={fg}\n fill={icon === \"arrow-up\" ? undefined : fg}\n />\n )}\n </Pressable>\n );\n}\n\n/**\n * The web model pill (\"6 Luna High ⌄\"): a quiet toolbar chip that opens host\n * options. As on web, the muted detail (reasoning effort) gives way first, so a\n * long name never pushes it into a clipped \"Ext…\".\n */\nexport function ComposerPill({\n label,\n detail,\n onPress,\n leading,\n fast = false,\n ultrafast = false,\n}: {\n label: string;\n /** Secondary text after the label (the reasoning effort); truncates before the label. */\n detail?: string | null | undefined;\n /** Fast latency is on: a filled bolt after the name, as on the web pill. */\n fast?: boolean | undefined;\n /** Ultrafast latency is on: two filled bolts. Takes precedence over `fast`. */\n ultrafast?: boolean | undefined;\n onPress?: (() => void) | undefined;\n /** Shown before the label (the web picker's maker mark). */\n leading?: ReactNode;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const speedLabel = ultrafast\n ? t(\"native.timeline.composer.ultrafast\")\n : fast\n ? t(\"native.timeline.composer.fast\")\n : null;\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={[label, detail, speedLabel].filter(Boolean).join(\", \")}\n onPress={onPress}\n disabled={!onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n flexShrink: 1,\n maxWidth: 260,\n minHeight: 44,\n paddingHorizontal: 8,\n borderRadius: 999,\n backgroundColor: pressed ? theme.colors[\"surface-2\"] : \"transparent\",\n })}\n >\n {leading}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors.fg,\n flexShrink: 1,\n }}\n >\n {label}\n </Text>\n {detail ? (\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n flexShrink: 9999,\n }}\n >\n {detail}\n </Text>\n ) : null}\n {fast || ultrafast ? (\n <Icon name=\"zap\" size={13} color={theme.colors.fg} fill={theme.colors.fg} />\n ) : null}\n {ultrafast ? (\n <Icon name=\"zap\" size={13} color={theme.colors.fg} fill={theme.colors.fg} />\n ) : null}\n <Icon name=\"chevron-down\" size={12} color={theme.colors[\"fg-muted\"]} />\n </Pressable>\n );\n}\n\n/**\n * The empty composer's call button: the web composer's voice control\n * (audio lines), lit like send so it reads as the composer's main action. On a\n * call it turns call-green and returns to the call.\n */\nfunction CallAction({ call, messages }: { call: ComposerCall; messages: NativeTimelineMessages }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const active = call.active ?? false;\n const busy = call.busy ?? false;\n const disabled = call.disabled ?? false;\n const background = disabled\n ? withAlpha(c.fg, 0.08)\n : active\n ? Platform.OS === \"ios\"\n ? \"#34C759\"\n : \"#1E8E3E\"\n : c.accent;\n const fg = disabled ? c[\"fg-subtle\"] : active ? \"#FFFFFF\" : c[\"accent-fg\"];\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={active ? messages.returnToCall : messages.startCall}\n accessibilityState={{ disabled, busy }}\n disabled={disabled || busy}\n hitSlop={6}\n onPress={call.onPress}\n style={({ pressed }) => ({\n width: 34,\n height: 34,\n borderRadius: 17,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: background,\n opacity: pressed ? 0.8 : 1,\n transform: [{ scale: pressed ? 0.94 : 1 }],\n })}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={fg} />\n ) : (\n <Icon name=\"audio-lines\" size={18} strokeWidth={2.25} color={fg} />\n )}\n </Pressable>\n );\n}\n","import type { FeedbackSentiment } from \"@opengeni/sdk\";\nimport {\n feedbackDialogCopy,\n feedbackSentimentLabel,\n feedbackSubmission,\n loadSessionFeedback,\n turnRatingsFromFeedback,\n type FeedbackClient,\n} from \"@opengeni/react/session-feedback-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n Text,\n TextInput,\n View,\n} from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon } from \"./icon\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/* ----------------------------------------------------------------------------\n Reply feedback, as the web timeline offers it beside Copy: thumbs up/down\n on a finished agent reply, an optional comment in a sheet, and the saved\n rating shown as pressed. The read, ratings and retry-safe submission are\n the shared session-feedback model.\n -------------------------------------------------------------------------- */\n\nexport interface TurnFeedbackTarget {\n client: FeedbackClient;\n workspaceId: string;\n sessionId: string;\n}\n\n/** Saved reply ratings for a session, loaded once with recovery. */\nexport function useTurnRatings(target: TurnFeedbackTarget | null | undefined) {\n const [ratings, setRatings] = useState<Record<string, FeedbackSentiment>>({});\n const client = target?.client;\n const workspaceId = target?.workspaceId;\n const sessionId = target?.sessionId;\n useEffect(() => {\n setRatings({});\n if (!client || !workspaceId || !sessionId) return;\n return loadSessionFeedback(client, workspaceId, sessionId, ({ feedback }) => {\n const loaded = turnRatingsFromFeedback(feedback);\n // Ratings given in this view win over the (older) loaded snapshot.\n setRatings((saved) => ({ ...loaded, ...saved }));\n });\n }, [client, workspaceId, sessionId]);\n const rate = useCallback((turnId: string, sentiment: FeedbackSentiment) => {\n setRatings((saved) => ({ ...saved, [turnId]: sentiment }));\n }, []);\n return { ratings, rate };\n}\n\nexport function TurnFeedbackButtons(props: {\n target: TurnFeedbackTarget;\n turnId: string;\n saved: FeedbackSentiment | undefined;\n onRated: (sentiment: FeedbackSentiment) => void;\n}) {\n const [choice, setChoice] = useState<FeedbackSentiment | null>(null);\n return (\n <>\n <Thumb\n sentiment=\"positive\"\n pressed={props.saved === \"positive\"}\n onPress={() => setChoice(\"positive\")}\n />\n <Thumb\n sentiment=\"negative\"\n pressed={props.saved === \"negative\"}\n onPress={() => setChoice(\"negative\")}\n />\n <FeedbackSheet\n target={props.target}\n turnId={props.turnId}\n sentiment={choice}\n onClose={() => setChoice(null)}\n onSubmitted={(sentiment) => {\n props.onRated(sentiment);\n setChoice(null);\n }}\n />\n </>\n );\n}\n\nfunction Thumb(props: { sentiment: FeedbackSentiment; pressed: boolean; onPress: () => void }) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const label = feedbackSentimentLabel(t, props.sentiment);\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ selected: props.pressed }}\n onPress={props.onPress}\n style={({ pressed }) => ({\n width: 44,\n height: 44,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: theme.radius.sm,\n backgroundColor: props.pressed || pressed ? theme.colors[\"surface-2\"] : \"transparent\",\n })}\n >\n <Icon\n name={props.sentiment === \"positive\" ? \"thumbs-up\" : \"thumbs-down\"}\n size={14}\n color={props.pressed ? theme.colors.fg : theme.colors[\"fg-subtle\"]}\n />\n </Pressable>\n );\n}\n\n/** The web feedback dialog as a native page sheet. */\nexport function FeedbackSheet(props: {\n target: TurnFeedbackTarget;\n turnId?: string | undefined;\n sentiment: FeedbackSentiment | null;\n onClose: () => void;\n onSubmitted: (sentiment: FeedbackSentiment) => void;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [comment, setComment] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const pending = useRef<ReturnType<typeof feedbackSubmission> | null>(null);\n const t = useOpenGeniText();\n const copy = feedbackDialogCopy(t, { sessionId: props.target.sessionId, turnId: props.turnId });\n const open = props.sentiment !== null;\n const close = () => {\n if (busy) return;\n setError(null);\n props.onClose();\n };\n const submit = async () => {\n if (busy || !props.sentiment) return;\n pending.current = feedbackSubmission(\n {\n sessionId: props.target.sessionId,\n turnId: props.turnId,\n sentiment: props.sentiment,\n comment: comment || undefined,\n },\n pending.current,\n () => globalThis.crypto.randomUUID(),\n );\n setBusy(true);\n setError(null);\n try {\n await props.target.client.createFeedback(props.target.workspaceId, pending.current);\n pending.current = null;\n setComment(\"\");\n props.onSubmitted(props.sentiment);\n } catch (caught) {\n const detail =\n caught instanceof Error && caught.message\n ? ` ${caught.message}`\n : ` ${t(\"native.timeline.feedback.tryAgain\")}`;\n setError(t(\"native.timeline.feedback.couldnTSendFeedbackDetail\", { detail }));\n } finally {\n setBusy(false);\n }\n };\n return (\n <Modal\n visible={open}\n animationType=\"slide\"\n presentationStyle={Platform.OS === \"ios\" ? \"pageSheet\" : undefined}\n transparent={Platform.OS !== \"ios\"}\n onRequestClose={close}\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n style={{\n flex: 1,\n justifyContent: Platform.OS === \"ios\" ? \"flex-start\" : \"flex-end\",\n backgroundColor: Platform.OS === \"ios\" ? c.bg : \"rgba(0, 0, 0, 0.4)\",\n }}\n >\n <View\n style={{\n backgroundColor: c.bg,\n padding: 20,\n gap: 12,\n borderTopLeftRadius: Platform.OS === \"ios\" ? 0 : theme.radius.xl,\n borderTopRightRadius: Platform.OS === \"ios\" ? 0 : theme.radius.xl,\n }}\n >\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}\n >\n {copy.title}\n </Text>\n <Text style={{ ...fontStyle(theme), fontSize: 14, lineHeight: 20, color: c[\"fg-muted\"] }}>\n {copy.description}\n </Text>\n {props.sentiment ? (\n <Text style={{ ...fontStyle(theme), fontSize: 14, color: c.fg }}>\n {feedbackSentimentLabel(t, props.sentiment)}\n </Text>\n ) : null}\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c.fg }}>\n {t(\"native.timeline.feedback.commentOptional\")}\n </Text>\n <TextInput\n accessibilityLabel={t(\"native.timeline.feedback.commentOptional\")}\n value={comment}\n onChangeText={setComment}\n maxLength={4000}\n editable={!busy}\n multiline\n style={{\n ...fontStyle(theme),\n minHeight: 110,\n fontSize: 16,\n lineHeight: 22,\n color: c.fg,\n textAlignVertical: \"top\",\n padding: 12,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n }}\n />\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...fontStyle(theme), fontSize: 13, color: c[\"status-failed\"] }}\n >\n {error}\n </Text>\n ) : null}\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 8, marginTop: 4 }}>\n <Button label={m.cancel} variant=\"ghost\" onPress={close} disabled={busy} />\n <Button\n label={busy ? m.sending : m.sendFeedback}\n variant=\"primary\"\n onPress={() => void submit()}\n disabled={busy}\n busy={busy}\n />\n </View>\n </View>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n","import { View } from \"react-native\";\nimport { Icon } from \"./icon\";\nimport { useNativeTimelineTheme } from \"./theme\";\n\n/** The question form's radio (single) or checkbox (multi) mark. */\nexport function Selector({ multi, selected }: { multi: boolean; selected: boolean }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <View\n style={{\n marginTop: 2,\n width: 14,\n height: 14,\n borderRadius: multi ? 3 : 7,\n borderWidth: 1,\n borderColor: selected ? c.accent : c[\"fg-muted\"],\n backgroundColor: selected && multi ? c.accent : c[\"surface-1\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {selected ? (\n multi ? (\n <Icon name=\"check\" size={10} color={c[\"accent-fg\"]} strokeWidth={3} />\n ) : (\n <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: c.accent }} />\n )\n ) : null}\n </View>\n );\n}\n","import type { HumanInputQuestion, HumanInputSecretSaveTo } from \"@opengeni/sdk\";\nimport { useEffect, useRef, useState, type ComponentRef } from \"react\";\nimport { Pressable, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon } from \"./icon\";\nimport { Selector } from \"./selector\";\nimport {\n SECRET_SAVE_TO_OPTIONS,\n secretInputTraits,\n secretPatternMismatch,\n secretUsernameTraits,\n type SecretDraft,\n type SecretFieldMessages,\n} from \"./secret-field-model\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The secret question's controls: optional username, a secure value field\n (show / hide, OS autofill traits from the spec), Generate, the soft\n looksLike / pattern hints, and Save to. The value never enters React\n state: the input is uncontrolled and each change goes to the form's ref.\n -------------------------------------------------------------------------- */\n\nexport interface SecretQuestionFieldProps {\n question: HumanInputQuestion;\n draft: SecretDraft;\n onDraft: (next: (draft: SecretDraft) => SecretDraft) => void;\n /** Receives every keystroke; the form keeps it in a ref, not state. */\n onValue: (value: string) => void;\n /** The form calls this to empty the field after a successful submit. */\n registerClear: (clear: (() => void) | null) => void;\n messages: SecretFieldMessages;\n error?: string | undefined;\n disabled: boolean;\n}\n\nexport function SecretQuestionField({\n question,\n draft,\n onDraft,\n onValue,\n registerClear,\n messages,\n error,\n disabled,\n}: SecretQuestionFieldProps) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const spec = question.secret;\n const traits = secretInputTraits(spec);\n const input = useRef<ComponentRef<typeof TextInput>>(null);\n const [revealed, setRevealed] = useState(false);\n const [mismatch, setMismatch] = useState(false);\n const defaultSaveTo = spec?.saveTo ?? \"user\";\n\n useEffect(() => {\n registerClear(() => {\n input.current?.clear();\n setMismatch(false);\n setRevealed(false);\n });\n return () => registerClear(null);\n }, [registerClear]);\n\n const change = (text: string) => {\n onValue(text);\n const next = secretPatternMismatch(spec?.pattern, text);\n setMismatch((current) => (current === next ? current : next));\n };\n const generate = () => {\n input.current?.clear();\n onValue(\"\");\n setMismatch(false);\n setRevealed(false);\n onDraft((current) => ({ ...current, generate: true }));\n };\n const undo = () => onDraft((current) => ({ ...current, generate: false }));\n\n const label = { ...fontStyle(theme, 500), fontSize: theme.size.sm, lineHeight: 18, color: c.fg };\n const note = { ...fontStyle(theme), fontSize: theme.size.xs, lineHeight: 16 };\n const frame = {\n minHeight: 44,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n };\n const valueFrame = { ...frame, borderColor: error ? c[\"status-failed\"] : c.border };\n const text = { ...fontStyle(theme), fontSize: theme.size.sm, color: c.fg };\n\n return (\n <View style={{ gap: 10 }}>\n {spec?.username ? (\n <View style={{ gap: 6 }}>\n <Text style={label}>{spec.username.prompt}</Text>\n <TextInput\n {...secretUsernameTraits}\n accessibilityLabel={spec.username.prompt}\n editable={!disabled}\n value={draft.username}\n onChangeText={(username) => onDraft((current) => ({ ...current, username }))}\n returnKeyType=\"next\"\n onSubmitEditing={() => input.current?.focus()}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{ ...frame, ...text, paddingHorizontal: 10 }}\n />\n </View>\n ) : null}\n\n {draft.generate ? (\n <View\n style={{\n ...valueFrame,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingLeft: 10,\n paddingRight: 4,\n }}\n >\n <Icon name=\"sparkles\" size={14} color={c.accent} />\n <Text accessibilityLiveRegion=\"polite\" style={{ ...text, flex: 1 }}>\n {messages.generated}\n </Text>\n <Button label={messages.undo} variant=\"ghost\" disabled={disabled} onPress={undo} />\n </View>\n ) : (\n <View\n style={{ ...valueFrame, flexDirection: \"row\", alignItems: \"center\", paddingLeft: 10 }}\n >\n <Icon name=\"lock\" size={14} color={c[\"fg-subtle\"]} />\n <TextInput\n ref={input}\n testID={`secret-input-${question.id}`}\n accessibilityLabel={question.label ?? question.prompt}\n accessibilityHint={spec?.looksLike ? messages.looksLike(spec.looksLike) : undefined}\n editable={!disabled}\n secureTextEntry={!revealed}\n textContentType={traits.textContentType}\n autoComplete={traits.autoComplete}\n importantForAutofill={traits.importantForAutofill}\n keyboardType={traits.keyboardType}\n passwordRules={traits.passwordRules}\n autoCorrect={traits.autoCorrect}\n autoCapitalize={traits.autoCapitalize}\n spellCheck={traits.spellCheck}\n returnKeyType=\"done\"\n onChangeText={change}\n placeholder={messages.placeholder[traits.mode]}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{ ...text, flex: 1, minHeight: 42, paddingHorizontal: 8 }}\n />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={revealed ? messages.hide : messages.show}\n accessibilityState={{ disabled }}\n disabled={disabled}\n onPress={() => setRevealed((value) => !value)}\n style={({ pressed }) => ({\n width: 44,\n height: 42,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <Icon name={revealed ? \"eye-off\" : \"eye\"} size={16} color={c[\"fg-muted\"]} />\n </Pressable>\n </View>\n )}\n\n {error ? (\n <Text accessibilityRole=\"alert\" style={{ ...note, color: c[\"status-failed\"] }}>\n {error}\n </Text>\n ) : null}\n\n {spec?.looksLike || mismatch || (spec?.allowGenerate && !draft.generate) ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <View style={{ flex: 1, gap: 2 }}>\n {spec?.looksLike && !draft.generate ? (\n <Text style={{ ...note, color: c[\"fg-subtle\"] }}>\n {messages.looksLike(spec.looksLike)}\n </Text>\n ) : null}\n {mismatch && !draft.generate ? (\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 6 }}>\n <View style={{ paddingTop: 1 }}>\n <Icon name=\"triangle-alert\" size={12} color={c[\"status-waiting\"]} />\n </View>\n <Text style={{ ...note, flex: 1, color: c[\"status-waiting\"] }}>\n {messages.patternWarning}\n </Text>\n </View>\n ) : null}\n </View>\n {spec?.allowGenerate && !draft.generate ? (\n <Button\n icon=\"sparkles\"\n label={messages.generate}\n size=\"form\"\n disabled={disabled}\n onPress={generate}\n />\n ) : null}\n </View>\n ) : null}\n\n <View style={{ gap: 2 }}>\n <Text style={label}>{messages.saveTo}</Text>\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={messages.saveTo}\n style={{ flexDirection: \"row\", flexWrap: \"wrap\", columnGap: 16 }}\n >\n {SECRET_SAVE_TO_OPTIONS.map((option: HumanInputSecretSaveTo) => {\n const selected = draft.saveTo === option;\n return (\n <Pressable\n key={option}\n accessibilityRole=\"radio\"\n accessibilityLabel={messages.saveToOption[option]}\n accessibilityState={{ checked: selected, disabled }}\n disabled={disabled}\n onPress={() => onDraft((current) => ({ ...current, saveTo: option }))}\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8, minHeight: 44 }}\n >\n <View style={{ marginTop: -2 }}>\n <Selector multi={false} selected={selected} />\n </View>\n <Text style={label}>{messages.saveToOption[option]}</Text>\n </Pressable>\n );\n })}\n </View>\n {spec?.vault && draft.saveTo === defaultSaveTo ? (\n <Text style={{ ...note, color: c[\"fg-subtle\"] }}>{messages.vaultHint(spec.vault)}</Text>\n ) : null}\n </View>\n </View>\n );\n}\n","import type {\n HumanInputAnswer,\n HumanInputQuestion,\n SessionHumanInputRequest,\n SubmitHumanInputResponseRequest,\n} from \"@opengeni/sdk\";\nimport type { PendingApproval } from \"@opengeni/react/session\";\nimport {\n answersFromDrafts,\n defaultHumanInputFormMessages,\n emptyDraft,\n humanInputHeading,\n initialDrafts,\n isActionableHumanInputRequest,\n type HumanInputAnswerDraft,\n type HumanInputFormMessages,\n} from \"@opengeni/react/timeline-model\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { createOpenGeniText, useOpenGeniText, type OpenGeniText } from \"@opengeni/react/messages\";\nimport { Pressable, ScrollView, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon } from \"./icon\";\nimport { blendOver, withAlpha } from \"./primitives\";\nimport { SecretQuestionField } from \"./secret-field\";\nimport {\n defaultSecretFieldMessages,\n initialSecretDraft,\n isSecretQuestion,\n secretSubmission,\n type SecretDraft,\n type SecretFieldMessages,\n} from \"./secret-field-model\";\nimport { Selector } from \"./selector\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/* ----------------------------------------------------------------------------\n Decision surfaces: the web HumanInputSurface/HumanInputForm (waiting tone,\n question-first, options, Other, Skip / Send answers) and the approval\n Notice strip, with the shared drafting and validation rules.\n -------------------------------------------------------------------------- */\n\nfunction useWaitingTone() {\n const theme = useNativeTimelineTheme();\n const waiting = theme.colors[\"status-waiting\"];\n return {\n theme,\n waiting,\n surface: withAlpha(waiting, 0.05),\n border: withAlpha(waiting, 0.35),\n divider: withAlpha(waiting, 0.2),\n iconBox: withAlpha(waiting, 0.12),\n };\n}\n\nexport interface HumanInputCardProps {\n requests: SessionHumanInputRequest[];\n onSubmit: (requestId: string, response: SubmitHumanInputResponseRequest) => void | Promise<void>;\n respondingRequestId?: string | null | undefined;\n error?: string | null | undefined;\n /** The shared question-form catalog; hosts translate by overriding entries. */\n messages?: Partial<HumanInputFormMessages> | undefined;\n /** Copy for secret questions (Save to, Generate, show / hide). */\n secretMessages?: Partial<SecretFieldMessages> | undefined;\n}\n\nconst HumanInputMessagesContext = createContext<HumanInputFormMessages>(\n defaultHumanInputFormMessages(createOpenGeniText()),\n);\nconst SecretFieldMessagesContext = createContext<SecretFieldMessages>(\n defaultSecretFieldMessages(createOpenGeniText()),\n);\n\n/** One decision shell for pending requests, oldest first, \"N of M\" when stepping. */\nexport function HumanInputCard({\n requests,\n onSubmit,\n respondingRequestId = null,\n error,\n messages,\n secretMessages,\n}: HumanInputCardProps) {\n const t = useOpenGeniText();\n const merged = useMemo(\n () => ({ ...defaultHumanInputFormMessages(t), ...messages }),\n [t, messages],\n );\n const mergedSecret = useMemo(\n () => ({ ...defaultSecretFieldMessages(t), ...secretMessages }),\n [secretMessages, t],\n );\n const batchTotal = useRef(0);\n const ordered = useMemo(() => {\n const now = Date.now();\n return requests\n .filter((request) => isActionableHumanInputRequest(request, now))\n .sort((a, b) => {\n const aAt = a.createdAt ? Date.parse(a.createdAt) : 0;\n const bAt = b.createdAt ? Date.parse(b.createdAt) : 0;\n return aAt !== bAt ? aAt - bAt : a.id.localeCompare(b.id);\n });\n }, [requests]);\n if (ordered.length === 0) {\n batchTotal.current = 0;\n return null;\n }\n batchTotal.current = Math.max(batchTotal.current, ordered.length);\n const active = ordered[0]!;\n const position = batchTotal.current - ordered.length + 1;\n return (\n <HumanInputMessagesContext.Provider value={merged}>\n <SecretFieldMessagesContext.Provider value={mergedSecret}>\n <HumanInputForm\n key={active.id}\n request={active}\n progressLabel={\n batchTotal.current > 1\n ? t(\"native.timeline.decisions.positionOfCurrent\", {\n position,\n current: batchTotal.current,\n })\n : null\n }\n submitting={respondingRequestId !== null}\n error={error ?? null}\n onSubmit={(response) => onSubmit(active.id, response)}\n />\n </SecretFieldMessagesContext.Provider>\n </HumanInputMessagesContext.Provider>\n );\n}\n\nfunction HumanInputForm({\n request,\n progressLabel,\n submitting,\n error,\n onSubmit,\n}: {\n request: SessionHumanInputRequest;\n progressLabel: string | null;\n submitting: boolean;\n error: string | null;\n onSubmit: (response: SubmitHumanInputResponseRequest) => void | Promise<void>;\n}) {\n const tone = useWaitingTone();\n const { theme } = tone;\n const c = theme.colors;\n const t = useOpenGeniText();\n const messages = useContext(HumanInputMessagesContext);\n const secretMessages = useContext(SecretFieldMessagesContext);\n const heading = humanInputHeading(request.questions, messages);\n const single = request.questions.length === 1;\n const required = single && request.questions[0]!.required;\n const [drafts, setDrafts] = useState<Record<string, HumanInputAnswerDraft>>(() =>\n initialDrafts(request.questions),\n );\n // Secret values stay out of React state: keystrokes land in this ref, which\n // is emptied after a successful submit and when the form goes away.\n const secretValues = useRef<Record<string, string>>({});\n const secretClears = useRef<Record<string, () => void>>({});\n const secretRegistrars = useRef<Record<string, (clear: (() => void) | null) => void>>({});\n const [secretDrafts, setSecretDrafts] = useState<Record<string, SecretDraft>>(() =>\n Object.fromEntries(\n request.questions\n .filter(isSecretQuestion)\n .map((question) => [question.id, initialSecretDraft(question.secret)]),\n ),\n );\n useEffect(\n () => () => {\n secretValues.current = {};\n },\n [],\n );\n const registerSecretClear = useCallback((id: string) => {\n // One stable registrar per question, so the field's effect runs once.\n const existing = secretRegistrars.current[id];\n if (existing) return existing;\n const registrar = (clear: (() => void) | null) => {\n if (clear) secretClears.current[id] = clear;\n else delete secretClears.current[id];\n };\n secretRegistrars.current[id] = registrar;\n return registrar;\n }, []);\n const clearSecrets = () => {\n secretValues.current = {};\n for (const clear of Object.values(secretClears.current)) clear();\n };\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [collapsed, setCollapsed] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [inFlight, setInFlight] = useState(false);\n const busy = submitting || inFlight;\n\n const submit = async (response: SubmitHumanInputResponseRequest) => {\n setSubmitError(null);\n setInFlight(true);\n try {\n await onSubmit(response);\n clearSecrets();\n } catch (cause) {\n setSubmitError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setInFlight(false);\n }\n };\n const send = () => {\n const result = answersFromDrafts(\n t,\n request.questions.filter((question) => !isSecretQuestion(question)),\n drafts,\n messages,\n );\n const secret = secretSubmission(\n request.questions,\n secretDrafts,\n secretValues.current,\n messages.required,\n );\n const nextErrors = { ...result.errors, ...secret.errors };\n setErrors(nextErrors);\n if (Object.keys(nextErrors).length > 0) return;\n const byQuestion = new Map<string, HumanInputAnswer>(\n [...result.answers, ...secret.answers].map((answer) => [answer.questionId, answer]),\n );\n void submit({\n outcome: \"answered\",\n answers: request.questions.flatMap((question) => byQuestion.get(question.id) ?? []),\n ...(secret.secretAnswers.length > 0 ? { secretAnswers: secret.secretAnswers } : {}),\n });\n };\n // Editing a question clears its validation message, as on web.\n const clearError = (id: string) =>\n setErrors((current) => {\n if (!(id in current)) return current;\n const remaining = { ...current };\n delete remaining[id];\n return remaining;\n });\n const update = (id: string, next: (draft: HumanInputAnswerDraft) => HumanInputAnswerDraft) => {\n setDrafts((current) => ({ ...current, [id]: next(current[id] ?? emptyDraft()) }));\n clearError(id);\n };\n const updateSecret = (\n question: HumanInputQuestion,\n next: (draft: SecretDraft) => SecretDraft,\n ) => {\n setSecretDrafts((current) => ({\n ...current,\n [question.id]: next(current[question.id] ?? initialSecretDraft(question.secret)),\n }));\n clearError(question.id);\n };\n const setSecretValue = (id: string, value: string) => {\n secretValues.current[id] = value;\n if (value) clearError(id);\n };\n\n return (\n <View\n style={{\n borderRadius: theme.radius.lg,\n borderWidth: 1,\n borderColor: tone.border,\n backgroundColor: tone.surface,\n overflow: \"hidden\",\n }}\n >\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n padding: 16,\n paddingBottom: collapsed ? 16 : 14,\n }}\n >\n <View\n style={{\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: tone.iconBox,\n }}\n >\n <Icon name=\"message-circle-question\" size={16} color={tone.waiting} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 24,\n color: c.fg,\n }}\n >\n {heading.title}\n {required ? <Text style={{ color: c[\"status-failed\"] }}> *</Text> : null}\n </Text>\n {heading.description ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"fg-muted\"],\n }}\n >\n {heading.description}\n </Text>\n ) : null}\n {progressLabel ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.xs,\n color: c[\"fg-subtle\"],\n }}\n >\n {progressLabel}\n </Text>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={collapsed ? messages.expand : messages.collapse}\n onPress={() => setCollapsed((value) => !value)}\n style={{\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Icon name={collapsed ? \"chevron-down\" : \"chevron-up\"} size={16} color={c[\"fg-muted\"]} />\n </Pressable>\n </View>\n {collapsed ? null : (\n <>\n <ScrollView\n style={{ maxHeight: 360, borderTopWidth: 1, borderTopColor: tone.divider }}\n contentContainerStyle={{ paddingHorizontal: 20, paddingVertical: 14, gap: 18 }}\n nestedScrollEnabled\n keyboardShouldPersistTaps=\"handled\"\n >\n {request.questions.map((question, index) => (\n <QuestionControls\n key={question.id}\n question={question}\n index={single ? null : index + 1}\n draft={drafts[question.id] ?? emptyDraft()}\n error={isSecretQuestion(question) ? undefined : errors[question.id]}\n disabled={busy}\n onChange={(next) => update(question.id, next)}\n >\n {isSecretQuestion(question) ? (\n <SecretQuestionField\n question={question}\n draft={secretDrafts[question.id] ?? initialSecretDraft(question.secret)}\n onDraft={(next) => updateSecret(question, next)}\n onValue={(value) => setSecretValue(question.id, value)}\n registerClear={registerSecretClear(question.id)}\n messages={secretMessages}\n error={errors[question.id]}\n disabled={busy}\n />\n ) : null}\n </QuestionControls>\n ))}\n </ScrollView>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderTopWidth: 1,\n borderTopColor: tone.divider,\n backgroundColor: withAlpha(c[\"surface-1\"], 0.95),\n }}\n >\n {error || submitError ? (\n <Text\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: theme.size.xs,\n color: c[\"status-failed\"],\n }}\n >\n {submitError ?? error}\n </Text>\n ) : null}\n {request.allowSkip ? (\n <Button\n label={messages.skip}\n variant=\"ghost\"\n size=\"form\"\n disabled={busy}\n onPress={() =>\n void submit({ outcome: \"skipped\" } as SubmitHumanInputResponseRequest)\n }\n />\n ) : null}\n <Button\n label={busy ? messages.submitting : messages.submit}\n variant=\"primary\"\n size=\"form\"\n busy={busy}\n onPress={send}\n />\n </View>\n </>\n )}\n </View>\n );\n}\n\nfunction QuestionControls({\n question,\n index,\n draft,\n error,\n disabled,\n onChange,\n children,\n}: {\n question: HumanInputQuestion;\n index: number | null;\n draft: HumanInputAnswerDraft;\n error?: string | undefined;\n disabled: boolean;\n onChange: (next: (draft: HumanInputAnswerDraft) => HumanInputAnswerDraft) => void;\n /** A control that replaces the built-in ones (the secret field). */\n children?: ReactNode;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const messages = useContext(HumanInputMessagesContext);\n const multi = question.kind === \"multi_select\";\n const label = { ...fontStyle(theme, 500), fontSize: theme.size.sm, lineHeight: 18, color: c.fg };\n const input = {\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c.fg,\n minHeight: 32,\n paddingHorizontal: 8,\n paddingVertical: 6,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: error ? c[\"status-failed\"] : c.border,\n backgroundColor: c[\"surface-1\"],\n };\n const toggle = (value: string) =>\n onChange((current) => {\n if (!multi) return { ...current, values: [value], otherSelected: false };\n const has = current.values.includes(value);\n return {\n ...current,\n values: has\n ? current.values.filter((entry) => entry !== value)\n : [...current.values, value],\n };\n });\n const hint = multi\n ? messages.selectionHint(question.validation?.minSelections, question.validation?.maxSelections)\n : null;\n return (\n <View style={{ gap: 10 }}>\n {index !== null ? (\n <View>\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c.fg,\n }}\n >\n {`${index}. ${question.label ?? question.prompt}`}\n {question.required ? <Text style={{ color: c[\"status-failed\"] }}> *</Text> : null}\n </Text>\n {question.label ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"fg-muted\"],\n }}\n >\n {question.prompt}\n </Text>\n ) : null}\n </View>\n ) : null}\n {hint ? (\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"fg-subtle\"] }}>\n {hint}\n </Text>\n ) : null}\n {children ? (\n children\n ) : question.kind === \"text\" ? (\n <TextInput\n accessibilityLabel={question.label ?? question.prompt}\n editable={!disabled}\n multiline\n value={draft.values[0] ?? \"\"}\n onChangeText={(text) => onChange((current) => ({ ...current, values: [text] }))}\n placeholder={m.typeYourAnswer}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{ ...input, minHeight: 64, textAlignVertical: \"top\" }}\n />\n ) : (\n <View style={{ gap: 2 }}>\n {question.options.map((option) => {\n const selected = draft.values.includes(option.id);\n return (\n <Pressable\n key={option.id}\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityState={{ checked: selected, disabled }}\n disabled={disabled}\n onPress={() => toggle(option.id)}\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n minHeight: 36,\n paddingVertical: 8,\n }}\n >\n <Selector multi={multi} selected={selected} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text style={label}>{option.label}</Text>\n {option.description ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: c[\"fg-muted\"],\n }}\n >\n {option.description}\n </Text>\n ) : null}\n </View>\n </Pressable>\n );\n })}\n {question.allowOther ? (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n paddingVertical: 8,\n }}\n >\n <Pressable\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityState={{ checked: draft.otherSelected, disabled }}\n accessibilityLabel={messages.other}\n disabled={disabled}\n onPress={() =>\n onChange((current) =>\n multi\n ? { ...current, otherSelected: !current.otherSelected }\n : { ...current, values: [], otherSelected: true },\n )\n }\n style={{ paddingTop: 2 }}\n >\n <Selector multi={multi} selected={draft.otherSelected} />\n </Pressable>\n <View style={{ flex: 1, gap: 6 }}>\n <Text style={label}>{messages.other}</Text>\n <TextInput\n accessibilityLabel={t(\"native.timeline.decisions.otherAnswerForLabel\", {\n label: question.label ?? question.prompt,\n })}\n editable={!disabled}\n value={draft.other}\n onFocus={() =>\n onChange((current) =>\n multi\n ? { ...current, otherSelected: true }\n : { ...current, values: [], otherSelected: true },\n )\n }\n onChangeText={(text) => onChange((current) => ({ ...current, other: text }))}\n placeholder={m.typeAValue}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={input}\n />\n </View>\n </View>\n ) : null}\n </View>\n )}\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"status-failed\"] }}\n >\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nexport interface ApprovalStripMessages {\n approve: string;\n reject: string;\n approved: string;\n rejected: string;\n /** The tool's display name; the web live strip shows the raw name. */\n formatToolName: (name: string) => string;\n}\n\nexport const defaultApprovalStripMessages = (t: OpenGeniText): ApprovalStripMessages => ({\n approve: t(\"native.timeline.decisions.approve\"),\n reject: t(\"native.timeline.decisions.reject\"),\n approved: t(\"native.timeline.decisions.approved\"),\n rejected: t(\"native.timeline.decisions.rejected\"),\n formatToolName: (name) => name,\n});\n\nexport interface ApprovalStripProps {\n approvals: PendingApproval[];\n onDecide: (approvalId: string, decision: \"approve\" | \"reject\") => void | Promise<void>;\n messages?: Partial<ApprovalStripMessages> | undefined;\n}\n\n/** The web live decision strip: one waiting Notice per pending tool approval. */\nexport function ApprovalStrip({ approvals, onDecide, messages: overrides }: ApprovalStripProps) {\n const t = useOpenGeniText();\n const messages = { ...defaultApprovalStripMessages(t), ...overrides };\n const tone = useWaitingTone();\n const { theme } = tone;\n const c = theme.colors;\n const [pending, setPending] = useState<Record<string, \"approve\" | \"reject\">>({});\n const [settled, setSettled] = useState<Record<string, \"approve\" | \"reject\">>({});\n if (approvals.length === 0) return null;\n const decide = async (id: string, decision: \"approve\" | \"reject\") => {\n setPending((current) => ({ ...current, [id]: decision }));\n try {\n await onDecide(id, decision);\n setSettled((current) => ({ ...current, [id]: decision }));\n } finally {\n setPending((current) => {\n const next = { ...current };\n delete next[id];\n return next;\n });\n }\n };\n return (\n <ScrollView style={{ maxHeight: 256 }} contentContainerStyle={{ gap: 12 }} nestedScrollEnabled>\n {approvals.map((approval) => {\n const busy = Boolean(pending[approval.id]) || Boolean(settled[approval.id]);\n const payload = JSON.stringify(approval.arguments ?? approval.raw ?? {}, null, 2);\n return (\n <View\n key={approval.id}\n style={{\n borderRadius: theme.radius.lg,\n borderWidth: 1,\n borderColor: withAlpha(tone.waiting, 0.3),\n // Opaque: the strip floats over scrolling conversation.\n backgroundColor: blendOver(c.bg, tone.waiting, 0.06),\n padding: 12,\n flexDirection: \"row\",\n gap: 10,\n }}\n >\n <View style={{ paddingTop: 2 }}>\n <Icon name=\"circle-alert\" size={16} color={tone.waiting} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: 14, lineHeight: 20, color: c.fg }}\n numberOfLines={2}\n >\n {messages.formatToolName(approval.name)}\n </Text>\n <ScrollView\n style={{\n marginTop: 8,\n maxHeight: 160,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: withAlpha(c[\"surface-2\"], 0.6),\n }}\n contentContainerStyle={{ padding: 10 }}\n nestedScrollEnabled\n >\n <Text\n selectable\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n }}\n >\n {payload}\n </Text>\n </ScrollView>\n <View\n style={{ marginTop: 12, flexDirection: \"row\", justifyContent: \"flex-end\", gap: 8 }}\n >\n <Button\n icon=\"check\"\n variant=\"primary\"\n label={settled[approval.id] === \"approve\" ? messages.approved : messages.approve}\n busy={pending[approval.id] === \"approve\"}\n disabled={busy}\n onPress={() => void decide(approval.id, \"approve\")}\n />\n <Button\n icon=\"x\"\n variant=\"destructive\"\n label={settled[approval.id] === \"reject\" ? messages.rejected : messages.reject}\n busy={pending[approval.id] === \"reject\"}\n disabled={busy}\n onPress={() => void decide(approval.id, \"reject\")}\n />\n </View>\n </View>\n </View>\n );\n })}\n </ScrollView>\n );\n}\n","import type { FileAsset, OpenGeniClient, ResourceRef } from \"@opengeni/sdk\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ActivityIndicator, Image, Linking, Pressable, Text, View } from \"react-native\";\nimport { Icon } from \"./icon\";\nimport { NativeImageViewer, type NativeViewerImage } from \"./image-viewer\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\n\ntype AttachmentClient = Pick<OpenGeniClient, \"getFile\" | \"createFileDownloadUrl\">;\ntype FileResource = Extract<ResourceRef, { kind: \"file\" }>;\n\nconst PREVIEW_WIDTH = 200;\n\n/**\n * Files sent with a user message, above its bubble as on web: images as\n * signed previews (tap opens them full screen in the app, swiping between the\n * message's images), other files as named chips.\n */\nexport function NativeMessageAttachments(props: {\n client: AttachmentClient;\n workspaceId: string;\n sessionId?: string | undefined;\n resources: readonly ResourceRef[];\n}) {\n const files = props.resources.filter(\n (resource): resource is FileResource => resource.kind === \"file\",\n );\n const [ready, setReady] = useState<Record<string, NativeViewerImage>>({});\n const [viewing, setViewing] = useState<string | null>(null);\n const onImageReady = useCallback((fileId: string, image: NativeViewerImage) => {\n setReady((current) =>\n current[fileId]?.url === image.url ? current : { ...current, [fileId]: image },\n );\n }, []);\n const order = files.map((file) => file.fileId).join(\",\");\n const gallery = useMemo(\n () =>\n order\n .split(\",\")\n .flatMap((fileId) => (ready[fileId] ? [{ fileId, image: ready[fileId]! }] : [])),\n [order, ready],\n );\n if (files.length === 0) return null;\n const index = Math.max(\n 0,\n gallery.findIndex((entry) => entry.fileId === viewing),\n );\n return (\n <View style={{ flexDirection: \"row\", flexWrap: \"wrap\", justifyContent: \"flex-end\", gap: 6 }}>\n {files.map((resource) => (\n <Attachment\n key={resource.fileId}\n client={props.client}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n resource={resource}\n onImageReady={onImageReady}\n onOpenImage={setViewing}\n />\n ))}\n {gallery.length > 0 ? (\n <NativeImageViewer\n images={gallery.map((entry) => entry.image)}\n index={index}\n visible={viewing !== null}\n onClose={() => setViewing(null)}\n />\n ) : null}\n </View>\n );\n}\n\nfunction Attachment(props: {\n client: AttachmentClient;\n workspaceId: string;\n sessionId?: string | undefined;\n resource: FileResource;\n onImageReady: (fileId: string, image: NativeViewerImage) => void;\n onOpenImage: (fileId: string) => void;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const [asset, setAsset] = useState<FileAsset | null>(null);\n const [url, setUrl] = useState<string | null>(null);\n const [ratio, setRatio] = useState(1);\n const [failed, setFailed] = useState(false);\n const { client, workspaceId, sessionId } = props;\n const fileId = props.resource.fileId;\n\n useEffect(() => {\n let current = true;\n setAsset(null);\n setUrl(null);\n setFailed(false);\n const options = sessionId ? { sessionId } : {};\n void (async () => {\n try {\n const file = await client.getFile(workspaceId, fileId, options);\n if (!current) return;\n setAsset(file);\n if (!file.contentType.startsWith(\"image/\")) return;\n const signed = await client.createFileDownloadUrl(workspaceId, fileId, options);\n if (current) setUrl(signed.url);\n } catch {\n if (current) setFailed(true);\n }\n })();\n return () => {\n current = false;\n };\n }, [client, fileId, sessionId, workspaceId]);\n\n const open = async () => {\n try {\n const target =\n url ??\n (await client.createFileDownloadUrl(workspaceId, fileId, sessionId ? { sessionId } : {}))\n .url;\n await Linking.openURL(target);\n } catch {\n // Opening is best effort; the chip stays.\n }\n };\n const name = asset?.filename ?? t(\"native.timeline.messageAttachments.attachment\");\n const image = asset?.contentType.startsWith(\"image/\") === true && !failed;\n const { onImageReady } = props;\n useEffect(() => {\n if (image && url) onImageReady(fileId, { url, alt: name, filename: asset?.filename });\n }, [asset?.filename, fileId, image, name, onImageReady, url]);\n\n if (image) {\n return (\n <Pressable\n accessibilityRole=\"imagebutton\"\n accessibilityLabel={t(\"native.timeline.messageAttachments.openName\", { name })}\n disabled={!url}\n onPress={() => props.onOpenImage(fileId)}\n style={{\n width: PREVIEW_WIDTH,\n height: Math.min(260, Math.max(90, PREVIEW_WIDTH / ratio)),\n borderRadius: 12,\n overflow: \"hidden\",\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-2\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {url ? (\n <Image\n source={{ uri: url }}\n resizeMode=\"cover\"\n onLoad={(event) => {\n const { width, height } = event.nativeEvent.source;\n if (width > 0 && height > 0) setRatio(width / height);\n }}\n onError={() => setFailed(true)}\n style={{ width: \"100%\", height: \"100%\" }}\n />\n ) : (\n <ActivityIndicator size=\"small\" color={c[\"fg-muted\"]} />\n )}\n </Pressable>\n );\n }\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.messageAttachments.openName\", { name })}\n onPress={() => void open()}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n maxWidth: 240,\n height: 34,\n paddingHorizontal: 10,\n borderRadius: 10,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: pressed ? c.hover : c[\"surface-1\"],\n })}\n >\n <Icon name=\"file-text\" size={14} color={c[\"fg-muted\"]} />\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 500), fontSize: 13, color: c.fg, flexShrink: 1 }}\n >\n {name}\n </Text>\n </Pressable>\n );\n}\n","import type { ClientModel, Session } from \"@opengeni/sdk\";\nimport {\n SESSION_STATUS_BADGE,\n SESSION_STATUS_PRESENTATION,\n type SessionDisplayStatus,\n} from \"@opengeni/react/timeline-model\";\nimport { MODEL_MARK_PATHS, modelMarkVendor } from \"@opengeni/react/model-mark-paths\";\nimport { projectClientModelRows } from \"@opengeni/react/model-policy\";\nimport {\n recentSessionModelPresentation,\n recentSessionStatus,\n relativeTimeLabel,\n sessionDisplayTitle,\n sessionRepoLabel,\n type SessionStatusTone,\n} from \"@opengeni/react/session-list-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useEffect, useMemo } from \"react\";\nimport {\n ActionSheetIOS,\n Alert,\n Platform,\n Pressable,\n Text,\n useWindowDimensions,\n View,\n} from \"react-native\";\nimport Animated, {\n cancelAnimation,\n Easing,\n useAnimatedStyle,\n useReducedMotion,\n useSharedValue,\n withRepeat,\n withTiming,\n} from \"react-native-reanimated\";\nimport Svg, { Path } from \"react-native-svg\";\nimport { Icon } from \"./icon\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { withAlpha } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme, type WebColorToken } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The web app's session list rows at phone width (Recent sessions on the\n home canvas): status dot, title, maker mark + catalog model label, and a\n compact relative time. Ordering and labels come from the shared\n session-list model so web and native read identically.\n -------------------------------------------------------------------------- */\n\nconst TONE_COLOR: Record<SessionStatusTone, WebColorToken> = {\n queued: \"status-queued\",\n running: \"status-running\",\n waiting: \"status-waiting\",\n idle: \"status-idle\",\n failed: \"status-failed\",\n cancelled: \"status-cancelled\",\n};\n\n/** The web StatusDot: an 8pt dot with a gentle pulse for live states. */\nexport function StatusDot({\n tone,\n pulse,\n size = 8,\n}: {\n tone: SessionStatusTone;\n pulse?: boolean;\n size?: number;\n}) {\n const theme = useNativeTimelineTheme();\n const reduceMotion = useReducedMotion();\n const opacity = useSharedValue(1);\n useEffect(() => {\n if (!pulse || reduceMotion) {\n cancelAnimation(opacity);\n opacity.value = 1;\n return;\n }\n // Tailwind animate-pulse: 2s, cubic-bezier(0.4, 0, 0.6, 1), 1 → 0.5 → 1.\n opacity.value = withRepeat(\n withTiming(0.5, { duration: 1000, easing: Easing.bezier(0.4, 0, 0.6, 1) }),\n -1,\n true,\n );\n return () => cancelAnimation(opacity);\n }, [opacity, pulse, reduceMotion]);\n const style = useAnimatedStyle(() => ({ opacity: opacity.value }));\n return (\n <Animated.View\n accessibilityElementsHidden\n importantForAccessibility=\"no\"\n style={[\n {\n width: size,\n height: size,\n borderRadius: size / 2,\n backgroundColor: theme.colors[TONE_COLOR[tone]],\n },\n style,\n ]}\n />\n );\n}\n\n/** The model maker's logo (OpenAI, Claude, Grok) with the web's neutral fallback. */\nexport function ModelMark({\n model,\n size = 12,\n color,\n}: {\n model: string;\n size?: number;\n color: string;\n}) {\n const vendor = modelMarkVendor(model);\n if (!vendor) return <Icon name=\"sparkles\" size={size} color={color} />;\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" accessibilityElementsHidden>\n <Path d={MODEL_MARK_PATHS[vendor]} fill={color} />\n </Svg>\n );\n}\n\nexport interface SessionRowProps {\n session: Session;\n /** The deployment's client model catalog, for catalog labels. */\n models: readonly ClientModel[];\n onPress: () => void;\n /**\n * Pin or unpin this chat for the person (the same personal pin as the web).\n * When set, a long press offers Pin or Unpin, and so does an accessibility action.\n */\n onTogglePin?: (() => void) | undefined;\n /** The workspace the chat lives in, when it is not the one on screen (search results). */\n workspaceName?: string | undefined;\n now?: Date | undefined;\n}\n\n/** One recent-session row, as the web home canvas renders it. */\nexport function SessionRow({\n session,\n models,\n onPress,\n onTogglePin,\n workspaceName,\n now,\n}: SessionRowProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const t = useOpenGeniText();\n const rows = useMemo(() => projectClientModelRows(t, [...models]), [t, models]);\n const title = sessionDisplayTitle(session);\n const status = recentSessionStatus(session);\n const model = recentSessionModelPresentation(session.model, rows);\n const repo = sessionRepoLabel(session);\n const meta = [model.label, repo].filter(Boolean).join(\" · \");\n const metaStyle = {\n ...fontStyle(theme, 400),\n fontSize: 11,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n };\n const pinned = Boolean(session.pinned);\n const pinLabel = pinned ? m.unpin : m.pin;\n const offerPin = () => {\n if (!onTogglePin) return;\n if (Platform.OS === \"ios\") {\n ActionSheetIOS.showActionSheetWithOptions(\n {\n title,\n options: [pinLabel, t(\"native.timeline.sessionList.cancel\")],\n cancelButtonIndex: 1,\n },\n (index) => {\n if (index === 0) onTogglePin();\n },\n );\n return;\n }\n Alert.alert(title, undefined, [\n { text: pinLabel, onPress: onTogglePin },\n { text: t(\"native.timeline.sessionList.cancel\"), style: \"cancel\" },\n ]);\n };\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={[title, pinned ? m.pinned : null, workspaceName ?? null]\n .filter(Boolean)\n .join(\", \")}\n accessibilityActions={onTogglePin ? [{ name: \"pin\", label: pinLabel }] : undefined}\n onAccessibilityAction={(event) => {\n if (event.nativeEvent.actionName === \"pin\") onTogglePin?.();\n }}\n onPress={onPress}\n onLongPress={onTogglePin ? offerPin : undefined}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n paddingHorizontal: 4,\n paddingVertical: 10,\n borderRadius: theme.radius.md,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <StatusDot tone={status.tone} pulse={status.pulse} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 400), fontSize: 14, lineHeight: 20, color: c.fg }}\n >\n {title}\n </Text>\n {meta || workspaceName ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6, marginTop: 2 }}>\n {workspaceName ? (\n <>\n <Icon name=\"folder\" size={11} color={c[\"fg-muted\"]} />\n <Text\n numberOfLines={1}\n style={{ ...metaStyle, color: c[\"fg-muted\"], flexShrink: 2 }}\n >\n {workspaceName}\n </Text>\n {meta ? <Text style={metaStyle}>·</Text> : null}\n </>\n ) : null}\n {meta ? (\n <>\n <ModelMark model={session.model} size={12} color={c[\"fg-muted\"]} />\n <Text numberOfLines={1} style={{ ...metaStyle, flexShrink: 1 }}>\n {meta}\n </Text>\n </>\n ) : null}\n </View>\n ) : null}\n </View>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 4 }}>\n {pinned ? <Icon name=\"pin\" size={11} color={c[\"fg-subtle\"]} /> : null}\n <Text\n style={{\n ...fontStyle(theme, 400),\n fontSize: 11,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {relativeTimeLabel(t, session.updatedAt, now)}\n </Text>\n </View>\n </Pressable>\n );\n}\n\n/** A small-caps section label (web: text-2xs semibold uppercase tracking-wider). */\nexport function SectionLabel({ children }: { children: string }) {\n const theme = useNativeTimelineTheme();\n return (\n <Text\n accessibilityRole=\"header\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: 11,\n lineHeight: 16,\n letterSpacing: 0.55,\n textTransform: \"uppercase\",\n color: theme.colors.fg,\n paddingHorizontal: 2,\n marginBottom: 6,\n }}\n >\n {children}\n </Text>\n );\n}\n\n/** The web's divided list: rows separated by a hairline in border/60. */\nexport function SessionRowList(props: {\n sessions: readonly Session[];\n models: readonly ClientModel[];\n onOpen: (sessionId: string) => void;\n /** Pin or unpin a chat from its row (long press); omitted, rows offer no pin. */\n onTogglePin?: ((session: Session) => void) | undefined;\n /** Labels rows from another workspace with that workspace's name. */\n workspaceNameOf?: ((session: Session) => string | undefined) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <View>\n {props.sessions.map((session, index) => (\n <View\n key={session.id}\n style={\n index > 0\n ? {\n borderTopWidth: 1,\n borderColor: theme.colors.border,\n borderTopColor: withAlpha(theme.colors.border, 0.6),\n }\n : undefined\n }\n >\n <SessionRow\n session={session}\n models={props.models}\n onPress={() => props.onOpen(session.id)}\n onTogglePin={props.onTogglePin ? () => props.onTogglePin?.(session) : undefined}\n workspaceName={props.workspaceNameOf?.(session)}\n />\n </View>\n ))}\n </View>\n );\n}\n\n/** The web session status badge: tinted pill, breathing dot for live states. */\nexport function SessionStatusBadge({\n status,\n label,\n}: {\n status: SessionDisplayStatus;\n label?: string;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const t = useOpenGeniText();\n const presentation = SESSION_STATUS_PRESENTATION(t)[status];\n const badge = SESSION_STATUS_BADGE[status];\n const color = (token: string) => c[token as WebColorToken] ?? c[\"fg-muted\"];\n return (\n <View\n accessibilityRole=\"text\"\n accessibilityLabel={`Status: ${label ?? presentation.label}`}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 999,\n borderWidth: 1,\n borderColor: withAlpha(color(badge.border), badge.borderAlpha),\n backgroundColor: withAlpha(color(badge.fill), 0.1),\n }}\n >\n <StatusDot tone={presentation.tone} pulse={presentation.pulse} size={6} />\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: 12, lineHeight: 16, color: color(badge.text) }}\n >\n {label ?? presentation.label}\n </Text>\n </View>\n );\n}\n\n/**\n * A native navigation-bar title for a session: the title on one line and, under\n * it, the run state as a status dot and quiet label (the web header badge's\n * information without boxing a pill inside the bar's glass).\n */\nexport function SessionHeaderTitle({\n title,\n status,\n statusLabel,\n align = Platform.OS === \"ios\" ? \"center\" : \"left\",\n sideInset = 116,\n}: {\n title: string;\n /** The display status: pass `blocked` for an admission-blocked session. */\n status: SessionDisplayStatus | null;\n /** Override the label (\"Paused\" for a paused workstream). */\n statusLabel?: string | undefined;\n align?: \"center\" | \"left\";\n /**\n * Room kept clear on each side of a centered title: the wider of the bar's\n * leading and trailing buttons plus their margin (a back button and a\n * two-button pill take about 116pt), so a long title truncates instead of\n * running under them.\n */\n sideInset?: number | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const t = useOpenGeniText();\n const viewport = useWindowDimensions();\n const presentation = status ? SESSION_STATUS_PRESENTATION(t)[status] : null;\n // A settled, idle session needs no status line: the title stands alone, as in\n // native messaging apps. Running, waiting, paused and failed states still say so.\n const label = statusLabel ?? (status === \"idle\" ? undefined : presentation?.label);\n // Live and attention states take their status colour; settled ones stay quiet.\n const emphasized =\n presentation?.tone === \"running\" ||\n presentation?.tone === \"waiting\" ||\n presentation?.tone === \"failed\";\n return (\n <View\n accessible\n accessibilityRole=\"header\"\n accessibilityLabel={label ? `${title}, ${label}` : title}\n // iOS sizes a custom title view once, often before the session (and its\n // title) has loaded; a fixed width keeps a late title from collapsing to\n // \"H…\". Centered, it stays clear of the wider side's buttons on both sides.\n style={\n align === \"center\"\n ? {\n alignItems: \"center\",\n width: Math.max(120, Math.min(260, viewport.width - 2 * sideInset)),\n }\n : { alignItems: \"flex-start\", maxWidth: 240 }\n }\n >\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 600), fontSize: 16, lineHeight: 20, color: c.fg }}\n >\n {title}\n </Text>\n {presentation && label ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 5, marginTop: 1 }}>\n <StatusDot tone={presentation.tone} pulse={presentation.pulse} size={6} />\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: 12,\n lineHeight: 15,\n color: emphasized ? c[TONE_COLOR[presentation.tone]] : c[\"fg-muted\"],\n }}\n >\n {label}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n","import type { ClientModel, LineageNode, SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport type { UseGoalResult } from \"@opengeni/react/session\";\nimport { sessionAgentsSignal, sessionGoalStateLabel } from \"@opengeni/react/session-agents-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\nimport { ActivityIndicator, Pressable, ScrollView, Text, View, type TextStyle } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { SessionRow } from \"./session-list\";\nimport { BottomSheet } from \"./sheet\";\nimport { fontStyle, useNativeTimelineTheme, type NativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\n\n/** True where the signals share their row (beside the queue): icon chips only. */\nexport const CompactSignalsContext = createContext(false);\n\n/* ----------------------------------------------------------------------------\n The web session chrome's goal, agents and commands segments: one row of\n quiet chips above the composer, each opening its panel as a sheet. A chip\n appears only when there is something to show.\n -------------------------------------------------------------------------- */\n\nexport interface SessionCommandsSource {\n commands: SessionBackgroundCommand[];\n loading: boolean;\n error: Error | null;\n cancel: (commandId: string) => Promise<void>;\n}\n\nexport function SessionSignals(props: {\n goal?: UseGoalResult | null | undefined;\n agents: readonly LineageNode[];\n commandsCount: number;\n /** Mounted only while the commands sheet is open, so a closed chip never polls. */\n renderCommands: (close: () => void) => ReactNode;\n onOpenSession?: ((sessionId: string) => void) | undefined;\n models?: readonly ClientModel[] | undefined;\n readOnly?: boolean | undefined;\n}) {\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n // Beside the queue the row is shared: chips keep only their icon, count and dot.\n const compact = useContext(CompactSignalsContext);\n const [open, setOpen] = useState<\"goal\" | \"agents\" | \"commands\" | null>(null);\n const goal = props.goal?.goal ?? null;\n const agents = sessionAgentsSignal(t, props.agents);\n if (!goal && !agents && props.commandsCount === 0) return null;\n const close = () => setOpen(null);\n return (\n <>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ gap: 6, alignItems: \"center\" }}\n style={{ flexGrow: 0, flexShrink: 1 }}\n >\n {goal ? (\n <Chip\n icon=\"target\"\n label={m.goal}\n detail={sessionGoalStateLabel(t, goal)}\n tone={goal.status === \"active\" ? \"running\" : \"neutral\"}\n compact={compact}\n onPress={() => setOpen(\"goal\")}\n />\n ) : null}\n {agents ? (\n <Chip\n icon=\"bot\"\n label={t(\"counts.agents\", { count: agents.count })}\n count={agents.count}\n detail={agents.detail}\n tone={agents.tone}\n compact={compact}\n onPress={() => setOpen(\"agents\")}\n />\n ) : null}\n {props.commandsCount > 0 ? (\n <Chip\n icon=\"terminal\"\n label={t(\"counts.commands\", { count: props.commandsCount })}\n count={props.commandsCount}\n detail={m.running}\n tone=\"running\"\n compact={compact}\n onPress={() => setOpen(\"commands\")}\n />\n ) : null}\n </ScrollView>\n\n <BottomSheet open={open === \"goal\"} onClose={close} accessibilityLabel={m.goal}>\n {goal && props.goal ? <GoalPanel goal={props.goal} readOnly={props.readOnly} /> : null}\n </BottomSheet>\n <BottomSheet open={open === \"agents\"} onClose={close} accessibilityLabel={m.agents}>\n <SheetTitle>{m.agents}</SheetTitle>\n <ScrollView style={{ paddingHorizontal: 12 }}>\n {props.agents.map((node) => (\n <View key={node.session.id}>\n <SessionRow\n session={node.session}\n models={props.models ?? []}\n onPress={() => {\n close();\n props.onOpenSession?.(node.session.id);\n }}\n />\n {node.children.map((child) => (\n <View key={child.session.id} style={{ paddingLeft: 18 }}>\n <SessionRow\n session={child.session}\n models={props.models ?? []}\n onPress={() => {\n close();\n props.onOpenSession?.(child.session.id);\n }}\n />\n </View>\n ))}\n </View>\n ))}\n </ScrollView>\n </BottomSheet>\n <BottomSheet open={open === \"commands\"} onClose={close} accessibilityLabel={m.commands}>\n <SheetTitle>{m.commands}</SheetTitle>\n {open === \"commands\" ? props.renderCommands(close) : null}\n </BottomSheet>\n </>\n );\n}\n\nfunction Chip(props: {\n icon: NativeIconName;\n label: string;\n count?: number | undefined;\n detail: string;\n tone: \"running\" | \"waiting\" | \"neutral\";\n compact?: boolean | undefined;\n onPress: () => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const toneColor =\n props.tone === \"running\"\n ? c[\"status-running\"]\n : props.tone === \"waiting\"\n ? c[\"status-waiting\"]\n : c[\"fg-subtle\"];\n // Compact on the phone: the status reads from the dot (and the sheet); the\n // word stays in the accessibility label. 30pt tall, 44pt to touch.\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`${props.label}, ${props.detail}`}\n onPress={props.onPress}\n hitSlop={{ top: 7, bottom: 7, left: 3, right: 3 }}\n style={({ pressed }) => [\n signalChipStyle(theme, pressed),\n props.compact ? { paddingHorizontal: 9, gap: 4 } : null,\n ]}\n >\n <Icon name={props.icon} size={13} color={c[\"fg-muted\"]} />\n {props.compact ? (\n props.count !== undefined ? (\n <Text style={signalChipText(theme)}>{props.count}</Text>\n ) : null\n ) : (\n <Text style={signalChipText(theme)}>{props.label}</Text>\n )}\n <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: toneColor }} />\n </Pressable>\n );\n}\n\nfunction SheetTitle({ children }: { children: string }) {\n const theme = useNativeTimelineTheme();\n return (\n <Text\n accessibilityRole=\"header\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: 17,\n color: theme.colors.fg,\n paddingHorizontal: 20,\n paddingBottom: 8,\n }}\n >\n {children}\n </Text>\n );\n}\n\nfunction GoalPanel({ goal, readOnly }: { goal: UseGoalResult; readOnly?: boolean | undefined }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n const c = theme.colors;\n const record = goal.goal!;\n const body = { ...fontStyle(theme, 400), fontSize: 15, lineHeight: 22, color: c.fg };\n const label = { ...fontStyle(theme, 600), fontSize: 12, color: c[\"fg-subtle\"] };\n return (\n <ScrollView contentContainerStyle={{ paddingHorizontal: 20, paddingBottom: 12, gap: 14 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Text style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}>{m.goal}</Text>\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c[\"fg-muted\"] }}>\n {sessionGoalStateLabel(t, record)}\n </Text>\n </View>\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.objective\")}</Text>\n <Text style={body} selectable>\n {record.text}\n </Text>\n </View>\n {record.successCriteria ? (\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.doneWhen\")}</Text>\n <Text style={body} selectable>\n {record.successCriteria}\n </Text>\n </View>\n ) : null}\n {record.status === \"paused\" && record.rationale ? (\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.whyItPaused\")}</Text>\n <Text style={body}>{record.rationale}</Text>\n </View>\n ) : null}\n {record.status === \"completed\" && record.evidence ? (\n <View style={{ gap: 4 }}>\n <Text style={label}>{t(\"native.timeline.sessionSignals.evidence\")}</Text>\n <Text style={body}>{record.evidence}</Text>\n </View>\n ) : null}\n {!readOnly && record.status !== \"completed\" ? (\n <View style={{ flexDirection: \"row\", gap: 8 }}>\n {record.status === \"active\" ? (\n <Button\n label={m.pauseGoal}\n icon=\"pause\"\n busy={goal.updating}\n onPress={() => void goal.pause()}\n />\n ) : (\n <Button\n label={m.resumeGoal}\n icon=\"play\"\n variant=\"primary\"\n busy={goal.updating}\n onPress={() => void goal.resume()}\n />\n )}\n </View>\n ) : null}\n {goal.mutationError ? (\n <Text style={{ ...body, color: c[\"status-failed\"] }}>{goal.mutationError.message}</Text>\n ) : null}\n </ScrollView>\n );\n}\n\n/** The web commands panel: each running command with its state and a Stop action. */\nexport function SessionCommandsList({\n commands,\n readOnly,\n}: {\n commands: SessionCommandsSource;\n readOnly?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n if (commands.loading && commands.commands.length === 0) {\n return <ActivityIndicator style={{ padding: 24 }} />;\n }\n if (commands.commands.length === 0) {\n return (\n <Text style={{ ...fontStyle(theme, 400), color: c[\"fg-muted\"], padding: 20 }}>\n {t(\"native.timeline.sessionSignals.noCommandsAreRunning\")}\n </Text>\n );\n }\n return (\n <ScrollView contentContainerStyle={{ paddingHorizontal: 16, gap: 8, paddingBottom: 12 }}>\n {commands.commands.map((command) => {\n const running = command.state === \"running\";\n return (\n <View\n key={command.id}\n style={{\n gap: 6,\n padding: 12,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Text\n numberOfLines={3}\n style={{ ...fontStyle(theme, 400, \"mono\"), fontSize: 13, color: c.fg }}\n >\n {`$ ${command.commandPreview}`}\n </Text>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Text\n style={{ ...fontStyle(theme, 400), fontSize: 12, color: c[\"fg-muted\"], flex: 1 }}\n >\n {command.provider === \"connected_machine\" ? m.onMachine : m.inSandbox} ·{\" \"}\n {command.state === \"stopping\" ? m.stopping : running ? m.running : m.finished}\n </Text>\n {running && !readOnly ? (\n <Button\n label={m.stop}\n icon=\"square\"\n size=\"sm\"\n onPress={() => void commands.cancel(command.id)}\n />\n ) : null}\n </View>\n </View>\n );\n })}\n </ScrollView>\n );\n}\n\n/** The compact signal chip shared by goal, agents, commands and the queue. */\nexport function signalChipStyle(theme: NativeTimelineTheme, pressed: boolean) {\n return {\n flexDirection: \"row\" as const,\n alignItems: \"center\" as const,\n gap: 5,\n height: 30,\n paddingHorizontal: 10,\n borderRadius: 15,\n backgroundColor: pressed ? theme.colors.hover : theme.colors[\"surface-2\"],\n };\n}\n\nexport function signalChipText(theme: NativeTimelineTheme): TextStyle {\n return { ...fontStyle(theme, 500), fontSize: 13, color: theme.colors.fg };\n}\n","import type { ComposerDraft, SessionTurn } from \"@opengeni/sdk\";\nimport type { useTurnQueue } from \"@opengeni/react/session\";\nimport {\n isAuthoritativeQueuedTurn,\n QUEUE_ITEM_CONTENT_UNAVAILABLE,\n QUEUE_REPLACE_DRAFT_COPY,\n queueItemContent,\n queuedTurnPresentation,\n queueNeighborAnchors,\n} from \"@opengeni/react/queue-presentation-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useMemo, useState, type ReactNode } from \"react\";\nimport { ActivityIndicator, Pressable, Text, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { blendOver, withAlpha } from \"./primitives\";\nimport { CompactSignalsContext } from \"./session-signals\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport type { NativeAnnotationLike } from \"./annotations\";\n\n/* ----------------------------------------------------------------------------\n The web session-chrome queue dock above the composer: a \"N queued · Steer\"\n chip, then each waiting prompt on one line with Move up/down, Steer, Edit\n (back into the composer, confirming before it replaces a draft) and Remove.\n Which turns count, their text and the move anchors are the shared queue\n model. Under one Send (`singleSend`) waiting messages offer no Steer.\n -------------------------------------------------------------------------- */\n\ntype TurnQueue = ReturnType<typeof useTurnQueue>;\n\n/** The composer surface the dock checks prompts out into. */\nexport interface QueueDockComposer {\n draftRevision: number;\n hasDraftContent: () => boolean;\n applyDraft: (draft: ComposerDraft) => void;\n draftPersistence?: \"durable\" | \"disabled\" | undefined;\n}\n\nexport function QueueDock({\n queue,\n composer,\n onComposerFocus,\n onReviewAnnotations,\n leading,\n singleSend = false,\n}: {\n queue: TurnQueue;\n composer?: QueueDockComposer | undefined;\n onComposerFocus?: (() => void) | undefined;\n /** Show a waiting message's quotes and notes. */\n onReviewAnnotations?: ((annotations: readonly NativeAnnotationLike[]) => void) | undefined;\n /** Chips sharing the queue chip's row (goal, agents, commands). */\n leading?: ReactNode;\n /** One Send and nothing to choose: no Steer on waiting messages. */\n singleSend?: boolean | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [open, setOpen] = useState(true);\n const t = useOpenGeniText();\n const [replaceDraftFor, setReplaceDraftFor] = useState<string | null>(null);\n const turns = useMemo(\n () => queue.queue.filter((turn) => isAuthoritativeQueuedTurn(turn, queue.mutationFor)),\n [queue.mutationFor, queue.queue],\n );\n // A failed queue action stays visible until tapped, whether or not prompts\n // are queued (a Steer is never a queue row).\n const mutationError = queue.mutationError ? (\n <Pressable accessibilityRole=\"alert\" onPress={queue.clearMutationError}>\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"status-failed\"] }}>\n {queue.mutationError.message}\n </Text>\n </Pressable>\n ) : null;\n if (turns.length === 0) {\n if (!mutationError) {\n return leading ? <View style={{ flexDirection: \"row\" }}>{leading}</View> : null;\n }\n return (\n <View style={{ gap: 6 }}>\n {leading ? <View style={{ flexDirection: \"row\" }}>{leading}</View> : null}\n {mutationError}\n </View>\n );\n }\n const first = turns[0]!;\n // The compact signal chip text (goal, agents and the queue share one row).\n const small = { ...fontStyle(theme, 500), fontSize: 13, color: c.fg };\n const canEdit = composer !== undefined && composer.draftPersistence !== \"disabled\";\n const checkout = async (turnId: string, replaceDraft: boolean) => {\n if (!composer) return;\n const draft = await queue.editTurn(turnId, {\n expectedDraftRevision: composer.draftRevision,\n replaceDraft,\n });\n if (draft) {\n composer.applyDraft(draft);\n onComposerFocus?.();\n }\n };\n const edit = (turn: SessionTurn) => {\n if (!composer) return;\n if (composer.hasDraftContent()) setReplaceDraftFor(turn.id);\n else void checkout(turn.id, false);\n };\n return (\n <View style={{ gap: 6 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6 }}>\n <CompactSignalsContext.Provider value={true}>{leading}</CompactSignalsContext.Provider>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n height: 30,\n borderRadius: 15,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n accessibilityLabel={t(\"counts.queuedPrompts\", { count: turns.length })}\n onPress={() => setOpen((value) => !value)}\n hitSlop={{ top: 7, bottom: 7 }}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 5,\n height: 30,\n paddingLeft: 10,\n paddingRight: 6,\n }}\n >\n <Icon name=\"list-ordered\" size={13} color={c[\"fg-muted\"]} />\n <Text style={small}>{t(\"sessionChrome.queuedCount\", { count: turns.length })}</Text>\n </Pressable>\n {singleSend ? (\n <View style={{ width: 4 }} />\n ) : (\n <>\n <View style={{ width: 1, height: 14, backgroundColor: c.border }} />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.steerFirstQueued}\n disabled={queue.mutating || queue.mutationFor(first.id) !== null}\n onPress={() => void queue.steerTurn(first.id)}\n hitSlop={{ top: 7, bottom: 7 }}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n height: 30,\n paddingLeft: 6,\n paddingRight: 10,\n }}\n >\n <Icon name=\"corner-down-right\" size={13} color={c[\"fg-muted\"]} />\n <Text style={small}>{m.steer}</Text>\n </Pressable>\n </>\n )}\n </View>\n </View>\n {open ? (\n <View\n accessibilityLabel={m.queuedPrompts}\n style={{\n borderRadius: theme.radius.lg,\n // Opaque: the dock floats over scrolling conversation.\n backgroundColor: blendOver(c.bg, c[\"surface-2\"], 0.6),\n paddingHorizontal: 8,\n paddingVertical: 2,\n }}\n >\n {turns.map((turn, index) => {\n const presentation = queuedTurnPresentation(t, turn);\n const voice = presentation.kind !== \"prompt\";\n const pending = queue.mutationFor(turn.id);\n const busy = pending !== null;\n const { beforeUp, beforeDown } = queueNeighborAnchors(turns, index);\n const annotationCount = turn.annotations?.length ?? 0;\n const content = queueItemContent(presentation.text, annotationCount);\n const label =\n content === \"text\"\n ? presentation.text\n : content === \"annotations\"\n ? t(\"counts.timelineAnnotations\", { count: annotationCount })\n : QUEUE_ITEM_CONTENT_UNAVAILABLE(t);\n return (\n <View key={turn.id} style={{ gap: 4 }}>\n <View\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6, paddingLeft: 6 }}\n >\n {voice ? (\n <Icon name=\"audio-lines\" size={12} color={c.accent} />\n ) : (\n <Text\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: 10,\n color: c[\"fg-subtle\"],\n }}\n >\n {index + 1}\n </Text>\n )}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: content === \"unavailable\" ? c[\"fg-muted\"] : c.fg,\n fontStyle: content === \"unavailable\" ? \"italic\" : \"normal\",\n }}\n >\n {label}\n </Text>\n {annotationCount > 0 && onReviewAnnotations ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"timelineAnnotations.reviewCountlabel\", {\n countLabel: t(\"counts.annotations\", { count: annotationCount }),\n })}\n hitSlop={8}\n onPress={() => onReviewAnnotations(turn.annotations ?? [])}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 3,\n height: 22,\n paddingHorizontal: 7,\n borderRadius: 11,\n backgroundColor: c[\"accent-soft\"],\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <Icon name=\"quote\" size={10} color={c[\"fg-muted\"]} />\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: 11,\n color: c[\"fg-muted\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {annotationCount}\n </Text>\n </Pressable>\n ) : null}\n {turns.length > 1 ? (\n <>\n <RowAction\n icon=\"arrow-up\"\n label={t(\"sessionChrome.moveQueuedPromptIndexUp\", { index: index + 1 })}\n disabled={busy || index === 0}\n onPress={() => void queue.moveTurn(turn.id, beforeUp)}\n />\n <RowAction\n icon=\"arrow-down\"\n label={t(\"sessionChrome.moveQueuedPromptIndexDown\", { index: index + 1 })}\n disabled={busy || index >= turns.length - 1}\n onPress={() => void queue.moveTurn(turn.id, beforeDown)}\n />\n </>\n ) : null}\n {singleSend ? null : (\n <RowAction\n icon=\"corner-down-right\"\n label={t(\"sessionChrome.steerQueuedPromptIndex\", { index: index + 1 })}\n disabled={busy}\n busy={pending === \"steer\"}\n onPress={() => void queue.steerTurn(turn.id)}\n />\n )}\n {canEdit ? (\n <RowAction\n icon=\"pencil\"\n label={t(\"sessionChrome.editQueuedPromptIndex\", { index: index + 1 })}\n disabled={busy}\n busy={pending === \"edit\"}\n onPress={() => edit(turn)}\n />\n ) : null}\n <RowAction\n icon=\"trash-2\"\n label={t(\"sessionChrome.removeQueuedPromptIndex\", { index: index + 1 })}\n disabled={busy}\n busy={pending === \"delete\"}\n onPress={() => void queue.removeTurn(turn.id)}\n />\n </View>\n {replaceDraftFor === turn.id ? (\n <View\n style={{\n gap: 4,\n padding: 8,\n marginBottom: 4,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: withAlpha(c[\"status-waiting\"], 0.3),\n backgroundColor: withAlpha(c[\"status-waiting\"], 0.1),\n }}\n >\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c.fg }}>\n {QUEUE_REPLACE_DRAFT_COPY(t).title}\n </Text>\n <Text\n style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"fg-muted\"] }}\n >\n {QUEUE_REPLACE_DRAFT_COPY(t).detail}\n </Text>\n <View\n style={{\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n gap: 6,\n marginTop: 4,\n }}\n >\n <Button\n label={QUEUE_REPLACE_DRAFT_COPY(t).keep}\n variant=\"ghost\"\n onPress={() => setReplaceDraftFor(null)}\n />\n <Button\n label={QUEUE_REPLACE_DRAFT_COPY(t).replace}\n variant=\"primary\"\n onPress={() => {\n setReplaceDraftFor(null);\n void checkout(turn.id, true);\n }}\n />\n </View>\n </View>\n ) : null}\n </View>\n );\n })}\n </View>\n ) : null}\n {mutationError}\n </View>\n );\n}\n\n/** A web IconAction at touch size: icon, optional text, a spinner while busy. */\nfunction RowAction(props: {\n icon: NativeIconName;\n label: string;\n text?: string | undefined;\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n onPress: () => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={props.label}\n accessibilityState={{ disabled: Boolean(props.disabled), busy: Boolean(props.busy) }}\n disabled={props.disabled}\n onPress={props.onPress}\n hitSlop={{ top: 6, bottom: 6, left: 2, right: 2 }}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n minWidth: 30,\n height: 32,\n paddingHorizontal: props.text ? 6 : 0,\n borderRadius: theme.radius.sm,\n backgroundColor: pressed ? c.hover : \"transparent\",\n opacity: props.disabled && !props.busy ? 0.4 : 1,\n })}\n >\n {props.busy ? (\n <ActivityIndicator size=\"small\" color={c[\"fg-muted\"]} />\n ) : (\n <Icon name={props.icon} size={14} color={c.fg} />\n )}\n {props.text ? (\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c.fg }}>\n {props.text}\n </Text>\n ) : null}\n </Pressable>\n );\n}\n","import { NativeTimelineMessagesProvider, type NativeTimelineMessages } from \"./messages\";\nimport {\n conversationTimeline,\n personalMachineCopy,\n useSessionStart,\n type AgentMessageItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport { machineDisplayName } from \"@opengeni/react/sandbox-label-model\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n ActivityIndicator,\n Alert,\n Image,\n Pressable,\n Text,\n View,\n type TextInput,\n} from \"react-native\";\nimport { annotationHasNote } from \"@opengeni/react/timeline-model\";\nimport {\n defaultChatComposerMessages,\n type ChatComposerMessages,\n} from \"@opengeni/react/composer-messages\";\nimport { Icon } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport type { OpenGeniNativeSessionController } from \"../use-native-session\";\nimport type { NativeFileAttachmentsResult } from \"../attachments\";\nimport { SessionComposer, type SessionComposerProps } from \"./composer\";\nimport { TurnFeedbackButtons, useTurnRatings, type TurnFeedbackTarget } from \"./feedback\";\nimport { Button } from \"./controls\";\nimport {\n ApprovalStrip,\n HumanInputCard,\n type ApprovalStripProps,\n type HumanInputCardProps,\n} from \"./decisions\";\nimport { NativeMessageAttachments } from \"./message-attachments\";\nimport { QueueDock } from \"./queue-dock\";\nimport {\n AnnotationsChip,\n AnnotationsSheet,\n type AnnotationReveal,\n type NativeAnnotationLike,\n} from \"./annotations\";\nimport { SessionCommandsList, SessionSignals } from \"./session-signals\";\nimport type { ClientModel, OpenGeniClient, Session, SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport { MessageTimeline, type NativeMessageTimelineProps } from \"./message-timeline\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { SingleSendWording, useOpenGeniText } from \"@opengeni/react/messages\";\n\n/* ----------------------------------------------------------------------------\n The web session page body at phone width: timeline (with the question card\n as its trailing state), the live approval strip and the composer, driven by\n the shared session controller. Navigation chrome belongs to the host.\n -------------------------------------------------------------------------- */\n\nexport interface NativeSessionScreenProps extends Omit<\n NativeMessageTimelineProps,\n \"items\" | \"events\" | \"status\" | \"trailing\"\n> {\n controller: OpenGeniNativeSessionController;\n /** Composer slots (products add their own actions/options here). */\n composer?:\n | Partial<\n Pick<\n SessionComposerProps,\n | \"renderLeading\"\n | \"options\"\n | \"header\"\n | \"placeholder\"\n | \"onAttach\"\n | \"messages\"\n | \"onActionFeedback\"\n | \"voice\"\n | \"call\"\n >\n >\n | undefined;\n /** Extra content after the question card (host recovery, banners). */\n trailing?: ReactNode;\n /** Fixed host chrome above the timeline, inside the keyboard-avoiding area. */\n topBar?: ReactNode;\n bottomInset?: number | undefined;\n /** Distance from this screen's bottom edge to the window bottom (e.g. a tab bar). */\n keyboardBottomOffset?: number | undefined;\n /** Reply feedback (thumbs beside Copy), as the web timeline offers it. */\n feedback?: TurnFeedbackTarget | undefined;\n /** Translations for the question card (the shared human-input catalog). */\n humanInputMessages?: HumanInputCardProps[\"messages\"];\n /** Translations for the approval strip. */\n approvalMessages?: ApprovalStripProps[\"messages\"];\n /** Reads the commands panel (the full client; omit to hide command details). */\n client?: OpenGeniClient | undefined;\n /** Model catalog for the agents panel rows. */\n models?: readonly ClientModel[] | undefined;\n /** Translations for the strings the native surfaces draw (merged over any provider above). */\n timelineMessages?: Partial<NativeTimelineMessages> | undefined;\n /**\n * Draw the composer yourself. Receives exactly the props the shared\n * `SessionComposer` would get (queue dock, approvals and attachment chips\n * included), so a host can restyle it or render its own native composer.\n * A floating composer must report its height through `onHeightChange`.\n */\n renderComposer?: ((props: SessionComposerProps) => ReactNode) | undefined;\n}\n\nexport function NativeSessionScreen({\n controller,\n composer: composerSlots,\n trailing,\n topBar,\n bottomInset,\n keyboardBottomOffset,\n feedback,\n humanInputMessages,\n approvalMessages,\n client,\n models,\n timelineMessages,\n renderComposer,\n renderMessageActions: hostMessageActions,\n ...timelineProps\n}: NativeSessionScreenProps) {\n // One Send (`busySend: \"steer\"` without `offerQueue`): waiting messages,\n // not a queue, and no Steer to learn.\n return (\n <SingleSendWording enabled={controller.composer.singleSend === true}>\n <NativeTimelineMessagesProvider messages={timelineMessages}>\n <SessionScreenBody\n controller={controller}\n composer={composerSlots}\n trailing={trailing}\n topBar={topBar}\n bottomInset={bottomInset}\n keyboardBottomOffset={keyboardBottomOffset}\n feedback={feedback}\n humanInputMessages={humanInputMessages}\n approvalMessages={approvalMessages}\n client={client}\n models={models}\n renderComposer={renderComposer}\n renderMessageActions={hostMessageActions}\n {...timelineProps}\n />\n </NativeTimelineMessagesProvider>\n </SingleSendWording>\n );\n}\n\nfunction SessionScreenBody({\n controller,\n composer: composerSlots,\n trailing,\n topBar,\n bottomInset,\n keyboardBottomOffset,\n feedback,\n humanInputMessages,\n approvalMessages,\n client,\n models,\n renderComposer,\n renderMessageActions: hostMessageActions,\n ...timelineProps\n}: Omit<NativeSessionScreenProps, \"timelineMessages\">) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const m = useNativeTimelineMessages();\n const { composer, queue, humanInput, approvals, control, attachments } = controller;\n const composerInput = useRef<ComponentRef<typeof TextInput>>(null);\n const annotationReveal = useRef<AnnotationReveal | null>(null);\n const draftAnnotations = composer.annotations ?? [];\n const annotationsIncomplete = draftAnnotations.some(\n (annotation) => annotation.note.trim().length === 0,\n );\n const reviewTargetId = composer.annotationReviewTargetId ?? null;\n const [reviewOpen, setReviewOpen] = useState(false);\n // A new quote, a marker tap or a send with an empty note opens its note.\n useEffect(() => {\n if (reviewTargetId) setReviewOpen(true);\n }, [reviewTargetId]);\n const closeReview = useCallback(() => {\n setReviewOpen(false);\n composer.clearAnnotationReviewTarget?.();\n }, [composer]);\n const [queuedReview, setQueuedReview] = useState<readonly NativeAnnotationLike[] | null>(null);\n // Each send brings the conversation back to its latest row.\n const [followLatestSignal, setFollowLatestSignal] = useState(0);\n const followLatest = useCallback(() => setFollowLatestSignal((value) => value + 1), []);\n // The composer floats over the conversation; its occupied height insets the timeline.\n const [composerHeight, setComposerHeight] = useState(120);\n const items = useMemo(\n () => conversationTimeline(controller.timeline, queue, composer),\n [controller.timeline, queue, composer],\n );\n const status = controller.sessionStatus;\n const paused = queue.effectiveControl?.state === \"paused\";\n const waitingOnInput = humanInput.requests.length > 0 && status === \"requires_action\";\n const busy = composer.sending || composer.pausing || composer.resuming;\n const { ratings, rate } = useTurnRatings(feedback);\n const failed = controller.connectionState === \"error\";\n useAutoRecover(\n failed && controller.active,\n controller.connectionState === \"live\",\n controller.refresh,\n );\n const empty = items.length === 0;\n // Web order beside Copy: reply feedback, then host actions (fork, share…).\n const renderMessageActions = useCallback(\n (item: AgentMessageItem | UserMessageItem) => {\n const host = hostMessageActions?.(item);\n if (!feedback || item.kind !== \"agent-message\" || item.streaming || !item.turnId) return host;\n const turnId = item.turnId;\n return (\n <>\n <TurnFeedbackButtons\n target={feedback}\n turnId={turnId}\n saved={ratings[turnId]}\n onRated={(sentiment) => rate(turnId, sentiment)}\n />\n {host}\n </>\n );\n },\n [feedback, hostMessageActions, rate, ratings],\n );\n return (\n <View style={{ flex: 1, backgroundColor: theme.colors.bg }}>\n {topBar}\n <MessageTimeline\n onAnnotate={composer.addAnnotation}\n draftAnnotations={composer.annotations}\n onDraftAnnotationSelect={composer.requestAnnotationReview}\n annotationRevealRef={annotationReveal}\n followLatestSignal={followLatestSignal}\n {...timelineProps}\n hasOlder={controller.hasOlder}\n loadingOlder={controller.loadingOlder}\n onLoadOlder={controller.loadOlder}\n contentInsetBottom={composerHeight + 20}\n overlayInsetBottom={composerHeight}\n renderMessageActions={feedback || hostMessageActions ? renderMessageActions : undefined}\n renderUserAttachments={\n timelineProps.renderUserAttachments ??\n (client\n ? (item) => (\n <NativeMessageAttachments\n client={client}\n workspaceId={controller.workspaceId}\n sessionId={controller.sessionId}\n resources={item.resources}\n />\n )\n : undefined)\n }\n items={items}\n status={status}\n emptyState={\n empty && failed ? (\n <LoadFailure\n message={loadFailureMessage(controller.error, m.connectionFailed)}\n onRetry={() => void controller.refresh()}\n />\n ) : empty && controller.initialLoading ? (\n <View style={{ flex: 1, alignItems: \"center\", justifyContent: \"center\", gap: 8 }}>\n <ActivityIndicator color={theme.colors[\"fg-muted\"]} />\n </View>\n ) : (\n timelineProps.emptyState\n )\n }\n trailing={\n <>\n {controller.admissionBlocked && !paused && controller.session.session ? (\n <StuckCard\n session={controller.session.session}\n busy={composer.resuming || control.controlling}\n onSessionChanged={async () => {\n await Promise.all([controller.session.refresh(), queue.refresh()]);\n }}\n />\n ) : null}\n {waitingOnInput ? (\n <HumanInputCard\n requests={humanInput.requests}\n respondingRequestId={humanInput.respondingRequestId}\n error={humanInput.mutationError?.message}\n messages={humanInputMessages}\n onSubmit={(requestId, response) =>\n humanInput.respond(requestId, response).then(() => undefined)\n }\n />\n ) : null}\n {trailing}\n </>\n }\n />\n {(renderComposer ?? renderSharedComposer)({\n floating: true,\n onHeightChange: (height) => setComposerHeight(Math.round(height)),\n onActionFeedback: composerSlots?.onActionFeedback,\n value: composer.value,\n onChangeText: composer.setValue,\n // A quote without its note cannot be sent: Send opens that note instead\n // of staying disabled with no reason given.\n onSend: () => {\n if (annotationsIncomplete) composer.requestAnnotationReview?.();\n else {\n followLatest();\n void composer.send();\n }\n },\n // The other choice beside Send while the agent works: Queue when\n // Send steers, Steer when Send queues.\n alternateSend: composer.alternateSend ?? null,\n ...(composer.sendAlternate\n ? {\n onAlternateSend: () => {\n if (annotationsIncomplete) {\n composer.requestAnnotationReview?.();\n return;\n }\n followLatest();\n void composer.sendAlternate?.();\n },\n }\n : {}),\n canSend: (composer.canSend || (annotationsIncomplete && !composer.sending)) && !busy,\n sending: composer.sending,\n running: controller.runActive,\n paused: paused,\n pauseBusy: composer.pausing || composer.resuming,\n onPause: () => void composer.pause(),\n onResume: () => void composer.resume(),\n onAttach: composerSlots?.onAttach ?? (() => void attachments.pickImages()),\n onPasteImages: (files) => void attachments.addFiles(files),\n renderLeading: composerSlots?.renderLeading,\n options: composerSlots?.options,\n placeholder: composerSlots?.placeholder,\n bottomInset: bottomInset,\n keyboardBottomOffset: keyboardBottomOffset,\n inputRef: composerInput,\n messages: composerSlots?.messages,\n voice: composerSlots?.voice,\n call: composerSlots?.call,\n below: composer.draftConflict ? (\n <DraftConflictStrip\n messages={composerSlots?.messages}\n onResolve={(choice) => void composer.resolveDraftConflict(choice)}\n />\n ) : null,\n header: (\n <>\n {composerSlots?.header}\n <AttachmentChips attachments={attachments} />\n {draftAnnotations.length > 0 && composer.removeAnnotation ? (\n <View style={{ paddingHorizontal: 12, paddingTop: 10 }}>\n <AnnotationsChip\n annotations={draftAnnotations}\n onPress={() => composer.requestAnnotationReview?.()}\n onClear={() => {\n const removeAll = () => {\n for (const annotation of draftAnnotations) {\n composer.removeAnnotation?.(annotation.id);\n }\n };\n // Bare quotes go at once; written notes are worth one confirm,\n // since the × sits right beside the chip.\n if (!draftAnnotations.some((item) => annotationHasNote(item.note))) {\n removeAll();\n return;\n }\n Alert.alert(\n t(\"native.timeline.annotations.removeAllTitle\", {\n count: draftAnnotations.length,\n }),\n t(\"native.timeline.annotations.removeAllMessage\", {\n count: draftAnnotations.filter((item) => annotationHasNote(item.note))\n .length,\n }),\n [\n { text: t(\"native.timeline.annotations.cancel\"), style: \"cancel\" },\n {\n text: t(\"native.timeline.annotations.removeAllConfirm\"),\n style: \"destructive\",\n onPress: removeAll,\n },\n ],\n );\n }}\n />\n </View>\n ) : null}\n </>\n ),\n above: (\n <>\n <QueueDock\n queue={queue}\n composer={composer}\n singleSend={composer.singleSend === true}\n onComposerFocus={() => composerInput.current?.focus()}\n onReviewAnnotations={setQueuedReview}\n leading={\n <SessionSignals\n goal={controller.goal}\n agents={controller.lineage.lineage?.children ?? []}\n commandsCount={controller.session.session?.backgroundCommandActivity?.count ?? 0}\n onOpenSession={timelineProps.onOpenSession}\n models={models}\n readOnly={status === \"failed\" || status === \"cancelled\"}\n renderCommands={() =>\n client ? (\n <NativeSessionCommands\n client={client}\n workspaceId={controller.workspaceId}\n sessionId={controller.sessionId}\n />\n ) : null\n }\n />\n }\n />\n {approvals.length > 0 && status === \"requires_action\" ? (\n <ApprovalStrip\n approvals={approvals}\n messages={approvalMessages}\n onDecide={(id, decision) =>\n (decision === \"approve\" ? control.approve(id) : control.reject(id)).then(\n () => undefined,\n )\n }\n />\n ) : null}\n </>\n ),\n })}\n <AnnotationsSheet\n open={reviewOpen}\n onClose={closeReview}\n annotations={draftAnnotations}\n editable={Boolean(composer.updateAnnotation)}\n focusId={reviewTargetId}\n onFocusConsumed={composer.clearAnnotationReviewTarget}\n onUpdate={composer.updateAnnotation}\n onRemove={composer.removeAnnotation}\n onReveal={(source, quote) => annotationReveal.current?.(source, quote) ?? false}\n onCommit={() => {\n closeReview();\n setTimeout(() => composerInput.current?.focus(), 250);\n }}\n />\n <AnnotationsSheet\n open={queuedReview !== null}\n onClose={() => setQueuedReview(null)}\n annotations={queuedReview ?? []}\n editable={false}\n onReveal={(source, quote) => annotationReveal.current?.(source, quote) ?? false}\n />\n </View>\n );\n}\n\n/**\n * A failed session stream retries with backoff (1s doubling to 30s) while the\n * screen is active, so a transient API outage recovers without a relaunch.\n */\nfunction useAutoRecover(failed: boolean, live: boolean, refresh: () => Promise<void>) {\n const delay = useRef(1_000);\n useEffect(() => {\n // Only a live stream ends the outage; a retry briefly clears the error.\n if (live) delay.current = 1_000;\n }, [live]);\n useEffect(() => {\n if (!failed) return;\n const timer = setTimeout(() => {\n delay.current = Math.min(delay.current * 2, 30_000);\n void refresh();\n }, delay.current);\n return () => clearTimeout(timer);\n }, [failed, refresh]);\n}\n\n/** Transport failures read as a connection problem, never as a native stack. */\nfunction loadFailureMessage(error: Error | null, connectionFailed: string): string | undefined {\n if (!error) return undefined;\n if (\n error.name === \"TypeError\" ||\n /fetch failed|network request failed|could not connect|offline|timed out/i.test(error.message)\n ) {\n return connectionFailed;\n }\n return error.message;\n}\n\nfunction LoadFailure({ message, onRetry }: { message?: string | undefined; onRetry: () => void }) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n return (\n <View style={{ flex: 1, alignItems: \"center\", justifyContent: \"center\", gap: 10, padding: 24 }}>\n <Icon name=\"circle-alert\" size={20} color={theme.colors[\"status-failed\"]} />\n <Text style={{ ...fontStyle(theme, 500), fontSize: 15, color: theme.colors.fg }}>\n {m.loadFailedTitle}\n </Text>\n {message ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 13,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n textAlign: \"center\",\n }}\n >\n {message}\n </Text>\n ) : null}\n <Button label={m.retry} onPress={onRetry} />\n </View>\n );\n}\n\n/**\n * The runtime could not start this session's next step. It is not waiting on\n * the person, so it says so plainly and offers one recheck (Resume), which\n * starts the kept work again.\n */\nfunction StuckCard({\n session,\n busy,\n onSessionChanged,\n}: {\n session: Session;\n busy: boolean;\n onSessionChanged: () => Promise<void>;\n}) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const t = useOpenGeniText();\n // The same state as the web notice: why the saved message didn't start, the\n // machines this person may move the chat to, and one fenced recheck.\n const start = useSessionStart({ session, onSessionChanged });\n const [failed, setFailed] = useState(false);\n // The recheck is one fenced Resume outside the session control runner, so\n // the card holds its own pending state: busy while it runs, and a second tap\n // before the first settles sends nothing (as the web notice does).\n const [rechecking, setRechecking] = useState(false);\n const recheckPending = useRef(false);\n const [moving, setMoving] = useState<string | null>(null);\n const [moveError, setMoveError] = useState<string | null>(null);\n const c = theme.colors;\n const reason = start.reason;\n const machine =\n start.needsDifferentMachine && start.machineAccess\n ? personalMachineCopy(t, start.machineAccess, { queued: true })\n : null;\n const needsAccess =\n reason?.reason === \"initiator_membership_required\" ||\n reason?.reason === \"personal_resource_grant_required\";\n const textStyle = { ...fontStyle(theme), fontSize: 14, lineHeight: 20, color: c[\"fg-muted\"] };\n return (\n <View\n accessibilityRole=\"summary\"\n style={{\n gap: 10,\n padding: 14,\n borderRadius: 14,\n borderWidth: 1,\n borderColor: withAlpha(c[\"status-failed\"], 0.3),\n backgroundColor: withAlpha(c[\"status-failed\"], 0.08),\n }}\n >\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Icon name=\"circle-alert\" size={16} color={c[\"status-failed\"]} />\n <Text style={{ ...fontStyle(theme, 600), fontSize: 15, color: c.fg, flexShrink: 1 }}>\n {machine ? t(\"sessionAdmission.needsDifferentMachineTitle\") : m.stuckTitle}\n </Text>\n </View>\n {machine ? (\n <>\n <Text style={textStyle}>{machine.explanation}</Text>\n <Text style={textStyle}>{machine.next}</Text>\n {start.canChooseMachine ? (\n <View\n style={{ gap: 6 }}\n accessibilityLabel={t(\"sessionAdmission.chooseAMachineForThisChat\")}\n >\n {start.machineChoices.length === 0 ? (\n <Text style={textStyle}>{t(\"sessionAdmission.noMachineChoices\")}</Text>\n ) : (\n start.machineChoices.map((choice) => (\n <Button\n key={choice.sandboxId}\n label={\n moving === choice.sandboxId\n ? t(\"sessionAdmission.moving\")\n : machineDisplayName(t, choice)\n }\n busy={moving === choice.sandboxId}\n disabled={busy || moving !== null}\n style={{ alignSelf: \"stretch\" }}\n onPress={() => {\n setMoving(choice.sandboxId);\n setMoveError(null);\n start\n .chooseMachine(choice)\n .then(setMoveError, () =>\n setMoveError(t(\"sessionAdmission.machineChangeFailed\")),\n )\n .finally(() => setMoving(null));\n }}\n />\n ))\n )}\n <Text style={{ ...textStyle, fontSize: 13 }}>\n {t(\"sessionAdmission.savedMessageMachineNote\")}\n </Text>\n </View>\n ) : null}\n {moveError ? (\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{ ...fontStyle(theme), fontSize: 13, color: c[\"status-failed\"] }}\n >\n {start.machineChoiceError || moveError}\n </Text>\n ) : null}\n </>\n ) : (\n <Text style={textStyle}>{needsAccess ? m.stuckAccessBody : m.stuckBody}</Text>\n )}\n {failed ? (\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{\n ...fontStyle(theme),\n fontSize: 13,\n color: c[\"status-failed\"],\n }}\n >\n {m.stuckRetryFailed}\n </Text>\n ) : null}\n {machine ? null : (\n <Button\n label={m.stuckRetry}\n variant=\"primary\"\n busy={busy || rechecking}\n disabled={busy || rechecking}\n style={{ alignSelf: \"flex-start\" }}\n onPress={() => {\n if (recheckPending.current) return;\n recheckPending.current = true;\n setRechecking(true);\n setFailed(false);\n start\n .recheck()\n .catch(() => setFailed(true))\n .finally(() => {\n recheckPending.current = false;\n setRechecking(false);\n });\n }}\n />\n )}\n </View>\n );\n}\n\n/** Composer attachment chips: name, upload state, tap to retry a failure, remove. */\nexport function AttachmentChips({ attachments }: { attachments: NativeFileAttachmentsResult }) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n if (attachments.attachments.length === 0) return null;\n return (\n <View\n style={{\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 6,\n paddingHorizontal: 12,\n paddingTop: 10,\n }}\n >\n {attachments.attachments.map((item) => {\n const failed = item.status === \"failed\";\n const busy = item.status === \"uploading\" || item.status === \"preparing\";\n if (item.kind === \"image\" && item.previewUri) {\n // Photos show as photos, as on the web: a thumbnail with its state on top.\n return (\n <View key={item.id} style={{ width: 56, height: 56 }}>\n <Pressable\n accessibilityRole={failed ? \"button\" : \"image\"}\n accessibilityLabel={\n failed\n ? t(\"native.timeline.sessionScreen.retryName\", { name: item.name })\n : item.name\n }\n disabled={!failed}\n onPress={() => void attachments.retry(item.id)}\n style={{\n width: 56,\n height: 56,\n borderRadius: theme.radius.md,\n overflow: \"hidden\",\n borderWidth: 1,\n borderColor: failed ? withAlpha(c[\"status-failed\"], 0.6) : c.border,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Image\n source={{ uri: item.previewUri }}\n style={{ width: \"100%\", height: \"100%\" }}\n resizeMode=\"cover\"\n />\n {busy || failed ? (\n <View\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: failed\n ? withAlpha(c[\"status-failed\"], 0.35)\n : \"rgba(0,0,0,0.35)\",\n }}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color=\"#FFFFFF\" />\n ) : (\n <Icon name=\"rotate-ccw\" size={16} color=\"#FFFFFF\" />\n )}\n </View>\n ) : null}\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.sessionScreen.removeName\", {\n name: item.name,\n })}\n onPress={() => attachments.remove(item.id)}\n hitSlop={8}\n style={{\n position: \"absolute\",\n top: -6,\n right: -6,\n width: 20,\n height: 20,\n borderRadius: 10,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: c.fg,\n borderWidth: 1.5,\n borderColor: c[\"surface-1\"],\n }}\n >\n <Icon name=\"x\" size={10} color={c.bg} />\n </Pressable>\n </View>\n );\n }\n return (\n <View\n key={item.id}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: failed ? withAlpha(c[\"status-failed\"], 0.4) : c.border,\n paddingLeft: 8,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n failed\n ? t(\"native.timeline.sessionScreen.retryName\", { name: item.name })\n : item.name\n }\n disabled={!failed}\n onPress={() => void attachments.retry(item.id)}\n style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6, paddingVertical: 4 }}\n >\n {busy ? <ActivityIndicator size=\"small\" color={c[\"fg-subtle\"]} /> : null}\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n maxWidth: 160,\n fontSize: theme.size.xs,\n color: failed ? c[\"status-failed\"] : c[\"fg-muted\"],\n }}\n >\n {item.name}\n {failed ? t(\"native.timeline.sessionScreen.tapToRetrySuffix\") : \"\"}\n </Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.sessionScreen.removeName\", {\n name: item.name,\n })}\n onPress={() => attachments.remove(item.id)}\n hitSlop={6}\n style={{ width: 28, height: 28, alignItems: \"center\", justifyContent: \"center\" }}\n >\n <Icon name=\"x\" size={12} color={c[\"fg-subtle\"]} />\n </Pressable>\n </View>\n );\n })}\n </View>\n );\n}\n\n/** The web composer's draft-conflict line: keep this device's draft or take the other. */\nfunction DraftConflictStrip(props: {\n messages?: Partial<ChatComposerMessages> | undefined;\n onResolve: (choice: \"keep_mine\" | \"use_remote\") => void;\n}) {\n const theme = useNativeTimelineTheme();\n const t = useOpenGeniText();\n const c = theme.colors;\n const messages = { ...defaultChatComposerMessages(t), ...props.messages };\n const text = { ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"status-failed\"] };\n return (\n <View\n accessibilityRole=\"alert\"\n style={{\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 16,\n paddingTop: 12,\n }}\n >\n <Text style={{ ...text, flexGrow: 1, flexShrink: 1, flexBasis: 180 }}>\n {messages.draftConflict}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n hitSlop={10}\n onPress={() => props.onResolve(\"use_remote\")}\n >\n <Text style={{ ...text, textDecorationLine: \"underline\" }}>{messages.useOtherDraft}</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n hitSlop={10}\n onPress={() => props.onResolve(\"keep_mine\")}\n >\n <Text\n style={{\n ...text,\n ...fontStyle(theme, 500),\n color: c[\"status-failed\"],\n textDecorationLine: \"underline\",\n }}\n >\n {messages.keepMine}\n </Text>\n </Pressable>\n </View>\n );\n}\n\n/** Polls the session's commands only while the panel is open, as web does. */\nfunction NativeSessionCommands(props: {\n client: OpenGeniClient;\n workspaceId: string;\n sessionId: string;\n}) {\n const { client, workspaceId, sessionId } = props;\n const [commands, setCommands] = useState<SessionBackgroundCommand[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const load = useCallback(async () => {\n try {\n const response = await client.listSessionBackgroundCommands(workspaceId, sessionId);\n setCommands(response.commands);\n setError(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause : new Error(String(cause)));\n } finally {\n setLoading(false);\n }\n }, [client, sessionId, workspaceId]);\n useEffect(() => {\n void load();\n const timer = setInterval(() => void load(), 3_000);\n return () => clearInterval(timer);\n }, [load]);\n const cancel = useCallback(\n async (commandId: string) => {\n await client.cancelSessionBackgroundCommand(workspaceId, sessionId, commandId);\n await load();\n },\n [client, load, sessionId, workspaceId],\n );\n return <SessionCommandsList commands={{ commands, loading, error, cancel }} />;\n}\n\nfunction renderSharedComposer(props: SessionComposerProps): ReactNode {\n return <SessionComposer {...props} />;\n}\n","import type { ClientModel, LatencyMode, ReasoningEffort } from \"@opengeni/sdk\";\nimport {\n compactEffortLabel,\n groupPresentationFor,\n modelPickerChoice,\n modelPickerMenuView,\n type ModelPickerGroupPresentation,\n type ModelPickerInput,\n} from \"@opengeni/react/model-picker-model\";\nimport { labelReasoningEffort, type PickerBillingClass } from \"@opengeni/react/model-policy\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { useState, type ReactNode } from \"react\";\nimport { Pressable, ScrollView, Text, TextInput, View } from \"react-native\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { ModelMark } from \"./session-list\";\nimport { BottomSheet } from \"./sheet\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The web composer's model menu as a native sheet: search, payment groups with\n maker marks, the selected check, unavailable rows with their reason, and the\n Thinking segmented control with Fast. Everything it shows comes from the\n shared model picker model; only the chrome is native.\n -------------------------------------------------------------------------- */\n\nexport type ModelPickerSheetProps = ModelPickerInput<ReactNode> & {\n open: boolean;\n onClose: () => void;\n loading?: boolean | undefined;\n error?: string | null | undefined;\n disabled?: boolean | undefined;\n onModelChange: (modelId: string) => void;\n onEffortChange: (effort: ReasoningEffort) => void;\n onLatencyModeChange: (mode: LatencyMode) => void;\n /** Called after a choice, for host haptics. */\n onSelectionFeedback?: (() => void) | undefined;\n};\n\nconst GROUP_ICON: Record<PickerBillingClass, NativeIconName> = {\n opengeni_credits: \"sparkles\",\n external: \"globe\",\n codex_subscription: \"sparkles\",\n claude_subscription: \"sparkles\",\n supergrok_subscription: \"sparkles\",\n byok: \"key-round\",\n organization_byok: \"key-round\",\n};\n\n/** The subscription rails carry their maker's mark, as on web. */\nconst GROUP_MARK_MODEL: Partial<Record<PickerBillingClass, string>> = {\n codex_subscription: \"codex/gpt\",\n claude_subscription: \"claude\",\n supergrok_subscription: \"grok\",\n};\n\nfunction GroupMark(props: {\n billingClass: PickerBillingClass;\n icon: ReactNode | undefined;\n color: string;\n}) {\n if (props.icon === null) return null;\n if (props.icon !== undefined) return <>{props.icon}</>;\n const model = GROUP_MARK_MODEL[props.billingClass];\n if (model) return <ModelMark model={model} size={14} color={props.color} />;\n return <Icon name={GROUP_ICON[props.billingClass]} size={14} color={props.color} />;\n}\n\nexport function ModelPickerSheet(props: ModelPickerSheetProps) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const t = useOpenGeniText();\n const [query, setQuery] = useState(\"\");\n const view = modelPickerMenuView(t, props, query);\n const { messages, groups, thinking } = view;\n const selectedSpeed =\n thinking?.speeds?.find((speed) => speed.id === props.latencyMode) ?? thinking?.speeds?.[0];\n const close = () => {\n setQuery(\"\");\n props.onClose();\n };\n const choose = (row: (typeof view.rows)[number]) => {\n if (props.disabled) return;\n const choice = modelPickerChoice(props, row);\n if (!choice) return;\n if (choice.model !== null) props.onModelChange(choice.model);\n props.onEffortChange(choice.effort);\n if (choice.latencyMode !== null) props.onLatencyModeChange(choice.latencyMode);\n props.onSelectionFeedback?.();\n };\n const label = { ...fontStyle(theme), fontSize: 15, color: c.fg };\n const muted = { ...fontStyle(theme), fontSize: 13, color: c[\"fg-muted\"] };\n return (\n <BottomSheet open={props.open} onClose={close} accessibilityLabel={messages.label}>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingHorizontal: 20,\n paddingTop: 0,\n paddingBottom: 6,\n }}\n >\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}\n >\n {messages.label}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.modelPicker.done\")}\n onPress={close}\n hitSlop={8}\n style={{ minHeight: 44, justifyContent: \"center\", paddingHorizontal: 4 }}\n >\n <Text style={{ ...fontStyle(theme, 600), fontSize: 16, color: c.accent }}>\n {t(\"native.timeline.modelPicker.done\")}\n </Text>\n </Pressable>\n </View>\n {view.anySelectable ? (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n marginHorizontal: 16,\n marginBottom: 4,\n paddingHorizontal: 12,\n minHeight: 40,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Icon name=\"search\" size={16} color={c[\"fg-subtle\"]} />\n <TextInput\n accessibilityLabel={messages.searchLabel}\n placeholder={messages.searchPlaceholder}\n placeholderTextColor={c[\"fg-subtle\"]}\n value={query}\n onChangeText={setQuery}\n autoCorrect={false}\n autoCapitalize=\"none\"\n clearButtonMode=\"while-editing\"\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: 16,\n color: c.fg,\n paddingVertical: 8,\n }}\n />\n </View>\n ) : null}\n {props.error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{\n ...muted,\n color: c[\"status-failed\"],\n paddingHorizontal: 20,\n paddingVertical: 6,\n }}\n >\n {props.error}\n </Text>\n ) : null}\n <ScrollView\n style={{ flexGrow: 0 }}\n keyboardShouldPersistTaps=\"handled\"\n keyboardDismissMode=\"on-drag\"\n contentContainerStyle={{ paddingVertical: 4 }}\n >\n {props.loading ? (\n <View accessibilityRole=\"progressbar\" accessibilityLabel={messages.loading}>\n {[58, 44, 66, 50].map((width) => (\n <View\n key={width}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n height: 48,\n paddingHorizontal: 20,\n }}\n >\n <View\n style={{\n width: 16,\n height: 16,\n borderRadius: 4,\n backgroundColor: c[\"surface-2\"],\n }}\n />\n <View\n style={{\n height: 10,\n width: `${width}%`,\n borderRadius: 4,\n backgroundColor: c[\"surface-2\"],\n }}\n />\n </View>\n ))}\n </View>\n ) : view.anySelectable ? (\n <>\n {groups.map((group, index) => (\n <View\n key={group.billingClass}\n accessibilityLabel={group.label}\n style={\n index > 0\n ? {\n marginTop: 6,\n paddingTop: 6,\n borderTopWidth: 1,\n borderTopColor: c.border,\n }\n : undefined\n }\n >\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n paddingHorizontal: 20,\n paddingTop: 8,\n paddingBottom: 2,\n }}\n >\n <GroupMark\n billingClass={group.billingClass}\n icon={groupPresentationFor(props, group.billingClass)?.icon}\n color={c[\"fg-subtle\"]}\n />\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c[\"fg-muted\"] }}>\n {group.label}\n </Text>\n </View>\n {group.description ? (\n <Text style={{ ...muted, paddingHorizontal: 20, paddingBottom: 4 }}>\n {group.description}\n </Text>\n ) : null}\n {group.rows.map((row) => {\n const active = row.selectable && row.id === props.model;\n const enabled = row.selectable && !props.disabled;\n return (\n <Pressable\n key={row.id}\n accessibilityRole=\"button\"\n accessibilityLabel={[row.label, row.unavailableReason]\n .filter(Boolean)\n .join(\", \")}\n accessibilityState={{ selected: active, disabled: !enabled }}\n disabled={!enabled}\n onPress={() => choose(row)}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n minHeight: 48,\n paddingHorizontal: 20,\n paddingVertical: 6,\n backgroundColor: pressed ? c.hover : \"transparent\",\n opacity: row.selectable ? 1 : 0.5,\n })}\n >\n {props.collapseScopes === false ? null : (\n <ModelMark model={row.id} size={18} color={c[\"fg-muted\"]} />\n )}\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text numberOfLines={1} style={label}>\n {row.label}\n </Text>\n {row.unavailableReason ? (\n <Text numberOfLines={2} style={muted}>\n {row.unavailableReason}\n </Text>\n ) : null}\n </View>\n {row.catalog.cost === \"free\" ? (\n <Text\n style={{\n ...muted,\n fontSize: 12,\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 999,\n overflow: \"hidden\",\n backgroundColor: c[\"surface-2\"],\n }}\n >\n {messages.free}\n </Text>\n ) : null}\n {row.id === props.model ? <Icon name=\"check\" size={18} color={c.fg} /> : null}\n </Pressable>\n );\n })}\n </View>\n ))}\n {view.matchCount === 0 ? (\n <Text style={{ ...muted, paddingHorizontal: 20, paddingVertical: 12 }}>\n {view.searching ? messages.noMatches : messages.noModels}\n </Text>\n ) : null}\n </>\n ) : (\n <View style={{ paddingHorizontal: 20, paddingVertical: 12, gap: 4 }}>\n <Text style={{ ...fontStyle(theme, 500), fontSize: 15, color: c.fg }}>\n {messages.connectTitle}\n </Text>\n <Text style={muted}>\n {view.rows.length > 0 ? messages.connectBody : messages.noModels}\n </Text>\n </View>\n )}\n </ScrollView>\n {view.anySelectable && view.selected && (view.unsupportedAttachments || thinking) ? (\n <View\n style={{\n borderTopWidth: 1,\n borderTopColor: c.border,\n paddingHorizontal: 20,\n paddingTop: 12,\n gap: 8,\n }}\n >\n {view.unsupportedAttachments ? (\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>\n {messages.unsupportedAttachments}\n </Text>\n ) : null}\n {thinking ? (\n <>\n {thinking.showThinking || thinking.showFast ? (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n minHeight: 32,\n }}\n >\n {thinking.showThinking ? (\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>{messages.thinking}</Text>\n ) : (\n <View />\n )}\n {thinking.showFast ? (\n <Pressable\n accessibilityRole=\"switch\"\n accessibilityLabel={`${messages.fast}, ${messages.fastRateHint}`}\n accessibilityState={{\n checked: props.latencyMode === \"fast\",\n disabled: Boolean(props.disabled || thinking.disabled),\n }}\n disabled={props.disabled || thinking.disabled}\n onPress={() => {\n props.onLatencyModeChange(\n props.latencyMode === \"fast\" ? \"standard\" : \"fast\",\n );\n props.onSelectionFeedback?.();\n }}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 6,\n minHeight: 36,\n paddingHorizontal: 8,\n borderRadius: theme.radius.sm,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <Icon\n name=\"zap\"\n size={14}\n color={c[\"fg-muted\"]}\n fill={props.latencyMode === \"fast\" ? c[\"fg-muted\"] : undefined}\n />\n <Text style={muted}>{messages.fast}</Text>\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>\n {messages.fastRateHint}\n </Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n {thinking.showThinking ? (\n <SegmentedChoice\n label={messages.thinkingEffort ?? messages.thinking}\n value={thinking.value}\n disabled={Boolean(props.disabled || thinking.disabled)}\n options={thinking.efforts.map((effort) => ({\n id: effort,\n label: compactEffortLabel(t, effort, labelReasoningEffort(t, effort)),\n accessibilityLabel: labelReasoningEffort(t, effort),\n }))}\n onChange={(effort) => {\n props.onEffortChange(effort);\n props.onSelectionFeedback?.();\n }}\n />\n ) : null}\n {thinking.speeds ? (\n <>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n minHeight: 32,\n }}\n >\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>{messages.speed}</Text>\n {selectedSpeed?.hint ? (\n <Text style={{ ...muted, color: c[\"fg-subtle\"] }}>{selectedSpeed.hint}</Text>\n ) : null}\n </View>\n <SegmentedChoice\n label={messages.speed ?? messages.fast}\n value={selectedSpeed?.id ?? \"standard\"}\n disabled={Boolean(props.disabled || thinking.disabled)}\n options={thinking.speeds.map((speed) => ({\n id: speed.id,\n label: speed.label,\n accessibilityLabel: speed.hint\n ? `${speed.label}, ${speed.hint}`\n : speed.label,\n icon: speed.id === \"standard\" ? undefined : \"zap\",\n }))}\n onChange={(speed) => {\n props.onLatencyModeChange(speed);\n props.onSelectionFeedback?.();\n }}\n />\n </>\n ) : null}\n </>\n ) : null}\n </View>\n ) : null}\n </BottomSheet>\n );\n}\n\n/** A horizontal single-choice row, shared by the effort and speed choices. */\nfunction SegmentedChoice<T extends string>(props: {\n label: string | undefined;\n value: T;\n disabled: boolean;\n options: ReadonlyArray<{\n id: T;\n label: string;\n accessibilityLabel: string;\n icon?: NativeIconName | undefined;\n }>;\n onChange: (value: T) => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={props.label}\n style={{\n flexDirection: \"row\",\n gap: 2,\n padding: 2,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n {props.options.map((option) => {\n const checked = option.id === props.value;\n const color = checked ? c.fg : c[\"fg-muted\"];\n return (\n <Pressable\n key={option.id}\n accessibilityRole=\"radio\"\n accessibilityLabel={option.accessibilityLabel}\n accessibilityState={{ checked, disabled: props.disabled }}\n disabled={props.disabled}\n onPress={() => {\n if (!checked) props.onChange(option.id);\n }}\n style={{\n flex: 1,\n flexDirection: \"row\",\n gap: 4,\n minHeight: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: theme.radius.sm,\n backgroundColor: checked ? c[\"surface-1\"] : \"transparent\",\n opacity: props.disabled ? 0.5 : 1,\n ...(checked\n ? {\n shadowColor: \"#000\",\n shadowOpacity: 0.06,\n shadowRadius: 2,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n }\n : null),\n }}\n >\n {option.icon ? (\n <Icon name={option.icon} size={13} color={color} fill={checked ? color : undefined} />\n ) : null}\n <Text numberOfLines={1} style={{ ...fontStyle(theme), fontSize: 13, color }}>\n {option.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nexport type { ClientModel, ModelPickerGroupPresentation };\n","import type { Session, UpdateSessionPinRequest, UpdateSessionRequest } from \"@opengeni/sdk\";\nimport {\n resolveRenameSubmission,\n SESSION_TITLE_MAX_LENGTH,\n sessionDisplayTitle,\n sessionRenameSeed,\n} from \"@opengeni/react/session-list-model\";\nimport { useEffect, useRef, useState, type ComponentRef, type ReactNode } from \"react\";\nimport { Alert, Pressable, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { BottomSheet } from \"./sheet\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\n\n/* ----------------------------------------------------------------------------\n The web session header's Rename and Pin, behind one native overflow button:\n an action sheet, then a rename sheet that seeds and resolves exactly as the\n web title editor does (shared session-list model).\n -------------------------------------------------------------------------- */\n\nexport interface SessionActionsClient {\n updateSession(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionRequest,\n ): Promise<Session>;\n updateSessionPin(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionPinRequest,\n ): Promise<Session>;\n}\n\nexport interface SessionActionsProps {\n session: Session;\n client: SessionActionsClient;\n /** Called with the server's session after a change, so the host can refresh. */\n onChanged: (session: Session) => void;\n /** Host actions appended after Rename and Pin. */\n extraActions?: SessionAction[] | undefined;\n onActionFeedback?: (() => void) | undefined;\n /**\n * Present the actions in a host-native menu (a UIMenu on iOS) anchored to the\n * trigger instead of the slide-up sheet. The host wraps `trigger`.\n */\n renderMenu?: ((input: { actions: SessionAction[]; trigger: ReactNode }) => ReactNode) | undefined;\n}\n\nexport interface SessionAction {\n key: string;\n label: string;\n icon: NativeIconName;\n onPress: () => void;\n destructive?: boolean | undefined;\n /** SF Symbol for a native menu. */\n systemImage?: string | undefined;\n}\n\nexport function SessionActionsButton(props: SessionActionsProps) {\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [menuOpen, setMenuOpen] = useState(false);\n const [renaming, setRenaming] = useState(false);\n const [error, setError] = useState<string | null>(null);\n // The pin flips immediately on this device and rolls back on failure, as on web.\n const [pinnedOverride, setPinnedOverride] = useState<boolean | null>(null);\n const pinned = pinnedOverride ?? props.session.pinned ?? false;\n useEffect(() => setPinnedOverride(null), [props.session.pinned, props.session.pinVersion]);\n\n const togglePin = async () => {\n const next = !pinned;\n setPinnedOverride(next);\n setError(null);\n props.onActionFeedback?.();\n try {\n const updated = await props.client.updateSessionPin(\n props.session.workspaceId,\n props.session.id,\n {\n pinned: next,\n ...(props.session.pinVersion !== undefined\n ? { expectedVersion: props.session.pinVersion }\n : {}),\n },\n );\n props.onChanged(updated);\n } catch (caught) {\n setPinnedOverride(null);\n const message =\n `${m.pinFailed(next)} ${caught instanceof Error ? caught.message : \"\"}`.trim();\n setError(message);\n if (props.renderMenu) Alert.alert(message);\n else setMenuOpen(true);\n }\n };\n\n const actions: SessionAction[] = [\n {\n key: \"rename\",\n label: m.rename,\n icon: \"pencil\",\n systemImage: \"pencil\",\n onPress: () => {\n setMenuOpen(false);\n // Let a dismissing menu or sheet finish before presenting the next one.\n setTimeout(() => setRenaming(true), props.renderMenu ? 50 : 350);\n },\n },\n {\n key: \"pin\",\n label: pinned ? m.unpin : m.pin,\n icon: pinned ? \"pin-off\" : \"pin\",\n systemImage: pinned ? \"pin.slash\" : \"pin\",\n onPress: () => {\n setMenuOpen(false);\n void togglePin();\n },\n },\n ...(props.extraActions ?? []).map((action) => ({\n ...action,\n onPress: () => {\n setMenuOpen(false);\n action.onPress();\n },\n })),\n ];\n\n const icon = (\n <>\n {pinned ? (\n <View\n style={{\n position: \"absolute\",\n top: 5,\n right: 5,\n width: 6,\n height: 6,\n borderRadius: 3,\n backgroundColor: c[\"fg-muted\"],\n }}\n />\n ) : null}\n <Icon name=\"ellipsis\" size={20} color={c.fg} />\n </>\n );\n const renameSheet = (\n <RenameSheet\n open={renaming}\n session={props.session}\n client={props.client}\n onClose={() => setRenaming(false)}\n onRenamed={(session) => {\n setRenaming(false);\n props.onActionFeedback?.();\n props.onChanged(session);\n }}\n />\n );\n if (props.renderMenu) {\n return (\n <>\n {props.renderMenu({\n actions,\n trigger: (\n <View\n accessible\n accessibilityRole=\"button\"\n accessibilityLabel={m.chatActions}\n style={{ width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\" }}\n >\n {icon}\n </View>\n ),\n })}\n {renameSheet}\n </>\n );\n }\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={m.chatActions}\n hitSlop={6}\n onPress={() => setMenuOpen(true)}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 18,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n {icon}\n </Pressable>\n <BottomSheet\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n accessibilityLabel={m.chatActions}\n >\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 600),\n fontSize: 15,\n color: c.fg,\n paddingHorizontal: 20,\n paddingBottom: 8,\n }}\n >\n {sessionDisplayTitle(props.session)}\n </Text>\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{\n ...fontStyle(theme),\n fontSize: 13,\n color: c[\"status-failed\"],\n paddingHorizontal: 20,\n paddingBottom: 6,\n }}\n >\n {error}\n </Text>\n ) : null}\n {actions.map((action) => (\n <Pressable\n key={action.key}\n accessibilityRole=\"button\"\n accessibilityLabel={action.label}\n onPress={action.onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 14,\n minHeight: 52,\n paddingHorizontal: 20,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <Icon\n name={action.icon}\n size={18}\n color={action.destructive ? c[\"status-failed\"] : c[\"fg-muted\"]}\n />\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 16,\n color: action.destructive ? c[\"status-failed\"] : c.fg,\n }}\n >\n {action.label}\n </Text>\n </Pressable>\n ))}\n </BottomSheet>\n {renameSheet}\n </>\n );\n}\n\nfunction RenameSheet(props: {\n open: boolean;\n session: Session;\n client: SessionActionsClient;\n onClose: () => void;\n onRenamed: (session: Session) => void;\n}) {\n const m = useNativeTimelineMessages();\n // Each opening mounts a fresh form seeded before its first render, so the\n // focused field selects the whole seed and typing replaces it.\n const [generation, setGeneration] = useState(0);\n useEffect(() => {\n if (props.open) setGeneration((value) => value + 1);\n }, [props.open]);\n return (\n <BottomSheet open={props.open} onClose={props.onClose} accessibilityLabel={m.renameChat}>\n <RenameForm key={generation} {...props} />\n </BottomSheet>\n );\n}\n\nfunction RenameForm(props: {\n session: Session;\n client: SessionActionsClient;\n onClose: () => void;\n onRenamed: (session: Session) => void;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const m = useNativeTimelineMessages();\n const c = theme.colors;\n const [seed] = useState(() => sessionRenameSeed(props.session));\n const [draft, setDraft] = useState(seed);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const inFlight = useRef(false);\n const inputRef = useRef<ComponentRef<typeof TextInput>>(null);\n const save = async () => {\n if (inFlight.current) return;\n const next = resolveRenameSubmission(draft, sessionDisplayTitle(props.session), seed);\n if (next === null) {\n props.onClose();\n return;\n }\n inFlight.current = true;\n setSaving(true);\n setError(null);\n try {\n const updated = await props.client.updateSession(\n props.session.workspaceId,\n props.session.id,\n { title: next },\n );\n props.onRenamed(updated);\n } catch (caught) {\n setError(m.renameFailed(caught instanceof Error ? caught.message : null));\n } finally {\n inFlight.current = false;\n setSaving(false);\n }\n };\n return (\n <View style={{ paddingHorizontal: 20, gap: 12 }}>\n <Text\n accessibilityRole=\"header\"\n style={{ ...fontStyle(theme, 600), fontSize: 17, color: c.fg }}\n >\n {t(\"native.timeline.sessionActions.renameChat\")}\n </Text>\n <TextInput\n accessibilityLabel={m.chatTitle}\n value={draft}\n onChangeText={setDraft}\n ref={inputRef}\n onFocus={() => {\n // selectTextOnFocus is unreliable for autofocused fields in a modal.\n setTimeout(() => inputRef.current?.setSelection(0, seed.length), 50);\n }}\n maxLength={SESSION_TITLE_MAX_LENGTH}\n autoFocus\n editable={!saving}\n returnKeyType=\"done\"\n onSubmitEditing={() => void save()}\n style={{\n ...fontStyle(theme),\n fontSize: 16,\n color: c.fg,\n minHeight: 44,\n paddingHorizontal: 12,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n }}\n />\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...fontStyle(theme), fontSize: 13, color: c[\"status-failed\"] }}\n >\n {error}\n </Text>\n ) : null}\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 8 }}>\n <Button label={m.cancel} variant=\"ghost\" onPress={props.onClose} disabled={saving} />\n <Button\n label={saving ? m.saving : m.save}\n variant=\"primary\"\n onPress={() => void save()}\n disabled={saving}\n busy={saving}\n />\n </View>\n </View>\n );\n}\n","// The inbox at phone width: what agents wait on the person for (questions,\n// approvals, goals paused on them) and what they chose to tell them. The same\n// rules as the web Inbox page: rows are messages, approvals decide in place, a\n// single short choice answers in one tap, everything else opens its session.\nimport {\n notificationPlainText,\n parseNotificationText,\n type NotificationSpan,\n} from \"@opengeni/react/timeline-model\";\nimport type { InboxItem, ListInboxResponse, OpenGeniClient } from \"@opengeni/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport {\n ActionSheetIOS,\n Alert,\n Animated,\n AppState,\n PanResponder,\n Platform,\n Pressable,\n Text,\n View,\n type LayoutChangeEvent,\n} from \"react-native\";\n\nimport { useOpenNativeLink } from \"../links\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport { SectionLabel } from \"./session-list\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useOpenGeniText, type OpenGeniText } from \"@opengeni/react/messages\";\n\nexport type NativeInboxClient = Pick<\n OpenGeniClient,\n | \"listInbox\"\n | \"updateInboxItem\"\n | \"sendApprovalDecision\"\n | \"getHumanInputRequest\"\n | \"submitHumanInputResponse\"\n>;\n\ntype InboxState = { data: ListInboxResponse | null; error: unknown; loading: boolean };\n\nfunction snoozedNow(item: InboxItem, now: number): boolean {\n return item.snoozedUntil !== null && Date.parse(item.snoozedUntil) > now;\n}\n\n/** Questions, approvals and paused goals wait on the person; notes and replies don't. */\nexport function isNeedsYouKind(kind: InboxItem[\"kind\"]): boolean {\n return kind === \"question\" || kind === \"approval\" || kind === \"goal_paused\";\n}\n\n/** What waits on the person right now: needs-you items plus unread notes, unsnoozed. */\nexport function nativeInboxAttentionCount(data: ListInboxResponse | null): number {\n if (!data) return 0;\n const now = Date.now();\n return data.items.filter(\n (item) => !snoozedNow(item, now) && (isNeedsYouKind(item.kind) || item.unread),\n ).length;\n}\n\n/**\n * An item as this app reads it. Servers from before rich notifications leave\n * out the subtitle, facts, link and moment; read those as empty.\n */\nfunction normalizeInboxItem(item: InboxItem): InboxItem {\n return {\n ...item,\n subtitle: item.subtitle ?? \"\",\n facts: Array.isArray(item.facts) ? item.facts : [],\n link: item.link ?? null,\n eventSequence: item.eventSequence ?? null,\n choices: Array.isArray(item.choices) ? item.choices : [],\n };\n}\n\n/** The person's inbox, refreshed on an interval, on foreground and after every action. */\nexport function useNativeInbox(client: NativeInboxClient, options: { pollMs?: number } = {}) {\n const [state, setState] = useState<InboxState>({ data: null, error: null, loading: true });\n const pollMs = options.pollMs ?? 30_000;\n const generation = useRef(0);\n const refresh = useCallback(async () => {\n const request = ++generation.current;\n try {\n const listed = await client.listInbox();\n const data = { ...listed, items: listed.items.map(normalizeInboxItem) };\n if (request === generation.current) setState({ data, error: null, loading: false });\n } catch (error) {\n if (request === generation.current)\n setState((current) => ({ ...current, error, loading: false }));\n }\n }, [client]);\n useEffect(() => {\n void refresh();\n const timer = setInterval(() => void refresh(), pollMs);\n const subscription = AppState.addEventListener(\"change\", (next) => {\n if (next === \"active\") void refresh();\n });\n return () => {\n clearInterval(timer);\n subscription.remove();\n };\n }, [pollMs, refresh]);\n const patch = useCallback((update: (items: InboxItem[]) => InboxItem[]) => {\n setState((current) =>\n current.data\n ? { ...current, data: { ...current.data, items: update(current.data.items) } }\n : current,\n );\n }, []);\n return { ...state, refresh, patch };\n}\n\nconst KIND_ICON: Record<InboxItem[\"kind\"], NativeIconName> = {\n question: \"message-circle-question\",\n approval: \"shield-check\",\n goal_paused: \"circle-pause\",\n notification: \"bell\",\n reply: \"message-square-text\",\n};\n\nfunction kindIcon(item: InboxItem): NativeIconName {\n return item.kind === \"notification\" && item.urgency === \"time_sensitive\"\n ? \"bell-ring\"\n : (KIND_ICON[item.kind] ?? \"bell\");\n}\n\nconst MONO = Platform.OS === \"ios\" ? \"Menlo\" : \"monospace\";\n\nfunction Spans({ spans }: { spans: NotificationSpan[] }) {\n const theme = useNativeTimelineTheme();\n const openLink = useOpenNativeLink();\n const c = theme.colors;\n // Spans are the positional pieces of one parsed message and never reorder,\n // so their index is their identity.\n return spans.map((span, index) =>\n span.kind === \"bold\" ? (\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n <Text key={index} style={{ ...fontStyle(theme, 500), color: c.fg }}>\n {span.text}\n </Text>\n ) : span.kind === \"code\" ? (\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n <Text key={index} style={{ fontFamily: MONO, fontSize: 13, color: c.fg }}>\n {span.text}\n </Text>\n ) : span.kind === \"link\" ? (\n <Text\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n key={index}\n accessibilityRole=\"link\"\n onPress={() => openLink(span.href)}\n style={{ color: c.fg, textDecorationLine: \"underline\" }}\n >\n {span.text}\n </Text>\n ) : (\n // oxlint-disable-next-line react/no-array-index-key -- positional span of one message\n <Text key={index}>{span.text}</Text>\n ),\n );\n}\n\n/**\n * An agent's notification under its title: the subtitle, the message (short\n * paragraphs and bullets) and its facts as a quiet two-column list.\n */\nfunction NotificationContent({ item }: { item: InboxItem }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const blocks = parseNotificationText(item.body);\n // One label column for every fact, as wide as the longest label needs.\n const longest = Math.max(0, ...item.facts.map((fact) => fact.label.length));\n const labelWidth = Math.min(132, Math.max(56, Math.ceil(longest * 7.4) + 4));\n const text = { ...fontStyle(theme), fontSize: 14, lineHeight: 20, color: c[\"fg-muted\"] };\n return (\n <>\n {item.subtitle ? (\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme), fontSize: 13, lineHeight: 20, color: c[\"fg-subtle\"] }}\n >\n {item.subtitle}\n </Text>\n ) : null}\n {blocks.length > 0 ? (\n <View style={{ gap: 6, marginTop: 2 }}>\n {blocks.map((block, index) =>\n block.kind === \"paragraph\" ? (\n // oxlint-disable-next-line react/no-array-index-key -- positional block of one message\n <Text key={index} style={text}>\n <Spans spans={block.spans} />\n </Text>\n ) : (\n // oxlint-disable-next-line react/no-array-index-key -- positional block of one message\n <View key={index} style={{ gap: 2 }}>\n {block.items.map((spans, bullet) => (\n // oxlint-disable-next-line react/no-array-index-key -- positional bullet of one list\n <View key={bullet} style={{ flexDirection: \"row\", gap: 8 }}>\n <View\n style={{\n width: 4,\n height: 4,\n borderRadius: 2,\n marginTop: 8,\n marginLeft: 2,\n backgroundColor: c[\"fg-subtle\"],\n }}\n />\n <Text style={[text, { flex: 1 }]}>\n <Spans spans={spans} />\n </Text>\n </View>\n ))}\n </View>\n ),\n )}\n </View>\n ) : null}\n {item.facts.length > 0 ? (\n <View style={{ marginTop: 8, gap: 2 }}>\n {item.facts.map((fact) => (\n <View key={fact.label} style={{ flexDirection: \"row\", gap: 16 }}>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n width: labelWidth,\n fontSize: 13,\n lineHeight: 20,\n color: c[\"fg-subtle\"],\n }}\n >\n {fact.label}\n </Text>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: 13,\n lineHeight: 20,\n color: c.fg,\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {fact.value}\n </Text>\n </View>\n ))}\n </View>\n ) : null}\n </>\n );\n}\n\n/** Each revealed swipe action's width. */\nconst SWIPE_ACTION = 76;\n/** A partial swipe past this opens the actions. */\nconst SWIPE_OPEN = 56;\n/** A long swipe past this dismisses outright: just beyond the open actions,\n * so dismissing never needs a drag across the whole row. */\nconst SWIPE_FULL = SWIPE_ACTION * 2 + 20;\n/** A quick leftward flick past one action's width also dismisses. */\nconst FLICK_VELOCITY = 1.1;\n\ntype SwipeAction = { label: string; icon: NativeIconName; color: string; onPress: () => void };\n\n/**\n * A row that swipes like Mail: drag left to reveal Snooze and Dismiss, or keep\n * going to dismiss in one motion (a light haptic marks the point). Drags to the\n * right stay with the system back gesture.\n */\nfunction SwipeRow(props: {\n children: ReactNode;\n snooze: SwipeAction;\n dismiss: SwipeAction;\n onThreshold?: (() => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const x = useRef(new Animated.Value(0)).current;\n const width = useRef(0);\n const base = useRef(0);\n const full = useRef(false);\n const [open, setOpen] = useState(false);\n const [dragging, setDragging] = useState(false);\n const latest = useRef(props);\n latest.current = props;\n const settle = useCallback(\n (to: number) => {\n base.current = to;\n setOpen(to !== 0);\n Animated.spring(x, { toValue: to, useNativeDriver: true, bounciness: 0, speed: 18 }).start(\n () => {\n if (to === 0) setDragging(false);\n },\n );\n },\n [x],\n );\n const responder = useMemo(\n () =>\n PanResponder.create({\n // Clearly horizontal drags only: to the left from rest, either way once open.\n onMoveShouldSetPanResponderCapture: (_event, gesture) =>\n Math.abs(gesture.dx) > 10 &&\n Math.abs(gesture.dx) > Math.abs(gesture.dy) * 1.6 &&\n (gesture.dx < 0 || base.current !== 0),\n onPanResponderTerminationRequest: () => false,\n onPanResponderGrant: () => {\n x.stopAnimation();\n setDragging(true);\n },\n onPanResponderMove: (_event, gesture) => {\n const next = Math.min(0, base.current + gesture.dx);\n x.setValue(next);\n const past = next < -SWIPE_FULL;\n if (past !== full.current) {\n full.current = past;\n if (past) latest.current.onThreshold?.();\n }\n },\n onPanResponderRelease: (_event, gesture) => {\n const end = Math.min(0, base.current + gesture.dx);\n const flicked = gesture.vx < -FLICK_VELOCITY && end < -SWIPE_ACTION;\n if (full.current || flicked) {\n full.current = false;\n Animated.timing(x, {\n toValue: -(width.current || 400),\n duration: 160,\n useNativeDriver: true,\n }).start(() => {\n latest.current.dismiss.onPress();\n // Back in place in case the row stays (the dismissal failed).\n setTimeout(() => {\n x.setValue(0);\n base.current = 0;\n setOpen(false);\n setDragging(false);\n }, 800);\n });\n return;\n }\n settle(end < -SWIPE_OPEN && gesture.vx <= 0.3 ? -SWIPE_ACTION * 2 : 0);\n },\n onPanResponderTerminate: () => {\n full.current = false;\n settle(0);\n },\n }),\n [settle, x],\n );\n // Snooze rides along with the row's edge on a long swipe, then fades as\n // Dismiss takes the whole strip.\n const snoozeShift = x.interpolate({\n inputRange: [-SWIPE_ACTION * 2 - 1, -SWIPE_ACTION * 2, 0],\n outputRange: [-1, 0, 0],\n extrapolateLeft: \"extend\",\n extrapolateRight: \"clamp\",\n });\n const snoozeOpacity = x.interpolate({\n inputRange: [-SWIPE_FULL, -SWIPE_ACTION * 2 - 24, 0],\n outputRange: [0, 1, 1],\n extrapolate: \"clamp\",\n });\n const button = (action: SwipeAction, after: () => void) => (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={action.label}\n onPress={() => {\n after();\n action.onPress();\n }}\n style={{\n width: SWIPE_ACTION,\n height: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n backgroundColor: action.color,\n }}\n >\n <Icon name={action.icon} size={18} color=\"#ffffff\" />\n <Text style={{ ...fontStyle(theme, 600), fontSize: 13, color: \"#ffffff\" }}>\n {action.label}\n </Text>\n </Pressable>\n );\n return (\n <View\n onLayout={(event: LayoutChangeEvent) => {\n width.current = event.nativeEvent.layout.width;\n }}\n style={{ overflow: \"hidden\", borderRadius: theme.radius.md }}\n >\n {dragging || open ? (\n <View\n style={{\n position: \"absolute\",\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n backgroundColor: props.dismiss.color,\n }}\n >\n <Animated.View\n style={{ opacity: snoozeOpacity, transform: [{ translateX: snoozeShift }] }}\n >\n {button(props.snooze, () => settle(0))}\n </Animated.View>\n {button(props.dismiss, () => undefined)}\n </View>\n ) : null}\n <Animated.View\n {...responder.panHandlers}\n style={{ transform: [{ translateX: x }], backgroundColor: theme.colors.bg }}\n >\n {props.children}\n {open ? (\n // While open, a tap on the row closes the actions instead of opening it.\n <Pressable\n accessibilityLabel={t(\"native.timeline.inbox.closeActions\")}\n onPress={() => settle(0)}\n style={{ position: \"absolute\", top: 0, bottom: 0, left: 0, right: 0 }}\n />\n ) : null}\n </Animated.View>\n </View>\n );\n}\n\nfunction relative(t: OpenGeniText, iso: string): string {\n const seconds = Math.max(0, (Date.now() - Date.parse(iso)) / 1000);\n if (seconds < 60) return t(\"native.timeline.inbox.justNow\");\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return t(\"native.timeline.inbox.minutesMinAgo\", { minutes });\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours} h ago`;\n const days = Math.floor(hours / 24);\n return days === 1\n ? t(\"native.timeline.inbox.yesterday\")\n : t(\"native.timeline.inbox.daysDaysAgo\", { days });\n}\n\nfunction tomorrowMorning(): Date {\n const date = new Date();\n date.setDate(date.getDate() + 1);\n date.setHours(8, 0, 0, 0);\n return date;\n}\n\n/** How long ago, or until when a snoozed item stays hidden. */\nfunction when(t: OpenGeniText, item: InboxItem): string {\n if (item.snoozedUntil === null || Date.parse(item.snoozedUntil) <= Date.now()) {\n return relative(t, item.updatedAt);\n }\n const until = new Date(item.snoozedUntil);\n const time = until.toLocaleTimeString(undefined, { hour: \"2-digit\", minute: \"2-digit\" });\n return until.toDateString() === new Date().toDateString()\n ? t(\"native.timeline.inbox.untilTime\", { time })\n : t(\"native.timeline.inbox.untilLocaledatestringTime\", {\n localeDateString: until.toLocaleDateString(undefined, { weekday: \"short\" }),\n time,\n });\n}\n\nexport interface NativeInboxListProps {\n client: NativeInboxClient;\n inbox: ReturnType<typeof useNativeInbox>;\n /** Open the item's session (and its question or approval there). */\n onOpenSession: (item: InboxItem) => void;\n /** Names for the workspace line when items span workspaces. */\n workspaceNames?: ReadonlyMap<string, string> | undefined;\n /** A short confirmation after an action (\"Approved\"). */\n onNotice?: ((message: string) => void) | undefined;\n /** A light haptic when a swipe passes the point where letting go acts. */\n onSwipeThreshold?: (() => void) | undefined;\n}\n\n/** The Inbox's sections and rows; the host supplies the screen around it. */\nexport function NativeInboxList({\n client,\n inbox,\n onOpenSession,\n workspaceNames,\n onNotice,\n onSwipeThreshold,\n}: NativeInboxListProps) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const openLink = useOpenNativeLink();\n const [busy, setBusy] = useState<Record<string, string>>({});\n const now = Date.now();\n const items = useMemo(() => inbox.data?.items ?? [], [inbox.data]);\n const awake = items.filter((item) => !snoozedNow(item, now));\n // Most important first: what waits on the person, then agents' notes, then replies.\n const needsYou = awake.filter((item) => isNeedsYouKind(item.kind));\n const fromAgents = awake.filter((item) => item.kind === \"notification\");\n const replies = awake.filter((item) => item.kind === \"reply\");\n const snoozed = items.filter((item) => snoozedNow(item, now));\n const spansWorkspaces = new Set(items.map((item) => item.workspaceId)).size > 1;\n\n // An agent's note is read once shown in full here (the dot stays for this\n // visit). A reply shows only its start, so it is read once opened, here or\n // in its session; reading never removes it.\n const shownUnread = useRef(new Set<string>());\n useEffect(() => {\n const unseen = items.filter(\n (item) => item.unread && item.kind !== \"reply\" && !shownUnread.current.has(item.id),\n );\n if (unseen.length === 0) return;\n for (const item of unseen) shownUnread.current.add(item.id);\n const timer = setTimeout(() => {\n for (const item of unseen)\n void client.updateInboxItem(item.id, { seen: true }).catch(() => undefined);\n }, 1500);\n return () => clearTimeout(timer);\n }, [client, items]);\n\n const leave = (item: InboxItem) =>\n inbox.patch((current) => current.filter((each) => each.id !== item.id));\n\n // Opening an item reads it.\n const open = (item: InboxItem) => {\n if (item.unread) {\n inbox.patch((current) =>\n current.map((each) => (each.id === item.id ? { ...each, unread: false } : each)),\n );\n void client.updateInboxItem(item.id, { seen: true }).catch(() => undefined);\n }\n // Another member's private session would not open for this person.\n if (item.sessionAvailable === false) return;\n onOpenSession(item);\n };\n\n const run = async (item: InboxItem, label: string, action: () => Promise<void>) => {\n setBusy((current) => ({ ...current, [item.id]: label }));\n try {\n await action();\n void inbox.refresh();\n } catch (error) {\n Alert.alert(\n t(\"native.timeline.inbox.thatDidnTGoThrough\"),\n error instanceof Error ? error.message : t(\"native.timeline.inbox.tryAgain\"),\n );\n } finally {\n setBusy(({ [item.id]: _done, ...rest }) => rest);\n }\n };\n\n const decide = (item: InboxItem, decision: \"approve\" | \"reject\") =>\n void run(item, decision, async () => {\n await client.sendApprovalDecision(item.workspaceId, item.sessionId, {\n approvalId: item.sourceKey,\n decision,\n });\n leave(item);\n onNotice?.(\n decision === \"approve\"\n ? t(\"native.timeline.inbox.approved\")\n : t(\"native.timeline.inbox.denied\"),\n );\n });\n\n const choose = (item: InboxItem, choice: { id: string; label: string }) =>\n void run(item, `choice:${choice.id}`, async () => {\n const request = await client.getHumanInputRequest(\n item.workspaceId,\n item.sessionId,\n item.sourceKey,\n );\n const question = request.questions[0];\n if (request.status !== \"pending\" || !question) {\n leave(item);\n onNotice?.(t(\"native.timeline.inbox.alreadyAnswered\"));\n return;\n }\n await client.submitHumanInputResponse(item.workspaceId, item.sessionId, item.sourceKey, {\n outcome: \"answered\",\n answers: [{ questionId: question.id, values: [choice.id] }],\n });\n leave(item);\n onNotice?.(t(\"native.timeline.inbox.answeredLabel\", { label: choice.label }));\n });\n\n const snooze = (item: InboxItem, until: Date | null) =>\n void run(item, \"snooze\", async () => {\n const snoozedUntil = until ? until.toISOString() : null;\n inbox.patch((current) =>\n current.map((each) => (each.id === item.id ? { ...each, snoozedUntil } : each)),\n );\n await client.updateInboxItem(item.id, { snoozedUntil });\n });\n\n const dismiss = (item: InboxItem) =>\n void run(item, \"dismiss\", async () => {\n leave(item);\n await client.updateInboxItem(item.id, { dismissed: true });\n });\n\n const showSheet = (\n title: string,\n actions: Array<{ label: string; run: () => void; destructive?: boolean }>,\n ) => {\n if (Platform.OS === \"ios\") {\n ActionSheetIOS.showActionSheetWithOptions(\n {\n title,\n options: [...actions.map((action) => action.label), t(\"native.timeline.inbox.cancel\")],\n cancelButtonIndex: actions.length,\n destructiveButtonIndex: actions.findIndex((action) => action.destructive),\n },\n (index) => actions[index]?.run(),\n );\n return;\n }\n Alert.alert(title, undefined, [\n ...actions.map((action) => ({\n text: action.label,\n style: action.destructive ? (\"destructive\" as const) : (\"default\" as const),\n onPress: action.run,\n })),\n { text: t(\"native.timeline.inbox.cancel\"), style: \"cancel\" as const },\n ]);\n };\n\n // A swipe toward the right snoozes: pick how long, or bring a snoozed one back.\n const swipeSnooze = (item: InboxItem) => {\n if (snoozedNow(item, Date.now())) {\n snooze(item, null);\n onNotice?.(t(\"native.timeline.inbox.backInYourInbox\"));\n return;\n }\n showSheet(t(\"native.timeline.inbox.snooze\"), [\n {\n label: t(\"native.timeline.inbox.for1Hour\"),\n run: () => snooze(item, new Date(Date.now() + 3_600_000)),\n },\n {\n label: t(\"native.timeline.inbox.untilTomorrowMorning\"),\n run: () => snooze(item, tomorrowMorning()),\n },\n ]);\n };\n\n const openMenu = (item: InboxItem) => {\n const isSnoozed = snoozedNow(item, Date.now());\n const actions: Array<{ label: string; run: () => void; destructive?: boolean }> = [\n { label: t(\"native.timeline.inbox.openSession\"), run: () => open(item) },\n ...(isSnoozed\n ? [{ label: t(\"native.timeline.inbox.unsnooze\"), run: () => snooze(item, null) }]\n : [\n {\n label: t(\"native.timeline.inbox.snoozeFor1Hour\"),\n run: () => snooze(item, new Date(Date.now() + 3_600_000)),\n },\n {\n label: t(\"native.timeline.inbox.snoozeUntilTomorrow\"),\n run: () => snooze(item, tomorrowMorning()),\n },\n ]),\n {\n label: isNeedsYouKind(item.kind)\n ? t(\"native.timeline.inbox.removeFromInbox\")\n : t(\"native.timeline.inbox.dismiss\"),\n run: () => dismiss(item),\n destructive: true,\n },\n ];\n showSheet(item.title, actions);\n };\n\n // Where it comes from; the time sits apart so a long session title never hides it.\n const meta = (item: InboxItem): string => {\n const parts: string[] = [];\n // Another member's agent sent it: say who, first.\n if (item.sender) parts.push(t(\"native.timeline.inbox.fromLabel\", { label: item.sender.label }));\n if (item.kind === \"notification\" && item.urgency === \"time_sensitive\") {\n parts.push(t(\"native.timeline.inbox.timeSensitive\"));\n }\n if (item.kind === \"question\") parts.push(t(\"native.timeline.inbox.question\"));\n if (item.kind === \"goal_paused\") parts.push(t(\"native.timeline.inbox.goalPaused\"));\n if (item.kind === \"reply\") parts.push(t(\"native.timeline.inbox.reply\"));\n if (item.kind === \"approval\" && !item.body) parts.push(t(\"native.timeline.inbox.approval\"));\n if (item.sessionAvailable !== false)\n parts.push(item.sessionTitle ?? t(\"native.timeline.inbox.untitledSession\"));\n const workspace = spansWorkspaces ? workspaceNames?.get(item.workspaceId) : undefined;\n if (workspace) parts.push(workspace);\n if (item.kind === \"question\" && item.body) parts.push(item.body);\n return parts.join(\" · \");\n };\n\n const actions = (item: InboxItem) => {\n const pending = busy[item.id];\n if (item.kind === \"approval\") {\n return (\n <>\n <Button\n label={\n pending === \"reject\"\n ? t(\"native.timeline.inbox.denying\")\n : t(\"native.timeline.inbox.deny\")\n }\n icon=\"x\"\n disabled={Boolean(pending)}\n onPress={() => decide(item, \"reject\")}\n />\n <Button\n label={\n pending === \"approve\"\n ? t(\"native.timeline.inbox.approving\")\n : t(\"native.timeline.inbox.approve\")\n }\n icon=\"check\"\n disabled={Boolean(pending)}\n onPress={() => decide(item, \"approve\")}\n />\n </>\n );\n }\n if (item.kind === \"question\" && item.choices.length > 0) {\n return item.choices.map((choice) => (\n <Button\n key={choice.id}\n label={\n pending === `choice:${choice.id}` ? t(\"native.timeline.inbox.sending\") : choice.label\n }\n disabled={Boolean(pending)}\n onPress={() => choose(item, choice)}\n />\n ));\n }\n if (item.kind === \"question\") {\n return (\n <Button\n label={t(\"native.timeline.inbox.answer\")}\n disabled={Boolean(pending)}\n onPress={() => onOpenSession(item)}\n />\n );\n }\n if (item.kind === \"notification\" && item.link) {\n const url = item.link.url;\n return <Button label={item.link.label} icon=\"arrow-up-right\" onPress={() => openLink(url)} />;\n }\n return null;\n };\n\n const row = (item: InboxItem, index: number) => {\n const unread = !isNeedsYouKind(item.kind) && (item.unread || shownUnread.current.has(item.id));\n const rowActions = actions(item);\n return (\n <View key={item.id}>\n {index > 0 ? (\n <View style={{ height: 1, marginLeft: 48, backgroundColor: c.border }} />\n ) : null}\n <SwipeRow\n onThreshold={onSwipeThreshold}\n snooze={{\n label: snoozedNow(item, now)\n ? t(\"native.timeline.inbox.unsnooze\")\n : t(\"native.timeline.inbox.snooze\"),\n icon: \"alarm-clock\",\n color: c[\"status-waiting\"],\n onPress: () => swipeSnooze(item),\n }}\n dismiss={{\n label: isNeedsYouKind(item.kind)\n ? t(\"native.timeline.inbox.remove\")\n : t(\"native.timeline.inbox.dismiss\"),\n icon: \"x\",\n color: c[\"danger-fill\"],\n onPress: () => dismiss(item),\n }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`${item.title}. ${meta(item)}, ${when(t, item)}`}\n accessibilityHint={t(\"native.timeline.inbox.opensTheSession\")}\n accessibilityActions={[\n {\n name: \"snooze\",\n label: snoozedNow(item, now)\n ? t(\"native.timeline.inbox.unsnooze\")\n : t(\"native.timeline.inbox.snooze\"),\n },\n {\n name: \"dismiss\",\n label:\n item.kind === \"notification\"\n ? t(\"native.timeline.inbox.dismiss\")\n : t(\"native.timeline.inbox.removeFromInbox\"),\n },\n ]}\n onAccessibilityAction={(event) => {\n if (event.nativeEvent.actionName === \"snooze\") swipeSnooze(item);\n if (event.nativeEvent.actionName === \"dismiss\") dismiss(item);\n }}\n onPress={() => open(item)}\n onLongPress={() => openMenu(item)}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n gap: 12,\n paddingVertical: 14,\n paddingHorizontal: 4,\n borderRadius: theme.radius.md,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <View style={{ width: 32, height: 32, marginTop: 1 }}>\n <View\n style={{\n width: 32,\n height: 32,\n borderRadius: 10,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Icon\n name={kindIcon(item)}\n size={16}\n color={\n item.kind === \"notification\" && item.urgency === \"time_sensitive\"\n ? c[\"status-waiting\"]\n : c[\"fg-muted\"]\n }\n />\n </View>\n {unread ? (\n <View\n accessibilityLabel={t(\"native.timeline.inbox.unread\")}\n style={{\n position: \"absolute\",\n top: -3,\n right: -3,\n width: 10,\n height: 10,\n borderRadius: 5,\n borderWidth: 2,\n borderColor: c.bg,\n backgroundColor: c.accent,\n }}\n />\n ) : null}\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n numberOfLines={2}\n style={{ ...fontStyle(theme, 500), fontSize: 15, lineHeight: 20, color: c.fg }}\n >\n {item.title}\n </Text>\n {item.body && item.kind === \"approval\" ? (\n <View\n style={{\n alignSelf: \"flex-start\",\n maxWidth: \"100%\",\n marginTop: 4,\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 6,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n <Text\n numberOfLines={1}\n style={{\n fontFamily: Platform.OS === \"ios\" ? \"Menlo\" : \"monospace\",\n fontSize: 12,\n color: c.fg,\n }}\n >\n {item.body}\n </Text>\n </View>\n ) : item.kind === \"notification\" ? (\n <NotificationContent item={item} />\n ) : item.kind === \"reply\" && item.body ? (\n <Text\n numberOfLines={2}\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n }}\n >\n {notificationPlainText(item.body)}\n </Text>\n ) : null}\n <View style={{ flexDirection: \"row\", marginTop: 2 }}>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n flexShrink: 1,\n fontSize: 12,\n lineHeight: 18,\n color: c[\"fg-subtle\"],\n }}\n >\n {meta(item)}\n </Text>\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n fontSize: 12,\n lineHeight: 18,\n color: c[\"fg-subtle\"],\n }}\n >\n {` · ${when(t, item)}`}\n </Text>\n </View>\n {rowActions ? (\n <View style={{ flexDirection: \"row\", flexWrap: \"wrap\", gap: 8, marginTop: 12 }}>\n {rowActions}\n </View>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={t(\"native.timeline.inbox.moreActionsForTitle\", {\n title: item.title,\n })}\n hitSlop={8}\n onPress={() => openMenu(item)}\n style={({ pressed }) => ({\n width: 32,\n height: 32,\n marginTop: -4,\n marginRight: -4,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 10,\n backgroundColor: pressed ? c[\"surface-3\"] : \"transparent\",\n })}\n >\n <Icon name=\"ellipsis\" size={16} color={c[\"fg-subtle\"]} />\n </Pressable>\n </Pressable>\n </SwipeRow>\n </View>\n );\n };\n\n const section = (title: string, list: InboxItem[], first: boolean) =>\n list.length === 0 ? null : (\n <View key={title} style={{ marginTop: first ? 16 : 32 }}>\n <View style={{ paddingHorizontal: 2 }}>\n <SectionLabel>{title}</SectionLabel>\n </View>\n {list.map(row)}\n </View>\n );\n\n // A failed first load says so, rather than claiming nothing waits.\n if (!inbox.data && inbox.error && !inbox.loading) {\n return (\n <View style={{ alignItems: \"center\", paddingTop: 72, paddingHorizontal: 32, gap: 12 }}>\n <Text style={{ ...fontStyle(theme, 600), fontSize: 16, color: c.fg, textAlign: \"center\" }}>\n {t(\"native.timeline.inbox.couldnTLoadYourInbox\")}\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n textAlign: \"center\",\n }}\n >\n {t(\"native.timeline.inbox.checkYourConnectionOrThis\")}\n </Text>\n <Button label={t(\"native.timeline.inbox.tryAgain\")} onPress={() => void inbox.refresh()} />\n </View>\n );\n }\n\n if (awake.length === 0 && snoozed.length === 0) {\n return (\n <View style={{ alignItems: \"center\", paddingTop: 72, paddingHorizontal: 32, gap: 10 }}>\n <View\n style={{\n width: 44,\n height: 44,\n borderRadius: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: withAlpha(c[\"fg-muted\"], 0.08),\n }}\n >\n <Icon name=\"inbox\" size={20} color={c[\"fg-muted\"]} />\n </View>\n <Text style={{ ...fontStyle(theme, 600), fontSize: 16, color: c.fg, textAlign: \"center\" }}>\n {inbox.loading\n ? t(\"native.timeline.inbox.loadingYourInbox\")\n : t(\"native.timeline.inbox.nothingIsWaitingOnYou\")}\n </Text>\n {inbox.loading ? null : (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n textAlign: \"center\",\n }}\n >\n {t(\"native.timeline.inbox.whenAnAgentAsksYou\")}\n </Text>\n )}\n </View>\n );\n }\n\n return (\n <View>\n {section(t(\"native.timeline.inbox.needsYou\"), needsYou, true)}\n {section(t(\"native.timeline.inbox.fromYourAgents\"), fromAgents, needsYou.length === 0)}\n {section(\n t(\"native.timeline.inbox.replies\"),\n replies,\n needsYou.length === 0 && fromAgents.length === 0,\n )}\n {awake.length === 0 ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: 14,\n color: c[\"fg-muted\"],\n marginTop: 8,\n paddingHorizontal: 4,\n }}\n >\n {t(\"native.timeline.inbox.nothingNeedsYouRightNow\")}\n </Text>\n ) : null}\n {section(t(\"native.timeline.inbox.snoozed\"), snoozed, awake.length === 0)}\n </View>\n );\n}\n"]}
|