@opengeni/react-native 6.5.2-canary.41607687019001 → 6.7.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-7ISTEDPD.js → chunk-6SF5EQRS.js} +13 -3
- package/dist/chunk-6SF5EQRS.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/meetings/index.js +3 -3
- package/dist/timeline/index.js +3 -3
- package/dist/timeline/previews.js +1 -1
- package/package.json +5 -6
- package/src/timeline/decisions.tsx +16 -0
- package/dist/chunk-7ISTEDPD.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/timeline/text-selection.ts","../src/timeline/activity.tsx","../src/timeline/controls.tsx","../src/timeline/inline-input-focus.ts","../src/timeline/selector.tsx","../src/timeline/secret-field.tsx","../src/timeline/in-chat-connect.tsx","../src/timeline/reading-position.ts","../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/paste.ts","../src/timeline/composer.tsx","../src/timeline/feedback.tsx","../src/timeline/mcp-question.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","jsxs","Pressable","jsx","Text","createContext","useContext","View","useRef","text","useState","TextInput","Fragment","Platform","useMemo","ActivityIndicator","toolDisplayName","Animated","Easing","useCallback","ScrollView","FadeIn","FadeOut","AccessibilityInfo","useWindowDimensions","Modal","KeyboardAvoidingView","Linking","useAnimatedStyle","SESSION_STATUS_PRESENTATION","Chip","annotationHasNote","Alert","Image","defaultChatComposerMessages","sessionDisplayTitle","openLink","PanResponder","actions","ActionSheetIOS"],"mappings":"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","file":"chunk-7ISTEDPD.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/**\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 skill: \"graduation-cap\",\n settings: \"settings\",\n bell: \"bell\",\n phone: \"phone\",\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 { 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 // A disabled primary loses its fill: the pale wash alone would look the\n // same enabled or not.\n const palette =\n disabled && variant === \"primary\"\n ? { bg: c[\"surface-2\"], border: c.border, fg: c[\"fg-subtle\"] }\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 { createContext, useContext } from \"react\";\n\n/** Anything the timeline can locate on screen, such as a focused `TextInput`. */\nexport type InlineInputNode = {\n measureInWindow(callback: (x: number, y: number, width: number, height: number) => void): void;\n};\n\n/**\n * Fields inside timeline cards (a key in a connect card, a secret answer)\n * report focus here. While one is focused the timeline keeps it above the\n * keyboard and hides its floating navigation buttons, which would otherwise\n * cover the card being filled in.\n */\nexport type InlineInputFocus = {\n focused(node: InlineInputNode | null): void;\n blurred(node: InlineInputNode | null): void;\n};\n\nexport const InlineInputFocusContext = createContext<InlineInputFocus | null>(null);\n\n/** Focus and blur handlers for one inline field; no-ops outside a timeline. */\nexport function useInlineInputFocus(node: () => InlineInputNode | null): {\n onFocus: () => void;\n onBlur: () => void;\n} {\n const focus = useContext(InlineInputFocusContext);\n return {\n onFocus: () => focus?.focused(node()),\n onBlur: () => focus?.blurred(node()),\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, as on web: solid when chosen. */\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: 1,\n width: 18,\n height: 18,\n borderRadius: multi ? 5 : 9,\n borderWidth: 1,\n borderColor: selected ? c.fg : c[\"border-strong\"],\n backgroundColor: selected ? c.fg : c[\"surface-1\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {selected ? (\n multi ? (\n <Icon name=\"check\" size={12} color={c.bg} strokeWidth={3} />\n ) : (\n <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: c.bg }} />\n )\n ) : null}\n </View>\n );\n}\n","import type { HumanInputQuestion, HumanInputSecretSaveTo } from \"@opengeni/sdk\";\nimport { useEffect, useRef, useState, type ComponentRef, type RefObject } 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 secretCanGenerate,\n secretInputTraits,\n secretPatternMismatch,\n secretUsernameTraits,\n type SecretDraft,\n type SecretFieldMessages,\n type SecretInputTraits,\n} from \"./secret-field-model\";\nimport { useInlineInputFocus } from \"./inline-input-focus\";\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 <SecureValueInput\n inputRef={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 traits={traits}\n placeholder={messages.placeholder[traits.mode]}\n onChangeText={change}\n invalid={Boolean(error)}\n revealed={revealed}\n onRevealedChange={setRevealed}\n showLabel={messages.show}\n hideLabel={messages.hide}\n />\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 || (secretCanGenerate(spec) && !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 {secretCanGenerate(spec) && !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\nexport interface SecureValueInputProps {\n inputRef?: RefObject<ComponentRef<typeof TextInput> | null> | undefined;\n testID?: string | undefined;\n accessibilityLabel: string;\n accessibilityHint?: string | undefined;\n editable: boolean;\n traits: SecretInputTraits;\n placeholder: string;\n /** Receives every keystroke; keep it in a ref, never in React state. */\n onChangeText: (value: string) => void;\n onSubmitEditing?: (() => void) | undefined;\n returnKeyType?: \"done\" | \"next\" | undefined;\n invalid?: boolean | undefined;\n revealed: boolean;\n onRevealedChange: (revealed: boolean) => void;\n showLabel: string;\n hideLabel: string;\n}\n\n/**\n * The secure value field: a lock, an uncontrolled `TextInput` with the\n * platform's secure entry and autofill traits, and a show / hide toggle. The\n * value never enters React state. Secret questions and in-chat key setup share it.\n */\nexport function SecureValueInput({\n inputRef,\n testID,\n accessibilityLabel,\n accessibilityHint,\n editable,\n traits,\n placeholder,\n onChangeText,\n onSubmitEditing,\n returnKeyType = \"done\",\n invalid,\n revealed,\n onRevealedChange,\n showLabel,\n hideLabel,\n}: SecureValueInputProps) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n // In a timeline card the conversation keeps this field above the keyboard.\n const frame = useRef<ComponentRef<typeof View>>(null);\n const focus = useInlineInputFocus(() => frame.current);\n return (\n <View\n ref={frame}\n style={{\n minHeight: 44,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: invalid ? c[\"status-failed\"] : c.border,\n backgroundColor: c[\"surface-1\"],\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingLeft: 10,\n }}\n >\n <Icon name=\"lock\" size={14} color={c[\"fg-subtle\"]} />\n <TextInput\n ref={inputRef}\n testID={testID}\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n editable={editable}\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={returnKeyType}\n onSubmitEditing={onSubmitEditing}\n onChangeText={onChangeText}\n onFocus={focus.onFocus}\n onBlur={focus.onBlur}\n placeholder={placeholder}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c.fg,\n flex: 1,\n minHeight: 42,\n paddingHorizontal: 8,\n }}\n />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={revealed ? hideLabel : showLabel}\n accessibilityState={{ disabled: !editable }}\n disabled={!editable}\n onPress={() => onRevealedChange(!revealed)}\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","import { useOpenGeniText } from \"@opengeni/react/messages\";\nimport {\n authNeededPresentation,\n canFinishPreparedMcpSetup,\n inChatConnectDecision,\n isInChatConnectRequest,\n isPreparedMcpSetup,\n useConnectSetupFlow,\n useInChatConnectSupport,\n useIntegrationCapabilityConnect,\n useMcpCapabilityConnect,\n usePreparedMcpSetupAccess,\n usePreparedMcpSetupAttempt,\n useChatConnectionsAllowed,\n useConnect,\n showsMcpServerLabel,\n type ConnectAttempt,\n type ConnectAttemptHints,\n type ConnectController,\n type ConnectNavigation,\n type ConnectWindowHost,\n type InChatConnectSource,\n} from \"@opengeni/react/in-chat-connect-model\";\nimport type { AuthNeededItem, TimelineItem } from \"@opengeni/react/session\";\nimport type { HumanInputSecretSpec, OpenGeniClient } from \"@opengeni/sdk\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { Linking, Pressable, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { DecisionActions, DecisionButton, DecisionCard } from \"./decision-card\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { useInlineInputFocus } from \"./inline-input-focus\";\nimport { SecureValueInput } from \"./secret-field\";\nimport { defaultSecretFieldMessages, secretInputTraits } from \"./secret-field-model\";\nimport { Selector } from \"./selector\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n An agent's \"connect your account\" request, finished in the chat: the same\n cards and decisions as the web conversation (shared from\n @opengeni/react/in-chat-connect-model), drawn natively. Sign-in opens the\n system sign-in browser and returns to the app; keys go into the secure\n field and never enter React state. Each card follows the attempt's durable\n state, so the window closing is never taken as success, and once setup is\n done the agent continues the request that asked.\n -------------------------------------------------------------------------- */\n\n/** The system sign-in browser the host app provides (for example expo-web-browser). */\nexport interface NativeConnectBrowser {\n /**\n * Open `url` in the system sign-in browser. Resolve once it closes or hands\n * back to the app; the result is not read.\n */\n openAuthSession(url: string): Promise<unknown>;\n /** Close a sign-in browser that is still open, where the platform allows it. */\n dismiss?(): void;\n}\n\nexport interface NativeInChatConnectOptions {\n browser: NativeConnectBrowser;\n /**\n * The exact page the provider returns to after sign-in, usually one that\n * hands the person back to this app.\n */\n returnUrl: string;\n /** Open an ordinary link (an approval link to pass on, a verification page). */\n openUrl?: ((url: string) => void) | undefined;\n /**\n * Where cards remember an unfinished attempt (for example the app's secure\n * storage), so setup picks up again after the app was closed mid-sign-in.\n */\n attemptHints?: ConnectAttemptHints | undefined;\n /**\n * Share a link to this conversation (for example through the system share\n * sheet). A computer connects from the computer itself, so with this a\n * request to connect one says so and offers the link to open there.\n */\n shareConversation?: (() => void) | undefined;\n}\n\nfunction requireHttps(url: string): void {\n if (!/^https:\\/\\/[^/@]+(\\/|$)/iu.test(url) || /^https:\\/\\/[^/]*@/iu.test(url))\n throw new Error(\"Connect authorization requires an HTTPS destination without credentials\");\n}\n\n/**\n * The connect cards' sign-in windows on a phone: the system sign-in browser.\n * `closed` turns true once the browser returns, so the card rechecks the\n * attempt's durable state at once instead of waiting out its poll.\n */\nexport function nativeConnectWindowHost(\n browser: NativeConnectBrowser,\n hints?: ConnectAttemptHints | undefined,\n): ConnectWindowHost {\n const window = () => {\n let opened = false;\n let closed = false;\n const close = () => {\n if (!opened || closed) return;\n closed = true;\n try {\n browser.dismiss?.();\n } catch {\n /* The browser may already be gone. */\n }\n };\n const open = (url: string) => {\n requireHttps(url);\n opened = true;\n void Promise.resolve()\n .then(() => browser.openAuthSession(url))\n .catch(() => undefined)\n .finally(() => {\n closed = true;\n });\n };\n const navigation: ConnectNavigation = {\n openPopup(url) {\n open(url);\n return {\n close,\n get closed() {\n return closed;\n },\n };\n },\n redirect: open,\n };\n return { navigation, close };\n };\n return { reserve: window, open: () => window().navigation, ...(hints ? { hints } : {}) };\n}\n\n/**\n * The renderer for agents' connect requests in a native conversation: reads\n * the person's grant and the catalog only while such a request is on screen,\n * then draws the card the web conversation would.\n */\nexport function useNativeInChatConnect({\n client,\n workspaceId,\n sessionId,\n items,\n options,\n}: {\n client: OpenGeniClient | undefined;\n workspaceId: string;\n sessionId: string;\n items: readonly TimelineItem[];\n options: NativeInChatConnectOptions | undefined;\n}): ((item: AuthNeededItem) => ReactNode) | undefined {\n const needed = useMemo(\n () => items.some((item) => item.kind === \"auth-needed\" && isInChatConnectRequest(item)),\n [items],\n );\n const enabled = Boolean(client && options);\n const source = (client ?? {}) as Partial<InChatConnectSource>;\n const chatConnections = useChatConnectionsAllowed(\n (client ?? {}) as Parameters<typeof useChatConnectionsAllowed>[0],\n );\n const support = useInChatConnectSupport(\n source,\n workspaceId,\n needed && enabled && chatConnections,\n );\n const latest = useRef(options);\n latest.current = options;\n return useCallback(\n (item: AuthNeededItem) => {\n const host = latest.current;\n // A computer connects from the computer itself, never from this phone.\n if (item.capability?.id === \"api:connected-machine\")\n return <NativeAuthNeededRow item={item} onShareConversation={host?.shareConversation} />;\n if (!client || !host || !chatConnections) return <NativeAuthNeededRow item={item} />;\n const key = `${workspaceId}:${sessionId}:${item.id}`;\n // A failed read says nothing about this person's access: offer to try\n // again rather than a card that claims they cannot connect.\n if (support.status === \"failed\" && isInChatConnectRequest(item))\n return <NativeConnectLoadFailed item={item} onRetry={support.retry} />;\n if (isPreparedMcpSetup(item)) {\n if (support.status === \"idle\" || support.status === \"loading\")\n return <NativeAuthNeededRow item={item} />;\n return (\n <NativePreparedMcpSetupCard\n key={`${key}:${JSON.stringify(item.setupRequest)}`}\n client={client}\n workspaceId={workspaceId}\n sessionId={sessionId}\n item={item}\n canConfigure={canFinishPreparedMcpSetup(support)}\n options={host}\n />\n );\n }\n // The grant and catalog decide which card, exactly as on the web.\n const decision = inChatConnectDecision(item, support, chatConnections);\n if (decision.kind === \"unavailable\")\n return <NativeAuthNeededRow item={item} setupUnavailable />;\n if (decision.kind === \"integration\")\n return (\n <NativeIntegrationCapabilityCard\n key={`${key}:${decision.capabilityId}`}\n client={client}\n workspaceId={workspaceId}\n sessionId={sessionId}\n capabilityId={decision.capabilityId}\n name={decision.name}\n rationale={item.capability?.rationale ?? \"\"}\n options={host}\n />\n );\n if (decision.kind === \"card\")\n return (\n <NativeMcpCapabilityCard\n key={`${key}:${decision.item.id}`}\n client={client}\n workspaceId={workspaceId}\n sessionId={sessionId}\n capabilityId={decision.item.id}\n name={decision.item.name}\n personalOnly={decision.personalOnly}\n rationale={item.capability?.rationale ?? \"\"}\n options={host}\n />\n );\n return <NativeAuthNeededRow item={item} />;\n },\n [client, workspaceId, sessionId, support, chatConnections],\n );\n}\n\n/** The grant or catalog could not be read: say so plainly and offer a retry. */\nfunction NativeConnectLoadFailed({ item, onRetry }: { item: AuthNeededItem; onRetry: () => void }) {\n const t = useOpenGeniText();\n const { theme, c } = useText();\n const name = authNeededPresentation(t, item).provider;\n return (\n <DecisionCard settled style={{ padding: 16, gap: 12 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 12 }}>\n <Mark name={name} />\n <Text\n numberOfLines={2}\n style={{ ...fontStyle(theme, 600), fontSize: theme.size.md, color: c.fg, flex: 1 }}\n >\n {name}\n </Text>\n </View>\n <Line icon=\"circle-alert\" role=\"status\">\n {t(\"native.timeline.inChatConnect.couldNotLoad\")}\n </Line>\n <DecisionActions\n primary={\n <DecisionButton\n icon=\"rotate-ccw\"\n label={t(\"sessionIntegrationCapabilityCard.retry\")}\n onPress={onRetry}\n />\n }\n />\n </DecisionCard>\n );\n}\n\n/* ------------------------------------------------------------------ frame -- */\n\nfunction useText() {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return {\n theme,\n c,\n body: { ...fontStyle(theme), fontSize: theme.size.base, lineHeight: 20, color: c.fg },\n muted: {\n ...fontStyle(theme),\n fontSize: theme.size.base,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n },\n small: { ...fontStyle(theme), fontSize: theme.size.sm, lineHeight: 17, color: c[\"fg-muted\"] },\n label: { ...fontStyle(theme, 500), fontSize: theme.size.sm, lineHeight: 18, color: c.fg },\n };\n}\n\nfunction monogram(label: string): string {\n const words = label.trim().split(/\\s+/u).filter(Boolean);\n if (!words.length) return \"?\";\n if (words.length === 1) return words[0]!.slice(0, 2).toUpperCase();\n return (words[0]![0]! + words[1]![0]!).toUpperCase();\n}\n\nfunction Mark({ name }: { name: string }) {\n const { theme, c } = useText();\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n width: 36,\n height: 36,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Text style={{ ...fontStyle(theme, 600), fontSize: 12, color: c[\"fg-muted\"] }}>\n {monogram(name)}\n </Text>\n </View>\n );\n}\n\nfunction Line({\n children,\n tone = \"muted\",\n icon,\n role,\n lines,\n}: {\n children: ReactNode;\n tone?: \"body\" | \"muted\" | \"small\" | \"error\" | \"waiting\";\n icon?: NativeIconName | undefined;\n /**\n * `status` is announced politely (progress, outcomes); `alert` only for a\n * step that failed.\n */\n role?: \"status\" | \"alert\" | undefined;\n /** Cap the line count (the agent's reason on a connect card). */\n lines?: number | undefined;\n}) {\n const text = useText();\n const color =\n tone === \"error\"\n ? text.c[\"status-failed\"]\n : tone === \"waiting\"\n ? text.c[\"status-waiting\"]\n : undefined;\n const base = tone === \"body\" ? text.body : tone === \"small\" ? text.small : text.muted;\n const line = (\n <Text\n accessibilityRole={role === \"alert\" ? \"alert\" : undefined}\n accessibilityLiveRegion={role === \"alert\" ? \"assertive\" : role ? \"polite\" : undefined}\n numberOfLines={lines}\n style={{ ...base, ...(color ? { color } : {}), flexShrink: 1 }}\n >\n {children}\n </Text>\n );\n if (!icon) return line;\n return (\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 6 }}>\n <View style={{ paddingTop: tone === \"small\" ? 1 : 3 }}>\n <Icon name={icon} size={13} color={color ?? text.c[\"fg-subtle\"]} />\n </View>\n {line}\n </View>\n );\n}\n\n/**\n * The web capability card at phone width, on the shared decision card: who it\n * is, why the agent asks, and one clear action.\n */\nfunction CapabilityFrame({\n name,\n subtitle,\n description,\n clampDescription = false,\n complete,\n completeLabel,\n note,\n children,\n}: {\n name: string;\n subtitle?: string | undefined;\n /** The connection's kind, for hosts that show it elsewhere; the card shows none. */\n typeLabel: string;\n description?: string | undefined;\n /** The description is the agent's reason: at most two lines, so the action stays in view. */\n clampDescription?: boolean | undefined;\n complete: boolean;\n completeLabel?: string | undefined;\n note?: string | undefined;\n children?: ReactNode;\n}) {\n const t = useOpenGeniText();\n const text = useText();\n const { theme, c } = text;\n return (\n <View style={{ gap: 8 }}>\n <DecisionCard\n settled={complete}\n accessibilityLabel={t(\"sessionCapabilityFrame.nameSetup\", { name })}\n style={{ padding: 16, gap: 12 }}\n >\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 12 }}>\n <Mark name={name} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n accessibilityRole=\"header\"\n numberOfLines={2}\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 21,\n color: c.fg,\n }}\n >\n {name}\n </Text>\n {subtitle ? (\n <Text numberOfLines={1} style={text.small}>\n {subtitle}\n </Text>\n ) : null}\n </View>\n {complete ? <Icon name=\"check\" size={18} color={c[\"status-idle\"]} /> : null}\n </View>\n {complete ? (\n <Line tone=\"body\" role=\"status\">\n {completeLabel ?? t(\"sessionCapabilityFrame.connectedAvailableInThisConversation\")}\n </Line>\n ) : description ? (\n <Line tone=\"body\" lines={clampDescription ? 2 : undefined}>\n {description}\n </Line>\n ) : null}\n {children}\n </DecisionCard>\n {!complete && note ? (\n <View style={{ paddingHorizontal: 4 }}>\n <Line tone=\"small\">{note}</Line>\n </View>\n ) : null}\n </View>\n );\n}\n\n/** The card's one solid action, with \"You choose what to authorize\" under it. */\nfunction PrimaryAction({\n label,\n onPress,\n busy,\n disabled,\n}: {\n label: string;\n onPress: () => void;\n busy?: boolean | undefined;\n disabled?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n return (\n <DecisionActions\n style={{ marginTop: 4 }}\n primary={\n <DecisionButton\n kind=\"primary\"\n label={label}\n busy={busy}\n disabled={disabled}\n onPress={onPress}\n />\n }\n lead={\n <Line tone=\"small\" icon=\"shield-check\">\n {t(\"sessionCapabilityFrame.youChooseWhatToAuthorize\")}\n </Line>\n }\n />\n );\n}\n\nfunction openLink(options: NativeInChatConnectOptions | undefined, url: string) {\n if (options?.openUrl) options.openUrl(url);\n else void Linking.openURL(url);\n}\n\n/* ------------------------------------------------------- connect setup -- */\n\nfunction Choice({\n label,\n detail,\n multi,\n selected,\n disabled,\n onPress,\n}: {\n label: string;\n detail?: string | undefined;\n multi: boolean;\n selected: boolean;\n disabled?: boolean | undefined;\n onPress: () => void;\n}) {\n const text = useText();\n return (\n <Pressable\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityLabel={label}\n accessibilityState={{ checked: selected, disabled: Boolean(disabled) }}\n disabled={disabled}\n onPress={onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n minHeight: 44,\n opacity: disabled ? 0.5 : pressed ? 0.7 : 1,\n })}\n >\n <Selector multi={multi} selected={selected} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text style={text.label}>{label}</Text>\n {detail ? <Text style={text.small}>{detail}</Text> : null}\n </View>\n </Pressable>\n );\n}\n\n/** A key is no website password: no autofill, no saving prompt. */\nconst KEY_TRAITS = secretInputTraits({ itemType: \"api_key\" } as HumanInputSecretSpec);\n\ntype CredentialField = Extract<\n ConnectAttempt[\"nextAction\"],\n { type: \"credentials\" }\n>[\"fields\"][number];\n\n/** One credential: a choice list, a plain text field, or the secure field. */\nfunction CredentialInput({\n field,\n disabled,\n onValue,\n register,\n}: {\n field: CredentialField;\n disabled: boolean;\n onValue: (value: string) => void;\n register: (clear: (() => void) | null) => void;\n}) {\n const t = useOpenGeniText();\n const text = useText();\n const { theme, c } = text;\n const secretText = defaultSecretFieldMessages(t);\n const input = useRef<ComponentRef<typeof TextInput>>(null);\n const [revealed, setRevealed] = useState(false);\n const [option, setOption] = useState(\"\");\n const registerClear = useRef(register);\n registerClear.current = register;\n useEffect(() => {\n registerClear.current(() => {\n input.current?.clear();\n setRevealed(false);\n setOption(\"\");\n });\n return () => registerClear.current(null);\n }, []);\n if (field.options) {\n const choices = field.required\n ? field.options\n : [{ value: \"\", label: t(\"connectSetup.noAccountPublicService\") }, ...field.options];\n return (\n <View style={{ gap: 2 }}>\n <Text style={text.label}>{field.label}</Text>\n <View accessibilityRole=\"radiogroup\" accessibilityLabel={field.label}>\n {choices.map((choice) => (\n <Choice\n key={choice.value || \"none\"}\n label={choice.label}\n multi={false}\n selected={option === choice.value}\n disabled={disabled}\n onPress={() => {\n setOption(choice.value);\n onValue(choice.value);\n }}\n />\n ))}\n </View>\n </View>\n );\n }\n return (\n <View style={{ gap: 6 }}>\n <Text style={text.label}>{field.label}</Text>\n {field.secret ? (\n <SecureValueInput\n inputRef={input}\n testID={`connect-secret-${field.name}`}\n accessibilityLabel={field.label}\n editable={!disabled}\n traits={KEY_TRAITS}\n placeholder={field.label}\n onChangeText={onValue}\n revealed={revealed}\n onRevealedChange={setRevealed}\n showLabel={secretText.show}\n hideLabel={secretText.hide}\n />\n ) : (\n <PlainInput\n inputRef={input}\n label={field.label}\n disabled={disabled}\n onValue={onValue}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c.fg,\n minHeight: 44,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n paddingHorizontal: 10,\n }}\n />\n )}\n </View>\n );\n}\n\nfunction PlainInput({\n inputRef,\n label,\n disabled,\n onValue,\n style,\n}: {\n inputRef: RefObject<ComponentRef<typeof TextInput> | null>;\n label: string;\n disabled: boolean;\n onValue: (value: string) => void;\n style: object;\n}) {\n const { c } = useText();\n const focus = useInlineInputFocus(() => inputRef.current);\n return (\n <TextInput\n ref={inputRef}\n accessibilityLabel={label}\n editable={!disabled}\n onFocus={focus.onFocus}\n onBlur={focus.onBlur}\n autoCorrect={false}\n autoCapitalize=\"none\"\n autoComplete=\"off\"\n importantForAutofill=\"no\"\n onChangeText={onValue}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={style}\n />\n );\n}\n\n/** Counts controller swaps, so a view keyed by it never outlives its controller. */\nfunction useControllerGeneration(controller: ConnectController | null): number {\n const [scope, setScope] = useState(controller);\n const [generation, setGeneration] = useState(0);\n if (scope !== controller) {\n setScope(controller);\n setGeneration(generation + 1);\n }\n return generation;\n}\n\ntype NativeConnectSetupProps = {\n controller: ConnectController;\n authorizeLabel?: string | undefined;\n onAuthorize: (attempt: ConnectAttempt) => void | Promise<unknown>;\n options?: NativeInChatConnectOptions | undefined;\n};\n\n/**\n * The step after the first tap: the same steps as the web setup view. Like\n * the web form it starts fresh for each controller and each attempt, so a\n * key typed into an attempt that was cancelled can never reach a new one.\n */\nexport function NativeConnectSetup(props: NativeConnectSetupProps) {\n const generation = useControllerGeneration(props.controller);\n const attemptId = useConnect(props.controller).attempt?.id ?? \"\";\n return <ScopedConnectSetup key={`${generation}:${attemptId}`} {...props} />;\n}\n\nfunction ScopedConnectSetup({\n controller,\n authorizeLabel,\n onAuthorize,\n options,\n}: NativeConnectSetupProps) {\n const t = useOpenGeniText();\n const text = useText();\n const flow = useConnectSetupFlow(controller, { onAuthorize, inChat: true });\n const { view, attempt } = flow;\n // Typed values live in this ref until submit, never in React state.\n const values = useRef(new Map<string, string>());\n const clears = useRef(new Map<string, () => void>());\n const [filled, setFilled] = useState<ReadonlySet<string>>(new Set());\n const [choice, setChoice] = useState<string | null>(null);\n const [picked, setPicked] = useState<ReadonlySet<string>>(new Set());\n const step = attempt ? `${attempt.id}:${attempt.revision}` : \"\";\n const [shownStep, setShownStep] = useState(step);\n if (shownStep !== step) {\n // A new step asks afresh: nothing typed or chosen for the last one stays.\n setShownStep(step);\n setChoice(null);\n setPicked(new Set());\n setFilled(new Set());\n values.current.clear();\n }\n if (!attempt) return <Line role=\"status\">{flow.status}</Line>;\n const action = attempt.nextAction;\n const disabled = flow.busy;\n const toggle = (id: string) =>\n setPicked((current) => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n const missingRequired =\n action.type === \"credentials\" &&\n action.fields.some((field) => field.required && !filled.has(field.name));\n const submit = () => {\n if (flow.busy) return;\n if (action.type === \"credentials\") {\n if (missingRequired) return;\n const submitted = Object.fromEntries(\n action.fields.map((field) => [field.name, values.current.get(field.name) ?? \"\"]),\n );\n // Empty the fields before the remote work; nothing here keeps the values.\n values.current.clear();\n for (const clear of clears.current.values()) clear();\n setFilled(new Set());\n flow.submitCredentials(submitted);\n } else if (action.type === \"select_account\") {\n if (choice) flow.selectAccount(choice);\n } else if (action.type === \"select_resources\") {\n flow.selectResources([...picked]);\n } else if (action.type === \"preview\") {\n flow.install([...picked]);\n }\n };\n return (\n <View\n accessibilityLabel={t(\"connectSetup.connectionSetup\")}\n accessibilityState={{ busy: flow.busy }}\n style={{ gap: 12 }}\n >\n <View style={{ gap: 2 }}>\n <Text style={{ ...text.small, color: text.c[\"fg-muted\"] }}>{flow.scopeLabel}</Text>\n <Line tone=\"body\" role=\"status\">\n {flow.status}\n </Line>\n <Line tone=\"small\">{flow.scopeDescription}</Line>\n </View>\n {attempt.account ? (\n <Line>{t(\"connectSetup.accountLabel\", { label: attempt.account.label })}</Line>\n ) : null}\n {flow.awaitingOwner ? (\n <View style={{ gap: 4 }}>\n <Line tone=\"body\">{t(\"connectSetup.yourRequestWasSentGithub\")}</Line>\n <Line>1. {t(\"connectSetup.anOrganizationOwnerApprovesThe\")}</Line>\n <Line>2. {t(\"connectSetup.anOwnerThenConnectsThe\")}</Line>\n <Line tone=\"small\">{t(\"connectSetup.nothingIsConnectedUntilThen\")}</Line>\n </View>\n ) : null}\n {flow.adminApproval ? (\n <View style={{ gap: 4 }}>\n <Line tone=\"waiting\" role=\"status\" icon=\"circle-alert\">\n {flow.adminApproval.required\n ? t(\"connectSetup.microsoftAdminApprovalRequired\")\n : t(\"connectSetup.microsoftAdminApprovalMaybe\")}\n </Line>\n <Line>1. {t(\"connectSetup.sendTheApprovalLinkTo\")}</Line>\n <Line>2. {t(\"connectSetup.afterTheyApproveConnectAgain\")}</Line>\n <Button\n icon=\"external-link\"\n label={t(\"connectSetup.adminApprovalLink\")}\n onPress={() => openLink(options, flow.adminApproval!.url)}\n style={{ alignSelf: \"flex-start\" }}\n />\n </View>\n ) : null}\n {flow.errorText ? (\n <Line tone=\"error\" role=\"alert\" icon=\"circle-alert\">\n {flow.errorText}\n </Line>\n ) : null}\n {flow.notice ? (\n <Line role=\"status\" icon=\"circle-alert\">\n {flow.notice}\n </Line>\n ) : null}\n {flow.interactive ? (\n <View key={step} style={{ gap: 12 }}>\n {attempt.state === \"connected_but_incomplete\" &&\n action.type === \"none\" &&\n !flow.awaitingOwner ? (\n <Button\n variant=\"primary\"\n size=\"form\"\n label={t(\"connectSetup.chooseTools\")}\n disabled={disabled}\n onPress={flow.chooseTools}\n />\n ) : null}\n {action.type === \"credentials\"\n ? action.fields.map((field) => (\n <CredentialInput\n key={field.name}\n field={field}\n disabled={disabled}\n register={(clear) => {\n if (clear) clears.current.set(field.name, clear);\n else clears.current.delete(field.name);\n }}\n onValue={(value) => {\n values.current.set(field.name, value);\n const has = value.length > 0;\n setFilled((current) => {\n if (current.has(field.name) === has) return current;\n const next = new Set(current);\n if (has) next.add(field.name);\n else next.delete(field.name);\n return next;\n });\n }}\n />\n ))\n : null}\n {action.type === \"select_account\" ? (\n <View accessibilityRole=\"radiogroup\" accessibilityLabel={t(\"connectSetup.account\")}>\n <Text style={text.label}>{t(\"connectSetup.chooseAnAccount\")}</Text>\n {action.accounts.map((account) => (\n <Choice\n key={account.id}\n label={account.label}\n detail={account.ownership}\n multi={false}\n selected={choice === account.id}\n disabled={disabled || account.status === \"disabled\"}\n onPress={() => setChoice(account.id)}\n />\n ))}\n {flow.offersGitHubRequest ? (\n <Line tone=\"small\">{t(\"connectSetup.donTSeeYourOrganization\")}</Line>\n ) : null}\n </View>\n ) : null}\n {action.type === \"select_resources\" ? (\n <View>\n {action.resources.map((resource) => (\n <Choice\n key={resource.id}\n label={resource.label}\n detail={resource.kind}\n multi\n selected={picked.has(resource.id)}\n disabled={disabled}\n onPress={() => toggle(resource.id)}\n />\n ))}\n {action.cursor ? (\n <Line tone=\"small\">{t(\"connectSetup.moreResourcesAreAvailableReview\")}</Line>\n ) : null}\n </View>\n ) : null}\n {action.type === \"preview\" ? (\n <View>\n <Line>{t(\"connectSetup.chooseTheToolsAgentsCan\")}</Line>\n {action.operations.map((operation) => (\n <Choice\n key={operation.id}\n label={operation.label}\n detail={operation.kind}\n multi\n selected={picked.has(operation.id)}\n disabled={disabled}\n onPress={() => toggle(operation.id)}\n />\n ))}\n </View>\n ) : null}\n {flow.formStep ? (\n <Button\n variant=\"primary\"\n size=\"form\"\n label={flow.submitLabel}\n busy={view.busy}\n disabled={\n disabled ||\n missingRequired ||\n (action.type === \"select_account\" && !choice) ||\n (action.type === \"select_resources\" && Boolean(action.cursor))\n }\n onPress={submit}\n />\n ) : null}\n {action.type === \"authorize\" ? (\n <Button\n icon=\"external-link\"\n variant=\"primary\"\n size=\"form\"\n label={\n flow.navigating\n ? t(\"connectSetup.waitingForAuthorization\")\n : flow.signInClosed\n ? t(\"connectSetup.trySigningInAgain\")\n : (authorizeLabel ?? t(\"connectSetup.authorizeConnection\"))\n }\n onPress={flow.authorize}\n />\n ) : null}\n {action.type === \"wait\" ? (\n <View style={{ gap: 6 }}>\n {/* In reading order: the code, the page to enter it on, then\n what to do there. */}\n {action.userCode ? (\n <Text selectable style={text.body}>\n {t(\"connectSetup.verificationCode\")}{\" \"}\n <Text style={fontStyle(text.theme, 600, \"mono\")}>{action.userCode}</Text>\n </Text>\n ) : null}\n {flow.verificationUrl ? (\n <Button\n icon=\"external-link\"\n variant=\"primary\"\n size=\"form\"\n label={t(\"connectSetup.openProviderVerificationPageNew\")}\n onPress={() => openLink(options, flow.verificationUrl!)}\n />\n ) : null}\n <Line>{t(\"connectSetup.completeProviderAuthorizationThenCheck\")}</Line>\n </View>\n ) : null}\n <View style={{ flexDirection: \"row\", flexWrap: \"wrap\", gap: 8 }}>\n <Button\n variant=\"secondary\"\n label={t(\"connectSetup.checkStatus\")}\n disabled={disabled}\n onPress={flow.refresh}\n />\n <Button\n variant=\"secondary\"\n label={t(\"connectSetup.cancelSetup\")}\n disabled={disabled}\n onPress={flow.cancel}\n />\n </View>\n </View>\n ) : null}\n </View>\n );\n}\n\n/* -------------------------------------------------- reviewed integration -- */\n\ntype CardProps = {\n client: OpenGeniClient;\n workspaceId: string;\n sessionId: string;\n capabilityId: string;\n name: string;\n rationale: string;\n options: NativeInChatConnectOptions;\n};\n\n/** One-tap Connect for a reviewed integration: your own account, then the agent continues. */\nexport function NativeIntegrationCapabilityCard({\n client,\n workspaceId,\n sessionId,\n capabilityId,\n name,\n rationale,\n options,\n}: CardProps) {\n const t = useOpenGeniText();\n const [windows] = useState(() => nativeConnectWindowHost(options.browser, options.attemptHints));\n const flow = useIntegrationCapabilityConnect({\n client,\n workspaceId,\n sessionId,\n capabilityId,\n name,\n returnUrl: options.returnUrl,\n windows,\n });\n const { availability, attempt, busy, waiting, error } = flow;\n const connected = availability.kind === \"connected\";\n const settingUp =\n availability.kind === \"ready\" && Boolean(attempt || busy || error || flow.signInClosed);\n return (\n <CapabilityFrame\n name={name}\n typeLabel={t(\"sessionIntegrationCapabilityCard.integration\")}\n description={rationale}\n clampDescription\n complete={connected}\n completeLabel={t(\"sessionIntegrationCapabilityCard.connected\")}\n note={t(\"sessionIntegrationCapabilityCard.note\")}\n >\n {connected ? (\n <>\n {flow.chatAccessFailed ? (\n <Line role=\"status\">{t(\"sessionIntegrationCapabilityCard.chatAccessFailed\")}</Line>\n ) : null}\n {flow.notRequester ? (\n <Line role=\"status\">{t(\"sessionIntegrationCapabilityCard.notRequester\")}</Line>\n ) : null}\n </>\n ) : availability.kind === \"unavailable\" ? (\n <Line icon=\"circle-alert\">{availability.reason}</Line>\n ) : availability.kind === \"error\" ? (\n <View style={{ gap: 8 }}>\n <Line icon=\"circle-alert\" role=\"status\">\n {t(\"native.timeline.inChatConnect.couldNotLoad\")}\n </Line>\n <Button\n icon=\"rotate-ccw\"\n label={t(\"sessionIntegrationCapabilityCard.retry\")}\n onPress={flow.reload}\n style={{ alignSelf: \"flex-start\" }}\n />\n </View>\n ) : settingUp ? (\n <View style={{ gap: 12 }}>\n {error ? (\n <Line tone=\"error\" role=\"alert\" icon=\"circle-alert\">\n {error}\n </Line>\n ) : null}\n {flow.notice ? (\n <Line role=\"status\" icon=\"circle-alert\">\n {flow.notice}\n </Line>\n ) : null}\n {attempt ? (\n <NativeConnectSetup\n controller={flow.controller}\n authorizeLabel={\n flow.signInClosed || error\n ? t(\"connectSetup.trySigningInAgain\")\n : t(\"sessionIntegrationCapabilityCard.signIn\")\n }\n onAuthorize={flow.authorizeAttempt}\n options={options}\n />\n ) : busy ? (\n <Line role=\"status\">{t(\"sessionIntegrationCapabilityCard.preparing\")}</Line>\n ) : null}\n {waiting ? (\n <WaitingForSignIn\n text={t(\"sessionIntegrationCapabilityCard.finishSigningIn\", { name })}\n stopLabel={t(\"sessionIntegrationCapabilityCard.stopWaiting\")}\n onStop={flow.stopWaiting}\n />\n ) : null}\n {!busy && !waiting && (flow.restartable || ((error || flow.signInClosed) && !attempt)) ? (\n <Button\n icon=\"rotate-ccw\"\n variant=\"primary\"\n size=\"form\"\n label={t(\"sessionIntegrationCapabilityCard.tryAgain\")}\n onPress={flow.start}\n />\n ) : null}\n </View>\n ) : (\n <PrimaryAction\n label={t(\"sessionIntegrationCapabilityCard.connectName\", { name })}\n busy={busy || availability.kind === \"loading\"}\n onPress={flow.start}\n />\n )}\n </CapabilityFrame>\n );\n}\n\nfunction WaitingForSignIn({\n text,\n stopLabel,\n onStop,\n}: {\n text: string;\n stopLabel: string;\n onStop: () => void;\n}) {\n const { c } = useText();\n return (\n <View style={{ gap: 8 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Icon name=\"loader-circle\" size={14} color={c[\"status-running\"]} />\n <View style={{ flex: 1 }}>\n <Line tone=\"body\" role=\"status\">\n {text}\n </Line>\n </View>\n </View>\n <Button\n variant=\"ghost\"\n label={stopLabel}\n onPress={onStop}\n style={{ alignSelf: \"flex-start\" }}\n />\n </View>\n );\n}\n\n/* ------------------------------------------------------------ OAuth MCP -- */\n\n/** Sign in to an OAuth MCP server, enable it with that account, add it here, continue. */\nexport function NativeMcpCapabilityCard({\n client,\n workspaceId,\n sessionId,\n capabilityId,\n name,\n rationale,\n personalOnly: configuredPersonalOnly,\n options,\n}: CardProps & { personalOnly: boolean }) {\n const t = useOpenGeniText();\n const text = useText();\n const [windows] = useState(() => nativeConnectWindowHost(options.browser, options.attemptHints));\n const flow = useMcpCapabilityConnect({\n client,\n workspaceId,\n sessionId,\n capabilityId,\n returnUrl: options.returnUrl,\n windows,\n personalOnly: configuredPersonalOnly,\n });\n const { item, personalOnly, busy, waiting, reconciling, connected, ownership } = flow;\n const title = item?.name ?? name;\n return (\n <CapabilityFrame\n name={title}\n subtitle={item?.providerDomain ?? \"\"}\n typeLabel={showsMcpServerLabel(item) ? t(\"sessionMcpCapabilityCard.mcpServer\") : \"\"}\n description={rationale || item?.description || undefined}\n clampDescription={Boolean(rationale)}\n complete={flow.complete}\n note={t(\"sessionMcpCapabilityCard.reviewAccessBeforeSigningIn\")}\n >\n {flow.complete ? null : !flow.expanded ? (\n <PrimaryAction\n label={\n connected\n ? t(\"sessionMcpCapabilityCard.useInThisConversation\")\n : t(\"sessionMcpCapabilityCard.connectName\", { name: title })\n }\n busy={busy}\n onPress={flow.open}\n />\n ) : (\n <View style={{ gap: 12 }}>\n {flow.error ? (\n <Line tone=\"error\" role=\"alert\" icon=\"circle-alert\">\n {flow.error}\n </Line>\n ) : null}\n {flow.notice ? <Line role=\"status\">{flow.notice}</Line> : null}\n {!item ? (\n <View style={{ gap: 8 }}>\n <Line role=\"status\">\n {busy\n ? t(\"sessionMcpCapabilityCard.loadingConnectionDetails\")\n : t(\"sessionMcpCapabilityCard.connectionDetailsAreUnavailable\")}\n </Line>\n <Button\n icon=\"rotate-ccw\"\n label={t(\"sessionMcpCapabilityCard.retry\")}\n disabled={busy}\n onPress={flow.open}\n style={{ alignSelf: \"flex-start\" }}\n />\n </View>\n ) : busy ? (\n waiting ? (\n <WaitingForSignIn\n text={t(\"sessionMcpCapabilityCard.finishSigningInWithName\", { name: item.name })}\n stopLabel={t(\"sessionMcpCapabilityCard.stopWaiting\")}\n onStop={flow.stopWaiting}\n />\n ) : (\n <Line role=\"status\">\n {reconciling\n ? t(\"sessionMcpCapabilityCard.finishingYourConnection\")\n : t(\"sessionMcpCapabilityCard.preparingYourConnection\")}\n </Line>\n )\n ) : !connected ? (\n <>\n {!item.connectionRef && !personalOnly ? (\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={t(\"sessionMcpCapabilityCard.whoCanUseThisConnection\")}\n >\n <Text style={text.label}>\n {t(\"sessionMcpCapabilityCard.whoCanUseThisConnection\")}\n </Text>\n <Choice\n label={t(\"sessionMcpCapabilityCard.everyoneInThisWorkspace\")}\n multi={false}\n selected={ownership === \"workspace\"}\n onPress={() => flow.setOwnership(\"workspace\")}\n />\n <Choice\n label={t(\"sessionMcpCapabilityCard.onlyMe\")}\n multi={false}\n selected={ownership === \"personal\"}\n onPress={() => flow.setOwnership(\"personal\")}\n />\n </View>\n ) : null}\n <Line tone=\"small\">\n {personalOnly && ownership === \"personal\"\n ? t(\"sessionMcpCapabilityCard.connectsYourOwnAccountOnly\")\n : ownership === \"workspace\"\n ? t(\"sessionMcpCapabilityCard.thisConnectionWillBeAvailable\")\n : t(\"sessionMcpCapabilityCard.thisConnectionBelongsToYou\")}\n </Line>\n <Button\n icon=\"external-link\"\n variant=\"primary\"\n size=\"form\"\n label={\n flow.retrySignIn\n ? t(\"sessionMcpCapabilityCard.trySigningInAgain\")\n : t(\"sessionMcpCapabilityCard.continueToName\", { name: item.name })\n }\n onPress={flow.signIn}\n />\n </>\n ) : (\n <>\n <Line tone=\"small\">{t(\"sessionMcpCapabilityCard.yourAccountIsConnectedEnable\")}</Line>\n <Button\n icon=\"check\"\n variant=\"primary\"\n size=\"form\"\n label={t(\"sessionMcpCapabilityCard.useInThisConversation\")}\n disabled={flow.view.busy}\n onPress={flow.addHere}\n />\n </>\n )}\n {!busy ? (\n <Button\n variant=\"ghost\"\n label={t(\"native.timeline.inChatConnect.close\")}\n onPress={flow.close}\n style={{ alignSelf: \"flex-start\" }}\n />\n ) : null}\n </View>\n )}\n </CapabilityFrame>\n );\n}\n\n/* ------------------------------------------------- prepared key setup -- */\n\n/**\n * An agent's prepared custom MCP setup: the server and its headers are\n * proposed, the person enters the requested key in the secure field.\n */\nexport function NativePreparedMcpSetupCard({\n client,\n workspaceId,\n sessionId,\n item,\n canConfigure,\n options,\n}: {\n client: OpenGeniClient;\n workspaceId: string;\n sessionId: string;\n item: AuthNeededItem;\n canConfigure: boolean;\n options: NativeInChatConnectOptions;\n}) {\n const t = useOpenGeniText();\n const setup = usePreparedMcpSetupAttempt({\n client,\n workspaceId,\n item,\n canConfigure,\n returnUrl: options.returnUrl,\n });\n const { proposal, controller, failed } = setup;\n const generation = useControllerGeneration(controller);\n return (\n <CapabilityFrame\n name={proposal.name}\n subtitle={proposal.endpointUrl}\n typeLabel={t(\"sessionMcpCapabilityCard.mcpServer\")}\n description={proposal.rationale}\n clampDescription\n complete={false}\n note={t(\"preparedMcpSetup.note\")}\n >\n {!canConfigure ? (\n <Line icon=\"circle-alert\">{t(\"preparedMcpSetup.needsManager\")}</Line>\n ) : failed ? (\n <View style={{ gap: 8 }}>\n <Line tone=\"error\" role=\"alert\" icon=\"circle-alert\">\n {t(\"preparedMcpSetup.loadFailed\")}\n </Line>\n <Button\n icon=\"rotate-ccw\"\n label={t(\"preparedMcpSetup.reloadSetup\")}\n onPress={setup.reload}\n style={{ alignSelf: \"flex-start\" }}\n />\n </View>\n ) : controller ? (\n <PreparedSetup\n key={generation}\n controller={controller}\n client={client}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onRestart={setup.restart}\n options={options}\n />\n ) : (\n <Line role=\"status\">{t(\"preparedMcpSetup.preparing\")}</Line>\n )}\n </CapabilityFrame>\n );\n}\n\nfunction PreparedSetup({\n controller,\n client,\n workspaceId,\n sessionId,\n onRestart,\n options,\n}: {\n controller: ConnectController;\n client: OpenGeniClient;\n workspaceId: string;\n sessionId: string;\n onRestart: (previousId: string) => void;\n options: NativeInChatConnectOptions;\n}) {\n const t = useOpenGeniText();\n const access = usePreparedMcpSetupAccess({ t, controller, client, workspaceId, sessionId });\n const attempt = access.view.attempt;\n return (\n <View style={{ gap: 12 }}>\n {access.connectedCapabilityId ? null : (\n <NativeConnectSetup\n controller={controller}\n onAuthorize={() => {\n throw new Error(\"Prepared key setup does not use OAuth\");\n }}\n options={options}\n />\n )}\n {access.restartable && attempt ? (\n <Button\n icon=\"rotate-ccw\"\n label={t(\"preparedMcpSetup.startNewSetup\")}\n onPress={() => onRestart(attempt.id)}\n style={{ alignSelf: \"flex-start\" }}\n />\n ) : null}\n {access.connectedCapabilityId ? (\n access.access === \"ready\" ? (\n <Line tone=\"body\" role=\"status\" icon=\"check\">\n {t(\"preparedMcpSetup.connected\")}\n </Line>\n ) : access.access === \"failed\" ? (\n <View style={{ gap: 8 }}>\n <Line role=\"status\" icon=\"circle-alert\">\n {t(\"preparedMcpSetup.chatAccessFailed\")}\n </Line>\n <Button\n icon=\"rotate-ccw\"\n label={t(\"preparedMcpSetup.checkChatAccess\")}\n onPress={access.recheckAccess}\n style={{ alignSelf: \"flex-start\" }}\n />\n </View>\n ) : (\n <Line role=\"status\">{t(\"preparedMcpSetup.checkingChatAccess\")}</Line>\n )\n ) : null}\n </View>\n );\n}\n\n/* ---------------------------------------------------------- static row -- */\n\n/**\n * A connection the chat cannot finish here: a lapsed account to reconnect, a\n * request this person cannot set up, or tools unavailable in this chat. Says\n * \"reconnect\" only for an account that was connected before.\n */\nexport function NativeAuthNeededRow({\n item,\n setupUnavailable = false,\n openUrl,\n onShareConversation,\n}: {\n item: AuthNeededItem;\n setupUnavailable?: boolean | undefined;\n openUrl?: ((url: string) => void) | undefined;\n /** For a computer request: share this chat's link to open on that computer. */\n onShareConversation?: (() => void) | undefined;\n}) {\n const t = useOpenGeniText();\n const text = useText();\n const { theme, c } = text;\n const presentation = authNeededPresentation(t, item, { setupUnavailable });\n if (item.capability?.id === \"api:connected-machine\") {\n return (\n <DecisionCard settled={!onShareConversation} style={{ padding: 16, gap: 12 }}>\n <View style={{ gap: 4 }}>\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 21,\n color: c.fg,\n }}\n >\n {t(\"thisComputer.card.name\")}\n </Text>\n <Line>\n {onShareConversation\n ? t(\"thisComputer.card.connectOnThatComputer\")\n : t(\"thisComputer.card.hostSetupUnavailable\")}\n </Line>\n </View>\n {onShareConversation ? (\n <DecisionActions\n primary={\n <DecisionButton\n icon=\"share-2\"\n label={t(\"thisComputer.card.shareConversation\")}\n onPress={onShareConversation}\n />\n }\n />\n ) : null}\n </DecisionCard>\n );\n }\n const link = presentation.authorizationUrl;\n return (\n <View style={{ gap: 8 }}>\n <DecisionCard settled={!link} style={{ padding: 16, gap: 12 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 12 }}>\n <Mark name={presentation.provider} />\n <View style={{ flex: 1, minWidth: 0, gap: 2 }}>\n <Text\n accessibilityRole=\"header\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 21,\n color: c.fg,\n }}\n >\n {presentation.title}\n </Text>\n {presentation.providerLine ? (\n <Line tone=\"small\">{presentation.providerLine}</Line>\n ) : null}\n </View>\n </View>\n <Line tone=\"body\" lines={2}>\n {presentation.reasonLine}\n </Line>\n {presentation.variablesLine ? <Line tone=\"small\">{presentation.variablesLine}</Line> : null}\n {link ? (\n <DecisionActions\n style={{ marginTop: 4 }}\n primary={\n <DecisionButton\n kind=\"primary\"\n icon={presentation.missing ? undefined : \"rotate-ccw\"}\n label={presentation.actionLabel}\n onPress={() => (openUrl ? openUrl(link) : void Linking.openURL(link))}\n />\n }\n />\n ) : null}\n </DecisionCard>\n {presentation.footnote ? (\n <View style={{ paddingHorizontal: 4 }}>\n <Line tone=\"small\">{presentation.footnote}</Line>\n </View>\n ) : null}\n </View>\n );\n}\n","/** Keep a reply's beginning readable while it grows, instead of chasing its last line. */\nexport function answerReadingOffset(input: {\n contentHeight: number;\n viewportHeight: number;\n prompt?: { top: number; bottom: number } | undefined;\n followTail: boolean;\n}): number {\n const maximum = Math.max(0, input.contentHeight - input.viewportHeight);\n if (input.followTail || !input.prompt) return maximum;\n // A long prompt or attachment must leave room for the answer too.\n const top = Math.max(input.prompt.top, input.prompt.bottom - input.viewportHeight * 0.35);\n return Math.min(maximum, Math.max(0, top - 12));\n}\n","import type { OpenGeniText } from \"@opengeni/react/messages\";\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 * One calm status across startup phases; hosts may supply their own wording.\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 [t(\"native.timeline.messages.working\")];\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 { ActivityIndicator, Platform, Pressable, Text, View, type TextStyle } from \"react-native\";\nimport Animated, { FadeIn, FadeInDown, FadeOut, FadeOutUp } from \"react-native-reanimated\";\nimport { ActivityRow } from \"./activity\";\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/** Quiet startup feedback, replaced by useful output rather than competing with it. */\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 [slow, setSlow] = useState(false);\n useEffect(() => {\n const elapsed = Date.now() - Date.parse(startedAt);\n const remaining = Number.isFinite(elapsed) ? Math.max(0, 30_000 - elapsed) : 30_000;\n setSlow(remaining === 0);\n const timer = setTimeout(() => setSlow(true), remaining);\n return () => clearTimeout(timer);\n }, [startedAt]);\n const [phraseIndex, setPhraseIndex] = useState(0);\n useEffect(() => {\n setPhraseIndex(0);\n // The stock status is stable. Keep a host's explicit phrase sequence working.\n if (phrases.length < 2) return;\n const timer = setInterval(() => setPhraseIndex((index) => index + 1), 5_000);\n return () => clearInterval(timer);\n }, [phrases]);\n // A long start says so, rather than repeating the same status indefinitely.\n const phrase = slow\n ? phase === \"waiting\"\n ? m.stillWaiting\n : m.longerThanUsual\n : (phrases[phraseIndex % phrases.length] ?? m.working);\n if (render) return <>{render({ startedAt, phase, phrase, slow })}</>;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 8,\n minHeight: 44,\n paddingVertical: 12,\n }}\n >\n <ActivityIndicator size=\"small\" color={theme.colors[\"fg-muted\"]} />\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {phrase}\n </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 annotationQuoteText,\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(\n annotation: Pick<NativeAnnotationLike, \"quote\" | \"source\">,\n): QuoteAnchorQuery {\n // Quotes and their context are source markdown; native text is rendered.\n const rendered = (quote: string) => annotationQuoteText({ quote, source: annotation.source });\n return {\n quote: rendered(annotation.quote),\n before: rendered(annotation.source.contextBefore),\n after: rendered(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 ...annotationQuoteQuery(annotation),\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(annotationQuoteText(annotation))}\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(annotationQuoteText(annotation), 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 AuthNeededItem,\n type HumanInputItem,\n type TimelineGroup,\n type TimelineAnnotationSourceDescriptor,\n type TimelineItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport {\n agentWorkHumanInputSummary,\n compactedLandmarkCount,\n durationBetween,\n flattenActivityItems,\n formatClockTime,\n formatRelativeTime,\n isAgentWorkHumanInput,\n isPreparingWork,\n timelineTurnsWithOutput,\n noticeDisplayText,\n noticeIsResolvedApproval,\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 TextStyle,\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 { ActivityDisclosure, ReleaseFollowProvider, withAlpha } from \"./primitives\";\nimport { NativeAuthNeededRow } from \"./in-chat-connect\";\nimport { humanInputAnswerLines } from \"./secret-field-model\";\nimport { answerReadingOffset } from \"./reading-position\";\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\";\nimport {\n InlineInputFocusContext,\n type InlineInputFocus,\n type InlineInputNode,\n} from \"./inline-input-focus\";\n\n/** Room kept above a focused card field, so its label and card stay in view. */\nconst INLINE_INPUT_CONTEXT_PX = 96;\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: {\n tone: \"body\" | \"muted\";\n streaming?: boolean | undefined;\n /** Overrides the body text style, for Markdown inside compact card chrome. */\n textStyle?: TextStyle | undefined;\n },\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 /**\n * Draw a connection request (an agent asking the person to connect an\n * account, or a lapsed connection). Return undefined for the default row.\n * `NativeSessionScreen` supplies the in-chat connect cards.\n */\n renderAuthNeeded?: ((item: AuthNeededItem) => 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 turnsWithOutput = useMemo(() => timelineTurnsWithOutput(items), [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 const followTail = useRef(false);\n const latestPrompt = useRef<string | null>(null);\n const latestPromptGroup = groups.findLast(\n (group) => group.kind === \"item\" && group.item.kind === \"user-message\",\n );\n latestPrompt.current = latestPromptGroup ? groupKey(latestPromptGroup) : null;\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 // A field in a card is being filled in: room for the keyboard below the\n // content (the composer floats over the timeline, so it does not shrink),\n // and no floating buttons over the card.\n const [inlineInput, setInlineInput] = useState<{ keyboard: number } | null>(null);\n const inlineNode = useRef<InlineInputNode | 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 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;\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 revealInlineInput = useCallback((keyboard: { screenY: number; height: number }) => {\n setInlineInput({ keyboard: keyboard.height });\n // Once the room for the keyboard is laid out, scroll just enough to show\n // the field above the keyboard and the composer, its label and card above it.\n setTimeout(() => {\n const node = inlineNode.current;\n const scroller = scrollRef.current?.getNativeScrollRef?.();\n if (!node || !scroller) return;\n scroller.measureInWindow((_scrollX, scrollTop, _scrollWidth, scrollHeight) => {\n node.measureInWindow((_x, top, _width, height) => {\n const bottom = Math.min(scrollTop + scrollHeight, keyboard.screenY) - 12;\n const above = scrollTop + INLINE_INPUT_CONTEXT_PX;\n let delta = 0;\n if (top + height > bottom) delta = Math.min(top + height - bottom, top - scrollTop - 8);\n else if (top < above) delta = top - above;\n if (Math.abs(delta) < 1) return;\n scrollY.current = Math.max(0, scrollY.current + delta);\n scrollRef.current?.scrollTo({ y: scrollY.current, animated: true });\n });\n });\n }, 80);\n }, []);\n const inlineInputFocus = useMemo<InlineInputFocus>(\n () => ({\n focused(node) {\n inlineNode.current = node;\n // The reader is filling in a card; new content must not scroll it away.\n following.current = false;\n setInlineInput((current) => current ?? { keyboard: 0 });\n const metrics = Keyboard.isVisible() ? Keyboard.metrics() : undefined;\n if (metrics) revealInlineInput(metrics);\n },\n blurred(node) {\n if (inlineNode.current !== node) return;\n inlineNode.current = null;\n setInlineInput(null);\n },\n }),\n [revealInlineInput],\n );\n const editingInline = inlineInput !== null;\n useEffect(() => {\n if (!editingInline) return;\n const shown = Keyboard.addListener(\"keyboardDidShow\", (event) =>\n revealInlineInput(event.endCoordinates),\n );\n const hidden = Keyboard.addListener(\"keyboardDidHide\", () =>\n setInlineInput((current) => (current ? { keyboard: 0 } : current)),\n );\n return () => {\n shown.remove();\n hidden.remove();\n };\n }, [editingInline, revealInlineInput]);\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 followAnswer = useCallback(\n (animated = false) => {\n if (!following.current) return;\n const prompt = latestPrompt.current ? promptFrames.get(latestPrompt.current) : undefined;\n // A durable prompt replacing its pending row lays out just after content\n // size changes. Keep the current position until its frame is known.\n if (!followTail.current && latestPrompt.current && !prompt) return;\n const y = answerReadingOffset({\n contentHeight: contentHeight.current,\n viewportHeight: viewportHeight.current,\n prompt,\n followTail: followTail.current,\n });\n scrollY.current = y;\n readerScrolling.current = false;\n scrollRef.current?.scrollTo({ y, animated });\n setShowJump(contentHeight.current - viewportHeight.current - y > 240);\n },\n [promptFrames],\n );\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 || !followTail.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 // UIKit also reports momentum completion for our animated scrolls. Only\n // a person's gesture can switch from reading the answer to following its tail.\n if (!readerScrolling.current) return;\n following.current = measure(event) < 48;\n followTail.current = following.current;\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 followAnswer();\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, followAnswer],\n );\n const followLatestSignal = props.followLatestSignal ?? 0;\n useEffect(() => {\n if (!followLatestSignal) return;\n following.current = true;\n followTail.current = false;\n setShowJump(false);\n followAnswer(true);\n }, [followLatestSignal, followAnswer]);\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 turnsWithOutput,\n facets: props.facets,\n renderMarkdown: props.renderMarkdown,\n renderPreparing: props.renderPreparing,\n renderMessageActions: props.renderMessageActions,\n renderUserAttachments: props.renderUserAttachments,\n renderAuthNeeded: props.renderAuthNeeded,\n onCopy: props.onCopy,\n reportLiveFold,\n onRevealAnnotation: revealSource,\n };\n return (\n <AnnotationSourcesContext.Provider value={annotationSourcesValue}>\n <InlineInputFocusContext.Provider value={inlineInputFocus}>\n <NativeActivityOptionsProvider value={activityOptions}>\n <FoldMemoryProvider value={foldMemory}>\n <StickyWorkHeaderProvider value={registerSticky}>\n <ReleaseFollowProvider value={releaseFollow}>\n <View\n style={[\n {\n flex: 1,\n backgroundColor: theme.colors.bg,\n paddingBottom: props.overlayInsetBottom ?? 0,\n },\n props.style,\n ]}\n >\n <ScrollView\n ref={scrollRef}\n style={{ flex: 1 }}\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={(event) => {\n onScrollEnd(event);\n readerScrolling.current = false;\n }}\n onLayout={(event: LayoutChangeEvent) => {\n viewportHeight.current = event.nativeEvent.layout.height;\n followAnswer();\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:\n Math.max(\n 0,\n (props.contentInsetBottom ?? 24) - (props.overlayInsetBottom ?? 0),\n ) + (inlineInput?.keyboard ?? 0),\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) {\n promptFrames.set(key, { top: y, bottom: y + height });\n followAnswer();\n }\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 {/* Navigation owns a lane outside the reading viewport, above the composer. */}\n <View\n style={{\n height: 44,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n }}\n >\n {questionNav && !editingInline ? (\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 ) : null}\n {showJump && !editingInline ? (\n <NavButton\n icon=\"arrow-down\"\n label={m.jumpToLatest}\n onPress={() => {\n following.current = true;\n followTail.current = true;\n followAnswer(true);\n }}\n />\n ) : null}\n </View>\n </View>\n </ReleaseFollowProvider>\n </StickyWorkHeaderProvider>\n </FoldMemoryProvider>\n </NativeActivityOptionsProvider>\n </InlineInputFocusContext.Provider>\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 turnsWithOutput: ReadonlySet<string>;\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 renderAuthNeeded?: ((item: AuthNeededItem) => 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 const startupDismissed =\n insideTurn ||\n group.items.some((item) => item.turnId && context.turnsWithOutput.has(item.turnId));\n if (\n !insideTurn &&\n startupDismissed &&\n group.items.every(\n (item) =>\n item.kind === \"startup-phase\" &&\n item.status !== \"failed\" &&\n item.status !== \"cancelled\",\n )\n )\n return null;\n if (group.work) {\n if (isPreparingWork(group, { startupDetails: false, startupDismissed })) {\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 (\n <ActivityRail\n items={group.items}\n startupActive={startupDismissed ? false : undefined}\n renderPreparing={context.renderPreparing}\n />\n );\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\n/** Rows in a turn's work details that stack like tool steps, without a gap. */\nfunction isWorkRow(group: TimelineGroup | undefined): boolean {\n return (\n group?.kind === \"activity\" || (group?.kind === \"item\" && isAgentWorkHumanInput(group.item))\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 && !(isWorkRow(child) && isWorkRow(groups[index - 1]))\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 isAgentWorkHumanInput(item) ? (\n <AgentWorkHumanInputRow item={item} />\n ) : (\n <HumanInputRow\n item={item}\n onCopy={context.onCopy}\n renderMarkdown={context.renderMarkdown}\n />\n );\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 // An agent's connect request becomes a card the person can finish\n // here; anything else (a lapsed account, unavailable tools) is a row.\n return context.renderAuthNeeded?.(item) ?? <NativeAuthNeededRow item={item} />;\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 {noticeIsResolvedApproval(item) ? (\n <Icon name=\"check\" size={16} color={accent} />\n ) : (\n <Icon name=\"triangle-alert\" size={16} color={accent} />\n )}\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\n/**\n * A question an agent (such as a sub-session's parent) answered or skipped: one\n * quiet work row that opens to the full question and answer, as on web.\n */\nfunction AgentWorkHumanInputRow({ item }: { item: HumanInputItem }) {\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 skipped = item.response.outcome === \"skipped\";\n // Host overrides of the outcome copy (`timelineMessages`) still apply here.\n const byLine = skipped\n ? (m.humanInputOutcome.agentSkipped ?? m.humanInputOutcome.skipped)\n : (m.humanInputOutcome.agentAnswered ?? m.humanInputOutcome.answered);\n const summary = agentWorkHumanInputSummary(item, {\n answered: t(\"messageTimeline.answered\"),\n skipped: t(\"messageTimeline.skipped\"),\n secretSaved: (secret) => m.humanInputSecretSaved(secret.vaultName, secret.itemName),\n });\n const answers = humanInputAnswerLines(\n item.answers,\n item.response,\n m.humanInputSecretSaved,\n multiple,\n );\n const text = (color: string, size = theme.size.sm, weight?: 500) => ({\n ...fontStyle(theme, weight),\n fontSize: size,\n lineHeight: size === theme.size.xs ? 16 : 20,\n color,\n });\n return (\n <ActivityDisclosure\n icon=\"message-circle-question\"\n title={t(\"messageTimeline.asked\")}\n preview={summary}\n // Screen readers would announce the arrow; speak a plain separator instead.\n accessibilityLabel={`${t(\"messageTimeline.asked\")}: ${summary.split(\" → \").join(\": \")}`}\n >\n <View style={{ gap: 12 }}>\n {item.questions.map((question, index) => (\n <View key={question.id}>\n {question.label ? (\n <Text style={text(theme.colors.fg, theme.size.sm, 500)}>\n {multiple ? `${index + 1}. ` : \"\"}\n {question.label}\n </Text>\n ) : null}\n <Text selectable style={text(theme.colors[\"fg-muted\"])}>\n {!question.label && multiple ? `${index + 1}. ` : \"\"}\n {question.prompt}\n </Text>\n </View>\n ))}\n <View>\n <Text style={text(theme.colors[\"fg-subtle\"], theme.size.xs, 500)}>{byLine}</Text>\n {answers.map((line) => (\n <Text key={line.questionId} selectable style={text(theme.colors.fg)}>\n {line.text || t(\"messageTimeline.answered\")}\n </Text>\n ))}\n </View>\n </View>\n </ActivityDisclosure>\n );\n}\n\nfunction HumanInputRow({\n item,\n onCopy,\n renderMarkdown,\n}: {\n item: HumanInputItem;\n onCopy?: ((text: string) => void) | undefined;\n renderMarkdown?: NativeMarkdownRenderer | 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 ? item.response.agentDecides\n ? (m.humanInputOutcome.agentDecides ?? m.humanInputOutcome.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 // The prompt reads as the web row does: inline Markdown in the card's type style.\n const promptStyles = useMemo(() => {\n const style = (labelled: boolean): TextStyle => ({\n ...fontStyle(theme),\n fontSize: labelled ? theme.size.sm : theme.size.md,\n lineHeight: labelled ? 18 : 24,\n color: labelled ? theme.colors[\"fg-muted\"] : theme.colors.fg,\n });\n return { labelled: style(true), plain: style(false) };\n }, [theme]);\n const promptStyle = (labelled: boolean): TextStyle =>\n labelled ? promptStyles.labelled : promptStyles.plain;\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 <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n marginTop: question.label ? 2 : 0,\n }}\n >\n {!question.label && multiple ? (\n <Text style={{ ...promptStyle(false), color: theme.colors[\"fg-muted\"] }}>\n {`${index + 1}. `}\n </Text>\n ) : null}\n <View style={{ flex: 1, minWidth: 0 }}>\n {renderMarkdown ? (\n renderMarkdown(question.prompt, {\n tone: question.label ? \"muted\" : \"body\",\n textStyle: promptStyle(Boolean(question.label)),\n })\n ) : (\n <Text style={promptStyle(Boolean(question.label))}>{question.prompt}</Text>\n )}\n </View>\n </View>\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 { 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 useWindowDimensions,\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 // One line of the field at the person's text size (the line height scales with it).\n const { fontScale } = useWindowDimensions();\n const line = Math.ceil(22 * fontScale);\n const [height, setHeight] = useState(line);\n const empty = !props.value;\n useEffect(() => {\n if (empty) setHeight(line);\n }, [empty, line]);\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(line, 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 : Math.max(36, line + 14)\n : (props.value ? height : line) + 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 kept dictation. Its text is ready to insert, or couldn't be fetched yet\n * and Retry tries 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 const ready = voice.savedTranscript != null && voice.insertSaved !== undefined;\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 ?? (ready ? m.transcriptSaved : m.recordingSaved)}\n </Text>\n </View>\n {ready ? (\n <Text\n numberOfLines={2}\n style={{ ...fontStyle(theme), fontSize: 13, lineHeight: 18, color: c[\"fg-subtle\"] }}\n >\n {voice.savedTranscript}\n </Text>\n ) : null}\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 6 }}>\n <Button label={m.discard} variant=\"ghost\" onPress={voice.cancel} />\n {ready ? (\n <Button label={m.insertTranscript} variant=\"primary\" onPress={voice.insertSaved!} />\n ) : (\n <Button label={m.retry} variant=\"primary\" onPress={voice.retry} />\n )}\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 minHeight: 34,\n paddingVertical: 6,\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 {\n mcpElicitationChoices,\n mcpElicitationDefaults,\n resolveMcpElicitationContent,\n type McpElicitationApprovalRequest,\n type McpElicitationContent,\n type McpElicitationField,\n type McpElicitationValue,\n} from \"@opengeni/contracts/mcp-elicitation-model\";\nimport { useOpenGeniText } from \"@opengeni/react/messages\";\nimport { Pressable, Text, TextInput, View } from \"react-native\";\nimport { Selector } from \"./selector\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/*\n * An MCP server's question in the middle of a tool call, as native fields: the\n * same form the web approval card shows, answered with the approval. Numbers\n * and dates are typed as text and checked against the server's form on send.\n */\n\ntype DraftValue = string | boolean | string[] | undefined;\n/** What the person has entered, per question id and field. */\nexport type McpQuestionDraft = Record<string, Record<string, DraftValue>>;\n\n/** The server's own defaults, as the starting answer. */\nexport function initialMcpQuestionDraft(\n elicitation: McpElicitationApprovalRequest,\n): McpQuestionDraft {\n return Object.fromEntries(\n elicitation.requests.map((request) => [\n request.id,\n Object.fromEntries(\n Object.entries(mcpElicitationDefaults(request.requestedSchema)).map(([name, value]) => [\n name,\n typeof value === \"number\" ? String(value) : value,\n ]),\n ),\n ]),\n );\n}\n\n/**\n * The answer to send, without fields left empty, or the first problem with it\n * (the same check the server applies to the decision).\n */\nexport function mcpQuestionAnswer(\n elicitation: McpElicitationApprovalRequest,\n draft: McpQuestionDraft,\n): { ok: true; content: McpElicitationContent } | { ok: false; problem: string } {\n const content: McpElicitationContent = {};\n for (const request of elicitation.requests) {\n const values: Record<string, McpElicitationValue> = {};\n for (const [name, raw] of Object.entries(draft[request.id] ?? {})) {\n if (raw === undefined || raw === \"\") continue;\n const field = request.requestedSchema.properties[name];\n if (!field) continue;\n if ((field.type === \"number\" || field.type === \"integer\") && typeof raw === \"string\") {\n // A decimal comma is how many keyboards type a decimal point.\n values[name] = Number(raw.trim().replace(\",\", \".\"));\n } else if (field.type === \"string\" && \"format\" in field && field.format === \"date-time\") {\n const parsed = typeof raw === \"string\" ? new Date(raw.trim().replace(\" \", \"T\")) : null;\n values[name] = parsed && !Number.isNaN(parsed.getTime()) ? parsed.toISOString() : raw;\n } else {\n values[name] = raw;\n }\n }\n content[request.id] = values;\n }\n const resolved = resolveMcpElicitationContent(elicitation, content);\n return resolved.ok ? { ok: true, content } : resolved;\n}\n\n/** The server's messages and form fields; the card around it holds Decline and send. */\nexport function McpQuestionFields({\n elicitation,\n draft,\n disabled,\n onChange,\n}: {\n elicitation: McpElicitationApprovalRequest;\n draft: McpQuestionDraft;\n disabled: boolean;\n onChange: (requestId: string, name: string, value: DraftValue) => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <View style={{ gap: 12 }}>\n {elicitation.requests.map((request) => (\n <View key={request.id} style={{ gap: 12 }}>\n {request.message ? (\n <Text\n selectable\n style={{ ...fontStyle(theme), fontSize: theme.size.sm, lineHeight: 20, color: c.fg }}\n >\n {request.message}\n </Text>\n ) : null}\n {Object.entries(request.requestedSchema.properties).map(([name, field]) => (\n <McpQuestionField\n key={name}\n name={name}\n field={field}\n required={(request.requestedSchema.required ?? []).includes(name)}\n value={draft[request.id]?.[name]}\n disabled={disabled}\n onChange={(value) => onChange(request.id, name, value)}\n />\n ))}\n </View>\n ))}\n </View>\n );\n}\n\nfunction McpQuestionField({\n name,\n field,\n required,\n value,\n disabled,\n onChange,\n}: {\n name: string;\n field: McpElicitationField;\n required: boolean;\n value: DraftValue;\n disabled: boolean;\n onChange: (value: DraftValue) => void;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const label = field.title ?? name;\n const labelStyle = {\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c.fg,\n };\n const heading = (\n <Text style={labelStyle}>\n {label}\n {required ? null : (\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"fg-subtle\"] }}>\n {` ${t(\"approvalSurface.optional\")}`}\n </Text>\n )}\n </Text>\n );\n const help = field.description ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: c[\"fg-muted\"],\n }}\n >\n {field.description}\n </Text>\n ) : null;\n if (field.type === \"boolean\") {\n return (\n <View style={{ gap: 2 }}>\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityLabel={label}\n accessibilityState={{ checked: value === true, disabled }}\n disabled={disabled}\n onPress={() => onChange(value !== true)}\n style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 10, minHeight: 36 }}\n >\n <Selector multi selected={value === true} />\n <View style={{ flex: 1, minWidth: 0 }}>{heading}</View>\n </Pressable>\n {help}\n </View>\n );\n }\n const choices = mcpElicitationChoices(field);\n if (choices) {\n const multi = field.type === \"array\";\n const selected = multi ? ((value as string[] | undefined) ?? []) : [value];\n return (\n <View\n style={{ gap: 2 }}\n // One question, announced with its choices.\n {...(multi ? {} : { accessibilityRole: \"radiogroup\" as const, accessibilityLabel: label })}\n >\n {heading}\n {help}\n {choices.map((choice) => {\n const checked = selected.includes(choice.value);\n return (\n <Pressable\n key={choice.value}\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityLabel={choice.label}\n accessibilityState={{ checked, disabled }}\n disabled={disabled}\n onPress={() => {\n if (!multi) return onChange(choice.value);\n const current = (value as string[] | undefined) ?? [];\n onChange(\n checked\n ? current.filter((item) => item !== choice.value)\n : [...current, choice.value],\n );\n }}\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={checked} />\n <Text\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c.fg,\n }}\n >\n {choice.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n }\n const format = field.type === \"string\" && \"format\" in field ? field.format : undefined;\n const numeric = field.type === \"number\" || field.type === \"integer\";\n const long =\n !numeric &&\n !format &&\n !(field.type === \"string\" && \"maxLength\" in field && (field.maxLength ?? Infinity) <= 200);\n return (\n <View style={{ gap: 4 }}>\n {heading}\n {help}\n <TextInput\n accessibilityLabel={label}\n {...(field.description ? { accessibilityHint: field.description } : {})}\n editable={!disabled}\n value={typeof value === \"string\" ? value : \"\"}\n onChangeText={(text) => onChange(text || undefined)}\n multiline={long}\n autoCapitalize={format === \"email\" || format === \"uri\" ? \"none\" : \"sentences\"}\n autoCorrect={!format}\n keyboardType={\n numeric\n ? field.type === \"integer\"\n ? \"number-pad\"\n : \"decimal-pad\"\n : format === \"email\"\n ? \"email-address\"\n : format === \"uri\"\n ? \"url\"\n : \"default\"\n }\n placeholder={\n format === \"date\" ? \"YYYY-MM-DD\" : format === \"date-time\" ? \"YYYY-MM-DD HH:MM\" : undefined\n }\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c.fg,\n minHeight: long ? 64 : 36,\n paddingHorizontal: 8,\n paddingVertical: 6,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: c[\"surface-1\"],\n ...(long ? { textAlignVertical: \"top\" as const } : {}),\n }}\n />\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 mcpElicitationKind,\n type McpElicitationAnswer,\n} from \"@opengeni/contracts/mcp-elicitation-model\";\nimport {\n approvalAnswerLabels,\n approvalArgumentsText,\n approvalToolName,\n formatApprovalToolName,\n pendingApprovalReview,\n reviewFacts,\n} from \"@opengeni/react/approval-review-model\";\nimport {\n answersFromDrafts,\n defaultHumanInputFormMessages,\n mergeHumanInputFormMessages,\n emptyDraft,\n humanInputAgentMayDecide,\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 ComponentRef,\n type ReactNode,\n} from \"react\";\nimport { createOpenGeniText, useOpenGeniText, type OpenGeniText } from \"@opengeni/react/messages\";\nimport {\n Pressable,\n ScrollView,\n Text,\n TextInput,\n useWindowDimensions,\n View,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport {\n DecisionActions,\n DecisionButton,\n DecisionCard,\n DecisionLink,\n DecisionMark,\n DecisionMeta,\n} from \"./decision-card\";\nimport { Icon } from \"./icon\";\nimport type { NativeMarkdownRenderer } from \"./message-timeline\";\nimport { 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\";\nimport { errorMessage } from \"@opengeni/contracts/values\";\nimport {\n initialMcpQuestionDraft,\n mcpQuestionAnswer,\n McpQuestionFields,\n type McpQuestionDraft,\n} from \"./mcp-question\";\n\n/* ----------------------------------------------------------------------------\n Decision surfaces: the web HumanInputForm (one question at a time, choice\n rows, Something else, Skip / Back / Next / Send) and the approval card, on\n the shared decision card, with the shared drafting and validation rules.\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 /** The conversation's Markdown renderer, so questions read as the web form does. */\n renderMarkdown?: NativeMarkdownRenderer | undefined;\n}\n\nconst HumanInputMessagesContext = createContext<HumanInputFormMessages>(\n defaultHumanInputFormMessages(createOpenGeniText()),\n);\nconst SecretFieldMessagesContext = createContext<SecretFieldMessages>(\n defaultSecretFieldMessages(createOpenGeniText()),\n);\nconst QuestionMarkdownContext = createContext<NativeMarkdownRenderer | undefined>(undefined);\n\n/** Emphasis, code, links, lists or line breaks: text a plain label would show raw. */\nconst MARKDOWN_SYNTAX = /[*_`#[\\]]|https?:\\/\\/|\\n/;\n\n/**\n * Question copy as the web form shows it (inline Markdown, so links and\n * emphasis work). Plain text keeps the card's own type style; only copy that\n * actually carries Markdown goes through the conversation's renderer.\n */\nfunction QuestionText({\n text,\n style,\n tone,\n prefix,\n suffix,\n}: {\n text: string;\n style: TextStyle;\n tone: \"body\" | \"muted\";\n /** Plain lead-in kept outside the Markdown, such as a \"2. \" step number. */\n prefix?: string;\n suffix?: ReactNode;\n}) {\n const render = useContext(QuestionMarkdownContext);\n // Callers build the style inline; keep it stable for the Markdown renderer.\n const styleKey = JSON.stringify(style);\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- keyed on the style's content\n const textStyle = useMemo(() => style, [styleKey]);\n if (!render || !MARKDOWN_SYNTAX.test(text))\n return (\n <Text style={style}>\n {prefix}\n {text}\n {suffix}\n </Text>\n );\n return (\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\" }}>\n {prefix ? <Text style={style}>{prefix}</Text> : null}\n <View style={{ flexShrink: 1, minWidth: 0 }}>{render(text, { tone, textStyle })}</View>\n {suffix ? <Text style={style}>{suffix}</Text> : null}\n </View>\n );\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 renderMarkdown,\n}: HumanInputCardProps) {\n const t = useOpenGeniText();\n const merged = useMemo(\n () => mergeHumanInputFormMessages(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 <QuestionMarkdownContext.Provider value={renderMarkdown}>\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 </QuestionMarkdownContext.Provider>\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 theme = useNativeTimelineTheme();\n const c = theme.colors;\n const t = useOpenGeniText();\n const messages = useContext(HumanInputMessagesContext);\n const secretMessages = useContext(SecretFieldMessagesContext);\n const questions = request.questions;\n const total = questions.length;\n // Several questions are asked one at a time; every step stays mounted so\n // drafts and typed secrets survive moving back and forth.\n const [step, setStep] = useState(0);\n const current = Math.min(step, total - 1);\n const last = current === total - 1;\n const heading = humanInputHeading([questions[current]!], messages);\n const [drafts, setDrafts] = useState<Record<string, HumanInputAnswerDraft>>(() =>\n initialDrafts(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 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(errorMessage(cause));\n } finally {\n setInFlight(false);\n }\n };\n const validate = (subset: HumanInputQuestion[]) => {\n const result = answersFromDrafts(\n t,\n subset.filter((question) => !isSecretQuestion(question)),\n drafts,\n messages,\n );\n const secret = secretSubmission(subset, secretDrafts, secretValues.current, messages.required);\n return { result, secret, errors: { ...result.errors, ...secret.errors } };\n };\n const next = () => {\n const { errors: stepErrors } = validate([questions[current]!]);\n setErrors((existing) => ({ ...existing, ...stepErrors }));\n if (Object.keys(stepErrors).length === 0) setStep(current + 1);\n };\n const send = () => {\n const { result, secret, errors: nextErrors } = validate(questions);\n setErrors(nextErrors);\n const firstInvalid = questions.findIndex((question) => question.id in nextErrors);\n if (firstInvalid >= 0) {\n // Show the step that needs attention.\n setStep(firstInvalid);\n return;\n }\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: questions.flatMap((question) => byQuestion.get(question.id) ?? []),\n ...(secret.secretAnswers.length > 0 ? { secretAnswers: secret.secretAnswers } : {}),\n });\n };\n // The agent asked for a yes/no decision in its own words: two buttons, the\n // action first and the way out second.\n const confirm = confirmDecision(questions);\n const [choice, setChoice] = useState<string | null>(null);\n const decide = (optionId: string) => {\n if (!confirm) return;\n setChoice(optionId);\n void submit({\n outcome: \"answered\",\n answers: [{ questionId: confirm.question.id, values: [optionId] }],\n });\n };\n // Editing a question clears its validation message, as on web.\n const clearError = (id: string) =>\n setErrors((existing) => {\n if (!(id in existing)) return existing;\n const remaining = { ...existing };\n delete remaining[id];\n return remaining;\n });\n const update = (id: string, change: (draft: HumanInputAnswerDraft) => HumanInputAnswerDraft) => {\n setDrafts((existing) => ({\n ...existing,\n [id]: change(existing[id] ?? emptyDraft()),\n }));\n clearError(id);\n };\n const updateSecret = (\n question: HumanInputQuestion,\n change: (draft: SecretDraft) => SecretDraft,\n ) => {\n setSecretDrafts((existing) => ({\n ...existing,\n [question.id]: change(existing[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 const meta = [\n total > 1 ? t(\"humanInputForm.questionOfTotal\", { current: current + 1, total }) : null,\n progressLabel,\n ];\n const failure = submitError ?? error;\n\n return (\n <DecisionCard>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n paddingHorizontal: 16,\n paddingTop: 16,\n paddingBottom: collapsed ? 16 : 4,\n }}\n >\n <DecisionMark icon=\"message-circle-question\" />\n <View style={{ flex: 1, minWidth: 0, paddingTop: 1 }}>\n <QuestionText\n text={heading.title}\n tone=\"body\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 22,\n color: c.fg,\n }}\n />\n {heading.description && !collapsed ? (\n <QuestionText\n text={heading.description}\n tone=\"muted\"\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.base,\n lineHeight: 19,\n color: c[\"fg-muted\"],\n }}\n />\n ) : null}\n <DecisionMeta waiting parts={meta} />\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={collapsed ? messages.expand : messages.collapse}\n onPress={() => setCollapsed((value) => !value)}\n hitSlop={6}\n style={{\n width: 32,\n height: 32,\n marginRight: -6,\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 <View\n style={{\n paddingHorizontal: 16,\n paddingTop: 12,\n paddingBottom: 16,\n gap: 16,\n }}\n >\n {confirm\n ? confirm.options.map((option) =>\n option.description ? (\n <Text\n key={option.id}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.base,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n }}\n >\n <Text style={{ ...fontStyle(theme, 500), color: c.fg }}>{option.label}</Text>\n {\" \\u00b7 \"}\n {option.description}\n </Text>\n ) : null,\n )\n : null}\n {questions.map((question, index) => (\n <View\n key={question.id}\n style={index === current && !confirm ? null : { display: \"none\" }}\n >\n <QuestionControls\n question={question}\n draft={drafts[question.id] ?? emptyDraft()}\n error={isSecretQuestion(question) ? undefined : errors[question.id]}\n disabled={busy}\n onChange={(change) => update(question.id, change)}\n >\n {isSecretQuestion(question) ? (\n <SecretQuestionField\n question={question}\n draft={secretDrafts[question.id] ?? initialSecretDraft(question.secret)}\n onDraft={(change) => updateSecret(question, change)}\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 </View>\n ))}\n {failure ? (\n <Text\n accessibilityRole=\"alert\"\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"status-failed\"],\n }}\n >\n {failure}\n </Text>\n ) : null}\n <DecisionActions\n primary={\n confirm ? (\n <DecisionButton\n kind=\"primary\"\n label={confirm.accept.label}\n busy={busy && choice === confirm.accept.id}\n disabled={busy}\n onPress={() => decide(confirm.accept.id)}\n />\n ) : (\n <DecisionButton\n kind=\"primary\"\n label={\n !last\n ? t(\"humanInputForm.next\")\n : busy\n ? messages.submitting\n : total === 1\n ? (messages.submitOne ?? messages.submit)\n : messages.submit\n }\n busy={last && busy}\n disabled={busy}\n onPress={last ? send : next}\n />\n )\n }\n secondary={\n confirm ? (\n <DecisionButton\n label={confirm.decline.label}\n busy={busy && choice === confirm.decline.id}\n disabled={busy}\n onPress={() => decide(confirm.decline.id)}\n />\n ) : current > 0 ? (\n <DecisionButton\n label={t(\"humanInputForm.back\")}\n disabled={busy}\n onPress={() => setStep(current - 1)}\n />\n ) : undefined\n }\n lead={\n humanInputAgentMayDecide(request) ? (\n <DecisionLink\n label={messages.letAgentDecide ?? t(\"humanInputModel.letTheAgentDecide\")}\n disabled={busy}\n onPress={() =>\n void submit({\n outcome: \"skipped\",\n agentDecides: true,\n } as SubmitHumanInputResponseRequest)\n }\n />\n ) : request.allowSkip ? (\n <DecisionLink\n label={messages.skip}\n disabled={busy}\n onPress={() =>\n void submit({\n outcome: \"skipped\",\n } as SubmitHumanInputResponseRequest)\n }\n />\n ) : null\n }\n />\n </View>\n )}\n </DecisionCard>\n );\n}\n\n/** An agent-marked yes/no decision: one single-choice question with two options. */\nfunction confirmDecision(questions: readonly HumanInputQuestion[]): {\n question: HumanInputQuestion;\n options: HumanInputQuestion[\"options\"];\n accept: HumanInputQuestion[\"options\"][number];\n decline: HumanInputQuestion[\"options\"][number];\n} | null {\n const question = questions.length === 1 ? questions[0]! : null;\n if (\n !question ||\n question.confirm !== true ||\n question.kind !== \"single_select\" ||\n question.skillReview ||\n question.options.length !== 2\n )\n return null;\n return {\n question,\n options: question.options,\n accept: question.options[0]!,\n decline: question.options[1]!,\n };\n}\n\nfunction QuestionControls({\n question,\n draft,\n error,\n disabled,\n onChange,\n children,\n}: {\n question: HumanInputQuestion;\n draft: HumanInputAnswerDraft;\n error?: string | undefined;\n disabled: boolean;\n onChange: (change: (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 c = theme.colors;\n const messages = useContext(HumanInputMessagesContext);\n const m = useNativeTimelineMessages();\n const otherInput = useRef<ComponentRef<typeof TextInput>>(null);\n const multi = question.kind === \"multi_select\";\n const toggle = (value: string) =>\n onChange((existing) => {\n if (!multi) return { ...existing, values: [value], otherSelected: false };\n const has = existing.values.includes(value);\n return {\n ...existing,\n values: has\n ? existing.values.filter((entry) => entry !== value)\n : [...existing.values, value],\n };\n });\n const chooseOther = () =>\n onChange((existing) =>\n multi\n ? { ...existing, otherSelected: true }\n : { ...existing, values: [], otherSelected: true },\n );\n const hint = multi\n ? messages.selectionHint(question.validation?.minSelections, question.validation?.maxSelections)\n : null;\n const secondary: TextStyle = {\n ...fontStyle(theme),\n fontSize: theme.size.base,\n lineHeight: 19,\n color: c[\"fg-muted\"],\n };\n // The heading already shows the help unless a label took the title.\n const help = question.helpText && question.label ? question.helpText : null;\n const row = (selected: boolean): ViewStyle => ({\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n minHeight: 48,\n // A chosen row's border is one point heavier; the padding keeps its content still.\n paddingHorizontal: selected ? 13 : 14,\n paddingVertical: selected ? 11 : 12,\n borderRadius: theme.radius.md,\n borderWidth: selected ? 2 : 1,\n borderColor: selected ? withAlpha(c.fg, 0.85) : c.border,\n backgroundColor: selected ? withAlpha(c.fg, 0.035) : c[\"surface-1\"],\n });\n return (\n <View style={{ gap: 10 }}>\n {help ? <QuestionText text={help} tone=\"muted\" style={secondary} /> : null}\n {hint ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c[\"fg-muted\"],\n }}\n >\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((existing) => ({ ...existing, values: [text] }))}\n placeholder={m.typeYourAnswer}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{\n ...fontStyle(theme),\n // 16pt: smaller text makes iOS zoom into the field.\n fontSize: 16,\n lineHeight: 22,\n color: c.fg,\n minHeight: 96,\n paddingHorizontal: 14,\n paddingTop: 12,\n paddingBottom: 12,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: error ? c[\"status-failed\"] : c.border,\n backgroundColor: c[\"surface-1\"],\n textAlignVertical: \"top\",\n }}\n />\n ) : (\n <View style={{ gap: 8 }}>\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 accessibilityLabel={option.label}\n disabled={disabled}\n onPress={() => toggle(option.id)}\n style={({ pressed }) => [row(selected), pressed ? { opacity: 0.85 } : null]}\n >\n <Selector multi={multi} selected={selected} />\n <View style={{ flex: 1, minWidth: 0, gap: 2 }}>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.md,\n lineHeight: 21,\n color: c.fg,\n }}\n >\n {option.label}\n </Text>\n {option.recommended ? (\n <View\n style={{\n alignSelf: \"flex-start\",\n marginTop: 2,\n paddingHorizontal: 8,\n paddingVertical: 1,\n borderRadius: 999,\n backgroundColor: c[\"accent-soft\"],\n }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"accent-strong\"],\n }}\n >\n {t(\"humanInputForm.recommended\")}\n </Text>\n </View>\n ) : null}\n {option.description ? (\n <QuestionText text={option.description} tone=\"muted\" style={secondary} />\n ) : null}\n {option.preview ? (\n <ScrollView\n nestedScrollEnabled\n style={{\n marginTop: 6,\n maxHeight: 160,\n borderRadius: theme.radius.md,\n backgroundColor: withAlpha(c.fg, 0.04),\n }}\n contentContainerStyle={{ paddingHorizontal: 10, paddingVertical: 8 }}\n >\n <Text\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c.fg,\n }}\n >\n {option.preview}\n </Text>\n </ScrollView>\n ) : null}\n </View>\n </Pressable>\n );\n })}\n {question.allowOther ? (\n <Pressable\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityState={{ checked: draft.otherSelected, disabled }}\n accessibilityLabel={messages.other}\n disabled={disabled}\n onPress={() => {\n chooseOther();\n otherInput.current?.focus();\n }}\n style={[row(draft.otherSelected), { alignItems: \"center\", paddingVertical: 0 }]}\n >\n <Selector multi={multi} selected={draft.otherSelected} />\n <TextInput\n ref={otherInput}\n accessibilityLabel={t(\"native.timeline.decisions.otherAnswerForLabel\", {\n label: question.label ?? question.prompt,\n })}\n editable={!disabled}\n value={draft.other}\n onFocus={chooseOther}\n onChangeText={(text) => onChange((existing) => ({ ...existing, other: text }))}\n placeholder={t(\"humanInputForm.somethingElse\")}\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{\n ...fontStyle(theme),\n flex: 1,\n minHeight: 46,\n fontSize: 16,\n color: c.fg,\n paddingVertical: 10,\n }}\n />\n </Pressable>\n ) : null}\n </View>\n )}\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c[\"status-failed\"],\n }}\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 readable name, the card's title when the runtime gives none. */\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) => formatApprovalToolName(t, name),\n});\n\nexport interface ApprovalStripProps {\n approvals: PendingApproval[];\n /**\n * `answer` is present when approving answers its MCP server's question\n * (`approval.elicitation`): the answers and the round they answer. Send\n * both with the decision.\n */\n onDecide: (\n approvalId: string,\n decision: \"approve\" | \"reject\",\n answer?: McpElicitationAnswer,\n ) => void | Promise<void>;\n messages?: Partial<ApprovalStripMessages> | undefined;\n}\n\n/**\n * The live decision strip: one readable review card per pending tool approval,\n * as the web approval surface shows it. An app action (a setting changed\n * through chat) reads as a plain question answered with Allow or Cancel; the\n * raw arguments stay behind Details. A call its MCP server paused to ask\n * something shows that question and its form instead.\n */\n/**\n * The scrolling part of an approval card. When the review is taller than its\n * window, the scroll bar shows once (and stays on Android), so a person can see\n * there is more to read before approving.\n */\nfunction ReviewBody({ maxHeight, children }: { maxHeight: number; children: ReactNode }) {\n const scroll = useRef<ComponentRef<typeof ScrollView>>(null);\n const flashed = useRef(false);\n return (\n <ScrollView\n ref={scroll}\n style={{ maxHeight, flexGrow: 0 }}\n contentContainerStyle={{ gap: 12 }}\n nestedScrollEnabled\n persistentScrollbar\n onContentSizeChange={(_width, contentHeight) => {\n if (flashed.current || contentHeight <= maxHeight) return;\n flashed.current = true;\n scroll.current?.flashScrollIndicators();\n }}\n >\n {children}\n </ScrollView>\n );\n}\n\nexport function ApprovalStrip({ approvals, onDecide, messages: overrides }: ApprovalStripProps) {\n const t = useOpenGeniText();\n const messages = { ...defaultApprovalStripMessages(t), ...overrides };\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const { height } = useWindowDimensions();\n const [pending, setPending] = useState<Record<string, \"approve\" | \"reject\">>({});\n const [settled, setSettled] = useState<Record<string, \"approve\" | \"reject\">>({});\n const [details, setDetails] = useState<Record<string, boolean>>({});\n // Answers in progress, each tied to the question it answers: a server that\n // asks again on the same call starts a fresh answer and a live card.\n const [answers, setAnswers] = useState<\n Record<string, { question: string; draft: McpQuestionDraft; problem: string | null }>\n >({});\n // Taps land before the busy state re-renders: one request per card, however fast.\n const inFlight = useRef(new Set<string>());\n if (approvals.length === 0) return null;\n const decide = async (\n id: string,\n decision: \"approve\" | \"reject\",\n answer?: McpElicitationAnswer,\n key = id,\n ) => {\n if (inFlight.current.has(key)) return;\n inFlight.current.add(key);\n setPending((current) => ({ ...current, [key]: decision }));\n try {\n await (answer ? onDecide(id, decision, answer) : onDecide(id, decision));\n setSettled((current) => ({ ...current, [key]: decision }));\n } finally {\n inFlight.current.delete(key);\n setPending((current) => {\n const next = { ...current };\n delete next[key];\n return next;\n });\n }\n };\n const small = {\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n };\n const body = {\n ...fontStyle(theme),\n fontSize: theme.size.base,\n lineHeight: 20,\n };\n const bodyMaxHeight = Math.max(120, Math.round(height * 0.5 - 200));\n return (\n <ScrollView\n // The cards float above the composer and take at most about 60% of the\n // screen; several pending approvals scroll as a list within that.\n style={{ maxHeight: Math.max(320, Math.round(height * 0.6)) }}\n contentContainerStyle={{ gap: 12 }}\n nestedScrollEnabled\n >\n {approvals.map((approval) => {\n const question = approval.elicitation ? JSON.stringify(approval.elicitation) : null;\n const key = question ? `${approval.id}:${question}` : approval.id;\n const busy = Boolean(pending[key]) || Boolean(settled[key]);\n const toolName = approvalToolName(approval);\n const answer = approvalAnswerLabels(t, toolName);\n const review = pendingApprovalReview(approval, {\n formatToolName: messages.formatToolName,\n approveLabel: answer?.approve ?? messages.approve,\n });\n const facts = reviewFacts(review);\n const note = review.consequence;\n // A request without recorded arguments keeps its Approve, as it\n // always had here; only the readable summary is unavailable.\n const canApprove =\n review.availableActions.includes(\"approve\") || approval.arguments === undefined;\n const showDetails = details[approval.id] === true;\n const payload = showDetails ? approvalArgumentsText(approval) : \"\";\n const approveLabel = answer?.approve ?? messages.approve;\n const rejectLabel = answer?.reject ?? messages.reject;\n const answering =\n approval.elicitation && question\n ? (() => {\n const elicitation = approval.elicitation;\n const entry = answers[approval.id];\n const current =\n entry?.question === question\n ? entry\n : { question, draft: initialMcpQuestionDraft(elicitation), problem: null };\n return {\n elicitation,\n ...current,\n kind: mcpElicitationKind(elicitation),\n update: (draft: McpQuestionDraft, problem: string | null = null) =>\n setAnswers((all) => ({ ...all, [approval.id]: { question, draft, problem } })),\n };\n })()\n : null;\n const send = () => {\n if (!answering) return void decide(approval.id, \"approve\");\n const resolved = mcpQuestionAnswer(answering.elicitation, answering.draft);\n if (!resolved.ok) return answering.update(answering.draft, resolved.problem);\n answering.update(answering.draft);\n void decide(\n approval.id,\n \"approve\",\n { content: resolved.content, elicitationRound: answering.elicitation.round },\n key,\n );\n };\n return (\n <DecisionCard key={approval.id} accessibilityLabel={review.title}>\n <View style={{ padding: 16, gap: 12 }}>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n }}\n >\n <DecisionMark icon={answering ? \"message-circle-question\" : \"shield-check\"} />\n <View style={{ flex: 1, minWidth: 0, paddingTop: 1 }}>\n <Text\n accessibilityRole=\"header\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 22,\n color: c.fg,\n }}\n >\n {review.title}\n </Text>\n <DecisionMeta\n waiting\n parts={[\n answering\n ? t(\"approvalSurface.serverAsks\", { server: answering.elicitation.server })\n : t(\"toolActionReview.approvalNeeded\"),\n review.accountLabel,\n ]}\n />\n </View>\n </View>\n {/* The title and the buttons stay pinned; a long review scrolls\n between them so the buttons are never pushed off screen. */}\n <ReviewBody maxHeight={bodyMaxHeight}>\n {answering ? (\n <>\n <McpQuestionFields\n elicitation={answering.elicitation}\n draft={answering.draft}\n disabled={busy}\n onChange={(requestId, name, value) =>\n answering.update({\n ...answering.draft,\n [requestId]: { ...answering.draft[requestId], [name]: value },\n })\n }\n />\n {answering.problem ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...small, color: c[\"status-failed\"] }}\n >\n {answering.problem}\n </Text>\n ) : null}\n </>\n ) : null}\n {note && !answering ? (\n <Text style={{ ...body, color: c[\"fg-muted\"] }}>{note}</Text>\n ) : null}\n {facts.effects.length > 0 && !answering ? (\n <View accessibilityLabel={t(\"toolActionReview.alsoChanges\")} style={{ gap: 2 }}>\n {facts.effects.map((effect) => (\n <Text key={effect} style={{ ...body, color: c.fg }}>\n {\"\\u2022 \"}\n {effect}\n </Text>\n ))}\n </View>\n ) : null}\n {facts.shown.length > 0 && !answering ? (\n <View\n style={{\n gap: 10,\n padding: 12,\n borderRadius: theme.radius.md,\n backgroundColor: withAlpha(c.fg, 0.035),\n }}\n >\n {facts.shown.map((field) => (\n <View key={field.path} style={{ gap: 1 }}>\n <Text style={{ ...small, color: c[\"fg-muted\"] }}>{field.label}</Text>\n {/* Like the web card: a field reads in full (the body\n scrolls), and only a value cut short by the server is\n clamped, with all of it under Show details. */}\n <Text\n numberOfLines={field.truncated ? 6 : undefined}\n style={{ ...body, color: c.fg }}\n >\n {field.preview}\n </Text>\n </View>\n ))}\n {facts.hiddenFields > 0 ? (\n <Text style={{ ...small, color: c[\"fg-muted\"] }}>\n {facts.hiddenFields === 1\n ? t(\"toolActionReview.n1MoreValue\")\n : t(\"toolActionReview.hiddenfieldsMoreValues\", {\n hiddenFields: facts.hiddenFields,\n })}\n </Text>\n ) : null}\n </View>\n ) : null}\n {!canApprove && !answering ? (\n <Text style={{ ...body, color: c.fg }}>\n {t(\"toolActionReview.theDetailsOfThisOlder\")}\n </Text>\n ) : null}\n {showDetails ? (\n <View\n style={{\n padding: 12,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: withAlpha(c.fg, 0.035),\n }}\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 </View>\n ) : null}\n </ReviewBody>\n <DecisionActions\n style={{ marginTop: 4 }}\n primary={\n canApprove || answering ? (\n <DecisionButton\n kind=\"primary\"\n label={\n settled[key] === \"approve\"\n ? messages.approved\n : answering\n ? answering.kind === \"form\"\n ? t(\"approvalSurface.sendAnswer\")\n : t(\"approvalSurface.allow\")\n : approveLabel\n }\n busy={pending[key] === \"approve\"}\n disabled={busy}\n onPress={send}\n />\n ) : undefined\n }\n secondary={\n <DecisionButton\n label={\n settled[key] === \"reject\"\n ? messages.rejected\n : answering\n ? t(\"approvalSurface.decline\")\n : rejectLabel\n }\n busy={pending[key] === \"reject\"}\n disabled={busy}\n onPress={() => void decide(approval.id, \"reject\", undefined, key)}\n />\n }\n lead={\n review.detailsAvailable ? (\n <DecisionLink\n label={\n showDetails\n ? t(\"approvalSurface.backToReview\")\n : t(\"toolActionReview.details\")\n }\n onPress={() =>\n setDetails((current) => ({\n ...current,\n [approval.id]: !showDetails,\n }))\n }\n />\n ) : null\n }\n />\n </View>\n </DecisionCard>\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 { BAR_MAX_FONT_SCALE, 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 /**\n * A word the person must act on (a sub-agent that failed, is stuck, needs\n * them or is paused). It replaces the last-update time and sets the dot's tone.\n */\n attention?: { word: string; tone: \"failed\" | \"waiting\" } | null | 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 attention,\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 recent = recentSessionStatus(session);\n const status = attention ? { tone: attention.tone, pulse: false } : recent;\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 .concat(attention ? [attention.word] : [])\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, attention ? 500 : 400),\n fontSize: 11,\n lineHeight: 16,\n color: attention\n ? attention.tone === \"failed\"\n ? c[\"status-failed\"]\n : c[\"status-waiting\"]\n : c[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {attention ? attention.word : 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 fullAccess = false,\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 * The session has full access (its agent acts as the person who gave it):\n * a small shield and \"Full access\" on the status line, as on the web header.\n */\n fullAccess?: boolean | 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 const spoken = [title, label, fullAccess ? \"Full access is on\" : undefined]\n .filter(Boolean)\n .join(\", \");\n return (\n <View\n accessible\n accessibilityRole=\"header\"\n accessibilityLabel={spoken}\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 maxFontSizeMultiplier={BAR_MAX_FONT_SCALE}\n style={{ ...fontStyle(theme, 600), fontSize: 16, lineHeight: 20, color: c.fg }}\n >\n {title}\n </Text>\n {(presentation && label) || fullAccess ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 5, marginTop: 1 }}>\n {presentation && label ? (\n <>\n <StatusDot tone={presentation.tone} pulse={presentation.pulse} size={6} />\n <Text\n numberOfLines={1}\n maxFontSizeMultiplier={BAR_MAX_FONT_SCALE}\n style={{\n ...fontStyle(theme, 500),\n fontSize: 12,\n lineHeight: 15,\n flexShrink: 1,\n color: emphasized ? c[TONE_COLOR[presentation.tone]] : c[\"fg-muted\"],\n }}\n >\n {label}\n </Text>\n </>\n ) : null}\n {fullAccess ? (\n <View\n testID=\"session-full-access-badge\"\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 3,\n marginLeft: presentation && label ? 3 : 0,\n }}\n >\n <Icon name=\"shield-check\" size={11} color={c[\"status-waiting\"]} />\n <Text\n numberOfLines={1}\n maxFontSizeMultiplier={BAR_MAX_FONT_SCALE}\n style={{\n ...fontStyle(theme, 500),\n fontSize: 12,\n lineHeight: 15,\n color: c[\"fg-muted\"],\n }}\n >\n Full access\n </Text>\n </View>\n ) : null}\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 {\n sessionAgentAttention,\n sessionAgentsSignal,\n sessionGoalStateLabel,\n} 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 {/* Newest first, as the server lists them and the sidebar orders chats. */}\n {props.agents.map((node) => (\n <AgentNode\n key={node.session.id}\n node={node}\n models={props.models ?? []}\n onOpen={(sessionId) => {\n close();\n props.onOpenSession?.(sessionId);\n }}\n />\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\n/**\n * One sub-agent, as the web agents panel lists it: its status, title, model and\n * last update, or the word to act on (Needs you · 10h, Failed, Stuck, Paused).\n * Its own agents fold under it behind a count, one level deep like the web.\n */\nfunction AgentNode(props: {\n node: LineageNode;\n models: readonly ClientModel[];\n onOpen: (sessionId: string) => void;\n nested?: boolean | undefined;\n}) {\n const t = useOpenGeniText();\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const [expanded, setExpanded] = useState(false);\n const { session, children } = props.node;\n const paused = session.status !== \"cancelled\" && session.effectiveControl.state !== \"active\";\n const attention = sessionAgentAttention(t, session, paused);\n const count = children.length;\n return (\n <View style={props.nested ? { paddingLeft: 18 } : undefined}>\n <SessionRow\n session={session}\n models={props.models}\n attention={attention}\n onPress={() => props.onOpen(session.id)}\n />\n {count > 0 && !props.nested ? (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded }}\n accessibilityLabel={t(\"counts.agents\", { count })}\n onPress={() => setExpanded((value) => !value)}\n hitSlop={{ top: 6, bottom: 6 }}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 4,\n alignSelf: \"flex-start\",\n marginLeft: 24,\n marginBottom: 6,\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: theme.radius.md,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <Icon\n name={expanded ? \"chevron-down\" : \"chevron-right\"}\n size={12}\n color={c[\"fg-subtle\"]}\n />\n <Text style={{ ...fontStyle(theme, 500), fontSize: 12, color: c[\"fg-muted\"] }}>\n {t(\"counts.agents\", { count })}\n </Text>\n </Pressable>\n {expanded\n ? children.map((child) => (\n <AgentNode\n key={child.session.id}\n node={child}\n models={props.models}\n onOpen={props.onOpen}\n nested\n />\n ))\n : null}\n </>\n ) : null}\n </View>\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 approvalsDecidable,\n conversationTimeline,\n personalMachineCopy,\n sessionAdmissionApprovedElsewhereCopy,\n sessionAdmissionCopy,\n useSessionStart,\n useSessionStartupTimeline,\n type PendingPrompt,\n type AgentMessageItem,\n type AuthNeededItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport { machineDisplayName } from \"@opengeni/react/sandbox-label-model\";\nimport {\n Component,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ErrorInfo,\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 { useNativeInChatConnect, type NativeInChatConnectOptions } from \"./in-chat-connect\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport { useNativeTimelineMessages } from \"./messages\";\nimport { SingleSendWording, useOpenGeniText } from \"@opengeni/react/messages\";\nimport {\n InteractiveAnswerProvider,\n type InteractiveAnswerStore,\n} from \"@opengeni/react/interactive-answer-model\";\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 /** The submitted first message, until its durable history is available. */\n pendingPrompt?: PendingPrompt | null | undefined;\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 /**\n * Let people finish an agent's \"connect your account\" request in the chat,\n * with the web conversation's cards: sign-in opens the system sign-in\n * browser and comes back to the app, keys go into the secure field, and the\n * agent continues once setup is done. Needs `client`; omit to show the\n * request as a row.\n */\n inChatConnect?: NativeInChatConnectOptions | 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 * Where interactive answers (`opengeni-ui`) remember picks, filters and\n * whether a pick was sent, for example AsyncStorage. Without it they are\n * remembered until the app closes.\n */\n answerStore?: InteractiveAnswerStore | 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 inChatConnect,\n models,\n timelineMessages,\n renderComposer,\n renderMessageActions: hostMessageActions,\n answerStore,\n ...timelineProps\n}: NativeSessionScreenProps) {\n const status = controller.sessionStatus;\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 <InteractiveAnswerProvider\n // A pick goes out as the person's next message, through the ordinary Send.\n send={controller.composer.send}\n scope={controller.sessionId}\n store={answerStore}\n // Like the web: only a cancelled session can't take another message.\n readOnly={status === \"cancelled\"}\n >\n <NativeTimelineMessagesProvider messages={timelineMessages}>\n <SessionScreenBoundary sessionId={controller.sessionId}>\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 inChatConnect={inChatConnect}\n models={models}\n renderComposer={renderComposer}\n renderMessageActions={hostMessageActions}\n {...timelineProps}\n />\n </SessionScreenBoundary>\n </NativeTimelineMessagesProvider>\n </InteractiveAnswerProvider>\n </SingleSendWording>\n );\n}\n\n/**\n * One chat must never take the app down. In a release build React Native\n * turns an uncaught render error into a fatal crash, so a failure while\n * drawing this conversation shows the load-failure state with Try again\n * instead, and the rest of the app keeps working.\n */\nclass SessionScreenBoundary extends Component<\n { sessionId: string; children: ReactNode },\n { error: Error | null; sessionId: string }\n> {\n override state: { error: Error | null; sessionId: string } = {\n error: null,\n sessionId: this.props.sessionId,\n };\n\n static getDerivedStateFromError(error: unknown): { error: Error } {\n return { error: error instanceof Error ? error : new Error(String(error)) };\n }\n\n static getDerivedStateFromProps(\n props: { sessionId: string },\n state: { error: Error | null; sessionId: string },\n ): { error: Error | null; sessionId: string } | null {\n // Another chat starts clean.\n return props.sessionId === state.sessionId ? null : { error: null, sessionId: props.sessionId };\n }\n\n override componentDidCatch(error: Error, info: ErrorInfo): void {\n console.error(\"Opengeni session screen failed to render\", error, info.componentStack);\n }\n\n override render(): ReactNode {\n if (!this.state.error) return this.props.children;\n return (\n <LoadFailure\n message={this.state.error.message}\n onRetry={() => this.setState({ error: null })}\n />\n );\n }\n}\n\nfunction SessionScreenBody({\n controller,\n pendingPrompt,\n composer: composerSlots,\n trailing,\n topBar,\n bottomInset,\n keyboardBottomOffset,\n feedback,\n humanInputMessages,\n approvalMessages,\n client,\n inChatConnect,\n models,\n renderComposer,\n renderMessageActions: hostMessageActions,\n ...timelineProps\n}: Omit<NativeSessionScreenProps, \"timelineMessages\" | \"answerStore\">) {\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 conversation = useMemo(\n () => conversationTimeline(controller.timeline, queue, composer),\n [controller.timeline, queue, composer],\n );\n const items = useSessionStartupTimeline(conversation, {\n session: controller.session.session,\n events: controller.events,\n optimisticMessages: composer.optimisticMessages,\n hasNewer: false,\n queue: queue.snapshot,\n pendingPrompt,\n historyReady: controller.initialHistoryReady ?? !controller.initialLoading,\n });\n const stockAuthNeeded = useNativeInChatConnect({\n client,\n workspaceId: controller.workspaceId,\n sessionId: controller.sessionId,\n items,\n options: inChatConnect,\n });\n const hostAuthNeeded = timelineProps.renderAuthNeeded;\n const renderAuthNeeded = useCallback(\n (item: AuthNeededItem) => hostAuthNeeded?.(item) ?? stockAuthNeeded?.(item),\n [hostAuthNeeded, stockAuthNeeded],\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 renderAuthNeeded={renderAuthNeeded}\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 client={controller.client}\n workspaceId={controller.workspaceId}\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 renderMarkdown={timelineProps.renderMarkdown}\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 {/* The pause's other approvals stay up while a decision resumes the turn. */}\n {approvals.length > 0 && approvalsDecidable(status) ? (\n <ApprovalStrip\n approvals={approvals}\n messages={approvalMessages}\n onDecide={(id, decision, answer) =>\n (decision === \"approve\"\n ? control.approve(id, undefined, answer)\n : control.reject(id)\n ).then(() => undefined)\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 client,\n workspaceId,\n busy,\n onSessionChanged,\n}: {\n session: Session;\n client: OpenGeniNativeSessionController[\"client\"];\n workspaceId: string;\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, client, workspaceId });\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 // The person's own saved message was approved for another of their\n // machines: name it and offer to run it there; a recheck can't help here.\n const approvedTarget = start.approvedMachines[0] ?? null;\n const approved =\n !machine && start.approvedElsewhere && start.machineAccess\n ? sessionAdmissionApprovedElsewhereCopy(t, start.machineAccess, approvedTarget)\n : null;\n const runOnApprovedMachine = start.runOnApprovedMachine;\n // The web notice's words for the known refusal; the native stuck copy when\n // the block is only known from its status event.\n const copy = reason ? sessionAdmissionCopy(t, reason) : null;\n const tone = approved ? c[\"status-waiting\"] : c[\"status-failed\"];\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(tone, 0.3),\n backgroundColor: withAlpha(tone, 0.08),\n }}\n >\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 8 }}>\n <Icon name={approved ? \"clock-3\" : \"circle-alert\"} size={16} color={tone} />\n <Text style={{ ...fontStyle(theme, 600), fontSize: 15, color: c.fg, flexShrink: 1 }}>\n {machine\n ? t(\"sessionAdmission.needsDifferentMachineTitle\")\n : (approved?.title ?? copy?.title ?? m.stuckTitle)}\n </Text>\n </View>\n {approved ? (\n <>\n <Text style={textStyle}>{approved.body}</Text>\n <Text style={textStyle}>{approved.next}</Text>\n {session.effectiveControl.state === \"paused\" ? (\n <Text style={textStyle}>{t(\"sessionAdmission.pausedNote\")}</Text>\n ) : approved.action && approvedTarget && runOnApprovedMachine ? (\n <Button\n label={rechecking ? t(\"sessionAdmission.moving\") : approved.action}\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 setMoveError(null);\n runOnApprovedMachine(approvedTarget.sandboxId)\n .then(setMoveError, () => setFailed(true))\n .finally(() => {\n recheckPending.current = false;\n setRechecking(false);\n });\n }}\n />\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 ) : 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 ) : copy ? (\n <>\n <Text style={textStyle}>{copy.body}</Text>\n <Text style={textStyle}>{copy.next}</Text>\n </>\n ) : (\n <Text style={textStyle}>{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 || approved ? 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 serverQuestion: item.serverQuestion ?? null,\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 // An MCP server's question is an approval of its call, but reads as a question.\n if (item.kind === \"approval\" && item.serverQuestion) return \"message-circle-question\";\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 // An MCP server's confirmation is answered for the question shown.\n ...(decision === \"approve\" && item.serverQuestion\n ? { elicitationRound: item.serverQuestion.round }\n : {}),\n });\n leave(item);\n onNotice?.(\n decision === \"reject\"\n ? t(\"native.timeline.inbox.denied\")\n : item.serverQuestion\n ? t(\"native.timeline.inbox.allowed\")\n : t(\"native.timeline.inbox.approved\"),\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 === \"approval\" && item.serverQuestion) {\n parts.push(t(\"native.timeline.inbox.serverAsks\", { server: item.serverQuestion.server }));\n }\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 // An approval's title says what it does; its body says where (\"Gmail\").\n // A server question's meta already says who asks.\n if (item.kind === \"approval\" && !item.serverQuestion) {\n parts.push(item.body || t(\"native.timeline.inbox.approval\"));\n }\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\" && item.serverQuestion) {\n // A plain confirmation is answered here; fields are filled in the session.\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 {item.serverQuestion.kind === \"confirm\" ? (\n <Button\n label={\n pending === \"approve\"\n ? t(\"native.timeline.inbox.allowing\")\n : t(\"native.timeline.inbox.allow\")\n }\n icon=\"check\"\n disabled={Boolean(pending)}\n onPress={() => decide(item, \"approve\")}\n />\n ) : (\n <Button\n label={t(\"native.timeline.inbox.answer\")}\n disabled={Boolean(pending)}\n onPress={() => onOpenSession(item)}\n />\n )}\n </>\n );\n }\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.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"]}
|